Deathrun Mod
#1
Bueno, les dejo este deathrun que hice hace unos cuantos meses atrás. Lengua

Código:
CRÉDITOS:
- xPaw: Team SemiClip, Fake Bot.
- Sugisaki: Su forma de bloquear el botón de trampas usando Tries.

Si hay algún error o bug, trataré de corregirlo.

Código:
CONTENIDO:
- Menú de models a elección (solo admins).
- Bomba que detecta la mayor cantidad de trampas posibles.
NOTA: Al lanzar la bomba hacia una trampa transparente (Ej: trampas del deathrun_duality), éstas no son detectadas, ya que al remover el efecto, la trampa se vería negra.
- Menú de vidas.
- Menú de administrador (Dar vidas, revivir a un jugador, etc).
- Ronda libre.
- Opción para hacer a los jugadores y al agua visibles e invisibles.

Código PHP:
#include <amxmodx>
#include <amxmisc>
#include <fun>
#include <engine>
#include <hamsandwich>
#include <cstrike>
#include <fakemeta>

#pragma semicolon 1

/* === DEFINES === */
#define SZPREFIX "!g[DEATHRUN]!y"
#define ROUND_STARTED() ((g_round_end + 5.0) < get_gametime())
#define FREEROUND_ROUNDS 5
#define DMG_FALL (1<<5)
#define PLUGIN_VERSION "4.1.8b"
#define TIME_START 10

/* === CONST === */
const OFFSET_BUYZONE 235;
const 
OFFSET_VGUIMENU 2;
const 
OFFSET_CSMENUCODE 205;
const 
OFFSET_LINUX 5;
const 
OFFSET_WEAPON_LINUX 4;
const 
OFFSET_OWNER 41;
const 
HIDE_MONEY = (1<<5);
const 
GRENADE_SHOWTRAPS 5544;
const 
IMPULSE_FLASHLIGHT 100;
const 
TASK_MODEL 1111;

#define ID_MODEL (taskid - TASK_MODEL)

/* === ENUMS === */
enum _:SYNCHUD_STRUCT
{
    
START,
    
MESSAGE,
    
FREEROUND,
    
WELCOME,
    
DESTROY
};

enum _:MESSAGES_STRUCT
{
    
SAYTEXT,
    
SHOWMENU,
    
VGUIMENU,
    
STATUSICON,
    
TEXTMSG,
    
HIDEWEAPON,
    
DEATHMSG
};

enum _:FREEROUND_STRUCT
{
    
FR_ROUNDS,
    
FR_STARTED
};

enum _:OPTIONS_STRUCT
{
    
PLAYER_INVISIBILITY,
    
WATER_INVISIBILITY 
};

enum _:SPRITE_STRUCT
{
    
LASERBEAM,
    
RING
};

enum _:COLORS_STRUCT
{
    
COLOR_NAME[21],
    
Float:RED,
    
Float:GREEN,
    
Float:BLUE
};

enum _:MODELS_STRUCT
{
    
MODEL_NAME[32],
    
MODEL_MODEL[32]
};

/* === NEW CONST === */
new const MODELS_DEPLOY[][] = 

    
"weapon_knife"
    
"weapon_smokegrenade" 
};

new const 
GRENADE_COLOR[][COLORS_STRUCT] =
{
    { 
"VERDE"0.0255.00.0 },
    { 
"AZUL"0.00.0255.0 },
    { 
"ROJO"255.00.00.0 },
    { 
"AMARILLO"255.0255.00.0 },
    { 
"ROSADO"255.00.0255.0 },
    { 
"CELESTE"0.0255.0255.0 },
    { 
"AZUL MAJORELLE"96.080.0220.0 },
    { 
"AZUL PETROLEO"1.070.099.0 },
    { 
"MALVA"224.0176.0255.0 },
    { 
"TURQUESA"48.0213.0200.0 },
    { 
"DORADO"255.0215.00.0 }
};

new const 
ADMIN_MODEL[][MODELS_STRUCT] =
{
    { 
"Arnold""dr_amodel_1" },
    { 
"Kevin""dr_amodel_2" },
    { 
"Frank""dr_amodel_3" },
    { 
"Frederic""dr_amodel_4" },
    { 
"George""dr_amodel_4" },
    { 
"Hibrahím""dr_amodel_4" },
    { 
"Isaac""dr_amodel_5" },
    { 
"Abraham""dr_amodel_6" },
    { 
"Oso""dr_amodel_7" },
    { 
"Papá Noel""dr_amodel_8" },
    { 
"Telettubie""dr_amodel_9" },
    { 
"Jugador de Rugby""dr_amodel_10" },
    { 
"Eve's""dr_amodel_11" },
    { 
"Tommy Vercetti""dr_amodel_12" },
    { 
"Carl Jhonson""dr_amodel_13" }
};

new const 
SOUND_FREEROUND[] = "DEATHRUN/dr_freeround.wav";
new const 
SOUND_STARTED[] = "fvox/adrenaline_shot.wav";
new const 
SOUND_TT_DISCONNECT[] = "fvox/medical_repaired.wav";
new const 
SOUND_NOT_TERRORIST[] = "fvox/power_restored.wav";
new const 
SOUND_PREHEATINH[] = "fvox/torniquette_applied.wav";
new const 
SOUND_WELCOME[] = "buttons/blip1.wav";
new const 
SOUND_BUTTON_BLOCK[][] = 
{
    
"buttons/spark5.wav",
    
"buttons/button8.wav",
    
"buttons/button10.wav",
    
"buttons/button11.wav",
    
"buttons/latchlocked1.wav",
    
"buttons/latchlocked2.wav"
};
    
new const 
SOUND_GRENADE_DETECT_BREAKABLE[] = "DEATHRUN/dr_gdetect_breakable.wav";
new const 
SPRITE_GRENADE_TRAIL[] = "sprites/laserbeam.spr";
new const 
SPRITE_GRENADE_RING[] = "sprites/shockwave.spr";
new const 
MODEL_TERRORIST[] = "dr_amodel_14";
new const 
MODEL_KNIFE_V[] = "models/DEATHRUN/dr_v_knife.mdl"
new const 
MODEL_KNIFE_P[] = "models/DEATHRUN/dr_p_knife.mdl";
new const 
MODEL_BOMB_V[] = "models/DEATHRUN/dr_v_bomb_trap.mdl";
new const 
MODEL_BOMB_P[] = "models/DEATHRUN/dr_p_bomb_trap.mdl";
new const 
MODEL_BOMB_W[] = "models/DEATHRUN/dr_w_bomb_trap.mdl";

/* === GLOBAL VARIABLES === */
new g_life[33];
new 
g_maxplayers[1 char];
new 
g_synchud[SYNCHUD_STRUCT];
new 
g_message[MESSAGES_STRUCT];
new 
g_option[33][OPTIONS_STRUCT];
new 
g_model[33];
new 
g_sprite[SPRITE_STRUCT];
new 
g_freeround[FREEROUND_STRUCT];
new 
g_entity_think;
new 
g_firstround;
new 
g_dr_time;
new 
g_dr_time_start;
new 
g_fake_player;
new 
g_semiclip[33];
new 
bool:g_terrorist_disconnected;
new 
bool:g_message_start;
new 
g_check_terrorist;
new 
g_last_terrorist[32];
new 
g_last_tt;
new 
g_grenade_showtraps[33];
new 
g_detect_trap[4999];
new 
Float:g_grenade_time[33];
new 
Float:g_round_end;
new 
g_game_commencing;
new 
Float:g_trap_color[33][3];
new 
g_color_select[33];
new 
g_camera[33];
new 
g_target[33], g_target_name[33][32];
new 
g_playermodel[33][32];
new 
Trie:g_button;
new 
g_szbuttons[5];

public 
plugin_init()
{
    
register_plugin("AMX Deathrun"PLUGIN_VERSION"Cristian'");
    
    
/* === EVENTS === */
    
register_event("DeathMsg""event_deathmsg""a");
    
register_event("CurWeapon""event_curweapon""be""1=1");
    
register_logevent("event_round_start"2"1=Round_Start");
    
register_logevent("event_round_end"2"1=Round_End");
    
    
register_impulse(IMPULSE_FLASHLIGHT"reg_Impulse_FlashLight");
    
    
/* === HAMS === */
    
RegisterHam(Ham_Spawn"player""ham_PlayerSpawn_Post"true);
    
RegisterHam(Ham_Use"func_button""ham_Use_Button");
    
RegisterHam(Ham_Use"func_rot_button""ham_Use_Button");
    
RegisterHam(Ham_Use"button_target""ham_Use_Button");
    
RegisterHam(Ham_Touch"weaponbox""ham_TouchWeapon");
    
RegisterHam(Ham_Touch"armoury_entity""ham_TouchWeapon");
    
RegisterHam(Ham_Touch"weapon_shield""ham_TouchWeapon");
    
RegisterHam(Ham_Think"grenade""ham_ThinkGrenade");
    new 
i;
    
    for (
0sizeof(MODELS_DEPLOY); i++)
        
RegisterHam(Ham_Item_DeployMODELS_DEPLOY[i], "ham_Item_Deploy_Post"true);
    
    
RegisterHam(Ham_TakeDamage"player""ham_TakeDamage");
    
RegisterHam(Ham_TraceAttack"player""ham_TraceAttack");
    
    
/* === FORWARDS === */
    
register_forward(FM_AddToFullPack"fw_AddToFullPack_Post"true);
    
register_forward(FM_SetClientKeyValue"fw_SetClientKeyValue");
    
register_forward(FM_ClientUserInfoChanged"fw_ClientUserInfoChanged");
    
register_forward(FM_StartFrame"fw_StartFrame");
    
register_forward(FM_ClientKill"fw_ClientKill");
    
register_forward(FM_SetModel"fw_SetModel");
    
    
/* === CLCMDS === */
    
register_clcmd("chooseteam""clcmd_chooseteam");
    
register_clcmd("jointeam""clcmd_chooseteam");
    
register_clcmd("radio1""clcmd_radio");
    
register_clcmd("radio2""clcmd_radio");
    
register_clcmd("radio3""clcmd_radio");
    
register_clcmd("drop""clcmd_drop");
    
register_clcmd("say /connected""clcmd_connected");
    
register_clcmd("say /cam""clcmd_camera");
    
register_clcmd("say""clcmd_say");
    
register_clcmd("CANTIDAD_DE_VIDAS""cantidad_de_vidas");
    
register_impulse(201"clcmd_imp201");
    
    
g_maxplayers{0} = get_maxplayers();
    
    
g_synchud[START] = CreateHudSyncObj();
    
g_synchud[MESSAGE] = CreateHudSyncObj();
    
g_synchud[FREEROUND] = CreateHudSyncObj();
    
g_synchud[WELCOME] = CreateHudSyncObj();
    
g_synchud[DESTROY] = CreateHudSyncObj();
    
    
/* === MESSAGES === */
    
g_message[SAYTEXT] = get_user_msgid("SayText");
    
g_message[SHOWMENU] = get_user_msgid("ShowMenu");
    
g_message[VGUIMENU] = get_user_msgid("VGUIMenu");
    
g_message[STATUSICON] = get_user_msgid("StatusIcon");
    
g_message[TEXTMSG] = get_user_msgid("TextMsg");
    
g_message[HIDEWEAPON] = get_user_msgid("HideWeapon");
    
g_message[DEATHMSG] = get_user_msgid("DeathMsg");
    
    
/* === REGISTER_MESSAGE === */
    
register_message(g_message[STATUSICON], "message_statusicon");
    
register_message(g_message[TEXTMSG], "message_textmsg");
    
register_message(g_message[SHOWMENU], "message_showmenu");
    
register_message(g_message[VGUIMENU], "message_vguimenu");
    
register_message(g_message[DEATHMSG], "message_deathmsg");
    
    
g_entity_think create_entity("info_target");
    
    
entity_set_string(g_entity_thinkEV_SZ_classname"StartDr");
    
register_think("StartDr""entity_think_countdown");
    
    
    
remove_entity_name("info_map_parameters");
    
remove_entity_name("func_buyzone");
    
remove_entity_name("env_beam");
    
    
g_firstround true;
    
g_dr_time TIME_START;
    
g_button TrieCreate();
    
    static 
entcount;
    
    while ((
ent find_ent_by_class(ent"info_player_deathmatch")) > 0)
    {
        if (
count++ > 1)
            break;
    }
    
    if (
count <= 1)
        
g_fake_player = -1;
    
    
set_task(60.0"print_message"___"b");
    
set_task(8.0"check_terrorist"___"b");
    
set_task(5.0"create_bot");
    
    
server_print("no_amxx_uncompress");
}

public 
print_message()
{
    switch(
random_num(01))
    {
        case 
0chat_color(0"%s !gDeathrun %s!y by !g; Cristian'"SZPREFIXPLUGIN_VERSION);
        case 
1
        {
            static 
mapname[32], admin[21];
            
get_mapname(mapnamecharsmax(mapname));
            
            if (
get_administration() > 0)
            {
                
format(admincharsmax(admin), " !t(!g+%d !y%s!t)"get_administration(), (get_administration() == 1) ? 
                
"administrador" "administradores");
            }
            else
                
format(admincharsmax(admin), "");
                
            
chat_color(0"%s !g%d %s!y %s%s jugando en el mapa !g%s!y."SZPREFIXget_connected(), 
            (
get_connected() == 1) ? "usuario" "usuarios"admin,
            (
get_connected() == 1) ? "está" "están"mapname);
        }
    }
}

public 
plugin_precache()
{
    new 
isztext[256];
    
    
precache_sound(SOUND_FREEROUND);
    
precache_sound(SOUND_GRENADE_DETECT_BREAKABLE);
    
precache_sound(SOUND_WELCOME);
    
    for (
0sizeof(SOUND_BUTTON_BLOCK); i++)
        
precache_sound(SOUND_BUTTON_BLOCK[i]);
    
    
precache_model("models/rpgrocket.mdl");
    
precache_model(MODEL_KNIFE_V);
    
precache_model(MODEL_KNIFE_P);
    
precache_model(MODEL_BOMB_V);
    
precache_model(MODEL_BOMB_P);
    
precache_model(MODEL_BOMB_W);
    
    
g_sprite[LASERBEAM] = precache_model(SPRITE_GRENADE_TRAIL);
    
g_sprite[RING] = precache_model(SPRITE_GRENADE_RING);
    
    for (
0sizeof(ADMIN_MODEL); i++)
    {
        
format(sztextcharsmax(sztext), "models/player/%s/%s.mdl"ADMIN_MODEL[i][MODEL_MODEL], ADMIN_MODEL[i][MODEL_MODEL]);
        
precache_model(sztext);
        
        
format(sztextcharsmax(sztext), "models/player/%s/%sT.mdl"ADMIN_MODEL[i][MODEL_MODEL], ADMIN_MODEL[i][MODEL_MODEL]);
        
        if (
file_exists(sztext))
            
precache_model(sztext);
    }
    
    
format(sztextcharsmax(sztext), "models/player/%s/%s.mdl"MODEL_TERRORISTMODEL_TERRORIST);
    
precache_model(sztext);
}
    
public 
client_putinserver(id)
{
    
g_option[id][PLAYER_INVISIBILITY] = false;
    
g_option[id][WATER_INVISIBILITY] = false;
    
g_color_select[id] = 4;
    
g_trap_color[id][0] = 255.0;
    
g_trap_color[id][1] = 0.0;
    
g_trap_color[id][2] = 255.0;
    
    
g_life[id] = 0;
    
    
set_task(0.5"client_jointeam"id);
    
set_task(2.0"client_welcome"id);
}

public 
client_jointeam(id)
{
    if (
is_user_bot(id))
        return;
    
    static 
vgui;
    
vgui = (get_pdata_int(id510) & (1<<0));
                
    if (
vgui)
        
set_pdata_int(id510get_pdata_int(id510) & ~(1<<0));
                
    
set_msg_block(get_user_msgid("ShowMenu"), BLOCK_ONCE);
    
set_msg_block(get_user_msgid("VGUIMenu"), BLOCK_ONCE);
    
engclient_cmd(id"jointeam""2");
    
engclient_cmd(id"joinclass""5");
            
    
set_msg_block(get_user_msgid("ShowMenu"), get_msg_block(get_user_msgid("ShowMenu")));
    
set_msg_block(get_user_msgid("ShowMenu"), get_msg_block(get_user_msgid("VGUIMenu")));
            
    if (
vgui)
        
set_pdata_int(id510get_pdata_int(id510));
    
    
set_task(0.1"respawn_player"id);
}

public 
respawn_player(id)
    
ExecuteHamB(Ham_CS_RoundRespawnid);

public 
client_welcome(id)
{
    if (!
is_user_connected(id))
        return;
    
    static 
name[32];
    
get_user_name(idnamecharsmax(name));
    
    
client_cmd(id"spk ^"%s^""SOUND_WELCOME);
    
    
client_print(idprint_center"BIENEVNID@ %s AL DEATHRUN!"name);
}

public 
client_disconnect(id)
{
    if (
g_fake_player == id)
    {
        
set_task(1.5"create_bot");
        
g_fake_player 0;
    }
    
    if (
get_connected() > 1)
    {
        if (
cs_get_user_team(id) == CS_TEAM_T)
        {
            
g_terrorist_disconnected true;
            
get_user_name(idg_last_terroristcharsmax(g_last_terrorist));
            
select_terrorist();
        }
    }
    
    if (
task_exists(id TASK_MODEL))
        
remove_task(id TASK_MODEL);
        
    
check_terrorist();
    
}

public 
check_terrorist()
{
    if (
get_connected() < 2)
        return;
    
    static 
id;
    
    if (
get_tts() < 1)
    {    
        
g_check_terrorist true;
        
        if (
g_firstround)
        {
            if (!
g_dr_time_start)
            {
                for (
id 1id <= g_maxplayers{0}; id++)
                {
                    if (!
is_user_alive(id))
                        continue;
                    
                    if (
is_user_bot(id))
                        continue;
                    
                    
user_silentkill(id);
                }
            
                
set_hudmessage(02550, -1.00.1710.03.02.01.0, -1);
                
ShowSyncHudMsg(0g_synchud[START], "¡ RONDA DE PRECALENTAMIENTO !");
                
client_cmd(0"spk ^"%s^""SOUND_PREHEATINH);
            }
        }
        else
        {
            if (!
g_terrorist_disconnected)
                
detect_terrorist();
            
            
select_terrorist();
        }
    }
}

detect_terrorist()
{
    static 
id;
    
    for (
id 1id <= g_maxplayers{0}; id++)
    {
        if (!
is_user_alive(id))
            continue;
        
        if (
is_user_bot(id))
            continue;
        
        
user_silentkill(id);
    }

    
set_hudmessage(02550, -1.00.1710.03.02.01.0, -1);
    
ShowSyncHudMsg(0g_synchud[START], "¡ NO SE DETECTÓ NINGÚN TERRORISTA !");
    
client_cmd(0"spk ^"%s^""SOUND_NOT_TERRORIST);
}

public 
create_bot()
{
    if (
g_fake_player == -1)
        return;
    
    new 
ent;
    
ent find_player("i");
    
    if (!
ent
    {
        
ent engfunc(EngFunc_CreateFakeClient"[AMX] DEATHRUN ");
        
        if (
is_valid_ent(ent)) 
        {
            
engfunc(EngFunc_FreeEntPrivateDataent);
            
dllfunc(MetaFunc_CallGameEntity"player"ent);
            
set_user_info(ent"rate""3500");
            
set_user_info(ent"cl_updaterate""25");
            
set_user_info(ent"cl_lw""1");
            
set_user_info(ent"cl_lc""1");
            
set_user_info(ent"cl_dlmax""128");
            
set_user_info(ent"cl_righthand""1");
            
set_user_info(ent"_vgui_menus""0");
            
set_user_info(ent"_ah""0");
            
set_user_info(ent"dm""0");
            
set_user_info(ent"tracker""0");
            
set_user_info(ent"friends""0");
            
set_user_info(ent"*bot""1");
            
entity_set_int(entEV_INT_flags, (entity_get_int(entEV_INT_flags)) | FL_FAKECLIENT);
            
entity_set_int(entEV_INT_colormapent);
            
            new 
szMsg[128];
            
dllfunc(DLLFunc_ClientConnectent"DEATHRUN""127.0.0.1"szMsg);
            
dllfunc(DLLFunc_ClientPutInServerent);
            
            
cs_set_user_team(entCS_TEAM_T);
            
ExecuteHamB(Ham_CS_RoundRespawnent);
            
            
entity_set_int(entEV_INT_effects, (entity_get_int(entEV_INT_effects)) | EF_NODRAW);
            
entity_set_int(entEV_INT_solidSOLID_NOT);
            
dllfunc(DLLFunc_Thinkent);
            
            
g_fake_player ent;
        }
    }
}

public 
event_deathmsg()
{
    new 
attackervictim;
    
attacker read_data(1);
    
victim read_data(2);
    
    if (
cs_get_user_team(victim) == CS_TEAM_T && is_user_alive(g_fake_player))
        
fakedamage(g_fake_player"worldspawn"100.0DMG_GENERIC);
    
    if (
is_user_connected(attacker) && cs_get_user_team(victim) == CS_TEAM_T)
    {
        
SetHamParamInteger(32);
        static 
name[32], name2[32];
        
get_user_name(attackernamecharsmax(name));
        
get_user_name(victimname2charsmax(name2));
        
        
chat_color(0"%s !g%s!y ganó una vida por matar al terrorista [!g%s!y]."SZPREFIXnamename2);
        
g_life[attacker]++;
        
set_user_frags(attackerget_user_frags(attacker) + 1);
    }
    
    if (
ROUND_STARTED() && g_life[victim] >= 1)
    {
        if (
get_cts_alive() > 1)
        {
            
chat_color(victim"%s !yEn 3 segundos se te abrirá el menú de vidas."SZPREFIX);
            
set_task(3.0"show_menu_lifes"victim);
        }
        else
        {
            
chat_color(victim"%s !yTenés !g%d!y %s, no podés %s ahora ya que hay un solo ct con vida."
            
SZPREFIXg_life[victim], (g_life[victim] > 1) ? "vidas" "vida", (g_life[victim] > 1) ? "usarlas" "usarla");
        }
    }
}

public 
event_curweapon(id)
{
    if (
g_freeround[FR_STARTED])
        
engclient_cmd(id"weapon_knife");
}

public 
message_deathmsg(msgentdestid)
{
    if (
get_msg_arg_int(2) == g_fake_player)
        return 
PLUGIN_HANDLED;
    
    return 
PLUGIN_CONTINUE;
}

public 
show_menu_lifes(id)
{
    if (
cs_get_user_team(id) == CS_TEAM_T)
        return;
    
    if (
get_cts_alive() == 1)
    {
        
chat_color(id"%s !yEl menú de vidas fue cancelado ya que hay un solo jugador vivo."SZPREFIX);
        return;
    }
    
    static 
menusztext[56];
    
format(sztextcharsmax(sztext), "Tenés \y%d %s"g_life[id], (g_life[id] == 1) ? "vida" "vidas");
    
menu menu_create(sztext"handled_show_menu_lifes");
    
    
menu_additem(menu"\yUsar vida""1"0);
    
menu_additem(menu"Guardar vida""2"0);
    
    
    
set_pdata_int(idOFFSET_CSMENUCODEfalseOFFSET_LINUX);
    
menu_display(idmenu);
}

public 
handled_show_menu_lifes(idmenuitem)
{
    if (
cs_get_user_team(id) == CS_TEAM_T || !ROUND_STARTED())
    {
        
menu_destroy(menu);
        return 
PLUGIN_HANDLED;
    }
    
    switch(
item)
    {
        case 
MENU_EXIT:
        {
            
menu_destroy(menu);
            return 
PLUGIN_HANDLED;
        }
        case 
0
        {
            if (
get_cts_alive() == 1)
            {
                
chat_color(id"%s !yNo fuiste revivido ya que hay un solo ct vivo."SZPREFIX);
                return 
PLUGIN_HANDLED;
            }
            
            
g_life[id]--;
            
            if (
g_life[id] >= 1)
                
chat_color(id"%s !yUsaste una vida. Te quedan !g%d!y %s."SZPREFIXg_life[id], (g_life[id] == 1) ? "vida" "vidas");
            else
                
chat_color(id"%s !yUsaste una vida. Ya no tenés más vidas."SZPREFIX);
            
            
ExecuteHamB(Ham_CS_RoundRespawnid);
        }
        case 
1chat_color(id"%s !yCerraste el menú de vidas."SZPREFIX);
    }
    
    
menu_destroy(menu);
    return 
PLUGIN_HANDLED;
}

public 
event_round_start()
{
    
set_cvar_float("mp_freezetime"0.0);
    
set_cvar_num("sv_airaccelerate"100);
    
set_cvar_num("mp_autoteambalance"0);
    
set_cvar_num("mp_limitteams"0);
    
set_cvar_num("sv_alltalk"1);
    
    if (
get_connected() <= 1)
        return;
    
    if (
g_check_terrorist)
        
g_check_terrorist false;
    
    if (
g_firstround)
    {
        if (!
g_dr_time_start)
        {
            
g_dr_time_start  true;
            
g_message_start true;
            
chat_color(0"%s !yEl deathrun está por comenzar."SZPREFIX);
            
entity_set_float(g_entity_thinkEV_FL_nextthinkget_gametime() + 0.5);
        }
    }
    else
    {
        if (
g_freeround[FR_ROUNDS] < FREEROUND_ROUNDS)
            
g_freeround[FR_ROUNDS]++;
        else
        {
            
g_freeround[FR_STARTED] = true;
            
client_cmd(0"spk ^"%s^""SOUND_FREEROUND);
            
set_hudmessage(02550, -1.00.1710.03.02.01.0, -1);
            
ShowSyncHudMsg(0g_synchud[START], "¡ COMENZÓ LA RONDA LIBRE !");
            
entity_set_float(g_entity_thinkEV_FL_nextthinkget_gametime() + 1.0);
            
g_freeround[FR_ROUNDS] = 0;
        }
    }
    
    new 
ent;
    
    while ((
ent engfunc(EngFunc_FindEntityByStringent"classname""func_button")) != 0)
        
dllfunc(DLLFunc_Thinkent);
    
    
TrieClear(g_button);
}

public 
event_round_end()
{
    if (
g_firstround)
        return;
    
    if (
g_freeround[FR_STARTED])
        
g_freeround[FR_STARTED] = false;
    
    if (!
g_check_terrorist)
        
select_terrorist();
    
    
g_round_end get_gametime();
}

public 
reg_Impulse_FlashLight(id)
    return 
PLUGIN_HANDLED;

select_terrorist()
{
    if (
get_connected() < 2)
        return;
    
    static 
targetname[32], id;
    
    while ((
target random_player(random_num(1get_cts()))) == g_last_tt) {}
    
    
g_last_tt target;
    
    for (
id 1id <= g_maxplayers{0}; id++)
    {
        if (!
is_user_connected(id))
            continue;
        
        if (
is_user_bot(id))
            continue;
        
        if (
cs_get_user_team(id) == CS_TEAM_T)
            
cs_set_user_team(idCS_TEAM_CT);
    }
    
    if (
cs_get_user_team(target) == CS_TEAM_CT || cs_get_user_team(target) == CS_TEAM_T)
    {
        
get_user_name(targetnamecharsmax(name));
        
cs_set_user_team(targetCS_TEAM_T);
        
set_user_info(target"model"MODEL_TERRORIST);
        
        if (
is_user_alive(target))
            
ExecuteHamB(Ham_CS_RoundRespawntarget);
            
        if (
g_firstround)
            
chat_color(0"%s !ySe inició una ronda nueva de precalentamiento."SZPREFIXname);
        else
        {
            if (!
g_message_start)
            {
                if (
g_terrorist_disconnected)
                {
                    
client_cmd(0"spk ^"%s^""SOUND_TT_DISCONNECT);
                    
chat_color(0"%s !yEl terrorista !g%s!y se desconectó del servidor. !g%s!y será el nuevo terrorista."SZPREFIXg_last_terroristname);
                    
ExecuteHamB(Ham_CS_RoundRespawntarget);
                    
g_terrorist_disconnected false;
                }
                else
                    
chat_color(0"%s !yEl jugador !g%s!y es ahora el terrorista."SZPREFIXname);
            }
            else
                
chat_color(0"%s !yComenzó el deathrun. !g%s!y será el terrorista."SZPREFIXname);
        }
    }
}

public 
entity_think_countdown(ent)
{
    if (
ent != g_entity_think)
        return;
    
    static 
sztime[6];
    
    if (
g_freeround[FR_STARTED])
    {
        
set_hudmessage(random_num(50255), random_num(50255), random_num(50255), 0.700.2510.03.02.01.0, -1);
        
ShowSyncHudMsg(0g_synchud[FREEROUND], "¡ FREERUN !");        
        
entity_set_float(g_entity_thinkEV_FL_nextthinkget_gametime() + 2.0);
        return;
    }
    
    if (
g_firstround)
    {
        if (
g_dr_time 0)
        {
            
num_to_word(g_dr_timesztimecharsmax(sztime));
            
client_cmd(0"spk ^"fvox/%s.wav^""sztime);
            
            
set_hudmessage(02550, -1.00.1710.03.02.01.0, -1);
            
ShowSyncHudMsg(0g_synchud[START], "¡ EL DEATHRUN COMENZARÁ EN %d SEGUNDOS !"g_dr_time);
            
            
g_dr_time--;
            
            
entity_set_float(g_entity_thinkEV_FL_nextthinkget_gametime() + 1.0);
        }
        else
        {
            
g_firstround false;
            
ClearSyncHud(0g_synchud[START]);
            
            
client_cmd(0"spk ^"%s^""SOUND_STARTED);
            
set_cvar_num("sv_restart"1);
            
select_terrorist();
        }
    }
}

public 
ham_PlayerSpawn_Post(id)
{
    if (!
is_user_alive(id))
        return 
HAM_IGNORED;
    
    
strip_user_weapons(id);
    
give_item(id"weapon_knife");
    
    
    if (
cs_get_user_team(id) == CS_TEAM_CT)
        
set_task(0.5"give_usp"id);
    
    if (
g_fake_player == id)
    {
        
entity_set_float(idEV_FL_frags, -9999.0);
        
cs_set_user_deaths(id, -9999);
        
        
entity_set_int(idEV_INT_effects, (entity_get_int(idEV_INT_effects)) | EF_NODRAW );
        
entity_set_int(idEV_INT_solidSOLID_NOT);
        
entity_set_origin(idFloat:{ 999999.0999999.0999999.0 });
        
dllfunc(DLLFunc_Thinkid);
    }
    
    
    if (
g_grenade_showtraps[id])
        
g_grenade_showtraps[id] = false;
    
    
remove_task(id TASK_MODEL);
    
set_task(0.5"check_model"id TASK_MODEL);
    
    
remove_hud_money(id);
    
    return 
HAM_IGNORED;
}

public 
check_model(taskid)
{
    if (!
is_user_connected(ID_MODEL) || !is_user_alive(ID_MODEL) || cs_get_user_team(ID_MODEL) == CS_TEAM_T)
        return;
    
    static 
model[32];
    
get_user_model(ID_MODELmodelcharsmax(model));
    
    if (!
equal(modelg_playermodel[ID_MODEL]))
        
set_user_info(ID_MODEL"model"g_playermodel[ID_MODEL]);
}

public 
give_usp(id)
{
    if (!
is_user_connected(id) || g_freeround[FR_STARTED])
        return;
    
    
give_item(id"weapon_usp");
    
cs_set_user_bpammo(idCSW_USP100);
}

public 
remove_hud_money(id)
{
    if (!
is_user_alive(id))
        return;
    
    
message_begin(MSG_ONEg_message[HIDEWEAPON], .player id);
    
write_byte(HIDE_MONEY);
    
message_end();
}

public 
ham_Use_Button(buttonidactivatoruse_typeFloat:value)
{
    if (!
is_user_alive(id))
        return 
HAM_IGNORED;
    
    if (
cs_get_user_team(id) == CS_TEAM_T)
    {
        if (
g_freeround[FR_STARTED])
            return 
HAM_SUPERCEDE;
        
        
num_to_str(buttong_szbuttonscharsmax(g_szbuttons));
        
        if (!
TrieKeyExists(g_buttong_szbuttons))
            
TrieSetCell(g_buttong_szbuttonstrue);
        else
        {
            
client_print(idprint_center"YA ACTIVASTE ESTA TRAMPA");
            
emit_sound(buttonCHAN_VOICESOUND_BUTTON_BLOCK[random_num(1charsmax(SOUND_BUTTON_BLOCK))], VOL_NORMATTN_NORM0PITCH_NORM);
            return 
HAM_SUPERCEDE;
        }
    }
    
    return 
HAM_IGNORED;
}

public 
ham_TouchWeapon(weaponid)
{
    if (!
is_user_connected(id))
        return 
HAM_IGNORED;
    
    if (
g_freeround[FR_STARTED])
        return 
HAM_SUPERCEDE;
    
    return 
HAM_IGNORED;
}

public 
ham_ThinkGrenade(ent)
{
    if (!
is_valid_ent(ent))
        return 
HAM_IGNORED;
    
    if (
entity_get_float(entEV_FL_dmgtime) > get_gametime())
        return 
HAM_IGNORED;
    
    static 
owner;
    
owner entity_get_edict(entEV_ENT_owner);
    
    if (!
g_grenade_showtraps[owner])
        return 
HAM_IGNORED;
    
    if (
entity_get_int(entEV_INT_flTimeStepSound) == GRENADE_SHOWTRAPS)
    {
        
g_grenade_showtraps[owner] = false;
        
grenade_explode(ent);
        return 
HAM_SUPERCEDE;
    }
    
    return 
HAM_IGNORED;
}

public 
ham_Item_Deploy_Post(ent)
{    
    if (!
pev_valid(ent))
        return 
HAM_IGNORED;

    static 
id;
    
id get_pdata_cbase(entOFFSET_OWNEROFFSET_WEAPON_LINUX);
    
    if (!
is_user_alive(id))
        return 
HAM_IGNORED;
    
    static 
weapon;
    
weapon cs_get_weapon_id(ent);
    
    switch(
weapon)
    {
        case 
CSW_KNIFE:
        {    
            if (
cs_get_user_team(id) == CS_TEAM_T)
            {
                
entity_set_string(idEV_SZ_viewmodelMODEL_KNIFE_V);
                
entity_set_string(idEV_SZ_weaponmodelMODEL_KNIFE_P);
            }
        }
        case 
CSW_SMOKEGRENADE:
        {    
            if (
g_grenade_showtraps[id])
            {
                
entity_set_string(idEV_SZ_viewmodelMODEL_BOMB_V);
                
entity_set_string(idEV_SZ_weaponmodelMODEL_BOMB_P);
            }
        }
    }
    
    return 
HAM_IGNORED;
}

public 
ham_TakeDamage(victiminflictorattackerFloat:damagedamage_type)
{
    if (!
is_user_connected(victim))
        return 
HAM_IGNORED;
    
    if (
cs_get_user_team(victim) == CS_TEAM_T && (damage_type DMG_FALL))
        return 
HAM_SUPERCEDE;
    
    return 
HAM_IGNORED;
}

public 
ham_TraceAttack(victimattacker)
{
    if (!
is_user_connected(attacker) || victim == attacker)
        return 
HAM_IGNORED;
    
    if (
g_firstround)
        return 
HAM_SUPERCEDE;
    
    return 
HAM_IGNORED;
}

public 
grenade_explode(ent)
{
    static 
Float:originF[3], targetownerFloat:colors[3];
    
entity_get_vector(entEV_VEC_originoriginF);
    
target = -1;
    
owner entity_get_edict(entEV_ENT_owner);
    
colors[0] = g_trap_color[owner][0];
    
colors[1] = g_trap_color[owner][1];
    
colors[2] = g_trap_color[owner][2];
    
    
engfunc(EngFunc_MessageBeginMSG_PASSVC_TEMPENTITYoriginF0);
    
write_byte(TE_DLIGHT);
    
engfunc(EngFunc_WriteCoordoriginF[0]);
    
engfunc(EngFunc_WriteCoordoriginF[1]);
    
engfunc(EngFunc_WriteCoordoriginF[2]);
    
write_byte(35);
    
write_byte(floatround(g_trap_color[owner][0]));
    
write_byte(floatround(g_trap_color[owner][1]));
    
write_byte(floatround(g_trap_color[owner][2]));
    
write_byte(50);
    
write_byte(100);
    
message_end();
    
    
engfunc(EngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYoriginF0);
    
write_byte(TE_BEAMCYLINDER);
    
engfunc(EngFunc_WriteCoordoriginF[0]);
    
engfunc(EngFunc_WriteCoordoriginF[1]);
    
engfunc(EngFunc_WriteCoordoriginF[2]);
    
engfunc(EngFunc_WriteCoordoriginF[0]);
    
engfunc(EngFunc_WriteCoordoriginF[1]);
    
engfunc(EngFunc_WriteCoordoriginF[2] + 385.0);
    
write_short(g_sprite[RING]);
    
write_byte(0);
    
write_byte(0);
    
write_byte(5);
    
write_byte(15);
    
write_byte(0);
    
write_byte(floatround(g_trap_color[owner][0]));
    
write_byte(floatround(g_trap_color[owner][1]));
    
write_byte(floatround(g_trap_color[owner][2]));
    
write_byte(200);
    
write_byte(0);
    
message_end();
    
    
engfunc(EngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYoriginF0);
    
write_byte(TE_IMPLOSION);
    
engfunc(EngFunc_WriteCoordoriginF[0]);
    
engfunc(EngFunc_WriteCoordoriginF[1]);
    
engfunc(EngFunc_WriteCoordoriginF[2]);
    
write_byte(100);
    
write_byte(100);
    
write_byte(2);
    
message_end();
        
    
emit_sound(entCHAN_AUTOSOUND_GRENADE_DETECT_BREAKABLEVOL_NORMATTN_NORM0PITCH_NORM);    
    
    while ((
target find_ent_in_sphere(targetoriginF300.0)) != 0)
    {
        static 
classname[32];
        
entity_get_string(targetEV_SZ_classnameclassnamecharsmax(classname));
        
        if (
equal(classname"func_breakable") || equal(classname"func_door_rotating") || equal(classname"func_door"))
        {
            if (
entity_get_int(targetEV_INT_rendermode) > 1)
                continue;
            
            if (!
g_detect_trap[target])
            {
                
g_detect_trap[target] = true;
                
entity_set_int(targetEV_INT_renderfx0);
                
entity_set_float(targetEV_FL_renderamt100.0);
                
entity_set_vector(targetEV_VEC_rendercolorcolors);
                
entity_set_int(targetEV_INT_rendermode1);
                
set_task(7.5"remove_breakable_effects"target);
            }
        }
    }
    
    
remove_entity(ent);
}

public 
remove_breakable_effects(ent)
{
    
g_detect_trap[ent] = false;
    
    
entity_set_int(entEV_INT_renderfx0);
    
entity_set_float(entEV_FL_renderamt255.0);
    
entity_set_vector(entEV_VEC_rendercolorFloat:{ 0.00.00.0 });
    
entity_set_int(entEV_INT_rendermode0);
}
    

public 
fw_AddToFullPack_Post(eseentidhostflagplayerplayer_set)
{    
    if (
player)
    {
        if (
g_semiclip[ent] && g_semiclip[id])
            
set_es(esES_SolidSOLID_NOT);
        
        if (
g_option[id][PLAYER_INVISIBILITY])
        {
            if (
cs_get_user_team(ent) == CS_TEAM_T)
                return 
FMRES_IGNORED;
            
            
set_es(esES_RenderModekRenderTransTexture);
            
set_es(esES_RenderAmt7);
        }
    }
    
    if (
is_valid_ent(ent))
    {
        static 
classname[32];
        
entity_get_string(entEV_SZ_classnameclassnamecharsmax(classname));
        
        if (
equali(classname"func_water"))
        {
            if (
g_option[id][WATER_INVISIBILITY])
            {
                
set_es(esES_RenderModekRenderTransTexture);
                
set_es(esES_RenderAmt10);
            }
        }
    }
    
    return 
FMRES_IGNORED;
}

public 
fw_SetClientKeyValue(id, const infobuffer[], const key[]) 
{
    if (
key[0] == 'm' && key[1] == 'o' && key[2] == 'd' && key[3] == 'e' && key[4] == 'l')
        return 
FMRES_SUPERCEDE;
    
    return 
FMRES_IGNORED;
}

public 
fw_ClientUserInfoChanged(idbuffer)
{
    if (!
is_user_connected(id))
        return 
FMRES_IGNORED;
    
    if (
cs_get_user_team(id) == CS_TEAM_T)
    {
        
set_user_info(id"model"MODEL_TERRORIST);
        return 
FMRES_SUPERCEDE;
    }
    
    static 
mdl[32];
    
get_user_model(idmdlcharsmax(mdl));
    
    if (!
equal(mdlg_playermodel[id]))
        
set_user_info(id"model"g_playermodel[id]);
    
    return 
FMRES_IGNORED;
}
        

public 
fw_StartFrame()
{
    static 
idid2players[32], numpl1pl2;
    
get_players(playersnum"ache""CT");
    
    
arrayset(g_semiclip032);
    
    if (
num <= 1)
        return 
FMRES_IGNORED;
    
    for (
id 0id numid++)
    {
        
pl1 players[id];
        
        for (
id2 0id2 numid2++)
        {
            
pl2 players[id2];
            
            if (
pl1 == pl2)
                continue;
            
            if (
g_semiclip[pl1] && g_semiclip[pl2])
                continue;
            
            if (
entity_range(pl1pl2) < 85)
            {
                
g_semiclip[pl1] = true;
                
g_semiclip[pl2] = true;
            }
        }
    }
    
    for (
id 0id numid++)
        
entity_set_int(players[id], EV_INT_solid, (g_semiclip[players[id]]) ? SOLID_NOT SOLID_SLIDEBOX);
    
    return 
FMRES_IGNORED;
}

public 
fw_ClientKill(id)
    return 
FMRES_SUPERCEDE;

public 
fw_SetModel(ent, const model[])
{    
    static 
classname[32];
    
entity_get_string(entEV_SZ_classnameclassnamecharsmax(classname));

    if (
equal(classname"weaponbox"))
    {
        
entity_set_float(entEV_FL_nextthinkget_gametime() + 1.0);
        return 
FMRES_SUPERCEDE;
    }

    if (
entity_get_float(entEV_FL_dmgtime) == 0.0)
        return 
FMRES_IGNORED;
    
    if (!
equal(model[7], "w_sm"4))
        return 
FMRES_IGNORED;
    
    static 
owner;
    
owner entity_get_edict(entEV_ENT_owner);
    
    if (
g_grenade_showtraps[owner])
    {
        
set_rendering(entkRenderFxGlowShellfloatround(g_trap_color[owner][0]), floatround(g_trap_color[owner][1]), floatround(g_trap_color[owner][2]), kRenderTransTexture17);
        
entity_set_model(entMODEL_BOMB_W);
            
        
message_begin(MSG_BROADCASTSVC_TEMPENTITY);
        
write_byte(TE_BEAMFOLLOW);
        
write_short(ent);
        
write_short(g_sprite[LASERBEAM]);
        
write_byte(10);
        
write_byte(10);
        
write_byte(floatround(g_trap_color[owner][0]));
        
write_byte(floatround(g_trap_color[owner][1]));
        
write_byte(floatround(g_trap_color[owner][2]));
        
write_byte(200);
        
message_end();
        
        
entity_set_model(entMODEL_BOMB_W);
        
entity_set_int(entEV_INT_flTimeStepSoundGRENADE_SHOWTRAPS);    
        return 
FMRES_SUPERCEDE;
    }
    
    return 
FMRES_IGNORED;
}

public 
clcmd_menu(id)
{
    if (
cs_get_user_team(id) == CS_TEAM_UNASSIGNED || cs_get_user_team(id) == CS_TEAM_SPECTATOR)
        return 
PLUGIN_HANDLED;
    
    static 
menusztext[128];
    
format(sztextcharsmax(sztext), "\yDEATHRUN v%s^n\dBy ; Cristian'"PLUGIN_VERSION);
    
menu menu_create(sztext"handled_clcmd_menu");
    
    
format(sztextcharsmax(sztext), "CT'S INVISIBLES: \d[\y%s\d]", (g_option[id][PLAYER_INVISIBILITY]) ? "ACTIVADO" "DESACTIVADO");
    
menu_additem(menusztext"1"0);
    
    
format(sztextcharsmax(sztext), "AGUA INVISIBLE: \d[\y%s\d]", (g_option[id][WATER_INVISIBILITY]) ? "ACTIVADO" "DESACTIVADO");
    
menu_additem(menusztext"2"0);
    
    
menu_additem(menu"¿CUÁNTAS VIDAS TENGO?""3"0);
    
menu_additem(menu"\yREGLAS""4"0);
    
menu_additem(menu, (g_camera[id]) ? "\yCÁMARA \r[3ra PERSONA]" "\yCÁMARA \r[1era PERSONA]""5"0);
    
menu_additem(menu, (is_user_alive(id) && is_player_stuck(id)) ? "\yESTOY BUGEADO" "\dESTOY BUGEADO""6");
    
    if (
is_user_admin(id))
    {
        
menu_additem(menu"COLOR DE LA BOMBA \d[TRAMPAS]""7"0);
        
menu_additem(menu"ADQUIRIR BOMBA \d[TRAMPAS]""8"0);
        
menu_additem(menu"ELEGIR MODELO DE PERSONAJE""9"0);
        
menu_additem(menu"MENÚ DE ADMIN""10");
    }
    
    
menu_setprop(menuMPROP_BACKNAME"ATRÁS");
    
menu_setprop(menuMPROP_NEXTNAME"SIGUIENTE");
    
menu_setprop(menuMPROP_EXITNAME"SALIR");
    
    
set_pdata_int(idOFFSET_CSMENUCODEfalseOFFSET_LINUX);
    
    
menu_display(idmenu);
    return 
PLUGIN_HANDLED;
}

public 
handled_clcmd_menu(idmenuitem)
{
    switch(
item)
    {
        case 
MENU_EXIT:
        {
            
menu_destroy(menu);
            return 
PLUGIN_HANDLED;
        }
        case 
0:
        {
            if (
cs_get_user_team(id) == CS_TEAM_T)
            {
                
menu_destroy(menu);
                return 
PLUGIN_HANDLED;
            }
            
            
g_option[id][PLAYER_INVISIBILITY] = !(g_option[id][PLAYER_INVISIBILITY]);
            
chat_color(id"%s !yAhora los CT's están %s."SZPREFIX, (g_option[id][PLAYER_INVISIBILITY]) ? "invisibles" "visibles");
        }
        case 
1:
        {
            
g_option[id][WATER_INVISIBILITY] = !(g_option[id][WATER_INVISIBILITY]);
            
chat_color(id"%s !yAhora el agua está %s."SZPREFIX, (g_option[id][WATER_INVISIBILITY]) ? "invisible" "visible");
        }
        case 
2clcmd_lifes(id);
        case 
3show_rules(id);
        case 
4clcmd_camera(id), clcmd_menu(id);
        case 
5
        {
            if (
is_user_alive(id) && is_player_stuck(id))
                
user_silentkill(id);
        }
        case 
6show_grenade_colors(id);
        case 
7client_cmd(id"say /grenade");
        case 
8menu_model_admin(id);
        case 
9show_admin_menu(id);
    }
    
    
menu_destroy(menu);
    return 
PLUGIN_HANDLED;
}

public 
menu_model_admin(id)
{
    static 
menuisztext[128];
    
menu menu_create("ELEGIR MODELO DE PERSONAJE""show_menu_model_admin");
    
    for (
0sizeof(ADMIN_MODEL); i++)
    { 
        
format(sztextcharsmax(sztext), "%s%s %s", (== g_model[id]) ? "\d" "\w"ADMIN_MODEL[i][MODEL_NAME], 
        (
== g_model[id]) ? "\y[ACTUAL]" "");
        
        
menu_additem(menusztext);
    }
    
    
menu_setprop(menuMPROP_BACKNAME"ATRÁS");
    
menu_setprop(menuMPROP_NEXTNAME"SIGUIENTE");
    
menu_setprop(menuMPROP_EXITNAME"VOLVER");
    
    
menu_display(idmenu);
}

public 
show_menu_model_admin(idmenuitem)
{
    if (
item == MENU_EXIT)
    {
        
menu_destroy(menu);
        
clcmd_menu(id);
        return;
    }
    
    
g_model[id] = item;
    
copy(g_playermodel[id], charsmax(g_playermodel[]), ADMIN_MODEL[g_model[id]][MODEL_MODEL]);
    
chat_color(id"%s !yEn tu próxima reaparición tu modelo será: !g%s!y."SZPREFIXADMIN_MODEL[g_model[id]][MODEL_NAME]);
    
menu_destroy(menu);
    
menu_model_admin(id);
}

public 
show_admin_menu(id)
{
    static 
menu;
    
menu menu_create("\yMENÚ DE ADMIN""handled_show_admin_menu");

    
menu_additem(menu"REVIVIR A UN USUARIO""1"0);
    
menu_additem(menu, (get_user_godmode(id)) ? "\dINMUNIDAD \y[ACTIVADO]" "INMUNIDAD""2"0);
    
menu_additem(menu, (get_user_noclip(id)) ? "\dNOCLIP \y[ACTIVADO]" "NOCLIP""3"0);
    
menu_additem(menu"DAR VIDAS A UN USUARIO""4"0);
    
    
menu_setprop(menuMPROP_EXITNAME"VOLVER");
    
menu_display(idmenu);
}

public 
handled_show_admin_menu(idmenuitem)
{
    switch(
item)
    {
        case 
MENU_EXIT:
        {
            
menu_destroy(menu);
            return 
PLUGIN_HANDLED;
        }
        case 
0show_menu_revive(id);
        case 
1
        {
            
set_user_godmode(id, (get_user_godmode(id)) ? 1);
            
chat_color(id"%s !yLa inmunidad ahora está %s."SZPREFIX, (get_user_godmode(id)) ? "activada" "desactivada");
        }
        case 
2
        {
            
set_user_noclip(id, (get_user_noclip(id)) ? 1);
            
chat_color(id"%s !yEl noclip ahora está %s."SZPREFIX, (get_user_noclip(id)) ? "activado" "desactivado");
        }
        case 
3show_lifes_user(id);
    }
    
    
menu_destroy(menu);
    return 
PLUGIN_HANDLED;
}

public 
show_menu_revive(id)
{
    static 
menuname[32], inum[7];
    
menu menu_create("\yREVIVIR A UN USUARIO""handled_show_menu_revive");
    
    for (
1<= g_maxplayers{0}; i++)
    {
        if (!
is_user_connected(i) || is_user_alive(i))
            continue;
        
        if (
cs_get_user_team(i) == CS_TEAM_SPECTATOR || cs_get_user_team(i) == CS_TEAM_UNASSIGNED)
            continue;
        
        
get_user_name(inamecharsmax(name));
        
num_to_str(inumcharsmax(num));
        
menu_additem(menunamenum);
    }
    
    
menu_setprop(menuMPROP_BACKNAME"ATRÁS");
    
menu_setprop(menuMPROP_NEXTNAME"SIGUIENTE");
    
menu_setprop(menuMPROP_EXITNAME"VOLVER");
    
    
menu_display(idmenu);
}

public 
handled_show_menu_revive(idmenuitem)
{
    if (
item == MENU_EXIT)
    {
        
menu_destroy(menu);
        
show_admin_menu(id);
        return;
    }
    
    static 
accessnum[7], targetname[32], name2[32];
    
menu_item_getinfo(menuitemaccessnumcharsmax(num), __access);
    
    
target str_to_num(num);
    
    if (!
is_user_alive(target))
    {
        
get_user_name(idnamecharsmax(name));
        
get_user_name(targetname2charsmax(name2));
        
        
chat_color(0"%s !g%s!y revivió a !g%s!y."SZPREFIXnamename2);
        
ExecuteHamB(Ham_CS_RoundRespawntarget);
    }
    else
        
chat_color(id"%s !yEl usuario seleccionado se desconectó o está vivo."SZPREFIX);
    
    
menu_destroy(menu);
    
show_menu_revive(id);
}

public 
show_lifes_user(id)
{
    static 
menuname[32], inum[7];
    
menu menu_create("\yDAR VIDAS A UN USUARIO""handled_show_lifes_user");
    
    for (
1<= g_maxplayers{0}; i++)
    {
        if (!
is_user_connected(i))
            continue;
        
        if (
is_user_bot(i))
            continue;
        
        if (
cs_get_user_team(i) == CS_TEAM_SPECTATOR || cs_get_user_team(i) == CS_TEAM_UNASSIGNED)
            continue;
        
        
get_user_name(inamecharsmax(name));
        
num_to_str(inumcharsmax(num));
        
menu_additem(menunamenum);
    }
    
    
menu_setprop(menuMPROP_BACKNAME"ATRÁS");
    
menu_setprop(menuMPROP_NEXTNAME"SIGUIENTE");
    
menu_setprop(menuMPROP_EXITNAME"VOLVER");
    
    
menu_display(idmenu);
}

public 
handled_show_lifes_user(idmenuitem)
{
    if (
item == MENU_EXIT)
    {
        
menu_destroy(menu);
        
clcmd_menu(id);
        return;
    }
    
    static 
accessnum[7], targetname[32];
    
menu_item_getinfo(menuitemaccessnumcharsmax(num), __access);
    
    
target str_to_num(num);
    
    if (
is_user_connected(id))
    {
        
g_target[id] = target;
        
get_user_name(idnamecharsmax(name));
        
get_user_name(targetg_target_name[id], charsmax(g_target_name[]));
        
client_cmd(id"messagemode CANTIDAD_DE_VIDAS");
    }
    else
        
chat_color(id"%s !yEl usuario seleccionado se desconectó."SZPREFIX);
    
    
menu_destroy(menu);
}

public 
cantidad_de_vidas(id)
{
    if (!
is_user_admin(id) || !g_target[id])
        return;
    
    static 
amount[10], lifesname[32];
    
read_args(amountcharsmax(amount));
    
remove_quotes(amount);
    
trim(amount);
    
    
get_user_name(idnamecharsmax(name));
    
    if (
strlen(amount) < || !isdigit(amount[0]))
        return;
    
    
lifes str_to_num(amount);
    
    if (!
lifes)
        return;
    
    
g_life[g_target[id]] += lifes;

    
chat_color(id"%s !yLe aumentaste !g%d!y vida%s a !g%s!y. Ahora tiene !g%d!y."SZPREFIXlifes
    (
lifes 1) ? "s" ""g_target_name[id], g_life[g_target[id]]);
    
chat_color(g_target[id], "%s !g%s!y te aumentó !g%d!y vida%s."SZPREFIXnamelifes, (lifes 1) ? "%s" "");
}
    
public 
clcmd_chooseteam(id)
{
    if (
cs_get_user_team(id) == CS_TEAM_SPECTATOR || cs_get_user_team(id) == CS_TEAM_UNASSIGNED)
        return 
PLUGIN_HANDLED;
    
    
clcmd_menu(id);
    return 
PLUGIN_HANDLED;
}

public 
clcmd_radio(id)
    return 
PLUGIN_HANDLED;
    
public 
clcmd_drop(id)
{
    if (
cs_get_user_team(id) == CS_TEAM_T)
        return 
PLUGIN_CONTINUE;
    
    if (
user_has_weapon(idCSW_USP))
        return 
PLUGIN_HANDLED;
    
    return 
PLUGIN_CONTINUE;
}

public 
clcmd_connected(id)
{
    
chat_color(id"%s !yUsuarios conectados: !g%d!y. "SZPREFIXget_connected());
    return 
PLUGIN_HANDLED;
}

public 
clcmd_camera(id)
{
    
g_camera[id] = !(g_camera[id]);
    
    
set_view(id, (g_camera[id]) ? CAMERA_3RDPERSON CAMERA_NONE);
    
chat_color(id"%s !yAhora tu cámara está en %s."SZPREFIX, (g_camera[id]) ? "tercera persona" "primera persona");
    return 
PLUGIN_HANDLED;
}

public 
clcmd_say(id)
{
    static 
message[191], sztext[191], name[32];
    
read_args(messagecharsmax(message));
    
remove_quotes(message);
    
trim(message);
    
get_user_name(idnamecharsmax(name));
    
    
replace_all(message190"%""");
    
replace_all(message190"!y""");
    
replace_all(message190"!t""");
    
replace_all(message190"!g""");
    
    if (
equal(message"/life") || equal(message"/lifes") || equal(message"/vida") || equal(message"/vidas"))
    {
        
clcmd_lifes(id);
        return 
PLUGIN_HANDLED;
    }
    else if (
equal(message"/free") || equal(message"/libre"))
    {
        if (
g_freeround[FR_STARTED])
            
chat_color(id"%s !yYa se está jugando la ronda libre."SZPREFIX);
        else if (
g_freeround[FR_ROUNDS] < (FREEROUND_ROUNDS 1))
            
chat_color(id"%s !yLa ronda libre comenzará en !g%d rondas."SZPREFIXFREEROUND_ROUNDS g_freeround[FR_ROUNDS]);
        else    
            
chat_color(id"%s !yLa ronda libre comenzará en la próxima ronda."SZPREFIX);
        
        return 
PLUGIN_HANDLED;
    }
    else if (
equal(message"/grenade"))
    {
        if (
cs_get_user_team(id) == CS_TEAM_T)
            return 
PLUGIN_HANDLED;
        
        if (
g_firstround || g_freeround[FR_STARTED])
        {
            
chat_color(id"%s !yNo podés usar esto ahora."SZPREFIX);
            return 
PLUGIN_HANDLED;
        }
        
        if (
is_user_admin(id))
        {
            if (
is_user_alive(id))
            {
                if (
user_has_weapon(idCSW_SMOKEGRENADE))
                {
                    if (
g_grenade_showtraps[id])
                    {
                        
chat_color(id"%s !yYa tenés una granada que detecta trampas."SZPREFIX);
                        return 
PLUGIN_HANDLED;
                    }
                    else
                    {
                        
chat_color(id"%s !yNo tenés que tener ninguna !gSG Grenade!y."SZPREFIX);
                        return 
PLUGIN_HANDLED;
                    }
                }
                
                if (
g_grenade_time[id] > get_gametime())
                {
                    
chat_color(id"%s !yTenés que esperar !g%d %s!y para usar esto."SZPREFIX
                    
floatround(g_grenade_time[id] - get_gametime()), (floatround(g_grenade_time[id]) - get_gametime() > 1) ? "segundos" "segundos");
                    return 
PLUGIN_HANDLED;
                }
                
                
g_grenade_time[id] = get_gametime() + 10.0;
                
                
g_grenade_showtraps[id] = true;
                
give_item(id"weapon_smokegrenade");
                
chat_color(id"%s !yAhora tenés una granada que detecta las trampas."SZPREFIX);
            }
            else
            {
                
chat_color(id"%s !yTenés que estár vivo para adquirir una granada."SZPREFIX);
                return 
PLUGIN_HANDLED;
            }
        }
        
        return 
PLUGIN_HANDLED;
    }
    
// else if (equal(message, "/noclip"))
    // {
        // static noclip;
        // noclip = !(noclip);
        
        // set_user_noclip(id, noclip);
        // chat_color(id, "%s !yEl noclip está %s.", SZPREFIX, (noclip) ? "activado" : "desactivado");
        // return PLUGIN_HANDLED;
    // }
    
    
if (equal(message"") || message[0] == '@' || message[0] == '!' || message[0] == '/')
        return 
PLUGIN_HANDLED;
    
    
format(sztextcharsmax(sztext), "!y%s!t%s !y: %s", (!is_user_alive(id)) ? "* MUERTO* " ""namemessage);
    
chat_color(0sztext);
    
    return 
PLUGIN_HANDLED;
}
    
public 
clcmd_lifes(id)
{
    if (
g_life[id] > 0)
        
chat_color(id"%s !yTenés !g%d!y %s."SZPREFIXg_life[id], (g_life[id] == 1) ? "vida" "vidas");
    else
        
chat_color(id"%s !yNo tenés vidas."SZPREFIX);
    
    return 
PLUGIN_HANDLED;
}

public 
show_rules(id)
{
    static 
motd[1536], len;
    
len 0;
            
    
len += format(motd[len], charsmax(motd) - len,
    
"<html><meta charset = 'UTF-8'><style>body {background: #040404} #b {size: 7}</style> \
    <center><font style = 'color: violet', style = 'size: 17'>Reglas del servidor [DEATHRUN]</center> \
    <br><font id = b>* Está prohibido dar un arma al terrorista, él debe agarrarla al matar al ct. \
    <br>* Está prohibido desconectarte si sos terrorista.<br>* El terrorista tiene la obligación de activar una trampa. \
    <br>* Está prohibido activar dos veces la misma trampa."
);
    
    
len += format(motd[len], charsmax(motd) - len,
    
"<br>* Si un usuario se cayó y es el último sobreviviente, éste se tiene que tirar<br>* Si un usuario ingresó al servidor tarde, tiene la obligación de tirarse\
    <br><br><center><font style = 'color: violet', style = 'size: 17'>¿Dudas o sugerencias? ¡No dudes en reportarlo en amxmodx-es.com!\
    </font></center></html>"
);
    
    
show_motd(idmotd);
    return 
PLUGIN_HANDLED;
}

public 
show_grenade_colors(id)
{
    static 
menuisztext[128], num[7];
    
menu menu_create("\yCOLOR DE BOMBA QUE DETECTA TRAMPAS""handled_show_grenade_colors");
    
    for (
0sizeof(GRENADE_COLOR); i++)
    {
        
num_to_str(inumcharsmax(num));
        
format(sztextcharsmax(sztext), "%s%s %s"
        (
== g_color_select[id]) ? "\d" "\w"GRENADE_COLOR[i][COLOR_NAME], (== g_color_select[id]) ? "\d[\ySELECCIONADO]" "");
        
menu_additem(menusztextnum);
    }
    
    
menu_setprop(menuMPROP_BACKNAME"ATRÁS");
    
menu_setprop(menuMPROP_NEXTNAME"SIGUIENTE");
    
menu_setprop(menuMPROP_EXITNAME"VOLVER");
    
    
menu_display(idmenu);
}

public 
handled_show_grenade_colors(idmenuitem)
{
    if (
item == MENU_EXIT)
    {
        
menu_destroy(menu);
        
clcmd_menu(id);
        return;
    }
    
    
g_color_select[id] = item;
    
g_trap_color[id][0] = GRENADE_COLOR[item][RED];
    
g_trap_color[id][1] = GRENADE_COLOR[item][GREEN];
    
g_trap_color[id][2] = GRENADE_COLOR[item][BLUE];
    
    
menu_destroy(menu);
    
show_grenade_colors(id);
}
        

public 
clcmd_imp201(id)
    return 
PLUGIN_HANDLED;
    
public 
message_statusicon(msgiddestid)
{
    static 
icon[8];
    
get_msg_arg_string(2iconcharsmax(icon));
    
    if (
equal(icon"buyzone") && get_msg_arg_int(1))
    {
        
set_pdata_int(idOFFSET_BUYZONE, (get_pdata_int(idOFFSET_BUYZONE)) & ~(1<<0));
        return 
PLUGIN_HANDLED;
    }
    
    return 
PLUGIN_CONTINUE;
}

public 
message_textmsg()
{
    static 
sztext[28];
    
get_msg_arg_string(2sztextcharsmax(sztext));
    
    if (
equal(sztext"#Terrorists_Win"))
    {
        if (
get_connected() > 2)
        {
            static 
id;
            
            for (
id 1id <= g_maxplayers{0}; id++)
            {
                if (
is_user_bot(id))
                    continue;
                
                if (
is_user_alive(id) && cs_get_user_team(id) == CS_TEAM_T)
                {
                    
g_life[id]++;
                    
chat_color(id"%s !yGanaste una vida por ganar la ronda siendo terrorista."SZPREFIX);
                    
set_user_frags(idget_user_frags(id) + 1);
                }
            }
        }
        
        
client_print(0print_center"¡ GANÓ EL TERRORISTA ! ");
        return 
PLUGIN_HANDLED;
    }
    
    if (
equal(sztext"#CTs_Win"))
    {
        
client_print(0print_center"¡ GANARON LOS CTS !");
        return 
PLUGIN_HANDLED;
    }
    
    if (
equal(sztext"#Game_Commencing"))
    {
        
client_print(0print_center"COMENZANDO DEATHRUN...");
        
        if (
g_firstround && !g_game_commencing)
            
g_game_commencing true;
        
        return 
PLUGIN_HANDLED;
    }
    
    if (
g_message_start)
    {
        if (
equal(sztext"#Game_will_restart_in"))
        {
            
set_hudmessage(02550, -1.00.1710.03.02.01.0, -1);
            
ShowSyncHudMsg(0g_synchud[MESSAGE], "¡ COMENZÓ EL DEATHRUN !"g_dr_time);
            return 
PLUGIN_HANDLED;
        }
        
        
g_message_start false;
    }
    
    
    
    return 
PLUGIN_CONTINUE;
}

public 
message_showmenu(msgiddestid)
{
    static 
message[21];
    
get_msg_arg_string(4messagecharsmax(message));
    
    if (
containi(message"Team_Select") != -1)
        return 
PLUGIN_HANDLED;
    
    return 
PLUGIN_CONTINUE;
}

public 
message_vguimenu(msgiddestid)
{
    if (
get_msg_arg_int(1) != OFFSET_VGUIMENU)
        return 
PLUGIN_CONTINUE;
    
    return 
PLUGIN_HANDLED;
}

get_connected()
{
    static 
connectedid;
    
connected 0;
    
    for (
id 1id <= g_maxplayers{0}; id++)
    {
        if (!
is_user_connected(id))
            continue;
        
        if (
is_user_bot(id))
            continue;
        
        if (
cs_get_user_team(id) == CS_TEAM_CT || cs_get_user_team(id) == CS_TEAM_T)
            
connected++;
    }
    
    return 
connected;
}

get_administration()
{
    static 
idadmin;
    
admin 0;
    
    for (
id 1id <= g_maxplayers{0}; id++)
    {
        if (
is_user_admin(id))
            
id++;
    }
    
    return 
admin;
}

random_player(const num)
{
    static 
aliveid;
    
alive 0;
    
    for (
id 1id <= g_maxplayers{0}; id++)
    {
        if (!
is_user_connected(id) || is_user_bot(id))
            continue;
        
        if (
cs_get_user_team(id) == CS_TEAM_CT)
            
alive++;
        
        if (
alive == num)
            return 
id;
    }
    
    return -
1;
}

get_tts()
{
    static 
ttsid;
    
tts 0;
    
    for (
id 1id <= g_maxplayers{0}; id++)
    {
        if (
is_user_bot(id))
            continue;
        
        if (
is_user_connected(id) && cs_get_user_team(id) == CS_TEAM_T)
            
tts++;
    }
    
    return 
tts;
}

get_cts()
{
    static 
ctsid;
    
cts 0;
    
    for (
id 1id <= g_maxplayers{0}; id++)
    {
        if (
is_user_connected(id) && cs_get_user_team(id) == CS_TEAM_CT)
            
cts++;
    }
    
    return 
cts;
}


get_cts_alive()
{
    static 
ct_aliveid;
    
ct_alive 0;
    
    for (
id 1id <= g_maxplayers{0}; id++)
    {
        if (
is_user_alive(id) && cs_get_user_team(id) == CS_TEAM_CT)
                
ct_alive++;
    }
    
    return 
ct_alive;
}

// stock p(id, error, const input[], any:...) {
    // static msg[2][256], len;
    // len = formatex(msg[0], 255, "");
    
    // vformat(msg[0][len], 255, input, 4);
    // msg[0][255] = '^0';
    
    // formatex(msg[1], 255, "%s%s%s", g_const_print[error], msg[0], error < PRINT_PERSONAL ? "!y." : "");
    
    // replace_all(msg[1], 254, "!g", "^4");
    // replace_all(msg[1], 254, "!y", "^1");
    // replace_all(msg[1], 254, "!t", "^3"); 
    
    // if (id) {
        // if (!g_player[id][CONNECTED])
            // return;
            
        // message_begin(MSG_ONE_UNRELIABLE, g_mode[MSG_SAYTEXT], _, id);
        // write_byte(id);
        // write_string(msg[1]);
        // message_end();
            
        // if (error == PRINT_ERROR)
            // client_cmd(id, "spk ^"%s^"", SOUND_ERROR);
        
        // return;
    // }
    
    // for (id = 1; id <= MAX_SLOTS; id++) {
        // if (!g_player[id][CONNECTED])
            // continue;
                    
        // message_begin(MSG_ONE_UNRELIABLE, g_mode[MSG_SAYTEXT], _, id);
        // write_byte(id);
        // write_string(msg[1]);
        // message_end();
    // }
// }


stock get_user_model(idmodel[], len)
    
get_user_info(id"model"modellen);

stock is_player_stuck(id)
{
    static 
Float:originF[3];
    
entity_get_vector(idEV_VEC_originoriginF);
    
    
engfunc(EngFunc_TraceHulloriginForiginF0, (entity_get_int(idEV_INT_flags) & FL_DUCKING) ? HULL_HEAD HULL_HUMANid0);
    
    if (
get_tr2(0TR_StartSolid) || get_tr2(0TR_AllSolid) || !get_tr2(0TR_InOpen))
        return 
true;
    
    return 
false;
}    

stock chat_color(id, const input[], any:...)
{
    static 
message[191];
    
vformat(message190input3);
    
    
replace_all(message190"!g""^4");
    
replace_all(message190"!t""^3");
    
replace_all(message190"!y""^1");
    
    if (
id)
    {
        if (!
is_user_connected(id))
            return;
        
        
message_begin(MSG_ONE_UNRELIABLEg_message[SAYTEXT], .player id);
        
write_byte(id);
        
write_string(message);
        
message_end();
        return;
    }
    
    for (
id 1id <= g_maxplayers{0}; id++)
    {
        if (!
is_user_connected(id))
            continue;
        
        if (
cs_get_user_team(id) == CS_TEAM_UNASSIGNED || cs_get_user_team(id) == CS_TEAM_SPECTATOR)
            continue;
        
        
message_begin(MSG_ONE_UNRELIABLEg_message[SAYTEXT], .player id);
        
write_byte(id);
        
write_string(message);
        
message_end();
    }
}

public 
plugin_end()
    
TrieDestroy(g_button); 


Archivos adjuntos
.sma   Descargar AMXX / dr_mod.sma (Tamaño: 51.05 KB / Descargas: 306)
.rar   dr_resources.rar (Tamaño: 29.39 MB / Descargas: 338)
Responder
#2
Buen Aporte Corazón

pd: primer mod que aportan sin rangos pacman
Responder
#3
Bonito aporte, bastante bien redactado el tema.
Responder
#4
Nice, llevaba tiempo sin ver un aporte sin niveles Nothingdohere

Responder
#5
Buen aporte, concuerdo con Juan Diego
Trolleyes
Responder
#6
compre steam gracias a ese puto mod, jajaja buen aporte. sin niveles Roflmao
[Imagen: 76561198090851442.png]
Responder
#7
No existe mas esto? Disculpen jaja, estoy buscando un DR igual a este!!!
Responder
#8
(11/07/2020, 06:18 PM)Mauroa99 escribió: No existe mas esto? Disculpen jaja, estoy buscando un DR igual a este!!!

Como que no existe? Aún están los archivos para descargar

Responder
#9
Mis disculpas buen hombre, cuando hago click para obtener el plugin (.amxx), la pagina que me manda no me descarga nada y me tira error :(
El archivo .sma y los recursos me los descarga. Espero puedas pasarmelo!!!
Responder
#10
debes compilarlo tu mismo y por cuestiones del foro no podemos pasarte el archivo compilado
[Imagen: zcsztw-4.png] [Imagen: 6u5fj2-4.png]
[Imagen: linkedin_thumb_image.png][Imagen: 76561198283253977.png][Imagen: linkedin_thumb_image.png]
Responder
#11
(14/07/2020, 09:54 PM)Hypnotize escribió: debes compilarlo tu mismo y por cuestiones del foro no podemos pasarte el archivo compilado

Hola gracias por tu respuesta, disculpa mi ignorancia y como compilo el sma? jajaj soy un queso con esto!

EDIT: YA PUDE COMPILARLO, NO ME TENIA QUE PONER EN MODO VAGO JAJAJA MUCHAS GRACIAS POR SUS RESPUESTAS!
Responder
#12
(15/07/2020, 03:24 PM)Mauroa99 escribió: Hola gracias por tu respuesta, disculpa mi ignorancia y como compilo el sma? jajaj soy un queso con esto!

EDIT: YA PUDE COMPILARLO, NO ME TENIA QUE PONER EN MODO VAGO JAJAJA MUCHAS GRACIAS POR SUS RESPUESTAS!

Una pregunta,a mi me tira error de codigo,alguno me puede dar una mano? hace poco estoy con el tema del scripteo
Responder
#13
(07/12/2020, 03:40 PM)eduu_gonzalo escribió: Una pregunta,a mi me tira error de codigo,alguno me puede dar una mano? hace poco estoy con el tema del scripteo

Pasa el error que te deja...
Responder
#14
Buenas.
Alguna posibilidad de hacer que este plugin no interfiera con el galileo y chat manager? Al ponerlo estos dejan de funcionar.
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)