master
1function(context, args) {
2 var l = #s.scripts.lib(),
3 d = #s.dtr.lib();
4
5 args = args || {};
6 if (!(args.name || args.type || args.tier || args.class || args.cost)) {
7 var balance = #s.accts.balance();
8 args.cost = { "$lte": balance };
9 }
10
11 var order = args.order || [ "tier", "type", "name", "rarity" ],
12 list = #s.market.browse(args),
13 market = {};
14
15 if (list.length === 0) {
16 return {
17 ok: false,
18 msg: "No suitable upgrades found.\nUsage: " + context.this_script + ' { name:"<upgrade name", type:"<lock, script_space, script>", tier:<1-4>, class:"<architect, executive, infitrator, scavenger>", cost:<num or GC str>, order:<array of properties> }'
19 };
20 }
21
22 l.each(list, function(_, item) {
23 var id = "" + item.rarity + "-" + item.name;
24 if (!(null === item.i || id in market)) {
25 market[id] = item;
26 }
27 });
28
29 list = [];
30 for (var id in market) {
31 var item = #s.market.browse({ i: market[id].i });
32 for (var key in item.upgrade)
33 item[key] = item.upgrade[key];
34 item.class = item.up_class;
35 list.push(item);
36 }
37
38 list.sort(function(a, b) {
39 var result = 0;
40 for (var key in order) {
41 key = order[key];
42 result = a[key] < b[key] ? -1 : a[key] > b[key] ? 1 : 0;
43 if (0 !== result) break;
44 }
45 return result;
46 });
47
48 var classes = [ "architect", "infiltrator", "scavenger", "executive" ];
49
50 var titles = [
51 { name: "Name", key: "name" },
52 { name: "Rarity", key: "rarity", func: d.coloredRarityLevel },
53 { name: "Cost", key: "cost", dir: -1, func: d.expandGC },
54 { name: "Token", key: "i" },
55 { name: "Type", key: "type" },
56 { name: "Class", key: "class", func: function(value) {
57 return classes[value] || "none";
58 }},
59 { name: "Tier", key: "tier", dir: 0 } ];
60
61 titles.sort(function(a, b) {
62 return order.indexOf(a.key) != -1 ? order.indexOf(b.key) != -1 ? order.indexOf(a.key) - order.indexOf(b.key) : -1 : order.indexOf(b.key) != -1 ? 1 : 0;
63 });
64
65 return {
66 ok: true,
67 msg: d.columns(list, titles, {})
68 };
69}