Code:
//The Boss from MSG3
/*CVARS - copy and paste to shconfig.cfg
//The Boss
boss_level 3 //level
boss_health 100 //health default 100
boss_speed 500 //speed
boss_m249multi 1.15 //m249 damage multi default 1.15 (do nto make any higher than 1.5, or 1 shot kill)
boss_invis 65 //default 65 = 25%
*/
#include <amxmod>
#include <vexd_utilities>
#include <superheromod>
// GLOBAL VARIABLES
new gHeroName[]="Boss"
new bool:gHasBossPower[SH_MAXSLOTS+1]
new gIsInvisible[SH_MAXSLOTS+1]
//----------------------------------------------------------------------------------------------
public plugin_init()
{
// Plugin Info
register_plugin("SUPERHERO The Boss", "1.0", "sk8er/w3r3wolf")
// DO NOT EDIT THIS FILE TO CHANGE CVARS, USE THE SHCONFIG.CFG
register_cvar("boss_level", "3")
register_cvar("boss_health", "100")
register_cvar("boss_speed", "500")
register_cvar("boss_m249multi", "1.15")
register_cvar("boss_invis", "65")
// FIRE THE EVENT TO CREATE THIS SUPERHERO!
shCreateHero(gHeroName, "The Boss", "Be The Boss and invis/para model", false, "boss_level" )
// REGISTER EVENTS THIS HERO WILL RESPOND TO! (AND SERVER COMMANDS)
// INIT
register_srvcmd("boss_init", "boss_init")
shRegHeroInit(gHeroName, "boss_init")
register_event("ResetHUD", "newSpawn", "b")
register_event("CurWeapon", "weaponChange", "be", "1=1")
register_event("Damage", "boss_damage", "b", "2!0")
register_event("DeathMsg", "boss_death", "a")
// Let Server know about The Boss' Variables
shSetShieldRestrict(gHeroName)
shSetMaxHealth(gHeroName, "boss_health")
shSetMaxSpeed(gHeroName, "boss_speed", "[0]")
}
//----------------------------------------------------------------------------------------------
public plugin_precache()
{
precache_model("models/shmod/boss_v_m249.mdl")
precache_model("models/shmod/boss_p_m249.mdl")
}
//----------------------------------------------------------------------------------------------
public boss_init()
{
// First Argument is an id
new temp[6]
read_argv(1,temp,5)
new id = str_to_num(temp)
// 2nd Argument is 0 or 1 depending on whether the id has The Boss
read_argv(2,temp,5)
new hasPowers = str_to_num(temp)
gHasBossPower[id] = (hasPowers != 0)
//Reset thier shield restrict status
//Shield restrict MUST be before weapons are given out
shResetShield(id)
if ( is_user_connected(id) ) {
if ( gHasBossPower[id] ) {
boss_weapons(id)
switchmodel(id)
}
else {
engclient_cmd(id, "drop", "weapon_m249")
shRemHealthPower(id)
shRemSpeedPower(id)
if ( !gHasBossPower[id] ) remInvisibility(id)
}
}
}
//----------------------------------------------------------------------------------------------
public newRound(id)
{
remInvisibility(id)
}
//----------------------------------------------------------------------------------------------
public newSpawn(id)
{
if ( gHasBossPower[id] && is_user_alive(id) && shModActive() ) {
set_task(0.1, "boss_weapons", id)
new clip, ammo, wpnid = get_user_weapon(id,clip,ammo)
if (wpnid != CSW_M249 && wpnid > 0) {
new wpn[32]
get_weaponname(wpnid,wpn,31)
engclient_cmd(id,wpn)
}
}
}
//----------------------------------------------------------------------------------------------
public boss_weapons(id)
{
if ( is_user_alive(id) ) {
shGiveWeapon(id,"weapon_m249")
}
}
//----------------------------------------------------------------------------------------------
public switchmodel(id)
{
if ( !is_user_alive(id) || !gHasBossPower[id] ) return
new clip, ammo, wpnid = get_user_weapon(id,clip,ammo)
if (wpnid == CSW_M249) {
Entvars_Set_String(id, EV_SZ_viewmodel, "models/shmod/boss_v_m249.mdl")
Entvars_Set_String(id, EV_SZ_weaponmodel, "models/shmod/boss_p_m249.mdl")
}
}
//----------------------------------------------------------------------------------------------
public weaponChange(id)
{
if ( !gHasBossPower[id] || !shModActive() ) return
new wpnid = read_data(2)
new clip = read_data(3)
if ( wpnid != CSW_M249 ) return
switchmodel(id)
// Unlimited ammo
if ( clip == 0 ) {
shReloadAmmo(id)
}
}
//----------------------------------------------------------------------------------------------
public boss_damage(id)
{
if (!shModActive() || !is_user_alive(id)) return
new damage = read_data(2)
new weapon, bodypart, attacker = get_user_attacker(id, weapon, bodypart)
new headshot = bodypart == 1 ? 1 : 0
if ( attacker <= 0 || attacker > SH_MAXSLOTS ) return
if ( gHasBossPower[attacker] && weapon == CSW_M249 && is_user_alive(id) ) {
// do extra damage
new extraDamage = floatround(damage * get_cvar_float("boss_m249multi") - damage)
if (extraDamage > 0) shExtraDamage( id, attacker, extraDamage, "m249", headshot )
}
}
//----------------------------------------------------------------------------------------------
public setInvisibility(id, alpha)
{
if (alpha < 125) {
set_user_rendering(id,kRenderFxGlowShell,8,8,8,kRenderTransAlpha,alpha)
}
else {
set_user_rendering(id,kRenderFxNone,0,0,0,kRenderTransAlpha,alpha)
}
}
//----------------------------------------------------------------------------------------------
public remInvisibility(id)
{
gStillTime[id] = 0 ;
if (gIsInvisible[id] > 0) {
shUnglow(id)
}
gIsInvisible[id] = 0
}
//----------------------------------------------------------------------------------------------
public checkButtons()
{
if ( !hasRoundStarted() || !shModActive()) return
new bool:setVisible
new butnprs
for(new id = 1; id <= SH_MAXSLOTS; id++) {
if (!is_user_alive(id) || !gHasBossPower[id]) continue
setVisible = false
butnprs = Entvars_Get_Int(id, EV_INT_button)
//Always check these
if (butnprs&IN_ATTACK || butnprs&IN_ATTACK2 || butnprs&IN_RELOAD || butnprs&IN_USE) setVisible = true
//Only check these if invisman_checkmove is off
//if ( get_cvar_num("invisman_checkmove") ) {
//if (butnprs&IN_JUMP) setVisible = true
//if (butnprs&IN_FORWARD || butnprs&IN_BACK || butnprs&IN_LEFT || butnprs&IN_RIGHT) setVisible = true
//if (butnprs&IN_MOVELEFT || butnprs&IN_MOVERIGHT) setVisible = true
}
if (setVisible) remInvisibility(id)
else {
new sysTime = get_systime()
if ( gStillTime[id] < 0 ) {
gStillTime[id] = sysTime
}
if ( sysTime - delay >= gStillTime[id] ) {
gIsInvisible[id] = 100
setInvisibility(id, get_cvar_num("boss_invis"))
}
else if ( sysTime > gStillTime[id] ) {
new alpha = get_cvar_num("boss_invis")
new Float:prcnt = float(sysTime - gStillTime[id]) / float(delay)
new rPercent = floatround(prcnt * 100)
alpha = floatround(255 - ((255 - alpha) * prcnt) )
gIsInvisible[id] = rPercent
setInvisibility(id, alpha)
}
}
}
}
//----------------------------------------------------------------------------------------------