Сообщения от Скрипты
Попробовал поменять местами 1 с 3 объектами, код оставил прежним.
Было так:
первый игрок = объект "1"
второй игрок = объект "2" и т.д.
3 игрок и 3 объект и так до 8 не работали
Стало так:
первый игрок касается объекта "3" и все работает.
третий игрок касается объекта "1" и не работает.
Значит код верный и работает для всех 8 функций.
Получается дело в номере игрока - для 2 игроков работает, для 6 нет.
Придется отказаться от классной задумки бонуса на усмотрение игрока человека(((
Добавлено через 28 минут
Ну если глянуть код DialogBox'а, то можно предположить, что проблема в использовании GetCurrentPlayer там. TalkBox ожидает первым аргументом не номер игрока, а его filter. Для 1 и 2 игрока фильтр равен номеру, но для 3+ нет. Поэтому, вероятно, и работает только для двух первых игроков. Если проблема в этом, то решением будет обернуть первый аргумент DialogBox'а - GetPlayerFilter(GetCurrentPlayer())
Попробовал поменять местами 1 с 3 объектами, код оставил прежним.
Было так:
первый игрок = объект "1"
второй игрок = объект "2" и т.д.
3 игрок и 3 объект и так до 8 не работалиСтало так:
первый игрок касается объекта "3" и все работает.
третий игрок касается объекта "1" и не работает.
Значит код верный и работает для всех 8 функций.
Получается дело в номере игрока - для 2 игроков работает, для 6 нет.
Придется отказаться от классной задумки бонуса на усмотрение игрока человека(((
Добавлено через 28 минут
Прописал получение фильтра, все заработало, благодарю
У всех функций которые называются ....BoxForPlayers аргумент на id игрока работает странно. 1 игрок = 1, 2 игрок = 2, 3 игрок = 4, 4 игрок = 8, 5 игрок = 16, 6 игрок = 32, 7 игрок = 64, 8 игрок = 128. Насчет последних 2 не уверен, проверял только для 6 игроков.
У всех функций которые называются ....BoxForPlayers аргумент на id игрока работает странно. 1 игрок = 1, 2 игрок = 2, 3 игрок = 4, 4 игрок = 8, 5 игрок = 16, 6 игрок = 32, 7 игрок = 64, 8 игрок = 128. Насчет последних 2 не уверен, проверял только для 6 игроков.
Это битовая маска, чтобы можно было выводить одинаковое сообщение сразу для нескольких игроков. Например если нужно для 1, 3 и 5, то можно передать PLAYERFLT_1 + PLAYERFLT_3 + PLAYERFLT_5.
Добрый вечер, хотел через скрипт дать маны герою, как с навыком "Тайное преимущество", чтобы игнорировало максимальную ману героя. Попытался через ChangeHeroStat() не получилось. Самое смешное, что когда я только начал заниматься картой у меня наоборот получилось с игнором макс. маны, а требовалось до максимальной, а теперь наоборот и я не могу вспомнить, как я это сделал. Нашёл на форуме ответ, как сделать герою ману до 300, через ChangeHeroStat(), но как писал выше не получилось.
Добрый вечер, хотел через скрипт дать маны герою, как с навыком "Тайное преимущество", чтобы игнорировало максимальную ману героя. Попытался через ChangeHeroStat() не получилось. Самое смешное, что когда я только начал заниматься картой у меня наоборот получилось с игнором макс. маны, а требовалось до максимальной, а теперь наоборот и я не могу вспомнить, как я это сделал. Нашёл на форуме ответ, как сделать герою ману до 300, через ChangeHeroStat(), но как писал выше не получилось.
Возможное решение: временно добавить герою Знание, а после увеличения количества маны вернуть Знание к прежнему значению. Пример:
ChangeHeroStat("Deleb", STAT_KNOWLEDGE, 10)
ChangeHeroStat("Deleb", STAT_MANA_POINTS, 100)
ChangeHeroStat("Deleb", STAT_KNOWLEDGE, -10)
Быстро проверил через консоль. Да, так работает, мана остаётся выше максимального значения. Пока так, возможно, кто-то знает как одной командой это сделать.
Возможное решение: временно добавить герою Знание, а после увеличения количества маны вернуть Знание к прежнему значению. Пример:
ChangeHeroStat("Deleb", STAT_KNOWLEDGE, 10)
ChangeHeroStat("Deleb", STAT_MANA_POINTS, 100)
ChangeHeroStat("Deleb", STAT_KNOWLEDGE, -10)
Быстро проверил через консоль. Да, так работает, мана остаётся выше максимального значения. Пока так, возможно, кто-то знает как одной командой это сделать.
В моём моде очки здоровья технически реализованы как мана героя и проблемы такой нет, ChangeHeroStat увеличивает манапул выше, чем подразумевает знание героя
Добрый день, есть простенькая задачка, сделать в редакторе карт такой скрипт, чтобы, например, при убийстве нейтрала, любому герою, кто бы это сделал, дали Х опыта.
Но вот, никак не получается это реализовать. В чем тут ошибка?
GetPlayerHeroes(0);
SetGameVar(whotoup, 0);
whotoup = GetPlayerHeroes(0);
ChangeHeroStat(whotoup[0], 0, 999999999)
Добрый день, есть простенькая задачка, сделать в редакторе карт такой скрипт, чтобы, например, при убийстве нейтрала, любому герою, кто бы это сделал, дали Х опыта.
Но вот, никак не получается это реализовать. В чем тут ошибка?
GetPlayerHeroes(0);
SetGameVar(whotoup, 0);
whotoup = GetPlayerHeroes(0);
ChangeHeroStat(whotoup[0], 0, 999999999)
Костылями можно сделать проще, но если нужна точная логика, что ЛЮБОЙ герой получит опыт за пробивку КОНКРЕТНОГО стека, а не общего количества каких-то существ, то вот моя идея:
Дать имя юниту на карте. Например UnitExp
function FightUnitExp(hero, unit)
while isObjectExists(hero) == not nil and isObjectExists(unit) == not nil do
sleep(5)
end
if isObjectExists(unit) == nil then
ChangeHeroStat(hero, 0, 999999999)
end
end
Trigger(OBJECT_TOUCH_TRIGGER, "UnitExp", "FightUnitExp")
Сразу 2 глупых вопроса)
Как дать юниту это имя?
Куда нужно добавить этот скрипт? К этому юниту? Если да, то скрипт или комбат скрипт?
Сразу 2 глупых вопроса)
Как дать юниту это имя?
Куда нужно добавить этот скрипт? К этому юниту? Если да, то скрипт или комбат скрипт?
Имя добавляется в параметр Name юнита в редакторе карт. Я приложил скриншот, там зеленым выделено куда.
Скрипт в общий скрипт карты.
Добавлено через 1 минуту
Понятно, а с модом heroes5.5 такой трюк совместим? А то там тоже свои скрипты.