Supplies some wrapper functions for public use
// ==UserScript==
// @name infernal wrapper
// @description Supplies some wrapper functions for public use
// @namespace infernal_wrapper
// @include https://prodgame*.alliances.commandandconquer.com/*/index.aspx*
// @version 0.390737.5
// @author infernal_me, KRS_L, krisan
// ==/UserScript==
(function () {
var CCTAWrapper_main = function () {
try {
_log = function () {
if (typeof console != 'undefined') console.log(arguments);
else if (window.opera) opera.postError(arguments);
else GM_log(arguments);
}
function createCCTAWrapper() {
console.log('CCTAWrapper loaded');
_log('wrapper loading' + PerforceChangelist);
System = $I;
SharedLib = $I;
var strFunction;
// SharedLib.Combat.CbtSimulation.prototype.DoStep
for (var x in $I) {
for (var key in $I[x].prototype) {
if ($I[x].prototype.hasOwnProperty(key) && typeof($I[x].prototype[key]) === 'function') { // reduced iterations from 20K to 12K
strFunction = $I[x].prototype[key].toString();
if (strFunction.indexOf("().l;var b;for (var d = 0 ; d < c.length ; d++){b = c[d];if((b.") > -1) {
$I[x].prototype.DoStep = $I[x].prototype[key];
console.log("SharedLib.Combat.CbtSimulation.prototype.DoStep = $I." + x + ".prototype." + key);
break;
}
}
}
}
// ClientLib.Data.CityRepair.prototype.CanRepair
for (var key in ClientLib.Data.CityRepair.prototype) {
if (typeof ClientLib.Data.CityRepair.prototype[key] === 'function') {
strFunction = ClientLib.Data.CityRepair.prototype[key].toString();
if (strFunction.indexOf("DefenseSetup") > -1 && strFunction.indexOf("DamagedEntity") > -1) { // order important to reduce iterations
ClientLib.Data.CityRepair.prototype.CanRepair = ClientLib.Data.CityRepair.prototype[key];
console.log("ClientLib.Data.CityRepair.prototype.CanRepair = ClientLib.Data.CityRepair.prototype." + key);
break;
}
}
}
// ClientLib.Data.CityRepair.prototype.UpdateCachedFullRepairAllCost
for (var key in ClientLib.Data.CityRepair.prototype) {
if (typeof ClientLib.Data.CityRepair.prototype[key] === 'function') {
strFunction = ClientLib.Data.CityRepair.prototype[key].toString();
if (strFunction.indexOf("Type==7") > -1 && strFunction.indexOf("var a=0;if") > -1) { // order important to reduce iterations
ClientLib.Data.CityRepair.prototype.UpdateCachedFullRepairAllCost = ClientLib.Data.CityRepair.prototype[key];
console.log("ClientLib.Data.CityRepair.prototype.UpdateCachedFullRepairAllCost = ClientLib.Data.CityRepair.prototype." + key);
break;
}
}
}
// ClientLib.Data.CityUnits.prototype.get_OffenseUnits
strFunction = ClientLib.Data.CityUnits.prototype.HasUnitMdbId.toString();
var searchString = "for (var b in {d:this.";
var startPos = strFunction.indexOf(searchString) + searchString.length;
var fn_name = strFunction.slice(startPos, startPos + 6);
strFunction = "var $createHelper;return this." + fn_name + ";";
var fn = Function('', strFunction);
ClientLib.Data.CityUnits.prototype.get_OffenseUnits = fn;
console.log("ClientLib.Data.CityUnits.prototype.get_OffenseUnits = function(){var $createHelper;return this." + fn_name + ";}");
// ClientLib.Data.CityUnits.prototype.get_DefenseUnits
strFunction = ClientLib.Data.CityUnits.prototype.HasUnitMdbId.toString();
searchString = "for (var c in {d:this.";
startPos = strFunction.indexOf(searchString) + searchString.length;
fn_name = strFunction.slice(startPos, startPos + 6);
strFunction = "var $createHelper;return this." + fn_name + ";";
fn = Function('', strFunction);
ClientLib.Data.CityUnits.prototype.get_DefenseUnits = fn;
console.log("ClientLib.Data.CityUnits.prototype.get_DefenseUnits = function(){var $createHelper;return this." + fn_name + ";}");
// ClientLib.Vis.Battleground.Battleground.prototype.get_Simulation
strFunction = ClientLib.Vis.Battleground.Battleground.prototype.StartBattle.toString();
searchString = "=0;for(var a=0; (a<9); a++){this.";
startPos = strFunction.indexOf(searchString) + searchString.length;
fn_name = strFunction.slice(startPos, startPos + 6);
strFunction = "return this." + fn_name + ";";
fn = Function('', strFunction);
ClientLib.Vis.Battleground.Battleground.prototype.get_Simulation = fn;
console.log("ClientLib.Vis.Battleground.Battleground.prototype.get_Simulation = function(){return this." + fn_name + ";}");
// GetNerfBoostModifier
if (typeof ClientLib.Vis.Battleground.Battleground.prototype.GetNerfAndBoostModifier == 'undefined') ClientLib.Vis.Battleground.Battleground.prototype.GetNerfAndBoostModifier = ClientLib.Base.Util.GetNerfAndBoostModifier;
_log('wrapper loaded');
}
} catch (e) {
console.log("createCCTAWrapper: ", e);
}
function CCTAWrapper_checkIfLoaded() {
try {
if (typeof qx !== 'undefined') {
createCCTAWrapper();
} else {
window.setTimeout(CCTAWrapper_checkIfLoaded, 1000);
}
} catch (e) {
CCTAWrapper_IsInstalled = false;
console.log("CCTAWrapper_checkIfLoaded: ", e);
}
}
if (/commandandconquer\.com/i.test(document.domain)) {
window.setTimeout(CCTAWrapper_checkIfLoaded, 1000);
}
}
try {
var CCTAWrapper = document.createElement("script");
CCTAWrapper.innerHTML = "var CCTAWrapper_IsInstalled = true; (" + CCTAWrapper_main.toString() + ")();";
CCTAWrapper.type = "text/javascript";
if (/commandandconquer\.com/i.test(document.domain)) {
document.getElementsByTagName("head")[0].appendChild(CCTAWrapper);
}
} catch (e) {
console.log("CCTAWrapper: init error: ", e);
}
})();