So i tried to make the hero, i renamed my hero from AwpLover to Isyz..
PHP Code:
#include <superheromod>
new gHeroID
new gHasIsyz[SH_MAXSLOTS+1]
new bool:gBlockKeyup[SH_MAXSLOTS+1];
new bool:gUsingPower[SH_MAXSLOTS+1];
new bool:gChargeOver[SH_MAXSLOTS+1];
new bool:gPowerKeyUsed[SH_MAXSLOTS+1];
new gLastWeapon[SH_MAXSLOTS+1];
new gPowerID[SH_MAXSLOTS+1];
new const gIsyzAwp[] = "models/shmod/Isyz_awp.mdl"
new const gIsyzDeagle[] = "models/shmod/Isyz_deagle.mdl"
new const gIsyzPlayer[] = "models/player/Isyz/Isyz.mdl"
new const gIsyzNade[] = "models/shmod/Isyz_hegrenade.mdl"
new const gPowerClass[] = "Isyz_kamehameha"
new const gSoundCharge[] = "shmod/Isyz_kamehame.wav"
new const gSoundRelease[] = "shmod/Isyz_ha.wav"
new const gSoundBeam[] = "shmod/esf_beamhead.wav"
new const gModelKamehameha[] = "sprites/shmod/Isyz_kamehameha_purple.spr"
static const burn_decal[3] = {28, 29, 30}
static const burn_decal_big[3] = {46, 47, 48}
new gMsgBarTime, gMaxPlayers
new Trail, Explosion, Smoke;
new g_cvar_tr, g_cvar_he, g_trail
new gSpriteWhite
new pcvarESPRadius, pcvarBeamRadius, pcvarBright, pcvarCoolDown, pcvarMaxDmg, pcvarBurnDecals;
public plugin_init()
{
register_plugin("SUPERHERO Isyz", "1.1", "MuzzMikkel")
new pcvarLevel = register_cvar("Isyz_level", "4");
new pcvarHealth = register_cvar("Isyz_health", "350");
new pcvarArmor = register_cvar("Isyz_armor", "800");
new pcvarSpeed = register_cvar("Isyz_speed", "320");
new pcvarGrav = register_cvar("Isyz_grav", "0.7");
new pcvarAwpMult = register_cvar("Isyz_awpmult", "40.0");
new pcvarDeagleMult = register_cvar("Isyz_deaglemult", "10.0");
new pcvarNadeMult = register_cvar("Isyz_hegrenademult", "50.0");
pcvarCoolDown = register_cvar("Isyz_cooldown", "0.5");
pcvarMaxDmg = register_cvar("Isyz_maxdamage", "250");
pcvarESPRadius = register_cvar("Isyz_esp_radius", "300");
pcvarBurnDecals = register_cvar("Isyz_blast_decals", "1");
pcvarBeamRadius = register_cvar("Isyz_beam_radius", "500");
pcvarBright = register_cvar("Isyz_bright", "192");
pcvarSpeed = register_cvar("Isyz_powerspeed", "1000");
g_cvar_tr = register_cvar("Isyz_grenade_tr", "2");
g_cvar_he = register_cvar("Isyz_grenade_he", "3413934");
gHeroID = sh_create_hero("Isyz", pcvarLevel)
sh_set_hero_info(gHeroID, "Awp Lover!", "Get's a powerfull Awp & deagle & Grenade & Super attack on +power key")
sh_set_hero_bind(gHeroID);
sh_set_hero_dmgmult(gHeroID, pcvarAwpMult, CSW_AWP)
sh_set_hero_dmgmult(gHeroID, pcvarDeagleMult, CSW_DEAGLE)
sh_set_hero_dmgmult(gHeroID, pcvarNadeMult, CSW_HEGRENADE)
sh_set_hero_hpap(gHeroID, pcvarHealth, pcvarArmor)
sh_set_hero_speed(gHeroID, pcvarSpeed)
sh_set_hero_grav(gHeroID, pcvarGrav)
// EVENTS
register_event("CurWeapon", "weapon_change", "be", "1=1")
register_forward(FM_Think, "fm_Think")
register_forward(FM_Touch, "fm_Touch")
gMsgBarTime = get_user_msgid("BarTime")
gMaxPlayers = get_maxplayers()
// ESP Rings Task
set_task(2.0, "Isyz_esploop", _, _, _, "b")
}
public sh_hero_init(id, heroID, mode)
{
if ( gHeroID != heroID ) return
gHasIsyz[id] = mode ? true : false
if ( gPowerID[id] > 0 ) {
remove_power(id, gPowerID[id])
switch(mode)
{
case SH_HERO_ADD:
{
gHasIsyz[id] = true
Isyz_weapons(id)
switch_model(id)
Isyz_morph(id)
}
case SH_HERO_DROP:
{
gHasIsyz[id] = false
Isyz_unmorph(id)
if (is_user_alive(id))
{
sh_drop_weapon(id, CSW_AWP, true)
sh_drop_weapon(id, CSW_DEAGLE, true)
}
}
}
}
public sh_hero_key(id, heroID, key)
{
if ( gHeroID != heroID ) return;
if ( sh_is_freezetime() || !is_user_alive(id) ) return;
switch(key)
{
case SH_KEYDOWN:
{
if ( gPlayerInCooldown[id] )
{
sh_sound_deny(id);
gBlockKeyup[id] = true;
sh_chat_message(id, gHeroID, "Not enough KI, you must wait longer")
return;
}
if ( gPowerID[id] ) {
sh_sound_deny(id)
sh_chat_message(id, gHeroID, "Already using Kamehameha Attack")
return;
}
gLastWeapon[id] = get_user_weapon(id)
engclient_cmd(id, "weapon_knife")
gUsingPower[id] = true
gPowerKeyUsed[id] = true
gChargeOver[id] = false
emit_sound(id, CHAN_STATIC, gSoundCharge, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
progressBar(id, 4)
set_task(4.0, "powerCharged", id)
}
gBlockKeyup[id] = false;
gLastWeapon[id] = get_user_weapon(id);
engclient_cmd(id, "weapon_knife");
fire_wave(id);
new Float:cooldown = get_pcvar_float(pcvarCoolDown);
if (cooldown > 0.0) sh_set_cooldown(id, cooldown);
}
case SH_KEYUP:
if ( !gChargeOver[id] )
remove_task(id)
emit_sound(id, CHAN_STATIC, gSoundCharge, VOL_NORM, ATTN_NORM, SND_STOP, PITCH_NORM)
progressBar(id, 0)
if ( gLastWeapon[id] != CSW_KNIFE ) sh_switch_weapon(id, gLastWeapon[id])
gUsingPower[id] = false
gPowerKeyUsed[id] = false
return;
}
if ( !is_user_alive(id) || !gHasIsyz[id] || !gPowerKeyUsed[id] ) return
emit_sound(id, CHAN_STATIC, gSoundCharge, VOL_NORM, ATTN_NORM, SND_STOP, PITCH_NORM)
emit_sound(id, CHAN_STATIC, gSoundRelease, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
progressBar(id, 0)
set_user_maxspeed(id, 1.0)
create_power(id)
gPowerKeyUsed[id] = false
{
if ( !gBlockKeyup[id] )
{
if (gLastWeapon[id] != CSW_KNIFE) sh_switch_weapon(id, gLastWeapon[id])
}
}
}
public sh_client_spawn(id)
{
if (gHasIsyz[id])
{
Isyz_weapons(id)
Isyz_morph(id)
sh_end_cooldown(id);
gUsingPower[id] = false
gPowerKeyUsed[id] = false
}
}
public weapon_change(id)
{
if ( !sh_is_active() || !gHasIsyz[id] ) return
if(read_data(2) == CSW_AWP || read_data(2) == CSW_DEAGLE || read_data(2) == CSW_HEGRENADE)
{
switch_model(id)
if (read_data(3) == 0)
{
sh_reload_ammo(id, 1)
}
}
}
public plugin_precache()
{
precache_model(gIsyzAwp)
precache_model(gIsyzDeagle)
precache_model(gIsyzNade)
precache_model(gIsyzPlayer)
precache_sound(gSoundCharge)
precache_sound(gSoundRelease)
precache_sound(gSoundBeam)
precache_model(gModelKamehameha)
g_trail = precache_model("sprites/laserbeam.spr");
Trail = precache_model("sprites/shmod/Isyz_trail.spr");
Explosion = precache_model("sprites/shmod/Isyz_exp.spr");
Smoke = precache_model("sprites/wall_puff4.spr");
}
Isyz_weapons(id)
{
if (sh_is_active() && is_user_alive(id) && gHasIsyz[id] )
{
sh_give_weapon(id, CSW_AWP)
sh_give_weapon(id, CSW_DEAGLE)
sh_give_weapon(id, CSW_HEGRENADE)
}
}
switch_model(id)
{
if (!sh_is_active() || !is_user_alive(id) || !gHasIsyz[id] ) return
if ( get_user_weapon(id) == CSW_AWP)
{
set_pev(id, pev_viewmodel2, gIsyzAwp)
}
else if ( get_user_weapon(id) == CSW_DEAGLE)
{
set_pev(id, pev_viewmodel2, gIsyzDeagle)
}
else if ( get_user_weapon(id) == CSW_HEGRENADE)
{
set_pev(id, pev_viewmodel2, gIsyzNade)
}
}
Isyz_morph(id)
{
cs_set_user_model(id, "Isyz!")
}
Isyz_unmorph(id)
{
cs_reset_user_model(id)
}
public grenade_throw(id, gid, wid)
{
if ( !gHasIsyz[id] ) return
new gtm = get_pcvar_num(g_cvar_tr)
if(!gtm) return
new r, g, b
switch(gtm)
{
case 1:
{
r = random(34)
g = random(139)
b = random(34)
}
case 2:
{
new nade, color[10]
switch(wid)
{
case CSW_HEGRENADE: nade = g_cvar_he
}
get_pcvar_string(nade, color, 9)
new c = str_to_num(color)
r = c / 1000000
c %= 1000000
g = c / 1000
b = c % 1000
}
case 3:
{
switch(get_user_team(id))
{
case 1: r = 255
case 2: b = 255
}
}
}
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_BEAMFOLLOW)
write_short(gid)
write_short(g_trail)
write_byte(10)
write_byte(5)
write_byte(r)
write_byte(g)
write_byte(b)
write_byte(192)
message_end()
}
public Isyz_esploop()
{
if ( !sh_is_active() ) return
static players[SH_MAXSLOTS], playerCount, player
static idRing, ringOrigin[3], i, j
static radius, brightness
radius = get_pcvar_num(pcvarESPRadius)
brightness = get_pcvar_num(pcvarBright)
get_players(players, playerCount, "ah")
for ( i = 0; i < playerCount; i++ ) {
player = players[i]
if ( !gHasIsyz[player] ) continue
for ( j = 0; j < playerCount; j++ ) {
idRing = players[j]
if ( idRing == player ) continue
if ( !get_user_origin(idRing, ringOrigin) ) continue
message_begin(MSG_ONE_UNRELIABLE, SVC_TEMPENTITY, ringOrigin, player)
write_byte(TE_BEAMCYLINDER) // 21
write_coord(ringOrigin[0])
write_coord(ringOrigin[1])
write_coord(ringOrigin[2] + 16)
write_coord(ringOrigin[0])
write_coord(ringOrigin[1])
write_coord(ringOrigin[2] + radius)
write_short(gSpriteWhite)
write_byte(0) // startframe
write_byte(1) // framerate
write_byte(6) // life
write_byte(8) // width
write_byte(1) // noise
write_byte(25) // r
write_byte(25) // g
write_byte(112) // b
write_byte(brightness) // brightness
write_byte(0) // speed
message_end()
}
}
}
public powerCharged(id)
{
gChargeOver[id] = true
}
progressBar(id, seconds)
{
message_begin(MSG_ONE_UNRELIABLE, gMsgBarTime, _, id)
write_byte(seconds)
write_byte(0)
message_end()
}
create_power(id)
{
new newEnt = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
if ( !newEnt ) {
sh_chat_message(id, gHeroID, "Power Creation Failure")
return
}
gPowerID[id] = newEnt
set_pev(newEnt, pev_classname, gPowerClass)
engfunc(EngFunc_SetModel, newEnt, gModelKamehameha)
engfunc(EngFunc_SetSize, newEnt, {-2.0, -2.0, -2.0}, {2.0, 2.0, 2.0})
new Float:fl_Origin[3], Float:fl_Angles[3], Float:fl_vAngle[3]
pev(id, pev_origin, fl_Origin)
pev(id, pev_angles, fl_Angles)
pev(id, pev_v_angle, fl_vAngle)
fl_Origin[2] += 6.0
engfunc(EngFunc_SetOrigin, newEnt, fl_Origin)
set_pev(newEnt, pev_angles, fl_Angles)
set_pev(newEnt, pev_v_angle, fl_vAngle)
set_pev(newEnt, pev_solid, SOLID_BBOX)
set_pev(newEnt, pev_movetype, MOVETYPE_FLY)
set_pev(newEnt, pev_rendermode, kRenderTransAdd)
set_pev(newEnt, pev_renderamt, 255.0)
set_pev(newEnt, pev_scale, 1.20)
set_pev(newEnt, pev_owner, id)
new Float:fl_Velocity[3], AimVec[3], Float:fl_EndOrigin[3]
get_user_origin(id, AimVec, 3)
IVecFVec(AimVec, fl_EndOrigin)
sh_get_velocity(fl_Origin, fl_EndOrigin, get_pcvar_float(gPcvarSpeed), fl_Velocity)
set_pev(newEnt, pev_velocity, fl_Velocity)
emit_sound(newEnt, CHAN_STATIC, gSoundBeam, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
// Trail on enity. It's flawed by not being removable, so make it last long.
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_BEAMFOLLOW)
write_short(newEnt) // entity:attachment to follow
write_short(gSpriteTrail) // sprite index
write_byte(100) // life in 0.1's
write_byte(8) // line width in 0.1's
write_byte(255) // r,g,b
write_byte(255)
write_byte(255)
write_byte(255) // brightness
message_end()
new Float:gametime
global_get(glb_time, gametime)
set_pev(newEnt, pev_nextthink, gametime + 0.1)
}
public fm_Think(ent)
{
if ( !pev_valid(ent) ) return FMRES_IGNORED
static classname[32]
classname[0] = '^0'
pev(ent, pev_classname, classname, 31)
if ( !equal(classname, gPowerClass) ) return FMRES_IGNORED
new id = pev(ent, pev_owner)
if ( !is_user_connected(id) ) {
fm_Touch(ent, 0)
return FMRES_IGNORED
}
new Float:fl_Origin[3], AimVec[3], Float:fl_EndOrigin[3], Float:fl_Velocity[3], Float:fl_OldVelocity[3]
new avgFactor
new Float:speed = get_pcvar_float(gPcvarSpeed)
get_user_origin(id, AimVec, 3)
IVecFVec(AimVec, fl_EndOrigin)
pev(ent, pev_origin, fl_Origin)
if ( speed < 1000.0 )
avgFactor = 6
else if ( speed < 1500.0 )
avgFactor = 4
else
avgFactor = 2
sh_get_velocity(fl_Origin, fl_EndOrigin, speed, fl_Velocity)
pev(ent, pev_velocity, fl_OldVelocity)
new oneless = avgFactor-1
fl_Velocity[0] += fl_OldVelocity[0] * oneless
fl_Velocity[1] += fl_OldVelocity[1] * oneless
fl_Velocity[2] += fl_OldVelocity[2] * oneless
fl_Velocity[0] /= avgFactor
fl_Velocity[1] /= avgFactor
fl_Velocity[2] /= avgFactor
set_pev(ent, pev_velocity, fl_Velocity)
new Float:gametime
global_get(glb_time, gametime)
set_pev(ent, pev_nextthink, gametime + 0.1)
return FMRES_IGNORED
}
public fm_Touch(ptr, ptd)
{
if ( !sh_is_active() ) return FMRES_IGNORED
if ( !pev_valid(ptr) ) return FMRES_IGNORED
static classname[32]
classname[0] = '^0'
pev(ptr, pev_classname, classname, 31)
if ( equal(classname, gPowerClass) ) {
new id = pev(ptr, pev_owner)
new Float:dRatio, Float:distanceBetween, damage
new Float:dmgRadius = get_pcvar_float(gPcvarRadius)
new maxDamage = get_pcvar_num(gPcvarMaxDamage)
new CsTeams:idTeam = cs_get_user_team(id)
new FFOn = sh_friendlyfire_on()
new Float:vicOrigin[3]
new Float:fl_vExplodeAt[3]
pev(ptr, pev_origin, fl_vExplodeAt)
for ( new victim = 1; victim <= gMaxPlayers; victim++ )
{
if ( !is_user_alive(victim) ) continue
if ( idTeam == cs_get_user_team(victim) && !FFOn && id != victim ) continue
pev(victim, pev_origin, vicOrigin)
distanceBetween = vector_distance(fl_vExplodeAt, vicOrigin)
if ( distanceBetween <= dmgRadius )
{
dRatio = distanceBetween / dmgRadius
damage = maxDamage - floatround(maxDamage * dRatio)
if (victim == id) damage = floatround(damage / 2.0)
if ( !damage ) damage = 1 // Incase damage cvar is really low cause something if within the radius
sh_extra_damage(victim, id, damage, "Kamehameha", _, SH_DMG_NORM, true, _, fl_vExplodeAt)
new Float:fl_vicVelocity[3]
fl_vicVelocity[0] = ((vicOrigin[0] - fl_vExplodeAt[0]) / distanceBetween) * 300.0
fl_vicVelocity[1] = ((vicOrigin[1] - fl_vExplodeAt[1]) / distanceBetween) * 300.0
fl_vicVelocity[2] = 150.0
set_pev(victim, pev_velocity, fl_vicVelocity)
sh_screen_shake(victim, 1.2, 1.2, 1.2)
}
}
// Make some Effects
new blastSize = floatround(dmgRadius / 12.0)
// Explosion Sprite
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_GLOWSPRITE) //23
engfunc(EngFunc_WriteCoord, fl_vExplodeAt[0])
engfunc(EngFunc_WriteCoord, fl_vExplodeAt[1])
engfunc(EngFunc_WriteCoord, fl_vExplodeAt[2])
write_short(gSpriteExplosion) // model
write_byte(01) // life 0.x sec
write_byte(blastSize) // size
write_byte(255) // brightness
message_end()
// Explosion (smoke, sound/effects)
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_EXPLOSION) //3
engfunc(EngFunc_WriteCoord, fl_vExplodeAt[0])
engfunc(EngFunc_WriteCoord, fl_vExplodeAt[1])
engfunc(EngFunc_WriteCoord, fl_vExplodeAt[2])
write_short(gSpriteSmoke) // model
write_byte(blastSize+5) // scale in 0.1's
write_byte(20) // framerate
write_byte(10) // flags
message_end()
if ( get_pcvar_num(gPcvarDecals) ) {
new decal = random_num(0,2)
if (blastSize > 18) {
decal += 3
}
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_GUNSHOTDECAL) //109
engfunc(EngFunc_WriteCoord, fl_vExplodeAt[0])
engfunc(EngFunc_WriteCoord, fl_vExplodeAt[1])
engfunc(EngFunc_WriteCoord, fl_vExplodeAt[2])
write_short(0) //?
write_byte(gBurnDecal[decal]) //decal
message_end()
}
emit_sound(ptr, CHAN_STATIC, gSoundBeam, VOL_NORM, ATTN_NORM, SND_STOP, PITCH_NORM)
emit_sound(id, CHAN_STATIC, gSoundRelease, VOL_NORM, ATTN_NORM, SND_STOP, PITCH_NORM)
engfunc(EngFunc_RemoveEntity, ptr)
new Float:cooldown = get_pcvar_float(gPcvarCooldown)
if ( cooldown > 0.0 ) sh_set_cooldown(id, cooldown)
gPowerID[id] = 0
gUsingPower[id] = false
if ( gLastWeapon[id] != CSW_KNIFE ) sh_switch_weapon(id, gLastWeapon[id])
else sh_reset_max_speed(id)
}
return FMRES_IGNORED
}
public remove_power(id, powerID)
{
new Float:fl_vOrigin[3]
pev(powerID, pev_origin, fl_vOrigin)
// Create an effect of kamehameha being removed
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_IMPLOSION) //14
engfunc(EngFunc_WriteCoord, fl_vOrigin[0])
engfunc(EngFunc_WriteCoord, fl_vOrigin[1])
engfunc(EngFunc_WriteCoord, fl_vOrigin[2])
write_byte(120) // radius
write_byte(40) // count
write_byte(45) // life in 0.1's
message_end()
gPowerID[id] = 0
gUsingPower[id] = false
emit_sound(powerID, CHAN_STATIC, gSoundBeam, VOL_NORM, ATTN_NORM, SND_STOP, PITCH_NORM)
emit_sound(id, CHAN_STATIC, gSoundRelease, VOL_NORM, ATTN_NORM, SND_STOP, PITCH_NORM)
engfunc(EngFunc_RemoveEntity, powerID)
if ( is_user_connected(id) ) {
if ( gLastWeapon[id] != CSW_KNIFE ) sh_switch_weapon(id, gLastWeapon[id])
else sh_reset_max_speed(id)
}
}
public sh_round_end()
{
for ( new id = 1; id <= gMaxPlayers; id++ ) {
if ( gHasIsyz[id] && gPowerID[id] > 0 ) {
remove_power(id, gPowerID[id])
}
}
}
public client_disconnect(id)
{
if( gHasIsyz[id] && gPowerID[id] > 0) {
remove_power(id, gPowerID[id])
}
}