• Уважаемые гости и новички, приветствуем Вас на нашем форуме
    Здесь вы можете найти ответы практически на все свои вопросы о серии игр «Готика» (в том числе различных модах на нее), «Ведьмак», «Ризен», «Древние свитки», «Эра дракона» и о многих других играх. Можете также узнать свежие новости о разработке новых проектов, восхититься творчеством наших форумчан, либо самим показать, что вы умеете. Ну и наконец, можете обсудить общие увлечения или просто весело пообщаться с посетителями «Таверны».

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!

Вопросы по скриптингу

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.367
Благодарности
7.815
Баллы
995
  • Первое сообщение
  • #1
Прежде чем задавать вопросы, ознакомьтесь с документацией..
1) Читать онлайн
2) Архив с офлайн-версией(chm) во вложении
 

Вложения

  • Vam_tutor.rar
    171,6 KB · Просмотры: 574
Последнее редактирование модератором:

vmazz

Участник форума
Регистрация
18 Дек 2008
Сообщения
218
Благодарности
1
Баллы
165
Geor'G, я поначалу тоже парился, триггер не работал, оказывается функцию в триггере надо прописывать ТОЛЬКО заглавными буквами, но это было для Г1. Проверь может и у 2ой платформы есть такая особенность.
 

s@m


Модостроитель
Регистрация
2 Мар 2007
Сообщения
315
Благодарности
56
Баллы
195
vmazz написал(а):
Geor'G, я поначалу тоже парился, триггер не работал, оказывается функцию в триггере надо прописывать ТОЛЬКО заглавными буквами, но это было для Г1. Проверь может и у 2ой платформы есть такая особенность.
Да есть. У меня не работало а после того как я прописал заглавными буквами всё стало работать:
Вот так попробуй
func void B_GLOBALINNOS()
{
if(hero.attribute[ATR_HITPOINTS_MAX] == 0)
{
AI_PrintScreen("Не прошла",-1,-1,FONT_Screen,5); //--Это для себя простая проверка
Wld_SendTrigger("GLOBAL_INNOS"); //--Вызов триггера
return;
}
else
{
AI_PrintScreen("ПРОШЛА",-1,-1,FONT_Screen,5);
pal_innos_karma(); //--Моя функция
};
Wld_SendTrigger("GLOBAL_INNOS");
};

Да и не забуть в gothic.scr указать путь к файлу с этим скриптом
 
Последнее редактирование модератором:

GeorG

Участник форума
Регистрация
27 Авг 2008
Сообщения
3.447
Благодарности
11
Баллы
295
2vmazz: 2s@m:
Попробовал изменить регистр букв в разных соотношениях (даже в startup.d) эффект тот же. А кто нибудь пробовал такой триггер на движке Готики 2?

2ukur:
Глупостей и не делал, сразу там прописал поссовету S@M, просто у тебя очень пространственно объяснено (в посте 118), где именно нужно прописывать, в файле Startup.d такой строчки я вообще не нашёл, и дописал её сам (конечно потом удалил и прописал как надо). А вообще я уже везде добавил, где только можно B_GlobalInnos и всё равно не работает триггер.
Триггер в ZEN-е есть, проверил, даже открывал его Notepad++.

ukur написал(а):
Надеюсь не стоит говорить, что при этом Worlds.vdf с мирами должен быть удален, либо отключен путем переименования расширения, т.к. движек игры приоритетно считывает все данные вначале из vdf, а не с распакованной папки.
А вот про это не знал, хотя и сам потом догадался, см. пост выше, только начал разбираться с движком игры

P.S. Некогда не задаю вопрос пока сам не попробую всё что приходит в голову, пока сам всё не перепробовал.

P.P.S. Кому интересно в вложении полный листинг файла B_GlobalInnos и Startup.d который использую.
 
Последнее редактирование модератором:

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.863
Благодарности
6.742
Баллы
1.625
Народ, вы что???? ЗАЧЕМ ПРОПИСЫВАТЬ ВО ВСЕХ ПАРТАХ? вы что хоть???
Нужно только в одном парте прописать и достаточно, на счет того что тригер не работет когда его с помощью скриптов вызываем, дык нужно проверить в спакере, реагирует ли сам триггер на восприятие скриптов.
3) Обязательно - поставить TRUE в поле reactToOnTrigger - чтобы триггер мог среагировать на WLD_SendTrigger.
И в каком из миров ты делаешь триггер? если в НевВорде то пропиши в стартапе только тут
FUNC VOID INIT_NewWorld()
{
    B_InitMonsterAttitudes ();
B_InitGuildAttitudes();
B_InitNpcGlobals ();
B_GlobalInnos();

B_ENTER_NEWWORLD ();

// ------- Diebesgilde abtцten ------
if (Diebesgilde_Verraten)
&& (Andre_Diebesgilde_aufgeraeumt != TRUE)
{
if (!Npc_IsDead(Cassia))
|| (!Npc_IsDead(Jesper))
|| (!Npc_IsDead(Ramirez))
{
B_KillNpc(VLK_447_Cassia);
B_KillNpc(VLK_446_Jesper);
B_KillNpc(VLK_445_Ramirez);
Andre_Diebesgilde_aufgeraeumt = TRUE;
};
};

// ------ INITS der Unter-Parts ------
INIT_SUB_NewWorld_Part_City_01();
INIT_SUB_NewWorld_Part_Farm_01();
INIT_SUB_NewWorld_Part_Xardas_01();
INIT_SUB_NewWorld_Part_Monastery_01();
INIT_SUB_NewWorld_Part_GreatPeasant_01();
INIT_SUB_NewWorld_Part_TrollArea_01();
INIT_SUB_NewWorld_Part_Forest_01();
INIT_SUB_NewWorld_Part_Pass_To_OW_01();

if (MIS_ReadyForChapter3  == TRUE ) //Joly: muЯ hier in der INIT ganz zum schluss stehen, nachdem alle NSCs fьrs Kapitel insertet wurden!!!
&& (B_Chapter3_OneTime == FALSE)
{
B_Kapitelwechsel (3,NEWWORLD_ZEN);
B_Chapter3_OneTime = TRUE;
};

if (MIS_AllDragonsDead  == TRUE ) //Joly: muЯ hier in der INIT ganz zum schluss stehen, nachdem alle NSCs fьrs Kapitel insertet wurden!!!
&& (B_Chapter5_OneTime == FALSE)
{
B_Kapitelwechsel (5, NEWWORLD_ZEN);
B_Chapter5_OneTime = TRUE;
};
};
И тд.
 

GeorG

Участник форума
Регистрация
27 Авг 2008
Сообщения
3.447
Благодарности
11
Баллы
295
Какие настройки делал в Spacer можно посмотреть тут, там вроде всё правильно.

2MEG@VOLT:
Эх,… мне бы хотя бы в одном мире сделать, а так рассчитывал на все миры распространить.

Кстати ту назрел резонный вопрос, такой триггер надо во всех мирах делать, где он используется или же будет мона его прописать в Startup.d в других мирах, а сделать в одном?
Извиняюсь если вопрос, звучит глупо. :)
 

s@m


Модостроитель
Регистрация
2 Мар 2007
Сообщения
315
Благодарности
56
Баллы
195
Вот попробую объяснит тебе порядок Действий:
1. Заходишь в Спайсер, если ты собрался изменять NewWorld то открывай Ту Парту которую ты намерен изменять а например NewWorld_Part_City_01.zen туда добавляешь триггер скрипт(у тебя на картинке всё правильно, однако задержку ставь - 1.0) даёшь имя - WORK_TRIGGER и такое же имя даёшь функции которую он вызывает - WORK_TRIGGER . Далее ставишь везде галочки, сохраняешь. А теперь внимание! Тебе нужно скомпилировать все парты в один единый NewWorld.zen с помощью Макроса в спайсере - Tools >Macros Там выбери NewWorld. Подожди пока скомпилируется, потом сохрани как NewWorld.зен то есть замени оригинал. Далее идёшь в скрипты создаёшь в папке Story\Events - WORK_TRIGGER.d файл, открываешь, для начала пишешь :

//****************************
// WORK
//****************************

func void WORK_TRIGGER ()
{
if (WORK_TRIGGER_ACTIVATION == true)
{
AI_PrintScreen("Тригер пашет!",-1,95,FONT_ScreenSmall,2);

};
Wld_SendTrigger ("WORK_TRIGGER");
};

WORK_TRIGGER_ACTIVATION - переменная для того чтобы когда либо его остановить! её в Story_Globals.d можешь указать, тип int.

Сохраняешь это дело. идёшь в Startup.d добавляешь запись в ините НевВорлда (основного!):

func void INIT_NewWorld()
{

WORK_TRIGGER (); // вот эту запись

};
идёшь в файл Gothic.src и смотришь чтобы в низу самом была некая запись: STORY\Events\*.d
Радуешся...
 
Последнее редактирование модератором:

GeorG

Участник форума
Регистрация
27 Авг 2008
Сообщения
3.447
Благодарности
11
Баллы
295
Видимо где то я туплю не получается у меня, видимо что-то совсем не значительное что я упускаю по тому и не работает, вот понять бы где? :( ??? :'( :mad:
S@M сделал всё как ты описал, раньше я не компилел, просто сохранял, но и так не чего не получилось только файл ZEN стал меньше оригинала, не все парты компилятся (если что я всё это проделываю с «Возращением» EXE версия) бросил недостающие парты из ADDON_RETURNING.vdf в папку _work\data\Worlds\NewWorld всё равно компилет не все парты, вместо 18, двенадцать.
 
Последнее редактирование модератором:

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.863
Благодарности
6.742
Баллы
1.625
Впринципе делаешь все правильно, но есть одна проблемка... У тебя в картинке Object, тригер вызывает функцию, которая вызывает этот тригер. Т.е. тригер замыкает сам себя. У тебя еще поставлено , что он может действовать постоянно, т.е. trigger-untrigger(надеюсь понятно, был бы я новичком - не понял бы), а так как он замыкает сам себя, то при вызове функции в стартапе, тригер начинает свое злобное дело, но тут опятьже вызывается функция, которая приводит в untrigger, и тригер начинает делать все обратно, а пока ты к нему перемещаешься - он встает на свою исходную позицию...
И еще, поставь TRUE в строчку cdDyn:
Вот...
 

GeorG

Участник форума
Регистрация
27 Авг 2008
Сообщения
3.447
Благодарности
11
Баллы
295
Всё Оке’й, всё понял, всё за работало.
Спасибо тебе огромное MEG@VOLT:, заставил немного помыслить.

Вот я создал триггер, но он действует только на той карте (мире) куда я его сохранил и это понятно, а есть ли какая нибудь хитрость чтобы, создавая триггер в одном мире, он бы распространялся (действовал) во всех мирах или нет.
Чё мне придётся один и тот же триггер делать во всех мирах?
 

redleha


Модостроитель
Регистрация
26 Фев 2008
Сообщения
735
Благодарности
665
Баллы
245
Geor'G написал(а):
Чё мне придётся один и тот же триггер делать во всех мирах?
А что у тебя невменяемое количество миров, или это так сложно создать триггер? :)
 
Последнее редактирование модератором:

s@m


Модостроитель
Регистрация
2 Мар 2007
Сообщения
315
Благодарности
56
Баллы
195
Geor'G написал(а):
Чё мне придётся один и тот же триггер делать во всех мирах?
Нет, должен работать если есть хотябы в одном парте.
 
Последнее редактирование модератором:

GeorG

Участник форума
Регистрация
27 Авг 2008
Сообщения
3.447
Благодарности
11
Баллы
295
redleha написал(а):
Geor'G написал(а):
Чё мне придётся один и тот же триггер делать во всех мирах?
А что у тебя невменяемое количество миров, или это так сложно создать триггер? :)

У меня есть весомая для этого причина, какая, пока не будем об этом.

s@m написал(а):
Нет, должен работать если есть хотябы в одном парте.

Я открыл целый мир «NEWWORLD.ZEN», вставил триггер, сохранил мир, теперь триггер работает только в этом мире. Когда захожу в другой, к примеру «OldWorld.zen» триггер перестаёт пахать. В парте триггера нет, он есть в целом мире. Что получается, когда я делаю в парте, я писал в посте «№190».
 
Последнее редактирование модератором:

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.863
Благодарности
6.742
Баллы
1.625
Ну как ты сам и говорили...
Geor'G написал(а):
придётся один и тот же триггер делать во всех мирах
)
Дело в чем...?!
У тебя твой тригер сохранен только в ньюворде, а в олдворде его естественно нет, нужно создавать.
 
Последнее редактирование:

darkelf

Участник форума
Регистрация
28 Фев 2009
Сообщения
29
Благодарности
0
Баллы
150
У меня вопрос:
Как создать квест по типу Хроманина ?
(Книги уже есть)
(Даете слылки - пусть они работают пожалуста)
 

Dimmell

Участник форума
Регистрация
23 Ноя 2008
Сообщения
2.899
Благодарности
111
Баллы
285
darkelf написал(а):
У меня вопрос:
Как создать квест по типу Хроманина ?
(Книги уже есть)
Распаковываешь мод (Глобал например), забиваешь в поиск в сорсере Хроманин, получаешь ссылки на инстанции. Дальше в поисковик имя инстанции - покажет где и как она прописывается (вызывается). Идешь по ссылкам, смотришь что и как. А дальше, зная квестовую линию, по аналогии прописываешь.
За тебя самого здесь никто думать и учиться не будет.

(Даете слылки - пусть они работают пожалуста)
Админам: дайте ему ссылку на недельку в читальный зал - пусть поработает с литературой.

Ну я не админ, но все же. В ВЕРХУ СТРАНЫЦИ, ЕСТЬ КНОПКА "МОДОСТРОЕНИЕ"//МЕГА :)//
 
Последнее редактирование модератором:

marazmus

★★★★★★★★★★★
Основатель
Регистрация
7 Янв 2003
Сообщения
2.117
Благодарности
914
Баллы
385
darkelf написал(а):
У меня вопрос:
Как создать квест по типу Хроманина ?
(Книги уже есть)
(Даете слылки - пусть они работают пожалуста)

1) Внимательно и углубленно изучаем уроки Вама по скриптам Г2а. После этого такие тупые вопросы отпадают сами собой, проверено не одним поколением модостроителей.

(Даете слылки - пусть они работают пожалуста)
Когда тебе говорят, что что-то нужно прочитать - иди и читай. Судя по всему, ты думаешь, что все так просто и напрягаться не нужно. До звания модостроителя тебе еще топать и топать раком до китая.

И еще - не советую так нагло и тупо тырить наши статьи с мод.вог.ру. Во-первых, вот так вот: http://modmaker.ucoz.org/forum/4 - делают только полные и законченные придурки. Идя этим путем, ты никогда не создашь свой нормальный сайт по модостроению. Пока я вижу только попытки создать очередной говносайт ни о чем, путем воровства статей.

Иди учись короче, штудируй уроки по скриптам, мод.вог.ру, и приходи когда хоть что-нибудь поймешь.
 
Последнее редактирование модератором:

p-zenia

Участник форума
Регистрация
6 Апр 2009
Сообщения
38
Благодарности
0
Баллы
150
Я создал НПС но как мне его вставитть в игру? Я читал тутор но нечего не понял! Помогите!
 

GeorG

Участник форума
Регистрация
27 Авг 2008
Сообщения
3.447
Благодарности
11
Баллы
295
2p-zenia: Если ты читал тутор и не чего не понял, то, что ты хочешь? ::) чтобы кто-то ещё написал один (прямо здесь), а ты бы его прочитал и опять не чего не понял... :-\
Не обижайся, но просто спрашивай конкретней, чего именно не понял, и что именно не получается... ;)
 

p-zenia

Участник форума
Регистрация
6 Апр 2009
Сообщения
38
Благодарности
0
Баллы
150
Мне написаль что нужно поставить Вейпоинт, я поставил его на моей локации! А что мне нужно прописывать в файле Startup.d
 

GeorG

Участник форума
Регистрация
27 Авг 2008
Сообщения
3.447
Благодарности
11
Баллы
295
2p-zenia:
// разместить в мире одного НПС, где instanceNpc – ссылка на НПС,
// spawnPoint – имя точки размещения (может быть как WP, так и FP).
func void Wld_InsertNpc(var int instanceNpc, var string spawnPoint);

Это строка должна быть размещена в соответствующим парте, т.е посмотри к примеру, как сделано у Онара:
Код:
Wld_InsertNpc(BAU_900_Onar, "BIGFARM");
 
Последнее редактирование модератором:
Сверху Снизу