/* 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