Witam
Moduje pewną grę w uproszczonym języku C, w której występuje kopanie złota.
Złoto domyślnie można w tej grze kopać w nieskończoność. Chciałem dodać kod który będzie ograniczał to kopanie do 5 wydobyć dziennie.
Napisałem odpowiedni kod w skrypcie i dodałem punkty_zmęczenia oraz funkcję resetującą te punkty dnia następnego. W tej grze czas upływa w rytmie dobowym.
instance PC_Goldhacken_Addon_Hour(C_Info)
{
npc = PC_Hero;
nr = 2;
condition = PC_Goldhacken_Addon_Hour_Condition;
information = PC_Goldhacken_Addon_Hour_Info;
permanent = TRUE;
description = "Odłup trochę.";
};
func int PC_Goldhacken_Addon_Hour_Condition()
{
if(PLAYER_MOBSI_PRODUCTION == MOBSI_GOLDHACKEN)
{
return TRUE;
};
};
var int GoldCounter;
func void PC_Goldhacken_Addon_Hour_Info()
{
var int CurrentChance;
var int MultiNugget;
if (punkty_zmeczenia >= 5)
{
PrintScreen("Na dzisiaj już wystarczy...",-1,-1,FONT_ScreenSmall,2);
b_endproductiondialog();
dzien_kopania = Wld_GetDay();
}
else
{
Learn_by_doing = Learn_by_doing + 1;
if(Learn_by_doing == 10)
{
B_Upgrade_Hero_HackChance(2);
}
else if(Learn_by_doing == 20)
{
B_Upgrade_Hero_HackChance(3);
}
else if(Learn_by_doing == 30)
{
B_Upgrade_Hero_HackChance(5);
}
else if(Learn_by_doing == 45)
{
B_Upgrade_Hero_HackChance(7);
}
else if(Learn_by_doing == 65)
{
B_Upgrade_Hero_HackChance(10);
}
else if(Learn_by_doing == 85)
{
B_Upgrade_Hero_HackChance(12);
Knows_Truemmerschlag = TRUE;
};
CurrentChance = Hlp_Random(100);
MultiNugget = Hlp_Random(10);
if(B_GoldMob_Bestimmung() == TRUE)
{
if(CurrentChance <= Hero_HackChance)
{
if((GoldCounter >= 20) && (MultiNugget >= 8))
{
CreateInvItems(hero,ItMi_GoldNugget_Addon,3);
PrintScreen("Odpadły 3 samorodki złota!",-1,-1,FONT_ScreenSmall,2);
Truemmer_Count = 0;
punkty_zmeczenia = punkty_zmeczenia + 1;
}
else if((GoldCounter >= 7) && (MultiNugget >= 5))
{
CreateInvItems(hero,ItMi_GoldNugget_Addon,2);
PrintScreen("Odpadły 2 samorodki złota!",-1,-1,FONT_ScreenSmall,2);
Truemmer_Count = 0;
GoldCounter = GoldCounter + 1;
punkty_zmeczenia = punkty_zmeczenia + 1;
}
else
{
CreateInvItems(hero,ItMi_GoldNugget_Addon,1);
PrintScreen("Odpadł 1 samorodek złota!",-1,-1,FONT_ScreenSmall,2);
Truemmer_Count = 0;
GoldCounter = GoldCounter + 1;
punkty_zmeczenia = punkty_zmeczenia + 1;
};
}
Funkcja resetująca punkty zmęczenia (w domyśle, ponieważ resetuje je co sekundę za sprawą odświeżania co sekunde)
func void TICK_TOCK ()
{
if (Wld_GetDay() > dzien_kopania)
&& (punkty_zmeczenia >= 5)
{
punkty_zmeczenia = 0;
};
};
Problem polega na tym, że gdy mamy w grze następny dzień to można znów kopać w nieskończoność. Ten warunek && (punkty_zmeczenia >= 5) w ogóle nie działa i funkcja jest cały czas wywoływana bo cały czas jest nowy dzień. Zależy mi na tym by punkty zmęczenia były resetowane dopiero gdy już wydobędziemy złoto 5 razy i nastąpi kolejny dzień.
Wld_GetDay () to funkcja powodująca upływanie dni w trybie dobowym.
C
czy coś innego?fun
,var
,instance
. Autor powinien podać co to właściwie jest, bo na pewno nieC
(nawet uproszczone).