View Single Post
bLacK-bLooD
AlliedModders Donor
Join Date: Jun 2008
Old 03-29-2012 , 07:45   Re: [REQ]Some edits for AMX_shot_admin
Reply With Quote #3

Here you go.

PHP Code:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <cstrike>

#define PLUGIN "Shot Administration"
#define VERSION "1.1"
#define AUTHOR "Nomexous"

/*

Version 1.0
 - Initial release.
 
Version 1.1
 - Small optimization with the menu.
 
 */

new settings[33] = { 0, ... }
new 
menu

new traceline_forward = -1tracehull_forward = -1

new mode[] = {    0// None
                  
1// Makes headshots (shooter)
              
}

#pragma unused mode // Gets rid of "symbol mode not used" warning.

new label[][] = { "None"// Yellow text if it's good, red if bad
          
"\yShooter"
        
}

public 
plugin_init()
{
    
register_plugin(PLUGINVERSIONAUTHOR)
        
    
register_clcmd("amx_shot_admin""conjure_menu"ADMIN_SLAY"Displays shot administration menu.")
}

public 
client_disconnect(id)
{
    
settings[id] = 0
}

public 
set_forwards_registered(bool:condition)
{
    if (
condition && traceline_forward == -&& tracehull_forward == -1)
    {
        
traceline_forward register_forward(FM_TraceLine"fw_traceline")
        
tracehull_forward register_forward(FM_TraceHull"fw_tracehull"1)
    }
    
    if (!
condition && traceline_forward != -&& tracehull_forward != -1)
    {
        
unregister_forward(FM_TraceLinetraceline_forward)
        
unregister_forward(FM_TraceHulltracehull_forward1)
        
        
traceline_forward = -1
        tracehull_forward 
= -1    
    
}
    return 
PLUGIN_HANDLED
}

public 
conjure_menu(idlevelcid)
{
    if (
cmd_access(idlevelcid1))
    {
        
build_menu(id)
    }
    return 
PLUGIN_HANDLED
}

// For some reason, they don't allow default argument items in public functions.
stock build_menu(idpage 0)
{
    
menu menu_create("Shot Administration Menu""menu_handler")
    
    static 
players[32], numname[32], cmd[5], itemtxt[60]
    
    
get_players(playersnum)
    for (new 
inumi++)
    {
        
get_user_name(players[i], name31)
        
        
formatex(cmd4"%i"players[i])
        
formatex(itemtxt59"%s: %s"namelabel[settings[players[i]]])
        
        
menu_additem(menuitemtxtcmd)
    }
    
    
menu_display(idmenupage)
    return 
PLUGIN_CONTINUE
}

public 
menu_handler(idmenuitem)
{
    if (
item 0)
    {
        for (new 
i33i++)
        {
            if (
settings[i] != 0)
            {
                
set_forwards_registered(true)
                return 
PLUGIN_HANDLED
            
}
        }
        
        
set_forwards_registered(false)
        return 
PLUGIN_HANDLED
    
}
    
    static 
cmd[5], callbackaccesspid
    menu_item_getinfo
(menuitemaccesscmd4__callback)
    
    
pid str_to_num(cmd)
    
    if (
is_user_connected(pid))
    {
        
settings[pid] = ++settings[pid] % (sizeof mode)
    }
    
    
menu_destroy(menu)
        
    
build_menu(iditem 7)
    return 
PLUGIN_HANDLED
}

public 
fw_traceline(Float:start[3], Float:end[3], conditionsidptr)
{
    return 
process_trace(idptr)
}

public 
fw_tracehull(Float:start[3], Float:end[3], conditionshullidptr)
{
    return 
process_trace(idptr)
}

public 
process_trace(idptr)
{
    if (!
is_user_alive(id)) return FMRES_IGNORED
    
new target get_tr2(ptrTR_pHit)
    
    switch (
settings[id])
    {
        
// Shooter (headshots galore) mode. See how many kills you can get before people notice...
        
case 1:
        {
            if (!
is_user_alive(target)) return FMRES_IGNORED
            
            
new Float:origin[3], Float:angles[3]
            
engfunc(EngFunc_GetBonePositiontarget8originangles)
            
set_tr2(ptrTR_vecEndPosorigin)
            
set_tr2(ptrTR_iHitgroupHIT_HEAD)
        }
    }
    
    
// Person gets shot anywhere, it's turned into a headshot.
    
if (is_user_alive(target) && settings[target] == 3)
    {
        
set_tr2(ptrTR_iHitgroupHIT_HEAD)
    }
    
    
// Shot is reflected to shooter. Giving this to someone makes them immune to guns.
    
if (is_user_alive(target) && settings[target] == 2)
    {
        
set_tr2(ptrTR_pHitid)
    }
    
    return 
FMRES_IGNORED

__________________
We all live under the same sky but we have different horizons.

Last edited by bLacK-bLooD; 03-29-2012 at 07:47. Reason: Edited the code a bit.
bLacK-bLooD is offline