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

Trying to put level limit on Kamikaze


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
Zorba
Member
Join Date: Apr 2008
Old 07-22-2010 , 23:30   Trying to put level limit on Kamikaze
Reply With Quote #1

Code:
/* CVARS - copy and paste to shconfig.cfg

//Kamikaze
kamikaze_level 0
kamikaze_radius 300			//Radius of people affected by blast
kamikaze_fuse 15			//# of seconds before kamikaze blows Up
kamikaze_maxdamage 125			//Maximum damage to deal to a player
kamikaze_maxlevel 10                        //Max Level

*/

#include <superheromod>

// GLOBAL VARIABLES
new gHeroID
new const gHeroName[] = "Kamikaze"
new bool:gHasKamikaze[SH_MAXSLOTS+1]
new gFuseTime[SH_MAXSLOTS+1]
new const gSoundCountdown[] = "buttons/blip2.wav"
new const gSoundFvox[11][] = {"", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"}
new gSpriteSmoke, gSpriteWhite, gSpriteFire
new gMsgSync
new pCvarRadius, pCvarFuse, pCvarMaxDamage
new gPlayerLevels[SH_MAXSLOTS+1]
//----------------------------------------------------------------------------------------------
public plugin_init()
{
	// Plugin Info
	register_plugin("SUPERHERO Kamikaze", SH_VERSION_STR, "Zorba & AssKicR/JTP10181")

	// DO NOT EDIT THIS FILE TO CHANGE CVARS, USE THE SHCONFIG.CFG
	new pcvarLevel = register_cvar("kamikaze_level", "0")
	pCvarRadius = register_cvar("kamikaze_radius", "300")
	pCvarFuse = register_cvar("kamikaze_fuse", "15")
	pCvarMaxDamage = register_cvar("kamikaze_maxdamage", "125")
	register_cvar("kamikaze_maxlevel", "10")

	// FIRE THE EVENTS TO CREATE THIS SUPERHERO!
	gHeroID = sh_create_hero(gHeroName, pcvarLevel)
	sh_set_hero_info(gHeroID, "Blow Self Up", "Blow up the enemies with a Kamikaze attack")
	sh_set_hero_bind(gHeroID)
         
	// EVENT
	register_event("ResetHUD","newRound","b") 
	
	// LEVELS
	register_srvcmd("kamikaze_levels", "kamikaze_levels")
	shRegLevels(gHeroName,"kamikaze_levels")
	
	// Timer loop
	set_task(1.0, "kamikaze_check", _, _, _, "b")

	gMsgSync = CreateHudSyncObj()
}
//----------------------------------------------------------------------------------------------
public plugin_precache()
{
	gSpriteSmoke = precache_model("sprites/steam1.spr")
	gSpriteWhite = precache_model("sprites/white.spr")
	gSpriteFire = precache_model("sprites/explode1.spr")
	precache_sound(gSoundCountdown)
}
//----------------------------------------------------------------------------------------------
public sh_hero_init(id, heroID, mode)
{
	if ( gHeroID != heroID ) return

	gHasKamikaze[id] = mode ? true : false

	sh_debug_message(id, 1, "%s %s", gHeroName, mode ? "ADDED" : "DROPPED")
}
//----------------------------------------------------------------------------------------------
public sh_client_spawn(id)
{
	gPlayerInCooldown[id] = false
	gFuseTime[id] = 0
}
//----------------------------------------------------------------------------------------------
public sh_hero_key(id, heroID, key)
{
	if ( gHeroID != heroID || sh_is_freezetime() ) return
	if ( !is_user_alive(id) || !gHasKamikaze[id] ) return

	if ( key == SH_KEYDOWN ) {
		// Let them know they already used their ultimate if they have
		if ( gPlayerInCooldown[id] ) {
			sh_sound_deny(id)
			return
		}

		gPlayerInCooldown[id] = true
		gFuseTime[id] = get_pcvar_num(pCvarFuse)
	}
}
//----------------------------------------------------------------------------------------------
public kamikaze_check()
{
	if ( !sh_is_active() ) return

	static players[SH_MAXSLOTS], playerCount, player, fuseTime, i
	get_players(players, playerCount, "ah")

	for ( i = 0; i < playerCount; i++ ) {
		player = players[i]

		if ( !gHasKamikaze[player] ) continue

		fuseTime = gFuseTime[player]

		if ( fuseTime > 0 ) {
			emit_sound(player, CHAN_ITEM, gSoundCountdown, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)

			gFuseTime[player] = --fuseTime

			if ( fuseTime <= 0 ) {
				blow_up(player)
			}
			else {
				// Decrement the counter
				set_hudmessage(0, 100, 200, 0.05, 0.65, 2, 0.02, 1.0, 0.01, 0.1, -1)
				ShowSyncHudMsg(player, gMsgSync, "You will explode in %d second%s", fuseTime, fuseTime == 1 ? "" : "s")

				// Say Time Remaining to the User Only.
				if ( fuseTime == 11 ) {
					client_cmd(player, "spk ^"fvox/remaining^"")
				}
				else if ( fuseTime < 11 ) {
					client_cmd(player, "spk ^"fvox/%s^"", gSoundFvox[fuseTime])
				}
			}
		}
	}
}
//----------------------------------------------------------------------------------------------
public blow_up(id)
{
	if ( !is_user_connected(id) ) return

	new Float:dRatio, Float:distanceBetween, damage
	new Float:idOrigin[3], Float:playerOrigin[3], name[32]
	new Float:dmgRadius = get_pcvar_float(pCvarRadius)
	new maxDamage = get_pcvar_num(pCvarMaxDamage)
	new FFOn = sh_friendlyfire_on()
	new CsTeams:idTeam = cs_get_user_team(id)

	gFuseTime[id] = 0

	pev(id, pev_origin, idOrigin)

	// blowup even if dead
	explode_effect(idOrigin)

	// Kill id first, if alive, because he is the bomb
	if ( is_user_alive(id) ) {
		set_pev(id, pev_takedamage, DAMAGE_AIM)		// Make sure they dont have godmode so we can kill them
		sh_extra_damage(id, id, 0, "suicide bomb", _, SH_DMG_KILL)
	}

	get_user_name(id, name, 31)
	set_hudmessage(0, 100, 200, 0.05, 0.65, 2, 0.02, 1.0, 0.01, 0.1, -1)
	ShowSyncHudMsg(0, gMsgSync, "%s has exploded", name)

	new players[SH_MAXSLOTS], playerCount, player
	get_players(players, playerCount, "ah")

	for ( new i = 0; i < playerCount; i++ ) {
		player = players[i]

		pev(player, pev_origin, playerOrigin)
		distanceBetween = vector_distance(idOrigin, playerOrigin)

		if ( distanceBetween <= dmgRadius ) {
			if ( FFOn || idTeam != cs_get_user_team(player) ) {
				dRatio = distanceBetween / dmgRadius
				damage = maxDamage - floatround(maxDamage * dRatio)
				if ( !damage ) damage = 1	// Incase damage cvar is really low cause something if within the radius 
				sh_extra_damage(player, id, damage, "kamikaze bomb", _, SH_DMG_NORM, true)
			}

			// Add some push and shake effects instead of dmgStun later, and cause it on everyone within radius
		}
	}
}
//----------------------------------------------------------------------------------------------
explode_effect(Float:vec1[3])
{
	// blast circles
	engfunc(EngFunc_MessageBegin, MSG_BROADCAST, SVC_TEMPENTITY, vec1, 0)
	write_byte(TE_BEAMCYLINDER)	// 21
	engfunc(EngFunc_WriteCoord, vec1[0])
	engfunc(EngFunc_WriteCoord, vec1[1])
	engfunc(EngFunc_WriteCoord, vec1[2] + 16)
	engfunc(EngFunc_WriteCoord, vec1[0])
	engfunc(EngFunc_WriteCoord, vec1[1])
	engfunc(EngFunc_WriteCoord, vec1[2] + 1936)
	write_short(gSpriteWhite)
	write_byte(0)		// startframe
	write_byte(0)		// framerate
	write_byte(2)		// life
	write_byte(20)		// width
	write_byte(0)		// noise
	write_byte(188)		// r
	write_byte(220)		// g
	write_byte(255)		// b
	write_byte(255)		// brightness
	write_byte(0)		// speed
	message_end()

	// Explosion2
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
	write_byte(TE_EXPLOSION2)	// 12
	engfunc(EngFunc_WriteCoord, vec1[0])
	engfunc(EngFunc_WriteCoord, vec1[1])
	engfunc(EngFunc_WriteCoord, vec1[2])
	write_byte(188)		// scale in 0.1's
	write_byte(10)		// framerate
	message_end()

	// Explosion
	engfunc(EngFunc_MessageBegin, MSG_BROADCAST, SVC_TEMPENTITY, vec1, 0)
	write_byte(TE_EXPLOSION)	// 3
	engfunc(EngFunc_WriteCoord, vec1[0])
	engfunc(EngFunc_WriteCoord, vec1[1])
	engfunc(EngFunc_WriteCoord, vec1[2])
	write_short(gSpriteFire)
	write_byte(60)		// scale in 0.1's
	write_byte(10)		// framerate
	write_byte(TE_EXPLFLAG_NONE)		// flags
	message_end()

	// Smoke
	engfunc(EngFunc_MessageBegin, MSG_BROADCAST, SVC_TEMPENTITY, vec1, 0)
	write_byte(TE_SMOKE)		// 5
	engfunc(EngFunc_WriteCoord, vec1[0])
	engfunc(EngFunc_WriteCoord, vec1[1])
	engfunc(EngFunc_WriteCoord, vec1[2])
	write_short(gSpriteSmoke)
	write_byte(10)		// scale in 0.1's
	write_byte(10)		// framerate
	message_end()
}
//----------------------------------------------------------------------------------------------
public sh_client_death(victim)
{
	if ( victim < 1 || victim > sh_maxplayers() ) return

	if ( gFuseTime[victim] > 0 ) {
		// Delay to avoid recursion
		set_task(0.1, "blow_up", victim)
	}
}
//----------------------------------------------------------------------------------------------
public client_connect(id)
{
	gHasKamikaze[id] = false
	gFuseTime[id] = 0
}
//----------------------------------------------------------------------------------------------
public client_disconnect(id)
{
	gHasKamikaze[id] = false
	gFuseTime[id] = 0
}
//----------------------------------------------------------------------------------------------,
public kamikaze_levels()
{
	new id[5]
	new lev[5]

	read_argv(1,id,4)
	read_argv(2,lev,4)

	gPlayerLevels[str_to_num(id)] = str_to_num(lev)

	kamikaze_checklevel(str_to_num(id))
}
//----------------------------------------------------------------------------------------------
public kamikaze_checklevel(id)
{
	new kamikaze_maxlvl = get_cvar_num("kamikaze_maxlevel")
	if (gHasKamikaze[id] && gPlayerLevels[id] > kamikaze_maxlvl) {
		client_print(id,print_chat, "[SH](%s) You must be level %d or lower to use this hero",gHeroName,kamikaze_maxlvl)
		gHasKamikaze[id] = false
		client_cmd(id,"say drop %s",gHeroName)
	}

}
//----------------------------------------------------------------------------------------------
What is wrong, they don't drop the hero?
I put me level on my server at 20 and picked up kamikaze normally
Thx
Zorba is offline
Jelle
[b]MOAR CANDY[/b]
Join Date: Aug 2009
Location: Denmark
Old 07-23-2010 , 08:42   Re: Trying to put level limit on Kamikaze
Reply With Quote #2

If you can't even fix this, how do you suppose to fix frieza? Jesus, this is like the easiest thing to fix.

Also, use pcvars instead of get_cvar_num.
__________________
No idea what to write here...
Jelle is offline
Send a message via MSN to Jelle
Zorba
Member
Join Date: Apr 2008
Old 07-23-2010 , 12:00   Re: Trying to put level limit on Kamikaze
Reply With Quote #3

I had done it, but it give me a problem when I try to compile it. I will try it again!
Zorba is offline
Zorba
Member
Join Date: Apr 2008
Old 07-23-2010 , 14:48   Re: Trying to put level limit on Kamikaze
Reply With Quote #4

Code:
// GLOBAL VARIABLES
new gHeroID
new const gHeroName[] = "Kamikaze"
new bool:gHasKamikaze[SH_MAXSLOTS+1]
new gFuseTime[SH_MAXSLOTS+1]
new const gSoundCountdown[] = "buttons/blip2.wav"
new const gSoundFvox[11][] = {"", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"}
new gSpriteSmoke, gSpriteWhite, gSpriteFire
new gMsgSync
new pCvarRadius, pCvarFuse, pCvarMaxDamage, pCvarMaxLevel
new gPlayerLevels[SH_MAXSLOTS+1]
//----------------------------------------------------------------------------------------------
public plugin_init()
{
	// Plugin Info
	register_plugin("SUPERHERO Kamikaze", SH_VERSION_STR, "Zorba & AssKicR/JTP10181")

	// DO NOT EDIT THIS FILE TO CHANGE CVARS, USE THE SHCONFIG.CFG
	new pcvarLevel = register_cvar("kamikaze_level", "0")
	pCvarRadius = register_cvar("kamikaze_radius", "300")
	pCvarFuse = register_cvar("kamikaze_fuse", "15")
	pCvarMaxDamage = register_cvar("kamikaze_maxdamage", "125")
	pCvarMaxLevel = register_cvar("kamikaze_maxlevel", "10")

	// FIRE THE EVENTS TO CREATE THIS SUPERHERO!
	gHeroID = sh_create_hero(gHeroName, pcvarLevel)
	sh_set_hero_info(gHeroID, "Blow Self Up", "Blow up the enemies with a Kamikaze attack")
	sh_set_hero_bind(gHeroID)
         
	// EVENT
	register_event("ResetHUD","newRound","b") 
	
	// LEVELS
	register_srvcmd("kamikaze_levels", "kamikaze_levels")
	shRegLevels(gHeroName,"kamikaze_levels")
	
	// Timer loop
	set_task(1.0, "kamikaze_check", _, _, _, "b")

	gMsgSync = CreateHudSyncObj()
}
//----------------------------------------------------------------------------------------------
public plugin_precache()
{
	gSpriteSmoke = precache_model("sprites/steam1.spr")
	gSpriteWhite = precache_model("sprites/white.spr")
	gSpriteFire = precache_model("sprites/explode1.spr")
	precache_sound(gSoundCountdown)
}
//----------------------------------------------------------------------------------------------
public sh_hero_init(id, heroID, mode)
{
	if ( gHeroID != heroID ) return

	gHasKamikaze[id] = mode ? true : false

	sh_debug_message(id, 1, "%s %s", gHeroName, mode ? "ADDED" : "DROPPED")
}
//----------------------------------------------------------------------------------------------
public sh_client_spawn(id)
{
	gPlayerInCooldown[id] = false
	gFuseTime[id] = 0
}
//----------------------------------------------------------------------------------------------
public sh_hero_key(id, heroID, key)
{
	if ( gHeroID != heroID || sh_is_freezetime() ) return
	if ( !is_user_alive(id) || !gHasKamikaze[id] ) return

	if ( key == SH_KEYDOWN ) {
		// Let them know they already used their ultimate if they have
		if ( gPlayerInCooldown[id] ) {
			sh_sound_deny(id)
			return
		}

		gPlayerInCooldown[id] = true
		gFuseTime[id] = get_pcvar_num(pCvarFuse)
	}
}
//----------------------------------------------------------------------------------------------
public kamikaze_check()
{
	if ( !sh_is_active() ) return

	static players[SH_MAXSLOTS], playerCount, player, fuseTime, i
	get_players(players, playerCount, "ah")

	for ( i = 0; i < playerCount; i++ ) {
		player = players[i]

		if ( !gHasKamikaze[player] ) continue

		fuseTime = gFuseTime[player]

		if ( fuseTime > 0 ) {
			emit_sound(player, CHAN_ITEM, gSoundCountdown, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)

			gFuseTime[player] = --fuseTime

			if ( fuseTime <= 0 ) {
				blow_up(player)
			}
			else {
				// Decrement the counter
				set_hudmessage(0, 100, 200, 0.05, 0.65, 2, 0.02, 1.0, 0.01, 0.1, -1)
				ShowSyncHudMsg(player, gMsgSync, "You will explode in %d second%s", fuseTime, fuseTime == 1 ? "" : "s")

				// Say Time Remaining to the User Only.
				if ( fuseTime == 11 ) {
					client_cmd(player, "spk ^"fvox/remaining^"")
				}
				else if ( fuseTime < 11 ) {
					client_cmd(player, "spk ^"fvox/%s^"", gSoundFvox[fuseTime])
				}
			}
		}
	}
}
//----------------------------------------------------------------------------------------------
public blow_up(id)
{
	if ( !is_user_connected(id) ) return

	new Float:dRatio, Float:distanceBetween, damage
	new Float:idOrigin[3], Float:playerOrigin[3], name[32]
	new Float:dmgRadius = get_pcvar_float(pCvarRadius)
	new maxDamage = get_pcvar_num(pCvarMaxDamage)
	new FFOn = sh_friendlyfire_on()
	new CsTeams:idTeam = cs_get_user_team(id)

	gFuseTime[id] = 0

	pev(id, pev_origin, idOrigin)

	// blowup even if dead
	explode_effect(idOrigin)

	// Kill id first, if alive, because he is the bomb
	if ( is_user_alive(id) ) {
		set_pev(id, pev_takedamage, DAMAGE_AIM)		// Make sure they dont have godmode so we can kill them
		sh_extra_damage(id, id, 0, "suicide bomb", _, SH_DMG_KILL)
	}

	get_user_name(id, name, 31)
	set_hudmessage(0, 100, 200, 0.05, 0.65, 2, 0.02, 1.0, 0.01, 0.1, -1)
	ShowSyncHudMsg(0, gMsgSync, "%s has exploded", name)

	new players[SH_MAXSLOTS], playerCount, player
	get_players(players, playerCount, "ah")

	for ( new i = 0; i < playerCount; i++ ) {
		player = players[i]

		pev(player, pev_origin, playerOrigin)
		distanceBetween = vector_distance(idOrigin, playerOrigin)

		if ( distanceBetween <= dmgRadius ) {
			if ( FFOn || idTeam != cs_get_user_team(player) ) {
				dRatio = distanceBetween / dmgRadius
				damage = maxDamage - floatround(maxDamage * dRatio)
				if ( !damage ) damage = 1	// Incase damage cvar is really low cause something if within the radius 
				sh_extra_damage(player, id, damage, "kamikaze bomb", _, SH_DMG_NORM, true)
			}

			// Add some push and shake effects instead of dmgStun later, and cause it on everyone within radius
		}
	}
}
//----------------------------------------------------------------------------------------------
explode_effect(Float:vec1[3])
{
	// blast circles
	engfunc(EngFunc_MessageBegin, MSG_BROADCAST, SVC_TEMPENTITY, vec1, 0)
	write_byte(TE_BEAMCYLINDER)	// 21
	engfunc(EngFunc_WriteCoord, vec1[0])
	engfunc(EngFunc_WriteCoord, vec1[1])
	engfunc(EngFunc_WriteCoord, vec1[2] + 16)
	engfunc(EngFunc_WriteCoord, vec1[0])
	engfunc(EngFunc_WriteCoord, vec1[1])
	engfunc(EngFunc_WriteCoord, vec1[2] + 1936)
	write_short(gSpriteWhite)
	write_byte(0)		// startframe
	write_byte(0)		// framerate
	write_byte(2)		// life
	write_byte(20)		// width
	write_byte(0)		// noise
	write_byte(188)		// r
	write_byte(220)		// g
	write_byte(255)		// b
	write_byte(255)		// brightness
	write_byte(0)		// speed
	message_end()

	// Explosion2
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
	write_byte(TE_EXPLOSION2)	// 12
	engfunc(EngFunc_WriteCoord, vec1[0])
	engfunc(EngFunc_WriteCoord, vec1[1])
	engfunc(EngFunc_WriteCoord, vec1[2])
	write_byte(188)		// scale in 0.1's
	write_byte(10)		// framerate
	message_end()

	// Explosion
	engfunc(EngFunc_MessageBegin, MSG_BROADCAST, SVC_TEMPENTITY, vec1, 0)
	write_byte(TE_EXPLOSION)	// 3
	engfunc(EngFunc_WriteCoord, vec1[0])
	engfunc(EngFunc_WriteCoord, vec1[1])
	engfunc(EngFunc_WriteCoord, vec1[2])
	write_short(gSpriteFire)
	write_byte(60)		// scale in 0.1's
	write_byte(10)		// framerate
	write_byte(TE_EXPLFLAG_NONE)		// flags
	message_end()

	// Smoke
	engfunc(EngFunc_MessageBegin, MSG_BROADCAST, SVC_TEMPENTITY, vec1, 0)
	write_byte(TE_SMOKE)		// 5
	engfunc(EngFunc_WriteCoord, vec1[0])
	engfunc(EngFunc_WriteCoord, vec1[1])
	engfunc(EngFunc_WriteCoord, vec1[2])
	write_short(gSpriteSmoke)
	write_byte(10)		// scale in 0.1's
	write_byte(10)		// framerate
	message_end()
}
//----------------------------------------------------------------------------------------------
public sh_client_death(victim)
{
	if ( victim < 1 || victim > sh_maxplayers() ) return

	if ( gFuseTime[victim] > 0 ) {
		// Delay to avoid recursion
		set_task(0.1, "blow_up", victim)
	}
}
//----------------------------------------------------------------------------------------------
public client_connect(id)
{
	gHasKamikaze[id] = false
	gFuseTime[id] = 0
}
//----------------------------------------------------------------------------------------------
public client_disconnect(id)
{
	gHasKamikaze[id] = false
	gFuseTime[id] = 0
}
//----------------------------------------------------------------------------------------------,
public kamikaze_levels()
{
	new id[5]
	new lev[5]

	read_argv(1,id,4)
	read_argv(2,lev,4)

	gPlayerLevels[str_to_num(id)] = str_to_num(lev)

	kamikaze_checklevel(str_to_num(id))
}
//----------------------------------------------------------------------------------------------
public kamikaze_checklevel(id)
{
	new kamikaze_maxlvl = get_pcvar_num("pCvarMaxLevel")
	if (gHasKamikaze[id] && gPlayerLevels[id] > kamikaze_maxlvl) {
		client_print(id,print_chat, "[SH](%s) You must be level %d or lower to use this hero",gHeroName,kamikaze_maxlvl)
		gHasKamikaze[id] = false
		client_cmd(id,"say drop %s",gHeroName)
	}

}
//----------------------------------------------------------------------------------------------
Welcome to the AMX Mod X 1.8.1-300 Compiler.
Copyright (c) 1997-2006 ITB CompuPhase, AMX Mod X Team

/home/groups/amxmodx/tmp3/phpYwXaba.sma(282) : error 035: argument type mismatch (argument 1)
/home/groups/amxmodx/tmp3/phpYwXaba.sma(294) : warning 204: symbol is assigned a value that is never used: "pCvarMaxLevel"

1 Error.
Could not locate output file /home/groups/amxmodx/public_html/websc3/phpYwXaba.amx (compile failed).

I fixed two other erros, but this I don't know how, how it's never used?!
Zorba is offline
G-Dog
Senior Member
Join Date: Dec 2005
Location: Thunderstorm Central
Old 07-23-2010 , 20:28   Re: Trying to put level limit on Kamikaze
Reply With Quote #5

PHP Code:
get_pcvar_num("pCvarMaxLevel"
should be
PHP Code:
get_pcvar_num(pCvarMaxLevel
__________________
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
Jelle
[b]MOAR CANDY[/b]
Join Date: Aug 2009
Location: Denmark
Old 07-23-2010 , 20:47   Re: Trying to put level limit on Kamikaze
Reply With Quote #6

Why not just check the level when the hero is added, and then check what level the guy is, and if he is too high, then just drop it?
__________________
No idea what to write here...
Jelle is offline
Send a message via MSN to Jelle
kanatzu
Veteran Member
Join Date: Oct 2007
Location: Sweden
Old 07-23-2010 , 20:48   Re: Trying to put level limit on Kamikaze
Reply With Quote #7

Quote:
Originally Posted by Zorba View Post
Please, delete the post, it's in the wrong area ;SS
It is?
__________________




Quote:
Originally Posted by wrecked_ View Post
Stop saying words before I sodomize you with a cucumber.
kanatzu is offline
Send a message via MSN to kanatzu
Zorba
Member
Join Date: Apr 2008
Old 07-24-2010 , 01:09   Re: Trying to put level limit on Kamikaze
Reply With Quote #8

Quote:
Originally Posted by G-Dog View Post
PHP Code:
get_pcvar_num("pCvarMaxLevel"
should be
PHP Code:
get_pcvar_num(pCvarMaxLevel
Thx, it solves, I will test it in a fell hours, when I wake up.

Quote:
Originally Posted by Jelle View Post
Why not just check the level when the hero is added, and then check what level the guy is, and if he is too high, then just drop it?
I hadn't thought about it, is a great idea, if it won't work I will do it. thank you so much!
Zorba is offline
Zorba
Member
Join Date: Apr 2008
Old 07-24-2010 , 02:15   Re: Trying to put level limit on Kamikaze
Reply With Quote #9

So, now it compile normally but it still not dropping the hero!

Code:
// GLOBAL VARIABLES
new gHeroID
new const gHeroName[] = "Kamikaze"
new bool:gHasKamikaze[SH_MAXSLOTS+1]
new gFuseTime[SH_MAXSLOTS+1]
new const gSoundCountdown[] = "buttons/blip2.wav"
new const gSoundFvox[11][] = {"", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"}
new gSpriteSmoke, gSpriteWhite, gSpriteFire
new gMsgSync
new pCvarRadius, pCvarFuse, pCvarMaxDamage, pCvarMaxLevel
new gPlayerLevels[SH_MAXSLOTS+1]
//----------------------------------------------------------------------------------------------
public plugin_init()
{
	// Plugin Info
	register_plugin("SUPERHERO Kamikaze", SH_VERSION_STR, "Zorba & AssKicR/JTP10181")

	// DO NOT EDIT THIS FILE TO CHANGE CVARS, USE THE SHCONFIG.CFG
	new pcvarLevel = register_cvar("kamikaze_level", "0")
	pCvarRadius = register_cvar("kamikaze_radius", "300")
	pCvarFuse = register_cvar("kamikaze_fuse", "15")
	pCvarMaxDamage = register_cvar("kamikaze_maxdamage", "125")
	pCvarMaxLevel = register_cvar("kamikaze_maxlevel", "10")

	// FIRE THE EVENTS TO CREATE THIS SUPERHERO!
	gHeroID = sh_create_hero(gHeroName, pcvarLevel)
	sh_set_hero_info(gHeroID, "Blow Self Up", "Blow up the enemies with a Kamikaze attack")
	sh_set_hero_bind(gHeroID)
         
	// EVENT
	register_event("ResetHUD","newRound","b") 
	
	// LEVELS
	register_srvcmd("kamikaze_levels", "kamikaze_levels")
	shRegLevels(gHeroName,"kamikaze_levels")
	
	// Timer loop
	set_task(1.0, "kamikaze_check", _, _, _, "b")

	gMsgSync = CreateHudSyncObj()
}
//----------------------------------------------------------------------------------------------
public plugin_precache()
{
	gSpriteSmoke = precache_model("sprites/steam1.spr")
	gSpriteWhite = precache_model("sprites/white.spr")
	gSpriteFire = precache_model("sprites/explode1.spr")
	precache_sound(gSoundCountdown)
}
//----------------------------------------------------------------------------------------------
public sh_hero_init(id, heroID, mode)
{
	if ( gHeroID != heroID ) return

	gHasKamikaze[id] = mode ? true : false

	sh_debug_message(id, 1, "%s %s", gHeroName, mode ? "ADDED" : "DROPPED")
}
//----------------------------------------------------------------------------------------------
public sh_client_spawn(id)
{
	gPlayerInCooldown[id] = false
	gFuseTime[id] = 0
}
//----------------------------------------------------------------------------------------------
public sh_hero_key(id, heroID, key)
{
	if ( gHeroID != heroID || sh_is_freezetime() ) return
	if ( !is_user_alive(id) || !gHasKamikaze[id] ) return

	if ( key == SH_KEYDOWN ) {
		// Let them know they already used their ultimate if they have
		if ( gPlayerInCooldown[id] ) {
			sh_sound_deny(id)
			return
		}

		gPlayerInCooldown[id] = true
		gFuseTime[id] = get_pcvar_num(pCvarFuse)
	}
}
//----------------------------------------------------------------------------------------------
public kamikaze_check()
{
	if ( !sh_is_active() ) return

	static players[SH_MAXSLOTS], playerCount, player, fuseTime, i
	get_players(players, playerCount, "ah")

	for ( i = 0; i < playerCount; i++ ) {
		player = players[i]

		if ( !gHasKamikaze[player] ) continue

		fuseTime = gFuseTime[player]

		if ( fuseTime > 0 ) {
			emit_sound(player, CHAN_ITEM, gSoundCountdown, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)

			gFuseTime[player] = --fuseTime

			if ( fuseTime <= 0 ) {
				blow_up(player)
			}
			else {
				// Decrement the counter
				set_hudmessage(0, 100, 200, 0.05, 0.65, 2, 0.02, 1.0, 0.01, 0.1, -1)
				ShowSyncHudMsg(player, gMsgSync, "You will explode in %d second%s", fuseTime, fuseTime == 1 ? "" : "s")

				// Say Time Remaining to the User Only.
				if ( fuseTime == 11 ) {
					client_cmd(player, "spk ^"fvox/remaining^"")
				}
				else if ( fuseTime < 11 ) {
					client_cmd(player, "spk ^"fvox/%s^"", gSoundFvox[fuseTime])
				}
			}
		}
	}
}
//----------------------------------------------------------------------------------------------
public blow_up(id)
{
	if ( !is_user_connected(id) ) return

	new Float:dRatio, Float:distanceBetween, damage
	new Float:idOrigin[3], Float:playerOrigin[3], name[32]
	new Float:dmgRadius = get_pcvar_float(pCvarRadius)
	new maxDamage = get_pcvar_num(pCvarMaxDamage)
	new FFOn = sh_friendlyfire_on()
	new CsTeams:idTeam = cs_get_user_team(id)

	gFuseTime[id] = 0

	pev(id, pev_origin, idOrigin)

	// blowup even if dead
	explode_effect(idOrigin)

	// Kill id first, if alive, because he is the bomb
	if ( is_user_alive(id) ) {
		set_pev(id, pev_takedamage, DAMAGE_AIM)		// Make sure they dont have godmode so we can kill them
		sh_extra_damage(id, id, 0, "suicide bomb", _, SH_DMG_KILL)
	}

	get_user_name(id, name, 31)
	set_hudmessage(0, 100, 200, 0.05, 0.65, 2, 0.02, 1.0, 0.01, 0.1, -1)
	ShowSyncHudMsg(0, gMsgSync, "%s has exploded", name)

	new players[SH_MAXSLOTS], playerCount, player
	get_players(players, playerCount, "ah")

	for ( new i = 0; i < playerCount; i++ ) {
		player = players[i]

		pev(player, pev_origin, playerOrigin)
		distanceBetween = vector_distance(idOrigin, playerOrigin)

		if ( distanceBetween <= dmgRadius ) {
			if ( FFOn || idTeam != cs_get_user_team(player) ) {
				dRatio = distanceBetween / dmgRadius
				damage = maxDamage - floatround(maxDamage * dRatio)
				if ( !damage ) damage = 1	// Incase damage cvar is really low cause something if within the radius 
				sh_extra_damage(player, id, damage, "kamikaze bomb", _, SH_DMG_NORM, true)
			}

			// Add some push and shake effects instead of dmgStun later, and cause it on everyone within radius
		}
	}
}
//----------------------------------------------------------------------------------------------
explode_effect(Float:vec1[3])
{
	// blast circles
	engfunc(EngFunc_MessageBegin, MSG_BROADCAST, SVC_TEMPENTITY, vec1, 0)
	write_byte(TE_BEAMCYLINDER)	// 21
	engfunc(EngFunc_WriteCoord, vec1[0])
	engfunc(EngFunc_WriteCoord, vec1[1])
	engfunc(EngFunc_WriteCoord, vec1[2] + 16)
	engfunc(EngFunc_WriteCoord, vec1[0])
	engfunc(EngFunc_WriteCoord, vec1[1])
	engfunc(EngFunc_WriteCoord, vec1[2] + 1936)
	write_short(gSpriteWhite)
	write_byte(0)		// startframe
	write_byte(0)		// framerate
	write_byte(2)		// life
	write_byte(20)		// width
	write_byte(0)		// noise
	write_byte(188)		// r
	write_byte(220)		// g
	write_byte(255)		// b
	write_byte(255)		// brightness
	write_byte(0)		// speed
	message_end()

	// Explosion2
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
	write_byte(TE_EXPLOSION2)	// 12
	engfunc(EngFunc_WriteCoord, vec1[0])
	engfunc(EngFunc_WriteCoord, vec1[1])
	engfunc(EngFunc_WriteCoord, vec1[2])
	write_byte(188)		// scale in 0.1's
	write_byte(10)		// framerate
	message_end()

	// Explosion
	engfunc(EngFunc_MessageBegin, MSG_BROADCAST, SVC_TEMPENTITY, vec1, 0)
	write_byte(TE_EXPLOSION)	// 3
	engfunc(EngFunc_WriteCoord, vec1[0])
	engfunc(EngFunc_WriteCoord, vec1[1])
	engfunc(EngFunc_WriteCoord, vec1[2])
	write_short(gSpriteFire)
	write_byte(60)		// scale in 0.1's
	write_byte(10)		// framerate
	write_byte(TE_EXPLFLAG_NONE)		// flags
	message_end()

	// Smoke
	engfunc(EngFunc_MessageBegin, MSG_BROADCAST, SVC_TEMPENTITY, vec1, 0)
	write_byte(TE_SMOKE)		// 5
	engfunc(EngFunc_WriteCoord, vec1[0])
	engfunc(EngFunc_WriteCoord, vec1[1])
	engfunc(EngFunc_WriteCoord, vec1[2])
	write_short(gSpriteSmoke)
	write_byte(10)		// scale in 0.1's
	write_byte(10)		// framerate
	message_end()
}
//----------------------------------------------------------------------------------------------
public sh_client_death(victim)
{
	if ( victim < 1 || victim > sh_maxplayers() ) return

	if ( gFuseTime[victim] > 0 ) {
		// Delay to avoid recursion
		set_task(0.1, "blow_up", victim)
	}
}
//----------------------------------------------------------------------------------------------
public client_connect(id)
{
	gHasKamikaze[id] = false
	gFuseTime[id] = 0
}
//----------------------------------------------------------------------------------------------
public client_disconnect(id)
{
	gHasKamikaze[id] = false
	gFuseTime[id] = 0
}
//----------------------------------------------------------------------------------------------,
public kamikaze_levels()
{
	new id[5]
	new lev[5]

	read_argv(1,id,4)
	read_argv(2,lev,4)

	gPlayerLevels[str_to_num(id)] = str_to_num(lev)

	kamikaze_checklevel(str_to_num(id))
}
//----------------------------------------------------------------------------------------------
public kamikaze_checklevel(id)
{
	new kamikaze_maxlvl = get_pcvar_num(pCvarMaxLevel)
	if (gHasKamikaze[id] && gPlayerLevels[id] > kamikaze_maxlvl) {
		client_print(id,print_chat, "[SH](%s) You must be level %d or lower to use this hero",gHeroName,kamikaze_maxlvl)
		gHasKamikaze[id] = false
		client_cmd(id,"say drop %s",gHeroName)
	}

}
//----------------------------------------------------------------------------------------------
What can be now?!
Zorba is offline
Jelle
[b]MOAR CANDY[/b]
Join Date: Aug 2009
Location: Denmark
Old 07-24-2010 , 09:02   Re: Trying to put level limit on Kamikaze
Reply With Quote #10

in the init, do it so, if the client adds the hero, it go to check for level.
__________________
No idea what to write here...
Jelle is offline
Send a message via MSN to Jelle
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 11:42.


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