hi I was wondering if someone could help me. im not sure how to go at this but i did try but was unsuccessful.
I tried to make gambit only do damage when the attacker's level is less than the victims.
so basically if you were level 10 and i was level 9 and i threw a gambit grenade at you it would calculate the damage mult and work accordingly. but if the level 10 was to throw it at a level 9 it would act as a regular nade. i have done this with other heroes but was not successful with gambit. help would be much appreciated.
Code:
// GAMBIT! - from the X-men. Can convert any inorganic object's potential energy into kinetic energy on contact.
/* CVARS - copy and paste to shconfig.cfg
//Gambit
gambit_level 0
gambit_grenademult 60.9 //Damage multiplyer from orginal damage amount (def 60.9)
gambit_grenadetimer 30.0 //How many seconds delay for new grenade after nade is thrown (def 30.0)
gambit_cooldown 120.0 //How many seconds until extra grenade damage can be used again (def 120.0)
*/
/*
* v1.3 - vittu - 9/27/05
* - Fixed up cooldown to only be set once.
* - Removed some useless checks.
*
* v1.2 - vittu - 6/19/05
* - Minor code clean up.
*
* v1.1 - vittu - 5/10/05
* - Fixed giving new grenades using a more reliable event.
* - Fixed grenade timer to only be set if you have no nades,
* avoids timer exploiting.
* - Added cooldown cvar, sets only if someone is hurt by gambit.
* - Added grenade glow and trail only for gambit nades.
*
* Hero Created by Vectren
*/
#include <amxmod>
#include <Vexd_Utilities>
#include <superheromod>
#define AMMOX_HEGRENADE 12
// GLOBAL VARIABLES
new gHeroName[]="Gambit"
new bool:gHasGambitPower[SH_MAXSLOTS+1]
new gPlayerLevels[SH_MAXSLOTS+1]
new gGrenTrail
new const HEGRENADE_MODEL[] = "models/w_hegrenade.mdl"
//----------------------------------------------------------------------------------------------
public plugin_init()
{
// Plugin Info
register_plugin("SUPERHERO Gambit", "1.3", "Vectren / vittu")
// DO NOT EDIT THIS FILE TO CHANGE CVARS, USE THE SHCONFIG.CFG
register_cvar("gambit_level", "0")
register_cvar("gambit_grenademult", "60.9")
register_cvar("gambit_grenadetimer", "30.0")
register_cvar("gambit_cooldown", "120.0")
// FIRE THE EVENT TO CREATE THIS SUPERHERO!
shCreateHero(gHeroName, "Kinetically Charged Nades", "Charge your HE Grenades with Kinetic Energy for Extra Damage, also refill HE Grenades.", false, "gambit_level")
// REGISTER EVENTS THIS HERO WILL RESPOND TO! (AND SERVER COMMANDS)
// INIT
register_srvcmd("gambit_init", "gambit_init")
shRegHeroInit(gHeroName, "gambit_init")
// NEW SPAWN
register_event("ResetHUD", "newSpawn", "b")
// EXTRA NADE DAMAGE
register_event("Damage", "gambit_damage", "b", "2!0")
// FIND THROWN GRENADES
register_event("AmmoX", "on_AmmoX", "b")
}
//----------------------------------------------------------------------------------------------
public plugin_precache()
{
gGrenTrail = precache_model("sprites/zbeam5.spr")
}
//----------------------------------------------------------------------------------------------
public gambit_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)
gHasGambitPower[id] = (hasPowers!=0)
if ( hasPowers && is_user_alive(id) ) {
gambit_weapons(id)
}
}
//----------------------------------------------------------------------------------------------
public newSpawn(id)
{
if ( shModActive() && gHasGambitPower[id] && is_user_alive(id) ) {
gPlayerUltimateUsed[id] = false
set_task(0.1, "gambit_weapons", id)
}
}
//----------------------------------------------------------------------------------------------
public gambit_weapons(id)
{
if ( shModActive() && gHasGambitPower[id] && is_user_alive(id) ) {
shGiveWeapon(id, "weapon_hegrenade")
}
}
//----------------------------------------------------------------------------------------------
public gambit_damage(id)
{
new damage = read_data(2)
new weapon, bodypart, attacker = get_user_attacker(id, weapon, bodypart)
new headshot = bodypart == 1 ? 1 : 0
if ( !shModActive() || !is_user_alive(id) || (gPlayerLevels[id]<gPlayerLevels[attacker]) ) return PLUGIN_CONTINUE
if ( attacker <= 0 || attacker > SH_MAXSLOTS ) return PLUGIN_CONTINUE
if ( gHasGambitPower[attacker] && weapon == CSW_HEGRENADE && is_user_alive(id) && !gPlayerUltimateUsed[attacker] ) {
// do extra damage
new extraDamage = floatround(damage * get_cvar_float("gambit_grenademult") - damage)
if (extraDamage > 0) shExtraDamage(id, attacker, extraDamage, "grenade", headshot)
if ( attacker != id ) {
// Set the cooldown in x seconds because nades can hurt more then one person
// only when damaging others
new parm[1]
parm[0] = attacker
set_task(0.2, "gambit_setcooldown", 0, parm,1)
}
}
}
//----------------------------------------------------------------------------------------------
public on_AmmoX(id)
{
if ( !shModActive() || !is_user_alive(id) ) return
new iAmmoType = read_data(1)
new iAmmoCount = read_data(2)
if ( iAmmoType == AMMOX_HEGRENADE && gHasGambitPower[id] ) {
if (iAmmoCount == 0) {
set_task(get_cvar_float("gambit_grenadetimer"), "gambit_weapons", id)
if ( !gPlayerUltimateUsed[id] ) {
// Have to Find the current HE grenade
new iCurrent = -1
while ( ( iCurrent = FindEntity(iCurrent, "grenade") ) > 0 ) {
new string[32]
Entvars_Get_String(iCurrent, EV_SZ_model, string, 31)
if ( id == Entvars_Get_Edict(iCurrent, EV_ENT_owner) && equali(HEGRENADE_MODEL, string)) {
new Float:glowColor[3] = {225.0, 0.0, 20.0}
// Make the nade glow
Entvars_Set_Int(iCurrent, EV_INT_renderfx, kRenderFxGlowShell)
Entvars_Set_Vector(iCurrent, EV_VEC_rendercolor, glowColor)
// Make the nade a bit invisible to make glow look better
Entvars_Set_Int(iCurrent, EV_INT_rendermode, kRenderTransAlpha)
Entvars_Set_Float(iCurrent, EV_FL_renderamt, 100.0 )
// Make a trail
message_begin(MSG_BROADCAST ,SVC_TEMPENTITY)
write_byte(22) //TE_BEAMFOLLOW
write_short(iCurrent) // entity:attachment to follow
write_short(gGrenTrail) // sprite index
write_byte(10) // life in 0.1's
write_byte(10) // line width in 0.1's
write_byte(225) // colour
write_byte(90)
write_byte(102)
write_byte(255) // brightness
message_end()
}
}
}
}
else if (iAmmoCount > 0) {
// Got a new nade remove the timer
remove_task(id)
}
}
}
//----------------------------------------------------------------------------------------------
public gambit_setcooldown(parm[])
{
new id = parm[0]
if ( !is_user_alive(id) || gPlayerUltimateUsed[id] ) return
// Cooldown will only be set if user hurts someone with a gambit nade
new Float:gambitCooldown = get_cvar_float("gambit_cooldown")
if (gambitCooldown > 0.0) ultimateTimer(id, gambitCooldown)
}
//----------------------------------------------------------------------------------------------
public client_connect(id)
{
gHasGambitPower[id] = false
}
//----------------------------------------------------------------------------------------------
__________________