hlmod.hu
https://hlmod.hu/

beraktam egy plugint ami nem müködik .
https://hlmod.hu/viewtopic.php?f=9&t=31675
Oldal: 1 / 1

Szerző:  ZOR [2026.01.17. 18:38 ]
Hozzászólás témája:  beraktam egy plugint ami nem müködik .

Üdv.
teszteltem BOT felhasználásával és saját magammal(egyszerre 2 cst inditottam(identiti csere)
nem számol hiába ölök . pontot.)
viewtopic.php?f=29&t=26693&p=191098&hilit=deathrun#p191098
pedig az van irva cxsak mentest kell hozzá írni.. nem írtam hozzá, mivel elsőnek is érdekelne , hogy megy e. Segítenétek a hiba megfejtésében öléskor miért nem ad pontot vagy más egyebet? Köszönöm előre.





módot csatoltam.

Csatolmányok:
drmodes.sma [71.66KiB]
Letöltve 18 alkalommal.

Szerző:  HellEnergY [2026.01.19. 15:24 ]
Hozzászólás témája: 

Szia!
Jujj, de régen voltam már ezen az oldalon :lol:

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

  1. if(tamado != aldozat)
  2. oles[tamado] ++
  3. ezust[tamado] += 3
  4. 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:

  1. if(tamado != aldozat)
  2. oles[tamado]++
  3.  
  4. ezust[tamado] += 3
  5. elet[tamado]++


Ez nyilván teljesen felborítja a logikát.

Helyes megoldás szerintem ez:

  1. if (tamado == 0 || tamado == aldozat)
  2. return PLUGIN_CONTINUE
  3.  
  4. if (!is_user_connected(tamado))
  5. return PLUGIN_CONTINUE
  6.  
  7. oles[tamado]++
  8. ezust[tamado] += 3
  9. elet[tamado]++


Második probléma – szintlépés (matematikailag hibás)

  1. xp[tamado] += 3
  2. if(xp[tamado] == 100)
  3. {
  4. xp[tamado] = 0
  5. szint[tamado]++
  6. }


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:

  1. xp[tamado] += 3
  2.  
  3. while (xp[tamado] >= 100)
  4. {
  5. xp[tamado] -= 100
  6. szint[tamado]++
  7. }


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:

  1. if (tamado == 0)
  2. 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:

  1. new r = random_num(1,100)
  2.  
  3. if (r <= 5) dobozt_kap(tamado)
  4. else if (r <= 10) dollart_kap(tamado)
  5. else if (r <= 15) gyemantot_kap(tamado)
  6. else if (r <= 20) bambuszt_kap(tamado)
  7. else if (r <= 25) tokot_kap(tamado)
  8. else if (r <= 30) hogolyot_kap(tamado)


Ötödik probléma – ADMIN ellenőrzés

  1. if(vasarolt[id] == 3 && ADMIN)


Ez a feltétel hibás, mert az ADMIN egy konstans, nem flag ellenőrzés.

Helyes megoldás:

  1. if (vasarolt[id] == 3 && (get_user_flags(id) & ADMIN))


Ha sok az olvasni való, és lusta vagy --->
  1. public Halal()
  2. {
  3.     new tamado = read_data(1)
  4.     new aldozat = read_data(2)
  5.  
  6.     if (tamado == 0 || tamado == aldozat)
  7.         return PLUGIN_CONTINUE
  8.  
  9.     if (!is_user_connected(tamado))
  10.         return PLUGIN_CONTINUE
  11.  
  12.     oles[tamado]++
  13.     ezust[tamado] += 3
  14.     elet[tamado]++
  15.  
  16.     if (vippont[tamado])
  17.     {
  18.         ezust[tamado] += 2
  19.         xp[tamado] += 1
  20.     }
  21.  
  22.     if (vasarolt[tamado] == 3)
  23.     {
  24.         ezust[tamado] += 4
  25.         xp[tamado] += 4
  26.     }
  27.  
  28.     xp[tamado] += 3
  29.  
  30.     while (xp[tamado] >= 100)
  31.     {
  32.         xp[tamado] -= 100
  33.         szint[tamado]++
  34.     }
  35.  
  36.     new r = random_num(1,100)
  37.  
  38.     if (r <= 5) dobozt_kap(tamado)
  39.     else if (r <= 10) dollart_kap(tamado)
  40.     else if (r <= 15) gyemantot_kap(tamado)
  41.     else if (r <= 20) bambuszt_kap(tamado)
  42.     else if (r <= 25) tokot_kap(tamado)
  43.     else if (r <= 30) hogolyot_kap(tamado)
  44.  
  45.     return PLUGIN_CONTINUE
  46. }

Szerző:  ZOR [2026.01.20. 14:50 ]
Hozzászólás témája: 

HellEnergY írta:
Szia!
Jujj, de régen voltam már ezen az oldalon :lol:

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

  1. if(tamado != aldozat)
  2. oles[tamado] ++
  3. ezust[tamado] += 3
  4. 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:

  1. if(tamado != aldozat)
  2. oles[tamado]++
  3.  
  4. ezust[tamado] += 3
  5. elet[tamado]++


Ez nyilván teljesen felborítja a logikát.

Helyes megoldás szerintem ez:

  1. if (tamado == 0 || tamado == aldozat)
  2. return PLUGIN_CONTINUE
  3.  
  4. if (!is_user_connected(tamado))
  5. return PLUGIN_CONTINUE
  6.  
  7. oles[tamado]++
  8. ezust[tamado] += 3
  9. elet[tamado]++


Második probléma – szintlépés (matematikailag hibás)

  1. xp[tamado] += 3
  2. if(xp[tamado] == 100)
  3. {
  4. xp[tamado] = 0
  5. szint[tamado]++
  6. }


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:

  1. xp[tamado] += 3
  2.  
  3. while (xp[tamado] >= 100)
  4. {
  5. xp[tamado] -= 100
  6. szint[tamado]++
  7. }


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:

  1. if (tamado == 0)
  2. 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:

  1. new r = random_num(1,100)
  2.  
  3. if (r <= 5) dobozt_kap(tamado)
  4. else if (r <= 10) dollart_kap(tamado)
  5. else if (r <= 15) gyemantot_kap(tamado)
  6. else if (r <= 20) bambuszt_kap(tamado)
  7. else if (r <= 25) tokot_kap(tamado)
  8. else if (r <= 30) hogolyot_kap(tamado)


Ötödik probléma – ADMIN ellenőrzés

  1. if(vasarolt[id] == 3 && ADMIN)


Ez a feltétel hibás, mert az ADMIN egy konstans, nem flag ellenőrzés.

Helyes megoldás:

  1. if (vasarolt[id] == 3 && (get_user_flags(id) & ADMIN))


Ha sok az olvasni való, és lusta vagy --->
  1. public Halal()
  2. {
  3.     new tamado = read_data(1)
  4.     new aldozat = read_data(2)
  5.  
  6.     if (tamado == 0 || tamado == aldozat)
  7.         return PLUGIN_CONTINUE
  8.  
  9.     if (!is_user_connected(tamado))
  10.         return PLUGIN_CONTINUE
  11.  
  12.     oles[tamado]++
  13.     ezust[tamado] += 3
  14.     elet[tamado]++
  15.  
  16.     if (vippont[tamado])
  17.     {
  18.         ezust[tamado] += 2
  19.         xp[tamado] += 1
  20.     }
  21.  
  22.     if (vasarolt[tamado] == 3)
  23.     {
  24.         ezust[tamado] += 4
  25.         xp[tamado] += 4
  26.     }
  27.  
  28.     xp[tamado] += 3
  29.  
  30.     while (xp[tamado] >= 100)
  31.     {
  32.         xp[tamado] -= 100
  33.         szint[tamado]++
  34.     }
  35.  
  36.     new r = random_num(1,100)
  37.  
  38.     if (r <= 5) dobozt_kap(tamado)
  39.     else if (r <= 10) dollart_kap(tamado)
  40.     else if (r <= 15) gyemantot_kap(tamado)
  41.     else if (r <= 20) bambuszt_kap(tamado)
  42.     else if (r <= 25) tokot_kap(tamado)
  43.     else if (r <= 30) hogolyot_kap(tamado)
  44.  
  45.     return PLUGIN_CONTINUE
  46. }

Szerző:  ZOR [2026.01.20. 17:43 ]
Hozzászólás témája: 

Szia, Javítottam az alapján amit írtál, de nem változott meg. Szintén ment a teszt minden felől. Esetleg még valami ötlet? :D

Oldal: 1 / 1 Minden időpont UTC+01:00 időzóna szerinti
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/