Problem z warunkiem teacherMAX 2201 9

O temacie

Autor Lobos

Zaczęty 7.05.2018 roku

Wyświetleń 2201

Odpowiedzi 9

Lobos

Lobos

Użytkownicy
posty594
Propsy360
Profesjabrak
  • Użytkownicy
Witam
Chciałbym napisać warunek że gdy NPC nie może nauczyć nas niczego więcej to np. dostajemy coś.
Napisałem coś takiego ale wyskakuje błąd Unknow identifier (TeacherMAX). Ta funkcja nie jest zdefiniowana a w grze jednak odpala dialog gdy dobijemy max staty dla danego nauczyciela.

FUNC VOID DIA_Koffi_Teach_STR_1 ()
{
if (Npc_HasItems (other, ItMi_GoldNugget_Addon) >=1)
&& (hero.lp >= 1)
{
B_TeachAttributePoints (self, other, ATR_STRENGTH, 1, T_LOW);
Npc_RemoveInvItems (other, ItMi_GoldNugget_Addon,1);

Info_ClearChoices (DIA_Koffi_Teach);
Info_AddChoice (DIA_Koffi_Teach, DIALOG_BACK, DIA_Koffi_Teach_Back);
Info_AddChoice (DIA_Koffi_Teach, B_BuildLearnString("Si³a + 1 (1 bry³ka z³ota)" , B_GetLearnCostAttribute(other, ATR_STRENGTH)) ,DIA_Koffi_Teach_STR_1);
Info_AddChoice (DIA_Koffi_Teach, B_BuildLearnString("Si³a + 5 (5 bry³ek z³ota)" , B_GetLearnCostAttribute(other, ATR_STRENGTH)*5) ,DIA_Koffi_Teach_STR_5);
}
else if (teacherMAX >= 40)
{
CreateInvItems (other, ItMi_GoldNugget_Addon, 1);
}
else
{
if (hero.lp == 0)
{
AI_Output (self, other ,"DIA_Koffi_Teach_STR_1_15_00"); //
AI_Output (self, other ,"DIA_Koffi_Teach_STR_1_15_01"); //
Info_ClearChoices (DIA_Koffi_Teach);
}
else if (Npc_HasItems (other, ItMi_GoldNugget_Addon) == 0)
{
AI_Output (self, other ,"DIA_Koffi_Teach_STR_1_15_02"); //
AI_Output (self, other ,"DIA_Koffi_Teach_STR_1_15_03"); //
Info_ClearChoices (DIA_Koffi_Teach);
};

};

};

 

Splash

Splash

Moderator
posty4207
Propsy3403
ProfesjaNierób
  • Moderator
TeacherMAX to ostatni argument funkcji, odpowiadający za to do ilu punktów maksymalnie nauczyciel może nas uczyć:
B_TeachAttributePoints (var C_NPC slf, var C_NPC oth, var int attrib, var int points, var int teacherMAX)
B_TeachFightTalentPercent (var C_NPC slf, var C_NPC oth, var int talent, var int percent, var int teacherMAX)

W skryptach twórcy jako argument wykorzystywali stałe:
const int T_MEGA = 300; //Pyrokar MANA
const int T_MAX = 200;
const int T_HIGH = 120;
const int T_MED = 90;
const int T_LOW = 60;
 
Nie zajmuję się multiplayerami do Gothica. Przestańcie zawracać mi tym głowę...
Ps. Siemekk ma downa i śpi w pufie

Lobos

Lobos

Użytkownicy
posty594
Propsy360
Profesjabrak
  • Użytkownicy
To wiem ale nic mi to nie daje.
W jednym pliku odnośnie nauki jest użyta taka funkcja jako warunek

if ((realAttribute + points) > teacherMAX)
Ale ja już w moim dialogu nie moge napisać takiego samego warunku bo wyskakuje unknow identyfier. Gdyby to działało to sprawa była by załatwiona.
 

Splash

Splash

Moderator
posty4207
Propsy3403
ProfesjaNierób
  • Moderator
Bo twoja funkcja nie ma takiego argumentu. Ba, twoja funkcja nie ma żadnych argumentów. Stąd też błąd o niezdefiniowanym identyfikatorze. Jak już mówiłem, mają go tylko dwie funkcje, które są używane w dialogach.

Pierwszy lepszy przykład:
func void DIA_Lares_TEACH_5()
{
B_TeachAttributePoints (self, other, ATR_DEXTERITY, 5, T_MED);

Info_ClearChoices   (DIA_Lares_TEACH);
Info_AddChoice (DIA_Lares_TEACH, DIALOG_BACK, DIA_Lares_TEACH_BACK);
Info_AddChoice (DIA_Lares_TEACH, B_BuildLearnString(PRINT_LearnDEX1 , B_GetLearnCostAttribute(other, ATR_DEXTERITY)),DIA_Lares_TEACH_1);
Info_AddChoice (DIA_Lares_TEACH, B_BuildLearnString(PRINT_LearnDEX5 , B_GetLearnCostAttribute(other, ATR_DEXTERITY)*5) ,DIA_Lares_TEACH_5);
Info_AddChoice (DIA_Lares_TEACH, B_BuildLearnString(PRINT_LearnSTR1 , B_GetLearnCostAttribute(other, ATR_STRENGTH)),DIA_Lares_TEACHSTR_1);
Info_AddChoice (DIA_Lares_TEACH, B_BuildLearnString(PRINT_LearnSTR5 , B_GetLearnCostAttribute(other, ATR_STRENGTH)*5) ,DIA_Lares_TEACHSTR_5);
};

B_TeachAttributePoints (self, other, ATR_DEXTERITY, 5, T_MED);
 
Nie zajmuję się multiplayerami do Gothica. Przestańcie zawracać mi tym głowę...
Ps. Siemekk ma downa i śpi w pufie

Bogdan Zwei

Bogdan Zwei

Użytkownicy
Wulgarny skurwiel pierdolony.
posty1864
Propsy541
Profesjabrak
  • Użytkownicy
  • Wulgarny skurwiel pierdolony.
Próbujesz coś zrobić na ślepo. Nic dziwnego, że Ci nie wychodzi. Da się to zrobić na parę sposobów, na które bardzo trudno nie wpaść.

1. Definiujesz odpowiedniego ifa w funkcji nauczyciela.
2. Robisz funkcję, która będzie sprawdzała i dawała przedmioty.
3. Modyfikujesz już istniejące linijki.

Ty wybrałeś kopiowanie i pisanie czegoś na ślepo. Powycinałeś jakieś fragmenty i próbujesz je posklejać z nadzieją, że zadziała.
 
:ok: zachęca do dalszej pomocy. Nie zapominaj o tym!

Prywatne wiadomości typu "Ej, pomocy" kasuję od razu. Od tego jest forum, a nie PW.

To me, defeat in anything is merely temporary, and its punishment is but an urge for me to greater effort to achieve my goal. Defeat simply tells me that something is wrong in my doing; it is a path leading to success and truth.

In order to realize our true self we must be willing to live without being dependent upon the opinion of others.

Lobos

Lobos

Użytkownicy
posty594
Propsy360
Profesjabrak
  • Użytkownicy
Dzięki za odpowiedzi.
Zmontowałem taką oto funkcje wzorując się na tej wyżej. Niby działa ale jest mały problem.

func int B_Zwrot_5_Koffi (var C_NPC STRF_3105_Koffi, var C_NPC oth, var int attrib, var int points, var int teacherMAX)
{
var string concatText;

// ------ Kostenberechnung ------

var int realAttribute;
if (attrib == ATR_STRENGTH) { realAttribute = oth.attribute[ATR_STRENGTH]; }
else if (attrib == ATR_DEXTERITY) { realAttribute = oth.attribute[ATR_DEXTERITY]; }
else if (attrib == ATR_MANA_MAX) { realAttribute = oth.attribute[ATR_MANA_MAX]; };

if (realAttribute >= teacherMAX)
{
CreateInvItems (other, ItMi_GoldNugget_Addon, 5);
};


};

Głównie chodziło mi o to by nie zżerało Bohaterowi kasy po kliknięciu dialogu nauki gdy już będzie miał MAX atrybutu dla danego nauczyciela.

Za 5 punktow atrybutu place 5 bryłek złota
MAX próg nauki dla nauczyciela to 40.
Gdy mam 35 siły i klikam w nauke 5 siły to nie zabiera mi złota a powinno. Gdy już mam te 40 i klikam w dialog wtedy nic nie ubywa bo funkcje sie rownoważą, W dialogu odejmuje 5 bryłek a w mojej funkcji dodaje. Nie wiem tylko co tu napisać w tej funkcji żeby do 40 punktów zabierało a od 40 już nie. Próbowałem na różne sposoby to wpisywać ale bez skutku. Jakieś pomysły ?
 

Mikotsune

Mikotsune

Czas Honoru
posty364
Propsy288
Profesjabrak
  • Czas Honoru
Bez sensu będzie dodawanie bryłek, które już zabrało. Skoro je zabiera to gdzieś musi to być napisane i najlepiej będzie edytowanie tego. Podeślij dialog i skrypt nauki atrybutów.
 
How can I see roses... and only feel thorns...

Lobos

Lobos

Użytkownicy
posty594
Propsy360
Profesjabrak
  • Użytkownicy
Tu dialog

FUNC VOID DIA_Koffi_Teach_STR_5 ()
{
if (Npc_HasItems (other, ItMi_GoldNugget_Addon) >=5)
&& (hero.lp >= 5)
{
B_TeachAttributePoints (self, other, ATR_STRENGTH, 5, T_LOW);
B_Zwrot_5_Koffi (STRF_3105_Koffi,other, ATR_STRENGTH, 5, T_LOW);
Npc_RemoveInvItems (other, ItMi_GoldNugget_Addon,5);

Info_ClearChoices (DIA_Koffi_Teach);
Info_AddChoice (DIA_Koffi_Teach, DIALOG_BACK, DIA_Koffi_Teach_Back);
Info_AddChoice (DIA_Koffi_Teach, B_BuildLearnString("Siła + 1 (1 bryłka złota)" , B_GetLearnCostAttribute(other, ATR_STRENGTH)) ,DIA_Koffi_Teach_STR_1);
Info_AddChoice (DIA_Koffi_Teach, B_BuildLearnString("Siła + 5 (5 bryłek złota)" , B_GetLearnCostAttribute(other, ATR_STRENGTH)*5) ,DIA_Koffi_Teach_STR_5);

}
else
{
if (hero.lp <= 4)
{
AI_Output (self, other ,"DIA_Koffi_Teach_STR_5_15_00"); //Nowy mieć pusta głowa!
AI_Output (self, other ,"DIA_Koffi_Teach_STR_5_15_01"); //
Info_ClearChoices (DIA_Koffi_Teach);
}
else if (Npc_HasItems (other, ItMi_GoldNugget_Addon) <= 4)
{
AI_Output (self, other ,"DIA_Koffi_Teach_STR_5_15_02"); //Nowy niemieć złota!
AI_Output (self, other ,"DIA_Koffi_Teach_STR_5_15_03"); //Wrócić gdy mieć złoto!
Info_ClearChoices (DIA_Koffi_Teach);
};

};
};

Skrypt nauki atrybutów jest nie edytowany.
W tej opcji dialogowej zabiera 5 bryłek za nauke 5 pkt siły, potem gdy już mam te 40 siły to zabierało po kliknieciu wiec dlatego napisałem tamtą funkcje by nie zabierało tylko że z chwilą jak ucze sie na max tej siły to automatycznie dwa skrypty sie odpalają i dodaje mi te bryłki, potem już nie. Nie wiem jak to obejść
 

Mikotsune

Mikotsune

Czas Honoru
posty364
Propsy288
Profesjabrak
  • Czas Honoru
FUNC VOID DIA_Koffi_Teach_STR_5 ()
{
if (Npc_HasItems (other, ItMi_GoldNugget_Addon) >=5)
&& (hero.lp >= 5)
{
var int realAttribute; realAttribute = other.attribute[ATR_STRENGTH];
if((realAttribute + 5) <= T_LOW)
{
Npc_RemoveInvItems (other, ItMi_GoldNugget_Addon,5);
};

B_TeachAttributePoints (self, other, ATR_STRENGTH, 5, T_LOW);

Info_ClearChoices (DIA_Koffi_Teach);
Info_AddChoice (DIA_Koffi_Teach, DIALOG_BACK, DIA_Koffi_Teach_Back);
Info_AddChoice (DIA_Koffi_Teach, B_BuildLearnString("Siła + 1 (1 bryłka złota)" , B_GetLearnCostAttribute(other, ATR_STRENGTH)) ,DIA_Koffi_Teach_STR_1);
Info_AddChoice (DIA_Koffi_Teach, B_BuildLearnString("Siła + 5 (5 bryłek złota)" , B_GetLearnCostAttribute(other, ATR_STRENGTH)*5) ,DIA_Koffi_Teach_STR_5);

}
else
{
if (hero.lp <= 4)
{
AI_Output (self, other ,"DIA_Koffi_Teach_STR_5_15_00"); //Nowy mieć pusta głowa!
AI_Output (self, other ,"DIA_Koffi_Teach_STR_5_15_01"); //
Info_ClearChoices (DIA_Koffi_Teach);
}
else if (Npc_HasItems (other, ItMi_GoldNugget_Addon) <= 4)
{
AI_Output (self, other ,"DIA_Koffi_Teach_STR_5_15_02"); //Nowy niemieć złota!
AI_Output (self, other ,"DIA_Koffi_Teach_STR_5_15_03"); //Wrócić gdy mieć złoto!
Info_ClearChoices (DIA_Koffi_Teach);
};

};
};
 
How can I see roses... and only feel thorns...

Lobos

Lobos

Użytkownicy
posty594
Propsy360
Profesjabrak
  • Użytkownicy
Preriowy znasz się na rzeczy. Wielkie dzięki. Cały dzien sie z tym pieprzyłem na różne dziwne sposoby a wystarczyło kilka linijek. Działa.
 


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