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

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

Аватар пользователя
Ну если глянуть код DialogBox'а, то можно предположить, что проблема в использовании GetCurrentPlayer там. TalkBox ожидает первым аргументом не номер игрока, а его filter. Для 1 и 2 игрока фильтр равен номеру, но для 3+ нет. Поэтому, вероятно, и работает только для двух первых игроков. Если проблема в этом, то решением будет обернуть первый аргумент DialogBox'а - GetPlayerFilter(GetCurrentPlayer())
Нет войне.
Аватар пользователя

Попробовал поменять местами 1 с 3 объектами, код оставил прежним.

Было так:
первый игрок = объект "1"
второй игрок = объект "2" и т.д.
3 игрок и 3 объект и так до 8 не работали

Стало так:
первый игрок касается объекта "3" и все работает
третий игрок касается объекта "1" и не работает.

Значит код верный и работает для всех 8 функций.

Получается дело в номере игрока - для 2 игроков работает, для 6 нет.
Придется отказаться от классной задумки бонуса на усмотрение игрока человека(((

 



Добавлено через 28 минут
Gerter
Ну если глянуть код DialogBox'а, то можно предположить, что проблема в использовании GetCurrentPlayer там. TalkBox ожидает первым аргументом не номер игрока, а его filter. Для 1 и 2 игрока фильтр равен номеру, но для 3+ нет. Поэтому, вероятно, и работает только для двух первых игроков. Если проблема в этом, то решением будет обернуть первый аргумент DialogBox'а - GetPlayerFilter(GetCurrentPlayer())
Прописал получение фильтра, все заработало, благодарю 
Аватар пользователя
сразу бы хотел предупредить, что если собираешься юзать талкбоксы в мультиплеере по сети, то лучше сразу отказаться от этой идеи, т.к. эта функция ломает сейвы в мультике.
Нет войне.
В ответ пользователю green belly
Аватар пользователя
green belly

Попробовал поменять местами 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.
РПГ-сценарий для HoMM5: Путь героя
ЧаВо по созданию карт для HoMM5: ЧаВо

Добрый вечер, хотел через скрипт дать маны герою, как с навыком "Тайное преимущество", чтобы игнорировало максимальную ману героя. Попытался через ChangeHeroStat() не получилось. Самое смешное, что когда я только начал заниматься картой у меня наоборот получилось с игнором макс. маны, а требовалось до максимальной, а теперь наоборот и я не могу вспомнить, как я это сделал. Нашёл на форуме ответ, как сделать герою ману до 300, через ChangeHeroStat(), но как писал выше не получилось.

В ответ пользователю Shiroyasha2910
Аватар пользователя
Shiroyasha2910

Добрый вечер, хотел через скрипт дать маны герою, как с навыком "Тайное преимущество", чтобы игнорировало максимальную ману героя. Попытался через ChangeHeroStat() не получилось. Самое смешное, что когда я только начал заниматься картой у меня наоборот получилось с игнором макс. маны, а требовалось до максимальной, а теперь наоборот и я не могу вспомнить, как я это сделал. Нашёл на форуме ответ, как сделать герою ману до 300, через ChangeHeroStat(), но как писал выше не получилось.


Возможное решение: временно добавить герою Знание, а после увеличения количества маны вернуть Знание к прежнему значению. Пример:

ChangeHeroStat("Deleb", STAT_KNOWLEDGE, 10)
ChangeHeroStat("Deleb", STAT_MANA_POINTS, 100)
ChangeHeroStat("Deleb", STAT_KNOWLEDGE, -10)

Быстро проверил через консоль. Да, так работает, мана остаётся выше максимального значения. Пока так, возможно, кто-то знает как одной командой это сделать.
В ответ пользователю Magnificent
Magnificent
Возможное решение: временно добавить герою Знание, а после увеличения количества маны вернуть Знание к прежнему значению. Пример:

ChangeHeroStat("Deleb", STAT_KNOWLEDGE, 10)
ChangeHeroStat("Deleb", STAT_MANA_POINTS, 100)
ChangeHeroStat("Deleb", STAT_KNOWLEDGE, -10)

Быстро проверил через консоль. Да, так работает, мана остаётся выше максимального значения. Пока так, возможно, кто-то знает как одной командой это сделать.
Я об этом думал, но надеялся, что я просто тупой, и не знаю способа получше. Но всё равно спасибо. Блин, как же я в тот раз это одной командой сделал.
Аватар пользователя
Возможно, вы помните увеличение маны в бою функцией SetUnitManaPoints, там нет ограничений по максимуму маны

В моём моде очки здоровья технически реализованы как мана героя и проблемы такой нет, ChangeHeroStat увеличивает манапул выше, чем подразумевает знание героя
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
Discord-сервер "Герои 5: S.T.A.L.K.E.R"
Сервер по модификации "Герои 5: S.T.A.L.K.E.R"
_________________

Добрый день, есть простенькая задачка, сделать в редакторе карт такой скрипт, чтобы, например, при убийстве нейтрала, любому герою, кто бы это сделал, дали Х опыта.

Но вот, никак не получается это реализовать. В чем тут ошибка?

GetPlayerHeroes(0);
SetGameVar(whotoup, 0);
whotoup = GetPlayerHeroes(0);
ChangeHeroStat(whotoup[0], 0, 999999999)

В ответ пользователю CetusSantis
Аватар пользователя
CetusSantis

Добрый день, есть простенькая задачка, сделать в редакторе карт такой скрипт, чтобы, например, при убийстве нейтрала, любому герою, кто бы это сделал, дали Х опыта.

Но вот, никак не получается это реализовать. В чем тут ошибка?

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 глупых вопроса)

Как дать юниту это имя? 

Куда нужно добавить этот скрипт? К этому юниту? Если да, то скрипт или комбат скрипт?

В ответ пользователю CetusSantis
Аватар пользователя
CetusSantis

Сразу 2 глупых вопроса)

Как дать юниту это имя? 

Куда нужно добавить этот скрипт? К этому юниту? Если да, то скрипт или комбат скрипт?


Имя добавляется в параметр Name  юнита в редакторе карт. Я приложил скриншот, там зеленым выделено куда.

Скрипт в общий скрипт карты.
Вложения 1
1 файл • Общий размер: 368,4 KB
Мои карты: Белый Храм, Поменяться местами, Судьба королевства, Стихийные острова.
В ответ пользователю Долгий
Аватар пользователя
Проверил скрипт. Есть 1 ошибка: функция isObjectExists пишется с большой буквы: IsObjectExists

Добавлено через 1 минуту
CetusSantis
Понятно, а с модом heroes5.5 такой трюк совместим? А то там тоже свои скрипты.
Не знаю, не проверял. Может сработает, а может нет. На ванилле проверил, работает
Мои карты: Белый Храм, Поменяться местами, Судьба королевства, Стихийные острова.

Статистика

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