i find this code, but must be optimized (MSG_ALL) and cleaned+ remove players trail.
in this plugin u have : trail for players, exploding buletts for USP and amazing effects for MP5NAVY.
PHP Code:
#include <amxmodx>
#include <fakemeta>
#include <fun>
#define PLUGIN "ExlodeBeam"
#define VERSION "beta"
#define AUTHOR "noname"
new bool:givenitems[33] = false
new bool:newround = false
new bool:g_restart_attempt[33] = false
new lastammo[33]
new lastweapon[33]
new spr_trail
new spr_laser_impact
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_event("CurWeapon", "event_curweapon", "be")
register_event("ResetHUD", "event_hudreset", "b")
register_event("DeathMsg","event_deathmsg","a")
register_event("Damage", "event_damage", "be" )
register_event("TextMsg", "event_restart_attempt", "a", "2=#Game_will_restart_in")
register_forward(FM_PlayerPreThink, "fw_PlayerPreThink")
register_forward(FM_GetGameDescription,"fw_GetGameDescription")
register_forward(FM_CmdStart, "fw_CmdStart")
register_forward(FM_Touch, "fw_Touch")
register_forward(FM_UpdateClientData, "fw_UpdateClientData", 1)
register_logevent("logevent_roundstart", 2, "1=Round_Start")
public plugin_precache()
{
spr_trail = precache_model("sprites/smoke.spr")
spr_laser_impact = precache_model( "sprites/zerogxplode.spr")
precache_sound("weapons/rocketfire1.wav")
}
public event_curweapon(id)
{
new weap = read_data(2)
new ammo = read_data(3)
if (weap == CSW_USP && is_user_alive(id)) {
if (lastweapon[id] == 0)
lastweapon[id] = weap
if ((lastammo[id] > ammo ) && (lastweapon[id] == weap)) {
new origin[3]
get_user_origin(id, origin, 4)
explotion(origin)
}
lastammo[id] = ammo
lastweapon[id] = weap
}
return PLUGIN_CONTINUE
}
public event_hudreset(id) {
if (g_restart_attempt[id]) {
g_restart_attempt[id] = false
return
}
player_spawned(id)
}
public event_deathmsg()
{
givenitems[read_data(2)] = false
set_task(1.0, "exec_spawn", read_data(2))
}
public event_damage(id) //Damage multiplier for the USP
{
new aid = get_user_attacker(id)
if (aid == id || !is_user_alive(id) || !is_user_alive(aid))
return PLUGIN_HANDLED
new clip, ammo
new weap = get_user_weapon(aid, clip, ammo)
if (weap != CSW_USP)
return PLUGIN_HANDLED
}
public event_restart_attempt()
{
new players[32], num
get_players(players, num, "a")
for (new i; i < num; ++i)
g_restart_attempt[players[i]] = true
}
public fw_PlayerPreThink(id)
{
if(!is_user_alive(id))
return FMRES_IGNORED
new buttons = pev(id, pev_button)
new Float:velocity[3], aim[3], origin[3]
new clip, ammo, weapon = get_user_weapon(id, clip, ammo)
get_user_origin(id, aim, 3)
get_user_origin(id, origin)
pev(id, pev_velocity, velocity)
if (buttons & IN_ATTACK && weapon == CSW_MP5NAVY && clip > 0)
createbeam(id, aim)
set_pev(id, pev_velocity, velocity)
return FMRES_HANDLED
}
public fw_CmdStart(id)
{
if (pev(id, pev_button) & IN_FORWARD && !(pev(id, pev_oldbuttons) & IN_FORWARD)) {
new team = get_user_team(id)
trail(id, team)
}
return FMRES_HANDLED
}
public fw_GetGameDescription()
{
forward_return(FMV_STRING, PLUGIN)
return FMRES_SUPERCEDE
}
public logevent_roundstart()
{
newround = true
set_task(2.0, "remove_newround")
}
public remove_newround()
newround = false
public player_spawned(id)
{
set_pev(id, pev_health, 100.0)
set_task(0.5, "give_items", id)
}
public exec_spawn(id)
{
if (is_user_alive(id))
return PLUGIN_HANDLED
}
public new_spawn(id)
spawn(id)
public give_items(id) //Gives items when spawning
{
if (!is_user_alive(id))
return PLUGIN_HANDLED
if (givenitems[id] && newround) {
return PLUGIN_HANDLED
}
else if(givenitems[id])
return PLUGIN_HANDLED
new i, weap = random_num(0, 2)
givenitems[id] = true
for(i=0; i != 3; i++)
give_item(id, "ammo_45acp")
return PLUGIN_HANDLED
}
stock trail(id, team) //Creates the trail for players
{
new r,g,b
if(team == 1) {
r = 255
g = 51
b = 51
}
else if (team == 2){
r = 51
g = 255
b = 51
}
else {
r = 255
g = 255
b = 255
}
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_BEAMFOLLOW)
write_short(id)
write_short(spr_trail)
write_byte(5)
write_byte(2)
write_byte(r)
write_byte(g)
write_byte(b)
write_byte(100)
message_end()
}
stock explotion(origin[3]) //Creates explotions for the USP
{
message_begin(MSG_ALL, SVC_TEMPENTITY, origin)
write_byte(3)
write_coord(origin[0])
write_coord(origin[1])
write_coord(origin[2])
write_short(spr_laser_impact)
write_byte(10)
write_byte(30)
write_byte(8)
message_end()
}
stock createbeam(id, aim[3]) //Creates the laser beam for the MP5
{
message_begin(MSG_ALL,SVC_TEMPENTITY)
write_byte(TE_BEAMENTPOINT)
write_short(id | 0x1000)
write_coord(aim[0])
write_coord(aim[1])
write_coord(aim[2])
write_short(spr_trail)
write_byte(0)
write_byte(75)
write_byte(1)
write_byte(10)
write_byte(10)
write_byte(255)
write_byte(255)
write_byte(0)
write_byte(255)
write_byte(10)
message_end()
}
stock deathmsg(att, vic, weap[]) //Creates deathmessages
{
message_begin(MSG_ALL, get_user_msgid("DeathMsg"),{ 0,0,0 },0 )
write_byte(att)
write_byte(vic)
write_byte(0)
write_string(weap)
message_end()
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1035\\ f0\\ fs16 \n\\ par }
*/