#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <xs>
#include <nvault>
#include <colorchat>
new g_iBackStabKills[33], g_iBackStabDeaths[33]
new bool: g_bIsBackStab[33]
new g_iSaveType, g_iMenuCvar, g_iTypeInfo, g_iPrefix
new g_iVault
public plugin_init()
{
register_plugin("BackSide Kill Counter", "1.1", "Just In Case @ amxx-bg.info")
RegisterHam(Ham_TakeDamage, "player", "Player_TakeDamage")
g_iVault = nvault_open("BackSideKillsdata")
g_iSaveType = register_cvar("amx_bskc_savetype", "1") // 1 Nevre | 2 IP-re | 3 SteamID-re
g_iMenuCvar = register_cvar("amx_bskc_stats", "1")
g_iTypeInfo = register_cvar("amx_bskc_menuinfo", "2") // 1 CHAT-be | 2 Uj menube
g_iPrefix = register_cvar("amx_bskc_prefix", "BSKC")
register_concmd("say /statsback", "OpenMenu")
register_concmd("say_team /statsback", "OpenMenu")
register_concmd("say /checkback", "ShowCounts")
register_concmd("say_team /checkback", "ShowCounts")
}
public client_disconnect(id)
UseVault(id, 0)
public client_putinserver(id)
UseVault(id, 1)
public OpenMenu( id )
{
if(get_pcvar_num(g_iMenuCvar) == 0)
{
ColorChat(id, RED, "^4[ %s ] ^1Ez a lehetoseg ideiglenesen ki van ^3KAPCSOLVA!", GetPrefix())
return
}
new menu = menu_create( "\rMas jatekosok \dBS \rstatisztikai:", "menu_handler" )
static iPlayers[32], iNum, iTempId
static szName[32]
get_players( iPlayers, iNum )
for ( new szIp[32], i; i<iNum; i++ )
{
iTempId = iPlayers[i]
get_user_name( iTempId, szName, charsmax( szName ) )
get_user_ip( iTempId, szIp, charsmax(szIp), 1)
menu_additem( menu, szName, szIp, 0 )
}
menu_display( id, menu, 0 )
}
public menu_handler( id, iMenu, iItem )
{
if ( iItem == MENU_EXIT )
{
menu_destroy( iMenu )
return PLUGIN_HANDLED
}
static szData[6], szName[64]
static _access, item_callback
menu_item_getinfo( iMenu, iItem, _access, szData,charsmax( szData ), szName,charsmax( szName ), item_callback )
new iPlayer = find_player( "d", szData )
if ( iPlayer )
{
static szName[32]
get_user_name(iPlayer, szName, charsmax(szName))
switch ( get_pcvar_num( g_iTypeInfo ) ) {
case 1:
SubMenu( id, iPlayer )
case 2:
ColorChat(id, RED, "^4[ %s ] ^3%s ^1jelenleg ^4%i ^1BS Olessel es ^4%i ^1BS Halallal rendelkezik.", GetPrefix(), szName, g_iBackStabKills[ iPlayer], g_iBackStabDeaths[ iPlayer ])
}
}
menu_destroy( iMenu )
return PLUGIN_HANDLED
}
public SubMenu( id, iTarget )
{
static szName[33]
get_user_name(iTarget, szName, charsmax(szName))
static szTitle[64], szKills[64], szDeaths[64]
formatex(szTitle, charsmax(szTitle), "\yJatekos: \r%s", szName)
formatex(szKills, charsmax(szKills), "\yBS Olesei: \r%i", g_iBackStabKills[ iTarget ])
formatex(szDeaths, charsmax(szDeaths), "\yBS Halalai: \r%i", g_iBackStabDeaths[ iTarget ])
new iMenua = menu_create(szTitle, "second_handler")
menu_additem(iMenua, szKills)
menu_additem(iMenua, szDeaths)
menu_display(id, iMenua)
}
public second_handler(id, iMenu, iItem)
{
menu_destroy( iMenu )
return PLUGIN_HANDLED
}
public ShowCounts( id )
{
ColorChat(id, RED, "^4[ %s ] ^1Jelenleg neked ^3%i ^1BS Olesed es ^3%i ^1BS Halalod van.", GetPrefix(), g_iBackStabKills[ id ], g_iBackStabDeaths[ id ])
return PLUGIN_HANDLED
}
public eDeath( )
{
new iAttacker = read_data( 1 )
new iVictim = read_data( 2 )
if(g_bIsBackStab[ iVictim ])
{
g_iBackStabKills[ iAttacker ] ++
g_iBackStabDeaths[ iVictim ] ++
}
}
public Player_TakeDamage(iVictim, iInflictor, iAttacker, Float: flDamage, const bitsDamageType)
{
if (!is_user_connected(iAttacker) || !is_user_connected(iAttacker))
return HAM_IGNORED
static Float: vecSrc[3];
static Float: vecAngles[3];
static Float: vecForward[3];
static Float: vecAttackDir[3];
GetCenter(iVictim, vecSrc);
GetCenter(iInflictor, vecAttackDir);
xs_vec_sub(vecAttackDir, vecSrc, vecAttackDir);
xs_vec_normalize(vecAttackDir, vecAttackDir);
pev(iVictim, pev_angles, vecAngles);
engfunc(EngFunc_MakeVectors, vecAngles);
global_get(glb_v_forward, vecForward);
xs_vec_mul_scalar(vecAttackDir, -1.0, vecAttackDir);
if (xs_vec_dot(vecForward, vecAttackDir) > 0.3 )
g_bIsBackStab[ iVictim ] = true
else
g_bIsBackStab[ iVictim ] = false
return HAM_IGNORED
}
public plugin_end()
nvault_close(g_iVault)
UseVault(id, iType) {
static szKey[32], szData[16]
switch ( get_pcvar_num( g_iSaveType ) )
{
case 0: return
case 1: get_user_name(id, szKey, charsmax(szKey))
case 2: get_user_ip(id, szKey, charsmax(szKey), 1)
case 3: get_user_authid(id, szKey, charsmax(szKey))
}
switch(iType)
{
case 0:
{
formatex(szData, charsmax(szData), "%i|%i", g_iBackStabKills[ id ], g_iBackStabDeaths[ id ])
nvault_set(g_iVault, szKey, szData)
}
case 1:
{
nvault_get(g_iVault, szKey, szData, charsmax(szData))
new szArg[2][8]
replace_all(szData, charsmax(szData), "|", " ")
parse(szData, szArg[0], charsmax(szArg[]), szArg[1], charsmax(szArg[]))
g_iBackStabKills[ id ] = str_to_num(szArg[0])
g_iBackStabDeaths[ id ] = str_to_num(szArg[1])
}
}
}
GetCenter(const iEntity, Float: vecSrc[3]) {
static Float: vecAbsMax[3];
static Float: vecAbsMin[3];
pev(iEntity, pev_absmax, vecAbsMax);
pev(iEntity, pev_absmin, vecAbsMin);
xs_vec_add(vecAbsMax, vecAbsMin, vecSrc);
xs_vec_mul_scalar(vecSrc, 0.5, vecSrc);
}
GetPrefix() {
static szPrefix[10]
get_pcvar_string(g_iPrefix, szPrefix, charsmax(szPrefix))
return szPrefix
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
*/