Server bewerben
csb-random-weapon-round / addons / amxmodx / scripting / csb_random_weapon_round.sma
126 lines 3.3 KiB Pawn Raw Permalink History
/*
 * CSB Random Weapon Round
 * Copyright (C) 2026 counter-strike-boost.com
 *
 * Every round the whole server is stripped and handed the same randomly chosen
 * primary and secondary weapon from a configurable pool, with full reserve ammo
 * and a knife. The picked loadout is announced in chat, and buying is disabled so
 * everyone fights with the round's weapon.
 *
 * This program is free software: you can redistribute it and/or modify it under
 * the terms of the GNU General Public License as published by the Free Software
 * Foundation, either version 3 of the License, or (at your option) any later
 * version. It is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See <https://www.gnu.org/licenses/> for details.
 */

#include <amxmodx>
#include <hamsandwich>
#include <cstrike>
#include <fun>

new const PLUGIN[] = "CSB Random Weapon Round"
new const VERSION[] = "1.0.0"
new const AUTHOR[]  = "counter-strike-boost.com"

new const g_szPrimary[][] =
{
    "weapon_ak47", "weapon_m4a1", "weapon_awp", "weapon_mp5navy",
    "weapon_xm1014", "weapon_p90", "weapon_famas", "weapon_galil"
}
new const g_iPrimaryCSW[] =
{
    CSW_AK47, CSW_M4A1, CSW_AWP, CSW_MP5NAVY,
    CSW_XM1014, CSW_P90, CSW_FAMAS, CSW_GALIL
}
new const g_iPrimaryAmmo[] =
{
    90, 90, 30, 120,
    32, 100, 90, 90
}

new const g_szSecondary[][] =
{
    "weapon_deagle", "weapon_usp", "weapon_glock18", "weapon_p228", "weapon_fiveseven"
}
new const g_iSecondaryCSW[] =
{
    CSW_DEAGLE, CSW_USP, CSW_GLOCK18, CSW_P228, CSW_FIVESEVEN
}
new const g_iSecondaryAmmo[] =
{
    35, 24, 40, 26, 50
}

new g_pEnabled
new g_iPrimary, g_iSecondary

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR)

    g_pEnabled = register_cvar("csb_rwr_enabled", "1")

    RegisterHam(Ham_Spawn, "player", "fwSpawnPost", 1)
    register_logevent("eventRoundStart", 2, "1=Round_Start")

    register_clcmd("buy", "blockBuy")
    register_clcmd("buyammo", "blockBuy")
}

public eventRoundStart()
{
    if (!get_pcvar_num(g_pEnabled))
        return

    g_iPrimary   = random_num(0, sizeof(g_szPrimary) - 1)
    g_iSecondary = random_num(0, sizeof(g_szSecondary) - 1)

    new p[24], s[24]
    prettyName(g_szPrimary[g_iPrimary], p, charsmax(p))
    prettyName(g_szSecondary[g_iSecondary], s, charsmax(s))

    client_print(0, print_chat, "^x04[Weapons]^x01 This round: %s + %s!", p, s)
}

prettyName(const cls[], out[], len)
{
    /* strip the "weapon_" prefix and upper-case it */
    copy(out, len, cls[7])
    new n = strlen(out)
    for (new i = 0; i < n; i++)
    {
        if (out[i] >= 'a' && out[i] <= 'z')
            out[i] -= 32
    }
}

public fwSpawnPost(id)
{
    if (get_pcvar_num(g_pEnabled) && is_user_alive(id))
        set_task(0.2, "taskEquip", id)
}

public taskEquip(id)
{
    if (!is_user_alive(id) || !get_pcvar_num(g_pEnabled))
        return

    strip_user_weapons(id)
    give_item(id, "weapon_knife")

    give_item(id, g_szPrimary[g_iPrimary])
    cs_set_user_bpammo(id, g_iPrimaryCSW[g_iPrimary], g_iPrimaryAmmo[g_iPrimary])

    give_item(id, g_szSecondary[g_iSecondary])
    cs_set_user_bpammo(id, g_iSecondaryCSW[g_iSecondary], g_iSecondaryAmmo[g_iSecondary])
}

public blockBuy(id)
{
    if (get_pcvar_num(g_pEnabled))
        return PLUGIN_HANDLED

    return PLUGIN_CONTINUE
}