Skip to content

Commit 7a485fb

Browse files
committed
Fucking highscores
1 parent 7771134 commit 7a485fb

File tree

7 files changed

+65
-60
lines changed

7 files changed

+65
-60
lines changed

code/__HELPERS/cmp.dm

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ var/cmp_field = "name"
2929
/proc/cmp_records_dsc(datum/data/record/a, datum/data/record/b)
3030
return sorttext(a.fields[cmp_field], b.fields[cmp_field])
3131

32+
/proc/cmp_records_numerically(datum/data/record/a, datum/data/record/b)
33+
return b.fields[cmp_field] - a.fields[cmp_field]
34+
3235
/proc/cmp_ckey_asc(client/a, client/b)
3336
return sorttext(b.ckey, a.ckey)
3437

code/__HELPERS/sorts/TimSort.dm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,4 @@
1414

1515
sortInstance.timSort(fromIndex, toIndex)
1616

17-
return L
17+
return L

code/controllers/subsystem/init/persistence_misc.dm

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -232,37 +232,37 @@ var/datum/subsystem/persistence_misc/SSpersistence_misc
232232
log_debug("[name] task found an empty file on [file_path]")
233233
return
234234
for(var/list/L in to_read)
235-
var/datum/record/money/record = new(L["ckey"], L["role"], L["cash"], L["shift_duration"], L["date"])
235+
var/datum/data/record/money/record = new(L["ckey"], L["role"], L["cash"], L["shift_duration"], L["date"])
236236
data += record
237237

238238
/datum/persistence_task/highscores/on_shutdown()
239239
var/list/L = list()
240-
for(var/datum/record/money/record in data)
240+
for(var/datum/data/record/money/record in data)
241241
L += list(record.vars)
242242
write_file(L)
243243

244244
/datum/persistence_task/highscores/proc/insert_records(list/records)
245245
data += records
246246
global.cmp_field = "cash"
247-
sortTim(data, /proc/cmp_list_by_element_desc)
247+
sortTim(data, /proc/cmp_records_numerically)
248248
if (data.len > 5)
249249
data.Cut(6) // we only store the top 5
250-
for(var/datum/record/money/record in data)
250+
for(var/datum/data/record/money/record in data)
251251
if(record in records)
252252
if(data[1] == record)
253253
announce_new_highest_record(record)
254254
else
255255
announce_new_record(record)
256256

257-
/datum/persistence_task/highscores/proc/announce_new_highest_record(var/datum/record/money/record)
257+
/datum/persistence_task/highscores/proc/announce_new_highest_record(var/datum/data/record/money/record)
258258
var/name = "Richest escape ever"
259-
var/desc = "You broke the record of the richest escape! $[record.cash] chips accumulated."
260-
give_award(record.ckey, /obj/item/weapon/reagent_containers/food/drinks/golden_cup, name, desc)
259+
var/desc = "You broke the record of the richest escape! $[record.fields["cash"]] chips accumulated."
260+
give_award(record.fields["ckey"], /obj/item/weapon/reagent_containers/food/drinks/golden_cup, name, desc)
261261

262-
/datum/persistence_task/highscores/proc/announce_new_record(var/datum/record/money/record)
262+
/datum/persistence_task/highscores/proc/announce_new_record(var/datum/data/record/money/record)
263263
var/name = "Good rich escape"
264-
var/desc = "You made it to the top 5! You accumulated $[record.cash]."
265-
give_award(record.ckey, /obj/item/clothing/accessory/medal/gold, name, desc, FALSE)
264+
var/desc = "You made it to the top 5! You accumulated $[record.fields["cash"]]."
265+
give_award(record.fields["ckey"], /obj/item/clothing/accessory/medal/gold, name, desc, FALSE)
266266

267267
/datum/persistence_task/highscores/proc/clear_records()
268268
data = list()
@@ -273,15 +273,15 @@ var/datum/subsystem/persistence_misc/SSpersistence_misc
273273
name = "Trader shoal highscores"
274274
file_path = "data/persistence/trader_highscores.json"
275275

276-
/datum/persistence_task/highscores/trader/announce_new_highest_record(var/datum/record/money/record)
276+
/datum/persistence_task/highscores/trader/announce_new_highest_record(var/datum/data/record/money/record)
277277
var/name = "Richest shoal haul ever"
278-
var/desc = "You broke the record of the richest shoal haul! $[record.cash] chips accumulated."
279-
give_award(record.ckey, /obj/item/weapon/reagent_containers/food/drinks/golden_cup, name, desc)
278+
var/desc = "You broke the record of the richest shoal haul! $[record.fields["cash"]] chips accumulated."
279+
give_award(record.fields["ckey"], /obj/item/weapon/reagent_containers/food/drinks/golden_cup, name, desc)
280280

281-
/datum/persistence_task/highscores/trader/announce_new_record(var/datum/record/money/record)
281+
/datum/persistence_task/highscores/trader/announce_new_record(var/datum/data/record/money/record)
282282
var/name = "Good rich shoal haul"
283-
var/desc = "You made it to the top 5! You accumulated $[record.cash]."
284-
give_award(record.ckey, /obj/item/clothing/accessory/medal/gold, name, desc, FALSE)
283+
var/desc = "You made it to the top 5! You accumulated $[record.fields["cash"]]."
284+
give_award(record.fields["ckey"], /obj/item/clothing/accessory/medal/gold, name, desc, FALSE)
285285

286286
//stores map votes for code/modules/html_interface/voting/voting.dm
287287
/datum/persistence_task/vote

code/game/gamemodes/endgame/scoreboard/misc_score.dm

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@
7171
for(var/obj/item/weapon/spacecash/C2 in get_contents_in_object(player, /obj/item/weapon/spacecash))
7272
cashscore += (C2.amount * C2.worth)
7373

74-
var/datum/record/money/record = new(player.key, player.job, cashscore)
74+
var/datum/data/record/money/record = new(player.key, player.job, cashscore)
7575
rich_escapes += record
7676

7777
if(cashscore > score.richestcash)
@@ -91,7 +91,7 @@
9191
if(TR.source_name == player.real_name)
9292
shoal_amount += text2num(TR.amount)
9393
if(shoal_amount > 0)
94-
var/datum/record/money/record = new(player.key, player.job, shoal_amount)
94+
var/datum/data/record/money/record = new(player.key, player.job, shoal_amount)
9595
rich_shoals += record
9696
if(shoal_amount > score.biggestshoalcash)
9797
score.biggestshoalcash = shoal_amount

code/game/gamemodes/endgame/scoreboard/scoreboard.dm

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -312,27 +312,27 @@ var/global/datum/controller/gameticker/scoreboard/score = new()
312312
var/datum/persistence_task/highscores/leaderboard = score.money_leaderboard
313313
dat += "<b>MONTHLY TOP 5 RICHEST ESCAPEES:</b><br>"
314314
var/i = 1
315-
for(var/datum/record/money/entry in leaderboard.data)
316-
var/cash = num2text(entry.cash, 12)
317-
var/list/split_date = splittext(entry.date, "-")
315+
for(var/datum/data/record/money/entry in leaderboard.data)
316+
var/cash = num2text(entry.fields["cash"], 12)
317+
var/list/split_date = splittext(entry.fields["date"], "-")
318318
if(text2num(split_date[2]) != text2num(time2text(world.timeofday, "MM")))
319319
leaderboard.clear_records()
320320
dat += "No rich escapees yet!"
321321
break
322322
else
323-
dat += "[i++]) <b>$[cash]</b> by <b>[entry.ckey]</b> ([entry.role]). That shift lasted [entry.shift_duration]. Date: [entry.date]<br>"
323+
dat += "[i++]) <b>$[cash]</b> by <b>[entry.fields["ckey"]]</b> ([entry.fields["role"]]). That shift lasted [entry.fields["shift_duration"]]. Date: [entry.fields["date"]]<br>"
324324
var/datum/persistence_task/highscores/trader/leaderboard2 = score.shoal_leaderboard
325325
dat += "<br><b>MONTHLY TOP 5 RICHEST TRADERS:</b><br>"
326326
i = 1
327-
for(var/datum/record/money/entry in leaderboard2.data)
328-
var/cash = num2text(entry.cash, 12)
329-
var/list/split_date = splittext(entry.date, "-")
327+
for(var/datum/data/record/money/entry in leaderboard2.data)
328+
var/cash = num2text(entry.fields["cash"], 12)
329+
var/list/split_date = splittext(entry.fields["date"], "-")
330330
if(text2num(split_date[2]) != text2num(time2text(world.timeofday, "MM")))
331331
leaderboard2.clear_records()
332332
dat += "No rich traders yet!"
333333
break
334334
else
335-
dat += "[i++]) <b>$[cash]</b> by <b>[entry.ckey]</b>. That shift lasted [entry.shift_duration]. Date: [entry.date]<br>"
335+
dat += "[i++]) <b>$[cash]</b> by <b>[entry.fields["ckey"]]</b>. That shift lasted [entry.fields["shift_duration"]]. Date: [entry.fields["date"]]<br>"
336336
return dat
337337

338338
/mob/proc/display_round_end_scoreboard()

code/game/gamemodes/highscores.dm

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
1-
/datum/record/money
2-
var/ckey
3-
var/role
4-
var/cash
5-
var/shift_duration
6-
var/date
1+
/datum/data/record/money
2+
fields = list(
3+
"ckey" = "",
4+
"role" = "",
5+
"cash" = -999999,
6+
"shift_duration" = -999999,
7+
"date" = "0000-00-00",
8+
)
79

8-
/datum/record/money/New(ckey, role, cash, shift_duration = worldtime2text(), date = SQLtime())
9-
src.ckey = ckey
10-
src.role = role
11-
src.cash = cash
12-
src.shift_duration = shift_duration
13-
src.date = date
10+
/datum/data/record/money/New(ckey, role, cash, shift_duration = worldtime2text(), date = SQLtime())
11+
fields["ckey"] = ckey
12+
fields["role"] = role
13+
fields["cash"] = cash
14+
fields["shift_duration"]= shift_duration
15+
fields["date"] = date

code/modules/unit_tests/highscores.dm

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,36 +3,36 @@
33
task.file_path = "data/persistence/money_highscores_test.json"
44
task.clear_records()
55

6-
var/datum/record/money/test_record = new("somebody", "Assistant", 40000)
7-
var/datum/record/money/test_record2 = new("a condom", "Captain", 35000)
8-
var/datum/record/money/test_record3 = new("this should not appear", "Nobody", 10000)
9-
var/datum/record/money/test_record4 = new("cuban pete", "Miner", 50000)
10-
var/datum/record/money/test_record5 = new("pedro cubano", "Miner", 30000)
11-
var/datum/record/money/test_record6 = new("frank sinatra", "Miner", 9999999)
6+
var/datum/data/record/money/test_record = new("somebody", "Assistant", 40000)
7+
var/datum/data/record/money/test_record2 = new("a condom", "Captain", 35000)
8+
var/datum/data/record/money/test_record3 = new("this should not appear", "Nobody", 10000)
9+
var/datum/data/record/money/test_record4 = new("cuban pete", "Miner", 50000)
10+
var/datum/data/record/money/test_record5 = new("pedro cubano", "Miner", 30000)
11+
var/datum/data/record/money/test_record6 = new("frank sinatra", "Miner", 9999999)
1212
var/list/records = list(test_record, test_record2, test_record3, test_record4, test_record5, test_record6)
1313

1414
task.insert_records(records)
1515

16-
assert_eq(task.data[1].cash, 9999999)
17-
assert_eq(task.data[2].cash, 50000)
18-
assert_eq(task.data[3].cash, 40000)
19-
assert_eq(task.data[4].cash, 35000)
20-
assert_eq(task.data[5].cash, 30000)
16+
assert_eq(task.data[1].fields["cash"], 9999999)
17+
assert_eq(task.data[2].fields["cash"], 50000)
18+
assert_eq(task.data[3].fields["cash"], 40000)
19+
assert_eq(task.data[4].fields["cash"], 35000)
20+
assert_eq(task.data[5].fields["cash"], 30000)
2121

22-
assert_eq(task.data[1].role, "Miner")
23-
assert_eq(task.data[2].role, "Miner")
24-
assert_eq(task.data[3].role, "Assistant")
25-
assert_eq(task.data[4].role, "Captain")
26-
assert_eq(task.data[5].role, "Miner")
22+
assert_eq(task.data[1].fields["role"], "Miner")
23+
assert_eq(task.data[2].fields["role"], "Miner")
24+
assert_eq(task.data[3].fields["role"], "Assistant")
25+
assert_eq(task.data[4].fields["role"], "Captain")
26+
assert_eq(task.data[5].fields["role"], "Miner")
2727

2828
if(task.data.len > 5)
2929
fail("[task.name] is storing more than five entries. Len: [task.data.len]")
3030

3131
task.on_shutdown()
3232
task.on_init()
3333

34-
assert_eq(task.data[1].cash, 9999999)
35-
assert_eq(task.data[2].cash, 50000)
36-
assert_eq(task.data[3].cash, 40000)
37-
assert_eq(task.data[4].cash, 35000)
38-
assert_eq(task.data[5].cash, 30000)
34+
assert_eq(task.data[1].fields["cash"], 9999999)
35+
assert_eq(task.data[2].fields["cash"], 50000)
36+
assert_eq(task.data[3].fields["cash"], 40000)
37+
assert_eq(task.data[4].fields["cash"], 35000)
38+
assert_eq(task.data[5].fields["cash"], 30000)

0 commit comments

Comments
 (0)