reapi afk bomb transfer

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
30
Реакции
-4
there is no independent attempts port. https://dev-cs.ru/forums/90/post-thread
port plugin to reapi

Код:
#include <amxmodx>
#include <fakemeta>

// plugin's main information
#define PLUGIN_NAME "AFK Bomb Transfer"
#define PLUGIN_VERSION "0.4"
#define PLUGIN_AUTHOR "VEN"

// comment to avoid autodisabling the plugin on maps which not contain bomb targets
#define BOMB_MAP_CHECK

// float value, hud messages display time (in seconds)
#define MSG_TIME 7.0

// CVAR name, affects on spawned AFK bomb carrier which never moved after spawn
new CVAR_SPAWN[] = "afk_bombtransfer_spawn"

// CVAR value, max. allowed bomb carrier AFK time (in seconds)
new DEFAULT_SPAWN[] = "7"

// CVAR name, affects on any AFK bomb carrier except one which obey previous CVAR
new CVAR_TIME[] = "afk_bombtransfer_time"

// CVAR value, max. allowed bomb carrier AFK time (in seconds)
new DEFAULT_TIME[] = "15"

// do not set this value less than "maxplayers"
#define MAX_PLAYERS 32

// initial AMXX version number supported CVAR pointers in get/set_pcvar_* natives
#define CVAR_POINTERS_AMXX_INIT_VER_NUM 170

// determine if get/set_pcvar_* natives can be used
#if defined AMXX_VERSION_NUM && AMXX_VERSION_NUM >= CVAR_POINTERS_AMXX_INIT_VER_NUM
    #define CVAR_POINTERS
    new g_pcvar_spawn
    new g_pcvar_time
#endif

new TEAM[] = "TERRORIST"
new WEAPON[] = "weapon_c4"

#define    FL_ONGROUND (1<<9)

new bool:g_freezetime = true
new bool:g_spawn
new bool:g_planting

new g_carrier

new g_pos[MAX_PLAYERS + 1][3]
new g_time[MAX_PLAYERS + 1]

new g_maxplayers

public plugin_init() {
    register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)

#if defined CVAR_POINTERS
    g_pcvar_spawn = register_cvar(CVAR_SPAWN, DEFAULT_SPAWN)
    g_pcvar_time = register_cvar(CVAR_TIME, DEFAULT_TIME)
#else
    register_cvar(CVAR_SPAWN, DEFAULT_SPAWN)
    register_cvar(CVAR_TIME, DEFAULT_TIME)
#endif

#if defined BOMB_MAP_CHECK
    // is current map not contain bomb targets?
    if (!engfunc(EngFunc_FindEntityByString, -1, "classname", "func_bomb_target"))
        return
#endif

    register_event("WeapPickup", "event_got_bomb", "be", "1=6")
    register_event("BarTime", "event_bar_time", "be")
    register_event("TextMsg", "event_bomb_drop", "bc", "2=#Game_bomb_drop")
    register_event("TextMsg", "event_bomb_drop", "a", "2=#Bomb_Planted")
    register_event("HLTV", "event_new_round", "a", "1=0", "2=0")

    register_logevent("logevent_round_start", 2, "1=Round_Start")

    set_task(1.0, "task_afk_check", _, _, _, "b") // plugin's core loop

    g_maxplayers = get_maxplayers()
}

/* [B][B][B][B][B][B][B][B][B][B][B][B]***[/B][/B][/B][/B][/B][/B][/B][/B][/B][/B][/B][/B] Base [B][B][B][B][B][B][B][B][B][B][B][B]****[/B][/B][/B][/B][/B][/B][/B][/B][/B][/B][/B][/B] */

public event_new_round() {
    g_freezetime = true
    g_spawn = true
    g_planting = false
    g_carrier = 0
}

public event_got_bomb(id) {
    g_carrier = id
}

public event_bar_time(id) {
    if (id == g_carrier) {
        g_planting = bool:read_data(1)
        get_user_origin(id, g_pos[id])
        g_time[id] = 0
    }
}

public event_bomb_drop() {
    g_spawn = false
    g_planting = false
    g_carrier = 0
}

public logevent_round_start() {
    new id[32], num
    get_players(id, num, "ae", TEAM)

    if (!num) // is server empty?
        return

    g_freezetime = false

    // update afk timers and current positions
    new x
    for (new i = 0; i < num; ++i) {
        x = id[i]
        get_user_origin(x, g_pos[x])
        g_time[x] = 0
    }
}

public task_afk_check() {
    if (g_freezetime) // is freezetime right now?
        return

    // afk check
    new id[32], num, x, origin[3]
    get_players(id, num, "ae", TEAM)
    for (new i = 0; i < num; ++i) {
        x = id[i]
        get_user_origin(x, origin)
        if (origin[0] != g_pos[x][0] || origin[1] != g_pos[x][1] || (x == g_carrier && g_planting)) {
            g_time[x] = 0
            g_pos[x][0] = origin[0]
            g_pos[x][1] = origin[1]
            if (g_spawn && x == g_carrier)
                g_spawn = false
        }
        else
            g_time[x]++
    }

    // is bomb not currently carried or Ts number less than 2?
    if (!g_carrier || num < 2)
        return

#if defined CVAR_POINTERS
    new max_time = get_pcvar_num(g_spawn ? g_pcvar_spawn : g_pcvar_time)
#else
    new max_time = get_cvar_num(g_spawn ? CVAR_SPAWN : CVAR_TIME)
#endif

    // is plugin disabled (cvar <= 0) or carrier isn't afk?
    if (max_time <= 0 || g_time[g_carrier] < max_time)
        return

    // find who from non-afk Ts is the closest to the afk carrier
    get_user_origin(g_carrier, origin)
    new min_dist = 999999, dist, recipient, origin2[3]
    for (new i = 0; i < num; ++i) {
        x = id[i]
        if (g_time[x] < max_time) {
            get_user_origin(x, origin2)
            dist = get_distance(origin, origin2)
            if (dist < min_dist) {
                min_dist = dist
                recipient = x
            }
        }
    }

    if (!recipient) // is all Ts afk?
        return

    new carrier = g_carrier
    engclient_cmd (carrier, "drop", WEAPON) // drop the backpack
    new c4 = engfunc (EngFunc_FindEntityByString, -1, "classname", WEAPON) // find weapon_c4 entity
    if (! c4)
        return

    new backpack = pev (c4, pev_owner) // get backpack entity
    if (backpack <= g_maxplayers)
        return

    // my backpack transfer trick (improved)
    set_pev (backpack, pev_flags, pev (backpack, pev_flags) | FL_ONGROUND)
    dllfunc (DLLFunc_Touch, backpack, recipient)

    // hud messages stuff below
    set_hudmessage (0, 255, 0, 0.35, 0.8, _, _, MSG_TIME)
    new message [128], c_name [32], r_name [32]
    get_user_name (carrier, c_name, 31)
    get_user_name (recipient, r_name, 31)
    format (message, 127, "Bomb transferred to ^"% s ^ "^ nsince ^"% s ^ "is AFK", r_name, c_name)
    for (new i = 0; i <num; ++ i)
        show_hudmessage (id [i], "% s", message)

    set_hudmessage (255, 255, 0, 0.42, 0.3, _, _, MSG_TIME, _, _, 3)
    show_hudmessage (recipient, "You got the bomb!")
} [/ CODE]
 
  • Не нравится
Реакции: Ayk
Статус
В этой теме нельзя размещать новые ответы.

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу