-
Notifications
You must be signed in to change notification settings - Fork 13
Expand file tree
/
Copy pathmigrate-screeps-room.user.js
More file actions
106 lines (87 loc) · 3.96 KB
/
Copy pathmigrate-screeps-room.user.js
File metadata and controls
106 lines (87 loc) · 3.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
// ==UserScript==
// @name Migrate room to simulator
// @namespace https://screeps.com/
// @version 1.4
// @author Mark Bertels, Esryok
// @run-at context-menu
// @grant none
// @match https://*/*
// ==/UserScript==
function applyTerrain(terrain) {
var roomElement = angular.element($('section.room'));
var room = roomElement.scope().Room;
var injector = roomElement.injector();
var memory = injector.get("MemoryStorage");
var terrainObj = memory.get("rooms.terrain");
var roomTerrainData = _.find(terrainObj, { room: "sim" });
roomTerrainData.terrain = terrain;
var connection = injector.get("Connection");
connection.getRoomTerrain().then((data) => {
room.terrain = data;
});
}
function adjustRoomDataForCustomMode(roomData) {
var gameElement = angular.element($('body'));
var memory = gameElement.injector().get("MemoryStorage");
let currentTime = angular.element($('section.room')).scope().Room.gameTime;
console.log("current time is", currentTime);
let forceUser = gameElement.injector().get("Auth").Me;
for (let index in roomData.objects) {
let object = roomData.objects[index];
if (object.nextRegenerationTime)
object.nextRegenerationTime = Math.max(1, object.nextRegenerationTime - currentTime);
if (object.cooldownTime)
object.cooldownTime = Math.max(1, object.cooldownTime - currentTime);
if (object.nextDecayTime)
object.nextDecayTime = Math.max(1, object.nextDecayTime - currentTime);
if (object.ageTime)
object.ageTime = Math.max(1, object.ageTime - currentTime);
console.log(object.name, object.ageTime);
if (object.user)
object.user = forceUser._id;
}
return roomData;
}
function migrateRoomToSimulation() {
var open = window.open;
window.open = () => {
return {
document: {
write: function (savedRoomText) {
window.open = open;
console.log("Room data cached");
let roomData = adjustRoomDataForCustomMode(JSON.parse(savedRoomText));
var gameElement = angular.element($('body'));
var memory = gameElement.injector().get("MemoryStorage");
var destroyWatcher = gameElement.scope().$watch(function () { return (memory.get("gametime")); }, function (newVal, oldVal) {
console.log("game time changed", oldVal, "=>", newVal);
if (newVal === 1) {
console.log("Sim room ready");
try {
var roomScope_1 = angular.element($('section.room')).scope();
var room_1 = roomScope_1.Room;
console.log("Applying terrain...");
applyTerrain(roomData.terrain[0].terrain);
console.log("Restoring...");
room_1.restoreData = JSON.stringify(roomData);
room_1.restore();
}
catch (e) {
console.log("Migration failed", e);
}
destroyWatcher();
}
});
location.href = "https://screeps.com/a/#!/sim/custom";
}
}
};
};
var roomScope = angular.element($('section.room')).scope();
var room = roomScope.Room;
room.save();
}
$(function () {
// push the load to the end of the event queue
setTimeout(migrateRoomToSimulation);
});