Szia!
Jujj, de régen voltam már ezen az oldalon
Több logikai hiba is van a pontrendszer (public Halal) részben, ami miatt nem úgy számol, ahogy azt az ember elvárná.
Kezdeném az elején.
Első probléma
if(tamado != aldozat)
oles[tamado] ++
ezust[tamado] += 3
elet[tamado] ++
Ez eleve hibás, mert ilyen lehetőség nincs Pawnban.
Ez a kód valójában azt jelenti, hogy suicide / worldspawn / bot esetén is ad pontot.
Tehát a valóságban így fut le:
if(tamado != aldozat)
oles[tamado]++
ezust[tamado] += 3
elet[tamado]++
Ez nyilván teljesen felborítja a logikát.
Helyes megoldás szerintem ez:
if (tamado == 0 || tamado == aldozat)
return PLUGIN_CONTINUE
if (!is_user_connected(tamado))
return PLUGIN_CONTINUE
oles[tamado]++
ezust[tamado] += 3
elet[tamado]++
Második probléma – szintlépés (matematikailag hibás)
xp[tamado] += 3
if(xp[tamado] == 100)
{
xp[tamado] = 0
szint[tamado]++
}
Mivel az XP nem 1-esével nő (3, 4, 5 stb.), ezért az XP értéke szinte soha nem lesz pontosan 100, így nem történik szintlépés.
Helyes megoldás:
xp[tamado] += 3
while (xp[tamado] >= 100)
{
xp[tamado] -= 100
szint[tamado]++
}
Harmadik probléma – BOT kezelés
BOT-oknál gyakran előfordul, hogy a támadó értéke 0.
Ha ezt nem kezeled, akkor BOT esetén nem fog számolni semmit.
Megoldás:
if (tamado == 0)
return PLUGIN_CONTINUE
Negyedik probléma – random_float
A random_float() többször egymás után van meghívva, ami nem egyenletes esélyeket ad.
Helyes megoldás:
new r = random_num(1,100)
if (r <= 5) dobozt_kap(tamado)
else if (r <= 10) dollart_kap(tamado)
else if (r <= 15) gyemantot_kap(tamado)
else if (r <= 20) bambuszt_kap(tamado)
else if (r <= 25) tokot_kap(tamado)
else if (r <= 30) hogolyot_kap(tamado)
Ötödik probléma – ADMIN ellenőrzés
if(vasarolt[id] == 3 && ADMIN)
Ez a feltétel hibás, mert az ADMIN egy konstans, nem flag ellenőrzés.
Helyes megoldás:
if (vasarolt[id] == 3 && (get_user_flags(id) & ADMIN))
Ha sok az olvasni való, és lusta vagy --->
public Halal()
{
new tamado = read_data(1)
new aldozat = read_data(2)
if (tamado == 0 || tamado == aldozat)
return PLUGIN_CONTINUE
if (!is_user_connected(tamado))
return PLUGIN_CONTINUE
oles[tamado]++
ezust[tamado] += 3
elet[tamado]++
if (vippont[tamado])
{
ezust[tamado] += 2
xp[tamado] += 1
}
if (vasarolt[tamado] == 3)
{
ezust[tamado] += 4
xp[tamado] += 4
}
xp[tamado] += 3
while (xp[tamado] >= 100)
{
xp[tamado] -= 100
szint[tamado]++
}
new r = random_num(1,100)
if (r <= 5) dobozt_kap(tamado)
else if (r <= 10) dollart_kap(tamado)
else if (r <= 15) gyemantot_kap(tamado)
else if (r <= 20) bambuszt_kap(tamado)
else if (r <= 25) tokot_kap(tamado)
else if (r <= 30) hogolyot_kap(tamado)
return PLUGIN_CONTINUE
}