PHP Code:
/*===============================================================================================================================================
[CS 1.6] Gameplay: Fireworks On End Round
* Description:
When the round end the person will be able to celebrate with fireworks pressing "E"
* Required modules:
- amxmodx
- fakemeta
* Cvars
- amx_fireworks_enable "1" // Enable/Disable Plugin
- amx_fireworks_admin_only "0" // Only Admins ?
- amx_fireworks_admin_flag "b" // Flag Acess
- amx_fireworks_type "2" // Type of Fireworks (0 - Automatic Relase | 1 - IN_USE | 2 IN_ATTACK)
================================================================================================================================================*/
#include <amxmodx>
#include <cstrike>
#include <fakemeta>
#include <xs>
#define PLUGIN "[CS 1.6] Gameplay: Fireworks on End Round"
#define VERSION "1.0"
#define AUTHOR "[P]erfec[T] [S]cr[@]s[H]"
#define fm_create_entity(%1) engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, %1))
#define TASK_AUTORELASE 3102130
#define AUTO_RELASE_INTERVAL 0.6
new g_fireworks_team, g_trailSpr, g_exploSpr, cvar_enable, cvar_admin_only, cvar_admin_flag, cvar_type
new const fireworks_model[] = "sprites/3dmflared.spr"
new const fireworks_class[] = "amxx_fireworks"
new flag_acess
enum { TEAM_T = 1, TEAM_CT }
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_cvar("amx_fireworks", VERSION, FCVAR_SERVER|FCVAR_UNLOGGED);
register_dictionary("fireworks.txt")
cvar_enable = register_cvar("amx_fireworks_enable", "1")
cvar_admin_only = register_cvar("amx_fireworks_admin_only", "0")
cvar_admin_flag = register_cvar("amx_fireworks_admin_flag", "b")
cvar_type = register_cvar("amx_fireworks_type", "2")
register_event("HLTV", "event_round_start", "a", "1=0", "2=0")
register_event("SendAudio", "t_win", "a", "2&%!MRAD_terwin")
register_event("SendAudio", "ct_win", "a", "2&%!MRAD_ctwin")
register_forward(FM_Touch, "fw_Touch")
register_forward(FM_PlayerPreThink, "fw_PlayerPreThink")
}
public plugin_cfg()
{
new szFlags[24]; get_pcvar_string(cvar_admin_flag, szFlags, charsmax(szFlags))
flag_acess = read_flags(szFlags)
}
public plugin_precache()
{
precache_model(fireworks_model)
g_trailSpr = precache_model("sprites/laserbeam.spr")
g_exploSpr = precache_model("sprites/fireworks.spr")
}
public client_putinserver(id) remove_task(id + TASK_AUTORELASE)
public client_disconnect(id) remove_task(id + TASK_AUTORELASE)
public t_win()
{
if(!get_pcvar_num(cvar_enable))
return;
g_fireworks_team = TEAM_T
new players[32], pNum
get_players(players,pNum,"ce","TERRORIST")
for(new i = 0; i<pNum;i++)
{
if(get_user_flags(players[i]) & flag_acess && get_pcvar_num(cvar_admin_only) || !get_pcvar_num(cvar_admin_only))
{
//client_printcolor(players[i], "%L %L", LANG_PLAYER, "FIREWORKS_TAG", LANG_PLAYER, "FIREWORKS_ENABLE")
//client_printcolor(players[i], "%L %L", LANG_PLAYER, "FIREWORKS_TAG", LANG_PLAYER, "FIREWORKS_BUTTON")
if(get_pcvar_num(cvar_type) <= 0) set_task(AUTO_RELASE_INTERVAL, "auto_relase", players[i]+TASK_AUTORELASE)
}
}
}
public ct_win()
{
if(!get_pcvar_num(cvar_enable))
return;
g_fireworks_team = TEAM_CT
new players[32], pNum
get_players(players,pNum,"ce","CT")
for(new i = 0; i<pNum;i++)
{
if(get_user_flags(players[i]) & flag_acess && get_pcvar_num(cvar_admin_only) || !get_pcvar_num(cvar_admin_only))
{
//client_printcolor(players[i], "%L %L", LANG_PLAYER, "FIREWORKS_TAG", LANG_PLAYER, "FIREWORKS_ENABLE")
//client_printcolor(players[i], "%L %L", LANG_PLAYER, "FIREWORKS_TAG", LANG_PLAYER, "FIREWORKS_BUTTON")
if(get_pcvar_num(cvar_type) <= 0) set_task(AUTO_RELASE_INTERVAL, "auto_relase", players[i]+TASK_AUTORELASE)
}
}
}
public event_round_start()
{
if(g_fireworks_team > 0)
{
for(new id = 1; id <= get_maxplayers(); id++)
{
g_fireworks_team = 0
//if(get_user_flags(id) & flag_acess && get_pcvar_num(cvar_admin_only) || !get_pcvar_num(cvar_admin_only))
// client_printcolor(id, "%L %L", LANG_PLAYER, "FIREWORKS_TAG", LANG_PLAYER, "FIREWORKS_DISABLE")
}
}
}
public auto_relase(id)
{
id -= TASK_AUTORELASE
if(is_user_alive(id) && get_pcvar_num(cvar_enable)) {
if(cs_get_user_team(id) == CS_TEAM_T && g_fireworks_team == TEAM_T || cs_get_user_team(id) == CS_TEAM_CT && g_fireworks_team == TEAM_CT) {
make_fireworks(id);
set_task(AUTO_RELASE_INTERVAL, "auto_relase", id+TASK_AUTORELASE)
}
}
else remove_task(id + TASK_AUTORELASE)
}
public fw_PlayerPreThink(id)
{
if(!is_user_alive(id) || !get_pcvar_num(cvar_enable) || !(get_user_flags(id) & flag_acess) && get_pcvar_num(cvar_admin_only) || get_pcvar_num(cvar_type) <= 0)
return;
static iButton; iButton = pev(id, pev_button)
static iOldButton; iOldButton = pev(id, pev_oldbuttons)
if(cs_get_user_team(id) == CS_TEAM_T && g_fireworks_team == TEAM_T || cs_get_user_team(id) == CS_TEAM_CT && g_fireworks_team == TEAM_CT)
{
if((iButton & IN_USE) && !(iOldButton & IN_USE) && get_pcvar_num(cvar_type) == 1
||(iButton & IN_ATTACK) && !(iOldButton & IN_ATTACK) && get_pcvar_num(cvar_type) >= 2)
make_fireworks(id)
}
}
public make_fireworks(id)
{
if(!get_pcvar_num(cvar_enable))
return;
new Float:Origin[3]
new Float:vAngle[3]
new Float:flVelocity[3]
// Get position from eyes
get_user_eye_position(id, Origin)
pev(id, pev_v_angle, vAngle)
new NewEnt = fm_create_entity("info_target")
set_pev(NewEnt, pev_classname, fireworks_class)
engfunc(EngFunc_SetModel, NewEnt, fireworks_model)
set_pev(NewEnt, pev_size, Float:{ -1.5, -1.5, -1.5 }, Float:{ 1.5, 1.5, 1.5 })
set_pev(NewEnt, pev_origin, Origin)
// Set Entity Angles (thanks to Arkshine)
make_vector(vAngle)
set_pev(NewEnt, pev_angles, vAngle)
set_pev(NewEnt, pev_solid, SOLID_BBOX)
set_pev(NewEnt, pev_scale, 0.1)
set_pev(NewEnt, pev_spawnflags, SF_SPRITE_STARTON)
set_pev(NewEnt, pev_framerate, 25.0)
set_rendering(NewEnt, kRenderFxNone, 0, 0, 0, kRenderTransAdd, 255)
set_pev(NewEnt, pev_movetype, MOVETYPE_FLY)
set_pev(NewEnt, pev_owner, id)
// Set Entity Velocity
velocity_by_aim(id, 700, flVelocity)
set_pev(NewEnt, pev_velocity, flVelocity)
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_BEAMFOLLOW) // TE id
write_short(NewEnt) // entity
write_short(g_trailSpr) // sprite
write_byte(9) // life
write_byte(3) // width
write_byte(random_num(0,255)) // r
write_byte(random_num(0,255)) // g
write_byte(random_num(0,255)) // b
write_byte(255) // brightness
message_end()
}
// Touch Forward
public fw_Touch(ent, id)
{
if (!pev_valid(ent) || !get_pcvar_num(cvar_enable))
return PLUGIN_HANDLED
new class[32]; pev(ent, pev_classname, class, charsmax(class))
if(equal(class, fireworks_class))
{
fireworks_effect(ent)
engfunc(EngFunc_RemoveEntity, ent)
return PLUGIN_HANDLED
}
return PLUGIN_HANDLED
}
public fireworks_effect(ent)
{
if (!pev_valid(ent) || !get_pcvar_num(cvar_enable))
return;
// Get origin
static Float:originF[3]
pev(ent, pev_origin, originF)
message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
write_byte(TE_SPRITE);
engfunc(EngFunc_WriteCoord, originF[0]+random_float(-5.0, 5.0));
engfunc(EngFunc_WriteCoord, originF[1]+random_float(-5.0, 5.0));
engfunc(EngFunc_WriteCoord, originF[2]+200.0);
write_short(g_exploSpr);
write_byte(15);
write_byte(200);
message_end();
}
stock get_user_eye_position(id, Float:flOrigin[3])
{
static Float:flViewOffs[3]
pev(id, pev_view_ofs, flViewOffs)
pev(id, pev_origin, flOrigin)
xs_vec_add(flOrigin, flViewOffs, flOrigin)
}
stock make_vector(Float:flVec[3])
{
flVec[0] -= 30.0
engfunc(EngFunc_MakeVectors, flVec)
flVec[0] = -(flVec[0] + 30.0)
}
// Colored Chat (client_printcolor)
stock client_printcolor(const id, const input[], any:...)
{
new count = 1, players[32]
static msg[191]
vformat(msg, 190, input, 3)
replace_all(msg, 190, "!g", "^4") // Chat Verde
replace_all(msg, 190, "!y", "^1") // Chat Normal
replace_all(msg, 190, "!t", "^3") // Chat Do Time Tr=Vermelho Ct=Azul Spec=Branco
if (id) players[0] = id; else get_players(players, count, "ch")
{
for (new i = 0; i < count; i++)
{
if (is_user_connected(players[i]))
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i])
write_byte(players[i]);
write_string(msg);
message_end();
}
}
}
}
// Set rendering from fakemeta_util
stock set_rendering(entity, fx = kRenderFxNone, r = 255, g = 255, b = 255, render = kRenderNormal, amount = 16) {
new Float:RenderColor[3];
RenderColor[0] = float(r);
RenderColor[1] = float(g);
RenderColor[2] = float(b);
set_pev(entity, pev_renderfx, fx);
set_pev(entity, pev_rendercolor, RenderColor);
set_pev(entity, pev_rendermode, render);
set_pev(entity, pev_renderamt, float(amount));
return 1;
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1046\\ f0\\ fs16 \n\\ par }
*/