28/02/2017, 08:33 PM
Bueno, les dejo este deathrun que hice hace unos cuantos meses atrás.
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.0, 255.0, 0.0 },
{ "AZUL", 0.0, 0.0, 255.0 },
{ "ROJO", 255.0, 0.0, 0.0 },
{ "AMARILLO", 255.0, 255.0, 0.0 },
{ "ROSADO", 255.0, 0.0, 255.0 },
{ "CELESTE", 0.0, 255.0, 255.0 },
{ "AZUL MAJORELLE", 96.0, 80.0, 220.0 },
{ "AZUL PETROLEO", 1.0, 70.0, 99.0 },
{ "MALVA", 224.0, 176.0, 255.0 },
{ "TURQUESA", 48.0, 213.0, 200.0 },
{ "DORADO", 255.0, 215.0, 0.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 (i = 0; i < sizeof(MODELS_DEPLOY); i++)
RegisterHam(Ham_Item_Deploy, MODELS_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_think, EV_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 ent, count;
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(0, 1))
{
case 0: chat_color(0, "%s !gDeathrun %s!y by !g; Cristian'", SZPREFIX, PLUGIN_VERSION);
case 1:
{
static mapname[32], admin[21];
get_mapname(mapname, charsmax(mapname));
if (get_administration() > 0)
{
format(admin, charsmax(admin), " !t(!g+%d !y%s!t)", get_administration(), (get_administration() == 1) ?
"administrador" : "administradores");
}
else
format(admin, charsmax(admin), "");
chat_color(0, "%s !g%d %s!y %s%s jugando en el mapa !g%s!y.", SZPREFIX, get_connected(),
(get_connected() == 1) ? "usuario" : "usuarios", admin,
(get_connected() == 1) ? "está" : "están", mapname);
}
}
}
public plugin_precache()
{
new i, sztext[256];
precache_sound(SOUND_FREEROUND);
precache_sound(SOUND_GRENADE_DETECT_BREAKABLE);
precache_sound(SOUND_WELCOME);
for (i = 0; i < sizeof(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 (i = 0; i < sizeof(ADMIN_MODEL); i++)
{
format(sztext, charsmax(sztext), "models/player/%s/%s.mdl", ADMIN_MODEL[i][MODEL_MODEL], ADMIN_MODEL[i][MODEL_MODEL]);
precache_model(sztext);
format(sztext, charsmax(sztext), "models/player/%s/%sT.mdl", ADMIN_MODEL[i][MODEL_MODEL], ADMIN_MODEL[i][MODEL_MODEL]);
if (file_exists(sztext))
precache_model(sztext);
}
format(sztext, charsmax(sztext), "models/player/%s/%s.mdl", MODEL_TERRORIST, MODEL_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(id, 510) & (1<<0));
if (vgui)
set_pdata_int(id, 510, get_pdata_int(id, 510) & ~(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(id, 510, get_pdata_int(id, 510));
set_task(0.1, "respawn_player", id);
}
public respawn_player(id)
ExecuteHamB(Ham_CS_RoundRespawn, id);
public client_welcome(id)
{
if (!is_user_connected(id))
return;
static name[32];
get_user_name(id, name, charsmax(name));
client_cmd(id, "spk ^"%s^"", SOUND_WELCOME);
client_print(id, print_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(id, g_last_terrorist, charsmax(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 = 1; id <= g_maxplayers{0}; id++)
{
if (!is_user_alive(id))
continue;
if (is_user_bot(id))
continue;
user_silentkill(id);
}
set_hudmessage(0, 255, 0, -1.0, 0.17, 1, 0.0, 3.0, 2.0, 1.0, -1);
ShowSyncHudMsg(0, g_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 = 1; id <= g_maxplayers{0}; id++)
{
if (!is_user_alive(id))
continue;
if (is_user_bot(id))
continue;
user_silentkill(id);
}
set_hudmessage(0, 255, 0, -1.0, 0.17, 1, 0.0, 3.0, 2.0, 1.0, -1);
ShowSyncHudMsg(0, g_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_FreeEntPrivateData, ent);
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(ent, EV_INT_flags, (entity_get_int(ent, EV_INT_flags)) | FL_FAKECLIENT);
entity_set_int(ent, EV_INT_colormap, ent);
new szMsg[128];
dllfunc(DLLFunc_ClientConnect, ent, "DEATHRUN", "127.0.0.1", szMsg);
dllfunc(DLLFunc_ClientPutInServer, ent);
cs_set_user_team(ent, CS_TEAM_T);
ExecuteHamB(Ham_CS_RoundRespawn, ent);
entity_set_int(ent, EV_INT_effects, (entity_get_int(ent, EV_INT_effects)) | EF_NODRAW);
entity_set_int(ent, EV_INT_solid, SOLID_NOT);
dllfunc(DLLFunc_Think, ent);
g_fake_player = ent;
}
}
}
public event_deathmsg()
{
new attacker, victim;
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.0, DMG_GENERIC);
if (is_user_connected(attacker) && cs_get_user_team(victim) == CS_TEAM_T)
{
SetHamParamInteger(3, 2);
static name[32], name2[32];
get_user_name(attacker, name, charsmax(name));
get_user_name(victim, name2, charsmax(name2));
chat_color(0, "%s !g%s!y ganó una vida por matar al terrorista [!g%s!y].", SZPREFIX, name, name2);
g_life[attacker]++;
set_user_frags(attacker, get_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.",
SZPREFIX, g_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(msgent, dest, id)
{
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 menu, sztext[56];
format(sztext, charsmax(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(id, OFFSET_CSMENUCODE, false, OFFSET_LINUX);
menu_display(id, menu);
}
public handled_show_menu_lifes(id, menu, item)
{
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.", SZPREFIX, g_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_RoundRespawn, id);
}
case 1: chat_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_think, EV_FL_nextthink, get_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(0, 255, 0, -1.0, 0.17, 1, 0.0, 3.0, 2.0, 1.0, -1);
ShowSyncHudMsg(0, g_synchud[START], "¡ COMENZÓ LA RONDA LIBRE !");
entity_set_float(g_entity_think, EV_FL_nextthink, get_gametime() + 1.0);
g_freeround[FR_ROUNDS] = 0;
}
}
new ent;
while ((ent = engfunc(EngFunc_FindEntityByString, ent, "classname", "func_button")) != 0)
dllfunc(DLLFunc_Think, ent);
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 target, name[32], id;
while ((target = random_player(random_num(1, get_cts()))) == g_last_tt) {}
g_last_tt = target;
for (id = 1; id <= 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(id, CS_TEAM_CT);
}
if (cs_get_user_team(target) == CS_TEAM_CT || cs_get_user_team(target) == CS_TEAM_T)
{
get_user_name(target, name, charsmax(name));
cs_set_user_team(target, CS_TEAM_T);
set_user_info(target, "model", MODEL_TERRORIST);
if (is_user_alive(target))
ExecuteHamB(Ham_CS_RoundRespawn, target);
if (g_firstround)
chat_color(0, "%s !ySe inició una ronda nueva de precalentamiento.", SZPREFIX, name);
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.", SZPREFIX, g_last_terrorist, name);
ExecuteHamB(Ham_CS_RoundRespawn, target);
g_terrorist_disconnected = false;
}
else
chat_color(0, "%s !yEl jugador !g%s!y es ahora el terrorista.", SZPREFIX, name);
}
else
chat_color(0, "%s !yComenzó el deathrun. !g%s!y será el terrorista.", SZPREFIX, name);
}
}
}
public entity_think_countdown(ent)
{
if (ent != g_entity_think)
return;
static sztime[6];
if (g_freeround[FR_STARTED])
{
set_hudmessage(random_num(50, 255), random_num(50, 255), random_num(50, 255), 0.70, 0.25, 1, 0.0, 3.0, 2.0, 1.0, -1);
ShowSyncHudMsg(0, g_synchud[FREEROUND], "¡ FREERUN !");
entity_set_float(g_entity_think, EV_FL_nextthink, get_gametime() + 2.0);
return;
}
if (g_firstround)
{
if (g_dr_time > 0)
{
num_to_word(g_dr_time, sztime, charsmax(sztime));
client_cmd(0, "spk ^"fvox/%s.wav^"", sztime);
set_hudmessage(0, 255, 0, -1.0, 0.17, 1, 0.0, 3.0, 2.0, 1.0, -1);
ShowSyncHudMsg(0, g_synchud[START], "¡ EL DEATHRUN COMENZARÁ EN %d SEGUNDOS !", g_dr_time);
g_dr_time--;
entity_set_float(g_entity_think, EV_FL_nextthink, get_gametime() + 1.0);
}
else
{
g_firstround = false;
ClearSyncHud(0, g_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(id, EV_FL_frags, -9999.0);
cs_set_user_deaths(id, -9999);
entity_set_int(id, EV_INT_effects, (entity_get_int(id, EV_INT_effects)) | EF_NODRAW );
entity_set_int(id, EV_INT_solid, SOLID_NOT);
entity_set_origin(id, Float:{ 999999.0, 999999.0, 999999.0 });
dllfunc(DLLFunc_Think, id);
}
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_MODEL, model, charsmax(model));
if (!equal(model, g_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(id, CSW_USP, 100);
}
public remove_hud_money(id)
{
if (!is_user_alive(id))
return;
message_begin(MSG_ONE, g_message[HIDEWEAPON], .player = id);
write_byte(HIDE_MONEY);
message_end();
}
public ham_Use_Button(button, id, activator, use_type, Float: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(button, g_szbuttons, charsmax(g_szbuttons));
if (!TrieKeyExists(g_button, g_szbuttons))
TrieSetCell(g_button, g_szbuttons, true);
else
{
client_print(id, print_center, "YA ACTIVASTE ESTA TRAMPA");
emit_sound(button, CHAN_VOICE, SOUND_BUTTON_BLOCK[random_num(1, charsmax(SOUND_BUTTON_BLOCK))], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
return HAM_SUPERCEDE;
}
}
return HAM_IGNORED;
}
public ham_TouchWeapon(weapon, id)
{
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(ent, EV_FL_dmgtime) > get_gametime())
return HAM_IGNORED;
static owner;
owner = entity_get_edict(ent, EV_ENT_owner);
if (!g_grenade_showtraps[owner])
return HAM_IGNORED;
if (entity_get_int(ent, EV_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(ent, OFFSET_OWNER, OFFSET_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(id, EV_SZ_viewmodel, MODEL_KNIFE_V);
entity_set_string(id, EV_SZ_weaponmodel, MODEL_KNIFE_P);
}
}
case CSW_SMOKEGRENADE:
{
if (g_grenade_showtraps[id])
{
entity_set_string(id, EV_SZ_viewmodel, MODEL_BOMB_V);
entity_set_string(id, EV_SZ_weaponmodel, MODEL_BOMB_P);
}
}
}
return HAM_IGNORED;
}
public ham_TakeDamage(victim, inflictor, attacker, Float:damage, damage_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(victim, attacker)
{
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], target, owner, Float:colors[3];
entity_get_vector(ent, EV_VEC_origin, originF);
target = -1;
owner = entity_get_edict(ent, EV_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_MessageBegin, MSG_PAS, SVC_TEMPENTITY, originF, 0);
write_byte(TE_DLIGHT);
engfunc(EngFunc_WriteCoord, originF[0]);
engfunc(EngFunc_WriteCoord, originF[1]);
engfunc(EngFunc_WriteCoord, originF[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_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0);
write_byte(TE_BEAMCYLINDER);
engfunc(EngFunc_WriteCoord, originF[0]);
engfunc(EngFunc_WriteCoord, originF[1]);
engfunc(EngFunc_WriteCoord, originF[2]);
engfunc(EngFunc_WriteCoord, originF[0]);
engfunc(EngFunc_WriteCoord, originF[1]);
engfunc(EngFunc_WriteCoord, originF[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_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0);
write_byte(TE_IMPLOSION);
engfunc(EngFunc_WriteCoord, originF[0]);
engfunc(EngFunc_WriteCoord, originF[1]);
engfunc(EngFunc_WriteCoord, originF[2]);
write_byte(100);
write_byte(100);
write_byte(2);
message_end();
emit_sound(ent, CHAN_AUTO, SOUND_GRENADE_DETECT_BREAKABLE, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
while ((target = find_ent_in_sphere(target, originF, 300.0)) != 0)
{
static classname[32];
entity_get_string(target, EV_SZ_classname, classname, charsmax(classname));
if (equal(classname, "func_breakable") || equal(classname, "func_door_rotating") || equal(classname, "func_door"))
{
if (entity_get_int(target, EV_INT_rendermode) > 1)
continue;
if (!g_detect_trap[target])
{
g_detect_trap[target] = true;
entity_set_int(target, EV_INT_renderfx, 0);
entity_set_float(target, EV_FL_renderamt, 100.0);
entity_set_vector(target, EV_VEC_rendercolor, colors);
entity_set_int(target, EV_INT_rendermode, 1);
set_task(7.5, "remove_breakable_effects", target);
}
}
}
remove_entity(ent);
}
public remove_breakable_effects(ent)
{
g_detect_trap[ent] = false;
entity_set_int(ent, EV_INT_renderfx, 0);
entity_set_float(ent, EV_FL_renderamt, 255.0);
entity_set_vector(ent, EV_VEC_rendercolor, Float:{ 0.0, 0.0, 0.0 });
entity_set_int(ent, EV_INT_rendermode, 0);
}
public fw_AddToFullPack_Post(es, e, ent, id, hostflag, player, player_set)
{
if (player)
{
if (g_semiclip[ent] && g_semiclip[id])
set_es(es, ES_Solid, SOLID_NOT);
if (g_option[id][PLAYER_INVISIBILITY])
{
if (cs_get_user_team(ent) == CS_TEAM_T)
return FMRES_IGNORED;
set_es(es, ES_RenderMode, kRenderTransTexture);
set_es(es, ES_RenderAmt, 7);
}
}
if (is_valid_ent(ent))
{
static classname[32];
entity_get_string(ent, EV_SZ_classname, classname, charsmax(classname));
if (equali(classname, "func_water"))
{
if (g_option[id][WATER_INVISIBILITY])
{
set_es(es, ES_RenderMode, kRenderTransTexture);
set_es(es, ES_RenderAmt, 10);
}
}
}
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(id, buffer)
{
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(id, mdl, charsmax(mdl));
if (!equal(mdl, g_playermodel[id]))
set_user_info(id, "model", g_playermodel[id]);
return FMRES_IGNORED;
}
public fw_StartFrame()
{
static id, id2, players[32], num, pl1, pl2;
get_players(players, num, "ache", "CT");
arrayset(g_semiclip, 0, 32);
if (num <= 1)
return FMRES_IGNORED;
for (id = 0; id < num; id++)
{
pl1 = players[id];
for (id2 = 0; id2 < num; id2++)
{
pl2 = players[id2];
if (pl1 == pl2)
continue;
if (g_semiclip[pl1] && g_semiclip[pl2])
continue;
if (entity_range(pl1, pl2) < 85)
{
g_semiclip[pl1] = true;
g_semiclip[pl2] = true;
}
}
}
for (id = 0; id < num; id++)
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(ent, EV_SZ_classname, classname, charsmax(classname));
if (equal(classname, "weaponbox"))
{
entity_set_float(ent, EV_FL_nextthink, get_gametime() + 1.0);
return FMRES_SUPERCEDE;
}
if (entity_get_float(ent, EV_FL_dmgtime) == 0.0)
return FMRES_IGNORED;
if (!equal(model[7], "w_sm", 4))
return FMRES_IGNORED;
static owner;
owner = entity_get_edict(ent, EV_ENT_owner);
if (g_grenade_showtraps[owner])
{
set_rendering(ent, kRenderFxGlowShell, floatround(g_trap_color[owner][0]), floatround(g_trap_color[owner][1]), floatround(g_trap_color[owner][2]), kRenderTransTexture, 17);
entity_set_model(ent, MODEL_BOMB_W);
message_begin(MSG_BROADCAST, SVC_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(ent, MODEL_BOMB_W);
entity_set_int(ent, EV_INT_flTimeStepSound, GRENADE_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 menu, sztext[128];
format(sztext, charsmax(sztext), "\yDEATHRUN v%s^n\dBy ; Cristian'", PLUGIN_VERSION);
menu = menu_create(sztext, "handled_clcmd_menu");
format(sztext, charsmax(sztext), "CT'S INVISIBLES: \d[\y%s\d]", (g_option[id][PLAYER_INVISIBILITY]) ? "ACTIVADO" : "DESACTIVADO");
menu_additem(menu, sztext, "1", 0);
format(sztext, charsmax(sztext), "AGUA INVISIBLE: \d[\y%s\d]", (g_option[id][WATER_INVISIBILITY]) ? "ACTIVADO" : "DESACTIVADO");
menu_additem(menu, sztext, "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(menu, MPROP_BACKNAME, "ATRÁS");
menu_setprop(menu, MPROP_NEXTNAME, "SIGUIENTE");
menu_setprop(menu, MPROP_EXITNAME, "SALIR");
set_pdata_int(id, OFFSET_CSMENUCODE, false, OFFSET_LINUX);
menu_display(id, menu);
return PLUGIN_HANDLED;
}
public handled_clcmd_menu(id, menu, item)
{
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 2: clcmd_lifes(id);
case 3: show_rules(id);
case 4: clcmd_camera(id), clcmd_menu(id);
case 5:
{
if (is_user_alive(id) && is_player_stuck(id))
user_silentkill(id);
}
case 6: show_grenade_colors(id);
case 7: client_cmd(id, "say /grenade");
case 8: menu_model_admin(id);
case 9: show_admin_menu(id);
}
menu_destroy(menu);
return PLUGIN_HANDLED;
}
public menu_model_admin(id)
{
static menu, i, sztext[128];
menu = menu_create("ELEGIR MODELO DE PERSONAJE", "show_menu_model_admin");
for (i = 0; i < sizeof(ADMIN_MODEL); i++)
{
format(sztext, charsmax(sztext), "%s%s %s", (i == g_model[id]) ? "\d" : "\w", ADMIN_MODEL[i][MODEL_NAME],
(i == g_model[id]) ? "\y[ACTUAL]" : "");
menu_additem(menu, sztext);
}
menu_setprop(menu, MPROP_BACKNAME, "ATRÁS");
menu_setprop(menu, MPROP_NEXTNAME, "SIGUIENTE");
menu_setprop(menu, MPROP_EXITNAME, "VOLVER");
menu_display(id, menu);
}
public show_menu_model_admin(id, menu, item)
{
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.", SZPREFIX, ADMIN_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(menu, MPROP_EXITNAME, "VOLVER");
menu_display(id, menu);
}
public handled_show_admin_menu(id, menu, item)
{
switch(item)
{
case MENU_EXIT:
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
case 0: show_menu_revive(id);
case 1:
{
set_user_godmode(id, (get_user_godmode(id)) ? 0 : 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)) ? 0 : 1);
chat_color(id, "%s !yEl noclip ahora está %s.", SZPREFIX, (get_user_noclip(id)) ? "activado" : "desactivado");
}
case 3: show_lifes_user(id);
}
menu_destroy(menu);
return PLUGIN_HANDLED;
}
public show_menu_revive(id)
{
static menu, name[32], i, num[7];
menu = menu_create("\yREVIVIR A UN USUARIO", "handled_show_menu_revive");
for (i = 1; i <= 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(i, name, charsmax(name));
num_to_str(i, num, charsmax(num));
menu_additem(menu, name, num);
}
menu_setprop(menu, MPROP_BACKNAME, "ATRÁS");
menu_setprop(menu, MPROP_NEXTNAME, "SIGUIENTE");
menu_setprop(menu, MPROP_EXITNAME, "VOLVER");
menu_display(id, menu);
}
public handled_show_menu_revive(id, menu, item)
{
if (item == MENU_EXIT)
{
menu_destroy(menu);
show_admin_menu(id);
return;
}
static access, num[7], target, name[32], name2[32];
menu_item_getinfo(menu, item, access, num, charsmax(num), _, _, access);
target = str_to_num(num);
if (!is_user_alive(target))
{
get_user_name(id, name, charsmax(name));
get_user_name(target, name2, charsmax(name2));
chat_color(0, "%s !g%s!y revivió a !g%s!y.", SZPREFIX, name, name2);
ExecuteHamB(Ham_CS_RoundRespawn, target);
}
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 menu, name[32], i, num[7];
menu = menu_create("\yDAR VIDAS A UN USUARIO", "handled_show_lifes_user");
for (i = 1; i <= 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(i, name, charsmax(name));
num_to_str(i, num, charsmax(num));
menu_additem(menu, name, num);
}
menu_setprop(menu, MPROP_BACKNAME, "ATRÁS");
menu_setprop(menu, MPROP_NEXTNAME, "SIGUIENTE");
menu_setprop(menu, MPROP_EXITNAME, "VOLVER");
menu_display(id, menu);
}
public handled_show_lifes_user(id, menu, item)
{
if (item == MENU_EXIT)
{
menu_destroy(menu);
clcmd_menu(id);
return;
}
static access, num[7], target, name[32];
menu_item_getinfo(menu, item, access, num, charsmax(num), _, _, access);
target = str_to_num(num);
if (is_user_connected(id))
{
g_target[id] = target;
get_user_name(id, name, charsmax(name));
get_user_name(target, g_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], lifes, name[32];
read_args(amount, charsmax(amount));
remove_quotes(amount);
trim(amount);
get_user_name(id, name, charsmax(name));
if (strlen(amount) < 1 || !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.", SZPREFIX, lifes,
(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.", SZPREFIX, name, lifes, (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(id, CSW_USP))
return PLUGIN_HANDLED;
return PLUGIN_CONTINUE;
}
public clcmd_connected(id)
{
chat_color(id, "%s !yUsuarios conectados: !g%d!y. ", SZPREFIX, get_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(message, charsmax(message));
remove_quotes(message);
trim(message);
get_user_name(id, name, charsmax(name));
replace_all(message, 190, "%", "");
replace_all(message, 190, "!y", "");
replace_all(message, 190, "!t", "");
replace_all(message, 190, "!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.", SZPREFIX, FREEROUND_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(id, CSW_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(sztext, charsmax(sztext), "!y%s!t%s !y: %s", (!is_user_alive(id)) ? "* MUERTO* " : "", name, message);
chat_color(0, sztext);
return PLUGIN_HANDLED;
}
public clcmd_lifes(id)
{
if (g_life[id] > 0)
chat_color(id, "%s !yTenés !g%d!y %s.", SZPREFIX, g_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(id, motd);
return PLUGIN_HANDLED;
}
public show_grenade_colors(id)
{
static menu, i, sztext[128], num[7];
menu = menu_create("\yCOLOR DE BOMBA QUE DETECTA TRAMPAS", "handled_show_grenade_colors");
for (i = 0; i < sizeof(GRENADE_COLOR); i++)
{
num_to_str(i, num, charsmax(num));
format(sztext, charsmax(sztext), "%s%s %s",
(i == g_color_select[id]) ? "\d" : "\w", GRENADE_COLOR[i][COLOR_NAME], (i == g_color_select[id]) ? "\d[\ySELECCIONADO]" : "");
menu_additem(menu, sztext, num);
}
menu_setprop(menu, MPROP_BACKNAME, "ATRÁS");
menu_setprop(menu, MPROP_NEXTNAME, "SIGUIENTE");
menu_setprop(menu, MPROP_EXITNAME, "VOLVER");
menu_display(id, menu);
}
public handled_show_grenade_colors(id, menu, item)
{
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(msgid, dest, id)
{
static icon[8];
get_msg_arg_string(2, icon, charsmax(icon));
if (equal(icon, "buyzone") && get_msg_arg_int(1))
{
set_pdata_int(id, OFFSET_BUYZONE, (get_pdata_int(id, OFFSET_BUYZONE)) & ~(1<<0));
return PLUGIN_HANDLED;
}
return PLUGIN_CONTINUE;
}
public message_textmsg()
{
static sztext[28];
get_msg_arg_string(2, sztext, charsmax(sztext));
if (equal(sztext, "#Terrorists_Win"))
{
if (get_connected() > 2)
{
static id;
for (id = 1; id <= 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(id, get_user_frags(id) + 1);
}
}
}
client_print(0, print_center, "¡ GANÓ EL TERRORISTA ! ");
return PLUGIN_HANDLED;
}
if (equal(sztext, "#CTs_Win"))
{
client_print(0, print_center, "¡ GANARON LOS CTS !");
return PLUGIN_HANDLED;
}
if (equal(sztext, "#Game_Commencing"))
{
client_print(0, print_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(0, 255, 0, -1.0, 0.17, 1, 0.0, 3.0, 2.0, 1.0, -1);
ShowSyncHudMsg(0, g_synchud[MESSAGE], "¡ COMENZÓ EL DEATHRUN !", g_dr_time);
return PLUGIN_HANDLED;
}
g_message_start = false;
}
return PLUGIN_CONTINUE;
}
public message_showmenu(msgid, dest, id)
{
static message[21];
get_msg_arg_string(4, message, charsmax(message));
if (containi(message, "Team_Select") != -1)
return PLUGIN_HANDLED;
return PLUGIN_CONTINUE;
}
public message_vguimenu(msgid, dest, id)
{
if (get_msg_arg_int(1) != OFFSET_VGUIMENU)
return PLUGIN_CONTINUE;
return PLUGIN_HANDLED;
}
get_connected()
{
static connected, id;
connected = 0;
for (id = 1; id <= 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 id, admin;
admin = 0;
for (id = 1; id <= g_maxplayers{0}; id++)
{
if (is_user_admin(id))
id++;
}
return admin;
}
random_player(const num)
{
static alive, id;
alive = 0;
for (id = 1; id <= 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 tts, id;
tts = 0;
for (id = 1; id <= 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 cts, id;
cts = 0;
for (id = 1; id <= 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_alive, id;
ct_alive = 0;
for (id = 1; id <= 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(id, model[], len)
get_user_info(id, "model", model, len);
stock is_player_stuck(id)
{
static Float:originF[3];
entity_get_vector(id, EV_VEC_origin, originF);
engfunc(EngFunc_TraceHull, originF, originF, 0, (entity_get_int(id, EV_INT_flags) & FL_DUCKING) ? HULL_HEAD : HULL_HUMAN, id, 0);
if (get_tr2(0, TR_StartSolid) || get_tr2(0, TR_AllSolid) || !get_tr2(0, TR_InOpen))
return true;
return false;
}
stock chat_color(id, const input[], any:...)
{
static message[191];
vformat(message, 190, input, 3);
replace_all(message, 190, "!g", "^4");
replace_all(message, 190, "!t", "^3");
replace_all(message, 190, "!y", "^1");
if (id)
{
if (!is_user_connected(id))
return;
message_begin(MSG_ONE_UNRELIABLE, g_message[SAYTEXT], .player = id);
write_byte(id);
write_string(message);
message_end();
return;
}
for (id = 1; id <= 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_UNRELIABLE, g_message[SAYTEXT], .player = id);
write_byte(id);
write_string(message);
message_end();
}
}
public plugin_end()
TrieDestroy(g_button);