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


:: В чате сейчас никого нет
Подскажите скрипт
   Список форумов -> MODный форум
Автор
Сообщение
zak-at
Неизвестный


Пришел: 16.01.2009
Сообщения: 2
Добавлено: 16 января 2009, 01:17 [?] [PM]   [«»]

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


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

Добрый день. К сожалению, такого скрипта нет. Правда, его можно написать :)

Код:
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
Привратник


Пришел: 08.01.2002
Сообщения: 378
Откуда: Russia
Добавлено: 16 января 2009, 04:21 [?] [PM] [M]   [«»]

Вообще то некоторые юниты на карте могут быть у игрока 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.01.2009
Сообщения: 2
Добавлено: 16 января 2009, 20:05 [?] [PM]   [«»]

Ребята, большое спасибо.
Снайпер
Зеленый гипатский зануда


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

Cheater, совершенно верно. Не учёл многопоточность, как обычно.
_________________
Я желаю всем счастья!
Показать сообщения:   
   Список форумов -> MODный форум
Версия для печати
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы
Вы можете скачивать выложенные файлы
Перейти:  
Часовой пояс: GMT +4:00