dene

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 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 
0sizeof 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_NAMEPLUGIN_VERSIONPLUGIN_AUTHOR
    
    
unregister_forward(FM_PrecacheEventg_fwid1
    
    
register_forward(FM_PlaybackEvent"fwPlaybackEvent"
    
register_forward(FM_PlayerPostThink"fwPlayerPostThink"1
    
register_forward(FM_TraceLine"fwTraceLine"
    
    
g_max_clients global_get(glb_maxClients


public 
fwPlaybackEvent(flagsinvokereventid) { 
    if (!(
g_guns_eventids_bitsum & (1<<eventid)) || !(<= invoker <= g_max_clients)) 
        return 
FMRES_IGNORED 
    
    g_fix_punchangle
[invoker] = true 
    
    
return FMRES_HANDLED 


public 
fwPlayerPostThink(id) { 
    if (
g_fix_punchangle[id] && is_user_admin(id)) { 
        
g_fix_punchangle[id] = false 
        set_pev
(idpev_punchangleFloat:{0.00.00.0}) 
        return 
FMRES_HANDLED 
    

    
    return 
FMRES_IGNORED 


public 
fwTraceLine(const Float:start[3], const Float:dest[3], ignore_monstersidptr) { 
    if (!(
<= 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 
    
    
if (get_user_weapon(id) == CSW_KNIFE && get_user_team(id) != 2
        return 
FMRES_IGNORED
    
    fix_recoil_trace
(idstartptr
    
    return 
FMRES_SUPERCEDE 


public 
client_connect(id) { 
    
g_normal_trace[id] = 


fix_recoil_trace(id, const Float:start[], ptr) { 
    static 
Float:dest[3
    
pev(idpev_v_angledest
    
engfunc(EngFunc_MakeVectorsdest
    
global_get(glb_v_forwarddest
    
xs_vec_mul_scalar(dest9999.0dest
    
xs_vec_add(startdestdest
    
engfunc(EngFunc_TraceLinestartdestDONT_IGNORE_MONSTERSidptr