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

Марта
Добавлено через 4 часа 8 минут

Как мне написать, что портоваться должен тот герой, который заюзал объект, если этот герой принадлежит первому игроку?
Итак, немного теории. Внутри скобок, после имени вашей функции, написано магическое слово heroname. Это аргумент функции. Как в школе, f(x)  = x + 5. То есть туда можно отдавать разные значения, и результат предполагается разный. Отдать аргумент в функцию нужно руками, если вы её вызываете сами, но т. к посещение объекта - уже описанное разработчиками событие, в любую функцию, которую вы укажите в триггере, передадутся имя героя, и имя объекта. То есть, дописав после heroname что-то типа object , вы получите ещё и имя объекта, с которым произошло взаимодействие. 
Так вот, следуя мною описанной логике, переменная heroname ВСЕГДА содержит имя именно того героя, который подошёл к объекту. Поэтому всë, что вам осталось, это написать проверку, что этот герой - герой первого игрока. 
Собственно это можно сделать, если я не ошибаюсь, GetObjectOwner(heroname) == 1.ну, конечно, вы эту проверку в if засуньте и так далее, но я надеюсь вы логику поняли. 
То что вы написали там тоже сработает, для тех героев, что вы в таблицу записали, но у вас в проверке heroName, а в аргументе heroname. А скрипты - чувствительны к регистру, как и почти любой ЯП.
Я понимаю, почему вы так ошиблись. В документации указано, что SetObjectPosition первым принимает некий heroName, вот и вы туда такое же пихаете, однако это лишь "указулька", это тоже самое, что у вас написано heroname в функции телепортации. Могли туда нарисать arg1, или любую другую чушь. Просто тогда вам было бы ещё не понятнее. Отсюда, когда вы передаёте в любую функцию аргумент, он вовсе не должен быть назван также, как прописано в заголовке функции. Можете хоть руками туда цифро-буквен писать, если нужно. 
 
Пост скриптум:
Лучше не копировать скрипты с форума, А взять добротную карту, желательно в которую играли, в которой есть скрипты, и смотреть их. Например сценарий "Проклятый" содержит множество хороших скриптов. Также стоит посмотреть работы RedHeavenHero. И почитайте руководство, потому как без него ну тяяяжко такие скрипты как у вас писать)

Добавлено через 1 час 26 минут
Trigger(OBJECT_TOUCH_TRIGGER,"portal","Portal_HaladF")
function Portal_HaladF(heroname)
  if(GetObjectOwner(heroname) == 1) then
    SetObjectPosition(heroname,56,90,0)
  end
end

Вот, вместо "portal" в триггере даёте свое название и всё будет работать.
а чтобы вы поняли, возможно, в чём прикол с именованием аргументов: 

Trigger(OBJECT_TOUCH_TRIGGER,"portal","Portal_HaladF")
function Portal_Halad(red_flower)
  if(GetObjectOwner(red_flower) == 1) then
    SetObjectPosition(red_flower,56,90,0)
  end
end

Вместо heroname появился red_flower. Согласитесь, цветы к герою никак не относятся?Конечно, так никто не называет, потому что потом сам не разберешься, что за красный цветок, но вам нужно понять суть - неважно какое там имя само-по себе, главное чтобы оно было вставлено в нужное место. Если Trigger вам отдаёт имя героя в первый аргумент, то он вам его отдаст вне зависимости от того, как вы обзовёте переменную.

__________________




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

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




                                                                                       




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

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




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