hlmod.hu
https://hlmod.hu/

AFK menü. [V2.0]
https://hlmod.hu/viewtopic.php?f=24&t=26260
Oldal: 1 / 2

Szerző:  PikHácsúú# [ 2016.09.22. 17:53 ]
Hozzászólás témája:  AFK menü. [V2.0]

Sziasztok. :D

~Bevezető~
Régebben megcsináltam AFK Menüs pluginom, és igértem egy update-t rá. Mostanra eliskészült, kissé nehézkesen, de valahogy.
V1.0: AFK menü.
Ebben, menüből választhatjátok ki az AFK indokot!

V2.0 Ismertető:
- Te adod meg az indokot, teljesen korlátlanul!
- Nincs megszabva az indok hossza, tartalma!
- Korlátozott használat!

V 2.0 Lényege:
Mikor AFK-olni szeretnél, de épp választottál csapatot, és nem enged kilépni, esetleg csak szimplán AFK-olni szeretnél, beírod a 2 parancs közül valamelyiket.
/afk, /away

Megjelenik egy menü, ahol kiírja a státuszod.
Ha még nem írtál AFK indokot, akkor kiválasztod a menüpontot, és beírod az AFK indokot.
Mikor beírtad, 1 perces korlátozás lessz, így csak 1 perc múlva tudod újra használni az AFK plugint. (Név beírás, specator elhelyezés).

A pluginban a(z) 11. sorban tudjátok a prefixet állítani, amit a chatbe, vagy a képernyő közepére kiír.

Kód:
#define PREFIX "[www.hlmod.hu]"


A plugin valószínűleg, kisebb hibákat rejt, kérlek jellezzétek felém. :)


Compiler:
Welcome to the AMX Mod X 1.76-300 Compiler.
Copyright (c) 1997-2006 ITB CompuPhase, AMX Mod X Team

Header size: 948 bytes
Code size: 5544 bytes
Data size: 15048 bytes
Stack/heap size: 16384 bytes; estimated max. usage=1107 cells (4428 bytes)
Total requirements: 37924 bytes
Done.

Szerző:  LyleChriss [ 2016.09.22. 19:34 ]
Hozzászólás témája:  Re: AFK menü. [V2.0]

  1. indok[id] = szoveg

Szerintem ezt így kéne:
  1. copy(indok[id], charsmax(indok[]), szoveg)

Nem értéket adsz egy változónak (nem számot kértél be), hanem stringet másolsz egyikből a másikba.
Emellett:
  1. if(valaszt[id] == 0){
  2.         menu_additem(menu, "\dAFK Indok: \rNINCS", "0", 0)
  3.     }
  4.     else
  5.     {
  6.         format(cim, charsmax(cim), "\dAFK Indok: \r%s", indok[id])
  7.     }
  8.     menu_additem(menu, cim, "0", 0)

Két additem ugyan arra a menü infóra minek? Akkor legyen a felső is formatex, mert format helyett formatex illene oda.

Ezt nem is használod a menü handlerben:
  1. new name[33]
  2.     get_user_name(id, name, 31)


A valaszt[33] helyett szebb lenne bool:valaszt[33]
És akkor if-ben:
  1. if(!valaszt[id])

Ez ugyan az mint a valaszt[id] == 0.

  1. new data[9], szName[64];
  2.     new access, callback;
  3.     menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback);
  4.     new key = str_to_num(data);
  5.  
  6.     switch(key)
  7.     {
  8.         case 0:{
  9.             if(valaszt[id] == 0){
  10.                 client_cmd(id, "messagemode INDOK")
  11.                 user_silentkill(id)
  12.                 cs_set_user_team(id, CS_TEAM_SPECTATOR)
  13.                 valaszt[id] = 1,
  14.                 set_task(60.0, "ido", id)
  15.             }
  16.             else
  17.             {
  18.                 Away_K(id)
  19.                 client_print(id, print_center, "%s ~ 1 Percenkent AFK-olhatsz!", PREFIX)
  20.             }
  21.         }
  22.     }

Ez úgy komplennet kikerülhető. Egy, azaz 1 menüelem van, szóval nem szükséges lekérni, melyik az. Ha már nagyon le akarsz kérni valamit, akkor az item-et tedd a switch-be, így:
  1. public fk_handler(id, menu, item)
  2. {
  3.     switch(item)
  4.     {
  5.         case MENU_EXIT:{
  6.             menu_destroy(menu);
  7.             return PLUGIN_HANDLED;
  8.         }
  9.         case 0:{
  10.             if(!valaszt[id]){
  11.                 client_cmd(id, "messagemode INDOK")
  12.                 user_silentkill(id)
  13.                 cs_set_user_team(id, CS_TEAM_SPECTATOR)
  14.                 valaszt[id] = true
  15.                 set_task(60.0, "ido", id)
  16.             }
  17.             else
  18.             {
  19.                 Away_K(id)
  20.                 client_print(id, print_center, "%s ~ 1 Percenkent AFK-olhatsz!", PREFIX)
  21.             }
  22.         }
  23.     }
  24.     menu_destroy(menu)
  25.     return PLUGIN_HANDLED
  26. }

Ez így szebb. :)

Hirtelen ennyi kifogásom lenne. Meg helyesírásra figyelj a leírásban (magyarán javítsd).

Szerző:  6almasok [ 2016.09.22. 19:42 ]
Hozzászólás témája:  Re: AFK menü. [V2.0]

Unalom csodákra képes :) (Javaslom) frissíts erre
  1. #include <amxmodx>
  2. #include <cstrike>
  3.  
  4. #define PREFIX "[www.hlmod.hu]"
  5.  
  6. new indok[33][100], bool:valaszt[33]
  7.  
  8. new const g_szCommands[][] = { "say /afk", "say_team /afk", "say /away", "say_team /away" }
  9.  
  10. public plugin_init() {
  11.     register_plugin("AFK Kilepteto", "1.0", "PikHacsuu#")
  12.    
  13.     for(new i; i < sizeof(g_szCommands); i++)
  14.         register_clcmd(g_szCommands[i], "Away_K")
  15.        
  16.     register_clcmd("INDOK", "indokafk")
  17. }
  18. public Away_K(id) {
  19.     new cim[121]
  20.     new menu = menu_create("AFK Menu", "fk_handler")
  21.    
  22.     formatex(cim, charsmax(cim), "\dAFK Indok: \r%s", indok[id][0] == EOS ? "Nincs Megadva" : indok[id])
  23.     menu_additem(menu, cim, "0", 0)
  24.     if(indok[id][0] != EOS && !valaszt[id]) menu_additem(menu, "Kilepes SPEC-be!", "1", 0)
  25.    
  26.     menu_display(id, menu, 0);
  27. }
  28. public fk_handler(id, menu, item) {
  29.     if( item == MENU_EXIT ) {
  30.         menu_destroy(menu)
  31.         return PLUGIN_HANDLED
  32.     }
  33.     new szName[32];
  34.     get_user_name(id, szName, 31);
  35.    
  36.     switch(item)
  37.     {
  38.         case 0: client_cmd(id, "messagemode INDOK")
  39.         case 1: {
  40.             if(!valaszt[id]) {
  41.                 valaszt[id] = true
  42.                 user_kill(id)
  43.                 cs_set_user_team(id, CS_TEAM_SPECTATOR)
  44.                 set_task(60.0, "ido", id)
  45.                 client_print(0, print_chat, "%s ~ %s AFK-ol. Indok: %s", PREFIX, szName, indok[id])
  46.             }
  47.             else client_print(id, print_chat, "%s ~ 1 Percenkent AFK-olhatsz!", PREFIX)
  48.         }
  49.     }
  50.     Away_K(id)
  51.  
  52.     menu_destroy(menu)
  53.     return PLUGIN_HANDLED
  54. }
  55. public ido(id) {
  56.     valaszt[id] = false
  57.     indok[id][0] = EOS
  58.     client_print(id, print_chat, "%s ~ 1 Perc lejart. AFK Menu: Engedelyezve", PREFIX)
  59. }
  60. public indokafk(id) {
  61.     read_args(indok[id], 99)
  62.     remove_quotes(indok[id])
  63. }

Szerző:  LyleChriss [ 2016.09.22. 19:52 ]
Hozzászólás témája:  Re: AFK menü. [V2.0]

Így sose tanulja majd meg... :lol: :evil: :evil:
Meg foglak harapni! :lol:

Szerző:  6almasok [ 2016.09.22. 20:40 ]
Hozzászólás témája:  Re: AFK menü. [V2.0]

LyleChriss írta:
Így sose tanulja majd meg... :lol: :evil: :evil:
Meg foglak harapni! :lol:

Bocs főnök, majd olvasgatja 8-) :lol: (írtam fb :oops: )

Szerző:  PikHácsúú# [ 2016.09.23. 15:50 ]
Hozzászólás témája:  Re: AFK menü. [V2.0]

Javítva. :D. Csak azért csináltam LyleChris megoldását, mert úgy legalább tanulok is, és legközelebb odafigyelek rá. Viszont amit te írtál 6almasok, az a baj, hogy én nagyon nem értem a const-os változókat, meg a sizeof, ciklusokat. :C Bárhogy akarnám elkezdeni, nehéz lenne átszokni arra.

Szerző:  6almasok [ 2016.09.23. 16:19 ]
Hozzászólás témája:  Re: AFK menü. [V2.0]

Még pár dolog amit tanulhatsz:

1. Ha 1 menüpontod van vagy menu_additem-nél nincs "if" (pl. if(valami) menu_additem(menu, "ASD", "0", 0) ). Akkor a handler-be tök fölösleges lekérni a menu_item_getinfo-t. Lásd:
  1. new data[9], szName[64];
  2. new access, callback;
  3. menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback);
  4. new key = str_to_num(data);
  5. //EZ AZ EGÉSZ NEM KELL!

elég a switch-be az item szó is. (itt mondjuk LyleChriss-t ragozom de ha már nem kötelező akkor ne csináljuk)

2. Ezt minek kell hosszabban csinálni?
  1. new szoveg[32]
  2. read_args(szoveg, charsmax(szoveg))
  3. remove_quotes(szoveg)
  4. copy(indok[id], charsmax(indok[]), szoveg)

Miért nem kaphatja meg a szöveget egyből a tömb? Lásd a fenti kódban amit leírtam:
  1. read_args(indok[id], 99)
  2. remove_quotes(indok[id])


3. Minek használsz Colorchatet (include-ot) 1 mondathoz? Van 2 szöveg client_print-be az utolsó 1 meg colorchat-be...

Szerző:  PikHácsúú# [ 2016.09.23. 16:57 ]
Hozzászólás témája:  Re: AFK menü. [V2.0]

6almasok írta:
Még pár dolog amit tanulhatsz:

1. Ha 1 menüpontod van vagy menu_additem-nél nincs "if" (pl. if(valami) menu_additem(menu, "ASD", "0", 0) ). Akkor a handler-be tök fölösleges lekérni a menu_item_getinfo-t. Lásd:
  1. new data[9], szName[64];
  2. new access, callback;
  3. menu_item_getinfo(menu, item, access, data,charsmax(data), szName,charsmax(szName), callback);
  4. new key = str_to_num(data);
  5. //EZ AZ EGÉSZ NEM KELL!

elég a switch-be az item szó is. (itt mondjuk LyleChriss-t ragozom de ha már nem kötelező akkor ne csináljuk)

2. Ezt minek kell hosszabban csinálni?
  1. new szoveg[32]
  2. read_args(szoveg, charsmax(szoveg))
  3. remove_quotes(szoveg)
  4. copy(indok[id], charsmax(indok[]), szoveg)

Miért nem kaphatja meg a szöveget egyből a tömb? Lásd a fenti kódban amit leírtam:
  1. read_args(indok[id], 99)
  2. remove_quotes(indok[id])


3. Minek használsz Colorchatet (include-ot) 1 mondathoz? Van 2 szöveg client_print-be az utolsó 1 meg colorchat-be...


Javítva..

Szerző:  LyleChriss [ 2016.09.23. 17:10 ]
Hozzászólás témája:  Re: AFK menü. [V2.0]

Este kukába rakom. Ez nincs javítva. Gondolkozz még rajta egy picit.

Szerző:  PikHácsúú# [ 2016.09.23. 22:50 ]
Hozzászólás témája:  Re: AFK menü. [V2.0]

XDD Ahogy írtad úgy csináltam kukázzátok akkor. :,DD :lol: :lol:

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