#ifdef MULTIINSTANCE /client/verb/switch_server() set name = "Switch Server" set desc = "Switch to a different Paradise server" set category = "OOC" // First get our peers var/datum/db_query/dbq1 = SSdbcore.NewQuery({" SELECT server_id, key_name, key_value FROM instance_data_cache WHERE server_id IN (SELECT server_id FROM instance_data_cache WHERE key_name='heartbeat' AND last_updated BETWEEN NOW() - INTERVAL 60 SECOND AND NOW()) AND key_name IN ("playercount", "server_port", "server_name")"}) if(!dbq1.warn_execute()) qdel(dbq1) return var/servers_outer = list() while(dbq1.NextRow()) if(!servers_outer[dbq1.item[1]]) servers_outer[dbq1.item[1]] = list() servers_outer[dbq1.item[1]][dbq1.item[2]] = dbq1.item[3] // This should assoc load our data qdel(dbq1) //clear our query // Format the server names into an assoc list of K: name V: port var/list/formatted_servers = list() for(var/server in servers_outer) var/server_data = servers_outer[server] formatted_servers["[server_data["server_name"]] - ([server_data["playercount"]] playing)"] = text2num(server_data["server_port"]) if(length(formatted_servers) == 1) to_chat(usr, "You are already connected to the one online instance!") return var/selected_server = input(usr, "Select a server", "Server hop") as anything in formatted_servers if(!selected_server) return // Should never happen if(formatted_servers[selected_server] == world.port) to_chat(usr, "You are already connected to this instance!") return // Now we reconnect them to_chat(usr, "Now connecting you to: [selected_server]") if(watchlisted) // I mean why not message_admins("[key_name_admin(usr)] is on the watchlist and just jumped to [selected_server]") // Formulate a connection URL var/target = "byond://[world.internet_address]:[formatted_servers[selected_server]]" src << link(target) #endif