Автор |
Сообщение |
Sandro_wizard
Неизвестный
Пришел: 30.01.2007
Сообщения: 0
|
Добавлено: 27 декабря 2009, 03:54 |
|
|
Привет всем.
Решил геноцидом побаловаться - очень интересно вдруг стало.
Так вот, такой вопрос - а есть ли чит, утилита или что-нить типа того, чтобы враги отмечались на карте?
А то директива "зачистить карту" звучит уж слишком жестко с точки зрения своего свободного времени))
|
|
|
Снайпер
Зеленый гипатский зануда
Пришел: 18.01.2004
Сообщения: 3420
Откуда: Кызыл
|
Добавлено: 27 декабря 2009, 04:02 |
|
|
Я как-то писал HAS'у простенький скриптик, который фальшивыми молниями указывал направления ко всем врагам Только щас не найду "в крации" это выглядит так: берёте MobSurgeon, копируете любой квестовый моб, в скрипте пишете цикл по всем живым юнитам карты кроме нулевого игрока и CreateLightning от игрока до них А потом просто ходите и мочите _________________ Я желаю всем счастья!
|
|
|
Sandro_wizard
Неизвестный
Пришел: 30.01.2007
Сообщения: 0
|
Добавлено: 27 декабря 2009, 04:33 |
|
|
О, тогда я помучаю вопросами)
Раз уж я влез в редактор)
1. Почему любой квестовый моб? Если я хочу, чтобы такая тема была на всех картах первого острова, мне придется ведь взять все квестовые моды первого острова, да?
2. Квестовые - это у которых буква q на конце? И как отличить квесты первого острова?
3. Почему моб квестовый, а не например зональный?
4. Далее, главная субпрога на скриптовом языке называется WorldScript?
5. А где бы вообще адекватные доки по скриптовому языку глянуть?
Если нигде, тогда я по коду еще спрошу)
|
|
|
Монгол
Охотник
Пришел: 26.10.2009
Сообщения: 70
Откуда: Королев
|
Добавлено: 27 декабря 2009, 11:26 |
|
|
Где тут лежали основы скриптов, помню я как то ими пользовался, вот только не помню где...пусть более знающие люди подскажут где)
|
|
|
BaaL
Зайчатник
Пришел: 02.11.2004
Сообщения: 22
|
|
|
BaaL
Зайчатник
Пришел: 02.11.2004
Сообщения: 22
|
Добавлено: 27 декабря 2009, 14:16 |
|
|
Цитата (Снайпер): | ...в скрипте пишете цикл по всем живым юнитам карты кроме нулевого игрока и CreateLightning от игрока до них А потом просто ходите и мочите |
Как это должно выглядеть? Молния бъет во все стороны, где находяться враги? Или из цикла выбирается ближайший?
|
|
|
BaaL
Зайчатник
Пришел: 02.11.2004
Сообщения: 22
|
Добавлено: 27 декабря 2009, 14:33 |
|
|
Еслибы мне нужно было решать такую задачу, я бы создал чистый моб без объектов, только со скриптом и кинул его в папку maps. В скрипте бы создал цикл на основе всех монстров на карте. Это можно сделать если сложить все группы монстров виртуальных игроков:
group GetPlayerUnits ( nPlayer )
Возврашает группу юнитов игрока номер nPlayer.
Можно сложить игроков от 1 до 10 (выше используються редко.)
Дальше чтоб молния указывала на ближайшего монстра (при желании можно сделать так, чтобы указывались только враждебные).
Этот скрипт потом можно запустить из консоли:
@AddMob ( "имя_моба.mob" )
По идее должно работать на ВСЕХ картах, включая мультиплеер
|
|
|
Снайпер
Зеленый гипатский зануда
Пришел: 18.01.2004
Сообщения: 3420
Откуда: Кызыл
|
Добавлено: 27 декабря 2009, 15:14 |
|
|
ВааL, примерно так всё и делается. Сперва создаётся группа G, куда включаются все юниты игрока 1, потом прибавляем к ней игрока 2, и так далее до 31 - AddGroup или как-то так.
Затем в цикле по группе G удаляем из неё юнитов, которые Not IsEnemy для 0-го игрока, но так как условий в циклах ставить нельзя (скрипт просто не будет работать ВООБЩЕ) - придётся оперировать с IDшниками и умножением (Mul) ID юнита на условие - оно является числом 1 или 0.
Затем в новом цикле по группе G создаём ДЛЯ КАЖДОГО КОНКРЕТНО В ДАННЫЙ МОМЕНТ РАССМАТРИВАЕМОГО (на то он и цикл) юнита молнию с нулевым (для простоты удаления) идешником (CreateLightning), которая будет бить из точки GetX(GetLeader()) ; GetY(GetLeader()) в точку GetX(i); GetY(i) - где i Это переборный объект цикла.
Сорри за сумбурное изложение, но думаю в деталях разберётся кому надо? _________________ Я желаю всем счастья!
|
|
|
Sagrer
Убийца троллей
Пришел: 24.12.2001
Сообщения: 3548
Откуда: Курск
|
Добавлено: 27 декабря 2009, 16:11 |
|
|
Цитата: | 5. А где бы вообще адекватные доки по скриптовому языку глянуть? |
персонально для тебя выложил в нашу wiki "справку по скриптингу", оно вообще писалось для новичков GG, но надеюсь не только им окажется полезно. Качать тут http://svn.gipat.org/trac/GGWiki/wiki/Documentation_Tutorials _________________ Мы уйдем без следа, ни имен ни примет.
Этот мир простоит еще тысячи лет.
Нас и раньше здесь не было - после не будет.
Ни ущерба, ни пользы от этого нет. (с) Омар Хайям
|
|
|
BaaL
Зайчатник
Пришел: 02.11.2004
Сообщения: 22
|
Добавлено: 27 декабря 2009, 16:44 |
|
|
Не удержался и написал скрипт под это дело.
Скрипт каждые 2 секунды рисует молнию в направлении ближайшего врага, игнорируя нейтральных и союзных юнитов.
Проверил у себя - все вроде нормально работает.
Цитата: | ...и так далее до 31... |
А почему именно 31? Это максимально возможный номер игрока?
Вот сам скрипт:
Код: |
GlobalVars (
NULL : object,
VSS#i#val : object,
i : object,
NearestEnemy : object,
Distance : float,
AllMonsters : group
)
DeclareScript #CreateGroup#1 ( fStartPl : float , fEndPl : float )
DeclareScript #CreateGroup#2 ( fPlayer : float )
DeclareScript #CreateGroup#3 ( fStartPl : float , fEndPl : float )
DeclareScript #GetNearest#1 ( )
DeclareScript #GetNearest#2 ( this : object )
DeclareScript #Lightning#1 ( )
DeclareScript #Lightning#2 ( )
Script #Lightning#1
(
if
(
)
then
(
KillScript()
Distance = 1000000
#GetNearest#1 ( )
Sleep(30) // update time (2 sec)
DeleteLightning ( 8888 )
#Lightning#2 ( )
)
)
Script #Lightning#2
(
if
(
)
then
(
KillScript()
CreateLightning ( 8888 , GetX(GetUnitOfPlayer(0,0)) , GetY(GetUnitOfPlayer(0,0)) , GetZ(GetUnitOfPlayer(0,0)) , GetX(NearestEnemy) , GetY(NearestEnemy) , GetZ(NearestEnemy) , 5 )
#Lightning#1 ( )
)
)
Script #GetNearest#1
(
if
(
)
then
(
KillScript()
For( VSS#i#val , AllMonsters )
(
#GetNearest#2 ( VSS#i#val )
)
)
)
Script #GetNearest#2
(
if
(
IsLess( DistanceUnitUnit ( GetUnitOfPlayer ( 0 , 0 ) , this ) , Distance )
)
then
(
KillScript()
NearestEnemy = this
Distance = DistanceUnitUnit ( GetUnitOfPlayer ( 0 , 0 ) , this )
)
)
Script #CreateGroup#1
(
if
(
)
then
(
KillScript()
#CreateGroup#2 ( fStartPl )
#CreateGroup#3 ( fStartPl , fEndPl )
)
)
Script #CreateGroup#2
(
if
(
IsLess( GetDiplomacy( 0 , fPlayer ) , 0 ) // Diplomacy -1 (enemy)
)
then
(
KillScript()
AllMonsters = GroupAdd ( AllMonsters , GetPlayerUnits ( fPlayer ) )
)
)
Script #CreateGroup#3
(
if
(
IsLess( fStartPl , Add(fEndPl,1) )
)
then
(
KillScript()
#CreateGroup#1 ( Add(fStartPl,1) , fEndPl )
)
)
WorldScript
(
ConsoleString ( "AllMonsters OK" ) // <--
Sleep( 2 )
#CreateGroup#1 ( 1 , 31 )
Sleep(50)
#Lightning#1 ( )
)
|
|
|
|
BaaL
Зайчатник
Пришел: 02.11.2004
Сообщения: 22
|
|
|
Sandro_wizard
Неизвестный
Пришел: 30.01.2007
Сообщения: 0
|
Добавлено: 27 декабря 2009, 18:02 |
|
|
Обалдеть красавец) И ведь работает же! Спасибо))
И главное - что не сразу ко всем рисуется, а только к ближайшему. Иначе бы тормозило наверное.
Интересно кстати, что сдвигается молния довольно медленно - не поспевая за шагающими.
И еще, пока трупак не подобрал, он все еще считается врагом))
Это, насколько я понимаю, фиксится подцеплением проверки IsAlive в строчку
IsLess( DistanceUnitUnit ( GetUnitOfPlayer ( 0 , 0 ) , this ) , Distance )
Интересно, составные условия поддерживаются...)))
Еще вариант - навесить сюда что-нить типа "рисовать молнии для рядомстоящих врагов", а не только до одного ближайшего. Но это уж детали, здорово помог!)
|
|
|
Sandro_wizard
Неизвестный
Пришел: 30.01.2007
Сообщения: 0
|
Добавлено: 27 декабря 2009, 19:10 |
|
|
Поиграл еще...
Зараза, че-то тормозит даже с одной молнией.
А как моб выгружать нафиг?))
|
|
|
BaaL
Зайчатник
Пришел: 02.11.2004
Сообщения: 22
|
Добавлено: 27 декабря 2009, 19:15 |
|
|
Цитата (Sandro_wizard): | Поиграл еще...
Зараза, че-то тормозит даже с одной молнией.
|
Вроде не должен тормозить. Точнее должен, то только 1 раз, когда группа собираеться. У меня вобще тормозов не было.
Цитата (Sandro_wizard): | А как моб выгружать нафиг?)) |
Помоему достаточно перезайти на карту, чтобы скрипт перестал работать.
|
|
|
Sandro_wizard
Неизвестный
Пришел: 30.01.2007
Сообщения: 0
|
Добавлено: 27 декабря 2009, 19:31 |
|
|
Прикольно)
Значит, если на другую карту выйти, то нет молнии.
А всякий раз, когда сюда возвращаешься - у меня это Пески - то тут она есть...
UPD: Ага, и надпись в консоли All monster Ok есть. Оно как-то подцепилось к зоне и теперь всякий раз с ней загружается.
Скрипт ведь один раз выполняется при входе в зону - это он так удачно у меня прицепился?
А нельзя DeleteLightning в консоли? Или это придется еще один моб писать?
UPD: Тормозов пока нет, это значит я там доигрался с кучей орков и слишком частой сменой молний.
|
|
|
BaaL
Зайчатник
Пришел: 02.11.2004
Сообщения: 22
|
Добавлено: 27 декабря 2009, 19:47 |
|
|
Цитата (Sandro_wizard): | Прикольно)
Значит, если на другую карту выйти, то нет молнии.
А всякий раз, когда сюда возвращаешься - у меня это Пески - то тут она есть...
Оно как-то подцепилось к зоне и теперь всякий раз с ней загружается.
|
Гы Не думал я что оно так прицепится.
Цитата (Sandro_wizard): | А нельзя DeleteLightning в консоли? |
Хм, можно отмену цикла через глобальную переменную замутить.
Например добавить условие:
Код: |
Script #Lightning#2
(
if
(
Not( IsEqual( GSGetVar(0, "CanselCansel" ) , 8888 ) )
)
then
(
KillScript()
CreateLightning ( 8888 , GetX(GetUnitOfPlayer(0,0)) , GetY(GetUnitOfPlayer(0,0)) , GetZ(GetUnitOfPlayer(0,0)) , GetX(NearestEnemy) , GetY(NearestEnemy) , GetZ(NearestEnemy) , 5 )
#Lightning#1 ( )
)
)
|
тогда в консоли можно отменить действие скрипта так:
@GSSetVarMax(0, "CanselCansel" , 8888 )
Как выгрузить приципившейся моб я не знаю
|
|
|
Снайпер
Зеленый гипатский зануда
Пришел: 18.01.2004
Сообщения: 3420
Откуда: Кызыл
|
Добавлено: 27 декабря 2009, 20:12 |
|
|
Всё просто шикарно, однако при попытке внести в скрипт моба любое изменение, оный перестаёт исполняться. Грустно и печально :(
PS:
Цитата: | Гы Не думал я что оно так прицепится. |
Каждый раз при входе в зону выполняются все WorldScript'ы всех подгруженных мобов, соответственно, и торчащая в WorldScript'е приветственная мессага тоже каждый раз будет выводиться. Если её не блокировать переменной, но я в этом смысла не вижу. _________________ Я желаю всем счастья!
|
|
|
BaaL
Зайчатник
Пришел: 02.11.2004
Сообщения: 22
|
Добавлено: 27 декабря 2009, 20:39 |
|
|
Да, действительно если остановить цикл таким образом, то запустить его уже не получиться вобще.
Хм... Впринципе можно еще сделать так чтобы цикл не прекращал работу а просто молния не рисовалась если не проходит проверку на переменную.
|
|
|
BaaL
Зайчатник
Пришел: 02.11.2004
Сообщения: 22
|
Добавлено: 27 декабря 2009, 20:46 |
|
|
Нет, не помогло. Значит включить заново отключеный скрипт уже никак не получиться.
|
|
|
Sandro_wizard
Неизвестный
Пришел: 30.01.2007
Сообщения: 0
|
Добавлено: 27 декабря 2009, 20:54 |
|
|
Так-так-так, не так быстро)))
У меня лично молния не исчезает)
А на других зонах - не появляется)))))) Если так поменять переменную)
UPD: А-а, туплю. Имеет значение, какой моб был загружен на момент сохранения игры - он и будет работать вроде бы.
|
|
|
Sandro_wizard
Неизвестный
Пришел: 30.01.2007
Сообщения: 0
|
Добавлено: 28 декабря 2009, 01:15 |
|
|
Ну в конце концов, я просто переименовываю монстерс в монстерс1 и т.п. и запускаю их, если вдруг случайно поменял переменную.
Кстати, со временем начинает жутко тормозить. Т.е. где-то четверть карты с живностью гасится нормально, а потом начинает медленно все. Причем на паузе все летает и меню игры тоже летает, а в самой игре тормоза - приходится перезаходить в зону - там опять на какое-то время хватает, а потом опять тормозит.
Может там где-то сборка мусора в коде не работает? Что-то где-то не удаляется?
|
|
|
Снайпер
Зеленый гипатский зануда
Пришел: 18.01.2004
Сообщения: 3420
Откуда: Кызыл
|
Добавлено: 28 декабря 2009, 01:28 |
|
|
Там нету в коде никаких сборок мусора. Просто постоянное определение "ближайших" врагов методом сравнения "раз-в-две-секунды" с неудалением мёртвых юнитов из группы - это и будет тормозить. Короче, ничего не знаю - я просто подсвечивал в своё время молниями ВСЕХ сразу - один раз лаганёт, а потом довольно удобно - никаких лагов. _________________ Я желаю всем счастья!
|
|
|
BaaL
Зайчатник
Пришел: 02.11.2004
Сообщения: 22
|
|
|
BaaL
Зайчатник
Пришел: 02.11.2004
Сообщения: 22
|
Добавлено: 30 декабря 2009, 17:09 |
|
|
А всеже, почему именно 31 ?
|
|
|
Снайпер
Зеленый гипатский зануда
Пришел: 18.01.2004
Сообщения: 3420
Откуда: Кызыл
|
Добавлено: 30 декабря 2009, 17:15 |
|
|
Цитата (BaaL): | А всеже, почему именно 31 ? |
Их 32 - ровно столько, чтобы их дипломатия уместилась в 1024 байта памяти...
Игроки с номерами от 0 до 31 в игре и обрабатываются. _________________ Я желаю всем счастья!
|
|
|
BaaL
Зайчатник
Пришел: 02.11.2004
Сообщения: 22
|
Добавлено: 30 декабря 2009, 17:17 |
|
|
Понятно, значит игрок с номером 100500 обрабатываться не будет.
|
|
|
Sandro_wizard
Неизвестный
Пришел: 30.01.2007
Сообщения: 0
|
Добавлено: 02 января 2010, 15:01 |
|
|
Я тут тестирую и наслаждаюсь) Просто сказка))
Ну вот осталось пару вопросов.
1. Я на песках подрубил самую первую версию - как бы теперь от этой молнии избавиться?
2. Вообще, сам по себе указатель гениален - но если он указывает на дальний объект то точки слишком далеко друг от друга отстоят - не видно, куда они кажут)
|
|
|
Снайпер
Зеленый гипатский зануда
Пришел: 18.01.2004
Сообщения: 3420
Откуда: Кызыл
|
Добавлено: 02 января 2010, 17:18 |
|
|
Рекомендую первые несколько точек рисовать на константном расстоянии, и только потом использовать математику _________________ Я желаю всем счастья!
|
|
|
Sandro_wizard
Неизвестный
Пришел: 30.01.2007
Сообщения: 0
|
Добавлено: 02 января 2010, 23:44 |
|
|
А можно ли как-то посмотреть у сейва список подключенных мобов?
Просто проблема с молниями сияет во всей красе - не переигрывать же сначала)
|
|
|
Sagrer
Убийца троллей
Пришел: 24.12.2001
Сообщения: 3548
Откуда: Курск
|
Добавлено: 02 января 2010, 23:49 |
|
|
Цитата: | А можно ли как-то посмотреть у сейва список подключенных мобов?
|
лехко - зайди в папку сейва и медитируй, разглядывая имена файлов %). _________________ Мы уйдем без следа, ни имен ни примет.
Этот мир простоит еще тысячи лет.
Нас и раньше здесь не было - после не будет.
Ни ущерба, ни пользы от этого нет. (с) Омар Хайям
|
|
|
|