diff --git a/scripts/TWM2/ChatCommands/SuperAdmin.cs b/scripts/TWM2/ChatCommands/SuperAdmin.cs index 8ea782a..553dfa6 100644 --- a/scripts/TWM2/ChatCommands/SuperAdmin.cs +++ b/scripts/TWM2/ChatCommands/SuperAdmin.cs @@ -275,89 +275,89 @@ function parseSuperAdminCommands(%sender, %command, %args) { } %cAmt = 0; - %sw = getWord(%args,1); + %sw = strlwr(getWord(%args,1)); switch$(%sw) { - case "UAV": + case "uav": %target.AwardKillstreak(1, -1); messageClient(%sender, 'MsgClient', "\c2You gave "@%target.namebase@" a UAV Recon."); messageClient(%target, 'MsgClient', "\c2"@%sender.namebase@" gave you a UAV Beacon."); - case "Airstrike": + case "airstrike": %target.AwardKillstreak(2, -1); messageClient(%sender, 'MsgClient', "\c2You gave "@%target.namebase@" an airstrike beacon."); messageClient(%target, 'MsgClient', "\c2"@%sender.namebase@" gave you an airstrike."); - case "UAMS": + case "uams": %target.AwardKillstreak(3, -1); messageClient(%sender, 'MsgClient', "\c2You gave "@%target.namebase@" a UAMS beacon."); messageClient(%target, 'MsgClient', "\c2"@%sender.namebase@" gave you a UAMS Strike."); - case "UnlimUAMS": + case "unlimuams": messageClient(%sender, 'MsgClient', "\c2You gave "@%target.namebase@" a fully loaded UAMS."); messageClient(%target, 'MsgClient', "\c2"@%sender.namebase@" gave you a fully loaded UAMS."); CreateMissileSat(%target, 1); - case "Helicopter": + case "helicopter": %target.AwardKillstreak(4, -1); messageClient(%sender, 'MsgClient', "\c2You gave "@%target.namebase@" a Helicopter beacon."); messageClient(%target, 'MsgClient', "\c2"@%sender.namebase@" gave you a Helicopter beacon."); - case "HeliGunner": + case "heligunner": MakeTheHeli(%target, 1); messageClient(%sender, 'MsgClient', "\c2You made "@%target.namebase@" a chopper gunner."); messageClient(%target, 'MsgClient', "\c2"@%sender.namebase@" has granted you Helicopter Gunner Access."); - case "Harbingers": + case "harbingers": %target.AwardKillstreak(9, -1); messageClient(%sender, 'MsgClient', "\c2You gave "@%target.namebase@" a Harbinger's Wrath beacon."); messageClient(%target, 'MsgClient', "\c2"@%sender.namebase@" gave you a Harbinger's Wrath beacon."); - case "UnlimHarbin": + case "unlimharbin": messageClient(%sender, 'MsgClient', "\c2You gave "@%target.namebase@" gunship support."); messageClient(%target, 'MsgClient', "\c2"@%sender.namebase@" gave you gunship support."); startHarbingersWrath(%target, 1, 1); - case "UnlimAC130": + case "unlimac130": messageClient(%sender, 'MsgClient', "\c2You gave "@%target.namebase@" AC-130 gunship support."); messageClient(%target, 'MsgClient', "\c2"@%sender.namebase@" gave you AC-130 gunship support."); startAC130(%target, 1, 1); - case "GunHeli": + case "gunheli": %target.AwardKillstreak(7, -1); messageClient(%sender, 'MsgClient', "\c2You gave "@%target.namebase@" a Gunship Helicopter beacon."); messageClient(%target, 'MsgClient', "\c2"@%sender.namebase@" gave you a Gunship Helicopter beacon."); - case "Apache": + case "apache": %target.AwardKillstreak(10, -1); messageClient(%sender, 'MsgClient', "\c2You gave "@%target.namebase@" an Apache Gunner beacon."); messageClient(%target, 'MsgClient', "\c2"@%sender.namebase@" gave you an Apache Gunner beacon."); - case "Artillery": + case "artillery": %target.AwardKillstreak(12, -1); messageClient(%sender, 'MsgClient', "\c2You gave "@%target.namebase@" a Centaur Artillery beacon."); messageClient(%target, 'MsgClient', "\c2"@%sender.namebase@" gave you a Centaur Artillery beacon."); - case "Nuke": + case "nuke": %target.AwardKillstreak(14, -1); messageClient(%sender, 'MsgClient', "\c2You gave "@%target.namebase@" a Nuclear Strike beacon."); messageClient(%target, 'MsgClient', "\c2"@%sender.namebase@" gave you a Nuclear Strike beacon."); - case "ZBomb": + case "zbomb": %target.AwardKillstreak(15, -1); messageClient(%sender, 'MsgClient', "\c2You gave "@%target.namebase@" a Zombie-Bomb beacon."); messageClient(%target, 'MsgClient', "\c2"@%sender.namebase@" gave you a Zombie-Bomb beacon."); - case "Harrier": + case "harrier": %target.AwardKillstreak(5, -1); messageClient(%sender, 'MsgClient', "\c2You gave "@%target.namebase@" a Harrier Airstrike beacon."); messageClient(%target, 'MsgClient', "\c2"@%sender.namebase@" gave you a Harrier Airstrike beacon."); - case "Stealth": + case "stealth": %target.AwardKillstreak(8, -1); messageClient(%sender, 'MsgClient', "\c2You gave "@%target.namebase@" a Stealth Airstrike beacon."); messageClient(%target, 'MsgClient', "\c2"@%sender.namebase@" gave you a Stealth Airstrike beacon."); - case "AC130": + case "ac130": %target.AwardKillstreak(11, -1); messageClient(%sender, 'MsgClient', "\c2You gave "@%target.namebase@" an AC-130 beacon."); messageClient(%target, 'MsgClient', "\c2"@%sender.namebase@" gave you an AC-130 beacon."); - case "SatNuke": + case "satnuke": %target.AwardKillstreak(6, -1); messageClient(%sender, 'MsgClient', "\c2You gave "@%target.namebase@" a Orbital Laser Strike beacon."); messageClient(%target, 'MsgClient', "\c2"@%sender.namebase@" gave you a Orbital Laser Strike beacon."); - case "Fission": + case "fission": %target.AwardKillstreak(16, -1); messageClient(%sender, 'MsgClient', "\c2You gave "@%target.namebase@" a Fission Bomb :D."); messageClient(%target, 'MsgClient', "\c2"@%sender.namebase@" gave you a Fission Bomb :D."); - case "EMP": + case "emp": %target.AwardKillstreak(13, -1); messageClient(%sender, 'MsgClient', "\c2You gave "@%target.namebase@" a Mass EMP Beacon."); messageClient(%target, 'MsgClient', "\c2"@%sender.namebase@" gave you a Mass EMP Beacon."); - case "Napalm": + case "napalm": %target.AwardKillstreak(17, -1); messageClient(%sender, 'MsgClient', "\c2You gave "@%target.namebase@" a Napalm Airstrike beacon."); messageClient(%target, 'MsgClient', "\c2"@%sender.namebase@" gave you a Napalm Airstrike beacon."); diff --git a/scripts/TWM2/CustomCamera.cs b/scripts/TWM2/CustomCamera.cs index 6731ec3..50b09a9 100644 --- a/scripts/TWM2/CustomCamera.cs +++ b/scripts/TWM2/CustomCamera.cs @@ -54,7 +54,7 @@ function TWM2ControlCamera::onTrigger(%data,%obj,%trigger,%state) { //press JET if (%trigger == 3) { //Can we Call in this airstrike? - if(%client.ksListInstance.find("Airstrike") == -1 && !%client.UnlimitedAS) { + if(%client.streakCount[2] <= 0 && !%client.UnlimitedAS) { if(isObject(%client.player)) { %obj.schedule(1000, "delete"); %client.setControlObject(%client.player); @@ -79,18 +79,19 @@ function TWM2ControlCamera::onTrigger(%data,%obj,%trigger,%state) { %obj.schedule(1000, "delete"); %client.setControlObject(%client.player); if(!%client.UnlimitedAS) { - %newCt = getField(%client.ksListInstance.find("Airstrike"), 1) - 1; - if(%newCt == 0) { - %client.ksListInstance.removeElement(getField(%client.ksListInstance.find("Airstrike"), 1)); - } - else { - %client.ksListInstance.set(getField(%client.ksListInstance.find("Airstrike"), 1), "Airstrike" SPC %newCt); - } + %client.streakCount[2]--; GainExperience(%client, 35, "Airstrike called in "); } bottomPrint(%client, "Coordinates Confirmed, Calling In Airstrike", 5, 2); messageTeam(%client.team, 'MsgAirstrike', "\c5TWM2: Airstrike Called In From "@%client.namebase@""); Airstrike(%client, %position, %direction); + //Post-Fire Checks + if(getWordCount(%client.streakList()) == 0 && !%client.UnlimitedAS) { + //No more streaks in the list... + %obj.throwWeapon(1); + %obj.throwWeapon(0); + %obj.setInventory(KillstreakBeacon, 0, true); + } } else { bottomPrint(%client, "Player Object Required", 5, 2); @@ -101,7 +102,7 @@ function TWM2ControlCamera::onTrigger(%data,%obj,%trigger,%state) { //press JET if (%trigger == 3) { //Can we Call in this airstrike? - if(%client.ksListInstance.find("Harrier") == -1) { + if(%client.streakCount[5] <= 0) { if(isObject(%client.player)) { %obj.schedule(1000, "delete"); %client.setControlObject(%client.player); @@ -123,17 +124,18 @@ function TWM2ControlCamera::onTrigger(%data,%obj,%trigger,%state) { if(isObject(%client.player)) { %obj.schedule(1000, "delete"); %client.setControlObject(%client.player); - %newCt = getField(%client.ksListInstance.find("Harrier"), 1) - 1; - if(%newCt == 0) { - %client.ksListInstance.removeElement(getField(%client.ksListInstance.find("Harrier"), 1)); - } - else { - %client.ksListInstance.set(getField(%client.ksListInstance.find("Harrier"), 1), "Harrier" SPC %newCt); - } + %client.streakCount[5]--; GainExperience(%client, 150, "Harrier Airstrike called in "); messageTeam(%client.team, 'MsgAirstrike', "\c5TWM2: "@%client.namebase@"'s Harrier Airstrike is Approaching."); bottomPrint(%client, "Coordinates Confirmed, Calling In Harriers", 5, 2); HarrierAirstrike(%client, %position, %direction); + //Post-Fire Checks + if(getWordCount(%client.streakList()) == 0) { + //No more streaks in the list... + %obj.throwWeapon(1); + %obj.throwWeapon(0); + %obj.setInventory(KillstreakBeacon, 0, true); + } } else { bottomPrint(%client, "Player Object Required", 5, 2); @@ -144,7 +146,7 @@ function TWM2ControlCamera::onTrigger(%data,%obj,%trigger,%state) { //press JET if (%trigger == 3) { //Can we Call in this airstrike? - if(%client.ksListInstance.find("Napalm") == -1) { + if(%client.streakCount[17] <= 0) { if(isObject(%client.player)) { %obj.schedule(1000, "delete"); %client.setControlObject(%client.player); @@ -166,17 +168,18 @@ function TWM2ControlCamera::onTrigger(%data,%obj,%trigger,%state) { if(isObject(%client.player)) { %obj.schedule(1000, "delete"); %client.setControlObject(%client.player); - %newCt = getField(%client.ksListInstance.find("Napalm"), 1) - 1; - if(%newCt == 0) { - %client.ksListInstance.removeElement(getField(%client.ksListInstance.find("Napalm"), 1)); - } - else { - %client.ksListInstance.set(getField(%client.ksListInstance.find("Napalm"), 1), "Napalm" SPC %newCt); - } + %client.streakCount[17]--; GainExperience(%client, 350, "Napalm Airstrike called in "); messageTeam(%client.team, 'MsgAirstrike', "\c5TWM2: "@%client.namebase@"'s Napalm Airstrike is coming in hot."); bottomPrint(%client, "Coordinates Confirmed, Calling In Strike Fighters", 5, 2); NapalmHarrierAirstrike(%client, %position, %direction); + //Post-Fire Checks + if(getWordCount(%client.streakList()) == 0) { + //No more streaks in the list... + %obj.throwWeapon(1); + %obj.throwWeapon(0); + %obj.setInventory(KillstreakBeacon, 0, true); + } } else { bottomPrint(%client, "Player Object Required", 5, 2); @@ -187,7 +190,7 @@ function TWM2ControlCamera::onTrigger(%data,%obj,%trigger,%state) { //press JET if (%trigger == 3) { //Can we Call in this airstrike? - if(%client.ksListInstance.find("OLS") == -1) { + if(%client.streakCount[6] <= 0) { if(isObject(%client.player)) { %obj.schedule(1000, "delete"); %client.setControlObject(%client.player); @@ -201,17 +204,18 @@ function TWM2ControlCamera::onTrigger(%data,%obj,%trigger,%state) { if(isObject(%client.player)) { %obj.schedule(1000, "delete"); %client.setControlObject(%client.player); - %newCt = getField(%client.ksListInstance.find("OLS"), 1) - 1; - if(%newCt == 0) { - %client.ksListInstance.removeElement(getField(%client.ksListInstance.find("OLS"), 1)); - } - else { - %client.ksListInstance.set(getField(%client.ksListInstance.find("OLS"), 1), "OLS" SPC %newCt); - } + %client.streakCount[6]--; GainExperience(%client, 350, "Orbital Laser Strike Called In "); messageTeam(%client.team, 'MsgAirstrike', "\c5TWM2: "@%client.namebase@"'s Laser Strike is Incoming."); bottomPrint(%client, "Coordinates Confirmed, Spinning Laser Cannon", 5, 2); OrbitalLaserStrike(%client, %position); + //Post-Fire Checks + if(getWordCount(%client.streakList()) == 0) { + //No more streaks in the list... + %obj.throwWeapon(1); + %obj.throwWeapon(0); + %obj.setInventory(KillstreakBeacon, 0, true); + } } else { bottomPrint(%client, "Player Object Required", 5, 2); @@ -222,7 +226,7 @@ function TWM2ControlCamera::onTrigger(%data,%obj,%trigger,%state) { //press JET if (%trigger == 3) { //Can we Call in this airstrike? - if(%client.ksListInstance.find("Stealth") == -1) { + if(%client.streakCount[8] <= 0) { if(isObject(%client.player)) { %obj.schedule(1000, "delete"); %client.setControlObject(%client.player); @@ -244,16 +248,17 @@ function TWM2ControlCamera::onTrigger(%data,%obj,%trigger,%state) { if(isObject(%client.player)) { %obj.schedule(1000, "delete"); %client.setControlObject(%client.player); - %newCt = getField(%client.ksListInstance.find("Stealth"), 1) - 1; - if(%newCt == 0) { - %client.ksListInstance.removeElement(getField(%client.ksListInstance.find("Stealth"), 1)); - } - else { - %client.ksListInstance.set(getField(%client.ksListInstance.find("Stealth"), 1), "Stealth" SPC %newCt); - } + %client.streakCount[8]--; GainExperience(%client, 150, "Stealth Bomber Airstrike called in "); bottomPrint(%client, "Coordinates Confirmed, Calling In Stealth Bomber", 5, 2); StealthAirstrike(%client, %position, %direction); + //Post-Fire Checks + if(getWordCount(%client.streakList()) == 0) { + //No more streaks in the list... + %obj.throwWeapon(1); + %obj.throwWeapon(0); + %obj.setInventory(KillstreakBeacon, 0, true); + } } else { bottomPrint(%client, "Player Object Required", 5, 2); @@ -264,7 +269,7 @@ function TWM2ControlCamera::onTrigger(%data,%obj,%trigger,%state) { //press JET if (%trigger == 3) { //Can we Call in this airstrike? - if(%client.ksListInstance.find("Artillery") == -1) { + if(%client.streakCount[12] <= 0) { if(isObject(%client.player)) { %obj.schedule(1000, "delete"); %client.setControlObject(%client.player); @@ -278,17 +283,18 @@ function TWM2ControlCamera::onTrigger(%data,%obj,%trigger,%state) { if(isObject(%client.player)) { %obj.schedule(1000, "delete"); %client.setControlObject(%client.player); - %newCt = getField(%client.ksListInstance.find("Artillery"), 1) - 1; - if(%newCt == 0) { - %client.ksListInstance.removeElement(getField(%client.ksListInstance.find("Artillery"), 1)); - } - else { - %client.ksListInstance.set(getField(%client.ksListInstance.find("Artillery"), 1), "Artillery" SPC %newCt); - } + %client.streakCount[12]--; GainExperience(%client, 250, "Artillery called in "); bottomPrint(%client, "Coordinates Confirmed, Calling In Artillery", 5, 2); messageTeam(%client.team, 'MsgAirstrike', "\c5TWM2: Artillery Called In From "@%client.namebase@""); Artillery(%client, %position); + //Post-Fire Checks + if(getWordCount(%client.streakList()) == 0) { + //No more streaks in the list... + %obj.throwWeapon(1); + %obj.throwWeapon(0); + %obj.setInventory(KillstreakBeacon, 0, true); + } } else { bottomPrint(%client, "Player Object Required", 5, 2); @@ -299,7 +305,7 @@ function TWM2ControlCamera::onTrigger(%data,%obj,%trigger,%state) { //press JET if (%trigger == 3) { //Can we Call in this airstrike? - if(%client.ksListInstance.find("NukeStrike") == -1) { + if(%client.streakCount[14] <= 0) { if(isObject(%client.player)) { %obj.schedule(1000, "delete"); %client.setControlObject(%client.player); @@ -313,17 +319,18 @@ function TWM2ControlCamera::onTrigger(%data,%obj,%trigger,%state) { if(isObject(%client.player)) { %obj.schedule(1000, "delete"); %client.setControlObject(%client.player); - %newCt = getField(%client.ksListInstance.find("NukeStrike"), 1) - 1; - if(%newCt == 0) { - %client.ksListInstance.removeElement(getField(%client.ksListInstance.find("NukeStrike"), 1)); - } - else { - %client.ksListInstance.set(getField(%client.ksListInstance.find("NukeStrike"), 1), "NukeStrike" SPC %newCt); - } + %client.streakCount[14]--; GainExperience(%client, 500, "Nuclear Missile called in "); bottomPrint(%client, "Coordinates Confirmed, Launching Missile", 5, 2); messageAll('msgDanger', "\c5TWM2 ALERT: "@%client.namebase@" has activated a nuclear missile!!! ~wfx/misc/red_alert.wav"); Nuke(%client, %position); + //Post-Fire Checks + if(getWordCount(%client.streakList()) == 0) { + //No more streaks in the list... + %obj.throwWeapon(1); + %obj.throwWeapon(0); + %obj.setInventory(KillstreakBeacon, 0, true); + } } else { bottomPrint(%client, "Player Object Required", 5, 2); diff --git a/scripts/TWM2/LoadMod.cs b/scripts/TWM2/LoadMod.cs index 600e0a2..0877332 100644 --- a/scripts/TWM2/LoadMod.cs +++ b/scripts/TWM2/LoadMod.cs @@ -155,3 +155,6 @@ Error("********************************************"); Error("************* EXECUTE COMPLETE *************"); Error("********************************************"); Error("********************************************"); + +//POST LOAD TASKS..... +//OrderStreaks(); diff --git a/scripts/TWM2/Systems/Killstreak.cs b/scripts/TWM2/Systems/Killstreak.cs index 5580cb9..0b81e57 100644 --- a/scripts/TWM2/Systems/Killstreak.cs +++ b/scripts/TWM2/Systems/Killstreak.cs @@ -18,6 +18,31 @@ $Killstreak[15] = "Z-Bomb\t-1\t"@$Killstreak::Kills["ZBomb", 1]@"\tWipe out all $Killstreak[16] = "Fission Bomb\t"@$Killstreak::Kills["Fission", 0]@"\t-1\t(Matches) End the game with an explosive bang."; $Killstreak[17] = "Napalm Airstrike\t"@$Killstreak::Kills["Napalm", 0]@"\t"@$Killstreak::Kills["Napalm", 1]@"\tQuick destructive airstrike with remaining fire."; +//Phantom: V3.9: Order the streaks based on killcounts... +function OrderStreaks() { + echo("Ordering Killstreak List..."); + for(%i = 1; %i <= $KillstreakCount; %i++) { + %cur = getField($Killstreak[%i], 1); + + %temp = $Killstreak[%i]; + $OrderedKillstreak[%i] = $Killstreak[%i]; + + for(%x = 1; %x <= %i; %x++) { + %mine = getField($Killstreak[%x], 1); + //This streak has a lower count, sift it down + if(%mine < %cur) { + $OrderedKillstreak[%i] = $Killstreak[%x]; + $OrderedKillstreak_CONVINDX[%i] = %x; + $OrderedKillstreak[%x] = %temp; + $OrderedKillstreak_CONVINDX[%x] = %i; + } + } + } + echo("Complete..."); + for(%r = 1; %r <= $KillstreakCount; %r++) { + echo(""@%r@": "@$OrderedKillstreak[%r]@" => "@$OrderedKillstreak_CONVINDX[%r]); + } +} function GetStreakDescrip(%val) { %desc = getField($Killstreak[%val], 3); @@ -301,7 +326,7 @@ function GiveTWM2Weapons(%client) { if(%client.HasFullTeamRespawn) { %client.player.setInventory(FullTeamRespawnCaller, 1, true); } - if(%client.ksListInstance.count() > 0) { + if(getWordCount(%client.streakList()) > 0) { %client.player.setInventory(KillstreakBeacon, 1, true); } if(!%client.isconfiscated) { @@ -311,6 +336,21 @@ function GiveTWM2Weapons(%client) { } } +function GameConnection::streakList(%client) { + %total = ""; + for(%i = 1; %i <= $KillstreakCount; %i++) { + if(%client.streakCount[%i] > 0) { + if(%total $= "") { + %total = %i; + } + else { + %total = %total @ " " @ %i; + } + } + } + return %total; +} + function GameConnection::AwardKillstreak(%client, %streakVal, %plz) { if(%plz $= "") { %plz = 1; @@ -319,117 +359,46 @@ function GameConnection::AwardKillstreak(%client, %streakVal, %plz) { if($Killstreak::Setting == 4) { return; } - if(!%client.isActiveStreak(%streakVal) && ($Killstreak::Setting != 2) && !$TWM::PlayingHelljump) { + if(%plz != -1 && (!%client.isActiveStreak(%streakVal) && ($Killstreak::Setting != 2) && !$TWM::PlayingHelljump)) { return; } - if(!isSet(%client.ksListInstance)) { - %client.ksListInstance = initList(); - } - %cAmt = 0; switch(%streakVal) { case 1: MessageClient(%client, 'MsgZKill', "\c5TWM2: UAV Recon at Your Disposal."); - if(%client.ksListInstance.find("UAV") != -1) { - %cAmt = getWord(getField(%client.ksListInstance.find("UAV"), 0), 1); - } - %client.ksListInstance.advancedAdd("UAV", "UAV "@%cAmt+1); case 2: MessageClient(%client, 'MsgZKill', "\c5TWM2: Airstrike Standing By."); - if(%client.ksListInstance.find("Airstrike") != -1) { - %cAmt = getWord(getField(%client.ksListInstance.find("Airstrike"), 0), 1); - } - %client.ksListInstance.advancedAdd("Airstrike", "Airstrike "@%cAmt+1); case 3: MessageClient(%client, 'MsgZKill', "\c5TWM2: Guided Missile Strike Standing By."); - if(%client.ksListInstance.find("GM") != -1) { - %cAmt = getWord(getField(%client.ksListInstance.find("GM"), 0), 1); - } - %client.ksListInstance.advancedAdd("GM", "GM "@%cAmt+1); case 4: MessageClient(%client, 'MsgZKill', "\c5TWM2: Helicopter at your disposal."); - if(%client.ksListInstance.find("AIHeli") != -1) { - %cAmt = getWord(getField(%client.ksListInstance.find("AIHeli"), 0), 1); - } - %client.ksListInstance.advancedAdd("AIHeli", "AIHeli "@%cAmt+1); case 5: MessageClient(%client, 'MsgZKill', "\c5TWM2: Plasma Harrier Strike at your disposal."); - if(%client.ksListInstance.find("Harrier") != -1) { - %cAmt = getWord(getField(%client.ksListInstance.find("Harrier"), 0), 1); - } - %client.ksListInstance.advancedAdd("Harrier", "Harrier "@%cAmt+1); case 6: MessageClient(%client, 'MsgZKill', "\c5TWM2: Satellite Strike at your disposal."); - if(%client.ksListInstance.find("OLS") != -1) { - %cAmt = getWord(getField(%client.ksListInstance.find("OLS"), 0), 1); - } - %client.ksListInstance.advancedAdd("OLS", "OLS "@%cAmt+1); case 7: MessageClient(%client, 'MsgZKill', "\c5TWM2: Gunship Helicopter at your disposal."); - if(%client.ksListInstance.find("AIGunHeli") != -1) { - %cAmt = getWord(getField(%client.ksListInstance.find("AIGunHeli"), 0), 1); - } - %client.ksListInstance.advancedAdd("AIGunHeli", "AIGunHeli "@%cAmt+1); case 8: MessageClient(%client, 'MsgZKill', "\c5TWM2: Stealth Bomber at your disposal."); - if(%client.ksListInstance.find("Stealth") != -1) { - %cAmt = getWord(getField(%client.ksListInstance.find("Stealth"), 0), 1); - } - %client.ksListInstance.advancedAdd("Stealth", "Stealth "@%cAmt+1); case 9: MessageClient(%client, 'MsgZKill', "\c5TWM2: Harbinger's Wrath Standing By."); - if(%client.ksListInstance.find("HarbWrath") != -1) { - %cAmt = getWord(getField(%client.ksListInstance.find("HarbWrath"), 0), 1); - } - %client.ksListInstance.advancedAdd("HarbWrath", "HarbWrath "@%cAmt+1); case 10: MessageClient(%client, 'MsgZKill', "\c5TWM2: Apache Gunner Standing By."); - if(%client.ksListInstance.find("Apache") != -1) { - %cAmt = getWord(getField(%client.ksListInstance.find("Apache"), 0), 1); - } - %client.ksListInstance.advancedAdd("Apache", "Apache "@%cAmt+1); case 11: MessageClient(%client, 'MsgZKill', "\c5TWM2: AC-130 Gunner Standing By."); - if(%client.ksListInstance.find("AC130") != -1) { - %cAmt = getWord(getField(%client.ksListInstance.find("AC130"), 0), 1); - } - %client.ksListInstance.advancedAdd("AC130", "AC130 "@%cAmt+1); case 12: MessageClient(%client, 'MsgZKill', "\c5TWM2: Centaur Bombardment Standing By."); - if(%client.ksListInstance.find("Artillery") != -1) { - %cAmt = getWord(getField(%client.ksListInstance.find("Artillery"), 0), 1); - } - %client.ksListInstance.advancedAdd("Artillery", "Artillery "@%cAmt+1); case 13: MessageClient(%client, 'MsgZKill', "\c5TWM2: Mass EMP Standing By."); - if(%client.ksListInstance.find("EMP") != -1) { - %cAmt = getWord(getField(%client.ksListInstance.find("EMP"), 0), 1); - } - %client.ksListInstance.advancedAdd("EMP", "EMP "@%cAmt+1); case 14: MessageClient(%client, 'MsgZKill', "\c5TWM2: Nuclear Strike Standing By."); - if(%client.ksListInstance.find("NukeStrike") != -1) { - %cAmt = getWord(getField(%client.ksListInstance.find("NukeStrike"), 0), 1); - } - %client.ksListInstance.advancedAdd("NukeStrike", "NukeStrike "@%cAmt+1); case 15: MessageClient(%client, 'MsgZKill', "\c5TWM2: Zombie Bomb Standing By."); - if(%client.ksListInstance.find("ZBomb") != -1) { - %cAmt = getWord(getField(%client.ksListInstance.find("ZBomb"), 0), 1); - } - %client.ksListInstance.advancedAdd("ZBomb", "ZBomb "@%cAmt+1); case 16: MessageClient(%client, 'MsgZKill', "\c5TWM2: Fission Bomb Ready... Obliterate everyone!!!"); - if(%client.ksListInstance.find("FBomb") != -1) { - %cAmt = getWord(getField(%client.ksListInstance.find("FBomb"), 0), 1); - } - %client.ksListInstance.advancedAdd("FBomb", "FBomb "@%cAmt+1); case 17: MessageClient(%client, 'MsgZKill', "\c5TWM2: Napalm Airstrike at your disposal."); - if(%client.ksListInstance.find("Napalm") != -1) { - %cAmt = getWord(getField(%client.ksListInstance.find("Napalm"), 0), 1); - } - %client.ksListInstance.advancedAdd("Napalm", "Napalm "@%cAmt+1); } + %client.streakCount[%streakVal]++; if(%plz == 0) { if(%client.IsHighestPLStreak(%streakVal)) { %client.player.killsinarow = 0; //reset for moar killstreaks! diff --git a/scripts/TWM2/Systems/List.cs b/scripts/TWM2/Systems/List.cs index ce72eda..3c324cf 100644 --- a/scripts/TWM2/Systems/List.cs +++ b/scripts/TWM2/Systems/List.cs @@ -12,10 +12,13 @@ function initList() { } function ListInstance::advancedAdd(%this, %elementTxt, %newValue) { + echo("AdvancedAdd("@%this@", "@%elementTxt@", "@%newValue@")"); if(%this.find(%elementTxt) == -1) { + echo("AdvancedAdd: Add New"); %this.addElement(%newValue); } else { + echo("AdvancedAdd: Replace Old"); %indx = getField(%this.find(%elementTxt), 1); %this.set(%indx, %newValue); } @@ -26,6 +29,7 @@ function ListInstance::set(%this, %index, %new) { } function ListInstance::addElement(%this, %element) { + echo("Add "@%element@" => "@%this.numberOfElements); %this.element[%this.numberOfElements] = %element; %this.numberOfElements++; } @@ -35,7 +39,8 @@ function ListInstance::removeElement(%this, %index) { error("ListInstance::removeElements("@%index@"): Specified index is out of list bounds."); return; } - %this.element[%this.numberOfElements] = ""; + echo(%this@".removeElement("@%index@"): Strip "@%this.element[%index]); + %this.element[%index] = ""; %this.compactList(); } @@ -57,12 +62,19 @@ function ListInstance::find(%this, %key) { } function ListInstance::compactList(%this) { + echo("Compact "@%this@", "@%this.count()); for(%i = %this.count(); %i >= 0; %i--) { + echo("Test "@%i@": "@%this.element[%i]); if(%this.element[%i] $= "") { + echo("Remove Element "@%i); //Strip item, move others forward for(%x = %i; %x < %this.count(); %x++) { + echo(%x@" Is Now: "@%this.element[%x+1]); %this.element[%x] = %this.element[%x+1]; } + //Remove the last item.... + %this.element[%this.numberOfElements] = ""; + echo("Subduct "@%this.numberOfElements); %this.numberOfElements--; } } diff --git a/scripts/weapons/Equipment/SWBeaconer.cs b/scripts/weapons/Equipment/SWBeaconer.cs index 467d232..e2c56a9 100644 --- a/scripts/weapons/Equipment/SWBeaconer.cs +++ b/scripts/weapons/Equipment/SWBeaconer.cs @@ -73,10 +73,7 @@ datablock ShapeBaseImageData(KillstreakBeaconImage) { }; function KillstreakBeaconImage::onMount(%this, %obj, %slot) { - if(!isSet(%obj.client.ksListInstance)) { - %obj.client.ksListInstance = initList(); - } - if(%obj.client.ksListInstance.count() <= 0) { + if(getWordCount(%obj.client.streakList()) == 0) { %obj.throwWeapon(1); %obj.throwWeapon(0); %obj.setInventory(KillstreakBeacon, 0, true); @@ -103,74 +100,41 @@ function KillstreakBeaconImage::changeMode(%this, %obj, %key) { case 1: //Mine Modes %obj.KSSetMode++; - if(%obj.KSSetMode >= %obj.client.ksListInstance.count()) { + if(%obj.KSSetMode >= getWordCount(%obj.client.streakList())) { %obj.KSSetMode = 0; } case 2: //Grenade Modes %obj.KSSetMode--; if(%obj.KSSetMode < 0) { - %obj.KSSetMode = %obj.client.ksListInstance.count() - 1; + %obj.KSSetMode = getWordCount(%obj.client.streakList()); } } DisplayKillstreakInfo(%obj); } function DisplayKillstreakInfo(%obj) { - %currentStreak = %obj.client.ksListInstance.element(%obj.KSSetMode); - %strkName = getWord(%currentStreak, 0); - %strkCnt = getWord(%currentStreak, 1); + %streakList = %obj.client.streakList(); + %currentStreak = getWord(%streakList, %obj.KSSetMode); + %strkName = getField($Killstreak[%currentStreak], 0); + %strkCnt = %obj.client.streakCount[%currentStreak]; - switch$(%strkName) { - case "UAV": - %msg = "UAV Recon"; - case "Airstrike": - %msg = "Thundersword Airstrike"; - case "GM": - %msg = "UAMS Assault Drone"; - case "AIHeli": - %msg = "Support Helicopter"; - case "Harrier": - %msg = "Plasma Harrier Airstrike"; - case "OLS": - %msg = "Orbital Laser Strike"; - case "AIGunHeli": - %msg = "Gunship Helicopter Support"; - case "Stealth": - %msg = "Stealth Bomber Airstrike"; - case "HarbWrath": - %msg = "Harbinger's Wrath"; - case "Apache": - %msg = "Apache Gunner"; - case "AC130": - %msg = "AC-130 Gunner"; - case "Artillery": - %msg = "Centaur Artillery Bombardment"; - case "EMP": - %msg = "EMP Strike"; - case "NukeStrike": - %msg = "Tactical Nuke Strike"; - case "ZBomb": - %msg = "Anti-Zombie Bomb"; - case "FBomb": - %msg = "Fission Bomb Strike"; - case "Napalm": - %msg = "Napalm Airstrike"; - } - - commandToClient(%obj.client, 'BottomPrint', ">>>Killstreak Beacon<<<\n"@%msg@" ["@%strkCnt@" Available]\nPress Mine to select next streak, Grenade to select previous streak.", 3, 3); + commandToClient(%obj.client, 'BottomPrint', ">>>Killstreak Beacon<<<\n"@%strkName@" ["@%strkCnt@" Available]\nPress Mine to select next streak, Grenade to select previous streak.", 3, 3); } function KillstreakBeaconImage::OnFire(%data, %obj, %slot) { - %currentStreak = %obj.client.ksListInstance.element(%obj.KSSetMode); - %strkName = getWord(%currentStreak, 0); - %strkCnt = getWord(%currentStreak, 1); + %streakList = %obj.client.streakList(); + %currentStreak = getWord(%streakList, %obj.KSSetMode); + %strkName = getField($Killstreak[%currentStreak], 0); + %strkCnt = %obj.client.streakCount[%currentStreak]; %newCt = %strkCnt - 1; + + echo("KSBeacon::Fire("@%data@", "@%obj@", "@%slot@"): "@%strkName@" "@%strkCnt@" => "@%newCt); if(%strkCnt <= 0) { //Oops... messageClient(%obj.client, 'msgError', "\c5TWM2: Nice Try..."); - %obj.client.ksListInstance.removeElement(getField(%obj.client.ksListInstance.find(%strkName), 1)); - if(%obj.client.ksListInstance.count() <= 0) { + //%obj.client.streakCount[%currentStreak]--; + if(getWordCount(%obj.client.streakList()) == 0) { //No more streaks in the list... %obj.throwWeapon(1); %obj.throwWeapon(0); @@ -179,24 +143,19 @@ function KillstreakBeaconImage::OnFire(%data, %obj, %slot) { return; } - switch$(%strkName) { + switch(%currentStreak) { // // // UAV // // - case "UAV": + case 1: GainExperience(%obj.client, 25, "UAV Called in "); %obj.client.TWM2Core.UAVCalls++; UpdateSWBeaconFile(%obj.client, "UAV"); %obj.client.OnUseKillstreak(1); - if(%newCt == 0) { - %obj.client.ksListInstance.removeElement(getField(%obj.client.ksListInstance.find(%strkName), 1)); - } - else { - %obj.client.ksListInstance.set(getField(%obj.client.ksListInstance.find(%strkName), 1), %strkName SPC %newCt); - } + %obj.client.streakCount[%currentStreak]--; %count = 0; if(!$TWM2::FFAMode) { %obj.team.UAVLoop = UAVLoop(%obj, %obj.client.team, %count); @@ -228,7 +187,7 @@ function KillstreakBeaconImage::OnFire(%data, %obj, %slot) { // Airstrike // // - case "Airstrike": + case 2: %ASCam = new Camera() { dataBlock = TWM2ControlCamera; }; @@ -244,7 +203,7 @@ function KillstreakBeaconImage::OnFire(%data, %obj, %slot) { // UAMS // // - case "GM": + case 3: GainExperience(%obj.client, 50, "UAMS Called in "); %obj.client.TWM2Core.GMCalls++; %obj.client.OnUseKillstreak(3); @@ -259,19 +218,15 @@ function KillstreakBeaconImage::OnFire(%data, %obj, %slot) { } } CreateMissileSat(%obj.client); - if(%newCt == 0) { - %obj.client.ksListInstance.removeElement(getField(%obj.client.ksListInstance.find(%strkName), 1)); - } - else { - %obj.client.ksListInstance.set(getField(%obj.client.ksListInstance.find(%strkName), 1), %strkName SPC %newCt); - } + %obj.client.streakCount[%currentStreak]--; + // // // Helicopter // // - case "AIHeli": + case 4: if(Game.CheckModifier("Scrambler") == 1) { for(%i = 0; %i < MissionCleanup.getCount(); %i++) { %obj = MissionCleanup.getObject(%i); @@ -298,12 +253,7 @@ function KillstreakBeaconImage::OnFire(%data, %obj, %slot) { messageClient(%cl, 'msgHeliComing', "\c5TWM2: Enemy Helicopter Inbound"); } } - if(%newCt == 0) { - %obj.client.ksListInstance.removeElement(getField(%obj.client.ksListInstance.find(%strkName), 1)); - } - else { - %obj.client.ksListInstance.set(getField(%obj.client.ksListInstance.find(%strkName), 1), %strkName SPC %newCt); - } + %obj.client.streakCount[%currentStreak]--; MakeTheHeli(%obj.client); // @@ -311,7 +261,7 @@ function KillstreakBeaconImage::OnFire(%data, %obj, %slot) { // Harrier // // - case "Harrier": + case 5: %ASCam = new Camera() { dataBlock = TWM2ControlCamera; }; @@ -327,7 +277,7 @@ function KillstreakBeaconImage::OnFire(%data, %obj, %slot) { // OLS // // - case "OLS": + case 6: %ASCam = new Camera() { dataBlock = TWM2ControlCamera; }; @@ -343,7 +293,7 @@ function KillstreakBeaconImage::OnFire(%data, %obj, %slot) { // Gunship Helicopter // // - case "AIGunHeli": + case 7: if(Game.CheckModifier("Scrambler") == 1) { for(%i = 0; %i < MissionCleanup.getCount(); %i++) { %obj = MissionCleanup.getObject(%i); @@ -370,12 +320,7 @@ function KillstreakBeaconImage::OnFire(%data, %obj, %slot) { messageClient(%cl, 'msgHeliComing', "\c5TWM2: Enemy Gunship Helicopter Inbound!!!"); } } - if(%newCt == 0) { - %obj.client.ksListInstance.removeElement(getField(%obj.client.ksListInstance.find(%strkName), 1)); - } - else { - %obj.client.ksListInstance.set(getField(%obj.client.ksListInstance.find(%strkName), 1), %strkName SPC %newCt); - } + %obj.client.streakCount[%currentStreak]--; MakeTheHeli2(%obj.client, 0); // @@ -383,7 +328,7 @@ function KillstreakBeaconImage::OnFire(%data, %obj, %slot) { // Stealth Airstrike // // - case "Stealth": + case 8: %ASCam = new Camera() { dataBlock = TWM2ControlCamera; }; @@ -399,7 +344,7 @@ function KillstreakBeaconImage::OnFire(%data, %obj, %slot) { // Harbinger Gunship // // - case "HarbWrath": + case 9: GainExperience(%obj.client, 100, "Harbinger Gunship Called In "); if($CurrentMission $= "ChristmasMall09") { CompleteNWChallenge(%CallerClient, "GunshipMall"); @@ -416,12 +361,7 @@ function KillstreakBeaconImage::OnFire(%data, %obj, %slot) { messageClient(%cl, 'msgHeliComing', "\c5TWM2: Enemy Gunship... INCOMING!!!"); } } - if(%newCt == 0) { - %obj.client.ksListInstance.removeElement(getField(%obj.client.ksListInstance.find(%strkName), 1)); - } - else { - %obj.client.ksListInstance.set(getField(%obj.client.ksListInstance.find(%strkName), 1), %strkName SPC %newCt); - } + %obj.client.streakCount[%currentStreak]--; if($TWM2::UnmannedGunship) { StartHarbingersWrath(%obj.client, 1); } @@ -434,7 +374,7 @@ function KillstreakBeaconImage::OnFire(%data, %obj, %slot) { // Apache // // - case "Apache": + case 10: GainExperience(%obj.client, 100, "Apache Gunner Called in "); %obj.client.OnUseKillstreak(10); %obj.client.TWM2Core.CGCalls++; @@ -448,12 +388,7 @@ function KillstreakBeaconImage::OnFire(%data, %obj, %slot) { messageClient(%cl, 'msgHeliComing', "\c5TWM2: Enemy Apache... INCOMING!!!"); } } - if(%newCt == 0) { - %obj.client.ksListInstance.removeElement(getField(%obj.client.ksListInstance.find(%strkName), 1)); - } - else { - %obj.client.ksListInstance.set(getField(%obj.client.ksListInstance.find(%strkName), 1), %strkName SPC %newCt); - } + %obj.client.streakCount[%currentStreak]--; MakeTheHeli(%obj.client, 1); // @@ -461,7 +396,7 @@ function KillstreakBeaconImage::OnFire(%data, %obj, %slot) { // AC130 // // - case "AC130": + case 11: GainExperience(%obj.client, 100, "AC130 Called in "); if($CurrentMission $= "ChristmasMall09") { CompleteNWChallenge(%CallerClient, "GunshipMall"); @@ -478,12 +413,7 @@ function KillstreakBeaconImage::OnFire(%data, %obj, %slot) { messageClient(%cl, 'msgHeliComing', "\c5TWM2: Enemy AC130 ABOVE!!!"); } } - if(%newCt == 0) { - %obj.client.ksListInstance.removeElement(getField(%obj.client.ksListInstance.find(%strkName), 1)); - } - else { - %obj.client.ksListInstance.set(getField(%obj.client.ksListInstance.find(%strkName), 1), %strkName SPC %newCt); - } + %obj.client.streakCount[%currentStreak]--; if($TWM2::UnmannedGunship) { StartAC130(%obj.client, 1); } @@ -496,7 +426,7 @@ function KillstreakBeaconImage::OnFire(%data, %obj, %slot) { // Artillery // // - case "Artillery": + case 12: %ASCam = new Camera() { dataBlock = TWM2ControlCamera; }; @@ -512,7 +442,7 @@ function KillstreakBeaconImage::OnFire(%data, %obj, %slot) { // EMP // // - case "EMP": + case 13: %obj.client.TWM2Core.EMPCalls++; UpdateSWBeaconFile(%obj.client, "EMP"); GainExperience(%obj.client, 1000, "Mass EMP Called in "); @@ -540,19 +470,14 @@ function KillstreakBeaconImage::OnFire(%data, %obj, %slot) { } } } - if(%newCt == 0) { - %obj.client.ksListInstance.removeElement(getField(%obj.client.ksListInstance.find(%strkName), 1)); - } - else { - %obj.client.ksListInstance.set(getField(%obj.client.ksListInstance.find(%strkName), 1), %strkName SPC %newCt); - } + %obj.client.streakCount[%currentStreak]--; // // // Nuke // // - case "NukeStrike": + case 14: %ASCam = new Camera() { dataBlock = TWM2ControlCamera; }; @@ -568,7 +493,7 @@ function KillstreakBeaconImage::OnFire(%data, %obj, %slot) { // ZBomb // // - case "ZBomb": + case 15: GainExperience(%obj.client, 1000, "Zombie Annihilation Bomb Activated "); MessageAll('msgWohoo', "\c5TWM2: "@%obj.client.namebase@" has activated a Z-Bomb, eliminating all zombies"); %obj.client.OnUseKillstreak(15); @@ -595,19 +520,14 @@ function KillstreakBeaconImage::OnFire(%data, %obj, %slot) { %flcl.player.setWhiteout(1.8); } } - if(%newCt == 0) { - %obj.client.ksListInstance.removeElement(getField(%obj.client.ksListInstance.find(%strkName), 1)); - } - else { - %obj.client.ksListInstance.set(getField(%obj.client.ksListInstance.find(%strkName), 1), %strkName SPC %newCt); - } + %obj.client.streakCount[%currentStreak]--; // // // Fission // // - case "FBomb": + case 16: %obj.client.HasFission = 0; GainExperience(%obj.client, 25000, "Anti-Matter Based Fission Bomb Activated "); %obj.client.OnUseKillstreak(16); @@ -616,19 +536,14 @@ function KillstreakBeaconImage::OnFire(%data, %obj, %slot) { CompleteNWChallenge(%obj.client, "GameEnder"); MessageAll('msgItsOva', "\c5COMMAND: FISSION BOMB!!! IT'S OVER!! RUN!!!!!! ~wfx/misc/red_alert_short.wav"); FissionBombLoop(%obj.client, %obj, %obj.getPosition(), 30); - if(%newCt == 0) { - %obj.client.ksListInstance.removeElement(getField(%obj.client.ksListInstance.find(%strkName), 1)); - } - else { - %obj.client.ksListInstance.set(getField(%obj.client.ksListInstance.find(%strkName), 1), %strkName SPC %newCt); - } + %obj.client.streakCount[%currentStreak]--; // // // Napalm // // - case "Napalm": + case 17: %ASCam = new Camera() { dataBlock = TWM2ControlCamera; }; @@ -640,7 +555,7 @@ function KillstreakBeaconImage::OnFire(%data, %obj, %slot) { CameraMessageLoop(%obj.client, %ASCam, %ASCam.mode); } //Post-Fire Checks - if(%obj.client.ksListInstance.count() <= 0) { + if(getWordCount(%obj.client.streakList()) == 0) { //No more streaks in the list... %obj.throwWeapon(1); %obj.throwWeapon(0);