Форум HeroesWorld-а - Показать сообщение отдельно - Скрипты
Тема: Скрипты
Показать сообщение отдельно
#3607
Старый 15.05.2022, 21:53
  #3607
^
Jewily
 
Аватар для Jewily
📖
Регистрация: 25.09.2016
Сообщения: 140
Jewily#4267
Регистрация: 25.09.2016
Сообщения: 140
Jewily#4267
По умолчанию
Re: Скрипты

Марта
В чём тут может быть причина? Почему во второй функции не работает проверка на имя персонажа, или на принадлежность к первому игроку?
Рассказываю. QuestionBox отдает в функцию-коллбек(Portal_HaladF в вашем случае) первым аргументом номер игрока,которому отослали сообщение, а не героя. Героя же она вообще не отдаёт. Так её написали разработчики. Решение тут такое:
 
function Town_Portal_Tilgatal_Obelisk_F (heroname) 
local player = GetObjectOwner(heroname)
if(player == 1) then
QuestionBox("/Maps/SingleMissions/L1/Portal_Halad.txt", "Portal_HaladF(player,[["..heroname.."]])", "Town_Portal_Torost_question_F(player,[["..heroname.."]])"); ----вопрос: вы желаете в Халад? Если да - портуемся, если нет - предлагаем Торост.
sleep(1)
else
print("не тот герой");
end;
end;
Trigger(OBJECT_TOUCH_TRIGGER, "town_portal_Tilgatal", "Town_Portal_Tilgatal_Obelisk_F");

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

function Portal_HaladF (player,heroname)
local player = player + 0 -- Объясняю финт ушами. Когда вы отдаёте прям в кавычках аргументы, они все передадутся строками.
                                        -- в player на входе в функцию лежит "1", а если прибавить к строке содержащей число ноль, она станет числом(т.е будет просто 1). 
if(player == 1) then
SetObjectPosition(heroname, 56, 90, 0);
else
print("не тот герой"); -- тут идет проверка на игрока, так что целесообразнее написать "не тот игрок"
end;
end;

Теперь объясню, что произошло. Аргументы коллбек функции можно отдать руками(как в приведённом мною примере), однако стандартная передача аргументов затирается(Я не смог придумать этому решения, кроме как вручную отдать те параметры, которые игра передавала ранее. В этом случае это возможно, ведь передаётся лишь номер игрока). То есть мы просто открываем скобки(да, прям в кавычках) и пишем туда переменные. Важно: числа можно передать непосредственно, просто указав переменную в скобках. Вот этот же [["..heroname.."]] динозавр - это способ передачи строки. [[ ]] - это тоже кавычки. Важно чтобы кавычки перед двумя точками совпадали с теми кавычкам, которыми вы открываете 
название вашей функции, иначе не сработает. Это достаточно неочевидная вещь, и о ней стоит почитать в руководстве Хоттабыча.
П.С 
Под ваши нужды подошел бы TalkBox , но боюсь его использование может вызвать затруднения.

__________________




Не уходи безропотно во тьму,
Будь яростней пред ночью всех ночей,
Не дай погаснуть свету своему!

Хоть мудрый знает – не осилишь тьму
Во мгле словами не зажжёшь лучей –
Не уходи безропотно во тьму.




                                                                                       




Не уходи безропотно во тьму,
Будь яростней пред ночью всех ночей,
Не дай погаснуть свету своему!

Хоть мудрый знает – не осилишь тьму
Во мгле словами не зажжёшь лучей –
Не уходи безропотно во тьму.




                                                                                       
Jewily вне форума
Ответить с цитированием