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

Firebat


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
LUNCHBOX!!!
Senior Member
Join Date: Nov 2004
Location: In a lunchbox!!!
Old 02-14-2005 , 13:59   Firebat
Reply With Quote #1

I don't know what I did wrong..
So if you could tell me..
Code:
// Firebat! - 

/* CVARS - copy and paste to shconfig.cfg

//Firebat
firebat_level 0
firebat_armorcost 0			//How much amour each flame uses
firebat_numburns 5			//How many time to burn the victim
firebat_burndamage 10		//How much damage each burn does

*/

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

// GLOBAL VARIABLES
new gHeroName[]="firebat"
new bool:gHasfirebatPower[SH_MAXSLOTS+1]
new gIsBurning[SH_MAXSLOTS+1]
new gSpriteSmoke, gSpriteFire, gSpriteBurning
#define AMMOX_HEGRENADE 12
//----------------------------------------------------------------------------------------------
public plugin_init()
{
	// Plugin Info
	register_plugin("SUPERHERO firebat","1.17.5","LUNCHBOX!!!/{HOJ} Batman/JTP10181")

	// DO NOT EDIT THIS FILE TO CHANGE CVARS, USE THE SHCONFIG.CFG
	register_cvar("firebat_level", "0" )
	register_cvar("firebat_armorcost", "0" )
	register_cvar("firebat_numburns", "5" )
	register_cvar("firebat_burndamage", "10" )
        register_cvar("firebat_grenademult", "60.9")
        register_cvar("firebat_grenadetimer", "55") 

	// FIRE THE EVENT TO CREATE THIS SUPERHERO!
	shCreateHero(gHeroName, "Flame Thrower", "Get a Flame Thrower to use on enemies", true, "firebat_level" )

	// REGISTER EVENTS THIS HERO WILL RESPOND TO! (AND SERVER COMMANDS)
	register_srvcmd("firebat_init", "firebat_init")
	shRegHeroInit(gHeroName, "firebat_init")

	register_srvcmd("firebat_kd", "Firebat_kd")
	shRegKeyDown(gHeroName, "firebat_kd")

	register_event("ResetHUD","newRound","b")
  
  // EXTRA NADE DAMAGE
  register_event("Damage", "firebat_damage", "b", "2!0")
  register_event( "TextMsg","grenade_thrown","bc","2&#Game_radio", "4&#Fire_in_the_hole")

  //Find Thrown Grenades
  register_event( "AmmoX", "on_AmmoX", "b" ) 

}
//----------------------------------------------------------------------------------------------
public plugin_precache()
{
	gSpriteSmoke   = precache_model("sprites/steam1.spr")
	gSpriteFire    = precache_model("sprites/explode1.spr")
	gSpriteBurning = precache_model("sprites/xfire.spr")
	precache_sound("ambience/burning1.wav")
	precache_sound("ambience/flameburst1.wav")
	precache_sound("scientist/c1a0_sci_catscream.wav")
	precache_sound("vox/_period.wav")
}
//----------------------------------------------------------------------------------------------
public newRound(id)
{
  new args[1]
  args[0] = id
  gIsBurning[id] = 0
  stopFireSound(args)

  new parm[1]
  parm[0]=id
  
  give_grenade(parm)
  set_user_rendering(id)

}
//----------------------------------------------------------------------------------------------
public give_grenade(parm[])
{
  new id=parm[0]

  if ( is_user_alive(id) && gHasfirebatPower[id] && shModActive() )
  {
       shGiveWeapon(id, "weapon_hegrenade" );
       engclient_cmd(id, "weapon_hegrenade" )
  }
}
//----------------------------------------------------------------------------------------------

public Firebat_damage(id)
{
    if (!shModActive()) return PLUGIN_CONTINUE

    new damage = read_data(2)
    new weapon, bodypart, attacker = get_user_attacker(id,weapon,bodypart)
    
    if ( attacker <=0 || attacker>SH_MAXSLOTS ) return PLUGIN_CONTINUE
    
    if ( gHasfirebatPower[attacker] && weapon == CSW_HEGRENADE && is_user_alive(id) )
    {
       // do extra damage
       new extraDamage = floatround(damage * get_cvar_float("firebat_grenademult") - damage)
       shExtraDamage( id, attacker, extraDamage, "firebat Grenade!" )
    }
    return PLUGIN_CONTINUE
}
//----------------------------------------------------------------------------------------------
public grenade_thrown()
{
  if ( !shModActive() ) return
  
  new name[ 32 ]
  read_data( 3, name, 31 )
  new parm[1]
  parm[0]=get_user_index( name )
  new id=parm[0]
  if ( id<1 || id>32) return
  if ( gHasFirebatPower[id] )
    set_task( get_cvar_float("firebat_grenadetimer"), "give_grenade", 0, parm, 1  )
}
//----------------------------------------------------------------------------------------------
public firebat_init()
{
	// First Argument is an id
	new temp[6]
	read_argv(1,temp,5)
	new id=str_to_num(temp)
	read_argv(2,temp,5)
	new hasPowers = str_to_num(temp)  // !0 = has Firebat power

	gHasFirebatPower[id] = (hasPowers!=0)
}
//----------------------------------------------------------------------------------------------
// Ludwigs flame thrower
public firebat_kd()
{
	if ( !hasRoundStarted() ) return PLUGIN_HANDLED

	// First Argument is an id with firebat
	new temp[6]
	read_argv(1,temp,5)
	new id=str_to_num(temp)

	if ( !is_user_alive(id) ) return PLUGIN_HANDLED

	if( Entvars_Get_Int( id, EV_INT_waterlevel ) == 3 ) {
		client_print(id,print_chat,"[SH] You cannot use the Flame Thrower while underwater")
		playSoundDenySelect(id)
		return PLUGIN_HANDLED
	}

	new fl_cost = get_cvar_num("firebat_armorcost")
	new armr = get_user_armor(id)

	if(armr < fl_cost) {
		client_print(id,print_chat,"%s blasts cost %d armor points each", gHeroName, fl_cost)
		playSoundDenySelect(id)
		return PLUGIN_HANDLED
	}

	set_user_armor(id,armr - fl_cost)

	emit_sound(id, CHAN_WEAPON, "ambience/flameburst1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
	new vec[3]
	new aimvec[3]
	new velocityvec[3]
	new length
	new speed = 10
	get_user_origin(id,vec)
	get_user_origin(id,aimvec,2)
	new dist = get_distance(vec,aimvec)

	new speed1 = 160
	new speed2 = 350
	new radius = 105

	if(dist < 50) {
		radius = 0
		speed = 5
	}
	else if(dist < 150) {
		speed1 = speed2 = 1
		speed = 5
		radius = 50
	}
	else if(dist < 200) {
		speed1 = speed2 = 1
		speed = 5
		radius = 90
	}
	else if(dist < 250) {
		speed1 = speed2 = 90
		speed = 6
		radius = 90
	}
	else if(dist < 300) {
		speed1 = speed2 = 140
		speed = 7
	}
	else if(dist < 350) {
		speed1 = speed2 = 190
		speed = 7
	}
	else if(dist < 400) {
		speed1 = 150
		speed2 = 240
		speed = 8
	}
	else if(dist < 450) {
		speed1 = 150
		speed2 = 290
		speed = 8
	}
	else if(dist < 500) {
		speed1 = 180
		speed2 = 340
		speed = 9
	}

	velocityvec[0]=aimvec[0]-vec[0]
	velocityvec[1]=aimvec[1]-vec[1]
	velocityvec[2]=aimvec[2]-vec[2]
	length = sqrt(velocityvec[0]*velocityvec[0]+velocityvec[1]*velocityvec[1]+velocityvec[2]*velocityvec[2])
	velocityvec[0]=velocityvec[0]*speed/length
	velocityvec[1]=velocityvec[1]*speed/length
	velocityvec[2]=velocityvec[2]*speed/length

	new args[8]
	args[0] = vec[0]
	args[1] = vec[1]
	args[2] = vec[2]
	args[3] = velocityvec[0]
	args[4] = velocityvec[1]
	args[5] = velocityvec[2]
	set_task(0.1,"te_spray",0,args,8,"a",2)
	check_burnzone(id,vec,aimvec,speed1,speed2,radius)

	return PLUGIN_HANDLED
}
//----------------------------------------------------------------------------------------------
public te_spray(args[]){

	//TE_SPRAY
	message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
	write_byte (120) // Throws a shower of sprites or models
	write_coord(args[0]) // start pos
	write_coord(args[1])
	write_coord(args[2])
	write_coord(args[3]) // velocity
	write_coord(args[4])
	write_coord(args[5])
	write_short (gSpriteFire) // spr
	write_byte (8) // count
	write_byte (70) // speed
	write_byte (100) //(noise)
	write_byte (5) // (rendermode)
	message_end()
}
//----------------------------------------------------------------------------------------------
check_burnzone(id,vec[],aimvec[],speed1,speed2,radius)
{
	new tbody,tid
	get_user_aiming(id,tid,tbody,550)

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

	if (get_cvar_num("mp_friendlyfire") == 1) {
		burn_victim(tid,id)
	}
	else if (get_user_team(id) != get_user_team(tid)) {
		burn_victim(tid,id)
	}
	new burnvec1[3],burnvec2[3],length1

	burnvec1[0]=aimvec[0]-vec[0]
	burnvec1[1]=aimvec[1]-vec[1]
	burnvec1[2]=aimvec[2]-vec[2]

	length1=sqrt(burnvec1[0]*burnvec1[0]+burnvec1[1]*burnvec1[1]+burnvec1[2]*burnvec1[2])
	burnvec2[0]=burnvec1[0]*speed2/length1
	burnvec2[1]=burnvec1[1]*speed2/length1
	burnvec2[2]=burnvec1[2]*speed2/length1
	burnvec1[0]=burnvec1[0]*speed1/length1
	burnvec1[1]=burnvec1[1]*speed1/length1
	burnvec1[2]=burnvec1[2]*speed1/length1
	burnvec1[0] += vec[0]
	burnvec1[1] += vec[1]
	burnvec1[2] += vec[2]
	burnvec2[0] += vec[0]
	burnvec2[1] += vec[1]
	burnvec2[2] += vec[2]

	new origin[3]
	for (new i=1; i <= SH_MAXSLOTS; i++) {
		if( is_user_alive(i) && i != id && ( get_cvar_num("mp_friendly_fire") || get_user_team(id) != get_user_team(i) ) ) {
			get_user_origin(i,origin)
			if(get_distance(origin,burnvec1) < radius) {
				burn_victim(i,id)
			}
			else if(get_distance(origin,burnvec2) < radius) {
				burn_victim(i,id)
			}

		}
	}
}
//----------------------------------------------------------------------------------------------
public burn_victim(id,killer)
{
	if( Entvars_Get_Int( id, EV_INT_waterlevel ) == 3 ) return
	if(gIsBurning[id] == 1) return

	gIsBurning[id] = 1

	emit_sound(id, CHAN_ITEM, "ambience/burning1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)

	new args[3]
	args[0] = id
	args[1] = killer
	set_task(0.3,"on_fire",451,args,3,"a", get_cvar_num("firebat_numburns") )
	set_task(0.7,"fire_scream",0,args,3)
	set_task(5.5,"stopFireSound",0,args,3)

}
//----------------------------------------------------------------------------------------------
public on_fire(args[])
{
	new id = args[0]
	new killer = args[1]

	if( !is_user_connected(id) || !is_user_alive(id) ) {
		gIsBurning[id] = 0
		return
	}
	if( Entvars_Get_Int( id, EV_INT_waterlevel ) == 3 ) {
		gIsBurning[id] = 0
		return
	}
	if (!gIsBurning[id]) return

	new rx,ry,rz,forigin[3]
	rx = random_num(-30,30)
	ry = random_num(-30,30)
	rz = random_num(-30,30)
	get_user_origin(id,forigin)

	//TE_SPRITE - additive sprite, plays 1 cycle
	message_begin( MSG_BROADCAST,SVC_TEMPENTITY)
	write_byte( 17 )
	write_coord(forigin[0]+rx) // coord, coord, coord (position)
	write_coord(forigin[1]+ry)
	write_coord(forigin[2]+10+rz)
	write_short( gSpriteBurning ) // short (sprite index)
	write_byte( 30 ) // byte (scale in 0.1's)
	write_byte( 200 ) // byte (brightness)
	message_end()

	//Smoke
	message_begin( MSG_BROADCAST,SVC_TEMPENTITY)
	write_byte( 5 )
	write_coord(forigin[0]+(rx*2)) // coord, coord, coord (position)
	write_coord(forigin[1]+(ry*2))
	write_coord(forigin[2]+100+(rz*2))
	write_short( gSpriteSmoke )// short (sprite index)
	write_byte( 60 ) // byte (scale in 0.1's)
	write_byte( 15 ) // byte (framerate)
	message_end()

	new health = get_user_health(id)
	new damage = get_cvar_num("firebat_burndamage")

	//Prevents the shExtraDamage from saying you attacked a teammate for every cycle of the loop
	if(health - damage  <= 0) {
		shExtraDamage(id, killer, damage, "firebat" )
	}
	else {
		set_user_health(id,health - damage)
	}
}
//----------------------------------------------------------------------------------------------
public fire_scream(args[])
{
	emit_sound(args[0], CHAN_AUTO, "scientist/c1a0_sci_catscream.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
	return PLUGIN_CONTINUE
}
//----------------------------------------------------------------------------------------------
public stopFireSound(args[])
{
	new sndStop=(1<<5)
	gIsBurning[args[0]] = 0
	emit_sound(args[0], CHAN_ITEM, "ambience/burning1.wav", 1.0, ATTN_NORM, sndStop, PITCH_NORM)
	return PLUGIN_CONTINUE
}
//----------------------------------------------------------------------------------------------
public on_AmmoX(id)
{
	if ( !shModActive() ) return
	if ( id <= 0 || id > SH_MAXSLOTS) return
	if ( !is_user_alive(id) || !is_user_connected(id) ) return

	new iAmmoType = read_data(1)
	new iAmmoCount = read_data(2)

	if ( iAmmoType == AMMOX_HEGRENADE && iAmmoCount == 0 && gHasfirebatPower[id]) {
		set_task( get_cvar_float("goblin_grenadetimer"), "give_grenade", id )
	}
}
//----------------------------------------------------------------------------------------------
__________________
Fly..or something
Retierd!
LUNCHBOX!!! is offline
bLiNd
Veteran Member
Join Date: Mar 2005
Old 02-14-2005 , 14:55  
Reply With Quote #2

Code:
   register_cvar("firebat_grenademult", "60.9") 
        register_cvar("firebat_grenadetimer", "55")
These cvars don't match
[code set_task( get_cvar_float("goblin_grenadetimer"), "give_grenade", id )
}
[/code]



Code:
gHasfirebatPower
/\ Make these the same \/
Code:
gHasfirebatPower
bLiNd is offline
LUNCHBOX!!!
Senior Member
Join Date: Nov 2004
Location: In a lunchbox!!!
Old 02-14-2005 , 18:14  
Reply With Quote #3

Okey, thanks but next time don't post it with quotes post it with codes
__________________
Fly..or something
Retierd!
LUNCHBOX!!! is offline
Chivas2973
Veteran Member
Join Date: Mar 2004
Location: Wisconsin
Old 02-15-2005 , 10:46  
Reply With Quote #4

Quote:
Originally Posted by LUNCHBOX!!!
Okey, thanks but next time don't post it with quotes post it with codes
I think you guys created a monster
__________________
Chivas2973 is offline
Reply


Thread Tools
Display Modes

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 08:08.


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