Помогите переделать плагин custrom Cuftrom Knife Distance на админа чтобы работало только у админов понятно?
Вот исходник
Код
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <xs>
/*===============================================================================
=
[Constants, Offsets, Macros]
================================================================================
=*/
// Plugin Version
new const PLUGIN_VERSION[] = "2.0"
/*===============================================================================
=
[Global Variables]
================================================================================
=*/
// Player vars
new g_attacking[33] // get attacking
// Game vars
new g_maxplayers // max players counter
// Cvar
new cvar_kf1, cvar_kf2
// Cached stuff for players
#define is_user_valid_connected(%1) (1 <= %1 <= g_maxplayers && is_user_connected(%1))
/*===============================================================================
=
[Precache and Init]
================================================================================
=*/
public plugin_precache()
{
// Register earlier to show up in plugins list properly after plugin disable/error at loading
register_plugin("CFD", PLUGIN_VERSION, "Dragonvlad")
}
public plugin_init()
{
// Events
register_event("HLTV", "event_round_start", "a", "1=0", "2=0")
// FM Forwards
RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_knife", "fw_PrimaryAttack")
RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_knife", "fw_SecondaryAttack")
RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_knife", "fw_PrimaryAttack_Post", 1)
RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_knife", "fw_SecondaryAttack_Post", 1)
register_forward(FM_TraceLine, "fw_TraceLine")
register_forward(FM_TraceHull, "fw_TraceHull")
// Register Cvar
cvar_kf1 = register_cvar("knife_distance1", "50.0")
cvar_kf2 = register_cvar("knife_distance2", "14448.0")
// Get Max Players
g_maxplayers = get_maxplayers()
}
/*===============================================================================
=
[Main Events]
================================================================================
=*/
// Event Round Start
public event_round_start()
{
// Show the messages
colored_print(0, "^x04Главный админ^x03 BoG.")
}
/*===============================================================================
=
[Main Forwards]
================================================================================
=*/
public fw_PrimaryAttack(weapon_ent)
{
// Not valid
if (!pev_valid(weapon_ent))
return;
// Get owner
static owner
owner = pev(weapon_ent, pev_owner)
// Replace these for zombie only
if (!is_user_valid_connected(owner))
return;
g_attacking[owner] = 1
}
public fw_SecondaryAttack(weapon_ent)
{
// Not valid
if (!pev_valid(weapon_ent))
return;
// Get owner
static owner
owner = pev(weapon_ent, pev_owner)
// Replace these for zombie only
if (!is_user_valid_connected(owner))
return;
g_attacking[owner] = 2
}
public fw_PrimaryAttack_Post(weapon_ent)
{
// Not valid
if (!pev_valid(weapon_ent))
return;
// Get owner
static owner
owner = pev(weapon_ent, pev_owner)
// Replace these for zombie only
if (!is_user_valid_connected(owner))
return;
g_attacking[owner] = 0
}
public fw_SecondaryAttack_Post(weapon_ent)
{
// Not valid
if (!pev_valid(weapon_ent))
return;
// Get owner
static owner
owner = pev(weapon_ent, pev_owner)
// Replace these for zombie only
if (!is_user_valid_connected(owner))
return;
g_attacking[owner] = 0
}
public fw_TraceLine(Float:vector_start[3], Float:vector_end[3], ignored_monster, id, handle)
{
// Replace these for zombie only
if (!is_user_valid_connected(id))
return FMRES_IGNORED;
// Not alive
if (!is_user_alive(id))
return FMRES_IGNORED;
// Not using knife
if (get_user_weapon(id) != CSW_KNIFE)
return FMRES_IGNORED;
// Not attacking
if (!g_attacking[id])
return FMRES_IGNORED;
pev(id, pev_v_angle, vector_end)
angle_vector(vector_end, ANGLEVECTOR_FORWARD, vector_end)
if (g_attacking[id] == 1)
xs_vec_mul_scalar(vector_end, get_pcvar_float(cvar_kf1), vector_end)
else
xs_vec_mul_scalar(vector_end, get_pcvar_float(cvar_kf2), vector_end)
xs_vec_add(vector_start, vector_end, vector_end)
engfunc(EngFunc_TraceLine, vector_start, vector_end, ignored_monster, id, handle)
return FMRES_SUPERCEDE;
}
public fw_TraceHull(Float:vector_start[3], Float:vector_end[3], ignored_monster, hull, id, handle)
{
// Replace these for zombie only
if (!is_user_valid_connected(id))
return FMRES_IGNORED;
// Not alive
if (!is_user_alive(id))
return FMRES_IGNORED;
// Not using knife
if (get_user_weapon(id) != CSW_KNIFE)
return FMRES_IGNORED;
// Not attacking
if (!g_attacking[id])
return FMRES_IGNORED;
pev(id, pev_v_angle, vector_end)
angle_vector(vector_end, ANGLEVECTOR_FORWARD, vector_end)
if (g_attacking[id] == 1)
xs_vec_mul_scalar(vector_end, get_pcvar_float(cvar_kf1), vector_end)
else
xs_vec_mul_scalar(vector_end, get_pcvar_float(cvar_kf2), vector_end)
xs_vec_add(vector_start, vector_end, vector_end)
engfunc(EngFunc_TraceHull, vector_start, vector_end, ignored_monster, hull, id, handle)
return FMRES_SUPERCEDE;
}
// Colored print by MeRcyLeZZ
colored_print(target, const message[], any:...)
{
static buffer[512], i, argscount, g_msgSayText
argscount = numargs()
g_msgSayText = get_user_msgid("SayText")
// Send to everyone
if (!target)
{
static player
for (player = 1; player <= g_maxplayers; player++)
{
// Not connected
if (!is_user_connected(player))
continue;
// Remember changed arguments
static changed[5], changedcount // [5] = max LANG_PLAYER occurencies
changedcount = 0
// Replace LANG_PLAYER with player id
for (i = 2; i < argscount; i++)
{
if (getarg(i) == LANG_PLAYER)
{
setarg(i, 0, player)
changed[changedcount] = i
changedcount++
}
}
// Format message for player
vformat(buffer, charsmax(buffer), message, 3)
// Send it
message_begin(MSG_ONE_UNRELIABLE, g_msgSayText, _, player)
write_byte(player)
write_string(buffer)
message_end()
// Replace back player id's with LANG_PLAYER
for (i = 0; i < changedcount; i++)
setarg(changed[i], 0, LANG_PLAYER)
}
}
// Send to specific target
else
{
// Format message for player
vformat(buffer, charsmax(buffer), message, 3)
// Send it
message_begin(MSG_ONE, g_msgSayText, _, target)
write_byte(target)
write_string(buffer)
message_end()
}
}
Отредактировал: Dragonvlad, - 29.11.2012, 18:47