-
Notifications
You must be signed in to change notification settings - Fork 0
/
prototype.terminal.js
98 lines (89 loc) · 2.73 KB
/
prototype.terminal.js
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
/* this defines a "wrapper" so that our links are able to have a
* memory which persists between ticks
* Credit to user "joethebarber" in the official Screeps Slack server
*/
Object.defineProperty(StructureTerminal.prototype, 'memory', {
get: function () {
if (!Memory.structures) {
Memory.structures = {};
}
if (!Memory.structures[this.id]) {
Memory.structures[this.id] = {};
}
return Memory.structures[this.id];
},
enumerable: false,
configurable: true,
});
StructureTerminal.prototype.marketSell = function () {
const saleItem = this.memory.sellOrder.itemType;
const minPrice = this.memory.sellOrder.minPrice;
var quantity = this.memory.sellOrder.quantity;
if (this.memory.sellOrder.quantity == 0) {
return;
} else if (
this.store.getUsedCapacity(RESOURCE_ENERGY) >= 500 &&
this.store.getUsedCapacity(saleItem) >= quantity
) {
let orders = Game.market.getAllOrders(
(order) =>
order.resourceType == saleItem &&
order.type == ORDER_BUY &&
Game.market.calcTransactionCost(200, this.room.name, order.roomName) <
400
);
console.log(saleItem + ' buy orders found: ' + orders.length);
if (orders.length == 0) {
return;
}
orders.sort(function (a, b) {
return b.price - a.price;
});
console.log('Best price: ' + orders[0].price);
if (orders[0].price >= minPrice) {
let result = Game.market.deal(orders[0].id, 200, this.room.name);
if (result == 0) {
console.log('Order completed successfully');
this.memory.sellOrder.quantity -= 200;
return console.log(quantity + ' units remaining in current sell order');
}
}
}
};
StructureTerminal.prototype.marketBuy = function () {
const purchaseItem = this.memory.purchaseOrder.itemType;
const maxPrice = this.memory.purchaseOrder.maxPrice;
var quantity = this.memory.purchaseOrder.quantity;
if (this.memory.purchaseOrder.quantity == 0) {
return;
} else if (
this.store.getUsedCapacity(RESOURCE_ENERGY) >= 500 &&
this.store.getFreeCapacity() >= quantity
) {
let orders = Game.market.getAllOrders(
(order) =>
order.resourceType == purchaseItem &&
order.type == ORDER_SELL &&
Game.market.calcTransactionCost(200, this.room.name, order.roomName) <
400
);
console.log(purchaseItem + ' sell orders found: ' + orders.length);
if (orders.length == 0) {
return;
}
orders.sort(function (a, b) {
return a.price - b.price;
});
console.log('Best price: ' + orders[0].price);
if (orders[0].price <= maxPrice) {
let result = Game.market.deal(orders[0].id, 200, this.room.name);
if (result == 0) {
console.log('Order completed successfully');
this.memory.purchaseOrder.quantity -= 200;
return console.log(
quantity + ' units remaining in current purchase order'
);
}
}
}
};