您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Shows you the region map
// ==UserScript== // @name C&C: Tiberium Alliances Map // @description Shows you the region map // @author Eistee // @version 15.11.28 // @namespace http*://*.alliances.commandandconquer.com/* // @include http*://*.alliances.commandandconquer.com/* // @icon http://s3.amazonaws.com/uso_ss/icon/176516/large.png // @grant GM_getValue // @grant GM_log // @grant GM_openInTab // @grant GM_registerMenuCommand // @grant GM_setValue // @grant GM_xmlhttpRequest // ==/UserScript== /* Bugfix for DR01 Script: C&C: Tiberium Alliances Map Version: 1.6.9 http://userscripts.org/scripts/show/152801 __________________________________________________ based on Tiberium Alliances Map (Nolana Kane) v1.8 https://userscripts.org/scripts/show/135955 contributors: KSX https://userscripts.org/scripts/show/149093 777lexa777 https://userscripts.org/scripts/show/149350 */ (function () { var TAMap_mainFunction = function () { function createMapTweak() { var TAMap = {}; qx.Class.define("TAMap", { type : "singleton", extend : qx.core.Object, members : { version : "13.08.25", alliances : null, alliancesAreLoaded : false, buttonMap : null, blurInterval : null, drawingNow : false, initZoom : null, isInitialized : false, mapBox : null, mapCanvas : null, canvasElement : null, canvasWidth : null, canvasHeight : null, mapMouseCanvas : null, mapMouseWidget : null, scroll : null, scrollWidget : null, settingsWnd : null, mapUpdateTimer : null, relations : { enemies : null, enemiesById : null, enemyCoords : [], allies : null, nap : null }, swObj : { isLoaded : false, refreshIcon : null, allianceSelect : null, allianceListItem : {}, poiSelect : null, obfSectorName : null, obfAllianceList : null, obfAllianceId : null, obfAllianceName : null, settingFields : {}, labels : {}, chkBoxFields : {}, coordButtons : {} }, line : { 1 : { x : null, y : null }, 2 : { x : null, y : null } }, visOptions : null, visOpt_DEFAULTS : { selectedAllianceId : -1, selectedAllianceName : "<< None >>", poi : -2, vpWidth : null, vpHeight : null, showEnemies : true, showEnemyRange : true, mapBoxBounds : { height : 500, top : 33, left : 129, width : 500 }, settingsWndBounds : { height : 646, top : 48, left : 615, width : 524 }, chk : { showAlliancePois : false, showOwnCities : true, showSectionFrame : true, showBorderLine1 : false, showBorderLine2 : false, fadeMap : true }, settingsPanel : { playerColor : "#7F0", // type = 1 baseColor : "#550", // type = 2 campColor : "midnightblue", // type = 3, CampType=2 outpostColor : "royalblue", // type = 3, CampType=3 poiColor : "orange", // type = 4, POIType != 0 tunnelColor : "forestgreen", // type = 4, POIType = 0 enemyBaseColor : "red", allianceTerrainColor : "rgba(255,255,255,0.5)", ownBaseColor : "rgba(0,255,0,0.5)", highlightColor : "rgba(200,255,200,1)", line1start : "800:796", line1end : "1387:921", line1color : "rgba(0,255,0,0.3)", line2start : "800:796", line2end : "1410:830", line2color : "rgba(255,255,0,0.3)", zoomFactor : 3 } }, initialize : function () { console.log("\nTAMap v" + this.version + ": Loaded"); this.init_vars(); this.init_menuButton(); this.init_mapBox(); this.init_scroll(); this.init_settingsWnd(); this.init_settingsButton(); this.init_mapBox_listeners(); this.isInitialized = true; }, init_vars : function () { // cloning var vTemp = JSON.parse(JSON.stringify(this.visOpt_DEFAULTS)); if (localStorage) { var sto = localStorage.getItem("TAMapStorage"); if (sto != null) { // check visOptions integrity against DEFAULTS this.visOptions = JSON.parse(sto); for (var i in vTemp) { if (typeof this.visOptions[i] == "object") { for (var j in vTemp[i]) { if (typeof this.visOptions[i][j] == "undefined") { console.log("\nSolving inconsistency with visOptions." + i + "." + j + "\n"); this.visOptions[i][j] = vTemp[i][j]; } } } else if (typeof this.visOptions[i] == "undefined") { console.log("Solving inconsistency with visOptions." + i); this.visOptions[i] = vTemp[i]; } } } else { this.visOptions = vTemp; } } this.initZoom = this.visOptions.settingsPanel.zoomFactor; this.worldHeight = ClientLib.Data.MainData.GetInstance().get_World().get_WorldHeight(); this.worldWidth = ClientLib.Data.MainData.GetInstance().get_World().get_WorldWidth(); this.canvasHeight = this.worldHeight * this.initZoom; this.canvasWidth = this.worldWidth * this.initZoom; }, init_menuButton : function () { this.buttonMap = new qx.ui.menu.Button("Map"); this.buttonMap.addListener("click", this.toggleMap, this); var submenu = new qx.ui.menu.Menu(); submenu.add(this.buttonMap); var bntScript = qx.core.Init.getApplication().getUIItem(ClientLib.Data.Missions.PATH.BAR_MENU).getScriptsButton(); bntScript.Add("Map", null, submenu); }, init_mapBox : function () { // The Map window this.mapBox = new qx.ui.window.Window("Mini-Map [v" + this.version + "]"); this.mapBox.setPadding(1); this.mapBox.setLayout(new qx.ui.layout.Grow()); // this.mapBox.setLayout(new qx.ui.layout.VBox()); this.mapBox.setShowMaximize(false); this.mapBox.setShowMinimize(false); this.mapBox.moveTo(this.visOptions.mapBoxBounds.left, this.visOptions.mapBoxBounds.top); this.mapBox.setHeight(this.visOptions.mapBoxBounds.height); this.mapBox.setWidth(this.visOptions.mapBoxBounds.width); this.mapBox.setMinWidth(10); this.mapBox.setMinHeight(10); this.mapBox.setBackgroundColor("black"); }, init_scroll : function () { var cw = this.canvasWidth; var ch = this.canvasHeight; this.scroll = new qx.ui.container.Scroll(); //this.scroll.removeListener("mousewheel", this.scroll._onMouseWheel, this.scroll); this.scroll.addListener("mousewheel", function (evt) { console.log(evt.getWheelDelta()); }, this); this.mapBox.add(this.scroll); this.scrollWidget = new qx.ui.core.Widget(); this.scrollWidget.setMinHeight(ch); this.scrollWidget.setMinWidth(cw); this.scrollWidget.setHeight(ch); this.scrollWidget.setWidth(cw); this.scroll.add(this.scrollWidget); this.canvasElement = new qx.html.Element("canvas", null, { id : "map", width : cw, height : ch }); this.canvasElement.addListener("appear", function () { //console.log("appeared:" + this.canvasElement.getDomElement()); this.createMapCanvas(); }, this); this.scrollWidget.getContentElement().add(this.canvasElement); }, init_settingsWnd : function () { try { /* select box for alliances */ var selectBox = new qx.ui.form.SelectBox(); var _this = this; selectBox.addListener("changeSelection", function (e) { try { if (e != null && e.getData() && e.getData().length > 0) { var mod = e.getData()[0].getModel(); console.log("Alliance selected: "); console.log(mod); console.log("e.getData()[0]: "); console.log(e.getData()[0]); this.visOptions.selectedAllianceId = mod; // alliance ID or -1 for none console.log("saved: " + mod); this.visOptions.selectedAllianceName = this.swObj.allianceListItem[mod].getLabel(); if (this.visOptions.selectedAllianceId != -1) { this.swObj.chkBoxFields.showAlliancePois.setEnabled(true); } this.saveOptions(); this.updateMap(); } } catch (err) { console.log("alliance changeSelection error:"); console.log(err); } }, this); this.swObj.allianceSelect = selectBox; // this.mapBox.add(selectBox); /* Select box for POI Type */ selectBox = new qx.ui.form.SelectBox(); var currentSelection = this.visOptions.poi || -2; var makePoiItem = function (model, name) { var item = new qx.ui.form.ListItem(name, null, model); selectBox.add(item); if (currentSelection == model) { selectBox.setSelection([item]); } } FPOI = ClientLib.Data.WorldSector.WorldObjectPointOfInterest.EPOIType; makePoiItem(-2, "<< All >>"); makePoiItem(-1, "<< None >>"); makePoiItem(FPOI.TiberiumMine, "Tiberium"); makePoiItem(FPOI.CrystalMine, "Crystal"); makePoiItem(FPOI.PowerVortex, "Reactor"); makePoiItem(FPOI.Infantery, "Tungsten INF"); makePoiItem(FPOI.Vehicle, "Uranium VEH"); makePoiItem(FPOI.Air, "Aircraft"); makePoiItem(FPOI.Defense, "Resonator DEF"); //makePoiItem(FPOI.TunnelExit,"Tunnel Exit"); /* ClientLib.Base.EPOIType is not consistent with ClientLib.Data.WorldSector.WorldObjectPointOfInterest.EPOIType makePoiItem(ClientLib.Base.EPOIType.AirBonus, "Aircraft GNT (Off Air)"); makePoiItem(ClientLib.Base.EPOIType.CrystalBonus, "Crystal CNH"); makePoiItem(ClientLib.Base.EPOIType.DefenseBonus, "Resonator NT (Def)"); makePoiItem(ClientLib.Base.EPOIType.InfanteryBonus, "Tungsten C (Off Inf)"); makePoiItem(ClientLib.Base.EPOIType.PowerBonus, "Reactor (Power Bonus)"); makePoiItem(ClientLib.Base.EPOIType.TiberiumBonus, "Tiberium CN"); makePoiItem(ClientLib.Base.EPOIType.VehicleBonus, "Uranium C (Off Vehicles)"); */ selectBox.addListener("changeSelection", function (e) { try { if (e != null && e.getData() && e.getData().length > 0) { console.log("POI selected " + e.getData()[0].getModel()); _this.visOptions.poi = e.getData()[0].getModel(); // POI ID or -2 for all this.saveOptions(); this.updateMap(); } } catch (err) { console.log(err); } }, this); this.swObj.poiSelect = selectBox; /* Settings Window */ this.settingsWnd = new qx.ui.window.Window("Map Settings"); this.settingsWnd.setPadding(10); //this.mapBox.setLayout(new qx.ui.layout.Grow()); var layout = new qx.ui.layout.Grid(); layout.setSpacing(5); layout.setColumnAlign(0, "right", "center"); layout.setColumnAlign(1, "left", "center"); layout.setColumnAlign(2, "left", "center"); layout.setColumnAlign(3, "right", "center"); layout.setColumnAlign(4, "left", "center"); this.settingsWnd.setLayout(layout); this.settingsWnd.setShowMaximize(false); this.settingsWnd.setShowMinimize(false); this.settingsWnd.moveTo(this.visOptions.settingsWndBounds.left, this.visOptions.settingsWndBounds.top); this.settingsWnd.setHeight(this.visOptions.settingsWndBounds.height); this.settingsWnd.setWidth(this.visOptions.settingsWndBounds.width); this.settingsWnd.setMinWidth(10); this.settingsWnd.setMinHeight(10); this.settingsWnd.addListener("close", function () { this.visOptions.settingsWndBounds = this.settingsWnd.getBounds(); this.saveOptions(); }, this); /* Reset Button */ var resetAllOptions = new qx.ui.form.Button("Full Reset"); resetAllOptions.set({ appearance : "button-text-small", toolTipText : '<div style="color:#F22">Reset All options to default</div>', }); resetAllOptions.addListener("click", function () { if (confirm("Are you sure? This will return all settings to default.")) { if (isNaN(this.visOptions.settingsPanel.zoomFactor)) this.visOptions.settingsPanel.zoomFactor = 3; this.visOptions = JSON.parse(JSON.stringify(this.visOpt_DEFAULTS)); this.saveOptions(); for (var option in this.visOptions.chk) { //console.log("this.visOptions.chk." + option + " == " + this.visOptions.chk[option]); if (this.swObj.chkBoxFields[option]) { this.swObj.chkBoxFields[option].setValue(this.visOptions.chk[option]); } else { console.log(option + " ::: chkBoxFields does not exist.") } } for (var option in this.visOptions.settingsPanel) { if (option == "chk") { //do nothing } else if (this.swObj.settingFields[option]) { this.swObj.settingFields[option].setValue(String(this.visOptions.settingsPanel[option])); } else { console.log(option + " :: settingFields does not exist.") } } this.updateMap(); this.scrollMapBox(false); } }, this); this.settingsWnd.add(resetAllOptions, { row : 14, column : 4 }); this.makeLbl("- Highlight -", 0, 0); this.makeLbl("Alliance POIs:", 1, 0); this.settingsWnd.add(this.swObj.allianceSelect, { row : 1, column : 1 }); this.refreshIcon = new qx.ui.basic.Image("FactionUI/icons/icon_refresh_funds.png"); this.settingsWnd.add(this.refreshIcon, { row : 1,column : 2 }); this.refreshIcon.addListener("click", function () { this.populateAllianceSelect(); }, this); this.makeLbl("POIs:", 2, 0); this.settingsWnd.add(this.swObj.poiSelect, { row : 2, column : 1 }); this.makeLbl("Alliance POIs:", 3, 0); /* Checkbox for alliance POIs */ this.makeCheckbox("showAlliancePois",3,1); if (this.visOptions.selectedAllianceId == -1) { this.swObj.chkBoxFields.showAlliancePois.setEnabled(false); } this.makeLbl("Own Cities:", 4, 0); /* Checkbox for own bases */ this.makeCheckbox("showOwnCities",4,1); this.makeLbl("Viewport Frame:", 5, 0); /* Checkbox for showSectionFrame */ this.makeCheckbox("showSectionFrame",5,1); bt = new qx.ui.basic.Label("- Colors -").set({ value : '<a href="http://www.w3schools.com/html/html_colornames.asp" style="font-size:16px;font-weight:bold;color:orange" target="_blank">- Colors -</a>', rich : true, selectable : true }); this.settingsWnd.add(bt, { row : 6, column : 1, }); // bt.addListener("click", function() { window.open("http://www.w3schools.com/html/html_colornames.asp") }); this.makeLbl("Alliance Terrain:", 7, 0); this.makeTxt("allianceTerrainColor", 7, 1); this.makeLbl("Forg. Base:", 8, 0); this.makeTxt("baseColor", 8, 1); this.makeLbl("Camp:", 9, 0); this.makeTxt("campColor", 9, 1); this.makeLbl("Player:", 10, 0); this.makeTxt("playerColor", 10, 1); this.makeLbl("Enemy:", 11, 0); this.makeTxt("enemyBaseColor", 11, 1); //this.swObj.settingFields.enemyBaseColor.setEnabled(false); this.makeLbl("Outpost:", 12, 0); this.makeTxt("outpostColor", 12, 1); this.makeLbl("POI:", 13, 0); this.makeTxt("poiColor", 13, 1); this.makeLbl("Tunnel:", 14, 0); this.makeTxt("tunnelColor", 14, 1); this.makeLbl("Own Base:", 15, 0); this.makeTxt("ownBaseColor", 15, 1); //this.swObj.settingFields.ownBaseColor.setEnabled(false); this.makeLbl("Highlight:", 16, 0); this.makeTxt("highlightColor", 16, 1); //this.swObj.settingFields.highlightColor.setEnabled(false); /* Line Options */ this.makeLbl(",.-^-.,", 0, 2, "'-.,.-'", "green"); this.makeLbl("- Line -", 0, 3); this.makeLbl("Show Line", 1, 3); /* Checkbox for showBorderLine1 */ this.makeCheckbox("showBorderLine1",1,4); this.makeLbl("Line Start:", 2, 3); this.makeTxt("line1start", 2, 4); this.makeCoordsSelectionButton("line1start", 2, 5, "\u2607"); this.makeLbl("Line End:", 3, 3); this.makeTxt("line1end", 3, 4); this.makeCoordsSelectionButton("line1end", 3, 5, "\u2613"); this.makeLbl("Line 1 Color:", 4, 3); this.makeTxt("line1color", 4, 4); this.makeLbl("Show Line 2", 5, 3); /* Checkbox for showBorderLine2 */ this.makeCheckbox("showBorderLine2",5,4); this.makeLbl("Line Start:", 6, 3); this.makeTxt("line2start", 6, 4); this.makeCoordsSelectionButton("line2start", 6, 5, "\u2607"); this.makeLbl("Line End:", 7, 3); this.makeTxt("line2end", 7, 4); this.makeCoordsSelectionButton("line2end", 7, 5, "\u2613"); this.makeLbl("Line 2 Color:", 8, 3); this.makeTxt("line2color", 8, 4); this.makeLbl("Fade Map ?", 9, 3); this.makeCheckbox("fadeMap",9, 4); /* Zoom Buttons */ this.makeLbl("Zoom Experimental!", 11, 4, null, "red"); this.makeLbl("Zoom Factor:", 12, 3); this.makeTxt("zoomFactor", 12, 4); this.swObj.settingFields.zoomFactor.setValue(String(this.initZoom)); this.swObj.settingFields.zoomFactor.setTextAlign("right"); this.swObj.settingFields.zoomFactor.setEnabled(false); var btnZoomIn = new qx.ui.form.Button("Zoom In"); btnZoomIn.set({ appearance : "button-text-small", toolTipText : '<div style="color:#FFAAAA">!!!</div>you might need to reload after zooming in', }); btnZoomIn.addListener("click", function () { if (isNaN(this.visOptions.settingsPanel.zoomFactor)) this.visOptions.settingsPanel.zoomFactor = 3; //increment +0.2 this.visOptions.settingsPanel.zoomFactor = Math.round((this.visOptions.settingsPanel.zoomFactor + 0.2) * 10) / 10; this.swObj.settingFields.zoomFactor.setValue(String(this.visOptions.settingsPanel.zoomFactor)); this.saveOptions(); //this.fixScrollBounds(); this.updateMapDelayed(); this.scrollMapBox(true); // re-center }, this); this.settingsWnd.add(btnZoomIn, { row : 13, column : 3, }); var btnZoomOut = new qx.ui.form.Button("Zoom Out"); btnZoomOut.set({ appearance : "button-text-small", //toolTipText : "tuO mooZ" }); this.settingsWnd.add(btnZoomOut, { row : 13, column : 4 }); btnZoomOut.addListener("click", function () { if (isNaN(this.visOptions.settingsPanel.zoomFactor)) this.visOptions.settingsPanel.zoomFactor = 3; this.visOptions.settingsPanel.zoomFactor = Math.round((this.visOptions.settingsPanel.zoomFactor - 0.2) * 10) / 10; this.swObj.settingFields.zoomFactor.setValue(String(this.visOptions.settingsPanel.zoomFactor)); this.saveOptions(); this.updateMap(); this.scrollMapBox(false); // re-center }, this); /* "Apply" button */ var applyOptions = new qx.ui.form.Button("\u2611"); applyOptions.set({ appearance : "button-text-small", toolTipText : "Save and apply changes to lines colors" }); applyOptions.addListener("click", function () { this.saveOptions(); this.updateMap(); this.scrollMapBox(false); }, this); this.settingsWnd.add(applyOptions, { row : 16, column : 5 }); /* this.settingsWnd.addListener("appear", function () { console.log("settingsWnd appear event fired"); // this.populateAllianceSelect(); }, this); */ this.swObj.isLoaded = true; } catch (err) { console.log(err); } }, setMapUpdateTimer : function () { var _this = this; clearTimeout(this.mapUpdateTimer); if (this.mapBox.isVisible()){ this.mapUpdateTimer = setTimeout(function (){ _this.updateMap(); _this.scrollMapBox(); }, 1000); } }, init_mapBox_listeners : function () { // Gets called A LOT while "scrolling" phe.cnc.Util.attachNetEvent(ClientLib.Vis.VisMain.GetInstance().get_Region(), "PositionChange", ClientLib.Vis.PositionChange, this, this.setMapUpdateTimer); this.mapBox.addListener("close", function () { if (this.settingsWnd.isVisible()) { this.visOptions.settingsWndBounds = this.settingsWnd.getBounds(); this.settingsWnd.close(); } this.visOptions.mapBoxBounds = this.mapBox.getBounds(); this.saveOptions(); }, this); this.mapBox.addListener("blur", function () { var _this = this; this.blurInterval = setInterval(function () { if (!_this.settingsWnd.isVisible() && _this.visOptions.chk.fadeMap) { _this.mapBox.setOpacity(0.5); clearInterval(this.blurInterval); } }, 1000) }, this); this.mapBox.addListener("focus", function () { //console.log("focus"); clearInterval(this.blurInterval); this.mapBox.setOpacity(1); }, this); this.mapBox.addListener("mouseover", function () { this.mapBox.focus(); }, this); this.mapBox.addListener("resize", function () { var _this = this; setTimeout(function (e) { _this.scrollMapBox(false); }, 1000); //console.log("resized"); //this.updateMap(); }, this); }, init_settingsButton : function () { /* Settings Button */ var bt = new qx.ui.form.Button("Settings"); bt.set({ appearance : "button-text-small", toolTipText : "Set filters for the map" }); bt.addListener("click", function () { if (this.settingsWnd.isVisible()) { this.settingsWnd.close(); } else { this.settingsWnd.moveTo(this.visOptions.settingsWndBounds.left, this.visOptions.settingsWndBounds.top); this.settingsWnd.open(); } }, this); this.mapBox.getChildControl("captionbar").add(bt, { row : 0, column : 5 }); }, init_mapMouse : function () { var cw = this.canvasWidth; var ch = this.canvasHeight; //this.mapMouseWidget.removeAll(); //this.scrollWidget.removeAll(); var vW = this.visOptions.vpWidth; var vH = this.visOptions.vpHeight; this.mapMouseWidget = new qx.html.Element("canvas", null, { id : "mapCursor", width : cw, height : ch }); var cnv = this.mapMouseWidget.getDomElement(); this.mapMouseCanvas = cnv; var ctx = this.mapMouseCanvas.getContext('2d'); ctx.strokeStyle = "rgb(200,0,0)"; ctx.lineWidth = 1; ctx.beginPath(); ctx.moveTo(vW / 2, vH / 2); ctx.lineTo(cw, ch); ctx.stroke(); }, createMapCanvas : function () { try { var canvas = this.canvasElement.getDomElement(); if (this.mapCanvas == null) { this.mapCanvas = canvas; var _this = this; /* this.mapCanvas.addEventListener("mousedown", function (evt) { //start drag tracking },this); */ this.mapCanvas.addEventListener("mousedown", function (evt) { try { var cnv = _this.mapCanvas.getBoundingClientRect(); var mouseX = evt.clientX - cnv.left; var mouseY = evt.clientY - cnv.top; var zf = _this.visOptions.settingsPanel.zoomFactor; //console.log("clientX:Y:" + evt.clientX + ":" + evt.clientY); //console.log("offsets:" + cnv.left + "," + cnv.top); //console.log("M:" + mouseX + "," + mouseY); var vm = ClientLib.Vis.VisMain.GetInstance(); vm.CenterGridPosition(mouseX / zf, mouseY / zf); _this.scrollMapBox(true); setTimeout(function () { _this.updateMap(); }, 500); } catch (err) { console.log(err); } }, false); } this.updateMap(); this.scrollMapBox(false); } catch (err) { console.log("createMapCanvas error:"); console.log(err); } }, fixScrollBounds : function () { try { var cw = this.canvasWidth; var ch = this.canvasHeight; /* this.scrollWidget.setMinHeight(ch); this.scrollWidget.setMinWidth(cw); this.scrollWidget.setHeight(ch); this.scrollWidget.setWidth(cw); */ this.canvasElement.removeAll(); this.canvasElement = new qx.html.Element("canvas", null, { id : "map", width : cw, height : ch }); //this.mapCanvas = this.canvasElement.getDomElement(); this.createMapCanvas(); /* var ctx = this.mapCanvas.getContext('2d'); ctx.clearRect(0, 0, canvas.width, canvas.height); ctx.canvas.height = ch; ctx.canvas.width = cw; */ } catch (e) { console.log("foooooooooooooook: "); console.log(e); } }, scrollMapBox : function (preFrameFlag) { // ScrollTo try { var vm = ClientLib.Vis.VisMain.GetInstance(); var zf = parseFloat(this.visOptions.settingsPanel.zoomFactor); var viewTopLeftX = vm.get_Region().get_PosX() / vm.get_Region().get_GridWidth() * zf; var viewTopLeftY = vm.get_Region().get_PosY() / vm.get_Region().get_GridHeight() * zf; var viewWidth = vm.get_Region().get_ViewWidth() / vm.get_Region().get_ZoomFactor() / vm.get_Region().get_GridWidth() * zf; var viewHeight = vm.get_Region().get_ViewHeight() / vm.get_Region().get_ZoomFactor() / vm.get_Region().get_GridHeight() * zf; var ownCity = ClientLib.Data.MainData.GetInstance().get_Cities().get_CurrentOwnCity(); var cx = ownCity.get_PosX(); var cy = ownCity.get_PosY(); //console.log("city: "+cx*zf+","+cy*zf); //console.log("view: "+viewTopLeftX+","+viewTopLeftY); //console.log("vh: "+viewHeight); //console.log("vw: "+viewWidth); var mb = this.mapBox.getBounds(); this.scroll.setWidth(mb.width - 37); this.scroll.setHeight(mb.height - 70); var wd = Math.round((mb.width - 37) / 2); var ht = Math.round((mb.height - 70) / 2); this.visOptions.vpWidth = wd; this.visOptions.vpHeight = ht; //console.log("wd: "+wd); //console.log("ht: "+ht); var sx = this.scroll.getScrollX(); var sy = this.scroll.getScrollY(); var stx = Math.round((viewTopLeftX + (viewWidth / 2)) - wd); this.scroll.scrollToX(stx); var sty = Math.round((viewTopLeftY + (viewHeight / 2)) - ht); this.scroll.scrollToY(sty); if (this.visOptions.chk.showSectionFrame && preFrameFlag) { var ctx = this.mapCanvas.getContext('2d'); ctx.strokeStyle = "rgba(255,0,0,0.5)"; ctx.lineWidth = 1; ctx.strokeRect(viewTopLeftX, viewTopLeftY, viewWidth, viewHeight); } } catch (err) { console.log("scrollMapBox error:"); console.log(err); } }, makeLbl : function (name, r, c, tooltiptxt, color) { var lbl = this.swObj.labels["r"+r+"c"+c] = new qx.ui.basic.Label(name); lbl.setTextColor(color || "white"); lbl.setToolTipText(tooltiptxt || ""); lbl.setHeight(28); this.settingsWnd.add(lbl, { row : r, column : c }); }, makeTxt : function (option, r, c, color) { var value = this.visOptions.settingsPanel[option]; var txtField = new qx.ui.form.TextField(String(value)); txtField.setTextColor(color || "white"); this.swObj.settingFields[option] = txtField; this.settingsWnd.add(txtField, { row : r, column : c }); }, makeCheckbox : function (option, r, c) { var o = this.swObj.chkBoxFields[option] = new qx.ui.form.CheckBox(); o.setValue(this.visOptions.chk[option]); o.addListener("changeValue", function () { this.visOptions.chk[option] = o.getValue(); this.saveOptions(); this.updateMap(); },this); this.settingsWnd.add(o, { row : r, column : c }); }, makeCoordsSelectionButton : function (option, row, col, text) { this.swObj.coordButtons[option] = new qx.ui.form.Button(text).set({ appearance : "button-text-small", toolTipText : "Select a target or your own base on the map then click this to get the coords" }); this.settingsWnd.add(this.swObj.coordButtons[option], { row : row, column : col }); this.swObj.coordButtons[option].setWidth(30); this.swObj.coordButtons[option].addListener("click", function () { var x, y; var selObj = ClientLib.Vis.VisMain.GetInstance().get_SelectedObject(); //console.log(selObj); var notSelObj = ClientLib.Data.MainData.GetInstance().get_Cities().get_CurrentCity() || ClientLib.Data.MainData.GetInstance().get_Cities().get_CurrentOwnCity(); //console.log(notSelObj); if (selObj != null) { x = selObj.get_RawX(); y = selObj.get_RawY(); } else if (notSelObj != null) { x = notSelObj.get_PosX(); y = notSelObj.get_PosY(); } var str = x + ":" + y; this.swObj.settingFields[option].setValue(str); this.saveOptions(); this.updateMap(); }, this); }, updateMapDelayed : function () { var _this = this; setTimeout(function(){ _this.updateMap(); },1000); }, updateMap : function () { this.drawingNow = true; var md = ClientLib.Data.MainData.GetInstance(); var w = ClientLib.Data.MainData.GetInstance().get_World(); var vm = ClientLib.Vis.VisMain.GetInstance(); //get_Region().get_ViewWidth() var rg = ClientLib.Vis.VisMain.GetInstance().get_Region(); // GetObjectFromPosition(oporcamp,coords).get_CampType() var canvas = this.mapCanvas; var ctx = canvas.getContext('2d'); var zf = parseFloat(this.visOptions.settingsPanel.zoomFactor); var alliance = md.get_Alliance(); var cx = 0; var cy = 0; var gw = rg.get_GridWidth(); var gh = rg.get_GridHeight(); var hilitePois = []; var sectors = this.getSectors(w); ctx.clearRect(0, 0, canvas.width, canvas.height); /* ERelationType // Ally Enemy NAP Neutral None // 1 3 2 4 0 // ClientLib.Data.MainData.GetInstance().get_Alliance().GetAllianceRelationshipsByType(webfrontend.gui.alliance.DiplomacyPage.ERelationTypeEnemy).l */ this.relations.enemies = md.get_Alliance().GetAllianceRelationshipsByType(webfrontend.gui.alliance.DiplomacyPage.ERelationTypeEnemy, true).l; this.relations.allies = md.get_Alliance().GetAllianceRelationshipsByType(webfrontend.gui.alliance.DiplomacyPage.ERelationTypeAlly, true).l; this.relations.nap = md.get_Alliance().GetAllianceRelationshipsByType(webfrontend.gui.alliance.DiplomacyPage.ERelationTypeNAP, true).l; this.relations.enemiesById = this.makeHash(this.relations.enemies, "OtherAllianceId"); //console.log(this.relations.enemiesById); /* for (var i in this.relations.enemies){ console.log(this.relations.enemies[i]); this.relations.enemies[i].Id; this.relations.enemies[i].OtherAllianceName; this.relations.enemies[i].OtherAllianceId; } */ if (!this.swObj.obfAllianceId) this.swObj.obfAllianceId = this.getMemberNameByType(alliance, "number", 0); if (!this.swObj.obfAllianceName) this.swObj.obfAllianceName = this.getMemberNameByType(alliance, "string", 0); var allianceName = alliance[this.swObj.obfAllianceName]; var sCount = 0; // Main Drawing Loop for (var i in sectors) { var s = sectors[i]; sCount++; for (var x = 0; x < 32; x++) { for (var y = 0; y < 32; y++) { cx = s.ConvertToWorldX(x); cy = s.ConvertToWorldY(y); var wObj = w.GetObjectFromPosition(cx, cy); var rgObj = rg.GetObjectFromPosition(cx * gw, cy * gh); if (wObj != null) { switch (wObj.Type) { case 1: { // player city // console.log("sector id: "+s.get_Id()); var player = s.GetPlayerId(wObj); var alliance = s.GetAlliance(player.Alliance); if (player) console.log("p" + player); if (alliance) console.log("a" + alliance); if (alliance != null && this.visOptions.selectedAllianceId == alliance) { // broken ctx.fillStyle = this.visOptions.settingsPanel.highlightColor; // color var used below for POI highlighting ctx.fillRect(cx * zf, cy * zf, zf, zf); /* } else if (this.relations.enemiesById[allianceId]) { //} else if (this.isEnemy(enemies, alliance, s)) { // broken console.log("Enemy found: "); console.log(wObj); ctx.fillStyle = this.visOptions.settingsPanel.enemyBaseColor; ctx.fillRect(cx * zf, cy * zf, zf, zf); */ } else { if (wObj.PlayerId && s.GetPlayerId(wObj).Id == md.get_Player().id) { ctx.fillStyle = this.visOptions.settingsPanel.ownBaseColor; } else { ctx.fillStyle = this.visOptions.settingsPanel.playerColor; } ctx.fillRect(cx * zf, cy * zf, zf, zf); } break; } case 2: { // forgotten base ctx.fillStyle = this.visOptions.settingsPanel.baseColor; ctx.fillRect(cx * zf, cy * zf, zf, zf); break; } case 3: { // Camp/Outpost // rgObj.get_VisObjectType() 15 // CampType 2 / 3 // current obf prop name GIVCUM // region might have a better solution ctx.fillStyle = (rgObj && rgObj.get_CampType && rgObj.get_CampType() == 3) ? this.visOptions.settingsPanel.outpostColor : this.visOptions.settingsPanel.campColor; ctx.fillRect(cx * zf, cy * zf, zf, zf); break; } case 4: { // POI or tunnel /* Type:ClientLib.Data.WorldSector.WorldObjectPointOfInterest System.Int32 Id ClientLib.Data.WorldSector.WorldObjectPointOfInterest.EPOIType POIType System.Int32 Level System.Int64 OwnerAllianceId System.String OwnerAllianceName System.Void .ctor (ClientLib.Data.WorldSector.ObjectType type ,ClientLib.Data.World world ,System.String details ,System.Int32 pos) wObj: {} --> wObj.Type: 4 wObj.SequenceId: 6805 wObj.BNDYIS: 39 wObj.MYTWLL: 1 wObj.ADKRPM: 8527 wObj.YQTUPE: 123 wObj.HIFKIQ: "Alliance Name" wObj.LSVKAD: {} --> */ //console.log("POI/Tunnel ("+cx+":"+cy+" POIType:"+wObj[this.getNameByIdx(wObj,3)]+"):\n"+this.dump(wObj,"wObj",1,true)); if (!this.obfPOIType) { this.obfPOIType = this.getNameByIdx(wObj, 3); } if (!this.obfWorldObjectPointOfInterestAllianceName) { this.obfWorldObjectPointOfInterestAllianceName = this.getMemberNameByType(wObj, "string", 0); } if (!this.obfWorldObjPOIAllyId) { this.obfWorldObjPOIAllyId = this.getNameByIdx(wObj, 5); } if (wObj[this.obfPOIType] == 0) { // Tunnel ctx.fillStyle = this.visOptions.settingsPanel.tunnelColor; } else { // POI ctx.fillStyle = this.visOptions.settingsPanel.poiColor; // if not checked if (!this.visOptions.chk.showAlliancePois) { if (this.visOptions.poi == -2) { // Selected POI = << All >> hilitePois.push([cx, cy]); } else if (this.visOptions.poi && this.visOptions.poi == wObj[this.obfPOIType]) { // for some reasons, the constants in ClientLib are off by 1 [offset corrected] hilitePois.push([cx, cy]); } // if checked & current POI is from selected Alliance } else if (wObj[this.obfWorldObjPOIAllyId] == this.visOptions.selectedAllianceId) { // if a poi type is selected & current POI is selected type if (this.visOptions.poi >= 0 && this.visOptions.poi == wObj[this.obfPOIType]) { // Selected Alliance POI hilitePois.push([cx, cy]); //if show all POIs selected } else if (this.visOptions.poi == -2) { // Selected POI = << All >> hilitePois.push([cx, cy]); } else { console.log("perhaps visOptions.poi is empty?!"); } } } ctx.fillRect(cx * zf, cy * zf, zf, zf); break; } } } else { var terr = w.GetTerritoryTypeByCoordinates(cx, cy); /* ClientLib.Data.ETerritoryType // 0 1 2 3 4 5 // Own, Alliance, Neutral, Enemy, SpawnZone, Restricted */ switch (terr) { case 0 /* ClientLib.Data.ETerritoryType.Own */ : { ctx.fillStyle = this.visOptions.settingsPanel.ownBaseColor; ctx.fillRect(cx * zf, cy * zf, zf, zf); break; } case 1 /* ClientLib.Data.ETerritoryType.Alliance */ : { ctx.fillStyle = this.visOptions.settingsPanel.allianceTerrainColor; ctx.fillRect(cx * zf, cy * zf, zf, zf); break; } case 2 /* ClientLib.Data.ETerritoryType.Neutral */ : { ctx.fillStyle = "rgba(128,128,128,0.1)"; ctx.fillRect(cx * zf, cy * zf, zf, zf); break; } case 3 /* ClientLib.Data.ETerritoryType.Enemy */ : { if (w.GetOwner(cx, cy) != 1610612736) { // lol ctx.fillStyle = "rgba(255,128,0,0.1)"; ctx.fillRect(cx * zf, cy * zf, zf, zf); } break; } /* case ClientLib.Data.ETerritoryType.SpawnZone: { // 4 ctx.fillStyle = "rgba(255,255,0,0.5)"; ctx.fillRect(cx * zf, cy * zf, zf, zf); break; } case ClientLib.Data.ETerritoryType.Restricted: { // 5 ctx.fillStyle = "rgba(255,0,255,0.5)"; ctx.fillRect(cx * zf, cy * zf, zf, zf); break; } */ } } if (rgObj != null) { switch (rgObj.get_VisObjectType()) { /* ClientLib.Vis.VisObject.EObjectType.RegionCityType // ClientLib.Vis.VisObject.EObjectType.RegionNPCBase // ClientLib.Vis.VisObject.EObjectType.RegionNPCCamp // ClientLib.Vis.VisObject.EObjectType.RegionPointOfInterest */ case 4: { // player if (rgObj.get_Type() == 2) { var allianceId = rgObj.get_AllianceId(); //console.log(allianceId); if (this.relations.enemiesById[allianceId] != null) { //console.log("Enemy found: "); //console.log(rgObj); //save coords and draw later if (!this.relations.enemyCoords[cx]) { this.relations.enemyCoords[cx] = []; } this.relations.enemyCoords[cx][cy] = 1; } //var playerId = rgObj.get_PlayerId(); //var playerName = rgObj.get_PlayerName(); } else if (rgObj.get_Type() == 0) { //self //if (rgObj.IsOwnBase()) { } break; } case 16: { //POI if (rgObj.get_Type() == 0) { //Tunnel } //var ownerId = rgObj.get_OwnerAllianceId(); // returns 0 if owner has no alliance //var ownerName = rgObj.get_OwnerAllianceName(); // returns "" if owner has no alliance break; } } } } } } //console.log("Sector objects scanned: " + sCount); // paint enemies if (this.visOptions.showEnemies) { for (cx in this.relations.enemyCoords) { for (cy in this.relations.enemyCoords[cx]) { ctx.fillStyle = this.visOptions.settingsPanel.enemyBaseColor; ctx.fillRect(cx * zf, cy * zf, zf, zf); if (this.visOptions.showEnemyRange) { ctx.beginPath(); ctx.arc(cx * zf, cy * zf, zf * 20, 0 * Math.PI, 2 * Math.PI); ctx.fillStyle = "rgba(255,0,0,0.02)"; //ctx.fillStyle = "rgba(255,0,0,0.01)"; ctx.fill(); } } } } // paint home bases if (this.visOptions.chk.showOwnCities) { var ownCities = md.get_Cities().get_AllCities().d; for (var i in ownCities) { var city = ownCities[i]; var x = city.get_PosX() * zf; var y = city.get_PosY() * zf; ctx.strokeStyle = this.visOptions.settingsPanel.ownBaseColor; ctx.beginPath(); ctx.arc(x + zf / 2, y + zf / 2, zf * 20, 0 * Math.PI, 2 * Math.PI); ctx.stroke(); ctx.strokeStyle = "rgba(128,128,128,0.2)"; ctx.beginPath(); ctx.arc(x + zf / 2, y + zf / 2, zf * 40, 0 * Math.PI, 2 * Math.PI); ctx.stroke(); } } // paint hilited pois ctx.strokeStyle = this.visOptions.settingsPanel.highlightColor; //"rgba(200,255,200,1)"; ctx.lineWidth = 1; hilitePois.forEach(function (poi) { ctx.lineWidth = 1; ctx.strokeRect(poi[0] * zf - 2, poi[1] * zf - 2, zf + 4, zf + 4); }); // Section Frame var topX = Math.floor(vm.get_Region().get_PosX() / vm.get_Region().get_GridWidth()); var topY = Math.floor(vm.get_Region().get_PosY() / vm.get_Region().get_GridHeight()); var width = vm.get_Region().get_ViewWidth() / vm.get_Region().get_ZoomFactor() / vm.get_Region().get_GridWidth(); var height = vm.get_Region().get_ViewHeight() / vm.get_Region().get_ZoomFactor() / vm.get_Region().get_GridHeight(); //var zfh = Math.round(0.5 * this.visOptions.settingsPanel.zoomFactor); var zfh = zf / 2; ctx.strokeStyle = "rgba(0,255,0,0.5)"; ctx.lineWidth = 1; //console.log("Selection:" + topX + "," + topY + "w:" + width + "," + height); /* broken this.init_mapMouse(); */ if (this.visOptions.chk.showSectionFrame) { ctx.strokeRect(topX * zf, topY * zf, width * zf, height * zf); ctx.fillStyle = "rgba(128,128,128,0.2)"; ctx.fillRect(topX * zf, topY * zf, width * zf, height * zf); } //Draw Border line 1 if (this.visOptions.chk.showBorderLine1) { var a = this.visOptions.settingsPanel.line1start.split(":"); var b = this.visOptions.settingsPanel.line1end.split(":"); ctx.strokeStyle = this.visOptions.settingsPanel.line1color; ctx.lineWidth = zfh; ctx.beginPath(); ctx.moveTo(a[0] * zf + zfh, a[1] * zf + zfh); ctx.lineTo(b[0] * zf + zfh, b[1] * zf + zfh); ctx.stroke(); ctx.lineWidth = 1; } //Draw Border line 2 if (this.visOptions.chk.showBorderLine2) { var a = this.visOptions.settingsPanel.line2start.split(":"); var b = this.visOptions.settingsPanel.line2end.split(":"); ctx.strokeStyle = this.visOptions.settingsPanel.line2color; ctx.lineWidth = zfh; ctx.beginPath(); ctx.moveTo(a[0] * zf + zfh, a[1] * zf + zfh); ctx.lineTo(b[0] * zf + zfh, b[1] * zf + zfh); ctx.stroke(); ctx.lineWidth = 1; } this.drawingNow = false; }, getSectors : function (w) { // work around obfuscated variable names if (this.swObj.obfSectorName == null) { // auto-detect sector name Outer : for (i in w) { if (w[i].d) { var maybeSector = w[i].d; for (j in maybeSector) { if (maybeSector[j].ConvertToWorldX) { this.swObj.obfSectorName = i; //console.log("Sector field:" + i); break Outer; } break; } } } } if (this.swObj.obfSectorName == null) console.log("ERROR: getSectors(): obfuscated property not found!"); if (this.swObj.obfSectorName != null) return w[this.swObj.obfSectorName].d; /* if (w.KIH) { // old june version return w.KIH.d; } else if (w.RBJXOL) { // july return w.RBJXOL.d; } else if (w.IWEESP) { return w.IWEESP.d; // closed beta 2 world } else if (w.HYMYNV) { // mid july release return w.HYMYNV.d; } else if (w.ONQEIH) { // july 18th return w.ONQEIH.d; } */ }, getAlliances : function (sector) { // work around obfuscated variable names. sector == current sector try { if (typeof(sector) == "undefinied" || sector === null) { console.log("ERROR: getAlliances(sector): sector is not defined!"); return null; } if (this.swObj.obfAllianceList == null) { // find alliance list dynamically Outer : for (i in sector) { if (sector[i].d) { var maybeAllianceList = sector[i].d; for (j in maybeAllianceList) { var maybeAlliance = maybeAllianceList[j]; var propnames = []; for (p in maybeAlliance) propnames.push(p); var stringpropcount = 0; var stringpropname = null; if (propnames.length == 13) { for (k = 0; k < propnames.length; k++) { if (typeof(maybeAlliance[propnames[k]]) == "string") { stringpropname = propnames[k]; stringpropcount++; } } if (stringpropcount == 1) { this.swObj.obfAllianceId = propnames[1]; //assuming this is allways the case :-) this.swObj.obfAllianceName = stringpropname; this.swObj.obfAllianceList = i; //console.log("Alliances field:" + i); break Outer; } } break; // test only the first member } } } } if (this.swObj.obfAllianceList == null) { console.log("ERROR: getAlliances(): obfuscated member not found!"); return null; } else return sector[this.swObj.obfAllianceList].d; /* if (sector.WGH) {// june return sector.WGH.d; } else if (sector.QEKQND) {//july return sector.QEKQND.d; } else if (sector.GGUPEV){ // closed beta 2 world return sector.GGUPEV.d; } else if(sector.UFVPYE) { return sector.UFVPYE.d; // July 11, 2012 } else if(sector.UEQLAO) { return sector.UEQLAO.d; // July 18th } */ } catch (err) { console.log("getAlliances error:"); console.log(err); } }, makeHash : function (obj, unique) { //original key is written to the property hashKey if (obj != null) { try { var temp = []; for (var key in obj) { var val = obj[key]; //console.log(val); if (!temp[val[unique]]) { temp[val[unique]] = []; for (var key2 in obj[key]) { if (key2 != unique) { temp[val[unique]][key2] = obj[key][key2]; } else { temp[val[unique]]["hashKey"] = key; } } } else { console.log("makeHash duplicate entry detected"); } } //console.log(temp); return temp; } catch (err) { console.log("makeHash error: "); console.log(err); } } else { return false; } }, isEnemy : function (enemies, alliance, sector) { if (alliance == null) return false; var enemy = enemies.l.filter(function (ele) { return ele.OtherAllianceId == alliance.Id; }); console.log(enemy); return enemy.length > 0; }, listAllAlliances : function () { var alliances = []; var w = ClientLib.Data.MainData.GetInstance().get_World(); if (!w) console.log("ERROR: get_World() failed!"); var sectors = this.getSectors(w); if (!sectors) console.log("ERROR: getSectors() failed!"); for (var i in sectors) { // m_sectors var s = sectors[i]; var all = this.getAlliances(s); if (!all) console.log("ERROR: getAlliances() failed!"); for (var j in all) { // m_alliances var a = all[j]; alliances.push({ id : a[this.swObj.obfAllianceId], name : a[this.swObj.obfAllianceName] }); } } alliances.sort(function (s1, s2) { var name1 = s1.name.toLowerCase(); var name2 = s2.name.toLowerCase(); if (name1 < name2) return -1; if (name1 > name2) return 1; return 0; }); var allianceMap = {}; alliances.forEach(function (it) { allianceMap[it.id] = it; }); return allianceMap; }, populateAllianceSelect : function () { console.log("updating Filter"); var md = ClientLib.Data.MainData.GetInstance(); this.swObj.allianceSelect.removeAll(); this.swObj.allianceListItem["-1"] = new qx.ui.form.ListItem("<< None >>", null, -1); this.swObj.allianceSelect.add(this.swObj.allianceListItem["-1"]); var alliances = this.listAllAlliances(); // expensive operation for (i in alliances) { var a = alliances[i]; this.swObj.allianceListItem[a.id] = new qx.ui.form.ListItem(a.name, null, a.id); if (a.id == this.visOptions.selectedAllianceId) { selectedItem = tempItem; } this.swObj.allianceSelect.add(this.swObj.allianceListItem[a.id]); } if (this.visOptions.selectedAllianceId != -1) { this.swObj.allianceSelect.setSelection([selectedItem]); } //this.swObj.allianceSelect.setEnabled(true); if (this.visOptions.selectedAllianceId != -1) { this.swObj.chkBoxFields.showAlliancePois.setEnabled(true); } //console.log([selectedItem]); this.alliancesAreLoaded = true; }, findAllianceById : function (s, id) { var ra = null; if (id != 0) { for (var x = 1; s.GetAlliance(x) != null; x++) { var a = s.GetAlliance(x); if (a.FGTNFZ == id) { ra = a; } } } return ra; }, getMousePos : function (canvas, evt) { // get canvas position var cnv = canvas; var top = 0; var left = 0; while (cnv && cnv.tagName != 'BODY') { top += cnv.offsetTop; left += cnv.offsetLeft; cnv = cnv.offsetParent; } // return relative mouse position var mouseX = evt.clientX - left + window.pageXOffset; var mouseY = evt.clientY - top + window.pageYOffset; return { x : mouseX, y : mouseY }; }, saveOptions : function () { for (var option in this.visOptions.settingsPanel) { if (this.swObj.settingFields[option]) { this.visOptions.settingsPanel[option] = this.swObj.settingFields[option].getValue(); } else { console.log(option + " : settingFields does not exist. (applyOptions)") } } if (localStorage) { var str = JSON.stringify(this.visOptions); localStorage.setItem("TAMapStorage", str); } }, toggleMap : function () { if (this.mapBox.isVisible()) { this.visOptions.mapBoxBounds = this.mapBox.getBounds(); this.saveOptions(); this.mapBox.close(); } else { this.mapBox.open(); } /* //this.mapBox.open(); //var debugOutput = ""; //var sector = mainData.get_World().GetWorldSectorByCoords(current_city.get_PosX(), current_city.get_PosY()); //for (i in sector.m_Objects.d) { // debugOutput += JSON.stringify(sector.m_Objects.d[i]) + "<br>"; //} //console.log(debugOutput); // this.canvasElement.setValue(debugOutput); //var canvas = this.canvasElement.getDomElement(); //console.log("Canvas:" + canvas); //var ctx = canvas.getContext('2d'); //console.log(ctx); //ctx.fillStyle = "rgb(200,0,0)"; //ctx.fillRect (10, 10, 55, 50); */ }, getNameByIdx : function (object, idx) { var i = 0; for (var n in object) { if (i == idx) return n; i++; } return null; }, getMemberNameByType : function (object, type, idx) { var i = 0; for (var n in object) { var valueType = typeof(object[n]); //console.log(n+" "+valueType); if (type == valueType) { if (i == idx) return n; i++; } } return null; }, dump : function (object, rootName, deep, includeFunction) { //console.log("dump "+rootName); var dumpInternal = function (obj, path) { //console.log("DEBUG: dumpInternal(obj, "+path+") ind:"+ind+", deep:"+deep+", output.length:"+s.length); if (obj === null) { s += "" + path + ": {null}" + "\n"; return; } else if (obj === undefined) { s += "" + path + ": {undefined}" + "\n"; return; } var valueType = typeof(obj); switch (valueType) { case "function": return; // try{var fr=obj();}catch(ex){var fr=ex;} // s+= "" + path +": "+ "{function} returns: "+fr + "\n";return; case "object": s += "" + path + ": {} -->" /*+ propValue.toString().substr(0,20)*/ + "\n"; break; case "boolean": s += "" + path + ": " + obj.toString() + "\n"; return; case "number": s += "" + path + ": " + obj.toString() + "\n"; return; case "string": s += "" + path + ": \"" + obj.toString() + "\"\n"; return; default: s += "" + path + " (" + valueType + "): " + obj.toString() + "\n"; return; } for (var o in objs) { if (o === obj) { s += "{!Recursion stoped!}\n"; return; } else objs.push(obj); } var members = []; for (var p in obj) members.push(p); if (members.length > 1000) { console.log("WARNING: dump() Too much members! " + members.length); return; } //TODO if (deep > 0 && ind >= deep) return; if (/.GHPRYH$/.test()) return; //TODO if (path.length > 30) { console.log("WARNING: dump() Path too long!"); return; } //TODO ind++; for (var propName in obj) { dumpInternal(obj[propName], path + "." + propName); } ind--; } var objs = []; var ind = 0; var s = ""; if (typeof(rootName) == 'undefined') rootName = "*"; if (typeof(deep) == 'undefined') deep = 1; if (typeof(includeFunction) == 'undefined') includeFunction = false; try { dumpInternal(object, rootName); } catch (ex) { console.log("ERROR: dump() > " + ex); } return s; } } }); } function TAMap_checkIfLoaded() { try { if (typeof qx != 'undefined') { var a = qx.core.Init.getApplication(); // application var mb = qx.core.Init.getApplication().getMenuBar(); if (a && mb) { createMapTweak(); window.TAMap.getInstance().initialize(); } else window.setTimeout(TAMap_checkIfLoaded, 1000); } else { window.setTimeout(TAMap_checkIfLoaded, 1000); } } catch (err) { if (typeof console != 'undefined') console.log(err); else if (window.opera) opera.postError(err); else GM_log(err); } } if (/commandandconquer\.com/i.test(document.domain)) { window.setTimeout(TAMap_checkIfLoaded, 1000); } } // injecting, because there seem to be problems when creating game interface with unsafeWindow var TAMapScript = document.createElement("script"); var txt = TAMap_mainFunction.toString(); TAMapScript.innerHTML = "(" + txt + ")();"; TAMapScript.type = "text/javascript"; if (/commandandconquer\.com/i.test(document.domain)) { document.getElementsByTagName("head")[0].appendChild(TAMapScript); } })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址