Перейти к содержанию

Сообщения от Скрипты

Аватар пользователя
Спасибо, RedHeavenHero :) Всё как я хотел :)
502 Bad Gateway
__________________________________
nginx/0.8.54
Аватар пользователя
Отследить прикосновение героя к гарнизону практически невозможно
Гм-гм, думаю, в случае с гарнизоном нужно просто отследить координаты героя, ведь взаимодействие с дружественным гарнизоном происходит, если встать внутрь него. А взаимодействие с вражеским происходит в другой точке, да, но со вражеским гарнизоном нельзя обмениваться войсками ) Только вот Dyrman мутил что-то такое применительно к городу, вроде ничего толкового не вышло из-за того, что интерактивная точка скачет относительно той точки, по которой задаются координаты города, это из-за поворота. Но возможно с гарнизоном как раз всё в порядке.
 

К А
Стикеры GBF в Telegram
В ответ пользователю Ment
Аватар пользователя
Дело в том, что получить имя гарнизона с помощью GetObjectNamesByType нельзя.
Карты для Героев Меча и Магии 5
Одиночные: Завеса срывается, Посол, Последний рывок, Эхо Пустоты
Кампания: Империя Единорога

Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4
Аватар пользователя
Не знаю, я нашёл такие примеры применений:
Ok, I figured this one out. It takes names like BUILDING_ABANDONED_MINE, TOWN_NECROMANCY and CREATURE_GENIE as arguments. They need to be between quotes, otherwise the command doesn't work.

What the function returns is an array, filled with adventure map references: a name if the object has one, otherwise its generic name, like "1-210-199-AdvMapDwelling-27624". You can refer to this by using the array index. For instance:

Imp_Cruc_Array=GetObjectNamesByType("BUILDING_IMP_CRUCIBLE");
GetObjectNamesByType('TOWN') - все города на карте
GetObjectNamesByType('TOWN_DUNGEON')- все города данжена
GetObjectNamesByType('BUILDING_WITCH_HUT') - все хижины ведьм.

Похоже оно ищет по строковому префиксу типа, т.к.

GetObjectNamesByType('BUILDING_WITCH') и GetObjectNamesByType('BUILDING_WIT') дают те же результаты, что и
GetObjectNamesByType('BUILDING_WITCH_HUT').
Неужто, вообще никак, с таким-то разнообразием? Или можно попробовать вывести вообще все статик-объекты, если можно, а уж из них отобрать те, которые на GetObjectCreatures выдают что-то адекватное.
 

К А
Стикеры GBF в Telegram
В ответ пользователю Ment
Аватар пользователя
Он не даст имена гарнизонов, даже если задать в качестве аргумента пустую строку.
Карты для Героев Меча и Магии 5
Одиночные: Завеса срывается, Посол, Последний рывок, Эхо Пустоты
Кампания: Империя Единорога

Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4
В ответ пользователю RedHeavenHero
Аватар пользователя
RedHeavenHero

GetObjectNamesByType('TOWN') вернёт массив с именами всех городов на карте.
Не вернёт. Эта функция работает только с параметром героев. По крайней мере, так говорится в мануале, плюс у меня действительно не работает.
Разработчик Heroes 5.5 WarGame Edition.
Сайт проекта - пока неактивен
Автор Асимметричных шахмат
В ответ пользователю Nargott
Аватар пользователя
Мануал
GetObjectNamesByType
GetObjectNamesByType — Получает все объекты заданного типа
Синтаксис
GetObjectNamesByType(objectTypeName);
Описание
Получает все объекты заданного типа. Для зданий нужно задавать тип(objectTypeName),
прописанный в Shared-Type Для монстров — это Creature Для героев — HeroClass Для
городов — TownRace Можно задавать подстроки для задания более общих типов.
Например: BUILDING — все здания ABANDONED_MINE или BUILDING_ABANDONED_MINE — для
заброшенных шахт DWELLING — для всех двеллингов DWELLING_<тип двеллинга> —
конкретные двеллинги CREATURE — все монстры CREATURE_PEASANT или просто PEASANT
— крестьяне HERO — все герои HERO_CLASS_WIZARD — все герое Академии TOWN — все
города TOWN_HEAVEN — все города расы HEAVEN
Где тут про героев? Если не секрет, то лучше выложить скрипт. Ошибка могла быть в другом.
Карты для Героев Меча и Магии 5
Одиночные: Завеса срывается, Посол, Последний рывок, Эхо Пустоты
Кампания: Империя Единорога

Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4
В ответ пользователю RedHeavenHero
Аватар пользователя
RedHeavenHero
Где тут про героев? Если не секрет, то лучше выложить скрипт. Ошибка могла быть в другом.
Спасибо за наводку, ошибка оказалась в лишней букве s в имени переменной. Функция работает, как надо (другой мануал ввел в заблуждение). Хотя и выдаёт имена городов не как имена в человеческом понимании.

P.S. Иногда важно просто узнать, что это на самом деле работает, в мире глючных функций Нивала ))

Добавлено через 6 часов 38 минут
Как посчитать в скрипте общее количество игроков на карте?
Разработчик Heroes 5.5 WarGame Edition.
Сайт проекта - пока неактивен
Автор Асимметричных шахмат
Аватар пользователя
Вот я, когда Вам отвечал, не нашёл такой функции. Если её правда нет, придётся косвенно: проверить принадлежность всех городов и героев.
 

К А
Стикеры GBF в Telegram
В ответ пользователю Ment
Аватар пользователя
Автопереведено
А как насчет функции GetPlayerState?
function GetPlayers()
	local n = 0
	for i=1,8 do
		n = n + (GetPlayerState(i) == 1 or 0)
	end
	return n
end
Карты для Героев Меча и Магии 5
Одиночные: Завеса срывается, Посол, Последний рывок, Эхо Пустоты
Кампания: Империя Единорога

Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4
В ответ пользователю RedHeavenHero
Аватар пользователя
RedHeavenHero
А как же GetPlayerState?
function GetPlayers()
local n = 0
for i=1,8 do
n = n + (GetPlayerState(i) == 1 or 0)
end
return n
end
Угу, с помощью неё уже и успел решить проблему.
Только вместо "магических" чисел 1 и 0 использовал константу PLAYER_ACTIVE (которой, видимо, соответствует 1).
-- Получение числа игроков в игре
function getTotalPlayers()
local total = 0
for playerID = PLAYER_1, PLAYER_8 do
if GetPlayerState(playerID) == PLAYER_ACTIVE then
total = total + 1
end
end
return total
end

А зачем использовать значение PLAYER_NOT_IN_GAME (0)?
Разработчик Heroes 5.5 WarGame Edition.
Сайт проекта - пока неактивен
Автор Асимметричных шахмат
В ответ пользователю Nargott
Аватар пользователя
Nargott
Угу, с помощью неё уже и успел решить проблему.
Только вместо "магических" чисел 1 и 0 использовал константу PLAYER_ACTIVE (которой, видимо, соответствует 1).
-- Получение числа игроков в игре
function getTotalPlayers()
local total = 0
for playerID = PLAYER_1, PLAYER_8 do
if GetPlayerState(playerID) == PLAYER_ACTIVE then
total = total + 1
end
end
return total
end
Почему "магических"?
А зачем использовать значение PLAYER_NOT_IN_GAME (0)?
Где? К тому же игроки вне игры обозначаются 4.
Карты для Героев Меча и Магии 5
Одиночные: Завеса срывается, Посол, Последний рывок, Эхо Пустоты
Кампания: Империя Единорога

Существа NCF
Орден Порядка: 1
Нейтралы: 1 2 3 4
В ответ пользователю RedHeavenHero
Аватар пользователя
RedHeavenHero
Почему "магических"?
Потому что в мире программирования использовать какие-то невнятные ("магические") цифры - дурной тон, затрудняющий чтение, понимание и изменение кода. Что такое 0? Что такое 1? Это никому не известно, и из контекста неясно. Другое дело - использование именованных констант, заранее собранных в отдельном месте (в данном случае, разрабы уже предоставили такие константы), где их при необходимости можно централизованно менять.

Исключением могут быть например счётчики, такие как total = total + 1, где единица обозначает минимальный шаг. В этом случае её роль всем очевидна, и потому она не считается "магической" в таком контексте.
RedHeavenHero
Где? К тому же игроки вне игры обозначаются 4.
Судя по мануалу:
PLAYER_NOT_IN_GAME -- Игрок вне игры
PLAYER_ACTIVE -- Игрок активен
PLAYER_WON -- Игрок победил
PLAYER_LOST -- Игрок проиграл
Обычно, в подобных списках константы пробегают значения от 0 и выше, т.е. значение 4, видимо, не соответсвует ни одной из констант, и, вероятно, обозначает игроков вне игры (опять-таки из-за "магических" цифр можно только строить предположения). Но я лично не проверял на практике.

Цифра 0 взята отсюда:
n = n + (GetPlayerState(i) == 1 or 0)
Мне совершенно непонятно, что она здесь делает, а из-за отсутствия скобок, неясно даже, как будет выполняться сия конструкция, сначала проверка на равенство, а затем OR, или наоборот.
Разработчик Heroes 5.5 WarGame Edition.
Сайт проекта - пока неактивен
Автор Асимметричных шахмат
Аватар пользователя
я тоже полчаса назад хотел спросить, а разве "игрок вне игры" и "игрок проиграл" - это одно и тоже? Если на карте 5 игроков, то игрок 6 по-умолчанию не может (не должен) быть, если проверить его наличие при помощи цифры 4.
С другой стороны, в этой же ситуации, проигравший игрок 5, вполне возможно, "высветиться", при попытке проверить его с помощью 0 - т.е - он же "не в игре" теперь.
Тоже интересно стало.

Whatever
Аватар пользователя
Видимо, следует создать отдельную константу PLAYER_NOT_EXIST = 4, и оперировать уже ей.
Как работает константа PLAYER_NOT_IN_GAME, непонятно, т.к. она должна обозначать, что игрока нет в игре, однако при генерации карты на 2 игроков, проверка статусов PLAYER_3..8 на равенство этой константе не проходит.
Разработчик Heroes 5.5 WarGame Edition.
Сайт проекта - пока неактивен
Автор Асимметричных шахмат

Статистика

Приветствуем новейшего участника: Emil

Сейчас на сайте 7 пользователей 1440 гостей