Гипат.org

MODный форум - Подскажите скрипт

zak-at - 16 января 2009, 01:17
Есть ли скрипт с помощью которого можно узнать количество монстров на карте? Или по заданному монстру определить, сколько раз он встречается на карте. Заранее спасибо.
Снайпер - 16 января 2009, 03:45
Добрый день. К сожалению, такого скрипта нет. Правда, его можно написать :)

Код:
GlobalVars(
  //...
  All : group,
  Alive : group,
  monster : object,
  count : float,
  //...
)

DeclareScript AllMonsters()

Script AllMonsters
// Скрипт пихает в группу All всех монстров на карте, кроме принадлежащих игроку 0
(
  if
  (
  )
  then
  (
    KillScript()
    GroupAdd(All, GetPlayerUnits(1))
    GroupAdd(All, GetPlayerUnits(2))
    GroupAdd(All, GetPlayerUnits(3))
//...
    GroupAdd(All, GetPlayerUnits(31))
    For(monster, All)
    (
      AddObject(All, GetObject(Mul(IsAlive(monster),GetObjectId(monster))))
    )
    count = GroupSize(All)
  )
)

WorldScript
(
  AllMonsters()
  ConsoleString("Hello, moto! Count of monsters on map: ")
  ConsoleFloat(count)
)


Не самый изящный по ряду причин способ - но уж точно даст всех монстров на карте. С типами сложнее - для игры они все едины, и без специальных скриптово-мобовых извращений узнать тип монстра не получится :( Извращения - это фильровать монстров при создании карты по диапазонам ID, игрокам, координатам...
Cheater - 16 января 2009, 04:21
Вообще то некоторые юниты на карте могут быть у игрока 0, не только персонажи. Пятачок.
То есть, игрока 0 тоже надо считать, за минусом GroupSize(Heroes).

В WorldScript надо в начале Sleep(2) ставить.

Как я заметил, все запущенные скрипты выполняются параллельными потоками одновременно.
Это значит, что при запуске
AllMonsters()
ConsoleString("Hello, moto! Count of monsters on map: ")
ConsoleFloat(count)
Когда выполнятся ConsoleFloat(count), к этому моменту AllMonsters() может еще не завершится полностью.
Поэтому надо две последние команды ConsoleString и ConsoleFloat вставить не в WorldScript, а в конце AllMonsters.
zak-at - 16 января 2009, 20:05
Ребята, большое спасибо.
Снайпер - 16 января 2009, 23:16
Cheater, совершенно верно. Не учёл многопоточность, как обычно.
Часовой пояс: GMT +4:00
Форумы Поселка созданы на базе phpBB2 2.0.4 © phpBB Group