Nowa umiejętność 0/1 4734 12

O temacie

Autor

Zaczęty 31.07.2011 roku

Wyświetleń 4734

Odpowiedzi 12

gothic1210
  • Gość
Chciałbym utworzyć nową umiejętność z wpisem do menu współczynników. To taka prosta umiejętność do warunku if. Bez procentowej nauki i poziomów. Może zacznę od pytania: do których plików warto zajrzeć? gdzie są wpisy umiejętności?  :D   Na początek, proszę o wskazówki.  :D
 

RafalBudzis

RafalBudzis

Użytkownicy
posty1967
Propsy808
ProfesjaSkrypter
  • Użytkownicy
Jeżeli chodzi ci o menu umiejętności to się obawiam ze nic nie zrobisz. Ponieważ masz ograniczoną tablice umiejętności możesz co najwyżej je podmieniać albo usuwać. Ja zrobiłem książkę w której zmieniał się tekst w zależności od nauczonych umiejętności. Można zrobić też nową teksturę do książki żeby wyglądało jak menu statystyk ;)

EdekSumo

EdekSumo

Wyspa Khorinis
posty1739
Propsy925
ProfesjaLvl designer
  • Wyspa Khorinis

EdekSumo
Wyspa Khorinis

Nowa umiejętność 0/1
#2 2011-07-31, 17:24(Ostatnia zmiana: 2011-07-31, 17:25)
Można zrobić parę dwie bądź trzy się wciśnie.
W pliku constans.d (jak w g1 jest taki) to tam powinny być wypisane umiejętności. Do tego text.d i jeszcze jakiś ale nie pamiętam.
 

gothic1210
  • Gość
Na razie dokonałem poprawnych zmian w tych plikach i nic. Dalej to samo. Przeszukałem Gothicowe skrypty i znalazłem plik B_GiveSkill. Dokonałem tam zmian zgodnie ze wzorem, ale przetestuję dopiero jutro.  :D
 

gothic1210
  • Gość

gothic1210
Gość

Nowa umiejętność 0/1
#4 2011-08-01, 09:36(Ostatnia zmiana: 2011-08-01, 09:49)
W dalszym ciągu nie widać zmian. Robiłem wszystko tak jak w Gothicowych umiejętnościach i nic. Czyżbym pominął jakiś plik?

EDIT: Znalazłem tutek. http://themodders.org/index.php?/topic/9016-dodawanie-umiejetnosci/
 

gothic1210
  • Gość

gothic1210
Gość

Nowa umiejętność 0/1
#5 2011-08-01, 12:48(Ostatnia zmiana: 2011-08-01, 12:49)
W Text.d dodałem tyle:
CONST STRING TXT_TALENTS [NPC_TALENT_MAX] =
{
"",
"Broń jednoręczna",
"Broń dwuręczna",
"Łuk",
"Kusza",
"Otwieranie zamków",
"Kradzież",
"Magia",
"Skradanie się",
"Regeneracja",
"Mistrz ognia",
"Akrobatyka",
"Gotowanie",
"Kowalstwo",
"Alchemia"
};


/* SN: wird laut Bert nicht mehr benötigt. Ich kommentier es erst mal eine Version lang aus
CONST STRING TXT_TALENTS_DESC [NPC_TALENT_MAX] =
// FIXME: wo werden die benutzt?
{
"",
"NPC_TALENT_1H",
"NPC_TALENT_2H",
"NPC_TALENT_BOW",
"NPC_TALENT_CROSSBOW",
"NPC_TALENT_PICKLOCK",
"NPC_TALENT_PICKPOCKET",
"NPC_TALENT_MAGE",
"NPC_TALENT_SNEAK",
"NPC_TALENT_REGENERATE",
"NPC_TALENT_FIREMASTER",
"NPC_TALENT_ACROBAT",
"NPC_TALENT_COOKER",
"NPC_TALENT_KOWAL",
"NPC_TALENT_ALCHEMY"
};
*/

CONST STRING TXT_TALENTS_SKILLS [NPC_TALENT_MAX] =
{
"",
"brak|adept|mistrz", //NPC_TALENT_1H          
"brak|adept|mistrz", //NPC_TALENT_2H          
"brak|adept|mistrz", //NPC_TALENT_BOW        
"brak|adept|mistrz", //NPC_TALENT_CROSSBOW    
"brak|adept|mistrz", //NPC_TALENT_PICKLOCK  
"brak|adept|mistrz", //NPC_TALENT_PICKPOCKET
"brak|Krąg 1|Krąg 2|Krąg 3|Krąg 4|Krąg 5|Krąg 6", //NPC_TALENT_MAGE        
"Nie|Tak",                                          //NPC_TALENT_SNEAK      
"|",                                          //NPC_TALENT_REGENERATE
"|",                                           //NPC_TALENT_FIREMASTER  
"Nie|Tak",                                           //NPC_TALENT_ACROBAT      
"Nie|Tak",                                          //NPC_TALENT_COOKER
"Nie|Tak",                                           //NPC_TALENT_KOWAL
"Nie|Tak"                                           //NPC_TALENT_ALCHEMY      
};
W contants.d dopisałem:
const int NPC_TALENT_COOKER = 12;
const int NPC_TALENT_KOWAL = 13;
const int NPC_TALENT_ALCHEMY = 14;
W B_GiveSkils.d natomiast dodałem:
else if (tal == NPC_TALENT_COOKER)
{
                Npc_SetTalentSkill(typ, NPC_TALENT_COOKER, NEW_Wert);
PrintScreen ("Nowa umiejętność: Gotowanie", -1,-1,"FONT_OLD_20_WHITE.TGA",2);
return 1;
}
else if (tal == NPC_TALENT_KOWAL)
{
                Npc_SetTalentSkill(typ, NPC_TALENT_KOWAL, NEW_Wert);
PrintScreen ("Nowa umiejętność: Kowalstwo", -1,-1,"FONT_OLD_20_WHITE.TGA",2);
return 1;
}
else if (tal == NPC_TALENT_ALCHEMY)
{
                Npc_SetTalentSkill(typ, NPC_TALENT_ALCHEMY, NEW_Wert);
PrintScreen ("Nowa umiejętność: Alchemia", -1,-1,"FONT_OLD_20_WHITE.TGA",2);
return 1;
}
A w menu_status.d
// Talent 14
INSTANCE MENU_ITEM_TALENT_14_TITLE(C_MENU_ITEM_DEF)  { posx = STAT_B_X1;posy = STAT_TAL_Y + 20*STAT_DY; fontName = STAT_FONT_DEFAULT;flags=flags & ~IT_SELECTABLE; };
instance MENU_ITEM_TALENT_14_SKILL(C_MENU_ITEM_DEF)  { posx = STAT_B_X2;posy = STAT_TAL_Y + 20*STAT_DY; fontName = STAT_FONT_DEFAULT;flags=flags & ~IT_SELECTABLE; };

Dziwi mnie tylko że dopiski z numerkami tych nowych umiejętności czyli: 12, 13 już tam były. Nie wiem do jakich umiejętności były domyślnie przypisane. Na pewno nie do regeneracji ani mistrza ognia. Proszę o wsparcie.  :D
 

EdekSumo

EdekSumo

Wyspa Khorinis
posty1739
Propsy925
ProfesjaLvl designer
  • Wyspa Khorinis
Tak chyba tak jest nie pamiętam. Najlepiej metodą prób i błędów.
 

RafalBudzis

RafalBudzis

Użytkownicy
posty1967
Propsy808
ProfesjaSkrypter
  • Użytkownicy

RafalBudzis

Nowa umiejętność 0/1
#7 2011-08-01, 16:54(Ostatnia zmiana: 2011-08-01, 16:57)
W pliku menu_status.d trzeba jeszcze dopisać MENU_ITEM_TALENT_14_TITLE do tablicy zmiennych tam u góry. Nie możesz zwiększać tablicy bo dla silnika tylko taki rozmiar jest okej. Musisz zamiast jakiejś umiejętności dać swoją.

gothic1210
  • Gość
A cha, czyli tak jak to było w MT. Regeneracja i Mistrz Ognia zostały zastąpione Zaklinaniem i Kowalstwem.  :D
 

gothic1210
  • Gość

gothic1210
Gość

Nowa umiejętność 0/1
#9 2011-08-24, 10:49(Ostatnia zmiana: 2011-08-24, 10:59)
Napisałem ten skrypt książki i tic toca poklatkowego wywołującego okno po naciśnięciu klawisza. Sparsowałem i nie działa.

Oto skrypt książki:
Spoiler

// Nowe okno

func void cooker ()
{
var int nDocID;
if (NPC_TALENT_COOKER)
{
                         Doc_PrintLine   ( nDocID,  1, "  Gotowanie                        Tak");
                  
}                  
else                   
{
                         Doc_PrintLine   ( nDocID,  1, "  Gotowanie                        Nie");
                  
};
};               
func void kowal ()
{
var int nDocID;
if (NPC_TALENT_KOWAL)
{
                        Doc_PrintLine   ( nDocID,  1, "  Kowalstwo                        Tak");
                  
}
else
{
                        Doc_PrintLine   ( nDocID,  1, "  Kowalstwo                        Nie");
                 
};
};
func void alchemy ()
{
var int nDocID;
if (NPC_TALENT_ALCHEMY)
{  
                         Doc_PrintLine   ( nDocID,  1, "  Alchemia                         Tak");
                  
}
else
{
                      Doc_PrintLine   ( nDocID,  1, "  Alchemia                         Nie");
                  
};
};
func void luczarz ()
{
var int nDocID;
if (NPC_TALENT_LUCZARZ)   
{
                         Doc_PrintLine   ( nDocID,  1, "  Łuczarstwo                       Tak");
                  
}
else
{
                      Doc_PrintLine   ( nDocID,  1, "  Łuczarstwo                       Nie");
                  
};
};         
func void rymarz ()
{
var int nDocID;
if (NPC_TALENT_RYMARZ)
{
                         Doc_PrintLine   ( nDocID,  1, "  Rymarstwo                        Tak");
                  
}
else
{
                      Doc_PrintLine   ( nDocID,  1, "  Rymarstwo                        Nie");
                  
};
};         
func void wydobycie ()
{
var int nDocID;
if (NPC_TALENT_WYDOBYCIE)
{
                         Doc_PrintLine   ( nDocID,  1, "  Wydobycie  surowców              Tak");
                  
}
else
{
                         Doc_PrintLine   ( nDocID,  1, "  Wydobycie  surowców              Nie");
                  
};
};   
func void zielarz ()
{
var int nDocID;
if (NPC_TALENT_ZIELARZ)
{
                         Doc_PrintLine   ( nDocID,  1, "  Zielarz                          Tak");
                  
}
else
{
                         Doc_PrintLine   ( nDocID,  1, "  Zielarz                          Nie");
                  
};
};   
func void przetrw ()
{
var int nDocID;
if (NPC_TALENT_PRZETRW)
{
                          Doc_PrintLine   ( nDocID,  1, "  Przetrwanie                      Tak");
                  
}
else
{
                         Doc_PrintLine   ( nDocID,  1, "  Przetrwanie                      Nie");
                  
};
};   
func void tajemna ()
{
var int nDocID;
if (NPC_TALENT_TAJEMNA)
{
                          Doc_PrintLine   ( nDocID,  1, "  Wiedza tajemna                   Tak");
                  
}
else
{
                         Doc_PrintLine   ( nDocID,  1, "  Wiedza tajemna                   Nie");
                  
};
};   
func void learn ()
{
var int nDocID;
if (NPC_TALENT_LEARN)
{
                          Doc_PrintLine   ( nDocID,  1, "  Regeneracja                      Tak");
                  
}
else
{
                         Doc_PrintLine   ( nDocID,  1, "  Regeneracja                      Nie");
                  
};
};   
func void kostury ()
{
var int nDocID;
if (NPC_TALENT_KOSTURY)
{
                          Doc_PrintLine   ( nDocID,  1, "  Walka kosturami                  Tak");
                  
}
else
{
                         Doc_PrintLine   ( nDocID,  1, "  Walka kosturami                  Nie");
                  
};
};   
func void plugawy ()
{
var int nDocID;
if (NPC_TALENT_PLUGAWY)
{
                          Doc_PrintLine   ( nDocID,  1, "  Plugawy oręż                     Tak");
                  
}
else
{
                         Doc_PrintLine   ( nDocID,  1, "  Plugawy oręż                     Nie");
                  
};
};
func void sekretny ()
{
var int nDocID;
if (NPC_TALENT_SEKRETNY)
{
                          Doc_PrintLine   ( nDocID,  1, "  Sekretny cios                    Tak");
                  
}
else
{
                         Doc_PrintLine   ( nDocID,  1, "  Sekretny cios                    Nie");
                  
};
};   
func void wlam ()
{
var int nDocID;
if (NPC_TALENT_WLAM)
{
                          Doc_PrintLine   ( nDocID,  1, "  Włamywanie się                    Tak");
                  
}
else
{
                         Doc_PrintLine   ( nDocID,  1, "  Włamywanie się                    Nie");
                  
};
};   
   
// Okno ustwienia

func void menu_status_01 ()
{
            var string tekst;
            var string poziom_next;
            var string punkty_nauki;
      punkty_nauki = ConcatStrings ("  Punkty nauki                        ", IntToString (hero.lp));
      poziom_next = ConcatStrings ("/", IntToString (hero.exp_next));
      poziom_next = ConcatStrings (IntToString (hero.exp), poziom_next);
      poziom_next = ConcatStrings ("  Doswiadczenie                       ", poziom_next);
      tekst = ConcatStrings ("  Poziom                              ", IntToString (hero.level));
      var string ConcatText;
      





      
   var int nDocID;
      nDocID =    Doc_Create      ()           ;                     // DocManager
               Doc_SetPages   ( nDocID,  2    );                         //wieviel Pages
               Doc_SetPage    ( nDocID,  0, "kartka_menu.TGA"  , 0       );
               Doc_SetPage    ( nDocID,  1, "kartka_menu.TGA"  , 0       );
                Doc_SetMargins   ( nDocID,  1,  275, 20, 30, 20, 1         );  //  0 -> margins are in pixels
               
               Doc_SetFont    ( nDocID,  0, "font_15_book.tga"           );    // -1 -> all pages
               Doc_PrintLine   ( nDocID,  0, "");   
               Doc_PrintLine   ( nDocID,  0, "");   
               Doc_PrintLine   ( nDocID,  0, "             Podstawowe informacje"               );
               Doc_PrintLine   ( nDocID,  0, "");   
   
               Doc_PrintLine   ( nDocID,  0, tekst               );
               Doc_PrintLine   ( nDocID,  0, poziom_next               );
               Doc_PrintLine   ( nDocID,  0, punkty_nauki               );
               
               
               Doc_PrintLine   ( nDocID,  0, "               Walka tradycyjna"               );
                                    
               Doc_PrintLine   ( nDocID,  0, "");   
                                    kostury ();
                                    plugawy ();
                                    sekretny ();
               Doc_PrintLine   ( nDocID,  0, "                   Wiedza"               );
               Doc_PrintLine   ( nDocID,  0, "");   
                                    zielarz ();
                                    przetrw ();
                                    tajemna ();
                                    learn ();
               Doc_SetMargins   ( nDocID, -1, 30, 20, 275, 20, 1         );  //  0 -> margins are in pixels (Position des Textes von den Ränder des TGAs aus, links,oben,rechts,unten)
               Doc_SetFont    ( nDocID,  1, "font_15_book.tga"           );    // -1 -> all pages
               
               Doc_PrintLine   ( nDocID,  1, ""               );
               Doc_PrintLine   ( nDocID,  1, "           Umiejetnosci zlodziejskie"               );
               
               Doc_PrintLine   ( nDocID,  1, ""               );
                                    wlam ();
               Doc_PrintLine   ( nDocID,  1, "                  Rzemioslo"               );
               Doc_PrintLine   ( nDocID,  1, ""               );
                                    cooker ();
                                    kowal ();
                                    alchemy ();
                                    luczarz ();
                                    rymarz ();
                                    wydobycie ();

};

/*

*/
      

Dodam, że usunąłem z niego tę część, ponieważ wywalało Unkown indef MemoryProtectionOverride.
Oto ta część:
func void ShowManabarInFight(var int cond) {
var int tmp;

MemoryProtectionOverride( /*0x006C33F9*/ 7091193, 8);

if (cond == 1) {
tmp = /*0x0F00F883*/ 251721859;
MEM_WriteInt(7091193, tmp);
tmp = /*0x00AB840F*/ 11240463;
MEM_WriteInt(7091196, tmp);
} else if (cond == 0) {
tmp = /*0F07F883*/ 252180611;
MEM_WriteInt(7091193, tmp);
tmp = /*0x00AB850F*/ 11240719;
MEM_WriteInt(7091196, tmp);
} else if (cond == -1) {
tmp = /*0x0F00F883*/ 251721859;
MEM_WriteInt(7091193, tmp);
tmp = /*0x00AB850F*/ 11240719;
MEM_WriteInt(7091196, tmp);
};
};
func void pause(var int showPauseText) {
    const int oCGame__pause = 7113424; //0x06C8AD0
    CALL_IntParam(!showPauseText);
    CALL__thiscall(MEM_InstToPtr(MEM_Game), oCGame__pause);
};

func void unpause() {
    const int oCGame__unpause = 7114064; //0x6C8D50
    CALL__thiscall(MEM_InstToPtr(MEM_Game), oCGame__unpause);
};
Obydwa skrypty pasuje na samym końcu Gothic.src. Nie wywala żadnego błędu a mimo wszystko nie działa. Dodam że nie zapomniałem o Tigerze.

W startup.d
Cytuj
      Wld_SendTrigger ("NOWE_OKNO");

w ZEN tez zrobiłem Tigera jakby co. Liczę na wsparcie.  :ok:
EDIT:
Wydaję mi się że ta linijka jest ważna.
Cytuj
               menu_start=true;
Może nie działało gdy ją usunąłem. Wydaję mi się że odpowiada za wyskoczenie mojego menu statystyk.
Błąd Unkown indef MemoryProtectionOverride. zniknął ale teraz wywala Unkown indef menu_start. Skrypt został przerobiony z g2 do g1 więc przypuszczam ze w g1 jest inaczej i to dlatego.
 

EdekSumo

EdekSumo

Wyspa Khorinis
posty1739
Propsy925
ProfesjaLvl designer
  • Wyspa Khorinis
Japierdole :facepalm:  na gg przecież Ci pomogę to rozwikłać bo moje skrypty trza zrozumieć.
 

gothic1210
  • Gość
Japierdole :facepalm:  na gg przecież Ci pomogę to rozwikłać bo moje skrypty trza zrozumieć.

Niestety nie idzie. Przypuszczam, że to przez tego tic toca bo okno jest ok.
Tic toc
Cytuj
instance NOWE_OKNO (oCTriggerScript);

func void tick_tock (){


 var int vkeey;  
vkeey  = MEM_KeyState(KEY_P);

if (vkeey == KEY_PRESSED)
{
menu_status_01 ();
};



if (true)
{  
if(PerFrameCallTrigger_Init)//zmienna która ustawiasz w INIT_KazdyswiatzTwojegoModa (np. INIT_WORLD) na true
{
var int ptr;
ptr = MEM_SearchVobByName ("NOWE_OKNO");
MEM_AssignInst (NOWE_OKNO, ptr);
PerFrameCallTrigger_Init=FALSE;
};
Wld_SendTrigger("NOWE_OKNO");  
};
NOWE_OKNO_zCVob_nextOnTimer = MEM_ReadInt(MEMINT_zTimer_Address+8);//MEM_Timer.totalTimeFloat;
};
Parametry triggera
Cytuj
nazwa: NOWE_OKNO
czas: 1.0
scriptfunc: NOWE_OKNO
Fragment Startup.d
Cytuj
//-------- eigentliche Startup des Spiels --------
FUNC VOID INIT_WORLD ()
{
   INIT_Sub_Newcamp      ();
   INIT_Sub_Oldcamp      ();
   INIT_Sub_Psicamp      ();
   INIT_Sub_Demontower    ();
   INIT_Sub_Freeminecamp   ();
   INIT_Sub_Surface       ();

    B_InitMonsterAttitudes ();
   B_InitGuildAttitudes();
   PerFrameCallTrigger_Init=true;
};

FUNC VOID STARTUP_WORLD ()
{
   Startup_Sub_Newcamp         ();
   Startup_Sub_Oldcamp         ();
   Startup_Sub_Psicamp         ();
   Startup_Sub_Demontower      ();
   Startup_Sub_Freeminecamp   ();
   Startup_Sub_Surface         ();

   //die folgende Zeile gilt nur, bis die INIT_...-Funktionen von Ulf unterstützt werden.
   INIT_WORLD               ();
   PlayVideo ("INTRO.BIK");
};
:[
 

EdekSumo

EdekSumo

Wyspa Khorinis
posty1739
Propsy925
ProfesjaLvl designer
  • Wyspa Khorinis
Już widzę błędy :lol2:  btw mówiłem na gg Ci z tym pomogę a nie tu spamujesz.
 


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