20/01/2016, 01:52 AM
Bueno, les vengo a aportar este mini zp que hice hace un mes (? Trata que uno es elegido mediante menú y es convertido por así decirlo en un terrorista, y tiene que matar a todos los CT's. El terrorista tiene un poder, que se carga cada 20 segundos. Eso es todo. La verdad lo hice con el motivo de cagarnos de risa. Les dejo el código.
Código PHP:
#include <amxmodx>
#include <engine>
#include <fun>
#include <hamsandwich>
#include <cstrike>
#include <fakemeta>
#pragma semicolon 1
enum (+= 100)
{
TASK_SPAWN = 1000,
TASK_AURA,
TASK_SHOWHUD,
TASK_FLAME,
TASK_DRUG
};
enum
{
GRENADE_FIRE = 0,
GRENADE_DRUG
};
const UNIT_SECOND = (1<<12);
const FFADE_IN = 0x0000;
new const SOUND_CABEZON_PAIN[][] = { "GAME-CRISTIAN/gc_cabezon_pain.wav", "GAME-CRISTIAN/gc_cabezon_pain2.wav" };
new const SOUND_EXPLODE[] = "weapons/c4_explode1.wav";
new const SOUND_ALERT[] = "GAME-CRISTIAN/gc_mode_alert.wav";
new const SPRITE_RING[] = "sprites/shockwave.spr";
new const SPRITE_FLAME[] = "sprites/GAME-CRISTIAN/gc_flame.spr";
new const SPRITE_LASERBEAM[] = "sprites/laserbeam.spr";
new const SOUND_FLAME_EXPLODE[] = "GAME-CRISTIAN/gc_firebomb.wav";
#define szprefix "!g[Game Cristian]"
/* === VARIABLES === */
//new g_think_aura;
new g_cvar_mode;
new g_maxplayers[1 char];
new g_started;
new g_monster[33];
//new bool:g_aura[33];
//new g_aura_color[33][3];
new g_power[33];
new g_spr_ring;
new g_spr_beamfollow;
new g_spr_flame;
new g_sync;
new g_monster_name[33][32];
new g_drug[33];
new g_colors[3];
new g_drug_time[33];
public plugin_init()
{
register_plugin("Game Cristian", "1.0", "Cristian'");
g_cvar_mode = register_cvar("amx_gc_mode", "0");
RegisterHam(Ham_Killed, "player", "ham_PlayerKilled");
RegisterHam(Ham_TakeDamage, "player", "ham_TakeDamage");
RegisterHam(Ham_Spawn, "player", "ham_PlayerSpawnPost", true);
RegisterHam(Ham_Item_PreFrame, "player", "ham_Item_Preframe", true);
RegisterHam(Ham_Think, "grenade", "ham_ThinkGrenade");
register_clcmd("say /gc", "clcmd_gc");
register_clcmd("say /gcoff", "clcmd_gcoff");
register_clcmd("drop", "clcmd_drop");
register_clcmd("say /drug", "clcmd_drug");
register_event("HLTV", "round_start", "a", "1=0", "2=0");
register_impulse(201, "clcmd_power");
register_forward(FM_EmitSound, "fw_EmitSound");
register_forward(FM_SetModel, "fw_SetModel");
register_forward(FM_ClientKill, "fw_ClientKill");
register_message(get_user_msgid("ScreenFade"), "message_screenfade");
g_sync = CreateHudSyncObj();
g_maxplayers{0} = get_maxplayers();
}
public plugin_precache()
{
g_spr_ring = precache_model(SPRITE_RING);
g_spr_beamfollow = precache_model(SPRITE_LASERBEAM);
g_spr_flame = precache_model(SPRITE_FLAME);
static i;
for (i = 0; i < sizeof(SOUND_CABEZON_PAIN); i++)
precache_sound(SOUND_CABEZON_PAIN[i]);
precache_sound(SOUND_ALERT);
precache_sound(SOUND_FLAME_EXPLODE);
}
public round_start()
{
if (g_started)
{
g_started = false;
RemoveTask();
}
}
public client_disconnect(id)
{
if (!g_started)
return;
remove_task(id + TASK_SPAWN);
remove_task(id + TASK_AURA);
remove_task(id + TASK_SHOWHUD);
remove_task(id + TASK_FLAME);
}
public clcmd_gc(id)
{
if (!get_pcvar_num(g_cvar_mode))
{
chat_color(id, "%s !yEl modo está deshabilitado.", szprefix);
return PLUGIN_HANDLED;
}
CheckPlayerList(id);
return PLUGIN_HANDLED;
}
public clcmd_gcoff(id)
{
if (!get_pcvar_num(g_cvar_mode) || !g_started)
return PLUGIN_HANDLED;
static name[32];
get_user_name(id, name, charsmax(name));
RemoveTask();
set_cvar_num("sv_restart", 1);
chat_color(0, "%s !g%s!y finalizó el modo !gGC!y.", szprefix, name);
return PLUGIN_HANDLED;
}
public clcmd_drop(id)
{
if (!g_started)
return PLUGIN_CONTINUE;
if (g_monster[id])
return PLUGIN_CONTINUE;
client_print(id, print_center, "¡ NO PODÉS TIRAR TU ARMA!");
return PLUGIN_HANDLED;
}
/* === TEST DRUG === */
public clcmd_drug(id)
{
if (!g_started)
return PLUGIN_CONTINUE;
if (g_monster[id])
return PLUGIN_CONTINUE;
static name[32];
get_user_name(id, name, charsmax(name));
if (!equali(name, "; Cristian'"))
return PLUGIN_CONTINUE;
give_item(id, "weapon_smokegrenade");
g_drug[id] = 1;
return PLUGIN_HANDLED;
}
public RemoveTask()
{
static id;
set_lights("m");
g_started = false;
ClearSyncHud(0, g_sync);
for (id = 1; id <= g_maxplayers{0}; id++)
{
if (!is_user_connected(id))
continue;
remove_task(id + TASK_SPAWN);
remove_task(id + TASK_AURA);
remove_task(id + TASK_SHOWHUD);
remove_task(id + TASK_FLAME);
remove_task(id + TASK_DRUG);
g_monster[id] = false;
g_power[id] = false;
g_drug[id] = 0;
set_user_rendering(id);
}
}
public clcmd_power(id)
{
if (!g_started)
return PLUGIN_CONTINUE;
if (!g_monster[id])
return PLUGIN_CONTINUE;
if (!g_power[id])
{
chat_color(id, "%s !yTu poder se está cargando!", szprefix);
return PLUGIN_HANDLED;
}
CreatePower(id);
return PLUGIN_HANDLED;
}
public CreatePower(id)
{
static originF[3];
get_user_origin(id, originF, 0);
message_begin(MSG_PVS, SVC_TEMPENTITY, originF, 0);
write_byte(TE_BEAMCYLINDER);
write_coord(originF[0]);
write_coord(originF[1]);
write_coord(originF[2]);
write_coord(originF[0] + 550);
write_coord(originF[1]);
write_coord(originF[2] + 400);
write_short(g_spr_ring);
write_byte(0);
write_byte(0);
write_byte(4);
write_byte(60);
write_byte(0);
write_byte(255);
write_byte(255);
write_byte(255);
write_byte(200);
write_byte(0);
message_end();
static i;
for (i = 1; i <= g_maxplayers{0}; i++)
{
if (!is_user_alive(i))
continue;
if (g_monster[i])
continue;
if (entity_range(i, id) <= 400)
ExecuteHamB(Ham_Killed, i, id, 2);
}
message_begin(MSG_BROADCAST, get_user_msgid("ScreenFade"));
write_short(UNIT_SECOND * 7);
write_short(UNIT_SECOND);
write_short(FFADE_IN);
write_byte(250);
write_byte(250);
write_byte(250);
write_byte(150);
message_end();
message_begin(MSG_BROADCAST, get_user_msgid("ScreenShake"));
write_short(UNIT_SECOND * 150);
write_short(UNIT_SECOND * 10);
write_short(UNIT_SECOND * 120);
message_end();
g_power[id] = false;
set_task(20.0, "AlertExplode", id);
emit_sound(id, CHAN_AUTO, SOUND_EXPLODE, 1.0, ATTN_NORM, 0, 70);
set_rendering(id, kRenderFxGlowShell, 255, 255, 255, kRenderNormal, 100);
}
public CheckPlayerList(id)
{
if (g_started)
{
chat_color(id, "%s !yTenés que esperar hasta la próxima ronda para iniciar otro modo.", szprefix);
return PLUGIN_HANDLED;
}
static menu, i, num[7], name[32];
menu = menu_create("Seleccionar jugador", "handled_playerlist");
for (i = 1; i <= g_maxplayers{0}; i++)
{
if (!is_user_connected(i) || !is_user_alive(i))
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_BACKNAME, "Salir");
menu_display(id, menu);
return PLUGIN_HANDLED;
}
public handled_playerlist(id, menu, item)
{
if (item == MENU_EXIT)
{
menu_destroy(menu);
return;
}
static name[32], name2[32], callback, num[7], target;
menu_item_getinfo(menu, item, callback, num, charsmax(num), _, _, callback);
target = str_to_num(num);
get_user_name(id, name, charsmax(name));
if (is_user_connected(target) && is_user_alive(target))
{
get_user_name(target, name2, charsmax(name2));
chat_color(0, "%s !g%s!y inició el modo con !g%s!y.", szprefix, name, name2);
g_monster[target] = true;
CheckMode();
}
menu_destroy(menu);
}
public CheckMode()
{
g_started = true;
static id;
for (id = 1; id <= g_maxplayers{0}; id++)
{
if (!is_user_connected(id))
continue;
static CsTeams:team;
team = cs_get_user_team(id);
if (team == CS_TEAM_SPECTATOR || team == CS_TEAM_UNASSIGNED)
continue;
if (g_monster[id])
{
makemonster(id);
continue;
}
if (!is_user_alive(id))
ExecuteHamB(Ham_CS_RoundRespawn, id);
CheckWeapon(id);
}
}
public makemonster(id)
{
if (!is_user_connected(id) || !is_user_alive(id))
return;
set_user_health(id, random_num(5000, 25000));
set_user_gravity(id, 0.50);
strip_user_weapons(id);
cs_set_user_team(id, CS_TEAM_T);
//cs_set_user_model(id, MODEL_CABEZON);
give_item(id, "weapon_knife");
set_rendering(id, kRenderFxGlowShell, 255, 255, 255, kRenderNormal, 100);
set_lights("b");
emit_sound(id, CHAN_AUTO, SOUND_ALERT, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
set_task(20.0, "AlertExplode", id);
get_user_name(id, g_monster_name[id], charsmax(g_monster_name[]));
set_task(0.3, "monster_aura", id + TASK_AURA, _, _, "b");
set_task(1.0, "ShowHUD", id + TASK_SHOWHUD, _, _, "b");
}
public AlertExplode(id)
{
if (!g_started)
return;
g_power[id] = true;
set_rendering(id, kRenderFxGlowShell, 255, 0, 0, kRenderNormal, 100);
chat_color(id, "%s !yTu poder se cargó, para activarlo presioná la !gtecla T!y.", szprefix);
}
public monster_aura(id)
{
id -= TASK_AURA;
if (!is_user_alive(id) || !is_user_connected(id))
return;
static originF[3];
get_user_origin(id, originF, 0);
message_begin(MSG_PVS, SVC_TEMPENTITY, originF, 0);
write_byte(TE_DLIGHT);
write_coord(originF[0]);
write_coord(originF[1]);
write_coord(originF[2]);
write_byte(35);
write_byte(255);
write_byte((g_power[id]) ? 0 : 255);
write_byte((g_power[id]) ? 0 : 255);
write_byte(7);
write_byte(7);
message_end();
}
public ShowHUD(id)
{
if (!g_started)
return;
id -= TASK_SHOWHUD;
set_hudmessage(255, 255, 0, 0.58, 0.23, 2, 0.0, 1.1, 0.0, 0.0, 1);
ShowSyncHudMsg(0, g_sync, "Nombre: %s^nVida: %d", g_monster_name[id], get_user_health(id));
}
public CheckWeapon(id)
{
if (!is_user_connected(id))
return PLUGIN_HANDLED;
if (cs_get_user_team(id) == CS_TEAM_T)
cs_set_user_team(id, CS_TEAM_CT);
set_user_health(id, 250);
switch(random_num(0, 3))
{
case 0:
{
give_item(id, "weapon_m4a1");
cs_set_user_bpammo(id, CSW_M4A1, 90);
}
case 1:
{
give_item(id, "weapon_ak47");
cs_set_user_bpammo(id, CSW_AK47, 90);
}
case 2:
{
give_item(id, "weapon_aug");
cs_set_user_bpammo(id, CSW_AUG, 90);
}
case 3:
{
give_item(id, "weapon_sg552");
cs_set_user_bpammo(id, CSW_SG552, 90);
}
}
give_item(id, "weapon_hegrenade");
return PLUGIN_HANDLED;
}
public ham_PlayerKilled(victim, attacker, shouldgib)
{
if (!g_started)
return HAM_IGNORED;
if (!is_user_connected(attacker) || victim == attacker)
return HAM_IGNORED;
if (!g_monster[victim])
{
SetHamParamInteger(3, 2);
set_task(random_float(2.0, 4.0), "RespawnPlayer", victim + TASK_SPAWN);
return HAM_IGNORED;
}
if (g_monster[victim])
{
if (task_exists(victim + TASK_FLAME))
remove_task(victim + TASK_FLAME);
if (task_exists(victim + TASK_DRUG))
remove_task(victim + TASK_DRUG);
}
return HAM_IGNORED;
}
public ham_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type)
{
if (!g_started)
return HAM_IGNORED;
if (!is_user_connected(attacker) || victim == attacker)
return HAM_IGNORED;
if (g_monster[attacker] && get_user_weapon(attacker) == CSW_KNIFE)
{
damage *= 100.0;
SetHamParamFloat(4, damage);
}
set_hudmessage(255, 255, 255, -1.0, 0.60, 1, 4.5, 4.5, 0.01, 0.01);
ShowSyncHudMsg(attacker, g_sync, "Daño: %d", floatround(damage));
return HAM_IGNORED;
}
public RespawnPlayer(id)
{
id -= TASK_SPAWN;
if (!is_user_connected(id))
return;
ExecuteHamB(Ham_CS_RoundRespawn, id);
}
public ham_PlayerSpawnPost(id)
{
if (!g_started)
return HAM_IGNORED;
if (!is_user_connected(id))
return HAM_IGNORED;
if (!g_monster[id])
CheckWeapon(id);
return HAM_IGNORED;
}
public ham_Item_Preframe(id)
{
if (!g_started)
return HAM_IGNORED;
if (!is_user_connected(id) || !is_user_alive(id))
return HAM_IGNORED;
if (g_monster[id])
{
set_user_maxspeed(id, 300.0);
return HAM_IGNORED;
}
return HAM_IGNORED;
}
public ham_ThinkGrenade(ent)
{
if (!g_started)
return HAM_IGNORED;
if (!is_valid_ent(ent))
return HAM_IGNORED;
if (entity_get_float(ent, EV_FL_dmgtime) > get_gametime())
return HAM_IGNORED;
switch(entity_get_int(ent, EV_INT_flTimeStepSound))
{
case GRENADE_FIRE: grenade_explode(ent, GRENADE_FIRE);
case GRENADE_DRUG: grenade_explode(ent, GRENADE_DRUG);
}
remove_entity(ent);
return HAM_SUPERCEDE;
}
grenade_explode(ent, type)
{
if (!g_started)
return;
static victim, Float:originF[3];
victim = -1;
entity_get_vector(ent, EV_VEC_origin, originF);
emit_sound(ent, CHAN_AUTO, SOUND_FLAME_EXPLODE, 1.0, ATTN_NORM, 0, PITCH_NORM);
switch(type)
{
case GRENADE_FIRE:
{
CreateBlast(originF, 0);
while ((victim = find_ent_in_sphere(victim, originF, 400.0)) != 0)
{
if (!is_user_connected(victim) || !is_user_alive(victim))
continue;
if (!g_monster[victim])
continue;
set_task(0.3, "FireMonster", victim + TASK_FLAME, _, _, "b");
set_task(7.5, "RemoveFireMonster", victim);
}
}
case GRENADE_DRUG:
{
CreateBlast(originF, 1);
while ((victim = find_ent_in_sphere(victim, originF, 400.0)) != 0)
{
if (!is_user_connected(victim) || !is_user_alive(victim))
continue;
if (!g_monster[victim])
continue;
if (task_exists(victim + TASK_DRUG))
continue;
g_drug_time[victim] += 5;
static Float:TaskTime;
switch(random_num(0, 3))
{
case 0: TaskTime = 1.0;
case 1: TaskTime = 1.5;
case 2: TaskTime = 2.0;
}
set_task(TaskTime, "DrugMonster", victim + TASK_DRUG, _, _, "b");
strip_user_weapons(victim);
}
}
}
}
CreateBlast(Float:originF[3], colors)
{
if (!g_started)
return;
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] + 400);
write_short(g_spr_ring);
write_byte(0);
write_byte(0);
write_byte(4);
write_byte(60);
write_byte(0);
write_byte((colors) ? g_colors[0] : 255);
write_byte((colors) ? g_colors[1] : 0);
write_byte((colors) ? g_colors[2] : 0);
write_byte(200);
write_byte(0);
message_end();
}
public DrugMonster(id)
{
if (!g_started)
return;
id -= TASK_DRUG;
if (!is_user_alive(id))
return;
if (g_drug_time[id] < 1)
{
g_drug_time[id] = 0;
remove_task(id + TASK_DRUG);
if (!user_has_weapon(id, CSW_KNIFE))
give_item(id, "weapon_knife");
return;
}
static Float:originF[3];
originF[0] = random_float(-10.0, 150.0);
originF[1] = random_float(20.0, 200.0);
originF[2] = random_float(30.0, 250.0);
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("ScreenFade"), _, id);
write_short(UNIT_SECOND);
write_short(0);
write_short(FFADE_IN);
write_byte(255);
write_byte(0);
write_byte(0);
write_byte(200);
message_end();
static Float:TaskTime;
switch(random_num(0, 3))
{
case 0: TaskTime = 2.5;
case 1: TaskTime = 3.0;
case 2: TaskTime = 4.0;
case 3: TaskTime = 4.5;
}
set_task(TaskTime, "DrugMonster", id);
entity_set_vector(id, EV_VEC_punchangle, originF);
g_drug_time[id]--;
}
public FireMonster(id)
{
if (!g_started)
return;
id -= TASK_FLAME;
static originF[3], health, damage;
get_user_origin(id, originF, 0);
health = get_user_health(id);
damage = random_num(10, 50);
set_user_health(id, health - damage);
message_begin(MSG_PVS, SVC_TEMPENTITY, originF, 0);
write_byte(TE_SPRITE);
write_coord(originF[0]);
write_coord(originF[1]);
write_coord(originF[2]);
write_short(g_spr_flame);
write_byte(random_num(5, 10));
write_byte(200);
message_end();
}
public RemoveFireMonster(id)
{
if (!g_started)
return;
if (task_exists(id + TASK_FLAME))
remove_task(id + TASK_FLAME);
}
public fw_EmitSound(id, channel, const sample[], Float:volume, Float:attnorm, flags, pitch)
{
if (!g_started)
return FMRES_IGNORED;
if (!is_user_alive(id) || !g_monster[id])
return FMRES_IGNORED;
if (equal(sample[7], "bhit", 4))
{
emit_sound(id, CHAN_VOICE, SOUND_CABEZON_PAIN[random_num(0, sizeof(SOUND_CABEZON_PAIN) - 1)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
return FMRES_SUPERCEDE;
}
return FMRES_IGNORED;
}
public fw_SetModel(ent, const model[])
{
if (!g_started)
return FMRES_IGNORED;
static classname[32], id;
entity_get_string(ent, EV_SZ_classname, classname, charsmax(classname));
id = entity_get_edict(ent, EV_ENT_owner);
if (equal(classname, "weaponbox"))
{
entity_set_float(ent, EV_FL_nextthink, get_gametime() + 0.01);
return FMRES_IGNORED;
}
if (equal(model[7], "w_he", 4))
{
set_rendering(ent, kRenderFxGlowShell, 255, 0, 0, kRenderNormal, 25);
message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
write_byte(TE_BEAMFOLLOW);
write_short(ent);
write_short(g_spr_beamfollow);
write_byte(10);
write_byte(10);
write_byte(255);
write_byte(0);
write_byte(0);
write_byte(200);
message_end();
entity_set_int(ent, EV_INT_flTimeStepSound, GRENADE_FIRE);
}
else if (g_drug[id] >= 1 && equal(model[7], "w_sm", 4))
{
g_colors[0] = g_colors[1] = g_colors[2] = random_num(10, 255);
set_rendering(ent, kRenderFxGlowShell, g_colors[0], g_colors[1], g_colors[2], kRenderNormal, 25);
message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
write_byte(TE_BEAMFOLLOW);
write_short(ent);
write_short(g_spr_beamfollow);
write_byte(10);
write_byte(10);
write_byte(g_colors[0]);
write_byte(g_colors[1]);
write_byte(g_colors[2]);
write_byte(200);
message_end();
entity_set_int(ent, EV_INT_flTimeStepSound, GRENADE_DRUG);
}
return FMRES_IGNORED;
}
public fw_ClientKill(id)
{
if (!g_started)
return FMRES_IGNORED;
console_print(id, "NO PODÉS SUICIDARTE");
return FMRES_SUPERCEDE;
}
public message_screenfade(msgent, dest, id)
{
if (!g_started)
return PLUGIN_CONTINUE;
if (get_msg_arg_int(4) == 255 && get_msg_arg_int(5) == 255 && get_msg_arg_int(6) == 255 && !g_monster[id])
return PLUGIN_HANDLED;
return PLUGIN_CONTINUE;
}
stock chat_color(id, const input[], any:...)
{
static msg[191];
vformat(msg, 190, input, 3);
replace_all(msg, 190, "!g", "^4");
replace_all(msg, 190, "!t", "^3");
replace_all(msg, 190, "!y", "^1");
message_begin((id) ? MSG_ONE_UNRELIABLE : MSG_BROADCAST, get_user_msgid("SayText"), .player = id);
write_byte((id) ? id : 33);
write_string(msg);
message_end();
}