# cargo/economy/suffering
basically;
- economy is too uninteractive on rp
- economy is interactive on main but abstractly barred from usage because muh BALANCE (see: good reasons like the RD getting 400k out of literally nowhere)
- cargo is a joke on rp
- cargo is not a joke on main but could be improved
- we don't want to write the same code twice how about we MODULARIZE (oh no)
things im willing to code right now while busy if needed
- most of the economy system - believe it or not this is infinitely less obnoxious to do than cargo
things to note
- most of these can be modular enough to not require everything be written at once, e.g. cargo small orders would work fine with points until economy is overhauled
- economy: optimally we will have a CONFIG_GET() for ticked pay vs static pay per round because rp will probably lose their ship over ticked pay, i'm willing to take the fall and make this a thing
- economy: config entries for account uplink and payroll uplink incase we need to quick-disable for balancing on a temporary basis.
## Supply
- consider these things separate subsystems
### cargo system
#### computers
- supply ordering computer
- supply request computer
- contains ui sections for
- supply packs
- small items
- **per faction**
#### supply packs
- categories (just like now)
- crates per category (just like now)
- per faction
- supply packs come in some sort of container each
#### small items
- categories
- items per category
- all of this per faction
- grouped into cheap cardboard boxes or something that decons to paper
- locked to the person who bought it, **or** a specific access (by default, most are cargo, stuff like guns would be armory)
- stuff like weapons would be overridden to always be locked to said access so you can't order unlocked weapons as an assistant
#### /datum/supply_system
- this reprensets **how** the system works
- abstracts the transport of supplies
- /datum/supply_system/shuttle - use cargo shuttle, bidirectional
- /datum/supply_system/pod - use pod, obviously one way, sends are instant
- /datum/supply_system/telepad - use pad, bidirectional, send/receive are instant but take power, link to special machine, etc
- order information etc is stored on this
- if we make supplypods a thing, the consoles for those would use that system, etc
- can incur multipliers on buy/sell prices
- e.g. pods taking 10x money always but sending 10 copies at a time like how it does on main
- contains the procs needed to scan for items to sell/spawn items to buy
#### /datum/supply_faction
- represents a faction selling in the area of space
- used so we can have themed imports/exports
- hephaestus specializing in weapons, nt specializing in prototypes, veymed selling medical gear, etc
#### /datum/supply_pack
- self explanatory
#### /datum/supply_item
- small items
### black market
- literally just an item
- same as trading system but operates off universal list
- **steal this from main**
- this is just a small fluff gimmick for buying contraband/small items
- we can skip this and do trading only if we want for rp, but, this is honestly fun.
### trading
- **nebula has this, don't code from scratch, take it**
#### /obj/machinery/trade_telepad
- combined telepad/control machine
- connects to /datum/trade_hub
- available ones are controlled by proc
- overmap trade hubs in the future?
- allows buying and selling of things on pad
- does not link to account, directly operates in money
- cargo starts with one
- faction id - for initial implementaiton, just null
#### /datum/trade_hub
- name
- desc
- stores happiness/relations
- **Literally steal this from Nebula, they have this, just needs to be refactored a bit**
- lists of things it sells
- based generally around trade value, with some randomization for some that are more or less expensive
- lists of things it buys
- ditto
### exports
- main has this but needs to be slightly rewritten, likely!
- /datum/export
- /datum/export/universal
- expensive, can work on all items
- /datum/export/specific
- uses typecache/optimizations to determine what to scan
- heavily log all uses of this for debugging
- universal /atom worth scan system used both by trading and cargo system
- e.g. /datum/export/universal/raw_materials - describes value of raw materials
- e.g. /datum/export/universal/reagent_contents - describe value of reagents in atoms
- e.g. /datum/export/item/narcotics - describe value of narcotics sold, something like a pirate trader/faction would use this
- /get_worth() or this may need to be optimized the shit out of for this to work
- all export datums run on, worst case, every item
- LISTMANIA
### stock market
- yeah let's not now that i think about it.
- if you really feel this is a good idea main still has archived code.
- god help you
## Economy
### Datastructure/Refactor
- /datum/bank_account or /datum/money_account or What Ever
- unique key by id
- human readable metadata of: owner name, owner job, creation date and location (fluff i'm sure hrp people understand ahah)
- transaction list of ordered /datum/transactions
- and obviously, MONEY IN ACCOUNT stored in here
- id of economic faction - more on that later
- **always reference by id** - subsystem
- /datum/transaction
- logs all transactions
- **IC FLUFF** - not used for ooc purposes. log_economy will handle admin logging
- data: type, reason, amount, target (if applicable)
- viewable on atm
- /datum/economic_faction
- has a master account mostly for fluff each that admins can access
- represents one payroll system e.g. the station has one that the hop has control over
- only accounts under a specific faction can be managed by consoles with access to that faction
- allow traders to have their own faction + accounts
- /datum/payroll_system
- allow nesting for department systems
- consoles can access one, heads can control their department's, hop/captain can control station's
- root gets x money per payroll tick (likely 5-15 minutes)
- payment distributed to any payroll systems and bank accounts on the list, whether by percentage, or static amount
- has an account to back up so overpaying for a few ticks will work until it runs out of money
### payroll system
- see /datum/payroll_system
- station gets x money per tick for free
- based on crew count, map, admin Fuckery(tm), etc
- **everything is a config value for balancing**
### department account
- every department has an account
- links to their payroll system!!
- cargo's is what supply would run off!!
- station has a master one too backing its master payroll system
### ***atom worth***
- root /atom/proc/get_worth()
- returns a list
- economical categories, e.g. weapon, drugs, etc
- nominal trade value, assumed to be galactic average
- raw materials value
- etc
- parsed by anything that needs it to determine something's sell value
- cargo + traders get scanners to *approximate* this on the fly.
### machinery
- bank card component
- so basically id card but ECS/DCS
- holochips as well as physical thaler cash
- i'm cancer and can simulate this easily
- holochips can be removed from bank card ocmponents that allow this
- coin
- coins are frankly broken in economy but we might as well let it count as a prank
- universal /proc/check_payment(obj/item/I, amount, allowed_types), /proc/attempt_payment(same), /proc/get_money(same)
- supports all of above
- vendors
- use this system duh
- we'll have GAGS vendors soon so good time to overhaul anyways :|
- atms
- duh
- can be used to relink bank cards
- EFTPOS
- duh
- account uplink/management terminal
- linked to a specific economic faction, allows manipulation including forced transfers, pin changes, bank card relinks, etc, within that economic faction
- payroll management terminal
- ditto for linking - allows infinite manipulation of payroll within that by reassigning payroll auto-distribution amounts
- REMOVE THESE:
- cash registers
- retail scanners
- if anyone complains THEY can try to code these without shitcode because as it stands these are dumpster fires and we already are stretched more than thin, dev wise
### admin interface
- we frankly don't need to but if someone really wants to:
- interface for managing accounts by id - sort of like the hop's terminal but universal and omniscient
- interface for managing payroll systems/payroll roots