Untitled

 avatar
unknown
plain_text
5 months ago
3.3 kB
3
Indexable
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <color>
#include <string>

#define MAX_PLAYERS 32
#define BOMB_TIMER 10.0

new g_bombCarrier = -1;
new g_bombTime[MAX_PLAYERS + 1];
new g_bombActive = 0;

public plugin_init() {
    register_plugin("Ticking Bomb", "1.0", "Your Name");
    register_clcmd("say !startbomb", "cmd_start_bomb");
}

public cmd_start_bomb(id) {
    if (!is_user_alive(id)) return;
    
    // Check if a bomb game is already active
    if (g_bombActive) {
        client_print(id, print_chat, "A bomb game is already in progress!");
        return;
    }

    // Randomly select a prisoner to carry the bomb
    g_bombCarrier = get_random_prisoner(id);
    if (g_bombCarrier == -1) {
        client_print(id, print_chat, "No prisoners available to select!");
        return;
    }

    // Set the bomb active
    g_bombActive = 1;
    g_bombTime[g_bombCarrier] = BOMB_TIMER;

    // Notify players
    client_print(0, print_chat, "The bomb has been given to player %d! They have %.1f seconds to pass it!", g_bombCarrier, BOMB_TIMER);
    set_task(1.0, "bomb_timer_task");
}

public bomb_timer_task() {
    if (g_bombActive) {
        // Decrease the timer
        g_bombTime[g_bombCarrier] -= 1.0;

        // Check if the timer has expired
        if (g_bombTime[g_bombCarrier] <= 0) {
            // Bomb exploded
            client_print(0, print_chat, "Player %d has exploded!", g_bombCarrier);
            // Reset game
            reset_bomb_game();
            return;
        }

        // Continue the timer
        set_task(1.0, "bomb_timer_task");
    }
}

public client_cmd(id, const cmd[]) {
    if (strcmp(cmd, "say !passbomb") == 0) {
        if (g_bombActive && id == g_bombCarrier) {
            // Find the target to pass the bomb to
            new target = find_target(id);
            if (target != -1) {
                // Pass the bomb
                g_bombCarrier = target;
                g_bombTime[g_bombCarrier] = BOMB_TIMER;

                client_print(0, print_chat, "Player %d has passed the bomb to player %d! They have %.1f seconds to pass it!", id, g_bombCarrier, BOMB_TIMER);
            } else {
                client_print(id, print_chat, "No valid target to pass the bomb to!");
            }
        } else {
            client_print(id, print_chat, "You are not the bomb carrier!");
        }
    }
}

public reset_bomb_game() {
    g_bombActive = 0;
    g_bombCarrier = -1;
    for (new i = 1; i <= MAX_PLAYERS; i++) {
        g_bombTime[i] = 0;
    }
}

public get_random_prisoner(exclude_id) {
    new prisoners[MAX_PLAYERS];
    new count = 0;

    for (new i = 1; i <= MAX_PLAYERS; i++) {
        if (is_user_alive(i) && i != exclude_id) {
            prisoners[count++] = i;
        }
    }

    if (count > 0) {
        return prisoners[random_num(0, count - 1)];
    }

    return -1;
}

public find_target(id) {
    new target = -1;

    // Here you can implement your logic to find a target prisoner
    // For example, you could randomly select another player who is alive
    for (new i = 1; i <= MAX_PLAYERS; i++) {
        if (is_user_alive(i) && i != id) {
            target = i;
            break; // Just select the first valid target
        }
    }

    return target;
}
Editor is loading...