diff --git a/README.md b/README.md index 36d1333..e9972bb 100644 --- a/README.md +++ b/README.md @@ -129,6 +129,9 @@ PLEASE NOTE: I've moved all old changelogs into the version_history folder. This * General Enhancements * Centralized some of the datablocks that were shared across the mod to allow for easier access / modification * Centralized the demon lord's missile seeking logic that was used across multiple zombies & bosses to allow for easier access and editing + * Streamlined all weapon rank, medal checks into one single function + * Added the capability to restrict via challenge as well + * Re-did the inventory hud logic to be much cleaner and readable * Modified the vote logic in admin.cs to clean up a ton of redundant if/else paths * Re-did the player collision logic in player.cs to make things a whole lot easier to modify in the future * Did a pass through all of the weapon files, cleaning the code up and making each unique weapon have its own damage type. @@ -139,6 +142,7 @@ PLEASE NOTE: I've moved all old changelogs into the version_history folder. This * All 'Boss' level enemies will now have gold text in their name. * The Helljump 'Oh Lordy' modifier has been changed to 'Reduces the cooldown time of the Zombie Lord's Photon Cannon by 50%'. * The RSA Laser Rifle has been renamed to the 'UR-22 Laser Rifle' + * The Pistol Weapon Slot is now called the Sidearm Slot * 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. * Fixed the bug in which picking up weapon clips with an empty weapon would not automatically trigger weapon reload on that weapon. diff --git a/scripts/TWM2/MultiUseDatablocks.cs b/scripts/TWM2/MultiUseDatablocks.cs index cc7f506..817da8d 100644 --- a/scripts/TWM2/MultiUseDatablocks.cs +++ b/scripts/TWM2/MultiUseDatablocks.cs @@ -804,6 +804,48 @@ datablock TracerProjectileData(SniperZombieAcidShot) { emap = true; }; +datablock TracerProjectileData(SniperZombieAcidSidearmShot) { + doDynamicClientHits = true; + + projectileShapeName = ""; + directDamage = 0.0; + directDamageType = $DamageType::ZAcid; + hasDamageRadius = true; + indirectDamage = 0.06; + damageRadius = 2.0; + kickBackStrength = 0.0; + radiusDamageType = $DamageType::ZAcid; + sound = BlasterProjectileSound; + explosion = ZAcidBallExplosion; + + ImageSource = "AcidCannonImage"; + + dryVelocity = 100.0; + wetVelocity = 100.0; + velInheritFactor = 1.0; + fizzleTimeMS = 400; + lifetimeMS = 500; + explodeOnDeath = false; + reflectOnWaterImpactAngle = 0.0; + explodeOnWaterImpact = true; + deflectionOnWaterImpact = 0.0; + fizzleUnderwaterMS = -1; + + activateDelayMS = 100; + + tracerLength = 5; + tracerAlpha = false; + tracerMinPixels = 3; + tracerColor = "0 1 0 1"; + tracerTex[0] = "special/landSpikeBolt"; + tracerTex[1] = "special/landSpikeBoltCross"; + tracerWidth = 0.3; + crossSize = 0.79; + crossViewAng = 0.990; + renderCross = true; + emap = true; +}; + datablock TracerProjectileData(FlareguideSniperZombieAcidShot) { doDynamicClientHits = true; diff --git a/scripts/TWM2/Systems/MainControl.cs b/scripts/TWM2/Systems/MainControl.cs index 2473143..e887214 100644 --- a/scripts/TWM2/Systems/MainControl.cs +++ b/scripts/TWM2/Systems/MainControl.cs @@ -481,67 +481,6 @@ function serverCmdCheckendTilt(%client) { } -function DoMedalCheck(%client, %image) { - // - if(%client.isAIControlled()) { - return 1; - } - // - switch$(%image) { - case "BOVImage": - if(%client.hasMedal(11)) { - return 1; - } - else { - return 0; - } - case "LD06SavagerImage": - if(%client.hasMedal(1)) { - return 1; - } - else { - return 0; - } - case "IonLauncherImage" or "IonRifleImage" or "ConcussionGunImage": - if(%client.hasMedal(9)) { - return 1; - } - else { - return 0; - } - case "flamerImage": - if(%client.hasMedal(10)) { - return 1; - } - else { - return 0; - } - case "ShadowRifleImage": - if(%client.hasMedal(13)) { - return 1; - } - else { - return 0; - } - case "NapalmImage": - if(%client.hasMedal(27)) { - return 1; - } - else { - return 0; - } - case "MiniColliderCannonImage" or "PlasmasaberImage": - if(%client.hasMedal(15)) { - return 1; - } - else { - return 0; - } - default: - return 1; - } -} - //ARMOR UPDATE function updateArmorList(%client, %armorList) { if(!$Host::Purebuild) { diff --git a/scripts/TWM2/Systems/NWChallengeIndex.cs b/scripts/TWM2/Systems/NWChallengeIndex.cs index 31effa6..d97e329 100644 --- a/scripts/TWM2/Systems/NWChallengeIndex.cs +++ b/scripts/TWM2/Systems/NWChallengeIndex.cs @@ -332,6 +332,8 @@ $Challenge::Challenge[5, 11] = "HuntersAsPrey"; $Challenge::Info["HuntersAsPrey"] = "Hunters As Prey\t5\t5000\tNone\tComplete the 'Air Raid' flashpoint operation."; $Challenge::IsNotMultiTier["HuntersAsPrey"] = true; $Challenge::Challenge[5, 12] = "ThroughTheFlare"; +$Challenge::SetHidden[5, 12] = true; +$Challenge::HiddenMessage[5, 12] = "=== CLASSIFIED: DELTA OPS CLEARANCE LEVEL ==="; $Challenge::Info["ThroughTheFlare"] = "Through The Flare\t5\t15000\tNLS-22 Acid Sniper\tFind and kill the Flareguide Mini-Boss during a living world session"; $Challenge::IsNotMultiTier["ThroughTheFlare"] = true; diff --git a/scripts/TWM2/Systems/WeaponChallenges.cs b/scripts/TWM2/Systems/WeaponChallenges.cs index d822d12..f31fdfb 100644 --- a/scripts/TWM2/Systems/WeaponChallenges.cs +++ b/scripts/TWM2/Systems/WeaponChallenges.cs @@ -155,7 +155,7 @@ function GenerateCompletedChallegnesMenu(%client, %tag, %index) { if(%db.getName().classname $= "Weapon") { %Image = %db.getName().image; if(%Image.HasChallenges) { - if(DoMedalCheck(%client, %image) == 1 && CanUseRankedWeapon(%image, %client) == 1) { + if(CanUseWeapon(%image, %client) == 1) { messageClient( %client, 'SetLineHud', "", %tag, %index, ""@%Image.GunName@""); %index++; } @@ -182,7 +182,7 @@ function GenerateWeaponChallegnesMenu(%client, %tag, %index) { if(%kills $= "") { %kills = 0; } - if(DoMedalCheck(%client, %image) == 1 && CanUseRankedWeapon(%image, %client) == 1) { + if(CanUseWeapon(%image, %client) == 1) { messageClient( %client, 'SetLineHud', "", %tag, %index, ""@%Image.GunName@" - Kills: "@%kills@""); %index++; } diff --git a/scripts/TWM2/Systems/scoremenucmds.cs b/scripts/TWM2/Systems/scoremenucmds.cs index 8d3fb9a..5b6bb9b 100644 --- a/scripts/TWM2/Systems/scoremenucmds.cs +++ b/scripts/TWM2/Systems/scoremenucmds.cs @@ -863,7 +863,7 @@ function ConstructionGame::processGameLink(%game, %client, %arg1, %arg2, %arg3, if(%kills $= "") { %kills = 0; } - if(DoMedalCheck(%client, %image) == 1 && CanUseRankedWeapon(%image, %client) == 1) { + if(CanUseWeapon(%image, %client) == 1) { messageClient( %client, 'SetLineHud', "", %tag, %index, ""@%Image.GunName@" - Kills: "@%kills@""); %index++; } diff --git a/scripts/TWM2/WeaponFunctions.cs b/scripts/TWM2/WeaponFunctions.cs index 5830cc9..0bea69a 100644 --- a/scripts/TWM2/WeaponFunctions.cs +++ b/scripts/TWM2/WeaponFunctions.cs @@ -1,87 +1,136 @@ // -function CanUseRankedWeapon(%WImg, %client) { - if(%client.isHarb || %client.isAIControlled()) { - return 1; - } - // - if(!$TWM2::AllowSnipers) { - if(strstr(%WImg.getName(), "SniperRifle") != -1) { - return 0; - } - } - // - %clientController = %client.TWM2Core; - %WImg2 = %WImg.getName(); - if($Host::RankSystem == 0) { - return 1; - } - else { - //PRESTIGE CHECKS (added 2.4) - if(%WImg2.PrestigeRequire $= "") { - if(%WImg2.RankRequire $= "") { - return 1; - } - else { - %xpHas = getCurrentEXP(%client); - %xpNeed = $Ranks::MinPoints[%WImg2.RankRequire]; - if(%xpNeed > %xpHas || (isSet(%WImg2.RankRequire) ? %clientController.rankNumber < %WImg2.RankRequire : false )) { - return 0; - } - else { - return 1; - } - } - } - else { - %prestige = %clientController.officer; - %prestigeNeed = %WImg2.PrestigeRequire; - if(%prestige < %prestigeNeed) { - return 2; //new case check - } - else { - if(%WImg2.RankRequire $= "") { - return 1; - } - else { - %xpHas = getCurrentEXP(%client); - %xpNeed = $Ranks::MinPoints[%WImg2.RankRequire]; - if(%xpNeed > %xpHas || (isSet(%WImg2.RankRequire) ? %clientController.rankNumber < %WImg2.RankRequire: false )) { - return 0; - } - else { - return 1; - } - } - } - } - } +function CanUseWeapon(%WImg, %client) { + if(%client.isHarb || %client.isAIControlled()) { + return 1; + } + // + if(!$TWM2::AllowSnipers) { + if(strstr(%WImg.getName(), "SniperRifle") != -1) { + return 0; + } + } + %clientController = %client.TWM2Core; + %WImg2 = %WImg.getName(); + //Medal Tests + if(%WImg2.MedalRequire) { + if(!%client.hasMedal(%WImg2.MedalRequire)) { + //Deny access by medal. + return 3; + } + } + //Challenge Tests + if(%WImg2.ChallengeRequire !$= "") { + if(!%client.CheckNWChallengeCompletion(%WImg2.ChallengeRequire)) { + //Deny access by challenge. + return 4; + } + } + //Rank Tests + if($Host::RankSystem == 0) { + return 1; + } + else { + //PRESTIGE CHECKS (added 2.4) + if(%WImg2.PrestigeRequire $= "") { + if(%WImg2.RankRequire $= "") { + return 1; + } + else { + %xpHas = getCurrentEXP(%client); + %xpNeed = $Ranks::MinPoints[%WImg2.RankRequire]; + if(%xpNeed > %xpHas || (isSet(%WImg2.RankRequire) ? %clientController.rankNumber < %WImg2.RankRequire : false )) { + return 0; + } + else { + return 1; + } + } + } + else { + %prestige = %clientController.officer; + %prestigeNeed = %WImg2.PrestigeRequire; + if(%prestige < %prestigeNeed) { + return 2; //new case check + } + else { + if(%WImg2.RankRequire $= "") { + return 1; + } + else { + %xpHas = getCurrentEXP(%client); + %xpNeed = $Ranks::MinPoints[%WImg2.RankRequire]; + if(%xpNeed > %xpHas || (isSet(%WImg2.RankRequire) ? %clientController.rankNumber < %WImg2.RankRequire: false )) { + return 0; + } + else { + return 1; + } + } + } + } + } } -function PerformWeaponRankCheck(%WImg, %Plyr, %slot) { - if(%Plyr.isZombie || %Plyr.isSoldier || %Plyr.client.isAiControlled()) { - return; //Wraith AI - } - %clientController = %plyr.client.TWM2Core; - %xpHas = getCurrentEXP(%Plyr.client); - %xpNeed = $Ranks::MinPoints[%WImg.RankRequire]; - %prestigeNeed = %WImg.PrestigeRequire; - if(CanUseRankedWeapon(%WImg, %Plyr.client) == 2) { - BottomPrint(%Plyr.client, "Officer Level Required \nYou need Officer Level: "@%prestigeNeed@" to use this weapon", 3, 3); - %Plyr.use(%WImg.Item); - %Plyr.throwweapon(1); - %Plyr.throwweapon(0); - return; - } - else if(CanUseRankedWeapon(%WImg, %Plyr.client) == 0) { - BottomPrint(%Plyr.client, "You cannot use this weapon, XP too low \nYou need: "@%xpNeed - %xpHas@" More XP to use this weapon", 3, 3); - %Plyr.use(%WImg.Item); - %Plyr.throwweapon(1); - %Plyr.throwweapon(0); - return; - } - else { - //lalala, we can use it! - } +function PerformWeaponMountChecks(%WImg, %Plyr, %slot) { + if(%Plyr.isZombie || %Plyr.isSoldier || %Plyr.client.isAiControlled()) { + return; //Wraith AI + } + %client = %plyr.client; + %clientController = %client.TWM2Core; + //Perform Rank Checks + %xpHas = getCurrentEXP(%Plyr.client); + %xpNeed = $Ranks::MinPoints[%WImg.RankRequire]; + %prestigeNeed = %WImg.PrestigeRequire; + + %hideReason = %WImg.hideExistence; + + %weaponTestReturnCode = CanUseWeapon(%WImg, %Plyr.client); + if(%weaponTestReturnCode != 1) { + %Plyr.use(%WImg.Item); + %Plyr.throwweapon(1); + %Plyr.throwweapon(0); + switch(%weaponTestReturnCode) { + //Return Code 0: XP Too Low + case 0: + if(%hideReason == true) { + BottomPrint(%Plyr.client, "Weapon Access Denied\nYou cannot use this weapon\nFurther information is classified", 3, 3); + } + else { + BottomPrint(%Plyr.client, "Weapon Access Denied\nRequired Rank\nYou need: "@%xpNeed - %xpHas@" More XP to use this weapon", 3, 3); + } + break; + + //Return Code 2: Officer Level Too Low + case 2: + if(%hideReason == true) { + BottomPrint(%Plyr.client, "Weapon Access Denied\nYou cannot use this weapon\nFurther information is classified", 3, 3); + } + else { + BottomPrint(%Plyr.client, "Weapon Access Denied\nOfficer Level Required\nYou need Officer Level: "@%prestigeNeed@" to use this weapon", 3, 3); + } + break; + + //Return Code 3: Player does not have required medal + case 3: + if(%hideReason == true) { + BottomPrint(%Plyr.client, "Weapon Access Denied\nYou cannot use this weapon\nFurther information is classified", 3, 3); + } + else { + BottomPrint(%Plyr.client, "Weapon Access Denied\nMedal Required\nYou do not own the '"@$MedalName[%WImg.MedalRequire]@"' Medal", 3, 3); + } + break; + + //Return Code 4: Player does not have required challenge + case 4: + if(%hideReason == true) { + BottomPrint(%Plyr.client, "Weapon Access Denied\nYou cannot use this weapon\nFurther information is classified", 3, 3); + } + else { + BottomPrint(%Plyr.client, "Weapon Access Denied\nChallenge Required\nYou do not own the '"@getField($Challenge::Info[%WImg.ChallengeRequire], 0)@"' Medal", 3, 3); + } + break; + } + } } function AttemptReload(%WImg, %Plyr, %slot) { diff --git a/scripts/TWM2/Zombie/ZombieTypes/Sniper.cs b/scripts/TWM2/Zombie/ZombieTypes/Sniper.cs index 399d029..ef58c83 100644 --- a/scripts/TWM2/Zombie/ZombieTypes/Sniper.cs +++ b/scripts/TWM2/Zombie/ZombieTypes/Sniper.cs @@ -2,6 +2,28 @@ $TWM2::ArmorHasCollisionFunction[SniperZombieArmor] = false; $TWM2::ArmorHasCollisionFunction[FlareguideSniperZombieArmor] = false; +datablock ShapeBaseImageData(ZSniperImage1) { + shapeFile = "weapon_sniper.dts"; + emap = true; + armThread = looksn; +}; + +datablock ShapeBaseImageData(ZSniperImage2) { + shapeFile = "weapon_targeting.dts"; + offset = "0.0 1.0 0.41"; + rotation = "90 0 0 90"; + armThread = looksn; + emap = true; +}; + +datablock ShapeBaseImageData(ZSniperImage3) { + shapeFile = "weapon_elf.dts"; + offset = "0.0 0.3 0"; + rotation = "1 0 0 90"; + armThread = looksn; + emap = true; +}; + datablock PlayerData(SniperZombieArmor) : LightMaleHumanArmor { boundingBox = "1.63 1.63 2.6"; maxDamage = 2.5; @@ -29,6 +51,99 @@ datablock PlayerData(SniperZombieArmor) : LightMaleHumanArmor { max[Grenade] = 0; }; +function SniperZombieArmor::AI(%datablock, %zombie) { + //Sniper Zombie AI: + // Unlike other zombies, the sniper zombie will continue to hunt their target until killed. + // The sniper zombie will employ preferential targeting against enemy snipers first + // + // TWM2 3.9.2: Prior to this version, the sniper would run away when approached, + // now, the sniper is armed with a new acid sidearm that fires quick pulses and will + // employ strafing moves as well + if(!isObject(%zombie) || %zombie.getState() $= "dead") { + return; + } + %pos = %zombie.getWorldBoxCenter(); + if(!%zombie.hasTarget) { + %preferSniper = getRandom(1, 10); + if(%preferSniper > 3) { + for(%i = 0; %i < ClientGroup.getCount(%i); %i++) { + %check = ClientGroup.getObject(%i); + if(isObject(%check.player) && %check.player.getState() !$= "dead") { + //Check their weapon + + } + } + } + else { + %closestClient = TWM2Lib_Zombie_Core("lookForTarget", %zombie); + %closestDistance = getWord(%closestClient, 1); + if(isObject(%closestClient.player) && %closestClient.player.getState() !$= "dead") { + %zombie.hasTarget = 1; + %zombie.targetPlayer = %closestClient.player; + } + } + } + + %zombie.moveloop = %datablock.Move(%zombie); +} + +function SniperZombieArmor::Move(%datablock, %zombie) { + if(!isObject(%zombie) || %zombie.getState() $= "dead") { + return; + } + %pos = %zombie.getWorldBoxCenter(); + %closestClient = TWM2Lib_Zombie_Core("lookForTarget", %zombie); + %closestDistance = getWord(%closestClient, 1); + %closestClient = getWord(%closestClient, 0).Player; + if(%closestDistance <= $zombie::detectDist) { + if(%zombie.hastarget != 1) { + %zombie.hastarget = 1; + } + TWM2Lib_Zombie_Core("playZAudio", %zombie, 100, 40); + %vector = TWM2Lib_Zombie_Core("zombieGetFacingDirection", %zombie, %closestClient.getPosition()); + + if(Game.CheckModifier("SuperLunge") == 1) { + %ld = $Zombie::LungeDistance * 5; + } + else { + %ld = $Zombie::LungeDistance; + } + if(%closestDistance <= %ld && %zombie.canjump == 1) { + %vector = vectorScale(%vector, 4); + } + %vector = vectorScale(%vector, %zombie.speed); + %upvec = "150"; + if(%closestDistance <= %ld && %zombie.canjump == 1) { + %upvec *= 2; + TWM2Lib_Zombie_Core("setZFlag", %zombie, "canJump", 0); + schedule($Zombie::BaseJumpCooldown, 0, TWM2Lib_Zombie_Core, "setZFlag", %zombie, "canJump", 1); + } + %x = Getword(%vector, 0); + %y = Getword(%vector, 1); + %z = Getword(%vector, 2); + if(%z >= 600) { + %upvec = (%upvec * 5); + } + %vector = %x@" "@%y@" "@%upvec; + %zombie.applyImpulse(%pos, %vector); + } + else if(%zombie.hastarget == 1) { + %zombie.hastarget = 0; + %zombie.zombieRmove = schedule(%zombie.updateTimeFrequency, %zombie, "TWM2Lib_Zombie_Core", "zRandomMoveLoop", %zombie); + } + %zombie.moveloop = %datablock.schedule(%zombie.updateTimeFrequency, "Move", %zombie); +} + +//***************************************************************** +//***************************************************************** +// FLAREGUIDE SNIPER ZOMBIE +// +// This is contained within this file as it requries the sniper zombie +// datablock in order to load, therefore we'll just leave it down here +// +//***************************************************************** +//***************************************************************** + datablock PlayerData(FlareguideSniperZombieArmor) : SniperZombieArmor { boundingBox = "1.63 1.63 2.6"; maxDamage = 20.0; @@ -48,27 +163,7 @@ datablock PlayerData(FlareguideSniperZombieArmor) : SniperZombieArmor { max[Grenade] = 0; }; -datablock ShapeBaseImageData(ZSniperImage1) { - shapeFile = "weapon_sniper.dts"; - emap = true; - armThread = looksn; -}; -datablock ShapeBaseImageData(ZSniperImage2) { - shapeFile = "weapon_targeting.dts"; - offset = "0.0 1.0 0.41"; - rotation = "90 0 0 90"; - armThread = looksn; - emap = true; -}; - -datablock ShapeBaseImageData(ZSniperImage3) { - shapeFile = "weapon_elf.dts"; - offset = "0.0 0.3 0"; - rotation = "1 0 0 90"; - armThread = looksn; - emap = true; -}; function SniperZombiemovetotarget(%zombie){ if(!isobject(%zombie)) diff --git a/scripts/inventoryHud.cs b/scripts/inventoryHud.cs index 6971373..916db5f 100644 --- a/scripts/inventoryHud.cs +++ b/scripts/inventoryHud.cs @@ -653,562 +653,347 @@ function InventoryScreen::addLine( %this, %tag, %lineNum, %type, %count ) //------------------------------------------------------------------------------ function InventoryScreen::updateHud( %this, %client, %tag ) { - %noSniperRifle = true; - %armor = getArmorDatablock( %client, $NameToInv[%client.favorites[0]] ); + %noSniperRifle = true; + %armor = getArmorDatablock( %client, $NameToInv[%client.favorites[0]] ); if (!%client.isAdmin && !%client.isSuperAdmin) { if ($Host::Purebuild == 1) { %client.favorites[0] = "Purebuild"; %armor = getArmorDatablock( %client , "Pure"); } else { - if (%client.favorites[0] $= "Purebuild") + if (%client.favorites[0] $= "Purebuild") { %client.favorites[0] = "Scout"; + } } } - if ( %client.lastArmor !$= %armor ) - { - %client.lastArmor = %armor; - for ( %x = 0; %x < %client.lastNumFavs; %x++ ) - messageClient( %client, 'RemoveLineHud', "", 'inventoryScreen', %x ); - %setLastNum = true; - } - %cmt = $CurrentMissionType; + if ( %client.lastArmor !$= %armor ) { + %client.lastArmor = %armor; + for ( %x = 0; %x < %client.lastNumFavs; %x++ ) { + messageClient( %client, 'RemoveLineHud', "", 'inventoryScreen', %x ); + } + %setLastNum = true; + } + %cmt = $CurrentMissionType; - //Auto-Inv Load - if($Host::PureBuild) { - buyFavorites(%client); - } + //Auto-Inv Load + if($Host::PureBuild) { + buyFavorites(%client); + } -//Create - ARMOR - List - %armorList = %client.favorites[0]; - for ( %y = 0; $InvArmor[%y] !$= ""; %y++ ) - if ( $InvArmor[%y] !$= %client.favorites[0] ) - %armorList = %armorList TAB $InvArmor[%y]; - if($TWM::PlayingInfection) - %armorList = InfectionArmors(%client, %armorList); - else - %armorList = updateArmorList(%client, %armorList); + //Create - ARMOR - List + %armorList = %client.favorites[0]; + for ( %y = 0; $InvArmor[%y] !$= ""; %y++ ) { + if ( $InvArmor[%y] !$= %client.favorites[0] ) { + %armorList = %armorList TAB $InvArmor[%y]; + } + } + if($TWM::PlayingInfection) { + %armorList = InfectionArmors(%client, %armorList); + } + else { + %armorList = updateArmorList(%client, %armorList); + } + //Create - WEAPON - List + for ( %y = 0; $InvWeapon[%y] !$= ""; %y++ ) { + %notFound = true; + for ( %i = 0; %i < getFieldCount( %client.weaponIndex ); %i++ ) { + %WInv = $NameToInv[$InvWeapon[%y]]; + if ( ( $InvWeapon[%y] $= %client.favorites[getField( %client.weaponIndex,%i )] ) || !%armor.max[%WInv] ) { + %notFound = false; + break; + } + } + if ( !($InvBanList[%cmt, %WInv]) ) { + if ( %notFound && %weaponList $= "" ) { + %useCode = CanUseWeapon(%client, %WInv.Image); + if(%useCode == 1) { + %weaponList = $InvWeapon[%y]; + } + } + else if ( %notFound ) { + %useCode = CanUseWeapon(%client, %WInv.Image); + if(%useCode == 1) { + %weaponList = %weaponList TAB $InvWeapon[%y]; + } + } + } + } -//Create - WEAPON - List -//You are not permitted to use any part of this code... -//Find your own method of doing this... If I find this in your -//code, I will sue you for copywrite infrigment, so shoo :) - %prestige = %client.TWM2Core.officer; - if(%client.TWM2Core.officer $= "") { - %client.TWM2Core.officer = 0; - %prestige = %client.TWM2Core.officer; - } - %xpHas = getCurrentEXP(%client); - if(!$Host::RankSystem) { //it's off - for ( %y = 0; $InvWeapon[%y] !$= ""; %y++ ) { - %notFound = true; - for ( %i = 0; %i < getFieldCount( %client.weaponIndex ); %i++ ) { - %WInv = $NameToInv[$InvWeapon[%y]]; - if ( ( $InvWeapon[%y] $= %client.favorites[getField( %client.weaponIndex,%i )] ) || !%armor.max[%WInv] ) { - %notFound = false; - break; - } - } + //Create - PISTOL - List + %pistolList = ""; + if ( getFieldCount( %client.pistolIndex ) ) { + %pistolList = %client.favorites[getField( %client.pistolIndex, 0 )]; + } + else { + %pistolList = "EMPTY"; + %client.numFavs++; + } + for ( %y = 0; $InvPistol[%y] !$= ""; %y++ ) { + %PistolInv = $NameToInv[$InvPistol[%y]]; + if ( ( $InvPistol[%y] !$= %client.favorites[getField( %client.pistolIndex, 0 )]) && !($InvBanList[%cmt, %PistolInv])) { + %useCode = CanUseWeapon(%client, %PistolInv.Image); + if(%useCode == 1) { + %pistolList = %pistolList TAB $InvPistol[%y]; + } + } + } - if ( !($InvBanList[%cmt, %WInv]) ) { - if ( %notFound && %weaponList $= "" ) { - if(%WInv.Image.MedalRequire) { - %canUse = DoMedalCheck(%client, %WInv.Image); - if(%canUse) { - %weaponList = $InvWeapon[%y]; - } - } - else { - %weaponList = $InvWeapon[%y]; - } - } - else if ( %notFound ) { - if(%WInv.Image.MedalRequire) { - %canUse = DoMedalCheck(%client, %WInv.Image); - if(%canUse) { - %weaponList = %weaponList TAB $InvWeapon[%y]; - } - } - else { - %weaponList = %weaponList TAB $InvWeapon[%y]; - } - } - } - } - } - else { //It's on - for ( %y = 0; $InvWeapon[%y] !$= ""; %y++ ) { - %notFound = true; - for ( %i = 0; %i < getFieldCount( %client.weaponIndex ); %i++ ) { - %WInv = $NameToInv[$InvWeapon[%y]]; - - if ( ( $InvWeapon[%y] $= %client.favorites[getField( %client.weaponIndex,%i )] ) || !%armor.max[%WInv] ) { - %notFound = false; - break; - } - } - - if ( !($InvBanList[%cmt, %WInv]) ) { - if ( %notFound && %weaponList $= "" ) { - //New Rank Check - if(%WInv.Image.RankRequire $= "") { - %xpNeed = 0; - } - else { - %xpNeed = $Ranks::MinPoints[%WInv.Image.RankRequire]; - } - // - if(%WInv.Image.PrestigeRequire $= "") { - %prestigeNeed = 0; - } - else { - %prestigeNeed = %WInv.Image.PrestigeRequire; - } - - if(%prestigeNeed $= "" || %prestigeNeed == 0) { - if(%xpNeed $= "" || %xpNeed == 0) { - if(%WInv.Image.MedalRequire) { - %canUse = DoMedalCheck(%client, %WInv.Image); - if(%canUse) { - %weaponList = $InvWeapon[%y]; - } - } - else { - %weaponList = $InvWeapon[%y]; - } - } - else { - if (%xpHas >= %xpNeed){ - if(%WInv.Image.MedalRequire) { - %canUse = DoMedalCheck(%client, %WInv.Image); - if(%canUse) { - %weaponList = $InvWeapon[%y]; - } - } - else { - %weaponList = $InvWeapon[%y]; - } - } - } - } - else { - if(%prestige >= %prestigeNeed) { - if(%xpNeed $= "" || %xpNeed == 0) { - if(%WInv.Image.MedalRequire) { - %canUse = DoMedalCheck(%client, %WInv.Image); - if(%canUse) { - %weaponList = $InvWeapon[%y]; - } - } - else { - %weaponList = $InvWeapon[%y]; - } - } - else { - if (%xpHas >= %xpNeed && (isSet(%WInv.Image.RankRequire) ? %client.TWM2Core.rankNumber >= %WInv.Image.RankRequire: true )){ - if(%WInv.Image.MedalRequire) { - %canUse = DoMedalCheck(%client, %WInv.Image); - if(%canUse) { - %weaponList = $InvWeapon[%y]; - } - } - else { - %weaponList = $InvWeapon[%y]; - } - } - } - } - } - } - else if ( %notFound ) { - //New Rank Check - if(%WInv.Image.RankRequire $= "") { - %xpNeed = 0; - } - else { - %xpNeed = $Ranks::MinPoints[%WInv.Image.RankRequire]; - } - // - if(%WInv.Image.PrestigeRequire $= "") { - %prestigeNeed = 0; - } - else { - %prestigeNeed = %WInv.Image.PrestigeRequire; - } - - if(%prestigeNeed $= "" || %prestigeNeed == 0) { - if(%xpNeed == 0) { - if(%WInv.Image.MedalRequire) { - %canUse = DoMedalCheck(%client, %WInv.Image); - if(%canUse) { - %weaponList = %weaponList TAB $InvWeapon[%y]; - } - } - else { - %weaponList = %weaponList TAB $InvWeapon[%y]; - } - } - else { - if (%xpHas >= %xpNeed){ - if(%WInv.Image.MedalRequire) { - %canUse = DoMedalCheck(%client, %WInv.Image); - if(%canUse) { - %weaponList = %weaponList TAB $InvWeapon[%y]; - } - } - else { - %weaponList = %weaponList TAB $InvWeapon[%y]; - } - } - } - } - else { - if(%prestige >= %prestigeNeed) { - if(%xpNeed $= "" || %xpNeed == 0) { - if(%WInv.Image.MedalRequire) { - %canUse = DoMedalCheck(%client, %WInv.Image); - if(%canUse) { - %weaponList = %weaponList TAB $InvWeapon[%y]; - } - } - else { - %weaponList = %weaponList TAB $InvWeapon[%y]; - } - } - else { - if (%xpHas >= %xpNeed && (isSet(%WInv.Image.RankRequire) ? %client.TWM2Core.rankNumber >= %WInv.Image.RankRequire: true )){ - if(%WInv.Image.MedalRequire) { - %canUse = DoMedalCheck(%client, %WInv.Image); - if(%canUse) { - %weaponList = %weaponList TAB $InvWeapon[%y]; - } - } - else { - %weaponList = %weaponList TAB $InvWeapon[%y]; - } - } - } - } - } - } - } - } - } -//Create - PISTOL - List -//read above - %pistolList = ""; - if ( getFieldCount( %client.pistolIndex ) ) - %pistolList = %client.favorites[getField( %client.pistolIndex, 0 )]; - else { - %pistolList = "EMPTY"; - %client.numFavs++; - } - for ( %y = 0; $InvPistol[%y] !$= ""; %y++ ) { - %PistolInv = $NameToInv[$InvPistol[%y]]; - if ( ( $InvPistol[%y] !$= %client.favorites[getField( %client.pistolIndex, 0 )]) - && !($InvBanList[%cmt, %PistolInv])) { - - if(%PistolInv.Image.RankRequire $= "") { - %xpNeed = 0; - } - else { - %xpNeed = $Ranks::MinPoints[%PistolInv.Image.RankRequire]; - } - // - if(%PistolInv.Image.PrestigeRequire $= "") - %prestigeNeed = 0; - } - else { - %prestigeNeed = %PistolInv.Image.PrestigeRequire; - } - // - if(%PistolInv.Image.MedalRequire) { - %canUse = DoMedalCheck(%client, %PistolInv.Image); - } - else { - %canUse = 1; - } - - if(%canUse) { - //XP Check Here - if(%prestige >= %prestigeNeed) { - if(%xpHas > %xpNeed && (isSet(%PistolInv.Image.RankRequire) ? %client.TWM2Core.rankNumber >= %PistolInv.Image.RankRequire : true )) { - %pistolList = %pistolList TAB $InvPistol[%y]; - } - } - } - } -// %pistolList = CheckPistolPrereqs(%client, %pistolList); - -//Create - MELEE - List -//Once again, Read Above - if(%client.favorites[0] !$= "Purebuild") { - if ( getFieldCount( %client.meleeIndex ) ) - %meleeList = %client.favorites[getField( %client.meleeIndex, 0 )]; - else { - %meleeList = "EMPTY"; - %client.numFavs++; - } - for ( %y = 0; $InvMelee[%y] !$= ""; %y++ ) { - %meleeInv = $NameToInv[$InvMelee[%y]]; - if ( ( $InvMelee[%y] !$= %client.favorites[getField( %client.meleeIndex, 0 )]) && - %armor.max[%meleeInv] && !($InvBanList[%cmt, %meleeInv])) { - - if(%meleeInv.Image.MedalRequire) { - %canUse = DoMedalCheck(%client, %meleeInv.Image); - } - else { - %canUse = 1; - } - - if(%canUse) { - %meleeList = %meleeList TAB $InvMelee[%y]; - } - } - } - } - -//Create - PACK - List - if ( getFieldCount( %client.packIndex ) ) - %packList = %client.favorites[getField( %client.packIndex, 0 )]; - else - { - %packList = "EMPTY"; - %client.numFavs++; - } - for ( %y = 0; $InvPack[%y] !$= ""; %y++ ) - { - %PInv = $NameToInv[$InvPack[%y]]; - if ( ( $InvPack[%y] !$= %client.favorites[getField( %client.packIndex, 0 )]) && - %armor.max[%PInv] && !($InvBanList[%cmt, %PInv])) - %packList = %packList TAB $Invpack[%y]; - } - -//Create - Construction - List - if(%client.favorites[0] $= "Purebuild" || %client.favorites[0] $= "Tech") { - if ( %noSniperRifle ) { - if ( getFieldCount( %client.depIndex ) ) - %depList = %client.favorites[getField( %client.depIndex, 0 )]; + //Create - MELEE - List + if(%client.favorites[0] !$= "Purebuild") { + if ( getFieldCount( %client.meleeIndex ) ) { + %meleeList = %client.favorites[getField( %client.meleeIndex, 0 )]; + } else { - %depList = "EMPTY"; + %meleeList = "EMPTY"; %client.numFavs++; } - for ( %y = 0; $InvDep[%y] !$= ""; %y++ ) { - %DInv = $NameToInv[$InvDep[%y]]; - if ( ( $InvDep[%y] !$= %client.favorites[getField( %client.depIndex, 0 )]) && - %armor.max[%DInv] && !($InvBanList[%cmt, %DInv])) - %depList = %depList TAB $InvDep[%y]; + for ( %y = 0; $InvMelee[%y] !$= ""; %y++ ) { + %meleeInv = $NameToInv[$InvMelee[%y]]; + if ( ( $InvMelee[%y] !$= %client.favorites[getField( %client.meleeIndex, 0 )]) && %armor.max[%meleeInv] && !($InvBanList[%cmt, %meleeInv])) { + %useCode = CanUseWeapon(%client, %meleeInv.Image); + if(%useCode == 1) { + %meleeList = %meleeList TAB $InvMelee[%y]; + } + } } - } - } + } -//Create - GRENADE - List - for ( %y = 0; $InvGrenade[%y] !$= ""; %y++ ) - { - %notFound = true; - for(%i = 0; %i < getFieldCount( %client.grenadeIndex ); %i++) - { - %GInv = $NameToInv[$InvGrenade[%y]]; - if ( ( $InvGrenade[%y] $= %client.favorites[getField( %client.grenadeIndex, %i )] ) || !%armor.max[%GInv] ) - { - %notFound = false; - break; - } - } - if ( !($InvBanList[%cmt, %GInv]) ) - { - if ( %notFound && %grenadeList $= "" ) - %grenadeList = $InvGrenade[%y]; - else if ( %notFound ) - %grenadeList = %grenadeList TAB $InvGrenade[%y]; - } - } -// CheckNadePrereqs(%client, %grenadeList); + //Create - PACK - List + if ( getFieldCount( %client.packIndex ) ) { + %packList = %client.favorites[getField( %client.packIndex, 0 )]; + } + else { + %packList = "EMPTY"; + %client.numFavs++; + } + for ( %y = 0; $InvPack[%y] !$= ""; %y++ ) { + %PInv = $NameToInv[$InvPack[%y]]; + if ( ( $InvPack[%y] !$= %client.favorites[getField( %client.packIndex, 0 )]) && %armor.max[%PInv] && !($InvBanList[%cmt, %PInv])) { + %packList = %packList TAB $Invpack[%y]; + } + } -//Create - MINE - List - for ( %y = 0; $InvMine[%y] !$= "" ; %y++ ) - { - %notFound = true; - %MInv = $NameToInv[$InvMine[%y]]; - for ( %i = 0; %i < getFieldCount( %client.mineIndex ); %i++ ) - if ( ( $InvMine[%y] $= %client.favorites[getField( %client.mineIndex, %i )] ) || !%armor.max[%MInv] ) - { - %notFound = false; - break; - } + //Create - Construction - List + if(%client.favorites[0] $= "Purebuild" || %client.favorites[0] $= "Tech") { + if ( %noSniperRifle ) { + if ( getFieldCount( %client.depIndex ) ) { + %depList = %client.favorites[getField( %client.depIndex, 0 )]; + } + else { + %depList = "EMPTY"; + %client.numFavs++; + } + for ( %y = 0; $InvDep[%y] !$= ""; %y++ ) { + %DInv = $NameToInv[$InvDep[%y]]; + if ( ( $InvDep[%y] !$= %client.favorites[getField( %client.depIndex, 0 )]) && %armor.max[%DInv] && !($InvBanList[%cmt, %DInv])) { + %depList = %depList TAB $InvDep[%y]; + } + } + } + } - if ( !($InvBanList[%cmt, %MInv]) ) - { - if ( %notFound && %mineList $= "" ) - %mineList = $InvMine[%y]; - else if ( %notFound ) - %mineList = %mineList TAB $InvMine[%y]; - } - } + //Create - GRENADE - List + for ( %y = 0; $InvGrenade[%y] !$= ""; %y++ ) { + %notFound = true; + for(%i = 0; %i < getFieldCount( %client.grenadeIndex ); %i++) { + %GInv = $NameToInv[$InvGrenade[%y]]; + if ( ( $InvGrenade[%y] $= %client.favorites[getField( %client.grenadeIndex, %i )] ) || !%armor.max[%GInv] ) { + %notFound = false; + break; + } + } + if ( !($InvBanList[%cmt, %GInv]) ) { + if ( %notFound && %grenadeList $= "" ) { + %grenadeList = $InvGrenade[%y]; + } + else if ( %notFound ) { + %grenadeList = %grenadeList TAB $InvGrenade[%y]; + } + } + } -//Send - ARMOR - List - %client.numFavsCount++; - messageClient( %client, 'SetLineHud', "", %tag, 0, "Armor:", %armorList, armor, %client.numFavsCount ); - %lineCount = 1; + //Create - MINE - List + for ( %y = 0; $InvMine[%y] !$= "" ; %y++ ) { + %notFound = true; + %MInv = $NameToInv[$InvMine[%y]]; + for ( %i = 0; %i < getFieldCount( %client.mineIndex ); %i++ ) { + if ( ( $InvMine[%y] $= %client.favorites[getField( %client.mineIndex, %i )] ) || !%armor.max[%MInv] ) { + %notFound = false; + break; + } + } + if ( !($InvBanList[%cmt, %MInv]) ) { + if ( %notFound && %mineList $= "" ) { + %mineList = $InvMine[%y]; + } + else if ( %notFound ) { + %mineList = %mineList TAB $InvMine[%y]; + } + } + } -//Send - WEAPONS - List -// echo(%armor); - %toCount = %armor.MaxWeapons; - //if(%client.IsActivePerk("OverKill") == 1) { - // %toCount++; - //} - for ( %x = 0; %x < %toCount; %x++ ) - { - %client.numFavsCount++; - if ( %x < getFieldCount( %client.weaponIndex ) ) - { - %list = %client.favorites[getField( %client.weaponIndex,%x )]; - if ( %list $= Invalid ) - { - %client.favorites[%client.numFavs] = "INVALID"; - %client.weaponIndex = %client.weaponIndex TAB %client.numFavs; - } - } - else - { - %list = "EMPTY"; - %client.favorites[%client.numFavs] = "EMPTY"; - %client.weaponIndex = %client.weaponIndex TAB %client.numFavs; - %client.numFavs++; - } - if ( %list $= empty ) - %list = %list TAB %weaponList; - else - %list = %list TAB %weaponList TAB "EMPTY"; - messageClient( %client, 'SetLineHud', "", %tag, %x + %lineCount, "Weapon Slot " @ %x + 1 @ ": ", %list , weapon, %client.numFavsCount ); - } - %lineCount = %lineCount + %toCount; + //Send - ARMOR - List + %client.numFavsCount++; + messageClient( %client, 'SetLineHud', "", %tag, 0, "Armor:", %armorList, armor, %client.numFavsCount ); + %lineCount = 1; -//Send - PISTOL - List - //if(%client.IsActivePerk("OverKill") == 0) { - %client.numFavsCount++; - if ( getField( %pistolList, 0 ) !$= empty && %noSniperRifle ) - %pistolList = %pistolList TAB "EMPTY"; - %pistolText = %pistolList; - %pistolOverFlow = ""; - if ( strlen( %pistolList ) > 255 ) { - %pistolText = getSubStr( %pistolList, 0, 255 ); - %pistolOverFlow = getSubStr( %pistolList, 255, 512 ); - } - messageClient( %client, 'SetLineHud', "", %tag, %lineCount, "Pistol:", %pistolText, pistol, %client.numFavsCount, %pistolOverFlow ); - %lineCount++; - //} - //else { + //Send - WEAPONS - List + // echo(%armor); + %toCount = %armor.MaxWeapons; + //if(%client.IsActivePerk("OverKill") == 1) { + // %toCount++; + //} + for ( %x = 0; %x < %toCount; %x++ ) { + %client.numFavsCount++; + if ( %x < getFieldCount( %client.weaponIndex ) ) { + %list = %client.favorites[getField( %client.weaponIndex,%x )]; + if ( %list $= Invalid ) { + %client.favorites[%client.numFavs] = "INVALID"; + %client.weaponIndex = %client.weaponIndex TAB %client.numFavs; + } + } + else { + %list = "EMPTY"; + %client.favorites[%client.numFavs] = "EMPTY"; + %client.weaponIndex = %client.weaponIndex TAB %client.numFavs; + %client.numFavs++; + } + if ( %list $= empty ) { + %list = %list TAB %weaponList; + } + else { + %list = %list TAB %weaponList TAB "EMPTY"; + } + messageClient( %client, 'SetLineHud', "", %tag, %x + %lineCount, "Weapon Slot " @ %x + 1 @ ": ", %list, weapon, %client.numFavsCount ); + } + %lineCount = %lineCount + %toCount; - //} - if(%client.favorites[0] !$= "Purebuild") { - %client.numFavsCount++; - if ( getField( %meleeList, 0 ) !$= empty && %noSniperRifle ) - %meleeList = %meleeList TAB "EMPTY"; - %meleeText = %meleeList; - %meleeOverFlow = ""; - if ( strlen( %meleeList ) > 255 ) { - %meleeText = getSubStr( %meleeList, 0, 255 ); - %meleeOverFlow = getSubStr( %meleeList, 255, 512 ); - } - messageClient( %client, 'SetLineHud', "", %tag, %lineCount, "Melee:", %meleeText, melee, %client.numFavsCount, %meleeOverFlow ); - %lineCount++; - } + //Send - PISTOL - List + //if(%client.IsActivePerk("OverKill") == 0) { + %client.numFavsCount++; + if ( getField( %pistolList, 0 ) !$= empty && %noSniperRifle ) { + %pistolList = %pistolList TAB "EMPTY"; + } + %pistolText = %pistolList; + %pistolOverFlow = ""; + if ( strlen( %pistolList ) > 255 ) { + %pistolText = getSubStr( %pistolList, 0, 255 ); + %pistolOverFlow = getSubStr( %pistolList, 255, 512 ); + } + messageClient( %client, 'SetLineHud', "", %tag, %lineCount, "Sidearm: ", %pistolText, pistol, %client.numFavsCount, %pistolOverFlow ); + %lineCount++; + //} + //else { -//Send - PACK - List - %client.numFavsCount++; - if ( getField( %packList, 0 ) !$= empty && %noSniperRifle ) - %packList = %packList TAB "EMPTY"; - %packText = %packList; - %packOverFlow = ""; - if ( strlen( %packList ) > 255 ) - { - %packText = getSubStr( %packList, 0, 255 ); - %packOverFlow = getSubStr( %packList, 255, 512 ); - } - messageClient( %client, 'SetLineHud', "", %tag, %lineCount, "Pack:", %packText, pack, %client.numFavsCount, %packOverFlow ); - %lineCount++; + //} + if(%client.favorites[0] !$= "Purebuild") { + %client.numFavsCount++; + if ( getField( %meleeList, 0 ) !$= empty && %noSniperRifle ) { + %meleeList = %meleeList TAB "EMPTY"; + } + %meleeText = %meleeList; + %meleeOverFlow = ""; + if ( strlen( %meleeList ) > 255 ) { + %meleeText = getSubStr( %meleeList, 0, 255 ); + %meleeOverFlow = getSubStr( %meleeList, 255, 512 ); + } + messageClient( %client, 'SetLineHud', "", %tag, %lineCount, "Melee: ", %meleeText, melee, %client.numFavsCount, %meleeOverFlow ); + %lineCount++; + } -//Send - Construction - List - if(%client.favorites[0] $= "Purebuild" || %client.favorites[0] $= "Tech") { - %client.numFavsCount++; - if ( getField( %depList, 0 ) !$= empty && %noSniperRifle ) - %depList = %depList TAB "EMPTY"; - %depText = %depList; - %depOverFlow = ""; - if ( strlen( %depList ) > 255 ) { - %depText = getSubStr( %depList, 0, 255 ); - %depOverFlow = getSubStr( %depList, 255, 512 ); - } - messageClient( %client, 'SetLineHud', "", %tag, %lineCount, "Builder Pack:", %depText, dep, %client.numFavsCount, %depOverFlow ); - %lineCount++; - } + //Send - PACK - List + %client.numFavsCount++; + if ( getField( %packList, 0 ) !$= empty && %noSniperRifle ) { + %packList = %packList TAB "EMPTY"; + } + %packText = %packList; + %packOverFlow = ""; + if ( strlen( %packList ) > 255 ) { + %packText = getSubStr( %packList, 0, 255 ); + %packOverFlow = getSubStr( %packList, 255, 512 ); + } + messageClient( %client, 'SetLineHud', "", %tag, %lineCount, "Pack: ", %packText, pack, %client.numFavsCount, %packOverFlow ); + %lineCount++; - for( %x = 0; %x < %armor.maxGrenades; %x++ ) - { - %client.numFavsCount++; - if ( %x < getFieldCount( %client.grenadeIndex ) ) - { - %list = %client.favorites[getField( %client.grenadeIndex, %x )]; - if (%list $= Invalid) - { - %client.favorites[%client.numFavs] = "INVALID"; - %client.grenadeIndex = %client.grenadeIndex TAB %client.numFavs; - } - } - else - { - %list = "EMPTY"; - %client.favorites[%client.numFavs] = "EMPTY"; - %client.grenadeIndex = %client.grenadeIndex TAB %client.numFavs; - %client.numFavs++; - } + //Send - Construction - List + if(%client.favorites[0] $= "Purebuild" || %client.favorites[0] $= "Tech") { + %client.numFavsCount++; + if ( getField( %depList, 0 ) !$= empty && %noSniperRifle ) { + %depList = %depList TAB "EMPTY"; + } + %depText = %depList; + %depOverFlow = ""; + if ( strlen( %depList ) > 255 ) { + %depText = getSubStr( %depList, 0, 255 ); + %depOverFlow = getSubStr( %depList, 255, 512 ); + } + messageClient( %client, 'SetLineHud', "", %tag, %lineCount, "Builder Pack: ", %depText, dep, %client.numFavsCount, %depOverFlow ); + %lineCount++; + } - if ( %list $= empty ) - %list = %list TAB %grenadeList; - else - %list = %list TAB %grenadeList TAB "EMPTY"; + //Send - GRENADE - List + for( %x = 0; %x < %armor.maxGrenades; %x++ ) { + %client.numFavsCount++; + if ( %x < getFieldCount( %client.grenadeIndex ) ) { + %list = %client.favorites[getField( %client.grenadeIndex, %x )]; + if (%list $= Invalid) { + %client.favorites[%client.numFavs] = "INVALID"; + %client.grenadeIndex = %client.grenadeIndex TAB %client.numFavs; + } + } + else { + %list = "EMPTY"; + %client.favorites[%client.numFavs] = "EMPTY"; + %client.grenadeIndex = %client.grenadeIndex TAB %client.numFavs; + %client.numFavs++; + } - messageClient( %client, 'SetLineHud', "", %tag, %x + %lineCount, "Grenade:", %list, grenade, %client.numFavsCount ); - } - %lineCount = %lineCount + %armor.maxGrenades; + if ( %list $= empty ) { + %list = %list TAB %grenadeList; + } + else { + %list = %list TAB %grenadeList TAB "EMPTY"; + } + messageClient( %client, 'SetLineHud', "", %tag, %x + %lineCount, "Grenade: ", %list, grenade, %client.numFavsCount ); + } + %lineCount = %lineCount + %armor.maxGrenades; - for ( %x = 0; %x < %armor.maxMines; %x++ ) - { - %client.numFavsCount++; - if ( %x < getFieldCount( %client.mineIndex ) ) - { - %list = %client.favorites[getField( %client.mineIndex, %x )]; - if ( %list $= Invalid ) - { - %client.favorites[%client.numFavs] = "INVALID"; - %client.mineIndex = %client.mineIndex TAB %client.numFavs; - } - } - else - { - %list = "EMPTY"; - %client.favorites[%client.numFavs] = "EMPTY"; - %client.mineIndex = %client.mineIndex TAB %client.numFavs; - %client.numFavs++; - } + //Send - MINE - List + for ( %x = 0; %x < %armor.maxMines; %x++ ) { + %client.numFavsCount++; + if ( %x < getFieldCount( %client.mineIndex ) ) { + %list = %client.favorites[getField( %client.mineIndex, %x )]; + if ( %list $= Invalid ) { + %client.favorites[%client.numFavs] = "INVALID"; + %client.mineIndex = %client.mineIndex TAB %client.numFavs; + } + } + else { + %list = "EMPTY"; + %client.favorites[%client.numFavs] = "EMPTY"; + %client.mineIndex = %client.mineIndex TAB %client.numFavs; + %client.numFavs++; + } - if ( %list !$= Invalid ) - { - if ( %list $= empty ) - %list = %list TAB %mineList; - else if ( %mineList !$= "" ) - %list = %list TAB %mineList TAB "EMPTY"; - else - %list = %list TAB "EMPTY"; - } + if ( %list !$= Invalid ) { + if ( %list $= empty ) { + %list = %list TAB %mineList; + } + else if ( %mineList !$= "" ) { + %list = %list TAB %mineList TAB "EMPTY"; + } + else { + %list = %list TAB "EMPTY"; + } + } - messageClient( %client, 'SetLineHud', "", %tag, %x + %lineCount, "Mine:", %list, mine, %client.numFavsCount ); - } + messageClient( %client, 'SetLineHud', "", %tag, %x + %lineCount, "Mine: ", %list, mine, %client.numFavsCount ); + } - if ( %setLastNum ) - %client.lastNumFavs = %client.numFavs; + if ( %setLastNum ) { + %client.lastNumFavs = %client.numFavs; + } } //------------------------------------------------------------------------------ diff --git a/scripts/weapons.cs b/scripts/weapons.cs index f5ed61a..3dd9a28 100644 --- a/scripts/weapons.cs +++ b/scripts/weapons.cs @@ -384,13 +384,7 @@ function WeaponImage::onMount(%this,%obj,%slot) { return; } - if(!DoMedalCheck(%obj.client, %this.getName()) && !%obj.client.isHarb) { - BottomPrint(%obj.client, "You cannot use this weapon, Medal Required.", 3, 3); - %obj.throwweapon(1); - %obj.throwweapon(0); - } - - PerformWeaponRankCheck(%this, %obj, %slot); + PerformWeaponMountChecks(%this, %obj, %slot); PerformUpgradeCheck(%this.getName(), %obj); //messageClient(%obj.client, 'MsgWeaponMount', "", %this, %obj, %slot); diff --git a/scripts/weapons/Melee/BOV.cs b/scripts/weapons/Melee/BOV.cs index fb838ae..ce10609 100644 --- a/scripts/weapons/Melee/BOV.cs +++ b/scripts/weapons/Melee/BOV.cs @@ -72,7 +72,7 @@ datablock ShapeBaseImageData(BOVImage) { fireEnergy = 20; minEnergy = 30; - MedalRequire = 1; + MedalRequire = 11; stateName[0] = "Activate"; stateTransitionOnTimeout[0] = "ActivateReady"; diff --git a/scripts/weapons/Melee/Plasmasabre.cs b/scripts/weapons/Melee/Plasmasabre.cs index 70fda8c..2b4d0d0 100644 --- a/scripts/weapons/Melee/Plasmasabre.cs +++ b/scripts/weapons/Melee/Plasmasabre.cs @@ -84,7 +84,7 @@ datablock ShapeBaseImageData(PlasmasaberImage) { projectile = EnergyBolt; projectileType = EnergyProjectile; - MedalRequire = 1; + MedalRequire = 15; // State Data stateName[0] = "Activate"; diff --git a/scripts/weapons/Other/Flamethrower.cs b/scripts/weapons/Other/Flamethrower.cs index 02b549b..9dd03c6 100644 --- a/scripts/weapons/Other/Flamethrower.cs +++ b/scripts/weapons/Other/Flamethrower.cs @@ -186,7 +186,7 @@ datablock ShapeBaseImageData(flamerImage) { GunName = "A|V|X Flamethrower"; // - MedalRequire = 1; + MedalRequire = 10; projectile = FlamethrowerBolt; projectileType = LinearFlareProjectile; diff --git a/scripts/weapons/Other/IonLauncher.cs b/scripts/weapons/Other/IonLauncher.cs index d846ac7..4954896 100644 --- a/scripts/weapons/Other/IonLauncher.cs +++ b/scripts/weapons/Other/IonLauncher.cs @@ -53,7 +53,7 @@ datablock ShapeBaseImageData(IonLauncherImage) { GunName = "LUX-4 Ion Launcher"; // - MedalRequire = 1; + MedalRequire = 9; isSeeker = true; seekRadius = 1000; diff --git a/scripts/weapons/Other/IonRifle.cs b/scripts/weapons/Other/IonRifle.cs index 198867d..ca701fa 100644 --- a/scripts/weapons/Other/IonRifle.cs +++ b/scripts/weapons/Other/IonRifle.cs @@ -20,7 +20,7 @@ datablock ShapeBaseImageData(IonRifleImage) { projectileType = SniperProjectile; armThread = looksn; - MedalRequire = 1; + MedalRequire = 9; usesEnergy = true; minEnergy = 6; diff --git a/scripts/weapons/Other/MiniCollider.cs b/scripts/weapons/Other/MiniCollider.cs index 518cef3..cc52173 100644 --- a/scripts/weapons/Other/MiniCollider.cs +++ b/scripts/weapons/Other/MiniCollider.cs @@ -9,7 +9,7 @@ datablock ShapeBaseImageData(MiniColliderCannonImage) { emap = true; - MedalRequire = 1; + MedalRequire = 15; HasChallenges = 1; ChallengeCt = 8; diff --git a/scripts/weapons/Other/NLS22AcidSniper.cs b/scripts/weapons/Other/NLS22AcidSniper.cs index df2010b..4ec792f 100644 --- a/scripts/weapons/Other/NLS22AcidSniper.cs +++ b/scripts/weapons/Other/NLS22AcidSniper.cs @@ -1,8 +1,8 @@ -datablock TracerProjectileData(M1Bullet) { +datablock TracerProjectileData(NLS22AcidPulse) { doDynamicClientHits = true; directDamage = 0.65; - directDamageType = $DamageType::M1; + directDamageType = $DamageType::AcidSniper; explosion = "ChaingunExplosion"; splash = ChaingunSplash; HeadMultiplier = 1.5; @@ -67,7 +67,7 @@ datablock ShapeBaseImageData(NLS22AcidSniperImage) { mass = 10; item = NLS22AcidSniper; ammo = NLS22AcidSniperAmmo; - projectile = M1Bullet; + projectile = NLS22AcidPulse; projectileType = TracerProjectile; emap = true; @@ -95,7 +95,8 @@ datablock ShapeBaseImageData(NLS22AcidSniperImage) { GunName = "NLS-22 Acid Sniper Rifle"; // - RankRequire = $TWM2::RankRequire["M1"]; + ChallengeRequire = "ThroughTheFlare"; + hideExistence = true; casing = ShellDebris; shellExitDir = "1.0 0.3 1.0"; @@ -207,7 +208,7 @@ function NLS22AcidSniperImage::onUnmount(%this,%obj,%slot) { %obj.unmountImage(7); } -function M1SniperRifleImage::onFire(%data, %obj, %slot) { +function NLS22AcidSniperImage::onFire(%data, %obj, %slot) { if(!$TWM2::AllowSnipers) { bottomPrint(%obj.client, "The host has disabled sniper weapons.", 2, 2); %obj.throwweapon(1); diff --git a/scripts/weapons/Other/NapalmLauncher.cs b/scripts/weapons/Other/NapalmLauncher.cs index 947e75a..73ec5c1 100644 --- a/scripts/weapons/Other/NapalmLauncher.cs +++ b/scripts/weapons/Other/NapalmLauncher.cs @@ -28,7 +28,7 @@ datablock ShapeBaseImageData(NapalmImage) { projectileType = LinearProjectile; RankRequire = $TWM2::RankRequire["NapalmLauncher"]; - MedalRequire = 1; + MedalRequire = 27; //ClipStuff ClipName = "NapalmClip"; diff --git a/scripts/weapons/Other/ShadowRifle.cs b/scripts/weapons/Other/ShadowRifle.cs index 9a04b97..dd9d7c5 100644 --- a/scripts/weapons/Other/ShadowRifle.cs +++ b/scripts/weapons/Other/ShadowRifle.cs @@ -70,7 +70,7 @@ datablock ShapeBaseImageData(ShadowRifleImage) { projectile = ShadowRifleBolt; projectileType = LinearFlareProjectile; - MedalRequire = 1; + MedalRequire = 13; usesEnergy = true; minEnergy = 6;