Скрипты - Страница 263 - Форум HeroesWorld-а

Быстрая навигация по основным разделам форума:
Турниры
КАРТЫ
Heroes 6
Heroes 5
Heroes 4
Heroes 3
Heroes 2
Heroes 1
Might&Magic

Герои Меча и Магии 5 - Картостроительство (Редактор карт) В этом разделе можно обсуждать все что касается редактора карт для Heroes of Might and Magic V. Так же здесь обсуждаем картостроительство.

Ответ
Страница 263 из 267
 
Опции темы
#3931
Старый 13.07.2024, 20:34
  #3931
^
Gerter
 
Аватар для Gerter
📖
Регистрация: 16.07.2012
Адрес: Санкт-Петербург
Сообщения: 863
pegn0ly#9113
Выставка наград
Регистрация: 16.07.2012
Адрес: Санкт-Петербург
Сообщения: 863
pegn0ly#9113
Выставка наград
По умолчанию
Re: Скрипты

Ну если глянуть код DialogBox'а, то можно предположить, что проблема в использовании GetCurrentPlayer там. TalkBox ожидает первым аргументом не номер игрока, а его filter. Для 1 и 2 игрока фильтр равен номеру, но для 3+ нет. Поэтому, вероятно, и работает только для двух первых игроков. Если проблема в этом, то решением будет обернуть первый аргумент DialogBox'а - GetPlayerFilter(GetCurrentPlayer())
__________________
Нет войне.
Нет войне.
Gerter вне форума
Ответить с цитированием
#3932
Старый 13.07.2024, 21:09
  #3932
^
green belly
 
Аватар для green belly
📖
Регистрация: 14.06.2024
Сообщения: 21
Регистрация: 14.06.2024
Сообщения: 21
По умолчанию
Re: Скрипты

Попробовал поменять местами 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 вне форума
Ответить с цитированием
#3933
Старый 13.07.2024, 22:05
  #3933
^
Gerter
 
Аватар для Gerter
📖
Регистрация: 16.07.2012
Адрес: Санкт-Петербург
Сообщения: 863
pegn0ly#9113
Выставка наград
Регистрация: 16.07.2012
Адрес: Санкт-Петербург
Сообщения: 863
pegn0ly#9113
Выставка наград
По умолчанию
Re: Скрипты

сразу бы хотел предупредить, что если собираешься юзать талкбоксы в мультиплеере по сети, то лучше сразу отказаться от этой идеи, т.к. эта функция ломает сейвы в мультике.
__________________
Нет войне.
Нет войне.
Gerter вне форума
Ответить с цитированием
#3934
Старый 13.07.2024, 22:17
  #3934
^
Долгий
 
Аватар для Долгий
📖
Регистрация: 23.04.2019
Сообщения: 109
Регистрация: 23.04.2019
Сообщения: 109
По умолчанию
Re: Скрипты

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 игроков. 
Долгий вне форума
Ответить с цитированием
#3935
Старый 14.07.2024, 17:27
  #3935
^
Jack_of_shadows
 
Аватар для Jack_of_shadows
📖
Регистрация: 08.09.2013
Сообщения: 551
Выставка наград
Регистрация: 08.09.2013
Сообщения: 551
Выставка наград
По умолчанию
Re: Скрипты

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

ЧаВо по созданию карт для HoMM5: ЧаВо
Jack_of_shadows вне форума
Ответить с цитированием
#3936
Старый 11.09.2024, 20:47
  #3936
^
Shiroyasha2910
📖
Регистрация: 07.07.2019
Сообщения: 58
Регистрация: 07.07.2019
Сообщения: 58
По умолчанию
Re: Скрипты

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

Shiroyasha2910 вне форума
Ответить с цитированием
#3937
Старый 11.09.2024, 21:21
  #3937
^
Magnificent
 
Аватар для Magnificent
📖
Регистрация: 04.08.2024
Сообщения: 87
Регистрация: 04.08.2024
Сообщения: 87
По умолчанию
Re: Скрипты

Shiroyasha2910

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


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

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

Быстро проверил через консоль. Да, так работает, мана остаётся выше максимального значения. Пока так, возможно, кто-то знает как одной командой это сделать.
Magnificent вне форума
Ответить с цитированием
#3938
Старый 11.09.2024, 21:56
  #3938
^
Shiroyasha2910
📖
Регистрация: 07.07.2019
Сообщения: 58
Регистрация: 07.07.2019
Сообщения: 58
По умолчанию
Re: Скрипты

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

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

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

Я об этом думал, но надеялся, что я просто тупой, и не знаю способа получше. Но всё равно спасибо. Блин, как же я в тот раз это одной командой сделал.
Shiroyasha2910 вне форума
Ответить с цитированием
#3939
Старый 12.09.2024, 07:47
  #3939
^
}{0TT@6bI4
 
Аватар для }{0TT@6bI4
📖
Регистрация: 05.09.2019
Адрес: Серебряные Города, Аль-Сафир
Сообщения: 2056
Выставка наград
Регистрация: 05.09.2019
Адрес: Серебряные Города, Аль-Сафир
Сообщения: 2056
Выставка наград
По умолчанию
Re: Скрипты

Возможно, вы помните увеличение маны в бою функцией SetUnitManaPoints, там нет ограничений по максимуму маны

В моём моде очки здоровья технически реализованы как мана героя и проблемы такой нет, ChangeHeroStat увеличивает манапул выше, чем подразумевает знание героя
__________________
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
Discord-сервер "Герои 5: S.T.A.L.K.E.R"
Сервер по модификации "Герои 5: S.T.A.L.K.E.R"
_________________
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
Discord-сервер "Герои 5: S.T.A.L.K.E.R"
Сервер по модификации "Герои 5: S.T.A.L.K.E.R"
_________________
}{0TT@6bI4 вне форума
Ответить с цитированием
#3940
Старый 13.10.2024, 00:25
  #3940
^
CetusSantis
📖
Регистрация: 13.10.2024
Сообщения: 5
Регистрация: 13.10.2024
Сообщения: 5
По умолчанию
Re: Скрипты

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

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

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

CetusSantis вне форума
Ответить с цитированием
#3941
Старый 13.10.2024, 20:04
  #3941
^
Долгий
 
Аватар для Долгий
📖
Регистрация: 23.04.2019
Сообщения: 109
Регистрация: 23.04.2019
Сообщения: 109
По умолчанию
Re: Скрипты

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")
Долгий вне форума
Ответить с цитированием
#3942
Старый 14.10.2024, 22:31
  #3942
^
CetusSantis
📖
Регистрация: 13.10.2024
Сообщения: 5
Регистрация: 13.10.2024
Сообщения: 5
По умолчанию
Re: Скрипты

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

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

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

CetusSantis вне форума
Ответить с цитированием
#3943
Старый 14.10.2024, 23:04
  #3943
^
Долгий
 
Аватар для Долгий
📖
Регистрация: 23.04.2019
Сообщения: 109
Регистрация: 23.04.2019
Сообщения: 109
По умолчанию
Re: Скрипты

CetusSantis

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

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

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


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

Скрипт в общий скрипт карты.
Миниатюры
Нажмите на изображение для увеличения
Название:  example.png
Просмотров: 11
Размер:	549.6 Кбайт
ID:	73656  
Долгий вне форума
Ответить с цитированием
#3944
Старый 14.10.2024, 23:27
  #3944
^
CetusSantis
📖
Регистрация: 13.10.2024
Сообщения: 5
Регистрация: 13.10.2024
Сообщения: 5
По умолчанию
Re: Скрипты

Понятно, а с модом heroes5.5 такой трюк совместим? А то там тоже свои скрипты.
CetusSantis вне форума
Ответить с цитированием
#3945
Старый 14.10.2024, 23:29
  #3945
^
Долгий
 
Аватар для Долгий
📖
Регистрация: 23.04.2019
Сообщения: 109
Регистрация: 23.04.2019
Сообщения: 109
По умолчанию
Re: Скрипты

Проверил скрипт. Есть 1 ошибка: функция isObjectExists пишется с большой буквы: IsObjectExists

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

Не знаю, не проверял. Может сработает, а может нет. На ванилле проверил, работает
Долгий вне форума
Ответить с цитированием
Ответ
Страница 263 из 267


Опции темы



Часовой пояс GMT +4, время: 13:31.


vBulletin v3.5.0, Copyright ©2000-2026, Jelsoft Enterprises Ltd. (Русский)

Яндекс цитирование    Top.Mail.Ru