From 3792afe56eb07d49ec4ffbba7a665f977af22259 Mon Sep 17 00:00:00 2001 From: Schnayy Date: Sat, 13 Feb 2021 13:49:44 -0600 Subject: [PATCH] Telecrystals are only stored on the mind --- code/datums/mind.dm | 5 +- code/datums/uplink/badassery.dm | 14 +- code/datums/uplink/telecrystals.dm | 8 +- code/datums/uplink/uplink_categories.dm | 6 - code/datums/uplink/uplink_items.dm | 58 ++-- code/game/antagonist/antagonist_print.dm | 36 +- code/game/gamemodes/game_mode.dm | 1 - code/game/objects/items/devices/uplink.dm | 55 ++- .../items/devices/uplink_random_lists.dm | 4 +- code/modules/pda/cart.dm | 313 ++++++++++++++++++ code/modules/pda/messenger_plugins.dm | 3 - 11 files changed, 386 insertions(+), 117 deletions(-) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index bca9df5ae1e..157a3f113ff 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -55,6 +55,9 @@ var/rev_cooldown = 0 var/tcrystals = 0 + var/list/purchase_log = new + var/used_TC = 0 + // the world.time since the mob has been brigged, or -1 if not at all var/brigged_since = -1 @@ -73,7 +76,7 @@ /datum/mind/New(var/key) src.key = key - + purchase_log = list() ..() /datum/mind/proc/transfer_to(mob/living/new_character) diff --git a/code/datums/uplink/badassery.dm b/code/datums/uplink/badassery.dm index 65f71f25847..8addcc3f64e 100644 --- a/code/datums/uplink/badassery.dm +++ b/code/datums/uplink/badassery.dm @@ -22,22 +22,22 @@ desc = "Buys you one random item." /datum/uplink_item/item/badassery/random_one/buy(var/obj/item/device/uplink/U, var/mob/user) - var/datum/uplink_item/item = default_uplink_selection.get_random_item(U.uses) + var/datum/uplink_item/item = default_uplink_selection.get_random_item((user ? user.mind.tcrystals : DEFAULT_TELECRYSTAL_AMOUNT), U) return item.buy(U, user) -/datum/uplink_item/item/badassery/random_one/can_buy(obj/item/device/uplink/U) - return default_uplink_selection.get_random_item(U.uses, U) != null +/datum/uplink_item/item/badassery/random_one/can_buy(var/obj/item/device/uplink/U, var/telecrystals) + return default_uplink_selection.get_random_item(telecrystals, U) != null /datum/uplink_item/item/badassery/random_many name = "Random Items" desc = "Buys you as many random items you can afford. Convenient packaging NOT included." -/datum/uplink_item/item/badassery/random_many/cost(var/telecrystals) +/datum/uplink_item/item/badassery/random_many/cost(obj/item/device/uplink/U, var/telecrystals) return max(1, telecrystals) -/datum/uplink_item/item/badassery/random_many/get_goods(var/obj/item/device/uplink/U, var/loc) +/datum/uplink_item/item/badassery/random_many/get_goods(var/obj/item/device/uplink/U, var/loc, var/mob/M) var/list/bought_items = list() - for(var/datum/uplink_item/UI in get_random_uplink_items(U, U.uses, loc)) + for(var/datum/uplink_item/UI in get_random_uplink_items(U, M.mind.tcrystals, loc)) UI.purchase_log(U) var/obj/item/I = UI.get_goods(U, loc) if(istype(I)) @@ -47,7 +47,7 @@ /datum/uplink_item/item/badassery/random_many/purchase_log(obj/item/device/uplink/U) feedback_add_details("traitor_uplink_items_bought", "[src]") - log_and_message_admins("used \the [U.loc] to buy \a [src]") + log_and_message_admins("used \the [U.loc] to buy \a [src] at random") /**************** * Surplus Crate * diff --git a/code/datums/uplink/telecrystals.dm b/code/datums/uplink/telecrystals.dm index f814b55232d..66a099581ee 100644 --- a/code/datums/uplink/telecrystals.dm +++ b/code/datums/uplink/telecrystals.dm @@ -5,8 +5,8 @@ category = /datum/uplink_category/telecrystals blacklisted = 1 -/datum/uplink_item/item/telecrystal/get_goods(var/obj/item/device/uplink/U, var/loc) - return new /obj/item/stack/telecrystal(loc, cost(U.uses)) +/datum/uplink_item/item/telecrystal/get_goods(var/obj/item/device/uplink/U, var/loc, var/mob/M) + return new /obj/item/stack/telecrystal(loc, cost(U, M.mind.tcrystals)) /datum/uplink_item/item/telecrystal/one name = "Telecrystal - 01" @@ -35,5 +35,5 @@ /datum/uplink_item/item/telecrystal/all name = "Telecrystals - Empty Uplink" -/datum/uplink_item/item/telecrystal/all/cost(var/telecrystals) - return max(1, telecrystals) \ No newline at end of file +/datum/uplink_item/item/telecrystal/all/cost(obj/item/device/uplink/U, mob/M) + return max(1, M.mind.tcrystals) \ No newline at end of file diff --git a/code/datums/uplink/uplink_categories.dm b/code/datums/uplink/uplink_categories.dm index d9e6d84db7d..f7236ddbb08 100644 --- a/code/datums/uplink/uplink_categories.dm +++ b/code/datums/uplink/uplink_categories.dm @@ -6,12 +6,6 @@ ..() items = list() -/datum/uplink_category/proc/can_view(obj/item/device/uplink/U) - for(var/datum/uplink_item/item in items) - if(item.can_view(U)) - return 1 - return 0 - datum/uplink_category/ammunition name = "Ammunition" diff --git a/code/datums/uplink/uplink_items.dm b/code/datums/uplink/uplink_items.dm index 8d9de8f7321..067900cd846 100644 --- a/code/datums/uplink/uplink_items.dm +++ b/code/datums/uplink/uplink_items.dm @@ -31,7 +31,7 @@ var/datum/uplink/uplink = new() var/item_cost = 0 var/datum/uplink_category/category // Item category var/list/datum/antagonist/antag_roles // Antag roles this item is displayed to. If empty, display to all. - var/blacklisted = 0 + var/blacklisted = FALSE /datum/uplink_item/item var/path = null @@ -48,50 +48,38 @@ var/datum/uplink/uplink = new() if(!extra_args) return - if(!can_buy(U)) + if(!can_buy(U, user.mind.tcrystals)) return +<<<<<<< HEAD if(U.CanUseTopic(user, GLOB.tgui_inventory_state) != STATUS_INTERACTIVE) +======= + if(U.tgui_status(user, GLOB.tgui_deep_inventory_state) != STATUS_INTERACTIVE) +>>>>>>> 462f961... Merge pull request #7869 from Atermonera/mind_telecrystals return - var/cost = cost(U.uses, U) + var/cost = cost(U, user.mind.tcrystals) var/goods = get_goods(U, get_turf(user), user, extra_args) if(!goods) return - purchase_log(U) + purchase_log(user) user.mind.tcrystals -= cost - U.used_TC += cost + user.mind.used_TC += cost return goods // Any additional arguments you wish to send to the get_goods /datum/uplink_item/proc/extra_args(var/mob/user) - return 1 + return TRUE -/datum/uplink_item/proc/can_buy(obj/item/device/uplink/U) - if(cost(U.uses, U) > U.uses) - return 0 +/datum/uplink_item/proc/can_buy(var/obj/item/device/uplink/U, var/telecrystals) + if(cost(U, telecrystals) > telecrystals) + return FALSE - return can_view(U) + return TRUE -/datum/uplink_item/proc/can_view(obj/item/device/uplink/U) - // Making the assumption that if no uplink was supplied, then we don't care about antag roles - if(!U || !antag_roles.len) - return 1 - - // With no owner, there's no need to check antag status. - if(!U.uplink_owner) - return 0 - - for(var/antag_role in antag_roles) - var/datum/antagonist/antag = all_antag_types[antag_role] - if(!isnull(antag)) - if(antag.is_antagonist(U.uplink_owner)) - return 1 - return 0 - -/datum/uplink_item/proc/cost(var/telecrystals, obj/item/device/uplink/U) +/datum/uplink_item/proc/cost(obj/item/device/uplink/U, mob/M) . = item_cost if(U) . = U.get_item_cost(src, .) @@ -100,19 +88,19 @@ var/datum/uplink/uplink = new() return desc // get_goods does not necessarily return physical objects, it is simply a way to acquire the uplink item without paying -/datum/uplink_item/proc/get_goods(var/obj/item/device/uplink/U, var/loc) - return 0 +/datum/uplink_item/proc/get_goods(var/obj/item/device/uplink/U, var/loc, mob/user) + return FALSE /datum/uplink_item/proc/log_icon() return -/datum/uplink_item/proc/purchase_log(obj/item/device/uplink/U) +/datum/uplink_item/proc/purchase_log(mob/M) feedback_add_details("traitor_uplink_items_bought", "[src]") - log_and_message_admins("used \the [U.loc] to buy \a [src]") - U.purchase_log[src] = U.purchase_log[src] + 1 + log_and_message_admins("\the [M] bought \a [src] through the uplink") + M.mind.purchase_log[src] += 1 datum/uplink_item/dd_SortValue() - return cost(INFINITY) + return item_cost /******************************** * * @@ -133,7 +121,7 @@ datum/uplink_item/dd_SortValue() A.put_in_any_hand_if_possible(I) return I -/datum/uplink_item/item/get_goods(var/obj/item/device/uplink/U, var/loc) +/datum/uplink_item/item/get_goods(var/obj/item/device/uplink/U, var/loc, var/mob/user) var/obj/item/I = new path(loc) return I @@ -208,7 +196,7 @@ datum/uplink_item/dd_SortValue() /proc/get_surplus_items(var/obj/item/device/uplink/U, var/remaining_TC, var/loc) var/list/bought_items = list() - var/override = 1 + var/override = TRUE while(remaining_TC) var/datum/uplink_item/I = all_uplink_selection.get_random_item(remaining_TC, U, bought_items, override) if(!I) diff --git a/code/game/antagonist/antagonist_print.dm b/code/game/antagonist/antagonist_print.dm index efcd5955f74..99216b9ef55 100644 --- a/code/game/antagonist/antagonist_print.dm +++ b/code/game/antagonist/antagonist_print.dm @@ -1,7 +1,7 @@ /datum/antagonist/proc/print_player_summary() if(!current_antagonists.len) - return 0 + return FALSE var/text = "

The [current_antagonists.len == 1 ? "[role_text] was" : "[role_text_plural] were"]:" for(var/datum/mind/P in current_antagonists) @@ -21,7 +21,7 @@ else text += "Fail." feedback_add_details(feedback_tag,"[O.type]|FAIL") - failed = 1 + failed = TRUE num++ if(failed) text += "
The [role_text] has failed." @@ -32,7 +32,7 @@ text += "
Their objectives were:" var/num = 1 for(var/datum/objective/O in global_objectives) - text += print_objective(O, num, 1) + text += print_objective(O, num, TRUE) num++ // Display the results. @@ -68,14 +68,14 @@ /datum/antagonist/proc/print_player_full(var/datum/mind/ply) var/text = print_player_lite(ply) - var/TC_uses = 0 - var/uplink_true = 0 + var/TC_uses = FALSE + var/uplink_true = FALSE var/purchases = "" - for(var/obj/item/device/uplink/H in world_uplinks) - if(H && H.uplink_owner && H.uplink_owner == ply) - TC_uses += H.used_TC - uplink_true = 1 - purchases += get_uplink_purchases(H) + for(var/mob/M in player_list) + if(M.mind && M.mind.used_TC) + TC_uses += M.mind.used_TC + uplink_true = TRUE + purchases += get_uplink_purchases(M.mind) if(uplink_true) text += " (used [TC_uses] TC)" if(purchases) @@ -83,18 +83,8 @@ return text -/proc/print_ownerless_uplinks() - var/has_printed = 0 - for(var/obj/item/device/uplink/H in world_uplinks) - if(isnull(H.uplink_owner) && H.used_TC) - if(!has_printed) - has_printed = 1 - to_world("Ownerless Uplinks") - to_world("[H.loc] (used [H.used_TC] TC)") - to_world(get_uplink_purchases(H)) - -/proc/get_uplink_purchases(var/obj/item/device/uplink/H) +/proc/get_uplink_purchases(var/datum/mind/M) var/list/refined_log = new() - for(var/datum/uplink_item/UI in H.purchase_log) - refined_log.Add("[H.purchase_log[UI]]x[UI.log_icon()][UI.name]") + for(var/datum/uplink_item/UI in M.purchase_log) + refined_log.Add("[M.purchase_log[UI]]x[UI.log_icon()][UI.name]") . = english_list(refined_log, nothing_text = "") diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 42e6a6ddd00..18d58a33ae8 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -292,7 +292,6 @@ var/global/list/additional_antag_types = list() antag.check_victory() antag.print_player_summary() sleep(10) - print_ownerless_uplinks() var/clients = 0 var/surviving_humans = 0 diff --git a/code/game/objects/items/devices/uplink.dm b/code/game/objects/items/devices/uplink.dm index c4069be3ed7..d8f6b0f4e06 100644 --- a/code/game/objects/items/devices/uplink.dm +++ b/code/game/objects/items/devices/uplink.dm @@ -1,5 +1,3 @@ -GLOBAL_LIST_BOILERPLATE(world_uplinks, /obj/item/device/uplink) - // I placed this here because of how relevant it is. // You place this in your uplinkable item to check if an uplink is active or not. // If it is, it will display the uplink menu and return 1, else it'll return false. @@ -14,29 +12,19 @@ GLOBAL_LIST_BOILERPLATE(world_uplinks, /obj/item/device/uplink) /obj/item/device/uplink var/welcome = "Welcome, Operative" // Welcoming menu message - var/uses // Numbers of crystals var/list/ItemsCategory // 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/faction = "" //Antag faction holder. - var/list/purchase_log = new - var/datum/mind/uplink_owner = null - var/used_TC = 0 var/offer_time = 10 MINUTES //The time increment per discount offered var/next_offer_time var/datum/uplink_item/discount_item //The item to be discounted var/discount_amount //The amount as a percent the item will be discounted by var/compact_mode = FALSE -/obj/item/device/uplink/Initialize(var/mapload, var/datum/mind/owner = null, var/telecrystals = DEFAULT_TELECRYSTAL_AMOUNT) +/obj/item/device/uplink/Initialize(var/mapload) . = ..() - uplink_owner = owner - purchase_log = list() - if(owner) - uses = owner.tcrystals - else - uses = telecrystals addtimer(CALLBACK(src, .proc/next_offer), offer_time) //It seems like only the /hidden type actually makes use of this... /obj/item/device/uplink/get_item_cost(var/item_type, var/item_cost) @@ -85,7 +73,7 @@ GLOBAL_LIST_BOILERPLATE(world_uplinks, /obj/item/device/uplink) /obj/item/device/uplink/hidden/proc/trigger(mob/user as mob) if(!active) toggle() - interact(user) + tgui_interact(user) // Checks to see if the value meets the target. Like a frequency being a traitor_frequency, in order to unlock a headset. // If true, it accesses trigger() and returns 1. If it fails, it returns false. Use this to see if you need to close the @@ -93,8 +81,8 @@ GLOBAL_LIST_BOILERPLATE(world_uplinks, /obj/item/device/uplink) /obj/item/device/uplink/hidden/proc/check_trigger(mob/user as mob, var/value, var/target) if(value == target) trigger(user) - return 1 - return 0 + return TRUE + return FALSE // Legacy /obj/item/device/uplink/hidden/interact(mob/user) @@ -107,7 +95,7 @@ GLOBAL_LIST_BOILERPLATE(world_uplinks, /obj/item/device/uplink) return loc /obj/item/device/uplink/hidden/tgui_state(mob/user) - return GLOB.tgui_inventory_state + return GLOB.tgui_deep_inventory_state /obj/item/device/uplink/hidden/tgui_interact(mob/user, datum/tgui/ui, datum/tgui/parent_ui) if(!active) @@ -127,7 +115,7 @@ GLOBAL_LIST_BOILERPLATE(world_uplinks, /obj/item/device/uplink) var/list/data = ..() - data["telecrystals"] = uses + data["telecrystals"] = user.mind.tcrystals data["lockable"] = TRUE data["compactMode"] = compact_mode @@ -177,22 +165,19 @@ GLOBAL_LIST_BOILERPLATE(world_uplinks, /obj/item/device/uplink) data["categories"] = list() for(var/datum/uplink_category/category in uplink.categories) - if(category.can_view(src)) - var/list/cat = list( + var/list/cat = list( "name" = category.name, "items" = (category == selected_cat ? list() : null) ) - for(var/datum/uplink_item/item in category.items) - if(!item.can_view(src)) - continue - var/cost = item.cost(uses, src) || "???" - cat["items"] += list(list( - "name" = item.name, - "cost" = cost, - "desc" = item.description(), - "ref" = REF(item), - )) - data["categories"] += list(cat) + for(var/datum/uplink_item/item in category.items) + var/cost = item.cost(src, user) || "???" + cat["items"] += list(list( + "name" = item.name, + "cost" = cost, + "desc" = item.description(), + "ref" = REF(item), + )) + data["categories"] += list(cat) return data @@ -228,9 +213,9 @@ GLOBAL_LIST_BOILERPLATE(world_uplinks, /obj/item/device/uplink) // // Includes normal radio uplink, multitool uplink, // implant uplink (not the implant tool) and a preset headset uplink. -/obj/item/device/radio/uplink/New(atom/loc, datum/mind/target_mind, telecrystals) - ..(loc) - hidden_uplink = new(src, target_mind, telecrystals) +/obj/item/device/radio/uplink/New() + ..() + hidden_uplink = new(src) icon_state = "radio" /obj/item/device/radio/uplink/attack_self(mob/user as mob) @@ -238,6 +223,7 @@ GLOBAL_LIST_BOILERPLATE(world_uplinks, /obj/item/device/uplink) hidden_uplink.trigger(user) /obj/item/device/multitool/uplink/New() + ..() hidden_uplink = new(src) /obj/item/device/multitool/uplink/attack_self(mob/user as mob) @@ -250,4 +236,3 @@ GLOBAL_LIST_BOILERPLATE(world_uplinks, /obj/item/device/uplink) /obj/item/device/radio/headset/uplink/New() ..() hidden_uplink = new(src) - hidden_uplink.uses = DEFAULT_TELECRYSTAL_AMOUNT diff --git a/code/game/objects/items/devices/uplink_random_lists.dm b/code/game/objects/items/devices/uplink_random_lists.dm index de05f910136..89bfd5f0040 100644 --- a/code/game/objects/items/devices/uplink_random_lists.dm +++ b/code/game/objects/items/devices/uplink_random_lists.dm @@ -34,11 +34,11 @@ var/datum/uplink_random_selection/all_uplink_selection = new/datum/uplink_random if(!prob(RI.keep_probability)) continue var/datum/uplink_item/I = uplink.items_assoc[RI.uplink_item] - if(I.cost(telecrystals, U) > telecrystals) + if(I.cost(U) > telecrystals) continue if(bought_items && (I in bought_items) && !prob(RI.reselect_probability)) continue - if(U && !I.can_buy(U)) + if(U && !I.can_buy(U, telecrystals)) continue return I diff --git a/code/modules/pda/cart.dm b/code/modules/pda/cart.dm index 2ec6a4e5366..150b31d044f 100644 --- a/code/modules/pda/cart.dm +++ b/code/modules/pda/cart.dm @@ -1,3 +1,4 @@ +<<<<<<< HEAD var/list/command_cartridges = list( /obj/item/weapon/cartridge/captain, /obj/item/weapon/cartridge/hop, @@ -309,3 +310,315 @@ var/list/civilian_cartridges = list( charges = 5 var/telecrystals = 0 messenger_plugins = list(new/datum/data/pda/messenger_plugin/virus/frame) +======= +var/list/command_cartridges = list( + /obj/item/weapon/cartridge/captain, + /obj/item/weapon/cartridge/hop, + /obj/item/weapon/cartridge/hos, + /obj/item/weapon/cartridge/ce, + /obj/item/weapon/cartridge/rd, + /obj/item/weapon/cartridge/cmo, + /obj/item/weapon/cartridge/head, + /obj/item/weapon/cartridge/lawyer // Internal Affaris, + ) + +var/list/security_cartridges = list( + /obj/item/weapon/cartridge/security, + /obj/item/weapon/cartridge/detective, + /obj/item/weapon/cartridge/hos + ) + +var/list/engineering_cartridges = list( + /obj/item/weapon/cartridge/engineering, + /obj/item/weapon/cartridge/atmos, + /obj/item/weapon/cartridge/ce + ) + +var/list/medical_cartridges = list( + /obj/item/weapon/cartridge/medical, + /obj/item/weapon/cartridge/chemistry, + /obj/item/weapon/cartridge/cmo + ) + +var/list/research_cartridges = list( + /obj/item/weapon/cartridge/signal/science, + /obj/item/weapon/cartridge/rd + ) + +var/list/cargo_cartridges = list( + /obj/item/weapon/cartridge/quartermaster, // This also covers cargo-techs, apparently, + /obj/item/weapon/cartridge/miner, + /obj/item/weapon/cartridge/hop + ) + +var/list/civilian_cartridges = list( + /obj/item/weapon/cartridge/janitor, + /obj/item/weapon/cartridge/service, + /obj/item/weapon/cartridge/hop + ) + +/obj/item/weapon/cartridge + name = "generic cartridge" + desc = "A data cartridge for portable microcomputers." + icon = 'icons/obj/pda.dmi' + icon_state = "cart" + item_state = "electronic" + w_class = ITEMSIZE_TINY + drop_sound = 'sound/items/drop/component.ogg' + pickup_sound = 'sound/items/pickup/component.ogg' + + var/obj/item/radio/integrated/radio = null + + var/charges = 0 + + var/list/stored_data = list() + var/list/programs = list() + var/list/messenger_plugins = list() + +/obj/item/weapon/cartridge/Destroy() + QDEL_NULL(radio) + QDEL_LIST(programs) + QDEL_LIST(messenger_plugins) + return ..() + +/obj/item/weapon/cartridge/proc/update_programs(obj/item/device/pda/pda) + for(var/A in programs) + var/datum/data/pda/P = A + P.pda = pda + for(var/A in messenger_plugins) + var/datum/data/pda/messenger_plugin/P = A + P.pda = pda + +/obj/item/weapon/cartridge/engineering + name = "\improper Power-ON cartridge" + icon_state = "cart-e" + programs = list( + new/datum/data/pda/app/power, + new/datum/data/pda/utility/scanmode/halogen) + +/obj/item/weapon/cartridge/atmos + name = "\improper BreatheDeep cartridge" + icon_state = "cart-a" + programs = list(new/datum/data/pda/utility/scanmode/gas) + +/obj/item/weapon/cartridge/medical + name = "\improper Med-U cartridge" + icon_state = "cart-m" + programs = list( + new/datum/data/pda/app/crew_records/medical, + new/datum/data/pda/utility/scanmode/medical) + +/obj/item/weapon/cartridge/chemistry + name = "\improper ChemWhiz cartridge" + icon_state = "cart-chem" + programs = list( + new/datum/data/pda/app/crew_records/medical, + new/datum/data/pda/utility/scanmode/medical, + new/datum/data/pda/utility/scanmode/reagent) + +/obj/item/weapon/cartridge/security + name = "\improper R.O.B.U.S.T. cartridge" + icon_state = "cart-s" + programs = list( + new/datum/data/pda/app/crew_records/security) + +/obj/item/weapon/cartridge/detective + name = "\improper D.E.T.E.C.T. cartridge" + icon_state = "cart-s" + programs = list( + new/datum/data/pda/app/crew_records/medical, + new/datum/data/pda/utility/scanmode/medical, + + new/datum/data/pda/app/crew_records/security) + + +/obj/item/weapon/cartridge/janitor + name = "\improper CustodiPRO cartridge" + desc = "The ultimate in clean-room design." + icon_state = "cart-j" + programs = list(new/datum/data/pda/app/janitor) + +/obj/item/weapon/cartridge/lawyer + name = "\improper P.R.O.V.E. cartridge" + icon_state = "cart-s" + programs = list(new/datum/data/pda/app/crew_records/security) + +/obj/item/weapon/cartridge/clown + name = "\improper Honkworks 5.0 cartridge" + icon_state = "cart-clown" + charges = 5 + programs = list(new/datum/data/pda/utility/honk) + messenger_plugins = list(new/datum/data/pda/messenger_plugin/virus/clown) + +/obj/item/weapon/cartridge/mime + name = "\improper Gestur-O 1000 cartridge" + icon_state = "cart-mi" + charges = 5 + messenger_plugins = list(new/datum/data/pda/messenger_plugin/virus/mime) + +/obj/item/weapon/cartridge/service + name = "\improper Serv-U Pro cartridge" + desc = "A data cartridge designed to serve YOU!" + +/obj/item/weapon/cartridge/signal + name = "generic signaler cartridge" + desc = "A data cartridge with an integrated radio signaler module." + programs = list(new/datum/data/pda/app/signaller) + +/obj/item/weapon/cartridge/signal/Initialize() + radio = new /obj/item/radio/integrated/signal(src) + ..() + +/obj/item/weapon/cartridge/signal/science + name = "\improper Signal Ace 2 cartridge" + desc = "Complete with integrated radio signaler!" + icon_state = "cart-tox" + programs = list( + new/datum/data/pda/utility/scanmode/gas, + + new/datum/data/pda/utility/scanmode/reagent, + + new/datum/data/pda/app/signaller) + +/obj/item/weapon/cartridge/quartermaster + name = "\improper Space Parts & Space Vendors cartridge" + desc = "Perfect for the Quartermaster on the go!" + icon_state = "cart-q" + programs = list( + new/datum/data/pda/app/supply) + +/obj/item/weapon/cartridge/miner + name = "\improper Drill-Jockey 4.5 cartridge" + desc = "It's covered in some sort of sand." + icon_state = "cart-q" + +/obj/item/weapon/cartridge/head + name = "\improper Easy-Record DELUXE cartridge" + icon_state = "cart-h" + programs = list(new/datum/data/pda/app/status_display) + +/obj/item/weapon/cartridge/hop + name = "\improper HumanResources9001 cartridge" + icon_state = "cart-h" + programs = list( + new/datum/data/pda/app/crew_records/security, + + new/datum/data/pda/app/janitor, + + new/datum/data/pda/app/supply, + + new/datum/data/pda/app/status_display) + +/obj/item/weapon/cartridge/hos + name = "\improper R.O.B.U.S.T. DELUXE cartridge" + icon_state = "cart-hos" + programs = list( + new/datum/data/pda/app/crew_records/security, + + new/datum/data/pda/app/status_display) + +/obj/item/weapon/cartridge/ce + name = "\improper Power-On DELUXE cartridge" + icon_state = "cart-ce" + programs = list( + new/datum/data/pda/app/power, + new/datum/data/pda/utility/scanmode/halogen, + + new/datum/data/pda/utility/scanmode/gas, + + new/datum/data/pda/app/status_display) + +/obj/item/weapon/cartridge/cmo + name = "\improper Med-U DELUXE cartridge" + icon_state = "cart-cmo" + programs = list( + new/datum/data/pda/app/crew_records/medical, + new/datum/data/pda/utility/scanmode/medical, + + new/datum/data/pda/utility/scanmode/reagent, + + new/datum/data/pda/app/status_display) + +/obj/item/weapon/cartridge/rd + name = "\improper Signal Ace DELUXE cartridge" + icon_state = "cart-rd" + programs = list( + new/datum/data/pda/utility/scanmode/gas, + + new/datum/data/pda/utility/scanmode/reagent, + + new/datum/data/pda/app/signaller, + + new/datum/data/pda/app/status_display) + +/obj/item/weapon/cartridge/rd/Initialize() + radio = new /obj/item/radio/integrated/signal(src) + . = ..() + +/obj/item/weapon/cartridge/captain + name = "\improper Value-PAK cartridge" + desc = "Now with 200% more value!" + icon_state = "cart-c" + programs = list( + new/datum/data/pda/app/power, + new/datum/data/pda/utility/scanmode/halogen, + + new/datum/data/pda/utility/scanmode/gas, + + new/datum/data/pda/app/crew_records/medical, + new/datum/data/pda/utility/scanmode/medical, + + new/datum/data/pda/utility/scanmode/reagent, + + new/datum/data/pda/app/crew_records/security, + + new/datum/data/pda/app/janitor, + + new/datum/data/pda/app/supply, + + new/datum/data/pda/app/status_display) + +/obj/item/weapon/cartridge/syndicate + name = "\improper Detomatix cartridge" + icon_state = "cart" + var/initial_remote_door_id = "smindicate" //Make sure this matches the syndicate shuttle's shield/door id!! //don't ask about the name, testing. + charges = 4 + programs = list(new/datum/data/pda/utility/toggle_door) + messenger_plugins = list(new/datum/data/pda/messenger_plugin/virus/detonate) + +/obj/item/weapon/cartridge/syndicate/New() + var/datum/data/pda/utility/toggle_door/D = programs[1] + if(istype(D)) + D.remote_door_id = initial_remote_door_id + +/obj/item/weapon/cartridge/proc/post_status(var/command, var/data1, var/data2) + + var/datum/radio_frequency/frequency = radio_controller.return_frequency(1435) + if(!frequency) return + + var/datum/signal/status_signal = new + status_signal.source = src + status_signal.transmission_method = TRANSMISSION_RADIO + status_signal.data["command"] = command + + switch(command) + if("message") + status_signal.data["msg1"] = data1 + status_signal.data["msg2"] = data2 + if(loc) + var/obj/item/PDA = loc + var/mob/user = PDA.fingerprintslast + log_admin("STATUS: [user] set status screen with [PDA]. Message: [data1] [data2]") + message_admins("STATUS: [user] set status screen with [PDA]. Message: [data1] [data2]") + + if("alert") + status_signal.data["picture_state"] = data1 + + frequency.post_signal(src, status_signal) + +/obj/item/weapon/cartridge/frame + name = "F.R.A.M.E. cartridge" + icon_state = "cart" + charges = 5 + messenger_plugins = list(new/datum/data/pda/messenger_plugin/virus/frame) +>>>>>>> 462f961... Merge pull request #7869 from Atermonera/mind_telecrystals diff --git a/code/modules/pda/messenger_plugins.dm b/code/modules/pda/messenger_plugins.dm index 90cb9460a48..dd77e621a05 100644 --- a/code/modules/pda/messenger_plugins.dm +++ b/code/modules/pda/messenger_plugins.dm @@ -85,7 +85,4 @@ P.lock_code = lock_code // else // P.hidden_uplink.hidden_crystals += P.hidden_uplink.uses //Temporarially hide the PDA's crystals, so you can't steal telecrystals. - var/obj/item/weapon/cartridge/frame/parent_cart = pda.cartridge - P.hidden_uplink.uses = parent_cart.telecrystals - parent_cart.telecrystals = 0 P.hidden_uplink.active = TRUE