Список форумов
Гипат.org
Найдется место всем!


:: В чате сейчас никого нет
Карту показать
Страницы 1, 2  След.
   Список форумов -> Флейм
Автор
Сообщение
Sandro_wizard
Неизвестный


Пришел: 30.01.2007
Сообщения: 0
Добавлено: 27 декабря 2009, 03:54 [?] [PM]   [«»]

Привет всем.
Решил геноцидом побаловаться - очень интересно вдруг стало.
Так вот, такой вопрос - а есть ли чит, утилита или что-нить типа того, чтобы враги отмечались на карте?
А то директива "зачистить карту" звучит уж слишком жестко с точки зрения своего свободного времени))
Снайпер
Зеленый гипатский зануда


Пришел: 18.01.2004
Сообщения: 3420
Откуда: Кызыл
Добавлено: 27 декабря 2009, 04:02 [?] [PM] [w] [m] [i]   [«»]

Я как-то писал HAS'у простенький скриптик, который фальшивыми молниями указывал направления ко всем врагам :) Только щас не найду :( "в крации" это выглядит так: берёте MobSurgeon, копируете любой квестовый моб, в скрипте пишете цикл по всем живым юнитам карты кроме нулевого игрока и CreateLightning от игрока до них :) А потом просто ходите и мочите :)
_________________
Я желаю всем счастья!
Sandro_wizard
Неизвестный


Пришел: 30.01.2007
Сообщения: 0
Добавлено: 27 декабря 2009, 04:33 [?] [PM]   [«»]

О, тогда я помучаю вопросами)
Раз уж я влез в редактор)

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

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

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

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

5. А где бы вообще адекватные доки по скриптовому языку глянуть?
Если нигде, тогда я по коду еще спрошу)
Монгол
Охотник


Пришел: 26.10.2009
Сообщения: 70
Откуда: Королев
Добавлено: 27 декабря 2009, 11:26 [?] [PM]   [«»]

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


Пришел: 02.11.2004
Сообщения: 22
Добавлено: 27 декабря 2009, 14:12 [?] [PM] [i]   [«»]

Ничего лучшего, чем сайт Чейза я по этой теме не встречал:
http://eicheats.gipat.ru/
BaaL
Зайчатник


Пришел: 02.11.2004
Сообщения: 22
Добавлено: 27 декабря 2009, 14:16 [?] [PM] [i]   [«»]

Цитата (Снайпер):
...в скрипте пишете цикл по всем живым юнитам карты кроме нулевого игрока и CreateLightning от игрока до них :) А потом просто ходите и мочите :)

Как это должно выглядеть? Молния бъет во все стороны, где находяться враги? Или из цикла выбирается ближайший?
BaaL
Зайчатник


Пришел: 02.11.2004
Сообщения: 22
Добавлено: 27 декабря 2009, 14:33 [?] [PM] [i]   [«»]

Еслибы мне нужно было решать такую задачу, я бы создал чистый моб без объектов, только со скриптом и кинул его в папку maps. В скрипте бы создал цикл на основе всех монстров на карте. Это можно сделать если сложить все группы монстров виртуальных игроков:
group GetPlayerUnits ( nPlayer )
Возврашает группу юнитов игрока номер nPlayer.

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

Этот скрипт потом можно запустить из консоли:
@AddMob ( "имя_моба.mob" )
По идее должно работать на ВСЕХ картах, включая мультиплеер ;)
Снайпер
Зеленый гипатский зануда


Пришел: 18.01.2004
Сообщения: 3420
Откуда: Кызыл
Добавлено: 27 декабря 2009, 15:14 [?] [PM] [w] [m] [i]   [«»]

Ваа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 [?] [PM] [M] [w] [m] [i]   [«»]

Цитата:
5. А где бы вообще адекватные доки по скриптовому языку глянуть?


персонально для тебя выложил в нашу wiki "справку по скриптингу", оно вообще писалось для новичков GG, но надеюсь не только им окажется полезно. Качать тут http://svn.gipat.org/trac/GGWiki/wiki/Documentation_Tutorials
_________________
Мы уйдем без следа, ни имен ни примет.
Этот мир простоит еще тысячи лет.
Нас и раньше здесь не было - после не будет.
Ни ущерба, ни пользы от этого нет. (с) Омар Хайям
BaaL
Зайчатник


Пришел: 02.11.2004
Сообщения: 22
Добавлено: 27 декабря 2009, 16:44 [?] [PM] [i]   [«»]

Не удержался и написал скрипт под это дело. :)
Скрипт каждые 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
Добавлено: 27 декабря 2009, 16:52 [?] [PM] [i]   [«»]

Вот архив с готовым мобом ( + текстовый файл активации):


Nearest_Enemy.rar  
2.56 KB, Скачано 133 раз(а).
 
Sandro_wizard
Неизвестный


Пришел: 30.01.2007
Сообщения: 0
Добавлено: 27 декабря 2009, 18:02 [?] [PM]   [«»]

Обалдеть красавец) И ведь работает же! Спасибо))

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

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

Еще вариант - навесить сюда что-нить типа "рисовать молнии для рядомстоящих врагов", а не только до одного ближайшего. Но это уж детали, здорово помог!)
Sandro_wizard
Неизвестный


Пришел: 30.01.2007
Сообщения: 0
Добавлено: 27 декабря 2009, 19:10 [?] [PM]   [«»]

Поиграл еще...
Зараза, че-то тормозит даже с одной молнией.
А как моб выгружать нафиг?))
BaaL
Зайчатник


Пришел: 02.11.2004
Сообщения: 22
Добавлено: 27 декабря 2009, 19:15 [?] [PM] [i]   [«»]

Цитата (Sandro_wizard):
Поиграл еще...
Зараза, че-то тормозит даже с одной молнией.

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

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


Пришел: 30.01.2007
Сообщения: 0
Добавлено: 27 декабря 2009, 19:31 [?] [PM]   [«»]

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

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


UPD: Тормозов пока нет, это значит я там доигрался с кучей орков и слишком частой сменой молний.
BaaL
Зайчатник


Пришел: 02.11.2004
Сообщения: 22
Добавлено: 27 декабря 2009, 19:47 [?] [PM] [i]   [«»]

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

Как выгрузить приципившейся моб я не знаю :)
Снайпер
Зеленый гипатский зануда


Пришел: 18.01.2004
Сообщения: 3420
Откуда: Кызыл
Добавлено: 27 декабря 2009, 20:12 [?] [PM] [w] [m] [i]   [«»]

Всё просто шикарно, однако при попытке внести в скрипт моба любое изменение, оный перестаёт исполняться. Грустно и печально :(

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


Каждый раз при входе в зону выполняются все WorldScript'ы всех подгруженных мобов, соответственно, и торчащая в WorldScript'е приветственная мессага тоже каждый раз будет выводиться. Если её не блокировать переменной, но я в этом смысла не вижу.
_________________
Я желаю всем счастья!
BaaL
Зайчатник


Пришел: 02.11.2004
Сообщения: 22
Добавлено: 27 декабря 2009, 20:39 [?] [PM] [i]   [«»]

Да, действительно если остановить цикл таким образом, то запустить его уже не получиться вобще.
Хм... Впринципе можно еще сделать так чтобы цикл не прекращал работу а просто молния не рисовалась если не проходит проверку на переменную.
:roll: :spy: :drug:
BaaL
Зайчатник


Пришел: 02.11.2004
Сообщения: 22
Добавлено: 27 декабря 2009, 20:46 [?] [PM] [i]   [«»]

Нет, не помогло. :( Значит включить заново отключеный скрипт уже никак не получиться.
Sandro_wizard
Неизвестный


Пришел: 30.01.2007
Сообщения: 0
Добавлено: 27 декабря 2009, 20:54 [?] [PM]   [«»]

Так-так-так, не так быстро)))
У меня лично молния не исчезает)
А на других зонах - не появляется)))))) Если так поменять переменную)

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


Пришел: 30.01.2007
Сообщения: 0
Добавлено: 28 декабря 2009, 01:15 [?] [PM]   [«»]

Ну в конце концов, я просто переименовываю монстерс в монстерс1 и т.п. и запускаю их, если вдруг случайно поменял переменную.

Кстати, со временем начинает жутко тормозить. Т.е. где-то четверть карты с живностью гасится нормально, а потом начинает медленно все. Причем на паузе все летает и меню игры тоже летает, а в самой игре тормоза - приходится перезаходить в зону - там опять на какое-то время хватает, а потом опять тормозит.
Может там где-то сборка мусора в коде не работает? Что-то где-то не удаляется?
Снайпер
Зеленый гипатский зануда


Пришел: 18.01.2004
Сообщения: 3420
Откуда: Кызыл
Добавлено: 28 декабря 2009, 01:28 [?] [PM] [w] [m] [i]   [«»]

Там нету в коде никаких сборок мусора. Просто постоянное определение "ближайших" врагов методом сравнения "раз-в-две-секунды" с неудалением мёртвых юнитов из группы - это и будет тормозить. Короче, ничего не знаю - я просто подсвечивал в своё время молниями ВСЕХ сразу - один раз лаганёт, а потом довольно удобно - никаких лагов.
_________________
Я желаю всем счастья!
BaaL
Зайчатник


Пришел: 02.11.2004
Сообщения: 22
Добавлено: 28 декабря 2009, 12:04 [?] [PM] [i]   [«»]

Цитата (Снайпер):
... с неудалением мёртвых юнитов из группы - это и будет тормозить.

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

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

Короче, добавил принудительное закрытие скрипту и заменил слишком навязчивую молнию более спокойным эффектом. По идее тормоза теперь не должны увиличиваться:



monsters.rar  
3.11 KB, Скачано 127 раз(а).
 
BaaL
Зайчатник


Пришел: 02.11.2004
Сообщения: 22
Добавлено: 30 декабря 2009, 17:09 [?] [PM] [i]   [«»]

А всеже, почему именно 31 ? :spy:
Снайпер
Зеленый гипатский зануда


Пришел: 18.01.2004
Сообщения: 3420
Откуда: Кызыл
Добавлено: 30 декабря 2009, 17:15 [?] [PM] [w] [m] [i]   [«»]

Цитата (BaaL):
А всеже, почему именно 31 ? :spy:

Их 32 - ровно столько, чтобы их дипломатия уместилась в 1024 байта памяти...
Игроки с номерами от 0 до 31 в игре и обрабатываются.
_________________
Я желаю всем счастья!
BaaL
Зайчатник


Пришел: 02.11.2004
Сообщения: 22
Добавлено: 30 декабря 2009, 17:17 [?] [PM] [i]   [«»]

Понятно, значит игрок с номером 100500 обрабатываться не будет. :D
Sandro_wizard
Неизвестный


Пришел: 30.01.2007
Сообщения: 0
Добавлено: 02 января 2010, 15:01 [?] [PM]   [«»]

Я тут тестирую и наслаждаюсь) Просто сказка))
Ну вот осталось пару вопросов.

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

2. Вообще, сам по себе указатель гениален - но если он указывает на дальний объект то точки слишком далеко друг от друга отстоят - не видно, куда они кажут)
Снайпер
Зеленый гипатский зануда


Пришел: 18.01.2004
Сообщения: 3420
Откуда: Кызыл
Добавлено: 02 января 2010, 17:18 [?] [PM] [w] [m] [i]   [«»]

Рекомендую первые несколько точек рисовать на константном расстоянии, и только потом использовать математику ;)
_________________
Я желаю всем счастья!
Sandro_wizard
Неизвестный


Пришел: 30.01.2007
Сообщения: 0
Добавлено: 02 января 2010, 23:44 [?] [PM]   [«»]

А можно ли как-то посмотреть у сейва список подключенных мобов?

Просто проблема с молниями сияет во всей красе - не переигрывать же сначала)
Sagrer
Убийца троллей


Пришел: 24.12.2001
Сообщения: 3548
Откуда: Курск
Добавлено: 02 января 2010, 23:49 [?] [PM] [M] [w] [m] [i]   [«»]

Цитата:
А можно ли как-то посмотреть у сейва список подключенных мобов?


лехко - зайди в папку сейва и медитируй, разглядывая имена файлов %).
_________________
Мы уйдем без следа, ни имен ни примет.
Этот мир простоит еще тысячи лет.
Нас и раньше здесь не было - после не будет.
Ни ущерба, ни пользы от этого нет. (с) Омар Хайям
Показать сообщения:   
   Список форумов -> Флейм
Страницы 1, 2  След. Версия для печати
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы
Вы можете скачивать выложенные файлы
Перейти:  
Часовой пояс: GMT +4:00