MaGoth

Хранитель форума
Регистрация
30 Авг 2006
Сообщения
2,024
Репутация
0
Адрес
Самара
Nevedim

Без знания основ скриптинга тебе никакие проги не помогут.
Остаток, учим скриптинг.. ;)
 

Nevedim

Готоман
Регистрация
26 Янв 2007
Сообщения
15
Репутация
0
Скриптинг я знаю, просто время тратить на ввод...
 

Nevedim

Готоман
Регистрация
26 Янв 2007
Сообщения
15
Репутация
0
Так есть программы?
 

DEDROIT

Administrator
Команда форума
Регистрация
31 Янв 2006
Сообщения
1,384
Репутация
234
Адрес
Москва
Nevedim
Есть.Миранда и помоему ещё несколько прог.Точне не помню,но вроде моно скачать с www.worldofgothic.ru
 

Nevedim

Готоман
Регистрация
26 Янв 2007
Сообщения
15
Репутация
0
Благодарю что бы я без вас делал!!!! ;)
 

Delmi

Гражданин
Регистрация
28 Июл 2007
Сообщения
23
Репутация
0
Как можно в Г2 создать заклинание "усмирить зверя"? На подобие такого как в Gothic 3?
 

MaGoth

Хранитель форума
Регистрация
30 Авг 2006
Сообщения
2,024
Репутация
0
Адрес
Самара
Delmi

Как можно в Г2 создать заклинание "усмирить зверя"? На подобие такого как в Gothic 3?
- интересный вопрос, может все фишки в вашем моде реализовать? :))
А если серьезно читаем тотур Вама, там все расписано как нуна, ток время от времени моск нуна включать. ;)

Удачи в начинании.
 

xxxdragonxxx

Новичок
Регистрация
14 Сен 2007
Сообщения
4
Репутация
0
А где надо прописывать обработку попадания стреллы с каким-то эффектом в цель? И можно создать отщет времени в секундах(типа таймера) для кагого-нибудь события?
 

MaGoth

Хранитель форума
Регистрация
30 Авг 2006
Сообщения
2,024
Репутация
0
Адрес
Самара
xxxdragonxxx
А где надо прописывать обработку попадания стреллы с каким-то эффектом в цель? И можно создать отщет времени в секундах(типа таймера) для кагого-нибудь события?
Смотри в скриптах дамаджей и атак, там все и прописывай.
Нет таймеры делать в скриптах Готы нельзя.
 

xxxdragonxxx

Новичок
Регистрация
14 Сен 2007
Сообщения
4
Репутация
0
xxxdragonxxx
А где надо прописывать обработку попадания стреллы с каким-то эффектом в цель? И можно создать отщет времени в секундах(типа таймера) для кагого-нибудь события?
Смотри в скриптах дамаджей и атак, там все и прописывай.
Нет таймеры делать в скриптах Готы нельзя.
В Г2а есть АксесДамаге.д, НО ЕГО НЕТ В Г1.
В Г1 я прописал в КомбатРеактТуДамаге.д - эффекты действуют, когда идет бой :rolleyes:
Прописал в ЗС_РеактТуДамаге.д - эффекты действуют, когда нпс находится в состоянии предупреждения(стоит с оружием и предупреждает о нападении). :rolleyes:

ВОПРОС: где прописать, что-бы ефекты действовали, когда нпс просто стоит или разговаривает? :'(
 

Delmi

Гражданин
Регистрация
28 Июл 2007
Сообщения
23
Репутация
0
Как сделать, что бы NPC вёл ГГ до определённого вейпоинта? И чтоб npc шел за ГГ, а потом в определённом месте остановился, ну типа там фраза:
> Вот мы и пришли!
< Отлично!
 

DEDROIT

Administrator
Команда форума
Регистрация
31 Янв 2006
Сообщения
1,384
Репутация
234
Адрес
Москва
Delmi
Для этого к примеру в диалоге,где ГГ соглашается идти прописываем:
НПС.aivar[AIV_PARTYMEMBER] = TRUE;
B_StartOtherRoutine(НПС,"Go");
После этого идём в скрипт НПСЮкоторый нас провожает и прописываем:
func void rtn_Go_порядковый номер Нпс()
{
TA_Guide_Player (8,0,22,0,"Веппоинт");
TA_Guide_Player (22,0,8,0,"Веппоинт");
};
TA_Guide_Player - распорядок дня НПС,когда он ведёт куда-то ГГ.
А что он остановил на твоём веппоинте и сказал фразу,сделай диалог со следующим условием:
(Npc_GetDistToWP(self,"веппоинт") < 600))
Т.е останавливается за 600 метров и будет говорить,то что ты прописал.
 

Delmi

Гражданин
Регистрация
28 Июл 2007
Сообщения
23
Репутация
0
Вот пишу диалог всё проходит нормально, вот только после диалога NPC никуда не ведёт:
instance NONE_003_Kelen_Bandites_kelen (C_INFO)
{
npc = NONE_003_Kelen;
condition = NONE_003_Kelen_Bandites_kelen_Condition;
information = NONE_003_Kelen_Bandites_kelen_Info;
important = TRUE;
permanent = FALSE;
};

func int NONE_003_Kelen_Bandites_kelen_Condition()
{
return TRUE;
};

func void NONE_003_Kelen_Bandites_kelen_Info()
{
AI_Output(self, other, "DIA_Kel_Kelen_001_1"); // Ты должен мне помочь!
AI_Output(other, self, "DIA_GG_Kelen_001_1"); // Что случилось?
AI_Output(self, other, "DIA_Kel_Kelen_001_2"); // Бандиты гонятся за мной!
AI_Output(other, self, "DIA_GG_Kelen_001_2"); // Я помогу тебе. Где они?
AI_Output(self, other, "DIA_Kel_Kelen_001_3"); // Иди за мной!
AI_Output(self, other, "DIA_Kel_Kelen_001_4"); // И еще... В момент битвы не прикаких обстаятельстван не прикасайся ко мне.
MIS_BANDITES_KELEN = LOG_RUNNING;
Log_CreateTopic(TOPIC_BANDITES_KELEN, LOG_MISSION);
Log_SetTopicStatus(TOPIC_BANDITES_KELEN, LOG_RUNNING);
B_LogEntry(TOPIC_BANDITES_KELEN, "Бандиты Келен");
Log_CreateTopic(TOPIC_BANDITES_KELEN, LOG_NOTE);
Log_AddEntry(TOPIC_BANDITES_KELEN, "Бандиты гонятся за Келен. Я обязан ей помочь!");

Kelen.aivar[AIV_PARTYMEMBER] = TRUE;
B_StartOtherRoutine(Kelen,"Go");
};[/color]

И скрипт NPC:

instance NONE_003_Kelen (Npc_Default)
{
// ------ NSC ------
name = "Келен";
guild = GIL_NONE;
id = 003;
voice = 6;
flags = NPC_FLAG_IMMORTAL;
npctype = NPCTYPE_FRIEND;

// ------ Attributes ------
level = 10;
attribute[ATR_STRENGTH] = 20;
aivar[REAL_STRENGTH] = 20;
attribute[ATR_DEXTERITY] = 20;
aivar[REAL_DEXTERITY] = 20;
attribute[ATR_MANA_MAX] = 200;
aivar[REAL_MANA_MAX] = 200;
attribute[ATR_MANA] = 200;
attribute[ATR_HITPOINTS_MAX] = 200;
attribute[ATR_HITPOINTS] = 200;

// ------ NSC relevant talents ------
B_GiveNpcTalents (self);

// ------ Fight tactic ------
fight_tactic = FAI_HUMAN_NORMAL;

// ------ Inventory ------
B_CreateAmbientInv (self);
CreateInvItems (self, ItBe_Addon_Prot_MAGIC, 1);
CreateInvItems (self, ItPl_Mushroom_02, 1);

// ------ Visuals ------
B_SetNpcVisual (self, FEMALE, "Hum_Head_Babe4", FaceBabe_N_YoungBlonde, BodyTex_N, ITAR_ispoved);
Mdl_SetModelFatness (self, 0.1);
Mdl_ApplyOverlayMds (self, "Humans_Babe.mds");

// ------ Fight skills ------
B_SetFightSkills (self, 20);

daily_routine = Rtn_MT_LES_01;
daily_routine = rtn_Go_003;
};

FUNC VOID Rtn_MT_LES_01()
{
TA_Stand_ArmsCrossed(00,01,00,00,"MT_LES_01");
};

func void rtn_Go_003()
{
TA_Guide_Player (08,0,22,0,"MT_LES_01");
TA_Guide_Player (22,0,08,0,"MT_LES_02");
};
 

DEDROIT

Administrator
Команда форума
Регистрация
31 Янв 2006
Сообщения
1,384
Репутация
234
Адрес
Москва
Тут пропиши так:
NONE_003_Kelen.aivar[AIV_PARTYMEMBER] = TRUE;
B_StartOtherRoutine(NONE_003_Kelen,"Go");
или он у тебя в B_Story прописан?
Скажи а зачем тебе(?):
daily_routine = Rtn_MT_LES_01;
daily_routine = rtn_Go_003;
Тебе там нужно было прописат daily_routine =Rtn_Start_003;
Ниже уже:
FUNC VOID Rtn_Start_003()
{
TA_Stand_ArmsCrossed(00,00,22,00,"MT_LES_01");
TA_Stand_ArmsCrossed(22,0,00,00,"MT_LES_01");
};

func void rtn_Go_003()
{
TA_Guide_Player (08,0,22,0,"MT_LES_01");
TA_Guide_Player (22,0,08,0,"MT_LES_02");
};
 

Delmi

Гражданин
Регистрация
28 Июл 2007
Сообщения
23
Репутация
0
Когда пишу
NONE_003_Kelen.aivar[AIV_PARTYMEMBER] = TRUE;
то ошибка "неизвестный идентификатор NONE_003_Kelen.aivar"
А когда посто
Kelen.aivar[AIV_PARTYMEMBER] = TRUE;
то ошибки нет! Но опятьже NPC стоит на месте!
 

SMErtNIK

Воин Инноса
Регистрация
13 Янв 2007
Сообщения
354
Репутация
0
Ребята у меня такая проблема - в игре не отображается диалог :'(. Пытался править, менять, ничего не помогает..
Вот скрипт, проверьте если не тяжело...
Так же не активируется OtherRoutine, хотя я её прописал и тут и в скрипте НПС, но перс никуа не бежит.
Да и вот ещё вопрос - если надо чтоб перс вёл куда-нидь ГГ, то надо туда выставлять вейнет в спейсере, или достаточно поставить вейпоинт?..




instance DIA_Teodor_EXIT (C_Info)
{
npc = pal_2005_Teodor;
nr = 999;
condition = DIA_Teodor_EXIT_Condition;
information = DIA_Teodor_EXIT_Info;
permanent = true;
description = "Прекратить разговор";
};

func int DIA_Teodor_EXIT_Condition()

{
return TRUE;
};

func void DIA_Teodor_EXIT_Info()

{
AI_StopProcessInfos(self);
};

instance DIA_Teodor_HELLO(C_INFO)
{
npc = pal_2005_Teodor;
nr = 1;
condition = DIA_Teodor_HELLO_Condition;
information = DIA_Teodor_HELLO_Info;
Permanent = false;
Description = "Как обстоят дела?";
};

func int DIA_Teodor_HELLO_Condition()
{
return TRUE;
};

func int DIA_Teodor_HELLO_Info()
{
AI_Output(other,self,"DIA_Teodor_HELLO_15_00"); // Как обстоят дела?
AI_Output(self,other,"DIA_Teodor_HELLO_04_01"); // Дела обстоят паршиво...
AI_Output(self,other,"DIA_Teodor_HELLO_04_02"); // Похоже чертовы некроманты убили и превратили в нежить практически всех обитателей деревни. Да поразит Иннос их грязные души!
AI_Output(self,other,"DIA_Teodor_HELLO_04_03"); // Этож надо догадаться! Они подъяли весь местный погост и направили мертяков в деревню ночью...
AI_Output(self,other,"DIA_Teodor_HELLO_04_04");// Похоже что спаслись только те кто не спал...
AI_Output(self,other,"DIA_Teodor_HELLO_04_05");// Мне кажется что нам стоит отправиться в Хоринис за помощью. Нашему отряду не справиться со всей этой нежитью, она тут повсюду.
AI_Output(self,other,"DIA_Teodor_HELLO_04_06");//Да и некромантов надо найти как можно быстрее, пока они не натворили дел.
AI_Output(other,self,"DIA_Teodor_HELLO_15_07");//Все не так хорошо как нам хотелось бы. Мы отплывём в Хоринис как только я закончу все дела здесь.

return TRUE;
};

instance DIA_Teodor_HELP(C_Info)
{
npc = pal_2005_Teodor;
nr = 2;
condition = DIA_Teodor_HELP_Condition;
information = DIA_Teodor_HELP_Info;
description = "Ты должен сопроводить меня в деревню.";
Permanent = false;
};


func int DIA_Teodor_HELP_Condition()

{ if(Npc_KnowsInfo(other, DIA_Teodor_HELLO)) //условие, когда начнётся диалог,в нашем случаи после разговора о убийстве Вино

{ return TRUE; };
};

func void DIA_Teodor_HELP_Info()
{
AI_Output(other,self,"DIA_Teodor_HELP_15_00"); //Ты должен сопроводить меня в деревню, нам стоит осмотреть ее, возможно мы найдем что-либо.
AI_Output(self,other,"DIA_Teodor_HELP_04_01"); //Если так велит Иннос, то я поведу тебя!
AI_Output(other,self,"DIA_Teodor_HELP_04_02"); //Да благословится твой клинок!

Log_CreateTopic(TOPIC_Razvedka,LOG_MISSION);
Log_SetTopicStatus(TOPIC_Razvedka,LOG_Running);
B_LogEntry(TOPIC_Razvedka,"Паладин Теодор поможет мне безопасно дойти в деревню. Нам стоит выяснить что там было подробнее.");
Teodor.aivar[AIV_PARTYMEMBER] = TRUE;
B_StartOtherRoutine(Teodor,"Go");
};
 

Delmi

Гражданин
Регистрация
28 Июл 2007
Сообщения
23
Репутация
0
2SMErtNIK
Зачем ты писал в конце диалога DIA_Teodor_HELLO_Info

return TRUE;? Скорее всего это ошибка! Остальное вроде правильно! А если всёже диалог не работает, то проверь какая версия! У меня на 2.7 не работали новые диалоги, а на 2.6 всё работает!

А на счёт того, чтоб NPC вёл ГГ сам не знаю!

P.S. мой вопрос выше остаётся в силе!
 

DEDROIT

Administrator
Команда форума
Регистрация
31 Янв 2006
Сообщения
1,384
Репутация
234
Адрес
Москва
SMErtNIK
Какое-то у тебя в последнем диалоге условие сбито:
Нужно так:

{
if(Npc_KnowsInfo(other, DIA_Teodor_HELLO))
{
return TRUE;
};
};
Далеее в конце диалога нафик выкинь: return TRUE;

Delmi
Можешь рассказать ввсё как делал?Привести скрипт НПС,диалог.
 

Delmi

Гражданин
Регистрация
28 Июл 2007
Сообщения
23
Репутация
0
Вот мои два скрипта (npc и его диалог)! Подскажите пожалуйста в чём ошибка?

NPC:
instance NONE_003_Kelen (Npc_Default)
{
// ------ NSC ------
name = "Келен";
guild = GIL_NONE;
id = 003;
voice = 6;
flags = NPC_FLAG_IMMORTAL;
npctype = NPCTYPE_FRIEND;
// ------ Attributes ------
level = 10;
attribute[ATR_STRENGTH] = 20;
aivar[REAL_STRENGTH] = 20;
attribute[ATR_DEXTERITY] = 20;
aivar[REAL_DEXTERITY] = 20;
attribute[ATR_MANA_MAX] = 200;
aivar[REAL_MANA_MAX] = 200;
attribute[ATR_MANA] = 200;
attribute[ATR_HITPOINTS_MAX] = 200;
attribute[ATR_HITPOINTS] = 200;
// ------ NSC relevant talents ------
B_GiveNpcTalents (self);
// ------ Fight tactic ------
fight_tactic = FAI_HUMAN_NORMAL;
// ------ Inventory ------
B_CreateAmbientInv (self);
CreateInvItems (self, ItBe_Addon_Prot_MAGIC, 1);
CreateInvItems (self, ItPl_Mushroom_02, 1);
// ----- Visuals ------
B_SetNpcVisual (self, FEMALE, "Hum_Head_Babe4", FaceBabe_N_YoungBlonde, BodyTex_N, ITAR_ispoved);
Mdl_SetModelFatness (self, 0.1);
Mdl_ApplyOverlayMds (self, "Humans_Babe.mds");
// ------ Fight skills ------
B_SetFightSkills (self, 20);
daily_routine = Rtn_Start_003;
};
FUNC VOID Rtn_Start_003()
{
TA_Stand_ArmsCrossed(00,00,22,00,"MT_LES_01");
TA_Stand_ArmsCrossed(22,00,00,00,"MT_LES_01");
};
func void Rtn_GUIDE_003()
{
TA_Guide_Player(8,0,23,0,"MT_LES_02");
TA_Guide_Player(23,0,8,0,"MT_LES_02");
};

Его диалог:
instance NONE_003_Kelen_Bandites_kelen (C_INFO)
{
npc = NONE_003_Kelen;
condition = NONE_003_Kelen_Bandites_kelen_Condition;
information = NONE_003_Kelen_Bandites_kelen_Info;
important = TRUE;
permanent = FALSE;
};
func int NONE_003_Kelen_Bandites_kelen_Condition()
{
return TRUE;
};
func void NONE_003_Kelen_Bandites_kelen_Info()
{
AI_Output(self, other, "DIA_Kel_Kelen_001_1"); // Ты должен мне помочь!
AI_Output(other, self, "DIA_GG_Kelen_001_1"); // Что случилось?
AI_Output(self, other, "DIA_Kel_Kelen_001_2"); // Бандиты гонятся за мной!
AI_Output(other, self, "DIA_GG_Kelen_001_2"); // Я помогу тебе. Где они?
AI_Output(self, other, "DIA_Kel_Kelen_001_3"); // Иди за мной!
AI_Output(self, other, "DIA_Kel_Kelen_001_4"); // И еще... В момент битвы не прикаких обстаятельстван не прикасайся ко мне.
AI_StopProcessInfos(self);
MIS_BANDITES_KELEN = LOG_RUNNING;
Log_CreateTopic(TOPIC_BANDITES_KELEN, LOG_MISSION);
Log_SetTopicStatus(TOPIC_BANDITES_KELEN, LOG_RUNNING);
B_LogEntry(TOPIC_BANDITES_KELEN, "Бандиты Келен");
Log_CreateTopic(TOPIC_BANDITES_KELEN, LOG_NOTE);
Log_AddEntry(TOPIC_BANDITES_KELEN, "Бандиты гонятся за Келен. Я обязан ей помочь!");
self.aivar[AIV_PARTYMEMBER] = TRUE;
B_StartOtherRoutine(self,"GUILD");
};
 

MaGoth

Хранитель форума
Регистрация
30 Авг 2006
Сообщения
2,024
Репутация
0
Адрес
Самара
SMErtNIK

По мимо ненужного ретурна, нужно сменить тип функции диалога c int на void.
Вот твой рабочий диалог:

instance DIA_Teodor_EXIT (C_Info)
{
npc = pal_2005_Teodor;
nr = 999;
condition = DIA_Teodor_EXIT_Condition;
information = DIA_Teodor_EXIT_Info;
permanent = true;
description = "Прекратить разговор";
};

func int DIA_Teodor_EXIT_Condition()
{
return TRUE;
};

func void DIA_Teodor_EXIT_Info()
{
AI_StopProcessInfos(self);
};

instance DIA_Teodor_HELLO(C_INFO)
{
npc = pal_2005_Teodor;
nr = 1;
condition = DIA_Teodor_HELLO_Condition;
information = DIA_Teodor_HELLO_Info;
Permanent = false;
Description = "Как обстоят дела?";
};

func int DIA_Teodor_HELLO_Condition()
{
return TRUE;
};

func void DIA_Teodor_HELLO_Info()
{
AI_Output(other,self,"DIA_Teodor_HELLO_15_00"); // Как обстоят дела?
AI_Output(self,other,"DIA_Teodor_HELLO_04_01"); // Дела обстоят паршиво...
AI_Output(self,other,"DIA_Teodor_HELLO_04_02"); // Похоже чертовы некроманты убили и превратили в нежить практически всех обитателей деревни. Да поразит Иннос их грязные души!
AI_Output(self,other,"DIA_Teodor_HELLO_04_03"); // Этож надо догадаться! Они подъяли весь местный погост и направили мертяков в деревню ночью...
AI_Output(self,other,"DIA_Teodor_HELLO_04_04");// Похоже что спаслись только те кто не спал...
AI_Output(self,other,"DIA_Teodor_HELLO_04_05");// Мне кажется что нам стоит отправиться в Хоринис за помощью. Нашему отряду не справиться со всей этой нежитью, она тут повсюду.
AI_Output(self,other,"DIA_Teodor_HELLO_04_06");//Да и некромантов надо найти как можно быстрее, пока они не натворили дел.
AI_Output(other,self,"DIA_Teodor_HELLO_15_07");//Все не так хорошо как нам хотелось бы. Мы отплывём в Хоринис как только я закончу все дела здесь.
};

instance DIA_Teodor_HELP(C_Info)
{
npc = pal_2005_Teodor;
nr = 2;
condition = DIA_Teodor_HELP_Condition;
information = DIA_Teodor_HELP_Info;
description = "Ты должен сопроводить меня в деревню.";
Permanent = false;
};

func int DIA_Teodor_HELP_Condition()
{
if(Npc_KnowsInfo(other, DIA_Teodor_HELLO)) //условие, когда начнётся диалог,в нашем случаи после разговора о убийстве Вино
{
return TRUE;
};
};

func void DIA_Teodor_HELP_Info()
{
AI_Output(other,self,"DIA_Teodor_HELP_15_00"); //Ты должен сопроводить меня в деревню, нам стоит осмотреть ее, возможно мы найдем что-либо.
AI_Output(self,other,"DIA_Teodor_HELP_04_01"); //Если так велит Иннос, то я поведу тебя!
AI_Output(other,self,"DIA_Teodor_HELP_04_02"); //Да благословится твой клинок!

Log_CreateTopic(TOPIC_Razvedka,LOG_MISSION);
Log_SetTopicStatus(TOPIC_Razvedka,LOG_Running);
B_LogEntry(TOPIC_Razvedka,"Паладин Теодор поможет мне безопасно дойти в деревню. Нам стоит выяснить что там было подробнее.");
Teodor.aivar[AIV_PARTYMEMBER] = TRUE;
B_StartOtherRoutine(Teodor,"Go");
};
 
Сверху Снизу