Senior Member
Join Date: Dec 2005
Location: Thunderstorm Central
|
07-10-2012
, 09:08
Re: help with "vegetto".. loading wrong sprites
|
#3
|
as for vegetto this could be done a much better way, but I'm too tired so went for the quick fix
PHP Code:
/* * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* AMX (Superhero Mod) Hero: Vegetto
*
*This hero is made by The Art of War, one of the clan leaders of Red Doom [RD]
*
*Edited - Remade - Improved by [Red-Doom]
* Last Update: 7th April 2010
*
* -Contact-
* RD's website - http://www.reddoom.com/
* Superhero Mods forum - http://forums.alliedmods.net/forumdisplay.php?f=30
*
* -Updates-
* v0.1 - Changed Sprites/Sounds
* v0.2 - Changed CVars and permanent name
* v1.0 - Fixed a CVar bug
* v1.1 - Additional sprite changes, added custom sounds and new HUD messages
* v1.2 - Modified the hero to play a sound and show a HUD message before any level is gained by AP.
*
* -Credits-
* Credits go to the original authors of Goku and to Mr.V (another [RD] owner) for fixing the cvars and names so it works together with Goku.
* This is a ripp.
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* CVARS - Copy/Paste into shconfig.cfg
//Vegetto
vegetto_level 10 //Level required to use (Default 10)
vegetto_aps 100 //The amount of AP gained per second (Default 5)
vegetto_ap_mult 500 //AP amount multiplied by ssjlevel = AP required for each ssjlevel and cost of ssjlevel power use (Default 250)
vegetto_hp_mult 150 //HP amount multiplied by ssjlevel, ex. 30*ssj2 = +60HP (Default 30)
vegetto_hp_max 2000 //Max HP that can be gained (Default 500)
vegetto_speed_base 450 //Initial Speed boost for ssjlevel 1, only sets if you are slower (Default 300)
vegetto_speed_add 50 //Speed added to vegetto_speedbase every next ssjlevel (Default 25)
vegetto_power_1 70 //Max Damage for ssjlevel 1 power (Default 70)
vegetto_power_2 100 //Max Damage for ssjlevel 2 power (Default 100)
vegetto_power_3 175 //Max Damage for ssjlevel 3 power (Default 175)
vegetto_power_4 300 //Max Damage for ssjlevel 4 power (Default 300)
vegetto_radius_1 100 //Max Radius of Damage for ssjlevel 1th power (Default 100)
vegetto_radius_2 300 //Max Radius of Damage for ssjlevel 2th power (Default 300)
vegetto_radius_3 700 //Max Radius of Damage for ssjlevel 3th power (Default 700)
vegetto_radius_4 1500 //Max Radius of Damage for ssjlevel 4th power (Default 1500)
vegetto_decals 1 //Show the burn decals on the walls (0-no 1-yes) (Default 1)
*/
#include <amxmod>
#include <Vexd_Utilities>
#include <superheromod>
// GLOBAL VARIBLES
new g_heroName[]="Vegetto"
new bool:g_hasVegetto[SH_MAXSLOTS+1]
new bool:g_weaponSwitched[SH_MAXSLOTS+1]
new bool:g_inStun[SH_MAXSLOTS+1]
new bool:g_betweenRounds
new g_isSaiyanLevel[SH_MAXSLOTS+1]
new g_powerNum[SH_MAXSLOTS+1]
new g_powerID[SH_MAXSLOTS+1]
new g_maxRadius[SH_MAXSLOTS+1]
new g_maxDamage[SH_MAXSLOTS+1]
new g_lastWeapon[SH_MAXSLOTS+1]
new g_prevWeapon[SH_MAXSLOTS+1]
new g_ssjLevel[4]
new Float:g_ssjSpeed[4]
new g_armorPts, g_spriteSmoke, g_spriteTrailY, g_spriteTrailB, g_spriteTrailR
new g_spriteExplosionG, g_spriteExplosionB, g_spriteExplosionR, g_spriteExplosionO
new g_spritePowerUp1, g_spritePowerUp2, g_spritePowerUp3, g_spritePowerUp4
static const g_burnDecal[3] = {28, 29, 30}
static const g_burnDecalBig[3] = {46, 47, 48}
//----------------------------------------------------------------------------------------------
public plugin_init()
{
// Plugin Info
register_plugin("SUPERHERO Vegetto", "0.2", "|RIC|_ALBANIAN / 0 / vittu / RD")
// DO NOT EDIT THIS FILE TO CHANGE CVARS, USE THE SHCONFIG.CFG
register_cvar("vegetto_level", "10")
register_cvar("vegetto_aps", "5")
register_cvar("vegetto_ap_mult", "250")
register_cvar("vegetto_hp_mult", "30")
register_cvar("vegetto_hp_max", "500")
register_cvar("vegetto_speed_base", "300")
register_cvar("vegetto_speed_add", "25")
register_cvar("vegetto_power_1", "50")
register_cvar("vegetto_power_2", "80")
register_cvar("vegetto_power_3", "150")
register_cvar("vegetto_power_4", "300")
register_cvar("vegetto_radius_1", "100")
register_cvar("vegetto_radius_2", "300")
register_cvar("vegetto_radius_3", "700")
register_cvar("vegetto_radius_4", "1500")
register_cvar("vegetto_decals", "1")
// FIRE THE EVENT TO CREATE THIS SUPERHERO!
shCreateHero(g_heroName, "Void Walker", "Absorb energy through the void and release the void-power in this dimension to create immense destruction!", true, "vegetto_level")
// REGISTER EVENTS THIS HERO WILL RESPOND TO! (AND SERVER COMMANDS)
// INIT
register_srvcmd("vegetto_init", "vegetto_init")
shRegHeroInit(g_heroName, "vegetto_init")
// KEY DOWN
register_srvcmd("vegetto_kd", "vegetto_kd")
shRegKeyDown(g_heroName, "vegetto_kd")
// KEY UP
register_srvcmd("vegetto_ku", "vegetto_ku")
shRegKeyUp(g_heroName, "vegetto_ku")
// EVENTS
register_event("ResetHUD", "newSpawn", "b")
register_event("CurWeapon", "curweapon", "be", "1=1")
// LOG EVENTS
register_logevent("round_start", 2, "1=Round_Start")
register_logevent("round_end", 2, "1=Round_End")
register_logevent("round_end", 2, "1&Restart_Round_")
// LOOP
set_task(1.0, "vegetto_loop", _, _, _, "b")
}
//----------------------------------------------------------------------------------------------
public plugin_precache()
{
precache_sound("shmod/vegeto_galitgun.wav")
precache_sound("shmod/vegeto_finalflashb.wav")
precache_sound("shmod/vegeto_bigbang.wav")
precache_sound("shmod/vegeto_deathball.wav")
precache_sound("shmod/vegetto_powerup1.wav")
precache_sound("shmod/vegetto_powerup2.wav")
precache_sound("shmod/vegetto_powerup3.wav")
precache_sound("shmod/vegetto_powerup4.wav")
precache_sound("player/pl_pain2.wav")
precache_model("sprites/shmod/gallitguna2.spr")
precache_model("sprites/shmod/finalflashcharge.spr")
precache_model("sprites/shmod/bigbang.spr")
precache_model("sprites/shmod/deathball2.spr")
g_spriteTrailY = precache_model("sprites/shmod/gallitguntrail2.spr")
g_spriteTrailB = precache_model("sprites/shmod/finalflashtrail.spr")
g_spriteTrailR = precache_model("sprites/shmod/bigbangtrail.spr")
g_spriteExplosionG = precache_model("sprites/shmod/gallitguna2.spr")
g_spriteExplosionB = precache_model("sprites/shmod/finalflashb.spr")
g_spriteExplosionR = precache_model("sprites/shmod/bigbangexp2.spr")
g_spriteExplosionO = precache_model("sprites/shmod/deathball2.spr")
g_spritePowerUp1 = precache_model("sprites/shmod/vegetto_powerup1.spr")
g_spritePowerUp2 = precache_model("sprites/shmod/vegetto_powerup2.spr")
g_spritePowerUp3 = precache_model("sprites/shmod/vegetto_powerup3.spr")
g_spritePowerUp4 = precache_model("sprites/shmod/vegetto_powerup4.spr")
g_spriteSmoke = precache_model("sprites/wall_puff4.spr")
}
//----------------------------------------------------------------------------------------------
public vegetto_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 hero
read_argv(2,temp,5)
new hasPowers = str_to_num(temp)
if ( hasPowers ) {
vegetto_setarmor(id)
}
//This gets run if they had the power but don't anymore
else if ( !hasPowers && g_hasVegetto[id] ) {
shRemArmorPower(id)
shRemSpeedPower(id)
// remove the power if it was used and user dropped hero
if ( g_powerID[id] > 0 ) {
remove_power(id, g_powerID[id])
}
}
// Sets this variable to the current status
g_hasVegetto[id] = (hasPowers != 0)
}
//----------------------------------------------------------------------------------------------
public plugin_cfg()
{
loadCVARS()
}
//----------------------------------------------------------------------------------------------
public loadCVARS()
{
// These cvars are checked very often
g_armorPts = get_cvar_num("vegetto_aps")
g_ssjLevel[0] = get_cvar_num("vegetto_ap_mult")
g_ssjLevel[1] = g_ssjLevel[0] * 2
g_ssjLevel[2] = g_ssjLevel[0] * 3
g_ssjLevel[3] = g_ssjLevel[0] * 4
g_ssjSpeed[0] = get_cvar_float("vegetto_speed_base")
g_ssjSpeed[1] = g_ssjSpeed[0] + get_cvar_float("vegetto_speed_add")
g_ssjSpeed[2] = g_ssjSpeed[1] + get_cvar_float("vegetto_speed_add")
g_ssjSpeed[3] = g_ssjSpeed[2] + get_cvar_float("vegetto_speed_add")
}
//----------------------------------------------------------------------------------------------
public newSpawn(id)
{
g_inStun[id] = false
if ( shModActive() && g_hasVegetto[id] && is_user_alive(id) ) {
// Set armor in x seconds to avoid breaking max ap settings in other heroes
set_task(0.5, "vegetto_setarmor", id)
g_isSaiyanLevel[id] = 0
}
}
//----------------------------------------------------------------------------------------------
public vegetto_setarmor(id)
{
if ( is_user_alive(id) ) {
// Start a Vegetto off with 100 AP, even if user has more from other heroes
give_item(id, "item_assaultsuit")
set_user_armor(id, 100)
}
}
//----------------------------------------------------------------------------------------------
// RESPOND TO KEYDOWN
public vegetto_kd()
{
if ( g_betweenRounds ) return
// First Argument is an id
new temp[6]
read_argv(1,temp,5)
new id = str_to_num(temp)
if ( !is_user_alive(id) || !g_hasVegetto[id] ) return
// Reload CVARS to make sure the variables are current
loadCVARS()
new userArmor = get_user_armor(id)
if ( userArmor < g_ssjLevel[0] ) {
playSoundDenySelect(id)
client_print(id, print_chat, "[SH](Vegetto) Not enough Energy")
return
}
// Prevent too many entities, which would cause server problems
if( g_powerID[id] ){
playSoundDenySelect(id)
client_print(id,print_chat,"[SH](Vegetto) You cannot use more than one power at a time.")
return
}
// Remember this weapon...
new clip, ammo, weaponID = get_user_weapon(id, clip, ammo)
g_lastWeapon[id] = weaponID
g_weaponSwitched[id] = true
// Switch to knife
engclient_cmd(id, "weapon_knife")
if ( userArmor >= g_ssjLevel[0] && userArmor < g_ssjLevel[1] ) {
client_print(id,print_chat,"[SH](Vegetto) Galitgun!")
emit_sound(id, CHAN_STATIC, "shmod/vegeto_galitgun.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
set_user_armor(id, userArmor-g_ssjLevel[0])
g_maxDamage[id] = get_cvar_num("vegetto_power_1")
g_maxRadius[id] = get_cvar_num("vegetto_radius_1")
g_powerNum[id] = 1
}
else if ( userArmor >= g_ssjLevel[1] && userArmor < g_ssjLevel[2] ) {
client_print(id,print_chat,"[SH](Vegetto) Final Flash!")
// Wish this sound was shorter
emit_sound(id, CHAN_STATIC, "shmod/vegeto_finalflashb.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
set_user_armor(id, userArmor-g_ssjLevel[1])
g_maxDamage[id] = get_cvar_num("vegetto_power_2")
g_maxRadius[id] = get_cvar_num("vegetto_radius_2")
g_powerNum[id] = 2
}
else if ( userArmor >= g_ssjLevel[2] && userArmor < g_ssjLevel[3] ) {
client_print(id,print_chat,"[SH](Vegetto) Big Bang!!")
// Wish this sound was shorter
emit_sound(id, CHAN_STATIC, "shmod/vegeto_bigbang.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
set_user_armor(id, userArmor-g_ssjLevel[2])
g_maxDamage[id] = get_cvar_num("vegetto_power_3")
g_maxRadius[id] = get_cvar_num("vegetto_radius_3")
g_powerNum[id] = 3
}
else if ( userArmor >= g_ssjLevel[3] ) {
// Remove Users glowing since he was ssjlevel 4
set_user_rendering(id)
client_print(id,print_chat,"[SH](Vegetto) Deathball!!")
emit_sound(id, CHAN_STATIC, "shmod/vegeto_deathball.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
set_user_armor(id, userArmor-g_ssjLevel[3])
g_maxDamage[id] = get_cvar_num("vegetto_power_4")
g_maxRadius[id] = get_cvar_num("vegetto_radius_4")
g_powerNum[id] = 4
}
create_power(id)
}
//----------------------------------------------------------------------------------------------
public vegetto_ku()
{
if ( g_betweenRounds ) return
// First Argument is an id
new temp[6]
read_argv(1,temp,5)
new id = str_to_num(temp)
if ( !is_user_alive(id) || !g_hasVegetto[id] || !g_weaponSwitched[id] ) return
// Switch back to previous weapon... Only if power was used...
if (g_lastWeapon[id] != CSW_KNIFE) shSwitchWeaponID(id, g_lastWeapon[id])
g_weaponSwitched[id] = false
}
//----------------------------------------------------------------------------------------------
public create_power(id)
{
new Float:vOrigin[3], Float:vAngles[3], Float:vAngle[3], entModel[40]
new Float:entScale, Float:entSpeed, trailModel, trailLength, trailWidth
new Float:VecMins[3] = {-1.0,-1.0,-1.0}
new Float:VecMaxs[3] = {1.0,1.0,1.0}
// Seting entSpeed higher then 2000.0 will not go where you aim
// Vec Mins/Maxes must be below +-5.0 to make a burndecal
switch(g_powerNum[id]){
case 1:{
entModel = "sprites/shmod/gallitguna2.spr"
entScale = 0.60
entSpeed = 1800.0
trailModel = g_spriteTrailY
trailLength = 30
trailWidth = 3
}
case 2:{
entModel = "sprites/shmod/finalflashcharge.spr"
entScale = 0.60
entSpeed = 1600.0
trailModel = g_spriteTrailB
trailLength = 100
trailWidth = 8
VecMins[0] = -2.0
VecMins[1] = -2.0
VecMins[2] = -2.0
VecMaxs[0] = 2.0
VecMaxs[1] = 2.0
VecMaxs[2] = 2.0
}
case 3:{
entModel = "sprites/shmod/bigbang.spr"
entScale = 1.0
entSpeed = 1050.0
trailModel = g_spriteTrailR
trailLength = 100
trailWidth = 16
VecMins[0] = -3.0
VecMins[1] = -3.0
VecMins[2] = -3.0
VecMaxs[0] = 3.0
VecMaxs[1] = 3.0
VecMaxs[2] = 3.0
}
case 4:{
entModel = "sprites/shmod/deathball2.spr"
entScale = 1.70
entSpeed = 850.0
VecMins[0] = -4.0
VecMins[1] = -4.0
VecMins[2] = -4.0
VecMaxs[0] = 4.0
VecMaxs[1] = 4.0
VecMaxs[2] = 4.0
}
}
// Get users postion and angles
Entvars_Get_Vector(id, EV_VEC_origin, vOrigin)
Entvars_Get_Vector(id, EV_VEC_angles, vAngles)
Entvars_Get_Vector(id, EV_VEC_v_angle, vAngle)
// Change height for entity origin
if (g_powerNum[id] == 4) vOrigin[2] += 110
else vOrigin[2] += 6
new newEnt = CreateEntity("info_target")
if( newEnt == 0 ) {
client_print(id, print_chat, "[SH](Vegetto) Power Creation Failure")
return
}
g_powerID[id] = newEnt
Entvars_Set_String(newEnt, EV_SZ_classname, "vexd_vegetto_power")
ENT_SetModel(newEnt, entModel)
Entvars_Set_Vector(newEnt, EV_VEC_mins, VecMins)
Entvars_Set_Vector(newEnt, EV_VEC_maxs, VecMaxs)
ENT_SetOrigin(newEnt, vOrigin)
Entvars_Set_Vector(newEnt, EV_VEC_angles, vAngles)
Entvars_Set_Vector(newEnt, EV_VEC_v_angle, vAngle)
Entvars_Set_Int(newEnt, EV_INT_solid, 2)
Entvars_Set_Int(newEnt, EV_INT_movetype, 5)
Entvars_Set_Int(newEnt, EV_INT_rendermode, 5)
Entvars_Set_Float(newEnt, EV_FL_renderamt, 255.0)
Entvars_Set_Float(newEnt, EV_FL_scale, entScale)
Entvars_Set_Edict(newEnt, EV_ENT_owner, id)
// Create a VelocityByAim() function, but instead of users
// eyesight make it start from the entity's origin - vittu
new Float:fl_Velocity[3], AimVec[3], velOrigin[3]
velOrigin[0] = floatround(vOrigin[0])
velOrigin[1] = floatround(vOrigin[1])
velOrigin[2] = floatround(vOrigin[2])
get_user_origin(id, AimVec, 3)
new distance = get_distance(velOrigin, AimVec)
// Stupid Check but lets make sure you don't devide by 0
if (!distance) distance = 1
new Float:invTime = entSpeed / distance
fl_Velocity[0] = (AimVec[0] - vOrigin[0]) * invTime
fl_Velocity[1] = (AimVec[1] - vOrigin[1]) * invTime
fl_Velocity[2] = (AimVec[2] - vOrigin[2]) * invTime
Entvars_Set_Vector(newEnt, EV_VEC_velocity, fl_Velocity)
// No trail on Spirit Bomb
if ( g_powerNum[id] == 4 ) return
// Set Trail on entity
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(22) // TE_BEAMFOLLOW
write_short(newEnt) // entity:attachment to follow
write_short(trailModel) // sprite index
write_byte(trailLength) // life in 0.1's
write_byte(trailWidth) // line width in 0.1's
write_byte(255) //colour
write_byte(255)
write_byte(255)
write_byte(255) // brightness
message_end()
if ( g_powerNum[id] == 2 || g_powerNum[id] == 3 ) {
new iNewVelocity[3], args[6]
iNewVelocity[0] = floatround(fl_Velocity[0])
iNewVelocity[1] = floatround(fl_Velocity[1])
iNewVelocity[2] = floatround(fl_Velocity[2])
// Pass varibles used to guide entity with
args[0] = id
args[1] = newEnt
args[2] = floatround(entSpeed)
args[3] = iNewVelocity[0]
args[4] = iNewVelocity[1]
args[5] = iNewVelocity[2]
set_task(0.1, "guide_kamehameha", newEnt, args, 6)
}
}
//----------------------------------------------------------------------------------------------
public guide_kamehameha(args[])
{
new AimVec[3], avgFactor
new Float:fl_origin[3]
new id = args[0]
new ent = args[1]
new speed = args[2]
if ( !is_valid_ent(ent) ) return
if ( !is_user_connected(id) ) {
vexd_pfntouch(ent, 0)
return
}
get_user_origin(id, AimVec, 3)
Entvars_Get_Vector(ent, EV_VEC_origin, fl_origin)
new iNewVelocity[3]
new origin[3]
origin[0] = floatround(fl_origin[0])
origin[1] = floatround(fl_origin[1])
origin[2] = floatround(fl_origin[2])
if ( g_powerNum[id] == 2 )
avgFactor = 3
else if ( g_powerNum[id] == 3 )
avgFactor = 6
// stupid check but why not
else
avgFactor = 8
new velocityVec[3], length
velocityVec[0] = AimVec[0]-origin[0]
velocityVec[1] = AimVec[1]-origin[1]
velocityVec[2] = AimVec[2]-origin[2]
length = sqroot(velocityVec[0]*velocityVec[0] + velocityVec[1]*velocityVec[1] + velocityVec[2]*velocityVec[2])
// Stupid Check but lets make sure you don't devide by 0
if ( !length ) length = 1
velocityVec[0] = velocityVec[0]*speed/length
velocityVec[1] = velocityVec[1]*speed/length
velocityVec[2] = velocityVec[2]*speed/length
iNewVelocity[0] = (velocityVec[0] + (args[3] * (avgFactor-1))) / avgFactor
iNewVelocity[1] = (velocityVec[1] + (args[4] * (avgFactor-1))) / avgFactor
iNewVelocity[2] = (velocityVec[2] + (args[5] * (avgFactor-1))) / avgFactor
new Float:fl_iNewVelocity[3]
fl_iNewVelocity[0] = float(iNewVelocity[0])
fl_iNewVelocity[1] = float(iNewVelocity[1])
fl_iNewVelocity[2] = float(iNewVelocity[2])
Entvars_Set_Vector(ent, EV_VEC_velocity, fl_iNewVelocity)
args[3] = iNewVelocity[0]
args[4] = iNewVelocity[1]
args[5] = iNewVelocity[2]
set_task(0.1, "guide_kamehameha", ent, args, 6)
}
//----------------------------------------------------------------------------------------------
#if defined AMX_NEW
public vexd_pfntouch(pToucher, pTouched) {
entity_touch(pToucher, pTouched)
}
public entity_touch(entity1, entity2) {
new pToucher = entity1
#else
public vexd_pfntouch(pToucher, pTouched) {
#endif
if (pToucher <= 0) return
if (!is_valid_ent(pToucher)) return
new szClassName[32]
Entvars_Get_String(pToucher, EV_SZ_classname, szClassName, 31)
if(equal(szClassName, "vexd_vegetto_power")) {
new id = Entvars_Get_Edict(pToucher, EV_ENT_owner)
new dmgRadius = g_maxRadius[id]
new maxDamage = g_maxDamage[id]
new Float:fl_vExplodeAt[3], damageName[16]
new spriteExp = g_spriteExplosionG
switch(g_powerNum[id]){
case 1:{
damageName = "Galitgun"
spriteExp = g_spriteExplosionG
}
case 2:{
damageName = "Final Flash"
spriteExp = g_spriteExplosionB
}
case 3:{
damageName = "Big Bang"
spriteExp = g_spriteExplosionR
}
case 4:{
damageName = "Deathball"
spriteExp = g_spriteExplosionO
}
}
Entvars_Get_Vector(pToucher, EV_VEC_origin, fl_vExplodeAt)
new vExplodeAt[3]
vExplodeAt[0] = floatround(fl_vExplodeAt[0])
vExplodeAt[1] = floatround(fl_vExplodeAt[1])
vExplodeAt[2] = floatround(fl_vExplodeAt[2])
// Cause the Damage
new vicOrigin[3], Float:dRatio, distance, damage
new players[SH_MAXSLOTS], pnum, vic
get_players(players, pnum, "a")
for (new i = 0; i < pnum; i++) {
vic = players[i]
if( !is_user_alive(vic) ) continue
if ( get_user_team(id) == get_user_team(vic) && !get_cvar_num("mp_friendlyfire") && id != vic ) continue
get_user_origin(vic, vicOrigin)
distance = get_distance(vExplodeAt, vicOrigin)
if ( distance < dmgRadius ) {
dRatio = floatdiv(float(distance), float(dmgRadius))
damage = maxDamage - floatround(maxDamage * dRatio)
// Lessen damage taken by self by half
if ( vic == id ) damage = floatround(damage / 2.0)
shExtraDamage(vic, id, damage, damageName)
// Make them feel it
sh_screenShake(vic, 10, 10, 10)
emit_sound(vic, CHAN_BODY, "player/pl_pain2.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
new Float:fl_Time = distance / 125.0
new Float:fl_vicVelocity[3]
fl_vicVelocity[0] = (vicOrigin[0] - vExplodeAt[0]) / fl_Time
fl_vicVelocity[1] = (vicOrigin[1] - vExplodeAt[1]) / fl_Time
fl_vicVelocity[2] = (vicOrigin[2] - vExplodeAt[2]) / fl_Time
Entvars_Set_Vector(vic, EV_VEC_velocity, fl_vicVelocity)
}
}
// Make some Effects
new blastSize = floatround(dmgRadius / 8.0)
// Explosion Sprite
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(23) //TE_GLOWSPRITE
write_coord(vExplodeAt[0])
write_coord(vExplodeAt[1])
write_coord(vExplodeAt[2])
write_short(spriteExp) // 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(3) //TE_EXPLOSION
write_coord(vExplodeAt[0])
write_coord(vExplodeAt[1])
write_coord(vExplodeAt[2])
write_short(g_spriteSmoke) // model
write_byte(blastSize+5) // scale in 0.1's
write_byte(20) // framerate
write_byte(10) // flags
message_end()
// Create Burn Decals, if they are used
if ( get_cvar_num("vegetto_decals") == 1 ) {
// Change burn decal according to blast size
new decal_id
if ( blastSize <= 18 ) {
//radius ~< 216
decal_id = g_burnDecal[random_num(0,2)]
}
else {
decal_id = g_burnDecalBig[random_num(0,2)]
}
// Create the burn decal
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(109) //TE_GUNSHOTDECAL
write_coord(vExplodeAt[0])
write_coord(vExplodeAt[1])
write_coord(vExplodeAt[2])
write_short(0) //?
write_byte(decal_id) //decal
message_end()
}
RemoveEntity(pToucher)
// Reset the Varibles
g_powerNum[id] = 0
g_powerID[id] = 0
}
}
//----------------------------------------------------------------------------------------------
public remove_power(id, powerID)
{
new Float:fl_vOrigin[3]
Entvars_Get_Vector(powerID, EV_VEC_origin, fl_vOrigin)
// Create an effect of kamehameha being removed
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(14) //TE_IMPLOSION
write_coord(floatround(fl_vOrigin[0]))
write_coord(floatround(fl_vOrigin[1]))
write_coord(floatround(fl_vOrigin[2]))
write_byte(200) // radius
write_byte(40) // count
write_byte(45) // life in 0.1's
message_end()
g_powerNum[id] = 0
g_powerID[id] = 0
RemoveEntity(powerID)
}
//----------------------------------------------------------------------------------------------
public vegetto_loop()
{
if ( !shModActive() || g_betweenRounds ) return
new players[SH_MAXSLOTS], pnum, id
get_players(players, pnum, "a")
for (new i = 0; i < pnum; i++) {
id = players[i]
if ( g_hasVegetto[id] && is_user_alive(id) ) {
new userArmor = get_user_armor(id)
// Give him armor
if ( userArmor < g_ssjLevel[3] ) {
if ( userArmor + g_armorPts > g_ssjLevel[3] ) {
set_user_armor(id, g_ssjLevel[3])
}
else {
// Give the armor item if armor is 0 so CS knows the player has armor
if ( userArmor <= 0 ) give_item(id, "item_assaultsuit")
set_user_armor(id, userArmor + g_armorPts)
}
}
// Check armor again after it's been set
userArmor = get_user_armor(id)
if ( userArmor < g_ssjLevel[0] ) {
// run it this way so it doesn't check all the elses
if ( g_isSaiyanLevel[id] > 0 ) {
shResetSpeed(id)
set_hudmessage(204, 0, 204, -1.0, 0.25, 0, 0.25, 3.0, 0.0, 0.0, 84)
show_hudmessage(id, "Vegetto - You are now gathering nether energy")
g_isSaiyanLevel[id] = 0
}
}
else if ( userArmor >= g_ssjLevel[0] && userArmor < g_ssjLevel[1] ) {
// Set these items only once when armor is ssjlevel 1
if ( g_isSaiyanLevel[id] < 1 ) {
new parm[2]
parm[0] = id
parm[1] = 5
powerup_effect(parm)
set_task(0.1, "powerup_effect", 0, parm, 2, "a", 19)
set_hudmessage(0, 255, 0, -1.0, 0.25, 0, 0.25, 3.0, 0.0, 0.0, 84)
show_hudmessage(id, "Vegetto - You've turned into Vegetto")
emit_sound(id, CHAN_STATIC, "shmod/vegetto_powerup1.wav", 0.8, ATTN_NORM, 0, PITCH_NORM)
g_isSaiyanLevel[id] = 1
ssj_boost(id)
}
}
else if ( userArmor >= g_ssjLevel[1] && userArmor < g_ssjLevel[2] ) {
// Set these items only once when armor is ssjlevel 2
if ( g_isSaiyanLevel[id] < 2 ) {
new parm[2]
parm[0] = id
parm[1] = 7
powerup_effect(parm)
set_task(0.1, "powerup_effect", 0, parm, 2, "a", 39)
set_hudmessage(255, 165, 0, -1.0, 0.25, 0, 0.25, 3.0, 0.0, 0.0, 84)
show_hudmessage(id, "Vegetto - You've turned into Vegetto 2")
emit_sound(id, CHAN_STATIC, "shmod/vegetto_powerup3.wav", 0.8, ATTN_NORM, 0, PITCH_NORM)
g_isSaiyanLevel[id] = 2
ssj_boost(id)
}
}
else if ( userArmor >= g_ssjLevel[2] && userArmor < g_ssjLevel[3] ) {
// Set these items only once when armor is ssjlevel 3
if ( g_isSaiyanLevel[id] < 3 ) {
new parm[2]
parm[0] = id
parm[1] = 9
powerup_effect(parm)
set_task(0.1, "powerup_effect", 0, parm, 2, "a", 59)
set_hudmessage(0, 255, 255, -1.0, 0.25, 0, 0.25, 3.0, 0.0, 0.0, 84)
show_hudmessage(id, "Vegetto - You've turned into Vegetto 3")
emit_sound(id, CHAN_STATIC, "shmod/vegetto_powerup2.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
g_isSaiyanLevel[id] = 3
ssj_boost(id)
}
}
else if ( userArmor >= g_ssjLevel[3] ) {
// SSJ4 glows red
shGlow(id, 196, 000, 000)
// Set these items only once when armor is ssjlevel 4
if ( g_isSaiyanLevel[id] < 4 ) {
new parm[2]
parm[0] = id
parm[1] = 11
powerup_effect(parm)
set_task(0.1, "powerup_effect", 0, parm, 2, "a", 79)
set_hudmessage(255, 165, 0, -1.0, 0.25, 0, 0.25, 3.0, 0.0, 0.0, 84)
show_hudmessage(id, "Vegetto - You've turned into Vegetto 4")
emit_sound(id, CHAN_STATIC, "shmod/vegetto_powerup4.wav", 0.8, ATTN_NORM, 0, PITCH_NORM)
g_isSaiyanLevel[id] = 4
shake_n_stun(id)
ssj_boost(id)
}
}
}
}
}
//----------------------------------------------------------------------------------------------
public ssj_boost(id)
{
if ( !shModActive() || !g_hasVegetto[id] || !is_user_alive(id) || g_betweenRounds ) return
if ( !g_isSaiyanLevel[id] ) return
// Speed Boost
new speedNum = g_isSaiyanLevel[id] - 1
if ( get_user_maxspeed(id) < g_ssjSpeed[speedNum] && !g_inStun[id] ) {
set_user_maxspeed(id, g_ssjSpeed[speedNum])
}
// HP boost
new userHealth = get_user_health(id)
if ( userHealth < get_cvar_num("vegetto_hp_max") ) {
new addHP = get_cvar_num("vegetto_hp_mult") * g_isSaiyanLevel[id]
if ( userHealth + addHP > get_cvar_num("vegetto_hp_max") ) {
set_user_health(id, get_cvar_num("vegetto_hp_max") )
}
else {
set_user_health(id, userHealth + addHP)
}
}
}
//----------------------------------------------------------------------------------------------
public curweapon(id)
{
if ( !shModActive() || !g_hasVegetto[id] || !is_user_alive(id) || g_betweenRounds ) return
if ( !g_isSaiyanLevel[id] || g_inStun[id] ) return
new wpnid = read_data(2)
if ( g_prevWeapon[id] != wpnid ) {
switch(g_isSaiyanLevel[id]) {
case 1: if ( get_user_maxspeed(id) < g_ssjSpeed[0] ) set_user_maxspeed(id, g_ssjSpeed[0])
case 2: if ( get_user_maxspeed(id) < g_ssjSpeed[1] ) set_user_maxspeed(id, g_ssjSpeed[1])
case 3: if ( get_user_maxspeed(id) < g_ssjSpeed[2] ) set_user_maxspeed(id, g_ssjSpeed[2])
case 4: if ( get_user_maxspeed(id) < g_ssjSpeed[3] ) set_user_maxspeed(id, g_ssjSpeed[3])
}
}
g_prevWeapon[id] = wpnid
}
//----------------------------------------------------------------------------------------------
public shake_n_stun(id)
{
new idOrigin[3], vicOrigin[3]
new players[SH_MAXSLOTS], pnum, vic
get_user_origin(id, idOrigin)
get_players(players, pnum, "a")
// Shake and Stun all alive users in radius inluding self
for (new i = 0; i < pnum; i++) {
vic = players[i]
if ( !is_user_alive(vic) ) continue
get_user_origin(vic, vicOrigin)
new distance = get_distance(idOrigin, vicOrigin)
if ( distance <= get_cvar_num("vegetto_radius_4") ) {
sh_screenShake(vic, 14, 14, 14)
g_inStun[vic] = true
shStun(vic, 5)
set_user_maxspeed(vic, 150.0)
set_task(5.0, "reset_instun", vic)
if ( vic == id ) continue
// Let them know why they get shaken and stunned, except the person that leveled
new vegettoName[32]
get_user_name(id, vegettoName, 31)
set_hudmessage(196, 0, 0, -1.0, 0.20, 0, 0.25, 3.0, 0.0, 0.0, 84)
show_hudmessage(vic, "Vegetto - %s has turned Super Saiyan 4", vegettoName)
}
}
}
//----------------------------------------------------------------------------------------------
public reset_instun(id)
{
g_inStun[id] = false
if ( !shModActive() || !g_hasVegetto[id] || !is_user_alive(id) ) return
switch(g_isSaiyanLevel[id]) {
case 1: if ( get_user_maxspeed(id) < g_ssjSpeed[0] ) set_user_maxspeed(id, g_ssjSpeed[0])
case 2: if ( get_user_maxspeed(id) < g_ssjSpeed[1] ) set_user_maxspeed(id, g_ssjSpeed[1])
case 3: if ( get_user_maxspeed(id) < g_ssjSpeed[2] ) set_user_maxspeed(id, g_ssjSpeed[2])
case 4: if ( get_user_maxspeed(id) < g_ssjSpeed[3] ) set_user_maxspeed(id, g_ssjSpeed[3])
}
}
//----------------------------------------------------------------------------------------------
public powerup_effect(parm[])
{
if ( !shModActive() || g_betweenRounds ) return
new id = parm[0]
if ( !is_user_alive(id) ) return
new Size = parm[1]
new players[SH_MAXSLOTS], pnum
new idOthers, Origin[3]
new g_spritePowerUp = Size == 5 ? g_spritePowerUp1 : Size == 7 ? g_spritePowerUp2 : Size == 9 ? g_spritePowerUp3 : g_spritePowerUp4;
get_players(players, pnum, "a")
// Show a powerup to all alive players except the one being powered up.
for (new i = 0; i < pnum; i++) {
idOthers = players[i]
if ( !is_user_alive(idOthers) || idOthers == id ) continue
get_user_origin(id, Origin)
// power up sprite - additive sprite, plays 1 cycle
message_begin(MSG_ONE, SVC_TEMPENTITY, Origin, idOthers)
write_byte(17) // TE_SPRITE
write_coord(Origin[0]) // center position
write_coord(Origin[1])
write_coord(Origin[2]+20)
write_short(g_spritePowerUp) // sprite index
write_byte(Size) // scale in 0.1's
write_byte(50) // brightness
message_end()
// power up sprite - additive sprite, plays 1 cycle
message_begin(MSG_ONE, SVC_TEMPENTITY, Origin, idOthers)
write_byte(17) // TE_SPRITE
write_coord(Origin[0]+5) // center position
write_coord(Origin[1])
write_coord(Origin[2]+20)
write_short(g_spritePowerUp) // sprite index
write_byte(Size) // scale in 0.1's
write_byte(50) // brightness
message_end()
// power up sprite - additive sprite, plays 1 cycle
message_begin(MSG_ONE, SVC_TEMPENTITY, Origin, idOthers)
write_byte(17) // TE_SPRITE
write_coord(Origin[0]-5) // center position
write_coord(Origin[1])
write_coord(Origin[2]+20)
write_short(g_spritePowerUp) // sprite index
write_byte(Size) // scale in 0.1's
write_byte(50) // brightness
message_end()
// power up sprite - additive sprite, plays 1 cycle
message_begin(MSG_ONE, SVC_TEMPENTITY, Origin, idOthers)
write_byte(17) // TE_SPRITE
write_coord(Origin[0]) // center position
write_coord(Origin[1]+5)
write_coord(Origin[2]+10)
write_short(g_spritePowerUp) // sprite index
write_byte(Size) // scale in 0.1's
write_byte(50) // brightness
message_end()
// power up sprite - additive sprite, plays 1 cycle
message_begin(MSG_ONE, SVC_TEMPENTITY, Origin, idOthers)
write_byte(17) // TE_SPRITE
write_coord(Origin[0]) // center position
write_coord(Origin[1]-5)
write_coord(Origin[2]+10)
write_short(g_spritePowerUp) // sprite index
write_byte(Size) // scale in 0.1's
write_byte(50) // brightness
message_end()
}
}
//----------------------------------------------------------------------------------------------
public round_end()
{
g_betweenRounds = true
for (new id=1; id <= SH_MAXSLOTS; id++) {
if ( g_hasVegetto[id] ) {
g_isSaiyanLevel[id] = 0
shResetSpeed(id)
if ( g_powerID[id] > 0 ) {
remove_power(id, g_powerID[id])
}
}
}
}
//----------------------------------------------------------------------------------------------
public round_start()
{
g_betweenRounds = false
}
//----------------------------------------------------------------------------------------------
public client_disconnect(id)
{
if( g_hasVegetto[id] && g_powerID[id] > 0 ) {
remove_power(id, g_powerID[id])
}
}
//----------------------------------------------------------------------------------------------
and for redblood just an fyi but it won't work if the attacker also has the hero, if you wanted to change that then remove "&& !gHasRedbloodPowers[attacker] "
__________________
If at first you don't succeed, then skydiving isn't for you.
|
|