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

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

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

MaGoth

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

Вложения

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

Гестат

Участник форума
Регистрация
16 Авг 2007
Сообщения
1
Благодарности
0
Баллы
145
У меня тоже назрела небольшое количество общих вопросов...

1) Возможно-ли в Г2а контролировать погоду? Т.е. как-то прописать время когда будет идти дождь а когда нет и т.п.
2) Возможно-ли увеличить максимальную дальность прорисовки?
3) Можно-ли интегрировать в графический движок более продвинутые графические технологии? Интересно было-бы посмотреть на Г2а с шейдерными технологиями. Как мне известно еще в далеком 2002 году некая игра под названием Морроуинд уже поддерживала пиксельные шейдеры версии 1.1. Возможно ли интегрировать эти самые шейдеры в движок Г2а, который в принципе ровесник Морроуиндовского двига.
4) Как еще можно улучшить графическую составляющую игры? Про текстуры я не говорю, даже если устанавливать текстуры очень высокого разрешения - эффекта от них мало. Меня больше интересуют 1) Источники освещения. Как-бы можно было их модифицировать и осовременить? 2) Количество полигонов на модель. Я знаю что оно ограничено. Например мои высокополигональные модели Г2а принимать не хочет. Можно-ли как нибудь снять ограничения?

Понимаю, вопросы не самые простенькие и связанные они напрямую с игровым движком. Отсюда и последний вопрос:

5) Чем мне редактировать движок Г2а? Быть может существует какая-то специальная программа?

Заранее благодарю за ответы!
 

Финкрег

Участник форума
Регистрация
16 Май 2007
Сообщения
69
Благодарности
0
Баллы
155
MEG@VOLT написал(а):
Магоч, не это не поможет, там хочть что можешь писать хоть так:
AI_Output(other,self,"abrakadabra"); //Ты можешь меня чему-нибудь научить?
От этого ничего не изменится.
Хотя есть одна ошибка(только что заметил), но Магоч её уже исправил. Нумерация звуковых фалов - у тя они одинаковые.
Попробуй сделать так как сказал Вам. Если не поможет, то попробуй обьявить переменную в файле диалога(конечно будет много гемороя для тех кто будет разбирать твой мод, но всеже...). Т.е. примерно так:
var int Jons_TeachDex
instance DIA_mil_320_miliz_DEX(C_Info)
А дальше твой диалог

Заметил что у Лареса вот так:

var int Lares_MerkeDEX;
var int Lares_MerkeSTR;

instance DIA_Lares_TEACH(C_Info)
{
npc = VLK_449_Lares;
nr = 20;
condition = DIA_Lares_TEACH_Condition;
information = DIA_Lares_TEACH_Info;
permanent = TRUE;
description = "Тренируй меня.";
};

А эти переменные не прописаны в Стори_Глобалс. Там даже не прописано что Ларес учит ловкости, там только что он силе учит. А почему тогда он компилируется спокойно, а мой перс нет? Хотя у Ларса тоже прописано var int Lares_TeachDEX;
 
Последнее редактирование модератором:

MaGoth

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

Ps. И если положишь его во вложение, название файла кириллицей не писать.
 

Финкрег

Участник форума
Регистрация
16 Май 2007
Сообщения
69
Благодарности
0
Баллы
155
Код:
INSTANCE DIA_mil_320_miliz_Exit (C_Info)
{
  npc    = mil_320_miliz;
  nr     = 999;
  condition = DIA_mil_320_miliz_Exit_condition;
  information = DIA_mil_320_miliz_Exit_info;
  permanent = TRUE;
  important = FALSE;
  description = DIALOG_ENDE;
};
FUNC INT DIA_mil_320_miliz_Exit_condition ()
{
  return TRUE;
};
FUNC VOID DIA_mil_320_miliz_Exit_info ()
{
  AI_StopProcessInfos(self);
};

 
INSTANCE DIA_mil_320_miliz_Hello (C_Info)
{
  npc    = mil_320_miliz;
  nr     = 2;
  condition = DIA_mil_320_miliz_Hello_condition;
  information = DIA_mil_320_miliz_Hello_info;
  permanent = FALSE;
  important = FALSE;
  description = "Кто ты?";
};
FUNC INT DIA_mil_320_miliz_Hello_condition ()
{
  return TRUE;
};
FUNC VOID DIA_mil_320_miliz_Hello_info ()
{
  AI_Output(self,other,"DIA_mil_320_miliz_Hello_15_1"); //Кто ты?
  AI_Output(self,other,"DIA_mil_320_miliz_Hello_15_2"); //Меня зовут Джонс.
  
};

instance DIA_mil_320_miliz_DEX(C_Info)
{
	npc = mil_320_miliz;
	nr = 20;
	condition = DIA_mil_320_miliz_DEX_Condition;
	information = DIA_mil_320_miliz_DEX_Info;
	permanent = FALSE;
	description ="Ты можешь научить меня чему-нибудь?";
};


func int DIA_mil_320_miliz_DEX_Condition()
{
	return TRUE;
};

func void DIA_mil_320_miliz_DEX_Info()
{
	AI_Output(other,self,"DIA_mil_320_miliz_DEX_15_00");	//Ты можешь меня чему-нибудь научить?
	AI_Output(self,other,"DIA_Addon_mil_320_miliz_DEX_Add_09_01");	//Я могу повысить твою силу и ловкость.
	AI_Output(other,self,"DIA_mil_320_miliz_DEX_15_00");	//Бесплатно?
	AI_Output(self,other,"DIA_Addon_mil_320_miliz_DEX_Add_09_01");	//Да.Лорд Андре отдал такой приказ.
	Jons_TeachDEX = TRUE;
	Log_CreateTopic(TOPIC_CityTeacher,LOG_NOTE);
	B_LogEntry(TOPIC_CityTeacher,"Ополченец Джонс может помочь повысить силу и ловкость");
};


var int mil_320_miliz_MerkeDEX;
var int mil_320_miliz_MerkeSTR;

instance DIA_mil_320_miliz_TEACH(C_Info)
{
	npc = mil_320_miliz;
	nr = 20;
	condition = DIA_mil_320_miliz_TEACH_Condition;
	information = DIA_mil_320_miliz_TEACH_Info;
	permanent = TRUE;
	description ="Тренируй меня.";
};


func int DIA_mil_320_miliz_TEACH_Condition()
{
	if(mil_320_miliz_TeachDEX == TRUE)
	{
		return TRUE;
	};
};

func void DIA_mil_320_miliz_TEACH_Info()
{
	AI_Output(other,self,"DIA_Addon_mil_320_miliz_Teach_15_00");	//Начнем тренировку
	mil_328_miliz_MerkeDEX = other.attribute[ATR_DEXTERITY];
	mil_328_miliz_MerkeSTR = other.attribute[ATR_STRENGTH];
	Info_ClearChoices(DIA_mil_320_miliz_TEACH);
	Info_AddChoice(DIA_mil_320_miliz_TEACH,Dialog_Back,DIA_mil_320_miliz_TEACH_BACK);
	Info_AddChoice(DIA_mil_320_miliz_TEACH,B_BuildLearnString(PRINT_LearnDEX1,B_GetLearnCostAttribute(other,ATR_DEXTERITY)),DIA_mil_320_miliz_TEACH_1);
	Info_AddChoice(DIA_mil_320_miliz_TEACH,B_BuildLearnString(PRINT_LearnDEX5,B_GetLearnCostAttribute(other,ATR_DEXTERITY) * 5),DIA_mil_320_miliz_TEACH_5);
	Info_AddChoice(DIA_mil_320_miliz_TEACH,B_BuildLearnString(PRINT_LearnSTR1,B_GetLearnCostAttribute(other,ATR_STRENGTH)),DIA_mil_320_miliz_TEACHSTR_1);
	Info_AddChoice(DIA_mil_320_miliz_TEACH,B_BuildLearnString(PRINT_LearnSTR5,B_GetLearnCostAttribute(other,ATR_STRENGTH) * 5),DIA_mil_320_miliz_TEACHSTR_5);
};

func void DIA_mil_320_miliz_TEACH_BACK()
{
	if(other.attribute[ATR_DEXTERITY] >mil_320_miliz_MerkeDEX)
	{
		AI_Output(self,other,"DIA_mil_320_miliz_TEACH_BACK_09_00");	//А ты уже стал более ловким.
	};
	if(other.attribute[ATR_STRENGTH] >mil_320_miliz_MerkeSTR)
	{
		AI_Output(self,other,"DIA_Addon_mil_320_miliz_TEACH_BACK_Add_09_00");	//(оценивающе) Очень неплохо! Можно сказать отлично!
	};
	Info_ClearChoices(DIA_mil_320_miliz_TEACH);
};

func void DIA_mil_320_miliz_TEACH_1()
{
	B_TeachAttributePoints(self,other,ATR_DEXTERITY,1,T_MED);
	Info_ClearChoices(DIA_mil_320_miliz_TEACH);
	Info_AddChoice(DIA_mil_320_miliz_TEACH,Dialog_Back,DIA_mil_320_miliz_TEACH_BACK);
	Info_AddChoice(DIA_mil_320_miliz_TEACH,B_BuildLearnString(PRINT_LearnDEX1,B_GetLearnCostAttribute(other,ATR_DEXTERITY)),DIA_mil_320_miliz_TEACH_1);
	Info_AddChoice(DIA_mil_320_miliz_TEACH,B_BuildLearnString(PRINT_LearnDEX5,B_GetLearnCostAttribute(other,ATR_DEXTERITY) * 5),DIA_mil_320_miliz_TEACH_5);
	Info_AddChoice(DIA_mil_320_miliz_TEACH,B_BuildLearnString(PRINT_LearnSTR1,B_GetLearnCostAttribute(other,ATR_STRENGTH)),DIA_mil_320_miliz_TEACHSTR_1);
	Info_AddChoice(DIA_mil_320_miliz_TEACH,B_BuildLearnString(PRINT_LearnSTR5,B_GetLearnCostAttribute(other,ATR_STRENGTH) * 5),DIA_mil_320_miliz_TEACHSTR_5);
};

func void DIA_mil_328_miliz_TEACH_5()
{
	B_TeachAttributePoints(self,other,ATR_DEXTERITY,5,T_MED);
	Info_ClearChoices(DIA_mil_320_miliz_TEACH);
	Info_AddChoice(DIA_mil_320_miliz_TEACH,Dialog_Back,DIA_mil_320_miliz_TEACH_BACK);
	Info_AddChoice(DIA_mil_320_miliz_TEACH,B_BuildLearnString(PRINT_learnDEX1,B_GetLearnCostAttribute(other,ATR_DEXTERITY)),DIA_mil_320_miliz_TEACH_1);
	Info_AddChoice(DIA_mil_320_miliz_TEACH,B_BuildLearnString(PRINT_learnDEX5,B_GetLearnCostAttribute(other,ATR_DEXTERITY) * 5),DIA_mil_320_miliz_TEACH_5);
	Info_AddChoice(DIA_mil_320_miliz_TEACH,B_BuildLearnString(PRINT_learnSTR1,B_GetLearnCostAttribute(other,ATR_STRENGTH)),DIA_mil_320_miliz_TEACHSTR_1);
	Info_AddChoice(DIA_mil_320_miliz_TEACH,B_BuildLearnString(PRINT_learnSTR5,B_GetLearnCostAttribute(other,ATR_STRENGTH) * 5),DIA_mil_320_miliz_TEACHSTR_5);
};

func void DIA_mil_320_miliz_TEACHSTR_1()
{
	B_TeachAttributePoints(self,other,ATR_STRENGTH,1,T_LOW);
	Info_ClearChoices(DIA_mil_328_miliz_TEACH);
	Info_AddChoice(DIA_mil_320_miliz_TEACH,Dialog_Back,DIA_mil_320_miliz_TEACH_BACK);
	Info_AddChoice(DIA_mil_320_miliz_TEACH,B_BuildLearnString(PRINT_LearnDEX1,B_GetLearnCostAttribute(other,ATR_DEXTERITY)),DIA_mil_320_miliz_TEACH_1);
	Info_AddChoice(DIA_mil_320_miliz_TEACH,B_BuildLearnString(PRINT_LearnDEX5,B_GetLearnCostAttribute(other,ATR_DEXTERITY) * 5),DIA_mil_320_miliz_TEACH_5);
	Info_AddChoice(DIA_mil_320_miliz_TEACH,B_BuildLearnString(PRINT_LearnSTR1,B_GetLearnCostAttribute(other,ATR_STRENGTH)),DIA_mil_320_miliz_TEACHSTR_1);
	Info_AddChoice(DIA_mil_320_miliz_TEACH,B_BuildLearnString(PRINT_LearnSTR5,B_GetLearnCostAttribute(other,ATR_STRENGTH) * 5),DIA_mil_320_miliz_TEACHSTR_5);
};


func void DIA_mil_320_miliz_TEACHSTR_5()
{
	B_TeachAttributePoints(self,other,ATR_STRENGTH,5,T_LOW);
	Info_ClearChoices(DIA_mil_320_miliz_TEACH);
	Info_AddChoice(DIA_mil_320_miliz_TEACH,Dialog_Back,DIA_mil_320_miliz_TEACH_BACK);
	Info_AddChoice(DIA_mil_320_miliz_TEACH,B_BuildLearnString(PRINT_LearnDEX1,B_GetLearnCostAttribute(other,ATR_DEXTERITY)),DIA_mil_320_miliz_TEACH_1);
	Info_AddChoice(DIA_mil_320_miliz_TEACH,B_BuildLearnString(PRINT_LearnDEX5,B_GetLearnCostAttribute(other,ATR_DEXTERITY) * 5),DIA_mil_320_miliz_TEACH_5);
	Info_AddChoice(DIA_mil_320_miliz_TEACH,B_BuildLearnString(PRINT_LearnSTR1,B_GetLearnCostAttribute(other,ATR_STRENGTH)),DIA_mil_320_miliz_TEACHSTR_1);
	Info_AddChoice(DIA_mil_320_miliz_TEACH,B_BuildLearnString(PRINT_LearnSTR5,B_GetLearnCostAttribute(other,ATR_STRENGTH) * 5),DIA_mil_320_miliz_TEACHSTR_5);
};

З.Ы.Как вложения использовать?


Нажми на кнопку "Предварительный просмотр", потом"Дополнительные опции...". А в сообщениях используй кнопку"Код"- #. Diman
 
Последнее редактирование модератором:

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.367
Благодарности
7.815
Баллы
995
@Финкрег:
Вот немного поправил в твоем файле те ошибки что нашел, скопируй его содержимое в свой файл сохрани и попробуй скомпилить.

Ps. То что у Лареса прописаны переменные в файле диалога:
var int Lares_MerkeDEX;
var int Lares_MerkeSTR;

Говорит лиш о том, что данные переменные будут использоваться только в этом файле скрипта, более ни где они задействованны не будут.

Если же ваши переменные будут задействованны в других условиях, событиях, диалогах Непесей и т.д., то эти переменные нужно будет "декларировать глобально", т.е. в файле Story_Globals.d
Отсюда они будут доступны любой вызываемой функции по игре.
 

Вложения

  • script.d
    7 KB · Просмотры: 197
  • script.d
    7 KB · Просмотры: 212
  • script.d
    7 KB · Просмотры: 238
Последнее редактирование модератором:

Финкрег

Участник форума
Регистрация
16 Май 2007
Сообщения
69
Благодарности
0
Баллы
155
Скомпилировал я этот скрипт. Спасибо огромное всем за ответы. Отдельное спасибо Ваму за декомпилятор.

Однако, теперь вот такой вопрос. Я вставил перса в игру. Пошел к нему все работает. Он учит нормально. Но у него возникли новые диалоги непонятно откуда я их не прописывал. И эти диалоги озучены, ну, как у всех стражников. Эти незапланированные диалоги приписаны чтоли к гильдии mil? У ополченца Пабло я такого не замечал. В каком файле надо править чтобы мой непись небыл связан этими незапланированными диалогами?
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.860
Благодарности
6.740
Баллы
1.625
хм.... Может у тя идентификатор от какого-нить непися есть, который просто стражник, и вот по этой причине может быть проблема.
Прикрипи файлик самого непися, посмотрю.
 

Финкрег

Участник форума
Регистрация
16 Май 2007
Сообщения
69
Благодарности
0
Баллы
155
Вот скрипт:
 

Вложения

  • DIA_mil_320_miliz.d
    6,1 KB · Просмотры: 189
  • DIA_mil_320_miliz.d
    6,1 KB · Просмотры: 304
  • DIA_mil_320_miliz.d
    6,1 KB · Просмотры: 196
  • DIA_mil_320_miliz.d
    6,1 KB · Просмотры: 207

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.860
Благодарности
6.740
Баллы
1.625
Не этот. А файл самого непися.
 

Финкрег

Участник форума
Регистрация
16 Май 2007
Сообщения
69
Благодарности
0
Баллы
155
MEG@VOLT написал(а):
Не этот. А файл самого непися.
Я не создавал своего. Я просто написал диалог к существующему.
Вот:
 

Вложения

  • Mil_320_Miliz.d
    901 байт · Просмотры: 183
  • Mil_320_Miliz.d
    901 байт · Просмотры: 198
  • Mil_320_Miliz.d
    901 байт · Просмотры: 190
  • Mil_320_Miliz.d
    901 байт · Просмотры: 203
Последнее редактирование модератором:

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.860
Благодарности
6.740
Баллы
1.625
А. ну понятно тоды в чем дело. Ты хочешь чтоб у него небыло стандартного диалога? так?
Тогда замени вот эту строчку
npcType = NPCTYPE_AMBIENT;
на
npcType = npctype_main;

На счет идентификатора, это я перепутал... Всё дело в этой строчке. Вот...
 

Финкрег

Участник форума
Регистрация
16 Май 2007
Сообщения
69
Благодарности
0
Баллы
155
MEG@VOLT написал(а):
А. ну понятно тоды в чем дело. Ты хочешь чтоб у него небыло стандартного диалога? так?
Тогда замени вот эту строчку
npcType = NPCTYPE_AMBIENT;
на
npcType = npctype_main;

На счет идентификатора, это я перепутал... Всё дело в этой строчке. Вот...
Огромное спасибо!!! Все заработало. А что значит ошибка "Ожидается целое число"? Дело в том, что я решил, чтобы мой перс тренировал больше Лареса, то после окончания обучения Ларесу написать:
Код:
var int NPC_TALENT_Dex;

func void DIA_Lares_Teach_Back()
{
	if(other.HitChance[[i]NPC_TALENT_Dex[/i]] >= 50)
	{
		AI_Output(self,other,"DIA_Lares_Teach_08_00");	//Я больше ничему нимогу обучить тебя. Ты стал слишком хорош.
		AI_Output(self,other,"DIA_Lares_Teach_08_01");	//Но, если тебе нужен учитель, то обратись к Джонсу. Он ополченец.
		AI_Output(other,self,"DIA_Lares_Teach_15_02");	//А где мне его искать?
		AI_Output(self,other,"DIA_Lares_Teach_08_03");	//Он должен дежурить на рыночной площади.
		DIA_Lares_Teach_permanent = TRUE;
	};
	Info_ClearChoices(DIA_Lares_Teach);
};

Сначала в этой строке(выделено) выдавало неизвестный идентификатор, я его прописал в начале диалога. Но почему-то пишет, что ожидается целое число в этой строке. Что это значит?
 
Последнее редактирование модератором:

Vam

Почетный форумчанин
Регистрация
8 Июл 2008
Сообщения
255
Благодарности
1
Баллы
180
Финкрег написал(а):
Сначала в этой строке(выделено) выдавало неизвестный идентификатор, я его прописал в начале диалога. Но почему-то пишет, что ожидается целое число в этой строке. Что это значит?
var int NPC_TALENT_Dex; - это только декларацмя переменной без присвоения ей численного значения, вот компилятор и ругается, что ждет число, а у тебя неизвестно что. Но даже, если бы ты где-то потом и присвоил значение переменной, то всё рано не прокатит. Т.к. существует правило - индекс массива должен быть только числовой константой, следовательно можно писать так:
const int NPC_TALENT_Dex = 3; а далее if(other.HitChance[NPC_TALENT_Dex] >= 50)
или так:
if(other.HitChance[3] >= 50)
 
Последнее редактирование модератором:

Финкрег

Участник форума
Регистрация
16 Май 2007
Сообщения
69
Благодарности
0
Баллы
155
Заметил интересный момент. Когда проверяю скрипт на ошибки он не выдает ошибок, а когда компилирую выдает неизветнсый идентификатор. И ошибка вылазиет там где не должна:
func void DIA_Lares_TEACH_Info()
{
AI_Output(other,self,"DIA_Addon_Lares_Teach_15_00"); //Тренируй меня.
Lares_MerkeDEX = other.attribute[ATR_DEXTERITY];
Lares_MerkeSTR = other.attribute[ATR_STRENGTH];
Info_ClearChoices(DIA_Lares_TEACH);
Info_AddChoice(DIA_Lares_TEACH,Dialog_Back,DIA_Lares_TEACH_BACK);
Info_AddChoice(DIA_Lares_TEACH,B_BuildLearnString(PRINT_LearnDEX1,B_GetLearnCostAttribute(other,ATR_DEXTERITY)),DIA_Lares_TEACH_1);
Info_AddChoice(DIA_Lares_TEACH,B_BuildLearnString(PRINT_LearnDEX5,B_GetLearnCostAttribute(other,ATR_DEXTERITY) * 5),DIA_Lares_TEACH_5);
Info_AddChoice(DIA_Lares_TEACH,B_BuildLearnString(PRINT_LearnSTR1,B_GetLearnCostAttribute(other,ATR_STRENGTH)),DIA_Lares_TEACHSTR_1);
Info_AddChoice(DIA_Lares_TEACH,B_BuildLearnString(PRINT_LearnSTR5,B_GetLearnCostAttribute(other,ATR_STRENGTH) * 5),DIA_Lares_TEACHSTR_5);
};

В чем может быть ошибка? Когда компилировал без const int NPC_TALENT_Dex = 3; как посоветовал Vam, то компилировалось нормально, а после прописания начало. До этого была тракая же ошибка в скрипте Джонса(мой перс), исправил заменив все dia_mil_320_miliz на Jons, сработало, а теперь не менять же все.

И снова у меня проблемы. if(Npc_KnowsInfo(hero,DIA_kdf_130_makler_LEHRLING_info)) по-идее диалог должен начинаться, если "НПЦ знает диалог тот-то тот-то", при проверке скрипта на ошибки ошибок и вниманий нет, а при компиляции выдает ошибку"неправильный тип DIA_kdf_130_makler_LEHRLING_info"Вроде все правильно, а выдает ошибку. Тип void, как и у всех диалоговых. В чем может быть проблема?
 
Последнее редактирование модератором:

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.860
Благодарности
6.740
Баллы
1.625
У тебя написано так
Код:
var int NPC_TALENT_Dex;

func void DIA_Lares_Teach_Back()
{
	if(other.HitChance[[i]NPC_TALENT_Dex[/i]] >= 50)
	{
		AI_Output(self,other,"DIA_Lares_Teach_08_00");	//Я больше ничему нимогу обучить тебя. Ты стал слишком хорош.
		AI_Output(self,other,"DIA_Lares_Teach_08_01");	//Но, если тебе нужен учитель, то обратись к Джонсу. Он ополченец.
		AI_Output(other,self,"DIA_Lares_Teach_15_02");	//А где мне его искать?
		AI_Output(self,other,"DIA_Lares_Teach_08_03");	//Он должен дежурить на рыночной площади.
		DIA_Lares_Teach_permanent = TRUE;
	};
	Info_ClearChoices(DIA_Lares_Teach);
};
Поменяй на
Код:
func void DIA_Lares_Teach_Back()
{
	if(hero.attribute[ATR_DEXTERITY] >= 50)
	{
		AI_Output(self,other,"DIA_Lares_Teach_08_00");	//Я больше ничему нимогу обучить тебя. Ты стал слишком хорош.
		AI_Output(self,other,"DIA_Lares_Teach_08_01");	//Но, если тебе нужен учитель, то обратись к Джонсу. Он ополченец.
		AI_Output(other,self,"DIA_Lares_Teach_15_02");	//А где мне его искать?
		AI_Output(self,other,"DIA_Lares_Teach_08_03");	//Он должен дежурить на рыночной площади.
		DIA_Lares_Teach_permanent = TRUE;
	};
	Info_ClearChoices(DIA_Lares_Teach);
};
 
Последнее редактирование:

chirkov

Участник форума
Регистрация
19 Июн 2008
Сообщения
624
Благодарности
93
Баллы
195
А каким образом можно изменить (добавить) торговцу товар?
 

alex_draven


Модостроитель
Регистрация
13 Сен 2007
Сообщения
2.183
Благодарности
2.880
Баллы
420
Расковырять скрипты и глянуть, как это сделано разработчиками. Ну, например, функция добавления оружия торговцу Фиску в 3 главе Г1:

func void B_Give_FiskChapter3Weapons()
{
var C_Npc npc;
npc = Hlp_GetNpc(Stt_311_Fisk);
CreateInvItems(self,ItKeLockpick,30);
CreateInvItem(npc,ItMw_1H_Sword_Long_01);
CreateInvItem(npc,ItMw_1H_Sword_Long_02);
CreateInvItem(npc,ItMw_1H_Sword_Long_03);
CreateInvItem(npc,ItMw_1H_Sword_Long_04);
CreateInvItem(npc,ItMw_1H_Sword_Long_04);
CreateInvItems(npc,ItMw_1H_Sword_Broad_01,2);
CreateInvItems(npc,ItMiNugget,600);
};

Видим, кому (Stt_311_Fisk- имя перса), чего (ItMw_1H_Sword_Long_01- имя инстанции предмета), сколько (в члучае items- 2 или 600) давать.

Удалять аналогично:

RemoveInvItem(npc,ItMw_1H_Sword_Long_01);

RemoveInvItem(npc,ItMw_1H_Sword_Long_02); и.т.д.

Функция B_Give_FiskChapter3Weapons() вызывается при переходе в 3 главу. Подобные функции в принципе можно вызывать отовсюду...

З.Ы. Полезно будет ещё ознакомиться с уроками скриптологии.
 

Gaudin

Участник форума
Регистрация
12 Май 2008
Сообщения
649
Благодарности
33
Баллы
260
Уважаемые господа модостроители.
У меня сейчас установлена Г2НВ от Акеллы и несколько модов (как-то Возвращение, Глобал, Кузнец, Яктиль и Странник), которые прекрасно функционируют.
Вопрос в следующем:
Есть ли какая-то чудо-программа, при помощи которой можно, произведя некие манипуляции с папкой С/Programm Files/Akella Games/Gothic 2, получить файл Setup.exe. И при запуске оного на любом компе получить установленную игру со всеми пропатченными модами?
Или сообщите, пожалуйста,общую технологию создания такого инсталлера?
Подсознательно понимаю, что все эти процедуры теоретичекси возможны и наверняка у вас есть свои инструменты для создания таких файлов.
Спасибо за внимание.

P.S.Особая надежда на господина MaGoth'а - создателя инсталлеров для Глобала и Возвращения. :)
 

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.367
Благодарности
7.815
Баллы
995
@Gaudin:
Есть называется NSIS, только я не уверен будут ли они потом работать ведь инсталляторы вносят изменения в реестр винды...
Хотя если ты и файл реестра забекапишь то может прокатить такой вариант. :)

Ps. Попробую потом как ни будь на скорую инсталлер накатать, тебе же нужно будет скачать прогу NSIS и модуль для редактирования скриптов HM NIS Edit, все на оф сайте разрабов смотри.
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.860
Благодарности
6.740
Баллы
1.625
MaGoth написал(а):
ведь инсталляторы вносят изменения в реестр винды...
Да в реестр в принципе не вносится серьезные весчи при инстале этих модов. Так что можно и попробовать...
 
Последнее редактирование:
Сверху Снизу