Raised This Month: $ Target: $400
 0% 

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
Zorba
Member
Join Date: Apr 2008
Old 07-27-2010 , 18:15   Re: Trying to put level limit on Kamikaze
Reply With Quote #2

It still not dropping. ;s
Zorba is offline
The Art of War
Veteran Member
Join Date: Dec 2009
Location: Sweden Rock Festival
Old 08-21-2010 , 06:22   Re: Trying to put level limit on Kamikaze
Reply With Quote #3

I tested a level limit on a hero that gave you a HE grenade and set custom models on the grenade and made extra damage with the nade, and the level limit works fine except when you spam choose it. Is there any way to fix that (as there is no keydown in that hero)?
__________________
The Art of War is offline
DarkGod
SourceMod DarkCrab
Join Date: Jul 2007
Location: Sweden
Old 08-21-2010 , 10:20   Re: Trying to put level limit on Kamikaze
Reply With Quote #4

Quote:
Originally Posted by The Art of War View Post
I tested a level limit on a hero that gave you a HE grenade and set custom models on the grenade and made extra damage with the nade, and the level limit works fine except when you spam choose it. Is there any way to fix that (as there is no keydown in that hero)?
Turn off antiflood.
__________________
DarkGod is offline
Send a message via AIM to DarkGod Send a message via MSN to DarkGod
Fr33m@n
Veteran Member
Join Date: May 2008
Location: France Marne
Old 08-21-2010 , 11:28   Re: Trying to put level limit on Kamikaze
Reply With Quote #5

Quote:
Originally Posted by The Art of War View Post
I tested a level limit on a hero that gave you a HE grenade and set custom models on the grenade and made extra damage with the nade, and the level limit works fine except when you spam choose it. Is there any way to fix that (as there is no keydown in that hero)?
turn off antiflood or look at the code used in the new version of robin hood
Fr33m@n is offline
The Art of War
Veteran Member
Join Date: Dec 2009
Location: Sweden Rock Festival
Old 08-22-2010 , 06:37   Re: Trying to put level limit on Kamikaze
Reply With Quote #6

Quote:
Originally Posted by Fr33m@n View Post
turn off antiflood or look at the code used in the new version of robin hood
Oh, thank you!
__________________
The Art of War is offline
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
Fr33m@n
Veteran Member
Join Date: May 2008
Location: France Marne
Old 07-26-2010 , 17:47   Re: Trying to put level limit on Kamikaze
Reply With Quote #8

No it's the good area.
I made it.
new cvar to add in shconfig.cfg :
Code:
 
kamikaze_maxlevel 7    //max level for use this hero
Attached Files
File Type: sma Get Plugin or Get Source (sh_kamikaze.sma - 430 views - 8.7 KB)

Last edited by Fr33m@n; 07-26-2010 at 19:52.
Fr33m@n 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 #9

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 #10

I had done it, but it give me a problem when I try to compile it. I will try it again!
Zorba is offline
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 16:07.


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