Merge pull request #5812 from TheGreatKitsune/item-tf-spawn

Item TF spawnpoints
This commit is contained in:
Kassc
2023-03-03 21:18:08 -05:00
committed by GitHub
9 changed files with 167 additions and 3 deletions

View File

@@ -13,6 +13,8 @@ var/global/list/vore_reagent_sounds = list(
'sound/vore/walkslosh10.ogg',
"None" = null)
var/global/list/item_tf_spawnpoints = list() // Global variable tracking which items are item tf spawnpoints
/var/global/list/existing_metroids = list() //Global variable for tracking metroids for the event announcement. Needs to go here for load order.
//stuff that only synths can eat

View File

@@ -657,6 +657,7 @@ var/global/datum/controller/occupations/job_master
var/fail_deadly = FALSE
var/obj/belly/vore_spawn_gut
var/mob/living/prey_to_nomph
var/obj/item/item_to_be
//CHOMPEdit - Remove fail_deadly addition on offmap_spawn
@@ -781,6 +782,91 @@ var/global/datum/controller/occupations/job_master
else
to_chat(C, "<span class='warning'>No prey were available to accept you.</span>")
return
//CHOMPEdit - Item TF spawnpoints!
else if(C.prefs.spawnpoint == "Item TF spawn")
var/list/items = list()
var/list/item_names = list()
var/list/carriers = list()
for(var/obj/item/I in item_tf_spawnpoints)
if(LAZYLEN(I.ckeys_allowed_itemspawn))
if(!(C.ckey in I.ckeys_allowed_itemspawn))
continue
var/atom/item_loc = I.loc
var/mob/living/carrier
while(!isturf(item_loc))
if(isliving(item_loc))
carrier = item_loc
break
else
item_loc = item_loc.loc
if(istype(carrier))
if(!(carrier.z in using_map.vorespawn_levels))
continue
if(carrier.stat == UNCONSCIOUS || carrier.stat == DEAD || carrier.client.is_afk(10 MINUTES))
continue
carriers += carrier
else
if(!(item_loc.z in using_map.vorespawn_levels))
continue
carriers += null
items += I
if(I.name == initial(I.name))
if(carrier)
item_names += "[carrier]'s [I.name] ([I.loc.name])"
else
item_names += "[I.name] ([I.loc.name])"
else
if(carrier)
item_names += "[carrier]'s [I.name] (\a [initial(I.name)] at [I.loc.name])"
else
item_names += "[I.name] (\a [initial(I.name)] at [I.loc.name])"
if(LAZYLEN(items))
var/backup = alert(C, "Do you want a mind backup?", "Confirm", "Yes", "No")
if(backup == "Yes")
backup = 1
var/item_name = input(C, "Choose an Item to spawn as.", "Item TF Spawnpoint") as null|anything in item_names
if(!item_name)
return
var/index = item_names.Find(item_name)
var/obj/item/item = items[index]
var/mob/living/carrier = carriers[index]
if(istype(carrier))
to_chat(C, "<b><span class='warning'>[carrier] has received your spawn request. Please wait.</span></b>")
log_and_message_admins("[key_name(C)] has requested to item spawn into [key_name(carrier)]'s possession")
var/confirm = alert(carrier, "[C.prefs.real_name] is attempting to join as the [item_name] in your possession.", "Confirm", "No", "Yes")
if(confirm != "Yes")
to_chat(C, "<span class='warning'>[carrier] has declined your spawn request.</span>")
var/message = sanitizeSafe(input(carrier,"Do you want to leave them a message?")as text|null)
if(message)
to_chat(C, "<span class='notice'>[carrier] message : [message]</span>")
return
if(carrier.stat == UNCONSCIOUS || carrier.stat == DEAD)
to_chat(C, "<span class='warning'>[carrier] is not conscious.</span>")
to_chat(carrier, "<span class='warning'>You must be conscious to accept.</span>")
return
if(!(carrier.z in using_map.vorespawn_levels))
to_chat(C, "<span class='warning'>[carrier] is no longer in station grounds.</span>")
to_chat(carrier, "<span class='warning'>You must be within station grounds to accept.</span>")
return
log_and_message_admins("[key_name(C)] has item spawned onto [key_name(carrier)]")
item_to_be = item
if(backup)
addtimer(CALLBACK(src, .proc/m_backup_client, C), 5 SECONDS)
else
var/confirm = alert(C, "\The [item.name] is currently not in any character's possession! Do you still want to spawn as it?", "Confirm", "No", "Yes")
if(confirm != "Yes")
return
log_and_message_admins("[key_name(C)] has item spawned into \a [item.name] that was not held by anyone")
item_to_be = item
if(backup)
addtimer(CALLBACK(src, .proc/m_backup_client, C), 5 SECONDS)
else
to_chat(C, "<span class='warning'>No items were available to accept you.</span>")
return
//CHOMPEdit End
else
if(!(C.prefs.spawnpoint in using_map.allowed_spawns))
if(fail_deadly)
@@ -793,11 +879,15 @@ var/global/datum/controller/occupations/job_master
spawnpos = spawntypes[C.prefs.spawnpoint]
//We will return a list key'd by "turf" and "msg"
. = list("turf","msg", "voreny", "prey")
. = list("turf","msg", "voreny", "prey", "itemtf") //CHOMPEdit - Item TF spawnpoints
if(vore_spawn_gut)
.["voreny"] = vore_spawn_gut
if(prey_to_nomph)
.["prey"] = prey_to_nomph //We pass this on later to reverse the vorespawn in new_player.dm
//CHOMPEdit Start - Item TF spawnpoints
if(item_to_be)
.["itemtf"] = item_to_be
//CHOMPEdit End
if(spawnpos && istype(spawnpos) && spawnpos.turfs.len)
if(spawnpos.check_job_spawning(rank))
.["turf"] = spawnpos.get_spawn_position()

View File

@@ -25,6 +25,7 @@
listening_objects |= src
new_voice.verbs -= /mob/living/voice/verb/change_name //No changing your name! Bad!
new_voice.verbs -= /mob/living/voice/verb/hang_up //Also you can't hang up. You are the item!
src.item_tf_spawnpoint_used() //CHOMPEdit - Item TF spawnpoints
// Chomp edit
/obj/item/proc/muffled_by_belly(var/mob/user)

View File

@@ -0,0 +1,38 @@
var/datum/gear_tweak/item_tf_spawn/gear_tweak_item_tf_spawn = new()
/datum/gear_tweak/item_tf_spawn
/datum/gear_tweak/item_tf_spawn/get_contents(var/metadata)
if(metadata["state"] == "Not Enabled")
return "Item TF spawnpoint: Not Enabled"
else if(metadata["state"] == "Anyone")
return "Item TF spawnpoint: Enabled"
else
return "Item TF spawnpoint: Only ckeys [english_list(metadata["valid"], and_text = ", ")]"
/datum/gear_tweak/item_tf_spawn/get_default()
. = list()
.["state"] = "Not Enabled"
.["valid"] = list()
/datum/gear_tweak/item_tf_spawn/get_metadata(var/user, var/list/metadata)
. = list()
var/entry = tgui_input_list(user, "Choose an entry.", "Character Preference", list("Not Enabled", "Anyone", "Only Specific Players"), metadata["state"])
if(entry)
.["state"] = entry
if(entry == "Only Specific Players")
var/ckey_input = tgui_input_text(user, "Input ckeys allowed to join on separate lines", "Allowed Players", jointext(metadata["valid"], "\n"), multiline = TRUE)
.["valid"] = splittext(lowertext(ckey_input), "\n")
else
.["valid"] = metadata["valid"]
else
return metadata
/datum/gear_tweak/item_tf_spawn/tweak_item(var/obj/item/I, var/metadata)
if(metadata["state"] == "Not Enabled")
return
else if(metadata["state"] == "Anyone")
I.item_tf_spawnpoint_set()
else if(metadata["state"] == "Only Specific Players")
I.item_tf_spawnpoint_set()
I.ckeys_allowed_itemspawn = metadata["valid"]

View File

@@ -264,7 +264,7 @@ var/list/gear_datums = list()
if(!description)
var/obj/O = path
description = initial(O.desc)
gear_tweaks = list(gear_tweak_free_name, gear_tweak_free_desc)
gear_tweaks = list(gear_tweak_free_name, gear_tweak_free_desc, gear_tweak_item_tf_spawn) //CHOMPEdit - Item TF spawnpoints
/datum/gear_data
var/path

View File

@@ -496,7 +496,16 @@
ticker.minds += character.mind//Cyborgs and AIs handle this in the transform proc. //TODO!!!!! ~Carn
var/gut = join_props["voreny"]
var/mob/living/prey = join_props["prey"]
if(prey)
//CHOMPEdit Start - Item TF
var/obj/item/itemtf = join_props["itemtf"]
if(itemtf)
itemtf.inhabit_item(character, itemtf.name, character)
var/mob/living/possessed_voice = itemtf.possessed_voice
itemtf.trash_eatable = character.devourable
itemtf.unacidable = !character.digestable
character.forceMove(possessed_voice)
//CHOMPEdit End
else if(prey)
character.copy_from_prefs_vr(1,1) //Yes I know we're reloading these, shut up
var/obj/belly/gut_to_enter
for(var/obj/belly/B in character.vore_organs)

View File

@@ -0,0 +1,18 @@
/obj/item
var/item_tf_spawn_allowed = FALSE
var/list/ckeys_allowed_itemspawn = list()
/obj/item/proc/item_tf_spawnpoint_set()
if(!item_tf_spawn_allowed)
item_tf_spawn_allowed = TRUE
item_tf_spawnpoints += src
/obj/item/proc/item_tf_spawnpoint_used()
if(item_tf_spawn_allowed)
item_tf_spawn_allowed = FALSE
item_tf_spawnpoints -= src
/obj/item/Destroy(force, ...)
if(item_tf_spawn_allowed)
item_tf_spawnpoints -= src
return ..()

View File

@@ -16,6 +16,10 @@
display_name = "Vorespawn - Pred"
msg = "has arrived on the station"
/datum/spawnpoint/vore/itemtf
display_name = "Item TF spawn"
msg = "has arrived on the station"
/datum/spawnpoint/vore/New()
..()
turfs = latejoin

View File

@@ -2017,6 +2017,7 @@
#include "code\modules\client\preference_setup\global\04_ooc.dm"
#include "code\modules\client\preference_setup\global\setting_datums.dm"
#include "code\modules\client\preference_setup\loadout\gear_tweaks.dm"
#include "code\modules\client\preference_setup\loadout\gear_tweaks_ch.dm"
#include "code\modules\client\preference_setup\loadout\gear_tweaks_vr.dm"
#include "code\modules\client\preference_setup\loadout\loadout.dm"
#include "code\modules\client\preference_setup\loadout\loadout_accessories.dm"
@@ -4536,6 +4537,7 @@
#include "modular_chomp\code\game\jobs\job\silicon.dm"
#include "modular_chomp\code\game\machinery\airconditioner_ch.dm"
#include "modular_chomp\code\game\machinery\autolathe_armory.dm"
#include "modular_chomp\code\game\objects\items.dm"
#include "modular_chomp\code\game\objects\items\clockwork\ratvarian_spear.dm"
#include "modular_chomp\code\game\objects\structures\desert_planet_structures.dm"
#include "modular_chomp\code\game\objects\structures\gargoyle.dm"