// // PLUGIN KESZITO: ANDREI || Magyarositotta es editelte Nanosuit
// client_cmd(pPlayer, "spk cso_mod/select") Ezt nyugodtan kitorolheted/vagy atirhatod. Annyit tesz hogy mikor megnyitod a menut hangot ad ki.
#include < amxmodx >
#include < cstrike >
#include < amxmisc >
#include < fun >
#include < zombieplague >
#include < hamsandwich >
#include < engine >
#include < sqlx >
#include < fakemeta >
#include <xs>
#define PLUGIN_NAME "ZP - Buy System"
#define PLUGIN_VERSION "0.0.0.1"
#define PLUGIN_AUTHOR "Andrei" // Magyarositotta & Editelte Nanosuit
#define SQL_HOST "HOST"
#define SQL_USER "USER/FELHASZNALO"
#define SQL_PASSWORD "PASSWORD/JELSZO"
#define SQL_DBNAME "DATABASE NAME/ADATBAZIS NEVE"
#define MAX_CLIENTS 32
#define MAX_ITEMS_DATA 512
#define MAX_MONEY_ADMIN 500000 // Adminak a maximalis ossze gyujtheto penz limit
#define MAX_MONEY 100000 // Sima jatekosoknak a penz limitje
#define MAX_MONEY_HUMANS_KILL 300 // Ha megfertozol egy embert penz jutalma
#define MAX_MONEY_ZOMBIES_KILL 500 // Ha megolsz egy zombit penz jutalma
#define MAX_MONEY_NEMESIS_KILL 5000 // Ha megolsz egy Nemesist penz jutalma
#define MAX_MONEY_SURVIVAl_KILL 6000 // Ha megolsz egy tulelot penz jutalma
#define MAX_MONEY_WIN_HUMANS 2500 // Zombik nyertek jutalma
#define MAX_MONEY_WIN_ZOMBIES 1500 // Emberek nyertek jutalma
#define MAX_MONEY_FAIL_HUMANS 2000 // Emberek vesztettek jutalma
#define MAX_MONEY_FAIL_ZOMBIES 2500 // Zombik vesztettek jutalma
#define MAX_MONEY_NO_ONE 1000 // Nem nyert senki jutalma
#define MAX_EXP_INFECTION_KILL 5 // Fertozesi xp
#define MAX_EXP_ZOMBIES_KILL 8 // Zombi olesert jaro xp
#define MAX_EXP_NEMESIS_KILL 20 // Nemesis olesert jaro xp
#define MAX_EXP_SURVIVOR_KILL 15 // Tulelo olesert jaro xp
#define MAX_EXP_WIN_HUMANS 3 // Emberek nyertek jaro jutalom (xp)
#define MAX_EXP_WIN_ZOMBIES 3 // Zombik nyertek jaro jutalom (xp)
#define MAX_EXP_FAIL_ZOMBIES 0 // Sikertelen Zombi jaro xp jutalom
#define MAX_EXP_FAIL_HUMANS 0 // Sikertelen Ember jaro xp jutalom
#define MAX_EXP_NO_ONE 2 // Nem nyert senki xp jutalom
#define WIN_HUMAN 0, 255, 0 // Emberek Nyertek Hud beallitasa "rgb" pl "100,255,0"
#define FAIL_HUMAN 255, 0, 0 // Sikertelen Hud beallitasa "rgb" pl "100,255,0"
#define DRAW_HUMAN 255, 255, 255 // Dontetlen Hud beallitasa "rgb" pl "100,255,0"
#define WIN_ZOMBIE 0, 255, 0 // Zombik Nyertek Hud beallitasa "rgb" pl "100,255,0"
#define FAIL_ZOMBIE 255, 0, 0 // Sikertelen (Zombik) Hud beallitasa "rgb" pl "100,255,0"
#define DRAW_ZOMBIE 255, 255, 255 // Dontetlen Hud beallitasa "rgb" pl "100,255,0"
#define ADMIN_LISTEN ADMIN_BAN // Ezt a reszt nyugodtan at irhatod !
//PREFIX
new message[192]
new strName[191]
new strText[191]
new sayText
new teamInfo
new maxPlayers
new static color[10]
//Ability // Kepesseg
new Float:g_lastLeaptime[33]
new bool:g_norecoil[33]
new bool:g_leap[33]
new bool:g_speed[33]
native ZBS_GetUserLevel(id)
native ZBS_SetUserMoney(id, value)
native ZBS_GetUserMoney(id)
new Float: cl_pushangle[33][3]
new g_szBuyCommands[ ][ ] =
{
"usp", "glock", "deagle", "p228", "elites",
"fn57", "m3", "xm1014", "mp5", "tmp", "p90",
"mac10", "ump45", "ak47", "galil", "famas",
"sg552", "m4a1", "aug", "scout", "awp", "g3sg1",
"sg550", "m249", "vest", "vesthelm", "flash",
"hegren", "sgren", "defuser", "nvgs", "shield",
"primammo", "secammo", "km45", "9x19mm", "nighthawk",
"228compact", "fiveseven", "12gauge", "autoshotgun",
"mp", "c90", "cv47", "defender", "clarion", "krieg552",
"bullpup", "magnum", "d3au1", "krieg550",
"buy", "buyequip", "cl_autobuy",
"cl_rebuy", "cl_setautobuy", "cl_setrebuy", "client_buy_open"
};
new const g_szStatsLevel[ ] =
{
0, // 0
50, // 1
100, // 3
200, // 4
400, // 5
800, // 6
1600, // 7
3200, // 8
6400, // 9
12800, // 10
25600, // 11
51200, // 12
102400, // 13
204800, // 14
409600, // 15
819200, // 16
1638400, // 17
3276800, // 18
5974915, // 19
7899700, // 20
99999999, // 21 //Tovabb is irhatod ha kell neked tobb szint
};
enum _:EBuySystemData
{
g_iMoneyNum = 1,
g_iLevelNum,
g_iExpNum,
g_iBonusNum,
g_iLastBought,
Float:g_flBuyTime,
Float:g_flBlockMoney,
bool:g_bIsItemBought[ 3 ]
}; new g_pDataBuySystem[ MAX_CLIENTS +1 ][ EBuySystemData ];
enum _:EItemsData
{
g_szExtraItemKeyName[ 32 ] = 1,
g_szExtraItemName[ 32 ],
g_szExtraItemFlags[ 32 ],
g_szExtraItemMode[ 32 ],
g_szExtraItemLevelAcces[ 32 ],
g_iExtraItemCost,
g_iExtraItemLevel,
g_iExtraItemOnline,
g_iExtraItemCtype,
g_iExtraItemIndex,
g_iExtraItemTeam,
g_iExtraItemLimit
}; new g_pItemsData[ MAX_ITEMS_DATA ][ EItemsData ];
const WEAPONS_PRIMARY_BITSUM = (1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_AUG)|(1<<CSW_UMP45)|(1<<CSW_SG550)|(1<<CSW_GALIL)|(1<<CSW_FAMAS)|(1<<CSW_AWP)|(1<<CSW_MP5NAVY)|(1<<CSW_M249)|(1<<CSW_M3)|(1<<CSW_M4A1)|(1<<CSW_TMP)|(1<<CSW_G3SG1)|(1<<CSW_SG552)|(1<<CSW_AK47)|(1<<CSW_P90);
const WEAPONS_SECONDARY_BITSUM = (1<<CSW_P228)|(1<<CSW_ELITE)|(1<<CSW_FIVESEVEN)|(1<<CSW_USP)|(1<<CSW_GLOCK18)|(1<<CSW_DEAGLE);
const PRIMARY_WEAPONS_BIT_SUM = (1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_AUG)|(1<<CSW_UMP45)|(1<<CSW_SG550)|(1<<CSW_GALIL)|(1<<CSW_FAMAS)|(1<<CSW_AWP)|(1<<CSW_MP5NAVY)|(1<<CSW_M249)|(1<<CSW_M3)|(1<<CSW_M4A1)|(1<<CSW_TMP)|(1<<CSW_G3SG1)|(1<<CSW_SG552)|(1<<CSW_AK47)|(1<<CSW_P90)
const SECONDARY_WEAPONS_BIT_SUM = (1<<CSW_P228)|(1<<CSW_ELITE)|(1<<CSW_FIVESEVEN)|(1<<CSW_USP)|(1<<CSW_GLOCK18)|(1<<CSW_DEAGLE)
new const BITSUM_SECTION_DROP = ((1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5));
new bool:g_bIsBoss;
new bool:g_bIsAdmin[ MAX_CLIENTS +1 ];
new g_iMessagesMoney;
new g_iMessagesBuyClose;
new g_iMessagesBlinkAcct;
new g_iMessagesStatusIcon;
new g_iMaxClients;
new g_iExtraItemsNum;
new g_iRoundNum = 2;
new Handle:g_hDBTuple;
const WEAPONS_BITSUM = (1<<CSW_KNIFE|1<<CSW_HEGRENADE|1<<CSW_FLASHBANG|1<<CSW_SMOKEGRENADE|1<<CSW_C4)
public plugin_init( )
{
register_plugin
(
PLUGIN_NAME,
PLUGIN_VERSION,
PLUGIN_AUTHOR
);
register_dictionary( "BuySystem.txt" ); // LANG FAJL
static iCommands;
for( iCommands = 0; iCommands < sizeof g_szBuyCommands; iCommands++ )
register_clcmd( g_szBuyCommands[ iCommands ], "ClientCommannd__BuyCommands" );
static szMapName[ 64 ]; get_mapname( szMapName, charsmax( szMapName ) ); g_bIsBoss = !!equal( szMapName, "zs_decoy_boss" );
register_event( "HLTV", "CEvent__Round_Start", "a", "1=0", "2=0" );
RegisterHam( Ham_Spawn, "player", "CBasePlayer__Spawn_Post", .Post = true );
RegisterHam( Ham_TakeDamage, "player", "CBasePlayer__TakeDamage_Pre", .Post = false );
RegisterHam( Ham_Killed, "player", "CBasePlayer__Killed_Pre", .Post = false );
RegisterHam( Ham_Player_PreThink, "player", "CBasePlayer__PreThink_Post", .Post = true );
g_iMessagesMoney = get_user_msgid( "Money" );
g_iMessagesBuyClose = get_user_msgid( "BuyClose" );
g_iMessagesBlinkAcct = get_user_msgid("BlinkAcct");
g_iMessagesStatusIcon = get_user_msgid( "StatusIcon" );
g_iMaxClients = get_maxplayers( );
//RegisterHam(Ham_Spawn, "player", "OnCBasePlayer_Spawn_P", true);
register_event("HLTV", "rewardlevel", "a", "1=0", "2=0")
register_forward(FM_PlayerPreThink, "FW_playerprethink")
register_clcmd ("say", "hook_say") //PREFIX miatt
register_clcmd ("say_team", "hook_teamsay") //PREFIX miatt
sayText = get_user_msgid ("SayText") //PREFIX miatt
teamInfo = get_user_msgid ("TeamInfo") //PREFIX miatt
maxPlayers = get_maxplayers() //PREFIX miatt
register_message (sayText, "avoid_duplicated") // Chat beszed duplikalas ellen
register_message( g_iMessagesMoney, "CMessages__Money" );
register_clcmd("cso_setlvl", "clcmd_set_lvl", ADMIN_IMMUNITY, "Használata: cso_setlvl <Név> <Szint>"); // Szint adas max 21 szintig vagy bovitheted ameddig akarod
register_clcmd("cso_setmoney", "clcmd_set_money", ADMIN_IMMUNITY, "Használata: cso_setmoney <Név> <Mennyiség>"); // Penz addolas
new weapon_name[24]
for (new i = 1; i <= 30; i++)
{
if (!(WEAPONS_BITSUM & 1 << i) && get_weaponname(i, weapon_name, 23))
{
RegisterHam(Ham_Weapon_PrimaryAttack, weapon_name, "fw_Weapon_PrimaryAttack_Pre")
RegisterHam(Ham_Weapon_PrimaryAttack, weapon_name, "fw_Weapon_PrimaryAttack_Post", 1)
}
}
}
public plugin_natives( )
{
register_native("zbm_set_user_money", "_ZBS_SetUserMoney_", 1)
register_native("zbm_get_user_money", "_ZBS_GetUserMoney_", 1)
register_native("zp_cs_get_user_money", "_ZBS_GetUserMoney_", 1);
register_native("zp_cs_set_user_money", "_ZBS_SetUserMoney_", 1);
register_native("zp_get_user_exp", "_ZBS_GetUserExp_", 1);
register_native("zp_get_user_level", "_ZBS_GetUserLevel_", 1);
register_native("zp_get_exp_current", "_ZBS_GetUserNextExp_", 1);
register_native("ZBS_GetUserMoney", "_ZBS_GetUserMoney_", 1);
register_native("ZBS_GetUserExp", "_ZBS_GetUserExp_", 1);
register_native("ZBS_GetUserLevel", "_ZBS_GetUserLevel_", 1);
register_native("ZBS_GetUserNextExp", "_ZBS_GetUserNextExp_", 1);
register_native("ZBS_GetUserMaxLevel", "_ZBS_GetUserMaxLevel_", 1);
register_native("ZBS_SetUserMoney", "_ZBS_SetUserMoney_", 1);
register_native("ZBS_SetUserLevel", "_ZBS_SetUserLevel_", 1);
register_native("ZBS_SetUserExp", "_ZBS_SetUserExp_", 1);
}
public plugin_cfg( )
{
new szText[ 64 ];
new szError[ 64 ];
new iFile;
new iCtype;
new iTeam;
new iErrorCode;
iFile = fopen( "addons/amxmodx/configs/ZpBuySystem.ini", "rt" ); // LANG FAJL HELYE
if( !iFile )
set_fail_state(".INI Fájl nem található!");
while( !feof( iFile ) )
{
fgets( iFile, szText, charsmax( szText ) );
if( !strlen( szText ) || szText[ 0 ] == ';' || ( szText[ 0 ] == '/' && szText[ 1 ] == '/' ) )
continue;
if( szText[ 0 ] == '[' )
{
switch( szText[ 1 ] )
{
case 'P': iCtype = 1;
case 'S': iCtype = 2;
case 'A': iCtype = 3;
case 'R': iCtype = 4;
case 'M': iCtype = 5;
case 'Z':
{
iCtype = 6;
iTeam = 1;
}
case 'H':
{
iCtype = 6;
iTeam = 2;
}
case 'K':
{
iCtype = 7;
}
}
}
new szCost[ 32 ];
new szLevel[ 32 ];
new szOnline[ 32 ];
new szLimit[ 32 ];
parse( szText, g_pItemsData[ g_iExtraItemsNum ][ g_szExtraItemKeyName ], 31, g_pItemsData[ g_iExtraItemsNum ][ g_szExtraItemName ], 31, szCost, 31, szLevel, 31, szOnline, 31, g_pItemsData[ g_iExtraItemsNum ][ g_szExtraItemMode ], 31 );
g_pItemsData[ g_iExtraItemsNum ][ g_iExtraItemCtype ] = iCtype;
g_pItemsData[ g_iExtraItemsNum ][ g_iExtraItemTeam ] = iTeam;
g_pItemsData[ g_iExtraItemsNum ][ g_iExtraItemCost ] = str_to_num( szCost );
g_pItemsData[ g_iExtraItemsNum ][ g_iExtraItemLevel ] = str_to_num( szLevel );
g_pItemsData[ g_iExtraItemsNum ][ g_iExtraItemOnline ] = str_to_num( szOnline );
g_pItemsData[ g_iExtraItemsNum ][ g_iExtraItemLimit ] = str_to_num( szLimit );
g_pItemsData[ g_iExtraItemsNum ][ g_iExtraItemIndex ] = g_pItemsData[ g_iExtraItemsNum ][ g_szExtraItemMode ] == 'Z' ? zp_get_extra_item_id( g_pItemsData[ g_iExtraItemsNum ][ g_szExtraItemName ] ) : get_weaponid( g_pItemsData[ g_iExtraItemsNum ][ g_szExtraItemName ] );
g_iExtraItemsNum++;
}
fclose( iFile );
g_hDBTuple = SQL_MakeDbTuple( SQL_HOST,SQL_USER,SQL_PASSWORD,SQL_DBNAME );
new Handle:hConnection = SQL_Connect( g_hDBTuple, iErrorCode, szError, charsmax( szError ) );
if( hConnection == Empty_Handle )
set_fail_state( szError );
new Handle:hQuery = SQL_PrepareQuery( hConnection,"CREATE TABLE IF NOT EXISTS BuySystemData(steamid varchar( 32 ),BuySystemDataMoney INT( 11 ),BuySystemDataLEVEL INT( 11 ), BuySystemDataEXP INT( 11 ) )");
if( !SQL_Execute( hQuery ) )
{
SQL_QueryError( hQuery, szError, charsmax( szError ) );
set_fail_state( szError );
}
SQL_FreeHandle( hQuery );
SQL_FreeHandle( hConnection );
}
public plugin_end( )
{
SQL_FreeHandle( g_hDBTuple );
}
public rewardlevel() // Plusz hozza adva , ha nem kell neked torold .
{
new players[32],inum,id
get_players(players,inum)
for(new i;i<inum;i++)
{
id = players[i]
new current_ammopacks = zp_get_user_ammo_packs(id) // REWARD LEVEL ez kulon lett hozzairva. Ha akarod hogy irja minden kor kezdes elott akkor vedd ki belole "//"
new current_money = ZBS_GetUserMoney(id)
if(ZBS_GetUserLevel(id) >= 0 && ZBS_GetUserLevel(id) <= 1)
{
zp_set_user_ammo_packs(id, current_ammopacks + 2)
ZBS_SetUserMoney(id, current_money + 1000)
//zp_colored_print(id,"!n[!gLEVEL SYSTEM!n] !t• !nYour Level: !g%i !n| !gREWARD: !t2AP !n& !t1000$ !n& !t5 Armor", ZBS_GetUserLevel(id)) // Magyarul: "!n[!gLEVEL SYSTEM!n] !t• !nSzinted: !g%i !n| !gKör Jutalom: !t2C !n& !t1000$"
}
else if(ZBS_GetUserLevel(id) >= 2 && ZBS_GetUserLevel(id) <= 3)
{
zp_set_user_ammo_packs(id, current_ammopacks + 4)
ZBS_SetUserMoney(id, current_money + 1500)
//zp_colored_print(id,"!n[!gLEVEL SYSTEM!n] !t• !nYour Level: !g%i !n| !gREWARD: !t4AP !n& !t1500$", ZBS_GetUserLevel(id))
}
else if(ZBS_GetUserLevel(id) >= 4 && ZBS_GetUserLevel(id) <= 5)
{
zp_set_user_ammo_packs(id, current_ammopacks + 6)
ZBS_SetUserMoney(id, current_money + 2000)
//zp_colored_print(id,"!n[!gLEVEL SYSTEM!n] !t• !nYour Level: !g%i !n| !gREWARD: !t6AP !n& !t2000$", ZBS_GetUserLevel(id))
}
if(ZBS_GetUserLevel(id) >= 6 && ZBS_GetUserLevel(id) <= 7)
{
zp_set_user_ammo_packs(id, current_ammopacks + 8)
ZBS_SetUserMoney(id, current_money + 2500)
//zp_colored_print(id,"!n[!gLEVEL SYSTEM!n] !t• !nYour Level: !g%i !n| !gREWARD: !t8AP !n& !t2500$", ZBS_GetUserLevel(id))
}
else if(ZBS_GetUserLevel(id) >= 8 && ZBS_GetUserLevel(id) <= 9)
{
zp_set_user_ammo_packs(id, current_ammopacks + 10)
ZBS_SetUserMoney(id, current_money + 3000)
//zp_colored_print(id,"!n[!gLEVEL SYSTEM!n] !t• !nYour Level: !g%i !n| !gREWARD: !t10AP !n& !t3000$", ZBS_GetUserLevel(id))
}
else if(ZBS_GetUserLevel(id) >= 10 && ZBS_GetUserLevel(id) <= 11)
{
zp_set_user_ammo_packs(id, current_ammopacks + 12)
ZBS_SetUserMoney(id, current_money + 3500)
//zp_colored_print(id,"!n[!gLEVEL SYSTEM!n] !t• !nYour Level: !g%i !n| !gREWARD: !t12AP !n& !t3500$", ZBS_GetUserLevel(id))
}
if(ZBS_GetUserLevel(id) >= 12 && ZBS_GetUserLevel(id) <= 13)
{
zp_set_user_ammo_packs(id, current_ammopacks + 14)
ZBS_SetUserMoney(id, current_money + 4000)
//zp_colored_print(id,"!n[!gLEVEL SYSTEM!n] !t• !nYour Level: !g%i !n| !gREWARD: !t14AP !n& !t4000$", ZBS_GetUserLevel(id))
}
else if(ZBS_GetUserLevel(id) >= 14 && ZBS_GetUserLevel(id) <= 15)
{
zp_set_user_ammo_packs(id, current_ammopacks + 16)
ZBS_SetUserMoney(id, current_money + 4500)
g_norecoil[id] = true
//zp_colored_print(id,"!n[!gLEVEL SYSTEM!n] !t• !nYour Level: !g%i !n| !gREWARD: !t16AP !n& !t4500$ !n& !tNo Recoil", ZBS_GetUserLevel(id))
}
else if(ZBS_GetUserLevel(id) >= 16 && ZBS_GetUserLevel(id) <= 17)
{
zp_set_user_ammo_packs(id, current_ammopacks + 18)
ZBS_SetUserMoney(id, current_money + 5000)
g_norecoil[id] = true
//zp_colored_print(id,"!n[!gLEVEL SYSTEM!n] !t• !nYour Level: !g%i !n| !gREWARD: !t18AP !n& !t5000$ !n& !tNo Recoil", ZBS_GetUserLevel(id))
}
else if(ZBS_GetUserLevel(id) >= 18 && ZBS_GetUserLevel(id) <= 19)
{
zp_set_user_ammo_packs(id, current_ammopacks + 20)
ZBS_SetUserMoney(id, current_money + 5500)
g_norecoil[id] = true
g_speed[id] = true // Gyorsasag
g_leap[id] = true // Codokban ismert JetPack ugras
//zp_colored_print(id,"!n[!gLEVEL SYSTEM!n] !t• !nYour Level: !g%i !n| !gREWARD: !t20AP !n& !t5500$ !n& !tNo Recoil & Leap & Speed", ZBS_GetUserLevel(id))
}
else if(ZBS_GetUserLevel(id) >= 20 && ZBS_GetUserLevel(id) <= 21)
{
zp_set_user_ammo_packs(id, current_ammopacks + 22)
ZBS_SetUserMoney(id, current_money + 6000)
g_norecoil[id] = true
g_speed[id] = true // Gyorsasag
g_leap[id] = true // Hosszu ugras
//zp_colored_print(id,"!n[!gLEVEL SYSTEM!n] !t• !nYour Level: !g%i !n| !gREWARD: !t22C !n& !t6000$ !n& !tNo Recoil & Leap & Speed", ZBS_GetUserLevel(id))
}
}
}
public give_no_recoil(id) // Kepesseg
{
g_norecoil[id] = true
}
public give_speed(id) // Kepesseg
{
g_speed[id] = true
}
public give_leap(id) // Kepesseg
{
g_leap[id] = true
}
public fw_Weapon_PrimaryAttack_Post(entity) // NO RECOIL
{
new id = pev(entity, pev_owner)
if (g_norecoil[id] == true)
{
new Float: push[3]
pev(id, pev_punchangle, push)
xs_vec_sub(push, cl_pushangle[id], push)
xs_vec_mul_scalar(push, 0.0, push)
xs_vec_add(push, cl_pushangle[id], push)
set_pev(id, pev_punchangle, push)
return HAM_IGNORED;
}
return HAM_IGNORED;
}
public fw_Weapon_PrimaryAttack_Pre(entity) // NO RECOIL
{
new id = pev(entity, pev_owner)
if (g_norecoil[id] == true)
{
pev(id, pev_punchangle, cl_pushangle[id])
return HAM_IGNORED;
}
return HAM_IGNORED;
}
public clcmd_set_lvl(id, level, cid)
{
if (!(get_user_flags(id) & ADMIN_IMMUNITY))
return PLUGIN_HANDLED;
static szArg1[40], szArg2[10], iTarget, iCount;
iTarget = 0;
read_argv(1, szArg1, charsmax(szArg1));
iTarget = find_player("bl", szArg1);
if(iTarget <= 0)
{
client_print(id, print_console, "A játékos nem található");
return PLUGIN_HANDLED;
}
read_argv(2, szArg2, charsmax(szArg2));
iCount = str_to_num(szArg2);
_ZBS_SetUserLevel_( iTarget, iCount );
return PLUGIN_HANDLED;
}
public clcmd_set_money(id, level, cid)
{
if (!(get_user_flags(id) & ADMIN_IMMUNITY))
return PLUGIN_HANDLED;
static szArg1[40], szArg2[10], iTarget, iCount;
iTarget = 0;
read_argv(1, szArg1, charsmax(szArg1));
iTarget = find_player("bl", szArg1);
if(iTarget <= 0)
{
client_print(id, print_console, "A játékos nem található");
return PLUGIN_HANDLED;
}
read_argv(2, szArg2, charsmax(szArg2));
iCount = str_to_num(szArg2);
_ZBS_SetUserMoney_( iTarget, iCount );
if( !task_exists( iTarget ) )
set_task( 0.1, "CTask__CalculateMoney", iTarget );
return PLUGIN_HANDLED;
}
public client_connect( pPlayer )
{
if( is_user_bot( pPlayer ) || is_user_hltv( pPlayer ) )
return;
g_bIsAdmin[ pPlayer ] = !!is_user_admin( pPlayer );
new szSteamId[ 32 ];
new szTemp[ 512 ];
new pParameters[ 1 ]; pParameters[ 0 ] = pPlayer;
get_user_authid( pPlayer, szSteamId, charsmax( szSteamId ) );
format( szTemp, charsmax( szTemp ), "SELECT * FROM `BuySystemData` WHERE (`BuySystemData`.`steamid` = '%s')", szSteamId );
SQL_ThreadQuery( g_hDBTuple,"SQL_QueryConnection", szTemp, pParameters, sizeof pParameters );
}
public client_disconnect( pPlayer )
{
new szSteamId[ 32 ];
new szTemp[ 512 ];
get_user_authid( pPlayer, szSteamId, charsmax( szSteamId ) );
format(szTemp,charsmax(szTemp),"UPDATE `BuySystemData` SET `BuySystemDataMoney` = '%i', `BuySystemDataLEVEL` = '%i',`BuySystemDataEXP` = '%i' WHERE `BuySystemData`.`steamid` = '%s';",g_pDataBuySystem[ pPlayer ][ g_iMoneyNum ],g_pDataBuySystem[ pPlayer ][ g_iLevelNum ],g_pDataBuySystem[ pPlayer ][ g_iExpNum ], szSteamId);
SQL_ThreadQuery( g_hDBTuple,"SQL_QueryCloseConnection",szTemp );
}
public SQL_QueryConnection( iState, Handle:hQuery, szError[ ], iErrcode, pParameters[], pParametersSize )
{
switch( iState )
{
case TQUERY_CONNECT_FAILED: log_amx( "Load - Could not connect to SQL database. [ %d ] %s", iErrcode, szError );
case TQUERY_QUERY_FAILED: log_amx( "Load Query failed. [ %d ] %s", iErrcode, szError );
}
new pPlayer; pPlayer = pParameters[ 0 ];
if( SQL_NumResults( hQuery ) < 1 )
{
new szSteamId[ 32 ];
get_user_authid( pPlayer, szSteamId, charsmax( szSteamId ) ) ;
if (equal( szSteamId,"ID_PENDING" ) )
return PLUGIN_HANDLED;
new szTemp[ 512 ];
format( szTemp,charsmax( szTemp ),"INSERT INTO `BuySystemData`( `steamid`, `BuySystemDataMoney`,`BuySystemDataLEVEL`,`BuySystemDataEXP`) VALUES ('%s','%i', '1', '0' );", szSteamId, get_pcvar_num( get_cvar_pointer( "mp_startmoney" ) ) );
SQL_ThreadQuery( g_hDBTuple,"SQL_QueryCloseConnection", szTemp );
g_pDataBuySystem[ pPlayer ][ g_iMoneyNum ] = get_pcvar_num( get_cvar_pointer( "mp_startmoney" ) );
g_pDataBuySystem[ pPlayer ][ g_iLevelNum ] = 1;
return PLUGIN_HANDLED;
}
for( new i = g_iMoneyNum; i <= g_iExpNum; i++ )
{
g_pDataBuySystem[ pPlayer ][ i ] = SQL_ReadResult( hQuery, i );
}
return PLUGIN_HANDLED;
}
public SQL_QueryCloseConnection( iState, Handle:hQuery, szError[ ], iErrcode, pParameters[], pParametersSize )
{
SQL_FreeHandle( hQuery );
return PLUGIN_HANDLED;
}
public CEvent__Round_Start( )
{
static iCell;
for( iCell = 1; iCell <= g_iMaxClients; iCell++ )
{
if( !is_user_connected( iCell ) )
continue;
g_pDataBuySystem[ iCell ][ g_flBuyTime ] = _:( g_bIsBoss ? get_gametime( ) + get_pcvar_float( get_cvar_pointer( "mp_buytime_boss" ) ) : get_gametime( ) + get_pcvar_float( get_cvar_pointer( "mp_buytime" ) ) );
}
}
public zp_round_started( iGameMode, pPlayer )
{
static iCell;
for( iCell = 1; iCell <= g_iMaxClients; iCell++ )
{
if( !is_user_alive( iCell ) )
continue;
g_pDataBuySystem[ iCell ][ g_flBuyTime ] = _:0.0;
if( IsHuman( iCell ) )
continue;
g_pDataBuySystem[ iCell ][ g_iBonusNum ] += g_pDataBuySystem[ iCell ][ g_iLastBought ];
if( !task_exists( iCell ) )
set_task( 0.1, "CTask__CalculateMoney", iCell );
}
}
public hook_say(id) // ++ Chat/Chatprefix hozzaadva , ha ez sem kell nyugodtan torold!
{
read_args (message, 191)
remove_quotes (message)
if (message[0] == '@' || message[0] == '/' || message[0] == '!' || equal (message, ""))
return PLUGIN_CONTINUE
new name[32]
get_user_name (id, name, 31)
new isAlive, alive[32]
if (is_user_alive (id))
{
isAlive = 1
alive = "^1*ELO*"
}
else
{
isAlive = 0
alive = "^1*HALOTT* "
}
//static color[10]
if(get_user_flags(id)&ADMIN_IMMUNITY)
{
//get_user_team (id, color, 9)
getTeam(id)
format (strName, 191, "%s ^1[^4Level: %i^1] ^1[^4OWNER^1] ^3%s:", alive, ZBS_GetUserLevel(id) , name) // Tulajdonos
format (strText, 191, "^4%s", message)
}
else if(get_user_flags(id)&ADMIN_BAN)
{
getTeam(id)
format (strName, 191, "%s ^1[^4Level: %i^1] ^1[^4ADMIN^1] ^3%s:", alive, ZBS_GetUserLevel(id), name) // ADMIN
format (strText, 191, "^4%s", message)
}
else if(get_user_flags(id)&ADMIN_LEVEL_H)
{
getTeam(id)
format (strName, 191, "%s ^1[^4Level: %i^1] ^1[^4VIP^1] ^3%s:", alive, ZBS_GetUserLevel(id), name) // VIP
format (strText, 191, "^1%s", message)
}
else if(get_user_flags(id)&ADMIN_USER)
{
getTeam(id)
format (strName, 191, "%s ^1[^4Level: %i^1] ^1[^4PLAYER^1] ^3%i:",alive, ZBS_GetUserLevel(id), name) // SIMA JATEKOS
format (strText, 191, "^1%s", message)
}
format (message, 191, "%s ^1%s", strName, strText)
sendMessage (color, isAlive)
return PLUGIN_CONTINUE
}
public hook_teamsay(id)
{
new playerTeam = get_user_team(id)
new playerTeamName[19]
switch (playerTeam)
{
case 1:
copy (playerTeamName, 11, "ZOMBIE")
case 2:
copy (playerTeamName, 18, "HUMAN")
default:
copy (playerTeamName, 9, "SPECTATOR")
}
read_args (message, 191)
remove_quotes (message)
if (message[0] == '@' || message[0] == '/' || message[0] == '!' || equal (message, ""))
return PLUGIN_CONTINUE
new isAlive, alive[32]
if (is_user_alive (id))
{
isAlive = 1
alive = "^1*ELO*"
}
else
{
isAlive = 0
alive = "^1*HALOTT*"
}
new name[32]
get_user_name (id, name, 31)
//static color[10]
if(get_user_flags(id)&ADMIN_IMMUNITY)
{
//get_user_team (id, color, 9)
getTeam(id)
format (strName, 191, "%s(%s) ^1[^4Level: %i^1] ^1[^4OWNER^1] ^3%s:",alive , playerTeamName, ZBS_GetUserLevel(id), name) // TULAJDONOS
format (strText, 191, "^4%s", message)
}
else if(get_user_flags(id)&ADMIN_BAN)
{
getTeam(id)
format (strName, 191, "%s(%s) ^1[^4Level: %i^1] ^1[^4ADMIN^1] ^3%s:",alive , playerTeamName, ZBS_GetUserLevel(id), name) // ADMIN
format (strText, 191, "^4%s", message)
}
else if(get_user_flags(id)&ADMIN_LEVEL_H)
{
getTeam(id)
format (strName, 191, "%s(%s) ^1[^4Level: %i^1] ^1[^4VIP^1] ^3%s:",alive , playerTeamName, ZBS_GetUserLevel(id), name) // VIP
format (strText, 191, "^1%s", message)
}
else if(get_user_flags(id)&ADMIN_USER)
{
getTeam(id)
format (strName, 191, "%s(%s) ^1[^4Level: %i^1] ^1[^4USER^1] ^3%s:",alive ,playerTeamName, ZBS_GetUserLevel(id), name) // SIMA JATEKOS
format (strText, 191, "^1%s", message)
}
format (message, 191, "%s ^1%s", strName, strText)
sendTeamMessage (color,isAlive, playerTeam)
return PLUGIN_CONTINUE
}
public sendMessage (color[], alive)
{
new teamName[10]
for (new player = 1; player < maxPlayers; player++)
{
if (!is_user_connected(player))
continue
if((alive && is_user_alive(player)) || (!alive && !is_user_alive(player)) || (get_user_flags(player) && ADMIN_LISTEN))
{
get_user_team (player, teamName, 9)
changeTeamInfo (player, color)
writeMessage (player, message)
changeTeamInfo (player, teamName)
}
}
}
public sendTeamMessage (color[], alive, playerTeam)
{
new teamName[10]
for (new player = 1; player < maxPlayers; player++)
{
if (!is_user_connected(player))
continue
if (get_user_team(player) == playerTeam || get_user_flags(player) & ADMIN_LISTEN)
{
if (alive && is_user_alive(player) || !alive && !is_user_alive(player) || get_user_flags(player) & ADMIN_LISTEN)
{
get_user_team (player, teamName, 9)
changeTeamInfo (player, color)
writeMessage (player, message)
changeTeamInfo (player, teamName)
}
}
}
}
public changeTeamInfo (player, team[])
{
message_begin (MSG_ONE, teamInfo, _, player)
write_byte (player)
write_string (team)
message_end()
}
public writeMessage (player, message[])
{
message_begin (MSG_ONE, sayText, {0, 0, 0}, player)
write_byte (player)
write_string (message)
message_end ()
}
public getTeam(id)
{
get_user_team (id, color, 9)
}
public zp_round_ended( iTeam )
{
if( g_iRoundNum-- > 1 )
return;
static iCell;
for( iCell = 1; iCell <= g_iMaxClients; iCell++ )
{
if( !is_user_connected( iCell ) )
continue;
switch( iTeam )
{
case WIN_HUMANS:
{
if (IsHuman( iCell ))
{
set_dhudmessage( WIN_HUMAN, 0.05, 0.63, 2, 1.0, 3.5, 0.05, 0.05 );
show_dhudmessage( iCell, "%L", iCell, "ZBS_WIN", MAX_MONEY_WIN_HUMANS );
}
else
{
set_dhudmessage( FAIL_ZOMBIE, 0.05, 0.63, 2, 1.0, 3.5, 0.05, 0.05 );
show_dhudmessage( iCell, "%L", iCell, "ZBS_FAIL", MAX_MONEY_FAIL_ZOMBIES );
}
g_pDataBuySystem[ iCell ][ g_iBonusNum ] += IsHuman( iCell ) ? MAX_MONEY_WIN_HUMANS : MAX_MONEY_FAIL_ZOMBIES;
g_pDataBuySystem[ iCell ][ g_iExpNum ] += IsHuman( iCell ) ? MAX_EXP_WIN_HUMANS : MAX_EXP_FAIL_ZOMBIES;
}
case WIN_ZOMBIES:
{
if (IsHuman( iCell ))
{
set_dhudmessage( FAIL_HUMAN, 0.05, 0.63, 2, 1.0, 3.5, 0.05, 0.05 );
show_dhudmessage( iCell, "%L", iCell, "ZBS_FAIL", MAX_MONEY_FAIL_HUMANS )
}
else
{
set_dhudmessage( WIN_ZOMBIE, 0.05, 0.63, 2, 1.0, 3.5, 0.05, 0.05 );
show_dhudmessage( iCell, "%L", iCell, "ZBS_WIN", MAX_MONEY_WIN_ZOMBIES );
}
g_pDataBuySystem[ iCell ][ g_iBonusNum ] += IsHuman( iCell ) ? MAX_MONEY_FAIL_HUMANS : MAX_MONEY_WIN_ZOMBIES;
g_pDataBuySystem[ iCell ][ g_iExpNum ] += IsHuman( iCell ) ? MAX_EXP_FAIL_HUMANS : MAX_EXP_WIN_ZOMBIES;
}
default:
{
if (IsHuman( iCell ))
{
set_dhudmessage( DRAW_HUMAN, 0.05, 0.63, 2, 1.0, 3.5, 0.05, 0.05 )
show_dhudmessage( iCell, "%L", iCell, "ZBS_NO_ONE", MAX_MONEY_NO_ONE );
}
else
{
set_dhudmessage( DRAW_ZOMBIE, 0.05, 0.63, 2, 1.0, 3.5, 0.05, 0.05 )
show_dhudmessage( iCell, "%L", iCell, "ZBS_NO_ONE", MAX_MONEY_NO_ONE );
}
g_pDataBuySystem[ iCell ][ g_iBonusNum ] += MAX_MONEY_NO_ONE;
g_pDataBuySystem[ iCell ][ g_iExpNum ] += MAX_EXP_NO_ONE;
}
}
if( !task_exists( iCell ) )
set_task( 0.1, "CTask__CalculateMoney", iCell );
if( g_pDataBuySystem[ iCell ][ g_iLevelNum ] >= sizeof( g_szStatsLevel ) )
return;
while( g_pDataBuySystem[ iCell ][ g_iExpNum ] >= g_szStatsLevel[ g_pDataBuySystem[ iCell ][ g_iLevelNum ] ] )
{
g_pDataBuySystem[ iCell ][ g_iLevelNum ]++;
}
}
}
public zp_user_infected_post( pPlayer, pInfector, pNemesis )
{
if( is_user_alive( pInfector ) )
{
g_pDataBuySystem[ pInfector ][ g_iBonusNum ] += MAX_MONEY_ZOMBIES_KILL;
g_pDataBuySystem[ pInfector ][ g_iExpNum ] += MAX_EXP_INFECTION_KILL;
if( !task_exists( pInfector ) )
set_task( 0.1, "CTask__CalculateMoney", pInfector );
}
}
public CBasePlayer__Spawn_Post( pPlayer )
{
if( !is_user_alive( pPlayer ) )
return HAM_IGNORED;
g_pDataBuySystem[ pPlayer ][ g_iLastBought ] = 0;
g_pDataBuySystem[ pPlayer ][ g_bIsItemBought ][ 0 ] = false;
g_pDataBuySystem[ pPlayer ][ g_bIsItemBought ][ 1 ] = false;
g_pDataBuySystem[ pPlayer ][ g_bIsItemBought ][ 2 ] = false;
return HAM_IGNORED;
}
public CBasePlayer__TakeDamage_Pre( pevVictim, pevInflictor, pevAttacker, Float:flDamage, BitDamageType )
{
if( !is_user_alive( pevAttacker ) || !IsHuman( pevAttacker ) )
return HAM_IGNORED;
g_pDataBuySystem[ pevAttacker ][ g_iBonusNum ] += floatround( flDamage );
if( !task_exists( pevAttacker ) )
set_task( 0.1, "CTask__CalculateMoney", pevAttacker );
return HAM_IGNORED;
}
public CBasePlayer__Killed_Pre( pevVictim, pevKiller )
{
if( !is_user_alive( pevKiller) )
return HAM_IGNORED;
if( g_pDataBuySystem[ pevKiller ][ g_iLevelNum ] >= sizeof( g_szStatsLevel ) )
return HAM_IGNORED;
if( zp_get_user_zombie( pevVictim ) )
{
g_pDataBuySystem[ pevKiller ][ g_iExpNum ] += MAX_EXP_ZOMBIES_KILL;
}
else if( zp_get_user_nemesis( pevVictim ) )
{
g_pDataBuySystem[ pevKiller ][ g_iExpNum ] += MAX_EXP_NEMESIS_KILL;
g_pDataBuySystem[ pevKiller ][ g_iBonusNum ] += MAX_MONEY_NEMESIS_KILL;
set_dhudmessage( 50, 50, 255, -1.0, 0.63, 2, 1.0, 3.5, 0.05, 0.05 );
show_dhudmessage( pevKiller, "You killed the boss^nBonus: %d$", MAX_MONEY_NEMESIS_KILL ) // Magyarul: "Megölted a Nemesist^nBónusz Pénz: %d$"
}
else if( zp_get_user_survivor( pevVictim ) )
{
g_pDataBuySystem[ pevKiller ][ g_iExpNum ] += MAX_EXP_SURVIVOR_KILL;
g_pDataBuySystem[ pevKiller ][ g_iBonusNum ] += MAX_MONEY_SURVIVAl_KILL;
set_dhudmessage( 50, 50, 255, -1.0, 0.63, 2, 1.0, 3.5, 0.05, 0.05 );
show_dhudmessage( pevKiller, "You killed the survivor^nBonus: %d$", MAX_MONEY_SURVIVAl_KILL ) // Magyarul: "Megölted a Túlélőt^nBónusz Pénz: %d$"
}
else
{
g_pDataBuySystem[ pevKiller ][ g_iBonusNum ] += MAX_MONEY_HUMANS_KILL;
}
while( g_pDataBuySystem[ pevKiller ][ g_iExpNum ] >= g_szStatsLevel[ g_pDataBuySystem[ pevKiller ][ g_iLevelNum ] ] )
{
g_pDataBuySystem[ pevKiller ][ g_iLevelNum ]++;
}
if( !task_exists( pevKiller ) )
set_task( 0.1, "CTask__CalculateMoney", pevKiller );
return HAM_IGNORED;
}
public CBasePlayer__PreThink_Post( pPlayer )
{
if( !is_user_alive( pPlayer ) )
return HAM_IGNORED;
message_begin( MSG_ONE, g_iMessagesStatusIcon, _, pPlayer );
write_byte( 1 );
write_string( "buyzone" );
write_byte( 0 );
write_byte( 160 );
write_byte( 0 );
message_end( );
return HAM_IGNORED;
}
public ClientCommannd__BuyCommands( pPlayer ) // Vasarlo Menu resz
{
client_cmd(pPlayer, "spk cso_mod/select")
message_begin( MSG_ONE, g_iMessagesBuyClose, _, pPlayer );
message_end( );
new szBuffer[ 1024 ];
new iCallBackPistols = menu_makecallback( "CallBackPistols" );
new iCallBackRifles = menu_makecallback( "CallBackRifles" );
new iCallBackItems = menu_makecallback( "CallBackItems" );
new iCallBackKnifes = menu_makecallback( "CallBackKnifes" );
formatex( szBuffer, charsmax( szBuffer ), "%L", pPlayer, "ZBS_MAIN_TITLE" );
new iBuySystemMenu = menu_create( szBuffer, "BuySystemMenuHandler" )
formatex( szBuffer, charsmax( szBuffer ), "%L", pPlayer, "ZBS_MAIN_PISTOLS" );
menu_additem( iBuySystemMenu, szBuffer, "1", _, iCallBackPistols );
formatex( szBuffer, charsmax( szBuffer ), "%L", pPlayer, "ZBS_MAIN_SHOTGUNS" );
menu_additem( iBuySystemMenu, szBuffer, "2", _, iCallBackRifles );
formatex( szBuffer, charsmax( szBuffer ), "%L", pPlayer, "ZBS_MAIN_AUTO" );
menu_additem( iBuySystemMenu, szBuffer, "3", _, iCallBackRifles );
formatex( szBuffer, charsmax( szBuffer ), "%L", pPlayer, "ZBS_MAIN_RIFLE" );
menu_additem( iBuySystemMenu, szBuffer, "4", _, iCallBackRifles );
formatex( szBuffer, charsmax( szBuffer ), "%L^n", pPlayer, "ZBS_MAIN_MACHINE" );
menu_additem( iBuySystemMenu, szBuffer, "5", _, iCallBackRifles );
formatex( szBuffer, charsmax( szBuffer ), "%L^n", pPlayer, "ZBS_MAIN_EXTRA");
menu_additem( iBuySystemMenu, szBuffer, "6", _, iCallBackItems );
formatex( szBuffer, charsmax( szBuffer ), "%L", pPlayer, "ZBS_MAIN_KNIFES" );
menu_additem( iBuySystemMenu, szBuffer, "7", _, iCallBackKnifes );
formatex( szBuffer, charsmax( szBuffer ), "\w%L", pPlayer, "ZBS_MAIN_MORE" );
menu_setprop( iBuySystemMenu, MPROP_NEXTNAME, szBuffer );
formatex( szBuffer, charsmax( szBuffer ), "\w%L", pPlayer, "ZBS_MAIN_BACK" );
menu_setprop( iBuySystemMenu, MPROP_BACKNAME, szBuffer );
formatex( szBuffer, charsmax( szBuffer ), "\w%L^n^n", pPlayer, "ZBS_MAIN_EXIT" );
menu_setprop( iBuySystemMenu, MPROP_EXITNAME, szBuffer );
menu_display( pPlayer, iBuySystemMenu, .page = 0 );
return PLUGIN_HANDLED;
}
public BuySystemMenuHandler( pPlayer, iMenu, iItem )
{
client_cmd(pPlayer, "spk cso_mod/select")
if( iItem == MENU_EXIT )
{
menu_destroy( iMenu )
return PLUGIN_HANDLED
}
new iAccess;
new iCallback;
new szInfo[ 3 ];
menu_item_getinfo( iMenu, iItem, iAccess, szInfo, charsmax( szInfo ), _, _, iCallback );
menu_destroy( iMenu );
if( str_to_num( szInfo ) == 7 )
{
client_cmd( pPlayer, "knife" );
return PLUGIN_HANDLED;
}
BuySystemSubMenu( pPlayer, str_to_num( szInfo ) )
return PLUGIN_HANDLED
}
public BuySystemSubMenu( pPlayer, iNum )
{
client_cmd(pPlayer, "spk cso_mod/select")
static szBuffer[ 1024 ];
static iAccess[ 5 ];
static iItems;
formatex( szBuffer, charsmax( szBuffer ), "%L", pPlayer, "ZBS_SUBMENU" );
new iBuySystemSubMenu = menu_create( szBuffer, "BuySystemSubMenuHandler" );
for( iItems = 0; iItems < g_iExtraItemsNum; iItems++ )
{
if( g_pItemsData[ iItems ][ g_iExtraItemCtype ] != iNum || g_pItemsData[ iItems ][ g_iExtraItemIndex ] <= 0 || ( IsHuman( pPlayer ) && g_pItemsData[ iItems ][ g_iExtraItemTeam ] == 1 ) || ( !IsHuman( pPlayer ) && g_pItemsData[ iItems ][ g_iExtraItemTeam ] == 2 ) )
continue;
if( g_pDataBuySystem[ pPlayer ][ g_iMoneyNum ] < g_pItemsData[ iItems ][ g_iExtraItemCost ] )
formatex( szBuffer, charsmax( szBuffer ) , "%L \r( \wÁra: \y%d$ \r)", pPlayer, g_pItemsData[ iItems ][ g_szExtraItemKeyName ], g_pItemsData[ iItems ][ g_iExtraItemCost ] );
else if( get_playersnum( .flag = true ) < g_pItemsData[ iItems ][ g_iExtraItemOnline ] )
formatex( szBuffer, charsmax( szBuffer ) , "%L \r( %d$ ) \r( \wMinimum Fent lévő \y%d Játékos \r)", pPlayer, g_pItemsData[ iItems ][ g_szExtraItemKeyName ], g_pItemsData[ iItems ][ g_iExtraItemCost ], g_pItemsData[ iItems ][ g_iExtraItemOnline ] );
else if( g_pDataBuySystem[ pPlayer ][ g_iLevelNum ] < g_pItemsData[ iItems ][ g_iExtraItemLevel ] )
formatex( szBuffer, charsmax( szBuffer ) , "%L \r( \wSzint: \y%d \d| \wÁra: \y%d$ \r)", pPlayer, g_pItemsData[ iItems ][ g_szExtraItemKeyName ], g_pItemsData[ iItems ][ g_iExtraItemLevel ], g_pItemsData[ iItems ][ g_iExtraItemCost ] );
else
formatex( szBuffer, charsmax( szBuffer ) , "\w%L \r( \wÁra: \y%d$ \r)", pPlayer, g_pItemsData[ iItems ][ g_szExtraItemKeyName ], g_pItemsData[ iItems ][ g_iExtraItemCost ] );
num_to_str( iItems, iAccess, charsmax( iAccess ) );
menu_additem( iBuySystemSubMenu, szBuffer, iAccess );
}
formatex( szBuffer, charsmax( szBuffer ), "\w%L", pPlayer, "ZBS_MAIN_MORE" );
menu_setprop(iBuySystemSubMenu, MPROP_NEXTNAME, szBuffer );
formatex(szBuffer, charsmax( szBuffer ), "\w%L", pPlayer, "ZBS_MAIN_BACK" );
menu_setprop(iBuySystemSubMenu, MPROP_BACKNAME, szBuffer );
formatex(szBuffer, charsmax( szBuffer ), "\w%L", pPlayer, "ZBS_MAIN_EXIT" );
menu_setprop( iBuySystemSubMenu, MPROP_EXITNAME, szBuffer );
menu_display( pPlayer, iBuySystemSubMenu, .page = 0 );
return PLUGIN_HANDLED;
}
public BuySystemSubMenuHandler( pPlayer, iMenu, iItem )
{
client_cmd(pPlayer, "spk cso_mod/select")
if( iItem == MENU_EXIT )
{
menu_destroy( iMenu );
return PLUGIN_HANDLED;
}
new iAccess;
new iCallback;
new szInfo[ 3 ];
menu_item_getinfo( iMenu, iItem, iAccess, szInfo, charsmax( szInfo ), _, _, iCallback );
new iNum = str_to_num( szInfo );
menu_destroy( iMenu );
if( g_pDataBuySystem[ pPlayer ][ g_iMoneyNum ] < g_pItemsData[ iNum ][ g_iExtraItemCost ] )
{
message_begin( MSG_ONE, g_iMessagesBlinkAcct, _, pPlayer );
write_byte( 2 );
message_end( );
return PLUGIN_HANDLED;
}
if( !is_user_alive( pPlayer ) || ( g_pDataBuySystem[ pPlayer ][ g_flBuyTime ] <= get_gametime( ) && g_pItemsData[ iNum ][ g_iExtraItemCtype ] != 6 ) )
return PLUGIN_HANDLED;
if( get_playersnum( .flag = true ) < g_pItemsData[ iNum ][ g_iExtraItemOnline ] || g_pDataBuySystem[ pPlayer ][ g_iLevelNum ] < g_pItemsData[ iNum ][ g_iExtraItemLevel ] )
return PLUGIN_HANDLED;
if( ( 1<< g_pItemsData[ iNum ][g_iExtraItemCtype]) & BITSUM_SECTION_DROP )
drop_weapons( pPlayer, g_pItemsData[ iNum ][g_iExtraItemCtype] == 1 ? 2 : 1);
switch( g_pItemsData[ iNum ][ g_szExtraItemMode ] )
{
case 'Z': zp_force_buy_extra_item( pPlayer, g_pItemsData[ iNum ][ g_iExtraItemIndex ], true );
case 'D':
{
client_cmd(pPlayer, "cso_mod/buy.wav")
give_item( pPlayer, g_pItemsData[ iNum ][ g_szExtraItemName ] );
}
}
g_pDataBuySystem[ pPlayer ][ g_iBonusNum ] -= g_pItemsData[ iNum ][ g_iExtraItemCost ];
g_pDataBuySystem[ pPlayer ][ g_iLastBought ] += g_pItemsData[ iNum ][ g_iExtraItemCost ];
if( !task_exists( pPlayer ) )
set_task( 0.1, "CTask__CalculateMoney", pPlayer );
return PLUGIN_HANDLED;
}
public avoid_duplicated (msgId, msgDest, receiver)
{
return PLUGIN_HANDLED
}
stock drop_weapons(id, dropwhat)
{
static weapons[32], num, i, weaponid
num = 0
get_user_weapons(id, weapons, num)
for (i = 0; i < num; i++)
{
weaponid = weapons[i]
if ((dropwhat == 1 && ((1<<weaponid) & PRIMARY_WEAPONS_BIT_SUM)) || (dropwhat == 2 && ((1<<weaponid) & SECONDARY_WEAPONS_BIT_SUM)))
{
static wname[32]
get_weaponname(weaponid, wname, sizeof wname - 1)
engclient_cmd(id, "drop", wname)
}
}
}
public FW_playerprethink(id)
{
if(g_speed[id] == true)
{
set_user_maxspeed(id, get_cvar_float("zp_human_speed") + 50)
}
if(can_leap(id))
{
if(g_leap[id] == true)
{
static Float:velocity[3]
velocity_by_aim(id, 570, velocity)
velocity[2] = 275.00
set_pev(id, pev_velocity, velocity)
g_lastLeaptime[id] = get_gametime()
}
}
}
can_leap(id)
{
static buttons
buttons = pev(id, pev_button)
if (!(pev(id, pev_flags) & FL_ONGROUND) || fm_get_speed(id) < 20 || !(buttons & IN_JUMP) || !(buttons & IN_DUCK))
return false
if (get_gametime() - g_lastLeaptime[id] < 4.0)
return false
return true
}
stock fm_get_speed(entity)
{
static Float:velocity[3]
pev(entity, pev_velocity, velocity)
return floatround(vector_length(velocity))
}
public CTask__CalculateMoney( pPlayer )
{
UTIL__MessagesMoney( pPlayer, g_pDataBuySystem[ pPlayer ][ g_iMoneyNum ] + g_pDataBuySystem[ pPlayer ][ g_iBonusNum ], .bShow = true );
}
public CMessages__Money( Arg1, Arg2, pPlayer )
{
if( g_pDataBuySystem[ pPlayer ][ g_flBlockMoney ] >= get_gametime( ) )
return PLUGIN_HANDLED;
set_msg_arg_int( 1, get_msg_argtype( 1 ), g_pDataBuySystem[ pPlayer ][ g_iMoneyNum ] );
return PLUGIN_CONTINUE;
}
UTIL__MessagesMoney( pPlayer, iAmount, bool:bShow = true )
{
g_pDataBuySystem[ pPlayer ][ g_flBlockMoney ] = _:( get_gametime( ) + 1.0 );
g_pDataBuySystem[ pPlayer ][ g_iMoneyNum ] = ( min( iAmount, g_bIsAdmin[ pPlayer ] ? MAX_MONEY_ADMIN : MAX_MONEY ) );
g_pDataBuySystem[ pPlayer ][ g_iBonusNum ] = 0;
message_begin( MSG_ONE, g_iMessagesMoney, { 0, 0, 0 }, pPlayer );
write_long( g_pDataBuySystem[ pPlayer ][ g_iMoneyNum ] );
write_byte( bShow );
message_end( );
}
public CallBackPistols( pPlayer, iMenu, iItem )
return ( !is_user_alive( pPlayer ) || !IsHuman( pPlayer ) || g_pDataBuySystem[ pPlayer ][ g_flBuyTime ] <= get_gametime( ) ) ? ITEM_DISABLED : ITEM_ENABLED;
public CallBackRifles( pPlayer, iMenu, iItem )
return ( !is_user_alive( pPlayer ) || !IsHuman( pPlayer ) || g_pDataBuySystem[ pPlayer ][ g_flBuyTime ] <= get_gametime( ) ) ? ITEM_DISABLED : ITEM_ENABLED;
public CallBackItems( pPlayer, iMenu, iItem )
return ( !is_user_alive( pPlayer ) || zp_get_user_nemesis( pPlayer ) || zp_get_user_survivor( pPlayer ) ) ? ITEM_DISABLED : ITEM_ENABLED;
public CallBackKnifes( pPlayer, iMenu, iItem )
return ( !is_user_alive( pPlayer ) || !IsHuman( pPlayer ) || g_pDataBuySystem[ pPlayer ][ g_flBuyTime ] <= get_gametime( ) ) ? ITEM_DISABLED : ITEM_ENABLED;
bool:IsHuman( pPlayer )
return !!( !zp_get_user_zombie( pPlayer ) && !zp_get_user_nemesis( pPlayer ) && !zp_get_user_survivor( pPlayer ) );
public _ZBS_SetUserMoney_( pPlayer, iMoneyNum )
{
g_pDataBuySystem[ pPlayer ][ g_iMoneyNum ] = iMoneyNum;
UTIL__MessagesMoney( pPlayer, iMoneyNum , .bShow = true );
}
public _ZBS_SetUserLevel_( pPlayer, iLevelNum ){
g_pDataBuySystem[ pPlayer ][ g_iLevelNum ] = iLevelNum;
}
public _ZBS_SetUserExp_( pPlayer, iExplNum )
g_pDataBuySystem[ pPlayer ][ g_iExpNum ] = iExplNum;
public _ZBS_GetUserMoney_( pPlayer )
return g_pDataBuySystem[ pPlayer ][ g_iMoneyNum ];
public _ZBS_GetUserExp_( pPlayer )
return g_pDataBuySystem[ pPlayer ][ g_iExpNum ];
public _ZBS_GetUserLevel_( pPlayer )
return g_pDataBuySystem[ pPlayer ][ g_iLevelNum ];
public _ZBS_GetUserNextExp_( pPlayer )
return g_szStatsLevel[ g_pDataBuySystem[ pPlayer ][ g_iLevelNum ] ];
public _ZBS_GetUserMaxLevel_( pPlayer )
return sizeof( g_szStatsLevel );
public plugin_precache()
// MENU SELECT SOUND
precache_sound("cso_mod/select.wav");
stock zp_colored_print(const id, const input[], any:...)
{
new count = 1, players[32]
static msg[191]
vformat(msg, sizeof(msg) - 1, input, 3)
replace_all(msg, 190, "!n", "^x01")
replace_all(msg, 190, "!g", "^x04")
replace_all(msg, 190, "!t", "^x03")
if(id) players[0] = id; else get_players(players, count, "ch")
for(new i = 0; i < count; i++)
{
if(is_user_connected(players[i]))
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i])
write_byte(players[i])
write_string(msg)
message_end()
}
}
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1049\\ f0\\ fs16 \n\\ par }
*/
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1049\\ f0\\ fs16 \n\\ par }
*/