Gothic 1 - Handel 4693 0

O temacie

Autor GGG

Zaczęty 31.01.2013 roku

Wyświetleń 4693

Odpowiedzi 0

GGG

GGG

Użytkownicy
posty5
Propsy2
  • Użytkownicy
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\B
Krok 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_MojNPCChapter1Weapons

Npc_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 - informacja
CZERWONY KOLOR - UWAGA

To 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.
 


0 użytkowników i 1 Gość przegląda ten wątek.
0 użytkowników
Do góry