Revert "Revert "IPC Tag Project (#8649)""

This reverts commit bf11747fc3.
This commit is contained in:
skull132
2020-05-08 23:30:08 +03:00
parent 31e1a5aeae
commit 0907c95842
21 changed files with 470 additions and 73 deletions

View File

@@ -9,6 +9,10 @@
S["species"] >> pref.species
S["spawnpoint"] >> pref.spawnpoint
S["OOC_Notes"] >> pref.metadata
if(istype(all_species[pref.species], /datum/species/machine))
S["ipc_tag_status"] >> pref.machine_tag_status
S["ipc_serial_number"] >> pref.machine_serial_number
S["ipc_ownership_status"] >> pref.machine_ownership_status
/datum/category_item/player_setup_item/general/basic/save_character(var/savefile/S)
S["real_name"] << pref.real_name
@@ -17,7 +21,13 @@
S["species"] << pref.species
S["spawnpoint"] << pref.spawnpoint
S["OOC_Notes"] << pref.metadata
if(istype(all_species[pref.species], /datum/species/machine))
S["ipc_tag_status"] << pref.machine_tag_status
S["ipc_serial_number"] << pref.machine_serial_number
S["ipc_ownership_status"] << pref.machine_ownership_status
// if table_name and pref.var_name is different, then do it like
// "table_name" = "pref.var_name", as below
/datum/category_item/player_setup_item/general/basic/gather_load_query()
return list(
"ss13_characters" = list(
@@ -30,12 +40,25 @@
"species"
),
"args" = list("id")
),
"ss13_characters_ipc_tags" = list(
"vars" = list(
"tag_status" = "machine_tag_status",
"serial_number" = "machine_serial_number",
"ownership_status" = "machine_ownership_status"
),
"args" = list("char_id")
)
)
// Generally, this doesn't USUALLY need changing
/datum/category_item/player_setup_item/general/basic/gather_load_parameters()
return list("id" = pref.current_character)
return list(
"id" = pref.current_character,
"char_id" = pref.current_character
)
// Only need to list the SQL table field names here
/datum/category_item/player_setup_item/general/basic/gather_save_query()
return list(
"ss13_characters" = list(
@@ -47,6 +70,12 @@
"species",
"id" = 1,
"ckey" = 1
),
"ss13_characters_ipc_tags" = list(
"tag_status",
"serial_number",
"ownership_status",
"char_id" = 1 // = 1 signifies argument
)
)
@@ -58,12 +87,17 @@
"metadata" = pref.metadata,
"spawnpoint" = pref.spawnpoint,
"species" = pref.species,
"tag_status" = pref.machine_tag_status,
"serial_number" = pref.machine_serial_number,
"ownership_status" = pref.machine_ownership_status,
"id" = pref.current_character,
"char_id" = pref.current_character,
"ckey" = PREF_CLIENT_CKEY
)
/datum/category_item/player_setup_item/general/basic/load_special()
pref.can_edit_name = 1
pref.can_edit_name = TRUE
pref.can_edit_ipc_tag = TRUE
if (config.sql_saves && pref.current_character)
if (!establish_db_connection(dbcon))
@@ -76,7 +110,9 @@
if (query.NextRow())
if (text2num(query.item[1]) > 5)
pref.can_edit_name = 0
pref.can_edit_name = FALSE
if(config.ipc_timelock_active)
pref.can_edit_ipc_tag = FALSE
else
error("SQL CHARACTER LOAD: Logic error, general/basic/load_special() didn't return any rows when it should have.")
log_debug("SQL CHARACTER LOAD: Logic error, general/basic/load_special() didn't return any rows when it should have. Character ID: [pref.current_character].")
@@ -85,12 +121,13 @@
if(!pref.species || !(pref.species in playable_species))
pref.species = "Human"
pref.age = sanitize_integer(text2num(pref.age), pref.getMinAge(), pref.getMaxAge(), initial(pref.age))
pref.gender = sanitize_gender(pref.gender, pref.species)
pref.real_name = sanitize_name(pref.real_name, pref.species)
pref.age = sanitize_integer(text2num(pref.age), pref.getMinAge(), pref.getMaxAge(), initial(pref.age))
pref.gender = sanitize_gender(pref.gender, pref.species)
pref.real_name = sanitize_name(pref.real_name, pref.species)
if(!pref.real_name)
pref.real_name = random_name(pref.gender, pref.species)
pref.spawnpoint = sanitize_inlist(pref.spawnpoint, SSatlas.spawn_locations, initial(pref.spawnpoint))
pref.real_name = random_name(pref.gender, pref.species)
pref.spawnpoint = sanitize_inlist(pref.spawnpoint, SSatlas.spawn_locations, initial(pref.spawnpoint))
pref.machine_tag_status = text2num(pref.machine_tag_status) // SQL queries return as text, so make this a num
/datum/category_item/player_setup_item/general/basic/content()
var/list/dat = list("<b>Name:</b> ")
@@ -104,6 +141,22 @@
dat += "<b>Gender:</b> <a href='?src=\ref[src];gender=1'><b>[capitalize(lowertext(pref.gender))]</b></a><br>"
dat += "<b>Age:</b> <a href='?src=\ref[src];age=1'>[pref.age]</a><br>"
dat += "<b>Spawn Point</b>: <a href='?src=\ref[src];spawnpoint=1'>[pref.spawnpoint]</a><br>"
if(istype(all_species[pref.species], /datum/species/machine))
if(pref.can_edit_ipc_tag)
dat += "<b>Has Tag:</b> <a href='?src=\ref[src];ipc_tag=1'>[pref.machine_tag_status ? "Yes" : "No"]</a><br>"
else
dat += "<b>Has Tag:</b> [pref.machine_tag_status ? "Yes" : "No"] (<a href='?src=\ref[src];namehelp=1'>?</a>)<br>"
if(pref.machine_tag_status)
if(!pref.machine_serial_number)
var/generated_serial = uppertext(dd_limittext(md5(pref.real_name), 12))
pref.machine_serial_number = generated_serial
if(pref.can_edit_ipc_tag)
dat += "<b>Serial Number:</b> <a href='?src=\ref[src];serial_number=1'>[pref.machine_serial_number]</a><br>"
dat += "(<a href='?src=\ref[src];generate_serial=1'>Generate Serial Number</A>)<br>"
dat += "<b>Ownership Status:</b> <a href='?src=\ref[src];ownership_status=1'>[pref.machine_ownership_status]</a><br>"
else
dat += "<b>Serial Number:</b> [pref.machine_serial_number] (<a href='?src=\ref[src];namehelp=1'>?</a>)<br>"
dat += "<b>Ownership Status:</b> [pref.machine_ownership_status] (<a href='?src=\ref[src];namehelp=1'>?</a>)<br>"
if(config.allow_Metadata)
dat += "<b>OOC Notes:</b> <a href='?src=\ref[src];metadata=1'> Edit </a><br>"
@@ -126,7 +179,7 @@
return TOPIC_NOACTION
else if(href_list["namehelp"])
alert(user, "Due to game mechanics, you are no longer able to edit the name for this character. The grace period offered is 5 days since the character's initial save.\n\nIf you have a need to change the character's name, or further questions regarding this policy, please contact an administrator.")
alert(user, "Due to game mechanics, you are no longer able to edit this information for this character. The grace period offered is 5 days since the character's initial save.\n\nIf you have a need to change the character's information, or further questions regarding this policy, please contact an administrator.")
return TOPIC_NOACTION
else if(href_list["random_name"])
@@ -167,4 +220,45 @@
pref.metadata = sanitize(new_metadata)
return TOPIC_REFRESH
else if(href_list["ipc_tag"])
if(!pref.can_edit_ipc_tag)
to_chat(usr, SPAN_WARNING("You are unable to edit your IPC tag due to a timelock restriction. If you got here, it is either a hack or a bug."))
return
var/choice = alert(user, "Do you wish for your IPC to have a tag?\n\nWARNING: Being an untagged IPC in Tau space is highly illegal!", "IPC Tag", "Yes", "No")
if(CanUseTopic(user))
if(choice == "Yes")
pref.machine_tag_status = TRUE
else
pref.machine_tag_status = FALSE
return TOPIC_REFRESH
else if(href_list["serial_number"])
if(!pref.can_edit_ipc_tag)
to_chat(usr, SPAN_WARNING("You are unable to edit your IPC tag due to a timelock restriction. If you got here, it is either a hack or a bug."))
return
var/new_serial_number = sanitize(input(user, "Enter what you want to set your serial number to.", "IPC Serial Number", pref.machine_serial_number) as message|null)
new_serial_number = uppertext(dd_limittext(new_serial_number, 12))
if(new_serial_number && CanUseTopic(user))
pref.machine_serial_number = sanitize(new_serial_number)
return TOPIC_REFRESH
else if(href_list["generate_serial"])
if(!pref.can_edit_ipc_tag)
to_chat(usr, SPAN_WARNING("You are unable to edit your IPC tag due to a timelock restriction. If you got here, it is either a hack or a bug."))
return
if(pref.real_name)
var/generated_serial = uppertext(dd_limittext(md5(pref.real_name), 12))
pref.machine_serial_number = generated_serial
return TOPIC_REFRESH
else if(href_list["ownership_status"])
if(!pref.can_edit_ipc_tag)
to_chat(usr, SPAN_WARNING("You are unable to edit your IPC tag due to a timelock restriction. If you got here, it is either a hack or a bug."))
return
var/static/list/ownership_options = list(IPC_OWNERSHIP_COMPANY, IPC_OWNERSHIP_PRIVATE, IPC_OWNERSHIP_SELF)
var/new_ownership_status = input(user, "Choose your IPC's ownership status.", "IPC Ownership Status") as null|anything in ownership_options
if(new_ownership_status && CanUseTopic(user))
pref.machine_ownership_status = new_ownership_status
return TOPIC_REFRESH
return ..()