[G1] Jak zrobić by bonusy z mikstur i pierścieni nie wliczały się do nauki? 95 1

O temacie

Autor Kirgo2

Zaczęty 22.01.2026 roku

Wyświetleń 95

Odpowiedzi 1

Kirgo2

Kirgo2

Użytkownicy
posty51
Propsy7
ProfesjaGracz
  • Użytkownicy
Czołem!
Zaimplementowałem do Gothica I system nauki wzorowany na Nocy Kruka wzięty stąd: http://themodders.org/index.php?topic=25808.msg1385525#msg1385525

Mam jednak problem bo próbuję zrobić by bonusy z mikstur stałych, pierścieni i takie bonusy jak ten od Horacego nie wliczały się do progów nauki.

Bardzo prosiłbym o pomoc.
 

|-Aragnis-|

|-Aragnis-|

Użytkownicy
posty17
Propsy17
Profesjabrak
  • Użytkownicy
  • online
W Story_Globals.d dodaj sobie nowe zmienne np:

Spoiler
var int Learned_STRENGTH;
var int Learned_DEXTERITY;
var int Learned_MANA;
var int Learned_1H;
var int Learned_2H;
var int Learned_BOW;
var int Learned_CROSSBOW;

Później w funkcji B_GetLearnCostAttribute zamień umiejętności na te nowe zmienne:

Spoiler
Przykładowo siła:

   if(attribut == ATR_STRENGTH)
   {
      if(Learned_STRENGTH >= 150)
      {
         kosten = 5;
      }
      else if(Learned_STRENGTH  >= 100)
      {
         kosten = 4;
      }
      else if(Learned_STRENGTH  >= 50)
      {
         kosten = 3;
      }
      else if(Learned_STRENGTH  >= 1) 
      {
         kosten = 2;
      }
      else
      {
         kosten = 1;
      };
   };


Później w funkcji B_TeachAttributePoints:

Zamieniasz:

Spoiler
   if(attrib == ATR_STRENGTH)
   {
      realAttribute = oth.attribute[ATR_STRENGTH];
   }

na:

Spoiler
   if(attrib == ATR_STRENGTH)
   {
      realAttribute = Learned_Strength;
   }

I na końcu funkcji przed return true;  dodajesz:

 
Spoiler
   if (attrib == ATR_STRENGTH)
    {
        Learned_STRENGTH = Learned_STRENGTH + points;
    };

I analogicznie dla zręczności i many.

Jeśli chodzi o walkę bronią to podobnie jak w przypadku atrybutów tylko w funkcji B_GetLearnCostTalent oraz  B_TeachFightTalentPercent.

Spoiler
Przykładowo w funkcji B_TeachFightTalentPercent powinno to wyglądać tak, na przykładzie 1h:

   if(talent == NPC_TALENT_1H)
   {
      realHitChance = Learned_1H;
   }

i trochę niżej:

   if(talent == NPC_TALENT_1H)
   {
      B_RaiseFightTalent(oth,NPC_TALENT_1H,percent);
        Learned_1H = Learned_1H + percent;

      if(oth.aivar[REAL_TALENT_1H] >= (oth.aivar[REAL_TALENT_2H] + 30))
      {
         B_RaiseFightTalent(oth,NPC_TALENT_2H,percent);
             Learned_2H = Learned_2H + percent;
         PrintScreen(PRINT_Learn1H_and_2H,-1,-1,FONT_Screen,2);
      }
      else
      {
         PrintScreen(PRINT_Learn1H,-1,-1,FONT_Screen,2);
      };
      return TRUE;
   };

Działa to jak w g2, czyli dostajesz punkty władania 2H po nauczeniu władania 1H od pewnego poziomu, jeśli tego nie chcesz możesz to zmienić.

Później w dialogach możesz sobie też zmienić, aby nauczyciele nie brali pod uwagę całej ogólnej umiejętności w limicie nauczania, tylko samą wyuczoną:

Spoiler
Na przykładzie łuku u Niclasa:

func void DIA_Niclas_Teach_Info()
{
   AI_Output(other,self,"DIA_Niclas_Teach_15_00");   //Pokaż mi proszę, jak się posługiwać łukiem.
   if(Learned_BOW >= 60)
   {
      AI_Output(self,other,"DIA_Niclas_Teach_03_01");   //Nauczyłem cię już wszystkiego, co sam umiałem. Musisz sobie poszukać innego nauczyciela.
   }
   else
   {
      Info_ClearChoices(DIA_Niclas_Teach);
      Info_AddChoice(DIA_Niclas_Teach,Dialog_Back,DIA_Niclas_Teach_Back);
      Info_AddChoice(DIA_Niclas_Teach,B_BuildLearnString(PRINT_LearnBow1,B_GetLearnCostTalent(other,NPC_TALENT_BOW,1)),DIA_Niclas_Teach_BOW_1);
      Info_AddChoice(DIA_Niclas_Teach,B_BuildLearnString(PRINT_LearnBow5,B_GetLearnCostTalent(other,NPC_TALENT_BOW,1) * 5),DIA_Niclas_Teach_BOW_5);
   };
};

Mam nadzieję że niczego nie pominąłem xD

Z zablokowaniem przeskakiwania progów u nauczycieli jeszcze nie kombinowałem ale pewnie wystarczyło by przerobić samą funkcje B_GetLearnCostTalent i B_GetLearnCostAttribute.
 


0 użytkowników i 2 gości przegląda ten wątek.
0 użytkowników
Do góry