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

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

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

Ответ
Страница 241 из 246
 
Опции темы
#3601
Старый 14.05.2022, 15:56
  #3601
^
Марта
📖
Регистрация: 31.01.2020
Сообщения: 56
Регистрация: 31.01.2020
Сообщения: 56
По умолчанию
Re: Скрипты

Jewily, спасибо, и впрямь, равно-то я проглядела. Теперь пишут ошибку на строчке 
 
if GetHeroName(defH) == "Shadwyn" and GetHeroName(attH) == "Nur" then  


Может, я, конечно, endами обсчиталась, но непохоже.


Марта вне форума
Ответить с цитированием
#3602
Старый 14.05.2022, 17:39
  #3602
^
Jewily
 
Аватар для Jewily
📖
Регистрация: 25.09.2016
Сообщения: 136
Jewily#4267
Регистрация: 25.09.2016
Сообщения: 136
Jewily#4267
По умолчанию
Re: Скрипты

МартаТеперь пишут ошибку на строчке 
 
if GetHeroName(defH) == "Shadwyn" and GetHeroName(attH) == "Nur" then  


Может, я, конечно, endами обсчиталась, но непохоже.


Скорее всего обсчитались, потому как приведённый кусок кода, если его закрыть end`ом, не содержит синтаксических ошибок.
Просмотрите каждый блок и проверьте, везде ли стоит end, т.к если вы не поставили end где-то, то вам интерпретатор может и не выдать адекватного местоположения пропущенного end`а, так уж он работает. 
__________________




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

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




                                                                                       




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

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




                                                                                       
Jewily вне форума
Ответить с цитированием
#3603
Старый 14.05.2022, 18:19
  #3603
^
}{0TT@6bI4
 
Аватар для }{0TT@6bI4
📖
Регистрация: 05.09.2019
Адрес: Серебряные Города, Аль-Сафир
Сообщения: 1574
Выставка наград
Регистрация: 05.09.2019
Адрес: Серебряные Города, Аль-Сафир
Сообщения: 1574
Выставка наград
По умолчанию
Re: Скрипты

Хорошо, для народа — попроще. У вас в скрипте — ошибка. Ошибка в моём скрипте — один знак равно вместо двух в условии. Чтобы от таких "страшных" очепяток (и моих, и ваших) обезопаситься, рекомендую прочитать руководство "Введение в lua" в файлах группы (у меня в подписи). Желательно, конечно, хотя бы азы понимать, чтобы не тратить на каждую ошибку синтаксиса время

Можно больше конкретики (я уже успел забыть, в чём заключалась ваша идея). Вам нужно, чтобы на старте в любом бою определённый герой (Илайя) кастовала на всех мобов молнию; а в боях, где участвует главный злодей (Назир), не только Илайя кастовала молнию, но ещё и Назир кастовал на всех существ Илайи огненные шары? Всё это в начале боя, разумеется
__________________
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
_________________
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
_________________
}{0TT@6bI4 вне форума
Ответить с цитированием
#3604
Старый 15.05.2022, 01:07
  #3604
^
Марта
📖
Регистрация: 31.01.2020
Сообщения: 56
Регистрация: 31.01.2020
Сообщения: 56
По умолчанию
Re: Скрипты

Идея была такая, чтобы Илайя (ГГ) могла бы атаковать главного гада (Назира), и при этом её комбат-скрипт отключался бы, а включался бы скрипт Назира, хотя он и защищается.
Я нашла свой косяк в скрипте, но он всё равно не работает, хотя editor перестал придираться.
Я пишу в комбат-скрипте, - вторым скриптом, после скрипта Илайи на каст Ледяной глыбы в каждом бою::

function Nur_battle()

local defH, attH = GetDefenderHero(), GetAttackerHero()

  if GetHeroName(defH) == "Nur" and GetHeroName(attH) == "Shadwyn" then
        local mana = GetUnitManaPoints(GetDefenderHero())
        SetUnitManaPoints(GetDefenderHero(), 200);
        repeat sleep(1) until GetUnitManaPoints(GetDefenderHero())==200
        for i, creature in GetAttackerCreatures() do
        startThread(UnitCastAimedSpell, GetDefenderHero(), 3, creature)
        end;
        SetUnitManaPoints(GetDefenderHero(), mana);
else
if GetHeroName(defH) == "Shadwyn" and GetHeroName(attH) == "Nur" then
        local mana = GetUnitManaPoints(GetAttackerHero())
        SetUnitManaPoints(GetAttackerHero(), 200);
        repeat sleep(1) until GetUnitManaPoints(GetAttackerHero())==200
        for i, creature in GetDefenderCreatures() do
        startThread(UnitCastAimedSpell, GetAttackerHero(), 3, creature)
        end;
        SetUnitManaPoints(GetAttackerHero(), mana);
        end;
          end;
           end;
             end;
              end;

Но когда Илайя нападает на Назира, она по-прежнему кастит Ледяную глыбу, а Назир на неё молнию не кастит.

Что я делаю не так?)
Может, Назира надо было в MapScript куда-то прописать?

Добавлено через 2 минуты
То есть, я пишу вторую функцию в комбат-скрипте, конечно. А не второй скрипт.

Добавлено через 4 часа 8 минут
И сразу второй вопрос.

Я тут пытаюсь наладить систему Таун порталов, как в третьих Героях.
С ГГ никаких проблем нет, - она портуется куда надо.
Но мне бы хотелось, чтобы все герои первого игрока могли бы портоваться через этот скрипт.
И тут возникает проблема, как их обозначить, - SetObjectPosition(heroName, x, y, floor) требует имя конкретного героя.
А почём же я знаю, кто попадётся мне в таверне?

Поскольку я не знаю, как обозначить героя  без имени, я танцевала с бубном, пытаясь копировать скрипты с форума, но толку что-то нет.
Я написала в начале MapScript:

kot_heroes={"Shadwyn", "Raelag", "Urunir", "Ohtarig"};

Потом написала функцию:

function Portal_HaladF (heroname)
local Portal_Hero
for key, name in kot_heroes do
if name == heroName then
Portal_Hero=1
SetObjectPosition(heroName, 56, 90, 0);
sleep(1);
end;
end;
if not Portal_Hero then
print("не тот герой");
end;
end;

Но всё это не работает, игра продолжает требовать имя того, кто будет портоваться.

Как мне написать, что портоваться должен тот герой, который заюзал объект, если этот герой принадлежит первому игроку?
Марта вне форума
Ответить с цитированием
#3605
Старый 15.05.2022, 12:47
  #3605
^
Jewily
 
Аватар для Jewily
📖
Регистрация: 25.09.2016
Сообщения: 136
Jewily#4267
Регистрация: 25.09.2016
Сообщения: 136
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 вне форума
Ответить с цитированием
#3606
Старый 15.05.2022, 20:09
  #3606
^
Марта
📖
Регистрация: 31.01.2020
Сообщения: 56
Регистрация: 31.01.2020
Сообщения: 56
По умолчанию
Re: Скрипты

Jewily, хотя ваша функция рабочая (спасибо, буду знать), но так не работает в моём случае.

Дело в следующем, - как я сказала, я пытаюсь сделать что-то вроде возвращения к системе Таун порталов в Третьих героях, только чрез объекты.
Как это сделать? Единственное, что пришло мне в голову - это через QuestionBox.
Вы хотите попасть в Халад? если ответ "нет", может быть, вы хотите попасть в Торост, - и тд. Городов у меня на карте много.

Значит, за объект я могу цеплять только функцию, которая содержит в себе QuestionBox. А за саму телепортацию отвечает другая функция.

Я пишу:

function Town_Portal_Tilgatal_Obelisk_F (heroname)  -- это функция обелиска города Тилгатал, то есть, зацепленная за объект.
if(GetObjectOwner(heroname) == 1) then
QuestionBox("/Maps/SingleMissions/L1/Portal_Halad.txt", "Portal_HaladF", "Town_Portal_Torost_question_F"); ----вопрос: вы желаете в Халад? Если да - портуемся, если нет - предлагаем Торост.
sleep(1)
else
print("не тот герой");
end;
end;
Trigger(OBJECT_TOUCH_TRIGGER, "town_portal_Tilgatal", "Town_Portal_Tilgatal_Obelisk_F");


А вот функция самого телепорта:

function Portal_HaladF (heroname) 
if(GetObjectOwner(heroname) == 1) then
SetObjectPosition(heroname, 56, 90, 0);
else
print("не тот герой");
end;
end;

Вопрос-то мне задают, но не телепортируют, а вместо этого пишут Script Error: Object "1" does not exist.

Причём, если написать во второй функции:

function Portal_HaladF (heroname)
if heroname == "Shadwyn" then
SetObjectPosition("Shadwyn", 56, 90, 0);
sleep(1);
end;
end;

То не пишут ничего, но телепорта не происходит.

А вот если вместо второй функции втупую написать:
function Portal_HaladF (heroname)
SetObjectPosition("Shadwyn", 56, 90, 0);
sleep(1);
end;
 - тогда всё норм, она портуется куда надо.

Но если вместо "Shadwyn" поставить heroname, то опять пишут Script Error: Object "1" does not exist.

В чём тут может быть причина? Почему во второй функции не работает проверка на имя персонажа, или на принадлежность к первому игроку?
Марта вне форума
Ответить с цитированием
#3607
Старый 15.05.2022, 21:53
  #3607
^
Jewily
 
Аватар для Jewily
📖
Регистрация: 25.09.2016
Сообщения: 136
Jewily#4267
Регистрация: 25.09.2016
Сообщения: 136
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 вне форума
Ответить с цитированием
#3608
Старый 15.05.2022, 23:57
  #3608
^
Марта
📖
Регистрация: 31.01.2020
Сообщения: 56
Регистрация: 31.01.2020
Сообщения: 56
По умолчанию
Re: Скрипты

Увы, не работает. В игре пишут:

[Script Warning!] Walue was NIL when getting global with name 'player'
Script Error: attempf to perform arithmetic on a nil value

ЗЫ Что такое TalkBox, я даже не знаю).
Марта вне форума
Ответить с цитированием
#3609
Старый 16.05.2022, 00:16
  #3609
^
Jewily
 
Аватар для Jewily
📖
Регистрация: 25.09.2016
Сообщения: 136
Jewily#4267
Регистрация: 25.09.2016
Сообщения: 136
Jewily#4267
По умолчанию
Re: Скрипты

МартаУвы, не работает. В игре пишут:

[Script Warning!] Walue was NIL when getting global with name 'player'
Script Error: attempf to perform arithmetic on a nil value

ЗЫ Что такое TalkBox, я даже не знаю).
Возможно накосячил я где-то. Сейчас я протестирую у себя, и отправлю вам.

АПД:
Действительно, почему-то с плеером косяк, я его исправил. Ниже приведён полностью рабочий кусок кода, протестирован мной.
вам осталось добавить такую же пляску с [[ ]] к плееру. Одно скажу: в вашем случае вторая проверка излишне. Если вы показываете сообщение лишь 1 игроку, нет смысла в функции портала даже проверять, что это игрок первый, ибо он и так только первый. Но вы доделайте с передачей игрока, чтобы на будущее понимать как это работает. Но в самом коде, как вы можете увидеть, он не понадобился.
SetObjectEnabled("testObj",nil)
Trigger(OBJECT_TOUCH_TRIGGER,"testObj","testF")
function testF(heroname)
  local player = GetObjectOwner(heroname);
  if(player == 1) then
    QuestionBox(GetMapDataPath().."messages/broken_portal.txt","callbackF([["..player.."]],[["..heroname.."]])","callback_noF([["..player.."]],[["..heroname.."]])") -- сообщение произвольное из моей папки.
  end;
end;
function callbackF(player,heroname)
  local x,y,floorID = GetObjectPosition(heroname) -- Для теста герой просто телепортируется на месте
  SetObjectPosition(heroname,x,y,floorID)
end;

function callback_noF(player,heroname)
  local x,y,floorID = GetObjectPosition(heroname)-- Для теста герой просто телепортируется на месте + 5 клеток по всем осям
  SetObjectPosition(heroname,x+5,y+5,floorID)
end

Ниже привожу уже исправленный ваш код 

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)
   SetObjectPosition(heroname, 56, 90, 0);
end;

Надеюсь заработает, что-то к ночи голова не варит - извиняюсь, если какая-то глупая ошибка будет, проверьте пять раз логику происходящего на всякий пожарный

__________________




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

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




                                                                                       




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

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




                                                                                       
Jewily вне форума
Ответить с цитированием
#3610
Старый 16.05.2022, 01:29
  #3610
^
Марта
📖
Регистрация: 31.01.2020
Сообщения: 56
Регистрация: 31.01.2020
Сообщения: 56
По умолчанию
Re: Скрипты

Jewily, теперь заработало. Огромное вам спасибо. И второе спасибо за
 SetObjectPosition(heroname,x+5,y+5,floorID)

я не знала, что так можно, а мне как раз сейчас пригодится для одного квеста.
Спокойной ночи).

Марта вне форума
Ответить с цитированием
#3611
Старый 16.05.2022, 01:31
  #3611
^
Jewily
 
Аватар для Jewily
📖
Регистрация: 25.09.2016
Сообщения: 136
Jewily#4267
Регистрация: 25.09.2016
Сообщения: 136
Jewily#4267
По умолчанию
Re: Скрипты

МартаJewily, теперь заработало. Огромное вам спасибо. И второе спасибо за
 SetObjectPosition(heroname,x+5,y+5,floorID)

я не знала, что так можно, а мне как раз сейчас пригодится для одного квеста.
Спокойной ночи).

Не шибко понял, про что именно вы говорите, но пожалуйста) Доброй ночи.
__________________




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

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




                                                                                       




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

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




                                                                                       
Jewily вне форума
Ответить с цитированием
#3612
Старый 16.05.2022, 07:59
  #3612
^
}{0TT@6bI4
 
Аватар для }{0TT@6bI4
📖
Регистрация: 05.09.2019
Адрес: Серебряные Города, Аль-Сафир
Сообщения: 1574
Выставка наград
Регистрация: 05.09.2019
Адрес: Серебряные Города, Аль-Сафир
Сообщения: 1574
Выставка наград
По умолчанию
Re: Скрипты

Jewilly, есть способ передавать все нужные данные в коллбэк при помощи upvalues:
function test()
  local importantValue = random(10)
  Trigger(4, "TestObject", "ImportantFunc")
  ImportantFunc = function(hero, obj)
    local value = %importantValue
    print(hero, obj, value)
  end
end
--Вот и вывели два исходных аргумента + важное значение из родительской функции коллбэка
__________________
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
_________________
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
_________________
}{0TT@6bI4 вне форума
Ответить с цитированием
#3613
Старый 16.05.2022, 08:06
  #3613
^
}{0TT@6bI4
 
Аватар для }{0TT@6bI4
📖
Регистрация: 05.09.2019
Адрес: Серебряные Города, Аль-Сафир
Сообщения: 1574
Выставка наград
Регистрация: 05.09.2019
Адрес: Серебряные Города, Аль-Сафир
Сообщения: 1574
Выставка наград
По умолчанию
Re: Скрипты

Код для кастов скоро напишу. Марта
__________________
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
_________________
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
_________________
}{0TT@6bI4 вне форума
Ответить с цитированием
#3614
Старый 16.05.2022, 10:09
  #3614
^
Jewily
 
Аватар для Jewily
📖
Регистрация: 25.09.2016
Сообщения: 136
Jewily#4267
Регистрация: 25.09.2016
Сообщения: 136
Jewily#4267
По умолчанию
Re: Скрипты

}{0TT@6bI4Jewilly, есть способ передавать все нужные данные в коллбэк при помощи upvalues:
function test()
  local importantValue = random(10)
  Trigger(4, "TestObject", "ImportantFunc")
  ImportantFunc = function(hero, obj)
    local value = %importantValue
    print(hero, obj, value)
  end
end
--Вот и вывели два исходных аргумента + важное значение из родительской функции коллбэка

О, Спасибо большое. Когда сам пытался всё перепробовал, а про upvalues забыл - не использовал их к моменту, когда что-то начал понимать. Буду знать! 
__________________




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

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




                                                                                       




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

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




                                                                                       
Jewily вне форума
Ответить с цитированием
#3615
Старый 16.05.2022, 15:10
  #3615
^
Марта
📖
Регистрация: 31.01.2020
Сообщения: 56
Регистрация: 31.01.2020
Сообщения: 56
По умолчанию
Re: Скрипты

Ещё вопрос. Как отследить результаты боя с нейтральными монстрами?
Мне нужен скрипт для героев 1го игрока, который проверял бы, что такие-то монстры после боя сдохли или живы, и в зависимости от результата позволял бы уничтожить, скажем, REGION_ENTER_AND_STOP_TRIGGER, или оставить.
Это я стражей для телепортов пытаюсь сделать, - и, учитывая что у меня этих телепортов уже немеряно, писать на каждого нейтрала отдельный квест - это слишком игру загрузит.

Если делать внезапный бой, то как мне после 

function guard_Tilgatal_battle_F(heroname)
local player = GetObjectOwner(heroname)
if(player == 1) then
StartCombat(heroname, nil, 3, 80, 12, 158, 5, 142, 12, nil, nil, nil);

зафиксировать результаты боя?

А если эти монстры стоят на карте, я вообще не знаю, куда там скрипт цеплять.
К самим монстрам? Непонятно, что писать.

Я пыталась что-то намутить с COMBAT_RESULTS_TRIGGER, но плохо понимаю, как это работает, и совсем не понимаю, можно ли это применять к монстрам, а не к героям.
Марта вне форума
Ответить с цитированием
Ответ
Страница 241 из 246


Опции темы



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


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

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