Witam ! Nie widziałem sensu zakładania tematu bo mało kto już modyfikuje Gothica no, ale siedziało mi to na głowie więc opiszę jak zrobić własnego NPC, z którym się handluje. Będą nam potrzebne 2 rzeczy:
-Skrypt własnego NPC.
-Skrypt dialogu tego NPC.
Krok 1. Przechodzimy do folderu:
#:\Gothic\_Work\Data\Scripts\Content\Story\BKrok 2. W tym folderze szukamy pliku o nazwie
B_Give_FiskChapterWeapons, kopiujemy go i zmieniamy nazwę (oczywiście tej kopii) np:
B_Give_NAZWANPCChapterWeapons (nie koniecznie musi być końcówka ChapterWeapons).
Krok 3. Otwieramy plik za pomocą
dowolnego edytora tekstowego.a) I pierwsze co widzimy to:
func void B_Give_FiskChapter1Weapons () // Nazwa funkcji
{
var C_NPC npc;
npc = Hlp_GetNpc(Stt_311_Fisk); //To z jakim npc będziemy handlować
//-------- Nahkampfwaffen --------
CreateInvItems (self, ItKeLockpick,10);
CreateInvItem (npc,ItMw_1H_Sword_Old_01);// przedmioty jakie będzie posiadał w handlu nasz npc.
CreateInvItem (npc,ItMw_1H_Sword_Short_01);//
CreateInvItem (npc,ItMw_1H_Sword_Short_02);//
CreateInvItem (npc,ItMw_1H_Sword_Short_03);//
CreateInvItem (npc,ItMw_1H_Sword_Short_04);//
CreateInvItem (npc,ItMw_1H_Sword_Short_05);//
CreateInvItem (npc,ItMw_1H_Sword_Short_05);//
CreateInvItems (npc,ItMiNugget,200);
//-------- Fernkampfwaffen --------
//-------- Munition --------
};
Teraz pokarzę jak wygląda moja część
func void B_Give_MojNPCChapter1Weapons ()
{
var C_NPC npc;
npc = Hlp_GetNpc(STT_6000_MojNPC);
CreateInvItems (npc,ItMiNugget,1400); //Ma w handlu 1400 brylek rudy
};
b) Jeżeli chcemy, aby w danym rozdziale npc posiadał inne przedmioty to wystarczy dodać funckę B_Give_MojNPCChapter2Weapons
i będzie to wyglądało to tak:
func void B_Give_MojNPCChapter2Weapons ()
{
var C_NPC npc;
npc = Hlp_GetNpc(STT_6000_MojNPC);
CreateInvItems (npc,ItMiNugget,24000); //Ma w handlu 24000 brylek rudy
};[
Krok 4. zapisujemy plik.
Krok 5. Przechodzimy do #:\Gothic\_Work\Data\Scripts\Content\Story\NPC i
otwieramy dowolnym edytorem naszego npc.
Krok 6. Skup się, bo postaram się jak najzwięźlej to opisać. Między ekwipunkiem, a talentami gracza dodajemy funkcję:
B_Give_MojNPCChapter1WeaponsNpc_SetTalentSkill (self, NPC_TALENT_1H,1);
B_Give_MojNPCChapter1Weapons();
//----------Ekwipunek----------
EquipItem (self, ItMw_1H_Sword_Short_05);
Krok 7. Przechodzimy do #:\Gothic\_Work\Data\Scripts\Content\Story\MISSIONS i odpalamy nasz dialog z NPC.
Krok 8. Tworzymy nowy dialog. Jeżeli już mamy to w INSTANCE dodajemu trade = true;
INSTANCE DIA_NaszNPC_Trade (C_INFO)
{
npc = STT_6000_NaszNPC;
nr = 1;
condition = DIA_NaszNPC_HELLO1_Condition;
information = DIA_NaszNPC_HELLO1_Info;
permanent = TRUE;
[color=#2E8B57]trade = TRUE;[/color]
description = Przydałoby mi się kilka drobiazgów;
};
Całość wygląda u mnie tak.
Spoiler
KOD 1 B_Give_ArthurChapterWeapons: func void B_Give_ArthurChapter1Weapons ()
{
var C_NPC npc;
npc = Hlp_GetNpc(STT_6000_Arthur);
//-------- Nahkampfwaffen --------
CreateInvItems (self, ItKeLockpick,40);
CreateInvItem (npc,VLK_ARMOR_L);//
CreateInvItem (npc,STT_ARMOR_M);//
CreateInvItem (npc,ItMw_1H_Sword_Short_02);//
CreateInvItem (npc,ItMw_1H_Sword_Short_03);//
CreateInvItem (npc,ItMw_1H_Sword_Short_04);//
CreateInvItem (npc,ItMw_1H_Sword_Short_05);//
CreateInvItem (npc,ItMw_1H_Sword_Short_05);//
CreateInvItems (npc,ItMiNugget,400);
//-------- Fernkampfwaffen --------
//-------- Munition --------
};
func void B_Give_ArthurChapter2Weapons ()
{
var C_NPC npc;
npc = Hlp_GetNpc(STT_6000_Arthur);
//-------- Nahkampfwaffen --------
CreateInvItems (self, ItKeLockpick,20);
CreateInvItem (npc,ItMw_1H_Sword_01);
CreateInvItem (npc,ItMw_1H_Sword_02);
CreateInvItem (npc,ItMw_1H_Sword_03);
CreateInvItem (npc,ItMw_1H_Sword_04);
CreateInvItem (npc,ItMw_1H_Sword_04);
CreateInvItems (npc,ItMiNugget,400);
//-------- Fernkampfwaffen --------
//-------- Munition --------
};
func void B_Give_ArthurChapter3Weapons ()
{
var C_NPC npc;
npc = Hlp_GetNpc(STT_6000_Arthur);
//-------- Nahkampfwaffen --------
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);
//-------- Fernkampfwaffen --------
//-------- Munition --------
};
Spoiler
KOD 2 NPC: instance STT_6000_Arthur (Npc_Default)
{
//----------Info ogolne----------
name = Arthur;
Npctype = Npctype_Ambient;
guild = GIL_STT;
level = 15;
voice = 5;
id = 6000;
//----------Statystyki----------
attribute[ATR_STRENGTH] = 50;
attribute[ATR_DEXTERITY] = 90;
attribute[ATR_MANA_MAX] = 10;
attribute[ATR_MANA] = 10;
attribute[ATR_HITPOINTS_MAX] = 10;
attribute[ATR_HITPOINTS] = 10;
//----------Wyglad----------
Mdl_SetVisual (self,HUMANS.MDS);
Mdl_ApplyOverlayMds (self,Humans_Tired.mds);
Mdl_SetVisualBody (self,hum_body_naked0,3, 1,Hum_Head_Pony,106, 1,STT_ARMOR_M);
B_Scale (self);
Mdl_SetModelFatness(self,0);
//----------Umiejetnasci----------
Npc_SetTalentSkill (self, NPC_TALENT_BOW,2);
Npc_SetTalentSkill (self, NPC_TALENT_1H,1);
B_Give_ArthurChapter1Weapons();
//----------Ekwipunek----------
EquipItem (self, ItMw_1H_Sword_Short_05);
EquipItem (self, ItRw_Bow_Long_07);
//----------Pozostale----------
fight_tactic = FAI_HUMAN_Strong;
daily_routine = Rtn_start_6000;
};
FUNC VOID Rtn_start_6000 ()
{
TA_Sleep (23,30,5,30,OCC_MERCS_LEFT_ROOM_BED4);
TA_SitAround (5,30,12,00,OCR_CAULDRON_1);
TA_SitCampfire (12,00,16,00,OCR_CAMPFIRE_A_MOVEMENT1);
TA_SitAround (16,00,23,30,OCR_CAULDRON_1);
};
Spoiler
KOD 3 DIALOG: INSTANCE DIA_Arthur_EXIT(C_INFO)
{
npc = STT_6000_Arthur;
nr = 999;
condition = DIA_Arthur_EXIT_Condition;
information = DIA_Arthur_EXIT_Info;
permanent = TRUE;
description = KONIEC;
};
FUNC INT DIA_Arthur_EXIT_Condition()
{
return TRUE;
};
FUNC VOID DIA_Arthur_EXIT_Info()
{
AI_StopProcessInfos (self);
};
//========================================
//-----------------> HELLO1
//========================================
INSTANCE DIA_Arthur_HELLO1 (C_INFO)
{
npc = STT_6000_Arthur;
nr = 1;
condition = DIA_Arthur_HELLO1_Condition;
information = DIA_Arthur_HELLO1_Info;
permanent = TRUE;
trade = TRUE;
description = Przydałoby mi się kilka drobiazgów;
};
FUNC int DIA_Arthur_HELLO1_Condition()
{
return TRUE;
};
FUNC void DIA_Arthur_HELLO1_Info()
{
/*AI_Output (other, self ,DIA_Guy_Hello_15_00); //Witam!*/
AI_Output (other, self ,GRD_211_Skip_TRADE_Info_15_01); //Przydałoby mi się kilka drobiazgów.
AI_Output (self, other ,DIA_Skip_First_Thorus_KickAssAGAIN_12_01); //Dobra stary, czego potrzebujesz ?
};
To właśnie był mój kawałek kodu.
ZIELONY KOLOR - informacjaCZERWONY KOLOR - UWAGATo jest mój pierwszy tutorial na tym forum i, może nie jest taki estetyczny, ale starałem się jak najlepiej. Może jak kogoś to zainteresuje to zrobię tutorial jak handlować zbrojami.