Összedobtam egyet neked, remélem ilyenre gondoltál
nem teszteltem, de írj, ha valami gond van
#include a_samp
#include dini
#define MAX_LVL 5 //kedvedre állítod be
new level_exp = 100; //itt úgy oldjuk meg, hogy ha egy leveles száz exp kell, majd levelenként szorozzuk be, folytatás lenn
enum items {
level,
exp,
registered
}
new accinfo[MAX_PLAYERS][items]; //mivel max_players-t adtunk meg az online játékosoknak külön tárolja az enumban lévõ dolgokat
public OnPlayerConnect(playerid)
{
accinfo[playerid][registered] = dini_Int(\"char.txt\", \"registered\");
if(accinfo[playerid][registered] == 1)//Ha regisztrált
{
accinfo[playerid][level] = dini_Int(\"char.txt\", \"level\"); //kiolvassa a szintet
accinfo[playerid][exp] = dini_Int(\"char.txt\", \"exp\"); //és az exp-t
}
else //ha még nem regisztrált
{
dini_IntSet(\"char.txt\", \"level\", 1); //beállítja a kezdõ szintet (1)
dini_IntSet(\"char.txt\", \"exp\", 0); //és az exp-t nullára
}
return 1;
}
public OnPlayerDeath(playerid, killerid, reason) //amikor egy játékos meghal
{
new string[64];
new gy_neve[64];
new h_neve[64];
GetPlayerName(playerid, h_neve, sizeof(h_neve));
GetPlayerName(killerid, gy_neve, sizeof(gy_neve));
give_exp(killerid, 5); //ha valaki (killerid) megöl valakit (playerid-t) akkor kap 5 exp-t
//ez bonyolíthatod elágazásokkal, hogy ha a gyilkos kisebb nagyobb szintû volt pl
format(string, sizeof(string), \"Mivel megölted õt: %s, ezért kaptál 5 exp-t\", h_neve);
SendClientMessage(killerid, -1, string); //ezt a gyilkosnak küldjük
format(string, sizeof(string), \"%s megölt téged\", gy_neve);
SendClientMessage(playerid, -1, string);//ezt a halottnak küljök
return 1;
}
stock give_exp(playerid, amount)
{
if(accinfo[playerid][exp] < max_exp(playerid)) //ha az exp kevesebb mint a max_exp,
{
accinfo[playerid][exp] = (accinfo[playerid][exp] + amount); // akkor hozzá adja a kapott exp-t
}
else // ha viszont egyenlõ, vagy nagyobb az exp a max expnél,
{
accinfo[playerid][level] = (accinfo[playerid][level] + 1); //akkor kapsz +1 szintet
accinfo[playerid][exp] = 0 + (accinfo[playerid][exp] - max_exp(playerid)); //Ez a végén azért fontos, mert ha esetleg a kapott exp-vel átllépte a max-ot akkor a következõ szinthet exp-jéhez hozzá adja
}
return 1;
}
//max exp meghatározása:
stock max_exp(playerid) //ezzel tudjuk lekérdezni menyi a jelenlegi max exp
{
new asd;
asd = (level_exp * accinfo[playerid][level]); //itt a levelenkénti exp-t szorozza meg a szinteddel
return asd; //a max_exp függvény ezzel az értékkel tér vissza
}