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

Сообщения от Скрипты для начинающих

#371

А, и еще такой вопрос, возможно немного не по теме. У меня при входе в регион должен проигрываться ролик. Но почему-то он проигрывается не весь, а только одна часть из 7(sentence). Причем в других случаях все сцены работают нормально, трабл только в этой.(У меня в редакторе он полностью проигрывается и проигрывается правильно)

Скрипт проблемной:

function Region4F()
    
    sleep(3)
    StartDialogScene("/MySceneCustom/DialogScene2/DialogScene.xdb#xpointer(/DialogScene)");
    Trigger(REGION_ENTER_AND_STOP_TRIGGER,"Region4",nil);
end;
Trigger(REGION_ENTER_AND_STOP_TRIGGER,"Region4","Region4F");

Скрипты работающих:

StartDialogScene("/MySceneCustom/StartScene/DialogScene.xdb#xpointer(/DialogScene)");

и

function Region1F ()
    
    sleep(5);
    MessageBox ("/Maps/SingleMissions/MapochkaTEST3/battletext.txt");
    StartCombat ( "RedHeavenHero04", nil, 5, 166, 100, 166, 100, 167, 75, 169, 50, 170, 15, nil);
    StartDialogScene("/MySceneCustom/BattleDialog1Custom/DialogScene.xdb#xpointer(/DialogScene)");
    Trigger(REGION_ENTER_AND_STOP_TRIGGER,"Region1",nil);
end;
Trigger(REGION_ENTER_AND_STOP_TRIGGER,"Region1","Region1F");

И да, спасибо за скрипты с анимациями. Работают отлично!

В ответ пользователю AngryTapok1337
Аватар пользователя
#372
AngryTapok1337

А, и еще такой вопрос, возможно немного не по теме. У меня при входе в регион должен проигрываться ролик. Но почему-то он проигрывается не весь, а только одна часть из 7(sentence). Причем в других случаях все сцены работают нормально, трабл только в этой.(У меня в редакторе он полностью проигрывается и проигрывается правильно)

Скрипт проблемной:

function Region4F()
    
    sleep(3)
    StartDialogScene("/MySceneCustom/DialogScene2/DialogScene.xdb#xpointer(/DialogScene)");
    Trigger(REGION_ENTER_AND_STOP_TRIGGER,"Region4",nil);
end;
Trigger(REGION_ENTER_AND_STOP_TRIGGER,"Region4","Region4F");

Скрипты работающих:

StartDialogScene("/MySceneCustom/StartScene/DialogScene.xdb#xpointer(/DialogScene)");

и

function Region1F ()
    
    sleep(5);
    MessageBox ("/Maps/SingleMissions/MapochkaTEST3/battletext.txt");
    StartCombat ( "RedHeavenHero04", nil, 5, 166, 100, 166, 100, 167, 75, 169, 50, 170, 15, nil);
    StartDialogScene("/MySceneCustom/BattleDialog1Custom/DialogScene.xdb#xpointer(/DialogScene)");
    Trigger(REGION_ENTER_AND_STOP_TRIGGER,"Region1",nil);
end;
Trigger(REGION_ENTER_AND_STOP_TRIGGER,"Region1","Region1F");

И да, спасибо за скрипты с анимациями. Работают отлично!

Хмм, не знаю, в чем может быть проблема ролика. 
За скрипты с анимациями спасибо не мне, а самим разработчикам - этот скрипт используется в одной из миссий за Вульфстена)

Мои карты:
Падший рыцарь
Сердце Хаоса

Мои моды:
Визуальные:
Изменение внешнего вида героев-некромантов
Существа-жители и кое-что по мелочи в городах Ордена Порядка, Некрополиса и Инферно

NCF-существа:
Странствующие рыцари
Наемники

В ответ пользователю AngryTapok1337
#373
AngryTapok1337

А, и еще такой вопрос, возможно немного не по теме. У меня при входе в регион должен проигрываться ролик. Но почему-то он проигрывается не весь, а только одна часть из 7(sentence). Причем в других случаях все сцены работают нормально, трабл только в этой.(У меня в редакторе он полностью проигрывается и проигрывается правильно)

Скрипт проблемной:

function Region4F()
    
    sleep(3)
    StartDialogScene("/MySceneCustom/DialogScene2/DialogScene.xdb#xpointer(/DialogScene)");
    Trigger(REGION_ENTER_AND_STOP_TRIGGER,"Region4",nil);
end;
Trigger(REGION_ENTER_AND_STOP_TRIGGER,"Region4","Region4F");

Скрипты работающих:

StartDialogScene("/MySceneCustom/StartScene/DialogScene.xdb#xpointer(/DialogScene)");

и

function Region1F ()
    
    sleep(5);
    MessageBox ("/Maps/SingleMissions/MapochkaTEST3/battletext.txt");
    StartCombat ( "RedHeavenHero04", nil, 5, 166, 100, 166, 100, 167, 75, 169, 50, 170, 15, nil);
    StartDialogScene("/MySceneCustom/BattleDialog1Custom/DialogScene.xdb#xpointer(/DialogScene)");
    Trigger(REGION_ENTER_AND_STOP_TRIGGER,"Region1",nil);
end;
Trigger(REGION_ENTER_AND_STOP_TRIGGER,"Region1","Region1F");

И да, спасибо за скрипты с анимациями. Работают отлично!

 

 

Отбой с проблемой. Я сейчас открыл диалог в редакторе и там почему-то только одна(!) сцена. Хотя я совершенно точно сохранял и эта фигня даже один раз на карте полностью проигалась. Куда и как делись 6 частей сцены хз

Аватар пользователя
#374
Велком ту герои 5: как только индекс редактора будет перезаписан (например, открыта карта в редакторе), он напрочь забудет про ваши сцены и вы их больше не откроете без танцев с бубном. 
Карты для героев 5

"Плата за любовь"
"Путь некроманта"
"Темные грани"
"Рок Гримхейма"
В ответ пользователю AstralLein
#375
AstralLein
Велком ту герои 5: как только индекс редактора будет перезаписан (например, открыта карта в редакторе), он напрочь забудет про ваши сцены и вы их больше не откроете без танцев с бубном. 

Спасибо за пояснения по поводу индекса. Но Тапочек не дурак, Тапочек оказывается индекс сохранил в новой папочке)

 

Все заработало короче)

Аватар пользователя
#376
А Тапочек хорош. Мне это в голову не пришло в свое время(

Впрочем, я про индексы и не знал тогда. 
Карты для героев 5

"Плата за любовь"
"Путь некроманта"
"Темные грани"
"Рок Гримхейма"
В ответ пользователю AstralLein
#377

AstralLein
А Тапочек хорош. Мне это в голову не пришло в свое время(

Впрочем, я про индексы и не знал тогда. 

Спасибо видеогайду "как сделать мультики в Героях Пятых". Очень там все подробно и понятноsmile01

Аватар пользователя
#378
А в мои пожилые времена таких гайдов не было. Были отрывочные и не касающиеся данных аспектов. Увы(

Как ни иронично, я до сих пор индексы не сохраняю. Привык делать ролики "за раз". Надо бы переучиться
Карты для героев 5

"Плата за любовь"
"Путь некроманта"
"Темные грани"
"Рок Гримхейма"
Аватар пользователя
#379

Граждане, создавайте и храните Dialog Scenes в сберегательной кассе под названием data. Уже сколько редактировал сцены созданные в папке data - ни разу ничего не слетело. А, ну и гайд как правильно запускать редактор Dialog Scene(бывает так что он не сохраняет изменения): открываем редактор, открываем любую карту(не через Open Resource), закрываем карту(просто Close, не закрывая редактор), открываем Dialog Scene через Open Resource. Тогда всё точно будет сохраняться)

Ах да, и главное, самое главное! Всегда держите под рукой открытую папку со сценой, и следите за файлом DialogScene.xdb. Что-то измените на карте, сделайте сейв - если дата последнего изменения обновилась, значит всё окей. Вот, пожалуй это всё)

Всякое/карты:

Добавление недостающей музыки гномам

#380

Снова здравствуйте. Скриптовая нужда опять постучалась в мою дверь и я прошу помощи.

Ситуация следующая - я разделил карту на две части, которые соединяются гарнизоном и установил регион после него, в который запретил заходить ИИ. Хотелось бы чтобы по истечению какого-то времени, регион удалялся и ИИ смог проходить дальше.

 

А и еще если знает кто, то подскажите как можно реализовать появление караванов с войсками каждый месяц и чтобы они ехали прямо к городу. Да, прям как в финальной миссии кампании Арантира.

 

Заранее спасибо.

В ответ пользователю AngryTapok1337
Аватар пользователя
#381
AngryTapok1337

Снова здравствуйте. Скриптовая нужда опять постучалась в мою дверь и я прошу помощи.

Ситуация следующая - я разделил карту на две части, которые соединяются гарнизоном и установил регион после него, в который запретил заходить ИИ. Хотелось бы чтобы по истечению какого-то времени, регион удалялся и ИИ смог проходить дальше.

 

А и еще если знает кто, то подскажите как можно реализовать появление караванов с войсками каждый месяц и чтобы они ехали прямо к городу. Да, прям как в финальной миссии кампании Арантира.

 

Заранее спасибо.

Первое - чекай функцию SetRegionBlocked. Второе - CreateCaravan.
Нет войне.
В ответ пользователю AngryTapok1337
Аватар пользователя
#382
AngryTapok1337
Хотелось бы чтобы по истечению какого-то времени, регион удалялся и ИИ смог проходить дальше

SetRegionBlocked("название региона", nil, PLAYER_номер игрока для которого нужно разблокировать);

AngryTapok1337
Подскажите как можно реализовать появление караванов с войсками каждый месяц и чтобы они ехали прямо к городу

Да собственно взять скрипт из той самой миссии Арантира, скопировать и вставить, убрав всё что не нужно и подставив свои параметры. Важно помнить пару вещей о караване: Спавнится только на пустой точке; доставляет существ только в города(в спавне назначается точка на которой находится город), иначе пиши "обманку" типа едет на какую-то точку рядом с нужным объектом(скажем, гарнизон), удаляется(RemoveObject) и потом объект(в нашем случае гарнизон) наполняется существами через AddObjectCreatures; собственно да, караван спавнится пустым, и удалится когда закончится ход игрока которому принадлежит если не наполнен существами; наполняется и очищается командами взаимодействия с объектами, т.е. AddObjectCreatures/GetObjectCreatures/RemoveObjectCreatures. Так же на него работают проверка на существование объекта IsObjectExists и разворот SetObjectRotation:

CARAVAN = "caravan"; --дадим стартовое название каравану для использования в функции

function respawn_caravan()
if (GetDate( DAY_OF_WEEK ) == 5) then --день недели в который заспавним караван(можно изменить на другой триггер даты)
car = CARAVAN..GetDate(DAY); --не могу сказать в чем была фишка именовать караван по игровому дню, возможно без этого переспавн ломался. Оставим как есть, ведь зачем трогать то что итак исправно работает, верно?
CreateCaravan(car, PLAYER_1, GROUND, 130, 1, GROUND, 136, 14 ); --собственно, сам спавн каравана: имя каравана, кому принадлежит, на земле или под землёй спавнится, x y точки спавна, на земле или под землёй точка куда едет, x y точки назначения. Точка назначения либо пустое место, либо город(больше никуда караван технически существ не доставляет)
sleep(4);
SetObjectRotation(car, 180); --развернём караван чтоб смотрел в другую сторону
AddObjectCreatures(car, CREATURE_BONE_DRAGON, 4); --наполняем караван существами, иначе он удалится в конце хода игрока которому принадлежит
AddObjectCreatures(car, CREATURE_WIGHT, 8);
AddObjectCreatures(car, CREATURE_LICH, 12);
AddObjectCreatures(car, CREATURE_VAMPIRE, 20);
AddObjectCreatures(car, CREATURE_MANES, 36);
AddObjectCreatures(car, CREATURE_WALKING_DEAD, 60);
AddObjectCreatures(car, CREATURE_SKELETON, 80);
OpenCircleFog(130, 1, 0, 4, 1); --откроем область карты вокруг точки спавна каравана чтобы потом сместить камеру и показать караван
sleep(4);
MoveCamera(130, 1, 0, 30, 1, 3.14, 0, 0, 1); --сместим камеру к точке спавна каравана чтобы показать игроку что пришло подкрепление
end;
end;

Trigger(NEW_DAY_TRIGGER, "respawn_caravan")

Всякое/карты:

Добавление недостающей музыки гномам

В ответ пользователю Азгалор
#383
Азгалор

SetRegionBlocked("название региона", nil, PLAYER_номер игрока для которого нужно разблокировать);

Да собственно взять скрипт из той самой миссии Арантира, скопировать и вставить, убрав всё что не нужно и подставив свои параметры. Важно помнить пару вещей о караване: Спавнится только на пустой точке; доставляет существ только в города(в спавне назначается точка на которой находится город), иначе пиши "обманку" типа едет на какую-то точку рядом с нужным объектом(скажем, гарнизон), удаляется(RemoveObject) и потом объект(в нашем случае гарнизон) наполняется существами через AddObjectCreatures; собственно да, караван спавнится пустым, и удалится когда закончится ход игрока которому принадлежит если не наполнен существами; наполняется и очищается командами взаимодействия с объектами, т.е. AddObjectCreatures/GetObjectCreatures/RemoveObjectCreatures. Так же на него работают проверка на существование объекта IsObjectExists и разворот SetObjectRotation:

CARAVAN = "caravan"; --дадим стартовое название каравану для использования в функции

function respawn_caravan()
if (GetDate( DAY_OF_WEEK ) == 5) then --день недели в который заспавним караван(можно изменить на другой триггер даты)
car = CARAVAN..GetDate(DAY); --не могу сказать в чем была фишка именовать караван по игровому дню, возможно без этого переспавн ломался. Оставим как есть, ведь зачем трогать то что итак исправно работает, верно?
CreateCaravan(car, PLAYER_1, GROUND, 130, 1, GROUND, 136, 14 ); --собственно, сам спавн каравана: имя каравана, кому принадлежит, на земле или под землёй спавнится, x y точки спавна, на земле или под землёй точка куда едет, x y точки назначения. Точка назначения либо пустое место, либо город(больше никуда караван технически существ не доставляет)
sleep(4);
SetObjectRotation(car, 180); --развернём караван чтоб смотрел в другую сторону
AddObjectCreatures(car, CREATURE_BONE_DRAGON, 4); --наполняем караван существами, иначе он удалится в конце хода игрока которому принадлежит
AddObjectCreatures(car, CREATURE_WIGHT, 8);
AddObjectCreatures(car, CREATURE_LICH, 12);
AddObjectCreatures(car, CREATURE_VAMPIRE, 20);
AddObjectCreatures(car, CREATURE_MANES, 36);
AddObjectCreatures(car, CREATURE_WALKING_DEAD, 60);
AddObjectCreatures(car, CREATURE_SKELETON, 80);
OpenCircleFog(130, 1, 0, 4, 1); --откроем область карты вокруг точки спавна каравана чтобы потом сместить камеру и показать караван
sleep(4);
MoveCamera(130, 1, 0, 30, 1, 3.14, 0, 0, 1); --сместим камеру к точке спавна каравана чтобы показать игроку что пришло подкрепление
end;
end;

Trigger(NEW_DAY_TRIGGER, "respawn_caravan")

 

 

Спасибо большое за код! Вопрос - а можно ли это реализовать с условием? Т.е, чтобы функция начала выполняться только после выполнения задания?

В ответ пользователю AngryTapok1337
Аватар пользователя
#384
AngryTapok1337
Спасибо большое за код! Вопрос - а можно ли это реализовать с условием? Т.е, чтобы функция начала выполняться только после выполнения задания?
Попробуй такое:
	if ( GetDate( DAY_OF_WEEK ) == 5 ) and ( GetObjectiveState("квест") == OBJECTIVE_COMPLETED ) then

Всякое/карты:

Добавление недостающей музыки гномам

#385

В общем код не работает. Допускаю(даже, я бы сказал, уверен), что я, как и положено хлебушку, вписал что-то не то. Получившаяся функция:

 

CARAVAN = "caravan"

function respawn_caravan()
    if GetObjectiveState("NaydiSuhestv1") =~ OBJECTIVE_COMPLETED then
              return
    end
    if (GetDate( DAY_OF_WEEK ) == 5) then
        car = CARAVAN..GetDate(DAY)
        CreateCaravan(car, 1, GROUND, 173, 68, GROUND, 156, 159 )
        sleep(4)
        SetObjectRotation(car, 180)
        AddObjectCreatures(car, CREATURE_BONE_DRAGON, 4)
        AddObjectCreatures(car, CREATURE_WIGHT, 8)
        AddObjectCreatures(car, CREATURE_LICH, 12)
        AddObjectCreatures(car, CREATURE_VAMPIRE, 20)
        AddObjectCreatures(car, CREATURE_MANES, 36)
        AddObjectCreatures(car, CREATURE_WALKING_DEAD, 60)
        AddObjectCreatures(car, CREATURE_SKELETON, 80)
        OpenCircleFog(173, 68, 0, 4, 1)
        sleep(4)
        MoveCamera(173, 68, 0, 30, 1, 3.14, 0, 0, 1)
    end
end

Trigger(NEW_DAY_TRIGGER, "respawn_caravan")

 

Более того, как только я ее вписал в код, весь код перестал работать вообще. Более чем уверен, что человек, разбирающийся в скриптах, уже увидел у меня ошибку. Прошу разъяснить что тут не так.



Добавлено через 32 минуты

Вообще убрал доп. условие и даже так не работает

 

Получилось следующее:

 

CARAVAN = "caravan"

function respawn_caravan()
    if (GetDate( DAY_OF_WEEK ) == 2)  then
        car = CARAVAN..GetDate(DAY)
        CreateCaravan(car, PLAYER_1, GROUND, 173, 68, GROUND, 156, 159 )
        sleep(4)
        SetObjectRotation(car, 180)
        AddObjectCreatures(car, CREATURE_BONE_DRAGON, 4)
        AddObjectCreatures(car, CREATURE_WIGHT, 8)
        AddObjectCreatures(car, CREATURE_LICH, 12)
        AddObjectCreatures(car, CREATURE_VAMPIRE, 20)
        AddObjectCreatures(car, CREATURE_MANES, 36)
        AddObjectCreatures(car, CREATURE_WALKING_DEAD, 60)
        AddObjectCreatures(car, CREATURE_SKELETON, 80)
        sleep(4)
    end
end

Trigger(NEW_DAY_TRIGGER, "respawn_caravan")

 

Возможно дело в том, что караван просто не может доехать до города? Хотя вроде дорога открыта