mirror of
https://github.com/PhantomGamesDevelopment/TWM2.git
synced 2026-07-16 00:44:41 +00:00
Perk Rework
This commit is contained in:
parent
6d24ae4cba
commit
54ca7686de
31 changed files with 305 additions and 320 deletions
97
README.md
97
README.md
|
|
@ -99,9 +99,9 @@ PLEASE NOTE: I've moved all old changelogs into the version_history folder. This
|
||||||
* Shifter
|
* Shifter
|
||||||
* Reduced HP from 280 (2.8) to 225 (2.25)
|
* Reduced HP from 280 (2.8) to 225 (2.25)
|
||||||
* The change to the shifter teleportation in 3.91 made these zombies ridiculously overpowered, they will be tuned down
|
* The change to the shifter teleportation in 3.91 made these zombies ridiculously overpowered, they will be tuned down
|
||||||
* Increased the maximum targeting range of the teleport attack from 200m to 400m
|
* Increased the maximum targeting range of the teleport attack from 200m to 400m
|
||||||
* Increased the cooldown of the teleport attack from 7 seconds to 12.5 seconds
|
* Increased the cooldown of the teleport attack from 7 seconds to 12.5 seconds
|
||||||
* Shifter zombies will now have to "lock down" for a 1.5 seconds before teleporting, during this time they will be easily targetable
|
* Shifter zombies will now have to "lock down" for 1.5 seconds before teleporting, during this time they will be easily targetable
|
||||||
* Sniper
|
* Sniper
|
||||||
* The sniper zombie is now armed with two new weapons.
|
* The sniper zombie is now armed with two new weapons.
|
||||||
* The first is an acid sniper rifle which infects players on striking
|
* The first is an acid sniper rifle which infects players on striking
|
||||||
|
|
@ -154,6 +154,7 @@ PLEASE NOTE: I've moved all old changelogs into the version_history folder. This
|
||||||
* Adjusted the mod's XP table:
|
* Adjusted the mod's XP table:
|
||||||
* The final rank (Master Commander) now only requires 2,500,000 XP
|
* The final rank (Master Commander) now only requires 2,500,000 XP
|
||||||
* The earlier ranks will now progress much more quickly, with the mid-point now occuring at 14,000 XP instead of 20,000 XP
|
* The earlier ranks will now progress much more quickly, with the mid-point now occuring at 14,000 XP instead of 20,000 XP
|
||||||
|
* Perks are no longer locked by rank, and all non-game mode / boss related perks are unlocked to all players at the start.
|
||||||
* General Bug Fixes
|
* General Bug Fixes
|
||||||
* Addressed the issue when gaining more than 1 million EXP that would result in your total EXP being reset by the difference between 1 million exp and your current exp.
|
* Addressed the issue when gaining more than 1 million EXP that would result in your total EXP being reset by the difference between 1 million exp and your current exp.
|
||||||
* Fixed the bug in which picking up weapon clips with an empty weapon would not automatically trigger weapon reload on that weapon.
|
* Fixed the bug in which picking up weapon clips with an empty weapon would not automatically trigger weapon reload on that weapon.
|
||||||
|
|
@ -303,4 +304,92 @@ PLEASE NOTE: I've moved all old changelogs into the version_history folder. This
|
||||||
* In 3.9.2, players will find the Acid Cannon as an officer promotion award, so therefore some adjustments were made to this weapon
|
* In 3.9.2, players will find the Acid Cannon as an officer promotion award, so therefore some adjustments were made to this weapon
|
||||||
* Moved the Zombie Acid pulse out of this weapon, and replaced it with it's own custom projectile
|
* Moved the Zombie Acid pulse out of this weapon, and replaced it with it's own custom projectile
|
||||||
* The projectile will flash enemy players when stuck by it, and cause an effective radial damage to serve as a lockdown tool
|
* The projectile will flash enemy players when stuck by it, and cause an effective radial damage to serve as a lockdown tool
|
||||||
* The weapon projectile has been given a 3.0 damage modifier across all zombie types to be highly effective against zombies
|
* The weapon projectile has been given a 3.0 damage modifier across all zombie types to be highly effective against zombies
|
||||||
|
* Perk Balancing / Rework Pass (3.9.2)
|
||||||
|
* The next batch of balance / reworks comes to the perk system.
|
||||||
|
* A highly "outdated clone" approach for additional player bonuses, perks in TWM2 have been very disjointed in many cases, offering significant bonuses to the point that things become best-in-slot by a long mile leaving everything else to be binned.
|
||||||
|
* While the "future" (If one ever does come about for this mod) would likely see the entire system removed, the goal here is to bring things down from the Over 9000 power level they exist at now to a more "reasonable" 6 or 7.
|
||||||
|
* Primary Perks
|
||||||
|
* Primary Perks provide direct bonuses to player gear (Gear defined as weapons and equipment).
|
||||||
|
* AP Bullets
|
||||||
|
* Old Perk: Bullets do 50% More Damage
|
||||||
|
* New Perk: Bullets deal 15% increased damage, damage to armored targets increased by 33%.
|
||||||
|
* Discussion: AP Bullets was one of those "BIS" perks that was almost always grabbed because of the flat damage buff to literally "everything". Now this perk gives a small damage buff and a bonus to armored targets (Vehicles / Turrets) to focus more-so on those.
|
||||||
|
* Advanced Grip
|
||||||
|
* Old Perk: Improves Weapon Accuracy by 250%
|
||||||
|
* New Perk: [Renamed: Handling Expert] Reduces weapon spread by a varying amount (Dependent on the weapon)
|
||||||
|
* Discussion: This perk was kind of "strangely" worded as a "mega accuracy" increase, when in reality it just significantly cut down "spread" on weapons, I still think a spread reduction perk is neat, but this perk is much more toned down now.
|
||||||
|
* An example: The S3 Rifle's Spread Reduction has been reduced from 250% to 133%
|
||||||
|
* Wind Break Beacon
|
||||||
|
* Unchanged
|
||||||
|
* Discussion: This one has one of those "niche" places in the mod, good for those "oh sh*t" moments when Major Insignia / Lord Vardison launches you to Orbit
|
||||||
|
* 3 Second C4
|
||||||
|
* Unchanged
|
||||||
|
* Discussion: For now I don't think anything is needed here, but I am exploring potentially making usage of this perk reduce the maximum number of C4s you can hold at once.
|
||||||
|
* Blade Sweep
|
||||||
|
* Removed From Mod
|
||||||
|
* Discussion: Blade Sweep is one of those really strange perks I made just "for the hell of it", that never sees any use because it quite literally is pointless, and thus, it is gone.
|
||||||
|
* Martydom
|
||||||
|
* Old Perk: Your armor explodes 4 seconds after death
|
||||||
|
* New Perk: Upon death, drop a live grenade or C4 charge (if available) (Dependent on which grenade type you have equipped).
|
||||||
|
* Discussion: This one was so much fun to play around with in the sandbox, but I always felt like it was just the "No U" perk for Shotgun Countering, so now it will instead be a bit more counterable, while still being funny when that C4 explosion goes off.
|
||||||
|
* Pistol God
|
||||||
|
* Removed From Mod
|
||||||
|
* Discussion: This one's kind of unnecessary given the adjustment to Advanced Grip, plus I want Sidearms to not be a completely dominant weapon, so Advanced Grip does not apply to them.
|
||||||
|
* Double Down
|
||||||
|
* Removed From Mod
|
||||||
|
* Discussion: A relic from the old days of PGD Connect with EXP events and "rank ups", given the other big adjustment to perks mentioned earlier, this is no longer needed.
|
||||||
|
* New Perks:
|
||||||
|
* Powder Keg
|
||||||
|
* Increases explosion damage you deal by 25%
|
||||||
|
* Discussion: A good addition to go alongside AP Bullets for players who prefer explosive weapons.
|
||||||
|
* Secondary Perks
|
||||||
|
* Secondary Perks are seen as "defensive" in nature, providing direct bonuses to your player object, for the most part these perks are fairly well made, and just need minor tuning.
|
||||||
|
* Kevlar Armor
|
||||||
|
* Old Perk: Increase Shielding to 150%
|
||||||
|
* New Perk: Reduce incoming damage from bullets by 20%, explosions by 25%
|
||||||
|
* Discussion: The values on this perk were just a "wee bit" high for damage reduction, so I've brought them down a little.
|
||||||
|
* Head Guard
|
||||||
|
* Old Perk: Prevents you from being Headshot Killed
|
||||||
|
* New Perk: [Renamed: Armored Helmet] Removes the headshot multiplier on incoming rounds
|
||||||
|
* Discussion: Ah yes, the days of old where Sniper Rifles were godly weapons in PvP on our long range maps. Then I made smaller close quarters maps and people stopped using snipers in everything except wartower. This perk completely nullified an aspect of the projectile targeting game and I think that should be avoided, so sorry but no more blocking those OSK sniper hits, but this will help in rifle fights.
|
||||||
|
* Yes, I just made sniper zombies that much more lethal... enjoy ;)
|
||||||
|
* Storm Barrier
|
||||||
|
* Unchanged
|
||||||
|
* Discussion: This perk is meant to be a counter to The Ghost of Lightning and the Ion Weapons earned from it, no need to adjust what isn't broken.
|
||||||
|
* Lim Zombie Shield
|
||||||
|
* Old Perk: 20% Chance that Zombies Will Be Repeled upon attack
|
||||||
|
* New Perk: Enhanced your armor with a specialized Lim-Zombie barrier, repelling incoming attackers before requiring a recharge
|
||||||
|
* Note: This functionality only applies to 'Normal', 'Ravager', and 'Shifter' Zombies.
|
||||||
|
* Discussion: A bit of an oddity here that few people used because of the RNG element on it, Lim was meant to be a bit of a "get out of jail" card in hectic moments, but it was a bit weak, so now I've changed the functionality to repel a few (2) incoming hits before requiring a 25 second recharge
|
||||||
|
* No-Infect Armor
|
||||||
|
* Unchanged: Perk Renamed to 'Undead Resistant Plating'
|
||||||
|
* Discussion: In the new age of perks, 'No-Infect Armor' sounds like a "cheat-code", so I'm just giving it a slight name alteration without changing the functioning.
|
||||||
|
* Radar Phantom
|
||||||
|
* Unchanged
|
||||||
|
* Discussion: Nothing to do here, this just wraps up the Tribes 2 Jamming Pack into a perk.
|
||||||
|
* Bomb Shadower & Second Chance
|
||||||
|
* These two perks used to belong to the Tertiary category, but I've decided to move them to the secondary category.
|
||||||
|
* Tertiary Perks
|
||||||
|
* This category is where the bets kind of went all over the map in terms of things, These perks were meant to be your "wildcard" bonus, but instead just became these crazy as hell buffs that had strange "growth" mechanics to them, this category needed the most work.
|
||||||
|
* These changes are kind of a "start", but I'm looking to hit this category a bit harder later down the line.
|
||||||
|
* Clip Boxes, Double Time, Ammo Vet
|
||||||
|
* These three perks did the same thing but had a growth of bonus mechanic as you leveled up, but the old perks stayed in your toolbox, making them completely irrelevant.
|
||||||
|
* I want to eventually change these perks to be category based (IE: Clip Boxes would give a reload benefit to large-mag guns, like machine guns), but this requires a big rework of the weapon reload system.
|
||||||
|
* So for now, I'm going to just absolve these three perks into one perk...
|
||||||
|
* Removed 'Clip Boxes', 'Double Time', and 'Ammo Vet' from the mod
|
||||||
|
* Added 'Reflexive Reloader': Reduces reload time by 33%.
|
||||||
|
* UAV Disabler
|
||||||
|
* Unchanged
|
||||||
|
* Discussion: This one's fine as is. This perk counters the UAV strike package.
|
||||||
|
* Team Gain
|
||||||
|
* Unchanged (For Now)
|
||||||
|
* Discussion: I'm looking at a rework of this perk, right now it functions as an "assist" perk where your kills grant nearby allies XP for your actions. I like this concept, but want to tweak how the perk considers you to be "nearby".
|
||||||
|
* Bandolier
|
||||||
|
* Description Change: Increases Clips To 200% > Doubles your maximum clip capacity
|
||||||
|
* Discussion: Just being a bit more descriptive as to what this perk does.
|
||||||
|
* Hardline
|
||||||
|
* Upcoming Removal
|
||||||
|
* Discussion: For now this perk will remain in the mod, but I'm going to be "doing away" with Killstreaks in 3.9.3, this will be wrapped up into a new system called Strike Packages, but much more on this later.
|
||||||
|
* Notes
|
||||||
|
* Tertiary Perks will be getting another pass later on, seeing as I've effectively reduced this category to 3, maybe 4 usable options, I'm going to likely add more choices here.
|
||||||
|
|
@ -19,7 +19,7 @@ $Prestige::Name[14] = "Masterful ";
|
||||||
$Prestige::Name[15] = "Harbinger ";
|
$Prestige::Name[15] = "Harbinger ";
|
||||||
|
|
||||||
$Prestige::Rewards[0] = "";
|
$Prestige::Rewards[0] = "";
|
||||||
$Prestige::Rewards[1] = "Fission Bomb Strike, Double Down Perk";
|
$Prestige::Rewards[1] = "Fission Bomb Strike";
|
||||||
$Prestige::Rewards[2] = "Pulse Rifle";
|
$Prestige::Rewards[2] = "Pulse Rifle";
|
||||||
$Prestige::Rewards[3] = "Pulse SMG";
|
$Prestige::Rewards[3] = "Pulse SMG";
|
||||||
$Prestige::Rewards[4] = "XVD4 Acid Launcher";
|
$Prestige::Rewards[4] = "XVD4 Acid Launcher";
|
||||||
|
|
|
||||||
|
|
@ -443,12 +443,7 @@ function GameConnection::AwardZombieKill(%client, %zombie, %implement) {
|
||||||
%xpGain = $TWM2::ZombieXPAward[%zombieType];
|
%xpGain = $TWM2::ZombieXPAward[%zombieType];
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
if(%client.IsActivePerk("Double Down")) {
|
GainExperience(%client, %xpGain, ""@$TWM2::ZombieName[%zombieType]@" Killed ");
|
||||||
GainExperience(%client, %xpGain*2, "[D-D]"@$TWM2::ZombieName[%zombieType]@" Killed ");
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
GainExperience(%client, %xpGain, ""@$TWM2::ZombieName[%zombieType]@" Killed ");
|
|
||||||
}
|
|
||||||
//Team Gain Perk
|
//Team Gain Perk
|
||||||
if(%client.IsActivePerk("Team Gain")) {
|
if(%client.IsActivePerk("Team Gain")) {
|
||||||
%TargetSearchMask = $TypeMasks::PlayerObjectType;
|
%TargetSearchMask = $TypeMasks::PlayerObjectType;
|
||||||
|
|
|
||||||
|
|
@ -36,12 +36,15 @@ function CalculateProjectileDamage(%projectile, %target, %amount, %dType, %damLo
|
||||||
//Projectiles...
|
//Projectiles...
|
||||||
case "projectile":
|
case "projectile":
|
||||||
%target.headShot = 0; //Reset first
|
%target.headShot = 0; //Reset first
|
||||||
if(%sourceClient.ActivePerk["AP Bullets"]) {
|
if(%sourceClient.IsActivePerk("AP Bullets")) {
|
||||||
%total *= 1.5;
|
%total *= 1.15;
|
||||||
|
if(strStr(%TDB.getClassName() $= "Turret") != -1 || && %TDB.getClassName() $= "VehicleData") {
|
||||||
|
%total *= 1.33;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if(%targetClient != 0) {
|
if(%targetClient != 0) {
|
||||||
if(%targetClient.IsActivePerk("Kevlar Armor")) {
|
if(%targetClient.IsActivePerk("Kevlar Armor")) {
|
||||||
%total *= 0.5;
|
%total *= 0.8;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(%target.isZombie) {
|
if(%target.isZombie) {
|
||||||
|
|
@ -74,6 +77,11 @@ function CalculateProjectileDamage(%projectile, %target, %amount, %dType, %damLo
|
||||||
if(%damLoc $= "head" && %TDB.getClassName() $= "PlayerData") {
|
if(%damLoc $= "head" && %TDB.getClassName() $= "PlayerData") {
|
||||||
if(%data.HeadMultiplier !$= "") {
|
if(%data.HeadMultiplier !$= "") {
|
||||||
%modifier *= %data.HeadMultiplier;
|
%modifier *= %data.HeadMultiplier;
|
||||||
|
if(%targetClient !$= "") {
|
||||||
|
if(%targetClient.IsActivePerk("Armored Helmet")) {
|
||||||
|
%modifier /= %data.HeadMultiplier;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if(%data.HeadShotKill && $TWM2::HeadshotKill) {
|
if(%data.HeadShotKill && $TWM2::HeadshotKill) {
|
||||||
%target.headShot = 1;
|
%target.headShot = 1;
|
||||||
|
|
@ -84,44 +92,39 @@ function CalculateProjectileDamage(%projectile, %target, %amount, %dType, %damLo
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(%target.headShot) {
|
if(%target.headShot) {
|
||||||
if(%targetClient != 0 && %targetClient.ActivePerk["Head Guard"]) {
|
if((!%target.isBoss && !%target.noHS) && !(%target.getShieldHealth() > 0)) {
|
||||||
%target.headShot = 0;
|
if(%target.isZombie) {
|
||||||
}
|
if(%TDB $= "FZombieArmor") {
|
||||||
else {
|
AwardClient(%sourceClient, "16");
|
||||||
if((!%target.isBoss && !%target.noHS) && !(%target.getShieldHealth() > 0)) {
|
}
|
||||||
if(%target.isZombie) {
|
//
|
||||||
if(%TDB $= "FZombieArmor") {
|
if(Game.CheckModifier("WheresMyHead") == 1) {
|
||||||
AwardClient(%sourceClient, "16");
|
%target.headShot = 0;
|
||||||
}
|
|
||||||
//
|
|
||||||
if(Game.CheckModifier("WheresMyHead") == 1) {
|
|
||||||
%target.headShot = 0;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
%total *= 1000;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if(%target.isPilot() || %target.vehicleMounted) {
|
%total *= 1000;
|
||||||
%target.headShot = 0;
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
%total *= 1000;
|
if(%target.isPilot() || %target.vehicleMounted) {
|
||||||
if(%targetClient != 0) {
|
%target.headShot = 0;
|
||||||
BottomPrint(%targetClient, "You Lost Your Head!!!", 3, 1);
|
}
|
||||||
//Recording...
|
else {
|
||||||
if(%sourceClient !$= "") {
|
%total *= 1000;
|
||||||
%sourceClient.TWM2Core.PvPHeadshotKills++;
|
if(%targetClient != 0) {
|
||||||
if(%sourceClient.TWM2Core.PvPHeadshotKills >= 100) {
|
BottomPrint(%targetClient, "You Lost Your Head!!!", 3, 1);
|
||||||
CompleteNWChallenge(%sourceClient, "HSHoncho1");
|
//Recording...
|
||||||
if(%sourceClient.TWM2Core.PvPHeadshotKills >= 200) {
|
if(%sourceClient !$= "") {
|
||||||
CompleteNWChallenge(%sourceClient, "HSHoncho2");
|
%sourceClient.TWM2Core.PvPHeadshotKills++;
|
||||||
if(%sourceClient.TWM2Core.PvPHeadshotKills >= 300) {
|
if(%sourceClient.TWM2Core.PvPHeadshotKills >= 100) {
|
||||||
CompleteNWChallenge(%sourceClient, "HSHoncho3");
|
CompleteNWChallenge(%sourceClient, "HSHoncho1");
|
||||||
}
|
if(%sourceClient.TWM2Core.PvPHeadshotKills >= 200) {
|
||||||
|
CompleteNWChallenge(%sourceClient, "HSHoncho2");
|
||||||
|
if(%sourceClient.TWM2Core.PvPHeadshotKills >= 300) {
|
||||||
|
CompleteNWChallenge(%sourceClient, "HSHoncho3");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -137,6 +140,14 @@ function CalculateProjectileDamage(%projectile, %target, %amount, %dType, %damLo
|
||||||
|
|
||||||
case "explosion":
|
case "explosion":
|
||||||
%total = 1;
|
%total = 1;
|
||||||
|
if(%sourceClient.IsActivePerk("Powder Keg")) {
|
||||||
|
%total *= 1.25;
|
||||||
|
}
|
||||||
|
if(%targetClient != 0) {
|
||||||
|
if(%targetClient.IsActivePerk("Kevlar Armor")) {
|
||||||
|
%total *= 0.75;
|
||||||
|
}
|
||||||
|
}
|
||||||
if(%dType == $DamageType::RapierShield) {
|
if(%dType == $DamageType::RapierShield) {
|
||||||
if(%target == %sourceObject || %target.isZombie || %target.isBoss) {
|
if(%target == %sourceObject || %target.isZombie || %target.isBoss) {
|
||||||
%total = 0;
|
%total = 0;
|
||||||
|
|
@ -394,8 +405,12 @@ function postObjectDestroyed(%source, %targetObject, %dType, %dLoc) {
|
||||||
//doChallengeKillRecording(%sourceObject, %targetObject);
|
//doChallengeKillRecording(%sourceObject, %targetObject);
|
||||||
//martydom
|
//martydom
|
||||||
if(%targetClient !$= "" && %targetClient != 0 && %targetClient.IsActivePerk("Martydom")) {
|
if(%targetClient !$= "" && %targetClient != 0 && %targetClient.IsActivePerk("Martydom")) {
|
||||||
serverPlay3d(SatchelChargeActivateSound, %targetObject.getPosition());
|
if(%targetObject.inv[Grenade] > 0 || %targetObject.inv[ConcussionGrenade] > 0 || %targetObject.inv[FlashGrenade] > 0 || %targetObject.inv[StaticGrenade] > 0) {
|
||||||
schedule(2200, 0, "MartydomExplode", %targetObject.getPosition(), %targetClient);
|
%targetObject.use(Grenade);
|
||||||
|
}
|
||||||
|
if(%targetObject.inv[C4] > 0) {
|
||||||
|
%targetObject.use(Mine);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,151 +1,121 @@
|
||||||
//The Perks
|
// Perks.cs
|
||||||
//LIST
|
// 3.9.2 =: Major Rework
|
||||||
$PerkRequire[1] = $Ranks::MinPoints[32];
|
|
||||||
$PerkRequire[2] = $Ranks::MinPoints[40];
|
|
||||||
$PerkRequire[7] = $Ranks::MinPoints[54];
|
|
||||||
$PerkRequire[9] = $Ranks::MinPoints[43];
|
|
||||||
$PerkRequire[10] = $Ranks::MinPoints[18];
|
|
||||||
$PerkRequire[11] = $Ranks::MinPoints[36];
|
|
||||||
$PerkRequire[15] = $Ranks::MinPoints[60];
|
|
||||||
$PerkRequire[16] = $Ranks::MinPoints[46];
|
|
||||||
$PerkRequire[21] = $Ranks::MinPoints[4];
|
|
||||||
$PerkRequire[22] = $Ranks::MinPoints[45];
|
|
||||||
|
|
||||||
//PRIMARY - Weapon Modifications
|
//PRIMARY - Weapon Modifications
|
||||||
// AP Bullets [c] - Increase Damage to 150%
|
// AP Bullets [c] - Bullets deal 15% increased damage, damage to armored targets increased by 33%
|
||||||
// Advanced Grip [c] - Increase Accuracy On All Guns with Spread
|
// Handling Expert [c] - Reduces weapon spread by a varying amount (Dependent on the weapon)
|
||||||
// Wind Brake Beacon [c] - Beacon Key Stops Your Fall Instantly
|
// Wind Brake Beacon [c] - Beacon Key Stops Your Fall Instantly
|
||||||
// 3 Second C4 [c] - C4 Detonates in 3 Seconds, not 10
|
// 3 Second C4 [c] - C4 Detonates in 3 Seconds, not 10
|
||||||
// Blade Sweep [c] - BoV Affects a small area instead of a single attack
|
// Martydom [c] - Upon death, drop a live grenade or C4 charge (if available)
|
||||||
// Martydom [c] - Your armor explodes 4 seconds after death
|
// Powder Keg [c] - Explosions deal 25% increased damage
|
||||||
// Pistol God [c] - Removes All Spread On Certain Pistols
|
|
||||||
// Double Down [c] - Gain double EXP for non boss Kills.
|
|
||||||
|
|
||||||
//SECONDARY - Armor And Defense
|
//SECONDARY - Armor And Defense
|
||||||
// OverKill [b] - Replaces your Pistol Slot with an Additional Weapon Slot
|
// Kevlar Armor [c] - Reduce incoming damage from bullets by 20%, explosions by 25%
|
||||||
// Kevlar Armor [c] - Increase Shielding to 150%
|
// Armored Helmet [c] - Removes the headshot multiplier on incoming rounds
|
||||||
// Head Guard [c] - Blocks Headshot Kills
|
|
||||||
// Storm Barrier [c] - Reduce Electrical Damage, blocks lightning
|
// Storm Barrier [c] - Reduce Electrical Damage, blocks lightning
|
||||||
// Lim Zombie Shield [c] - 20% Chance that Zombies Will Be Repeled upon attack
|
// Lim Zombie Shield [c] - Enhanced your armor with a specialized Lim-Zombie barrier, repelling incoming attackers before requiring a recharge
|
||||||
// No-Infect Armor [c] - Zombie Attacks will not infect you
|
// Undead Resistant Plating [c] - Zombie Attacks will not infect you
|
||||||
// Radar Phantom [c] - Jam enemy sensors
|
// Radar Phantom [c] - Jam enemy sensors
|
||||||
|
|
||||||
//TERTIARY - Assets
|
|
||||||
// Clip Boxes [c] - Cuts Reload Time By 33%
|
|
||||||
// UAV Disabler [c] - You will not show on enemy UAVs
|
|
||||||
// Team Gain [c] - All Teammates within 20M Of the Killer Gain XP
|
|
||||||
// Double Time [c] - Cuts Reload Time By 50%
|
|
||||||
// Ammo Vet [c] - Cuts Reload Time By 75%
|
|
||||||
// Bandolier [c] - Increases Clips To 200%
|
|
||||||
// Hardline [c] - Killstreaks require 1 less kill
|
|
||||||
// Bomb Shadower [c] - You do not show a Sabotage Waypoint
|
// Bomb Shadower [c] - You do not show a Sabotage Waypoint
|
||||||
// Second Chance [c] - Spend a team revive to respawn in horde
|
// Second Chance [c] - Spend a team revive to respawn in horde
|
||||||
|
|
||||||
$Perk::PerkCount[1] = 8;
|
//TERTIARY - Assets
|
||||||
$Perk::PerkCount[2] = 6;
|
// Reflexive Reloader [c] - Reduces weapon reload time by 33%
|
||||||
$Perk::PerkCount[3] = 9;
|
// UAV Disabler [c] - You will not show on enemy UAVs
|
||||||
|
// Team Gain [c] - All Teammates within 20M Of the Killer Gain XP
|
||||||
|
// Bandolier [c] - Doubles your maximum clip capacity
|
||||||
|
// Hardline [c] - Killstreaks require 1 less kill
|
||||||
|
|
||||||
|
$Perk::PerkCount[1] = 6;
|
||||||
|
$Perk::PerkCount[2] = 8;
|
||||||
|
$Perk::PerkCount[3] = 5;
|
||||||
|
|
||||||
$Perk::TotalPerks = $Perk::PerkCount[1] + $Perk::PerkCount[2] + $Perk::PerkCount[3];
|
$Perk::TotalPerks = $Perk::PerkCount[1] + $Perk::PerkCount[2] + $Perk::PerkCount[3];
|
||||||
|
|
||||||
$Perk::Perk[1] = "AP Bullets";
|
$Perk::Perk[1] = "AP Bullets";
|
||||||
$Perk::Perk[2] = "Advanced Grip";
|
$Perk::Perk[2] = "Handling Expert";
|
||||||
$Perk::Perk[3] = "Wind Brake Beacon";
|
$Perk::Perk[3] = "Wind Brake Beacon";
|
||||||
$Perk::Perk[4] = "3 Second C4";
|
$Perk::Perk[4] = "3 Second C4";
|
||||||
$Perk::Perk[5] = "Blade Sweep";
|
$Perk::Perk[5] = "Martydom";
|
||||||
$Perk::Perk[6] = "Martydom";
|
$Perk::Perk[6] = "Powder Keg";
|
||||||
$Perk::Perk[7] = "Pistol God";
|
$Perk::Perk[7] = "Kevlar Armor";
|
||||||
$Perk::Perk[8] = "Double Down";
|
$Perk::Perk[8] = "Armored Helmet";
|
||||||
//$Perk::Perk[9] = "OverKill";
|
$Perk::Perk[9] = "Storm Barrier";
|
||||||
$Perk::Perk[9] = "Kevlar Armor";
|
$Perk::Perk[10] = "Lim Zombie Shield";
|
||||||
$Perk::Perk[10] = "Head Guard";
|
$Perk::Perk[11] = "Undead Resistant Plating";
|
||||||
$Perk::Perk[11] = "Storm Barrier";
|
$Perk::Perk[12] = "Radar Phantom";
|
||||||
$Perk::Perk[12] = "Lim Zombie Shield";
|
$Perk::Perk[13] = "Bomb Shadower";
|
||||||
$Perk::Perk[13] = "No-Infect Armor";
|
$Perk::Perk[14] = "Second Chance";
|
||||||
$Perk::Perk[14] = "Radar Phantom";
|
$Perk::Perk[15] = "Reflexive Reloader";
|
||||||
$Perk::Perk[15] = "Clip Boxes";
|
|
||||||
$Perk::Perk[16] = "UAV Disabler";
|
$Perk::Perk[16] = "UAV Disabler";
|
||||||
$Perk::Perk[17] = "Team Gain";
|
$Perk::Perk[17] = "Team Gain";
|
||||||
$Perk::Perk[18] = "Double Time";
|
$Perk::Perk[18] = "Bandolier";
|
||||||
$Perk::Perk[19] = "Ammo Vet";
|
$Perk::Perk[19] = "Hardline";
|
||||||
$Perk::Perk[20] = "Bandolier";
|
|
||||||
$Perk::Perk[21] = "Hardline";
|
|
||||||
$Perk::Perk[22] = "Bomb Shadower";
|
|
||||||
$Perk::Perk[23] = "Second Chance";
|
|
||||||
|
|
||||||
$Perk::PerkToID["AP Bullets"] = 1;
|
$Perk::PerkToID["AP Bullets"] = 1;
|
||||||
$Perk::PerkToID["Advanced Grip"] = 2;
|
$Perk::PerkToID["Handling Expert"] = 2;
|
||||||
$Perk::PerkToID["Wind Brake Beacon"] = 3;
|
$Perk::PerkToID["Wind Brake Beacon"] = 3;
|
||||||
$Perk::PerkToID["3 Second C4"] = 4;
|
$Perk::PerkToID["3 Second C4"] = 4;
|
||||||
$Perk::PerkToID["Blade Sweep"] = 5;
|
$Perk::PerkToID["Martydom"] = 5;
|
||||||
$Perk::PerkToID["Martydom"] = 6;
|
$Perk::PerkToID["Powder Keg"] = 6;
|
||||||
$Perk::PerkToID["Pistol God"] = 7;
|
$Perk::PerkToID["Kevlar Armor"] = 7;
|
||||||
$Perk::PerkToID["Double Down"] = 8;
|
$Perk::PerkToID["Armored Helmet"] = 8;
|
||||||
//$Perk::PerkToID["OverKill"] = 9;
|
$Perk::PerkToID["Storm Barrier"] = 9;
|
||||||
$Perk::PerkToID["Kevlar Armor"] = 9;
|
$Perk::PerkToID["Lim Zombie Shield"] = 10;
|
||||||
$Perk::PerkToID["Head Guard"] = 10;
|
$Perk::PerkToID["Undead Resistant Plating"] = 11;
|
||||||
$Perk::PerkToID["Storm Barrier"] = 11;
|
$Perk::PerkToID["Radar Phantom"] = 12;
|
||||||
$Perk::PerkToID["Lim Zombie Shield"] = 12;
|
$Perk::PerkToID["Bomb Shadower"] = 13;
|
||||||
$Perk::PerkToID["No-Infect Armor"] = 13;
|
$Perk::PerkToID["Second Chance"] = 14;
|
||||||
$Perk::PerkToID["Radar Phantom"] = 14;
|
$Perk::PerkToID["Reflexive Reloader"] = 15;
|
||||||
$Perk::PerkToID["Clip Boxes"] = 15;
|
|
||||||
$Perk::PerkToID["UAV Disabler"] = 16;
|
$Perk::PerkToID["UAV Disabler"] = 16;
|
||||||
$Perk::PerkToID["Team Gain"] = 17;
|
$Perk::PerkToID["Team Gain"] = 17;
|
||||||
$Perk::PerkToID["Double Time"] = 18;
|
$Perk::PerkToID["Bandolier"] = 18;
|
||||||
$Perk::PerkToID["Ammo Vet"] = 19;
|
$Perk::PerkToID["Hardline"] = 19;
|
||||||
$Perk::PerkToID["Bandolier"] = 20;
|
|
||||||
$Perk::PerkToID["Hardline"] = 21;
|
|
||||||
$Perk::PerkToID["Bomb Shadower"] = 22;
|
|
||||||
$Perk::PerkToID["Second Chance"] = 23;
|
|
||||||
|
|
||||||
$Perk::Descrip[1] = "Bullets do 50% More Damage";
|
|
||||||
$Perk::Descrip[2] = "Improves Weapon Accuracy by 250%";
|
$Perk::Descrip[1] = "Bullets deal 15% increased damage, damage to armored targets increased by 33%";
|
||||||
|
$Perk::Descrip[2] = "Reduces weapon spread by a varying amount (Dependent on the weapon)";
|
||||||
$Perk::Descrip[3] = "Instantly Stop a fall with your beacon key";
|
$Perk::Descrip[3] = "Instantly Stop a fall with your beacon key";
|
||||||
$Perk::Descrip[4] = "Your C4 Detonates in 3 Seconds, not 10";
|
$Perk::Descrip[4] = "Your C4 Detonates in 3 seconds instead of 10 seconds";
|
||||||
$Perk::Descrip[5] = "The BoV Affects a small area, not 1 target";
|
$Perk::Descrip[5] = "Upon death, drop a live grenade or C4 charge (if available)";
|
||||||
$Perk::Descrip[6] = "Your armor explodes 4 seconds after death";
|
$Perk::Descrip[6] = "Explosions deal 25% increased damage";
|
||||||
$Perk::Descrip[7] = "Makes certain pistols 100% accurate";
|
$Perk::Descrip[7] = "Reduce incoming damage from bullets by 20%, explosions by 25%";
|
||||||
$Perk::Descrip[8] = "Gain Double EXP for non boss kills";
|
$Perk::Descrip[8] = "Removes the headshot multiplier on incoming rounds";
|
||||||
//$Perk::Descrip[9] = "Adds an additional weapon slot to your armor";
|
$Perk::Descrip[9] = "Protects you from electrical attacks";
|
||||||
$Perk::Descrip[9] = "Increases your armor by 50%";
|
$Perk::Descrip[10] = "Enhanced your armor with a specialized Lim-Zombie barrier, repelling incoming attackers before requiring a recharge";
|
||||||
$Perk::Descrip[10] = "Prevents you from being Headshot Killed";
|
$Perk::Descrip[11] = "Prevents you from being infected";
|
||||||
$Perk::Descrip[11] = "Protects you from electrical attacks";
|
$Perk::Descrip[12] = "Jam enemy sensors";
|
||||||
$Perk::Descrip[12] = "20% chance to deflect zombie attackers";
|
$Perk::Descrip[13] = "You do not show a Sabotage Waypoint";
|
||||||
$Perk::Descrip[13] = "Prevents you from being infected";
|
$Perk::Descrip[14] = "Spend a team revive to respawn in horde";
|
||||||
$Perk::Descrip[14] = "Jam enemy sensors";
|
$Perk::Descrip[15] = "Reduces weapon reload time by 33%";
|
||||||
$Perk::Descrip[15] = "Reduces reload time by 33%";
|
|
||||||
$Perk::Descrip[16] = "You will not show on enemy UAVs";
|
$Perk::Descrip[16] = "You will not show on enemy UAVs";
|
||||||
$Perk::Descrip[17] = "Allies near you will gain XP for your kills";
|
$Perk::Descrip[17] = "Allies near you will gain XP for your kills";
|
||||||
$Perk::Descrip[18] = "Reduces reload time by 50%";
|
$Perk::Descrip[18] = "Doubles your maximum clip capacity";
|
||||||
$Perk::Descrip[19] = "Reduces reload time by 75%";
|
$Perk::Descrip[19] = "Killstreaks require 1 less kill to earn";
|
||||||
$Perk::Descrip[20] = "Doubles your initial clip count";
|
|
||||||
$Perk::Descrip[21] = "Killstreaks require 1 less kill to earn";
|
|
||||||
$Perk::Descrip[22] = "You do not show a Sabotage Waypoint";
|
|
||||||
$Perk::Descrip[23] = "Spend a team revive to respawn in horde";
|
|
||||||
|
|
||||||
$Perk::PerkToGroup["AP Bullets"] = 1;
|
$Perk::PerkToGroup["AP Bullets"] = 1;
|
||||||
$Perk::PerkToGroup["Advanced Grip"] = 1;
|
$Perk::PerkToGroup["Handling Expert"] = 1;
|
||||||
$Perk::PerkToGroup["Wind Brake Beacon"] = 1;
|
$Perk::PerkToGroup["Wind Brake Beacon"] = 1;
|
||||||
$Perk::PerkToGroup["3 Second C4"] = 1;
|
$Perk::PerkToGroup["3 Second C4"] = 1;
|
||||||
$Perk::PerkToGroup["Blade Sweep"] = 1;
|
|
||||||
$Perk::PerkToGroup["Martydom"] = 1;
|
$Perk::PerkToGroup["Martydom"] = 1;
|
||||||
$Perk::PerkToGroup["Pistol God"] = 1;
|
$Perk::PerkToGroup["Powder Keg"] = 1;
|
||||||
$Perk::PerkToGroup["Double Down"] = 1;
|
//----------------------------------------
|
||||||
//$Perk::PerkToGroup["OverKill"] = 2;
|
|
||||||
$Perk::PerkToGroup["Kevlar Armor"] = 2;
|
$Perk::PerkToGroup["Kevlar Armor"] = 2;
|
||||||
$Perk::PerkToGroup["Head Guard"] = 2;
|
$Perk::PerkToGroup["Armored Helmet"] = 2;
|
||||||
$Perk::PerkToGroup["Storm Barrier"] = 2;
|
$Perk::PerkToGroup["Storm Barrier"] = 2;
|
||||||
$Perk::PerkToGroup["Lim Zombie Shield"] = 2;
|
$Perk::PerkToGroup["Lim Zombie Shield"] = 2;
|
||||||
$Perk::PerkToGroup["No-Infect Armor"] = 2;
|
$Perk::PerkToGroup["Undead Resistant Plating"] = 2;
|
||||||
$Perk::PerkToGroup["Radar Phantom"] = 2;
|
$Perk::PerkToGroup["Radar Phantom"] = 2;
|
||||||
$Perk::PerkToGroup["Clip Boxes"] = 3;
|
$Perk::PerkToGroup["Bomb Shadower"] = 2;
|
||||||
|
$Perk::PerkToGroup["Second Chance"] = 2;
|
||||||
|
//----------------------------------------
|
||||||
|
$Perk::PerkToGroup["Reflexive Reloader"] = 3;
|
||||||
$Perk::PerkToGroup["UAV Disabler"] = 3;
|
$Perk::PerkToGroup["UAV Disabler"] = 3;
|
||||||
$Perk::PerkToGroup["Team Gain"] = 3;
|
$Perk::PerkToGroup["Team Gain"] = 3;
|
||||||
$Perk::PerkToGroup["Double Time"] = 3;
|
|
||||||
$Perk::PerkToGroup["Ammo Vet"] = 3;
|
|
||||||
$Perk::PerkToGroup["Bandolier"] = 3;
|
$Perk::PerkToGroup["Bandolier"] = 3;
|
||||||
$Perk::PerkToGroup["Hardline"] = 3;
|
$Perk::PerkToGroup["Hardline"] = 3;
|
||||||
$Perk::PerkToGroup["Bomb Shadower"] = 3;
|
|
||||||
$Perk::PerkToGroup["Second Chance"] = 3;
|
|
||||||
|
|
||||||
//Asset Function
|
//Asset Function
|
||||||
function GameConnection::IsActivePerk(%client, %perk) {
|
function GameConnection::IsActivePerk(%client, %perk) {
|
||||||
|
|
@ -197,20 +167,6 @@ function GameConnection::CanUsePerk(%client, %perkVal) {
|
||||||
%scriptController = %client.TWM2Core;
|
%scriptController = %client.TWM2Core;
|
||||||
%xp = getCurrentEXP(%client);
|
%xp = getCurrentEXP(%client);
|
||||||
switch(%perkVal) {
|
switch(%perkVal) {
|
||||||
case 1:
|
|
||||||
if(%xp >= $PerkRequire[1]) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
case 2:
|
|
||||||
if(%xp >= $PerkRequire[2]) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
case 3:
|
case 3:
|
||||||
if(%client.hasMedal(8)) {
|
if(%client.hasMedal(8)) {
|
||||||
return true;
|
return true;
|
||||||
|
|
@ -218,133 +174,21 @@ function GameConnection::CanUsePerk(%client, %perkVal) {
|
||||||
else {
|
else {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
case 4 or 5:
|
|
||||||
if(%client.hasMedal(11)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
case 6:
|
|
||||||
if(%client.hasMedal(13)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
case 7:
|
|
||||||
if(%xp >= $PerkRequire[7]) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
case 8:
|
|
||||||
if(%scriptController.officer >= 1) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
// case 9:
|
|
||||||
// if(%xp >= $PerkRequire[9]) {
|
|
||||||
// return true;
|
|
||||||
// }
|
|
||||||
// else {
|
|
||||||
// return false;
|
|
||||||
// }
|
|
||||||
case 9:
|
case 9:
|
||||||
if(%xp >= $PerkRequire[10]) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
case 10:
|
|
||||||
if(%xp >= $PerkRequire[11]) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
case 11:
|
|
||||||
if(%client.hasMedal(9)) {
|
if(%client.hasMedal(9)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
case 12:
|
|
||||||
if(%client.hasMedal(10)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
case 13:
|
case 13:
|
||||||
if(%client.hasMedal(12)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
case 14:
|
|
||||||
if(%xp >= $PerkRequire[15]) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
case 15:
|
|
||||||
if(%xp >= $PerkRequire[16]) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
case 16:
|
|
||||||
if(%client.hasMedal(14)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
case 17 or 19:
|
|
||||||
if(%client.hasMedal(5)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
case 18:
|
|
||||||
if(%client.hasMedal(7)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
case 20:
|
|
||||||
if(%xp >= $PerkRequire[21]) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
case 21:
|
|
||||||
if(%xp >= $PerkRequire[22]) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
case 22:
|
|
||||||
if(%client.CheckNWChallengeCompletion("3For5Sabo")) {
|
if(%client.CheckNWChallengeCompletion("3For5Sabo")) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
case 23:
|
case 14:
|
||||||
if(%client.CheckNWChallengeCompletion("ArmyOf50Stopped")) {
|
if(%client.CheckNWChallengeCompletion("ArmyOf50Stopped")) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
@ -445,6 +289,9 @@ function DoPerksStuff(%client, %player) {
|
||||||
if(%client.IsActivePerk("Wind Brake Beacon")) {
|
if(%client.IsActivePerk("Wind Brake Beacon")) {
|
||||||
%client.player.AirBrakes = 3;
|
%client.player.AirBrakes = 3;
|
||||||
}
|
}
|
||||||
|
if(%client.IsActivePerk("Lim Zombie Shield")) {
|
||||||
|
%client.player.LimHits = 2;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -463,18 +310,9 @@ function RepelZombie(%zombie, %player) {
|
||||||
%zombie.playShieldEffect("1 1 1");
|
%zombie.playShieldEffect("1 1 1");
|
||||||
}
|
}
|
||||||
|
|
||||||
function MartydomExplode(%position, %client) {
|
function resetLimCharges(%player) {
|
||||||
ServerPlay3D("SatchelChargeExplosionSound", %position);
|
if(!isObject(%player) || %player.getState() $= "dead") {
|
||||||
%c4 = new Item() {
|
return;
|
||||||
datablock = C4Deployed;
|
}
|
||||||
position = %position;
|
%player.LimHits = 2;
|
||||||
scale = ".1 .1 .1";
|
}
|
||||||
owner = %client;
|
|
||||||
};
|
|
||||||
MissionCleanup.add(%c4);
|
|
||||||
%c4.theClient = %client;
|
|
||||||
|
|
||||||
//echo("DEBUG: C4 mine dropped: "@%position TAB %client TAB %c4@"");
|
|
||||||
|
|
||||||
schedule(770, 0, "C4GoBoom", %c4);
|
|
||||||
}
|
|
||||||
|
|
@ -170,15 +170,9 @@ function AttemptReload(%WImg, %Plyr, %slot) {
|
||||||
%plyr.ClipCount[%WImg.ClipName]--;
|
%plyr.ClipCount[%WImg.ClipName]--;
|
||||||
}
|
}
|
||||||
%Plyr.Reloading[%WImg] = 1;
|
%Plyr.Reloading[%WImg] = 1;
|
||||||
if(%client.IsActivePerk("Clip Boxes")) {
|
if(%client.IsActivePerk("Reflexive Reloader")) {
|
||||||
%ReloadTime = %WImg.ClipReloadTime - (%WImg.ClipReloadTime * 0.33);
|
%ReloadTime = %WImg.ClipReloadTime - (%WImg.ClipReloadTime * 0.33);
|
||||||
}
|
}
|
||||||
else if(%client.IsActivePerk("Double Time")) {
|
|
||||||
%ReloadTime = %WImg.ClipReloadTime - (%WImg.ClipReloadTime * 0.5);
|
|
||||||
}
|
|
||||||
else if(%client.IsActivePerk("Ammo Vet")) {
|
|
||||||
%ReloadTime = %WImg.ClipReloadTime - (%WImg.ClipReloadTime * 0.75);
|
|
||||||
}
|
|
||||||
else {
|
else {
|
||||||
%ReloadTime = %WImg.ClipReloadTime;
|
%ReloadTime = %WImg.ClipReloadTime;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -237,7 +237,7 @@ function TWM2Lib_Zombie_Core(%functionName, %arg1, %arg2, %arg3, %arg4) {
|
||||||
}
|
}
|
||||||
//Additional checks...
|
//Additional checks...
|
||||||
if(%arg1.client !$= "") {
|
if(%arg1.client !$= "") {
|
||||||
if(%arg1.client.isActivePerk("No-Infect Armor")) {
|
if(%arg1.client.isActivePerk("Undead Resistant Plating")) {
|
||||||
%arg1.playShieldEffect("1 1 1");
|
%arg1.playShieldEffect("1 1 1");
|
||||||
%arg1.infected = 0;
|
%arg1.infected = 0;
|
||||||
return;
|
return;
|
||||||
|
|
|
||||||
|
|
@ -49,6 +49,19 @@ function ZombieArmor::armorCollisionFunction(%datablock, %zombie, %colPlayer) {
|
||||||
if(%colPlayer.isBoss || %colPlayer.isZombie || %colPlayer.rapierShield) {
|
if(%colPlayer.isBoss || %colPlayer.isZombie || %colPlayer.rapierShield) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(%colPlayer.client !$= "") {
|
||||||
|
if(%colPlayer.client.IsActivePerk("Lim Zombie Shield")) {
|
||||||
|
if(%colPlayer.limHits > 0) {
|
||||||
|
RepelZombie(%zombie, %colPlayer);
|
||||||
|
%colPlayer.limHits--;
|
||||||
|
}
|
||||||
|
if(%colPlayer.limHits == 0) {
|
||||||
|
schedule(25000, 0, "resetLimCharges", %colPlayer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//Damage.
|
//Damage.
|
||||||
%causeInfect = %zombie.damage_infectOnTouch;
|
%causeInfect = %zombie.damage_infectOnTouch;
|
||||||
%baseDamage = %zombie.damage_amountOnTouch;
|
%baseDamage = %zombie.damage_amountOnTouch;
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,19 @@ function RavagerZombieArmor::armorCollisionFunction(%datablock, %zombie, %colPla
|
||||||
if(%colPlayer.isBoss || %colPlayer.isZombie || %colPlayer.rapierShield) {
|
if(%colPlayer.isBoss || %colPlayer.isZombie || %colPlayer.rapierShield) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(%colPlayer.client !$= "") {
|
||||||
|
if(%colPlayer.client.IsActivePerk("Lim Zombie Shield")) {
|
||||||
|
if(%colPlayer.limHits > 0) {
|
||||||
|
RepelZombie(%zombie, %colPlayer);
|
||||||
|
%colPlayer.limHits--;
|
||||||
|
}
|
||||||
|
if(%colPlayer.limHits == 0) {
|
||||||
|
schedule(25000, 0, "resetLimCharges", %colPlayer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//Damage.
|
//Damage.
|
||||||
%causeInfect = %zombie.damage_infectOnTouch;
|
%causeInfect = %zombie.damage_infectOnTouch;
|
||||||
%baseDamage = %zombie.damage_amountOnTouch;
|
%baseDamage = %zombie.damage_amountOnTouch;
|
||||||
|
|
|
||||||
|
|
@ -49,6 +49,19 @@ function ShifterZombieArmor::armorCollisionFunction(%datablock, %zombie, %colPla
|
||||||
if(%colPlayer.isBoss || %colPlayer.isZombie || %colPlayer.rapierShield) {
|
if(%colPlayer.isBoss || %colPlayer.isZombie || %colPlayer.rapierShield) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(%colPlayer.client !$= "") {
|
||||||
|
if(%colPlayer.client.IsActivePerk("Lim Zombie Shield")) {
|
||||||
|
if(%colPlayer.limHits > 0) {
|
||||||
|
RepelZombie(%zombie, %colPlayer);
|
||||||
|
%colPlayer.limHits--;
|
||||||
|
}
|
||||||
|
if(%colPlayer.limHits == 0) {
|
||||||
|
schedule(25000, 0, "resetLimCharges", %colPlayer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//Damage.
|
//Damage.
|
||||||
%causeInfect = %zombie.damage_infectOnTouch;
|
%causeInfect = %zombie.damage_infectOnTouch;
|
||||||
%baseDamage = %zombie.damage_amountOnTouch;
|
%baseDamage = %zombie.damage_amountOnTouch;
|
||||||
|
|
|
||||||
|
|
@ -144,12 +144,15 @@ function ShapeBaseImageData::onFire(%data, %obj, %slot) {
|
||||||
//
|
//
|
||||||
%spread = %data.projectileSpread;
|
%spread = %data.projectileSpread;
|
||||||
if(%obj.client !$= "") {
|
if(%obj.client !$= "") {
|
||||||
if(%obj.client.IsActivePerk("Advanced Grip")) {
|
|
||||||
%spread = %spread / 2.5;
|
|
||||||
}
|
|
||||||
if(%obj.client.UpgradeOn("Grip", %data.getName())) {
|
if(%obj.client.UpgradeOn("Grip", %data.getName())) {
|
||||||
%spread = %spread / 1.7;
|
%spread = %spread / 1.7;
|
||||||
}
|
}
|
||||||
|
%handleExpertReduce = %data.handleExpertReduce;
|
||||||
|
if(%handleExpertReduce !$= "") {
|
||||||
|
if(%obj.client.IsActivePerk("Handling Expert")) {
|
||||||
|
%spread = %spread / 1.33;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
%vec = %obj.getMuzzleVector(%slot);
|
%vec = %obj.getMuzzleVector(%slot);
|
||||||
|
|
@ -158,14 +161,6 @@ function ShapeBaseImageData::onFire(%data, %obj, %slot) {
|
||||||
%z = (getRandom() - 0.5) * 2 * 3.1415926 * %spread;
|
%z = (getRandom() - 0.5) * 2 * 3.1415926 * %spread;
|
||||||
%mat = MatrixCreateFromEuler(%x @ " " @ %y @ " " @ %z);
|
%mat = MatrixCreateFromEuler(%x @ " " @ %y @ " " @ %z);
|
||||||
%vector = MatrixMulVector(%mat, %vec);
|
%vector = MatrixMulVector(%mat, %vec);
|
||||||
|
|
||||||
if(%obj.client !$= "") {
|
|
||||||
if(%obj.client.IsActivePerk("Pistol God")) {
|
|
||||||
if(%data.getName() $= "PistolImage" || %data.getName() $= "DeagleImage") {
|
|
||||||
%vector = %obj.getMuzzleVector(%slot);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
%vector = %obj.getMuzzleVector(%slot);
|
%vector = %obj.getMuzzleVector(%slot);
|
||||||
|
|
|
||||||
|
|
@ -108,6 +108,7 @@ datablock ShapeBaseImageData(MG42Image) {
|
||||||
RankRequire = $TWM2::RankRequire["MG42"];
|
RankRequire = $TWM2::RankRequire["MG42"];
|
||||||
|
|
||||||
projectileSpread = 12.5 / 1000.0;
|
projectileSpread = 12.5 / 1000.0;
|
||||||
|
handleExpertReduce = 1.5;
|
||||||
|
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
stateName[0] = "Activate";
|
stateName[0] = "Activate";
|
||||||
|
|
|
||||||
|
|
@ -100,6 +100,7 @@ datablock ShapeBaseImageData(MRXXImage) {
|
||||||
shellVelocity = 4.5;
|
shellVelocity = 4.5;
|
||||||
|
|
||||||
projectileSpread = 10.0 / 1000.0;
|
projectileSpread = 10.0 / 1000.0;
|
||||||
|
handleExpertReduce = 1.75;
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
|
|
|
||||||
|
|
@ -110,6 +110,7 @@ datablock ShapeBaseImageData(RP432Image) {
|
||||||
shellVelocity = 4.5;
|
shellVelocity = 4.5;
|
||||||
|
|
||||||
projectileSpread = 10.0 / 1000.0;
|
projectileSpread = 10.0 / 1000.0;
|
||||||
|
handleExpertReduce = 1.4;
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
|
|
|
||||||
|
|
@ -100,6 +100,7 @@ datablock ShapeBaseImageData(G41RifleImage) {
|
||||||
shellVelocity = 3.0;
|
shellVelocity = 3.0;
|
||||||
|
|
||||||
projectileSpread = 3.0 / 1000.0;
|
projectileSpread = 3.0 / 1000.0;
|
||||||
|
handleExpertReduce = 1.25;
|
||||||
|
|
||||||
stateName[0] = "Activate";
|
stateName[0] = "Activate";
|
||||||
stateTransitionOnTimeout[0] = "ActivateReady";
|
stateTransitionOnTimeout[0] = "ActivateReady";
|
||||||
|
|
|
||||||
|
|
@ -114,6 +114,7 @@ datablock ShapeBaseImageData(M4A1Image) {
|
||||||
shellVelocity = 3.0;
|
shellVelocity = 3.0;
|
||||||
|
|
||||||
projectileSpread = 8.0 / 1000.0;
|
projectileSpread = 8.0 / 1000.0;
|
||||||
|
handleExpertReduce = 1.25;
|
||||||
|
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
stateName[0] = "Activate";
|
stateName[0] = "Activate";
|
||||||
|
|
|
||||||
|
|
@ -93,6 +93,7 @@ datablock ShapeBaseImageData(PulseRifleImage) {
|
||||||
shellVelocity = 3.0;
|
shellVelocity = 3.0;
|
||||||
|
|
||||||
projectileSpread = 2.0 / 1000.0;
|
projectileSpread = 2.0 / 1000.0;
|
||||||
|
handleExpertReduce = 1.15;
|
||||||
|
|
||||||
stateName[0] = "Activate";
|
stateName[0] = "Activate";
|
||||||
stateTransitionOnTimeout[0] = "ActivateReady";
|
stateTransitionOnTimeout[0] = "ActivateReady";
|
||||||
|
|
|
||||||
|
|
@ -157,6 +157,7 @@ datablock ShapeBaseImageData(lasergunImage) {
|
||||||
RankRequire = $TWM2::RankRequire["RSALaserRifle"];
|
RankRequire = $TWM2::RankRequire["RSALaserRifle"];
|
||||||
|
|
||||||
maxSpread = 10.0 / 1000.0;
|
maxSpread = 10.0 / 1000.0;
|
||||||
|
handleExpertReduce = 1.5;
|
||||||
|
|
||||||
stateName[0] = "Activate";
|
stateName[0] = "Activate";
|
||||||
stateTransitionOnTimeout[0] = "ActivateReady";
|
stateTransitionOnTimeout[0] = "ActivateReady";
|
||||||
|
|
|
||||||
|
|
@ -108,6 +108,7 @@ datablock ShapeBaseImageData(S3RifleImage) {
|
||||||
shellVelocity = 3.0;
|
shellVelocity = 3.0;
|
||||||
|
|
||||||
projectileSpread = 5.0 / 1000.0;
|
projectileSpread = 5.0 / 1000.0;
|
||||||
|
handleExpertReduce = 1.33;
|
||||||
|
|
||||||
stateName[0] = "Activate";
|
stateName[0] = "Activate";
|
||||||
stateTransitionOnTimeout[0] = "ActivateReady";
|
stateTransitionOnTimeout[0] = "ActivateReady";
|
||||||
|
|
@ -179,8 +180,8 @@ function S3RifleImage::OnFire(%data, %obj, %slot) {
|
||||||
if(%obj.client.UpgradeOn("Burst Clip", %data.getName())) {
|
if(%obj.client.UpgradeOn("Burst Clip", %data.getName())) {
|
||||||
%spread = %data.projectileSpread;
|
%spread = %data.projectileSpread;
|
||||||
if(%obj.client !$= "") {
|
if(%obj.client !$= "") {
|
||||||
if(%obj.client.IsActivePerk("Advanced Grip")) {
|
if(%obj.client.IsActivePerk("Handling Expert")) {
|
||||||
%spread = %spread / 2.5;
|
%spread = %spread / 1.33;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
%vec2 = %obj.getMuzzleVector(%slot);
|
%vec2 = %obj.getMuzzleVector(%slot);
|
||||||
|
|
|
||||||
|
|
@ -84,6 +84,7 @@ datablock ShapeBaseImageData(S3SRifleImage) {
|
||||||
shellVelocity = 3.0;
|
shellVelocity = 3.0;
|
||||||
|
|
||||||
projectileSpread = 4.0 / 1000.0;
|
projectileSpread = 4.0 / 1000.0;
|
||||||
|
handleExpertReduce = 1.33;
|
||||||
|
|
||||||
stateName[0] = "Activate";
|
stateName[0] = "Activate";
|
||||||
stateTransitionOnTimeout[0] = "ActivateReady";
|
stateTransitionOnTimeout[0] = "ActivateReady";
|
||||||
|
|
|
||||||
|
|
@ -110,6 +110,7 @@ datablock ShapeBaseImageData(Mp26Image)
|
||||||
shellVelocity = 3.0;
|
shellVelocity = 3.0;
|
||||||
|
|
||||||
projectileSpread = 4.0 / 1000.0;
|
projectileSpread = 4.0 / 1000.0;
|
||||||
|
handleExpertReduce = 1.33;
|
||||||
|
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
stateName[0] = "Activate";
|
stateName[0] = "Activate";
|
||||||
|
|
|
||||||
|
|
@ -101,6 +101,7 @@ datablock ShapeBaseImageData(Mp26CMDOImage)
|
||||||
shellVelocity = 3.0;
|
shellVelocity = 3.0;
|
||||||
|
|
||||||
projectileSpread = 3.2 / 1000.0;
|
projectileSpread = 3.2 / 1000.0;
|
||||||
|
handleExpertReduce = 1.33;
|
||||||
|
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
stateName[0] = "Activate";
|
stateName[0] = "Activate";
|
||||||
|
|
|
||||||
|
|
@ -112,6 +112,7 @@ datablock ShapeBaseImageData(P90Image)
|
||||||
shellVelocity = 3.0;
|
shellVelocity = 3.0;
|
||||||
|
|
||||||
projectileSpread = 4.0 / 1000.0;
|
projectileSpread = 4.0 / 1000.0;
|
||||||
|
handleExpertReduce = 1.15;
|
||||||
|
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
stateName[0] = "Activate";
|
stateName[0] = "Activate";
|
||||||
|
|
|
||||||
|
|
@ -117,6 +117,7 @@ datablock ShapeBaseImageData(Pg700Image)
|
||||||
shellVelocity = 3.0;
|
shellVelocity = 3.0;
|
||||||
|
|
||||||
projectileSpread = 3.0 / 1000.0;
|
projectileSpread = 3.0 / 1000.0;
|
||||||
|
handleExpertReduce = 1.40;
|
||||||
|
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
stateName[0] = "Activate";
|
stateName[0] = "Activate";
|
||||||
|
|
|
||||||
|
|
@ -104,6 +104,7 @@ datablock ShapeBaseImageData(PulseSMGImage)
|
||||||
shellVelocity = 3.0;
|
shellVelocity = 3.0;
|
||||||
|
|
||||||
projectileSpread = 3.0 / 1000.0;
|
projectileSpread = 3.0 / 1000.0;
|
||||||
|
handleExpertReduce = 1.20;
|
||||||
|
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
stateName[0] = "Activate";
|
stateName[0] = "Activate";
|
||||||
|
|
|
||||||
|
|
@ -486,6 +486,7 @@ datablock ShapeBaseImageData(MiniChaingunImage)
|
||||||
shellVelocity = 3.0;
|
shellVelocity = 3.0;
|
||||||
|
|
||||||
projectileSpread = 8.0 / 1000.0;
|
projectileSpread = 8.0 / 1000.0;
|
||||||
|
handleExpertReduce = 1.5;
|
||||||
|
|
||||||
//--------------------------------------
|
//--------------------------------------
|
||||||
stateName[0] = "Activate";
|
stateName[0] = "Activate";
|
||||||
|
|
|
||||||
|
|
@ -111,6 +111,7 @@ datablock ShapeBaseImageData(M1700Image) {
|
||||||
//
|
//
|
||||||
|
|
||||||
projectileSpread = 11.0 / 1000.0;
|
projectileSpread = 11.0 / 1000.0;
|
||||||
|
handleExpertReduce = 1.2;
|
||||||
|
|
||||||
stateName[0] = "Activate";
|
stateName[0] = "Activate";
|
||||||
stateTransitionOnTimeout[0] = "ActivateReady";
|
stateTransitionOnTimeout[0] = "ActivateReady";
|
||||||
|
|
|
||||||
|
|
@ -110,6 +110,7 @@ datablock ShapeBaseImageData(Model1887Image) {
|
||||||
//
|
//
|
||||||
|
|
||||||
projectileSpread = 7.0 / 1000.0;
|
projectileSpread = 7.0 / 1000.0;
|
||||||
|
handleExpertReduce = 1.33;
|
||||||
|
|
||||||
stateName[0] = "Activate";
|
stateName[0] = "Activate";
|
||||||
stateTransitionOnTimeout[0] = "ActivateReady";
|
stateTransitionOnTimeout[0] = "ActivateReady";
|
||||||
|
|
|
||||||
|
|
@ -141,6 +141,7 @@ datablock ShapeBaseImageData( SA2400Image ) {
|
||||||
//
|
//
|
||||||
|
|
||||||
projectileSpread = 3.0 / 1000.0;
|
projectileSpread = 3.0 / 1000.0;
|
||||||
|
handleExpertReduce = 2.0
|
||||||
//----------------------------------------------------------------------------\\
|
//----------------------------------------------------------------------------\\
|
||||||
//State Data\\
|
//State Data\\
|
||||||
//----------------------------------------------------------------------------\\
|
//----------------------------------------------------------------------------\\
|
||||||
|
|
|
||||||
|
|
@ -106,6 +106,7 @@ datablock ShapeBaseImageData(SCD343Image) {
|
||||||
//
|
//
|
||||||
|
|
||||||
projectileSpread = 10.0 / 1000.0;
|
projectileSpread = 10.0 / 1000.0;
|
||||||
|
handleExpertReduce = 1.3;
|
||||||
|
|
||||||
stateName[0] = "Activate";
|
stateName[0] = "Activate";
|
||||||
stateTransitionOnTimeout[0] = "ActivateReady";
|
stateTransitionOnTimeout[0] = "ActivateReady";
|
||||||
|
|
|
||||||
|
|
@ -106,6 +106,7 @@ datablock ShapeBaseImageData(Wp400Image) {
|
||||||
//
|
//
|
||||||
|
|
||||||
projectileSpread = 15.0 / 1000.0;
|
projectileSpread = 15.0 / 1000.0;
|
||||||
|
handleExpertReduce = 1.33;
|
||||||
|
|
||||||
stateName[0] = "Activate";
|
stateName[0] = "Activate";
|
||||||
stateTransitionOnTimeout[0] = "ActivateReady";
|
stateTransitionOnTimeout[0] = "ActivateReady";
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue