Funkcja zwracająca zmienną 1779 3

O temacie

Autor

Zaczęty 22.06.2014 roku

Wyświetleń 1779

Odpowiedzi 3

gothic1210
  • Gość
Witam.
W G2 znalazłem taką oto funkcję:
func int B_GetLearnCostAttribute (var C_NPC oth, var int attribut)
{
var int kosten; kosten = 0;

// ------ Kosten für Stärke ------
if (attribut == ATR_STRENGTH)
{
if (oth.attribute[ATR_STRENGTH] >= 120) { kosten = (5); }
else if (oth.attribute[ATR_STRENGTH] >= 90) { kosten = (4); }
else if (oth.attribute[ATR_STRENGTH] >= 60) { kosten = (3); }
else if (oth.attribute[ATR_STRENGTH] >= 30) { kosten = (2); }
else { kosten = (1); };
};

// ------ Kosten für Dexterity ------
if (attribut == ATR_DEXTERITY) 
{
if (oth.attribute[ATR_DEXTERITY] >= 120) { kosten = (5); }
else if (oth.attribute[ATR_DEXTERITY] >= 90) { kosten = (4); }
else if (oth.attribute[ATR_DEXTERITY] >= 60) { kosten = (3); }
else if (oth.attribute[ATR_DEXTERITY] >= 30) { kosten = (2); }
else { kosten = (1); };
};

// ------ Kosten für Mana MAX ------
if (attribut == ATR_MANA_MAX)
{
if (oth.attribute[ATR_MANA_MAX] >= 120) { kosten = (5); }
else if (oth.attribute[ATR_MANA_MAX] >= 90) { kosten = (4); }
else if (oth.attribute[ATR_MANA_MAX] >= 60) { kosten = (3); }
else if (oth.attribute[ATR_MANA_MAX] >= 30) { kosten = (2); }
else { kosten = (1); };
};

return kosten;
};
Przystosowałem ją do G1. I teraz chciałem spróbować umieścić ją w funkcji B_BuyAttributePoints. Niestety parser odrzuca.
func void B_BuyAttributePoints (var C_NPC typ, var int ATR, var int AtrPlus)
{
// --------- Umwandeln von var in const
var int Typ_Atr;
if (ATR == ATR_STRENGTH) { Typ_Atr = typ.attribute[ATR_STRENGTH]; }
else if (ATR == ATR_DEXTERITY) { Typ_Atr = typ.attribute[ATR_DEXTERITY]; }
else if (ATR == ATR_MANA_MAX) { Typ_Atr = typ.attribute[ATR_MANA_MAX]; };

// --------- Steigern oder verbieten
var string AtrPlusSTRING; AtrPlusSTRING = IntToString(AtrPlus);
var string PrintSTRING;

if (!(typ.lp < AtrPlus))
{
if (Npc_HasItems (hero, ItmiNugget) >=AtrPlus*10) {
if (Typ_Atr + AtrPlus <= 100)
{
//*******TU MÓJ KOD ************
var int cost_lp;
cost_lp = B_GetLearnCostAttribute (typ, ATR);
//typ.lp = typ.lp - AtrPlus; //oryginalna linijka
typ.lp = typ.lp - cost_lp;
//*******KONIEC ************
if (ATR == ATR_STRENGTH)
{
typ.attribute[ATR_STRENGTH] = typ.attribute[ATR_STRENGTH] + AtrPlus;
PrintString = ConcatStrings(NAME_BuyAttributeSTR, AtrPlusSTRING);
PrintScreen (PrintSTRING, -1,-1,"FONT_OLD_20_WHITE.TGA",1);
B_GiveInvItems (hero, self, ItmiNugget, AtrPlus*10);
}
else if (ATR == ATR_DEXTERITY)
{
typ.attribute[ATR_DEXTERITY] = typ.attribute[ATR_DEXTERITY] + AtrPlus;
PrintString = ConcatStrings(NAME_BuyAttributeDEX, AtrPlusSTRING);
PrintScreen (PrintSTRING, -1,-1,"FONT_OLD_20_WHITE.TGA",1);
B_GiveInvItems (hero, self, ItmiNugget, AtrPlus*10);
}
else if (ATR == ATR_MANA_MAX)
{
typ.attribute[ATR_MANA_MAX] = typ.attribute[ATR_MANA_MAX] + AtrPlus;
PrintString = ConcatStrings(NAME_BuyAttributeMAN, AtrPlusSTRING);
PrintScreen (PrintString, -1,-1,"FONT_OLD_20_WHITE.TGA",1);
B_GiveInvItems (hero, self, ItmiNugget, AtrPlus*10);
};
}
else
{
PrintScreen ("100 punktów to wartość maksymalna!", -1,-1,"FONT_OLD_20_WHITE.TGA",1);
B_Say (self, other, "$NOLEARNOVERMAX");
};
}else {
PrintScreen ("Masz za mało rudy!", -1,-1,"FONT_OLD_20_WHITE.TGA",1);
};
}
else
{
PrintScreen ("Za mało punktów umiejętności!", -1,-1,"FONT_OLD_20_WHITE.TGA",1);
B_Say (self, other, "$NOLEARNNOPOINTS");
};
};
Wprawdzie udało mi się zmieniać wartości stałej odpowiedzialnej za koszt atrybutów w PN, ale niosło to za sobą dziwne konsekwencje: mianowicie niby cena rosła, ale rosła też ilość otrzymywanych pkt. atrybutów. Np: miałem powyżej 60 siły i jeden pkt powinien mnie kosztować 3 pkt umiejętności. Tak się nie działo, dodawało mi za to 3 pkt siły, gdy brałem Siła + 1. Wie ktoś gdzie to siedzi?
 

Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja

Adanos
Administrator

Funkcja zwracająca zmienną
#1 2014-06-22, 13:15(Ostatnia zmiana: 2014-06-22, 13:27)
W skrypcie masz, że koszt nauki równa się tyle, o ile należy zwiększyć dany atrybut. Musisz bardziej rozbudować funkcję, albo popatrzeć jak to było w G2.

Ach tak, nazwa tematu raczej nie jest zbyt adekwatna do opisanego problemu.

gothic1210
  • Gość
Cytuj
Ach tak, nazwa tematu raczej nie jest zbyt adekwatna do opisanego problemu.
Czy ja wiem. Funkcja B_GetLearnCostAttribute zwraca zmienną kosten. To dlaczego tu wywala cost_lp = B_GetLearnCostAttribute (typ, ATR);że się powtarza.  
 

Xardas47

Xardas47

Użytkownicy
Mhroczny charakterek
posty249
Propsy150
ProfesjaProgramista
  • Użytkownicy
  • Mhroczny charakterek
Ale co się powtarza?
 


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