1.n1 — номер игрока - бывшего владельца, n2 — номер игрока - нового владельца, s1 — имя героя, захвативашего объект, s2 — имя объекта. 2. 2 — это действительно номер игрока. 3. Повесьте тригнер касания на указатель, установите нерабочее состояние объекта, и выводите после касания объекта ShowFlyingSign, где можно настроить время полёта сообщения. 4. Абсолютно точно одновременно зайти двум игрокам не получится, потому можно добавить к телепорту блокировку игры, телепорт, отход игрока на 1 клетку вверх (y+1), разблокировка игры. Также добавлять проверку, равны ли координаты первого переместившегося объекта (имя узнаём в триггере, повешенном на псевдотелепорт), координатам второго объекта, но с y меньше на 1, и в зависимости от этого либо перемешаем героя на 1 клетку вверх, либо не двигаем. Но это костыль, ваш вариант правилен, я просто предложил альтернативу. 5. Эти неизведанные функции просто не занесены разработчикамм в их мануалы. Таких функций хватает, при надобности можно спрашивать у тех, кто их знает. 6. Есть функция SetHeroesExpCoeff.. 7. Наведение порядка — вещь хорошая. Рекомендую просто отделять различные части скрипта кучей дефисов с описанием, что где что делает.
1.Откуда берутся эти значения?Почему их только 4? 3.Емаа...у меня этих указателей с сообщениями штук 20..настраивать для все это ....не хочу..может как то можно по быстро все переделать или обьединить в массив? 5.Это конечно печально. 6.Можно поподробнее т.к информации 0 судя по запросу в яндексе на эту тему .хм.. 7.Это уже сделано!Просто хотел отдельно.
1.Откуда берутся эти значения?Почему их только 4? 3.Емаа...у меня этих указателей с сообщениями штук 20..настраивать для все это ....не хочу..может как то можно по быстро все переделать или обьединить в массив? 5.Это конечно печально. 6.Можно поподробнее т.к информации 0 судя по запросу в яндексе на эту тему .хм.. 7.Это уже сделано!Просто хотел отдельно.
1. У каждого триггера есть определённый набор значений, который вернёт функция, им вызванная. Переменные, значение которых вы хотите вернуть функцией, записываются в скобочках сразу после названия функции. Распределены они строго в одном порядке, их определённое количество. Можно не вписывать никаких переменных, можно 1, но попытка вернуть 5 значений с триггера захвата ничем хорошим не увенчается. Посмотреть, какие значения возвращают функции после вызова конкретным триггером, можно в мануале по скриптам, который я здесь вложил, на 57-59 страницах. ВАЖНО! Не путать, в мануале сначала описываются значения, которые надо задать триггером, и только потом - значения возвращаемые. 3. В начале скрипта установите нерабочее состояние всех указателей, повесив на них триггер (можно в одном условном цикле). Но каждый из триггеров будет вызывать одну функцию - функцию сообщения. Возвращать она будет 2 параметра, 2-ой - имя объекта, запускаем в функции кучу проверок на имена, и в зависимости от имени указателя - нужное сообщение. Костылевато, конечно, вручную всё проверять, а не в цикле. Однако где-то в свойствах есть переменная, отвечающая за время пролёта сообщений. Да и зачем на указателях километры текста?.. 6. SetHeroesExpCoeff(COEFFICIENT); Коэффициент по умолчанию - 1, минимальный возможный - 0.01. Задавайте на здоровье.
Да и зачем на указателях километры текста?.. 6. SetHeroesExpCoeff(COEFFICIENT); Коэффициент по умолчанию - 1, минимальный возможный - 0.01. Задавайте на здоровье.
Все остальное как всегда сейчас проверять буду. Когда создавал карту я понятия не имел ,что на указателях текст так быстро исчезает...Есть текст на паре указателей ,который необходимо медленно отобразить))Все я переделывать не буду. Я понял почему не нашел - SetHeroesExpCoeff(Одна лишная f) Да и + Я бы не написал столько команд у себя в скрипте карты ,если бы не пользовался бы HOMM5_A2_Script_Functions.Просто на ночь глядя уже не соображаешь( Но все равно спасибо!
}{0TT@6bI4
Сколько строк скриптов уже исписано, разрешите полюбопытствовать?
В целом очень мало, а для начала очень и очень неплохо!�� Это будет первая ваша карта со скриптами?
Во первых для полного понимания и использования их я думаю самое то.:smile15: Во вторых карта еще не доделана) В 3х мне кажется не в мультиплеерных картах можно намного больше скриптов(кроме арен).А напихать в мультиплеер тонну скриптов не совсем логично. В 4-х можно сказать это вообще первая карта:D ,т.к до недавнего времени не создавал карты и не думал о картах вообще. В 5-х спасибо за помощь!:smile14: И самое печальное ,что тестирование скриптов в мультиплеерной карте занимает много время и отвращения.Т.к приходится все перезапускать по 100 раз(
Добавлено через 8 минут На будущее хотел спросить.Какая разница при создании сценария и мультиплеерной карты?(Я мельком ,что то читал...но уже не вспомню)
Добавлено через 14 минут Эх..время потрачено,а результат не принес должного эффекта...
function teleport1(hero) Tile = IsTilePassable(41, 86, 1); MessageBoxForPlayers(GetPlayerFilter(GetCurrentPlayer()),"/Maps/RMG/515474A1-8A71-43BF-80ED-90E00B05311A/message.26.txt"); sleep(5); if Tile == 1
IsTilePassable(41, 86, 1); - возвращает 1 а) даже если герой находится на данной точно изначально б)даже если герой телепортируется в данную точку.
Добавлено через 3 минуты
Возвращает 1, Если плитка в (X, Y) на поверхности (Floor_ID = 0) или под землей (Floor_ID = 1) является проходимой, или "ноль", когда она заблокирована. Он принимает во внимание маску, но игнорирует временные блокады (например, стек монстров, герой-игрок и т. д...).
><
Добавлено через 1 минуту Опять придется костыль писать..неужели нельзя было сделать IsTilePassable более функциональным
Во первых для полного понимания и использования их я думаю самое то.:smile15: Во вторых карта еще не доделана) В 3х мне кажется не в мультиплеерных картах можно намного больше скриптов(кроме арен).А напихать в мультиплеер тонну скриптов не совсем логично. В 4-х можно сказать это вообще первая карта:D ,т.к до недавнего времени не создавал карты и не думал о картах вообще. В 5-х спасибо за помощь!:smile14: И самое печальное ,что тестирование скриптов в мультиплеерной карте занимает много время и отвращения.Т.к приходится все перезапускать по 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 переменных - координаты предыдущего героя - выставляем в координаты текущего героя. Получается, если хоть сто игроков будут, телепортировавшись, вставать на месте, каждого из них просто будет вправо вверх телепортировать. Если же координаты конечной клетки телепортации и предыдущего телепортировавшегося героя не совпадают, то телепортируем в исходную клетку, и ставим, что следующий заход снова будет первым, позволяя нашей функции работать по новой.
Так и знал,что надо проверить код..хоть с виду и ошибок не увидел. 1)firstvis=0; за пределами функциями ,как данная переменная себя чувствует?(Ей точно ничего прописывать не надо?Global или прочее?) 2)правильно ли мы записали xt,yt,zt == x,y,z?без обьявления типа данных 3)script editor выдает ошибку в ниже указанной строчке. elseif firstvis>=1 and xt,yt,zt == x,y,z then *я конечно не знаком с языком lua ,но я попробовал следующее *прописать тип данных..number или прочее...ошибка не исчезла.. *удалить условие(firstvis>=1 and xt,yt,zt == x,y,z) тогда он переставал ругаться *все условие засунуть в скобки,тоже не помогло><
Так и знал,что надо проверить код..хоть с виду и ошибок не увидел. 1)firstvis=0; за пределами функциями ,как данная переменная себя чувствует?(Ей точно ничего прописывать не надо?Global или прочее?) 2)правильно ли мы записали xt,yt,zt == x,y,z?без обьявления типа данных 3)script editor выдает ошибку в ниже указанной строчке. elseif firstvis>=1 and xt,yt,zt == x,y,z then *я конечно не знаком с языком lua ,но я попробовал следующее *прописать тип данных..number или прочее...ошибка не исчезла.. *удалить условие(firstvis>=1 and xt,yt,zt == x,y,z) тогда он переставал ругаться *все условие засунуть в скобки,тоже не помогло><
Как я понял в lua такой синтаксис не работает попробуй
elseif firstvis>=1 and xt == x and yt == y and zt == z then
Тем, кто добавлял на карту новые звуки или знает, как это делается правильно, просьба откликнуться. Что-то у меня не взлетает никак.
Я добавил. Совсем недавно. Звук для секретной зоны в новом сценарии (над которым веду работу), звук проигрывается, немного тихо, правда. Звук взят из игры Quake и заключается в сказанной металоическим голосом фразе You found a secret area. Формат .wav . Думаю, смогу помочь. Что у вас там не взлетает?
Я добавил. Совсем недавно. Звук для секретной зоны в новом сценарии (над которым веду работу), звук проигрывается, немного тихо, правда. Звук взят из игры Quake и заключается в сказанной металоическим голосом фразе You found a secret area. Формат .wav . Думаю, смогу помочь. Что у вас там не взлетает?
При попытке воспроизведения звука в консоли ошибка: Can't load the sound... Не понимаю, что не так сделал.