Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <amxmodx>
- #include <fakemeta>
- #include <hamsandwich>
- #include <xs>
- /*================================================================================
- [Constants, Offsets, Macros]
- =================================================================================*/
- // Plugin Version
- new const PLUGIN_VERSION[] = "1.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("Custom Knife Distance", PLUGIN_VERSION, "Fai & Shardow")
- }
- 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", "32.0")
- cvar_kf2 = register_cvar("knife_distance2", "48.0")
- // Get Max Players
- g_maxplayers = get_maxplayers()
- }
- /*================================================================================
- [Main Events]
- =================================================================================*/
- // Event Round Start
- public event_round_start()
- {
- // Show the messages
- colored_print(0, "^x04[AlliedModders]^x03 The server running ^"Custom Knife Distance^" Version %d By Fai & Shardow", PLUGIN_VERSION)
- colored_print(0, "^x04[AlliedModders]^x03 Slash Distance: %1.f Stab Distance: %1.f", get_pcvar_float(cvar_kf1), get_pcvar_float(cvar_kf2))
- colored_print(0, "^x04[AlliedModders]^x03 Newest Version Download: http://forums.alliedmods.net/showthread.php?p=1414241#post1414241")
- }
- /*================================================================================
- [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()
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement