плагин VIP Custom
L 03/10/2017 - 22:16:43: [AMXX] Displaying debug trace (plugin "vip_custom.amxx")
L 03/10/2017 - 22:16:43: [AMXX] Run time error 10: native error (native "get_pdata_cbase")
L 03/10/2017 - 22:16:43: [AMXX] [0] vip_custom.sma::refill (line 903)
L 03/10/2017 - 22:16:43: [AMXX] [1] vip_custom.sma::GiveItem (line 596)
L 03/10/2017 - 22:16:43: [AMXX] Run time error 10: native error (native "get_pdata_cbase")
L 03/10/2017 - 22:16:43: [AMXX] [0] vip_custom.sma::refill (line 903)
L 03/10/2017 - 22:16:43: [AMXX] [1] vip_custom.sma::GiveItem (line 596)
- Код: Выделить всё
// Copyright © 2015 Vaqtincha
/************************ V.I.P Custom Weapons *************************
*
* Last update:
* 05/12/2015
*
* Cmds:
* weaponmenu or (say /vipmenu) - Free guns menu
*
* Credits:
* - Safety1st - for plugin "Weapon Menu Hardcoded" (edited by me)
* - Eg@r4$il - for plugin "Admins are VIPs + grenades + kevlar" (edited by me)
* - ZETA [M|E|N] - for plugin "VSVipPrefix"
* - xPaw - for code "ScoreBoard "VIP" string"
* - ConnorMcLeod for plugin "Bullet Damage" and cstrike_pdatas
* - Subb98 for plugin "No fall damage"
* - MrBone - for pieces of advice
* - Patriot~ua~ - for ideas and testing
* - c-s.net.ua members
*
***********************************************************************/
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <fakemeta>
#define PLUGIN_NAME "V.I.P Custom Weapons"
#define PLUGIN_VERSION "1.0.0"
#define PLUGIN_AUTHOR "Vaqtincha"
// macro; %1 - variable being modified, %2 - player id
#define CheckFlag(%1,%2) (%1 & (1 << (%2 & 31)))
#define SetFlag(%1,%2) (%1 |= (1 << (%2 & 31)))
#define ClearFlag(%1,%2) (%1 &= ~(1 << (%2 & 31)))
#define SetFlagConnected(%1) g_bConnected |= 1<<(%1 & 31)
#define ClearFlagConnected(%1) g_bConnected &= ~( 1<<(%1 & 31))
#define UserConnected(%1) (g_bConnected & 1<<(%1 & 31))
#define cs_get_user_hasprim(%1,%2) (get_pdata_cbase(%1, m_rgpPlayerItems_CBasePlayer[%2])>0)
#define fm_get_user_money(%1) get_pdata_int(%1, m_iAccount, XO_PLAYER)
#define fm_get_weapon_id(%1) get_pdata_int(%1, m_iId, XO_WEAPON)
#define fm_set_weapon_ammo(%1,%2) set_pdata_int(%1, m_iClip, %2, XO_WEAPON)
#if AMXX_VERSION_NUM < 183
#define HasShield(%1) (get_pdata_int(%1, m_iUserPrefs, XO_PLAYER) & m_bHasShield)
#else
#define HasShield(%1) get_pdata_bool(%1, m_bHasShield)
#endif
#define MAX_PLAYERS 32
#define IsPlayer(%1) ( 1 <= %1 <= g_iMaxPlayers )
#define ITEM_DEAGLE (1<<0)
#define ITEM_HE (1<<1)
#define ITEM_SMOKE (1<<2)
#define ITEM_FLASH (1<<3)
#define ITEM_AMMO (1<<4)
#define ITEM_ARMOR (1<<5)
#define ITEM_DEFUSER (1<<6)
new Trie:vipChannels
new g_iAlive[MAX_PLAYERS+1]
new bool:g_bAccess[MAX_PLAYERS+1]
new g_iPlayerPos[MAX_PLAYERS+1]
new g_iPlayerCol[MAX_PLAYERS+1]
new gbIsUsed, giCounter, g_bConnected, g_iMaxPlayers, target_map
new g_iKNFPluginId, g_iDGLPluginId, g_iM4A1PluginId, g_iAK47PluginId, g_iAWPPluginId
new g_iDGLGive, g_iM4A1Give, g_iAK47Give, g_iAWPGive
new g_iKNFReload, g_iDGLReload, g_iM4A1Reload, g_iAK47Reload, g_iAWPReload
new alw_round_eq, alw_round_fm, alw_round_m4ak, alw_round_awp, alw_round_buy
new vampire, vampire_max, hp_bonus, hp_bonus_hs, item_flags, delay, damager, droptype
new dmgcolors[3], scrtag, prefix, info, remove_limit, openmenu, nofall, recieved
new dglcost, m4cost, akcost, awpcost
static flagaccess, buyaccess
// Offsets
new const m_rgpPlayerItems_CBasePlayer[6] = {367, 368, ...}
#if AMXX_VERSION_NUM < 183
const m_bHasShield = 1<<24
const m_iUserPrefs = 510
#else
const m_bHasShield = 2043
#endif
const m_pNext = 42
const m_iClip = 51
const m_iId = 43
const XO_PLAYER = 5
const XO_WEAPON = 4
#if cellbits == 32
const m_iAccount = 115
#else
const m_iAccount = 140
#endif
const MENUKEYS = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4
|MENU_KEY_5|MENU_KEY_6|MENU_KEY_7|MENU_KEY_8|MENU_KEY_9|MENU_KEY_0
const KEY_EXIT = 10
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
const NOCLIP_WPN_BS = ((1<<CSW_HEGRENADE)|(1<<CSW_SMOKEGRENADE)|(1<<CSW_FLASHBANG)|(1<<CSW_KNIFE)|(1<<CSW_C4))
// Max BP ammo for weapons
new const MAXBPAMMO[31] = { -1, 52, -1, 90, 1, 32, 1, 100, 90, 1, 120, 100, 100, 90,
90, 90, 100, 120, 30, 120, 200, 32, 90, 120, 90, 2, 35, 90, 90, -1, 100
}
// Max clip for weapons
new const MAXCLIP[CSW_P90+1] = { -1, 13, -1, 10, 1, 7, 1, 30, 30, 1, 30, 20, 25, 30,
35, 25, 12, 20, 10, 30, 100, 8, 30, 30, 20, 2, 7, 30, 30, -1, 50
}
// Ammo Type Names for weapons
new const AMMOTYPE[][] = { "", "357sig", "", "762nato", "", "buckshot", "", "45acp", "556nato",
"", "9mm", "57mm", "45acp", "556nato", "556nato", "556nato", "45acp", "9mm", "338magnum", "9mm",
"556natobox","buckshot", "556nato", "9mm", "762nato", "", "50ae", "556nato", "762nato", "", "57mm"
}
new const Float:g_flCoords[][] = { {0.50, 0.40},{0.56, 0.44},{0.60, 0.50},
{0.56, 0.56},{0.50, 0.60},{0.44, 0.56},{0.40, 0.50},{0.44, 0.44}
}
new const g_iColors[][] = { {0, 127, 255},/*blue*/{255, 127, 0},/*orange*/
{127, 0, 255},/*purple*/{0, 255, 0},/*green*/{255, 24, 119},/*pink*/
{228, 228, 228},/*gray*/{165, 42, 42},/*brown*/{255, 255, 0}/*yellow*/
}
new channels[8][] = {
"#Cstrike_Chat_CT","#Cstrike_Chat_T","#Cstrike_Chat_CT_Dead","#Cstrike_Chat_T_Dead",
"#Cstrike_Chat_Spec","#Cstrike_Chat_All","#Cstrike_Chat_AllDead","#Cstrike_Chat_AllSpec"
}
new newChannels[8][] = {
"^4(^1Counter-Terrorist^4) [^3V.I.P^4] ^3%s1^1 : ^4%s2",
"^4(^1Terrorist^4) [^3V.I.P^4] ^3%s1^1 : ^4%s2",
"^1*DEAD*^4(^1Counter-Terrorist^4) [^3V.I.P^4] ^3%s1^1 : ^4%s2",
"^1*DEAD*^4(^1Terrorist^4) [^3V.I.P^4] ^3%s1^1 : ^4%s2",
"^4(^1Spectator^4) [^3V.I.P^4] ^3%s1^1 : ^4%s2",
"^4[^3V.I.P^4] ^3%s1^1 : ^4%s2",
"^1*DEAD* ^4[^3V.I.P^4] ^3%s1^1 : ^4%s2",
"^1*SPEC* ^4[^3V.I.P^4] ^3%s1^1 : ^4%s2"
}
public plugin_init()
{
new mapname[4]
get_mapname(mapname, charsmax(mapname))
if(equali(mapname, "de_") || equali(mapname, "cs_"))
{
target_map = true
}
register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
register_cvar("vip_custom_version", PLUGIN_VERSION, FCVAR_SERVER|FCVAR_EXTDLL|FCVAR_SPONLY)
register_concmd("vip_custom_reloadcfg", "cmdReloadCfg", ADMIN_CFG)
register_dictionary ("vip_custom.txt" )
loadconfig()
g_iMaxPlayers = get_maxplayers()
RegisterHam(Ham_Spawn, "player", "playerspawn_post", 1)
RegisterHam(Ham_Killed, "player", "playerkilled_post", 1)
if(nofall) RegisterHam(Ham_TakeDamage, "player", "HamTakeDamagePlayerPre", 0)
if(scrtag) register_message( get_user_msgid("ScoreAttrib"), "msgScoreAttrib" )
if(damager) register_event("Damage", "Event_Damage", "b", "2>0", "3=0")
if(prefix)
{
vipChannels = TrieCreate()
for (new i = 0; i < 8; i++)
{
TrieSetString(vipChannels, channels[i], newChannels[i])
}
register_message(get_user_msgid("SayText"), "messageSayText")
}
if(target_map)
{
// Cmds
register_clcmd( "weaponmenu", "MenuCommand" )
register_clcmd( "say /vipmenu", "MenuCommand" )
// Menu
register_menucmd( register_menuid( "WeaponMenu" ),MENUKEYS, "MenuHandler" )
register_menucmd( register_menuid( "BuyMenu" ),MENUKEYS, "MenuHandlerCustom" )
// Events
register_event( "HLTV", "Event_NewRound", "a", "1=0", "2=0" )
register_event( "TextMsg", "Event_NewGame", "a", "2=#Game_will_restart_in", "2=#Game_Commencing" )
if(vampire) register_event( "DeathMsg", "Event_DeathMsg", "a")
if(remove_limit) register_event( "BarTime", "event_bomb_planting", "be", "1=3")
}
}
public cmdReloadCfg(id, level, cid)
{
if (!cmd_access(id, level, cid, 1))
return PLUGIN_HANDLED
set_task(0.2, "delayed_load")
return PLUGIN_HANDLED
}
public delayed_load()
{
item_flags = 0
loadconfig()
if( g_iKNFPluginId > 0 && g_iKNFReload > 0)
{
callfunc_begin_i(g_iKNFReload, g_iKNFPluginId)
callfunc_end()
}
if( g_iDGLPluginId > 0 && g_iDGLReload > 0)
{
callfunc_begin_i(g_iDGLReload, g_iDGLPluginId)
callfunc_end()
}
if(g_iM4A1PluginId > 0 && g_iM4A1Reload > 0)
{
callfunc_begin_i(g_iM4A1Reload, g_iM4A1PluginId)
callfunc_end()
}
if(g_iAK47PluginId > 0 && g_iAK47Reload > 0)
{
callfunc_begin_i(g_iAK47Reload, g_iAK47PluginId)
callfunc_end()
}
if(g_iAWPPluginId > 0 && g_iAWPReload > 0)
{
callfunc_begin_i(g_iAWPReload, g_iAWPPluginId)
callfunc_end()
}
}
public loadconfig()
{
new ConfigFile[64], szMsg[128] // "addons/amxmodx/configs/vip_custom.ini" 37
get_localinfo("amxx_configsdir", ConfigFile, charsmax(ConfigFile))
add(ConfigFile, charsmax(ConfigFile), "/vip_custom.ini")
if( !file_exists(ConfigFile) )
{
formatex( szMsg, charsmax(szMsg), "%s Config File Not Found!", PLUGIN_NAME )
set_fail_state(szMsg)
return
}
new fp = fopen(ConfigFile, "rt")
if( fp )
{
new Datas[86], Setting[32], Value[15]
while( !feof(fp) )
{
fgets(fp, Datas, charsmax(Datas))
trim(Datas)
if(!Datas[0] || Datas[0] == ';' || Datas[0] == '#' || Datas[0] == '/' || Datas[0] == '[')
{
continue
}
new Sign[3]
parse(Datas, Setting, charsmax(Setting), Sign, charsmax(Sign), Value, charsmax(Value))
if( equali(Setting, "flag_access"))
{
flagaccess = read_flags(Value)
}else if( equali(Setting, "buy_access")){
buyaccess = read_flags(Value)
}else if( equali(Setting, "give_item_flags"))
{
if (containi(Value, "p") != -1)
{
item_flags |= ITEM_DEAGLE
}
if (containi(Value, "h") != -1)
{
item_flags |= ITEM_HE
}
if (containi(Value, "s") != -1)
{
item_flags |= ITEM_SMOKE
}
if (containi(Value, "f") != -1)
{
item_flags |= ITEM_FLASH
}
if (containi(Value, "a") != -1)
{
item_flags |= ITEM_AMMO
}
if (containi(Value, "v") != -1)
{
item_flags |= ITEM_ARMOR
}
if (containi(Value, "d") != -1)
{
item_flags |= ITEM_DEFUSER
}
}else if( equali(Setting, "allowed_round_equip")){
alw_round_eq = str_to_num(Value)
}else if( equali(Setting, "vip_tag")){
scrtag = str_to_num(Value) ? true : false
}else if( equali(Setting, "vip_prefix")){
prefix = str_to_num(Value) ? true : false
}else if( equali(Setting, "vip_info")){
info = str_to_num(Value) ? true : false
}else if( equali(Setting, "drop_type")){
droptype = str_to_num(Value)
}else if( equali(Setting, "no_fall_damage")){
nofall = str_to_num(Value) ? true : false
}else if( equali(Setting, "remove_limit")){
remove_limit = str_to_num(Value) ? true : false
}else if( equali(Setting, "bullet_damage")){
damager = str_to_num(Value)
}else if( equali(Setting, "bullet_damage_recieved")){
recieved = str_to_num(Value) ? true : false
}else if( equali(Setting, "bullet_damage_color")){
new red[10], green[10], blue[10]
parse(Value, red, charsmax(red), green, charsmax(green), blue, charsmax(blue))
dmgcolors[0] = str_to_num(red)
dmgcolors[1] = str_to_num(green)
dmgcolors[2] = str_to_num(blue)
}else if( equali(Setting, "vampire")){
vampire = str_to_num(Value) ? true : false
}else if( equali(Setting, "vampire_max_hp")){
vampire_max = str_to_num(Value)
}else if( equali(Setting, "vampire_hp")){
hp_bonus = str_to_num(Value)
}else if( equali(Setting, "vampire_hp_hs")){
hp_bonus_hs = str_to_num(Value)
}else if( equali(Setting, "open_menu")){
openmenu = str_to_num(Value) ? true : false
}else if( equali(Setting, "close_delay")){
delay = str_to_num(Value)
}else if( equali(Setting, "allowed_round_famas")){
alw_round_fm = str_to_num(Value)
}else if( equali(Setting, "allowed_round_m4ak")){
alw_round_m4ak = str_to_num(Value)
}else if( equali(Setting, "allowed_round_awp")){
alw_round_awp = str_to_num(Value)
}else if( equali(Setting, "allowed_round_buymenu")){
alw_round_buy = str_to_num(Value)
}else if( equali(Setting, "deagle_cost")){
dglcost = str_to_num(Value)
}else if( equali(Setting, "m4a1_cost")){
m4cost = str_to_num(Value)
}else if( equali(Setting, "ak47_cost")){
akcost = str_to_num(Value)
}else if( equali(Setting, "awp_cost")){
awpcost = str_to_num(Value)
}
}
formatex( szMsg, charsmax(szMsg), "%s Config Successfully Loaded!", PLUGIN_NAME )
server_print(szMsg)
}
}
public plugin_cfg()
{
g_iKNFPluginId = is_plugin_loaded("V.I.P Custom KNIFE")
if( g_iKNFPluginId > 0 )
{
g_iKNFReload = get_func_id("loadconfig", g_iKNFPluginId)
}
g_iDGLPluginId = is_plugin_loaded("V.I.P Custom DEAGLE")
if( g_iDGLPluginId > 0 )
{
g_iDGLGive = get_func_id("buyCMD", g_iDGLPluginId)
g_iDGLReload = get_func_id("loadconfig", g_iDGLPluginId)
}
g_iM4A1PluginId = is_plugin_loaded("V.I.P Custom M4A1")
if( g_iM4A1PluginId > 0 )
{
g_iM4A1Give = get_func_id("buyCMD", g_iM4A1PluginId)
g_iM4A1Reload = get_func_id("loadconfig", g_iM4A1PluginId)
}
g_iAK47PluginId = is_plugin_loaded("V.I.P Custom AK-47")
if( g_iAK47PluginId > 0 )
{
g_iAK47Give = get_func_id("buyCMD", g_iAK47PluginId)
g_iAK47Reload = get_func_id("loadconfig", g_iAK47PluginId)
}
g_iAWPPluginId = is_plugin_loaded("V.I.P Custom AWP")
if( g_iAWPPluginId > 0 )
{
g_iAWPGive = get_func_id("buyCMD", g_iAWPPluginId)
g_iAWPReload = get_func_id("loadconfig", g_iAWPPluginId)
}
}
public client_putinserver(id)
{
g_iAlive[id] = 0
g_bAccess[id] = get_user_flags(id) & flagaccess ? true : false
if(info)
{
set_task(1.0, "vip_connected", id)
if(target_map)
{
set_task(30.0, "vip_help", id)
}
}
if(!is_user_hltv(id))
{
SetFlagConnected(id)
}
}
public client_disconnect(id)
{
ClearFlagConnected(id)
}
public playerspawn_post(id)
{
g_iAlive[id] = is_user_alive(id)
g_bAccess[id] = get_user_flags(id) & flagaccess ? true : false
set_task(0.2, "GiveItem", id + 6910)
}
public playerkilled_post(id, attacker, shouldgib)
{
g_iAlive[id] = 0
}
public Event_NewRound()
{
gbIsUsed = 0
giCounter++
}
public Event_NewGame()
{
giCounter = 0
}
// Vip connected info/help
public vip_connected(id)
{
if(g_bAccess[id])
{
new name[32]
get_user_name(id, name, 31)
ChatColor(0, "%L", LANG_SERVER,"VIP_CONNECTED", name)
}
}
public vip_help(id)
{
if(g_bAccess[id])
{
new name[32]
get_user_name(id, name, 31)
ChatColor(id, "%L", LANG_SERVER,"VIP_HELP", name)
}
}
// ScoreBoard "VIP" String
public msgScoreAttrib(const MsgId, const MsgType, const MsgDest)
{
static id; id = get_msg_arg_int(1)
if(get_msg_arg_int(2) || !(g_bAccess[id]))
return
set_msg_arg_int(2, ARG_BYTE, (1<<2))
}
// [V.I.P] prefix and green chat
public messageSayText(msgid, msgdest, id)
{
new channel[64]
get_msg_arg_string(2, channel, charsmax(channel))
if(!TrieGetString(vipChannels, channel, channel, charsmax(channel)))
{
return
}
new sender = get_msg_arg_int(1)
if(g_bAccess[sender])
{
set_msg_arg_string(2, channel)
}
}
public plugin_end()
{
TrieDestroy(vipChannels)
}
// Bullet Damage
public Event_Damage(iVictim)
{
if((read_data(4) || read_data(5) || read_data(6)))
{
static damage; damage = read_data(2)
if( recieved && IsPlayer(iVictim) && UserConnected(iVictim))
{
if(g_bAccess[iVictim])
{
set_hudmessage(255, 0, 0, 0.45, 0.50, 0, 6.0, 3.0, _, _, 3)
show_hudmessage(iVictim, "%d", damage)
}
}
new id = get_user_attacker(iVictim)
if( IsPlayer(id) && UserConnected(id))
{
new iPos = ++g_iPlayerPos[id]
if( iPos == sizeof(g_flCoords))
{
iPos = g_iPlayerPos[id] = 0
}
new iCol = ++g_iPlayerCol[id]
if( iCol == sizeof(g_iColors))
{
iCol = g_iPlayerCol[id] = 0
}
if(g_bAccess[id])
{
switch(damager)
{ case 1:{
set_hudmessage(dmgcolors[0], dmgcolors[1], dmgcolors[2], 0.51, 0.51, 0, 6.0, 3.0, _, _, 3)
}
case 2:{
set_hudmessage(dmgcolors[0], dmgcolors[1], dmgcolors[2], Float:g_flCoords[iPos][0], Float:g_flCoords[iPos][1], 0, 0.1, 2.5, 0.02, 0.02, -1)
}
case 3:{
set_hudmessage(g_iColors[iCol][0], g_iColors[iCol][1], g_iColors[iCol][2], Float:g_flCoords[iPos][0], Float:g_flCoords[iPos][1], 0, 0.1, 2.5, 0.02, 0.02, -1)
}
}
show_hudmessage(id, "%d", damage)
}
}
}
}
// Vampire
public Event_DeathMsg()
{
new KillerId = read_data(1)
new VictimId = read_data(2)
new HeadShot = read_data(3)
if(KillerId == VictimId || !IsPlayer(KillerId)
|| !g_iAlive[KillerId] || !(g_bAccess[KillerId])
|| get_user_team(KillerId) == get_user_team(VictimId))
{
return
}
new KillerHealth = get_user_health(KillerId)
new KillerMaxHealth = vampire_max
if(KillerHealth < KillerMaxHealth)
{
new BonusKillerHealth = HeadShot ? hp_bonus_hs : hp_bonus
new NewKillerHealth = min(KillerHealth + BonusKillerHealth, KillerMaxHealth)
fm_set_user_health(KillerId, NewKillerHealth)
set_hudmessage(0, 255, 100, -1.0, 0.15, 0, 1.0, 1.0, 0.1, 0.1, -1)
show_hudmessage(KillerId, "Healed +%d hp", NewKillerHealth - KillerHealth)
}
}
// Terrorist planter :D
public event_bomb_planting(id)
{
if(!g_iAlive[id] || !g_bAccess[id])
return
set_pev(id, pev_maxspeed, 250.0)
}
// No fall damage
public HamTakeDamagePlayerPre(victim, inflictor, attacker, Float:dmg, dmg_type)
{
if(g_bAccess[victim])
{
if(dmg_type & (1<<5)/* dmg fall */)
{
return HAM_SUPERCEDE
}
}
return HAM_IGNORED
}
// Equip/Deagle giving
public GiveItem(TaskID)
{
new id = TaskID - 6910
if( !( g_bAccess[id]) || !g_iAlive[id])
{
return
}
if(item_flags & ITEM_AMMO)
{
giveammo(id)
refill(id)
}
if(!target_map)
{
return
}
if(giCounter >= alw_round_eq)
{
if(item_flags & ITEM_DEAGLE)
{
if(user_has_weapon(id,CSW_DEAGLE))
{
ExecuteHamB(Ham_GiveAmmo, id, 35, "50ae", 35)
}else{
drop_weapons(id, 2)
fm_give_item(id,"weapon_deagle")
ExecuteHamB(Ham_GiveAmmo, id, 35, "50ae", 35)
}
}
if(item_flags & ITEM_HE)
{
fm_give_item(id,"weapon_hegrenade")
}
if(item_flags & ITEM_SMOKE)
{
fm_give_item(id,"weapon_smokegrenade")
}
if(item_flags & ITEM_FLASH)
{
fm_give_item(id,"weapon_flashbang")
fm_give_item(id,"weapon_flashbang")
}
if(item_flags & ITEM_ARMOR)
{
fm_give_item(id,"item_assaultsuit")
fm_set_user_armor(id,100)
}
if(item_flags & ITEM_DEFUSER)
{
if(get_user_team(id) == 2)
{
fm_give_item(id,"item_thighpack")
}
}
}
if(openmenu)
{
if(!cs_get_user_hasprim(id, 1) && giCounter >= alw_round_fm)
{
MenuCommand(id)
}
}
}
// Weapon Menu
public MenuCommand(id)
{
new szMenu[512] // it is maximum allowed menu size
new iKeys
new iLen = formatex( szMenu, charsmax(szMenu), "\y%L\R%L^t^n^n", LANG_SERVER,"WEAPONS_MENU", LANG_SERVER,"ROUND")
new iItemsDisabled
if( !( g_bAccess[id]) || !g_iAlive[id] || CheckFlag( gbIsUsed, id ))
iItemsDisabled = 1
if( iItemsDisabled || giCounter < alw_round_fm )
{
iLen += formatex( szMenu[iLen], charsmax(szMenu) - iLen, "\d1.^t%L\R\r%d^t^n", LANG_SERVER,"WEAPON_FAMAS", alw_round_fm)
}else{
iLen += formatex( szMenu[iLen], charsmax(szMenu) - iLen, "\y1.^t\w%L\R\y%d^t^n", LANG_SERVER,"WEAPON_FAMAS", alw_round_fm)
iKeys |= MENU_KEY_1
}
if( iItemsDisabled || giCounter < alw_round_m4ak )
{
iLen += formatex( szMenu[iLen], charsmax(szMenu) - iLen, "\d2.^t%L\R\r%d^t^n", LANG_SERVER, "WEAPON_M4A1", alw_round_m4ak)
}else{
iLen += formatex( szMenu[iLen], charsmax(szMenu) - iLen, "\y2.^t\w%L\R\y%d^t^n", LANG_SERVER, "WEAPON_M4A1", alw_round_m4ak)
iKeys |= MENU_KEY_2
}
if( iItemsDisabled || giCounter < alw_round_m4ak )
{
iLen += formatex( szMenu[iLen], charsmax(szMenu) - iLen, "\d3.^t%L\R\r%d^t^n", LANG_SERVER,"WEAPON_AK-47", alw_round_m4ak)
}else{
iLen += formatex( szMenu[iLen], charsmax(szMenu) - iLen, "\y3.^t\w%L\R\y%d^t^n", LANG_SERVER,"WEAPON_AK-47", alw_round_m4ak)
iKeys |= MENU_KEY_3
}
if( iItemsDisabled || giCounter < alw_round_awp )
{
iLen += formatex( szMenu[iLen], charsmax(szMenu) - iLen, "\d4.^t%L\R\r%d^t^n", LANG_SERVER,"WEAPON_AWP", alw_round_awp)
}else{
iLen += formatex( szMenu[iLen], charsmax(szMenu) - iLen, "\y4.^t\w%L\R\y%d^t^n", LANG_SERVER,"WEAPON_AWP", alw_round_awp)
iKeys |= MENU_KEY_4
}
if(!( get_user_flags(id) & buyaccess) || !g_iAlive[id] || giCounter < alw_round_buy)
{
iLen += formatex( szMenu[iLen], charsmax(szMenu) - iLen, "^n\d5.^t%L^n", LANG_SERVER,"BUY_MENU")
}else{
iLen += formatex( szMenu[iLen], charsmax(szMenu) - iLen, "^n\y5.^t\w%L^n", LANG_SERVER,"BUY_MENU")
iKeys |= MENU_KEY_5
}
formatex( szMenu[iLen], charsmax(szMenu) - iLen, "^n\y0.^t\w%L", LANG_SERVER, "EXIT" )
iKeys |= MENU_KEY_0|MENU_KEY_6|MENU_KEY_7|MENU_KEY_8|MENU_KEY_9
show_menu( id, iKeys, szMenu, delay, .title = "WeaponMenu" )
return PLUGIN_HANDLED
}
// Custom Menu
public MenuCommandCustom(id)
{
new szMenu[512] // it is maximum allowed menu size
new iKeys
new usermoney = fm_get_user_money(id)
new iLen = formatex( szMenu, charsmax(szMenu), "\y%L\R$^t^t%L^t^n^n", LANG_SERVER,"BUY_MENU", LANG_SERVER,"COST")
new iItemsDisabled
if( !( get_user_flags(id) & buyaccess) || !g_iAlive[id] /*|| CheckFlag( gbIsUsed, id )*/)
iItemsDisabled = 1
if( iItemsDisabled || g_iDGLPluginId < 0 )
{
iLen += formatex( szMenu[iLen], charsmax(szMenu) - iLen, "\r1.^t%L^t^n", LANG_SERVER,"CUSTOM_DEAGLE")
}else if( iItemsDisabled || usermoney < dglcost ){
iLen += formatex( szMenu[iLen], charsmax(szMenu) - iLen, "\d1.^t%L\R\r%d^t^n", LANG_SERVER,"CUSTOM_DEAGLE", dglcost)
}else{
iLen += formatex( szMenu[iLen], charsmax(szMenu) - iLen, "\y1.^t\w%L\R\y%d^t^n", LANG_SERVER,"CUSTOM_DEAGLE", dglcost)
iKeys |= MENU_KEY_1
}
if( iItemsDisabled || g_iM4A1PluginId < 0 )
{
iLen += formatex( szMenu[iLen], charsmax(szMenu) - iLen, "\r2.^t%L^t^n", LANG_SERVER,"CUSTOM_M4A1")
}else if( iItemsDisabled || usermoney < m4cost){
iLen += formatex( szMenu[iLen], charsmax(szMenu) - iLen, "\d2.^t%L\R\r%d^t^n", LANG_SERVER,"CUSTOM_M4A1", m4cost)
}else{
iLen += formatex( szMenu[iLen], charsmax(szMenu) - iLen, "\y2.^t\w%L\R\y%d^t^n", LANG_SERVER,"CUSTOM_M4A1", m4cost)
iKeys |= MENU_KEY_2
}
if( iItemsDisabled || g_iAK47PluginId < 0 )
{
iLen += formatex( szMenu[iLen], charsmax(szMenu) - iLen, "\r3.^t%L^t^n", LANG_SERVER, "CUSTOM_AK-47")
}else if( iItemsDisabled || usermoney < akcost){
iLen += formatex( szMenu[iLen], charsmax(szMenu) - iLen, "\d3.^t%L\R\r%d^t^n", LANG_SERVER, "CUSTOM_AK-47", akcost)
}else{
iLen += formatex( szMenu[iLen], charsmax(szMenu) - iLen, "\y3.^t\w%L\R\y%d^t^n", LANG_SERVER, "CUSTOM_AK-47", akcost)
iKeys |= MENU_KEY_3
}
if( iItemsDisabled || g_iAWPPluginId < 0 )
{
iLen += formatex( szMenu[iLen], charsmax(szMenu) - iLen, "\r4.^t%L^t^n", LANG_SERVER, "CUSTOM_AWP")
}else if( iItemsDisabled || usermoney < awpcost){
iLen += formatex( szMenu[iLen], charsmax(szMenu) - iLen, "\d4.^t%L\R\r%d^t^n", LANG_SERVER, "CUSTOM_AWP", awpcost)
}else{
iLen += formatex( szMenu[iLen], charsmax(szMenu) - iLen, "\y4.^t\w%L\R\y%d^t^n", LANG_SERVER, "CUSTOM_AWP", awpcost)
iKeys |= MENU_KEY_4
}
if( !( g_bAccess[id]) || !g_iAlive[id])
{
iLen += formatex( szMenu[iLen], charsmax(szMenu) - iLen, "^n\d5.^t%L^n", LANG_SERVER,"BACK")
}else{
iLen += formatex( szMenu[iLen], charsmax(szMenu) - iLen, "^n\y5.^t\w%L^n", LANG_SERVER,"BACK")
iKeys |= MENU_KEY_5
}
formatex( szMenu[iLen], charsmax(szMenu) - iLen, "^n\y0.^t\w%L", LANG_SERVER, "EXIT" )
iKeys |= MENU_KEY_0|MENU_KEY_6|MENU_KEY_7|MENU_KEY_8|MENU_KEY_9
show_menu( id, iKeys, szMenu, delay, .title = "BuyMenu" )
return PLUGIN_HANDLED
}
// Weapon Menu Func
public MenuHandler(id, key)
{
if(key == KEY_EXIT - 1 || !g_iAlive[id])
return PLUGIN_HANDLED
switch(key)
{
case 0:{
if(user_has_weapon(id,CSW_FAMAS))
{
client_print(id, print_center, "%L", LANG_SERVER,"ALREADY_OWN_WEAPON")
}
else{
drop_weapons(id, 1)
fm_give_item(id,"weapon_famas")
ExecuteHamB(Ham_GiveAmmo, id, 90, "556nato", 90)
SetFlag( gbIsUsed, id )
}
}
case 1:{
if(user_has_weapon(id,CSW_M4A1))
{
client_print(id, print_center, "%L", LANG_SERVER,"ALREADY_OWN_WEAPON")
}
else{
drop_weapons(id, 1)
fm_give_item(id,"weapon_m4a1")
ExecuteHamB(Ham_GiveAmmo, id, 90, "556nato", 90)
SetFlag( gbIsUsed, id )
}
}
case 2:{
if(user_has_weapon(id,CSW_AK47))
{
client_print(id, print_center, "%L", LANG_SERVER,"ALREADY_OWN_WEAPON")
}
else{
drop_weapons(id, 1)
fm_give_item(id,"weapon_ak47")
ExecuteHamB(Ham_GiveAmmo, id, 90, "762nato", 90)
SetFlag( gbIsUsed, id )
}
}
case 3:{
if(user_has_weapon(id,CSW_AWP))
{
client_print(id, print_center, "%L", LANG_SERVER,"ALREADY_OWN_WEAPON")
}
else{
drop_weapons(id, 1)
fm_give_item(id,"weapon_awp")
ExecuteHamB(Ham_GiveAmmo, id, 30, "338magnum", 30)
SetFlag( gbIsUsed, id )
}
}
case 4:{
MenuCommandCustom(id)
}
}
return PLUGIN_HANDLED
}
// Custom Menu func
public MenuHandlerCustom(id, key)
{
if(key == KEY_EXIT - 1 || !g_iAlive[id])
return PLUGIN_HANDLED
switch(key)
{
case 0:{
if(g_iDGLPluginId > 0 && g_iDGLGive > 0)
{
callfunc_begin_i(g_iDGLGive, g_iDGLPluginId)
callfunc_push_int(id)
callfunc_end()
// SetFlag( gbIsUsed, id )
}
}
case 1:{
if(g_iM4A1PluginId > 0 && g_iM4A1Give > 0)
{
callfunc_begin_i(g_iM4A1Give, g_iM4A1PluginId)
callfunc_push_int(id)
callfunc_end()
// SetFlag( gbIsUsed, id )
}
}
case 2:{
if(g_iAK47PluginId > 0 && g_iAK47Give > 0)
{
callfunc_begin_i(g_iAK47Give, g_iAK47PluginId)
callfunc_push_int(id)
callfunc_end()
// SetFlag( gbIsUsed, id )
}
}
case 3:{
if(g_iAWPPluginId > 0 && g_iAWPGive > 0)
{
callfunc_begin_i(g_iAWPGive, g_iAWPPluginId)
callfunc_push_int(id)
callfunc_end()
// SetFlag( gbIsUsed, id )
}
}
case 4:{
MenuCommand(id)
}
}
return PLUGIN_HANDLED
}
//================================ STOCKS ==============================//
stock giveammo(id)
{
new weap_ids[32], num_weaps
num_weaps = 0
get_user_weapons(id, weap_ids, num_weaps)
for (new i = 0; i < num_weaps; i++)
{
new weap_id = weap_ids[i]
new ammo = MAXBPAMMO[weap_id]
if(!( NOCLIP_WPN_BS & (1<<weap_id)))
{
ExecuteHamB(Ham_GiveAmmo, id, MAXBPAMMO[weap_id], AMMOTYPE[weap_id], MAXBPAMMO[weap_id], ammo)
}
}
}
stock refill(id)
{
for(new slot = 1; slot<= 2; slot++)
{
new iWeapon = get_pdata_cbase(id, m_rgpPlayerItems_CBasePlayer[slot])
while( iWeapon > 0 )
{
new iId = fm_get_weapon_id(iWeapon)
if( !( NOCLIP_WPN_BS & (1<<iId) ) )
{
fm_set_weapon_ammo(iWeapon, MAXCLIP[iId])
iWeapon = get_pdata_cbase(iWeapon, m_pNext, XO_WEAPON)
}
}
}
}
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) || HasShield(id))
|| (dropwhat == 2 && ((1<<weaponid) & SECONDARY_WEAPONS_BIT_SUM )))
{
static wname[32]
get_weaponname(weaponid, wname, charsmax(wname))
switch(droptype)
{
case 0: ham_strip_weapon(id, wname)
case 1: engclient_cmd(id, "drop", wname)
}
}
}
}
stock ham_strip_weapon(id,weapon[])
{
if(!equal(weapon,"weapon_",7)) return 0
new wId = get_weaponid(weapon)
if(!wId) return 0
new wEnt
while((wEnt = engfunc(EngFunc_FindEntityByString, wEnt, "classname", weapon)) && pev(wEnt, pev_owner) != id) {}
if(!wEnt) return 0
new iTmp
if(get_user_weapon(id, iTmp, iTmp) == wId) ExecuteHamB(Ham_Weapon_RetireWeapon, wEnt)
if(!ExecuteHamB(Ham_RemovePlayerItem, id, any:wEnt)) return 0
ExecuteHamB(Ham_Item_Kill, wEnt)
set_pev(id, pev_weapons, pev(id, pev_weapons) & ~(1<<wId))
return 1
}
stock ChatColor(const id, const input[], any:...)
{
new count = 1, players[32], i
static msg[191]
vformat(msg, 190, input, 3)
replace_all(msg, 190, "!g", "^4") // Green Color
replace_all(msg, 190, "!n", "^1") // Default Color
replace_all(msg, 190, "!t", "^3") // Team Color
if(id)players[0] = id; else get_players(players, count, "ch")
{
for(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()
}
}
}
}
stock fm_set_user_armor(index, armor)
{
set_pev(index, pev_armorvalue, float(armor))
return 1
}
stock fm_set_user_health(index, health)
{
health > 0 ? set_pev(index, pev_health, float(health)) : dllfunc(DLLFunc_ClientKill, index)
return 1
}
stock fm_give_item(index, const item[])
{
if (!equal(item, "weapon_", 7) && !equal(item, "ammo_", 5) && !equal(item, "item_", 5))
return 0
new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, item))
if (!pev_valid(ent))
return 0
плагин Evil Army
L 03/17/2017 - 18:02:12: [AMXX] Displaying debug trace (plugin "EvilArmy.amxx")
L 03/17/2017 - 18:02:12: [AMXX] Run time error 4: index out of bounds
L 03/17/2017 - 18:02:12: [AMXX] [0] EvilArmy.sma::next_load_data (line 512)
L 03/17/2017 - 18:02:12: [AMXX] [1] EvilArmy.sma::load_data (line 413)
L 03/17/2017 - 18:02:12: [AMXX] [2] EvilArmy.sma::client_putinserver (line 296)
new Float:origin[3]
pev(index, pev_origin, origin)
set_pev(ent, pev_origin, origin)
set_pev(ent, pev_spawnflags, pev(ent, pev_spawnflags) | SF_NORESPAWN)
dllfunc(DLLFunc_Spawn, ent)
new save = pev(ent, pev_solid)
dllfunc(DLLFunc_Touch, ent, index)
if (pev(ent, pev_solid) != save)
return ent
engfunc(EngFunc_RemoveEntity, ent)
return -1
}
плагин Evil Army
- Код: Выделить всё
#include <amxmodx>
#include <amxmisc>
#include <colorchat>
#include <fun>
#include <cstrike>
#include <nvault>
#include <sqlx>
#include <fakemeta>
#include <fakemeta_util>
#include <csx>
#define PLUGIN "EvilArmy"
#define VERSION "1.3 Fix 1"
#define AUTHOR "OverGame" //Исходник Arctic
#define ADM_MENU ADMIN_RCON
#pragma tabsize 0
new g_vault;
new Handle:g_SqlTuple;
new g_Error[512];
enum _:PlData
{
gId,gExp,gLevel,gTempKey
};
new gChatTop, g_bonus_score[33];
new g_type, g_enabled, g_recieved, bool:g_showrecieved, g_hudmsg1, g_hudmsg2;
new stats[8],bodyhits[8],irank;
new UserData[33][PlData];
new gMessage[256];
new g_MsgHud,MaxPlayers,levelUp[33],gSayText;
new bool:restr_blocked;
new const gRankNames[][] =
{
"I_0","I_1","I_2","I_3","I_4","I_5","I_6","I_7","I_8","I_9","I_10","I_11","I_12","I_13","I_14",
"I_15","I_16","I_17","I_18","I_19","I_20"
};
new const gLevels[] =
{
0,15,30,60,100,180,350,750,999,1500,2200,2800,3200,3900,4500,5000,5500,6000,7000,8000
};
new const gNades[][] =
{
{0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1},
{0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1}
}
new const restrict_bonus[][] =
{
"35hp",
"most_wanted",
"ka_wintershank"
};
new gRestrictMaps,gAdminGMsg,gBonusLevel,gFlash,gSmoke,gHe,gHpbylevel,gApbylevel,gEvilMenu,gHudColor,
gArmyChat,gSaveType,gTableName,gHost,gUser,gPassword,gDbName,gSlash,
gTk,gLostXpTk,gLevelUpmsg,gAllChat;
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
register_cvar("evil_army",VERSION, FCVAR_SERVER | FCVAR_SPONLY);
register_clcmd("evil_setmenu","set_level_menu");
register_clcmd("menu","menu_server");
register_clcmd("say /menu","menu_server");
register_clcmd("say /bonus","evil_army_menu");
register_clcmd("say /rs","reset_score");
set_cvar_string("evil_army",VERSION);
gRestrictMaps = register_cvar( "restrict_maps", "0");
gBonusLevel = register_cvar( "level_bonus", "0");
gFlash = register_cvar( "flash_nades", "0");
gSmoke = register_cvar( "smoke_nades", "1");
gHe = register_cvar( "he_nades", "1");
gHpbylevel = register_cvar( "hp_by_level", "3");
gApbylevel = register_cvar( "ap_by_level", "5");
gChatTop = register_cvar( "chat_top", "1");
gArmyChat = register_cvar( "army_chat", "1");
gEvilMenu = register_cvar( "evil_menu", "1");
gHudColor = register_cvar( "evil_chud", "0");
gAdminGMsg = register_cvar( "admin_color", "1");
gSaveType = register_cvar( "save_type", "0");
gSlash = register_cvar( "slash_messages", "1");
g_type = register_cvar("amx_evildamage","1");
g_recieved = register_cvar("amx_evildamage_recieved","1") ;
gTk = register_cvar( "team_kill_lost_xp", "1");
gLostXpTk = register_cvar( "lost_xp_val", "3");
gLevelUpmsg = register_cvar( "level_up_msg", "1");
gAllChat = register_cvar( "all_chat", "1");
gHost = register_cvar( "mysql_host", "127.0.0.1");
gUser = register_cvar( "mysql_user", "root");
gPassword = register_cvar( "mysql_password", "qwerty");
gDbName = register_cvar( "mysql_db_name", "test");
gTableName = register_cvar( "mysql_table_name", "evil_army");
register_logevent( "EventRoundStart", 2, "1=Round_Start" );
set_task(1.0,"Info",_,_,_, "b")
register_event( "DeathMsg","EventDeath","a");
register_event("Damage", "on_damage", "b", "2!0", "3=0", "4!0");
register_event("HLTV", "on_new_round", "a", "1=0", "2=0");
register_message(get_user_msgid("SayText"), "msg_SayText");
gSayText = get_user_msgid ("SayText");
g_MsgHud = CreateHudSyncObj();
g_hudmsg1 = CreateHudSyncObj()
g_hudmsg2 = CreateHudSyncObj()
MaxPlayers = get_maxplayers();
register_dictionary("evil_army.txt" );
if(get_pcvar_num(gRestrictMaps))
{
new szMapName[64];
get_mapname(szMapName,63);
for(new a = 0; a < sizeof restrict_bonus; a++)
{
if(equal(szMapName, restrict_bonus[a]))
{
restr_blocked = true;
log_amx("[Evil Army] weapon menu is blocked on map [%s].",restrict_bonus[a]);
break;
} else {
restr_blocked = false;
}
}
}
switch(get_pcvar_num(gSaveType))
{
case 0:
{
g_vault = nvault_open("evil_army");
}
case 1:
{
set_task(0.1, "sql_init");
}
default:
{
g_vault = nvault_open("evil_army");
}
}
if(get_pcvar_num(gArmyChat))
{
register_clcmd("say", "hookSay")
register_clcmd("say_team", "hookSayTeam");
}
}
public plugin_cfg()
{
new szCfgDir[64], szFile[192];
get_configsdir(szCfgDir, charsmax(szCfgDir));
formatex(szFile,charsmax(szFile),"%s/evil_army.cfg",szCfgDir);
if(file_exists(szFile))
server_cmd("exec %s", szFile);
}
public set_level_menu(id)
{
if(get_user_flags(id) & ADM_MENU)
{
UserData[id][gTempKey] = 0;
new players[32], num;
get_players(players, num)
new tempname[32], info[10];
new players_menu = menu_create("Меню званий:", "set_level_hl")
for(new i = 0; i < num; i++)
{
get_user_name(players[i], tempname, 31);
num_to_str(players[i], info, 9);
menu_additem(players_menu, tempname, info, 0);
}
menu_setprop(players_menu, MPROP_BACKNAME, "Назад")
menu_setprop(players_menu, MPROP_NEXTNAME, "Далее")
menu_setprop(players_menu, MPROP_EXITNAME, "Выход")
menu_display(id, players_menu, 0);
}
return PLUGIN_CONTINUE
}
public set_level_hl(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
new data[6], _access, callback;
menu_item_getinfo( menu, item, _access, data, charsmax(data), _, _, callback);
UserData[id][gTempKey] = str_to_num(data);
set_level_pl(id);
return PLUGIN_CONTINUE
}
public reset_score(id){
new name[33]
get_user_name(id, name, 32)
cs_set_user_deaths(id, 0)
set_user_frags(id, 0)
cs_set_user_deaths(id, 0)
set_user_frags(id, 0)
ColorChat(0,NORMAL,"^4[%L]^3%s^1, обнулил свой счет!", LANG_PLAYER, "PRIFIX", name)
}
public menu_server(id)
{
if(get_pcvar_num(gEvilMenu) == 1){
static s_MenuItem[255]
formatex(s_MenuItem, charsmax(s_MenuItem), "\yМеню сервера^nВы: \r%L", LANG_PLAYER, gRankNames[UserData[id][gLevel]])
new menu = menu_create(s_MenuItem, "func_menu_server")
menu_additem(menu, "\yОбнулить счет","1")
menu_additem(menu, "\yЗабанить игрока","2")
menu_additem(menu, "\yКупить админку","3")
menu_additem(menu, "\yМеню армии","4")
menu_setprop(menu, MPROP_BACKNAME, "Назад")
menu_setprop(menu, MPROP_NEXTNAME, "Далее")
menu_setprop(menu, MPROP_EXITNAME, "Выход")
menu_display(id,menu,0)
}
return PLUGIN_HANDLED
}
public evil_army_menu(id)
{
static s_MenuItem[255]
formatex(s_MenuItem, charsmax(s_MenuItem), "\yМеню сервера^nБонусы: \r%d", g_bonus_score[id])
new menu = menu_create(s_MenuItem, "func_evil_menu")
if(get_user_flags(id) & ADM_MENU){
menu_additem(menu, "\yВыдать звание","1")
}else{
menu_additem(menu, "\dВыдать звание","1")
}
if(g_bonus_score[id] > 1){
menu_additem(menu, "\yЖизни [255]","2")
}else{
menu_additem(menu, "\dЖизни [255]","2")
}
if(g_bonus_score[id] > 1){
menu_additem(menu, "\yБронежилет [255]","3")
}else{
menu_additem(menu, "\dБронежилет [255]","3")
}
if(cs_get_user_team(id) == CS_TEAM_CT){
if(g_bonus_score[id] > 2){
menu_additem(menu, "\yВзять AK-47","4")
}else{
menu_additem(menu, "\dВзять AK-47","4")
}
}else
if(cs_get_user_team(id) == CS_TEAM_T){
if(g_bonus_score[id] > 2){
menu_additem(menu, "\yВзять M4A1","4")
}else{
menu_additem(menu, "\dВзять M4A1","4")
}
}
menu_setprop(menu, MPROP_BACKNAME, "Назад")
menu_setprop(menu, MPROP_NEXTNAME, "Далее")
menu_setprop(menu, MPROP_EXITNAME, "Выход")
menu_display(id,menu,0)
return PLUGIN_HANDLED
}
public set_level_pl(id)
{
static szText[1024];
formatex(szText,charsmax(szText), "\r%L", id, "CHOOSE_RANKN");
new menu = menu_create( szText, "set_level_phl");
for(new i = 1; i < sizeof(gRankNames); i++)
{
new szItem[100],lang[10],num[5];
format(lang,9,"I_%d",i);
format(num,4,"%d",i);
formatex(szItem,charsmax(szItem),"%L",id,lang);
menu_additem(menu,szItem,num);
}
menu_setprop(menu, MPROP_BACKNAME, "Назад");
menu_setprop(menu, MPROP_NEXTNAME, "Далее");
menu_setprop(menu, MPROP_EXITNAME, "Выйти");
menu_display( id, menu,0);
return PLUGIN_CONTINUE;
}
public set_level_phl(id,menu,item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
new data[6], _access, callback;
menu_item_getinfo( menu, item, _access, data, charsmax(data), _, _, callback);
new level = str_to_num(data);
if(UserData[id][gTempKey] >= 1 && UserData[id][gTempKey] <= 32)
{
UserData[UserData[id][gTempKey]][gLevel] = level;
UserData[UserData[id][gTempKey]][gExp] = gLevels[level-1];
new szName[2][32];
get_user_name(id, szName[0], 31);
get_user_name(UserData[id][gTempKey], szName[1], 31);
ColorChat(0,GREY,"^3Админ ^4%s ^3выдал звание ^4%L ^3игроку ^4%s^3.",szName[0],LANG_PLAYER,gRankNames[level],szName[1])
} else {
set_level_menu(id);
}
UserData[id][gTempKey] = 0;
return PLUGIN_HANDLED;
}
public sql_init()
{
new szTableName[64],szHost[64],szUser[64],szPassword[64],szDbName[64],ErrorCode;
get_pcvar_string(gTableName,szTableName,63);
get_pcvar_string(gHost,szHost,63);
get_pcvar_string(gUser,szUser,63);
get_pcvar_string(gPassword,szPassword,63);
get_pcvar_string(gDbName,szDbName,63);
g_SqlTuple = SQL_MakeDbTuple(szHost,szUser,szPassword,szDbName);
new Handle:SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode,g_Error,511)
if(SqlConnection == Empty_Handle)
set_fail_state(g_Error);
new Handle:Queries = SQL_PrepareQuery(SqlConnection,"CREATE TABLE IF NOT EXISTS `%s`(`id` INT(10) NOT NULL AUTO_INCREMENT,`name` VARCHAR(32) NOT NULL,`exp` INT(10) NOT NULL,`level` INT(10) NOT NULL,PRIMARY KEY (id));", szTableName)
if(!SQL_Execute(Queries))
{
SQL_QueryError(Queries,g_Error,charsmax(g_Error))
set_fail_state(g_Error);
}
SQL_QueryAndIgnore(SqlConnection, "DELETE FROM %s WHERE exp=0 and level=1;",szTableName);
SQL_FreeHandle(Queries)
SQL_FreeHandle(SqlConnection);
}
public plugin_end()
{
switch(get_pcvar_num(gSaveType))
{
case 0:
{
nvault_close(g_vault);
}
case 1:
{
if(g_SqlTuple != Empty_Handle)
SQL_FreeHandle(g_SqlTuple);
}
default:
{
nvault_close(g_vault);
}
}
}
public client_putinserver(id)
{
g_bonus_score[id] = 0;
UserData[id] = UserData[0];
load_data(id);
}
public client_disconnect(id)
{
save_usr(id);
UserData[id] = UserData[0];
}
public on_new_round()
{
g_enabled = get_pcvar_num(g_type)
if(get_pcvar_num(g_recieved)) g_showrecieved = true
}
public on_damage(id)
{
if(g_enabled)
{
static attacker; attacker = get_user_attacker(id)
static damage; damage = read_data(2)
if(g_showrecieved)
{
set_hudmessage(255, 0, 0, 0.45, 0.50, 2, 0.1, 4.0, 0.1, 0.1, -1)
ShowSyncHudMsg(id, g_hudmsg2, "Вам нанесли: %i^n", damage)
}
if(is_user_connected(attacker))
{
switch(g_enabled)
{
case 1: {
set_hudmessage(0, 100, 200, -1.0, 0.55, 2, 0.1, 4.0, 0.02, 0.02, -1)
ShowSyncHudMsg(attacker, g_hudmsg1, "Вы нанесли: %i^n", damage)
}
case 2: {
if(fm_is_ent_visible(attacker,id))
{
set_hudmessage(0, 100, 200, -1.0, 0.55, 2, 0.1, 4.0, 0.02, 0.02, -1)
ShowSyncHudMsg(attacker, g_hudmsg1, "Вы нанесли: %i^n", damage)
}
}
}
}
}
}
public check_level(id)
{
if(UserData[id][gLevel] <= 0)
UserData[id][gLevel] = 1;
if(UserData[id][gExp] < 0)
UserData[id][gExp] = 0;
while(UserData[id][gExp] >= gLevels[UserData[id][gLevel]])
{
UserData[id][gLevel]++;
levelUp[id] = 1;
switch(get_pcvar_num(gLevelUpmsg))
{
case 1:
{
new szName[33];
get_user_name(id, szName, 32);
static buffer[192],len;
len = format(buffer, charsmax(buffer), "^4[^3%L^4]^1 %L ^4%s^1",LANG_PLAYER,"PRIFIX",LANG_PLAYER,"PLAYER",szName);
len += format(buffer[len], charsmax(buffer) - len, " %L",LANG_PLAYER,"NEW_LEVEL");
len += format(buffer[len], charsmax(buffer) - len, " ^4%L^1.",LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
len += format(buffer[len], charsmax(buffer) - len, "%L",LANG_PLAYER,"CONTR");
ColorChat(0,NORMAL,buffer);
}
case 2:
{
new szName[33];
get_user_name(id, szName, 32);
static buffer[192],len;
len = format(buffer, charsmax(buffer), "^4[^3%L^4]^1 %L ^4%s^1",LANG_PLAYER,"PRIFIX",LANG_PLAYER,"PLAYER",szName);
len += format(buffer[len], charsmax(buffer) - len, " %L",LANG_PLAYER,"NEW_LEVEL");
len += format(buffer[len], charsmax(buffer) - len, " ^4%L^1.",LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
len += format(buffer[len], charsmax(buffer) - len, "%L",LANG_PLAYER,"CONTR");
ColorChat(id,NORMAL,buffer);
}
}
}
}
public EventDeath()
{
new iKiller = read_data(1);
new iVictim = read_data(2);
new head = read_data(3);
if(iKiller != iVictim && is_user_connected(iKiller) && is_user_connected(iVictim) && UserData[iKiller][gLevel] <= 19)
{
if(get_pcvar_num(gTk) && get_user_team(iKiller) == get_user_team(iVictim))
{
UserData[iKiller][gExp] -= get_pcvar_num(gLostXpTk);
return PLUGIN_CONTINUE;
}
new weapon = get_user_weapon(iKiller);
UserData[iKiller][gExp] += 1;
if(weapon == CSW_KNIFE)
UserData[iKiller][gExp] += 3;
if(head)
UserData[iKiller][gExp] += 2;
g_bonus_score[iKiller] += 1;
if(weapon == CSW_HEGRENADE)
UserData[iKiller][gExp] += 1;
check_level(iKiller);
}
return PLUGIN_CONTINUE;
}
public EventRoundStart()
{
for(new id = 1; id <= MaxPlayers; id++)
{
if(is_user_alive(id) && is_user_connected(id))
{
if(restr_blocked)
return PLUGIN_CONTINUE;
if(get_pcvar_num(gFlash) && gNades[0][UserData[id][gLevel]])
give_item(id,"weapon_flashbang");
if(get_pcvar_num(gSmoke) && gNades[1][UserData[id][gLevel]])
give_item(id,"weapon_smokegrenade");
if(get_pcvar_num(gHe) && gNades[2][UserData[id][gLevel]])
give_item(id,"weapon_hegrenade");
if(get_pcvar_num(gHpbylevel) != 0)
set_user_health(id,get_user_health(id)+get_pcvar_num(gHpbylevel)*UserData[id][gLevel]);
if(get_pcvar_num(gApbylevel) != 0)
set_user_armor(id,get_user_armor(id)+get_pcvar_num(gApbylevel)*UserData[id][gLevel]);
if(levelUp[id] == 1 && get_pcvar_num(gBonusLevel))
{
GetWeapon(id);
levelUp[id] = 0;
}
}
}
return PLUGIN_CONTINUE;
}
public load_data(id)
{
new szName[33];
get_user_name(id,szName,32);
switch(get_pcvar_num(gSaveType))
{
case 0:
{
static data[256], timestamp;
if(nvault_lookup(g_vault, szName, data, sizeof(data) - 1, timestamp) )
{
next_load_data(id, data, sizeof(data) - 1);
return;
} else {
register_player(id,"");
}
}
case 1:
{
new szTableName[32],ErrorCode;
new Handle:SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode,g_Error,511)
SQL_QuoteString(SqlConnection, szName, 32, szName);
get_pcvar_string(gTableName,szTableName,31);
if(SqlConnection == Empty_Handle)
{
log_amx(g_Error);
return ;
}
new Handle:Query = SQL_PrepareQuery(SqlConnection,"SELECT id FROM %s WHERE name = '%s';",szTableName,szName)
if(!SQL_Execute(Query))
{
SQL_QueryError(Query,g_Error,511);
log_amx(g_Error);
return ;
}
if(SQL_NumResults(Query) > 0 )
{
next_load_data(id, "", 0);
} else {
register_player(id,"");
}
SQL_FreeHandle(Query);
SQL_FreeHandle(SqlConnection);
}
default:
{
static data[256], timestamp;
if(nvault_lookup(g_vault, szName, data, sizeof(data) - 1, timestamp) )
{
next_load_data(id, data, sizeof(data) - 1);
return;
} else {
register_player(id,"");
}
}
}
}
public next_load_data(id,data[],len)
{
new szName[33];
get_user_name(id,szName,32);
switch(get_pcvar_num(gSaveType))
{
case 0:
{
replace_all(data,len,"|"," ");
new exp[5],level[5];
parse(data,exp,4,level,4);
UserData[id][gExp]= str_to_num(exp);
UserData[id][gLevel]= str_to_num(level);
}
case 1:
{
new szTableName[32],ErrorCode;
new Handle:SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode,g_Error,511)
SQL_QuoteString(SqlConnection, szName, 32, szName);
get_pcvar_string(gTableName,szTableName,31);
if(SqlConnection == Empty_Handle)
{
log_amx(g_Error);
return ;
}
new Handle:Query = SQL_PrepareQuery(SqlConnection,"SELECT id,exp,level FROM %s WHERE name = '%s';",szTableName,szName)
if(!SQL_Execute(Query))
{
SQL_QueryError(Query,g_Error,511)
log_amx(g_Error)
}
if( SQL_NumResults(Query) > 0)
{
UserData[id][gId]= SQL_ReadResult(Query,0);
UserData[id][gExp]= SQL_ReadResult(Query,1);
UserData[id][gLevel]= SQL_ReadResult(Query,2);
}
SQL_FreeHandle(Query);
SQL_FreeHandle(SqlConnection);
}
default:
{
replace_all(data,len,"|"," ");
new exp[5],level[5];
parse(data,exp,4,level,4);
UserData[id][gExp]= str_to_num(exp);
UserData[id][gLevel]= str_to_num(level);
}
}
if(UserData[id][gLevel] <= 0)
UserData[id][gLevel] = 1;
while(UserData[id][gExp] >= gLevels[UserData[id][gLevel]])
UserData[id][gLevel]++;
}
public register_player(id,data[])
{
new szName[33];
get_user_name(id,szName,32);
switch(get_pcvar_num(gSaveType))
{
case 0:
{
UserData[id][gExp]= 0
UserData[id][gLevel]= 1;
}
case 1:
{
new szTableName[32],ErrorCode;
new Handle:SqlConnection = SQL_Connect(g_SqlTuple,ErrorCode,g_Error,511)
SQL_QuoteString(SqlConnection, szName, 32, szName);
get_pcvar_string(gTableName,szTableName,31);
if(SqlConnection == Empty_Handle)
{
log_amx(g_Error);
return ;
}
new Handle:Query = SQL_PrepareQuery(SqlConnection,"INSERT INTO %s (`id`,`name`,`exp`,`level`) VALUES (NULL,'%s','0','1');",szTableName,szName);
if(!SQL_Execute(Query))
{
SQL_QueryError(Query,g_Error,511)
log_amx(g_Error)
}
SQL_FreeHandle(Query);
SQL_FreeHandle(SqlConnection);
UserData[id][gExp] = 0;
UserData[id][gLevel] = 1;
}
default:
{
UserData[id][gExp]= 0
UserData[id][gLevel]= 1;
}
}
}
public save_usr(id)
{
new szName[33];
get_user_name(id,szName,32);
switch(get_pcvar_num(gSaveType))
{
case 0:
{
static data[256];
formatex(data, 255, "|%i|%i|", UserData[id][gExp],UserData[id][gLevel]);
nvault_set(g_vault, szName, data);
}
case 1:
{
new saveq[256],szTableName[32];
get_pcvar_string(gTableName,szTableName,31);
format(saveq,255,"UPDATE `%s` SET `exp`='%d',`level`='%d' WHERE `id`='%d';", szTableName,UserData[id][gExp],UserData[id][gLevel],UserData[id][gId])
SQL_ThreadQuery(g_SqlTuple,"QueryHandler",saveq);
}
default:
{
static data[256];
formatex(data, 255, "|%i|%i|", UserData[id][gExp],UserData[id][gLevel]);
nvault_set(g_vault, szName, data);
}
}
}
public hookSay(id)
{
if(is_user_hltv(id) || is_user_bot(id) || !is_user_connected(id))
return PLUGIN_CONTINUE;
new message[192],Len;
read_args(message, 191);
remove_quotes(message);
if(is_admin_msg(message))
return PLUGIN_CONTINUE;
if(is_empty_message(message))
{
ColorChat(id,NORMAL,"^4[^3%L^4]^1 %L",LANG_PLAYER,"PRIFIX",LANG_PLAYER,"EMPTY_MSG")
return PLUGIN_HANDLED
}
if(get_pcvar_num(gSlash))
{
if(is_has_slash(message))
return PLUGIN_HANDLED_MAIN
}
new szName[32];
get_user_name(id,szName,31);
irank = get_user_stats(id,stats,bodyhits)
if(is_user_admin(id))
{
if(get_pcvar_num(gChatTop) == 0){
Len = format(gMessage[Len], charsmax(gMessage) - 1, "^4[^3%L^4] ",LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
}else
if(get_pcvar_num(gChatTop) == 1){
Len = format(gMessage[Len], charsmax(gMessage) - 1, "^4[^3Топ: %d^4][^3%L^4] ",irank,LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
}
switch(get_pcvar_num(gAdminGMsg))
{
case 1:
{
Len += format(gMessage[Len], charsmax(gMessage) - 1, "^3%s^4 : ",szName);
Len += format(gMessage[Len], charsmax(gMessage) - 1, "%s",message);
}
case 2:
{
Len += format(gMessage[Len], charsmax(gMessage) - 1, "^3%s^4 : ",szName);
Len += format(gMessage[Len], charsmax(gMessage) - 1, "^3%s",message);
}
default:
{
Len += format(gMessage[Len], charsmax(gMessage) - 1, "^3%s^4 : ",szName);
Len += format(gMessage[Len], charsmax(gMessage) - 1, "^1%s",message);
}
}
Chat(id,0,get_pcvar_num(gAllChat));
}
else
{
if(get_pcvar_num(gChatTop) == 0){
Len = format(gMessage[Len], charsmax(gMessage) - 1, "^4[^3%L^4] ",LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
}else
if(get_pcvar_num(gChatTop) == 1){
Len = format(gMessage[Len], charsmax(gMessage) - 1, "^4[^3Топ: %d^4][^3%L^4] ",irank,LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
}
Len += format(gMessage[Len], charsmax(gMessage) - 1, "^3%s^4 : ",szName);
Len += format(gMessage[Len], charsmax(gMessage) - 1, "^1%s",message);
Chat(id,0,get_pcvar_num(gAllChat));
}
return PLUGIN_HANDLED_MAIN
}
public hookSayTeam(id)
{
if(is_user_hltv(id) || is_user_bot(id) || !is_user_connected(id))
return PLUGIN_CONTINUE;
new message[192],Len;
read_args(message, 191);
remove_quotes(message);
if(is_admin_msg(message))
return PLUGIN_CONTINUE;
if(is_empty_message(message))
{
ColorChat(id,GREY,"^4[^3%L^4]^1 %L",LANG_PLAYER,"PRIFIX",LANG_PLAYER,"EMPTY_MSG");
return PLUGIN_HANDLED
}
if(get_pcvar_num(gSlash))
{
if(is_has_slash(message))
return PLUGIN_HANDLED_MAIN
}
new szName[32];
get_user_name(id,szName,31);
if(is_user_admin(id))
{
Len = format(gMessage[Len], charsmax(gMessage) - 1, "^3%L^1 ^4[^3%L^4] ^3%s^4 : ",LANG_PLAYER,"SEND_TEAM",LANG_PLAYER,gRankNames[UserData[id][gLevel]],szName);
switch(get_pcvar_num(gAdminGMsg))
{
case 1:
{
Len += format(gMessage[Len], charsmax(gMessage) - 1, "%s",message);
}
case 2:
{
Len += format(gMessage[Len], charsmax(gMessage) - 1, "^3%s",message);
}
default:
{
Len += format(gMessage[Len], charsmax(gMessage) - 1, "^1%s",message);
}
}
Chat(id,1,get_pcvar_num(gAllChat));
}
else
{
Len = format(gMessage[Len], charsmax(gMessage) - 1, "^3%L^1 ^4[^3%L^4] ",LANG_PLAYER,"SEND_TEAM",LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
Len += format(gMessage[Len], charsmax(gMessage) - 1, "^3%s^4 : ",szName);
Len += format(gMessage[Len], charsmax(gMessage) - 1, "^1%s",message);
Chat(id,1,get_pcvar_num(gAllChat));
}
return PLUGIN_HANDLED_MAIN
}
stock is_admin_msg(const Message[])
{
if(Message[0] == '@')
return true;
return false;
}
stock is_empty_message(const Message[])
{
if(equal(Message, "") || !strlen(Message))
return true;
return false;
}
stock Chat(id,team,chat_type)
{
if(team)
{
if(chat_type)
{
for(new i = 1; i <= MaxPlayers; i++)
{
if(!is_user_connected(i))
continue
if(get_user_team(id) == get_user_team(i))
send_message(gMessage, id, i);
}
} else {
if(is_user_alive(id))
{
for(new i = 1; i <= MaxPlayers; i++)
{
if(!is_user_connected(i) || !is_user_alive(i))
continue
if(get_user_team(id) == get_user_team(i))
send_message(gMessage, id, i);
}
} else if(!is_user_alive(id)){
for(new i = 1; i <= MaxPlayers; i++)
{
if(!is_user_connected(i) || is_user_alive(i))
continue
if(get_user_team(id) == get_user_team(i))
send_message(gMessage, id, i);
}
}
}
} else{
if(chat_type)
{
for(new i = 1; i <= MaxPlayers; i++)
{
if(!is_user_connected(i))
continue
send_message(gMessage, id, i);
}
} else {
if(is_user_alive(id))
{
for(new i = 1; i <= MaxPlayers; i++)
{
if(!is_user_connected(i) || !is_user_alive(i))
continue
send_message(gMessage, id, i);
}
} else if(!is_user_alive(id)){
for(new i = 1; i <= MaxPlayers; i++)
{
if(!is_user_connected(i) || is_user_alive(i))
continue
send_message(gMessage, id, i);
}
}
}
}
}
stock send_message(const message[], const id, const i)
{
message_begin(MSG_ONE, gSayText, {0, 0, 0}, i)
write_byte(id)
write_string(message)
message_end()
}
stock is_has_slash(const Message[])
{
if(Message[0] == '/')
return true;
return false;
}
public client_infochanged(id)
{
new newname[32],oldname[32]
get_user_info(id, "name", newname,31)
get_user_name(id,oldname,31)
if(!is_user_connected(id) || is_user_bot(id))
return PLUGIN_CONTINUE
if(!equali(newname, oldname))
{
set_user_info(id,"name",oldname);
log_amx("namechange BLOCKED.");
return PLUGIN_HANDLED
}
return PLUGIN_CONTINUE
}
public msg_SayText()
{
new arg[32]
get_msg_arg_string(2, arg, 31)
if(containi(arg,"name")!=-1)
return PLUGIN_HANDLED
return PLUGIN_CONTINUE
}
public plugin_natives()
{
register_native("get_user_exp", "native_get_user_exp", 1);
register_native("get_user_lvl", "native_get_user_lvl", 1);
register_native("set_user_exp", "native_set_user_exp", 1);
register_native("set_user_lvl", "native_set_user_lvl", 1);
register_native("get_user_rankname", "native_get_user_rankname", 1);
}
public native_set_user_exp(id,num)
{
UserData[id][gExp] = num;
}
public native_set_user_lvl(id,num)
{
UserData[id][gLevel] = num;
}
public native_get_user_exp(id)
{
return UserData[id][gExp];
}
public native_get_user_lvl(id)
{
return UserData[id][gLevel];
}
public native_get_user_rankname(id)
{
static szRankName[64];
format(szRankName, charsmax(szRankName), "%L",LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
return szRankName;
}
public Info()
{
for(new id = 1; id <= MaxPlayers; id++)
{
if(!is_user_bot(id) && is_user_connected(id))
{
if(get_pcvar_num(gHudColor) == 0){
set_hudmessage(203, 44, 49, 0.01, 0.20, 0, 1.0, 1.0, _, _, -1);
}else
if(get_pcvar_num(gHudColor) == 1){
set_hudmessage(136, 255, 85, 0.01, 0.20, 0, 1.0, 1.0, _, _, -1);
}
static buffer[192], len;
len = format(buffer, charsmax(buffer), "%L",LANG_PLAYER,"ZVANIE");
len += format(buffer[len], charsmax(buffer) - len, " %L",LANG_PLAYER,gRankNames[UserData[id][gLevel]]);
if(UserData[id][gLevel] <= 19)
{
len += format(buffer[len], charsmax(buffer) - len, "^n%L",LANG_PLAYER,"PL_XP",UserData[id][gExp],gLevels[UserData[id][gLevel]]);
} else {
len += format(buffer[len], charsmax(buffer) - len, "^n%L",LANG_PLAYER,"PL_MAX");
}
irank = get_user_stats(id,stats,bodyhits)
ShowSyncHudMsg(id, g_MsgHud, "%s^n%L^n%L", buffer, LANG_PLAYER, "PL_RANK", irank, get_statsnum(), LANG_PLAYER, "GROUP_VK");
}
}
return PLUGIN_CONTINUE
}
public GetWeapon(id)
{
new szText[700 char];
formatex( szText, charsmax( szText ), "%L", id, "GW_TITLE");
new menu = menu_create( szText, "gw_menu" );
formatex( szText, charsmax( szText ), "awp");
menu_additem( menu, szText, "1", 0 );
formatex( szText, charsmax( szText ), "ak-47");
menu_additem( menu, szText, "2", 0 );
formatex( szText, charsmax( szText ), "m4a1");
menu_additem( menu, szText, "3", 0 );
formatex( szText, charsmax( szText ), "famas");
menu_additem( menu, szText, "4", 0 );
menu_setprop( menu, MPROP_EXIT, MEXIT_ALL );
menu_display( id, menu,0);
return PLUGIN_CONTINUE;
}
public gw_menu(id,menu,item)
{
if( item == MENU_EXIT )
{
return PLUGIN_HANDLED;
}
new data[ 6 ], iName[ 64 ], access, callback;
menu_item_getinfo( menu, item, access, data, charsmax( data ), iName, charsmax( iName ), callback );
new key = str_to_num( data );
switch( key )
{
case 1:
{
give_item(id,"weapon_awp");
cs_set_user_bpammo( id, CSW_AWP, 100);
}
case 2:
{
give_item(id,"weapon_ak47");
cs_set_user_bpammo( id, CSW_AK47, 200);
}
case 3:
{
give_item(id,"weapon_m4a1");
cs_set_user_bpammo( id, CSW_M4A1, 200);
}
case 4:
{
give_item(id,"weapon_famas");
cs_set_user_bpammo( id, CSW_FAMAS, 200);
}
}
return PLUGIN_HANDLED;
}
public func_menu_server(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu)
return PLUGIN_HANDLED
}
new data[6], iName[64], access, callback
menu_item_getinfo(menu, item, access, data, 5, iName, 63, callback)
new key = str_to_num(data)
switch(key)
{
case 1:{
reset_score(id)
}
case 2:{
client_cmd(id, "say /voteban")
}
case 3:{
client_cmd(id, "say /adminka")
}
case 4:{
evil_army_menu(id)
}
}
return PLUGIN_HANDLED
}
public func_evil_menu(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu)
return PLUGIN_HANDLED
}
new data[6], iName[64], access, callback
menu_item_getinfo(menu, item, access, data, 5, iName, 63, callback)
new key = str_to_num(data)
switch(key)
{
case 1:{
if(get_user_flags(id) & ADM_MENU)
set_level_menu(id)
}
case 2:{
if(g_bonus_score[id] > 1){
set_user_health(id, 255);
g_bonus_score[id] -= 2;
}
}
case 3:{
if(g_bonus_score[id] > 1){
set_user_armor(id, 255);
g_bonus_score[id] -= 2;
}
}
case 4:{
if(cs_get_user_team(id) == CS_TEAM_CT){
if(g_bonus_score[id] > 2){
give_item(id,"weapon_ak47");
cs_set_user_bpammo( id, CSW_AK47, 200);
g_bonus_score[id] -= 3;
}
}else
if(cs_get_user_team(id) == CS_TEAM_T){
if(g_bonus_score[id] > 2){
give_item(id,"weapon_m4a1");
cs_set_user_bpammo( id, CSW_M4A1, 200);
g_bonus_score[id] -= 3;
}
}
}
}
return PLUGIN_HANDLED
}
public QueryHandler(FailState,Handle:Query,Error[],Errcode,Data[],DataSize)
{
switch(FailState)
{
case -2: log_amx("[Evil Army] Failed to connect (%d): %s", Errcode, Error);
case -1: log_amx("[Evil Army] (%d): %s", Errcode, Error);
}
return PLUGIN_HANDLED
}
плагин amx_adminmodel
L 03/03/2017 - 02:39:54: Start of error session.
L 03/03/2017 - 02:39:54: Info (map "cs_mansion") (file "addons/amxmodx/logs/error_20170303.log")
L 03/03/2017 - 02:39:54: [CSTRIKE] Invalid player 24
L 03/03/2017 - 02:39:54: [AMXX] Displaying debug trace (plugin "amx_adminmodel.amxx")
L 03/03/2017 - 02:39:54: [AMXX] Run time error 10: native error (native "cs_get_user_team")
L 03/03/2017 - 02:39:54: [AMXX] [0] amx_adminmodel.sma::resetModel (line 74)
L 03/03/2017 - 02:44:49: [CSTRIKE] Invalid player 24
L 03/03/2017 - 02:39:54: Info (map "cs_mansion") (file "addons/amxmodx/logs/error_20170303.log")
L 03/03/2017 - 02:39:54: [CSTRIKE] Invalid player 24
L 03/03/2017 - 02:39:54: [AMXX] Displaying debug trace (plugin "amx_adminmodel.amxx")
L 03/03/2017 - 02:39:54: [AMXX] Run time error 10: native error (native "cs_get_user_team")
L 03/03/2017 - 02:39:54: [AMXX] [0] amx_adminmodel.sma::resetModel (line 74)
L 03/03/2017 - 02:44:49: [CSTRIKE] Invalid player 24
- Код: Выделить всё
/*##########################################################################
##
## -- www.SteamTools.net
## ___ _____ ___ ___ _ __ _ ___ ___ _____ _
## / | | _ \ / |/ | | | | \ | | / |/ | | _ \ | |
## / /| | | | | | / /| /| | | | | \| | / /| /| | | | | | | |
## / / | | | | | | / / |__/ | | | | | |\ | / / |__/ | | | | | | | |
## / / | | | |_| | / / | | | | | | \ | / / | | | |_| | | |___
## /_/ |_| |_____/ /_/ |_| |_| |_| \_| /_/ |_| |_____/ |_____|
##
## |__ |__ o _|_ ___ __ __ o |__, ___
## -- |__) (__| (__(__( | ) | |_, (__/_ | ) ) | | \ (__/_
## |
##
## Originated as a simple idea back in 2004, it was forgotten due to
## lack of my 'Small' coding skills. However I have progressed in recent
## months and somehow crossed that old post with this concept in it. So
## naturally I challenged myself to see if I could do it, and voila! I
## could :)
##
## Once you join, you play a normal person for the first round, and for
## all remaining rounds your CT or TE models are custom. They now read
## "ADMIN" on front and back, and also have small "A" patches on the arms.
## I designed these models myself, it's very easy, just bring the textures
## into photoshop, tweak out, and replace.
##
## Enjoy!
##
##
## CHANGELOG
##------------------------------------------------------------------------
## 2) v1.1.1 - Fixed missing event
## 1) v1.1.0 - Fixed VIP and other model bugs
##
##
## INSTALLATION
##------------------------------------------------------------------------
## 1) Unzip (which you may have done already)
## 2) Place 'amx_adminmodel.amxx' in 'cstrike/addons/amxmodx/plugins'
## 3) Add a line in 'configs/plugins.ini' containing 'amx_adminmodel.amxx'
## 4) Put the 'admin_ct' and 'admin_te' folders into 'cstrike/models' folder
## 5) -- Visit www.SteamTools.net and enjoy your new plugin!
##
##
##
## THE CVARs
##------------------------------------------------------------------------
##
## No CVARs for this plugin :)
##
##
##########################################################################*/
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
public plugin_init() {
register_plugin("AMX Admin Model", "1.1.1", "whitemike")
register_event("ResetHUD", "resetModel", "b")
return PLUGIN_CONTINUE
}
public plugin_precache() {
precache_model("models/player/admin_ct/admin_ct.mdl")
precache_model("models/player/admin_te/admin_te.mdl")
return PLUGIN_CONTINUE
}
public resetModel(id, level, cid) {
if (get_user_flags(id) & ADMIN_LEVEL_B) {
new CsTeams:userTeam = cs_get_user_team(id)
if (userTeam == CS_TEAM_T) {
cs_set_user_model(id, "admin_te")
}
else if(userTeam == CS_TEAM_CT) {
cs_set_user_model(id, "admin_ct")
}
else {
cs_reset_user_model(id)
}
}
return PLUGIN_CONTINUE
}
плагин amx_vipmodel
L 03/05/2017 - 18:49:43: Start of error session.
L 03/05/2017 - 18:49:43: Info (map "cs_mansion_32") (file "addons/amxmodx/logs/error_20170305.log")
L 03/05/2017 - 18:49:43: [CSTRIKE] Invalid player 6
L 03/05/2017 - 18:49:43: [AMXX] Displaying debug trace (plugin "amx_vipmodel.amxx")
L 03/05/2017 - 18:49:43: [AMXX] Run time error 10: native error (native "cs_get_user_team")
L 03/05/2017 - 18:49:43: [AMXX] [0] amx_vipmodel.sma::resetModel (line 20)
L 03/05/2017 - 18:49:43: Info (map "cs_mansion_32") (file "addons/amxmodx/logs/error_20170305.log")
L 03/05/2017 - 18:49:43: [CSTRIKE] Invalid player 6
L 03/05/2017 - 18:49:43: [AMXX] Displaying debug trace (plugin "amx_vipmodel.amxx")
L 03/05/2017 - 18:49:43: [AMXX] Run time error 10: native error (native "cs_get_user_team")
L 03/05/2017 - 18:49:43: [AMXX] [0] amx_vipmodel.sma::resetModel (line 20)
- Код: Выделить всё
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
public plugin_init() {
register_plugin("AMX VIP Model", "1.0", "Starik")
register_event("ResetHUD", "resetModel", "b")
return PLUGIN_CONTINUE
}
public plugin_precache() {
precache_model("models/player/vip_ct/vip_ct.mdl")
precache_model("models/player/vip_te/vip_te.mdl")
return PLUGIN_CONTINUE
}
public resetModel(id, level, cid) {
if (get_user_flags(id) & ADMIN_LEVEL_C) {
new CsTeams:userTeam = cs_get_user_team(id)
if (userTeam == CS_TEAM_T) {
cs_set_user_model(id, "vip_te")
}
else if(userTeam == CS_TEAM_CT) {
cs_set_user_model(id, "vip_ct")
}
else {
cs_reset_user_model(id)
}
}
return PLUGIN_CONTINUE
}
плагин lady admin
L 03/08/2017 - 12:05:14: Start of error session.
L 03/08/2017 - 12:05:14: Info (map "cs_mansion_32") (file "addons/amxmodx/logs/error_20170308.log")
L 03/08/2017 - 12:05:14: [CSTRIKE] Invalid player 1
L 03/08/2017 - 12:05:14: [AMXX] Displaying debug trace (plugin "lady_admin.amxx")
L 03/08/2017 - 12:05:14: [AMXX] Run time error 10: native error (native "cs_get_user_team")
L 03/08/2017 - 12:05:14: [AMXX] [0] lady_admin.sma::resetModel (line 20)
L 03/08/2017 - 13:56:01: [CSTRIKE] Invalid player 3
L 03/08/2017 - 12:05:14: Info (map "cs_mansion_32") (file "addons/amxmodx/logs/error_20170308.log")
L 03/08/2017 - 12:05:14: [CSTRIKE] Invalid player 1
L 03/08/2017 - 12:05:14: [AMXX] Displaying debug trace (plugin "lady_admin.amxx")
L 03/08/2017 - 12:05:14: [AMXX] Run time error 10: native error (native "cs_get_user_team")
L 03/08/2017 - 12:05:14: [AMXX] [0] lady_admin.sma::resetModel (line 20)
L 03/08/2017 - 13:56:01: [CSTRIKE] Invalid player 3
- Код: Выделить всё
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
public plugin_init() {
register_plugin("AMX Admin Girl", "1.0", "whitemike & homorapian")
register_event("ResetHUD", "resetModel", "b")
return PLUGIN_CONTINUE
}
public plugin_precache() {
precache_model("models/player/ladyadmin/ladyadmin.mdl")
precache_model("models/player/ladyadmin/ladyadmin.mdl")
return PLUGIN_CONTINUE
}
public resetModel(id, level, cid) {
if (get_user_flags(id) & ADMIN_LEVEL_G) {
new CsTeams:userTeam = cs_get_user_team(id)
if (userTeam == CS_TEAM_T) {
cs_set_user_model(id, "ladyadmin")
}
else if(userTeam == CS_TEAM_CT) {
cs_set_user_model(id, "ladyadmin")
}
else {
cs_reset_user_model(id)
}
}
return PLUGIN_CONTINUE
}
Добавлено спустя 1 минуту 16 секунд:
плагин evil army
L 03/17/2017 - 18:02:12: [AMXX] Displaying debug trace (plugin "EvilArmy.amxx")
L 03/17/2017 - 18:02:12: [AMXX] Run time error 4: index out of bounds
L 03/17/2017 - 18:02:12: [AMXX] [0] EvilArmy.sma::next_load_data (line 512)
L 03/17/2017 - 18:02:12: [AMXX] [1] EvilArmy.sma::load_data (line 413)
L 03/17/2017 - 18:02:12: [AMXX] [2] EvilArmy.sma::client_putinserver (line 296)
L 03/17/2017 - 18:02:12: [AMXX] Run time error 4: index out of bounds
L 03/17/2017 - 18:02:12: [AMXX] [0] EvilArmy.sma::next_load_data (line 512)
L 03/17/2017 - 18:02:12: [AMXX] [1] EvilArmy.sma::load_data (line 413)
L 03/17/2017 - 18:02:12: [AMXX] [2] EvilArmy.sma::client_putinserver (line 296)
Название темы скорректировано, тема перемещена из раздела "Вопросы по AMXX и его плагинам" // Subb98