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

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

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

MaGoth

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

Вложения

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

BOPOH32

Участник форума
Регистрация
7 Июл 2014
Сообщения
246
Благодарности
56
Баллы
200
1. Привязка руны к кругу магии осуществляется параметром mag_circle в инстанции этой руны. Учти, что перевод руны из одного круга в другой потребует изменения диалогов с наставниками, обучающими ГГ её созданию. В качестве образца ребаланса магии рекомендую декомпилировать и изучить скрипты мода "Руны" (альтернативная ссылка).
2. Забудь об этом. Галлахад не должен обучать кругам магии наёмника, потому что это обучение разрешено только для магов (Огня, Воды и некров). Поэтому наёмник и паладин могут использовать только те руны, которые не имеют привязки к кругам магии.
а если тупо изучение всем кругам в 2х первых главах сделать
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.367
Благодарности
7.815
Баллы
995
BOPOH32,
Не совсем понял цели создания тобой левых тем? Чем не угодила текущая тема по вопросам скриптов?
Рекомендую ознакомится с правилами форума/портала.
Еще одна подобная тема в разделах модостроения и будет баня..
 

Bjorn++

Участник форума
Регистрация
28 Июн 2011
Сообщения
1.063
Благодарности
46
Баллы
235
Осторожно, фуд!
Как же мне смешно наблюдать за вот такими новенькими "энтузиастами", которые всё время пишут-пишут, типа работают над проектом, все ему помогают в этом, учат, а тот потом просто сваливает в неизвестным направлении :D

PS. Ну а чтобы этот пост всё-таки не был флудом, и чтобы всё был по "закону"... у меня следующий вопрос.
Как правильно прописывать новую локацию в скрипте "Startup", ведь, вроде, там всё это добро делается.
У меня в принципе получилось, всё заработало, но это было просто "на бум", так сказать. Сам не понял, что сделал. :D А хотелось бы всё-таки понимать ;)

PS.PS. Да да, может вопрос глупый и частозадаваемый, но, мерси... *поклонился*
 

redleha


Модостроитель
Регистрация
26 Фев 2008
Сообщения
735
Благодарности
665
Баллы
245
Ну , всё просто:

func void STARTUP_Testlevel(){};
func void INIT_SUB_Testlevel(){};
func void INIT_Testlevel(){ };

Вот ты делал по шаблону. А здесь самое главное - имя в названии функции _TESTLEVEL - Это название ZEN-файла локации и всё. То есть у тебя зен-файл имеет имя "TESTLEVEL.ZEN"
 

Bjorn++

Участник форума
Регистрация
28 Июн 2011
Сообщения
1.063
Благодарности
46
Баллы
235
Ну , всё просто:

func void STARTUP_Testlevel(){};
func void INIT_SUB_Testlevel(){};
func void INIT_Testlevel(){ };

Вот ты делал по шаблону. А здесь самое главное - имя в названии функции _TESTLEVEL - Это название ZEN-файла локации и всё. То есть у тебя зен-файл имеет имя "TESTLEVEL.ZEN"
Т.е., вот эти три функции и всё?:eek:
Мда уж, а я там целую поэзию расписывал.
 

Vlad_Torop

Участник форума
Регистрация
2 Май 2014
Сообщения
870
Благодарности
499
Баллы
230
Вот вырезка из газеты "Комсомольская правда" за 1408-й год.:)
Может будет полезна(если еще тебе не знакома):
Startup из болванки.Автора не помню.Архив обозначен,как :content_modmasters_14-08
// Инициализация мира.

/*
Весь файл Startup.d состоит из блоков, каждый блок - из двух секций.
Первая секция - STARTUP_<LevelName>, в этой секции выполняется расстановка НПС и предметов на карте конкретной локации.
Вторая секция - INIT_<LevelName>, в этой секции выполняется инициализация отношений между монстрами, НПС и гильдиями; производится инициализация глобальных НПС, доступных в любой части скриптов; задается принадлежность помещений гильдиям и конкретным НПС.
<LevelName> в именах секций (кроме GLOBAL) является именем части мира Готики, на которую есть *.zen файл с именем LevelName и которая загружается при переходе из одной части мира в другую.
Функция STARTUP_ определенной части мира вызывается экзешником только один раз - при начале игры или при первом посещении этой части мира.
Функция INIT_ определенной части мира вызывается экзешником каждый раз при входе в эту часть мира.

Если Вы создаете свою карту мира, то необходимо в этом файле или любом другом (можно новом) создать для своего мира эти две секции.
*/


// **************
// GLOBAL секция
// **************
// Вызывается только один раз при начале новой игры (инициализация глобальных внутренних переменных)

func void STARTUP_GLOBAL()
{
Game_InitGerman();
};

func void INIT_GLOBAL()
{
Game_InitGerman();
};



//Логово
func void STARTUP_DEMO ()
{
Wld_InsertNpc (Leg_22010_Ratsha, "WPRATSHA");
Wld_InsertNpc (Scavenger, "WPCHECK01");

};


func void INIT_DEMO ()
{
B_InitMonsterAttitudes ();
B_InitGuildAttitudes();
// B_InitNpcGlobals ();
};



//Легенда - деревня
func void STARTUP_MYWORLD_PART_VILLAGE_01 ()
{

};


func void INIT_MYWORLD_PART_VILLAGE_01 ()
{
B_InitMonsterAttitudes ();
B_InitGuildAttitudes();
// B_InitNpcGlobals ();
};


//видеосцена
func void STARTUP_LEVEL_SCENE ()
{
Wld_InsertNpc (leg_22002_gr01, "LADJA_GREBEC02");
Wld_InsertNpc (leg_22003_gr02, "LADJA_GREBEC02");
Wld_InsertNpc (leg_22004_gr03, "LADJA_GREBEC02");
Wld_InsertNpc (leg_22005_gr04, "LADJA_GREBEC02");
Wld_InsertNpc (leg_22006_gr05, "LADJA_GREBEC02");
Wld_InsertNpc (leg_22007_gr06, "LADJA_GREBEC02");

Wld_InsertNpc (leg_22008_chudin, "LADJA_RUL"); //Рулевой Чудин
Wld_InsertNpc (leg_22001_tima, "WPTIMA01"); //Тимофей на носу
Wld_InsertNpc (leg_22009_temphero, "WPHERO01"); //ГГ

Wld_InsertNpc (Eagle, "WPEAGLEFLY");

};


func void INIT_LEVEL_SCENE ()
{
B_InitMonsterAttitudes ();
B_InitGuildAttitudes();
// B_InitNpcGlobals ();
};
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
Вот вырезка из газеты "Комсомольская правда" за 1408-й год.:)
Может будет полезна(если еще тебе не знакома):
Startup из болванки.Автора не помню.Архив обозначен,как :content_modmasters_14-08
// Инициализация мира.

/*
Весь файл Startup.d состоит из блоков, каждый блок - из двух секций.
Первая секция - STARTUP_<LevelName>, в этой секции выполняется расстановка НПС и предметов на карте конкретной локации.
Вторая секция - INIT_<LevelName>, в этой секции выполняется инициализация отношений между монстрами, НПС и гильдиями; производится инициализация глобальных НПС, доступных в любой части скриптов; задается принадлежность помещений гильдиям и конкретным НПС.
<LevelName> в именах секций (кроме GLOBAL) является именем части мира Готики, на которую есть *.zen файл с именем LevelName и которая загружается при переходе из одной части мира в другую.
Функция STARTUP_ определенной части мира вызывается экзешником только один раз - при начале игры или при первом посещении этой части мира.
Функция INIT_ определенной части мира вызывается экзешником каждый раз при входе в эту часть мира.

Если Вы создаете свою карту мира, то необходимо в этом файле или любом другом (можно новом) создать для своего мира эти две секции.
*/


// **************
// GLOBAL секция
// **************
// Вызывается только один раз при начале новой игры (инициализация глобальных внутренних переменных)

func void STARTUP_GLOBAL()
{
Game_InitGerman();
};

func void INIT_GLOBAL()
{
Game_InitGerman();
};



//Логово
func void STARTUP_DEMO ()
{
Wld_InsertNpc (Leg_22010_Ratsha, "WPRATSHA");
Wld_InsertNpc (Scavenger, "WPCHECK01");

};


func void INIT_DEMO ()
{
B_InitMonsterAttitudes ();
B_InitGuildAttitudes();
// B_InitNpcGlobals ();
};



//Легенда - деревня
func void STARTUP_MYWORLD_PART_VILLAGE_01 ()
{

};


func void INIT_MYWORLD_PART_VILLAGE_01 ()
{
B_InitMonsterAttitudes ();
B_InitGuildAttitudes();
// B_InitNpcGlobals ();
};


//видеосцена
func void STARTUP_LEVEL_SCENE ()
{
Wld_InsertNpc (leg_22002_gr01, "LADJA_GREBEC02");
Wld_InsertNpc (leg_22003_gr02, "LADJA_GREBEC02");
Wld_InsertNpc (leg_22004_gr03, "LADJA_GREBEC02");
Wld_InsertNpc (leg_22005_gr04, "LADJA_GREBEC02");
Wld_InsertNpc (leg_22006_gr05, "LADJA_GREBEC02");
Wld_InsertNpc (leg_22007_gr06, "LADJA_GREBEC02");

Wld_InsertNpc (leg_22008_chudin, "LADJA_RUL"); //Рулевой Чудин
Wld_InsertNpc (leg_22001_tima, "WPTIMA01"); //Тимофей на носу
Wld_InsertNpc (leg_22009_temphero, "WPHERO01"); //ГГ

Wld_InsertNpc (Eagle, "WPEAGLEFLY");

};


func void INIT_LEVEL_SCENE ()
{
B_InitMonsterAttitudes ();
B_InitGuildAttitudes();
// B_InitNpcGlobals ();
};
P.s. Авторство камрада WSA на основе тутора VAMа.
Лично мне не очень нравится система поиска GothicSourcer, поэтому я предпочитаю использовать поиск из FAR manager или Total Commander. Кстати, при декомпиляции скриптов один и тот же объект может иметь название на разных регистрах, например, ITAR_GOMEZ_ADDON и itar_gomez_addon. Движку ZenGin это пофиг, т.к. он является регистронезависимым (исключение - названия waypoint и freepoint, в которых должны быть только заглавные буквы).

Немного не так, строковые параметры(типа string) по возможности ВСЕГДА в верхнем регистре. А вот все остальное, instance/int и тд регистр не важен.
 

BOPOH32

Участник форума
Регистрация
7 Июл 2014
Сообщения
246
Благодарности
56
Баллы
200
Ребят скажите в каком скрипте и какое значение поменять что бы убрать "трусливых мобов"
Rebalance 2.1 и SnC 1.1
 

Dimus

★★★★★★★★★
Супермодератор
Регистрация
19 Июл 2010
Сообщения
5.574
Благодарности
4.167
Баллы
915
Я уже отвечал на этот вопрос. Если тебе лень запустить поиск по указанным маскам и проанализировать куски кода, где происходит перевод ИИ в состояние бегства, то это уже твои проблемы. Например, в неофициальном обновлении проверки на возможность сбежать и само бегство происходят в функциях реализации атаки:
ZS_Attack(), ZS_Attack_Loop(), ZS_Attack_End(),
ZS_MM_Attack(), ZS_MM_Attack_Loop(), ZS_MM_Attack_End()
Как это сделано в Rebalance и Slash'n'Craft - не знаю, т.к. под рукой нет скриптов этих модов. Поэтому тебе придётся самому разбираться в этом вопросе.
 

BOPOH32

Участник форума
Регистрация
7 Июл 2014
Сообщения
246
Благодарности
56
Баллы
200
а какой скрипт отвечает за разогрев стальных заготовок( скок штук греть/плавить) и за алхимию(кол-во варимых зелий-1,5)

Я уже отвечал на этот вопрос. Если тебе лень запустить поиск по указанным маскам и проанализировать куски кода, где происходит перевод ИИ в состояние бегства, то это уже твои проблемы. Например, в неофициальном обновлении проверки на возможность сбежать и само бегство происходят в функциях реализации атаки:
Открыть спойлер
Как это сделано в Rebalance и Slash'n'Craft - не знаю, т.к. под рукой нет скриптов этих модов. Поэтому тебе придётся самому разбираться в этом вопросе.
я разобрался, но не в этих скриптах было дело!!! так что мобы теперь не трусливые))

Теперь такой вопрос: как населить локацию большим количеством мобов???
 
Последнее редактирование модератором:

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.407
Благодарности
3.232
Баллы
525
Если кому интересно. Обнаружил неприятную особенность массивов в Г1, возможно, это имеет место и в Г2.

Похоже, переменные из массивов умеют переживать загрузку сохранения, находясь в оперативной памяти. Задействовал массив для сохранении информации о факте и дне зажжения факелов. Делаю сохранение перед не горящим факелом, зажигаю факел, день запоминается в одной из переменных массива, загружаю сохранение - факел, который на момент сохранения не горел, горит. Если для запоминания использовать обычную целочисленную переменную, всё работает правильно. Такая вот загогулина... (С).
 

Jr13San


Модостроитель
Регистрация
1 Апр 2010
Сообщения
444
Благодарности
264
Баллы
230
ElderGamer, а размер массива какой там был?
 
Последнее редактирование:

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.407
Благодарности
3.232
Баллы
525
В одном случае 10, в другом 15.

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

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
Хмм, надо проверить на г2
Кинь мне сюда д файл с твоим кодом(только именно файлом)
 
Последнее редактирование:

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.407
Благодарности
3.232
Баллы
525
Те скрипты, с которыми я работаю, будут в моём распоряжении в понедельник. Правда я убрал уже оттуда использование массивов, заменив массив на кучу отдельных переменных. Если нужно, могу набросать идею по памяти, сведя всё в один файл. Но я не уверен, что эта идея будет удобна для проверки бага в Г2, поскольку она требует внесение правок в ZEN-файл игрового мира.

Могу предложить следующий вариант. Выбери инстанцию книги. Внеси в функцию, вызываемую при её прочтении, увеличение переменной из массива на 1 и вывод на экран нового значения. Сохранись, прочитай книгу, на экране должна появиться "1". Загрузи сохранение, прочитай книгу. Если бага нет, то на экране опять должна появиться "1", если баг есть, появится "2".
 

Dimus

★★★★★★★★★
Супермодератор
Регистрация
19 Июл 2010
Сообщения
5.574
Благодарности
4.167
Баллы
915
А в оригинальной Г2 (версии 1.28 - 1.32) такой баг есть?
 

BOPOH32

Участник форума
Регистрация
7 Июл 2014
Сообщения
246
Благодарности
56
Баллы
200
Ребят подскажите веппоинты Г2НВ что бы на определённое место НПС вставить или монстра.
И обязательно ли для этого создавать скрипт startup???
 

ElderGamer


Модостроитель
Регистрация
16 Апр 2008
Сообщения
4.407
Благодарности
3.232
Баллы
525
Ребят подскажите веппоинты

В игре в режиме Марвина набери toggle waynet - будут показаны вейпоинты и связи между ними, toggle freepoints - будут показаны фрипоинты.

И обязательно ли для этого создавать скрипт startup???

Стартап-функция выполняется при первой загрузке локации. В ней вставляются неписи, которые изначально присутствуют в локации. Но непися можно вставить и из другой функции, например, из инстанции диалога: поговорил с кем-то, а в результате где-то появился непись.
 

BOPOH32

Участник форума
Регистрация
7 Июл 2014
Сообщения
246
Благодарности
56
Баллы
200
Стартап-функция выполняется при первой загрузке локации. В ней вставляются неписи, которые изначально присутствуют в локации. Но непися можно вставить и из другой функции, например, из инстанции диалога: поговорил с кем-то, а в результате где-то появился непись.
просто мне нужно вставить несколько неписей, что-то вроде гильдии, 1 будет стоять на нужном мне вейпоинте, а остальные появятся после разговора с ним!
 
Сверху Снизу