Может, я, конечно, endами обсчиталась, но непохоже.
Может, я, конечно, endами обсчиталась, но непохоже.
Впервые здесь? Я Роха — провести быструю экскурсию?
Теперь пишут ошибку на строчкеif GetHeroName(defH) == "Shadwyn" and GetHeroName(attH) == "Nur" then
Может, я, конечно, endами обсчиталась, но непохоже.
Добавлено через 4 часа 8 минут
Как мне написать, что портоваться должен тот герой, который заюзал объект, если этот герой принадлежит первому игроку?
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 вам отдаёт имя героя в первый аргумент, то он вам его отдаст вне зависимости от того, как вы обзовёте переменную.
В чём тут может быть причина? Почему во второй функции не работает проверка на имя персонажа, или на принадлежность к первому игроку?
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 , но боюсь его использование может вызвать затруднения.
Увы, не работает. В игре пишут:
[Script Warning!] Walue was NIL when getting global with name 'player'
Script Error: attempf to perform arithmetic on a nil value
ЗЫ Что такое TalkBox, я даже не знаю).
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;Надеюсь заработает, что-то к ночи голова не варит - извиняюсь, если какая-то глупая ошибка будет, проверьте пять раз логику происходящего на всякий пожарный :)
SetObjectPosition(heroname,x+5,y+5,floorID)я не знала, что так можно, а мне как раз сейчас пригодится для одного квеста.
Спокойной ночи).
Jewily, теперь заработало. Огромное вам спасибо. И второе спасибо заSetObjectPosition(heroname,x+5,y+5,floorID)я не знала, что так можно, а мне как раз сейчас пригодится для одного квеста.
Спокойной ночи).
function test()
local importantValue = random(10)
Trigger(4, "TestObject", "ImportantFunc")
ImportantFunc = function(hero, obj)
local value = %importantValue
print(hero, obj, value)
end
end
--Вот и вывели два исходных аргумента + важное значение из родительской функции коллбэка
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
--Вот и вывели два исходных аргумента + важное значение из родительской функции коллбэка