Скрипты - Страница 216 - Форум HeroesWorld-а

Быстрая навигация по основным разделам форума:
Турниры
КАРТЫ
Heroes 6
Heroes 5
Heroes 4
Heroes 3
Heroes 2
Heroes 1
Might&Magic

Герои Меча и Магии 5 - Картостроительство (Редактор карт) В этом разделе можно обсуждать все что касается редактора карт для Heroes of Might and Magic V. Так же здесь обсуждаем картостроительство.

Ответ
Страница 216 из 260
 
Опции темы
#3226
Старый 08.09.2020, 12:47
  #3226
^
Navkratis
 
Аватар для Navkratis
📖
Регистрация: 31.08.2011
Сообщения: 159
Регистрация: 31.08.2011
Сообщения: 159
По умолчанию
Re: Скрипты

код такой:

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", задание на его взятие появляется, а вот при выполнении задания ничего не происходит. При этом в самой карте делал поиск по названию, игра такой объект находит.
Navkratis вне форума
Ответить с цитированием
#3227
Старый 08.09.2020, 12:55
  #3227
^
Лоли Никита
 
Аватар для Лоли Никита
📖
Регистрация: 24.03.2019
Сообщения: 34
Регистрация: 24.03.2019
Сообщения: 34
По умолчанию
Re: Скрипты

У меня есть 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 крестьянина, потом я должен идти с ними до одного места, и как дойду, они должны исчезнуть( Все, что я написал я могу сделать). А вот как сделать так, чтоб после любой из битв, если они погибают, то задание проваливается.
Лоли Никита вне форума
Ответить с цитированием
#3228
Старый 08.09.2020, 14:18
  #3228
^
Ment
 
Аватар для Ment
📖
Регистрация: 30.10.2009
Адрес: Национальный заповедник
Сообщения: 30680
Регистрация: 30.10.2009
Адрес: Национальный заповедник
Сообщения: 30680
По умолчанию
Re: Скрипты

Navkratis
у вас функция newday идёт, потом if'ы на дни со второго по шестой, потом вы функцию закрыли end'ом, потом идёт if для седьмого дня. Очевидно, последний if тоже должен быть внутри функции, а не снаружи.
Ment вне форума
Ответить с цитированием
#3229
Старый 08.09.2020, 15:00
  #3229
^
Navkratis
 
Аватар для Navkratis
📖
Регистрация: 31.08.2011
Сообщения: 159
Регистрация: 31.08.2011
Сообщения: 159
По умолчанию
Re: Скрипты

MentNavkratis
у вас функция newday идёт, потом if'ы на дни со второго по шестой, потом вы функцию закрыли end'ом, потом идёт if для седьмого дня. Очевидно, последний if тоже должен быть внутри функции, а не снаружи.
Большое спасибо, помогло, тот дополнительный end в 6 дне ставил для startThread-а, видимо, это было излишне Теперь бы еще разобраться с проблемой города. но, пожалуй, оставлю ее напоследок, когда закончу работу над скриптами.
Navkratis вне форума
Ответить с цитированием
#3230
Старый 08.09.2020, 15:16
  #3230
^
Ment
 
Аватар для Ment
📖
Регистрация: 30.10.2009
Адрес: Национальный заповедник
Сообщения: 30680
Регистрация: 30.10.2009
Адрес: Национальный заповедник
Сообщения: 30680
По умолчанию
Re: Скрипты

Лоли Никита,
тоже проверьте свои end'ы, там что-то явно не то. Если судить по эндам, ваша функция заканчиается перед строкой
local p2 = GetObjectiveState ('qwert3', 1);
И к чему тогда объявление этой кучи локальных переменных?
Также, я не в курсе, но точно ли если писать if в одну строку, как у вас:
if p2 == OBJECTIVE_COMPLETED then opr= opr+1
То end после этого не нужен?
В любом случае после последнего elseif, а именно в конце кода, end требуется. Это не считая end'а, который закрывает всю функцию, и сейчас не там стоит.

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

То же с пробелами. Если на форуме оно отображается верно (с тем исключением, что форум звёздочек понаставил), очень рекомендую отступы соблюдать как положено. А то у вас хаос полнейший, понятно, что интуитивно вы эти end'ы не расставите, без подробного счёта.
Ment вне форума
Ответить с цитированием
#3231
Старый 08.09.2020, 15:40
  #3231
^
Лоли Никита
 
Аватар для Лоли Никита
📖
Регистрация: 24.03.2019
Сообщения: 34
Регистрация: 24.03.2019
Сообщения: 34
По умолчанию
Re: Скрипты

А возможно ли задать приоритет герою, чтобы он через препятствия шел? Просто я ставлю*
MoveHero, а герой мой появляется за гарнизоном и не идет к приоритетной цели - замок. Он просто стоит на одном месте и не желает двигаться, пока я армию не заберу из гарнизона, и только потом он идет через него к замку.
Лоли Никита вне форума
Ответить с цитированием
#3232
Старый 08.09.2020, 17:45
  #3232
^
}{0TT@6bI4
 
Аватар для }{0TT@6bI4
📖
Регистрация: 05.09.2019
Адрес: Серебряные Города, Аль-Сафир
Сообщения: 1973
Выставка наград
Регистрация: 05.09.2019
Адрес: Серебряные Города, Аль-Сафир
Сообщения: 1973
Выставка наград
По умолчанию
Re: Скрипты

Гарнизон с армией - непроходимый объект для функции 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 вне форума
Ответить с цитированием
#3233
Старый 08.09.2020, 17:46
  #3233
^
}{0TT@6bI4
 
Аватар для }{0TT@6bI4
📖
Регистрация: 05.09.2019
Адрес: Серебряные Города, Аль-Сафир
Сообщения: 1973
Выставка наград
Регистрация: 05.09.2019
Адрес: Серебряные Города, Аль-Сафир
Сообщения: 1973
Выставка наград
По умолчанию
Re: Скрипты

Но через непроходимые объекты ИИ всё равно не пойдёт.
__________________
С уважением, }{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 вне форума
Ответить с цитированием
#3234
Старый 09.09.2020, 07:36
  #3234
^
Navkratis
 
Аватар для Navkratis
📖
Регистрация: 31.08.2011
Сообщения: 159
Регистрация: 31.08.2011
Сообщения: 159
По умолчанию
Re: Скрипты

Доброе утро, форумчане, в скрипте

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). Условием выполнения задачи должно быть наличие у героя трех артефактов. Что здесь не так?
Navkratis вне форума
Ответить с цитированием
#3235
Старый 09.09.2020, 07:43
  #3235
^
Gerter
 
Аватар для Gerter
📖
Регистрация: 16.07.2012
Адрес: Санкт-Петербург
Сообщения: 825
pegn0ly#9113
Выставка наград
Регистрация: 16.07.2012
Адрес: Санкт-Петербург
Сообщения: 825
pegn0ly#9113
Выставка наград
По умолчанию
Re: Скрипты

	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 вне форума
Ответить с цитированием
#3236
Старый 09.09.2020, 13:25
  #3236
^
Navkratis
 
Аватар для Navkratis
📖
Регистрация: 31.08.2011
Сообщения: 159
Регистрация: 31.08.2011
Сообщения: 159
По умолчанию
Re: Скрипты

Спасибо, помогло

Добавлено через 5 часов 30 минут
Однако... Во время выполнения скрипта выше (т.е. на 8 день) в консоли появляется надпись, что обьектива dopzadanie 2 не найдена и задание не выдается.
Navkratis вне форума
Ответить с цитированием
#3237
Старый 09.09.2020, 16:04
  #3237
^
}{0TT@6bI4
 
Аватар для }{0TT@6bI4
📖
Регистрация: 05.09.2019
Адрес: Серебряные Города, Аль-Сафир
Сообщения: 1973
Выставка наград
Регистрация: 05.09.2019
Адрес: Серебряные Города, Аль-Сафир
Сообщения: 1973
Выставка наград
По умолчанию
Re: Скрипты

В параметрах задания должно стоять 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
_________________
Группа картостроителей
Там ответы на вопросы, руководства, гайды и прочее
Discord-сервер "Герои 5: S.T.A.L.K.E.R"
Сервер по модификации "Герои 5: S.T.A.L.K.E.R"
_________________
}{0TT@6bI4 вне форума
Ответить с цитированием
#3238
Старый 09.09.2020, 16:40
  #3238
^
Navkratis
 
Аватар для Navkratis
📖
Регистрация: 31.08.2011
Сообщения: 159
Регистрация: 31.08.2011
Сообщения: 159
По умолчанию
Re: Скрипты

}{0TT@6bI4В параметрах задания должно стоять KIND_MANUAL, такое же скриптовое имя, как в скрипте, и Is Initialy Active = true. У вас всё так?
В одном из руководств написано "Is Initialy Active - если true, задание активно при старте карты", а мне нужно, чтобы оно активировалось лишь на восьмой день, поэтому стоит false. Что интересно, есть полностью идентичное dopzadanie1, оно активируется и выполняется, в*dopzadanie2 все пункты из Map Properites Free расставил аналогично, но результат иной.
Navkratis вне форума
Ответить с цитированием
#3239
Старый 09.09.2020, 16:45
  #3239
^
}{0TT@6bI4
 
Аватар для }{0TT@6bI4
📖
Регистрация: 05.09.2019
Адрес: Серебряные Города, Аль-Сафир
Сообщения: 1973
Выставка наград
Регистрация: 05.09.2019
Адрес: Серебряные Города, Аль-Сафир
Сообщения: 1973
Выставка наград
По умолчанию
Re: Скрипты

Насчёт true — описка. А допзадание2 где расположено?
__________________
С уважением, }{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 вне форума
Ответить с цитированием
#3240
Старый 09.09.2020, 18:20
  #3240
^
Navkratis
 
Аватар для Navkratis
📖
Регистрация: 31.08.2011
Сообщения: 159
Регистрация: 31.08.2011
Сообщения: 159
По умолчанию
Re: Скрипты

}{0TT@6bI4Насчёт true — описка. А допзадание2 где расположено?
В дополнительных заданиях, под dopzadanie1 https://ibb.co/Mnjj2KN

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

Добавлено через 17 минут
В общем, данный вопрос снимается, оказалось, что в Map Properites Free ошибся с уровнем вложений, и dopzadanie 2 оказалось для второго игрока Пока что задание запустилось, надеюсь, его выполнение также пропишется.
Navkratis вне форума
Ответить с цитированием
Ответ
Страница 216 из 260


Опции темы



Часовой пояс GMT +4, время: 15:29.


vBulletin v3.5.0, Copyright ©2000-2024, Jelsoft Enterprises Ltd. (Русский)

Яндекс цитирование    Top.Mail.Ru