|
BANNED
|

05-30-2010
, 14:52
Re: [ZP] Extra Item: Kill Bomb For Zombies !! UPDATED v1.2 !!
|
#10
|
Quote:
Originally Posted by NiHiLaNTh
in fw_SetModel
Code:
engfunc ( EngFunc_SetModel, Entity, model_grenade_infect_w )
|
it gives me errors
can u put it in this:
PHP Code:
/***************************************************************************\ =========================================== * || [ZP] Kill Bomb For Zombies v1.2 || * =========================================== ------------------- *||DESCRIPTION||* ------------------- This plugins adds another extra item to Zombie Plague, A Kill Bomb. This item is for zombies and where the grenade is thrown the human who is in range is killed. ------------- *||CVARS||* ------------- - zp_zkill_bomb_extra_hp 200 - How much extra HP is awarded to the zombie who kills the humans through this grenade. - zp_zkill_bomb_extra_frags 1 - No of Frags awarded to zombies who kill humans through this grenade. - zp_zkill_bomb_ammo_packs 5 - No of Ammo packs awarded to zombies who kill humans through this grenade - zp_zkill_bomb_nem 1 - Whether a Nemesis should be given the nade - zp_zkill_bomb_assassin 1 - Whether an Assassin should be given the nade --------------- *||DEFINES||* --------------- - #define EDITTED_VERSION - If u use the editted version of ZP with Sniper And Assassin mode than uncomment this. [U need the zombieplaguenew1.3 include for the editted version] --------------- *||CREDITS||* --------------- - MeRcyLeZZ ----> For some of the code parts - NiHiLaNTh ----> For the concussion grenade plugin which was handy - Sn!ff3r ------> For the kill bomb plugin - meTaLiCroSS --> For the colour printing function For Fixing a major bug ------------------ *||CHANGE LOG||* ------------------ v1.0 ====> Initial Release v1.1 ====> Added a cvar for whether a nemesis and assassin can have the nade. Fixed the bug regarding HE grenades v1.1 ====> Added a define for EDITTED VERSIONS of ZP Fixed a bug regarding the model \***************************************************************************/ // Needed for detecting servers with this plugin #define FCVAR_FLAGS (FCVAR_SERVER | FCVAR_SPONLY | FCVAR_UNLOGGED) new const NADE_TYPE_ZKILLBOMB = 7979 /************************************************************\ | Customizations Section | | You can edit here according to your liking | \************************************************************/ // This is for those who use the editted version of ZP // If you use that version then uncomment this line // By removing the two slashed ( // ) #define EDITTED_VERSION // Radius of the explosion of the bomb // No need to change this [Default=240.0] new const Float:RADIUS = 240.0 // The trail sprite of the bomb after it is thrown new const sprite_grenade_trail[] = "sprites/laserbeam.spr" // The explosion ring sprite new const sprite_grenade_ring[] = "sprites/shockwave.spr" // Cost of this grenade in ammo packs new const item_cost = 50 // Name of this grenade in extra items new const item_name[] = "Kill Bomb" // The sound emitted when someone buys the grenade new const recieving_sound[] = "items/9mmclip1.wav" // The sound emitted when the grenade explodes new const kill_sound[] = "zombie_plague/killbomb.wav" // Notice given to the player who buys the grenade new const info_notice[] = { "You have bought a Kill Bomb. Enjoy killing humans !" } // HUD message given to the player who is Nemesis or Assassin new const info_notice2[] = { "You have a Kill Bomb. Use it to kill humans !" } // Model of the grenade new const model_grenade_infect[] = "models/zombie_plague/v_red.mdl" new const p_smokegrenade[] = "models/zombie_plague/p_red.mdl" new const model_grenade_infect_w[] = "models/zombie_plague/w_red.mdl" /************************************************************\ | Customizations Ends Here..!! | | You can edit the cvars in the plugin init | \************************************************************/ #include <amxmodx> #include <hamsandwich> #include <cstrike> #include <fakemeta_util> #if defined EDITTED_VERSION #include <zombieplaguenew1.3> #else #include <zombieplague> #endif // Variables new item_id new has_bomb[33] new cvar_fragsinfect, cvar_ammoinfect, cvar_humanbonushp , cvar_nemnade #if defined EDITTED_VERSION new cvar_assnade #endif new g_SyncMsg new g_trailSpr, g_exploSpr, g_msgScoreInfo, g_msgDeathMsg, g_msgAmmoPickup, g_msgSayText /************************************************************\ | [Plugin Initialization And Precache] | \************************************************************/ public plugin_init() { // Registrations register_plugin("[ZP] Kill Bomb For Zombies", "1.0", "@bdul!") RegisterHam(Ham_Think, "grenade", "fw_ThinkGrenade") RegisterHam(Ham_Killed, "player", "fw_PlayerKilled") register_forward(FM_SetModel, "fw_SetModel") register_message(get_user_msgid("CurWeapon"), "message_cur_weapon") register_message(g_msgAmmoPickup, "message_ammopickup") register_event ( "HLTV", "event_round_start", "a", "1=0", "2=0" ); // Cvars [You can edit these to you're liking] cvar_humanbonushp = register_cvar("zp_zkill_bomb_extra_hp","200") cvar_fragsinfect = register_cvar("zp_zkill_bomb_extra_frags","1") cvar_ammoinfect = register_cvar("zp_zkill_bomb_ammo_packs","2") cvar_nemnade = register_cvar("zp_zkill_bomb_nem","1") #if defined EDITTED_VERSION cvar_assnade = register_cvar("zp_zkill_bomb_assassin","1") #endif // Add the cvar so we can detect it register_cvar ( "zp_zkill_bomb", "1.0", FCVAR_FLAGS ) // Messages needed for the plugin g_msgScoreInfo = get_user_msgid("ScoreInfo") g_msgDeathMsg = get_user_msgid("DeathMsg") g_msgAmmoPickup = get_user_msgid("AmmoPickup") g_msgSayText = get_user_msgid("SayText") g_SyncMsg = CreateHudSyncObj() } public plugin_precache() { // Sprites precache g_trailSpr = engfunc(EngFunc_PrecacheModel, sprite_grenade_trail) g_exploSpr = engfunc(EngFunc_PrecacheModel, sprite_grenade_ring) // Model precache engfunc(EngFunc_PrecacheModel, model_grenade_infect) engfunc(EngFunc_PrecacheModel, p_smokegrenade) engfunc(EngFunc_PrecacheModel, model_grenade_infect_w) // Sounds precache engfunc(EngFunc_PrecacheSound, recieving_sound) engfunc(EngFunc_PrecacheSound, kill_sound) // Register it in the extra items item_id = zp_register_extra_item(item_name,item_cost,ZP_TEAM_ZOMBIE) } /************************************************************\ | [Main Forwards] | \************************************************************/ // New round started so reset the variable public event_round_start() { arrayset(has_bomb, false, 33) } // Client disconnected so reset the variable public client_disconnect(id) { has_bomb[id] = 0 } // Someone was turned into nemesis public zp_user_infected_post(id, infector) { // Make sure it is a nemesis and the cvar is also on if (zp_get_user_nemesis(id) && (get_pcvar_num(cvar_nemnade) == 1)) give_the_bomb(id) // Give him the bomb #if defined EDITTED_VERSION // Make sure it is an assassin and the cvar is also on else if (zp_get_user_assassin(id) && (get_pcvar_num(cvar_assnade) == 1)) give_the_bomb(id) // Give him the bomb #endif } // Someone selected our extra item public zp_extra_item_selected(id, itemid) { // Make sure that the selected item is our item if(itemid == item_id) { // Give him the bomb give_the_bomb(id) } } // The player turned back to a human public zp_user_humanized_post ( Player, Survivor ) { // He doesn't haves the nade anymore if (has_bomb[Player]) has_bomb[Player] = 0 } // Player got killed reset the variable public fw_PlayerKilled(victim, attacker, shouldgib) { has_bomb[victim] = 0 } public fw_ThinkGrenade(entity) { if(!pev_valid(entity)) return HAM_IGNORED static Float:dmgtime pev(entity, pev_dmgtime, dmgtime) if (dmgtime > get_gametime()) return HAM_IGNORED if(pev(entity, pev_flTimeStepSound) == NADE_TYPE_ZKILLBOMB) { kill_explode(entity) return HAM_SUPERCEDE } return HAM_IGNORED } public fw_SetModel(entity, const model[]) { static Float:dmgtime pev(entity, pev_dmgtime, dmgtime) if (dmgtime == 0.0) return if (equal(model[7], "w_sm", 4)) { // Check whos is the owner of the nade new owner = pev(entity, pev_owner) // Make sure only a zombie can own it if(zp_get_user_zombie(owner) && has_bomb[owner]) { // Set the glow on the model fm_set_rendering(entity, kRenderFxGlowShell, 255, 0, 0, kRenderNormal, 16) // Set the trail sprite message_begin(MSG_BROADCAST, SVC_TEMPENTITY) write_byte(TE_BEAMFOLLOW) // TE id write_short(entity) // entity write_short(g_trailSpr) // sprite write_byte(10) // life write_byte(10) // width write_byte(255) // r write_byte(0) // g write_byte(0) // b write_byte(200) // brightness message_end() set_pev(entity, pev_flTimeStepSound, NADE_TYPE_ZKILLBOMB) } } } /************************************************************\ | [Main funtions] | \************************************************************/ // Grenade has exploded public kill_explode(ent) { // Has the round started ? if (!zp_has_round_started()) return // Get the Origin static Float:originF[3] pev(ent, pev_origin, originF) // Create the blast create_blast(originF) // Emit explosion sound engfunc(EngFunc_EmitSound, ent, CHAN_ITEM, kill_sound, 1.0, ATTN_NORM, 0, PITCH_NORM) // Get the attacker static attacker attacker = pev(ent, pev_owner) has_bomb[attacker] = 0 // Collisions static victim , deathmsg_block // Get the current state of DeathMsg deathmsg_block = get_msg_block(g_msgDeathMsg) // Set it to be blocked [Bug Fix] set_msg_block(g_msgDeathMsg, BLOCK_SET) victim = -1 #if defined EDITTED_VERSION while ((victim = engfunc(EngFunc_FindEntityInSphere, victim, originF, RADIUS)) != 0) { // If dead, zombie, survivor or sniper then continue the loop if (!is_user_alive(victim) || zp_get_user_zombie(victim) || zp_get_user_survivor(victim)|| zp_get_user_sniper(victim)) continue; // Send the Death message SendDeathMsg(attacker, victim) // Update the frags UpdateFrags(attacker, victim, get_pcvar_num(cvar_fragsinfect), 1, 1) // Kill the victim user_kill(victim, 0) // Set the attackers ammo packs zp_set_user_ammo_packs(attacker,zp_get_user_ammo_packs(attacker) + get_pcvar_num(cvar_ammoinfect)) // Set the attackers health fm_set_user_health(attacker, pev(attacker, pev_health)+get_pcvar_num(cvar_humanbonushp)) } #else while ((victim = engfunc(EngFunc_FindEntityInSphere, victim, originF, RADIUS)) != 0) { // If dead, zombie, survivor then continue the loop if (!is_user_alive(victim) || zp_get_user_zombie(victim) || zp_get_user_survivor(victim)) continue; // Send the Death message SendDeathMsg(attacker, victim) // Update the frags UpdateFrags(attacker, victim, get_pcvar_num(cvar_fragsinfect), 1, 1) // Kill the victim user_kill(victim, 0) // Set the attackers ammo packs zp_set_user_ammo_packs(attacker,zp_get_user_ammo_packs(attacker) + get_pcvar_num(cvar_ammoinfect)) // Set the attackers health fm_set_user_health(attacker, pev(attacker, pev_health)+get_pcvar_num(cvar_humanbonushp)) } #endif // Set the previous blocking state set_msg_block(g_msgDeathMsg, deathmsg_block) // Get the rid of the grenade engfunc(EngFunc_RemoveEntity, ent) } // This function creates the rings when the grenade explodes public create_blast(const Float:originF[3]) { engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0) write_byte(TE_BEAMCYLINDER) // TE id engfunc(EngFunc_WriteCoord, originF[0]) // x engfunc(EngFunc_WriteCoord, originF[1]) // y engfunc(EngFunc_WriteCoord, originF[2]) // z engfunc(EngFunc_WriteCoord, originF[0]) // x axis engfunc(EngFunc_WriteCoord, originF[1]) // y axis engfunc(EngFunc_WriteCoord, originF[2]+385.0) // z axis write_short(g_exploSpr) // sprite write_byte(0) // startframe write_byte(0) // framerate write_byte(4) // life write_byte(60) // width write_byte(0) // noise write_byte(255) // red write_byte(0) // green write_byte(0) // blue write_byte(200) // brightness write_byte(0) // speed message_end() engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0) write_byte(TE_BEAMCYLINDER) // TE id engfunc(EngFunc_WriteCoord, originF[0]) // x engfunc(EngFunc_WriteCoord, originF[1]) // y engfunc(EngFunc_WriteCoord, originF[2]) // z engfunc(EngFunc_WriteCoord, originF[0]) // x axis engfunc(EngFunc_WriteCoord, originF[1]) // y axis engfunc(EngFunc_WriteCoord, originF[2]+470.0) // z axis write_short(g_exploSpr) // sprite write_byte(0) // startframe write_byte(0) // framerate write_byte(4) // life write_byte(60) // width write_byte(0) // noise write_byte(255) // red write_byte(0) // green write_byte(0) // blue write_byte(200) // brightness write_byte(0) // speed message_end() engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0) write_byte(TE_BEAMCYLINDER) // TE id engfunc(EngFunc_WriteCoord, originF[0]) // x engfunc(EngFunc_WriteCoord, originF[1]) // y engfunc(EngFunc_WriteCoord, originF[2]) // z engfunc(EngFunc_WriteCoord, originF[0]) // x axis engfunc(EngFunc_WriteCoord, originF[1]) // y axis engfunc(EngFunc_WriteCoord, originF[2]+555.0) // z axis write_short(g_exploSpr) // sprite write_byte(0) // startframe write_byte(0) // framerate write_byte(4) // life write_byte(60) // width write_byte(0) // noise write_byte(255) // red write_byte(0) // green write_byte(0) // blue write_byte(200) // brightness write_byte(0) // speed message_end() } // Updates the frags of the attacker public UpdateFrags(attacker, victim, frags, deaths, scoreboard) { // Set the frags set_pev(attacker, pev_frags, float(pev(attacker, pev_frags) + frags)) // Set the deaths fm_set_user_deaths(victim, fm_get_user_deaths(victim) + deaths) // Update scoreboard if (scoreboard) { message_begin(MSG_BROADCAST, g_msgScoreInfo) write_byte(attacker) // id write_short(pev(attacker, pev_frags)) // frags write_short(fm_get_user_deaths(attacker)) // deaths write_short(0) // class? write_short(fm_get_user_team(attacker)) // team message_end() message_begin(MSG_BROADCAST, g_msgScoreInfo) write_byte(victim) // id write_short(pev(victim, pev_frags)) // frags write_short(fm_get_user_deaths(victim)) // deaths write_short(0) // class? write_short(fm_get_user_team(victim)) // team message_end() } } // Send the death message public SendDeathMsg(attacker, victim) { message_begin(MSG_BROADCAST, g_msgDeathMsg) write_byte(attacker) // killer write_byte(victim) // victim write_byte(0) // headshot flag write_string("infection") // killer's weapon message_end() } // Replace models public replace_models(id) { if (!is_user_alive(id)) return if(get_user_weapon(id) == CSW_SMOKEGRENADE && has_bomb[id]) { set_pev(id, pev_viewmodel2, model_grenade_infect) set_pev(id, pev_weaponmodel2, p_smokegrenade) } } public message_cur_weapon(msg_id, msg_dest, msg_entity) { replace_models(msg_entity) } give_the_bomb(id) { // Now he haves the bomb! has_bomb[id] = 1 #if defined EDITTED_VERSION // Make sure that the person is not an Assassin or Nemesis if (!zp_get_user_nemesis(id) && !zp_get_user_assassin(id)) // Notify him zp_colored_print(id, "|g|[ZP]|y| %s", info_notice) #else // Person is using a normal ZP 4.3 // Make sure that the person is not a Nemesis if (!zp_get_user_nemesis(id)) // Notify him zp_colored_print(id, "|g|[ZP]|y| %s", info_notice) #endif #if defined EDITTED_VERSION // If the person is Nemesis or Assassin notify him through HUD message if (zp_get_user_nemesis(id) || zp_get_user_assassin(id)) { set_hudmessage(250, 120, 5, -1.0, 0.25, 2, 2.0, 10.0) ShowSyncHudMsg(id, g_SyncMsg,"%s", info_notice2) } #else // Person is using a normal ZP 4.3 // If the person is Nemesis notify him through HUD message if (zp_get_user_nemesis(id)) { set_hudmessage(250, 120, 5, -1.0, 0.25, 2, 2.0, 10.0) ShowSyncHudMsg(id, g_SyncMsg,"%s", info_notice2) } #endif // Already own one if (user_has_weapon(id, CSW_SMOKEGRENADE)) { // Increase BP ammo on it instead cs_set_user_bpammo(id, CSW_SMOKEGRENADE, cs_get_user_bpammo(id, CSW_SMOKEGRENADE) + 1) // Flash the ammo in hud message_begin(MSG_ONE_UNRELIABLE, g_msgAmmoPickup, _, id) write_byte(CSW_SMOKEGRENADE) write_byte(1) message_end() // Play Clip Purchase Sound engfunc(EngFunc_EmitSound, id, CHAN_ITEM, recieving_sound, 1.0, ATTN_NORM, 0, PITCH_NORM) } else // Give weapon to the player fm_give_item(id, "weapon_smokegrenade") } /************************************************************\ | [Stock funtions] | \************************************************************/ stock fm_set_user_deaths(id, value) { set_pdata_int(id, 444, value, 5) } stock fm_get_user_deaths(id) { return get_pdata_int(id, 444, 5) }
stock fm_get_user_team(id) { return get_pdata_int(id, 114, 5) } // Prints chat in colours [ BY meTaLiCroSS ] stock zp_colored_print(const id, const input[], any:...) { new iCount = 1, iPlayers[32] static szMsg[191] vformat(szMsg, charsmax(szMsg), input, 3) replace_all(szMsg, 190, "|g|", "^4") // green txt replace_all(szMsg, 190, "|y|", "^1") // orange txt replace_all(szMsg, 190, "|ctr|", "^3") // team txt replace_all(szMsg, 190, "|w|", "^0") // team txt if(id) iPlayers[0] = id else get_players(iPlayers, iCount, "ch") for (new i = 0; i < iCount; i++) { if (is_user_connected(iPlayers[i])) { message_begin(MSG_ONE_UNRELIABLE, g_msgSayText, _, iPlayers[i]) write_byte(iPlayers[i]) write_string(szMsg) message_end() } } } /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE *{\\ rtf1\\ ansi\\ ansicpg1252\\ deff0\\ deflang2057{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ f0\\ fs16 \n\\ par } */
|
|