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


Регистрация :: Вход :: В чате сейчас 4 жителя
Подскажите скрипт
[Начать новую тему]   [Ответить на тему]    Список форумов -> MODный форум Предыдущая тема :: Следующая тема  
Автор
Сообщение
zak-at
Неизвестный


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

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


Пришел: 18.01.2004
Сообщения: 3361
Откуда: Мытищи
Добавлено: 16 января 2009, 02: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, 03: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, 19:05 [?] [PM]   [«»]

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


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

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