Гипат.org

Флейм - Карту показать

Sandro_wizard - 27 декабря 2009, 03:54
Привет всем.
Решил геноцидом побаловаться - очень интересно вдруг стало.
Так вот, такой вопрос - а есть ли чит, утилита или что-нить типа того, чтобы враги отмечались на карте?
А то директива "зачистить карту" звучит уж слишком жестко с точки зрения своего свободного времени))
Снайпер - 27 декабря 2009, 04:02
Я как-то писал HAS'у простенький скриптик, который фальшивыми молниями указывал направления ко всем врагам :) Только щас не найду :( "в крации" это выглядит так: берёте MobSurgeon, копируете любой квестовый моб, в скрипте пишете цикл по всем живым юнитам карты кроме нулевого игрока и CreateLightning от игрока до них :) А потом просто ходите и мочите :)
Sandro_wizard - 27 декабря 2009, 04:33
О, тогда я помучаю вопросами)
Раз уж я влез в редактор)

1. Почему любой квестовый моб? Если я хочу, чтобы такая тема была на всех картах первого острова, мне придется ведь взять все квестовые моды первого острова, да?

2. Квестовые - это у которых буква q на конце? И как отличить квесты первого острова?

3. Почему моб квестовый, а не например зональный?

4. Далее, главная субпрога на скриптовом языке называется WorldScript?

5. А где бы вообще адекватные доки по скриптовому языку глянуть?
Если нигде, тогда я по коду еще спрошу)
Монгол - 27 декабря 2009, 11:26
Где тут лежали основы скриптов, помню я как то ими пользовался, вот только не помню где...пусть более знающие люди подскажут где)
BaaL - 27 декабря 2009, 14:12
Ничего лучшего, чем сайт Чейза я по этой теме не встречал:
http://eicheats.gipat.ru/
BaaL - 27 декабря 2009, 14:16
Цитата (Снайпер):
...в скрипте пишете цикл по всем живым юнитам карты кроме нулевого игрока и CreateLightning от игрока до них :) А потом просто ходите и мочите :)

Как это должно выглядеть? Молния бъет во все стороны, где находяться враги? Или из цикла выбирается ближайший?
BaaL - 27 декабря 2009, 14:33
Еслибы мне нужно было решать такую задачу, я бы создал чистый моб без объектов, только со скриптом и кинул его в папку maps. В скрипте бы создал цикл на основе всех монстров на карте. Это можно сделать если сложить все группы монстров виртуальных игроков:
group GetPlayerUnits ( nPlayer )
Возврашает группу юнитов игрока номер nPlayer.

Можно сложить игроков от 1 до 10 (выше используються редко.)
Дальше чтоб молния указывала на ближайшего монстра (при желании можно сделать так, чтобы указывались только враждебные).

Этот скрипт потом можно запустить из консоли:
@AddMob ( "имя_моба.mob" )
По идее должно работать на ВСЕХ картах, включая мультиплеер ;)
Снайпер - 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 - 27 декабря 2009, 16:11
Цитата:
5. А где бы вообще адекватные доки по скриптовому языку глянуть?


персонально для тебя выложил в нашу wiki "справку по скриптингу", оно вообще писалось для новичков GG, но надеюсь не только им окажется полезно. Качать тут http://svn.gipat.org/trac/GGWiki/wiki/Documentation_Tutorials
BaaL - 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 - 27 декабря 2009, 16:52
Вот архив с готовым мобом ( + текстовый файл активации):
Sandro_wizard - 27 декабря 2009, 18:02
Обалдеть красавец) И ведь работает же! Спасибо))

И главное - что не сразу ко всем рисуется, а только к ближайшему. Иначе бы тормозило наверное.
Интересно кстати, что сдвигается молния довольно медленно - не поспевая за шагающими.

И еще, пока трупак не подобрал, он все еще считается врагом))
Это, насколько я понимаю, фиксится подцеплением проверки IsAlive в строчку
IsLess( DistanceUnitUnit ( GetUnitOfPlayer ( 0 , 0 ) , this ) , Distance )
Интересно, составные условия поддерживаются...)))

Еще вариант - навесить сюда что-нить типа "рисовать молнии для рядомстоящих врагов", а не только до одного ближайшего. Но это уж детали, здорово помог!)
Sandro_wizard - 27 декабря 2009, 19:10
Поиграл еще...
Зараза, че-то тормозит даже с одной молнией.
А как моб выгружать нафиг?))
BaaL - 27 декабря 2009, 19:15
Цитата (Sandro_wizard):
Поиграл еще...
Зараза, че-то тормозит даже с одной молнией.

Вроде не должен тормозить. Точнее должен, то только 1 раз, когда группа собираеться. У меня вобще тормозов не было.
Цитата (Sandro_wizard):
А как моб выгружать нафиг?))

Помоему достаточно перезайти на карту, чтобы скрипт перестал работать.
Sandro_wizard - 27 декабря 2009, 19:31
Прикольно)
Значит, если на другую карту выйти, то нет молнии.
А всякий раз, когда сюда возвращаешься - у меня это Пески - то тут она есть...
UPD: Ага, и надпись в консоли All monster Ok есть. Оно как-то подцепилось к зоне и теперь всякий раз с ней загружается.

Скрипт ведь один раз выполняется при входе в зону - это он так удачно у меня прицепился?
А нельзя DeleteLightning в консоли? Или это придется еще один моб писать?


UPD: Тормозов пока нет, это значит я там доигрался с кучей орков и слишком частой сменой молний.
BaaL - 27 декабря 2009, 19:47
Цитата (Sandro_wizard):
Прикольно)
Значит, если на другую карту выйти, то нет молнии.
А всякий раз, когда сюда возвращаешься - у меня это Пески - то тут она есть...
Оно как-то подцепилось к зоне и теперь всякий раз с ней загружается.

Гы :D Не думал я что оно так прицепится. :roll:

Цитата (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 )

Как выгрузить приципившейся моб я не знаю :)
Снайпер - 27 декабря 2009, 20:12
Всё просто шикарно, однако при попытке внести в скрипт моба любое изменение, оный перестаёт исполняться. Грустно и печально :(

PS:
Цитата:
Гы :D Не думал я что оно так прицепится. :roll:


Каждый раз при входе в зону выполняются все WorldScript'ы всех подгруженных мобов, соответственно, и торчащая в WorldScript'е приветственная мессага тоже каждый раз будет выводиться. Если её не блокировать переменной, но я в этом смысла не вижу.
BaaL - 27 декабря 2009, 20:39
Да, действительно если остановить цикл таким образом, то запустить его уже не получиться вобще.
Хм... Впринципе можно еще сделать так чтобы цикл не прекращал работу а просто молния не рисовалась если не проходит проверку на переменную.
:roll: :spy: :drug:
BaaL - 27 декабря 2009, 20:46
Нет, не помогло. :( Значит включить заново отключеный скрипт уже никак не получиться.
Sandro_wizard - 27 декабря 2009, 20:54
Так-так-так, не так быстро)))
У меня лично молния не исчезает)
А на других зонах - не появляется)))))) Если так поменять переменную)

UPD: А-а, туплю. Имеет значение, какой моб был загружен на момент сохранения игры - он и будет работать вроде бы.
Sandro_wizard - 28 декабря 2009, 01:15
Ну в конце концов, я просто переименовываю монстерс в монстерс1 и т.п. и запускаю их, если вдруг случайно поменял переменную.

Кстати, со временем начинает жутко тормозить. Т.е. где-то четверть карты с живностью гасится нормально, а потом начинает медленно все. Причем на паузе все летает и меню игры тоже летает, а в самой игре тормоза - приходится перезаходить в зону - там опять на какое-то время хватает, а потом опять тормозит.
Может там где-то сборка мусора в коде не работает? Что-то где-то не удаляется?
Снайпер - 28 декабря 2009, 01:28
Там нету в коде никаких сборок мусора. Просто постоянное определение "ближайших" врагов методом сравнения "раз-в-две-секунды" с неудалением мёртвых юнитов из группы - это и будет тормозить. Короче, ничего не знаю - я просто подсвечивал в своё время молниями ВСЕХ сразу - один раз лаганёт, а потом довольно удобно - никаких лагов.
BaaL - 28 декабря 2009, 12:04
Цитата (Снайпер):
... с неудалением мёртвых юнитов из группы - это и будет тормозить.

Дело не в этом, из группы автоматически исключаються мертвые монстры, труп которых поднят.
Я думаю что дело в том, что со временем накапливаеться очень большое число скриптов #GetNearest#2 условие которых никогда не выполниться, но будет постоянно проверяться.
Цитата (Снайпер):
Короче, ничего не знаю - я просто подсвечивал в своё время молниями ВСЕХ сразу - один раз лаганёт, а потом довольно удобно - никаких лагов.

Тю, так это же слишком банально и не интересно! Кто же ищет простых путей? :D

Короче, добавил принудительное закрытие скрипту и заменил слишком навязчивую молнию более спокойным эффектом. По идее тормоза теперь не должны увиличиваться:
BaaL - 30 декабря 2009, 17:09
А всеже, почему именно 31 ? :spy:
Снайпер - 30 декабря 2009, 17:15
Цитата (BaaL):
А всеже, почему именно 31 ? :spy:

Их 32 - ровно столько, чтобы их дипломатия уместилась в 1024 байта памяти...
Игроки с номерами от 0 до 31 в игре и обрабатываются.
BaaL - 30 декабря 2009, 17:17
Понятно, значит игрок с номером 100500 обрабатываться не будет. :D
Sandro_wizard - 02 января 2010, 15:01
Я тут тестирую и наслаждаюсь) Просто сказка))
Ну вот осталось пару вопросов.

1. Я на песках подрубил самую первую версию - как бы теперь от этой молнии избавиться?

2. Вообще, сам по себе указатель гениален - но если он указывает на дальний объект то точки слишком далеко друг от друга отстоят - не видно, куда они кажут)
Снайпер - 02 января 2010, 17:18
Рекомендую первые несколько точек рисовать на константном расстоянии, и только потом использовать математику ;)
Sandro_wizard - 02 января 2010, 23:44
А можно ли как-то посмотреть у сейва список подключенных мобов?

Просто проблема с молниями сияет во всей красе - не переигрывать же сначала)
Sagrer - 02 января 2010, 23:49
Цитата:
А можно ли как-то посмотреть у сейва список подключенных мобов?


лехко - зайди в папку сейва и медитируй, разглядывая имена файлов %).
BaaL - 03 января 2010, 00:43
Цитата (Снайпер):
Рекомендую первые несколько точек рисовать на константном расстоянии, и только потом использовать математику ;)

Хорошая идея. ;)
Теперь если ближайший враг находиться на расстоянии больше 30, то рисуется дополнительная стрелка на растоянии 10 от игрока в направлении монстра:
BaaL - 03 января 2010, 00:46
И еще, если на карте не останеться злобных монстров то стрелка продолжит рисоваться в направлении места, где был последний остававшийся в живых. Это не мешает?
Sagrer - 03 января 2010, 01:27
Товарисч BaaL, ваш скрипт зверски растягивает страницу из-за длинных строк без пробелов, рекомендую исправить скрипт, поставив пробелы где-нибудь возле запятых в списках параметров функций, и в дальнейшем такой ужости в своих мессагах не допускать - ибо я уже заколупался править чужие скрипты, в комплекте со следующим моим исправлением чьей-либо мессаги со скриптом пойдёт блокировка аккаунта на пару суток, считайте это предупреждением.
BaaL - 03 января 2010, 11:43
Sagrer, если чесно, то ничего не понял. А давайте я просто больше не буду скрипты выкладывать.
Снайпер - 03 января 2010, 12:15
Цитата (BaaL):
Sagrer, если чесно, то ничего не понял. А давайте я просто больше не буду скрипты выкладывать.

Sagrer всего лишь имел ввиду, что из-за строк без пробелов в коде не срабатывает перенос и появляется горизонтальная полоса прокрутки - для "мелюзги" типа меня с 15"-монитором и со смешным разрешением экрана 1024х768 это очень заметно и сильно затрудняет чтение ветки.

Ахез, имхо на такое я бы не стал обижаться - рабочий вопрос, ничего личного... А что до т.н. резкости тона - *далее обращение ко всем* господа, не забывайте, что у каждого в голове стоят свои фильтры, которые сами на основании текста дорисовывают Вам интонацию и соответствующий подтекст. Не надо. Реагировать на это так эмоционально - ничего хорошего не будет, только перессорятся все. Лично я бы сделал скидку на человеческий фактор как с моей, так и с противоположной стороны.

BaaL, никто не против кода, хотя возможно, следовало попросить об оформлении на странице несколько деликатнее :)
BaaL - 03 января 2010, 12:30
А, ну теперь ясно. Извените. Дело в том, что у меня ничего не растягивается. Длинные строки разделяются на несколько строк, поэтому я сначала и не понял о чем вобще речь.
Sagrer - 03 января 2010, 13:20
Цитата:
возможно, следовало попросить об оформлении на странице несколько деликатнее


просто по-деликатному было уже (в виде красного модерского текста в отредактированной мессаге), но по-видимому никто этого дела не заметил, так что пришлось вот так.

2BaaL -ничего личного, мне было важно чтобы народ увидел и принял к сведению, никто не против кода в мессагах, главное чтобы этот код не мешал остальным.

Цитата:
Дело в том, что у меня ничего не растягивается. Длинные строки разделяются на несколько строк, поэтому я сначала и не понял о чем вобще речь.


в стандарте HTML нет такой фичи, поэтому какие-то бровзеры разбивают строки, а какие-то (Firefox к примеру) - нет.
Aleks - 03 января 2010, 19:30
Гм, в этой теме где-то есть красный модераторский текст? Тыкните, а то я подслеповат, что ли.
Sagrer - 03 января 2010, 21:17
не в этой теме, а например тут http://www.gipatgroup.org/forum/viewtopic.php?p=113559#113559
Aleks - 04 января 2010, 14:46
Всё-таки его сложно заметить, да.
Sandro_wizard - 08 января 2010, 02:25
Такая фигня получилась - предпоследняя версия скрипта, так вот, я в мертвом городе его пользовал и так получилось, что последний враг на карте - это зеленые камни на пригорке. Я их убил, а трупак не поднять и теперь направляющая все время на "тело" указывает.

А вот на пустой Река и острова она указывает в левый нижний угол.

Кстати, еще один момент - в Дальних Горах запарился отслеживать зеленых ящериц, я ж пока ракушку не поднял - они дружественные)

Вообще, чертовски удобно было со скриптом :up:
А где можно вопросы по синглу спросить?
Aleks - 08 января 2010, 16:25
Да где-нибудь здесь и спрашивай.
Часовой пояс: GMT +4:00
Форумы Поселка созданы на базе phpBB2 2.0.4 © phpBB Group