FallenruВо первых для полного понимания и использования их я думаю самое то.
Во вторых карта еще не доделана)
В 3х мне кажется не в мультиплеерных картах можно намного больше скриптов(кроме арен).А напихать в мультиплеер тонну скриптов не совсем логично.
В 4-х можно сказать это вообще первая карта ,т.к до недавнего времени не создавал карты и не думал о картах вообще.
В 5-х спасибо за помощь!
И самое печальное ,что тестирование скриптов в мультиплеерной карте занимает много время и отвращения.Т.к приходится все перезапускать по 100 раз(
Добавлено через 8 минут
На будущее хотел спросить.Какая разница при создании сценария и мультиплеерной карты?(Я мельком ,что то читал...но уже не вспомню)
Добавлено через 14 минут
Эх..время потрачено,а результат не принес должного эффекта...
IsTilePassable(41, 86, 1); - возвращает 1 а) даже если герой находится на данной точно изначально б)даже если герой телепортируется в данную точку.
Добавлено через 3 минуты
Добавлено через 1 минуту
Опять придется костыль писать..неужели нельзя было сделать IsTilePassable
более функциональным
В мультиплеере можно настраивать любое количество компов, можно блокировать игроков.
IsTilePassaple проверяет проходимость клетки
в целом. Да и считает она клетку непроходимой, только если она содержит blocked tile. А герой под собой blocked tile не содержит, у него висит аctive tile. Логично, что игра считает клетку проходимой.
Предлагаю вот такой код.
firstvis=0;
function teleport(heroname, teleport)
if firstvis==0 then
xt,yt,zt=46, 84, 1;
SetObjectPosition(heroname, 46, 84, 1);
MessageBoxForPlayers(GetPlayerFilter(GetCurrentPlayer()), GetMapDataPath().."successfulteleport.txt");
x,y,z=GetObjectPosition(heroname)
firstvis=firstvis+1;
elseif firstvis>=1 and xt,yt,zt == x,y,z then
SetObjectPosition(heroname, x+1, y+1, 1);
MessageBoxForPlayers(GetPlayerFilter(GetCurrentPlayer()),GetMapDataPath().."successfulteleport.txt");
firstvis=firstvis+1;
x,y,z=GetObjectPosition(heroname);
xt,yt,zt=xt+1,yt+1,zt;
elseif firstvis>=1 and xt,yt,zt x,y,z then
SetObjectPosition(heroname, 46, 84, 1);
MessageBoxForPlayers(GetPlayerFilter(GetCurrentPlayer()),GetMapDataPath().."successfulteleport.txt");
firstvis=firstvis+1;
x,y,z=GetObjectPosition(heroname);
xt,yt,zt=46,84,1;
firstvis=0;
end;
end;
Trigger(4, "Message", "teleport");
Объясняю принцип работы:
Проверка, что это
первый заход. Если да, то 3 переменных - координаты конечной клетки телепортации, перемещаем туда текущего героя, выдаём сообщение, другие 3 переменных выставляем в координаты героя, устанавливаем переменную, гласящую о прошествии первого захода.
Если второй или больше заход, то проверяем, совпадают ли координаты конечной клетки телепортации и предыдущего телепортировавшегося героя; если да, то телепортируем второго героя на клетку право вверх от героя предыдущего, выдаём сообщение, устанавливаем счётчик заходов в 2, 3 переменных - раньше координаты конечной клетки - увеличиваем на 1, кроме этажа (zt), 3 переменных - координаты предыдущего героя - выставляем в координаты текущего героя.
Получается, если хоть сто игроков будут, телепортировавшись, вставать на месте, каждого из них просто будет вправо вверх телепортировать.
Если же координаты конечной клетки телепортации и предыдущего телепортировавшегося героя не совпадают, то телепортируем в исходную клетку, и ставим, что следующий заход снова будет первым, позволяя нашей функции работать по новой.