PHP- Kodu:
/* AMX Mod X
* Fix Recoil
*
* (c) Copyright 2007 by VEN
*
* This file is provided as is (no warranties)
*/
// plugin's main information
#define PLUGIN_NAME "Fix Recoil"
#define PLUGIN_VERSION "0.1"
#define PLUGIN_AUTHOR "VEN"
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fakemeta>
#include <xs>
#define MAX_CLIENTS 32
new g_normal_trace[MAX_CLIENTS + 1]
new bool:g_fix_punchangle[MAX_CLIENTS + 1]
new g_fwid
new g_max_clients
new bool:hasItem[33];
new const g_guns_events[][] = {
"events/awp.sc",
"events/g3sg1.sc",
"events/ak47.sc",
"events/scout.sc",
"events/m249.sc",
"events/m4a1.sc",
"events/sg552.sc",
"events/aug.sc",
"events/sg550.sc",
"events/m3.sc",
"events/xm1014.sc",
"events/usp.sc",
"events/mac10.sc",
"events/ump45.sc",
"events/fiveseven.sc",
"events/p90.sc",
"events/deagle.sc",
"events/p228.sc",
"events/glock18.sc",
"events/mp5n.sc",
"events/tmp.sc",
"events/elite_left.sc",
"events/elite_right.sc",
"events/galil.sc",
"events/famas.sc"
}
new g_guns_eventids_bitsum
public plugin_precache() {
g_fwid = register_forward(FM_PrecacheEvent, "fwPrecacheEvent", 1)
}
public fwPrecacheEvent(type, const name[]) {
for (new i = 0; i < sizeof g_guns_events; ++i) {
if (equal(g_guns_events[i], name)) {
g_guns_eventids_bitsum |= (1<<get_orig_retval())
return FMRES_HANDLED
}
}
return FMRES_IGNORED
}
public plugin_init() {
register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
unregister_forward(FM_PrecacheEvent, g_fwid, 1)
register_forward(FM_PlaybackEvent, "fwPlaybackEvent")
register_forward(FM_PlayerPostThink, "fwPlayerPostThink", 1)
register_forward(FM_TraceLine, "fwTraceLine")
g_max_clients = global_get(glb_maxClients)
register_concmd("amx_mermisekmeme","cmdGiveItem",ADMIN_BAN)
}
public cmdGiveItem(id,level,cid) {
if(!cmd_access(id,level,cid,2)) {
return PLUGIN_HANDLED
}
new arg[32];read_argv(1,arg,31)
new Uid = find_player("bhl",arg)
if(!Uid) {
console_print(id,"Oyuncu Bulunamadi")
return PLUGIN_HANDLED
}
new name[32];get_user_name(Uid,name,31)
hasItem[Uid] = true;
console_print(id,"%s Adli Oyuncuya Mermi Sekmeme Verdiniz",name)
return PLUGIN_HANDLED
}
public fwPlaybackEvent(flags, invoker, eventid) {
if (!(g_guns_eventids_bitsum & (1<<eventid)) || !(1 <= invoker <= g_max_clients))
return FMRES_IGNORED
g_fix_punchangle[invoker] = true
return FMRES_HANDLED
}
public fwPlayerPostThink(id) {
if (g_fix_punchangle[id] && hasItem[id]) {
g_fix_punchangle[id] = false
set_pev(id, pev_punchangle, Float:{0.0, 0.0, 0.0})
return FMRES_HANDLED
}
return FMRES_IGNORED
}
public fwTraceLine(const Float:start[3], const Float:dest[3], ignore_monsters, id, ptr) {
if (!(1 <= id <= g_max_clients))
return FMRES_IGNORED
if (!g_normal_trace[id]) {
g_normal_trace[id] = ptr
return FMRES_HANDLED
}
if (ptr == g_normal_trace[id] || ignore_monsters != DONT_IGNORE_MONSTERS || !is_user_alive(id))
return FMRES_IGNORED
fix_recoil_trace(id, start, ptr)
return FMRES_SUPERCEDE
}
public client_connect(id) {
g_normal_trace[id] = 0
}
fix_recoil_trace(id, const Float:start[], ptr) {
static Float:dest[3]
pev(id, pev_v_angle, dest)
engfunc(EngFunc_MakeVectors, dest)
global_get(glb_v_forward, dest)
xs_vec_mul_scalar(dest, 9999.0, dest)
xs_vec_add(start, dest, dest)
engfunc(EngFunc_TraceLine, start, dest, DONT_IGNORE_MONSTERS, id, ptr)
}