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

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

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

Ответ
Страница 262 из 267
 
Опции темы
#3916
Старый 28.06.2024, 13:05
  #3916
^
BlueHeavenHero
 
Аватар для BlueHeavenHero
📖
Регистрация: 20.08.2022
Сообщения: 428
Регистрация: 20.08.2022
Сообщения: 428
По умолчанию
Re: Скрипты

Привет всем. Спустя долгое время наконец-то я вернулся к работе над картами, ясен-красен кое-что подзабыл, но вопрос не в этом. Очень долго я пытался сделать функцию, которая бы проверяла, на каком "этаже" находится герой - на поверхности или в подземелье. Именно этот параметр, а не общее расположение, ибо мне потом надо будет передать это значение "этажа" в другую функцию. Может кто подсказать, как грамотно сделать такую проверку?
BlueHeavenHero вне форума
Ответить с цитированием
#3917
Старый 28.06.2024, 15:14
  #3917
^
Jack_of_shadows
 
Аватар для Jack_of_shadows
📖
Регистрация: 08.09.2013
Сообщения: 551
Выставка наград
Регистрация: 08.09.2013
Сообщения: 551
Выставка наград
По умолчанию
Re: Скрипты

BlueHeavenHero, если написать
local x, y, f = GetObjectPosition(имя_героя);
то f и будет номером этажа.
__________________
РПГ-сценарий для HoMM5: Путь героя

ЧаВо по созданию карт для HoMM5: ЧаВо
РПГ-сценарий для HoMM5: Путь героя

ЧаВо по созданию карт для HoMM5: ЧаВо
Jack_of_shadows вне форума
Ответить с цитированием
#3918
Старый 28.06.2024, 15:25
  #3918
^
BlueHeavenHero
 
Аватар для BlueHeavenHero
📖
Регистрация: 20.08.2022
Сообщения: 428
Регистрация: 20.08.2022
Сообщения: 428
По умолчанию
Re: Скрипты

Jack_of_shadowsBlueHeavenHero, если написать
local x, y, f = GetObjectPosition(имя_героя);
то f и будет номером этажа.
Не думал, что это может быть так просто. Спасибо, сейчас попробую сделать снова
BlueHeavenHero вне форума
Ответить с цитированием
#3919
Старый 30.06.2024, 09:35
  #3919
^
Азгалор
 
Аватар для Азгалор
📖
Регистрация: 24.04.2016
Сообщения: 226
Регистрация: 24.04.2016
Сообщения: 226
По умолчанию
Re: Скрипты

Привет! Такой вопрос: если раскидать свой скрипт по нескольким файлам(вынести в файлы некоторые части кода, которые должны отрабатывать только в определенные моменты), а потом в нужный момент их запускать через doFile, там всё что нужно отрабатывать, и на этом будет окончена считка кода от туда? Просто, интересно разгрузит ли это карту, или же без разницы делить-не делить, а лагги всё равно будут?
Азгалор вне форума
Ответить с цитированием
#3920
Старый 30.06.2024, 14:18
  #3920
^
Jack_of_shadows
 
Аватар для Jack_of_shadows
📖
Регистрация: 08.09.2013
Сообщения: 551
Выставка наград
Регистрация: 08.09.2013
Сообщения: 551
Выставка наград
По умолчанию
Re: Скрипты

Я думаю это ничего не изменит, поскольку подгрузка кода интерпретатором это очень быстрая операция. Если же речь о его выполнении (например, настроить какую-нибудь локацию при старте карты или в момент входа в эту локацию), то конечно можно сэкономить, но для этого не обязательно делить на файлы, просто код в функции, которая вызывается в определённый момент.
__________________
РПГ-сценарий для HoMM5: Путь героя

ЧаВо по созданию карт для HoMM5: ЧаВо
РПГ-сценарий для HoMM5: Путь героя

ЧаВо по созданию карт для HoMM5: ЧаВо
Jack_of_shadows вне форума
Ответить с цитированием
#3921
Старый 01.07.2024, 01:18
  #3921
^
green belly
 
Аватар для green belly
📖
Регистрация: 14.06.2024
Сообщения: 21
Регистрация: 14.06.2024
Сообщения: 21
По умолчанию
Re: Скрипты

У меня вопрос, как поменять стоимость забывания навыка в здании ментора?
green belly вне форума
Ответить с цитированием
#3922
Старый 03.07.2024, 01:37
  #3922
^
BlueHeavenHero
 
Аватар для BlueHeavenHero
📖
Регистрация: 20.08.2022
Сообщения: 428
Регистрация: 20.08.2022
Сообщения: 428
По умолчанию
Re: Скрипты

BlueHeavenHeroНе думал, что это может быть так просто. Спасибо, сейчас попробую сделать снова
Что-то у меня не получается... Я всё же не понял, как можно передать полученный результат этажа из GetObjectPosition в глобальную переменную(
BlueHeavenHero вне форума
Ответить с цитированием
#3923
Старый 03.07.2024, 01:59
  #3923
^
Азгалор
 
Аватар для Азгалор
📖
Регистрация: 24.04.2016
Сообщения: 226
Регистрация: 24.04.2016
Сообщения: 226
По умолчанию
Re: Скрипты

BlueHeavenHero, я себе на карте такую функцию написал:

function WhereAmI(obj)
   local x, y, z = GetObjectPosition(obj);
   if z == 0 then
      return 0
   elseif z == 1 then
      return 1
   end
end

Использование: 

    if heroName == "Duncan" then
        if WhereAmI( heroName ) == 0  then
            DuncanInGround = 1
        elseif WhereAmI( heroName ) == 1  then 
            DuncanInGround = 0
        end
    end 
Азгалор вне форума
Ответить с цитированием
#3924
Старый 03.07.2024, 13:35
  #3924
^
Jack_of_shadows
 
Аватар для Jack_of_shadows
📖
Регистрация: 08.09.2013
Сообщения: 551
Выставка наград
Регистрация: 08.09.2013
Сообщения: 551
Выставка наград
По умолчанию
Re: Скрипты

Любая переменная для которой не написано local, она и есть глобальная. Просто выбросим из примера одно слово:
x, y, f = GetObjectPosition(имя_героя);
Переменным желательно только присвоить более длинные имена, раз они видны из всего скрипта.
__________________
РПГ-сценарий для HoMM5: Путь героя

ЧаВо по созданию карт для HoMM5: ЧаВо
РПГ-сценарий для HoMM5: Путь героя

ЧаВо по созданию карт для HoMM5: ЧаВо
Jack_of_shadows вне форума
Ответить с цитированием
#3925
Старый 06.07.2024, 01:19
  #3925
^
green belly
 
Аватар для green belly
📖
Регистрация: 14.06.2024
Сообщения: 21
Регистрация: 14.06.2024
Сообщения: 21
По умолчанию
Re: Скрипты

Всем привет, почитал на просторах форума и не только инфу про функцию talkboxforplayer, всё работает кроме одного, функция не видит коснувшегося героя. Окошко с вариантами есть, тексты ответов есть, кнопки есть, а вот героя не видит, и армию не выдает.
Замысел такой - случайный герой касается домика - выбирает ответ - получает армию.

Сам код взят из руководства Jack_of_shadows:
Зеленым цветом выделил правильный код, который я копировал, а красным код, который я писал под себя и он разумеется содержит где то ошибку

function DialogBox(icon, title, text, mode, callback, ...)
hero = human
if arg.n==1 then
TalkBoxForPlayers(GetCurrentPlayer(), icon, nil, text, nil, callback, mode, title, nil, 0, arg[1])
elseif arg.n==2 then
TalkBoxForPlayers(GetCurrentPlayer(), icon, nil, text, nil, callback, mode, title, nil, 0, arg[1], arg[2])
elseif arg.n==3 then
TalkBoxForPlayers(GetCurrentPlayer(), icon, nil, text, nil, callback, mode, title, nil, 0, arg[1], arg[2], arg[3])
elseif arg.n==4 then
TalkBoxForPlayers(GetCurrentPlayer(), icon, nil, text, nil, callback, mode, title, nil, 0, arg[1], arg[2], arg[3], arg[4])
elseif arg.n==5 then
TalkBoxForPlayers(GetCurrentPlayer(), icon, nil, text, nil, callback, mode, title, nil, 0, arg[1], arg[2], arg[3], arg[4], arg[5])
end;
end

Trigger (OBJECT_TOUCH_TRIGGER, "pokrov1", "Talk1");

function Talk1()
DialogBox("/UI/MessageBox/Message.xdb#xpointer(/Texture)","/UI/MessageBox/TalkBox/text.txt", "/Maps/Multiplayer/arena/voenachalnik1.txt", 1, "Talk1Callback", "/Maps/Multiplayer/arena/voenachalnik2.txt", "/Maps/Multiplayer/arena/voenachalnik3.txt", "/Maps/Multiplayer/arena/voenachalnik4.txt")
end

function Talk1Callback(pl, ans)
if (ans==1) and HasHeroSkill (human, 57)
then
AddHeroCreatures (human, 106, 50);
elseif (ans==2) and HasHeroSkill (human, 57)
then
AddHeroCreatures (human, 107, 50);
elseif (ans==3) and HasHeroSkill (human, 57)
then
AddHeroCreatures (human, 108, 50);
end;
end;

Благодарю за помощь

green belly вне форума
Ответить с цитированием
#3926
Старый 06.07.2024, 01:47
  #3926
^
Азгалор
 
Аватар для Азгалор
📖
Регистрация: 24.04.2016
Сообщения: 226
Регистрация: 24.04.2016
Сообщения: 226
По умолчанию
Re: Скрипты

green belly, сразу же вижу что у тебя триггер не передаёт никакие аргументы в функцию с DialogBox'ом, т.е. в Talk1. А ещё у тебя как-то неверно прописано назначение переменной героя, с которым нужно что-либо делать. Для начала следует убрать строку hero = human из DialogBox(она там просто не нужна), строку function Talk1() заменить на function Talk1(hero), в самой функции добавить строку human = hero. Теперь скрипт будет знать кто такой human чтобы давать ему существ.
Азгалор вне форума
Ответить с цитированием
#3927
Старый 06.07.2024, 01:58
  #3927
^
green belly
 
Аватар для green belly
📖
Регистрация: 14.06.2024
Сообщения: 21
Регистрация: 14.06.2024
Сообщения: 21
По умолчанию
Re: Скрипты

Азгалор
green belly, сразу же вижу что у тебя триггер не передаёт никакие аргументы в функцию с DialogBox'ом, т.е. в Talk1. А ещё у тебя как-то неверно прописано назначение переменной героя, с которым нужно что-либо делать. Для начала следует убрать строку hero = human из DialogBox(она там просто не нужна), строку function Talk1() заменить на function Talk1(hero), в самой функции добавить строку human = hero. Теперь скрипт будет знать кто такой human чтобы давать ему существ.


Спасибо, сделал, заработало.
Ранее никаких переменных и аргументов не указывал и не подтягивал
green belly вне форума
Ответить с цитированием
#3928
Старый 13.07.2024, 16:14
  #3928
^
green belly
 
Аватар для green belly
📖
Регистрация: 14.06.2024
Сообщения: 21
Регистрация: 14.06.2024
Сообщения: 21
По умолчанию
Re: Скрипты

Снова я с TalkBoxForPlayers

Проблема такая, есть рабочий код, он прописан 8 раз для 8 игроков на касание 8 объектов. И тут начинается самый шок.

Для первых 2 функций - работает все идеально.

Для 3-8 функций - не вызывается диалог бокс.

Для этих же 3-8 функций вызывается строка else messagebox....

Сам код:

function pokrov1F(hero)
human = hero
if HasHeroSkill(human, 80)
then
DialogBox("/UI/MessageBox/Message.xdb#xpointer(/Texture)","/UI/MessageBox/TalkBox/text.txt", "/Maps/Multiplayer/arena/pokrov1.txt", 1, "pokrov1otvetF", "/Maps/Multiplayer/arena/pokrov2.txt", "/Maps/Multiplayer/arena/pokrov3.txt", "/Maps/Multiplayer/arena/pokrov4.txt", "/Maps/Multiplayer/arena/pokrov5.txt")
Trigger (OBJECT_TOUCH_TRIGGER, "pokrov1", nil);
else MessageBox("/Maps/Multiplayer/arena/netpokrov.txt");
end;
end;
Trigger (OBJECT_TOUCH_TRIGGER, "pokrov1", "pokrov1F");

function pokrov1otvetF(pl, ans)
if (ans==1)
then
ChangeHeroStat(human, STAT_ATTACK, 3);
elseif (ans==2)
then
ChangeHeroStat(human, STAT_SPELL_POWER, 3);
elseif (ans==3)
then
ChangeHeroStat(human, STAT_KNOWLEDGE, 3);
elseif (ans==4)
then
ChangeHeroStat(human, STAT_LUCK, 2);
end;
end;

Разумеется я меняю параметры для того чтобы работало на разных игроков

Меняю на цифры 2,3 и тд до 8, выделил жёлтым цветом меняемые параметры

Для меня неизвестно где проблема, потому что ВО ВСЕХ функциях реально проверяется наличие перка 80, ведь когда его нет показывается else messagebox, но как так для цифр 1 и 2 работает, а далее нет.

green belly вне форума
Ответить с цитированием
#3929
Старый 13.07.2024, 16:45
  #3929
^
Mооnst@r
 
Аватар для Mооnst@r
📖
Регистрация: 07.08.2019
Сообщения: 967
Регистрация: 07.08.2019
Сообщения: 967
По умолчанию
Re: Скрипты

green belly, посмотри коммент #3900
Mооnst@r вне форума
Ответить с цитированием
#3930
Старый 13.07.2024, 17:45
  #3930
^
Jack_of_shadows
 
Аватар для Jack_of_shadows
📖
Регистрация: 08.09.2013
Сообщения: 551
Выставка наград
Регистрация: 08.09.2013
Сообщения: 551
Выставка наград
По умолчанию
Re: Скрипты

green belly, мне кажется, вопрос всё-таки не с TalkBoxForPlayers(), а с неработающей проверкой HasHeroSkill(). Попробуйте декомпозировать проблему, например просто за каждого из игроков прописать в консоли @print(HasHeroSkill("имя_соответствующего_героя ", 80)) и посмотреть везде ли будет одинаковый результат.
__________________
РПГ-сценарий для HoMM5: Путь героя

ЧаВо по созданию карт для HoMM5: ЧаВо
РПГ-сценарий для HoMM5: Путь героя

ЧаВо по созданию карт для HoMM5: ЧаВо
Jack_of_shadows вне форума
Ответить с цитированием
Ответ
Страница 262 из 267


Опции темы



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


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

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