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

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

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

MaGoth

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

Вложения

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

Jr13San


Модостроитель
Регистрация
1 Апр 2010
Сообщения
450
Благодарности
268
Баллы
230
А, может быть, лучше сначала попытаться найти самому ответ, а потом, если и когда, не удалось его найти, тогда и задавать вопрос на форуме?
Согласен. Но на тот момент, когда я задаю вопрос, он остаётся для меня секретом. А потом через пару дней или даже одного вечера он загадочно решается прямо в мозгу.
Да ладно. Хватит уже обсуждать меня...
 

Myxomop

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

Это ведь форум, а не справочное бюро.
Не понял смысла сравнения? Ты думаешь в справочном бюро найдешь большую информацию по модостроению?

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

Друид

Участник форума
Регистрация
21 Ноя 2009
Сообщения
1.170
Благодарности
398
Баллы
285
ukur
Никто из модострителей, да и вообще разработчиков до поры не станет со всеми делиться уникальными наработками. Проверенный временем факт.
Бывает, модостроители качают моды, не для того чтобы поиграть, а чтобы вскрыть чужие скрипты. ::)
 

Je00Ka

Участник форума
Регистрация
16 Авг 2008
Сообщения
65
Благодарности
0
Баллы
160
Доброго времени суток
При компилирование dat-файла возник вопрос:
какой файл отвечает за B_SetNpcVisual, а то для соурса он является неизвестным идентификатором.
Заранее спасибо
 

Мільтен

Участник форума
Регистрация
27 Июн 2008
Сообщения
862
Благодарности
427
Баллы
265
Доброго времени суток
При компилирование dat-файла возник вопрос:
какой файл отвечает за B_SetNpcVisual, а то для соурса он является неизвестным идентификатором.
Заранее спасибо

Мне кажеться, что ты просто не правильно записал внешний вид героя. Вот пример.

Код:
B_SetNpcVisual(self,MALE,"Hum_Head_Fighter",Face_N_Horatio,BodyTex_N,ITAR_PIR_M_Addon);
То есть так:
B_SetNpcVisual(self,СТАТЬ,"Модель головы",текстура лица,текстура тела, броня);

Скопируй в свой пост скрипт своего НПС. Там знающие люди глянут.;)
 

Je00Ka

Участник форума
Регистрация
16 Авг 2008
Сообщения
65
Благодарности
0
Баллы
160
Если б все так просто было, с Нпс у меня все в порядке, а ошибка эта в B_AssessPlayer.d
 

Мільтен

Участник форума
Регистрация
27 Июн 2008
Сообщения
862
Благодарности
427
Баллы
265

Magmatic Imperius

Участник форума
Регистрация
21 Апр 2009
Сообщения
85
Благодарности
10
Баллы
160
Если б все так просто было, с Нпс у меня все в порядке, а ошибка эта в B_AssessPlayer.d
Вот файлы без ошибок, замени свои из папки c Готикой 2, создай проект и добавляй/изменяй как хочешь. Чёто не заливается, сейчас закину на депозит.
http://depositfiles.com/files/m5jbq1le9 Gothic.dat и Ou.bin
 

more

Участник форума
Регистрация
6 Окт 2008
Сообщения
13
Благодарности
0
Баллы
150
Хотел бы спросить у знающих людей, что такое instance?
В рамках ООП (а Deadalus является ОО языком), instance может быть либо объектом, либо классом.

Для меня совсем не очевидна работа функций:
Код:
func void Wld_RemoveNpc(var int instanceNpc); 
func void Wld_InsertNpc(var int instanceNpc, var string spawnPoint);

Смущает вот этот код:
Код:
Info_Bau_2_EXIT.npc = Hlp_GetInstanceID(slf);
Если instance - это класс, то насколько безопасно менять статический член Info_Bau_2_EXIT.npc? Ведь игровой движок не сбрасывает состояние классов в начальное при смене игровой сессии (загрузке новой игры).
Или например, у созданного с помощью Wld_InsertNpc нового объекта npc, как будет выглядеть обращение в членам-данным? Здесь идет обращение к статическим или динамическим данным npc?
Код:
CreateInvItems(npc, ItMi_Plants_Swampherb_01,50);
 

Зорк

Участник форума
Регистрация
29 Дек 2004
Сообщения
3.122
Благодарности
370
Баллы
405
kraw, в следующий раз пишем в личку!
more, для спасибок существует кнопочка под постом:
post_thanks.gif


Устные предупреждения!
 

Feuermagier


Модостроитель
Регистрация
13 Апр 2008
Сообщения
934
Благодарности
136
Баллы
225
Приветствую всех!У меня вопрос: как заставить говорить статую так же как нпс?
Я добавил в скрипт PrayShrine это
Код:
instance PC_PrayShrine_SAY(C_Info)
{
	npc = PC_Hero;
	nr = 800;
	condition = PC_PrayShrine_SAY_Condition;
	information = PC_PrayShrine_SAY_Info;
	permanent = TRUE;
	description = Dialog_Ende;
};


func int PC_PrayShrine_SAY_Condition()
{
	if(PLAYER_MOBSI_PRODUCTION == MOBSI_PrayShrine)
	{
		return TRUE;
	};
};

func void PC_PrayShrine_SAY_Info()
{
	AI_Output(other, self, "PC_PrayShrine_SAY_0");//ХХХХХ
	AI_Output(self, other, "PC_PrayShrine_SAY_1");//ХХХХ... ХХХХХХХ?
	AI_Output(other, self, "PC_PrayShrine_SAY_2");//ХХХХХ...
	AI_Output(other, self, "PC_PrayShrine_SAY_3");//ХХХХХХХ!!!
	Wld_PlayEffect("spellFX_BELIARSRAGE",hero,hero,0,0,0,FALSE);
	
};
добавился второй вариант "Конец" а самого диалога не последовало, точнее не появились диалоговые окна с написанным текстом. Но анимации диалога ГГ проиграл.
 

HeDeDe

Участник форума
Регистрация
17 Авг 2009
Сообщения
203
Благодарности
79
Баллы
180
Feuermagier,
во-первых, статуя — не персонаж
во-вторых, используй B_Say
 

vmazz

Участник форума
Регистрация
18 Дек 2008
Сообщения
218
Благодарности
1
Баллы
165
HeDeDe,
во-первых, статуя — не персонаж
и что? обычный мобси диалог, таких много.
во-вторых, используй B_Say
без разницы, и так пойдет.

Feuermagier,
добавился второй вариант "Конец"
ну так сам так написал:
instance PC_PrayShrine_SAY(C_Info)
{
npc = PC_Hero;
nr = 800;
condition = PC_PrayShrine_SAY_Condition;
information = PC_PrayShrine_SAY_Info;
permanent = TRUE;
description = Dialog_Ende;
};

не появились диалоговые окна с написанным текстом.
Все появляется, у меня точило точно "разговаривало" :) Правде есть момент что текст появляется там-же где и субтитры разговоров (SVM).

Хотя помойму если рядом будет присутствовать npc, то двиг автоматом "присвоит диалог" ему, т.е. угол камеры будет строиться от того нпс и гг. Возможно я ошибаюсь просто как-то давненько у меня получалось такого добиться, возможно что именно ai_output`ами.
 

Feuermagier


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

vmazz

Участник форума
Регистрация
18 Дек 2008
Сообщения
218
Благодарности
1
Баллы
165
А так ты сам мобси-диалог что-ли запустить не можешь? Я думал у тебя просто оутпуты не срабатывают... Жуки - зло, и имеет смысл их делать только когда мод чисто скриптовый, чтобы зен не править. Делай как положено, в Spacer`е:

1. Создаешь oCMobInter
2. Ставишь ему нужный визуал меша.
3. Параметр OnStateFunc - нужный тебе, пиши название функции которая должна запускаться. Пиши БОЛЬШИМИ буквами. Например у меня PC_SHARP_START
4. В скриптах создаеш функцию с нужным названием и постфиксом S1, у меня данная функция выглядит так:
Код:
func void PC_SHARP_START_S1()
{
	var C_NPC her; 	her = Hlp_GetNpc(PC_Hero);
	if (Hlp_GetInstanceID(self) == Hlp_GetInstanceID(her))
	{
		self.aivar[AIV_INVINCIBLE] = TRUE;
		PLAYER_MOBSI_PRODUCTION	= MOBSI_Sharp;
		Ai_ProcessInfos(her);
	};
};
Как видно данная функция ставит переменной мобси значение MOBSI_Sharp и запускает диалог.

Ну а собсно сам диалог у тебя построен правильно, с учетом конечно что ты исправил description = Dialog_Ende;
 

Вложения

  • Безымянный.JPG
    Безымянный.JPG
    44,9 KB · Просмотры: 293

Je00Ka

Участник форума
Регистрация
16 Авг 2008
Сообщения
65
Благодарности
0
Баллы
160
Вопрос один возник: как в StartUp'е прописать правильно currentlevel, чтоб при компиляции ошибки не было? Потому что если без Current'a пытаться все телепорты к черту летят...
 

Feuermagier


Модостроитель
Регистрация
13 Апр 2008
Сообщения
934
Благодарности
136
Баллы
225
Тебе просто надо прописать уровень:
Код:
***startup.d:***************************************************************************

func void init_название твоего зена()
{
	B_InitMonsterAttitudes();
	B_InitGuildAttitudes();
	B_InitNpcGlobals();
	b_enter_название твоего зена();
};

Следующая процедура сработает только в первый раз
func void startup_название твоего зена()
{
	//здесь можно написать установку времени, как в oldworld, 00.00
};

**************************************************************************************



***************************************************************************************************
***В Story/B_Story создаешь любой скрипт(или пишешь в старый, все равно) и в нем***
func void b_enter_название твоего зена()
{
	B_InitNpcGlobals();
	CurrentLevel = название твоего зена_Zen;
                        ...
                Wld_InsertNpc(...,"...");
                        ...
                если есть связь с главами, напиши лучше отдельную функцию для каждой главы, а сюда лишь условие их вызова,
                не надо все пихать в кучу
                вот так:
                if(Kapitel >= 1) //заметь, ЗНАК БОЛЬШЕ
	{
		b_enter_название твоего зена_Kapitel_1();
	};
	if(Kapitel >= 2)
	{
		b_enter_название твоего зена_Kapitel_2();
	};
};
*****************************************************************************************************

в Storyglobals.d пиши строку const int название твоего зена_Zen = 2;
 

Je00Ka

Участник форума
Регистрация
16 Авг 2008
Сообщения
65
Благодарности
0
Баллы
160
Спасибо, помогло вплоть до компиляции:
при компиляции моего b_enter_***.d выскакивает ошибка
currentlevel - неизвестный идентификатор
Чего теперь делать?
P.S.: это все помогает при моде "с нуля"?
 

Feuermagier


Модостроитель
Регистрация
13 Апр 2008
Сообщения
934
Благодарности
136
Баллы
225
Код:
func void b_enter_TestLevel()
{
	B_InitNpcGlobals();
	CurrentLevel = TestLevel_ZEN;
		
};
Странно, возможно где то не совпадают названия. ХХХ - название зена я пишу заглавными буквами. Скорее всего не совпадают названия с названием в Storyglobals.d
ЗЫ да помогает при создании с нуля
 
Сверху Снизу