diff --git a/JTLdelDSO.bat b/JTLdelDSO.bat new file mode 100644 index 0000000..aa5743c --- /dev/null +++ b/JTLdelDSO.bat @@ -0,0 +1,2 @@ +del /s /q "..\base\*.dso" +del /s /q "*.dso" diff --git a/scripts/HordeGame.cs b/scripts/HordeGame.cs index 3d6818f..05759e8 100644 --- a/scripts/HordeGame.cs +++ b/scripts/HordeGame.cs @@ -427,6 +427,12 @@ function HordeNextWave(%game, %wave) { $HordeGame::RevivesLeft++; } $HordeGame::CurrentWave = %wave; + for(%i = 0; %i < ClientGroup.getCount(); %i++) { + %cl = ClientGroup.getObject(%i); + if(%wave != 1) { + recordAction(%cl, "HORDEWAVE", %wave-1); + } + } HordeKillAllZombies(); //Cleans up the server if($HordeGame::CurrentWave == 51) { //Victory for (%i = 0; %i < ClientGroup.getCount(); %i++) { diff --git a/scripts/TWM2/Systems/DChalg.cs b/scripts/TWM2/Systems/DChalg.cs index 79ff052..7e085e0 100644 --- a/scripts/TWM2/Systems/DChalg.cs +++ b/scripts/TWM2/Systems/DChalg.cs @@ -127,80 +127,86 @@ function doChallengeKillRecording(%sourceObject, %targetObject) { } function recordAction(%client, %action, %variables) { - %ymd = formattimestring("yymmdd"); - %so = %client.TWM2Controller; - //echo(""@%client@" - "@%action@" - "@%variables@""); - // - switch$(%action) { - case "CCMP": - %so.completed[getField(%variables, 0), %ymd] = getField(%variables, 1); - case "BOSS": - %so.bossSlayCount[getField(%variables, 0), %ymd] += 1; - case "PKC": - //player kill count - if(getField(%variables, 0) $= "total") { - %so.totalPlayerKillCount[%ymd] += getField(%variables, 1); - } - else { - %so.PlayerKillCount[%ymd, getField(%variables, 1)] += getField(%variables, 2); - } - case "ZKC": - if(getField(%variables, 0) $= "total") { - %so.totalZombieKillCount[%ymd] += getField(%variables, 1); - } - else { - //a 3-case would have all of these filed - if(!isSet(getField(%variables, 3))) { - %so.ZombieKillCount[%ymd, 0, getField(%variables, 1)] += getField(%variables, 2); - } - else { - %so.ZombieKillCount[%ymd, getField(%variables, 1), getField(%variables, 2)] += getField(%variables, 3); - } - } - case "HSC": - if(getField(%variables, 0) !$= "zombie") { - %so.playerHeadshots[%ymd] += getField(%variables, 1); - } - else { - %so.zombieHeadshots[%ymd] += getField(%variables, 1); - } - case "KSCC": - %so.killstreakCalls[%ymd, getField(%variables, 0)] += getField(%variables, 1); - case "KSKC": - %so.killstreakKills[%ymd, getField(%variables, 0)] += getField(%variables, 1); - case "SKC": - %so.successiveSolo[%ymd, getField(%variables, 0)] += getField(%variables, 1); - case "SKSC": - %so.successiveStreak[%ymd, getField(%variables, 0)] += getField(%variables, 1); - case "BOMBARM": - %so.bombArm[%ymd, $CurrentMission] += 1; - %so.bombArmTotal[%ymd] += 1; - case "BOMBDIS": - %so.bombDisarm[%ymd, $CurrentMission] += 1; - %so.bombDisarmTotal[%ymd] += 1; - case "SABWIN": - %so.sabotageRoundWins[%ymd, $CurrentMission] += 1; - %so.sabotageRoundWinTotal[%ymd] += 1; - case "AREACAP": - %so.areaCapture[%ymd, $CurrentMission] += 1; - %so.areaCaptureTotal[%ymd] += 1; - case "DOMWIN": - %so.dominationRoundWins[%ymd, $CurrentMission] += 1; - %so.dominationRoundWinTotal[%ymd] += 1; - case "EXPGAIN": - %so.dailyEXPGain[%ymd] += getField(%variables, 0); - case "BACK": - if(getField(%variables, 0) $= "zombie") { - %so.zombieBackstabs[%ymd] += 1; - } - else { - %so.playerBackstabs[%ymd] += 1; - } - default: - //no action recorded - } - allCheckCompletion(%client); - updateChallengeFile(%client); + %ymd = formattimestring("yymmdd"); + %so = %client.TWM2Controller; + //echo(""@%client@" - "@%action@" - "@%variables@""); + // + switch$(%action) { + case "CCMP": + %so.completed[getField(%variables, 0), %ymd] = getField(%variables, 1); + case "BOSS": + %so.bossSlayCount[getField(%variables, 0), %ymd] += 1; + case "PKC": + //player kill count + if(getField(%variables, 0) $= "total") { + %so.totalPlayerKillCount[%ymd] += getField(%variables, 1); + } + else { + %so.PlayerKillCount[%ymd, getField(%variables, 1)] += getField(%variables, 2); + } + case "ZKC": + if(getField(%variables, 0) $= "total") { + %so.totalZombieKillCount[%ymd] += getField(%variables, 1); + } + else { + //a 3-case would have all of these filed + if(!isSet(getField(%variables, 3))) { + %so.ZombieKillCount[%ymd, 0, getField(%variables, 1)] += getField(%variables, 2); + } + else { + %so.ZombieKillCount[%ymd, getField(%variables, 1), getField(%variables, 2)] += getField(%variables, 3); + } + } + case "HSC": + if(getField(%variables, 0) !$= "zombie") { + %so.playerHeadshots[%ymd] += getField(%variables, 1); + } + else { + %so.zombieHeadshots[%ymd] += getField(%variables, 1); + } + case "KSCC": + %so.killstreakCalls[%ymd, getField(%variables, 0)] += getField(%variables, 1); + case "KSKC": + %so.killstreakKills[%ymd, getField(%variables, 0)] += getField(%variables, 1); + case "SKC": + %so.successiveSolo[%ymd, getField(%variables, 0)] += getField(%variables, 1); + case "SKSC": + %so.successiveStreak[%ymd, getField(%variables, 0)] += getField(%variables, 1); + case "BOMBARM": + %so.bombArm[%ymd, $CurrentMission] += 1; + %so.bombArmTotal[%ymd] += 1; + case "BOMBDIS": + %so.bombDisarm[%ymd, $CurrentMission] += 1; + %so.bombDisarmTotal[%ymd] += 1; + case "SABWIN": + %so.sabotageRoundWins[%ymd, $CurrentMission] += 1; + %so.sabotageRoundWinTotal[%ymd] += 1; + case "AREACAP": + %so.areaCapture[%ymd, $CurrentMission] += 1; + %so.areaCaptureTotal[%ymd] += 1; + case "HORDEWAVE": + %so.totalHordeWavesCompleted[%ymd] += 1; + %cWave = getField(%variables, 0); + if(%cWave > %so.highestHordeWave[%ymd]) { + %so.highestHordeWave[%ymd] = %cWave; + } + case "DOMWIN": + %so.dominationRoundWins[%ymd, $CurrentMission] += 1; + %so.dominationRoundWinTotal[%ymd] += 1; + case "EXPGAIN": + %so.dailyEXPGain[%ymd] += getField(%variables, 0); + case "BACK": + if(getField(%variables, 0) $= "zombie") { + %so.zombieBackstabs[%ymd] += 1; + } + else { + %so.playerBackstabs[%ymd] += 1; + } + default: + //no action recorded + } + allCheckCompletion(%client); + updateChallengeFile(%client); } function cleanChallenges() { @@ -239,129 +245,139 @@ function allCheckCompletion(%client) { } function checkCompletion(%client, %cID) { - %challenge = $Challenges::Challenge[%cID]; - %cType = trim(getField(%challenge, 0)); - %cCond = getsubstr(getField(%challenge, 3), 1, strlen(getField(%challenge, 3))); - %so = %client.TWM2Controller; - %dateStr = formattimestring("yymmdd"); - //cannot complete the same one twice :P - if(%so.completed[%cid, %dateStr]) { - return; - } - // - switch$(getWord(%cCond, 0)) { - case "E": - %killCount = getWord(%cCond, 1); - %killDB = getWord(%cCond, 2) $= "A" ? 0 : getWord(%cCond, 2); - if(%killDB != 0) { - if(%so.PlayerKillCount[%dateStr, %killDB] >= %killCount) { - %done = true; - } - } - else { - if(%so.totalPlayerKillCount[%dateStr] >= %killCount) { - %done = true; - } - } - case "Z": - %killCount = getWord(%cCond, 1); - %killedType = getWord(%cCond, 2) $= "A" ? -1 : getWord(%cCond, 2); - %killDB = getWord(%cCond, 3) $= "A" ? 0 : getWord(%cCond, 3); - if(%killDB != 0) { - if(%killedType != -1) { - if(%so.ZombieKillCount[%dateStr, %killDB, %killedType] >= %killCount) { - %done = true; - } - } - else { - if(%so.ZombieKillCount[%dateStr, %killDB, ""] >= %killCount) { - %done = true; - } - } - } - else { - if(%killedType != -1) { - if(%so.ZombieKillCount[%dateStr, 0, %killedType] >= %killCount) { - %done = true; - } - } - else { - if(%so.totalZombieKillCount[%dateStr] >= %killCount) { - %done = true; - } - } - } - case "HS": - %counter = getWord(%cCond, 1); - %type = getWord(%cCond, 2) $= "E" ? "E" : "Z"; - if(%type $= "E") { - if(%so.playerHeadshots[%dateStr] >= %counter) { - %done = true; - } - } - else { - if(%so.zombieHeadshots[%dateStr] >= %counter) { - %done = true; - } - } - case "KS": - %type = getWord(%cCond, 1); - %ammount = getWord(%cCond, 2); - if(%so.killstreakCalls[%dateStr, %type] >= %ammount) { - %done = true; - } - case "KSK": - %type = getWord(%cCond, 1); - %ammount = getWord(%cCond, 2); - if(%so.killstreakKills[%dateStr, %type] >= %ammount) { - %done = true; - } - case "SK": - %soloType = getWord(%cCond, 1); - %ammount = getWord(%cCond, 2); - if(%so.successiveSolo[%dateStr, %soloType] >= %ammount) { - %done = true; - } - case "SKS": - %streakType = getWord(%cCond, 1); - %ammount = getWord(%cCond, 2); - if(%so.successiveStreak[%dateStr, %streakType] >= %ammount) { - %done = true; - } - case "Prestige": - %level = getWord(%cCond, 1); - if(%client.TWM2Core.officer >= %level) { - %done = true; - } - case "Boss": - %name = getWord(%cCond, 1); - %amount = getWord(%cCond, 2); - if(%so.bossSlayCount[%name, %dateStr] >= %amount) { - %done = true; - } - case "Back": - %zOrA = getWord(%cCond, 1); - %amount = getWord(%cCond, 2); - if(%zOrA $= "Z") { - if(%so.zombieBackstabs[%dateStr] >= %amount) { - %done = true; + %challenge = $Challenges::Challenge[%cID]; + %cType = trim(getField(%challenge, 0)); + %cCond = getsubstr(getField(%challenge, 3), 1, strlen(getField(%challenge, 3))); + %so = %client.TWM2Controller; + %dateStr = formattimestring("yymmdd"); + //cannot complete the same one twice :P + if(%so.completed[%cid, %dateStr]) { + return; + } + // + switch$(getWord(%cCond, 0)) { + case "E": + %killCount = getWord(%cCond, 1); + %killDB = getWord(%cCond, 2) $= "A" ? 0 : getWord(%cCond, 2); + if(%killDB != 0) { + if(%so.PlayerKillCount[%dateStr, %killDB] >= %killCount) { + %done = true; + } } - } - else { - if(%so.playerBackstabs[%dateStr] >= %amount) { - %done = true; + else { + if(%so.totalPlayerKillCount[%dateStr] >= %killCount) { + %done = true; + } } - } - default: - error("Unknown challenge in parser..."); - } - if(%done) { - %cName = getField(%challenge, 1); - %CRewd = getField(%challenge, 4); - CenterPrint(%client, "CHALLENGE COMPLETED\n"@%cName@"", 3, 3); - GainExperience(%client, %cRewd, %cName@" Challenge Completed"); - recordAction(%client, "CCMP", ""@%cid@"\t1"); - } + case "Z": + %killCount = getWord(%cCond, 1); + %killedType = getWord(%cCond, 2) $= "A" ? -1 : getWord(%cCond, 2); + %killDB = getWord(%cCond, 3) $= "A" ? 0 : getWord(%cCond, 3); + if(%killDB != 0) { + if(%killedType != -1) { + if(%so.ZombieKillCount[%dateStr, %killDB, %killedType] >= %killCount) { + %done = true; + } + } + else { + if(%so.ZombieKillCount[%dateStr, %killDB, ""] >= %killCount) { + %done = true; + } + } + } + else { + if(%killedType != -1) { + if(%so.ZombieKillCount[%dateStr, 0, %killedType] >= %killCount) { + %done = true; + } + } + else { + if(%so.totalZombieKillCount[%dateStr] >= %killCount) { + %done = true; + } + } + } + case "HS": + %counter = getWord(%cCond, 1); + %type = getWord(%cCond, 2) $= "E" ? "E" : "Z"; + if(%type $= "E") { + if(%so.playerHeadshots[%dateStr] >= %counter) { + %done = true; + } + } + else { + if(%so.zombieHeadshots[%dateStr] >= %counter) { + %done = true; + } + } + case "KS": + %type = getWord(%cCond, 1); + %amount = getWord(%cCond, 2); + if(%so.killstreakCalls[%dateStr, %type] >= %amount) { + %done = true; + } + case "KSK": + %type = getWord(%cCond, 1); + %amount = getWord(%cCond, 2); + if(%so.killstreakKills[%dateStr, %type] >= %amount) { + %done = true; + } + case "SK": + %soloType = getWord(%cCond, 1); + %amount = getWord(%cCond, 2); + if(%so.successiveSolo[%dateStr, %soloType] >= %ammount) { + %done = true; + } + case "SKS": + %streakType = getWord(%cCond, 1); + %amount = getWord(%cCond, 2); + if(%so.successiveStreak[%dateStr, %streakType] >= %ammount) { + %done = true; + } + case "Horde": + %waveNum = getWord(%cCond, 1); + if(%so.highestHordeWave[%dateStr] >= %waveNum) { + %done = true; + } + case "HordeWaves": + %amount = getWord(%cCond, 1); + if(%so.totalHordeWavesCompleted[%dateStr] >= %amount) { + %done = true; + } + case "Prestige": + %level = getWord(%cCond, 1); + if(%client.TWM2Core.officer >= %level) { + %done = true; + } + case "Boss": + %name = getWord(%cCond, 1); + %amount = getWord(%cCond, 2); + if(%so.bossSlayCount[%name, %dateStr] >= %amount) { + %done = true; + } + case "Back": + %zOrA = getWord(%cCond, 1); + %amount = getWord(%cCond, 2); + if(%zOrA $= "Z") { + if(%so.zombieBackstabs[%dateStr] >= %amount) { + %done = true; + } + } + else { + if(%so.playerBackstabs[%dateStr] >= %amount) { + %done = true; + } + } + default: + error("Unknown challenge in parser..."); + } + if(%done) { + %cName = getField(%challenge, 1); + %CRewd = getField(%challenge, 4); + CenterPrint(%client, "CHALLENGE COMPLETED\n"@%cName@"", 3, 3); + GainExperience(%client, %cRewd, %cName@" Challenge Completed"); + recordAction(%client, "CCMP", ""@%cid@"\t1"); + } } //Check Multi-Completion (handles weekly & monthly challenges) @@ -441,7 +457,7 @@ function checkMultiCompletion(%client, %cID) { %done = true; } } - else { + else { if(getCurrentMonthTotal(%client, ZombieKillCount, 0 SPC %killedType) >= %killCount) { %done = true; } @@ -459,7 +475,7 @@ function checkMultiCompletion(%client, %cID) { } } } - } + } case "HS": %counter = getWord(%cCond, 1); %type = getWord(%cCond, 2) $= "E" ? "E" : "Z"; diff --git a/scripts/TWM2/Systems/MainControl.cs b/scripts/TWM2/Systems/MainControl.cs index fdcb131..6af7c76 100644 --- a/scripts/TWM2/Systems/MainControl.cs +++ b/scripts/TWM2/Systems/MainControl.cs @@ -690,18 +690,25 @@ function TWM2Damage(%projectile, %target, %amount, %dType, %damLoc, %type) { if(strStr(%SDB.getClassName(), "Turret") != -1) { if(%SDB.getName() $= "HarbingerGunshipTurret") { %projectile.sourceObject = %projectile.sourceObject.mountobj; + %sourceObject = %projectile.sourceObject; + %SDB = %sourceObject.getDataBlock(); } else if(%SDB.getName() $= "AC130GunshipTurret") { %projectile.sourceObject = %projectile.sourceObject.mountobj; + %sourceObject = %projectile.sourceObject; + %SDB = %sourceObject.getDataBlock(); } else if(%SDB.getName() $= "CentaurTurret") { %projectile.sourceObject = %projectile.sourceObject.source; + %sourceObject = %projectile.sourceObject; + %SDB = %sourceObject.getDataBlock(); } } //------------------------------------------------------ //vehicle kill checking + //NOTE: THIS DOESN'T GO HERE!!! if(strStr(%SDB.getClassName(), "Vehicle") != -1) { - if(%target.isPlayer() && %target.getState() $= "dead") { + if((%target.getType() & ($TypeMasks::PlayerObjectType)) && %target.getState() $= "dead") { %pl = %sourceObject.getMountNodeObject(0); //the pilot %cl = %pl.client; if(%cl !$= "") { @@ -717,9 +724,7 @@ function TWM2Damage(%projectile, %target, %amount, %dType, %damLoc, %type) { } } } - if(!%target.isAllyBot) { - UpdateVehicleKillFile(%cl, %SDB.getName()); - } + UpdateVehicleKillFile(%cl, %SDB.getName()); // if(%TDB $= "DemonMotherZombieArmor" && %SDB $= "CentaurVehicle") { %cl.CDLKills++; diff --git a/scripts/TWM2/Systems/WeaponChallenges.cs b/scripts/TWM2/Systems/WeaponChallenges.cs index 08175dc..d822d12 100644 --- a/scripts/TWM2/Systems/WeaponChallenges.cs +++ b/scripts/TWM2/Systems/WeaponChallenges.cs @@ -14,11 +14,9 @@ function GetWeaponChallenges(%Image, %number) { function UpdateVehicleKillFile(%client, %VDB) { if(%VDB $= "") { //Phantom139: Ha!! No more invalid Files!!! - //echo("No Vehicle Datablock"); return; } if(%client $= "") { //Phantom139: Ha! No More UE on Invalid File - //echo("No Client"); return; } %file = ""@$TWM::RanksDirectory@"/"@%client.guid@"/Saved.TWMSave";