/* Air Raid
A Request Slay Plugin
by CubicVirtuoso
September, 2005
Requested by: PsyCotiCtron
Optimized for all mods
Admins are able to trigger a set of events first starting with a siren, then a public announcement
followed by plane sounds and bombs dropping from the sky following on random locations. Also
included is the command to trigger the air raid.
**COMMANDS**
amx_airraid :: Triggers the air-raid sequence of events
**UPDATES**
Version 1.0:
- Initial Release
*/
//--------------------------------------------------------------------------------------------------
#define MAXBOMBS 15 // Number of bombs
#define BETWEENTIME 10 // Must be greater or equal to 1
#define RADIUS 800 // Radius of bomb drops
#include <amxmodx> // Amx mod include definitions
#include <fun> // Fun Module
#include <amxmisc> // Useful functions
#include <engine> // Engine Plugin
#include <zombieplague>
//--------------------------------------------------------------------------------------------------
// Declaring info variables
new PLUGIN[]="Air Raid"
new AUTHOR[]="CubicVirtuoso"
new VERSION[]="1.0"
new inuse = 0 // variable to tell whether used already or not
new donebombs = MAXBOMBS // tells the engine how many bombs are finished dropping
new bombs[MAXBOMBS] // bomb array
new bool:hasraid[33]
new Float:timers[MAXBOMBS] // timers array
new SpriteExplosion
//Extra Item Values
new g_itemid_airraid
new const g_item_name[] = { "[ZP] Extra Air Raid Strike" }
const g_item_cost = 100
//--------------------------------------------------------------------------------------------------
// initalize function
public plugin_init()
{
register_plugin(PLUGIN,VERSION,AUTHOR) // Register Function
register_clcmd("say /airraid", "CMD_airraid") // Register Airraid Command
g_itemid_airraid = zp_register_extra_item(g_item_name, g_item_cost, ZP_TEAM_HUMAN)
register_logevent("endround", 2, "0=World triggered", "1=Round_End")
}
//--------------------------------------------------------------------------------------------------
// Precache
public plugin_precache()
{
precache_sound("ambience/siren.wav") // Siren Sound
precache_sound("ambience/jetflyby1.wav") // Fly By Sound
precache_model("models/rpgrocket.mdl") // Bomb Model
SpriteExplosion = precache_model("sprites/bexplo.spr") // precache explosion sprite
}
//--------------------------------------------------------------------------------------------------
// Player buys our upgrade, set the unlimited ammo flag
public zp_extra_item_selected(id, itemid)
{
if (itemid == g_itemid_airraid){
hasraid[id] = true
client_print(id, print_center, "You just bought an Air Raid Strike say /airraid to call in a STRIKE!!")
}
}
public CMD_airraid(id)
{
new k
if (!is_user_alive(id) || zp_get_user_zombie(id)) // Checks if the command user has access
return PLUGIN_HANDLED
if (inuse == 1 && donebombs != MAXBOMBS)
{
client_print(id, print_chat, "You must wait longer before issuing another air strike")
return PLUGIN_HANDLED
}
inuse = 1
emit_sound(id,CHAN_AUTO, "ambience/siren.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
new Float:ftime
ftime = float(BETWEENTIME)
set_task(ftime, "ACT_resetraid")
set_task(5.0, "ACT_stopsound")
set_task(6.0, "ACT_flybysound", id)
set_task(6.0, "CRT_bomb", id)
for (k = 0; k<MAXBOMBS; k++)
{
timers[k] = random_float(1.0,2.0)
}
return PLUGIN_HANDLED
}
public ACT_explodebomb(id,posistion)
{
new location[3]
new Float:Vec[3]
IVecFVec(location, Vec)
entity_get_vector(bombs[posistion], EV_VEC_origin, Vec)
FVecIVec(Vec, location)
location[2] = location[2] + 20
CRT_explosion(location, SpriteExplosion, 80, 10, 0)
REM_bomb(posistion)
new players[32]
new playercount
get_players(players,playercount,"a")
for (new m=0; m<playercount; m++)
{
new playerlocation[3]
new resultdistance
get_user_origin(players[m], playerlocation)
resultdistance = get_distance(playerlocation,location)
if(resultdistance < 100 && zp_get_user_zombie(id))
{
fakedamage(players[m],"Air Raid",3000.0,DMG_BLAST)
}
}
}
public REM_bomb(posistion)
{
remove_entity(bombs[posistion])
bombs[posistion] = 0
}
public CRT_bomb(id)
{
new location[3]
new randomlocation[3]
new endrandomlocation[3]
new randomx
new randomy
get_user_origin(id, location)
location[2] = location[2] + 500
donebombs = 0
for (new i=0; i<MAXBOMBS; i++)
{
randomx = random_num(-RADIUS,RADIUS)
randomy = random_num(-RADIUS,RADIUS)
randomlocation[0] = location[0]+1*randomx
randomlocation[1] = location[1]+1*randomy
randomlocation[2] = location[2]
new Float:LocVec[3]
IVecFVec(randomlocation, LocVec)
endrandomlocation[0] = randomlocation[0]
endrandomlocation[1] = randomlocation[1]
endrandomlocation[2] = randomlocation[2] - 5
new Float:EndVec[3]
IVecFVec(endrandomlocation, EndVec)
new Float:VeloVec[3]
VeloVec[0] = (EndVec[0] - LocVec[0])*1+1
VeloVec[1] = (EndVec[1] - LocVec[1])*1+1
VeloVec[2] = (EndVec[2] - LocVec[2])*1+1
bombs[i] = create_entity("info_target") // creates the bombs
if (!bombs[i]) // if not exist
return PLUGIN_HANDLED
entity_set_string(bombs[i], EV_SZ_classname, "Bomb") // set name
entity_set_edict(bombs[i], EV_ENT_owner, id) // set owner
entity_set_int(bombs[i], EV_INT_solid, 1) // not a solid but interactive
entity_set_int(bombs[i], EV_INT_movetype, 6) // set move type to toss
entity_set_model(bombs[i], "models/rpgrocket.mdl") // enterance sprite
entity_set_origin(bombs[i], LocVec) // start posistion
entity_set_vector(bombs[i], EV_VEC_velocity, VeloVec) // follow velocity
DispatchSpawn(bombs[i]) // Dispatches the Fire
}
for (new k = 0; k<MAXBOMBS; k++)
{
set_task(timers[k], "ACT_explodebomb", k)
}
return PLUGIN_CONTINUE
}
public ACT_resetraid()
{
inuse = 0
return PLUGIN_CONTINUE
}
public ACT_stopsound()
{
client_cmd(0,"stopsound") // stops sound on all clients
return PLUGIN_CONTINUE
}
public ACT_flybysound(id)
{
emit_sound(id,CHAN_AUTO, "ambience/jetflyby1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
return PLUGIN_CONTINUE
}
public CRT_explosion(location[3], spritename, scale, framerate, flags)
{
message_begin( MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(3) // TE_EXPLOSION
write_coord(location[0])
write_coord(location[1])
write_coord(location[2])
write_short(spritename)
write_byte(scale)
write_byte(framerate)
write_byte(flags)
message_end()
}
Jak moge "wkomponować" ten plug do diablo ?
tak zeby umiejetnosc dla klasy taka jak np:
player_b_inv[id]
;d


Dodatki SourceMod



Temat jest zamknięty








