Jó lett! Kaptál tõlem (is) egy pluszt!
Én még annyit elmondanék, hogy ezt a sok ifet jobb lenne helyettesíteni casekkel, vagy csak simán egy szorzót használni hozzá. Mindjárt írok részleteket.
Elsõ megoldás (switch, case):
forward XP_Level(playerid);
public XP_Level(playerid)
{
switch(GetPVarInt(playerid, \"XP\"))
{
case 0..100: SetPVarInt(playerid, \"xplvl\", 1);
case 100..250: SetPVarInt(playerid, \"xplvl\", 2);
case 250..500: SetPVarInt(playerid, \"xplvl\", 3);
case 500..800: SetPVarInt(playerid, \"xplvl\", 4);
case 800..1200: SetPVarInt(playerid, \"xplvl\", 5);
case 1200..1800: SetPVarInt(playerid, \"xplvl\", 6);
case 1800..2500: SetPVarInt(playerid, \"xplvl\", 7);
case 2500..3200: SetPVarInt(playerid, \"xplvl\", ;
case 3200..4000: SetPVarInt(playerid, \"xplvl\", 9);
case 4000..4800: SetPVarInt(playerid, \"xplvl\", 10);
case 4800..5900: SetPVarInt(playerid, \"xplvl\", 11);
case 5900..7000: SetPVarInt(playerid, \"xplvl\", 12);
case 7000..9000: SetPVarInt(playerid, \"xplvl\", 13);
case 9000..11000: SetPVarInt(playerid, \"xplvl\", 14);
case 11000..13500: SetPVarInt(playerid, \"xplvl\", 15);
case 13500..16000: SetPVarInt(playerid, \"xplvl\", 16);
case 16000..17000: SetPVarInt(playerid, \"xplvl\", 17);
case 17000..20000: SetPVarInt(playerid, \"xplvl\", 18);
case 20000..23000: SetPVarInt(playerid, \"xplvl\", 19);
case 23000..28000: SetPVarInt(playerid, \"xplvl\", 20);
case 28000..35000: SetPVarInt(playerid, \"xplvl\", 21);
case 35000..40000: SetPVarInt(playerid, \"xplvl\", 22);
case 40000..45000: SetPVarInt(playerid, \"xplvl\", 23);
case 45000..50000: SetPVarInt(playerid, \"xplvl\", 24);
case 50000..52000: SetPVarInt(playerid, \"xplvl\", 25);
case 52000..58000: SetPVarInt(playerid, \"xplvl\", 26);
case 58000..62000: SetPVarInt(playerid, \"xplvl\", 27);
case 62000..70000: SetPVarInt(playerid, \"xplvl\", 28);
case 70000..80000: SetPVarInt(playerid, \"xplvl\", 29);
case 80000..100000: SetPVarInt(playerid, \"xplvl\", 30);
default:/*Ha semelyik nem igaz rá (<0 vagy >100000)*/SetPVarInt(playerid, \"xplvl\", 9999);
}
}
Második megoldás (ciklusos):
forward XP_Level(playerid);
public XP_Level(playerid)
{
new szinthatar[] =
{0, 100, 250, 500, 800, 1200, 1800, 2500, 3200, 4000, 4800, 5900,
7000, 9000, 11000, 13500, 16000, 17000, 20000, 23000, 28000, 35000,
40000, 45000, 50000, 52000, 58000, 62000, 70000, 80000, 100000};
for(new a = 0; a < sizeof(szinthatar), a++)
{
if(szinthatar[a] <= GetPVarInt(playerid, \"XP\") < szinthatar[a+1]) SetPVarInt(playerid, \"xplvl\", a);
}
}
Harmadik megoldás (coming soon, valami misztikus szorzóval lesz megoldva 1-2 sorban):
forward XP_Level(playerid);
public XP_Level(playerid)
{
new xplvl = GetPVarInt(playerid, \"xplvl\"), XP = GetPVarInt(playerid, \"XP\"), kelloxp = (floatround(floatsqroot(XP)*xplvl/(XP/12)*XP);
if(XP >= kelloxp) SetPVarInt(playerid, \"xplvl\", xplvl+1);
}
... vagy valami hasonló.
Remélem nem írtam oltári nagy hülyeséget, a vége felé már nagyon bekavarodtam, de azért felteszem, hátha hasznát veszi valaki.
Mindenesetre sok szerencsét, további jó scriptelést(és még 1000 ilyen (kis hasznos) scriptet)! :thumbsup:
U.i.: Helyes code tag:
[ c o d e = p a w n ] [ / c o d e ]