Raised This Month: $51 Target: $400
 12% 

help with "vegetto".. loading wrong sprites


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
SimonLANO
Member
Join Date: Dec 2008
Old 07-08-2012 , 13:57   help with "vegetto".. loading wrong sprites
Reply With Quote #1

Heya!

So my problem with vegetto is that it only loads the "vegetto_powerup4.spr" on every SSJ Levels..
And the vegetto_powerup4.spr is colour RED, i want the hero so on first vegetto level 1 its gonna use vegetto_powerup1.spr and second vegetto_powerup2.spr and third vegetto_power3.spr... i have tried to edit the .sma but no luck... heres the code, i hope someone know how to do this :-)

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, g_spritePowerUp

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_spritePowerUp = precache_model("sprites/shmod/vegetto_powerup1.spr")
	g_spritePowerUp = precache_model("sprites/shmod/vegetto_powerup2.spr")
	g_spritePowerUp = precache_model("sprites/shmod/vegetto_powerup3.spr")
	g_spritePowerUp = 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]

	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])
	}
}
//----------------------------------------------------------------------------------------------
__________________
[SS]Superhero By 8Ball | 10 Free Levels | Max 50 Level | FastDL


Join us now !
SimonLANO is offline
SimonLANO
Member
Join Date: Dec 2008
Old 07-08-2012 , 22:48   Re: help with "vegetto".. loading wrong sprites
Reply With Quote #2

Also i have a problem with hero: "Red Blood".. When people shoots at you the Red beam does not appear and your attacker dosnt take damage... Heres the code:
Code:
// Red Blood by FireWalker877
// Thanks to AssKicR and JTP10181 for the magneto code! And thanks to (_msv) for the idea. :)

/* CVARS - copy and paste to shconfig.cfg

//Redblood
redblood_level 10
redblood_cooldown 5			//Time delay between automatic uses
redblood_damage .5			//Fraction of attacker's health to be deducted. Default .50
*/

#include <amxmod>
#include <Vexd_Utilities>
#include <superheromod>

// GLOBAL VARIABLES
new gHeroName[]="Red Blood"
new bool:gHasRedbloodPowers[SH_MAXSLOTS+1]
new gSpriteLightning
//----------------------------------------------------------------------------------------------
public plugin_init()
{
	// Plugin Info
	register_plugin("SUPERHERO Red Blood","1.2","FireWalker877")

	// DO NOT EDIT THIS FILE TO CHANGE CVARS, USE THE SHCONFIG.CFG
	register_cvar("redblood_level", "10" )
	register_cvar("redblood_cooldown", "5" )
	register_cvar("redblood_damage", ".5" )

	// FIRE THE EVENT TO CREATE THIS SUPERHERO!
	shCreateHero(gHeroName, "Revenge!", "Do instant damage to your attacker!", false, "redblood_level" )

	// REGISTER EVENTS THIS HERO WILL RESPOND TO! (AND SERVER COMMANDS)

	// INIT
	register_srvcmd("redblood_init", "redblood_init")
	shRegHeroInit(gHeroName, "redblood_init")

	// GET MORE GUNZ!
	register_event("ResetHUD", "newSpawn", "b")
	register_event("Damage", "damage_attacker", "b", "2!0")
	
	//Shield Restrict
	shSetShieldRestrict(gHeroName)

}
//----------------------------------------------------------------------------------------------
public plugin_precache()
{
	precache_sound("debris/beamstart15.wav")
	gSpriteLightning = precache_model("sprites/lgtning.spr")
}
//----------------------------------------------------------------------------------------------
public newSpawn(id)
{
	gPlayerUltimateUsed[id] = false
}
//----------------------------------------------------------------------------------------------
public redblood_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 wolverine skills
	read_argv(2,temp,5)
	new hasPowers = str_to_num(temp)

	gHasRedbloodPowers[id] = (hasPowers != 0)

	//Reset thier shield restrict status
	//Shield restrict MUST be before weapons are given out
	shResetShield(id)
}
//----------------------------------------------------------------------------------------------
public damage_attacker(id)
{
	if ( !shModActive() || !gHasRedbloodPowers[id] || gPlayerUltimateUsed[id] || !is_user_connected(id) ) 
		return
	
	new attacker = get_user_attacker(id)

	if ( attacker <= 0 || attacker > SH_MAXSLOTS ) return

	if ( is_user_alive(attacker) && !get_user_godmode(attacker) && !gHasRedbloodPowers[attacker] && id != attacker ) {
		new attackerHealth = get_user_health(attacker)

		new rbHP = floatround( attackerHealth * get_cvar_float("redblood_damage") )
		if (rbHP <= 0) rbHP = 1
		shExtraDamage(attacker, id, rbHP, "red blood")

		ultimateTimer(id, get_cvar_num("redblood_cooldown") * 1.0)
		playSound(id)
		playSound(attacker)
		lightning_effect(id, attacker, 2)
		setScreenFlash(attacker, 255, 0, 0, 10, 200 )  //Screen Flash
	}
}
//----------------------------------------------------------------------------------------------
public lightning_effect(id, targetid, linewidth)
{
	message_begin( MSG_BROADCAST, SVC_TEMPENTITY )
	write_byte( 8 )
	write_short(id)	// start entity
	write_short(targetid)	// entity
	write_short(gSpriteLightning )	// model
	write_byte( 0 ) // starting frame
	write_byte( 15 )  // frame rate
	write_byte( 10 )  // life
	write_byte( linewidth )  // line width
	write_byte( 60 )  // noise amplitude
	write_byte( 255 )	// r, g, b
	write_byte( 0 )	// r, g, b
	write_byte( 0 )	// r, g, b
	write_byte( 255 )	// brightness
	write_byte( 0 )	// scroll speed
	message_end()
}
//----------------------------------------------------------------------------------------------
public playSound(id)
{
	new parm[1]
	parm[0] = id

	emit_sound(id, CHAN_AUTO, "debris/beamstart15.wav", 1.0, ATTN_NORM, 0, PITCH_HIGH)
	set_task(1.5,"stopSound", 0, parm, 1)
}
//----------------------------------------------------------------------------------------------
public stopSound(parm[])
{
	new sndStop = (1<<5)
	emit_sound(parm[0], CHAN_AUTO, "debris/beamstart15.wav", 1.0, ATTN_NORM, sndStop, PITCH_NORM)
}
//----------------------------------------------------------------------------------------------
__________________
[SS]Superhero By 8Ball | 10 Free Levels | Max 50 Level | FastDL


Join us now !
SimonLANO is offline
G-Dog
Senior Member
Join Date: Dec 2005
Location: Thunderstorm Central
Old 07-10-2012 , 09:08   Re: help with "vegetto".. loading wrong sprites
Reply With Quote #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_armorPtsg_spriteSmokeg_spriteTrailYg_spriteTrailBg_spriteTrailR
new g_spriteExplosionGg_spriteExplosionBg_spriteExplosionRg_spriteExplosionO
new g_spritePowerUp1g_spritePowerUp2g_spritePowerUp3g_spritePowerUp4

static const g_burnDecal[3] = {282930}
static const 
g_burnDecalBig[3] = {464748}
//----------------------------------------------------------------------------------------------
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] > ) {
            
remove_power(idg_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(id100)
    }
}
//----------------------------------------------------------------------------------------------
// 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(idprint_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 clipammoweaponID get_user_weapon(idclipammo)
    
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(idCHAN_STATIC"shmod/vegeto_galitgun.wav"1.0ATTN_NORM0PITCH_NORM)
        
set_user_armor(iduserArmor-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(idCHAN_STATIC"shmod/vegeto_finalflashb.wav"1.0ATTN_NORM0PITCH_NORM)
        
set_user_armor(iduserArmor-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(idCHAN_STATIC"shmod/vegeto_bigbang.wav"1.0ATTN_NORM0PITCH_NORM)
        
set_user_armor(iduserArmor-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(idCHAN_STATIC"shmod/vegeto_deathball.wav"1.0ATTN_NORM0PITCH_NORM)
        
set_user_armor(iduserArmor-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_KNIFEshSwitchWeaponID(idg_lastWeapon[id])
    
g_weaponSwitched[id] = false
}
//----------------------------------------------------------------------------------------------
public create_power(id)
{
    new 
Float:vOrigin[3], Float:vAngles[3], Float:vAngle[3], entModel[40]
    new 
Float:entScaleFloat:entSpeedtrailModeltrailLengthtrailWidth
    
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(idEV_VEC_originvOrigin)
    
Entvars_Get_Vector(idEV_VEC_anglesvAngles)
    
Entvars_Get_Vector(idEV_VEC_v_anglevAngle)

    
// Change height for entity origin
    
if (g_powerNum[id] == 4vOrigin[2] += 110
    
else vOrigin[2] += 6

    
new newEnt CreateEntity("info_target")
    if( 
newEnt == ) {
        
client_print(idprint_chat"[SH](Vegetto) Power Creation Failure")
        return
    }

    
g_powerID[id] = newEnt

    Entvars_Set_String
(newEntEV_SZ_classname"vexd_vegetto_power")
    
ENT_SetModel(newEntentModel)

    
Entvars_Set_Vector(newEntEV_VEC_minsVecMins)
    
Entvars_Set_Vector(newEntEV_VEC_maxsVecMaxs)

    
ENT_SetOrigin(newEntvOrigin)
    
Entvars_Set_Vector(newEntEV_VEC_anglesvAngles)
    
Entvars_Set_Vector(newEntEV_VEC_v_anglevAngle)

    
Entvars_Set_Int(newEntEV_INT_solid2)
    
Entvars_Set_Int(newEntEV_INT_movetype5)
    
Entvars_Set_Int(newEntEV_INT_rendermode5)
    
Entvars_Set_Float(newEntEV_FL_renderamt255.0)
    
Entvars_Set_Float(newEntEV_FL_scaleentScale)
    
Entvars_Set_Edict(newEntEV_ENT_ownerid)


    
// 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(idAimVec3)

    new 
distance get_distance(velOriginAimVec)

    
// Stupid Check but lets make sure you don't devide by 0
    
if (!distancedistance 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
(newEntEV_VEC_velocityfl_Velocity)

    
// No trail on Spirit Bomb
    
if ( g_powerNum[id] == ) return

    
// Set Trail on entity
    
message_begin(MSG_BROADCASTSVC_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] == || g_powerNum[id] == ) {
        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"newEntargs6)
    }
}
//----------------------------------------------------------------------------------------------
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(ent0)
        return
    }

    
get_user_origin(idAimVec3)

    
Entvars_Get_Vector(entEV_VEC_originfl_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] == )
    
avgFactor 3
    
else if ( g_powerNum[id] == )
    
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(entEV_VEC_velocityfl_iNewVelocity)

    
args[3] = iNewVelocity[0]
    
args[4] = iNewVelocity[1]
    
args[5] = iNewVelocity[2]

    
set_task(0.1"guide_kamehameha"entargs6)
}
//----------------------------------------------------------------------------------------------
#if defined AMX_NEW
public vexd_pfntouch(pToucherpTouched) {
    
entity_touch(pToucherpTouched)
}

public 
entity_touch(entity1entity2) {
    new 
pToucher entity1
#else
public vexd_pfntouch(pToucherpTouched) {
#endif

    
if (pToucher <= 0) return
    if (!
is_valid_ent(pToucher)) return

    new 
szClassName[32]
    
Entvars_Get_String(pToucherEV_SZ_classnameszClassName31)

    if(
equal(szClassName"vexd_vegetto_power")) {
        new 
id Entvars_Get_Edict(pToucherEV_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(pToucherEV_VEC_originfl_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,  distancedamage
        
new players[SH_MAXSLOTS], pnumvic

        get_players
(playerspnum"a")

        for (new 
0pnumi++) {
            
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(vicvicOrigin)
            
distance get_distance(vExplodeAtvicOrigin)

            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(viciddamagedamageName)

                
// Make them feel it
                
sh_screenShake(vic101010)
                
emit_sound(vicCHAN_BODY"player/pl_pain2.wav"1.0ATTN_NORM0PITCH_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
(vicEV_VEC_velocityfl_vicVelocity)
            }
        }

        
// Make some Effects
        
new blastSize floatround(dmgRadius 8.0)

        
// Explosion Sprite
        
message_begin(MSG_BROADCASTSVC_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_BROADCASTSVC_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") == ) {
            
// 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_BROADCASTSVC_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(idpowerID)
{
    new 
Float:fl_vOrigin[3]

    
Entvars_Get_Vector(powerIDEV_VEC_originfl_vOrigin)

    
// Create an effect of kamehameha being removed
    
message_begin(MSG_BROADCASTSVC_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], pnumid

    get_players
(playerspnum"a")

    for (new 
0pnumi++) {
        
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(idg_ssjLevel[3])
                }
                else {
                    
// Give the armor item if armor is 0 so CS knows the player has armor
                    
if ( userArmor <= give_item(id"item_assaultsuit")

                    
set_user_armor(iduserArmor 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] > ) {
                    
shResetSpeed(id)
                    
set_hudmessage(2040204, -1.00.2500.253.00.00.084)
                    
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] < ) {
                    new 
parm[2]
                    
parm[0] = id
                    parm
[1] = 5
                    powerup_effect
(parm)
                    
set_task(0.1"powerup_effect"0parm2"a"19)

                    
set_hudmessage(02550, -1.00.2500.253.00.00.084)
                    
show_hudmessage(id"Vegetto - You've turned into Vegetto")
                    
emit_sound(idCHAN_STATIC"shmod/vegetto_powerup1.wav"0.8ATTN_NORM0PITCH_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] < ) {
                    new 
parm[2]
                    
parm[0] = id
                    parm
[1] = 7
                    powerup_effect
(parm)
                    
set_task(0.1"powerup_effect"0parm2"a"39)

                    
set_hudmessage(2551650, -1.00.2500.253.00.00.084)
                    
show_hudmessage(id"Vegetto - You've turned into Vegetto 2")
                    
emit_sound(idCHAN_STATIC"shmod/vegetto_powerup3.wav"0.8ATTN_NORM0PITCH_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] < ) {
                    new 
parm[2]
                    
parm[0] = id
                    parm
[1] = 9
                    powerup_effect
(parm)
                    
set_task(0.1"powerup_effect"0parm2"a"59)

                    
set_hudmessage(0255255, -1.00.2500.253.00.00.084)
                    
show_hudmessage(id"Vegetto - You've turned into Vegetto 3")
                    
emit_sound(idCHAN_STATIC"shmod/vegetto_powerup2.wav"1.0ATTN_NORM0PITCH_NORM)

                    
g_isSaiyanLevel[id] = 3
                    ssj_boost
(id)
                }
            }
            else if ( 
userArmor >= g_ssjLevel[3] ) {
                
// SSJ4 glows red
                
shGlow(id196000000)
                
// Set these items only once when armor is ssjlevel 4
                
if ( g_isSaiyanLevel[id] < ) {
                    new 
parm[2]
                    
parm[0] = id
                    parm
[1] = 11
                    powerup_effect
(parm)
                    
set_task(0.1"powerup_effect"0parm2"a"79)

                    
set_hudmessage(2551650, -1.00.2500.253.00.00.084)
                    
show_hudmessage(id"Vegetto - You've turned into Vegetto 4")
                    
emit_sound(idCHAN_STATIC"shmod/vegetto_powerup4.wav"0.8ATTN_NORM0PITCH_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(idg_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(idget_cvar_num("vegetto_hp_max") )
        }
        else {
            
set_user_health(iduserHealth 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(idg_ssjSpeed[0])
            case 
2: if ( get_user_maxspeed(id) < g_ssjSpeed[1] ) set_user_maxspeed(idg_ssjSpeed[1])
            case 
3: if ( get_user_maxspeed(id) < g_ssjSpeed[2] ) set_user_maxspeed(idg_ssjSpeed[2])
            case 
4: if ( get_user_maxspeed(id) < g_ssjSpeed[3] ) set_user_maxspeed(idg_ssjSpeed[3])
        }
    }
    
g_prevWeapon[id] = wpnid
}
//----------------------------------------------------------------------------------------------
public shake_n_stun(id)
{
    new 
idOrigin[3], vicOrigin[3]
    new 
players[SH_MAXSLOTS], pnumvic

    get_user_origin
(ididOrigin)

    
get_players(playerspnum"a")

    
// Shake and Stun all alive users in radius inluding self
    
for (new 0pnumi++) {
        
vic players[i]
        if ( !
is_user_alive(vic) ) continue

        
get_user_origin(vicvicOrigin)

        new 
distance get_distance(idOriginvicOrigin)

        if ( 
distance <= get_cvar_num("vegetto_radius_4") ) {
            
sh_screenShake(vic141414)
            
g_inStun[vic] = true

            shStun
(vic5)
            
set_user_maxspeed(vic150.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(idvegettoName31)
            
set_hudmessage(19600, -1.00.2000.253.00.00.084)
            
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(idg_ssjSpeed[0])
        case 
2: if ( get_user_maxspeed(id) < g_ssjSpeed[1] ) set_user_maxspeed(idg_ssjSpeed[1])
        case 
3: if ( get_user_maxspeed(id) < g_ssjSpeed[2] ) set_user_maxspeed(idg_ssjSpeed[2])
        case 
4: if ( get_user_maxspeed(id) < g_ssjSpeed[3] ) set_user_maxspeed(idg_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 idOthersOrigin[3]
    new 
g_spritePowerUp Size == g_spritePowerUp1 Size == g_spritePowerUp2 Size == g_spritePowerUp3 g_spritePowerUp4;

    
get_players(playerspnum"a")

    
// Show a powerup to all alive players except the one being powered up.
    
for (new 0pnumi++) {
        
idOthers players[i]
        if ( !
is_user_alive(idOthers) || idOthers == id ) continue

        
get_user_origin(idOrigin)

        
// power up sprite - additive sprite, plays 1 cycle
        
message_begin(MSG_ONESVC_TEMPENTITYOriginidOthers)
        
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_ONESVC_TEMPENTITYOriginidOthers)
        
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_ONESVC_TEMPENTITYOriginidOthers)
        
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_ONESVC_TEMPENTITYOriginidOthers)
        
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_ONESVC_TEMPENTITYOriginidOthers)
        
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=1id <= SH_MAXSLOTSid++) {
        if ( 
g_hasVegetto[id] ) {
            
g_isSaiyanLevel[id] = 0
            shResetSpeed
(id)
            if ( 
g_powerID[id] > ) {
                
remove_power(idg_powerID[id])
            }
        }
    }
}
//----------------------------------------------------------------------------------------------
public round_start()
{
    
g_betweenRounds false
}
//----------------------------------------------------------------------------------------------
public client_disconnect(id)
{
    if( 
g_hasVegetto[id] && g_powerID[id] > ) {
        
remove_power(idg_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.
G-Dog is offline
Send a message via AIM to G-Dog
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 13:29.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode