Код
/*
#include <AmxModX>
#include <HamSandwich>
#include <FakeMeta_Util>
//About plugin
#define PLUGIN "AWP DeathMatch"
#define VERSION "3.0"
#define AUTHOR "*GEORGE*"
new const CFG_NAME[] = "AWP_Settings"
const OFFSET_LINUX = 5
const OFFSET_TEAM = 114
const m_LastHitGroup = 75
enum
{
FM_CS_TEAM_UNASSIGNED = 0,
FM_CS_TEAM_T,
FM_CS_TEAM_CT,
FM_CS_TEAM_SPECTATOR
}
new const WEAPONENTNAMES[][] =
{
"weapon_p228", "weapon_scout", "weapon_hegrenade", "weapon_xm1014", "weapon_mac10", "weapon_aug",
"weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_ump45", "weapon_sg550",
"weapon_galil", "weapon_famas", "weapon_usp", "weapon_glock18", "weapon_mp5navy", "weapon_m249",
"weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_flashbang", "weapon_deagle", "weapon_sg552",
"weapon_ak47", "weapon_p90", "weapon_c4"
}
new const ENTITY_ZONES[][] =
{
"func_bomb_target", "info_bomb_target", "hostage_entity", "func_hostage_rescue",
"info_hostage_rescue", "info_vip_start", "func_vip_safetyzone", "func_escapezone",
"func_buy_target", "info_buy_target", "buy_zone"
}
new give_hp, hp, hp_hs, hp_max, respawn_dead, give_ammo, meat_effect, screenfade_effect, remove_weapons, only_awp, only_hs
public plugin_precache() server_cmd("exec addons/amxmodx/configs/%s.cfg", CFG_NAME)
//Plugin functions
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage_Pre", 0)
RegisterHam(Ham_Killed, "player", "fw_Killed_Pre")
RegisterHam(Ham_Killed, "player", "fw_Killed_Post", 1)
RegisterHam(Ham_Spawn, "player", "fw_Spawn_Post", 1)
RegisterHam(Ham_Spawn, "weaponbox", "fw_WeaponSpawn_Post", 1)
RegisterHam(Ham_Weapon_Reload, "weapon_awp", "fw_Reload_Post", 1)
for(new i = 1; i < sizeof WEAPONENTNAMES; i++) if(WEAPONENTNAMES[i][0]) RegisterHam(Ham_Item_AddToPlayer, WEAPONENTNAMES[i], "fw_Item_AddToPlayer_Pre", 0)
for(new i = 0; i < sizeof ENTITY_ZONES; i++)fm_remove_entity_name(ENTITY_ZONES[i])
give_hp = register_cvar("awp_give_health", "1")
hp = register_cvar("awp_hp_for_kill", "10")
hp_hs = register_cvar("awp_hp_for_kill_hs", "25")
hp_max = register_cvar("awp_hp_max", "225")
give_ammo = register_cvar("awp_give_ammo", "1")
meat_effect = register_cvar("awp_meat_effect", "1")
screenfade_effect = register_cvar("awp_kill_effect", "1")
respawn_dead = register_cvar("awp_respawn_dead", "3.0")
remove_weapons = register_cvar("awp_remove_weapons", "1")
only_awp = register_cvar("awp_only_awp", "1")
only_hs = register_cvar("awp_only_headshot", "0")
}
public client_putinserver(iPlayer)
{
set_task(10.0, "show_message", iPlayer)
set_task(5.0, "Execute_respawn", iPlayer)
return PLUGIN_CONTINUE
}
public fw_TakeDamage_Pre(iVictim)
{
if(get_pcvar_num(only_hs) != 1)
return HAM_IGNORED
if(fm_get_user_hitzones(iVictim) != HIT_HEAD)
return HAM_SUPERCEDE
return HAM_IGNORED
}
public fw_Killed_Pre(iVictim, iAttacker, Meat)
{
//Meat effect?
if(get_pcvar_num(meat_effect) != 1)
return HAM_IGNORED
if(fm_get_user_hitzones(iVictim) == HIT_HEAD)
{
static iOrigin[3]
get_user_origin(iVictim, iOrigin)
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_LAVASPLASH)
write_coord(iOrigin[0])
write_coord(iOrigin[1])
write_coord(iOrigin[2]-26)
message_end()
SetHamParamInteger(3, 2)
}
return HAM_IGNORED
}
public fw_Killed_Post(iVictim, iAttacker)
{
//Respawn for victim
set_task(get_pcvar_float(respawn_dead), "Execute_respawn", iVictim)
//Add health for killer?
if(get_pcvar_num(give_hp) == 1)
{
if(fm_get_user_hitzones(iVictim) == HIT_HEAD)
fm_set_user_health(iAttacker, fm_get_user_health(iAttacker) + get_pcvar_num(hp_hs))
else
fm_set_user_health(iAttacker, fm_get_user_health(iAttacker) + get_pcvar_num(hp))
//Return health, if max
if(fm_get_user_health(iAttacker) > get_pcvar_num(hp_max))
fm_set_user_health(iAttacker, get_pcvar_num(hp_max))
}
//Effect when killed?
if(get_pcvar_num(screenfade_effect) == 1)
ScreenFade(iAttacker, 3, 255, 0, 0, 155)
return HAM_IGNORED
}
public fw_Spawn_Post(iPlayer)
{
//Give items and ammo
fm_give_item(iPlayer, "weapon_awp")
fm_give_item(iPlayer, "ammo_338magnum")
fm_give_item(iPlayer, "ammo_338magnum")
fm_give_item(iPlayer, "ammo_338magnum")
fm_give_item(iPlayer, "weapon_knife")
fm_give_item(iPlayer, "item_assaultsuit")
return HAM_IGNORED
}
public fw_WeaponSpawn_Post(iEntity)
{
//Remove dropped weapons?
if(get_pcvar_num(remove_weapons) == 1)
engfunc(EngFunc_RemoveEntity, iEntity)
return HAM_IGNORED
}
public fw_Reload_Post(weapon)
{
//Get player index
new iPlayer = get_pdata_cbase(weapon, 41, 4)
//Give ammo?
if(get_pcvar_num(give_ammo) == 1)
fm_give_item(iPlayer, "ammo_338magnum")
}
public fw_Item_AddToPlayer_Pre(weapon, iPlayer)
{
//Fix bug?
if(get_pcvar_num(only_awp) != 1)
return HAM_IGNORED
fm_give_item(iPlayer, "weapon_awp")
return HAM_SUPERCEDE
}
public Execute_respawn(iPlayer)
{
//Fix bug
if(fm_get_user_team(iPlayer) == FM_CS_TEAM_SPECTATOR)
return PLUGIN_HANDLED
//Respawn player
ExecuteHamB(Ham_CS_RoundRespawn, iPlayer)
return PLUGIN_CONTINUE
}
public show_message(iPlayer)
{
//Message, when new player
new name[32]; get_user_name(iPlayer, name, 31)
set_hudmessage(0, 255, 0, -1.0, -1.0, 0, 0.0, 6.0, 0.0, 0.0, -1)
show_hudmessage(iPlayer, "Hi, %s!^nServer work on %s^nAuthor:%s", name, PLUGIN, AUTHOR)
}
//Stocks
stock fm_get_user_team(iPlayer) return get_pdata_int(iPlayer, OFFSET_TEAM, OFFSET_LINUX)
stock fm_get_user_hitzones(iPlayer) return get_pdata_int(iPlayer, m_LastHitGroup, OFFSET_LINUX)
stock fm_get_user_health(iPlayer) return pev(iPlayer, pev_health)
//Thanks Chrescore1 :3
stock ScreenFade(id, Timer, Colors1, Colors2, Colors3, Alpha)
{
if(!is_user_connected(id)) return
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("ScreenFade"), _, id);
write_short((1<<12) * Timer)
write_short( 14<<18 )
write_short( 1<<1 )
write_byte(Colors1)
write_byte(Colors2)
write_byte(Colors3)
write_byte(Alpha)
message_end()
}