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

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

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

MaGoth

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

Вложения

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

Наяд

Участник форума
Регистрация
21 Ноя 2009
Сообщения
1.050
Благодарности
0
Баллы
220
lee, + к словам MaGoth каждую заинтересовавшую функцию смотри в оригинале юзая поиск, от того, что там написано и поймешь конкретное предназначение той или иной функции.
 

lee

Участник форума
Регистрация
25 Окт 2009
Сообщения
106
Благодарности
0
Баллы
165
MaGoth,сайт я знаю,а как тутор называется?Я видел только 2 тутора связанных с диалогами
 

Jr13San


Модостроитель
Регистрация
1 Апр 2010
Сообщения
449
Благодарности
266
Баллы
230
Может кто нибудь знает что писать, чтобы он дружил с монстрами, или как сделать его монстром и поставить на мой вайпоинт?
1) Вот этот скрипт отвечает за отношения между людьми и монстрами:
AI\Monster\B_Monster\B_SetMonsterAttitude.d

Покажу на примере волка и овцы:
GIL_SHEEP - гильдия овцы
GIL_WOLF - гильдия волка
Нету такого, что, твой волк, мой волк. Есть только определённые виды монстров и людей, различающихся по гильдиям.
ТАк вот, открыто решение, скрипт B_SetMonsterAttitude.d
Ищем строчку:
B_SetMonsterAttitude(GIL_WOLF,ATT_HOSTILE,GIL_SHEEP);
[Кто] [отношение] [к кому]
В данном примере волки относится враждебно к овцам.
Просто меняю отношение на нейтральное:
B_SetMonsterAttitude(GIL_WOLF,ATT_NEUTRAL,GIL_SHEEP);
Теперь волки нейтральны к овцам, т.е. не тронут их.

Чтобы протестировать попробуй поставить овцу к волку.
До - волк убил овцу!
После - волк сказал, что наелся уже мясных жуков и прошёл дальше, улыбаясь овце*flowers*

Вот виды отношений:
ATT_FRIENDLY - Друг
ATT_NEUTRAL - Нейтральный
ATT_ANGRY - Сердитый, злой
ATT_HOSTILE - Враг
(подробнее о скриптинге лучше почитать из тутора)

И самое главное, чтобы B_InitMonsterAttitudes(); проинициализировалась в игре через скрипт Story\Startup.d
Иначе ничего работать не будет, точнее будет, но некорректно.

2)Вставка осуществляется в скрипте Story\Startup.d

func void STARTUP_Testlevel()
{

Wld_InsertNpc(BDT_1090_Addon_Raven,"ADW_ADANOSTEMPEL_RAVEN_11");//Вставка нпс по инстанции BDT_1090_Addon_Raven на вейпоинт "ADW_ADANOSTEMPEL_RAVEN_11"
};

где Testlevel - это название уровня.
Точно не помню, обязательно ли писать в названии, в начале: "STARTUP_".

А лучше всего посмотри в Startup.d как вставляли разработчики своих нпс и монстров.
 

lee

Участник форума
Регистрация
25 Окт 2009
Сообщения
106
Благодарности
0
Баллы
165
А как в диалоге сделать в самом конце "КОНЕЦ"?
 

jeludok

Участник форума
Регистрация
23 Окт 2010
Сообщения
41
Благодарности
0
Баллы
150
спасибо s@m, помог.
вот ещё пока парочка вопросов появилась:(по 1-й готике)
1) какой функцией вызывается молния?(баръерская) и возможно ли ваапще его вызвать в любом месте?
2)почему vob-ы из сайта
http://www.worldofgothic.de/?go=moddb&cat=20&page=2
ставятся спейсером без текстур? или может быть их как-то отдельно надевать надо?

а Jr13San тебе тоже спасибо, только что прочитал)
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.367
Благодарности
7.815
Баллы
995
jeludok, Вопросы по моддингу в тему моддинга здесь только скрипты.
 

Myxomop

Почетный форумчанин
Регистрация
28 Май 2005
Сообщения
3.239
Благодарности
2.581
Баллы
455
jeludok,
1) какой функцией вызывается молния?(баръерская)
В Г1 поведение барьера обрабатывается полностью движком игры.

jeludok,
и возможно ли ваапще его вызвать в любом месте?
Все эффекты частиц и заклинаний, используемых игрой находятся в скриптах ParticleFX и VisualFX. Любой эффект из этих скриптов можно использовать в основных скриптах через функцию Wld_PlayEffect, например:

Wld_PlayEffect("spellFX_LightningFlash",hero,hero,2,200,DAM_MAGIC,TRUE);

Героя шарахнет молнией с магическим уроном в 200 ед.
 

Jr13San


Модостроитель
Регистрация
1 Апр 2010
Сообщения
449
Благодарности
266
Баллы
230
1) какой функцией вызывается молния?(баръерская) и возможно ли ваапще его вызвать в любом месте?
2)почему vob-ы из сайта
http://www.worldofgothic.de/?go=moddb&cat=20&page=2
ставятся спейсером без текстур? или может быть их как-то отдельно надевать надо?
2) Возьмём, например, клетку(klatka.zip):
http://www.worldofgothic.de/?go=moddb&action=view&fileID=570

klatka.3ds - меш или модель клетки
klatka.TGA - накладываемая текстура

Копируешь по пути распакованные файлы:
_work\Data\Meshes\klatka.3ds
_work\Data\Textures\klatka.TGA

Примечание: впринципе ложить файлы так, как я положил не желательно, ибо рано или поздно запутаешься + не удобно будет со всем этим работать, поэтому лучше все объекты располагать по папка(это касается и текстур и локаций и др. объектов). Движёк Готы всё равно производит поиск в корневых каталогах. В папке Gothic II\system\ есть файлик Paths.d, там все корневые папки написаны.

Вот, файлы на месте. Открываешь спейсер и наверное знаешь что дальше делать - это открыть любой зен создать Vob объект и завизуализировать этой клеткой воб, либо открыть уже тот меш: klatka.3ds как меш. Готово.

Jr13San, Русский язык понимаем или нет? ::)
Понимаю, просто лучше было бы написать в личку, но что сделано, то сделано. Да и какая разница - 1 помогающий пост ничего плохого не даёт, зато вопрос полностью решён.
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.367
Благодарности
7.815
Баллы
995
Jr13San, Русский язык понимаем или нет? ::)
 

jeludok

Участник форума
Регистрация
23 Окт 2010
Сообщения
41
Благодарности
0
Баллы
150
у меня немного нубский вопрос:

как сделать меч при ударе которого вызывается молния, ударяющего врага?*???*
по идее это что-то вроде:
if("удар мечём")
{
Wld_PlayEffect("spellFX_LightningFlash","не знаю что","того кого ударили етим мечём",2,200,DAM_MAGIC,TRUE);
}
вот только где ето всё писать? и что должно быть вместо "удар мечём", "не знаю что" и "того кого ударили етим мечём":)
 

Друид

Участник форума
Регистрация
21 Ноя 2009
Сообщения
1.170
Благодарности
398
Баллы
285
jeludok, это в файле B_AssessDamage.d (и аналогичный для монстров)
А вместо "удар мечом" тебе нужно устроить проверку - что в руке именно тот самый меч. Глянь для примеру ориг. функцию B_ScHasBeliarsWeapon.d
 

Dimmell

Участник форума
Регистрация
23 Ноя 2008
Сообщения
2.899
Благодарности
111
Баллы
285
jeludok, это в файле B_AssessDamage.d (и аналогичный для монстров)
А вместо "удар мечом" тебе нужно устроить проверку - что в руке именно тот самый меч. Глянь для примеру ориг. функцию B_ScHasBeliarsWeapon.d
Все намного проще - функция B_BeliarsWeaponSpecialDamage.
Там все понятно:
otherweap = Npc_GetReadiedWeapon(oth); // оружие наизготовку
if(Hlp_IsItem(otherweap,ItMW_MageStaff_1h_F) == TRUE) // проверка на оружие

Функция B_MagicHurtNpc(slf,oth,50); часто глючит и провоцирует пропажу лута на трупах
 

jeludok

Участник форума
Регистрация
23 Окт 2010
Сообщения
41
Благодарности
0
Баллы
150
я про ПЕРВУЮ готику. Там нету B_AssessDamage.d =(
 

Jr13San


Модостроитель
Регистрация
1 Апр 2010
Сообщения
449
Благодарности
266
Баллы
230
Мдя.. всё ещё остаются поклонники старого движка Готы, мб оно и к лучшему...
Теперь к теме...
Можно попробовать зарегистрировать вред или урон с помощью слежением за здоровьем. НО! Кто будет за этим следить? невидимого нпс нет смысла делать, т.к. на него может попасть фокус, да и не к чему это. Можно конечно воспользоваться циклом из триггера.
Да, есть ещё некоторые тонкости на счёт падения...

jeludok,
Там восприятие сразу передается в функцию ZS_ReactToDamage, но никто не мешает тебе написать свой B_AssessDamage
1) Он не напишет, т.к. у него мало опыта работы в скриптинге - это видно по вопросам.

jeludok, не обижайся.*flowers* Что есть, то есть.

Мдя, нашёл куда строку впихнуть:).
Напоминаешь мне мультик про печку и про Вовку в тридесятом царстве.
Wld_PlayEffect("spellFX_LightningFlash",hero,hero, 2,200,DAM_MAGIC,TRUE); - вот она вызывается, но только не так, а хотябы при одевании предмета, в функции void или ещё где-то.

Короче, как мне кажется, что тебе ещё рано делать мечи со спец-эффектами...
Да, вспомнил тут одну вещь.. эффекты на вещах, что в Готике2, типа огненный меч, огненный лук, магический арбалет и т.д. так просто не реализуешь, можно попробовать через оверлеи и т.д., но не факт, что получется без багов.

НА счёт удара мечём и в последствии уже обработка спец-эффекта...
Тебе сначало надо сделать обработку повреждений, прежде чем бить молнией. А чтобы сделать обработку, нужно посидеть недельку над скриптами.
 

Myxomop

Почетный форумчанин
Регистрация
28 Май 2005
Сообщения
3.239
Благодарности
2.581
Баллы
455
jeludok,
я про ПЕРВУЮ готику. Там нету B_AssessDamage.d
Там восприятие сразу передается в функцию ZS_ReactToDamage, но никто не мешает тебе написать свой B_AssessDamage
 

jeludok

Участник форума
Регистрация
23 Окт 2010
Сообщения
41
Благодарности
0
Баллы
150
ок Jr13San наверно далеко мне до спецефектов, приступлю наверно к следущей моей безумной идее: заклинание поднимающее в воздух неписей и монстров(типа телекинеза, только не предметов,а существ). будут вопросы обращусь :D
 

lee

Участник форума
Регистрация
25 Окт 2009
Сообщения
106
Благодарности
0
Баллы
165
Так как в диалогах "конец" делать?,а то у меня варианты ответа есть,а надписи "конец" нету.
 

Друид

Участник форума
Регистрация
21 Ноя 2009
Сообщения
1.170
Благодарности
398
Баллы
285
instance DIA_YourNepis_EXIT(C_Info)
{
npc = NONE_12_YOURNEPIS;
nr = 999;
condition = dia_YourNepis_exit_condition;
information = dia_YourNepis_exit_info;
permanent = TRUE;
description = Dialog_Ende;
};

func int dia_YourNepis_exit_condition()
{
return TRUE;
};
func void dia_ YourNepis _exit_info()
{
AI_StopProcessInfos(self);
};
 
Сверху Снизу