|
Title: [old topic] Lifestealer - N'aix [DotA] Post by: stinkyfax on December 11, 2009, 04:54:16 PM Hi all, PimpinJuice helped me with tracing bug so as a thanks I'll make next race.
I need: Somebody who is willing to run beta version of race and report bugs if found. Somebody who could care about the effects, since I really don't have time and enthusiasm to worry about visual effects. Idea of the race is taken from famous and glorious Map(some ppl call it game, and I agree with them) DotA (dota-allstars.com) Description: (http://web.dota-allstars.com/static/images/dota/BTNGhoul.gif) Character Story There once was a man in Lordaeron so consumed by greed that he was beyond remorse. Eventually caught trying to steal Prince Arthas' sacred ring, he was tried and hanged. Yet his body, so corrupted by his desire to steal, had risen by itself in the form of a monstrous ghoul. So came into being N'aix, his old name long forgotten: the embodiment of lust and greed, bent on stealing the life of every living creature he encounters. Skills: Infest (http://web.dota-allstars.com/static/images/dota/BTNOrbOfCorruption.gif) The Lifestealer tears its way into the unfortunate body of a target unit, consume it and come to out killing the target. Regains health from the infested unit. Level 1 - Gains 20% of target's maximum health Level 2 - Gains 30% of target's maximum health Level 3 - Gains 35% of target's maximum health Level 4 - Gains 40% of target's maximum health Blood Bath (http://web.dota-allstars.com/static/images/dota/BTNGhoulFrenzy.gif) Increases maximum health of the N'aix, making all his other skils be worthfy. Please notice skill doesn't increase his health directly. Level 0(Yes, level 0) - 30. Level 1 - 50. Level 2 - 70. Level 3 - 85. Level 4 - 100. Feast (http://web.dota-allstars.com/static/images/dota/BTNCannibalize.gif) Regenerates a portion of enemy's current HP. Level 1 - 4%. Level 2 - 5%. Level 3 - 6%. Level 4 - 7%. Rage (http://web.dota-allstars.com/static/images/dota/BTNUnholyFrenzy.gif) N'aix goes into a maddened rage, gaining increased attack speed. Level 1 - 20% Increased Attack Speed. Lasts for 2 seconds. Level 2 - 30% Increased Attack Speed. Lasts for 2.5 seconds. Level 3 - 40% Increased Attack Speed. Lasts for 2.8 seconds. Level 4 - 50% Increased Attack Speed. Lasts for 3 seconds. Requires at least 0.9.1.5 version. Source is in next post. Title: Re: Lifestealer - N'aix [DotA] Post by: stinkyfax on December 11, 2009, 08:11:16 PM Source:
Code: /* ============================================================================ */ /* */ /* naix.sp */ /* (c) 2009 Stinkyfax */ /* */ /* Description is availible at site: */ /* http://war3source.com/index.php?topic=30.msg191#new */ /* */ /* ============================================================================ */ #include <sourcemod> #include <sdktools_functions> //For teleport #include <sdktools_sound> //For sound effect #include "War3Source/War3Source_Interface" // Colors #define COLOR_DEFAULT 0x01 #define COLOR_LIGHTGREEN 0x03 #define COLOR_GREEN 0x04 // DOD = Red //Skills Settings new bool:Infest_Ignore_Immunity = false; #define RAGE_COOLDOWN 20.0 new Float:g_Skill0_1[4] = { 0.2, 0.3, 0.35, 0.40 }; //infest settings //Skill 1_1 really has 5 settings, so it's not a mistake new g_Skill1_1[5] = { 30, 50, 70, 85, 100 }; //Increases Maximum health new Float:g_Skill2_1[4] = { 0.04, 0.05, 0.06, 0.07 }; //Feast ratio new Float:g_Skill3_1[4] = { 1.2, 1.3, 1.4, 1.5 }; //Rage Attack Rate new Float:g_Skill3_2[4] = { 2.0, 2.5, 2.8, 3.0 }; //Rage duration //End of skill Settings //Ultimate temporary vars new Float:g_fLastUlti[65]; //Stores when last ultimate was made for each player new g_iOffs_ActiveWeapon; //offset of active weapon new g_iOffs_NextPrimaryAttack; //offset of ... well quite obvious new g_iWeaponRateQueue[65][2]; new g_iWeaponRateQueueLength; new Float:g_fMulti[65], Float:g_fDuration[65]; //end of ultimate vars new raceID; public Plugin:myinfo = { name = "War3Source Race - Lifestealer", author = "Stinkyfax", description = "N'aix - the embodiment of lust and greed, bent on stealing the life of every living creature he encounters.", version = "1.0", url = "http://sugardas.lt/~jozh/" }; public OnWar3PluginReady() { raceID=War3_CreateRace("Lifestealer","naix","Your new name - N'aix!", "You will be N'aix in your next life.", "Infest","The Lifestealer tears its way into the unfortunate body of a target unit, consume it and come to out killing the target. Regains health from the infested unit.", "Blood Bath","Increases maximum health of the N'aix, making all his other skils be worthfy.", "Feast","Regenerates a portion of enemy's current HP.", "Rage","N'aix goes into a maddened rage, gaining increased attack speed."); } public OnPluginStart() { HookEvent("player_death",PlayerKill); HookEvent("player_spawn",PlayerSpawn); HookEvent("weapon_fire",WeaponFireEvent, EventHookMode_Pre); g_iOffs_ActiveWeapon = FindSendPropOffs("CBasePlayer","m_hActiveWeapon"); g_iOffs_NextPrimaryAttack = FindSendPropOffs("CBaseCombatWeapon","m_flNextPrimaryAttack"); } stock bool:IsRace(client) { return War3_GetRace(client)==raceID; } /* * I suggest this stock will be depricated soon as * Give HP is supposed to be part of War3 Interface */ stock GiveHP(client, amount) { new oldHp = GetClientHealth(client); new health = oldHp + amount; if(health>War3_GetMaxHP(client)) health=War3_GetMaxHP(client); if(health>oldHp) { SetEntityHealth(client, health); return health-oldHp; //how much hp added } return 0; //didn't add anything } public OnMapStart() { //some precaches PrecacheSound("npc/zombie/zombie_pain2.wav"); } public OnWar3TakeDamage(victim,client,inflictor,Float:damage,damagetype) { new chance=RoundFloat(100.0*War3_ChanceModifier(client,inflictor,damagetype)); if(GetRandomInt(1,100)>chance) return; if(!IsRace(client)) return; //We check if attacker is a player (it might be world, c4, etc) //Also check if both victim and attacker are alive since it is essential for skill if( (client<0) || (client>GetMaxClients()) || (!IsPlayerAlive(client)) || (!IsPlayerAlive(victim)) ) return; new level = War3_GetSkillLevel(client, raceID, 2); if(level<=0) return; //Of course don't run skill if we don't have skill //Now apply the skill since all the checks are passed new targetHp = GetClientHealth(victim); new Float:ratio = g_Skill2_1[level-1]; new restore = RoundToNearest( float(targetHp) * ratio ); GiveHP(client, restore); } public WeaponFireEvent(Handle:event,const String:name[],bool:dontBroadcast) { new client = GetClientOfUserId(GetEventInt(event,"userid")); if(!IsRace(client)) return; if( (g_fDuration[client] < GetEngineTime()) || ( g_fMulti[client] < 1.0 ) ) return; new ent = GetEntDataEnt2(client,g_iOffs_ActiveWeapon); if(ent != -1) { //fill the stack for next frame g_iWeaponRateQueue[g_iWeaponRateQueueLength][0] = ent; g_iWeaponRateQueue[g_iWeaponRateQueueLength++][1] = client; } } public OnGameFrame() { if(g_iWeaponRateQueueLength<=0) return; decl ent, client, Float:time; new Float:enginetime = GetGameTime(); for(new i = 0; i < g_iWeaponRateQueueLength; i++) if(IsValidEntity(g_iWeaponRateQueue[i][0])) { ent = g_iWeaponRateQueue[i][0]; client = g_iWeaponRateQueue[i][1]; new Float:multi = 1.0/g_fMulti[client]; time = (GetEntDataFloat(ent,g_iOffs_NextPrimaryAttack) - enginetime) * multi; SetEntDataFloat(ent,g_iOffs_NextPrimaryAttack,time + enginetime,true); } g_iWeaponRateQueueLength = 0; } public Action:PlayerSpawn(Handle:event, const String:name[], bool:dontBroadcast) { new client = GetClientOfUserId(GetEventInt(event,"userid")); if(!IsRace(client)) return Plugin_Continue; if(client>0 && client < 65) g_fLastUlti[client]=0.0; new level = War3_GetSkillLevel(client, raceID, 1); if(level<0) level=0; War3_SetMaxHP(client, War3_GetMaxHP(client) + g_Skill1_1[level]); War3_ChatMessage(client, "Your Maximum Health now is %c%d%c.", COLOR_LIGHTGREEN, War3_GetMaxHP(client), COLOR_DEFAULT); return Plugin_Continue; } public Action:PlayerKill(Handle:event,const String:empty[],bool:dontBroadcast) { new userid=GetClientOfUserId(GetEventInt(event,"userid")); new attacker=GetClientOfUserId(GetEventInt(event,"attacker")); if(attacker<=0) return Plugin_Continue; if(!IsRace(attacker)) return Plugin_Continue; new iSkillLevel=War3_GetSkillLevel(attacker,raceID,0); if(iSkillLevel<=0) return Plugin_Continue; //check the users if( (userid<0) || (userid>GetMaxClients()) || (GetClientTeam(userid) == GetClientTeam(attacker)) ) return Plugin_Continue; decl String:name[50]; GetClientName(userid, name, sizeof(name)); if(!Infest_Ignore_Immunity) { //Check for ultimate immunity of victim if(War3_GetImmunity(userid, War3Immunity:Immunity_Ultimates) == 1) { War3_ChatMessage(attacker, "%c%s%c's Immunity prevented you from %cInfesting%c", COLOR_GREEN, name, COLOR_DEFAULT, COLOR_LIGHTGREEN, COLOR_DEFAULT); return Plugin_Continue; //Do not run skill because of Immunity } } //All conditions are fine, now run the ultimate new Float:fRatio=g_Skill0_1[iSkillLevel-1]; //so we got the hp ration now new targetMaxHealth=War3_GetMaxHP(userid); decl Float:location[3]; GetClientAbsOrigin(userid,location); TeleportEntity(attacker, location, NULL_VECTOR, NULL_VECTOR); new addHealth = RoundToNearest(float(targetMaxHealth) * fRatio); addHealth = GiveHP(attacker, addHealth); War3_ChatMessage(attacker, "%c%s%c's flesh has increased your health by %c%d%c", COLOR_GREEN, name, COLOR_DEFAULT, COLOR_LIGHTGREEN, addHealth, COLOR_DEFAULT); //Effects? EmitAmbientSound("npc/zombie/zombie_pain2.wav",location); return Plugin_Continue; //The happy end (skill has worked successfuly) } public OnUltimateCommand(client,race,bool:pressed) { new userid=GetClientUserId(client); if(race==raceID && pressed && userid>1 && IsPlayerAlive(client)) { new ultLevel=War3_GetSkillLevel(client,race,3); if(ultLevel>0) { if(g_fLastUlti[client]+RAGE_COOLDOWN > GetEngineTime() ) { PrintCenterText(client,"COOLDOWN LEFT: %.1f SECONDS", g_fLastUlti[client]+RAGE_COOLDOWN-GetEngineTime()); return; } /* Since this moment we assume ultimate is being run and not cancelled */ g_fLastUlti[client]=GetEngineTime(); g_fMulti[client]=g_Skill3_1[ultLevel-1]; g_fDuration[client]=GetEngineTime()+g_Skill3_2[ultLevel-1]; War3_ChatMessage(client, "You have enabled %cRage%c for %c%.1f%c seconds and extra attack speed +%.0f percent", COLOR_GREEN, COLOR_DEFAULT, COLOR_LIGHTGREEN, g_Skill3_2[ultLevel-1], COLOR_DEFAULT, (g_Skill3_1[ultLevel-1]-1.0)*100.0 ); } } } Race is tested and working. Requires at least 0.9.1.5 version Title: Re: Lifestealer - N'aix [DotA] Post by: DisturbeD on December 12, 2009, 02:42:56 PM This race looks really nice :D
wanna test it! Title: Re: Lifestealer - N'aix [DotA] Post by: stinkyfax on December 12, 2009, 02:54:31 PM Aya, it rly looks interesting I want to test this one myself :D
Though I need next warcraft version which will have 2 natives race uses. Don't try to compile it, I usually make very many syntax errors before compiling, it is faster to make errors and fix at compiling phase rather than be careful in syntax before :D Title: Re: Lifestealer - N'aix [DotA] Post by: Naris on December 12, 2009, 04:07:02 PM Title: Re: Lifestealer - N'aix [DotA] Post by: stinkyfax on December 12, 2009, 04:10:49 PM are u asking the definition of the word?
Title: Re: Lifestealer - N'aix [DotA] Post by: Naris on December 12, 2009, 04:34:57 PM are u asking the definition of the word? "worthful is an adjective! Quote making all his other skils be worthful. is nonsensical.Even if Blood Bath is a worthful skill that enhances his other skills and makes them worthy. Title: Re: Lifestealer - N'aix [DotA] Post by: stinkyfax on December 13, 2009, 05:21:25 PM Modified code after fixing compiling issues.
Title: Re: Lifestealer - N'aix [DotA] Post by: kooch on December 14, 2009, 07:34:44 AM I'll test this race as well.
Title: Re: Lifestealer - N'aix [DotA] Post by: [Oddity]TeacherCreature on July 05, 2010, 11:39:50 AM Found error
public OnWar3TakeDamage(victim,client,inflictor,Float:damage,damagetype) should say public Action:OnWar3TakeDamage(victim,client,inflictor,Float:damage,damagetype) Title: Re: Lifestealer - N'aix [DotA] Post by: Ownz on July 05, 2010, 11:45:29 AM is stinkyfax supporting this himself?
Title: Re: Lifestealer - N'aix [DotA] Post by: Ownz on July 05, 2010, 11:48:16 AM and there is no attack speed modifier in war3source
Title: Re: Lifestealer - N'aix [DotA] Post by: [Oddity]TeacherCreature on July 05, 2010, 12:04:28 PM Hmmm whether there is or isnt I just used it in game and the ultimate WORKS
it adds 30 - 50% speed depending on level I tested this and it was obviously working as the gun speed felt like it doubled! Anyway that one fix Imade will make this race compile smoothly and work well Title: Re: Lifestealer - N'aix [DotA] Post by: stinkyfax on July 05, 2010, 12:08:33 PM Hmmm whether there is or isnt I just used it in game and the ultimate WORKS then post it.it adds 30 - 50% speed depending on level I tested this and it was obviously working as the gun speed felt like it doubled! Anyway that one fix Imade will make this race compile smoothly and work well I've taken alter weapon speed algorithm from my mod long time ago. By the way the weapon speed idea goes to HOLLIDAY because I though it's impossible before he made some weired skill for pistols :) Title: Re: Lifestealer - N'aix [DotA] Post by: [Oddity]TeacherCreature on July 05, 2010, 12:12:06 PM yea I saw that haha
I made it req levvel 75 sorry if that annoys people but this works fine Title: Re: Lifestealer - N'aix [DotA] Post by: Ownz on July 05, 2010, 10:39:47 PM attack speed modifier will be implemented into war3source
this code works with css, not tf2, so i used TF2_CalcIsAttackCritical as the weapon fire event Title: Re: Lifestealer - N'aix [DotA] Post by: stinkyfax on July 06, 2010, 04:35:56 AM attack speed modifier will be implemented into war3source I got attack speed to work with TF2 (most weapons but not all) Though the code differs, used it for wow:tf2 ;)this code works with css, not tf2, so i used TF2_CalcIsAttackCritical as the weapon fire event Title: Re: Lifestealer - N'aix [DotA] Post by: Ownz on July 06, 2010, 08:54:43 AM eh....i got TF2 to work, but changing it abit, reread the sentence or is my grammar that bad?
Title: Re: Lifestealer - N'aix [DotA] Post by: stinkyfax on July 06, 2010, 09:18:45 AM eh....i got TF2 to work, but changing it abit, reread the sentence or is my grammar that bad? It's said you made it work in TF2 as critical, not speed. ???Title: Re: Lifestealer - N'aix [DotA] Post by: Ownz on July 06, 2010, 09:27:07 AM by using the on critical calculation to simulate a weapon-fire event
Title: Re: Lifestealer - N'aix [DotA] Post by: Naris on July 10, 2010, 11:25:18 AM This is a version that I modified to work in both CSS and TF2 (using the TF2_CalcIsAttackCritical() method). I also modified it to use the new 1.1.2 War3Source API. However, this version will be superseded by the version Ownz has, probably in the next War3Source release.
Title: Re: Lifestealer - N'aix [DotA] Post by: Ownz on July 10, 2010, 11:26:19 AM oh im still implementing attack speed modifier in the war3source main lol
Title: Re: Lifestealer - N'aix [DotA] Post by: [Oddity]TeacherCreature on July 17, 2010, 11:49:56 AM This race does not load with version 1.4 for some reason
if it is added to plugins the entire mod will not load! Title: Re: Lifestealer - N'aix [DotA] Post by: Ownz on July 17, 2010, 11:53:20 AM error logs would be nice
Title: Re: Lifestealer - N'aix [DotA] Post by: [Oddity]TeacherCreature on July 17, 2010, 01:33:46 PM I didnt get any
The hwole mod just wouldnt load all I did was add naix.smx the most recent one. I am using new beta 1.4 everything else is workin except that race. The hwolle mod would not load at all Title: Re: Lifestealer - N'aix [DotA] Post by: Ownz on July 17, 2010, 01:43:32 PM u mean sm plugins list they all error? or missing?
Title: Re: Lifestealer - N'aix [DotA] Post by: [Oddity]TeacherCreature on July 17, 2010, 02:25:35 PM no lists them as fine but nothing works
no xp no changerace its as if it didnt load Title: Re: Lifestealer - N'aix [DotA] Post by: Ownz on July 17, 2010, 02:26:37 PM i see the problem, ill get u new version soon
Title: Re: Lifestealer - N'aix [DotA] Post by: Ownz on July 17, 2010, 05:43:41 PM use beta 4 which i will be releaseing soon
Title: Re: Lifestealer - N'aix [DotA] Post by: [Oddity]TeacherCreature on July 17, 2010, 06:55:18 PM DOESNT WORK
Tried new version bbuild 4 not only did naix not work none of the custom races would load sm plugins list returned FAILED on succubus headcrab and naix back to build 3 for me Title: Re: Lifestealer - N'aix [DotA] Post by: stinkyfax on July 18, 2010, 10:25:48 AM use beta 4 which i will be releaseing soon I am curious, what's wrong with the race you're fixing?Title: Re: Lifestealer - N'aix [DotA] Post by: Ownz on July 18, 2010, 10:26:32 AM you forgot to end race creation CreateRaceEnd
Title: Re: Lifestealer - N'aix [DotA] Post by: [Oddity]TeacherCreature on July 19, 2010, 06:55:12 PM works now but skil lfeast targets freindly teamates is that intended?
|