Buddy Tag Options (#12143)

This commit is contained in:
Geeves
2021-07-21 14:08:01 +02:00
committed by GitHub
parent 23bf25e03d
commit 59cb87efd4
5 changed files with 63 additions and 8 deletions
+1
View File
@@ -1,5 +1,6 @@
#define Clamp(x, low, high) max(low, min(high, x))
#define CLAMP01(x) (Clamp(x, 0, 1))
#define JOINTEXT(X) jointext(X, null)
#define span(class, text) "<span class='[class]'>[text]</span>"
#define SPAN_NOTICE(X) "<span class='notice'>[X]</span>"
@@ -262,4 +262,33 @@ Paper Data
/datum/gear_tweak/paper_data/tweak_item(var/obj/item/paper/P, var/metadata, var/mob/living/carbon/human/H)
if(!metadata || !istype(P))
return
P.info = P.parsepencode(metadata)
P.info = P.parsepencode(metadata)
// Buddy Tag Settings
/datum/gear_tweak/buddy_tag_config/get_contents(var/metadata)
return "ID: [metadata[1]] | Distance: [metadata[2]] | Interval: [metadata[3]]s"
/datum/gear_tweak/buddy_tag_config/get_default()
return list(1, 10, 30)
/datum/gear_tweak/buddy_tag_config/get_metadata(var/user, var/metadata)
var/newcode = input("Set new buddy ID number.", "Buddy Tag ID", metadata[1]) as num|null
if(isnull(newcode))
newcode = metadata[1]
var/newdist = input("Set new maximum range.", "Buddy Tag Range", metadata[2]) as num|null
if(isnull(newdist))
newdist = metadata[2]
var/newtime = input("Set new search interval in seconds (minimum 30s).", "Buddy Tag Time Interval", metadata[3]) as num|null
if(isnull(newtime))
newtime = metadata[3]
newtime = max(30, newtime)
return list(newcode, newdist, newtime)
/datum/gear_tweak/buddy_tag_config/tweak_item(var/obj/item/clothing/accessory/buddytag/BT, var/list/metadata, var/mob/living/carbon/human/H)
if(!length(metadata) || !istype(BT))
return
BT.id = metadata[1]
BT.distance = metadata[2]
BT.search_interval = metadata[3] SECONDS
@@ -138,4 +138,8 @@
/datum/gear/utility/buddy_tag
display_name = "buddy tag"
path = /obj/item/clothing/accessory/buddytag
cost = 2
cost = 2
/datum/gear/utility/buddy_tag/New()
..()
gear_tweaks += new /datum/gear_tweak/buddy_tag_config()
@@ -11,6 +11,8 @@ var/list/active_buddy_tags = list()
var/next_search = 0
var/on = FALSE
var/id = 1
var/distance = 10
var/search_interval = 30 SECONDS
/obj/item/clothing/accessory/buddytag/Initialize()
. = ..()
@@ -23,11 +25,13 @@ var/list/active_buddy_tags = list()
if(use_check_and_message(user))
return
var/dat = "<A href='?src=\ref[src];toggle=1;'>[on ? "Disable" : "Enable"]</a><br>"
dat += "ID: <A href='?src=\ref[src];setcode=1;'>[id]</a>"
var/list/dat = "<A href='?src=\ref[src];toggle=1;'>[on ? "Disable" : "Enable"]</a>"
dat += "<br>ID: <A href='?src=\ref[src];setcode=1;'>[id]</a>"
dat += "<br>Search Interval: <A href='?src=\ref[src];set_interval=1;'>[search_interval/10] seconds</a>"
dat += "<br>Search Distance: <A href='?src=\ref[src];set_distance=1;'>[distance]</a>"
var/datum/browser/popup = new(user, "buddytag", "Buddy Tag", 290, 200)
popup.set_content(dat)
popup.set_content(JOINTEXT(dat))
popup.open()
/obj/item/clothing/accessory/buddytag/Topic(href, href_list, state)
@@ -44,10 +48,21 @@ var/list/active_buddy_tags = list()
active_buddy_tags -= src
update_icon()
if(href_list["setcode"])
var/newcode = input("Set new buddy ID number." , "Buddy Tag ID" , "") as num|null
var/newcode = input("Set new buddy ID number.", "Buddy Tag ID", id) as num|null
if(isnull(newcode) || !CanInteract(usr, state))
return
id = newcode
if(href_list["set_distance"])
var/newdist = input("Set new maximum range.", "Buddy Tag Range", distance) as num|null
if(isnull(newdist) || !CanInteract(usr, state))
return
distance = newdist
if(href_list["set_interval"])
var/newtime = input("Set new search interval in seconds (minimum 30s).", "Buddy Tag Time Interval", search_interval / 10) as num|null
if(isnull(newtime) || !CanInteract(usr, state))
return
newtime = max(30, newtime)
search_interval = newtime SECONDS
attack_self(usr)
/obj/item/clothing/accessory/buddytag/process()
@@ -55,14 +70,14 @@ var/list/active_buddy_tags = list()
return PROCESS_KILL
if(world.time < next_search)
return
next_search = world.time + 30 SECONDS
next_search = world.time + search_interval
var/has_friend
for(var/obj/item/clothing/accessory/buddytag/buddy as anything in active_buddy_tags - src)
if(buddy.id != id)
continue
if(GET_Z(buddy) != GET_Z(src))
continue
if(get_dist(get_turf(src), get_turf(buddy)) <= 10)
if(get_dist(get_turf(src), get_turf(buddy)) <= distance)
has_friend = TRUE
break
if(!has_friend)
@@ -0,0 +1,6 @@
author: Geeves
delete-after: True
changes:
- rscadd: "Added additional configuration options to buddy tags. You can also set their configs in the loadout menu now, where it will persist."