Towarzysz 13688 11

O temacie

Autor Goran

Zaczęty 7.04.2010 roku

Wyświetleń 13688

Odpowiedzi 11

Goran

Goran

Użytkownicy
posty168
Propsy39
  • Użytkownicy

Goran

Towarzysz
2010-04-07, 18:56(Ostatnia zmiana: 2010-04-09, 17:30)
Yo. W tym tutorialu opiszę jak zrobić sobie towarzysza w Gothicu 2 NK. Czyli osobę, która za nami chodzi i walczy z bestiami i inne duperele. No to jedziem. Najpierw dialogi:

Cytuj
///////////////////////////////////////////////////////
//////////////         EXIT
///////////////////////////////////////////////////////
instance Dia_MIL_312_Wulfgar_EXIT   (C_INFO)
{
    npc    = MIL_312_Wulfgar;
    nr    = 999;
    condition    =  Dia_MIL_312_Wulfgar_EXIT_condition;
    information    =  Dia_MIL_312_Wulfgar_EXIT_info;
    permanent    = TRUE;
    description    = DIALOG_ENDE;
};

FUNC int  Dia_MIL_312_Wulfgar_EXIT_condition()
{
    return TRUE;
};

FUNC VOID  DIA_MIL_312_Wulfgar_EXIT_info()
{
    AI_StopProcessInfos   (self);
};
///////////////////////////////////////////////////////
//////////////         hello1
///////////////////////////////////////////////////////
instance Dia_MIL_312_Wulfgar_hello1   (C_INFO)
{
    npc    = MIL_312_Wulfgar;
    condition    =  Dia_MIL_312_Wulfgar_hello1_condition;
    information    =  Dia_MIL_312_Wulfgar_hello1_info;
    permanent    = FALSE;
    important    = FALSE;
    description = ''Chodź ze mną! '' ;
};

FUNC int  Dia_MIL_312_Wulfgar_hello1_condition()
{
       return TRUE;
};

FUNC VOID  DIA_MIL_312_Wulfgar_hello1_info()
{
    AI_Output (other, self"DIA_MIL_312_Wulfgar_hello1_1_01"); //Za mną!
     
    AI_Output (self, other "DIA_MIL_312_Wulfgar_hello1_1_02"); //Tak jest !
    Npc_ExchangeRoutine(self," towarzysz ");
};

Teraz skrypt postaci, a w zasadzie jego część.
Cytuj
FUNC VOID Rtn_Start_312 ()
{   
   TA_Stand_ArmsCrossed      (06,55,21,00,"NW_CITY_HABOUR_KASERN_CENTRE_01");
    TA_Sit_Throne             (21,00,00,07,"NW_CITY_KASERN_BARRACK02_02");
      TA_Smalltalk            (00,07,05,00,"NW_CITY_HABOUR_KASERN_OFFICE");
    TA_Practice_Sword          (05,00,06,55,"NW_CITY_HABOUR_KASERN_CENTRE_01");
};
FUNC VOID Rtn_towarzysz_312 ()
{   
   TA_Follow_Player      (06,55,21,00,"NW_CITY_UPTOWN_PATH_02 <- to jest waypoint w którym towarzysz się pojawi jakby się zgubił. Niżej to samo.");
    TA_Follow_Player            (21,00,06,55,"NW_CITY_UPTOWN_PATH_02");

};

Teraz, gdy chcemy odwołać towarzysza z powrotem do domu :lol2:  to trzeba skrypt:

Cytuj
///////////////////////////////////////////////////////
//////////////         hello2
///////////////////////////////////////////////////////
instance Dia_MIL_312_Wulfgar_hello2   (C_INFO)
{
    npc    = MIL_312_Wulfgar;
    condition    =  Dia_MIL_312_Wulfgar_hello2_condition;
    information    =  Dia_MIL_312_Wulfgar_hello2_info;
    permanent    = FALSE;
    important    = FALSE;
     description = ''Wracaj'';
};

FUNC int  Dia_MIL_312_Wulfgar_hello2_condition()
{
    IF (Npc_KnowsInfo(hero, DIA_MIL_312_Wulfgar_hello1))
 

{
    return TRUE;
};
};
FUNC VOID  DIA_MIL_312_Wulfgar_hello2_info()
{
        AI_Output (other,self,"DIA_MIL_312_Wulfgar_hello2_1_02"); //Wracaj!
    AI_Output (self, other,"DIA_MIL_312_Wulfgar_hello2_1_03"); //OK :)
    Npc_ExchangeRoutine(self," powrot ");

};

I skrypt:
Cytuj
FUNC VOID Rtn_Start_312 ()
{   
   TA_Stand_ArmsCrossed      (06,55,21,00,"NW_CITY_HABOUR_KASERN_CENTRE_01");
    TA_Sit_Throne             (21,00,00,07,"NW_CITY_KASERN_BARRACK02_02");
      TA_Smalltalk            (00,07,05,00,"NW_CITY_HABOUR_KASERN_OFFICE");
    TA_Practice_Sword          (05,00,06,55,"NW_CITY_HABOUR_KASERN_CENTRE_01");
};
FUNC VOID Rtn_towarzysz_312 ()
{   
   TA_Follow_Player      (06,55,21,00,"NW_CITY_UPTOWN_PATH_02 ");
    TA_Follow_Player            (21,00,06,55,"NW_CITY_UPTOWN_PATH_02");

};



FUNC VOID Rtn_powrot_312 ()
{   
   TA_Stand_ArmsCrossed      (06,55,21,00,"NW_CITY_HABOUR_KASERN_CENTRE_01");
    TA_Sit_Throne             (21,00,00,07,"NW_CITY_KASERN_BARRACK02_02");
      TA_Smalltalk            (00,07,05,00,"NW_CITY_HABOUR_KASERN_OFFICE");
    TA_Practice_Sword          (05,00,06,55,"NW_CITY_HABOUR_KASERN_CENTRE_01");
};

Można dać tą sama rutynę co na początku, tak ja zrobiłem :D  
To tyle. Mam nadzieję, że komus pomogłem.
 

LordSmarkula

LordSmarkula

Użytkownicy
posty141
Propsy1
  • Użytkownicy
Cytat: #msgote author=Goran#msgote author=\'
W tym tutorialu opiszę jak zrobić sobie towarzysza w Gothicu 2 NK.
Cóż za szczegółowy opis.
 
Ludzie zamienili religię na telewizję. Teraz telewizja daje lepsze efekty w manipulowaniu ludźmi.



Znakiem bogatej młodzieży nie wiedzącej co zrobić z pieniędzmi nie powinien być banan, a nadgryzione jabłuszko.

pawbuj

pawbuj

Użytkownicy
posty1623
Propsy135
ProfesjaSkrypter
  • Użytkownicy

pawbuj

Towarzysz
#2 2010-04-09, 13:19(Ostatnia zmiana: 2010-04-09, 14:04)
napisz koleś jak zrobić aby ten nasz towarzysz walczył z naszymi wrogami, gdy wdamy się w bójkę np. w karczmie.

do tego brakuje tu cennej opcji czyli "zaczekaj" lub "pozbieraj broń z pola walki" - którą dodam w nowszej wersji przebudzenia.
 

Sergio

Sergio

Użytkownicy
Główny scenarzysta, skrypter i założyciel teamu
posty449
Propsy12
  • Użytkownicy
  • Główny scenarzysta, skrypter i założyciel teamu
Opcje zaczekaj i zbieraj broń to raczej trudno zrobić bo inaczej byłyby już w gothic 2 bez konieczności moddingu (tak jak są w G3).

A po za tym to co się czepiacie? Jak dla mnie tutorial jest w porząsiu i co po niektórym na pewno się przyda.
 



Zachęcam do oglądania mojego kanału na youtube, może nie jestem teraz jakimś mistrzem ale rozkręcam się. Hit na ten moment: http://www.youtube.com/watch?v=vzOXV0Nb658 Dla wszystkich tych którzy nie mają nic przeciw porcji śmiechu w oparciu o gothic.

maciejG

maciejG

Użytkownicy
posty450
Propsy1
  • Użytkownicy
Nie, są łatwe do zrobienia. Po prostu twórcy Gothica o tym nie pomyśleli.
 
Spoiler

pawbuj

pawbuj

Użytkownicy
posty1623
Propsy135
ProfesjaSkrypter
  • Użytkownicy

pawbuj

Towarzysz
#5 2010-04-09, 16:07(Ostatnia zmiana: 2010-04-09, 16:17)
Opcje zaczekaj i zbieraj broń to raczej trudno zrobić bo inaczej byłyby już w gothic 2 bez konieczności moddingu (tak jak są w G3).

A po za tym to co się czepiacie? Jak dla mnie tutorial jest w porząsiu i co po niektórym na pewno się przyda.
dobra niech będzie , podam jak zrobić, aby zbierał broń z pola walki w promieniu zasięhgu widzenia i od wszystkich poległych i pokonanych. funkcja recover weapon musi byc wywołana komendą w dialogu, a oto mój skrypt:[codebox]func void ZS_AssessBody_RecoverWeapon ()
{   
   PrintDebugNpc      (PD_ZS_FRAME,   "ZS_AssessBody_RecoverWeapon");

   B_SetPerception      (self);
      
   //-------- po walce NPC zabiera twój oręż - edit by Pawbuj for gothic 1--------
   
   Npc_PerceiveAll   (self);
   
   if ( Wld_DetectItem (self, ITEM_KAT_NF) || Wld_DetectItem (self, ITEM_KAT_FF) )
   {
      if (Hlp_IsValidItem(item))
      {
         if (Npc_GetDistToItem(self,item) < 1000)&& (self.id != 1422)
         {
            var C_NPC npc; npc = Hlp_GetNpc(self);
            
            
            
            var string str1;
            var string str2;
            str1 = ConcatStrings (npc.name," odebrał ci ");
            str2 = ConcatStrings (str1,item.name);
            PrintScreen (str2,-1,-1,"FONT_OLD_10_WHITE.TGA",3);
            AI_TakeItem   (self, item);
            AI_PlayAni      (self, "T_WATCHFIGHT_YEAH");
            B_Say      (self, self, "$ITAKEYOURWEAPON");      
            //PrintScreen (ConcatStrings ("Odebrano ci ", item.name),-1,-1,"FONT_OLD_10_WHITE.TGA",2);
            AI_EquipBestMeleeWeapon(self);
            AI_EquipBestRangedWeapon(self);
         };
      };
   };
if (Wld_DetectItem (self, ITEM_KAT_FF) )
   
   {
      if (Hlp_IsValidItem(item))
      {
         if (Npc_GetDistToItem(self,item) < 1000)&& (self.id != 1422)
         {
            //VAR C_Item item2;  item2 = Hlp_GetInstanceID (item);
            var C_NPC npc2; npc2 = Hlp_GetNpc(self);
            AI_TakeItem   (self, item);
            
            
            var string str3;
            var string str24;
            str3 = ConcatStrings (npc2.name," odebrał ci broń dalekosiężną");
            str24 = ConcatStrings (str3,item.name);
            PrintScreen (str3,-1,-1,"FONT_OLD_10_WHITE.TGA",3);
            
            AI_PlayAni      (self, "T_WATCHFIGHT_YEAH");
            B_Say      (self, self, "$ITAKEYOURWEAPON");      
            //PrintScreen (ConcatStrings ("Odebrano ci ", item.name),-1,-1,"FONT_OLD_10_WHITE.TGA",2);
            AI_EquipBestMeleeWeapon(self);
            AI_EquipBestRangedWeapon(self);
         };
      };
   };
   if ( Wld_DetectItem (self, ITEM_KAT_NF) || Wld_DetectItem (self, ITEM_KAT_FF) )&& (self.id == 1422)
   {
      if (Hlp_IsValidItem(item))
      {
         if (Npc_GetDistToItem(self,item) < 150000)
         {
            var C_NPC npc4; npc4 = Hlp_GetNpc(self);
            
            
            
            var string str6;
            var string str7;
            str6 = ConcatStrings (npc4.name," zagrabił ");
            str7 = ConcatStrings (str6,item.name);
            PrintScreen (str6,-1,-1,"FONT_OLD_10_WHITE.TGA",3);
            AI_TakeItem   (self, item);
            //AI_PlayAni      (self, "T_WATCHFIGHT_YEAH");
            B_Say      (self, self, "$ITAKEYOURWEAPON");      
            //PrintScreen (ConcatStrings ("Odebrano ci ", item.name),-1,-1,"FONT_OLD_10_WHITE.TGA",2);
            AI_EquipBestMeleeWeapon(self);
            AI_EquipBestRangedWeapon(self);
         };
      };
   };
if (Wld_DetectItem (self, ITEM_KAT_FF) ) && (self.id == 1422)
   
   {
      if (Hlp_IsValidItem(item))
      {
         if (Npc_GetDistToItem(self,item) < 150000)
         {
            //VAR C_Item item2;  item2 = Hlp_GetInstanceID (item);
            var C_NPC npc3; npc3 = Hlp_GetNpc(self);
            AI_TakeItem   (self, item);
            
            
            var string str9;
            var string str10;
            str9 = ConcatStrings (npc3.name," zagrabił");
            str10 = ConcatStrings (str9,item.name);
            PrintScreen (str10,-1,-1,"FONT_OLD_10_WHITE.TGA",1);
            
            //AI_PlayAni      (self, "T_WATCHFIGHT_YEAH");
            B_Say      (self, self, "$ITAKEYOURWEAPON");      
            //PrintScreen (ConcatStrings ("Odebrano ci ", item.name),-1,-1,"FONT_OLD_10_WHITE.TGA",2);
            AI_EquipBestMeleeWeapon(self);
            AI_EquipBestRangedWeapon(self);
         };
      };
   };
   //-------- leczenie ! --------
   AI_StartState      (self,   ZS_HealSelf,   1,   "");
};[/codebox]

dodaję opcje czekania w rutynie postaci, dialog juz sobie sami zrobicie:[codebox]func VOID Rtn_waithere_1422 ()
{   
var c_npc GorH; GorH = Hlp_GetNpc(TPL_1422_GorHanis);
TA_Guard        (08,00,20,30,Npc_GetNearestWP(GorH));
TA_Guard        (20,30,08,00,Npc_GetNearestWP(GorH));
};[/codebox]

niech ktos poda jak zrobic, aby npc nas bronił przed innymi
 

Pragasek

Pragasek

Użytkownicy
posty334
Propsy39
ProfesjaSkrypter
  • Użytkownicy
Wystarczy dać:

self.aivar[AIV_PARTYMEMBER] = TRUE;
wtedy npc będzie walczył w naszej obronie a żeby npc przestał nas bronić wystarczy dać:

self.aivar[AIV_PARTYMEMBER] = FALSE;
Pozdro

pawbuj

pawbuj

Użytkownicy
posty1623
Propsy135
ProfesjaSkrypter
  • Użytkownicy
Wystarczy dać:

self.aivar[AIV_PARTYMEMBER] = TRUE;
wtedy npc będzie walczył w naszej obronie a żeby npc przestał nas bronić wystarczy dać:

self.aivar[AIV_PARTYMEMBER] = FALSE;
Pozdro
coś mi się nie chce wierzyć, że będzie walczył w naszej obronie jako party-member z innymi npc.
 

maciejG

maciejG

Użytkownicy
posty450
Propsy1
  • Użytkownicy
To nie wierz.  :lol:  Słuchaj kogoś, kto zna się od ciebie więcej na skryptach. Zmienne aivar odpowiadają za sztuczną inteligencję. AIV_PARTYMEMBER to członek drużyny.
self.aivar[AIV_PARTYMEMBER] = TRUE;
 
Spoiler

pawbuj

pawbuj

Użytkownicy
posty1623
Propsy135
ProfesjaSkrypter
  • Użytkownicy

pawbuj

Towarzysz
#9 2010-04-09, 20:57(Ostatnia zmiana: 2010-04-09, 20:58)
nie przekonałeś mnie.

dałem partymember dla Diego w trakcie dialogu. dostałem lanie w SO i nawet nie ruszył palcem. próbowałeś to na skryptach?
albo ja coś  spieprzyłem albo wy się mylicie!
 

Silver

Silver

Użytkownicy
posty109
Propsy14
ProfesjaGracz
  • Użytkownicy
nie przekonałeś mnie.

dałem partymember dla Diego w trakcie dialogu. dostałem lanie w SO i nawet nie ruszył palcem. próbowałeś to na skryptach?
albo ja coś  spieprzyłem albo wy się mylicie!
to tut do gothica 2 nk nie o gothica 1
 

maciejG

maciejG

Użytkownicy
posty450
Propsy1
  • Użytkownicy
To nie jest ważne. To zadziała na każdym. Problemem w tym wypadku mogła być jakaś funkcja AI (atakować/nie atakować), która działała na Diega. Gdyby spróbował na innym NPC, neutralnym, na pewno by działało.
 
Spoiler


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