mirror of
https://github.com/fulpstation/fulpstation.git
synced 2025-12-09 16:09:15 +00:00
Drops byond hub support and adds score and top 50 browsers. Requires DB changes and manual creation of migration script if we want to keep old achievements so no random merges please.
167 lines
5.7 KiB
Plaintext
167 lines
5.7 KiB
Plaintext
//Misc Medal hub IDs
|
|
#define MEDAL_METEOR "Your Life Before Your Eyes"
|
|
#define MEDAL_PULSE "Jackpot"
|
|
#define MEDAL_TIMEWASTE "Overextended The Joke"
|
|
#define MEDAL_RODSUPLEX "Feat of Strength"
|
|
#define MEDAL_CLOWNCARKING "Round and Full"
|
|
#define MEDAL_THANKSALOT "The Best Driver"
|
|
#define MEDAL_HELBITALJANKEN "Hel-bent on Winning"
|
|
#define MEDAL_MATERIALCRAFT "Getting an Upgrade"
|
|
|
|
|
|
//Boss medals
|
|
|
|
// Medal hub IDs for boss medals (Pre-fixes)
|
|
#define BOSS_MEDAL_ANY "Boss Killer"
|
|
#define BOSS_MEDAL_MINER "Blood-drunk Miner Killer"
|
|
#define BOSS_MEDAL_BUBBLEGUM "Bubblegum Killer"
|
|
#define BOSS_MEDAL_COLOSSUS "Colossus Killer"
|
|
#define BOSS_MEDAL_DRAKE "Drake Killer"
|
|
#define BOSS_MEDAL_HIEROPHANT "Hierophant Killer"
|
|
#define BOSS_MEDAL_LEGION "Legion Killer"
|
|
#define BOSS_MEDAL_TENDRIL "Tendril Exterminator"
|
|
#define BOSS_MEDAL_SWARMERS "Swarmer Beacon Killer"
|
|
|
|
#define BOSS_MEDAL_MINER_CRUSHER "Blood-drunk Miner Crusher"
|
|
#define BOSS_MEDAL_BUBBLEGUM_CRUSHER "Bubblegum Crusher"
|
|
#define BOSS_MEDAL_COLOSSUS_CRUSHER "Colossus Crusher"
|
|
#define BOSS_MEDAL_DRAKE_CRUSHER "Drake Crusher"
|
|
#define BOSS_MEDAL_HIEROPHANT_CRUSHER "Hierophant Crusher"
|
|
#define BOSS_MEDAL_LEGION_CRUSHER "Legion Crusher"
|
|
#define BOSS_MEDAL_SWARMERS_CRUSHER "Swarmer Beacon Crusher"
|
|
|
|
// Medal hub IDs for boss-kill scores
|
|
#define BOSS_SCORE "Bosses Killed"
|
|
#define MINER_SCORE "BDMs Killed"
|
|
#define BUBBLEGUM_SCORE "Bubblegum Killed"
|
|
#define COLOSSUS_SCORE "Colossus Killed"
|
|
#define DRAKE_SCORE "Drakes Killed"
|
|
#define HIEROPHANT_SCORE "Hierophants Killed"
|
|
#define LEGION_SCORE "Legion Killed"
|
|
#define SWARMER_BEACON_SCORE "Swarmer Beacs Killed"
|
|
#define TENDRIL_CLEAR_SCORE "Tendrils Killed"
|
|
|
|
|
|
|
|
//Migration script generation
|
|
//Replace hub information and fire to generate hub_migration.sql script to use.
|
|
/mob/verb/generate_migration_script()
|
|
set name = "Generate Hub Migration Script"
|
|
|
|
var/hub_address = "REPLACEME"
|
|
var/hub_password = "REPLACEME"
|
|
|
|
var/list/valid_medals = list(
|
|
MEDAL_METEOR,
|
|
MEDAL_PULSE,
|
|
MEDAL_TIMEWASTE,
|
|
MEDAL_RODSUPLEX,
|
|
MEDAL_CLOWNCARKING,
|
|
MEDAL_THANKSALOT,
|
|
MEDAL_HELBITALJANKEN,
|
|
MEDAL_MATERIALCRAFT,
|
|
BOSS_MEDAL_ANY,
|
|
BOSS_MEDAL_MINER,
|
|
BOSS_MEDAL_BUBBLEGUM,
|
|
BOSS_MEDAL_COLOSSUS,
|
|
BOSS_MEDAL_DRAKE,
|
|
BOSS_MEDAL_HIEROPHANT,
|
|
BOSS_MEDAL_LEGION,
|
|
BOSS_MEDAL_TENDRIL,
|
|
BOSS_MEDAL_SWARMERS,
|
|
BOSS_MEDAL_MINER_CRUSHER,
|
|
BOSS_MEDAL_BUBBLEGUM_CRUSHER,
|
|
BOSS_MEDAL_COLOSSUS_CRUSHER,
|
|
BOSS_MEDAL_DRAKE_CRUSHER,
|
|
BOSS_MEDAL_HIEROPHANT_CRUSHER,
|
|
BOSS_MEDAL_LEGION_CRUSHER,
|
|
BOSS_MEDAL_SWARMERS_CRUSHER)
|
|
|
|
var/list/valid_scores = list(
|
|
BOSS_SCORE,
|
|
MINER_SCORE,
|
|
BUBBLEGUM_SCORE,
|
|
COLOSSUS_SCORE,
|
|
DRAKE_SCORE,
|
|
HIEROPHANT_SCORE,
|
|
LEGION_SCORE,
|
|
SWARMER_BEACON_SCORE,
|
|
TENDRIL_CLEAR_SCORE)
|
|
|
|
var/ach = "achievements" //IMPORTANT : ADD PREFIX HERE IF YOU'RE USING PREFIXED SCHEMA
|
|
|
|
var/outfile = file("hub_migration.sql")
|
|
fdel(outfile)
|
|
outfile << "BEGIN;"
|
|
|
|
var/perpage = 100
|
|
var/requested_page = 1
|
|
var/hub_url = replacetext(hub_address,".","/")
|
|
var/list/medal_data = list()
|
|
var/regex/datepart_regex = regex(@"[/\s]")
|
|
while(1)
|
|
world << "Fetching page [requested_page]"
|
|
var/list/result = world.Export("http://www.byond.com/games/[hub_url]?format=text&command=view_medals&per_page=[perpage]&page=[requested_page]")
|
|
if(!result)
|
|
return
|
|
var/data = file2text(result["CONTENT"])
|
|
var/regex/page_info = regex(@"page = (\d*)")
|
|
page_info.Find(data)
|
|
var/recieved_page = text2num(page_info.group[1])
|
|
if(recieved_page != requested_page) //out of entries
|
|
break
|
|
else
|
|
requested_page++
|
|
var/regex/R = regex(@'medal/\d+[\s\n]*key = "(.*)"[\s\n]*name = "(.*)"[\s\n]*desc = ".*"[\s\n]*icon = ".*"[\s\n]*earned = "(.*)"',"gm")
|
|
while(R.Find(data))
|
|
var/key = ckey(R.group[1])
|
|
var/medal = R.group[2]
|
|
var/list/dateparts = splittext(R.group[3],datepart_regex)
|
|
var/list/out_date = list(dateparts[3],dateparts[1],dateparts[2]) // YYYY/MM/DD
|
|
if(!valid_medals.Find(medal))
|
|
continue
|
|
if(!medal_data[key])
|
|
medal_data[key] = list()
|
|
medal_data[key][medal] = out_date.Join("/")
|
|
|
|
var/list/giant_list_of_ckeys = params2list(world.GetScores(null,null,hub_address,hub_password))
|
|
world << "Found [giant_list_of_ckeys.len] as upper scores count."
|
|
|
|
var/list/scores_data = list()
|
|
for(var/score in valid_scores)
|
|
var/recieved_count = 0
|
|
while(1)
|
|
world << "Fetching [score] scores, offset :[recieved_count] of [score]"
|
|
var/list/batch = params2list(world.GetScores(giant_list_of_ckeys.len,recieved_count,score,hub_address,hub_password))
|
|
world << "Fetched [batch.len] scores for [score]."
|
|
recieved_count += batch.len
|
|
if(!batch.len)
|
|
break
|
|
for(var/value in batch)
|
|
var/key = ckey(value)
|
|
if(!scores_data[key])
|
|
scores_data[key] = list()
|
|
if(isnum(batch[value]))
|
|
world << "NUMBER"
|
|
return
|
|
scores_data[key][score] = batch[value]
|
|
if(batch.len < 1000) //Out of scores anyway
|
|
break
|
|
|
|
var/i = 1
|
|
for(var/key in giant_list_of_ckeys)
|
|
world << "Generating entries for [key] [i]/[giant_list_of_ckeys.len]"
|
|
var/keyv = ckey(key) //Checkinf if you don't have any manually entered drop tables; juniors on your hub is good idea.
|
|
var/list/values = list()
|
|
for(var/cheevo in medal_data[keyv])
|
|
values += "('[keyv]','[cheevo]',1, '[medal_data[keyv][cheevo]]')"
|
|
for(var/score in scores_data[keyv])
|
|
values += "('[keyv]','[score]',[scores_data[keyv][score]],now())"
|
|
if(values.len)
|
|
var/list/keyline = list("INSERT INTO [ach](ckey,achievement_key,value,last_updated) VALUES")
|
|
keyline += values.Join(",")
|
|
keyline += ";"
|
|
outfile << keyline.Join()
|
|
i++
|
|
outfile << "END"
|