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

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

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

MaGoth

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

Вложения

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

Myxomop

Почетный форумчанин
Регистрация
28 Май 2005
Сообщения
3.239
Благодарности
2.581
Баллы
455
Как заставить ГГ появиться при старте новой игры не в башне Ксардаса, а где-нибудь в другом месте, в Ярике например?
Ну в оригинальной игре в системной папке с игрой есть файл GothicGame.ini, для мода можешь создать свой ini

в нем строчки:
[SETTINGS]
Player=PC_HERO
World=NewWorld\NewWorld.zen

Чтобы ГГ появился в ярике, меняешь на
[SETTINGS]
Player=PC_HERO
World=AddonWorld\AddonWorld.zen
 

Magmatic Imperius

Участник форума
Регистрация
21 Апр 2009
Сообщения
85
Благодарности
10
Баллы
160
Ну в оригинальной игре в системной папке с игрой есть файл GothicGame.ini, для мода можешь создать свой ini
А разве кроме этого не надо блямбу в виду плюсика в зен Яркендара воткнуть (предварительно удалив копию из башни Ксардаса) ? ;)
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.367
Благодарности
7.815
Баллы
995
А разве кроме этого не надо блямбу в виду плюсика в зен Яркендара воткнуть (предварительно удалив копию из башни Ксардаса) ? ;)
А для чего удалять?
В мире игры на сколько я помню стартпоинт может быть только один, загружается мир с ГГ также только один, за раз. В самой игре миров может быть много, столько же и стартпоинтов должно быть... ;)
 

Je00Ka

Участник форума
Регистрация
16 Авг 2008
Сообщения
65
Благодарности
0
Баллы
160
func void Use_SwampHerb ()
{
if (Npc_IsPlayer (self))
{
Wld_PlayEffect ("SLOW_TIME", self, self, 0, 0, 0, FALSE);
};
};
У меня в связи с этим скриптом возник вопрос:
за что отвечают нули и False?
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.367
Благодарности
7.815
Баллы
995
Читай тутор Vama и подобные вопросы отпадут.
Или же смотри разбор данной функции в списке функций панели Соурсера, там где компонеты. Скрипт с описание внутренних функций оригиналов игры Г1 и Г2... ;)
 

Feuermagier


Модостроитель
Регистрация
13 Апр 2008
Сообщения
934
Благодарности
136
Баллы
225
Приветствую! У меня возник вопрос: мне необходимо сделать условие, при котором, у НПС появится вариант диалога, после того как ГГ прошел в соседнее помещение. Тоесть просто прошел и вышел, ни каких других условий нет. На помещении стоит портал, в помещении нет ни кого, оно ни кому не принадлежит. Пытался привязать условие к обьекту класса TrigerScript но не получилось. Подскажите пожалуйста, как в такой ситуации правильно задать условие?
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.832
Благодарности
6.718
Баллы
1.625
Приветствую! У меня возник вопрос: мне необходимо сделать условие, при котором, у НПС появится вариант диалога, после того как ГГ прошел в соседнее помещение. Тоесть просто прошел и вышел, ни каких других условий нет. На помещении стоит портал, в помещении нет ни кого, оно ни кому не принадлежит. Пытался привязать условие к обьекту класса TrigerScript но не получилось. Подскажите пожалуйста, как в такой ситуации правильно задать условие?
С триггером ты правильно делал, но не много не так.
созаешь файл с функцией:

Код:
var int zasholvdom;
func void temp()
{
zasholvdom = TRUE;
};
дальше составляешь диалог

Код:
instance tvojchel(C_Info)
{
тут думаю сам знаешь
};


func int tvojchel_Condition()
{
	if(zasholvdom == TRUE)
	{
		return TRUE;
	};
	return FALSE;
};

func void tvojchel_Info()
{
ляляля
zasholvdom = FALSE;
};
ну и в триггере-скрипте указывай функцию temp
и сделай чтоб триггер запускался всего-лишь один раз.
ну и вроде все....
 

Feuermagier


Модостроитель
Регистрация
13 Апр 2008
Сообщения
934
Благодарности
136
Баллы
225
ну и в триггере-скрипте указывай функцию temp
и сделай чтоб триггер запускался всего-лишь один раз.
ну и вроде все....
Как сделать чтобы триггер запускался 1 раз я понял, но вот функцию temp не нашел, может я невнимательно искал или не там?
И еще: этот код
Код:
 var int Имя тиггера;
func void temp()
{
Имя тиггера = TRUE;
};
вставил в новый файл и сохранил его в директории B_Content, а затем указал этот файл триггеру.
Я правиьно сделал или нет?
Пока триггер не срабатывает.
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.832
Благодарности
6.718
Баллы
1.625
нет, не правильно,
В триггере нужно указывать не файл а функцию, т.е.
func void temp()
в данном случае у тебя функция называется temp - вот ее и указывай в триггере.
Но я бы назвал эту функцию по другому и файл создал бы с таким содержанием:
Код:
var int zasholvdom(тут НЕ имя триггера);
func void EVT_DIALOG_HOUSE()
{
zasholvdom = TRUE;
};
и сохранил бы его в папке Events

Ну а с диалогом думаю все понятно.
 

Друид

Участник форума
Регистрация
21 Ноя 2009
Сообщения
1.169
Благодарности
395
Баллы
285
Можно ли "отследить" появление у ГГ предмета - если появился, то запись в дневник (по аналогии с zs_dead)?
 

kraw


Модостроитель
Регистрация
11 Окт 2005
Сообщения
2.095
Благодарности
871
Баллы
295
Можно отследить использование предмета (например прочтение книги) и на это вешается функция. А просто появления... не знаю.
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.832
Благодарности
6.718
Баллы
1.625
Можно ли "отследить" появление у ГГ предмета - если появился, то запись в дневник (по аналогии с zs_dead)?

Можно, функция примерно такая:

func void predmetvkarmane()
if(Npc_HasItems(hero,имя предмета) > 0)
{
Log_CreateTopic(Имя миссии,LOG_MISSION);
Log_SetTopicStatus(Имя миссии,LOG_Running);
B_LogEntry(Имя миссии,"ЗАПИСЬ");
};
 

Друид

Участник форума
Регистрация
21 Ноя 2009
Сообщения
1.169
Благодарности
395
Баллы
285
А вот еще: что-то не проигрываются у меня звуковые файлы - ни Snd_Play, ни 3д. Что я не так делаю? *???*
AI_Output(self,other,"DIA_ghost_pir_HI_01_02"); //(смеется) Попробуй, сделай это!
Snd_Play("ZOM_DIE03");
Info_AddChoice(DIA_ghost_pir_HI,"Непременно!",DIA_ghost_pir_fig);
Snd_Play3d(self,"ZOM_DIE03");

MEG@VOLT
Что-то не вышло...
В папке events создал файл и при поднятии предмета тишина. :(
func void HeroHasitem()
{
if ((Npc_HasItems(hero,ITAR_CROWN_Pir)) && (Mis_Crown_pir == Log_Running))
{
B_LogEntry(TOPIC_Crown_pir,"Думаю, я знаю, кого заинтересует эта корона.");
B_GivePlayerXP(500);
};
};
 

Друид

Участник форума
Регистрация
21 Ноя 2009
Сообщения
1.169
Благодарности
395
Баллы
285
MEG@VOLT
Что-то не вышло с предметом.
В папке events создал файл, но при поднятии предмета тишина. :(
func void HeroHasitem()
{
if ((Npc_HasItems(hero,ITAR_CROWN_Pir)) && (Mis_Crown_pir == Log_Running))
{
B_LogEntry(TOPIC_Crown_pir,"Думаю, я знаю, кого заинтересует эта корона.");
B_GivePlayerXP(500);
};
};
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.832
Благодарности
6.718
Баллы
1.625
MEG@VOLT
Что-то не вышло с предметом.
В папке events создал файл, но при поднятии предмета тишина. :(
func void HeroHasitem()
{
if((Npc_HasItems(hero,ITAR_CROWN_Pir)) && (Mis_Crown_pir == Log_Running))
{
B_LogEntry(TOPIC_Crown_pir,"Думаю, я знаю, кого заинтересует эта корона.");
B_GivePlayerXP(500);
};
};

яж написал:
func void HeroHasitem()
{
if(((Npc_HasItems(hero,ITAR_CROWN_Pir) > 0) && (Mis_Crown_pir == Log_Running)))
{
B_LogEntry(TOPIC_Crown_pir,"Думаю, я знаю, кого заинтересует эта корона.");
B_GivePlayerXP(500);
};
};
И как при компиле у тя сурсер не заругался?

ЗЫ. и давай без спойлеров - раз уж функции маленькие пишем - раздражают они меня в таких случаях
 

Друид

Участник форума
Регистрация
21 Ноя 2009
Сообщения
1.169
Благодарности
395
Баллы
285
MEG@VOLT
С "> 0" не работает... Это я от отчаяния исправил... изначально так как ты писал. :(
Без "> 0 " не ругается, я где-то в оригинальном файле видел - Enter_DI_FirstTime_Trigger.d.
Хотя я новичок и могу сильно ошибаться.
У меня прекрасно проходят и такие условия:
(Npc_IsDead(PIR_3300_Joy))
(Npc_IsDead(PIR_3301_Hue) == False)

Может не пишет в журнал из-за того что сразу после получения квеста вставляю предмет марвином и подбираю?

Насчет звуковых файлов - что-то я не нашел там кроме цитаты никакого другого ответа. Или его там и нет? =(
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.832
Благодарности
6.718
Баллы
1.625
Да че-то форум глючит
Код:
AI_OutputSVM(self,other,"ZOM_DIE03"); //(смеется) Попробуй, сделай это!
Info_AddChoice(DIA_ghost_pir_HI,"Непремен� �о!",DIA_ghost_pir_fig);
это что касается звука.
по поводу предмета - попробуй так:
Код:
func void HeroHasitem()
{
if(((Npc_HasItems(hero,ITAR_CROWN_Pir) > 0) && ([B][COLOR="DarkRed"]TOPIC_Crown_pir[/COLOR][/B] == Log_Running)))
{
B_LogEntry(TOPIC_Crown_pir,"Думаю, я знаю, кого заинтересует эта корона.");
B_GivePlayerXP(500);
};
};
либо так:
Код:
func void HeroHasitem()
{
if(((Npc_HasItems(hero,ITAR_CROWN_Pir) > 0) && (Mis_Crown_pir == Log_Running)))
{
B_LogEntry([B][COLOR="DarkRed"]Mis_Crown_pir[/COLOR][/B],"Думаю, я знаю, кого заинтересует эта корона.");
B_GivePlayerXP(500);
};
};
 

Друид

Участник форума
Регистрация
21 Ноя 2009
Сообщения
1.169
Благодарности
395
Баллы
285
Спасибо, попробую.
Опять насчет звуков.
Вот в функции письма - в первый раз читаем и выполняется это:
func void Use_Hinweis_05()
{
var int nDocID;
var int Read_Holan;
if(Read_Holan == FALSE)
{
Print("Холан хочет поговорить.");
Read_Holan = TRUE;
Snd_Play("HARP_01");
};
И тишина... что за чертовщина :(
И вот лютню в 1-й части ГГ использовал - она бренчала. Во 2-й тихо, а файлы есть. Нехорошо как-то. Мне до сих пор не хватает бренчания лютни у костра.

Если меняю Mis на Topic и наоборот - соусер орет благим матом. :D
типа нельзя преобразовать void в string.
 

Myxomop

Почетный форумчанин
Регистрация
28 Май 2005
Сообщения
3.239
Благодарности
2.581
Баллы
455
Snd_Play("HARP_01");
Чтобы использовать звуковой файл в функции Snd_Play, его инстанция HARP_01 должна быть прописана в SFX.dat

И какой смысл в переменной Read_Holan, если она локальная, т.е. создается каждый раз заново при запуске функции?
 

Друид

Участник форума
Регистрация
21 Ноя 2009
Сообщения
1.169
Благодарности
395
Баллы
285
Чтобы использовать звуковой файл в функции Snd_Play, его инстанция HARP_01 должна быть прописана в SFX.dat
Блин, а я думал, что все файлы, которые распакованы в папку SFX там прописаны. А его возможно прописать?

И какой смысл в переменной Read_Holan, если она локальная, т.е. создается каждый раз заново при запуске функции?
Да, косяк. :-\
Странно, что срабатывало только один раз - поэтому не вынес сразу и забыл. Наверное, повторное создание игнорируется.
 
Сверху Снизу