SH Tutorial 1.2
Revision as of 21:13, 13 October 2009 by Jtpizzalover (talk | contribs) (Superhero Mod tutuorial for the code changes under shmod1.2)
#include <superheromod> //Must be included in the creating of a superhero // VARIABLES new const gHeroName[]="Tutorial" //Name Of The Hero new bool:gHasTutorialPower[SH_MAXSLOTS+1] //A Variable telling us if player has this hero //---------------------------------------------------------------------------------------------- public plugin_init() { // Plugin Info register_plugin("SUPERHERO Tutorial","1.0","AssKicR") //Register The Plugin (name,version,creator) // DEFAULT THE CVARS new pcvarGravity = register_cvar("tutorial_gravity", "0.35" ) //Cvar holding the heros Gravity new pcvarArmor = register_cvar("tutorial_armor", "150") //Cvar holding the heros AP new pcvarHealth = register_cvar("tutorial_health", "150") //Cvar holding the heros HP new pcvarSpeed = register_cvar("tutorial_speed", "300") //Cvar holding the heros Speed new pcvarCooldown = register_cvar("tutorial_cooldown", "0" ) //Cvar holding the heros Gravity new pcvarMultiplier = register_cvar("tutorial_multiplier", "10" ) //Cvar holding a number that we are gonna use as a multiplier later new pcvarHealpoints = register_cvar("tutorial_healpoints", "1" ) //Cvar we are using to see how much he heals new pcvarLevel = register_cvar("tutorial_level", "0" ) ///Resister the cvar that tells us what level he is available sh_set_hero_info(gHeroID, "Short Desc", "Longer Desc") // This is the command that registers the hero with the mod. In The "Short Desc" You write a short Description.. And a longer one in "Longer Desc" // Binds sh_set_hero_bind(gHeroID) //This command is added for bind-able heros. // DEATH EVENT register_event("DeathMsg", "tutorial_death", "a") //When someone is killed this event is called // NEW ROUND register_event("ResetHUD","newRound","b") //Called on a New Round // DAMAGE EVENT register_event("Damage", "tutorial_damage", "b", "2!0") //Called When a Player Gets Damaged by another player // WEAPON EVENT (called on CHANGING of weapon... ZOOMING of weapon... and when you RUN OUT OF AMMO on a weapon) register_event("CurWeapon","changeWeapon","be","1=1") // LOOP register_srvcmd("tutorial_loop", "tutorial_loop") //shRegLoop1P0(gHeroName, "tutorial_loop", "ac") // Alive tutorialerineHeros="ac" set_task(1.0,"tutorial_loop",0,"",0,"b" ) // Let Server know about Tutorials Variable // It is possible that another hero has more hps, less gravity, or more armor // so rather than just setting these - let the superhero module decide each round sh_set_hero_hpap(heroID, pcvarHealth, pcvarArmor) sh_set_hero_grav(heroID, pcvarGravity) sh_set_hero_speed(heroID, pcvarSpeed) //---------------------------------------------------------------------------------------------- public tutorial_init() { new temp[6] //Variable to store temp info in // First Argument is an id read_argv(1,temp,5) //This Checks for the ID of the person selecting/dropping this hero and saves as string new id=str_to_num(temp) //This makes the string Into a num // 2nd Argument is 0 or 1 depending on whether the id has flash read_argv(2,temp,5) //This Checks if ID has this hero new hasPowers=str_to_num(temp) //This makes the string into a num gHasTutorialPower[id]=(hasPowers!=0) //Store if this person has the hero if ( hasPowers ) //Check if person selected this hero { //Do stuff to him if he just seleced it } // Got to slow down a Flash that lost his powers... if ( !hasPowers && is_user_connected(id) ) //Check if person dropped this hero { //Do stuff to him if he just droppped it shRemHealthPower(id) //Loose the HP power of this hero shRemGravityPower(id) //Loose the Gravity power of this hero shRemArmorPower(id) //Loose the AP power of this hero shRemSpeedPower(id) //Loose the Speed power of this hero } } //---------------------------------------------------------------------------------------------- public plugin_precache() { // precache_sound("misc/name.wav") // Sounds Must be precached before they can be used // precache_sound("models/name.mdl") // Models Must be precached before they can be used } //---------------------------------------------------------------------------------------------- public client_connect(id) { // This event is called every time someone connects to server } //---------------------------------------------------------------------------------------------- public client_putinserver(id) { // This event is called every time someone gets into to server } //---------------------------------------------------------------------------------------------- public client_disconnect(id) { // This event is called every time someone disconnects from server } //---------------------------------------------------------------------------------------------- // RESPOND TO KEYDOWN public tutorial_kd() { new temp[6] //Variable to store temp info in // First Argument is an id with Tutorial Powers! read_argv(1,temp,5) //This Checks for the ID of the person pressing the button new id=str_to_num(temp) //This makes the string Into a num // Let them know they already used their ultimate if they have if ( gPlayerUltimateUsed[id] ) //If the player already have used this and try using again while avtive/ in cooldown... { playSoundDenySelect(id) //...It plays the deny sound... return PLUGIN_HANDLED //...And cancels the users action } new TutorialCooldown=get_cvar_num("tutorial_cooldown") //How long the cooldown is (cvar controlled) if ( TutorialCooldown>0 ) //Check if it is higher than 0 (0=disabled) ultimateTimer(id, TutorialCooldown * 1.0 ) //Fire the Ultimatetimer //Fire an action on this button press here return PLUGIN_HANDLED } //---------------------------------------------------------------------------------------------- // RESPOND TO KEYUP public tutorial_ku() { new temp[6] //Variable to store temp info in // First Argument is an id with tutorial Powers! read_argv(1,temp,5) //This Checks for the ID of the person pressing the button new id=str_to_num(temp) //This makes the string Into a num //Fire an action on this button release here return PLUGIN_HANDLED } //---------------------------------------------------------------------------------------------- public tutorial_death() { //The Deathmessage is "Killer Weapon Victim" Killer=data1 Victim=data2 Weapon=data3 new id=read_data(2) //Get the ID of the person who died if (gHasTutorialPower[id]) { //Checks if the person killed has the powers of this hero //Do something to him when he dies } if (!gHasTutorialPower[id]) { //Checks if the person killed doesn't have the powers of this hero //Do something to him when he dies } return PLUGIN_HANDLED } //---------------------------------------------------------------------------------------------- public newRound(id) { gPlayerUltimateUsed[id]=false // It is a new round so nevermind the cooldown on the skill and let him use it again return PLUGIN_HANDLED } //---------------------------------------------------------------------------------------------- public tutorial_damage(id) { //!shModActive() tells us that that shMod Must be active //!gHasTutorialPower[id] tells us that the person being attacked must have Tutorial Hero if (!shModActive() || !gHasTutorialPower[id] ) return PLUGIN_CONTINUE new damage = read_data(2) //This reads the damage done to ID new weapon, bodypart, attacker = get_user_attacker(id,weapon,bodypart) //is_user_alive(id) checks if the one attacked is still alive //id != attacker States that the Person giving damage can't be the same as the one getting it //weapon=CSW_KNIFE tell us that only the weapon knife will make this happen (Changeable.. Look in amxconst.inc for other ) if ( is_user_alive(id) && id != attacker && weapon==CSW_KNIFE) { // DO EXTRA DAMAGE (Can be replaced by something else) new extraDamage = floatround(damage * get_cvar_float("tutorial_multiplier") - damage) //Find out how much extradamage there is if (extraDamage>0) //Check if extradamage is higher that 0 new defence=random_num(0,5) //This will assign a random number between 0 and 5 to the variable defence switch (defence) { //Choose one of these defences depending on what the number is case 0:shExtraDamage( id, attacker, extraDamage, "Right Hook" ) //Do extraDamage to ID from ATTACKER with weapon Right Hook case 1:shExtraDamage( id, attacker, extraDamage, "Left Hook" ) //Do extraDamage to ID from ATTACKER with weapon Left Hook case 2:shExtraDamage( id, attacker, extraDamage, "Right Jab" ) //Do extraDamage to ID from ATTACKER with weapon Right Jab case 3:shExtraDamage( id, attacker, extraDamage, "Left Jab" ) //Do extraDamage to ID from ATTACKER with weapon left Jab case 4:shExtraDamage( id, attacker, extraDamage, "Uppercut" ) //Do extraDamage to ID from ATTACKER with weapon Uppercut case 5:shExtraDamage( id, attacker, 0, "Miss" ) //Do 0 damage to ID from ATTACKER } } setScreenFlash(attacker, 230, 10, 10, 10, damage ) //This makes the screen of the attacker flash sh_screenShake(attacker, 14, 14, 14 ) //Make his Screen Shake a little shStun(attacker, 1) //Stun Him in 1 second return PLUGIN_CONTINUE } //---------------------------------------------------------------------------------------------- public tutorial_loop() { for ( new id=1; id<=SH_MAXSLOTS; id++ ) //Check Everyone on Server { if ( gHasTutorialPower[id] && is_user_alive(id) ) //Check if this person is alive and has the powers of the Tutorial hero { shAddHPs(id, get_cvar_num("tutorial_healpoints"), 50 ) //This Command gives the hero back HP to max 50 in this case } } } //---------------------------------------------------------------------------------------------- public changeWeapon(id) { if ( !gHasTutorialPower[id] || !shModActive() ) return PLUGIN_CONTINUE new clip, ammo new wpn_id=get_user_weapon(id, clip, ammo) //Get some info on current weapon new wpn[32] //JUST MAKING SURE IT'S NOT GRENADES,KNIFE or C4 if ( wpn_id==CSW_C4 || wpn_id==CSW_HEGRENADE || wpn_id == CSW_SMOKEGRENADE || wpn_id == CSW_FLASHBANG || wpn_id == CSW_KNIFE ) return PLUGIN_CONTINUE // Never Run Out of Ammo! //server_print("STATUS ID=%d CLIP=%d, AMMO=%d WPN=%d", id, clip, ammo, wpn_id) if ( clip == 0 ) { //server_print("INVOKING PUNISHER MODE! ID=%d CLIP=%d, AMMO=%d WPN=%d", id, clip, ammo, wpn_id) get_weaponname(wpn_id,wpn,31) //Get name of the weapon give_item(id,wpn) //Give him that weapon engclient_cmd(id, wpn ) //Switch to that weapon shResetSpeed(id) //Set heros speed to normal hero again } return PLUGIN_CONTINUE } //----------------------------------------------------------------------------------------------