hlmod.hu

Magyar Half-Life Mód közösség!
Pontos idő: 2024.03.28. 15:34



Jelenlévő felhasználók

Jelenleg 220 felhasználó van jelen :: 2 regisztrált, 0 rejtett és 218 vendég

A legtöbb felhasználó (1565 fő) 2020.11.21. 11:26-kor tartózkodott itt.

Regisztrált felhasználók: Bing [Bot], Google [Bot] az elmúlt 5 percben aktív felhasználók alapján

Utoljára aktív
Ahhoz hogy lásd ki volt utoljára aktív, be kell jelentkezned.



Az oldal teljeskörű
használatához regisztrálj.

Regisztráció

Kereső


Új téma nyitása  Hozzászólás a témához  [ 21 hozzászólás ]  Oldal 1 2 3 Következő
Szerző Üzenet
 Hozzászólás témája: Kés Rendszer v2
HozzászólásElküldve: 2016.01.03. 23:06 
Offline
Tiszteletbeli
Avatar

Csatlakozott: 2015.04.10. 19:49
Hozzászólások: 610
Megköszönt másnak: 53 alkalommal
Megköszönték neki: 147 alkalommal
Plugin Neve:
Kés Rendszer v2
Plugint készitette:
Akosch:.
Játék:
Counter-Strike
Kategória:
Szórakoztató
Eredeti link:
Nincs megadva
Jóváhagyó:


Kés Rendszer
v2.0.0 by Akosch:.


Mire is jó ez a plugin? Mivel jobb mint a többi hasonló?
Marha egyszerű szerkeszthetőséget nyújt, amellett hogy nem igényel semmilyen pawn -al kapcsolatos hozzáértést. A késeket egy külön fájlban tudod megírni / szerkeszteni, a szinteket / fejlődést szintúgy, illetve a boltot külső pluginnal tudod létrehozni ( amíg nincs legalább 1 áru leregisztrálva a boltba, addig meg se jelenik ) / bővíteni.

Használata, beállítások:
Először is tekintsünk a nyelvi fájlba, ez az alapja a betöltésnek, itt van lehetőségünk szerkeszteni, h mi milyen szavakat szeretnénk használni a kések képességeinek betöltéséhez.
Kód:
KEY1 = VMODEL
KEY2 = PMODEL
KEY3 = SEBESSEG
KEY4 = GRAVITACIO
KEY5 = SEBZES
KEY6 = VISSZALOKES
KEY7 = ELET
KEY8 = LATHATOSAG
KEY9 = SZINT

Innen szerintem mindenkinek egyértelmű, h melyik nyelvi kulcs melyik képességhez tartozó szót állítja.
Kések megadási formátuma a cstrike/addons/amxmodx/configs/knives.txt fájlban:

Kés neve szögletes zárójelek közt. ( [Késem Neve] ) Majd alatta a nyelvi fájlban megadott szavakkal a képességek beállítása, első a megadott szó majd egy egyenlőség jel aztán az érték. ( ELET = 55 ).

KEY1 ( VMODEL ): Itt adhatjuk meg a tulajdonos és a nézők számára látható model ( v_* ) elérési útját, kezdődően a models mappától, de amennyiben marha lusta vagy a "models/" részt pótolja a plugin, illetve a .mdl kiterjesztést is pótolja, ha véletlen lehagynád.

KEY2 ( PMODEL ): A többi játékos számára látható model ( p_* ), ugyanaz mint az előbbinél.

KEY3 ( SEBESSEG ): Itt adhatjuk meg, hogy milyen gyorsan tudjunk mozogni a késünkkel, nagyobb érték esetén szükséges lehet állítani az sv_maxspeed szerver cvaron, alapból tört érték, de amennyiben neked ez nem tetszik megadhatod egész számként is, a plugin pótolja. ( Alapérték: 250.0 )

KEY4 ( GRAVITACIO ): Itt adhatjuk meg, hogy a késsel mekkorát lehessen ugrani, alacsonyabb érték nagyobb ugrást jelent, nagyobb érték pedig kisebb ugrást, szintén alapból tört érték, de itt is elhagyható a tört rész. ( Alapérték: 800, ez a szerveren lévő alap is )

KEY5 ( SEBZES ): Itt adhatjuk meg, hogy az alap sebzéshez még mennyit kapjon, aki ezt a kést választja, ugyanúgy tört érték... ( Alapérték: 0.0, normál sebzés[ kicsi: 15, nagy: 65 ] )

KEY6 ( VISSZALOKES ): Itt adhatjuk meg, hogy a megsebzett ellenfelünket milyen erővel lökjük vissza ezzel a késsel, egész érték. ( Alapérték: 0, normál eset, nincs visszalökés )

KEY7 ( ELET ): Itt adhatjuk meg, hogy ezzel a késsel mennyi életet kapjon pluszba a játékos az adott mapon, plusz infó: 1hp-s és 35hp-s mapokon fixálja a plugin a hp bugokat a többin pedig 100 hp-t kapsz + amit a késed ad és a 256/0 hp-s bug is javítva. ( Alapérték: 0, alap kezdő élet )

KEY8 ( LATHATOSAG ): Itt adhatjuk meg, hogy mennyire legyen látható a játékosunk 0 - láthatatlan, 255 - teljesen látható. ( Alapérték: 255 )

KEY9 ( SZINT ): Itt adhatjuk meg, hogy hányas szinttől legyen elérhető a késünk. ( Alapérték: 0 )

Két példa:
Kód:
[ALAP]

Ez így létrehoz egy totál alap kést alap néven.

Kód:
[Szuper kés]
SEBESSEG = 500
GRAVITY = 400
LATHATOSAG = 127
SZINT = 200

Ez létrehoz egy kést amivel dupla olyan gyors vagy és dupla akkorát ugrasz + félig láthatatlan is vagy, mindez 200-as szinttől elérhető.

A fejlődés nehézségét is teljesen be tudjuk állítani a cvarok és a cstrike/addons/amxmodx/configs/levels.txt segítségével.

Levels.txt fájlban:
Van lehetőségünk egyesével megadni minden szinthez a szükséges tapasztalatot, de ebben a verzióban már megoldottam, h tudj megadni egy intervallumot ami közt fixen növeli a szükséges tapasztalatot a megadott értékkel.
Intervallum megadása:
Hányas szinttől, vessző, hányas szintig, három pont, mennyivel. ( x, y... z )
Példa:
Kód:
50
1, 50... 100
7500
52, 75... 150

Így 50 tapasztalat szükséges az első szinthez, majd a 2. -tól az 50. szintig folyamatosan nő ez a szám százzal, utána az 51 -es szinthez 7500 tapasztalat kell, majd az 52 -es szinttől a 75. szintig folyton nő ez a szám 150 -el.

Cvarok:
kill_msgs ( 0 - ki, 1 - csak a gyilkos, 2 - az áldozat is ) - Adjon-e chat üzenetet arról, h ki ölt meg és mit kaptál ezért.
kill_xp ( 0 - felfele ) - Mennyi tapasztalat járjon egy sima ölésért.
kill_point ( 0 - felfele ) - Mennyi pont járjon egy sima ölésért.
hs_xp ( 0 - felfele ) - Mennyi tapasztalat járjon egy fejes ölésért.
hs_point ( 0 - felfele ) - Mennyi pont járjon egy fejes ölésért.

A dinamikus tömböknek köszönhetően többé nincs szükségünk szórakozni a konstansokkal.

Mentés:
Alapból nvault mentést használ a plugin, de ha kivesszük a a kettő dőlt vonalat ennek a sornak az elejéről:
  1. //#define SQL

Akkor a megadott adatbázisba ment.
  1. new const g_sSQL_INFOS[ ][ ] =
  2. {
  3.     "127.0.0.1",
  4.     "USERNAME",
  5.     "PASSWORD",
  6.     "DATABASE",
  7. }


Mellék pluginok készítése, egyebek:

Mivel az egész plugin szinte újraírtam gondoltam most már készítek hozzá bővíthetőségi lehetőséget, csináltam többi forwardot és native -t, ezek részletesebben le vannak írva a .inc kiterjesztésű fájlban, csak a boltra térnék ki, egy példával:

  1. #include < amxmodx >
  2. #include < fun >
  3. #include < KnifeSystem >
  4.  
  5. new g_iAruId;
  6.  
  7. public plugin_init()
  8. {
  9.     register_plugin( "[KS]Bolt", "1.0.0", "Akosch:." );
  10.    
  11.     g_iAruId = ks_register_item( "+50hp", "fnBolt", 75 ); // Az áru neve a menüben "+50hp" lesz, és 75 pontba fog kerülni.
  12. }
  13.  
  14. public fnBolt( iJatekosId, iAruId ) // A függvény ami meghívódik, ha valaki megvette az árut ( public kulcsszó kötelező! ).
  15. {
  16.     if ( g_iAruId == iAruId ) // Ez az ellenörzés elhanyagolható, ha csak 1 árut regisztrálsz le egy függvényhez.
  17.     {
  18.         set_user_health( iJatekosId, get_user_health( iJatekosId ) + 50 ); // Megadjuk a pénzéért ami jár.
  19.         client_print_color( iJatekosId, iJatekosId, "Vettél +50hp-t!" );
  20.     }
  21. }

Majd ha lesz úgy időm lehet csinálok 1 - 2 ilyen egyszerűbb plugint ehhez, de ha más is szeretne hozzá készíteni és esetleg elakadna vagy hiányzik neki valami funkció, segítség kéne bátran keressen.

A szerver prefix ebben a sorban módosítható:
  1. new const g_sPREFIX[ ] = "[A:.]";


A pont addolás menühöz szükséges jog itt módosítható:
  1. const g_iADD_FLAG = ADMIN_CVAR;


Színezéseken a nyelvi fájlban tudsz módosítani; igen a chates színezéseken is az 1.8.3-as amxmodx -nek köszönhetően.

Információk!
1.8.3 -as amxmodx szükséges a pluginhoz!!!
- Nem szükséges minden képesség megadása, amennyiben valamit kihagysz az alapérték érvényesül.
- A nyelvi fájlban megadott szavakat ( KEY* -nél ) használhatod kis és nagy betűs változatban is a knives.txt fájlban.
- A modelek mindenképp legyenek a megadott helyükön! ( Ha lehagyod a "models/" részt akkor is ott legyen )
- Ha hiányzik a levels.txt vagy a knives.txt vagy probléma adódik a mentésben akkor dob egy hibaüzenetet.
- Ha helytelenül adod meg a szintekhez szükséges tapasztalatot, akkor futás közbeni hibát fog dobni ( runtime error ).
- Direkt mellékeltem üres fájlokat, nem véletlen készítettem ilyenre a plugint.
- Ha találnál valamilyen hibát, akkor azt jelezd itt, pm-ben esetleg nyiss vele témát és javítjuk!


Mivel jobb az előzőhöz képest:
Egyszerűbb, átláthatóbb kés és szint beállítás.
Teljes mértékben testreszabható bolt.
Több nyelvű menü, chat üzenetek.
Ismert hibák, bugok javításra kerültek.
Optimalizáltabb kód.

AMX Mod X Compiler 1.8.3-dev+4976
Copyright (c) 1997-2006 ITB CompuPhase
Copyright (c) 2004-2013 AMX Mod X Team

Header size: 2960 bytes
Code size: 32868 bytes
Data size: 11244 bytes
Stack/heap size: 16384 bytes
Total requirements: 63456 bytes
Done.

Megj.: Új fordító figyelmeztetést dobhat, h client_disconnected helyett még a régi client_disconnect forwardot használtam, de ez nem jelent problémát, mivel nem client_connect -nél töltök be.

Tesztelve csak localon volt, de nem találtam hibát, ha megfelelően állítottam be.


SMA
AMXX
Tömörített fájl
*A fordítás a aghl.ru oldalon történik.

    _________________
    Néha itt, de többször nem.

    Ők köszönték meg Akosch:. nek ezt a hozzászólást (összesen 5): kiki (2016.01.06. 17:47) • LyleChriss (2016.01.08. 19:38) • FonoK (2016.01.24. 00:36) • kengurumancs (2016.01.25. 18:39) • kid.buu^ (2016.01.26. 22:12)
      Népszerűség: 11.36%


    Hozzászólás jelentése
    Vissza a tetejére
       
     Hozzászólás témája: Re: Kés Rendszer v2
    HozzászólásElküldve: 2016.01.03. 23:35 
    Offline
    Tag
    Avatar

    Csatlakozott: 2015.12.29. 21:29
    Hozzászólások: 40
    Megköszönt másnak: 4 alkalommal
    Megköszönték neki: 3 alkalommal
    Grat Nagyon szep forraskod :)

    _________________
    1. new const PLUGIN[] = "";
    2. new const VERSION[] = "1.0";
    3. new const AUTHOR[] = "CoCo";


    Hozzászólás jelentése
    Vissza a tetejére
       
     Hozzászólás témája: Re: Kés Rendszer v2
    HozzászólásElküldve: 2016.01.03. 23:57 
    Offline
    Tiszteletbeli
    Avatar

    Csatlakozott: 2015.04.10. 19:49
    Hozzászólások: 610
    Megköszönt másnak: 53 alkalommal
    Megköszönték neki: 147 alkalommal
    Egyenlőre kérném, hogy ne hagyjátok jóvá, hátha valaki unalmában csinál más nyelvre fordítást ( vagy az angolon javít xd ), vagy kipróbálja szerveren és jön elő probléma. + Ha lenne ötlet egyes kódrészletek javítására / plugin bővítésére akkor várom az ötleteket.

    _________________
    Néha itt, de többször nem.


    Hozzászólás jelentése
    Vissza a tetejére
       
     Hozzászólás témája: Re: Kés Rendszer v2
    HozzászólásElküldve: 2016.01.04. 14:36 
    Offline
    Tiszteletbeli
    Avatar

    Csatlakozott: 2014.03.07. 14:55
    Hozzászólások: 939
    Megköszönt másnak: 38 alkalommal
    Megköszönték neki: 95 alkalommal
    Egyenlőre nem is tud senki sem jóváhagyni,ezt úgy mellékesen leirom :)

    _________________
    Hmm.
    Kép


    Hozzászólás jelentése
    Vissza a tetejére
       
     Hozzászólás témája: Re: Kés Rendszer v2
    HozzászólásElküldve: 2016.01.04. 17:59 
    Offline
    Nagyúr
    Avatar

    Csatlakozott: 2014.11.16. 12:37
    Hozzászólások: 686
    Megköszönt másnak: 32 alkalommal
    Megköszönték neki: 131 alkalommal
    3 fajta fordítón is kipróbáltam ;)
    Kód:
    asd.sma(45) : error 017: undefined symbol "MAX_PLAYERS"
    asd.sma(45) : error 009: invalid array size (negative or zero)
    asd.sma(46) : error 017: undefined symbol "MAX_PLAYERS"
    asd.sma(58) : error 017: undefined symbol "Ham_CS_Player_ResetMaxSpeed"
    asd.sma(58) : warning 215: expression has no effect
    asd.sma(58) : warning 215: expression has no effect
    asd.sma(58) : warning 215: expression has no effect
    asd.sma(58) : warning 215: expression has no effect
    asd.sma(58) : error 001: expected token: ";", but found ")"
    asd.sma(58) : error 029: invalid expression, assumed zero
    asd.sma(58) : fatal error 107: too many error messages on one line

    Compilation aborted.
    7 Errors.
    Could not locate output file asd.amx (compile failed).

    _________________
    Kép
    "I wouldn't hold my breath if I was you
    Cause I'll forget but I'll never forgive you
    Don't you know, don't you know?
    True friends stab you in the front."


    Hozzászólás jelentése
    Vissza a tetejére
       
     Hozzászólás témája: Re: Kés Rendszer v2
    HozzászólásElküldve: 2016.01.04. 18:02 
    Offline
    Tiszteletbeli
    Avatar

    Csatlakozott: 2015.04.10. 19:49
    Hozzászólások: 610
    Megköszönt másnak: 53 alkalommal
    Megköszönték neki: 147 alkalommal
    Lehet nem tartottál ki a leírás végéig, ott leírtam + látni a fordítón, h 1.8.3-as amxmodxhez írtam.

    "1.8.3 -as amxmodx szükséges a pluginhoz!"
    "AMX Mod X Compiler 1.8.3-dev+4976"

    _________________
    Néha itt, de többször nem.


    Hozzászólás jelentése
    Vissza a tetejére
       
     Hozzászólás témája: Re: Kés Rendszer v2
    HozzászólásElküldve: 2016.01.06. 17:43 
    Offline
    Nagyúr
    Avatar

    Csatlakozott: 2014.11.16. 12:37
    Hozzászólások: 686
    Megköszönt másnak: 32 alkalommal
    Megköszönték neki: 131 alkalommal
    Akosch:. írta:
    Lehet nem tartottál ki a leírás végéig, ott leírtam + látni a fordítón, h 1.8.3-as amxmodxhez írtam.

    "1.8.3 -as amxmodx szükséges a pluginhoz!"
    "AMX Mod X Compiler 1.8.3-dev+4976"


    Hát igen egy ilyen fajta Ákos féle leírásnál örülök ha a feléig eljutok :D

    _________________
    Kép
    "I wouldn't hold my breath if I was you
    Cause I'll forget but I'll never forgive you
    Don't you know, don't you know?
    True friends stab you in the front."


    Hozzászólás jelentése
    Vissza a tetejére
       
     Hozzászólás témája: Re: Kés Rendszer v2
    HozzászólásElküldve: 2016.01.06. 22:26 
    Offline
    Tiszteletbeli
    Avatar

    Csatlakozott: 2014.09.08. 22:21
    Hozzászólások: 3014
    Megköszönt másnak: 96 alkalommal
    Megköszönték neki: 555 alkalommal
    Mivel jóváhagyás nélkül nem látják, így elfogadom és szólsz ha van valami :D

    _________________
    GitHub - mforce

    Ők köszönték meg mforce nek ezt a hozzászólást: Akosch:. (2016.01.07. 17:26)
      Népszerűség: 2.27%


    Hozzászólás jelentése
    Vissza a tetejére
       
     Hozzászólás témája: Re: Kés Rendszer v2
    HozzászólásElküldve: 2016.01.07. 17:23 
    Offline
    Tiszteletbeli
    Avatar

    Csatlakozott: 2015.04.10. 19:49
    Hozzászólások: 610
    Megköszönt másnak: 53 alkalommal
    Megköszönték neki: 147 alkalommal
    v2.0.1
    bind_pcvar_num, strtok2 és ArrayGetStringHandle bevezetése.

    v2.1.0
    új funkciók:
    - ks_add_xp konzol parancs tapasztalat addoláshoz
    - mostantól a plugin kiolvassa a map nevéből, hogy mennyi a kezdő hp -> a map nevében a "hp" szó előtt kell lennie a számnak amit kezdő életnek akarunk
    - új, stabilabb számítás a visszalökéshez

    új nativek:
    - ks_set_player_info - az adott játékos infó értékét állíthatjuk vele
    - ks_register_item_callback - lehetőséget ad egy áruhoz tartozó callback létrehozására, teljesen testreszabható az árunk a boltban

    native bővítés:
    - ks_register_item - új, 4. paraméter, ha joghoz szeretnénk kötni az áru megvételét

    optimalizálások:
    - egyszerűbb betöltés
    - fun és fakemeta modul kivéve
    - egyszerűbb ciklusok a játékosok kilistázásához menübe ( nem kell fölösleges változókat létrehozni, native -t hívni )
    - pár függvény átgondolva

    sma:
    1. /* Plugin generated by AMXX-Studio
    2.  
    3. Changelog
    4.     v1.0.0 - Alap ötlet megvalósítása, macerás használat, kisebb hibák.
    5.  
    6.     v2.0.0 - Egész plugin újraírva, gondolva: jobb kelezhetőség, új mentés, bővíthető mellékpluginokkal.
    7.         v2.0.1 - Kisebb optimalizálások.
    8.         v2.1.0 - Pár dolog újra gondolva, fakemeta / fun modul feleslegessé vált, kivéve.
    9. */
    10.  
    11. #include < amxmisc >
    12. #include < amxmodx >
    13. #include < engine >
    14. #include < hamsandwich >
    15.  
    16. #define IS_PLAYER(%0) ( 0 < ( %0 ) < MaxClients )
    17. //#define SQL
    18.  
    19. #if defined SQL
    20.     #include < sqlx >
    21.     new const g_sSQL_INFOS[ ][ ] =
    22.     {
    23.         "127.0.0.1",
    24.         "USERNAME",
    25.         "PASSWORD",
    26.         "DATABASE"
    27.     }
    28.     new Handle:g_iSqlTuple;
    29. #else
    30.     #include < nvault >
    31.     new const g_sNVAULTNAME[ ] = "PlayerDatas";
    32.     new g_iNvaultId;
    33. #endif
    34.  
    35. enum _:ePlayerInfos
    36. {
    37.     iPlayerLvl,
    38.     iPlayerXp,
    39.     iPlayerPoints,
    40.     iPlayerSelected
    41. };
    42.  
    43. new const g_sPLUGIN[ ] = "KnifeSystem";
    44. new const g_sVERSION[ ] = "2.1.0";
    45. new const g_sAUTHOR[ ] = "Akosch:.";
    46. new const g_sPREFIX[ ] = "[A:.]";
    47.  
    48. const g_iADD_FLAG = ADMIN_CVAR;
    49.  
    50. new Array:g_daKnives[ 10 ], Array:g_daLevels, Array:g_daItemName, Array:g_daItemAccess;
    51. new Array:g_daItemCallback, Array:g_daItemFuncId, Array:g_daItemPluginId, Array:g_daItemCost;
    52. new g_iPlayerInfos[ MAX_PLAYERS + 1 ][ ePlayerInfos ], g_iTarget[ MAX_PLAYERS + 1 ];
    53. new g_sPlayerName[ MAX_PLAYERS + 1 ][ MAX_NAME_LENGTH ], g_iForwards[ 3 ];
    54. new g_iCvarKillMsgs, g_iCvarKillPts, g_iCvarKillXp, g_iCvarHsPts, g_iCvarHsXp;
    55. new g_iPlayerConnected, Float:g_fMap = 100.00;
    56.  
    57. public plugin_natives( )
    58. {
    59.     register_native( "ks_register_item", "@naRegItem" );
    60.     register_native( "ks_register_item_callback", "@naRegItemCallback" );
    61.     register_native( "ks_set_player_info", "@naSetPlayerInfo" );
    62.     register_native( "ks_get_player_info", "@naGetPlayerInfo" );
    63.     register_native( "ks_get_knife_info", "@naGetKnifeInfo" );
    64.     register_native( "ks_get_max_level", "@naGetMaxLvl" );
    65. }
    66.  
    67. public plugin_init( )
    68. {
    69.     RegisterHam( Ham_CS_Player_ResetMaxSpeed, "player", "@fwResetMaxSpeedPost", 1, true );
    70.     RegisterHam( Ham_TakeDamage, "player", "@fwTakeDamage", 0, true );
    71.     RegisterHam( Ham_Item_Deploy, "weapon_knife", "@fwWeaponKnifePost", 1, true );
    72.     RegisterHam( Ham_Spawn, "player", "@fwPlayerSpawnPost", 1, true );
    73.  
    74.     register_message( get_user_msgid( "Health" ), "@evHealthPre" );
    75.  
    76.     register_event( "DeathMsg", "@evDeathPost", "a" );
    77.  
    78.     register_clcmd( "drop", "@fnShowMenu" );
    79.     register_clcmd( "say /menu", "@fnShowMenu" );
    80.     register_clcmd( "GIFT", "@fnGiftHandler" );
    81.     register_clcmd( "ADD", "@fnAddHandler" );
    82.  
    83.     register_concmd( "ks_add_xp", "@fnAddXp", g_iADD_FLAG, "< targetname > < xp to add >" );
    84.  
    85.     g_iForwards[ 0 ] = CreateMultiForward( "ks_level_up", ET_IGNORE, FP_CELL, FP_CELL );
    86.     g_iForwards[ 1 ] = CreateMultiForward( "ks_max_lvl_reached", ET_IGNORE, FP_CELL );
    87.     g_iForwards[ 2 ] = CreateMultiForward( "ks_knife_selected", ET_IGNORE, FP_CELL, FP_CELL );
    88.  
    89.     bind_pcvar_num( register_cvar( "kill_msgs", "0" ), g_iCvarKillMsgs );
    90.     bind_pcvar_num( register_cvar( "kill_xp", "1" ), g_iCvarKillXp );
    91.     bind_pcvar_num( register_cvar( "kill_point", "1" ), g_iCvarKillPts );
    92.     bind_pcvar_num( register_cvar( "hs_xp", "3" ), g_iCvarHsXp );
    93.     bind_pcvar_num( register_cvar( "hs_point", "2" ), g_iCvarHsPts );
    94.  
    95.     new sMapName[ 32 ];
    96.     get_mapname( sMapName, charsmax( sMapName ) );
    97.  
    98.     if ( replace( sMapName, charsmax( sMapName ), "hp", "^0" ) )
    99.         g_fMap = str_to_float( sMapName );
    100.  
    101. #if defined SQL
    102.     g_iSqlTuple = SQL_MakeDbTuple( g_sSQL_INFOS[ 0 ], g_sSQL_INFOS[ 1 ], g_sSQL_INFOS[ 2 ], g_sSQL_INFOS[ 3 ] );
    103.  
    104.     new sThread[ 256 ];
    105.     formatex( sThread, charsmax( sThread ), "CREATE TABLE IF NOT EXISTS `KnifeSystem` (`SteamId` varchar( 32 ) NOT NULL, `Level` INT( 11 ) NOT NULL, `Xp` INT( 11 ) NOT NULL, `Points` INT( 11 ) NOT NULL, `Selected` INT( 11 ) NOT NULL, `id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY )" );
    106.  
    107.     SQL_ThreadQuery( g_iSqlTuple, "@fnThreadHandler", sThread );
    108. #else
    109.     g_iNvaultId = nvault_open( g_sNVAULTNAME );
    110.  
    111.     if ( g_iNvaultId == INVALID_HANDLE )
    112.         set_fail_state( "%L", LANG_SERVER, "INVALIDNVAULTID" )
    113. #endif
    114. }
    115.  
    116. public plugin_precache( )
    117. {
    118.     register_dictionary( "KnifeSystem.txt" );
    119.     register_plugin( g_sPLUGIN, g_sVERSION, g_sAUTHOR );
    120.  
    121.     g_daKnives[ 0 ] = ArrayCreate( 32 );
    122.     g_daKnives[ 1 ] = ArrayCreate( 32 );
    123.     g_daKnives[ 2 ] = ArrayCreate( 32 );
    124.     g_daKnives[ 3 ] = ArrayCreate( 1 );
    125.     g_daKnives[ 4 ] = ArrayCreate( 1 );
    126.     g_daKnives[ 5 ] = ArrayCreate( 1 );
    127.     g_daKnives[ 6 ] = ArrayCreate( 1 );
    128.     g_daKnives[ 7 ] = ArrayCreate( 1 );
    129.     g_daKnives[ 8 ] = ArrayCreate( 1 );
    130.     g_daKnives[ 9 ] = ArrayCreate( 1 );
    131.  
    132.     g_daItemName = ArrayCreate( 32 );
    133.     g_daItemPluginId = ArrayCreate( 1 );
    134.     g_daItemFuncId = ArrayCreate( 1 );
    135.     g_daItemCost = ArrayCreate( 1 );
    136.     g_daItemAccess = ArrayCreate( 1 );
    137.     g_daItemCallback = ArrayCreate( 1 );
    138.  
    139.     g_daLevels = ArrayCreate( 1 );
    140.  
    141.     new sBuffer[ 128 ], sFile[ 64 ], pFile;
    142.     get_localinfo( "amxx_configsdir", sFile, charsmax( sFile ) );
    143.     add( sFile, charsmax( sFile ), "/knives.txt" );
    144.  
    145.     pFile = fopen( sFile, "rt" );
    146.  
    147.     if ( pFile )
    148.     {
    149.         new sKey[ 64 ], sValue[ 64 ], sKEYS[ sizeof ( g_daKnives ) ][ 32 ];
    150.         new iSize, iSize2, i;
    151.         new const sDefValues[ ][ ] =
    152.         {
    153.             { "models/v_knife.mdl" }, { "models/p_knife.mdl" }
    154.         };
    155.         new const Float:fDefValues[ ] = { 250.00, 1.00, 0.00, 0.00, 0.00 };
    156.         new const iDefValues[ ] = { 255, 0 };
    157.  
    158.         for ( i = 1; i < sizeof ( sKEYS ); ++i )
    159.         {
    160.             formatex( sKEYS[ i ], charsmax( sKEYS[ ] ), "KEY%i", i );
    161.             formatex( sKEYS[ i ], charsmax( sKEYS[ ] ), "%L", LANG_SERVER, sKEYS[ i ] );
    162.         }
    163.        
    164.         while ( !feof( pFile ) )
    165.         {
    166.             fgets( pFile, sBuffer, charsmax( sBuffer ) );
    167.             trim( sBuffer );
    168.            
    169.             if ( sBuffer[ 0 ] == '/' || sBuffer[ 0 ] == ';' || !sBuffer[ 0 ] )
    170.                 continue;
    171.            
    172.             if ( sBuffer[ 0 ] == '[' )
    173.             {
    174.                 iSize = ArraySize( g_daKnives[ 0 ] );
    175.        
    176.                 for ( i = 1; i < sizeof ( g_daKnives ); ++i )
    177.                 {
    178.                     iSize2 = ArraySize( g_daKnives[ i ] );
    179.                    
    180.                     if ( iSize2 < iSize )
    181.                         if ( 0 < i < 3 )
    182.                             ArrayPushString( g_daKnives[ i ], sDefValues[ i - 1 ] );
    183.                         else if ( 2 < i < 8 )
    184.                             ArrayPushCell( g_daKnives[ i ], fDefValues[ i - 3 ] );
    185.                         else
    186.                             ArrayPushCell( g_daKnives[ i ], iDefValues[ i - 8 ] );
    187.                     else if ( iSize2 > iSize )
    188.                         ArrayDeleteItem( g_daKnives[ i ], --iSize2 );
    189.                 }
    190.  
    191.                 sBuffer[ strlen( sBuffer ) - 1 ] = EOS;
    192.                 ArrayPushString( g_daKnives[ 0 ], sBuffer[ 1 ] );
    193.                 continue;
    194.             }
    195.            
    196.             strtok2( sBuffer, sKey, charsmax( sKey ), sValue, charsmax( sValue ), '=', TRIM_FULL );
    197.            
    198.             for ( new i; i < sizeof ( g_daKnives ); ++i )
    199.                 if ( equali( sKEYS[ i ], sKey ) )
    200.                     switch ( i )
    201.                     {
    202.                         case 1, 2: fnArrayPushModel( sValue, charsmax( sValue ), i );
    203.                         case 4: ArrayPushCell( g_daKnives[ i ], ( str_to_float( sValue ) / 800.00 ) );
    204.                         case 8, 9: ArrayPushCell( g_daKnives[ i ], str_to_num( sValue ) );
    205.                         default: ArrayPushCell( g_daKnives[ i ], str_to_float( sValue ) );
    206.                     }
    207.         }
    208.  
    209.         fclose( pFile );
    210.         iSize = ArraySize( g_daKnives[ 0 ] );
    211.  
    212.         for ( i = 1; i < sizeof ( g_daKnives ); ++i )
    213.             {
    214.                 iSize2 = ArraySize( g_daKnives[ i ] );
    215.                
    216.                 if ( iSize2 < iSize )
    217.                     if ( 0 < i < 3 )
    218.                         ArrayPushString( g_daKnives[ i ], sDefValues[ i - 1 ] );
    219.                     else if ( 2 < i < 8 )
    220.                         ArrayPushCell( g_daKnives[ i ], fDefValues[ i - 3 ] );
    221.                     else
    222.                         ArrayPushCell( g_daKnives[ i ], iDefValues[ i - 8 ] );
    223.                 else if ( iSize2 > iSize )
    224.                     ArrayDeleteItem( g_daKnives[ i ], iSize2 - 1 );
    225.             }
    226.     }
    227.     else
    228.     {
    229.         format( sFile, charsmax( sFile ), "%L", LANG_SERVER, "MISSINGFILE", sFile );
    230.         set_fail_state( sFile );
    231.     }
    232.  
    233.     get_localinfo( "amxx_configsdir", sFile, charsmax( sFile ) );
    234.     add( sFile, charsmax( sFile ), "/levels.txt" );
    235.  
    236.     pFile = fopen( sFile, "rt" );
    237.  
    238.     if ( pFile )
    239.     {
    240.         new sData[ 3 ][ 16 ], iNum, iFrom, iTo, iWith, iSize;
    241.  
    242.         while ( !feof( pFile ) )
    243.         {
    244.             fgets( pFile, sBuffer, charsmax( sBuffer ) );
    245.             replace( sBuffer, charsmax( sBuffer ), "^n", "" );
    246.             remove_quotes( sBuffer );
    247.  
    248.             if ( is_str_num( sBuffer ) )
    249.                 ArrayPushCell( g_daLevels, str_to_num( sBuffer ) );
    250.             else
    251.             {
    252.                 replace( sBuffer, charsmax( sBuffer ), "...", " " );
    253.                 replace( sBuffer, charsmax( sBuffer ), ",", " " );
    254.                 parse( sBuffer, sData[ 0 ], charsmax( sData[ ] ), sData[ 1 ], charsmax( sData[ ] ), sData[ 2 ], charsmax( sData[ ] ) );
    255.  
    256.                 iFrom = str_to_num( sData[ 0 ] );
    257.                 iTo = str_to_num( sData[ 1 ] );
    258.                 iWith = str_to_num( sData[ 2 ] );
    259.                 iSize = ArraySize( g_daLevels );
    260.  
    261.                 if ( iFrom > iSize )
    262.                     iFrom = iSize;
    263.  
    264.                 iNum = ArrayGetCell( g_daLevels, iFrom - 1 );
    265.  
    266.                 for ( new i = iFrom; i <= iTo; ++i )
    267.                     ArrayPushCell( g_daLevels, iNum += iWith );
    268.             }
    269.         }
    270.         fclose( pFile );
    271.     }
    272.     else
    273.     {
    274.         format( sFile, charsmax( sFile ), "%L", LANG_SERVER, "MISSINGFILE", sFile );
    275.         set_fail_state( sFile );
    276.     }
    277. }
    278.  
    279. @naRegItem( iPluginId, iParamNum )
    280. {
    281.     new sItemName[ 32 ], sItemFunc[ 32 ], iCost;
    282.    
    283.     get_string( 1, sItemName, charsmax( sItemName ) );
    284.     get_string( 2, sItemFunc, charsmax( sItemFunc ) );
    285.     iCost = get_param( 3 );
    286.  
    287.     if ( iCost < 0 )
    288.         iCost = 0;
    289.  
    290.     ArrayPushString( g_daItemName, sItemName );
    291.     ArrayPushCell( g_daItemPluginId, iPluginId );
    292.     ArrayPushCell( g_daItemFuncId, get_func_id( sItemFunc, iPluginId ) );
    293.     ArrayPushCell( g_daItemCost, iCost );
    294.     ArrayPushCell( g_daItemAccess, get_param( 4 ) );
    295.     ArrayPushCell( g_daItemCallback, -1 );
    296.  
    297.     return ( ArraySize( g_daItemCost ) - 1 );
    298. }
    299.  
    300. @naRegItemCallback( iPluginId, iParamNum )
    301. {
    302.     new iItemId = get_param( 1 );
    303.  
    304.     if ( ArraySize( g_daItemCallback ) > iItemId )
    305.     {
    306.         ArraySetCell( g_daItemCallback, iItemId, get_param( 2 ) );
    307.        
    308.         return 1;
    309.     }
    310.  
    311.     return 0;
    312. }
    313.  
    314. @naGetKnifeInfo( iPluginId, iParamNum )
    315.     if ( 2 < iParamNum < 5 )
    316.     {
    317.         new sKnifeInfo[ 32 ];
    318.         ArrayGetString( g_daKnives[ get_param( 1 ) ], get_param( 2 ), sKnifeInfo, charsmax( sKnifeInfo ) );
    319.         set_string( 3, sKnifeInfo, get_param( 4 ) );
    320.         return 1;
    321.     }
    322.     else
    323.         return ArrayGetCell( g_daKnives[ get_param( 1 ) ], get_param( 2 ) );
    324.  
    325. @naGetPlayerInfo( iPluginId, iParamNum )
    326.     return g_iPlayerInfos[ get_param( 1 ) ][ get_param( 2 ) ];
    327.  
    328. @naGetMaxLvl( iPluginId, iParamNum )
    329.     return ( ArraySize( g_daLevels ) - 1 );
    330.  
    331. @naSetPlayerInfo( iPluginId, iParamNum )
    332.     g_iPlayerInfos[ get_param( 1 ) ][ get_param( 2 ) ] = get_param( 3 );
    333.  
    334. @fwTakeDamage( iVictim, iInflictor, iAttacker, Float:fDamage, iDmgBits )
    335.     if ( IS_PLAYER( iAttacker ) && iAttacker != iVictim && get_user_weapon( iAttacker ) == CSW_KNIFE )
    336.     {
    337.         fDamage += Float:ArrayGetCell( g_daKnives[ 5 ], g_iPlayerInfos[ iAttacker ][ iPlayerSelected ] );
    338.        
    339.         SetHamParamFloat( 4, fDamage );
    340.        
    341.         new Float:fKB = Float:ArrayGetCell( g_daKnives[ 6 ], g_iPlayerInfos[ iAttacker ][ iPlayerSelected ] );
    342.        
    343.         if ( fKB )
    344.             fnCreateKnockback( iVictim, iAttacker, fKB + fDamage );
    345.     }
    346.  
    347. @fwWeaponKnifePost( iEnt )
    348. {
    349.     new iOwner = entity_get_edict( iEnt, EV_ENT_owner );
    350.    
    351.     if ( iOwner )
    352.     {
    353.         new sModels[ 32 ];
    354.         ArrayGetString( g_daKnives[ 1 ], g_iPlayerInfos[ iOwner ][ iPlayerSelected ], sModels, charsmax( sModels ) );
    355.         entity_set_string( iOwner, EV_SZ_viewmodel, sModels );
    356.         ArrayGetString( g_daKnives[ 2 ], g_iPlayerInfos[ iOwner ][ iPlayerSelected ], sModels, charsmax( sModels ) );
    357.         entity_set_string( iOwner, EV_SZ_weaponmodel, sModels );
    358.     }
    359. }
    360.  
    361. @fwPlayerSpawnPost( iPlayerId )
    362.     if ( is_user_alive( iPlayerId ) )
    363.         switch ( g_fMap )
    364.         {
    365.             case 1.0: set_task( 2.5, "@fnSpawnSettings", iPlayerId );
    366.             case 35.0: set_task( 2.0, "@fnSpawnSettings", iPlayerId );
    367.             default: @fnSpawnSettings( iPlayerId );
    368.         }
    369.  
    370. @fwResetMaxSpeedPost( iPlayerId )
    371.     if ( is_user_alive( iPlayerId ) && entity_get_float( iPlayerId, EV_FL_maxspeed ) > 1.0 )
    372.         entity_set_float( iPlayerId, EV_FL_maxspeed, Float:ArrayGetCell( g_daKnives[ 3 ], g_iPlayerInfos[ iPlayerId ][ iPlayerSelected ] ) );
    373.  
    374. //Bugfix
    375. @fnSpawnSettings( iPlayerId )
    376. {
    377.     entity_set_float( iPlayerId, EV_FL_health, g_fMap + Float:ArrayGetCell( g_daKnives[ 7 ], g_iPlayerInfos[ iPlayerId ][ iPlayerSelected ] ) );
    378.  
    379.     set_rendering( iPlayerId, kRenderFxGlowShell ,0, 0, 0, kRenderTransAlpha, ArrayGetCell( g_daKnives[ 8 ], g_iPlayerInfos[ iPlayerId ][ iPlayerSelected ] ) );
    380.  
    381.     entity_set_float( iPlayerId, EV_FL_gravity, Float:ArrayGetCell( g_daKnives[ 4 ], g_iPlayerInfos[ iPlayerId ][ iPlayerSelected ] ) );
    382. }
    383.  
    384. // Bugfix
    385. @evHealthPre( iMsgId, iMsgDest, iMsgEnt )
    386. {
    387.     new iHp = get_msg_arg_int( 1 );
    388.     if ( iHp > 256 )
    389.     {
    390.         if ( iHp % 256 == 0 )
    391.             iHp > 0 ? entity_set_float( iMsgEnt, EV_FL_health, entity_get_float( iMsgEnt, EV_FL_health ) + 1.0 ) : user_kill( iMsgEnt );
    392.  
    393.         set_msg_arg_int( 1, get_msg_argtype( 1 ), 255 );
    394.     }
    395. }
    396.  
    397. @evDeathPost( )
    398. {
    399.     new iKiller = read_data( 1 );
    400.  
    401.     if ( IS_PLAYER( iKiller ) && g_iPlayerConnected & ( 1 << ( iKiller & 31 ) ) )
    402.     {
    403.         new iVictim = read_data( 2 );
    404.         new iHs = read_data( 3 );
    405.         new iXp, iPoint;
    406.  
    407.         iXp = iHs ? g_iCvarHsXp : g_iCvarKillXp;
    408.         iPoint = iHs ? g_iCvarHsPts : g_iCvarKillPts;
    409.  
    410.         g_iPlayerInfos[ iKiller ][ iPlayerXp ] += iXp;
    411.         g_iPlayerInfos[ iKiller ][ iPlayerPoints ] += iPoint;
    412.  
    413.         switch ( g_iCvarKillMsgs )
    414.         {
    415.             case 1: client_print_color( iKiller, iKiller, "%L", LANG_SERVER, "KILLMSGKILLER", g_sPlayerName[ iVictim ], iXp, iPoint );
    416.             case 2:
    417.             {
    418.                 client_print_color( iKiller, iKiller, "%L", LANG_SERVER, "KILLMSGKILLER", g_sPlayerName[ iVictim ], iXp, iPoint );
    419.                 client_print_color( iVictim, iVictim, "%L", LANG_SERVER, "KILLMSGVICTIM", g_sPlayerName[ iKiller ] );
    420.             }
    421.         }
    422.     }
    423.     fnCheckLevel( iKiller );
    424. }
    425.  
    426. @fnShowMenu( iPlayerId )
    427.     fnMainMenu( iPlayerId, 0 );
    428.  
    429. fnMainMenu( iPlayerId, iMenu )
    430. {
    431.     new sMenu[ 78 ], sInfo[ 16 ], iMenuId;
    432.    
    433.     switch ( iMenu )
    434.     {
    435.         case 0:
    436.         {
    437.             formatex( sMenu, charsmax( sMenu ), "%L", LANG_SERVER, "MENU0", g_iPlayerInfos[ iPlayerId ][ iPlayerLvl ], g_iPlayerInfos[ iPlayerId ][ iPlayerXp ], ArrayGetCell( g_daLevels, g_iPlayerInfos[ iPlayerId ][ iPlayerLvl ] ), g_iPlayerInfos[ iPlayerId ][ iPlayerPoints ]  );
    438.             iMenuId = menu_create( sMenu, "@fnMenuHandler" );
    439.            
    440.             if ( ArraySize( g_daKnives[ 0 ] ) )
    441.             {
    442.                 formatex( sMenu, charsmax( sMenu ), "%L", LANG_SERVER, "KNIFEMENU" );
    443.                 menu_additem( iMenuId, sMenu, "1 0" );
    444.             }
    445.             formatex( sMenu, charsmax( sMenu ), "%L", LANG_SERVER, "GIFTINGMENU" );
    446.             menu_additem( iMenuId, sMenu, "2 0" );
    447.             if ( ArraySize( g_daItemCost ) )
    448.             {
    449.                 formatex( sMenu, charsmax( sMenu ), "%L", LANG_SERVER, "SHOPMENU" );
    450.                 menu_additem( iMenuId, sMenu, "3 0" );
    451.             }
    452.             formatex( sMenu, charsmax( sMenu ), "%L", LANG_SERVER, "PLAYERSMENU" );
    453.             menu_additem( iMenuId, sMenu, "4 0" );
    454.             formatex( sMenu, charsmax( sMenu ), "%L", LANG_SERVER, "ADDINGMENU" );
    455.             menu_additem( iMenuId, sMenu, "5 0", g_iADD_FLAG );
    456.         }
    457.         case 1:
    458.         {
    459.             formatex( sMenu, charsmax( sMenu ), "%L", LANG_SERVER, "MENU1", g_iPlayerInfos[ iPlayerId ][ iPlayerLvl ], g_iPlayerInfos[ iPlayerId ][ iPlayerXp ], ArrayGetCell( g_daLevels, g_iPlayerInfos[ iPlayerId ][ iPlayerLvl ] ) );
    460.             iMenuId = menu_create( sMenu, "@fnMenuHandler" );
    461.  
    462.             new iSize = ArraySize( g_daKnives[ 0 ] );
    463.             for ( new i; i < iSize; ++i )
    464.             {
    465.                 formatex( sMenu, charsmax( sMenu ), "%L", LANG_SERVER, "KNIVES", ArrayGetStringHandle( g_daKnives[ 0 ], i ), ArrayGetCell( g_daKnives[ 9 ], i ) );
    466.                 formatex( sInfo, charsmax( sInfo ), "%i 1", i );
    467.                 menu_additem( iMenuId, sMenu, sInfo );
    468.             }
    469.         }
    470.         case 2:
    471.         {
    472.             formatex( sMenu, charsmax( sMenu ), "%L", LANG_SERVER, "MENU2", g_iPlayerInfos[ iPlayerId ][ iPlayerPoints ]  );
    473.             iMenuId = menu_create( sMenu, "@fnMenuHandler" );
    474.  
    475.             for ( new i; i < MaxClients; ++i )
    476.                 if ( g_iPlayerConnected & ( 1 << ( i & 31 ) ) && iPlayerId != i )
    477.                 {
    478.                     formatex( sInfo, charsmax( sInfo ), "%i 2", i );
    479.                     menu_additem( iMenuId, g_sPlayerName[ i ], sInfo );
    480.                 }
    481.         }
    482.         case 3:
    483.         {
    484.             formatex( sMenu, charsmax( sMenu ), "%L", LANG_SERVER, "MENU3", g_iPlayerInfos[ iPlayerId ][ iPlayerPoints ]  );
    485.             iMenuId = menu_create( sMenu, "@fnMenuHandler" );
    486.  
    487.             new iSize = ArraySize( g_daItemCost );
    488.             for ( new i; i < iSize; ++i )
    489.             {
    490.                 ArrayGetString( g_daItemName, i, sMenu, charsmax( sMenu ) );
    491.                 formatex( sInfo, charsmax( sInfo ), "%i 3", i );
    492.                 menu_additem( iMenuId, sMenu, sInfo, ArrayGetCell( g_daItemAccess, i ), ArrayGetCell( g_daItemCallback, i ) );
    493.             }
    494.         }
    495.         case 4:
    496.         {
    497.             formatex( sMenu, charsmax( sMenu ), "%L", LANG_SERVER, "MENU4", g_iPlayerInfos[ iPlayerId ][ iPlayerLvl ], g_iPlayerInfos[ iPlayerId ][ iPlayerXp ], ArrayGetCell( g_daLevels, g_iPlayerInfos[ iPlayerId ][ iPlayerLvl ] ), g_iPlayerInfos[ iPlayerId ][ iPlayerPoints ]  );
    498.             iMenuId = menu_create( sMenu, "@fnMenuHandler" );
    499.  
    500.             for ( new i; i < MaxClients; ++i )
    501.                 if ( g_iPlayerConnected & ( 1 << ( i & 31 ) ) && iPlayerId != i )
    502.                 {
    503.                     formatex( sMenu, charsmax( sMenu ), "%L", LANG_SERVER, "PLAYERINMENU", g_sPlayerName[ i ], g_iPlayerInfos[ i ][ iPlayerLvl ], g_iPlayerInfos[ i ][ iPlayerXp ], ArrayGetCell( g_daLevels, g_iPlayerInfos[ i ][ iPlayerLvl ] ), g_iPlayerInfos[ i ][ iPlayerPoints ] );
    504.                     formatex( sInfo, charsmax( sInfo ), "%i 4", i );
    505.                     menu_additem( iMenuId, sMenu, sInfo );
    506.                 }
    507.         }
    508.         case 5:
    509.         {
    510.             formatex( sMenu, charsmax( sMenu ), "%L", LANG_SERVER, "MENU5" );
    511.             iMenuId = menu_create( sMenu, "@fnMenuHandler" );
    512.  
    513.             for ( new i; i < MaxClients; ++i )
    514.                 if ( g_iPlayerConnected & ( 1 << ( i & 31 ) ) )
    515.                 {
    516.                     formatex( sInfo, charsmax( sInfo ), "%i 5", i );
    517.                     menu_additem( iMenuId, g_sPlayerName[ i ], sInfo );
    518.                 }
    519.         }
    520.     }
    521.     menu_display( iPlayerId, iMenuId, 0 );
    522. }
    523.  
    524. @fnMenuHandler( iPlayerId, iMenuId, iItem )
    525. {
    526.     if ( iItem != MENU_EXIT )
    527.     {
    528.         new sMenuName[ 78 ], sInfo[ 32 ], sDatas[ 2 ][ 16 ], iKey, iMenuNum;
    529.         menu_item_getinfo( iMenuId, iItem, iKey, sInfo, charsmax( sInfo ), sMenuName, charsmax( sMenuName ), iMenuNum );
    530.         parse( sInfo, sDatas[ 0 ], charsmax( sDatas[ ] ), sDatas[ 1 ], charsmax( sDatas[ ] ) );
    531.         iKey = str_to_num( sDatas[ 0 ] );
    532.         iMenuNum = str_to_num( sDatas[ 1 ] );
    533.  
    534.         switch ( iMenuNum )
    535.         {
    536.             case 0:
    537.             {
    538.                 fnMainMenu( iPlayerId, iKey );
    539.             }
    540.             case 1:
    541.             {
    542.                 if ( g_iPlayerInfos[ iPlayerId ][ iPlayerLvl ] >= ArrayGetCell( g_daKnives[ 9 ], iKey ) )
    543.                 {
    544.                     new iRet;
    545.                     g_iPlayerInfos[ iPlayerId ][ iPlayerSelected ] = iKey;
    546.                     ExecuteForward( g_iForwards[ 2 ], iRet, iPlayerId, g_iPlayerInfos[ iPlayerId ][ iPlayerSelected ] );
    547.  
    548.                     if ( get_user_weapon( iPlayerId ) == CSW_KNIFE )
    549.                     {
    550.                         ArrayGetString( g_daKnives[ 1 ], g_iPlayerInfos[ iPlayerId ][ iPlayerSelected ], sMenuName, charsmax( sMenuName ) );
    551.                         entity_set_string( iPlayerId, EV_SZ_viewmodel, sMenuName );
    552.  
    553.                         ArrayGetString( g_daKnives[ 2 ], g_iPlayerInfos[ iPlayerId ][ iPlayerSelected ], sMenuName, charsmax( sMenuName ) );
    554.                         entity_set_string( iPlayerId, EV_SZ_weaponmodel, sMenuName );
    555.                     }
    556.  
    557.                     set_rendering( iPlayerId, kRenderFxGlowShell ,0, 0, 0, kRenderTransAlpha, ArrayGetCell( g_daKnives[ 8 ], g_iPlayerInfos[ iPlayerId ][ iPlayerSelected ] ) );
    558.  
    559.                     entity_set_float( iPlayerId, EV_FL_gravity, Float:ArrayGetCell( g_daKnives[ 4 ], g_iPlayerInfos[ iPlayerId ][ iPlayerSelected ] ) );
    560.  
    561.                     if ( entity_get_float( iPlayerId, EV_FL_maxspeed ) > 1.0 )
    562.                         entity_set_float( iPlayerId, EV_FL_maxspeed, Float:ArrayGetCell( g_daKnives[ 3 ], g_iPlayerInfos[ iPlayerId ][ iPlayerSelected ] ) );
    563.                 }
    564.                 else
    565.                     client_print_color( iPlayerId, iPlayerId, "%L", LANG_SERVER, "NOTENOUGHLVL", g_sPREFIX );
    566.             }
    567.             case 2:
    568.             {
    569.                 if ( g_iPlayerConnected & ( 1 << ( iKey & 31 ) ) )
    570.                 {
    571.                     g_iTarget[ iPlayerId ] = iKey;
    572.                     client_cmd( iPlayerId, "messagemode GIFT" );
    573.                 }
    574.                 else
    575.                 {
    576.                     client_print_color( iPlayerId, iPlayerId, "%L", LANG_SERVER, "TARGETDISCONNECTED", g_sPREFIX );
    577.                     fnMainMenu( iPlayerId, 2 );
    578.                 }
    579.             }
    580.             case 3:
    581.             {
    582.                 if ( g_iPlayerInfos[ iPlayerId ][ iPlayerPoints ] >= ArrayGetCell( g_daItemCost, iKey ) )
    583.                 {
    584.                     g_iPlayerInfos[ iPlayerId ][ iPlayerPoints ] -= ArrayGetCell( g_daItemCost, iKey );
    585.  
    586.                     callfunc_begin_i( ArrayGetCell( g_daItemFuncId, iKey ), ArrayGetCell( g_daItemPluginId, iKey ) );
    587.                     callfunc_push_int( iPlayerId );
    588.                     callfunc_push_int( iKey );
    589.                     callfunc_end( );
    590.  
    591.                     client_print_color( iPlayerId, iPlayerId, "%L", LANG_SERVER, "SUCCPURCHASE", g_sPREFIX, ArrayGetStringHandle( g_daItemName, iKey ) );
    592.                 }
    593.                 else
    594.                     client_print_color( iPlayerId, iPlayerId, "%L", LANG_SERVER, "UNSUCCPURCHASE", g_sPREFIX );
    595.             }
    596.             case 4:
    597.             {
    598.                 if ( g_iPlayerConnected & ( 1 << ( iKey & 31 ) ) )
    599.                     client_print_color( iPlayerId, iPlayerId, "%L", LANG_SERVER, "PLAYERINMENU", g_sPlayerName[ iKey ], g_iPlayerInfos[ iKey ][ iPlayerLvl ], g_iPlayerInfos[ iKey ][ iPlayerXp ], ArrayGetCell( g_daLevels, g_iPlayerInfos[ iKey ][ iPlayerLvl ] ) );
    600.                 else
    601.                 {
    602.                     client_print_color( iPlayerId, iPlayerId, "%L", LANG_SERVER, "TARGETDISCONNECTED", g_sPREFIX );
    603.                     fnMainMenu( iPlayerId, 4 );
    604.                 }
    605.             }
    606.             case 5:
    607.             {
    608.                 if ( g_iPlayerConnected & ( 1 << ( iKey & 31 ) ) )
    609.                 {
    610.                     g_iTarget[ iPlayerId ] = iKey;
    611.                     client_cmd( iPlayerId, "messagemode ADD" );
    612.                 }
    613.                 else
    614.                 {
    615.                     client_print_color( iPlayerId, iPlayerId, "%L", LANG_SERVER, "TARGETDISCONNECTED", g_sPREFIX );
    616.                     fnMainMenu( iPlayerId, 5 );
    617.                 }
    618.             }
    619.         }
    620.     }
    621.     menu_destroy( iMenuId );
    622.     return PLUGIN_HANDLED;
    623. }
    624.  
    625. @fnGiftHandler( iPlayerId )
    626. {
    627.     new sData[ 191 ], iNum;
    628.     read_args( sData, charsmax( sData ) );
    629.     remove_quotes( sData );
    630.    
    631.     if ( is_str_num( sData ) )
    632.     {
    633.         iNum = str_to_num( sData );
    634.        
    635.         if ( g_iPlayerInfos[ iPlayerId ][ iPlayerPoints ] >= iNum )
    636.         {
    637.             g_iPlayerInfos[ g_iTarget[ iPlayerId ] ][ iPlayerPoints ] += iNum;
    638.             g_iPlayerInfos[ iPlayerId ][ iPlayerPoints ] -= iNum;
    639.             client_print_color( iPlayerId, iPlayerId, "%L", LANG_SERVER, "SUCCGIFTING", g_sPREFIX, g_sPlayerName[ g_iTarget [ iPlayerId ] ], iNum );
    640.             client_print_color( g_iTarget[ iPlayerId ], g_iTarget[ iPlayerId ], "%L", LANG_SERVER, "GETPOINTS", g_sPREFIX, iNum, g_sPlayerName[ iPlayerId ] );
    641.         }
    642.         else
    643.             client_print_color( iPlayerId, iPlayerId, "%L", LANG_SERVER, "NOTENOUGHPOINT", g_sPREFIX );
    644.     }
    645.     else
    646.     {
    647.         client_print_color( iPlayerId, iPlayerId, "%L", LANG_SERVER, "INVALIDVALUE", g_sPREFIX );
    648.         client_cmd( iPlayerId, "messagemode GIFT" );
    649.     }
    650. }
    651.  
    652. @fnAddHandler( iPlayerId )
    653. {
    654.     new sData[ 191 ], iNum;
    655.     read_args( sData, charsmax( sData ) );
    656.     remove_quotes( sData );
    657.    
    658.     if ( is_str_num( sData ) )
    659.     {
    660.         iNum = str_to_num( sData );
    661.        
    662.         g_iPlayerInfos[ g_iTarget[ iPlayerId ] ][ iPlayerPoints ] += iNum;
    663.         client_print_color( 0, print_team_default, "%L", LANG_SERVER, "ADDTEXT", g_sPREFIX, g_sPlayerName[ iPlayerId ], g_sPlayerName[ g_iTarget[ iPlayerId ] ], iNum );
    664.     }
    665.     else
    666.     {
    667.         client_print_color( iPlayerId, iPlayerId, "%L", LANG_SERVER, "INVALIDVALUE", g_sPREFIX );
    668.         client_cmd( iPlayerId, "messagemode ADD" );
    669.     }
    670. }
    671.  
    672. @fnAddXp( iPlayerId, iAdminLevel, iCommandId )
    673.     if ( cmd_access( iPlayerId, iAdminLevel, iCommandId, 2 ) )
    674.     {
    675.         new sArg[ 32 ], sXp[ 11 ];
    676.         read_argv( 1, sArg, charsmax( sArg ) );
    677.         read_argv( 2, sXp, charsmax( sXp ) );
    678.        
    679.         new iTarget = cmd_target( iPlayerId, sArg, CMDTARGET_ALLOW_SELF | CMDTARGET_NO_BOTS );
    680.  
    681.         g_iPlayerInfos[ iTarget ][ iPlayerXp ] += str_to_num( sXp );
    682.        
    683.         fnCheckLevel( iTarget );
    684.     }
    685.  
    686. public client_infochanged( iPlayerId )
    687. {
    688.     new sNewName[ 32 ];
    689.     get_user_info( iPlayerId, "name", sNewName, charsmax( sNewName ) );
    690.    
    691.     if ( !equal( g_sPlayerName[ iPlayerId ], sNewName ) )
    692.     {
    693.         g_sPlayerName[ iPlayerId ][ 0 ] = EOS;
    694.         copy( g_sPlayerName[ iPlayerId ], charsmax( g_sPlayerName[ ] ), sNewName );
    695.     }
    696. }
    697.  
    698. public client_authorized( iPlayerId, const sSteamId[ ] )
    699.     if ( sSteamId[ 0 ] != 'B' ) // If client is a bot, then sSteamId equal with "BOT"
    700.     {
    701.         g_iPlayerConnected |= ( 1 << ( iPlayerId & 31 ) )
    702.         get_user_name( iPlayerId, g_sPlayerName[ iPlayerId ], charsmax( g_sPlayerName[ ] ) );
    703.         fnLoadPlayerDatas( iPlayerId, sSteamId );
    704.     }
    705.  
    706. public client_disconnect( iPlayerId )
    707.     if ( !is_user_bot( iPlayerId ) )
    708.     {
    709.         new sSteamId[ 32 ];
    710.         get_user_authid( iPlayerId, sSteamId, charsmax( sSteamId ) );
    711.         g_iPlayerConnected &= ~( 1 << ( iPlayerId & 31 ) )
    712.         #if defined SQL
    713.         fnSavePlayerDatas( iPlayerId, sSteamId, 0 );
    714.         #else
    715.         fnSavePlayerDatas( iPlayerId, sSteamId );
    716.         #endif
    717.     }
    718.  
    719. #if defined SQL
    720.  
    721. fnLoadPlayerDatas( iPlayerId, const sSteamId[ ] )
    722. {
    723.     static sText[ 128 ], iArray[ 1 ];
    724.     iArray[ 0 ] = iPlayerId;
    725.  
    726.     formatex( sText, charsmax( sText ), "SELECT * FROM `KnifeSystem` WHERE SteamId = ^"%s^"", sSteamId );
    727.     SQL_ThreadQuery( g_iSqlTuple, "@fnThreadHandler", sText, iArray, sizeof ( iArray ) );
    728. }
    729.  
    730. fnSavePlayerDatas( iPlayerId, const sSteamId[ ], iMode )
    731. {
    732.     static sText[ 512 ];
    733.  
    734.     if ( iMode )
    735.         formatex( sText, charsmax( sText ), "INSERT INTO `KnifeSystem` ( `SteamId`,`Level`,`Xp`,`Points`,`Selected` ) VALUES ( ^"%s^", ^"0^", ^"0^", ^"0^", ^"0^" )", sSteamId );
    736.     else
    737.         formatex( sText, charsmax( sText ), "UPDATE `KnifeSystem` SET Level = ^"%i^" Xp = ^"%i^" Points = ^"%i^" Selected = ^"%i^" WHERE SteamId = ^"%s^"", g_iPlayerInfos[ iPlayerId ][ iPlayerLvl ], g_iPlayerInfos[ iPlayerId ][ iPlayerXp ], g_iPlayerInfos[ iPlayerId ][ iPlayerPoints ], g_iPlayerInfos[ iPlayerId ][ iPlayerSelected ], sSteamId );
    738.    
    739.     SQL_ThreadQuery( g_iSqlTuple, "@fnThreadHandler", sText );
    740. }
    741.  
    742. @fnThreadHandler( iFailState, Handle:iQuery, const sErrorMsg[ ], iErrorCode, const iARRAY[ ], iArraySize, Float:fQueueTime )
    743. {
    744.     new sText[ 128 ];
    745.     if ( iFailState == TQUERY_CONNECT_FAILED )
    746.     {
    747.         formatex( sText, charsmax( sText ), "%L", LANG_SERVER, "TQUERY_CONNECT_FAILED" );
    748.         set_fail_state( sText );
    749.         return;
    750.     }
    751.     else if ( iFailState == TQUERY_QUERY_FAILED )
    752.     {
    753.         formatex( sText, charsmax( sText ), "%L", LANG_SERVER, "TQUERY_QUERY_FAILED" );
    754.         set_fail_state( sText );
    755.         return;
    756.     }
    757.  
    758.     if ( iErrorCode )
    759.     {
    760.         log_amx( "%i - %s", iErrorCode, sErrorMsg );
    761.         return;
    762.     }
    763.  
    764.     if ( iArraySize )
    765.     {
    766.         new iPlayerId = iARRAY[ 0 ];
    767.    
    768.         if ( iPlayerId )
    769.             if ( SQL_NumResults( iQuery ) > 0 )
    770.             {
    771.                 g_iPlayerInfos[ iPlayerId ][ iPlayerSelected ] = SQL_ReadResult( iQuery, SQL_FieldNameToNum( iQuery, "Selected" ) );
    772.                 g_iPlayerInfos[ iPlayerId ][ iPlayerPoints ] = SQL_ReadResult( iQuery, SQL_FieldNameToNum( iQuery, "Points" ) );
    773.                 g_iPlayerInfos[ iPlayerId ][ iPlayerLvl ] = SQL_ReadResult( iQuery, SQL_FieldNameToNum( iQuery, "Level" ) );
    774.                 g_iPlayerInfos[ iPlayerId ][ iPlayerXp ] = SQL_ReadResult( iQuery, SQL_FieldNameToNum( iQuery, "Xp" ) );
    775.             }
    776.             else
    777.             {
    778.                 new sSteamId[ 32 ];
    779.                 arrayset( g_iPlayerInfos[ iPlayerId ], 0, sizeof ( g_iPlayerInfos[ ] ) );
    780.                 get_user_authid( iPlayerId, sSteamId, charsmax( sSteamId ) );
    781.                 fnSavePlayerDatas( iPlayerId, sSteamId, 1 );
    782.             }
    783.     }
    784.  
    785.     return;
    786. }
    787.  
    788. #else
    789.  
    790. fnLoadPlayerDatas( iPlayerId, const sSteamId[ ] )
    791. {
    792.     new sData[ 51 ];
    793.  
    794.     if ( nvault_get( g_iNvaultId, sSteamId, sData, charsmax( sData ) ) )
    795.     {
    796.         new sLevel[ 11 ], sXp[ 11 ], sPoints[ 11 ], sSelected[ 11 ];
    797.         parse( sData, sLevel, charsmax( sLevel ), sXp, charsmax( sXp ), sPoints, charsmax( sPoints ), sSelected, charsmax( sSelected ) );
    798.         g_iPlayerInfos[ iPlayerId ][ iPlayerLvl ] = str_to_num( sLevel );
    799.         g_iPlayerInfos[ iPlayerId ][ iPlayerXp ] = str_to_num( sXp );
    800.         g_iPlayerInfos[ iPlayerId ][ iPlayerPoints ] = str_to_num( sPoints );
    801.         g_iPlayerInfos[ iPlayerId ][ iPlayerSelected ] = str_to_num( sSelected );
    802.     }
    803.     else
    804.         arrayset( g_iPlayerInfos[ iPlayerId ], 0, sizeof ( g_iPlayerInfos[ ] ) );
    805. }
    806.  
    807. fnSavePlayerDatas( iPlayerId, const sSteamId[ ] )
    808. {
    809.     new sData[ 51 ];
    810.  
    811.     formatex( sData, charsmax( sData ), " %i %i %i %i ", g_iPlayerInfos[ iPlayerId ][ iPlayerLvl ], g_iPlayerInfos[ iPlayerId ][ iPlayerXp ], g_iPlayerInfos[ iPlayerId ][ iPlayerPoints ], g_iPlayerInfos[ iPlayerId ][ iPlayerSelected ] );
    812.     nvault_set( g_iNvaultId, sSteamId, sData );
    813. }
    814.  
    815. #endif
    816.  
    817. fnArrayPushModel( sMdl[ ], iMdl, iArrayId )
    818. {
    819.     if ( !equal( sMdl, "models/", 7 ) )
    820.         format( sMdl, iMdl, "models/%s", sMdl );
    821.    
    822.     if ( !equal( sMdl[ strlen( sMdl ) - 4 ], ".mdl", 4 ) )
    823.         add( sMdl, iMdl, ".mdl" );
    824.  
    825.     precache_model( sMdl );
    826.     ArrayPushString( g_daKnives[ iArrayId ], sMdl );
    827. }
    828.  
    829. fnCheckLevel( iPlayerId )
    830. {
    831.     new iMax = ArraySize( g_daLevels ) - 1;
    832.     if ( g_iPlayerInfos[ iPlayerId ][ iPlayerLvl ] < iMax )
    833.     {
    834.         new iRet;
    835.         while ( g_iPlayerInfos[ iPlayerId ][ iPlayerXp ] >= ArrayGetCell( g_daLevels, g_iPlayerInfos[ iPlayerId ][ iPlayerLvl ] ) )
    836.         {
    837.             ++g_iPlayerInfos[ iPlayerId ][ iPlayerLvl ];
    838.             ExecuteForward( g_iForwards[ 0 ], iRet, iPlayerId, g_iPlayerInfos[ iPlayerId ][ iPlayerLvl ] );
    839.            
    840.             if ( g_iPlayerInfos[ iPlayerId ][ iPlayerLvl ] == iMax )
    841.             {
    842.                 ExecuteForward( g_iForwards[ 1 ], iRet, iPlayerId );
    843.                 break;
    844.             }
    845.         }
    846.     }
    847. }
    848.  
    849. // Credits to ConnorMcLeod ( conorr )
    850. fnCreateKnockback( iVictim, iAttacker, Float:fKB )
    851. {
    852.     new Float:fVictimO[ 3 ], Float:fAttackerO[ 3 ], Float:fVictimV[ 3 ], Float:fValue;
    853.     entity_get_vector( iVictim, EV_VEC_origin, fVictimO );
    854.     entity_get_vector( iAttacker, EV_VEC_origin, fAttackerO );
    855.  
    856.     fVictimO[ 0 ] -= fAttackerO[ 0 ];
    857.     fVictimO[ 1 ] -= fAttackerO[ 1 ];
    858.     fVictimO[ 2 ] -= fAttackerO[ 2 ];
    859.  
    860.     fValue = 1.0 / floatsqroot( fVictimO[0] * fVictimO[0] + fVictimO[1] * fVictimO[1] + fVictimO[2] * fVictimO[2] );
    861.     fVictimO[ 0 ] *= fValue;
    862.     fVictimO[ 1 ] *= fValue;
    863.     fVictimO[ 2 ] *= fValue;
    864.  
    865.     entity_get_vector( iVictim, EV_VEC_velocity, fVictimV );
    866.  
    867.     fVictimO[ 0 ] *= fKB
    868.     fVictimO[ 1 ] *= fKB
    869.     fVictimO[ 2 ] *= fKB
    870.  
    871.     fVictimV[ 0 ] += fVictimO[ 0 ];
    872.     fVictimV[ 1 ] += fVictimO[ 1 ];
    873.     fVictimV[ 2 ] += fVictimO[ 2 ];
    874.  
    875.     entity_set_vector( iVictim, EV_VEC_velocity, fVictimV );
    876. }
    877. //
    878.  
    879. public plugin_end( )
    880. {
    881.     for ( new i; i < sizeof ( g_daKnives ); ++i )
    882.         ArrayDestroy( g_daKnives[ i ] );
    883.  
    884.     ArrayDestroy( g_daItemCost );
    885.     ArrayDestroy( g_daItemAccess );
    886.     ArrayDestroy( g_daItemCallback );
    887.     ArrayDestroy( g_daItemFuncId );
    888.     ArrayDestroy( g_daItemName );
    889.     ArrayDestroy( g_daItemPluginId );
    890.    
    891.     ArrayDestroy( g_daLevels );
    892.  
    893. #if defined SQL
    894.     SQL_FreeHandle( g_iSqlTuple );
    895. #else
    896.     nvault_close( g_iNvaultId );
    897. #endif
    898. }


    inc
    1. /* Header generated by AMXX-Studio*/
    2.  
    3. #if defined _KnifeSystem_included
    4.     #endinput
    5. #endif
    6. #define _KnifeSystem_included
    7.  
    8. enum _:eKnifeDatas
    9. {
    10.     sName,
    11.     sVModel,
    12.     sPModel,
    13.     fSpeed,
    14.     fGravity,
    15.     fDamage,
    16.     fKnockback, // Változás! int -> float
    17.     fHealth,    // Változás! int -> float
    18.     iVisibly,
    19.     iLevel
    20. }
    21.  
    22. enum _:ePlayerInfo
    23. {
    24.     iPlayerLvl,
    25.     iPlayerXp,
    26.     iPlayerPoints,
    27.     iPlayerSelected
    28. };
    29.  
    30. native ks_get_max_level( );
    31.  
    32. native ks_set_player_info( iPlayerId, iPlayerInfo, iValue );
    33.  
    34. native ks_get_player_info( iPlayerId, iPlayerInfo );
    35.  
    36. native ks_get_knife_info( iKnifeInfo, iKnifeId, any:... );
    37.  
    38. native ks_register_item( const sItemName[ ], const sItemFunction[ ], iCost, iAccess = 0 );
    39.  
    40. native ks_register_item_callback( iItemId, iCallbackId );
    41.  
    42. forward ks_level_up( iPlayerId, iPlayerNewLvl );
    43.  
    44. forward ks_max_lvl_reached( iPlayerId );
    45.  
    46. forward ks_knife_selected( iPlayerId, iKnifeId );


    txt
    Kód:
    [en]
    KEY1 = VMODEL
    KEY2 = PMODEL
    KEY3 = SPEED
    KEY4 = GRAVITY
    KEY5 = DAMAGE
    KEY6 = KNOCKBACK
    KEY7 = HEALTH
    KEY8 = VISIBLY
    KEY9 = LEVEL
    MENU0 = Mainmenu^nLevel: %i Xp: %i/%i Points: %i
    MENU1 = Knifemenu^nLevel: %i Xp: %i/%i
    MENU2 = Giftingmenu^nPoints: %i
    MENU3 = Shop^nPoints: %i
    MENU4 = Players^nLevel %i Xp: %i / %i Points: %i
    MENU5 = Adding
    KNIFEMENU = Knives
    GIFTINGMENU = Gifting
    SHOPMENU = Shop
    PLAYERSMENU = Players
    ADDINGMENU = Adding
    KNIVES = %a [Level:%i]
    NOTENOUGHLVL = ^4%s^1Sorry, you don't have enough level for this^4!
    TARGETDISCONNECTED = ^4%s^1Sorry, your target have already disconnected^4!
    SUCCPURCHASE = ^4%s ^1You bought succesfull: ^3%a^4!
    UNSUCCPURCHASE = ^4%s ^1Unsuccessfull purchase, you don't have enough point^4!
    PLAYERINMENU = %s [Lvl:%i][Xp:%i/%i][P:%i]
    INVALIDVALUE = ^4%s^1You gave an invalid value, please try again^4!
    ADDTEXT = ^4%s^3%s ^1added to ^3%s ^3%i ^1point ^4!
    NOTENOUGHPOINT = ^4%s ^1You don't have enough point^4!
    SUCCGIFTING = ^4%s^1You gave successfull ^3%i ^1point to ^3%s^4!
    GETPOINTS = ^4%s ^1You got ^3%i ^1point from ^3%s^4!
    KILLMSGKILLER = ^4%s ^1For %s's killing you received ^3%i ^1xp and ^3%i ^1point^4!
    KILLMSGVICTIM = ^4%s ^3%s ^1killed you^4!
    INVALIDNVAULTID = Invalid nvault id!
    TQUERY_CONNECT_FAILED = Connection fail!
    TQUERY_QUERY_FAILED = Query fail!
    MISSINGFILE = Missing file! ( %s )

    [hu]
    KEY1 = VMODEL
    KEY2 = PMODEL
    KEY3 = SEBESSEG
    KEY4 = GRAVITACIO
    KEY5 = SEBZES
    KEY6 = VISSZALOKES
    KEY7 = ELET
    KEY8 = LATHATOSAG
    KEY9 = SZINT
    MENU0 = Főmenü^nSzint: %i Tp: %i/%i Pontok: %i
    MENU1 = Késmenü^nSzint: %i Tp: %i/%i
    MENU2 = Ajándékozásmenü^nPontok: %i
    MENU3 = Bolt^nPontok: %i
    MENU4 = Játékosok^nSzint: %i Tp: %i / %i Pontok: %i
    MENU5 = Addolás
    KNIFEMENU = Kések
    GIFTINGMENU = Ajándékozás
    SHOPMENU = Bolt
    PLAYERSMENU = Játékosok
    ADDINGMENU = Addolás
    KNIVES = %a [Szint:%i]
    NOTENOUGHLVL = ^4%s ^1Sajnáljuk, nincs elég szinted ehhez^4!
    TARGETDISCONNECTED = ^4%s ^1Sajnáljuk, a célpontod már lecsatlakozott^4!
    SUCCPURCHASE = ^4%s^1Sikeresen megvásároltad: ^3%a^4!
    UNSUCCPURCHASE = ^4%s^1Sikertelen vásárlás, nincs elég pontod^4!
    PLAYERINMENU = %s [Szint:%i][Tp:%i/%i][P:%i]
    INVALIDVALUE = ^4%s ^1Érvénytelen értéket adtál meg, próbáld újra^4!
    ADDTEXT = ^4%s ^3%s ^1addolt ^3%s ^1-nak ^3%i pontot^4!
    NOTENOUGHPOINT = ^4%s ^1Nincs elég pontod^4!
    SUCCGIFTING = ^4%s^1Sikeresen adtál ^3 %i pontot ^3 %s ^1-nak^4!
    GETPOINTS = ^4%s^1Kaptál ^3%i ^1pontot ^3%s -től^4!
    KILLMSGKILLER = ^4%s ^3%s megöléséért kaptál ^3%i tp-t és ^3%i pontot^4!
    KILLMSGVICTIM = ^4%s ^3%s megölt téged^4!
    INVALIDNVAULTID = Érvénytelen nvault azonosító!
    TQUERY_CONNECT_FAILED = Csatlakozási hiba!
    TQUERY_QUERY_FAILED = Lekérés hiba!
    MISSINGFILE = Hiányzó fájl! ( %s )

    _________________
    Néha itt, de többször nem.

    Ők köszönték meg Akosch:. nek ezt a hozzászólást: mforce (2016.02.01. 22:36)
      Népszerűség: 2.27%


    Hozzászólás jelentése
    Vissza a tetejére
       
     Hozzászólás témája: Re: Kés Rendszer v2
    HozzászólásElküldve: 2016.02.06. 16:39 
    Offline
    Senior Tag
    Avatar

    Csatlakozott: 2015.06.11. 01:54
    Hozzászólások: 220
    Megköszönt másnak: 46 alkalommal
    Megköszönték neki: 13 alkalommal
    Nem működik, nem lehet lefordítani.

    _________________
    Kép


    Hozzászólás jelentése
    Vissza a tetejére
       
    Hozzászólások megjelenítése:  Rendezés  
    Új téma nyitása  Hozzászólás a témához  [ 21 hozzászólás ]  Oldal 1 2 3 Következő


    Ki van itt

    Jelenlévő fórumozók: Bing [Bot] valamint 10 vendég


    Nem nyithatsz témákat ebben a fórumban.
    Válaszolhatsz egy témára ebben a fórumban.
    Nem szerkesztheted a hozzászólásaidat ebben a fórumban.
    Nem törölheted a hozzászólásaidat ebben a fórumban.
    Nem küldhetsz csatolmányokat ebben a fórumban.

    Keresés:
    Ugrás:  
    Powered by phpBB® Forum Software © phpBB Limited
    Magyar fordítás © Magyar phpBB Közösség
    Portal: Kiss Portal Extension © Michael O'Toole