Перейти к содержанию

Сообщения от Скрипты

В ответ пользователю Fallenru
Аватар пользователя
код такой:

function artifact_objective()
while 1 do
* if HasArtefact("Brem", 13) then
* * SetObjectiveState("dopzadanie1", OBJECTIVE_COMPLETED);
* * break
* end;
sleep (2);
end;
end;

path=GetMapDataPath();
MessageBox(path.."message.txt");
sleep(5);
MessageBox(path.."day1-2.txt");

function newday()
if GetDate(DAY)==2 then
MessageBox(path.."day2.txt");
sleep(5);
MessageBox(path.."day2-2.txt");
end

if GetDate(DAY)==3 then
MessageBox(path.."day3.txt");
end

if GetDate(DAY)==4 then
MessageBox(path.."day4.txt");
end

if GetDate(DAY)==5 then
MessageBox(path.."day5.txt");
SetObjectiveState("zadanie4", OBJECTIVE_ACTIVE, 1);
if GetObjectOwner("ditana")==PLAYER_1 then
SetObjectiveState("zadanie4", OBJECTIVE_COMPLETED, 1);
TeachHeroSpell("Brem", 18);
end;
end

if GetDate(DAY)==6 then
MessageBox(path.."day6.txt");
SetObjectiveState("dopzadanie1", OBJECTIVE_ACTIVE, 1);
startThread(artifact_objective)
end;
end

if GetDate(DAY)==7 then
MessageBox(path.."day7.txt");
end;
Trigger(NEW_DAY_TRIGGER, "newday");

Есть еще одна многострадальная проблема с городом с квестовым именем "ditana", задание на его взятие появляется, а вот при выполнении задания ничего не происходит. При этом в самой карте делал поиск по названию, игра такой объект находит.
Мои карты для:
Heroes 5: Битвы кланов - Борьба за ресурсы - Обитель друидов - Падший рыцарь - Побег
Heroes 4: Немеджихра - Приключения ифрита
Heroes 3: Крюлод и Таталия
Heroes 2: Вторжение - Эктор - Сэр Мильтен - Чёртовы Топи
Мой ютуб канал: Navkratis
Аватар пользователя
У меня есть 1 большой скрипт. qwert(1,2 и3 ) - это квесты. Дальше я задал 2 переменных со значениями идентификаторов( монахи и ангелы). gar_(1,2,3 и 4) - гарнизоны.*Calid и**Nymus - 2 демона. Дальше у меня идет проверка: если гарнизон принадлежит 4 игроку -демонам, то они будут двигаться в замок, расположенный на координатах 41,14. Потом, если выполнено задание qwert3, то к переменный, которые отвечают за идентификаторы ангелов и монахов, будет прибавлена единица и они станут грейженными существами. Дальше, если день недели равен 6 и квест qwert1 выполнен, то во все 4 гарнизона должны прийти 15 монахов, а если задание*qwert3 выполнено, то они будут инквизиторами, и если квест qwert2 выполнен и день недели равен 5, то в гарнизоны прибудут ангелы, также, если квест3 выполнен грейженные. Дальше идет вторая часть функции: Если день равен 7, то на карте появляется демон, он движется в сторону гарнизона, и также в 14 день недели появляется нимус, который тоже движется в сторону гарнизона, но уже другого, того какой ближе к нему. Скрипт прекрасно работал на начальной стадии, но когда я приписал скрипт, который находится вначале, отвечающий за приоритетную точку демонов, то все сломалось( Сначала первоначально они должны появляться, и бежать к гарнизону, захватывать его, стоять 1 день в гарнизоне, и на новый день их приоритетной точкой становится замок, и они бегут к нем). Буду очень благодарен тому, кто поможет разобраться.
function demon()
local p1 =GetObjectiveState ('qwert1',PLAYER_1);
local p =GetObjectiveState ('qwert2',PLAYER_1);
local opr = 9
* local opr3 = 13
* local p2 = GetObjectiveState ('qwert3', 1);
* local ggg =GetObjectOwner('gar_1');
local ggg1 =GetObjectOwner('gar_2');
local ggg2 =GetObjectOwner('gar_3');
local ggg3 =GetObjectOwner('gar_4');
* if* ggg =4* then
* MoveHero('Calid',41,14,0);
* MoveHero('Nymus',41,14,0);
* elseif ggg1 =4* * then
* MoveHero('Calid',41,14,0);
* MoveHero('Nymus',41,14,0);
elseif ggg2 = 4* * then
* MoveHero('Calid',41,14,0);
* MoveHero('Nymus',41,14,0);
* elseif ggg3 < 4 then
* * MoveHero('Calid',41,14,0);
* MoveHero('Nymus',41,14,0);
* end;
* end;
local p2 = GetObjectiveState ('qwert3', 1);
if p2 == OBJECTIVE_COMPLETED then opr= opr+1
* if p2 == OBJECTIVE_COMPLETED then opr= opr3+1
if p1 ==OBJECTIVE_COMPLETED and GetDate(DAY_OF_WEEK ) == 6
then
AddObjectCreatures('gar_1',* opr, 15);
AddObjectCreatures('gar_2',* opr, 15);
AddObjectCreatures('gar_3',* opr, 15);
AddObjectCreatures('gar_4',* opr, 15);
elseif p ==OBJECTIVE_COMPLETED and GetDate(DAY_OF_WEEK ) == 5
then
AddObjectCreatures('gar_1',* opr3, 3);
AddObjectCreatures('gar_2',* opr3, 3);
AddObjectCreatures('gar_3',* opr3, 3);
AddObjectCreatures('gar_4',* opr3, 3);
elseif GetDate( 0 ) == 7 then
DeployReserveHero('Calid',2,16,0,0);
sleep(5);
MoveHero('Calid',7,15,0);
elseif GetDate( 0 ) == 14 then
DeployReserveHero('Nymus',5,1,0,0);
sleep(5);
MoveHero('Nymus',5,4,0);

Добавлено через 4 минуты
Также по поводу прошлого скрипта, про который я спрашивал.* В одной из кампаний героев 5 в мисии за лигу теней, был квест: У игрока в армии дракон, и он не должен погибнуть, если он погибал в какой-нибудь битве, то игрок проигрывал. Я хочу сделать такой же скрипт: У меня в армии появляются 4 крестьянина, потом я должен идти с ними до одного места, и как дойду, они должны исчезнуть( Все, что я написал я могу сделать). А вот как сделать так, чтоб после любой из битв, если они погибают, то задание проваливается.
Аватар пользователя
Navkratis
у вас функция newday идёт, потом if'ы на дни со второго по шестой, потом вы функцию закрыли end'ом, потом идёт if для седьмого дня. Очевидно, последний if тоже должен быть внутри функции, а не снаружи.
 

К А
Стикеры GBF в Telegram
В ответ пользователю Ment
Аватар пользователя
Ment
Navkratis
у вас функция newday идёт, потом if'ы на дни со второго по шестой, потом вы функцию закрыли end'ом, потом идёт if для седьмого дня. Очевидно, последний if тоже должен быть внутри функции, а не снаружи.
Большое спасибо, помогло, тот дополнительный end в 6 дне ставил для startThread-а, видимо, это было излишне:) Теперь бы еще разобраться с проблемой города. но, пожалуй, оставлю ее напоследок, когда закончу работу над скриптами.
Мои карты для:
Heroes 5: Битвы кланов - Борьба за ресурсы - Обитель друидов - Падший рыцарь - Побег
Heroes 4: Немеджихра - Приключения ифрита
Heroes 3: Крюлод и Таталия
Heroes 2: Вторжение - Эктор - Сэр Мильтен - Чёртовы Топи
Мой ютуб канал: Navkratis
Аватар пользователя
Лоли Никита,
тоже проверьте свои end'ы, там что-то явно не то. Если судить по эндам, ваша функция заканчиается перед строкой
local p2 = GetObjectiveState ('qwert3', 1);
И к чему тогда объявление этой кучи локальных переменных?
Также, я не в курсе, но точно ли если писать if в одну строку, как у вас:
if p2 == OBJECTIVE_COMPLETED then opr= opr+1
То end после этого не нужен?
В любом случае после последнего elseif, а именно в конце кода, end требуется. Это не считая end'а, который закрывает всю функцию, и сейчас не там стоит.

В качестве рекомендации, переменные лучше называть более понятно, это не только нам на форуме облегчит, но и сами путаться не будете. Лучше длинное название, немного времени потеряется на печать, много времени приобретёте при отладке.

То же с пробелами. Если на форуме оно отображается верно (с тем исключением, что форум звёздочек понаставил), очень рекомендую отступы соблюдать как положено. А то у вас хаос полнейший, понятно, что интуитивно вы эти end'ы не расставите, без подробного счёта.
 

К А
Стикеры GBF в Telegram
Аватар пользователя
А возможно ли задать приоритет герою, чтобы он через препятствия шел? Просто я ставлю*
MoveHero, а герой мой появляется за гарнизоном и не идет к приоритетной цели - замок. Он просто стоит на одном месте и не желает двигаться, пока я армию не заберу из гарнизона, и только потом он идет через него к замку.
Аватар пользователя
Гарнизон с армией - непроходимый объект для функции MoveHero; создать "великий аттрактор" для компа героя можно функцией SetAIHeroAttractor(sObjectName, sHeroName, nPrioprity), где priority - приоритетность, принимающая значения от -1 до 2. 0 - снимает приоритетность.
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
Discord-сервер "Герои 5: S.T.A.L.K.E.R"
Сервер по модификации "Герои 5: S.T.A.L.K.E.R"
_________________
Аватар пользователя
Но через непроходимые объекты ИИ всё равно не пойдёт.
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
Discord-сервер "Герои 5: S.T.A.L.K.E.R"
Сервер по модификации "Герои 5: S.T.A.L.K.E.R"
_________________
В ответ пользователю }{0TT@6bI4
Аватар пользователя
Доброе утро, форумчане, в скрипте

function tainiki()
while 1 do
* if HasArtefact("Brem", 23) and if HasArtefact("Brem", 28) and if HasArtefact("Brem", 68) then
* * SetObjectiveState("dopzadanie2", OBJECTIVE_COMPLETED);
* * break
* end;
sleep (2);
end;
end;

if GetDate(DAY)==8 then
MessageBox(path.."day8.txt");
SetObjectiveState("dopzadanie2", OBJECTIVE_ACTIVE, 1);
startThread(tainiki)
end;

программа MapScriptEditor пишет про неожиданный символ возле if (в функции tainiki). Условием выполнения задачи должно быть наличие у героя трех артефактов. Что здесь не так? :o
Мои карты для:
Heroes 5: Битвы кланов - Борьба за ресурсы - Обитель друидов - Падший рыцарь - Побег
Heroes 4: Немеджихра - Приключения ифрита
Heroes 3: Крюлод и Таталия
Heroes 2: Вторжение - Эктор - Сэр Мильтен - Чёртовы Топи
Мой ютуб канал: Navkratis
Аватар пользователя
if HasArtefact("Brem", 23) and if HasArtefact("Brem", 28) and if HasArtefact("Brem", 68) 
замени на
if HasArtefact("Brem", 23) and HasArtefact("Brem", 28) and HasArtefact("Brem", 68)
, т.к вся эта строка - одно условие и для него нужен только один блок if
Нет войне.
В ответ пользователю Gerter
Аватар пользователя
Спасибо, помогло :)

Добавлено через 5 часов 30 минут
Однако... Во время выполнения скрипта выше (т.е. на 8 день) в консоли появляется надпись, что обьектива dopzadanie 2 не найдена и задание не выдается.
Мои карты для:
Heroes 5: Битвы кланов - Борьба за ресурсы - Обитель друидов - Падший рыцарь - Побег
Heroes 4: Немеджихра - Приключения ифрита
Heroes 3: Крюлод и Таталия
Heroes 2: Вторжение - Эктор - Сэр Мильтен - Чёртовы Топи
Мой ютуб канал: Navkratis
Аватар пользователя
В параметрах задания должно стоять KIND_MANUAL, такое же скриптовое имя, как в скрипте, и Is Initialy Active = true. У вас всё так?
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
Discord-сервер "Герои 5: S.T.A.L.K.E.R"
Сервер по модификации "Герои 5: S.T.A.L.K.E.R"
_________________
В ответ пользователю }{0TT@6bI4
Аватар пользователя
}{0TT@6bI4
В параметрах задания должно стоять KIND_MANUAL, такое же скриптовое имя, как в скрипте, и Is Initialy Active = true. У вас всё так?
В одном из руководств написано "Is Initialy Active - если true, задание активно при старте карты", а мне нужно, чтобы оно активировалось лишь на восьмой день, поэтому стоит false. Что интересно, есть полностью идентичное dopzadanie1, оно активируется и выполняется, в*dopzadanie2 все пункты из Map Properites Free расставил аналогично, но результат иной.
Мои карты для:
Heroes 5: Битвы кланов - Борьба за ресурсы - Обитель друидов - Падший рыцарь - Побег
Heroes 4: Немеджихра - Приключения ифрита
Heroes 3: Крюлод и Таталия
Heroes 2: Вторжение - Эктор - Сэр Мильтен - Чёртовы Топи
Мой ютуб канал: Navkratis
Аватар пользователя
Насчёт true — описка. А допзадание2 где расположено?
С уважением, }{0TT@6bI4
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
Discord-сервер "Герои 5: S.T.A.L.K.E.R"
Сервер по модификации "Герои 5: S.T.A.L.K.E.R"
_________________
В ответ пользователю }{0TT@6bI4
Аватар пользователя
}{0TT@6bI4
Насчёт true — описка. А допзадание2 где расположено?
В дополнительных заданиях, под dopzadanie1 https://ibb.co/Mnjj2KN

Добавлено через 30 минут
Неожиданно появилась идея, в чем могла быть причина, сейчас проверю.

Добавлено через 17 минут
В общем, данный вопрос снимается, оказалось, что в Map Properites Free ошибся с уровнем вложений, и dopzadanie 2 оказалось для второго игрока:o Пока что задание запустилось, надеюсь, его выполнение также пропишется.
Мои карты для:
Heroes 5: Битвы кланов - Борьба за ресурсы - Обитель друидов - Падший рыцарь - Побег
Heroes 4: Немеджихра - Приключения ифрита
Heroes 3: Крюлод и Таталия
Heroes 2: Вторжение - Эктор - Сэр Мильтен - Чёртовы Топи
Мой ютуб канал: Navkratis

Статистика

Приветствуем новейшего участника: Emil