From 84291c3902bffb061a8f2e5ad9d99ecbb867505f Mon Sep 17 00:00:00 2001 From: SirRichardFrancis Date: Sun, 29 May 2022 18:20:55 +0300 Subject: [PATCH 1/6] save progress --- baystation12.dme | 3 - code/__defines/characters.dm | 4 - code/__defines/economy.dm | 8 +- code/__defines/research.dm | 15 +- code/__defines/subsystems.dm | 1 - code/_helpers/global_lists.dm | 3 - .../characters/character_helpers.dm | 280 --------------- .../characters/database_persistence.dm | 319 ------------------ code/controllers/subsystems/ticker.dm | 3 +- code/datums/autolathe/tools.dm | 2 +- code/datums/mind.dm | 135 -------- code/game/jobs/job/job.dm | 7 +- code/game/machinery/vending.dm | 6 +- code/modules/asset_cache/asset_list_items.dm | 4 - .../preference_setup/general/01_basic.dm | 35 +- code/modules/client/preferences.dm | 8 - .../clothing/spacesuits/rig/rig_account.dm | 46 +-- code/modules/customitems/item_spawning.dm | 2 +- code/modules/economy/cash.dm | 263 ++++++--------- code/modules/economy/credits.dm | 57 +--- code/modules/economy/money_account.dm | 7 +- code/modules/economy/store/store_credits.dm | 81 +++-- code/modules/economy/store/store_designs.dm | 20 +- code/modules/economy/store/store_schematic.dm | 55 +-- code/modules/economy/store/store_ui.dm | 4 +- code/modules/merchant/merchant_programs.dm | 6 +- .../modules/mob/dead/new_player/new_player.dm | 6 - code/modules/mob/living/carbon/human/death.dm | 5 - code/modules/mob/living/carbon/human/life.dm | 4 - .../projectiles/guns/launcher/money_cannon.dm | 6 +- code/modules/research/designs.dm | 7 +- code/modules/research/designs/design_rig.dm | 2 +- .../research/designs/design_rig_module.dm | 20 +- code/modules/research/designs/design_types.dm | 16 +- .../research/designs/design_weapons.dm | 8 +- icons/obj/items.dmi | Bin 74323 -> 81740 bytes 36 files changed, 232 insertions(+), 1216 deletions(-) delete mode 100644 code/__defines/characters.dm delete mode 100644 code/controllers/subsystems/characters/character_helpers.dm delete mode 100644 code/controllers/subsystems/characters/database_persistence.dm diff --git a/baystation12.dme b/baystation12.dme index 5cb1c19be18..bfe54322e43 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -34,7 +34,6 @@ #include "code\__defines\atmospherics.dm" #include "code\__defines\audio.dm" #include "code\__defines\callback.dm" -#include "code\__defines\characters.dm" #include "code\__defines\chat.dm" #include "code\__defines\chemistry.dm" #include "code\__defines\client.dm" @@ -298,8 +297,6 @@ #include "code\controllers\subsystems\wireless.dm" #include "code\controllers\subsystems\xenoarch.dm" #include "code\controllers\subsystems\zcopy.dm" -#include "code\controllers\subsystems\characters\character_helpers.dm" -#include "code\controllers\subsystems\characters\database_persistence.dm" #include "code\controllers\subsystems\initialization\codex.dm" #include "code\controllers\subsystems\processing\airflow.dm" #include "code\controllers\subsystems\processing\circuit.dm" diff --git a/code/__defines/characters.dm b/code/__defines/characters.dm deleted file mode 100644 index 433bd80e066..00000000000 --- a/code/__defines/characters.dm +++ /dev/null @@ -1,4 +0,0 @@ -//Defines relating to persistent data and character data -#define STATUS_LIVING 0 //Still on the ship and wandering around, come what may -#define STATUS_DEAD 1 //Died, self explanatory -#define STATUS_ESCAPED 2 //Successfully left the ship and quite possibly lived to see another day \ No newline at end of file diff --git a/code/__defines/economy.dm b/code/__defines/economy.dm index ea8f3a6ab3d..2336ffdfd3e 100644 --- a/code/__defines/economy.dm +++ b/code/__defines/economy.dm @@ -8,10 +8,4 @@ #define SALARY_COMMAND 1500 //Department heads and bridge staff #define SALARY_HIGH_COMMAND 3000 //The captain and first officer - - -#define FEE_NEUTRAL 0.1 //10 percent -#define FEE_DEATH 0.15 - - -#define REWARD_SCHEMATIC 3000 \ No newline at end of file +#define REWARD_SCHEMATIC 3000 diff --git a/code/__defines/research.dm b/code/__defines/research.dm index 0850e7a269d..bc6ac4aca55 100644 --- a/code/__defines/research.dm +++ b/code/__defines/research.dm @@ -12,10 +12,11 @@ #define TECH_ILLEGAL "earth gov" #define TECH_NECRO "marker" -#define NONE 0 -#define IMPRINTER 1 //For circuits. Uses glass/chemicals. -#define PROTOLATHE 2 //New stuff. Uses glass/metal/chemicals -#define MECHFAB 4 //Mechfab -#define CHASSIS 8 //For protolathe, but differently -#define AUTOLATHE 16 //For autolathe -#define STORE 32 //Purchasing in store \ No newline at end of file +#define NONE 0x1 +#define IMPRINTER 0x2 // For circuits. Uses glass/chemicals. +#define PROTOLATHE 0x4 // New stuff. Uses glass/metal/chemicals +#define MECHFAB 0x8 // Mechfab +#define CHASSIS 0x10 // For protolathe, but differently +#define AUTOLATHE 0x20 // For autolathe +#define STORE_SCHEMATICS 0x40 // Bound to schematic, unlockable in store with said chematic +#define STORE_ROUNDSTART 0x80 // Always available in store diff --git a/code/__defines/subsystems.dm b/code/__defines/subsystems.dm index bc8be66afd9..e9a8544cc4d 100644 --- a/code/__defines/subsystems.dm +++ b/code/__defines/subsystems.dm @@ -61,7 +61,6 @@ #define SS_INIT_PROFILER 101 #define SS_INIT_GARBAGE 99 -#define SS_INIT_DATABASE 95 #define SS_INIT_SERVER_MAINT 93 #define SS_INIT_TIMETRACK 46 #define SS_INIT_MATERIALS 8 diff --git a/code/_helpers/global_lists.dm b/code/_helpers/global_lists.dm index 642771a6bcb..a7551ccca0a 100644 --- a/code/_helpers/global_lists.dm +++ b/code/_helpers/global_lists.dm @@ -21,9 +21,6 @@ var/global/list/whitelisted_species = list(SPECIES_HUMAN) // Species that requir var/global/list/playable_species = list(SPECIES_HUMAN) // A list of ALL playable species, whitelisted, latejoin or otherwise. -//A list of IC characters in the format character_id = mind -GLOBAL_LIST_EMPTY(characters) - //Datum/patron_item instances GLOBAL_LIST_EMPTY(patron_items) diff --git a/code/controllers/subsystems/characters/character_helpers.dm b/code/controllers/subsystems/characters/character_helpers.dm deleted file mode 100644 index 571e3bf0b00..00000000000 --- a/code/controllers/subsystems/characters/character_helpers.dm +++ /dev/null @@ -1,280 +0,0 @@ - -/* - This ambiguous proc attempts to fetch a character's ID. - - Or, if they have none, it will register them and create one - - The input it takes is a representation of a character, this can be one of a few things: - /datum/mind: A mind for a character who has been instantiated in the current round and probably controlled a mob. They may or may not have had a client - - /datum/preferences: A client's savefile containing all their characters in an abstract data state. Typically a player can have ten characters, each a discrete copy of the preference data - Only one of them, the currently selected selected one, will be extracted and used here - - - Both of these datatypes will store the ID if they've previously been assigned one. And if one is assigned we'll just return that - - If none is assigned it means this character has never been registered, we will contact the database to insert them, and then query it again to get the newly autogenerated ID - That ID will be stored in the data, and also returned -*/ -/proc/get_character_id(var/data) - var/slot = 0 - if(!dbcon || !(dbcon?.IsConnected())) - return null - - //Data used for registering, if we need to - var/name - var/ckey - - if (istype(data, /datum/preferences)) - var/datum/preferences/P = data - if (P.character_id) - return P.character_id - name = P.real_name - ckey = P.client_ckey - slot = P.default_slot - else if (istype(data, /datum/mind)) - var/datum/mind/M = data - if (!M.has_crew_persistence()) - //Not allowed, must be a necro/antag/bst - return null - - if (M.character_id) - return M.character_id - - //Lets see if there's an id on associated preferences - var/datum/preferences/P = get_preferences(M.current) - if (P?.character_id) - //There is and we don't have it? oops! - M.character_id = P.character_id - return M.character_id - - if (P) - slot = P.default_slot - else - //If this mind doesnt already have a character id, we aren't able to create one without attached preferences, abort - return null - - name = M.name - ckey = ckey(M.key) - else - //Invalid type, no good - return null - - - //If we get here, we have no id, but there might be one in the database - var/found_id = find_character(ckey, name, slot, data) - if (found_id) - return found_id - - //If we get here, the character isn't registered, do so - return register_character(ckey, name, slot, data) - - - -/* - This attempts to locate an existing key in the database which is a match for us -*/ -/proc/find_character(var/ckey, var/name, var/slot, var/output) - - var/DBQuery/query = dbcon.NewQuery("SELECT * FROM (characters) WHERE (slot = [slot] AND ckey = '[ckey]');") - query.Execute() - - if(query.NextRow()) - var/id = query.item[1] - .=id - if (output) - - output:character_id = id - - //If this was a mind and not preferences, then we need to save it on prefs immediately - if (istype(output, /datum/mind)) - var/datum/mind/M = output - var/datum/preferences/P = get_preferences(M.current) - if (P) - P.character_id = id - P.save_preferences() - -/* - This creates a record for a character with this name, use sparingly - Do other checks to ensure it doesn't already exist first - - Name is the real name of the character - Output is an optional datum with a character_id var which we'll populate with our result -*/ -/proc/register_character(var/ckey, var/name, var/slot, var/output) - - var/DBQuery/query = dbcon.NewQuery("INSERT INTO characters (ckey, character_name, slot) VALUES('[ckey]','[name]',[slot]);") - query.Execute() - - query = dbcon.NewQuery("SELECT LAST_INSERT_ID();") - query.Execute() - - - if(query.NextRow()) - if (output) - var/id = query.item[1] - .=id - output:character_id = id - query = dbcon.NewQuery("INSERT INTO credit_records (character_id)\ - VALUES('[id]');") - query.Execute() - - - //If this was a mind and not preferences, then we need to save it on prefs immediately - if (istype(output, /datum/mind)) - var/datum/mind/M = output - var/datum/preferences/P = get_preferences(M.current) - P.character_id = id - P.save_preferences() - - -/* - Called when a character loads into the world, to populate their employee checking account - - Returns the number of credits this character should have - - the input is either a preferences or a mind -*/ -//TODO: Insert in preferences menu -/proc/get_character_credits(var/character_data) - var/id = get_character_id(character_data) - if (!id || !(dbcon?.IsConnected())) - return 0 - - //Get the number of credits from the database record associated with our ID - var/DBQuery/query = dbcon.NewQuery("SELECT (credits) FROM (credit_records) WHERE (character_id = [id]);") - query.Execute() - - if(query.NextRow()) - return text2num(query.item[1]) - - return 0 - -/* - Called when a character enters a round, or is revived by an admin to negate a death - This updates the last seen time for them in the characters table - and creates an entry for them in the credits_lastround table. - The latter makes them eligible for end of round fees depending on their status -*/ -/proc/character_spawned(var/datum/mind/M) - //Get their id, registering them in the process if needed - var/id = get_character_id(M) - - - - if (!id || !(dbcon?.IsConnected())) - return - - - //Now lets update the characters table first - //Update the last seen var - var/DBQuery/query = dbcon.NewQuery("UPDATE characters SET last_seen = CURRENT_TIMESTAMP(), character_name = '[M.name]' WHERE (character_id = [id]);") - query.Execute() - - //Force living status on spawning. - //This accounts for situations where someone is killed by griefing and admins let them respawn to fix it - update_lastround_credits(M, STATUS_LIVING) - - -/* - Creates or updates an entry in the lastround_credits table, which is used at the end or beginning of the round to handle changes in persistent credits - A status can optionally be passed in, if not we'll call a proc to get status -*/ -/proc/update_lastround_credits(var/datum/mind/M, var/status) - - if (!status) - status = M.get_round_status() - - var/list/credits = M.get_owned_credits() - if (credits == null) - return //No account setup - - var/id = get_character_id(M) - - if (!id || !(dbcon?.IsConnected())) - return 0 - - var/credits_stored = credits["stored"] - var/credits_carried = credits["carried"] - var/character_status = status - //And lets set their status in the lastround table to living - var/DBQuery/query = dbcon.NewQuery( - "INSERT INTO credit_lastround \ - (character_id, credits_stored, credits_carried, character_status) \ - VALUES \ - ([id], [credits_stored], [credits_carried], [character_status]) \ - ON DUPLICATE KEY UPDATE \ - credits_stored = [credits_stored],\ - credits_carried = [credits_carried],\ - character_status = [character_status];") - query.Execute() - - -/* - Called when a character dies - - any deaths in a designated escape zone are noncanon, so we'll check for that here - The input is always a mind because someone must first exist in order to die -*/ -/proc/character_died(var/datum/mind/M) - - //TODO: Check if they were already dead to prevent duplication - M.get_final_credits() - - //Spawn off to let the stack finish executing so they get properly marked as dead - spawn(10) - update_lastround_credits(M, STATUS_DEAD) - - - - -//Takes an ID or a mind. Delivers a string message to a client who is associated with it -/proc/message_character(var/target, var/message) - if (!target) - return - - //Lets get the mind first - var/datum/mind/M = target - if (isnum(target)) - M = GLOB.characters["[target]"] - - // - if (!istype(M)) - return - - //We need a client to talk to, no point if there's no human player reading this - var/client/C - if (!C) - //Mind didn't have a client? - C = M.original?.client || M.current?.client || M.ghost?.client - - if (C) - to_chat(C, message) - - - -/* - Is this mind/mob allowed to save stuff in the database? Used to filter out things -*/ -/datum/mind/proc/has_crew_persistence() - if (isnull(cached_crew_persistence)) - cached_crew_persistence = original.has_crew_persistence() - - return cached_crew_persistence - -/mob/proc/has_crew_persistence() - //No necromorphs - if (is_necromorph()) - return FALSE - - //No special admin characters - if (isbst(src)) - return FALSE - - //No ERTs - var/datum/antagonist/A = get_antag_data(mind.special_role) - if (A) - if ((A.flags & ANTAG_OVERRIDE_JOB)) - return FALSE - - return TRUE \ No newline at end of file diff --git a/code/controllers/subsystems/characters/database_persistence.dm b/code/controllers/subsystems/characters/database_persistence.dm deleted file mode 100644 index 5dfc84c0fad..00000000000 --- a/code/controllers/subsystems/characters/database_persistence.dm +++ /dev/null @@ -1,319 +0,0 @@ -/* - This system handles persistent content and player vars which are stored in an external database - It loads them as soon as possible when the server boots - It also saves things back to the database, generally at a minimum interval of once a minute, but it can do it on demand - - Currently used for: - Characters, generally - Persistent credits - Store schematics - - Planned future uses: - Skills? -*/ - -//TODO: Fix depositing credits from chip to rig -SUBSYSTEM_DEF(database) - name = "Database" - wait = 1 MINUTE - init_order = SS_INIT_DATABASE //Initializes before atoms - - - - //Design caches - var/list/known_designs - var/list/unknown_designs - - - var/list/pending_schematics = list() - - //A list of mind datums whose credit amounts have changed recently, and are queued for updates - //These are batched into one per mind per minute, as needed, to reduce database load. - //So we're not sending a flurry of requests if someone is shuffling around chips in their inventory - var/list/credits_to_update = list() - - var/free_schematics = 20 //The first X are considered free and won't be counted when determining how many to remove - var/schematic_loss = 0.05 - -/datum/controller/subsystem/database/stat_entry(msg) - return "Click to debug!" - -/datum/controller/subsystem/database/Initialize() - - - log_world("Database initializing") - //update_store_designs() //No point doing this here, its called from the asset system after designs are initialised - - - -/datum/controller/subsystem/database/fire(resumed = 0) - for (var/datum/mind/M as anything in credits_to_update) - update_lastround_credits(M) - - credits_to_update = list() - - - - - - - - - - -/* - Credit Handling -*/ -/datum/controller/subsystem/database/credits_changed(var/datum/mind/M) - credits_to_update |= M - -/datum/proc/credits_changed() - -//Mob level helper -/mob/credits_changed() - if (mind) - SSdatabase.credits_changed(mind) - -//Item helper -/obj/item/credits_changed() - var/mob/M = get_holding_mob() - if(M) - M.credits_changed() - - -/* - This proc cleans out the credit_lastround table, and converts it into actual changes to each character's stored credits, - which are committed to the credit_records table - This is called exactly twice per round: World boot, and end of round - In most cases, the end of round call will handle everything and the table will be empty next round - However, in case of a crash, the endround processing may not happen, so its run at the start to cover last round's changes -*/ -/datum/controller/subsystem/database/proc/process_pending_credits() - log_debug("Updating pending credits") - log_debug("------------------------------------") - var/successes = 0 - var/attempts = 0 - if(!dbcon || !dbcon.IsConnected()) - log_debug("No database connection, failed") - return null - - var/DBQuery/query = dbcon.NewQuery("SELECT * FROM credit_lastround") - query.Execute() - - //Lets fetch the records for each character - while(query.NextRow()) - attempts++ - var/id = text2num(query.item[1]) - var/stored = text2num(query.item[2]) - var/carried = text2num(query.item[3]) - var/status = text2num(query.item[4]) - - log_debug("Uploading credits: id:[id] Stored: [stored] Carried: [carried] Status: [status]") - - - - if (!id) - log_debug("No ID, cannot update") - continue //Failsafe - - var/total_fees = 0 - - //Lets process the held credits first. - //There are three status, living, dead, and escaped. But we're only interested in the first one - //In the case that they died, the processing needed happened instantly on death, we dont repeat it here - //In the case that they escaped, we don't take any of their credits. - //So here, we're only applying a fee to held credits if they lived to the end of the round, but did not escape the ship. - //This includes going afk/cryo/hiding out on aegis - if (status == STATUS_LIVING) - total_fees += carried * FEE_NEUTRAL - carried *= 1 - FEE_NEUTRAL - - //Next, the stored credits, this is simple - total_fees += stored * FEE_NEUTRAL - stored *= 1 - FEE_NEUTRAL - - //Add them up - var/total = carried + stored - - //And lets write the new value back to the database - var/qstring = "UPDATE credit_records SET credits = [total] WHERE character_id = [id];" - var/DBQuery/upload_query = dbcon.NewQuery(qstring) - var/result = upload_query.Execute() - log_debug("Update credit query: [qstring]\n\ - \n\ - result is [result]") - if (result == TRUE) - successes++ - - if (total_fees) - message_character(id, SPAN_NOTICE("CEC has charged you a total of [total_fees] credits in holding fees.")) - - - - log_debug("Finished uploading credits, [successes]/[attempts] successful") - //Alright we are done with the pending stuff, wipe it - query = dbcon.NewQuery("TRUNCATE TABLE credit_lastround;") - query.Execute() - - -//Called at server start -/hook/database_connected/proc/handle_lastround_credits() - SSdatabase.process_pending_credits() - - return TRUE //Needed to let the hook know we handled things okay - - - - - - - - - - - - - -/* - Schematic Handling - See store_schematic and store_designs for more info - -*/ - -//This returns a list of all design IDs which are not known to the store. These can thusly be used for assigning to new schematics -/datum/controller/subsystem/database/proc/update_store_designs() - - known_designs = list() - unknown_designs = list() - - //This gets a list of every design that exists - var/list/designs = SSresearch.design_ids.Copy() - - if (!length(designs)) - return //Fatal error - - //We need to filter it to contain only designs that are valid for store use - for (var/id in designs) - var/datum/design/D = designs[id] - if (!(D.build_type & STORE)) - designs -= id - - //Custom items, they dont belong in normal lists - if (D.patron_only || D.whitelist) - designs -= id - - if(dbcon && dbcon.IsConnected()) - - - //Now lets get the list of all persisting schematics in the database - var/DBQuery/query = dbcon.NewQuery("SELECT * FROM store_schematics;") - query.Execute() - - //We loop through the db results and subtract any design in it, from the all-list. - while (query.NextRow()) - var/schematic_id = query.item[1] - if (!(schematic_id in designs)) - //Garbage ID, remove from database - var/DBQuery/Q2 = dbcon.NewQuery("DELETE FROM store_schematics WHERE store_schematic=\"[schematic_id]\";") - Q2.Execute() - continue - - designs -= schematic_id - SSdatabase.known_designs += schematic_id - - //Now designs only contains things which aren't in the DB - - //Cache this - unknown_designs = designs - - else - SSdatabase.known_designs = designs - - //And now reload the database for individual stores - load_store_database() - - - //Now all thats done, if there were any schematics waiting on this moment, lets allow them to do their thing now - for (var/obj/item/store_schematic/SS in pending_schematics) - SS.get_design() - pending_schematics.Cut() - - - -/datum/controller/subsystem/database/proc/upload_design(var/id) - - if(!dbcon || !dbcon.IsConnected()) - return null - - var/DBQuery/query = dbcon.NewQuery("SELECT * FROM store_schematics WHERE (store_schematic = \"[id]\");") - query.Execute() - - //If this returns anything, then that schematic already existed, return false - if (query.NextRow()) - return FALSE - - query = dbcon.NewQuery("INSERT INTO store_schematics (store_schematic) VALUES(\"[id]\");") - query.Execute() - - - //We're uploading something new, lets update this - update_store_designs() - - return TRUE - - - - - -/datum/controller/subsystem/database/proc/handle_endround_schematics() - - if(!dbcon || !dbcon.IsConnected()) - return null - - //Now lets get the list of all persisting schematics in the database - var/DBQuery/query = dbcon.NewQuery("SELECT * FROM store_schematics ORDER BY upload_date ASC;") - query.Execute() - - var/total = query.RowCount() - total -= free_schematics - - if (total <= 0) - //not enough, we're done - return - - var/list/data = query.GetData() - - - var/num_to_remove = round(total * schematic_loss, 1) - //Always remove at least one - if (num_to_remove < 1) - num_to_remove = 1 - - - var/list/deleted_ids = list() - - while(num_to_remove > 0) - num_to_remove-- - //Lets pick one from the list, averaged towards the earlier items - var/index = clamp(round(rand()*0.75*length(data),1), 1, length(data)) - - //This is a list of ID and date - var/list/record = data[index] - var/schematic_id = record[1] - - //Store a note of what we removed - deleted_ids += schematic_id - - //Remove from database - var/DBQuery/Q2 = dbcon.NewQuery("DELETE FROM store_schematics WHERE store_schematic=\"[schematic_id]\";") - Q2.Execute() - - //Remove from that data list too - data.Cut(index, index+1) - - if (length(data) < 1) - break //Shouldn't happen - - if (length(deleted_ids)) - command_announcement.Announce("Data Corruption detected in schematic database. [length(deleted_ids)] schematics corrupted.", new_sound = sound('sound/misc/interference.ogg', volume=25)) - diff --git a/code/controllers/subsystems/ticker.dm b/code/controllers/subsystems/ticker.dm index 15f2a3760a6..2dcdeabf06d 100644 --- a/code/controllers/subsystems/ticker.dm +++ b/code/controllers/subsystems/ticker.dm @@ -102,7 +102,6 @@ SUBSYSTEM_DEF(ticker) mode.process(wait * 0.1) if(!roundend_check_paused && mode.check_finished(force_ending) || force_ending) - SSdatabase.handle_endround_schematics() current_state = GAME_STATE_FINISHED config.ooc_allowed = TRUE config.dooc_allowed = TRUE @@ -188,6 +187,8 @@ SUBSYSTEM_DEF(ticker) log_world("Game start took [(world.timeofday - init_start) / 10]s") round_start_time = world.time + GLOB.using_map.setup_economy() + load_store_database() current_state = GAME_STATE_PLAYING Master.SetRunLevel(RUNLEVEL_GAME) diff --git a/code/datums/autolathe/tools.dm b/code/datums/autolathe/tools.dm index 02fb710479e..407db13ba51 100644 --- a/code/datums/autolathe/tools.dm +++ b/code/datums/autolathe/tools.dm @@ -52,7 +52,7 @@ /datum/design/autolathe/tool/big_wrench name = "big wrench" build_path = /obj/item/weapon/tool/wrench/big_wrench - build_type = AUTOLATHE | STORE + build_type = AUTOLATHE | STORE_ROUNDSTART price = 4000 /datum/design/autolathe/tool/pickaxe diff --git a/code/datums/mind.dm b/code/datums/mind.dm index b33aada33c8..69b00894f1e 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -2,9 +2,6 @@ The way datum/mind stuff works has been changed a lot. Minds now represent IC characters rather than following a client around constantly. - Note that a mind only represents a character who has been brought into physical existence this round. - Minds do not exist for characters in savefiles until they are spawned - Guidelines for using minds properly: - Never mind.transfer_to(ghost). The var/current and var/original of a mind must always be of type mob/living! @@ -40,8 +37,6 @@ var/mob/dead/observer/ghost/ghost //When this mob is dead and floating around, this var holds the ghost mob who used to be its body var/active = 0 - var/character_id //The database ID of the associated character records for this mind. Used to fetch and store persistent data - var/memory var/list/known_connections //list of known (RNG) relations between people var/gen_relations_info @@ -69,15 +64,6 @@ //put this here for easier tracking ingame var/datum/money_account/initial_account - /* - This value is set once, on death, during the call stack - It checks and caches how many credits our original mob was carrying when they died. - - The main purpose of this is to have a record in case the body is gibbed, dusted, or otherwise annihilated - */ - var/list/final_credits = null - - var/cached_crew_persistence = null var/list/initial_email_login = list("login" = "", "password" = "") @@ -675,124 +661,3 @@ ..() mind.assigned_role = "Juggernaut" mind.set_special_role("Cultist") - - -/* - Called when we are in a human mob who dies -*/ -/datum/mind/proc/on_death() - //Database handling, only do this if we have a registered character ID - if (has_crew_persistence()) - //Antags don't get death penalties - if (special_role) - return - - character_died(src) - - -/* - How is this character doing this round? Returns one of the three STATUS_XXX defines from defines/characters.dm -*/ -/datum/mind/proc/get_round_status() - - - - if (current?.stat == DEAD || isghostmind(src)) - return STATUS_DEAD - - //TODO: Check if they're on a shuttle or an escape area - var/area/A = get_area(current) - if(A) - if (is_type_in_list(A, GLOB.using_map.post_round_safe_areas)) - return STATUS_ESCAPED - - //Shuttle handling - if (istype(A, /area/shuttle)) - var/area/shuttle/AS = A - if (AS.has_escaped()) - return STATUS_ESCAPED - - - - return STATUS_LIVING - - - -/* - Get the total credits that this character "owns", divided into two categories: - Stored: The contents of their checking account - Carried: The contents of their rig account, and of any credit chips on their person -*/ -/datum/mind/proc/get_owned_credits() - - //Indicates this mind is not properly setup yet - if (!initial_account) - return null - - //If they're dead, we don't check credits again as we don't want to know about any postmortem changes - if (is_dead()) - return final_credits - - var/list/values =list() - values["stored"] = initial_account.money - values["carried"] = current.get_carried_credits() - - return values - - -/* - Called exactly once on death, caches the value of credits we were carrying at the moment we died - This happens just before our body is gibbed, if that's going to happen -*/ -/datum/mind/proc/get_final_credits() - //Don't do it again if its been done - if (!isnull(final_credits)) - return - - final_credits = list() - final_credits["carried"] = original.get_carried_credits() - - if (initial_account) - final_credits["stored"] = initial_account.money - - //TODO: Delete excess carried credits from the mob to avoid looting? - - //Lets drop a credit chip for the loot we have - if (final_credits["carried"] > 1) - var/obj/item/weapon/spacecash/ewallet/E = new (get_turf(original)) - E.set_worth(final_credits["carried"]*FEE_DEATH) - - //Now move the rest of the carried cash back to the account - if (initial_account) - initial_account.money += final_credits["carried"] * (1 - FEE_DEATH) - - - final_credits["carried"] *= (1 - FEE_DEATH) - - //Get rid of what's left - spawn(10) - zero_carried_credits() - -/datum/mind/proc/zero_carried_credits() - var/mob/living/carbon/human/H = current - if (!istype(H)) - return - if (H.wearing_rig) - var/datum/money_account/MA = H.wearing_rig.get_account() - MA.money = 0 - - for (var/obj/item/weapon/spacecash/ewallet/E in H.get_contents()) - qdel(E) - -//Returns true if this mind is for a character who is dead. -/datum/mind/proc/is_dead() - if (current?.stat == DEAD || isghostmind(src)) - return TRUE - - return FALSE - - -//A wrapper that puts us in a global list -/datum/mind/proc/set_id(var/new_id) - character_id = new_id - GLOB.characters["character_id"] = src \ No newline at end of file diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm index 675b79ddf1b..ad2a0965b9c 100644 --- a/code/game/jobs/job/job.dm +++ b/code/game/jobs/job/job.dm @@ -87,12 +87,9 @@ if(!account_allowed || (H.mind && H.mind.initial_account)) return - //Here we load persistent credits from the database - var/money_amount = get_character_credits(H.mind) + var/datum/money_account/M = create_account(H.real_name, starting_credits, null) - var/datum/money_account/M = create_account(H.real_name, money_amount, null) if(H.mind) - var/remembered_info = "" remembered_info += "Your account number is: #[M.account_number]
" remembered_info += "Your account pin is: [M.remote_access_pin]
" @@ -104,8 +101,6 @@ H.mind.store_memory(remembered_info) H.mind.initial_account = M - M.mind = H.mind //Give the account a link to our mind - update_lastround_credits(H.mind) //Update persistent credits to prepare for future changes to_chat(H, "Your account number is: [M.account_number], your account pin is: [M.remote_access_pin]") diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 2737730b698..b7975fc3517 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -168,8 +168,8 @@ var/obj/item/weapon/spacecash/ewallet/C = W paid = pay_with_ewallet(C) handled = 1 - else if (istype(W, /obj/item/weapon/spacecash/bundle)) - var/obj/item/weapon/spacecash/bundle/C = W + else if (istype(W, /obj/item/weapon/spacecash)) + var/obj/item/weapon/spacecash/C = W paid = pay_with_cash(C) handled = 1 @@ -229,7 +229,7 @@ /** * Receive payment with cashmoney. */ -/obj/machinery/vending/proc/pay_with_cash(var/obj/item/weapon/spacecash/bundle/cashmoney) +/obj/machinery/vending/proc/pay_with_cash(var/obj/item/weapon/spacecash/cashmoney) if(currently_vending.price > cashmoney.worth) // This is not a status display message, since it's something the character // themselves is meant to see BEFORE putting the money in diff --git a/code/modules/asset_cache/asset_list_items.dm b/code/modules/asset_cache/asset_list_items.dm index 4de16946350..da3543f3bda 100644 --- a/code/modules/asset_cache/asset_list_items.dm +++ b/code/modules/asset_cache/asset_list_items.dm @@ -84,9 +84,6 @@ proc/get_craft_item(path) SSresearch.initialize_design_file(file) SSresearch.design_files_to_init = list() - - SSdatabase.update_store_designs() - . = ..() /proc/register_research_design(var/datum/design/design) @@ -182,7 +179,6 @@ proc/get_craft_item(path) //These procs update and sort various other things after the patron items have added themselves to them sort_loadout_categories() - SSdatabase.update_store_designs() GLOB.custom_items_loaded = TRUE if (LOADOUT_LOADED) diff --git a/code/modules/client/preference_setup/general/01_basic.dm b/code/modules/client/preference_setup/general/01_basic.dm index ae7b2248816..5ed1df86cbf 100644 --- a/code/modules/client/preference_setup/general/01_basic.dm +++ b/code/modules/client/preference_setup/general/01_basic.dm @@ -1,26 +1,24 @@ -datum/preferences +/datum/preferences var/real_name //our character's name var/be_random_name = 0 //whether we are a random name every round var/gender = MALE //gender of character (well duh) var/age = 30 //age of character var/spawnpoint = SPAWNPOINT_CRYO //where this character will spawn (0-2). var/metadata = "" - var/character_id + /datum/category_item/player_setup_item/general/basic name = "Basic" sort_order = 1 -/datum/category_item/player_setup_item/general/basic/load_character(var/savefile/S) +/datum/category_item/player_setup_item/general/basic/load_character(var/savefile/S) S["real_name"] >> pref.real_name S["name_is_always_random"] >> pref.be_random_name S["gender"] >> pref.gender S["age"] >> pref.age S["spawnpoint"] >> pref.spawnpoint S["OOC_Notes"] >> pref.metadata - S["character_id"] >> pref.character_id - /datum/category_item/player_setup_item/general/basic/save_character(var/savefile/S) @@ -30,7 +28,7 @@ datum/preferences S["age"] << pref.age S["spawnpoint"] << pref.spawnpoint S["OOC_Notes"] << pref.metadata - S["character_id"] << pref.character_id + /datum/category_item/player_setup_item/general/basic/sanitize_character() var/datum/species/S = all_species[pref.species ? pref.species : SPECIES_HUMAN] @@ -44,31 +42,6 @@ datum/preferences pref.be_random_name = sanitize_integer(pref.be_random_name, 0, 1, initial(pref.be_random_name)) -//Called from load and update character, through several layers of propagation -/datum/category_item/player_setup_item/general/basic/update_setup() - var/ID_needed = FALSE - if (!isnull(pref.character_id) && (dbcon?.IsConnected())) - //Here we will account for an edge case - //If we have an ID, but the database has been wiped and no longer contains our information.... - var/DBQuery/query = dbcon.NewQuery("SELECT * FROM characters WHERE (character_id = [pref.character_id] AND slot = [pref.default_slot] AND ckey = '[pref.client_ckey]');") - query.Execute() - if(!query.NextRow()) - //We're not in the database! - ID_needed = TRUE - - else - ID_needed = TRUE - - - //If there is no character ID or the one we have is invalid, re/register one in the database - if (ID_needed) - pref.character_id = null - if (get_character_id(pref)) - return TRUE //Returning true tells it to save preferences back to disk. This will ensure this is only done once, and not every round - - - //TODO: Delete character from database if deleted ingame? - /datum/category_item/player_setup_item/general/basic/content() . = list() . += "Name: " diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 5ace8a4fc36..ded16be110e 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -335,14 +335,6 @@ var/list/preferences_datums = list() panel.set_content(jointext(dat,null)) panel.open() -//Called during character creation, a step AFTER copy_to above, for the same mob. -//This is run after the mob's mind datum is created and that is passed in here -//Use for applying any vars which belong on the mind rather than the body -/datum/preferences/proc/copy_to_mind(var/datum/mind/M) - M.set_id(src.character_id) - -/datum/preferences/proc/set_id(var/new_id) - character_id = new_id /datum/preferences/proc/close_load_dialog(mob/user) if(panel) diff --git a/code/modules/clothing/spacesuits/rig/rig_account.dm b/code/modules/clothing/spacesuits/rig/rig_account.dm index 073fe335b36..afc4dda5877 100644 --- a/code/modules/clothing/spacesuits/rig/rig_account.dm +++ b/code/modules/clothing/spacesuits/rig/rig_account.dm @@ -10,42 +10,19 @@ /obj/item/weapon/rig var/datum/money_account/account - /obj/item/weapon/rig/proc/get_account() - RIG_ACCOUNT_CREATE return account -/obj/item/weapon/rig/proc/create_rig_account() - - - -/obj/item/weapon/rig/equipped(mob/living/carbon/human/user, slot) - .=..() - user.credits_changed() - -/obj/item/weapon/rig/dropped(mob/user) - .=..() - user.credits_changed() - /obj/item/weapon/rig/proc/get_account_balance() - //We don't need to create the account for this if it doesn't exist yet if (!account) return 0 return account.money /obj/item/weapon/rig/proc/charge_to_rig_account(var/source, var/purpose, var/terminal_id, var/amount) - RIG_ACCOUNT_CREATE - var/datum/money_account/current_account = get_account() - charge_to_account(current_account.account_number, source, purpose, terminal_id, amount) - if (wearer) - wearer.credits_changed() - return TRUE - - - -/obj/item/weapon/rig/credits_recieved(var/balance, var/datum/source) - RIG_ACCOUNT_CREATE + if(current_account) + charge_to_account(current_account.account_number, source, purpose, terminal_id, amount) + return TRUE /obj/item/weapon/rig/proc/handle_credit_chip(W, user) var/obj/item/weapon/spacecash/ewallet/chip = W @@ -83,34 +60,21 @@ //Cant take more than the RIG has amount = clamp(amount, 0, get_account_balance()) - //Alright we are ready to do this charge_to_rig_account(chip, (cashflow_direction == 1 ? "Deposit" : "Withdrawal"), chip, amount*cashflow_direction) chip.modify_worth((-amount)*cashflow_direction) to_chat(user, "Transferred [amount] credits [(cashflow_direction == 1 ? "to" : "from")] RIG") -/* - Some Helpers -*/ /mob/proc/get_rig_balance() return 0 - /mob/living/carbon/human/get_rig_balance() - if (wearing_rig) + if(wearing_rig) return wearing_rig.get_account_balance() - return 0 - - - /mob/proc/get_rig_account() - return null - /mob/living/carbon/human/get_rig_account() - if (wearing_rig) + if(wearing_rig) return wearing_rig.get_account() - - return null \ No newline at end of file diff --git a/code/modules/customitems/item_spawning.dm b/code/modules/customitems/item_spawning.dm index cc0c3989103..0453c0a79e1 100644 --- a/code/modules/customitems/item_spawning.dm +++ b/code/modules/customitems/item_spawning.dm @@ -160,7 +160,7 @@ D.desc = description D.build_path = item_path D.price = store_cost - D.build_type = STORE + D.build_type = STORE_ROUNDSTART D.starts_unlocked = TRUE D.id = id D.category = src.category diff --git a/code/modules/economy/cash.dm b/code/modules/economy/cash.dm index a3ceeacd1a5..109bc7110db 100644 --- a/code/modules/economy/cash.dm +++ b/code/modules/economy/cash.dm @@ -1,190 +1,151 @@ /obj/item/weapon/spacecash - name = "0 Credits" - desc = "It's worth 0 Credits." - gender = PLURAL + name = "credits" + desc = "It's worth something. Probably." icon = 'icons/obj/items.dmi' - icon_state = "spacecash1" - opacity = 0 - density = 0 - anchored = 0.0 - force = 1.0 - throwforce = 1.0 - + icon_state = "spacecash" + force = 1 + throw_speed = 1 throw_range = 2 w_class = ITEM_SIZE_TINY - var/access = list() - access = access_bridge var/worth = 0 - var/global/denominations = list(1000,500,200,100,50,20,10,1) + var/coin_icons = TRUE -/obj/item/weapon/spacecash/proc/pay_into(var/cost, var/atom/target) - if (cost > worth) - return FALSE +/obj/item/weapon/spacecash/minercash + name = "merits" + icon_state = "minercash" + coin_icons = FALSE - .=TRUE - worth -= cost - //Possible future TODO: Inform the target that it recieved credits +/obj/item/weapon/spacecash/Destroy() + worth = 0 + . = ..() + + +/obj/item/weapon/spacecash/update_icon() + cut_overlays() + var/remaining_worth = worth + var/iteration = 0 + var/coins_only = TRUE + var/list/coin_denominations = list(10, 5, 1) + var/list/banknote_denominations = list(1000, 500, 200, 100, 50, 20) + for(var/i in banknote_denominations) + while(remaining_worth >= i && iteration < 50) + remaining_worth -= i + iteration++ + var/image/banknote = image('icons/obj/items.dmi', "[icon_state][i]") + var/matrix/M = matrix() + M.Translate(rand(-6, 6), rand(-4, 8)) + banknote.transform = M + overlays += banknote + coins_only = FALSE + + if(remaining_worth) + for(var/i in coin_denominations) + while(remaining_worth >= i && iteration < 50) + remaining_worth -= i + iteration++ + var/image/coin = image('icons/obj/items.dmi', "[icon_state][i]") + var/matrix/M = matrix() + M.Translate(rand(-6, 6), rand(-4, 8)) + coin.transform = M + overlays += coin + + if(coins_only && coin_icons) + if(worth == 1) + name = "coin" + desc = "A single credit." + gender = NEUTER + else + name = "coins" + desc = "Total of [worth] credits." + gender = PLURAL + else + name = "[worth] [initial(name)]" // 123 credits/merits + desc = "Cold hard cash." + gender = NEUTER - update_icon() -/obj/item/weapon/spacecash/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(istype(W, /obj/item/weapon/spacecash)) - if(istype(W, /obj/item/weapon/spacecash/ewallet)) return 0 - - var/obj/item/weapon/spacecash/bundle/bundle - if(!istype(W, /obj/item/weapon/spacecash/bundle)) - var/obj/item/weapon/spacecash/cash = W - bundle = new (src.loc) - bundle.worth += cash.worth - qdel(cash) - else //is bundle - bundle = W - bundle.worth += src.worth - bundle.update_icon() - if(istype(user, /mob/living/carbon/human)) - var/mob/living/carbon/human/h_user = user - h_user.drop_from_inventory(bundle) - h_user.put_in_hands(bundle) - to_chat(user, "You add [src.worth] Credits worth of money to the bundles.
It holds [bundle.worth] Credits now.
") +/obj/item/weapon/spacecash/attackby(obj/item/weapon/spacecash/S, mob/living/carbon/human/H) + if(ispath(S.type, type)) + worth += S.worth + update_icon() + to_chat(H, SPAN_NOTICE("You add [S.name] to the bundle.
It holds [name] now.")) + H.unEquip(S) + qdel(S) + + +/obj/item/weapon/spacecash/attack_self(mob/user) + var/amount = input(user, "How many credits do you want to take? (0 to [worth])", "Take Money", 20) as num + amount = round(CLAMP(amount, 0, worth)) + if(!amount) + return + + worth -= amount + if(!worth) + user.unEquip(src) qdel(src) - else if(istype(W, /obj/item/weapon/gun/launcher/money)) - var/obj/item/weapon/gun/launcher/money/L = W - L.absorb_cash(src, user) + var/obj/item/weapon/spacecash/S + if(istype(src, /obj/item/weapon/spacecash/minercash)) + S = new /obj/item/weapon/spacecash/minercash(user.loc) + else + S = new(user.loc) + S.worth = amount + S.update_icon() + user.put_in_hands(S) + update_icon() -/obj/item/weapon/spacecash/proc/getMoneyImages() - if(icon_state) - return list(icon_state) -/obj/item/weapon/spacecash/bundle - name = "pile of credits" - icon_state = "" - desc = "They are worth 0 Credits." - worth = 0 +/obj/item/weapon/spacecash/Initialize() + . = ..() + update_icon() + -/obj/item/weapon/spacecash/bundle/getMoneyImages() +/obj/item/weapon/spacecash/proc/getMoneyImages() if(icon_state) return list(icon_state) - . = list() - var/sum = src.worth - var/num = 0 - for(var/i in denominations) - while(sum >= i && num < 50) - sum -= i - num++ - . += "credits[i]" - if(num == 0) // Less than one thaler, let's just make it look like 1 for ease - . += "credits1" - -/obj/item/weapon/spacecash/bundle/update_icon() - overlays.Cut() - var/list/images = src.getMoneyImages() - - for(var/A in images) - var/image/banknote = image('icons/obj/items.dmi', A) - var/matrix/M = matrix() - M.Translate(rand(-6, 6), rand(-4, 8)) - M.Turn(pick(-45, -27.5, 0, 0, 0, 0, 0, 0, 0, 27.5, 45)) - banknote.transform = M - src.overlays += banknote - - src.desc = "They are worth [worth] Credits." - if(worth in denominations) - src.SetName("[worth] Credits") - else - src.SetName("pile of [worth] credits") - if(overlays.len <= 2) - w_class = ITEM_SIZE_TINY - else - w_class = ITEM_SIZE_SMALL - -/obj/item/weapon/spacecash/bundle/attack_self() - var/amount = input(usr, "How many Credits do you want to take? (0 to [src.worth])", "Take Money", 20) as num - amount = round(Clamp(amount, 0, src.worth)) - if(amount==0) return 0 - - src.worth -= amount - src.update_icon() - if(amount in list(1000,500,200,100,50,20,1)) - var/cashtype = text2path("/obj/item/weapon/spacecash/bundle/c[amount]") - var/obj/cash = new cashtype (usr.loc) - usr.put_in_hands(cash) - else - var/obj/item/weapon/spacecash/bundle/bundle = new (usr.loc) - bundle.worth = amount - bundle.update_icon() - usr.put_in_hands(bundle) - if(!worth) - qdel(src) -/obj/item/weapon/spacecash/bundle/c1 - name = "1 Credit" - icon_state = "spacecash1" - desc = "It's worth 1 credit." +/obj/item/weapon/spacecash/c1 worth = 1 -/obj/item/weapon/spacecash/bundle/c10 - name = "10 Credits" - icon_state = "spacecash10" - desc = "It's worth 10 Credits." +/obj/item/weapon/spacecash/c10 worth = 10 -/obj/item/weapon/spacecash/bundle/c20 - name = "20 Credits" - icon_state = "spacecash20" - desc = "It's worth 20 Credits." +/obj/item/weapon/spacecash/c20 worth = 20 -/obj/item/weapon/spacecash/bundle/c50 - name = "50 Credits" - icon_state = "spacecash50" - desc = "It's worth 50 Credits." +/obj/item/weapon/spacecash/c50 worth = 50 -/obj/item/weapon/spacecash/bundle/c100 - name = "100 Credits" - icon_state = "spacecash100" - desc = "It's worth 100 Credits." +/obj/item/weapon/spacecash/c100 worth = 100 -/obj/item/weapon/spacecash/bundle/c200 - name = "200 Credits" - icon_state = "spacecash200" - desc = "It's worth 200 Credits." +/obj/item/weapon/spacecash/c200 worth = 200 -/obj/item/weapon/spacecash/bundle/c500 - name = "500 Credits" - icon_state = "spacecash500" - desc = "It's worth 500 Credits." +/obj/item/weapon/spacecash/c500 worth = 500 -/obj/item/weapon/spacecash/bundle/c1000 - name = "1000 Credits" - icon_state = "spacecash1000" - desc = "It's worth 1000 Credits." +/obj/item/weapon/spacecash/c1000 worth = 1000 -/obj/item/weapon/spacecash/bundle/c10000 - name = "10000 Credits" - icon_state = "spacecash1000" - desc = "It's worth 10000 Credits." +/obj/item/weapon/spacecash/c10000 worth = 10000 -proc/spawn_money(var/sum, spawnloc, mob/living/carbon/human/human_user as mob) - if(sum in list(1000,500,200,100,50,20,10,1)) - var/cash_type = text2path("/obj/item/weapon/spacecash/bundle/c[sum]") - var/obj/cash = new cash_type (usr.loc) - if(ishuman(human_user) && !human_user.get_active_hand()) - human_user.put_in_hands(cash) - else - var/obj/item/weapon/spacecash/bundle/bundle = new (spawnloc) - bundle.worth = sum - bundle.update_icon() - if (ishuman(human_user) && !human_user.get_active_hand()) - human_user.put_in_hands(bundle) - return +/proc/spawn_money(sum, spawnloc, mob/living/carbon/human/H) + var/obj/item/weapon/spacecash/S = new(spawnloc) + S.worth = sum + S.update_icon() + if(istype(H) && !H.get_active_hand()) + H.put_in_hands(S) + + +/proc/spawn_miner_money(sum, spawnloc, mob/living/carbon/human/H) + var/obj/item/weapon/spacecash/minercash/S = new(spawnloc) + S.worth = sum + S.update_icon() + if(istype(H) && !H.get_active_hand()) + H.put_in_hands(S) diff --git a/code/modules/economy/credits.dm b/code/modules/economy/credits.dm index f49ebdd0bb9..cf921c425c7 100644 --- a/code/modules/economy/credits.dm +++ b/code/modules/economy/credits.dm @@ -5,18 +5,10 @@ icon_state = "grey" var/owner_name = "" //So the ATM can set it so the EFTPOS can put a valid name on transactions. -/obj/item/weapon/spacecash/ewallet/equipped(mob/user, slot) - .=..() - credits_changed() - -/obj/item/weapon/spacecash/ewallet/dropped() - .=..() - credits_changed() - /obj/item/weapon/spacecash/ewallet/examine(mob/user) . = ..(user) - if (!(user in view(2)) && user!=src.loc) return - to_chat(user, "Chip's owner: [src.owner_name]. Credits remaining: [src.worth].") + if((user == loc) || (user in oview(2))) + to_chat(user, SPAN_NOTICE("Chip's owner: [owner_name]. Credits remaining: [worth].")) /obj/item/weapon/spacecash/ewallet/proc/set_worth(var/newval) worth = newval @@ -30,7 +22,7 @@ /obj/item/weapon/spacecash/ewallet/update_icon() icon_state = "grey" switch(worth) - if (1 to 500) + if (0 to 500) icon_state = "gold" if (501 to 1000) icon_state = "green" @@ -64,39 +56,10 @@ worth = 10000 - - - - - - - //Helpers /datum/proc/credits_recieved(var/balance, var/datum/source) return TRUE - -/mob/proc/get_carried_credits() - . = 0 - - - - for (var/obj/item/weapon/spacecash/ewallet/C as anything in get_carried_credit_chips()) - . += C.worth - -/mob/living/carbon/human/get_carried_credits() - .=..() - if (wearing_rig) - . += wearing_rig.get_account_balance() - -/mob/proc/get_carried_credit_chips() - //Get everything we're carrying recursively - var/list/things = src.get_contents() - . = list() - for (var/obj/item/weapon/spacecash/ewallet/C in things) - . += C - - //Giving credits to a mob /mob/proc/recieve_credits(var/amount, var/sender, var/origin_account, var/reason) var/datum/money_account/ECA = get_account() @@ -104,20 +67,8 @@ charge_to_account(ECA.account_number, sender, reason, sender, amount) return - var/datum/money_account/rig_account = get_rig_account() - if (rig_account) - charge_to_account(rig_account.account_number, sender, reason, sender, amount) - return - - - var/list/chips = get_carried_credit_chips() - for (var/obj/item/weapon/spacecash/ewallet/C in chips) - C.modify_worth(amount) - return - - //Last fallback, create a new chip and give it to the mob var/obj/item/weapon/spacecash/ewallet/C = new /obj/item/weapon/spacecash/ewallet C.set_worth(amount) - equip_to_storage_or_hands(C) \ No newline at end of file + equip_to_storage_or_hands(C) diff --git a/code/modules/economy/money_account.dm b/code/modules/economy/money_account.dm index e1a0d6cf92e..87bcadd60ca 100644 --- a/code/modules/economy/money_account.dm +++ b/code/modules/economy/money_account.dm @@ -10,16 +10,11 @@ //1 - require manual login / account number and pin //2 - require card and manual login - var/datum/mind/mind = null //Optional, contains a character mind this account is associated with - -/datum/money_account/credits_changed() - if (mind) - SSdatabase.credits_changed(mind) /datum/money_account/proc/do_transaction(var/datum/transaction/T) money = max(0, money + T.amount) transaction_log += T - credits_changed() + /datum/money_account/proc/get_balance() . = 0 diff --git a/code/modules/economy/store/store_credits.dm b/code/modules/economy/store/store_credits.dm index ad7b9c610df..0c763a6c68d 100644 --- a/code/modules/economy/store/store_credits.dm +++ b/code/modules/economy/store/store_credits.dm @@ -4,13 +4,21 @@ //How many credits are available for purchase in total, between inserted chip + rig account /obj/machinery/store/proc/get_available_credits() - .=0 - if (chip) - .+= chip.worth + . = 0 + if(chip) + . += chip.worth - if (occupant && occupant.wearing_rig) - .+=occupant.wearing_rig.get_account_balance() + if(occupant && occupant.wearing_rig) + . += occupant.wearing_rig.get_account_balance() + for(var/i in deposit_box.contents) + if(istype(i, /obj/item/weapon/spacecash)) + var/obj/item/weapon/spacecash/S = i + . += S.worth + + var/datum/money_account/A = occupant?.get_account() + if(A) + . += A.money //Can the occupant afford to pay a cost ? True/false /obj/machinery/store/proc/occupant_can_afford(var/cost) @@ -23,49 +31,52 @@ return (get_available_credits() >= cost) - - //Deducts credits -/obj/machinery/store/proc/occupant_pay_credits(var/cost, var/safety = TRUE) - if (safety && (!occupant || !occupant_can_afford())) +/obj/machinery/store/proc/occupant_pay_credits(left_to_pay) + if(!occupant || !occupant_can_afford()) return FALSE - - var/pay_amount - if (chip) - pay_amount = min(cost, chip.worth) - if (chip.pay_into(pay_amount, src)) - cost -= pay_amount - - if (cost <= 0) - return TRUE - - //Alright now we pay whatever is leftover from the rig account - - - - if (cost > 0) - if (occupant && occupant.wearing_rig) - pay_amount = min(occupant.wearing_rig.get_account_balance(), cost) + if(chip) + if(chip.worth <= left_to_pay) + left_to_pay -= chip.worth + chip.worth = 0 + chip.update_icon() + else + chip.worth -= left_to_pay + chip.update_icon() + return TRUE + + if(occupant && occupant.wearing_rig) + var/pay_amount = min(occupant.wearing_rig.get_account_balance(), left_to_pay) var/obj/item/weapon/rig/R = occupant.wearing_rig R.charge_to_rig_account(src, "Store Purchase", machine_id, -pay_amount) - cost -= pay_amount + left_to_pay -= pay_amount + if(left_to_pay) + for(var/i in deposit_box.contents) + if(istype(i, /obj/item/weapon/spacecash)) + var/obj/item/weapon/spacecash/S = i + if(S.worth <= left_to_pay) + left_to_pay -= S.worth + qdel(S) + deposit_box.update_ui_data() + else + S.worth -= left_to_pay + S.update_icon() + deposit_box.update_ui_data() + return TRUE - if (cost <= 0) - return TRUE + var/datum/money_account/A = occupant?.get_account() + if(A) + A.money -= left_to_pay + return TRUE //Buys and returns the current item, don't call this directly /obj/machinery/store/proc/buy_current() - if (!occupant) + if(!occupant || !occupant_pay_credits(current_design.get_price(occupant))) return - var/cost = current_design.get_price(occupant) - - if (!occupant_pay_credits(cost)) - return - playsound(src, sound_vend, VOLUME_MID, TRUE) return current_design.CreatedInStore(src) diff --git a/code/modules/economy/store/store_designs.dm b/code/modules/economy/store/store_designs.dm index bc6d6bfe0a8..2bf9b9eda0e 100644 --- a/code/modules/economy/store/store_designs.dm +++ b/code/modules/economy/store/store_designs.dm @@ -20,21 +20,11 @@ GLOBAL_LIST_EMPTY(limited_store_designs) /proc/load_store_database() - GLOB.public_store_designs = list() - - var/list/temp_list = SSdatabase.known_designs.Copy() - - for (var/id in temp_list) - + for(var/id in SSresearch.design_ids.Copy()) var/datum/design/D = SSresearch.design_ids[id] - //Its gotta be printable in the store - if (!(D.build_type & STORE)) - continue - - - LAZYADD(GLOB.public_store_designs[D.category], list(D.ui_data())) + if(D.build_type & STORE_ROUNDSTART) + LAZYADD(GLOB.unlimited_store_designs[D.category], list(D.ui_data())) - //Add this lot to the list - for (var/datum/design/D in GLOB.unlimited_store_designs) - LAZYADD(GLOB.public_store_designs[D.category], list(D.ui_data())) \ No newline at end of file + else if(D.build_type & STORE_SCHEMATICS) + LAZYADD(GLOB.public_store_designs[D.category], list(D.ui_data())) diff --git a/code/modules/economy/store/store_schematic.dm b/code/modules/economy/store/store_schematic.dm index 029c01cfee0..03521093ee3 100644 --- a/code/modules/economy/store/store_schematic.dm +++ b/code/modules/economy/store/store_schematic.dm @@ -28,61 +28,28 @@ .=..() get_design() -/obj/machinery/store/proc/handle_schematic(var/obj/item/store_schematic/I, var/mob/user) - - if (!I.design_id) - I.get_design() - - var/success = SSdatabase.upload_design(I.design_id) - - if (!success) - var/former_design = I.design_id - I.get_design() - to_chat(user, "Incorrect identification tag on schematic. Contents were falsely identified as [former_design] but are actually [I.design_id]") - - - //One last attempt - success = SSdatabase.upload_design(I.design_id) - - if (!success) - //Terminal failure - to_chat(user, "Fatal error: If this error persists, please contact your system administrator") - return success - - +/obj/machinery/store/proc/handle_schematic(obj/item/store_schematic/I, mob/user) + var/datum/design/D = SSresearch.design_ids[I.design_id] + GLOB.unlimited_store_designs |= D visible_message("Thank you for participating in the CEC Data Recovery programme, [user.real_name]. Your account has been credited with [REWARD_SCHEMATIC] credits") occupant.recieve_credits(REWARD_SCHEMATIC, machine_id, machine_id, "Schematic Bounty") - occupant.remove_item(I) qdel(I) - return success /obj/item/store_schematic/proc/get_design() - - //If the designs aren't populated, add ourself to a pending list, we'll be back! - if (!SSdatabase.unknown_designs) - SSdatabase.pending_schematics |= src - return - - if (!length(SSdatabase.unknown_designs)) - //There are no unknown designs left? We'll just have to delete ourselves + if(GLOB.public_store_designs.len) + var/datum/design/D = pick(GLOB.public_store_designs) + design_name = D.item_name + design_id = D.id + name = "Store Schematic ([design_name])" + GLOB.public_store_designs -= D + else // There are no unknown designs left? We'll just have to delete ourselves QDEL_IN(src, 1) new /obj/random/rare_loot(get_turf(src)) - return - - design_id = pick(SSdatabase.unknown_designs) - - var/datum/design/D = SSresearch.design_ids[design_id] - design_name = D.item_name - name = "Store Schematic ([design_name])" - - - -/obj/machinery/store/proc/handle_peng(var/obj/item/weapon/peng/I, var/mob/user) - +/obj/machinery/store/proc/handle_peng(obj/item/weapon/peng/I, mob/user) visible_message("Thank you for participating in the Peng cross-promotional scheme, [user.real_name]. Your account has been credited with [PENG_BOUNTY] credits") occupant.recieve_credits(PENG_BOUNTY, machine_id, machine_id, "Peng Bounty") diff --git a/code/modules/economy/store/store_ui.dm b/code/modules/economy/store/store_ui.dm index 2aa229e54ff..54804255fe1 100644 --- a/code/modules/economy/store/store_ui.dm +++ b/code/modules/economy/store/store_ui.dm @@ -56,9 +56,9 @@ Called whenever a new occupant enters */ /obj/machinery/store/proc/update_occupant_data() - combined_store_data = GLOB.public_store_designs.Copy() + combined_store_data = GLOB.unlimited_store_designs.Copy() - for (var/datum/design/D in GLOB.limited_store_designs) + for(var/datum/design/D in GLOB.limited_store_designs) if (D.PI?.can_buy_in_store(occupant)) LAZYADD(combined_store_data[D.category], list(D.ui_data)) diff --git a/code/modules/merchant/merchant_programs.dm b/code/modules/merchant/merchant_programs.dm index c783fc2b887..6c5d5c16ff4 100644 --- a/code/modules/merchant/merchant_programs.dm +++ b/code/modules/merchant/merchant_programs.dm @@ -135,10 +135,10 @@ last_comms = "PAD NOT CONNECTED. CANNOT TRANSFER" return var/turf/T = get_turf(pad) - var/obj/item/weapon/spacecash/bundle/B = new(T) - B.worth = bank + var/obj/item/weapon/spacecash/S = new(T) + S.worth = bank bank = 0 - B.update_icon() + S.update_icon() /datum/computer_file/program/merchant/Topic(href, href_list) if(..()) diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index 8cf4a1b204a..93e4d5f6987 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -464,8 +464,6 @@ mind.transfer_to(new_character) //won't transfer key since the mind is not active - client.prefs.copy_to_mind(new_character.mind) - new_character.SetName(real_name) new_character.dna.ready_dna(new_character) new_character.dna.b_type = client.prefs.b_type @@ -485,10 +483,6 @@ new_character.regenerate_icons() new_character.key = key //Manually transfer the key to log them in - - //Register that they've joined the round - character_spawned(new_character.mind) - return new_character /mob/dead/new_player/proc/ViewManifest() diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index f46ba7dc6b5..85bfbb2745b 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -40,11 +40,6 @@ if(s) s.do_backup() - - //Database update - if (mind) - mind.on_death() - //Handle species-specific deaths. species.handle_death(src) animate_tail_stop() diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index a751ae54f3d..91fa52e927c 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -1006,10 +1006,6 @@ E.take_external_damage(burn = round(species_heat_mod * log(10, (burn_temperature + 10)), 0.1), used_weapon = hud_used.fire) /mob/living/carbon/human/rejuvenate() - - //If the mob was dead and is being rejuvenated, then an admin is probably undoing their death. In this case we'll undo the dead status in the database as well, set them back to living - if (stat == DEAD && mind && mind.character_id) - character_spawned(mind) restore_blood() full_prosthetic = null shock_stage = 0 diff --git a/code/modules/projectiles/guns/launcher/money_cannon.dm b/code/modules/projectiles/guns/launcher/money_cannon.dm index 210a6fa7de8..623a57bc8d2 100644 --- a/code/modules/projectiles/guns/launcher/money_cannon.dm +++ b/code/modules/projectiles/guns/launcher/money_cannon.dm @@ -30,7 +30,7 @@ nv++ if (!nv) break - var/obj/item/weapon/spacecash/bundle/bling = new(T) + var/obj/item/weapon/spacecash/bling = new(T) bling.worth = nv bling.update_icon() if(projectile_vomit) @@ -64,7 +64,7 @@ to_chat(user, "There's no money in [src].") return - var/obj/item/weapon/spacecash/bling = new /obj/item/weapon/spacecash/bundle() + var/obj/item/weapon/spacecash/bling = new /obj/item/weapon/spacecash() bling.worth = receptacle_value bling.update_icon() user.put_in_hands(bling) @@ -84,7 +84,7 @@ if(!receptacle_value || receptacle_value < 1) return null - var/obj/item/weapon/spacecash/bling = new /obj/item/weapon/spacecash/bundle() + var/obj/item/weapon/spacecash/bling = new /obj/item/weapon/spacecash() if(receptacle_value >= dispensing) bling.worth = dispensing receptacle_value -= dispensing diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index 76bf93ca33f..348adb3f76d 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -208,12 +208,9 @@ other types of metals and chemistry for reagents). if(!build_path) return - if(!(build_type & STORE)) - return - - var/atom/A = new build_path(store_ref) + if((build_type & STORE_SCHEMATICS) || (build_type & STORE_ROUNDSTART)) + return new build_path(store_ref) - return A /datum/design/autolathe build_type = AUTOLATHE diff --git a/code/modules/research/designs/design_rig.dm b/code/modules/research/designs/design_rig.dm index b6a2aa06015..fe87a43e857 100644 --- a/code/modules/research/designs/design_rig.dm +++ b/code/modules/research/designs/design_rig.dm @@ -1,5 +1,5 @@ /datum/design/item/rig - build_type = STORE + build_type = STORE_ROUNDSTART category = "RIG" price = 8000 store_transfer = TRUE diff --git a/code/modules/research/designs/design_rig_module.dm b/code/modules/research/designs/design_rig_module.dm index d8304f52f3e..772e2112c89 100644 --- a/code/modules/research/designs/design_rig_module.dm +++ b/code/modules/research/designs/design_rig_module.dm @@ -4,7 +4,7 @@ category = "Modules" materials = list(MATERIAL_STEEL = 4000, "plastic" = 2500, MATERIAL_GLASS = 2000, MATERIAL_GOLD = 1000) price = 2500 - build_type = STORE + build_type = STORE_SCHEMATICS store_transfer = TRUE /datum/design/item/rig_module/meson @@ -98,7 +98,7 @@ name = "Flash" desc = "A normal flash, mountable on a RIG." id = "rig_flash" - build_type = PROTOLATHE | STORE + build_type = PROTOLATHE | STORE_SCHEMATICS materials = list("plastic" = 1500, MATERIAL_STEEL = 1000, MATERIAL_GLASS = 500) build_path = /obj/item/rig_module/device/flash @@ -106,7 +106,7 @@ name = "Taser" desc = "A taser, mountable on a RIG." id = "rig_taser" - build_type = PROTOLATHE | STORE + build_type = PROTOLATHE | STORE_SCHEMATICS materials = list(MATERIAL_STEEL = 4000, "plastic" = 2500, MATERIAL_GLASS = 2000, MATERIAL_GOLD = 1000) build_path = /obj/item/rig_module/mounted/taser @@ -132,37 +132,25 @@ materials = list(MATERIAL_STEEL = 3000, MATERIAL_GLASS = 3500, "plastic" = 2000) build_path = /obj/item/rig_module/cooling_unit - - /datum/design/item/rig_module/kinesis name = "G.R.I.P kinesis module" - build_type = STORE + build_type = STORE_SCHEMATICS build_path = /obj/item/rig_module/kinesis /datum/design/item/rig_module/kinesis_adv price = 5000 name = "G.R.I.P advanced kinesis module" - build_type = STORE build_path = /obj/item/rig_module/kinesis/advanced - - - - - /datum/design/item/rig_module/speedboost name = "Femoral Exoskeleton" - build_type = STORE build_path = /obj/item/rig_module/extension/speedboost /datum/design/item/rig_module/speedboost_adv name = "Advanced Femoral Exoskeleton" - build_type = STORE price = 5000 build_path = /obj/item/rig_module/extension/speedboost/advanced - /datum/design/item/rig_module/adv_healthbar name = "Vitals Monitor: Advanced" - build_type = STORE build_path = /obj/item/rig_module/healthbar/advanced diff --git a/code/modules/research/designs/design_types.dm b/code/modules/research/designs/design_types.dm index cf5d229e8f8..d3c82e4335e 100644 --- a/code/modules/research/designs/design_types.dm +++ b/code/modules/research/designs/design_types.dm @@ -141,7 +141,7 @@ Botany: /datum/design/item - build_type = PROTOLATHE | STORE + build_type = PROTOLATHE | STORE_ROUNDSTART /datum/design/item/powernode name = "power node" @@ -152,7 +152,7 @@ Botany: /datum/design/item/stock_part category = "Parts" - build_type = PROTOLATHE | STORE + build_type = PROTOLATHE | STORE_ROUNDSTART /datum/design/item/stock_part/basic_capacitor name = "basic capacitor" @@ -287,7 +287,7 @@ Botany: build_path = /obj/item/weapon/handcuffs /datum/design/item/powercell - build_type = PROTOLATHE | STORE + build_type = PROTOLATHE | STORE_ROUNDSTART category = "Power" /datum/design/item/powercell/basic @@ -333,7 +333,7 @@ Botany: /datum/design/item/optical materials = list(MATERIAL_STEEL = 50, MATERIAL_GLASS = 50) - build_type = PROTOLATHE | STORE + build_type = PROTOLATHE | STORE_SCHEMATICS category = "Optics" /datum/design/item/optical/health @@ -368,7 +368,7 @@ Botany: price = 750 /datum/design/item/mining - build_type = PROTOLATHE | STORE + build_type = PROTOLATHE | STORE_SCHEMATICS category = "Mining" /datum/design/item/mining/rocksaw @@ -411,7 +411,7 @@ Botany: price = 300 /datum/design/item/medical - build_type = PROTOLATHE | STORE + build_type = PROTOLATHE | STORE_ROUNDSTART materials = list(MATERIAL_STEEL = 30, MATERIAL_GLASS = 20) category = "Medical" @@ -490,7 +490,7 @@ Botany: build_type = PROTOLATHE //No appearing in store /datum/design/item/surgery - build_type = PROTOLATHE | STORE + build_type = PROTOLATHE | STORE_SCHEMATICS category = "Medical" /datum/design/item/surgery/scalpel_laser1 @@ -675,7 +675,7 @@ Botany: name = "Welding Mask" desc = "A head-mounted face cover designed to protect the wearer completely from space-arc eye." id = "weldingmask" - build_type = PROTOLATHE | STORE + build_type = PROTOLATHE | STORE_ROUNDSTART materials = list(MATERIAL_STEEL = 4000, MATERIAL_GLASS = 1000) build_path = /obj/item/clothing/head/welding diff --git a/code/modules/research/designs/design_weapons.dm b/code/modules/research/designs/design_weapons.dm index 94a1c8a0282..582f271e6f9 100644 --- a/code/modules/research/designs/design_weapons.dm +++ b/code/modules/research/designs/design_weapons.dm @@ -39,7 +39,7 @@ S fuel tank (hydrazine) */ /datum/design/item/weapon category = "Weapons" - build_type = PROTOLATHE | STORE + build_type = PROTOLATHE | STORE_SCHEMATICS price = 7000 materials = list(MATERIAL_STEEL = 30000, MATERIAL_GLASS = 2000, MATERIAL_SILVER = 4000, MATERIAL_URANIUM = 4000) @@ -161,7 +161,7 @@ S fuel tank (hydrazine) /datum/design/item/ammo category = "Ammunition" - build_type = PROTOLATHE | STORE + build_type = PROTOLATHE | STORE_SCHEMATICS price = 2000 //Sidearms @@ -267,14 +267,14 @@ S fuel tank (hydrazine) /datum/design/item/ammo/fuel_tank name = "fuel tank (gasoline)" id = "fuel_tank" - build_type = STORE + build_type = STORE_SCHEMATICS build_path = /obj/item/weapon/reagent_containers/glass/fuel_tank/fuel price = 1000 /datum/design/item/ammo/hydrazine_tank name = "fuel tank (hydrazine)" id = "hydrazine_tank" - build_type = STORE + build_type = STORE_SCHEMATICS build_path = /obj/item/weapon/reagent_containers/glass/fuel_tank/hydrazine price = 2000 diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi index 0e57c79f62ab4671e673098a7211844225f602ca..59d43afcfa6194275d13c516db006cc473b4017a 100644 GIT binary patch literal 81740 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 BD literal 74323 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�WeUmczLh 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 From aad5b9982c692c10403a1994a8c61951900a11db Mon Sep 17 00:00:00 2001 From: SirRichardFrancis Date: Sat, 18 Jun 2022 11:29:20 +0300 Subject: [PATCH 2/6] sever economy from database, add cash, miner cash and miner vendor --- baystation12.dme | 1 + code/controllers/subsystems/trade.dm | 12 ------ code/game/machinery/vending.dm | 2 +- code/game/machinery/vending_miner.dm | 42 +++++++++++++++++++ code/game/mecha/mech_fabricator.dm | 2 +- code/modules/asset_cache/asset_list_items.dm | 3 -- code/modules/customitems/item_spawning.dm | 32 +++++--------- code/modules/economy/cash.dm | 3 +- code/modules/economy/store/store_credits.dm | 6 ++- code/modules/economy/store/store_designs.dm | 16 +++---- code/modules/economy/store/store_schematic.dm | 8 ++-- code/modules/economy/store/store_ui.dm | 18 +++++--- code/modules/mining/machine_processing.dm | 10 ++++- code/modules/research/designs.dm | 19 +++------ code/modules/research/designs/design_rig.dm | 2 - .../research/designs/design_rig_module.dm | 1 - 16 files changed, 97 insertions(+), 80 deletions(-) create mode 100644 code/game/machinery/vending_miner.dm diff --git a/baystation12.dme b/baystation12.dme index bfe54322e43..5c87cba10bf 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -782,6 +782,7 @@ #include "code\game\machinery\syndicatebeacon.dm" #include "code\game\machinery\teleporter.dm" #include "code\game\machinery\vending.dm" +#include "code\game\machinery\vending_miner.dm" #include "code\game\machinery\wall_frames.dm" #include "code\game\machinery\washing_machine.dm" #include "code\game\machinery\wishgranter.dm" diff --git a/code/controllers/subsystems/trade.dm b/code/controllers/subsystems/trade.dm index 7aea2741624..e49af55443e 100644 --- a/code/controllers/subsystems/trade.dm +++ b/code/controllers/subsystems/trade.dm @@ -167,15 +167,3 @@ SUBSYSTEM_DEF(trade) department_shares[job_datum.department] = current_shares + job_datum.bonus_shares var/list/payee = list("mob" = H, "account" = MA, "wage" = pay_amount, "department" = job_datum.department, "shares" = job_datum.bonus_shares) payroll_list += list(payee) - - -/* - Called from the mineral processor - Used to put funds into the mining department performance bonus pool based on ore output -*/ -/datum/controller/subsystem/trade/proc/ores_processed(var/list/ores) - for (var/oretype in ores) - var/ore/ore_datum = GLOB.ores_by_type[oretype] - var/value = ore_datum.Value() - value *= ores[oretype] - LAZYAPLUS(departmental_bonuses, "Mining", value) \ No newline at end of file diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index b7975fc3517..d027bd81de6 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -168,7 +168,7 @@ var/obj/item/weapon/spacecash/ewallet/C = W paid = pay_with_ewallet(C) handled = 1 - else if (istype(W, /obj/item/weapon/spacecash)) + else if (istype(W, /obj/item/weapon/spacecash) && !istype(W, /obj/item/weapon/spacecash/minercash)) var/obj/item/weapon/spacecash/C = W paid = pay_with_cash(C) handled = 1 diff --git a/code/game/machinery/vending_miner.dm b/code/game/machinery/vending_miner.dm new file mode 100644 index 00000000000..6bec622a6ce --- /dev/null +++ b/code/game/machinery/vending_miner.dm @@ -0,0 +1,42 @@ +/obj/machinery/vending/mining + name = "Mine-o-vend" + desc = "For all of your mining needs." + product_slogans = "Can't stop the industrial revolution!" + product_ads = "Almost free!" + icon_state = "discomat" + products = list( + /obj/item/stack/power_node = 3, + ) + prices = list( + /obj/item/stack/power_node = 5000, + ) + +/obj/machinery/vending/mining/attackby(obj/item/weapon/W, mob/user) + if(currently_vending && istype(W, /obj/item/weapon/spacecash/minercash)) + var/obj/item/weapon/spacecash/minercash/C = W + if(currently_vending.price < C.worth) + visible_message(SPAN_NOTICE("\The [user] inserts some cash into \the [src].")) + C.worth -= currently_vending.price + C.worth ? C.update_icon() : qdel(C) + credit_purchase("(cash)") + vend(currently_vending, user) + SSnano.update_uis(src) + else + to_chat(user, "\icon[C] [SPAN_WARNING("That is not enough money.")]") + + if(isScrewdriver(W)) + panel_open = !panel_open + to_chat(user, "You [panel_open ? "open" : "close"] the maintenance panel.") + update_icon() + SSnano.update_uis(src) // Speaker switch is on the main UI, not wires UI + + else if(panel_open && (isMultitool(W) || isWirecutter(W))) + attack_hand(user) + + else if(isWrench(W)) + wrench_floor_bolts(user) + power_change() + + +/obj/machinery/vending/mining/attempt_to_stock() + return diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index 1882756226b..961e7adb7bd 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -252,7 +252,7 @@ for(var/M in D.materials) materials[M] = max(0, materials[M] - D.materials[M] * mat_efficiency) if(D.build_path) - var/obj/new_item = D.Fabricate(loc, src) + var/obj/new_item = D.Fabricate(loc, mat_efficiency, src) visible_message("\The [src] pings, indicating that \the [D] is complete.", "You hear a ping.") if(mat_efficiency != 1) if(new_item.matter && new_item.matter.len > 0) diff --git a/code/modules/asset_cache/asset_list_items.dm b/code/modules/asset_cache/asset_list_items.dm index da3543f3bda..19195f611d2 100644 --- a/code/modules/asset_cache/asset_list_items.dm +++ b/code/modules/asset_cache/asset_list_items.dm @@ -158,9 +158,6 @@ proc/get_craft_item(path) "stamp-syndicate" = 'icons/stamp_icons/large_stamp-syndicate.png' ) - - - /datum/asset/simple/patron_content/register() log_debug("Registering patron content") var/total = 0 diff --git a/code/modules/customitems/item_spawning.dm b/code/modules/customitems/item_spawning.dm index 0453c0a79e1..80ee0d6367b 100644 --- a/code/modules/customitems/item_spawning.dm +++ b/code/modules/customitems/item_spawning.dm @@ -163,22 +163,14 @@ D.build_type = STORE_ROUNDSTART D.starts_unlocked = TRUE D.id = id - D.category = src.category + D.category = category D.PI = src //TODO: Icons not working //TODO: Multiselection is happening - //TODO: Set transfer setting if the item is a rig or module register_research_design(D) - //If this has patron or whitelist access, put it in the limited store designs list - if (store_access != ACCESS_PUBLIC) - GLOB.limited_store_designs += D - - else - GLOB.unlimited_store_designs += D - /* This proc loads whitelists for Patron items. It assumes that list is appropriately formatted according to the instructions in that file @@ -252,25 +244,21 @@ Returns true if they can do store access to this */ /datum/patron_item/proc/can_buy_in_store(var/user) - if (store_access == ACCESS_PUBLIC) + if(store_access == ACCESS_PUBLIC) return TRUE var/ckey - var/is_patron - if (istext(user)) + if(istext(user)) ckey = user - var/datum/player/P = get_player_from_key(ckey) - is_patron = P.patron - else if (istype(user, /datum)) + + else if(istype(user, /datum)) var/datum/D = user ckey = D.get_key() - is_patron = D.is_patron() - - switch (store_access) - if (ACCESS_PUBLIC) + switch(store_access) + if(ACCESS_PUBLIC) return TRUE - if (ACCESS_PATRONS) - return is_patron - if (ACCESS_WHITELIST) + if(ACCESS_PATRONS) + return (ckey in GLOB.patron_keys) + if(ACCESS_WHITELIST) return (ckey in whitelist) \ No newline at end of file diff --git a/code/modules/economy/cash.dm b/code/modules/economy/cash.dm index 109bc7110db..9cc78609a3d 100644 --- a/code/modules/economy/cash.dm +++ b/code/modules/economy/cash.dm @@ -24,6 +24,7 @@ /obj/item/weapon/spacecash/update_icon() cut_overlays() + icon_state = initial(icon_state) var/remaining_worth = worth var/iteration = 0 var/coins_only = TRUE @@ -64,7 +65,7 @@ name = "[worth] [initial(name)]" // 123 credits/merits desc = "Cold hard cash." gender = NEUTER - + icon_state = "" /obj/item/weapon/spacecash/attackby(obj/item/weapon/spacecash/S, mob/living/carbon/human/H) if(ispath(S.type, type)) diff --git a/code/modules/economy/store/store_credits.dm b/code/modules/economy/store/store_credits.dm index 0c763a6c68d..654afdd3c6f 100644 --- a/code/modules/economy/store/store_credits.dm +++ b/code/modules/economy/store/store_credits.dm @@ -126,8 +126,10 @@ /obj/machinery/store/proc/buy_and_transfer() var/list/things = list() + buy_current() var/obj/item/weapon/rig/R - for (var/obj/item/I in things) - if (isrig(I)) + if(occupant.back && !occupant.wearing_rig) + store_or_drop(occupant.back) + for(var/obj/item/I in things) + if(isrig(I)) R = I store_or_drop(I) diff --git a/code/modules/economy/store/store_designs.dm b/code/modules/economy/store/store_designs.dm index 2bf9b9eda0e..aa65ad8c2ed 100644 --- a/code/modules/economy/store/store_designs.dm +++ b/code/modules/economy/store/store_designs.dm @@ -12,19 +12,15 @@ GLOBAL_LIST_EMPTY(unlimited_store_designs) //Holds designs that are patron only or require a whitelist. These do not require schematics GLOBAL_LIST_EMPTY(limited_store_designs) -/obj/machinery/store - -/datum/design - //A patron item datum used to manage access - var/datum/patron_item/PI - - /proc/load_store_database() for(var/id in SSresearch.design_ids.Copy()) var/datum/design/D = SSresearch.design_ids[id] - if(D.build_type & STORE_ROUNDSTART) - LAZYADD(GLOB.unlimited_store_designs[D.category], list(D.ui_data())) + if(D.PI && D.PI.store_access != ACCESS_PUBLIC) + LAZYADD(GLOB.limited_store_designs, id) + + else if(D.build_type & STORE_ROUNDSTART || (D.PI && D.PI.store_access == ACCESS_PUBLIC)) + LAZYADD(GLOB.unlimited_store_designs, id) else if(D.build_type & STORE_SCHEMATICS) - LAZYADD(GLOB.public_store_designs[D.category], list(D.ui_data())) + LAZYADD(GLOB.public_store_designs, id) diff --git a/code/modules/economy/store/store_schematic.dm b/code/modules/economy/store/store_schematic.dm index 03521093ee3..177575d8ec2 100644 --- a/code/modules/economy/store/store_schematic.dm +++ b/code/modules/economy/store/store_schematic.dm @@ -29,8 +29,7 @@ get_design() /obj/machinery/store/proc/handle_schematic(obj/item/store_schematic/I, mob/user) - var/datum/design/D = SSresearch.design_ids[I.design_id] - GLOB.unlimited_store_designs |= D + GLOB.unlimited_store_designs += I.design_id visible_message("Thank you for participating in the CEC Data Recovery programme, [user.real_name]. Your account has been credited with [REWARD_SCHEMATIC] credits") occupant.recieve_credits(REWARD_SCHEMATIC, machine_id, machine_id, "Schematic Bounty") occupant.remove_item(I) @@ -39,11 +38,12 @@ /obj/item/store_schematic/proc/get_design() if(GLOB.public_store_designs.len) - var/datum/design/D = pick(GLOB.public_store_designs) + var/id = pick(GLOB.public_store_designs) + var/datum/design/D = SSresearch.design_ids[id] design_name = D.item_name design_id = D.id name = "Store Schematic ([design_name])" - GLOB.public_store_designs -= D + GLOB.public_store_designs -= id else // There are no unknown designs left? We'll just have to delete ourselves QDEL_IN(src, 1) new /obj/random/rare_loot(get_turf(src)) diff --git a/code/modules/economy/store/store_ui.dm b/code/modules/economy/store/store_ui.dm index 54804255fe1..06203e16127 100644 --- a/code/modules/economy/store/store_ui.dm +++ b/code/modules/economy/store/store_ui.dm @@ -40,7 +40,7 @@ if (occupant_can_afford()) data["buy_enabled"] = TRUE - if (current_design.store_transfer) + if(ispath(current_design.build_path, /obj/item/rig_module) || ispath(current_design.build_path, /obj/item/weapon/rig)) data["transfer_enabled"] = TRUE if (chip) @@ -56,11 +56,17 @@ Called whenever a new occupant enters */ /obj/machinery/store/proc/update_occupant_data() - combined_store_data = GLOB.unlimited_store_designs.Copy() - - for(var/datum/design/D in GLOB.limited_store_designs) - if (D.PI?.can_buy_in_store(occupant)) - LAZYADD(combined_store_data[D.category], list(D.ui_data)) + combined_store_data = list() + var/existing_categories = list() + + for(var/list/L in list(GLOB.unlimited_store_designs, GLOB.limited_store_designs)) + for(var/id in L) + var/datum/design/D = SSresearch.design_ids[id] + if(!(D.category in existing_categories)) + existing_categories += D.category + combined_store_data[D.category] = list() + if(!D.PI || D.PI.can_buy_in_store(occupant)) + LAZYADD(combined_store_data[D.category], list(D.ui_data())) /obj/machinery/store/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null) diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm index 06afb1b79a0..a8ceb909b58 100644 --- a/code/modules/mining/machine_processing.dm +++ b/code/modules/mining/machine_processing.dm @@ -325,8 +325,14 @@ else continue - if (length(ores_processed)) - SStrade.ores_processed(ores_processed) + if(length(ores_processed)) + var/payout + for(var/oretype in ores_processed) + var/ore/ore_datum = GLOB.ores_by_type[oretype] + var/value = ore_datum.Value() + payout = value * ores_processed[oretype] + if(payout) + spawn_miner_money(payout, loc) console.updateUsrDialog() diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index 348adb3f76d..e15bc6d4507 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -39,16 +39,13 @@ other types of metals and chemistry for reagents). var/store_purchases = 0 //How many times in the current round has this been bought from a store? var/demand_scaling = 0.02 //The price of the item increases by this % every time it is purchased - //When this design is bought at the store, can we do a makeover/transfer to equip it? - //Only true for RIGs and rig modules - var/store_transfer = FALSE - var/starts_unlocked = FALSE //If true does not require any technologies and unlocked from the start + var/starts_unlocked = FALSE // If true does not require any technologies and unlocked from the start + + var/datum/patron_item/PI // A patron item datum used to manage access //These procs are used in subtypes for assigning names and descriptions dynamically /datum/design/proc/AssembleDesignInfo() - var/atom/movable/temp_atom = Fabricate(null, 1, null) - if(build_path) - temp_atom = Fabricate(null, 1, null) + var/atom/movable/temp_atom = Fabricate() AssembleDesignName(temp_atom) AssembleDesignMaterials(temp_atom) @@ -188,7 +185,7 @@ other types of metals and chemistry for reagents). //Returns a new instance of the item for this design //This is to allow additional initialization to be performed, including possibly additional contructor arguments. -/datum/design/proc/Fabricate(newloc, mat_efficiency, fabricator) +/datum/design/proc/Fabricate(newloc, mat_efficiency = 1, fabricator) if(!build_path) return @@ -205,11 +202,7 @@ other types of metals and chemistry for reagents). // Same as above but for store /datum/design/proc/CreatedInStore(store_ref) - if(!build_path) - return - - if((build_type & STORE_SCHEMATICS) || (build_type & STORE_ROUNDSTART)) - return new build_path(store_ref) + . = build_path ? new build_path(store_ref) : null /datum/design/autolathe diff --git a/code/modules/research/designs/design_rig.dm b/code/modules/research/designs/design_rig.dm index fe87a43e857..0481c8e9725 100644 --- a/code/modules/research/designs/design_rig.dm +++ b/code/modules/research/designs/design_rig.dm @@ -2,8 +2,6 @@ build_type = STORE_ROUNDSTART category = "RIG" price = 8000 - store_transfer = TRUE - //Tier 0, unarmored/empty rigs diff --git a/code/modules/research/designs/design_rig_module.dm b/code/modules/research/designs/design_rig_module.dm index 772e2112c89..5527c41357e 100644 --- a/code/modules/research/designs/design_rig_module.dm +++ b/code/modules/research/designs/design_rig_module.dm @@ -5,7 +5,6 @@ materials = list(MATERIAL_STEEL = 4000, "plastic" = 2500, MATERIAL_GLASS = 2000, MATERIAL_GOLD = 1000) price = 2500 build_type = STORE_SCHEMATICS - store_transfer = TRUE /datum/design/item/rig_module/meson name = "Meson Scanner" From bf565877447d34785f1a106821c4dc3c8b500246 Mon Sep 17 00:00:00 2001 From: SirRichardFrancis Date: Sat, 18 Jun 2022 11:35:49 +0300 Subject: [PATCH 3/6] necromorphs drop money on death --- .../modules/mob/living/carbon/human/species/necromorph/lesser.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/mob/living/carbon/human/species/necromorph/lesser.dm b/code/modules/mob/living/carbon/human/species/necromorph/lesser.dm index 07a06586530..8b57400c531 100644 --- a/code/modules/mob/living/carbon/human/species/necromorph/lesser.dm +++ b/code/modules/mob/living/carbon/human/species/necromorph/lesser.dm @@ -76,6 +76,7 @@ playsound(src, pick(pain_sounds), VOLUME_LOUD, TRUE) SSnecromorph.minor_vessels -= src remove_massive_atom(src) + spawn_money(rand(50, 300), loc) .=..() //Attack sounds when hitting From fc4c9cb4116b2cee90b4f3c793aaad7a798be656 Mon Sep 17 00:00:00 2001 From: SirRichardFrancis Date: Sat, 18 Jun 2022 19:31:31 +0300 Subject: [PATCH 4/6] requested changes --- code/__defines/research.dm | 16 +++++++-------- code/controllers/subsystems/ticker.dm | 1 - code/modules/economy/credits.dm | 13 ++++++------ code/modules/economy/store/store_credits.dm | 22 ++++++++------------- 4 files changed, 23 insertions(+), 29 deletions(-) diff --git a/code/__defines/research.dm b/code/__defines/research.dm index bc6ac4aca55..aff286df356 100644 --- a/code/__defines/research.dm +++ b/code/__defines/research.dm @@ -12,11 +12,11 @@ #define TECH_ILLEGAL "earth gov" #define TECH_NECRO "marker" -#define NONE 0x1 -#define IMPRINTER 0x2 // For circuits. Uses glass/chemicals. -#define PROTOLATHE 0x4 // New stuff. Uses glass/metal/chemicals -#define MECHFAB 0x8 // Mechfab -#define CHASSIS 0x10 // For protolathe, but differently -#define AUTOLATHE 0x20 // For autolathe -#define STORE_SCHEMATICS 0x40 // Bound to schematic, unlockable in store with said chematic -#define STORE_ROUNDSTART 0x80 // Always available in store +#define NONE (1<<0) +#define IMPRINTER (1<<1) // For circuits. Uses glass/chemicals. +#define PROTOLATHE (1<<2) // New stuff. Uses glass/metal/chemicals +#define MECHFAB (1<<3) // Mechfab +#define CHASSIS (1<<4) // For protolathe, but differently +#define AUTOLATHE (1<<5) // For autolathe +#define STORE_SCHEMATICS (1<<6) // Bound to schematic, unlockable in store with said chematic +#define STORE_ROUNDSTART (1<<7) // Always available in store diff --git a/code/controllers/subsystems/ticker.dm b/code/controllers/subsystems/ticker.dm index 2dcdeabf06d..ef9fd6eb637 100644 --- a/code/controllers/subsystems/ticker.dm +++ b/code/controllers/subsystems/ticker.dm @@ -187,7 +187,6 @@ SUBSYSTEM_DEF(ticker) log_world("Game start took [(world.timeofday - init_start) / 10]s") round_start_time = world.time - GLOB.using_map.setup_economy() load_store_database() current_state = GAME_STATE_PLAYING Master.SetRunLevel(RUNLEVEL_GAME) diff --git a/code/modules/economy/credits.dm b/code/modules/economy/credits.dm index cf921c425c7..c5ccbc0bc4f 100644 --- a/code/modules/economy/credits.dm +++ b/code/modules/economy/credits.dm @@ -20,17 +20,18 @@ /obj/item/weapon/spacecash/ewallet/update_icon() - icon_state = "grey" switch(worth) - if (0 to 500) + if(0) + icon_state = "grey" + if(1 to 500) icon_state = "gold" - if (501 to 1000) + if(501 to 1000) icon_state = "green" - if (1001 to 5000) + if(1001 to 5000) icon_state = "blue" - if (5001 to 10000) + if(5001 to 10000) icon_state = "purple" - if (10001 to INFINITY) + if(10001 to INFINITY) icon_state = "orange" /* diff --git a/code/modules/economy/store/store_credits.dm b/code/modules/economy/store/store_credits.dm index 654afdd3c6f..0b5abbbac54 100644 --- a/code/modules/economy/store/store_credits.dm +++ b/code/modules/economy/store/store_credits.dm @@ -11,10 +11,8 @@ if(occupant && occupant.wearing_rig) . += occupant.wearing_rig.get_account_balance() - for(var/i in deposit_box.contents) - if(istype(i, /obj/item/weapon/spacecash)) - var/obj/item/weapon/spacecash/S = i - . += S.worth + for(var/obj/item/weapon/spacecash/S in deposit_box.contents) + . += S.worth var/datum/money_account/A = occupant?.get_account() if(A) @@ -125,18 +123,14 @@ */ /obj/machinery/store/proc/buy_and_transfer() var/list/things = list() + buy_current() - var/obj/item/weapon/rig/R if(occupant.back && !occupant.wearing_rig) store_or_drop(occupant.back) - for(var/obj/item/I in things) - if(isrig(I)) - R = I - store_or_drop(I) - - //If they bought a module, R will be null and it'll just attempt to install all the modules from the deposit box - start_transfer(R) - - + var/obj/item/weapon/rig/R = locate(/obj/item/weapon/rig) in things + if(R) //If they bought a module, R will be null and it'll just attempt to install all the modules from the deposit box + start_transfer(R) + things -= R + for(var/i in things) + store_or_drop(i) //Withdrawing credits from your employee account to something From 61f79eacf42554fa5081c307d87e2b87b03f4cff Mon Sep 17 00:00:00 2001 From: SirRichardFrancis Date: Sat, 18 Jun 2022 21:10:10 +0300 Subject: [PATCH 5/6] add vendor to the map --- maps/DeadSpace/M.03 Ishimura (L).dmm | 217 ++++++++++++++------------- 1 file changed, 109 insertions(+), 108 deletions(-) diff --git a/maps/DeadSpace/M.03 Ishimura (L).dmm b/maps/DeadSpace/M.03 Ishimura (L).dmm index ebc5938fe47..90e848c18e2 100644 --- a/maps/DeadSpace/M.03 Ishimura (L).dmm +++ b/maps/DeadSpace/M.03 Ishimura (L).dmm @@ -1217,8 +1217,8 @@ "ada" = ( /turf/simulated/floor/plating, /turf/simulated/shuttle/wall/corner/pod2{ - icon_state = "corner_pod2"; - dir = 8 + dir = 8; + icon_state = "corner_pod2" }, /area/shuttle/escape_pod4/station) "adb" = ( @@ -4665,6 +4665,7 @@ /obj/machinery/light{ dir = 4 }, +/obj/machinery/vending/mining, /turf/simulated/floor/dank/rectangles, /area/ishimura/lower/mining/mining_bay) "ajT" = ( @@ -19412,58 +19413,58 @@ /area/ishimura/lower/misc/hallway/central) "aMd" = ( /obj/structure/shuttle/window/pod{ - icon_state = "p_window"; - dir = 8 + dir = 8; + icon_state = "p_window" }, /turf/space, /area/shuttle/escape_pod4/station) "aMe" = ( /turf/simulated/floor/plating, /turf/simulated/shuttle/wall/corner/pod2{ - icon_state = "corner_pod2"; - dir = 5 + dir = 5; + icon_state = "corner_pod2" }, /area/shuttle/escape_pod4/station) "aMf" = ( /turf/simulated/floor/plating, /turf/simulated/shuttle/wall/corner/pod2{ - icon_state = "corner_pod2"; - dir = 8 + dir = 8; + icon_state = "corner_pod2" }, /area/shuttle/escape_pod5/station) "aMg" = ( /obj/structure/shuttle/window/pod{ - icon_state = "p_window"; - dir = 8 + dir = 8; + icon_state = "p_window" }, /turf/space, /area/shuttle/escape_pod5/station) "aMh" = ( /turf/simulated/floor/plating, /turf/simulated/shuttle/wall/corner/pod2{ - icon_state = "corner_pod2"; - dir = 5 + dir = 5; + icon_state = "corner_pod2" }, /area/shuttle/escape_pod5/station) "aMi" = ( /turf/simulated/floor/plating, /turf/simulated/shuttle/wall/corner/pod2{ - icon_state = "corner_pod2"; - dir = 8 + dir = 8; + icon_state = "corner_pod2" }, /area/shuttle/escape_pod6/station) "aMj" = ( /obj/structure/shuttle/window/pod{ - icon_state = "p_window"; - dir = 8 + dir = 8; + icon_state = "p_window" }, /turf/space, /area/shuttle/escape_pod6/station) "aMk" = ( /turf/simulated/floor/plating, /turf/simulated/shuttle/wall/corner/pod2{ - icon_state = "corner_pod2"; - dir = 5 + dir = 5; + icon_state = "corner_pod2" }, /area/shuttle/escape_pod6/station) "aMl" = ( @@ -19496,8 +19497,8 @@ /area/ishimura/lower/maintenance/starboard) "aMo" = ( /turf/simulated/shuttle/wall/pod{ - icon_state = "p_wall1"; - dir = 8 + dir = 8; + icon_state = "p_wall1" }, /area/shuttle/escape_pod4/station) "aMp" = ( @@ -19505,8 +19506,8 @@ dir = 8 }, /obj/structure/bed/chair/pod/yellow{ - icon_state = "pod_chair_preview"; - dir = 1 + dir = 1; + icon_state = "pod_chair_preview" }, /obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{ frequency = 1380; @@ -19525,8 +19526,8 @@ /area/shuttle/escape_pod4/station) "aMq" = ( /turf/simulated/shuttle/wall/pod{ - icon_state = "p_wall1"; - dir = 8 + dir = 8; + icon_state = "p_wall1" }, /area/shuttle/escape_pod5/station) "aMr" = ( @@ -19534,8 +19535,8 @@ dir = 8 }, /obj/structure/bed/chair/pod/yellow{ - icon_state = "pod_chair_preview"; - dir = 1 + dir = 1; + icon_state = "pod_chair_preview" }, /obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{ frequency = 1380; @@ -19554,8 +19555,8 @@ /area/shuttle/escape_pod5/station) "aMs" = ( /turf/simulated/shuttle/wall/pod{ - icon_state = "p_wall1"; - dir = 8 + dir = 8; + icon_state = "p_wall1" }, /area/shuttle/escape_pod6/station) "aMt" = ( @@ -19563,8 +19564,8 @@ dir = 8 }, /obj/structure/bed/chair/pod/yellow{ - icon_state = "pod_chair_preview"; - dir = 1 + dir = 1; + icon_state = "pod_chair_preview" }, /obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{ frequency = 1380; @@ -23499,8 +23500,8 @@ "aUF" = ( /turf/simulated/floor/plating, /turf/simulated/shuttle/wall/corner/pod1{ - icon_state = "corner_pod1"; - dir = 8 + dir = 8; + icon_state = "corner_pod1" }, /area/shuttle/escape_pod9/station) "aUG" = ( @@ -24385,8 +24386,8 @@ /area/ishimura/lower/crew/sleepblock/executive/quarters/bridge_officers) "aWn" = ( /turf/simulated/shuttle/wall/pod{ - icon_state = "p_wall1"; - dir = 8 + dir = 8; + icon_state = "p_wall1" }, /area/shuttle/escape_pod9/station) "aWo" = ( @@ -24459,8 +24460,8 @@ "aWv" = ( /turf/simulated/floor/plating, /turf/simulated/shuttle/wall/corner/pod2{ - icon_state = "corner_pod2"; - dir = 4 + dir = 4; + icon_state = "corner_pod2" }, /area/shuttle/escape_pod9/station) "aWw" = ( @@ -24670,8 +24671,8 @@ /area/ishimura/lower/security/escape/two) "aXl" = ( /obj/structure/bed/chair/pod/yellow{ - icon_state = "pod_chair_preview"; - dir = 1 + dir = 1; + icon_state = "pod_chair_preview" }, /obj/effect/shuttle_landmark/escape_pod/start/pod4, /turf/simulated/floor/shuttle/pod, @@ -25439,16 +25440,16 @@ /area/ishimura/lower/misc/hallway/central) "aZv" = ( /obj/structure/bed/chair/pod/yellow{ - icon_state = "pod_chair_preview"; - dir = 1 + dir = 1; + icon_state = "pod_chair_preview" }, /obj/effect/shuttle_landmark/escape_pod/start/pod5, /turf/simulated/floor/shuttle/pod, /area/shuttle/escape_pod5/station) "aZw" = ( /obj/structure/bed/chair/pod/yellow{ - icon_state = "pod_chair_preview"; - dir = 1 + dir = 1; + icon_state = "pod_chair_preview" }, /obj/effect/shuttle_landmark/escape_pod/start/pod6, /turf/simulated/floor/shuttle/pod, @@ -25456,8 +25457,8 @@ "aZx" = ( /turf/simulated/floor/plating, /turf/simulated/shuttle/wall/corner/pod1{ - icon_state = "corner_pod1"; - dir = 10 + dir = 10; + icon_state = "corner_pod1" }, /area/shuttle/escape_pod4/station) "aZy" = ( @@ -25472,8 +25473,8 @@ "aZz" = ( /turf/simulated/floor/plating, /turf/simulated/shuttle/wall/corner/pod1{ - icon_state = "corner_pod1"; - dir = 10 + dir = 10; + icon_state = "corner_pod1" }, /area/shuttle/escape_pod5/station) "aZA" = ( @@ -25636,8 +25637,8 @@ "baa" = ( /turf/simulated/floor/plating, /turf/simulated/shuttle/wall/corner/pod1{ - icon_state = "corner_pod1"; - dir = 10 + dir = 10; + icon_state = "corner_pod1" }, /area/shuttle/escape_pod6/station) "bab" = ( @@ -25652,8 +25653,8 @@ "bac" = ( /turf/simulated/floor/plating, /turf/simulated/shuttle/wall/corner/pod1{ - icon_state = "corner_pod1"; - dir = 8 + dir = 8; + icon_state = "corner_pod1" }, /area/shuttle/escape_pod7/station) "bad" = ( @@ -25668,8 +25669,8 @@ "bae" = ( /turf/simulated/floor/plating, /turf/simulated/shuttle/wall/corner/pod1{ - icon_state = "corner_pod1"; - dir = 8 + dir = 8; + icon_state = "corner_pod1" }, /area/shuttle/escape_pod8/station) "baf" = ( @@ -25683,8 +25684,8 @@ /area/shuttle/escape_pod8/station) "bai" = ( /turf/simulated/shuttle/wall/pod{ - icon_state = "p_wall1"; - dir = 8 + dir = 8; + icon_state = "p_wall1" }, /area/shuttle/escape_pod7/station) "baj" = ( @@ -25694,8 +25695,8 @@ /area/shuttle/escape_pod7/station) "bak" = ( /turf/simulated/shuttle/wall/pod{ - icon_state = "p_wall1"; - dir = 8 + dir = 8; + icon_state = "p_wall1" }, /area/shuttle/escape_pod8/station) "bal" = ( @@ -25710,8 +25711,8 @@ "bat" = ( /turf/simulated/floor/plating, /turf/simulated/shuttle/wall/corner/pod2{ - icon_state = "corner_pod2"; - dir = 4 + dir = 4; + icon_state = "corner_pod2" }, /area/shuttle/escape_pod7/station) "bau" = ( @@ -25721,8 +25722,8 @@ "baw" = ( /turf/simulated/floor/plating, /turf/simulated/shuttle/wall/corner/pod2{ - icon_state = "corner_pod2"; - dir = 4 + dir = 4; + icon_state = "corner_pod2" }, /area/shuttle/escape_pod8/station) "baA" = ( @@ -27442,8 +27443,8 @@ "bWn" = ( /turf/simulated/floor/plating, /turf/simulated/shuttle/wall/corner/pod1{ - icon_state = "corner_pod1"; - dir = 4 + dir = 4; + icon_state = "corner_pod1" }, /area/shuttle/escape_pod4/station) "bXd" = ( @@ -27514,8 +27515,8 @@ /area/ishimura/lower/misc/storagesmall) "cMD" = ( /turf/simulated/shuttle/wall/pod/two{ - icon_state = "p_wall2"; - dir = 1 + dir = 1; + icon_state = "p_wall2" }, /area/shuttle/escape_pod4/station) "cOX" = ( @@ -27566,8 +27567,8 @@ "dBt" = ( /turf/simulated/floor/plating, /turf/simulated/shuttle/wall/corner/pod1{ - icon_state = "corner_pod1"; - dir = 1 + dir = 1; + icon_state = "corner_pod1" }, /area/shuttle/escape_pod9/station) "dFp" = ( @@ -27750,8 +27751,8 @@ /area/ishimura/lower/mining/mining_bay) "fvQ" = ( /turf/simulated/shuttle/wall/pod{ - icon_state = "p_wall1"; - dir = 1 + dir = 1; + icon_state = "p_wall1" }, /area/shuttle/escape_pod4/station) "fwZ" = ( @@ -27797,14 +27798,14 @@ "fSC" = ( /turf/simulated/floor/plating, /turf/simulated/shuttle/wall/corner/pod1{ - icon_state = "corner_pod1"; - dir = 4 + dir = 4; + icon_state = "corner_pod1" }, /area/shuttle/escape_pod5/station) "gkd" = ( /turf/simulated/shuttle/wall/pod{ - icon_state = "p_wall1"; - dir = 1 + dir = 1; + icon_state = "p_wall1" }, /area/shuttle/escape_pod5/station) "gkQ" = ( @@ -27851,8 +27852,8 @@ /area/ishimura/lower/maintenance/engineering_starboard) "gzm" = ( /turf/simulated/shuttle/wall/pod/two{ - icon_state = "p_wall2"; - dir = 1 + dir = 1; + icon_state = "p_wall2" }, /area/shuttle/escape_pod6/station) "gzu" = ( @@ -27967,8 +27968,8 @@ /area/ishimura/lower/security/checkpoint/executive) "hWi" = ( /turf/simulated/shuttle/wall/pod/two{ - icon_state = "p_wall2"; - dir = 8 + dir = 8; + icon_state = "p_wall2" }, /area/shuttle/escape_pod5/station) "hYt" = ( @@ -27998,8 +27999,8 @@ /area/ishimura/lower/mining/mining_bay) "ixO" = ( /turf/simulated/shuttle/wall/pod/two{ - icon_state = "p_wall2"; - dir = 8 + dir = 8; + icon_state = "p_wall2" }, /area/shuttle/escape_pod6/station) "iyr" = ( @@ -28152,8 +28153,8 @@ /area/ishimura/lower/misc/hallway/aft) "kMn" = ( /turf/simulated/shuttle/wall/pod/two{ - icon_state = "p_wall2"; - dir = 1 + dir = 1; + icon_state = "p_wall2" }, /area/shuttle/escape_pod5/station) "kMv" = ( @@ -28296,8 +28297,8 @@ /area/ishimura/lower/mining/shuttlebay/port) "mNU" = ( /turf/simulated/shuttle/wall/pod/two{ - icon_state = "p_wall2"; - dir = 8 + dir = 8; + icon_state = "p_wall2" }, /area/shuttle/escape_pod7/station) "nfn" = ( @@ -28305,8 +28306,8 @@ /area/ishimura/lower/mining/shuttlebay/port) "nrJ" = ( /turf/simulated/shuttle/wall/pod{ - icon_state = "p_wall1"; - dir = 1 + dir = 1; + icon_state = "p_wall1" }, /area/shuttle/escape_pod8/station) "nsT" = ( @@ -28330,8 +28331,8 @@ "ntc" = ( /turf/simulated/floor/plating, /turf/simulated/shuttle/wall/corner/pod1{ - icon_state = "corner_pod1"; - dir = 1 + dir = 1; + icon_state = "corner_pod1" }, /area/shuttle/escape_pod8/station) "nxX" = ( @@ -28400,8 +28401,8 @@ /area/ishimura/lower/misc/hallway/central) "nRo" = ( /turf/simulated/shuttle/wall/pod/two{ - icon_state = "p_wall2"; - dir = 8 + dir = 8; + icon_state = "p_wall2" }, /area/shuttle/escape_pod4/station) "nSf" = ( @@ -28621,8 +28622,8 @@ /area/ishimura/lower/misc/hallway/central) "pFv" = ( /turf/simulated/shuttle/wall/pod/two{ - icon_state = "p_wall2"; - dir = 8 + dir = 8; + icon_state = "p_wall2" }, /area/shuttle/escape_pod9/station) "pLC" = ( @@ -28724,8 +28725,8 @@ /area/ishimura/lower/security/checkpoint/executive) "qEy" = ( /turf/simulated/shuttle/wall/pod/two{ - icon_state = "p_wall2"; - dir = 1 + dir = 1; + icon_state = "p_wall2" }, /area/shuttle/escape_pod8/station) "qGV" = ( @@ -28759,8 +28760,8 @@ /area/ishimura/lower/security/escape) "qUY" = ( /turf/simulated/shuttle/wall/pod{ - icon_state = "p_wall1"; - dir = 1 + dir = 1; + icon_state = "p_wall1" }, /area/shuttle/escape_pod6/station) "qVk" = ( @@ -28878,8 +28879,8 @@ /area/ishimura/lower/mining/mining_bay) "spo" = ( /turf/simulated/shuttle/wall/pod{ - icon_state = "p_wall1"; - dir = 1 + dir = 1; + icon_state = "p_wall1" }, /area/shuttle/escape_pod9/station) "sxy" = ( @@ -28936,8 +28937,8 @@ "tbw" = ( /turf/simulated/floor/plating, /turf/simulated/shuttle/wall/corner/pod1{ - icon_state = "corner_pod1"; - dir = 4 + dir = 4; + icon_state = "corner_pod1" }, /area/shuttle/escape_pod6/station) "tbV" = ( @@ -29056,8 +29057,8 @@ "tYQ" = ( /turf/simulated/floor/plating, /turf/simulated/shuttle/wall/corner/pod1{ - icon_state = "corner_pod1"; - dir = 1 + dir = 1; + icon_state = "corner_pod1" }, /area/shuttle/escape_pod7/station) "tZh" = ( @@ -29139,8 +29140,8 @@ /area/ishimura/lower/maintenance/port) "uHf" = ( /turf/simulated/shuttle/wall/pod/two{ - icon_state = "p_wall2"; - dir = 1 + dir = 1; + icon_state = "p_wall2" }, /area/shuttle/escape_pod7/station) "uTL" = ( @@ -29193,8 +29194,8 @@ /area/ishimura/lower/security/checkpoint/executive) "vtz" = ( /turf/simulated/shuttle/wall/pod{ - icon_state = "p_wall1"; - dir = 1 + dir = 1; + icon_state = "p_wall1" }, /area/shuttle/escape_pod7/station) "vxU" = ( @@ -29214,8 +29215,8 @@ /area/ishimura/lower/crew/sleepblock/commons) "vBd" = ( /turf/simulated/shuttle/wall/pod/two{ - icon_state = "p_wall2"; - dir = 8 + dir = 8; + icon_state = "p_wall2" }, /area/shuttle/escape_pod8/station) "vBT" = ( @@ -29236,8 +29237,8 @@ /area/ishimura/lower/crew/messhall) "wgI" = ( /turf/simulated/shuttle/wall/pod/two{ - icon_state = "p_wall2"; - dir = 1 + dir = 1; + icon_state = "p_wall2" }, /area/shuttle/escape_pod9/station) "wlX" = ( From 50fdd2d735914451f4b2bc9278cff18e2cdd2662 Mon Sep 17 00:00:00 2001 From: SirRichardFrancis Date: Tue, 21 Jun 2022 18:45:28 +0300 Subject: [PATCH 6/6] fix found bugs --- code/modules/clothing/spacesuits/rig/rig_account.dm | 2 ++ code/modules/economy/credits.dm | 11 ++++++----- code/modules/economy/store/store_object.dm | 5 +---- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/code/modules/clothing/spacesuits/rig/rig_account.dm b/code/modules/clothing/spacesuits/rig/rig_account.dm index afc4dda5877..48c21509133 100644 --- a/code/modules/clothing/spacesuits/rig/rig_account.dm +++ b/code/modules/clothing/spacesuits/rig/rig_account.dm @@ -11,6 +11,7 @@ var/datum/money_account/account /obj/item/weapon/rig/proc/get_account() + RIG_ACCOUNT_CREATE return account /obj/item/weapon/rig/proc/get_account_balance() @@ -19,6 +20,7 @@ return account.money /obj/item/weapon/rig/proc/charge_to_rig_account(var/source, var/purpose, var/terminal_id, var/amount) + RIG_ACCOUNT_CREATE var/datum/money_account/current_account = get_account() if(current_account) charge_to_account(current_account.account_number, source, purpose, terminal_id, amount) diff --git a/code/modules/economy/credits.dm b/code/modules/economy/credits.dm index c5ccbc0bc4f..d43b72b3c4b 100644 --- a/code/modules/economy/credits.dm +++ b/code/modules/economy/credits.dm @@ -10,6 +10,12 @@ if((user == loc) || (user in oview(2))) to_chat(user, SPAN_NOTICE("Chip's owner: [owner_name]. Credits remaining: [worth].")) +/obj/item/weapon/spacecash/ewallet/attack_self() + return + +/obj/item/weapon/spacecash/ewallet/attackby() + return + /obj/item/weapon/spacecash/ewallet/proc/set_worth(var/newval) worth = newval update_icon() @@ -56,11 +62,6 @@ /obj/item/weapon/spacecash/ewallet/random/c10000 worth = 10000 - -//Helpers -/datum/proc/credits_recieved(var/balance, var/datum/source) - return TRUE - //Giving credits to a mob /mob/proc/recieve_credits(var/amount, var/sender, var/origin_account, var/reason) var/datum/money_account/ECA = get_account() diff --git a/code/modules/economy/store/store_object.dm b/code/modules/economy/store/store_object.dm index 0fbe3b454b6..223113f4f62 100644 --- a/code/modules/economy/store/store_object.dm +++ b/code/modules/economy/store/store_object.dm @@ -209,12 +209,9 @@ GLOBAL_VAR_INIT(number_of_store_kiosks, 0) unbolt_occupant() busy = FALSE -/obj/machinery/store/proc/bolt_occupant(var/delay = TRUE) +/obj/machinery/store/proc/bolt_occupant() set waitfor = FALSE playsound(src, sound_bolt, VOLUME_HIGH, TRUE) - if (delay) - sleep(bolt_time+2) - occupant.facedir(SOUTH) buckle_mob(occupant)