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

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

Аватар пользователя
5 лет назад
А звёздочка у вас в скрипте тоже есть? Может, её посчитали каким-нибудь указателем...
В ответ пользователю Ment
Аватар пользователя
5 лет назад
Ment
А звёздочка у вас в скрипте тоже есть? Может, её посчитали каким-нибудь указателем...
Звездочки нет.
В ответ пользователю Navkratis
Аватар пользователя
5 лет назад
Navkratis
Добрый день, консоль пишет (Script) ERROR: "="expected
Сам скрипт выглядит так:

void GiveArtefact("Brem", 13, nBindToHero=0);

В чем здесь ошибка?
Есть подозрение ,что данный скрипт некорректно написан

GiveArtefact(heroname, artefactID, [bindToHero = 0]);
Как я понимаю 3 параметр можно вообще не заполнять) А у вас написано nBindToHero
В ответ пользователю Fallenru
Аватар пользователя
5 лет назад
Fallenru
Есть подозрение ,что данный скрипт некорректно написан

GiveArtefact(heroname, artefactID, [bindToHero = 0]);
Как я понимаю 3 параметр можно вообще не заполнять) А у вас написано nBindToHero
Написал GiveArtefact("Brem", 13); и все заработало, спасибо :)
В ответ пользователю Navkratis
Аватар пользователя
5 лет назад
Помогите пожалуйста с одним скриптом . Мне нужно чтобы к моему герою присоединились крестьяне 4, появилось задание, дойти с ними до определенной точки и выполнить задание таким образом, и после этого они должны исчезнуть из отряда. Если крестьяне* погибнут в битве, то задание провалилось. (Начальные этапы* я более менее могу написать, но вот как сделать, чтобы задание проваливалось после смерти крестьян не знаю)

Добавлено через 4 часа 52 минуты
Помогите пожалуйста разобраться в чем ошибка в скрипте:
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);
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);
end;
* end;
* * * Trigger(NEW_DAY_TRIGGER, 'demon');

вроде бы все написал правильно, но задание выполняется, наступает 5 день, монахи не приходят, наступаешь6 день, а ангелов тоже нет.
Аватар пользователя
5 лет назад
А консоль что пишет?
P.S. Ох уж эти звёздочки, которые теперь автоматом зачем-то ставятся форумом, если пробелов больше одного.
В ответ пользователю Лоли Никита
Аватар пользователя
5 лет назад
Лоли Никита
Помогите пожалуйста с одним скриптом . Мне нужно чтобы к моему герою присоединились крестьяне 4, появилось задание, дойти с ними до определенной точки и выполнить задание таким образом, и после этого они должны исчезнуть из отряда. Если крестьяне* погибнут в битве, то задание провалилось. (Начальные этапы* я более менее могу написать, но вот как сделать, чтобы задание проваливалось после смерти крестьян не знаю)

Добавлено через 4 часа 52 минуты
Помогите пожалуйста разобраться в чем ошибка в скрипте:
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);
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);
* * end;
end;
Trigger(NEW_DAY_TRIGGER, 'demon');


вроде бы все написал правильно, но задание выполняется, наступает 5 день, монахи не приходят, наступаешь6 день, а ангелов тоже нет.

Скрипт на провал задания при отсутствии крестьян:
function peas_surv()
while 1 do
if GetHeroCreatures("Имя героя", CREATURE_PEASANT)<4 then
SetObjectiveState("Скриптовое имя задания", OBJECTIVE_FAILED, PLAYER_1);
break
end;
sleep(1)
end;
end;


А в том месте, где нужно запустить проверку наличия крестьян вставьте строку
startThread(peas_surv)

Пункты по второму вопросу: можно разъяснить, что происходить должно по скрипту? То есть, проверка чего производится? А то не понятно, зачем 2 вложенные проверки выполненности задания 'p2' подряд...

Ещё вопрос: у вас есть другие функции, запускаемые каждодневным триггером?

Армия должна добавляться на 5 день от начала игры, или же на 5 (и 6) день недели?

На что жалуется консоль?

Пока не пойму, что и почему должно происходить, ответить не смогу.
В ответ пользователю Лоли Никита
Аватар пользователя
5 лет назад
Лоли Никита
Помогите пожалуйста с одним скриптом . Мне нужно чтобы к моему герою присоединились крестьяне 4, появилось задание, дойти с ними до определенной точки и выполнить задание таким образом, и после этого они должны исчезнуть из отряда. Если крестьяне* погибнут в битве, то задание провалилось. (Начальные этапы* я более менее могу написать, но вот как сделать, чтобы задание проваливалось после смерти крестьян не знаю)
Сначала ставите крестьян на карту
Потом прописывайте эту команду:
SetObjectEnabled ('Peasant', nil);

На карте рисуйте регион, в который надо отвести крестьян и назовём допустим 'Region'

---скрипт присоединения крестьян---

function*peasants()
---ваш код---
AddHeroCreatures ('имя_героя', 1, 4);
SetObjectiveState ('имя_задания',*OBJECTIVE_ACTIVE, PLAYER_1);
RemoveObject ('Peasant');
end;

Trigger(OBJECT_TOUCH_TRIGGER, 'Peasant','peasants');

Теперь скрипт, когда нужно прощаться с крестьянами:

function RegionF()
---ваш код---
if GetObjectiveState ('имя_задания', 1) == OBJECTIVE_ACTIVE then*GetHeroCreatures('имя_героя', 1)==4 then
RemoveHeroCreatures('имя_героя', 1, 4);
SetObjectiveState ('имя_задания',*OBJECTIVE_COMPLETED, PLAYER_1);
Trigger (REGION_ENTER_AND_STOP_TRIGGER, 'Region', nil);
end;
end;

Trigger (REGION_ENTER_AND_STOP_TRIGGER, 'Region', 'RegionF');

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

Выше*}{0TT@6bI4*уже предложил лучшую версию;)
Аватар пользователя
5 лет назад
Собственно, по словам Лоли Никита то, что вы предложили, он организовать умел сам) И скрипт "прощания с крестьянами" лучше разместить внутри дополнительного потока обработки данных. Тогда можно будет одновременно мониторить ситуация, если крестьяне есть, или если крестьяне погибли.
Аватар пользователя
5 лет назад
Добрый вечер, пытаюсь написать сообщение с ошибкой, появляющееся в программке Map Script Editor, но форум почему-то упорно удаляет одно из слов сообщения*:confused:
В ответ пользователю Navkratis
Аватар пользователя
5 лет назад
Navkratis
Добрый вечер, пытаюсь написать сообщение с ошибкой, появляющееся в программке Map Script Editor, но форум почему-то упорно удаляет одно из слов сообщения*:confused:
Хм...можно сделать скриншот ,можно приложить файл с ошибкой...
В ответ пользователю Fallenru
Аватар пользователя
5 лет назад
Попытаюсь так: https://ibb.co/zfjrBSj

Без скрипта седьмого дня все отлично работает, но сколько не пробовал убавлять или добавлять end в скрипты 6 и 7 дней, проблема не исправляется.
Аватар пользователя
5 лет назад
elseif может идти только в блоке с if'ом. Посчитайте количество блоков if-then elseif-then - на каждый должен приходится только 1 end; . По окончании блока функции также ставится end; (eof) означает 'end of function', значит не хватает одного end'a. Посмотрите, верхний elseif завершается ближайшим end'ом, следующий за ним энд (второй сверху) тогда относится либо к какому-то блоку ифа снаружи этого элсеифа, либо это энд от функции. Тогда попробуйте добавить этот энд перед строчкой триггера нового дня.

В принципе, чтобы не случалось таких путаниц, следует, например, каждый раз когда начинается блок ифа, ставить 2 пробела. А в содержимом для выполнения ифом, кроме энда, элсэифа и зэна - ещё 2 пробела. Тогда энды, соответсвующие ифам, окажутся на одной вертикали. Так можно быстро определить, где энда не хватает.
В ответ пользователю }{0TT@6bI4
Аватар пользователя
5 лет назад
Спасибо за помощь, но пока что ничего не получается, попробую еще завтра. Или же обойдусь без триггера седьмого дня, без него все работает.

Добавлено через 10 часов 37 минут
Пока что ситуация такова: заменил элсейфы на более привычные мне ифы (по образцу одной из моих прошлых карт), программа перестала ругаться на ошибки, но скрипт седьмого дня так и не наступает, в консоли тоже никаких надписей об ошибках не появляется и, конечно, это не единственная проблема со скриптами. Спасибо разрабам, сделавшим редактор карт не для простых смертных, а для избранных (зачеркнуто) программистов:)
В ответ пользователю Navkratis
Аватар пользователя
5 лет назад
Navkratis
Добавлено через 10 часов 37 минут
Пока что ситуация такова: заменил элсейфы на более привычные мне ифы (по образцу одной из моих прошлых карт), программа перестала ругаться на ошибки, но скрипт седьмого дня так и не наступает, в консоли тоже никаких надписей об ошибках не появляется и, конечно, это не единственная проблема со скриптами. Спасибо разрабам, сделавшим редактор карт не для простых смертных, а для избранных (зачеркнуто) программистов:)
Чтобы помочь, было бы неплохо увидеть кусок кода с данными "Элсейфами" или "ифами" ,чтобы понять что у вас происходит и возможно было увидеть ошибку и протестировать,но как говориться никто вас не заставляет выкладывать "код"*:)*Тоже* относиться и к остальным проблемам.

Статистика

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

Сейчас на сайте 7 пользователей 1345 гостей