[HowTo] Properly catch shot event in CS

For scripting examples for learning how to use AMXX.
User avatar
Archive-Poster
Posts: 1267
Gender:
United States of America

[HowTo] Properly catch shot event in CS

Post by Archive-Poster »

Since CurWeapon/TraceLine methods may produce false positives i'd recommend to use the below method. Didn't added comments but variables/function names are descriptive enough.

Code: Select all

/* AMX Mod X
*   gun_fire_playback_event_way.sma
*
* (c) Copyright 2007 by VEN
*
* This file is provided as is (no warranties)
*/

// plugin's main information
#define PLUGIN_NAME "gun_fire_playback_event_way"
#define PLUGIN_VERSION "0.1"
#define PLUGIN_AUTHOR "VEN"

#include <amxmodx>
#include <fakemeta>

#define MAX_CLIENTS 32

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 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")

        g_max_clients = global_get(glb_maxClients)
}

public fwPlaybackEvent(flags, invoker, eventid) {
        if (!(g_guns_eventids_bitsum & (1<<eventid)) || !(1 <= invoker <= g_max_clients))
                return FMRES_IGNORED

        // gun fired

        return FMRES_HANDLED
}
Attachments
gun_fire_playback_event_way.sma.zip
(972 Bytes) Downloaded 2 times

Who is online

Users browsing this forum: No registered users and 1 guest