From 964777f8e2aaf74cf27b0db516db820db771790c Mon Sep 17 00:00:00 2001 From: Ansari Date: Wed, 23 May 2018 13:55:13 +0800 Subject: [PATCH 1/6] Port over Fox's refactored TG refund from TG. --- code/datums/uplink_item.dm | 14 +++---- .../gamemodes/miniantags/guardian/guardian.dm | 3 ++ code/game/objects/items/devices/uplinks.dm | 38 +++++++++++++------ code/game/objects/objs.dm | 3 ++ nano/templates/uplink.tmpl | 12 ++++-- 5 files changed, 48 insertions(+), 22 deletions(-) diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index 750f7bfd70c..61e69b6d7d9 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -55,6 +55,9 @@ var/list/uplink_items = list() var/list/job = null var/surplus = 100 //Chance of being included in the surplus crate (when pick() selects it) var/hijack_only = FALSE //can this item be purchased only during hijackings? + var/refundable = FALSE + var/refund_path = null // Alternative path for refunds, in case the item purchased isn't what is actually refunded (ie: holoparasites). + var/refund_amount // specified refund amount in case there needs to be a TC penalty for refunds. /datum/uplink_item/proc/spawn_item(var/turf/loc, var/obj/item/uplink/U) if(hijack_only) @@ -97,6 +100,7 @@ var/list/uplink_items = list() if(I) if(ishuman(user)) var/mob/living/carbon/human/A = user + log_game("[key_name(user)] purchased [I.name]") A.put_in_any_hand_if_possible(I) if(istype(I,/obj/item/storage/box/) && I.contents.len>0) @@ -527,6 +531,7 @@ var/list/uplink_items = list() cost = 50 gamemodes = list(/datum/game_mode/nuclear) surplus = 0 + refundable = TRUE /datum/uplink_item/dangerous/foamsmg name = "Toy Submachine Gun" @@ -555,19 +560,14 @@ var/list/uplink_items = list() gamemodes = list(/datum/game_mode/nuclear) surplus = 0 - -//for refunding the syndieborg teleporter -/datum/uplink_item/dangerous/syndieborg/spawn_item() - var/obj/item/antag_spawner/borg_tele/T = ..() - if(istype(T)) - T.TC_cost = cost - /datum/uplink_item/dangerous/guardian name = "Holoparasites" desc = "Though capable of near sorcerous feats via use of hardlight holograms and nanomachines, they require an organic host as a home base and source of fuel." item = /obj/item/storage/box/syndie_kit/guardian excludefrom = list(/datum/game_mode/nuclear) cost = 12 + refund_path = /obj/item/guardiancreator/tech/choose + refundable = TRUE // Ammunition diff --git a/code/game/gamemodes/miniantags/guardian/guardian.dm b/code/game/gamemodes/miniantags/guardian/guardian.dm index f76830910b1..de015cfa099 100644 --- a/code/game/gamemodes/miniantags/guardian/guardian.dm +++ b/code/game/gamemodes/miniantags/guardian/guardian.dm @@ -415,6 +415,9 @@ failure_message = "...ERROR. BOOT SEQUENCE ABORTED. AI FAILED TO INTIALIZE. PLEASE CONTACT SUPPORT OR TRY AGAIN LATER." ling_failure = "The holoparasites recoil in horror. They want nothing to do with a creature like you." +/obj/item/guardiancreator/tech/check_uplink_validity() + return !used + /obj/item/guardiancreator/tech/choose random = FALSE diff --git a/code/game/objects/items/devices/uplinks.dm b/code/game/objects/items/devices/uplinks.dm index 2d40c1e683c..3e11d63b7af 100644 --- a/code/game/objects/items/devices/uplinks.dm +++ b/code/game/objects/items/devices/uplinks.dm @@ -117,6 +117,9 @@ var/list/world_uplinks = list() if(..()) return 1 + if(href_list["refund"]) + refund(usr) + if(href_list["buy_item"] == "random") var/datum/uplink_item/UI = chooseRandomItem() href_list["buy_item"] = UI.reference @@ -142,6 +145,30 @@ var/list/world_uplinks = list() return 1 +/obj/item/uplink/proc/refund(mob/user as mob) + var/obj/item/I = user.get_active_hand() + if(I) // Make sure there's actually something in the hand before even bothering to check + for(var/item in subtypesof(/datum/uplink_item)) + var/datum/uplink_item/UI = item + var/path = null + if(initial(UI.refund_path)) + path = initial(UI.refund_path) + else + path = initial(UI.item) + var/cost = 0 + if(initial(UI.refund_amount)) + cost = initial(UI.refund_amount) + else + cost = initial(UI.cost) + var/refundable = initial(UI.refundable) + if(I.type == path && refundable && I.check_uplink_validity()) + uses += cost + used_TC -= cost + to_chat(user, "[I] refunded.") + qdel(I) + return + ..() + // HIDDEN UPLINK - Can be stored in anything but the host item has to have a trigger for it. /* How to create an uplink in 3 easy steps! @@ -287,17 +314,6 @@ var/list/world_uplinks = list() return 1 return 0 -//Refund proc for the borg teleporter (later I'll make a general refund proc if there is demand for it) -/obj/item/radio/uplink/attackby(obj/item/W as obj, mob/user as mob, params) - if(istype(W, /obj/item/antag_spawner/borg_tele)) - var/obj/item/antag_spawner/borg_tele/S = W - if(!S.used && !S.checking) - hidden_uplink.uses += S.TC_cost - qdel(S) - to_chat(user, "Teleporter refunded.") - else - to_chat(user, "This teleporter is already used, or is currently being used.") - // PRESET UPLINKS // A collection of preset uplinks. // diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index fe9e8444378..49e043b4159 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -282,3 +282,6 @@ a { /obj/vv_get_dropdown() . = ..() .["Delete all of type"] = "?_src_=vars;delall=[UID()]" + +/obj/proc/check_uplink_validity() + return 1 diff --git a/nano/templates/uplink.tmpl b/nano/templates/uplink.tmpl index d6dcec8d05f..6177ab016a7 100644 --- a/nano/templates/uplink.tmpl +++ b/nano/templates/uplink.tmpl @@ -1,5 +1,5 @@ - @@ -40,7 +40,7 @@ Used In File(s): \code\game\objects\items\devices\uplinks.dm
{{:helper.link( itemValue.Name, 'gear', {'buy_item' : itemValue.obj_path, 'cost' : itemValue.Cost}, itemValue.Cost > data.crystals ? 'disabled' : null, null)}} - {{:itemValue.Cost}}
- + {{if itemValue.Cost <= data.crystals && data.descriptions}}
{{:itemValue.Description}} @@ -53,7 +53,11 @@ Used In File(s): \code\game\objects\items\devices\uplinks.dm
{{:helper.link('Buy Random (??)' , 'gear', {'buy_item' : 'random'}, data.crystals <= 0 ? 'disabled' : null, null)}}
- + +
+ {{:helper.link('Refund item in active hand' , 'gear', {refund : 1}, null, null)}} +
+ {{else data.menu == 1}}

Information Record List:


@@ -66,7 +70,7 @@ Used In File(s): \code\game\objects\items\devices\uplinks.dm {{:helper.link(value.Name, 'gear', {'menu' : 11, 'id' : value.id}, null, null)}}
{{/for}} - + {{else data.menu == 11}}

Information Record:


From 535d9c9a4dda9cfa6476477e20fe50c58543b77a Mon Sep 17 00:00:00 2001 From: Ansari Date: Wed, 23 May 2018 14:03:40 +0800 Subject: [PATCH 2/6] Changed wording of borg spawner to be more consistent. --- code/datums/antagonists/antag_spawner.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/datums/antagonists/antag_spawner.dm b/code/datums/antagonists/antag_spawner.dm index c81f30efc83..ecf8c336118 100644 --- a/code/datums/antagonists/antag_spawner.dm +++ b/code/datums/antagonists/antag_spawner.dm @@ -45,7 +45,7 @@ spawn_antag(C, get_turf(src.loc), "syndieborg") else checking = FALSE - to_chat(user, "Unable to connect to Syndicate command. Please wait and try again later or use the teleporter on your uplink to get your points refunded.") + to_chat(user, "Unable to connect to Syndicate command. Please wait and try again later or refund your teleporter through your uplink.") return /obj/item/antag_spawner/borg_tele/spawn_antag(client/C, turf/T, type = "") From f4d3815ea45842af18096a2efdf3c58a135acc54 Mon Sep 17 00:00:00 2001 From: Ansari Date: Thu, 24 May 2018 04:49:26 +0800 Subject: [PATCH 3/6] Fix accidental leftover code --- code/datums/uplink_item.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index 61e69b6d7d9..103885c0c8c 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -100,7 +100,6 @@ var/list/uplink_items = list() if(I) if(ishuman(user)) var/mob/living/carbon/human/A = user - log_game("[key_name(user)] purchased [I.name]") A.put_in_any_hand_if_possible(I) if(istype(I,/obj/item/storage/box/) && I.contents.len>0) From fb0cd5d94e1c6efe663c68a83b21aca01c5459fd Mon Sep 17 00:00:00 2001 From: Anasari <13087574+Anasari@users.noreply.github.com> Date: Tue, 31 Jul 2018 13:37:24 +0800 Subject: [PATCH 4/6] Fixes & minor uplink items refactor --- code/datums/uplink_item.dm | 12 +++--- code/game/objects/items/devices/uplinks.dm | 44 +++++++++------------- 2 files changed, 23 insertions(+), 33 deletions(-) diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index ad805374751..53d82e664be 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -1,16 +1,13 @@ -var/list/uplink_items = list() +GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) /proc/get_uplink_items(var/job = null) - // If not already initialized.. + var/list/uplink_items = list() if(!uplink_items.len) - // Fill in the list and order it like this: - // A keyed list, acting as categories, which are lists to the datum. - var/list/last = list() - for(var/item in typesof(/datum/uplink_item)) + for(var/path in GLOB.uplink_items) - var/datum/uplink_item/I = new item() + var/datum/uplink_item/I = new path if(!I.item) continue if(I.gamemodes.len && ticker && !(ticker.mode.type in I.gamemodes)) @@ -528,6 +525,7 @@ var/list/uplink_items = list() desc = "A cyborg designed and programmed for systematic extermination of non-Syndicate personnel." reference = "SC" item = /obj/item/antag_spawner/borg_tele + refund_path = /obj/item/antag_spawner/borg_tele cost = 50 gamemodes = list(/datum/game_mode/nuclear) surplus = 0 diff --git a/code/game/objects/items/devices/uplinks.dm b/code/game/objects/items/devices/uplinks.dm index 27810e53452..1c3124a74cb 100644 --- a/code/game/objects/items/devices/uplinks.dm +++ b/code/game/objects/items/devices/uplinks.dm @@ -12,7 +12,7 @@ var/list/world_uplinks = list() var/welcome // Welcoming menu message var/uses // Numbers of crystals var/hidden_crystals = 0 - var/list/ItemsCategory // List of categories with lists of items + var/list/uplink_items // List of categories with lists of items var/list/ItemsReference // List of references with an associated item var/list/nanoui_items // List of items for NanoUI use var/nanoui_menu = 0 // The current menu we are in @@ -32,7 +32,7 @@ var/list/world_uplinks = list() ..() welcome = ticker.mode.uplink_welcome uses = ticker.mode.uplink_uses - ItemsCategory = get_uplink_items() + uplink_items = get_uplink_items() world_uplinks += src @@ -57,14 +57,14 @@ var/list/world_uplinks = list() dat += "Each item costs a number of telecrystals as indicated by the number following its name.
" var/category_items = 1 - for(var/category in ItemsCategory) + for(var/category in uplink_items) if(category_items < 1) dat += "We apologize, as you could not afford anything from this category.
" dat += "
" dat += "[category]
" category_items = 0 - for(var/datum/uplink_item/I in ItemsCategory[category]) + for(var/datum/uplink_item/I in uplink_items[category]) if(I.cost > uses) continue if(I.job && I.job.len) @@ -87,9 +87,9 @@ var/list/world_uplinks = list() var/list/nano = new var/list/reference = new - for(var/category in ItemsCategory) + for(var/category in uplink_items) nano[++nano.len] = list("Category" = category, "items" = list()) - for(var/datum/uplink_item/I in ItemsCategory[category]) + for(var/datum/uplink_item/I in uplink_items[category]) if(I.job && I.job.len) if(!(I.job.Find(job))) continue @@ -148,26 +148,18 @@ var/list/world_uplinks = list() /obj/item/uplink/proc/refund(mob/user as mob) var/obj/item/I = user.get_active_hand() if(I) // Make sure there's actually something in the hand before even bothering to check - for(var/item in subtypesof(/datum/uplink_item)) - var/datum/uplink_item/UI = item - var/path = null - if(initial(UI.refund_path)) - path = initial(UI.refund_path) - else - path = initial(UI.item) - var/cost = 0 - if(initial(UI.refund_amount)) - cost = initial(UI.refund_amount) - else - cost = initial(UI.cost) - var/refundable = initial(UI.refundable) - if(I.type == path && refundable && I.check_uplink_validity()) - uses += cost - used_TC -= cost - to_chat(user, "[I] refunded.") - qdel(I) - return - ..() + for(var/category in uplink_items) + for(var/item in uplink_items[category]) + var/datum/uplink_item/UI = item + var/path = UI.refund_path || UI.item + var/cost = UI.refund_amount || UI.cost + if(I.type == path && UI.refundable && I.check_uplink_validity()) + uses += cost + used_TC -= cost + to_chat(user, "[I] refunded.") + qdel(I) + return + ..() // HIDDEN UPLINK - Can be stored in anything but the host item has to have a trigger for it. /* How to create an uplink in 3 easy steps! From 78360811c18618b56fb1fca21c85d9c9c3382dff Mon Sep 17 00:00:00 2001 From: Anasari <13087574+Anasari@users.noreply.github.com> Date: Tue, 31 Jul 2018 13:41:35 +0800 Subject: [PATCH 5/6] Remove check_uplink_validity proc as it isn't useful yet --- code/game/objects/items/devices/uplinks.dm | 2 +- code/game/objects/objs.dm | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/code/game/objects/items/devices/uplinks.dm b/code/game/objects/items/devices/uplinks.dm index 1c3124a74cb..0a621ceafc6 100644 --- a/code/game/objects/items/devices/uplinks.dm +++ b/code/game/objects/items/devices/uplinks.dm @@ -153,7 +153,7 @@ var/list/world_uplinks = list() var/datum/uplink_item/UI = item var/path = UI.refund_path || UI.item var/cost = UI.refund_amount || UI.cost - if(I.type == path && UI.refundable && I.check_uplink_validity()) + if(I.type == path && UI.refundable) uses += cost used_TC -= cost to_chat(user, "[I] refunded.") diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 49e043b4159..fe9e8444378 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -282,6 +282,3 @@ a { /obj/vv_get_dropdown() . = ..() .["Delete all of type"] = "?_src_=vars;delall=[UID()]" - -/obj/proc/check_uplink_validity() - return 1 From eb776551d5211497f447a169490b260ef585df11 Mon Sep 17 00:00:00 2001 From: Anasari <13087574+Anasari@users.noreply.github.com> Date: Tue, 31 Jul 2018 13:47:42 +0800 Subject: [PATCH 6/6] Revert "Remove check_uplink_validity proc as it isn't useful yet" This reverts commit 78360811c18618b56fb1fca21c85d9c9c3382dff. --- code/game/objects/items/devices/uplinks.dm | 2 +- code/game/objects/objs.dm | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/code/game/objects/items/devices/uplinks.dm b/code/game/objects/items/devices/uplinks.dm index 0a621ceafc6..1c3124a74cb 100644 --- a/code/game/objects/items/devices/uplinks.dm +++ b/code/game/objects/items/devices/uplinks.dm @@ -153,7 +153,7 @@ var/list/world_uplinks = list() var/datum/uplink_item/UI = item var/path = UI.refund_path || UI.item var/cost = UI.refund_amount || UI.cost - if(I.type == path && UI.refundable) + if(I.type == path && UI.refundable && I.check_uplink_validity()) uses += cost used_TC -= cost to_chat(user, "[I] refunded.") diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index fe9e8444378..49e043b4159 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -282,3 +282,6 @@ a { /obj/vv_get_dropdown() . = ..() .["Delete all of type"] = "?_src_=vars;delall=[UID()]" + +/obj/proc/check_uplink_validity() + return 1