try this and download the laser model from cyclops and add it in the sprites/shmod folder
Code:
#include <superheromod>
new gHeroID
new gHeroName[] = "Ultimater"
new bool:gHasUltimater[SH_MAXSLOTS+1]
new bool:gUsingLaser[SH_MAXSLOTS+1]
new const gReviveSound[] = "ambience/port_suckin1.wav"
new const gUltimaterKnife[] = "models/shmod/chucky_knife.mdl"
new const gUltimaterDeagle[] = "models/shmod/ultimater_deagle.mdl"
new gLaserSound[] = "weapons/electro5.wav"
new gBeam
new gSmoke
new gBurnDecal
new pCvarDmg, pCvarCool, pCvarMultiShot, pCvarBurnDecals, pCvarHealth, pCvarArmor, pCvarGrav, pCvarSpeed, pCvarKnifeMult, pCvarDeagleMult
public plugin_init()
{
register_plugin("SUPERHERO Beam Test", "0.1", "MuzzMikkel")
new pCvarLevel = register_cvar("Ultimater_level", "1")
pCvarHealth = register_cvar("Ultimater_health", "500")
pCvarArmor = register_cvar("Ultimater_armor", "400")
pCvarGrav = register_cvar("Ultimater_gravity", "0.4")
pCvarSpeed = register_cvar("Ultimater_speed", "350")
pCvarKnifeMult = register_cvar("Ultimater_knifemult", "3.5")
pCvarDeagleMult = register_cvar("Ultimater_deaglemult", "3.0")
pCvarCool = register_cvar("Ultimater_cooldown", "0.1")
pCvarDmg = register_cvar("Ultimater_dmg", "100")
pCvarMultiShot = register_cvar("Ultimater_multishot", "0.1")
pCvarBurnDecals = register_cvar("Ultimater_burndecals", "1")
gHeroID = sh_create_hero(gHeroName, pCvarLevel)
sh_set_hero_info(gHeroID, "Ultimater strongest hero in town!", "Beam, Respawn upon death, Powerfull knife & deagle.")
sh_set_hero_bind(gHeroID)
sh_set_hero_hpap(gHeroID, pCvarHealth, pCvarArmor)
sh_set_hero_grav(gHeroID, pCvarGrav)
sh_set_hero_speed(gHeroID, pCvarSpeed)
sh_set_hero_dmgmult(gHeroID, pCvarKnifeMult, CSW_KNIFE)
sh_set_hero_dmgmult(gHeroID, pCvarDeagleMult, CSW_DEAGLE)
// Set to correct burn decals if mod is CZ or CS
gBurnDecal = engfunc(EngFunc_DecalIndex, "{bigshot5")
//CurWeapon
register_event("CurWeapon", "weapon_change", "be", "1=1")
}
public plugin_precache()
{
gBeam = precache_model("sprites/shmod/beam.spr")
gSmoke = precache_model("sprites/laserbeam.spr")
precache_sound(gLaserSound)
precache_sound(gReviveSound)
precache_model(gUltimaterKnife)
precache_model(gUltimaterDeagle)
}
public sh_hero_init(id, heroid, mode)
{
if ( heroid == gHeroID )
switch(mode)
{
case SH_HERO_ADD:
{
gHasUltimater[id] = true
gPlayerInCooldown[id] = false
Ultimater_weapons(id)
switch_model(id)
}
case SH_HERO_DROP:
{
gHasUltimater[id] = false
sh_drop_weapon(id, CSW_DEAGLE, true)
}
}
}
public sh_hero_key(id, heroID, key)
{
if (gHeroID != heroID || gPlayerInCooldown[id] || !is_user_alive(id)) return
switch(key)
{
case SH_KEYDOWN:
{
new Float:delayTime = get_pcvar_float(pCvarMultiShot)
if ( delayTime >= 0.1 )
{
set_task(delayTime, "fire_attack", id, _, _, "b")
}
fire_attack(id)
if ( gPlayerInCooldown[id] )
{
sh_sound_deny(id)
return
}
gUsingLaser[id] = true
}
case SH_KEYUP: {
remove_task(id)
if ( sh_is_freezetime() || !gUsingLaser[id] ) return
new Float:seconds = get_pcvar_float(pCvarCool)
if ( seconds > 0.0 ) sh_set_cooldown(id, seconds)
gUsingLaser[id] = false
}
}
}
public sh_client_spawn(id)
{
if (gHasUltimater[id])
{
remove_task(id)
gUsingLaser[id] = false
gPlayerInCooldown[id] = false
Ultimater_weapons(id)
}
}
public fire_attack(id)
{
new aimvec[3]
new tid, tbody, damage
damage = get_pcvar_num(pCvarDmg)
get_user_aiming(id, tid, tbody)
get_user_origin(id, aimvec, 3)
attack_effects(id, aimvec)
if ( is_user_alive(tid) && (cs_get_user_team(id) != cs_get_user_team(tid) || sh_friendlyfire_on()) )
{
sh_extra_damage(tid, id, damage, "Ultimater", SH_DMG_NORM)
}
}
public attack_effects(id, aimvec[3])
{
emit_sound(id, CHAN_ITEM, gLaserSound, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
new origin[3]
get_user_origin(id, origin, 1)
// Beam effect between two points
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_BEAMPOINTS) // 0
write_coord(origin[0])
write_coord(origin[1])
write_coord(origin[2])
write_coord(aimvec[0])
write_coord(aimvec[1])
write_coord(aimvec[2])
write_short(gBeam)
write_byte(1) // framestart
write_byte(5) // framerate
write_byte(2) // life
write_byte(40) // width
write_byte(0) // noise
write_byte(255) // r, g, b
write_byte(250) // r, g, b
write_byte(250) // r, g, b
write_byte(200) // brightness
write_byte(200) // speed
message_end()
// DELIGHT
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(27)
write_coord(origin[0]) //pos
write_coord(origin[1])
write_coord(origin[2])
write_byte(10)
write_byte(255) // r, g, b
write_byte(250) // r, g, b
write_byte(250) // r, g, b
write_byte(2) // life
write_byte(1) // decay
message_end()
// Sparks
message_begin(MSG_PVS, SVC_TEMPENTITY)
write_byte(TE_SPARKS) // 9
write_coord(aimvec[0])
write_coord(aimvec[1])
write_coord(aimvec[2])
message_end()
// Smoke
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_SMOKE) // 5
write_coord(aimvec[0])
write_coord(aimvec[1])
write_coord(aimvec[2])
write_short(gSmoke)
write_byte(22) // 10
write_byte(10) // 10
message_end()
if ( get_pcvar_num(pCvarBurnDecals) )
{
// decal and ricochet sound
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(109) // TE_GUNSHOTDECAL
write_coord(aimvec[0]) //pos
write_coord(aimvec[1])
write_coord(aimvec[2])
write_short(0) // I have no idea what thats supposed to be
write_byte(gBurnDecal + random_num(0, 4)) //decal
message_end()
}
}
public weapon_change(id)
{
if ( !sh_is_active() || !gHasUltimater[id] ) return
if(read_data(2) == CSW_KNIFE || read_data(2) == CSW_DEAGLE)
{
switch_model(id)
if (read_data(3) == 0)
{
sh_reload_ammo(id, 1)
}
}
}
Ultimater_weapons(id)
{
if (sh_is_active() && is_user_alive(id) && gHasUltimater[id] )
{
sh_give_weapon(id, CSW_DEAGLE)
}
}
switch_model(id)
{
if (!sh_is_active() || !is_user_alive(id) || !gHasUltimater[id] ) return
if ( get_user_weapon(id) == CSW_KNIFE)
{
set_pev(id, pev_viewmodel2, gUltimaterKnife)
}
else if ( get_user_weapon(id) == CSW_DEAGLE )
{
set_pev(id, pev_viewmodel2, gUltimaterDeagle)
}
}
public sh_client_death(victim, attacker)
{
if ( !sh_is_active() || !sh_is_inround() ) return
if ( !is_user_connected(victim) || is_user_alive(victim) || !gHasUltimater[victim] || random_num(1, 2) != 1 || gPlayerInCooldown[victim]) return
if ( victim == attacker ) return
set_task(0.5, "Ultimater_respawn", victim)
}
public Ultimater_respawn(id)
{
if ( !is_user_connected(id) || is_user_alive(id) || !sh_is_inround() ) return
ExecuteHamB(Ham_CS_RoundRespawn, id)
emit_sound(id, CHAN_STATIC, gReviveSound, 1.0, ATTN_NORM, 0, PITCH_NORM)
sh_chat_message(id, gHeroID, "You used Ultimater's powers to revive yourself.")
new Float:cooldown = get_pcvar_float(pCvarCool)
if ( cooldown > 0.0 ) {
gPlayerInCooldown[id] = true
set_task(cooldown, "enable_ultimater", id)
}
}
public enable_ultimater(id)
{
gPlayerInCooldown[id] = false
}