PHP Code:
// ZEUS!
/* CVARS - copy and paste to shconfig.cfg
//Zeus
zeus_level 0
zeus_chance 0.05 //Slay chance
zeus_burndecals 1 //Show the burn decals on the floor
zeus_workinside 0 //Allow zeus to work inside buidings and so on
*/
//---------- User Changeable Defines --------//
// Comment out to use aztec thunder sound, removing the download of a custom thunder sound
// Note: If you change anything here from default setting you must recompile the plugin
//#define USE_AZTEC_THUNDER_SOUND
//------- Do not edit below this point ------//
#include <superheromod>
// GLOBAL VARIABLES
new gHeroID
new const gHeroName[] = "Zeus"
new bool:gHasZeus[SH_MAXSLOTS+1]
new bool:gIsInvisible[SH_MAXSLOTS+1]
new gBurnDecal
new gSpriteLightning, gSpriteSmoke
#if defined USE_AZTEC_THUNDER_SOUND
new const gSoundThunder[] = "ambience/thunder_clap.wav"
#else
new const gSoundThunder[] = "shmod/zeus_lightningbolt.wav"
#endif
new gPcvarChance, gPcvarWorkInside, gPcvarBurnDecals
//----------------------------------------------------------------------------------------------
public plugin_init()
{
// Plugin Info
register_plugin("SUPERHERO Zeus", "1.0", "Fr33m@n")
// DO NOT EDIT THIS FILE TO CHANGE CVARS, USE THE SHCONFIG.CFG
new pcvarLevel = register_cvar("zeus_level", "0")
gPcvarChance = register_cvar("zeus_chance", "0.05")
gPcvarWorkInside = register_cvar("zeus_workinside", "0")
gPcvarBurnDecals = register_cvar("zeus_burndecals", "1")
// FIRE THE EVENT TO CREATE THIS SUPERHERO!
gHeroID = sh_create_hero(gHeroName, pcvarLevel)
sh_set_hero_info(gHeroID, "Divine Lightning Bolt", "Zeus give you a chance to slay your victim with his Lightning Bolt")
// Set to correct burn decals if mod is CZ or CS
gBurnDecal = engfunc(EngFunc_DecalIndex, "{scorch3")
}
//----------------------------------------------------------------------------------------------
public plugin_precache()
{
gSpriteLightning = precache_model("sprites/lgtning.spr")
gSpriteSmoke = precache_model("sprites/steam1.spr")
precache_sound(gSoundThunder)
}
//----------------------------------------------------------------------------------------------
public sh_hero_init(id, heroID, mode)
{
if ( gHeroID != heroID ) return
admincheck(id);
gHasZeus[id] = mode ? true : false
sh_debug_message(id, 1, "%s %s", gHeroName, mode ? "ADDED" : "DROPPED")
}
//----------------------------------------------------------------------------------------------
public sh_client_spawn(id)
{
admincheck2(id)
// if user is invisible, reset invisibility
if ( gIsInvisible[id] ) {
sh_set_rendering(id)
}
gIsInvisible[id] = false
}
//----------------------------------------------------------------------------------------------
public client_damage(attacker, victim, damage, wpnindex)
{
if ( !sh_is_active() ) return
if ( !is_user_connected(victim) || !is_user_alive(attacker) ) return
if ( gHasZeus[attacker] && wpnindex != (CSW_KNIFE | CSW_HEGRENADE) && random_float(0.0, 1.0) <= get_pcvar_float(gPcvarChance) ) {
// Get the origin of the victim's feet
new Float:fl_Origin[3]
pev(victim, pev_origin, fl_Origin)
fl_Origin[2] -= (pev(victim, pev_flags) & FL_DUCKING) ? 18.0 : 36.0
if ( !get_pcvar_num(gPcvarWorkInside) ) {
new Float:fl_TraceEnd[3], Float:fl_EndPos[3]
fl_TraceEnd[0] = fl_Origin[0] + 1500.0
fl_TraceEnd[1] = fl_Origin[1] + 1500.0
fl_TraceEnd[2] = fl_Origin[2] + 8000.0
new ptr = create_tr2()
engfunc(EngFunc_TraceLine, fl_Origin, fl_TraceEnd, IGNORE_MONSTERS, victim, ptr)
get_tr2(ptr, TR_vecEndPos, fl_EndPos)
free_tr2(ptr)
// Check if the victim is under the sky or not
if ( engfunc(EngFunc_PointContents, fl_EndPos) != CONTENTS_SKY ) return
}
thunder_effects(fl_Origin)
sh_extra_damage(victim, attacker, damage, "Lightning Bolt", 0, SH_DMG_KILL)
// Make the corpse invisible
sh_set_rendering(victim, 0, 0, 0, 0, kRenderFxGlowShell, kRenderTransAlpha)
gIsInvisible[victim] = true
}
}
//----------------------------------------------------------------------------------------------
thunder_effects(Float:fl_Origin[3])
{
new Float:fX = fl_Origin[0], Float:fY = fl_Origin[1], Float:fZ = fl_Origin[2]
// Thunder sound
emit_sound(0, CHAN_ITEM, gSoundThunder, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
// Beam effect between two points
engfunc(EngFunc_MessageBegin, MSG_BROADCAST, SVC_TEMPENTITY, fl_Origin, 0)
write_byte(TE_BEAMPOINTS) // 0
engfunc(EngFunc_WriteCoord, fX + 150.0) // start position
engfunc(EngFunc_WriteCoord, fY + 150.0)
engfunc(EngFunc_WriteCoord, fZ + 800.0)
engfunc(EngFunc_WriteCoord, fX) // end position
engfunc(EngFunc_WriteCoord, fY)
engfunc(EngFunc_WriteCoord, fZ)
write_short(gSpriteLightning) // sprite index
write_byte(1) // starting frame
write_byte(15) // frame rate in 0.1's
write_byte(10) // life in 0.1's
write_byte(80) // line width in 0.1's
write_byte(30) // noise amplitude in 0.01's
write_byte(255) // red
write_byte(255) // green
write_byte(255) // blue
write_byte(255) // brightness
write_byte(200) // scroll speed in 0.1's
message_end()
// Sparks
message_begin(MSG_PVS, SVC_TEMPENTITY)
write_byte(TE_SPARKS) // 9
engfunc(EngFunc_WriteCoord, fX) // position
engfunc(EngFunc_WriteCoord, fY)
engfunc(EngFunc_WriteCoord, fZ + 10.0)
message_end()
// Smoke
engfunc(EngFunc_MessageBegin, MSG_BROADCAST, SVC_TEMPENTITY, fl_Origin, 0)
write_byte(TE_SMOKE) // 5
engfunc(EngFunc_WriteCoord, fX) // position
engfunc(EngFunc_WriteCoord, fY)
engfunc(EngFunc_WriteCoord, fZ + 10.0)
write_short(gSpriteSmoke) // sprite index
write_byte(10) // scale in 0.1's
write_byte(10) // framerate
message_end()
// Blood
engfunc(EngFunc_MessageBegin, MSG_BROADCAST, SVC_TEMPENTITY, fl_Origin, 0)
write_byte(TE_LAVASPLASH) // 10
engfunc(EngFunc_WriteCoord, fX) // position
engfunc(EngFunc_WriteCoord, fY)
engfunc(EngFunc_WriteCoord, fZ + 12.0)
message_end()
if ( get_pcvar_num(gPcvarBurnDecals) ) {
// Burn decal
engfunc(EngFunc_MessageBegin, MSG_BROADCAST, SVC_TEMPENTITY, fl_Origin, 0)
write_byte(TE_GUNSHOTDECAL) // 109
engfunc(EngFunc_WriteCoord, fX) // position
engfunc(EngFunc_WriteCoord, fY)
engfunc(EngFunc_WriteCoord, fZ)
write_short(0)
write_byte(gBurnDecal + random(3)) // decal
message_end()
}
}
//----------------------------------------------------------------------------------------------
public admincheck(id) {
new accessLevel[10] = "b"
if (!(get_user_flags(id)&read_flags(accessLevel)) ) {
client_print(id, print_chat, "[SH](%s) **Hero somente para admin**", gHeroName)
gHasZeus[id] = false
client_cmd(id, "say drop %s", gHeroName)
}else{
gHasZeus[id] = true;
}
}
//----------------------------------------------------------------------------------------------
public admincheck2(id) {
new accessLevel[10] = "b"
if (!(get_user_flags(id)&read_flags(accessLevel)) ) {
//
}else{
gHasZeus[id] = true;
}
}
//----------------------------------------------------------------------------------------------
public client_connect(id)
{
admincheck2(id)
}
//----------------------------------------------------------------------------------------------