Merge pull request #1641 from quotefox/revert-1638-economy-update-junk

Revert "(CONFIG CHANGE) Updating Economy: Adding Paychecks, and makes Bank Accounts easier to work with"
This commit is contained in:
Dahlular
2022-07-06 16:41:46 -06:00
committed by GitHub
60 changed files with 187 additions and 431 deletions
-11
View File
@@ -1,11 +0,0 @@
#define ECONOMY_TYPE_ROOKIE "Rookie"
#define ECONOMY_TYPE_DANGEROUS "Dangerous"
#define ECONOMY_TYPE_COMMAND "Command"
#define ECONOMY_PRICE_DEFAULT 1
#define ECONOMY_PRICE_LOW 2
#define ECONOMY_PRICE_HIGH 3
#define ECONOMY_PRICE_EROTIC 4
#define ECONOMY_PRICE_EXPENSIVE 5
#define ECONOMY_PRICE_EXPENSIVE_AF 6
#define ECONOMY_PRICE_FORCED_FREE 7 //i sure do love force_free'd-ing with items :)
+30 -31
View File
@@ -90,38 +90,37 @@
// Subsystem fire priority, from lowest to highest priority
// If the subsystem isn't listed here it's either DEFAULT or PROCESS (if it's a processing subsystem child)
#define FIRE_PRIORITY_PING 10
#define FIRE_PRIORITY_IDLE_NPC 10
#define FIRE_PRIORITY_SERVER_MAINT 10
#define FIRE_PRIORITY_RESEARCH 10
#define FIRE_PRIORITY_VIS 10
#define FIRE_PRIORITY_VORE 10
#define FIRE_PRIORITY_GARBAGE 15
#define FIRE_PRIORITY_ECONOMY 20
#define FIRE_PRIORITY_WET_FLOORS 20
#define FIRE_PRIORITY_AIR 20
#define FIRE_PRIORITY_PROCESS 25
#define FIRE_PRIORITY_THROWING 25
#define FIRE_PRIORITY_SPACEDRIFT 30
#define FIRE_PRIORITY_FIELDS 30
#define FIRE_PRIOTITY_SMOOTHING 35
#define FIRE_PRIORITY_NETWORKS 40
#define FIRE_PRIORITY_OBJ 40
#define FIRE_PRIORITY_ACID 40
#define FIRE_PRIOTITY_BURNING 40
#define FIRE_PRIORITY_AIR_TURFS 40
#define FIRE_PRIORITY_DEFAULT 50
#define FIRE_PRIORITY_PARALLAX 65
#define FIRE_PRIORITY_NPC 80
#define FIRE_PRIORITY_FLIGHTPACKS 80
#define FIRE_PRIORITY_MOBS 100
#define FIRE_PRIORITY_TGUI 110
#define FIRE_PRIORITY_TICKER 200
#define FIRE_PRIORITY_PING 10
#define FIRE_PRIORITY_IDLE_NPC 10
#define FIRE_PRIORITY_SERVER_MAINT 10
#define FIRE_PRIORITY_RESEARCH 10
#define FIRE_PRIORITY_VIS 10
#define FIRE_PRIORITY_VORE 10
#define FIRE_PRIORITY_GARBAGE 15
#define FIRE_PRIORITY_WET_FLOORS 20
#define FIRE_PRIORITY_AIR 20
#define FIRE_PRIORITY_NPC 80
#define FIRE_PRIORITY_PROCESS 25
#define FIRE_PRIORITY_THROWING 25
#define FIRE_PRIORITY_SPACEDRIFT 30
#define FIRE_PRIORITY_FIELDS 30
#define FIRE_PRIOTITY_SMOOTHING 35
#define FIRE_PRIORITY_NETWORKS 40
#define FIRE_PRIORITY_OBJ 40
#define FIRE_PRIORITY_ACID 40
#define FIRE_PRIOTITY_BURNING 40
#define FIRE_PRIORITY_AIR_TURFS 40
#define FIRE_PRIORITY_DEFAULT 50
#define FIRE_PRIORITY_PARALLAX 65
#define FIRE_PRIORITY_FLIGHTPACKS 80
#define FIRE_PRIORITY_MOBS 100
#define FIRE_PRIORITY_TGUI 110
#define FIRE_PRIORITY_TICKER 200
#define FIRE_PRIORITY_ATMOS_ADJACENCY 300
#define FIRE_PRIORITY_STATPANEL 390
#define FIRE_PRIORITY_CHAT 400
#define FIRE_PRIORITY_OVERLAYS 500
#define FIRE_PRIORITY_INPUT 1000 // This must always always be the max highest priority. Player input must never be lost.
#define FIRE_PRIORITY_STATPANEL 390
#define FIRE_PRIORITY_CHAT 400
#define FIRE_PRIORITY_OVERLAYS 500
#define FIRE_PRIORITY_INPUT 1000 // This must always always be the max highest priority. Player input must never be lost.
// SS runlevels
@@ -384,55 +384,3 @@
min_val = 0
/datum/config_entry/flag/dynamic_mode
/datum/config_entry/number/economy_base_payment
config_entry_value = 60
min_val = 0
/datum/config_entry/number/economy_base_pay_ratio
config_entry_value = 6
min_val = 1
/datum/config_entry/number/economy_price_multiplier
config_entry_value = 1
min_val = 0
/datum/config_entry/number/economy_price_low
config_entry_value = 8
min_val = 0
/datum/config_entry/number/economy_price_default
config_entry_value = 15
min_val = 0
/datum/config_entry/number/economy_price_high
config_entry_value = 30
min_val = 0
/datum/config_entry/number/economy_price_erotic
config_entry_value = 25
min_val = 0
/datum/config_entry/number/economy_price_expensive
config_entry_value = 60
min_val = 0
/datum/config_entry/number/economy_price_expensive_af
config_entry_value = 90
min_val = 0
/datum/config_entry/number/economy_job_rate_default
config_entry_value = 1.2
min_val = 0
/datum/config_entry/keyed_list/economy_job_rate
key_mode = KEY_MODE_TEXT
value_mode = VALUE_MODE_NUM
lowercase = FALSE
splitter = ","
/datum/config_entry/keyed_list/economy_job_rate_area
key_mode = KEY_MODE_TEXT
value_mode = VALUE_MODE_NUM
lowercase = FALSE
splitter = ","
+6 -13
View File
@@ -14,16 +14,9 @@ SUBSYSTEM_DEF(job)
var/overflow_role = "Assistant"
var/static/list/economy_multipliers_by_job
var/static/list/economy_multipliers_by_type
/datum/controller/subsystem/job/Initialize(timeofday)
SSmapping.HACK_LoadMapConfig()
if(!economy_multipliers_by_job)
economy_multipliers_by_job = CONFIG_GET(keyed_list/economy_job_rate)
if(!economy_multipliers_by_type)
economy_multipliers_by_type = CONFIG_GET(keyed_list/economy_job_rate_area)
if(!occupations.len)
SetupOccupations()
if(CONFIG_GET(flag/load_jobs_from_txt))
@@ -338,7 +331,7 @@ SUBSYSTEM_DEF(job)
if((job.title in GLOB.silly_positions) && (player.client.prefs.sillyroles == FALSE))
JobDebug("DO is not whitelisted, Player: [player], Job:[job.title]")
continue
continue
if(!job.player_old_enough(player.client))
JobDebug("DO player not old enough, Player: [player], Job:[job.title]")
@@ -477,13 +470,13 @@ SUBSYSTEM_DEF(job)
job.after_spawn(H, M, joined_late)
//Account ID. ID is handled by outfit initialization
//Account ID. ID is handled by human initialization
if(ishuman(H))
var/mob/living/carbon/human/wageslave = H
if(wageslave.wear_id)
var/obj/item/card/id/id_card = wageslave.wear_id
to_chat(M, "<b><span class='big'>Your account ID is [id_card.registered_account.account_id]</span></b>")
to_chat(M, "<b><span class='notice'>You do not have a pin, can set your pin at an ATM.</b>")
to_chat(M, "<b><span class='big'>Your account ID is [wageslave.account_id]</span></b>")
to_chat(M, "<b><span class='notice'>You do not have a pin, can set your pin at an ATM.</b>")
if(H.mind)
H.mind.memory += "Your account ID is [wageslave.account_id].<BR>"
return H
+1 -1
View File
@@ -254,7 +254,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
else if(mode == 4)
dat += {"<a href='?src=[REF(src)];choice=return'>Return</a>
<table><tr><td style='width:25%'><b>Bank Accounts</b></td><td style='width:25%'></td></tr>"}
for(var/datum/bank_account/account as anything in SSeconomy.bank_accounts)
for(var/datum/bank_account/account in SSeconomy.bank_accounts)
dat += {"<td>[account.account_holder] - [account.account_id]"}
dat += "<a href='?src=[REF(src)];choice=bankassign;assign_bank=[REF(account)]'>Assign to ID</a></td>"
dat += "</td><tr>"
+2 -3
View File
@@ -118,9 +118,8 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
var/list/grind_results //A reagent list containing the reagents this item produces when ground up in a grinder - this can be an empty list to allow for reagent transferring only
var/list/juice_results //A reagent list containing blah blah... but when JUICED in a grinder!
//Hyper Economy
var/economy_type = 0
var/economy_price_mul = 1
//Hyper economy
var/price = 0
//Hyper, for clothes that reveal your behind! butt stuff, you know how it is.
var/do_not_cover_butt = FALSE
+2 -5
View File
@@ -171,10 +171,10 @@
var/registered_name = null // The name registered_name on the card
var/assignment = null
var/access_txt // mapping aid
var/datum/bank_account/registered_account
var/uses_overlays = TRUE
var/uses_assignment = TRUE
var/icon/cached_flat_icon
var/datum/bank_account/registered_account
/obj/item/card/id/Initialize(mapload)
. = ..()
@@ -200,9 +200,6 @@
if(mining_points)
. += "There's [mining_points] mining equipment redemption point\s loaded onto this card."
/obj/item/card/id/proc/create_bank_account(owner, job_assignment)
registered_account = new/datum/bank_account(owner, job_assignment, src)
/obj/item/card/id/GetAccess()
return access
@@ -646,7 +643,7 @@
icon_state = "retrosci"
uses_overlays = FALSE
uses_assignment = FALSE
/obj/item/card/id/away/snowdin/med
name = "Arctic Station Doctor's ID card"
desc = "A faded Arctic Station ID card. You can make out the rank \"Doctor\"."
-1
View File
@@ -510,7 +510,6 @@ CIGARETTE PACKETS ARE IN FANCY.DM
resistance_flags = FIRE_PROOF
price = 1
light_color = LIGHT_COLOR_FIRE
var/lit = 0
var/fancy = TRUE
var/overlay_state
+1 -1
View File
@@ -7,9 +7,9 @@
w_class = WEIGHT_CLASS_SMALL
throw_range = 7
throw_speed = 3
economy_type = ECONOMY_PRICE_EROTIC
var/mob/living/carbon/subject = null
var/closed = FALSE
price = 10
//Hypnotize someone
+1 -1
View File
@@ -20,7 +20,7 @@
/obj/item/stack/spacecash/proc/update_desc()
var/total_worth = amount*value
desc = "An outdated form of currency, It's worth [total_worth] credit[( total_worth > 1 ) ? "s" : ""]"
desc = "A outdated form of currency, It's worth [total_worth] credit[( total_worth > 1 ) ? "s" : ""]"
/obj/item/stack/spacecash/merge(obj/item/stack/S)
+1 -1
View File
@@ -240,7 +240,7 @@
desc = "Holds a variety of gear for \"alternative\" peacekeeping."
icon_state = "slutbelt"
item_state = "slut"
economy_type = ECONOMY_PRICE_EROTIC
price = 5
obj/item/storage/belt/slut/ComponentInitialize()
. = ..()
+2 -4
View File
@@ -418,8 +418,7 @@
desc = "<B>Instructions:</B> <I>Heat in microwave. Product will cool if not eaten within seven minutes.</I>"
icon_state = "donkpocketbox"
illustration=null
economy_type = ECONOMY_PRICE_EXPENSIVE_AF
economy_price_mul = 0.85
price = 10
var/donktype = /obj/item/reagent_containers/food/snacks/donkpocket
var/warmtype = /obj/item/reagent_containers/food/snacks/donkpocket/warm
@@ -676,10 +675,9 @@
item_state = "zippo"
w_class = WEIGHT_CLASS_TINY
slot_flags = ITEM_SLOT_BELT
price = 2
drop_sound = 'sound/items/handling/matchbox_drop.ogg'
pickup_sound = 'sound/items/handling/matchbox_pickup.ogg'
economy_type = ECONOMY_PRICE_LOW
economy_price_mul = 0.5
/obj/item/storage/box/matches/ComponentInitialize()
. = ..()
+4 -5
View File
@@ -136,7 +136,7 @@
slot_flags = ITEM_SLOT_BELT
icon_type = "cigarette"
spawn_type = /obj/item/clothing/mask/cigarette/space_cigarette
economy_type = ECONOMY_PRICE_LOW
price = 5
/obj/item/storage/fancy/cigarettes/ComponentInitialize()
. = ..()
@@ -231,7 +231,7 @@
desc = "Smoked by the truly robust."
icon_state = "robustg"
spawn_type = /obj/item/clothing/mask/cigarette/robustgold
economy_price_mul = 1.5
price = 6
/obj/item/storage/fancy/cigarettes/cigpack_carp
name = "\improper Carp Classic packet"
@@ -283,7 +283,7 @@
icon_state = "cig_paper_pack"
icon_type = "rolling paper"
spawn_type = /obj/item/rollingpaper
economy_price_mul = 0.25
price = 2
/obj/item/storage/fancy/rollingpapers/ComponentInitialize()
. = ..()
@@ -308,8 +308,7 @@
w_class = WEIGHT_CLASS_NORMAL
icon_type = "premium cigar"
spawn_type = /obj/item/clothing/mask/cigarette/cigar
economy_type = ECONOMY_PRICE_EXPENSIVE
economy_price_mul = 0.75
price = 8
/obj/item/storage/fancy/cigarettes/cigars/ComponentInitialize()
. = ..()
+1 -2
View File
@@ -343,8 +343,7 @@
item_state = "upindwelder"
max_fuel = 80
materials = list(MAT_METAL=70, MAT_GLASS=120)
economy_type = ECONOMY_PRICE_EXPENSIVE_AF
economy_price_mul = 1.5
price = 10
/obj/item/weldingtool/experimental
name = "experimental welding tool"
@@ -93,7 +93,7 @@
dat += "</table>"
dat += "</div>"
if(onstation && C && C.registered_account)
dat += "<b>Balance: $[account.balance]</b>"
dat += "<b>Balance: $[account.account_balance]</b>"
if(istype(src, /obj/machinery/vending/snack))
dat += "<h3>Chef's Food Selection</h3>"
dat += "<div class='statusDisplay'>"
+3 -6
View File
@@ -8,8 +8,7 @@
item_color="yellow"
resistance_flags = NONE
var/can_be_cut = 1
economy_type = ECONOMY_PRICE_EXPENSIVE_AF
economy_price_mul = 0.85
price = 10
/obj/item/clothing/gloves/color/yellow/ce //funky looking, basically combat gloves
desc = "Special Insulated gloves with pricy thermal shielding normally only found in combat gloves."
@@ -35,8 +34,7 @@
item_color="yellow"
resistance_flags = NONE
var/can_be_cut = 1
economy_type = ECONOMY_PRICE_LOW
economy_price_mul = 1.2
price = 5
/obj/item/clothing/gloves/color/fyellow/New()
..()
@@ -131,8 +129,7 @@
siemens_coefficient = 0
permeability_coefficient = 0.05
resistance_flags = NONE
economy_type = ECONOMY_PRICE_EXPENSIVE_AF
economy_price_mul = 0.85
price = 12
/obj/item/clothing/gloves/color/rainbow
name = "rainbow gloves"
+1 -2
View File
@@ -260,8 +260,7 @@
name = "security's bitch beret"
desc = "A softer beret with the word 'BITCH' embroidered on it in pink thread."
icon_state = "bitchberet"
economy_type = ECONOMY_PRICE_EROTIC
economy_price_mul = 0.85
price = 5
//Curator
/obj/item/clothing/head/fedora/curator
+1 -2
View File
@@ -45,8 +45,7 @@
item_state = "sluthailer"
aggressiveness = 0 //can't have your pets being mean!
actions_types = list(/datum/action/item_action/halt)
economy_type = ECONOMY_PRICE_EXPENSIVE
economy_price_mul = 0.85
price = 5
/obj/item/clothing/mask/gas/sechailer/slut/attack_hand(mob/user)
if(iscarbon(user))
+1 -2
View File
@@ -302,5 +302,4 @@
icon = 'icons/obj/clothing/neck.dmi'
icon_state = "bling"
item_color = "bling"
economy_type = ECONOMY_PRICE_EXPENSIVE
economy_price_mul = 1.25
price = 30
+1 -2
View File
@@ -137,8 +137,7 @@
desc = "A pair of knee-high jackboots, complete with heels. All style, all the time."
icon_state = "jackboots-tall"
item_state = "jackboots-tall"
economy_type = ECONOMY_PRICE_DEFAULT
economy_price_mul = 0.75
price = 5
/obj/item/clothing/shoes/jackboots/fast
slowdown = -1
+1 -1
View File
@@ -169,7 +169,7 @@
cold_protection = CHEST|LEGS|ARMS
heat_protection = CHEST|LEGS|ARMS
mutantrace_variation = NO_MUTANTRACE_VARIATION //you don't need it
economy_type = ECONOMY_PRICE_EXPENSIVE
price = 5
//Surgeon
/obj/item/clothing/suit/apron/surgical
+1 -2
View File
@@ -670,8 +670,7 @@
icon_state = "coatsecuritypink"
item_state = "coatsecuritypink"
hoodtype = /obj/item/clothing/head/hooded/winterhood/security/pink
economy_type = ECONOMY_PRICE_EXPENSIVE
economy_price_mul = 0.85
price = 5
/obj/item/clothing/suit/hooded/wintercoat/security/Initialize()
. = ..()
+1 -1
View File
@@ -381,7 +381,7 @@
item_state = "b_suit"
item_color = "galaxy_blue"
can_adjust = FALSE
economy_type = ECONOMY_PRICE_DEFAULT
price = 10
/obj/item/clothing/under/lawyer/galaxy_red
name = "\improper Pulsar Gonne"
+3 -5
View File
@@ -30,8 +30,7 @@
icon_state = "rsecuritypink"
item_state = "r_suit"
item_color = "rsecuritypink"
economy_type = ECONOMY_PRICE_DEFAULT
economy_price_mul = 1.35
price = 3
/obj/item/clothing/under/rank/security/skirt
name = "security jumpskirt"
desc = "A \"tactical\" security jumpsuit with the legs replaced by a skirt."
@@ -48,8 +47,7 @@
item_state = "secslutskirt"
item_color = null //i dont understand what item_color even is, apparently setting it to null means it won't change color in a washing machine?
mutantrace_variation = NO_MUTANTRACE_VARIATION //look at the first two comments in vg_under.dm
economy_type = ECONOMY_PRICE_EROTIC
economy_price_mul = 0.75
price = 3
/obj/item/clothing/under/rank/security/skirt/slut/pink
desc = "A \"\"\"tactical\"\"\" security jumpsuit with the legs replaced by a skirt. No matter how you adjust it, it always feels a little too small. This one seems to have an experimental color scheme."
icon_state = "secslutskirtpink"
@@ -63,7 +61,7 @@
can_adjust = FALSE
body_parts_covered = CHEST|GROIN
mutantrace_variation = NO_MUTANTRACE_VARIATION
economy_type = ECONOMY_PRICE_EROTIC
price = 5
/obj/item/clothing/under/rank/warden
+7 -10
View File
@@ -217,7 +217,7 @@
resistance_flags = FREEZE_PROOF
isGlass = FALSE
foodtype = BREAKFAST
economy_type = ECONOMY_PRICE_LOW
price = 2
//Used by MREs
/obj/item/reagent_containers/food/drinks/coffee/type2
@@ -241,7 +241,7 @@
icon_state = "tea"
item_state = "coffee"
spillable = TRUE
economy_type = ECONOMY_PRICE_LOW
price = 2
/* Doesn't exist lol
/datum/chemical_reaction/catnip_tea
@@ -252,7 +252,7 @@
*/
/obj/item/reagent_containers/food/drinks/mug/on_reagent_change(changetype)
cut_overlays()
cut_overlays()
if(reagents.total_volume)
var/mutable_appearance/MA = mutable_appearance(icon,"mugoverlay")
MA.color = mix_color_from_reagents(reagents.reagent_list)
@@ -265,7 +265,7 @@
icon_state = "tea"
desc = "An insult to Duke Purple is an insult to the Space Queen! Any proper gentleman will fight you, if you sully this tea."
list_reagents = list(/datum/reagent/consumable/tea = 30)
economy_type = ECONOMY_PRICE_LOW
price = 2
/obj/item/reagent_containers/food/drinks/mug/coco
name = "Dutch hot coco"
@@ -284,8 +284,7 @@
list_reagents = list(/datum/reagent/consumable/dry_ramen = 30)
foodtype = GRAIN
isGlass = FALSE
economy_type = ECONOMY_PRICE_DEFAULT
economy_price_mul = 1.5
price = 3
/obj/item/reagent_containers/food/drinks/beer
name = "space beer"
@@ -424,8 +423,7 @@
reagent_flags = NONE
spillable = FALSE
isGlass = FALSE
economy_type = ECONOMY_PRICE_LOW
economy_price_mul = 0.8
price = 2
/obj/item/reagent_containers/food/drinks/soda_cans/suicide_act(mob/living/carbon/user)
user.visible_message("<span class='suicide'>[user] is trying to eat \the [src]! It looks like [user.p_theyre()] trying to commit suicide!</span>")
@@ -550,5 +548,4 @@
icon_state = "menergy"
list_reagents = list(/datum/reagent/consumable/monkey_energy = 50)
foodtype = SUGAR
economy_type = ECONOMY_PRICE_EXPENSIVE //same as insulated gloves but slightly cheaper given the nature of these
economy_price_mul = 0.75
price = 3
@@ -416,8 +416,7 @@
isGlass = FALSE
list_reagents = list(/datum/reagent/consumable/cream = 100)
foodtype = DAIRY
economy_type = ECONOMY_PRICE_LOW
economy_price_mul = 1.5
price = 3
/obj/item/reagent_containers/food/drinks/bottle/tomatojuice
name = "tomato juice"
@@ -93,11 +93,10 @@
/obj/item/reagent_containers/food/drinks/drinkingglass/filled/nuka_cola
name = "Nuka Cola"
list_reagents = list(/datum/reagent/consumable/nuka_cola = 50)
economy_type = ECONOMY_PRICE_DEFAULT
economy_price_mul = 1.5
price = 7
/obj/item/reagent_containers/food/drinks/drinkingglass/filled/syndicatebomb
name = "Syndicate Bomb"
name = "Syndicat Bomb"
list_reagents = list(/datum/reagent/consumable/ethanol/syndicatebomb = 50)
/obj/item/reagent_containers/food/drinks/drinkingglass/attackby(obj/item/I, mob/user, params)
@@ -186,8 +186,7 @@
righthand_file = 'icons/mob/inhands/equipment/kitchen_righthand.dmi'
list_reagents = list(/datum/reagent/consumable/milk = 50)
possible_states = list()
economy_type = ECONOMY_PRICE_LOW
economy_price_mul = 1.5
price = 5
/obj/item/reagent_containers/food/condiment/flour
name = "flour sack"
@@ -35,8 +35,6 @@ All foods are distributed among various categories. Use common sense.
righthand_file = 'icons/mob/inhands/misc/food_righthand.dmi'
obj_flags = UNIQUE_RENAME
grind_results = list() //To let them be ground up to transfer their reagents
economy_type = ECONOMY_PRICE_LOW
economy_price_mul = 1.5
var/bitesize = 2
var/bitecount = 0
var/trash = null
@@ -59,8 +59,7 @@
tastes = list("chocolate" = 1)
foodtype = JUNKFOOD | SUGAR
dunkable = TRUE
economy_type = ECONOMY_PRICE_LOW
economy_price_mul = 1.5
price = 2
/obj/item/reagent_containers/food/snacks/hugemushroomslice
@@ -664,4 +663,4 @@
else if (icon_state != "marshmallowrburned")
icon_state = "marshmallowburned"
desc = "[initial(desc)] It looks just right for eating!"
tastes = list("marshmallow" = 1, "cream" = 1)
tastes = list("marshmallow" = 1, "cream" = 1)
@@ -12,6 +12,7 @@
filling_color = "#D2691E"
tastes = list("candy" = 1)
foodtype = JUNKFOOD | SUGAR
price = 2
/obj/item/reagent_containers/food/snacks/sosjerky
name = "\improper Scaredy's Private Reserve Beef Jerky"
@@ -23,6 +24,7 @@
filling_color = "#8B0000"
tastes = list("dried meat" = 1)
foodtype = JUNKFOOD | MEAT | SUGAR
price = 3
/obj/item/reagent_containers/food/snacks/sosjerky/healthy
name = "homemade beef jerky"
@@ -41,6 +43,7 @@
filling_color = "#FFD700"
tastes = list("salt" = 1, "crisps" = 1)
foodtype = JUNKFOOD | FRIED
price = 2
/obj/item/reagent_containers/food/snacks/no_raisin
name = "4no raisins"
@@ -52,6 +55,7 @@
filling_color = "#8B0000"
tastes = list("dried raisins" = 1)
foodtype = JUNKFOOD | FRUIT | SUGAR
price = 2
/obj/item/reagent_containers/food/snacks/no_raisin/healthy
name = "homemade raisins"
@@ -68,6 +72,7 @@
junkiness = 25
filling_color = "#FFD700"
foodtype = JUNKFOOD | GRAIN | SUGAR
price = 4
/obj/item/reagent_containers/food/snacks/cheesiehonkers
name = "cheesie honkers"
@@ -79,6 +84,7 @@
filling_color = "#FFD700"
tastes = list("cheese" = 5, "crisps" = 2)
foodtype = JUNKFOOD | DAIRY | SUGAR
price = 4
/obj/item/reagent_containers/food/snacks/soyfood
name = "Soyfood"
@@ -90,7 +96,7 @@
filling_color = "#FFD700"
tastes = list("nanomachines" = 2, "soybeans" = 5)
foodtype = JUNKFOOD | DAIRY | GRAIN
economy_price_mul = 2
price = 3
/obj/item/reagent_containers/food/snacks/syndicake
name = "syndi-cakes"
@@ -101,7 +107,7 @@
filling_color = "#F5F5DC"
tastes = list("sweetness" = 3, "cake" = 1)
foodtype = GRAIN | FRUIT | VEGETABLES | ANTITOXIC
economy_price_mul = 2.5
price = 5
/obj/item/reagent_containers/food/snacks/carbonnanotube_noodles
name = "carbon nanotube noodles"
@@ -113,7 +119,7 @@
filling_color = "#FFD700"
tastes = list("charcoal" = 1, "spiciness" = 3, "soysauce" = 3)
foodtype = GRAIN | VEGETABLES
economy_price_mul = 2.5
price = 3
/obj/item/reagent_containers/food/snacks/bird_seed
name = "Sunflower Seeds"
@@ -124,4 +130,4 @@
filling_color = "#b497162f"
tastes = list("olives" = 1, "Nuts" = 3, "spice" = 2)
foodtype = GRAIN | VEGETABLES
economy_price_mul = 2.5
price = 3
+1
View File
@@ -15,6 +15,7 @@ Assistant
outfit = /datum/outfit/job/assistant
antag_rep = 7
/datum/job/assistant/get_access()
if(CONFIG_GET(flag/assistants_have_maint_access) || !CONFIG_GET(flag/jobs_have_minimal_access)) //Config has assistant maint access set
. = ..()
-2
View File
@@ -16,7 +16,6 @@ Captain
exp_requirements = 3000
exp_type = EXP_TYPE_COMMAND
exp_type_department = EXP_TYPE_COMMAND
economy_type = ECONOMY_TYPE_COMMAND
outfit = /datum/outfit/job/captain
@@ -97,7 +96,6 @@ Head of Personnel
exp_requirements = 1500
exp_type = EXP_TYPE_SERVICE
exp_type_department = EXP_TYPE_SERVICE
economy_type = ECONOMY_TYPE_COMMAND
outfit = /datum/outfit/job/hop
+2 -10
View File
@@ -15,7 +15,6 @@ Quartermaster is a real head fuck you
minimal_player_age = 7
exp_type = EXP_TYPE_SUPPLY
exp_type_department = EXP_TYPE_SUPPLY
economy_type = ECONOMY_TYPE_COMMAND
exp_requirements = 1200
outfit = /datum/outfit/job/quartermaster
@@ -89,7 +88,6 @@ Shaft Miner
exp_requirements = 600
exp_type = EXP_TYPE_CREW
exp_type_department = EXP_TYPE_SUPPLY
economy_type = ECONOMY_TYPE_DANGEROUS
outfit = /datum/outfit/job/miner
@@ -169,7 +167,6 @@ Bartender
spawn_positions = 1
supervisors = "the head of personnel"
selection_color = "#bbe291"
economy_type = ECONOMY_TYPE_ROOKIE
outfit = /datum/outfit/job/bartender
@@ -202,15 +199,13 @@ Cook
spawn_positions = 1
supervisors = "the head of personnel"
selection_color = "#bbe291"
economy_type = ECONOMY_TYPE_ROOKIE
var/cooks = 0 //Counts cooks amount
outfit = /datum/outfit/job/cook
access = list(ACCESS_HYDROPONICS, ACCESS_BAR, ACCESS_KITCHEN, ACCESS_MORGUE, ACCESS_MINERAL_STOREROOM)
minimal_access = list(ACCESS_KITCHEN, ACCESS_MORGUE, ACCESS_MINERAL_STOREROOM)
var/cooks = 0 //Counts cooks amount
/datum/outfit/job/cook
name = "Cook"
jobtype = /datum/job/cook
@@ -257,7 +252,6 @@ Botanist
spawn_positions = 2
supervisors = "the head of personnel"
selection_color = "#bbe291"
economy_type = ECONOMY_TYPE_ROOKIE
outfit = /datum/outfit/job/botanist
@@ -296,15 +290,13 @@ Janitor
spawn_positions = 1
supervisors = "the head of personnel"
selection_color = "#bbe291"
economy_type = ECONOMY_TYPE_ROOKIE
var/global/janitors = 0
outfit = /datum/outfit/job/janitor
access = list(ACCESS_JANITOR, ACCESS_MAINT_TUNNELS, ACCESS_MINERAL_STOREROOM)
minimal_access = list(ACCESS_JANITOR, ACCESS_MAINT_TUNNELS, ACCESS_MINERAL_STOREROOM)
var/global/janitors = 0
/datum/outfit/job/janitor
name = "Janitor"
jobtype = /datum/job/janitor
-4
View File
@@ -11,7 +11,6 @@ Clown
spawn_positions = 1
supervisors = "the head of personnel"
selection_color = "#dddddd"
economy_type = ECONOMY_TYPE_ROOKIE
outfit = /datum/outfit/job/clown
@@ -79,7 +78,6 @@ Mime
spawn_positions = 1
supervisors = "the head of personnel"
selection_color = "#dddddd"
economy_type = ECONOMY_TYPE_ROOKIE
outfit = /datum/outfit/job/mime
@@ -132,7 +130,6 @@ Curator
spawn_positions = 1
supervisors = "the head of personnel"
selection_color = "#dddddd"
economy_type = ECONOMY_TYPE_ROOKIE
outfit = /datum/outfit/job/curator
@@ -176,7 +173,6 @@ Lawyer
spawn_positions = 2
supervisors = "the head of personnel"
selection_color = "#dddddd"
economy_type = ECONOMY_TYPE_ROOKIE
var/lawyers = 0 //Counts lawyer amount
outfit = /datum/outfit/job/lawyer
@@ -13,7 +13,6 @@ Chaplain
supervisors = "the head of personnel"
selection_color = "#dddddd"
custom_spawn_text = "You're playing a job that is essential for when the station deals with paranormal threats. While you have access to weapons, armor and tools such as your nullrod and bible, this does not mean you should hunt those threats unless warranted. If you have any questions, don't hesitate to ask mentors."
economy_type = ECONOMY_TYPE_ROOKIE
outfit = /datum/outfit/job/chaplain
@@ -17,7 +17,6 @@ Chief Engineer
exp_requirements = 1500
exp_type = EXP_TYPE_ENGINEERING
exp_type_department = EXP_TYPE_ENGINEERING
economy_type = ECONOMY_TYPE_COMMAND
outfit = /datum/outfit/job/ce
@@ -190,7 +189,6 @@ Junior Engineer
selection_color = "#fff5cc"
exp_requirements = 120
exp_type = EXP_TYPE_CREW
economy_type = ECONOMY_TYPE_ROOKIE
outfit = /datum/outfit/job/engineer/junior
+19 -18
View File
@@ -61,23 +61,11 @@
var/list/alt_titles = list()
/// A multiplier for how much a person gets each paycheck
var/base_paycheck_multiplier = 1.2
/// The "type" of economy this job falls under
var/economy_type
var/override_roundstart_spawn = null //Where the player spawns at roundstart if defined
//whitelisting
var/whitelist_type = ""
/datum/job/New()
base_paycheck_multiplier = CONFIG_GET(number/economy_job_rate_default)
if(SSjob.economy_multipliers_by_job[title])
base_paycheck_multiplier *= SSjob.economy_multipliers_by_job[title]
if(SSjob.economy_multipliers_by_type[economy_type])
base_paycheck_multiplier *= SSjob.economy_multipliers_by_type[economy_type]
//Only override this proc
//H is usually a human unless an /equip override transformed it
/datum/job/proc/after_spawn(mob/living/H, mob/M, latejoin = FALSE)
@@ -107,6 +95,15 @@
if(!H)
return FALSE
if(!visualsOnly)
var/datum/bank_account/bank_account = new(H.real_name, src)
bank_account.account_holder = H.real_name
bank_account.account_job = src
bank_account.account_id = rand(111111,999999) //give account ID!
//bank_account.account_pin = rand(1000,9999) //give random pin!
bank_account.account_balance = 80
H.account_id = bank_account.account_id
if(CONFIG_GET(flag/enforce_human_authority) && (title in GLOB.command_positions))
if(H.dna.species.id != "human")
H.set_species(/datum/species/human)
@@ -125,14 +122,14 @@
/datum/job/proc/get_access()
if(!config) //Needed for robots.
return minimal_access.Copy()
return src.minimal_access.Copy()
. = list()
if(CONFIG_GET(flag/jobs_have_minimal_access))
. = minimal_access.Copy()
. = src.minimal_access.Copy()
else
. = access.Copy()
. = src.access.Copy()
if(CONFIG_GET(flag/everyone_has_maint_access)) //Config has global maint access set
. |= list(ACCESS_MAINT_TUNNELS)
@@ -236,8 +233,8 @@
else
H.real_name = "[J.title] #[rand(10000, 99999)]"
var/client/preference_source = H.client
var/obj/item/card/id/C = H.wear_id
var/client/preference_source = H.client
if(istype(C))
C.access = J.get_access()
shuffle_inplace(C.access) // Shuffle access list to make NTNet passkeys less predictable
@@ -248,8 +245,12 @@
else
C.update_label()
C.create_bank_account(H, J)
for(var/A in SSeconomy.bank_accounts)
var/datum/bank_account/B = A
if(B.account_id == H.account_id)
C.registered_account = B
B.bank_cards += C
break
H.sec_hud_set_ID()
var/obj/item/pda/PDA = H.get_item_by_slot(pda_slot)
-3
View File
@@ -17,7 +17,6 @@ Chief Medical Officer
exp_requirements = 1500
exp_type = EXP_TYPE_MEDICAL
exp_type_department = EXP_TYPE_MEDICAL
economy_type = ECONOMY_TYPE_COMMAND
outfit = /datum/outfit/job/cmo
@@ -238,7 +237,6 @@ Junior Doctor
selection_color = "#ffeef0"
exp_requirements = 120
exp_type = EXP_TYPE_CREW
economy_type = ECONOMY_TYPE_ROOKIE
outfit = /datum/outfit/job/doctor/junior
@@ -280,7 +278,6 @@ Psychologist
selection_color = "#ffeef0"
exp_requirements = 240
exp_type = EXP_TYPE_CREW
economy_type = ECONOMY_TYPE_ROOKIE
outfit = /datum/outfit/job/doctor/psychologist
-2
View File
@@ -17,7 +17,6 @@ Research Director
exp_requirements = 1500
exp_type = EXP_TYPE_SCIENCE
exp_type_department = EXP_TYPE_SCIENCE
economy_type = ECONOMY_TYPE_COMMAND
outfit = /datum/outfit/job/rd
@@ -155,7 +154,6 @@ Junior Scientist
selection_color = "#ffeeff"
exp_requirements = 120
exp_type = EXP_TYPE_CREW
economy_type = ECONOMY_TYPE_ROOKIE
outfit = /datum/outfit/job/scientist/junior
-5
View File
@@ -23,7 +23,6 @@ Head of Security
exp_requirements = 2000
exp_type = EXP_TYPE_SECURITY
exp_type_department = EXP_TYPE_SECURITY
economy_type = ECONOMY_TYPE_COMMAND
outfit = /datum/outfit/job/hos
@@ -92,7 +91,6 @@ Warden
exp_requirements = 720
exp_type = EXP_TYPE_SECURITY
exp_type_department = EXP_TYPE_SECURITY
economy_type = ECONOMY_TYPE_DANGEROUS
outfit = /datum/outfit/job/warden
@@ -152,7 +150,6 @@ Detective
exp_requirements = 300
exp_type = EXP_TYPE_SECURITY
exp_type_department = EXP_TYPE_SECURITY
economy_type = ECONOMY_TYPE_DANGEROUS
outfit = /datum/outfit/job/detective
@@ -210,7 +207,6 @@ Security Officer
exp_requirements = 420
exp_type = EXP_TYPE_SECURITY
exp_type_department = EXP_TYPE_SECURITY
economy_type = ECONOMY_TYPE_DANGEROUS
outfit = /datum/outfit/job/security
@@ -371,7 +367,6 @@ Junior Security Officer
minimal_player_age = 3
exp_requirements = 300
exp_type = EXP_TYPE_CREW
economy_type = ECONOMY_TYPE_ROOKIE
outfit = /datum/outfit/job/security/junior
@@ -79,5 +79,6 @@
var/static/list/can_ride_typecache = typecacheof(list(/mob/living/carbon/human, /mob/living/simple_animal/slime, /mob/living/simple_animal/parrot))
var/lastpuke = 0
var/last_fire_update
var/account_id
can_be_held = "micro"
appearance_flags = KEEP_TOGETHER|TILE_BOUND|PIXEL_SCALE|LONG_GLIDE
@@ -336,7 +336,7 @@
volume = 50
amount_per_transfer_from_this = 10
container_HP = 1
economy_type = ECONOMY_PRICE_LOW
price = 1
/obj/item/reagent_containers/glass/beaker/waterbottle/Initialize()
beaker_weakness_bitflag |= TEMP_WEAK
@@ -269,20 +269,17 @@
/obj/item/reagent_containers/pill/penis_enlargement
name = "penis enlargement pill"
list_reagents = list(/datum/reagent/fermi/penis_enlarger = 10)
price = 4
icon_state = "pill_lewd"
economy_type = ECONOMY_PRICE_EROTIC
economy_price_mul = 0.25
/obj/item/reagent_containers/pill/breast_enlargement
name = "breast enlargement pill"
list_reagents = list(/datum/reagent/fermi/breast_enlarger = 10)
price = 4
icon_state = "pill_lewd"
economy_type = ECONOMY_PRICE_EROTIC
economy_price_mul = 0.25
/obj/item/reagent_containers/pill/butt_enlargement
name = "butt enlargement pill"
list_reagents = list(/datum/reagent/fermi/butt_enlarger = 10)
icon_state = "pill_lewd"
economy_type = ECONOMY_PRICE_EROTIC
economy_price_mul = 0.25
price = 4
icon_state = "pill_lewd"
+10 -8
View File
@@ -167,12 +167,14 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
var/datum/data/vending_product/R = new /datum/data/vending_product()
R.name = initial(temp.name)
R.product_path = typepath
if(!free)
R.price = FLOOR(baseprice * CONFIG_GET(number/economy_price_multiplier), 1)
if(product) //its a item!
var/product_price = SSeconomy.GetPrice(product)
if(!isnull(product_price))
R.price = product_price
R.price = baseprice
if(product) //its a item!
if((initial(product.price)))
R.price = initial(product.price)
else
R.price = baseprice
if(free)
R.price = 0
if(!start_empty)
R.amount = amount
R.max_amount = amount
@@ -495,8 +497,8 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
updateUsrDialog()
vend_ready = 1
if(bankid && R == buying) //if we have a bank id, and we are trying to buy the same thing!
if(bankid.balance >= R.price)
bankid.balance -= R.price //take the money from the account.
if(bankid.account_balance >= R.price)
bankid.account_balance -= R.price //take the money from the account.
menu = 1
to_chat(usr, "<span class='notice'>You [R.name] via the provided bank account!</span>")
bankid = null //so noone can buy from your account after youve purchased stuff
-45
View File
@@ -583,48 +583,3 @@ BOX_RANDOM_ENGINE Box TEG,2
BOX_RANDOM_ENGINE Box Empty,0
BOX_RANDOM_ENGINE Box Antimatter,0
BOX_RANDOM_ENGINE Box P.A.C.M.A.N,0
#
## HYPERSTATION
#
## ECONOMY
# Paychecks get sent to each bank account, which is only initialized if the account holder spawned on the station.
# Bank Accounts are tied to the ID cards that players spawn with. If you have an unset pin, then that means anyone that gets the ID card has access to your money
# The base amount of credits, before any math whatsoever gets involved, that paychecks give
ECONOMY_BASE_PAYMENT 60
# How many paychecks the crew gets when first joining the station. Adds 1 if this is the start of the round, because of how subsystems work
ECONOMY_BASE_PAY_RATIO 6
# The default multiplier for a paycheck if nothing is assigned to a specific job.
# You're allowed to set specific jobs a specific type of pay multiplier with ECONOMY_JOB_RATE
ECONOMY_JOB_RATE_DEFAULT 1.2
# The multiplier that Rookies get. This should be slightly more than assistant but less than default.
ECONOMY_JOB_RATE_AREA Rookie, 1.1
# The multiplier that Dangerous jobs get, such as Shaft Miner and Security. Should be somewhere between default and command pay rate
ECONOMY_JOB_RATE_AREA Dangerous, 1.3
# The multiplier that Command roles get, including QM because they're a head :)
ECONOMY_JOB_RATE_AREA Command, 1.4
# The multiplier for payment that the Captain gets. He controls the station, logically it's harder to do than all of the other jobs.
ECONOMY_JOB_RATE Captain, 1.5
# Examples for adding a single job datum. The value will be included if it falls in a category from ECONOMY_JOB_RATE
# This is a multiplier that Assistants get for their paycheck. This is less than 1 because assistants get the default multiplier added to them
ECONOMY_JOB_RATE Assistant, 0.83
# This is a multiplier that Shaft Miners get for their paycheck. They count as a dangerous job, but they shouldn't get the same as security
ECONOMY_JOB_RATE Shaft Miner, 0.9
# Default price for items that use these values
ECONOMY_PRICE_LOW 8
ECONOMY_PRICE_DEFAULT 15
ECONOMY_PRICE_HIGH 30
ECONOMY_PRICE_EROTIC 25
ECONOMY_PRICE_EXPENSIVE 60
ECONOMY_PRICE_EXPENSIVE_AF 90
# A multiplier to the prices of items inside vendors. Avoid setting this higher than the Assistant's paycheck multiplier if possible
# This scales every item found in vendors. If you want to change an individual item, you have to change it through code
ECONOMY_PRICE_MULTIPLIER 1.35
@@ -1,62 +1,10 @@
SUBSYSTEM_DEF(economy)
name = "Economy"
wait = 5 MINUTES
priority = FIRE_PRIORITY_ECONOMY
init_order = INIT_ORDER_ECONOMY
runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME
/// How many "paychecks" someone gets at the creation of the bank account
runlevels = RUNLEVEL_GAME
flags = SS_NO_FIRE //Let's not forget this. This subsystem does not use fire and was needlessly using CPU.
var/roundstart_paychecks = 5
var/budget_pool = 35000
var/list/generated_accounts = list()
var/list/bank_accounts = list() //List of normal accounts (not department accounts)
var/static/list/prices_by_type
/// Updates the prices from the config. Assorted into this individual proc instead of Initialize() so testers can change the config mid-round
/// without having to initialize the economy SS again
/datum/controller/subsystem/economy/proc/UpdatePrices()
roundstart_paychecks
prices_by_type = list()
prices_by_type += CONFIG_GET(number/economy_price_default) //ECONOMY_PRICE_DEFAULT.. 1
prices_by_type += CONFIG_GET(number/economy_price_low) //ECONOMY_PRICE_LOW.. 2
prices_by_type += CONFIG_GET(number/economy_price_high)
prices_by_type += CONFIG_GET(number/economy_price_erotic)
prices_by_type += CONFIG_GET(number/economy_price_expensive)
prices_by_type += CONFIG_GET(number/economy_price_expensive_af)
prices_by_type += 0 //ECONOMY_PRICE_FORCED_FREE.. 7
/datum/controller/subsystem/economy/Initialize()
roundstart_paychecks = CONFIG_GET(number/economy_base_pay_ratio)
if(!prices_by_type)
UpdatePrices()
return ..()
/datum/controller/subsystem/economy/fire()
for(var/datum/bank_account/account as anything in bank_accounts)
account.GivePaycheck(GetPaycheck(account, account.account_job))
/**
* Returns a value of the amount of money a bank account would be getting. It's just some simple multiplication.
* Both the bank account and job is allowed to be null here.
*
* Thanks to the ultimate nature of byond, colon accessors, :, get the default values of the bank account and
* job datums if the respective one is null. You can pass zero arguments here and you'd get the "default" amount of a paycheck.
*/
/datum/controller/subsystem/economy/proc/GetPaycheck(datum/bank_account/account, datum/job/job, multiplier=1)
return FLOOR(account:base_pay * job:base_paycheck_multiplier * multiplier, 1)
/**
* Returns a price value from a subtype of an /obj/item, assuming it was compiled to use money.
* Otherwise, returns null if it does not use economy
*/
/datum/controller/subsystem/economy/proc/GetPrice(obj/item/costly_item)
var/economy_type
var/price_multiplier
if(istype(costly_item))
economy_type = costly_item.economy_type
price_multiplier = costly_item.economy_price_mul
else
economy_type = initial(costly_item.economy_type)
price_multiplier = initial(costly_item.economy_price_mul)
if(!economy_type)
return
return FLOOR(prices_by_type[economy_type] * price_multiplier, 1)
@@ -7,9 +7,8 @@
icon_state = "nailcap"
item_state = "nailpolish"
w_class = WEIGHT_CLASS_SMALL
economy_type = ECONOMY_PRICE_LOW
economy_price_mul = 1.25
var/paint = "black"
price = 5
var/mutable_appearance/bottle //show the colour on the bottle.
/obj/item/nailpolish/red
@@ -1,4 +1,4 @@
/*
/*
lover's dice: based off a really funny yakuza gif i saw on tumblr years ago
these give suggestions for sex acts to perform. it's stupid but fun.
@@ -12,8 +12,7 @@ sarcoph mar 2022
desc = "Contains all the intimate ideas you'll ever need. A game that everyone wins!"
icon = 'hyperstation/icons/obj/toy.dmi'
icon_state = "lovedicebag"
economy_type = ECONOMY_PRICE_EROTIC
economy_price_mul = 0.5
price = 1
/obj/item/storage/pill_bottle/lovedice/Initialize()
. = ..()
+21 -37
View File
@@ -1,45 +1,29 @@
/datum/bank_account
/// The name of whoever owns this account
var/account_holder = "Some pleboid"
/// The balance, in credits!
var/balance = 0
/// Fluff for the ID of this card. Purely cosmetic, but unique for every account
var/account_id = 0
/// The pin number that the owner wanted. Not set by default, so anyone can just steal your ID if you don't remember to set it
var/account_pin
/// The base amount of pay you get per paycheck
var/base_pay = 80
/// The linked job datum for this bank account, for calculating unique base payment for each job
var/datum/job/account_job
/// The associated ID, for letting the card-holder know when a paycheck is processed
var/obj/item/card/id/associated_id
#define DUMPTIME 3000
/datum/bank_account/New(mob/living/carbon/human/new_holder, datum/job/job, obj/item/card/id/id_card)
account_holder = new_holder.real_name
/datum/bank_account
var/account_holder = "Some pleb"
var/account_balance = 0
var/account_offstation_balance = 0
var/account_pin = 0
var/account_dna = ""
var/datum/job/account_job
var/list/bank_cards = list()
var/add_to_accounts = TRUE
var/transferable = TRUE
var/account_id
var/withdrawDelay = 0
/datum/bank_account/New(newname, job)
if(add_to_accounts)
if(!SSeconomy)
log_world("Wack")
SSeconomy.bank_accounts += src
account_holder = newname
account_job = job
associated_id = id_card
account_id = rand(111111,999999)
if(!SSeconomy || !SSeconomy.initialized)
stack_trace("A new bank account was made without the economy subsystem being initialized first. If this is an issue, change the subsystem's init_order.")
return
base_pay = CONFIG_GET(number/economy_base_payment)
SSeconomy.bank_accounts += src
balance += SSeconomy.GetPaycheck(src, job, SSeconomy.roundstart_paychecks)
/// Helper for whenever a paycheck gets processed into this account from the economy SS. Simply adds an amount to the account balance and notifies the user.
/datum/bank_account/proc/GivePaycheck(amount, silent=FALSE)
balance += amount
if(associated_id && !silent)
var/local_turf = get_turf(associated_id)
for(var/mob/M in get_hearers_in_view(1, local_turf))
M.playsound_local(local_turf, 'sound/machines/twobeep_high.ogg', 50, vary = TRUE)
to_chat(M, "<span class='notice'>[icon2html(associated_id, M)] Paycheck processed, your account now holds [balance] credits.</span>")
/datum/bank_account/Destroy()
if(SSeconomy)
if(add_to_accounts)
SSeconomy.bank_accounts -= src
return ..()
+2 -2
View File
@@ -7,9 +7,9 @@
icon = 'hyperstation/icons/obj/condom.dmi'
throwforce = 0
icon_state = "b_condom_wrapped"
var/unwrapped = 0
var/unwrapped = 0
w_class = WEIGHT_CLASS_TINY
economy_type = ECONOMY_PRICE_LOW
price = 1
obj/item/condom/Initialize()
create_reagents(300, DRAWABLE|NO_REACT)
+12 -13
View File
@@ -18,7 +18,6 @@
light_power = 0
light_range = 7
light_color = COLOR_VIVID_RED
var/pin = 0
/obj/machinery/atm/ui_interact(mob/user)
@@ -40,7 +39,7 @@
if(idcard.registered_account)
if(!idcard.registered_account.account_pin || pin == idcard.registered_account.account_pin)
dat += "<p>Balance: <b>$[idcard.registered_account.balance]</b>"
dat += "<p>Balance: <b>$[idcard.registered_account.account_balance]</b>"
//dat += "<p>Offstation Balance: <b()</b>"
dat += "<p>"
dat += "<a href='byond://?src=[REF(src)];withdraw=1'>Withdraw</A>"
@@ -73,15 +72,15 @@
user = idcard.registered_name
pin = ""
playsound(src, 'sound/machines/button.ogg', 50, FALSE)
ui_interact(usr)
src.ui_interact(usr)
if(istype(I, /obj/item/stack/credits)) //feed money back into the machine! dont need a pin to donate stuff.
if(held_card)
var/obj/item/stack/credits/cred = I
var/obj/item/card/id/idcard = held_card
idcard.registered_account.balance = (idcard.registered_account.balance+cred.amount)
idcard.registered_account.account_balance = (idcard.registered_account.account_balance+cred.amount)
to_chat(usr, "<span class='notice'>You insert [cred] into the ATM.</span>")
ui_interact(usr)
src.ui_interact(usr)
del(cred)
/obj/machinery/atm/Topic(href, href_list)
@@ -107,29 +106,29 @@
var/pininput = input(user, "Input pin", "Pin Number") as num|null
if(pininput)
if(pininput > 9999 || pininput < 1000)
to_chat(usr, "<span class='notice'>[src] buzzes, you must input a 4 digit number between 1000 and 9999.</span>")
to_chat(usr, "<span class='notice'>[src.name] buzzes, you must input a 4 digit number between 1000 and 9999.</span>")
return
pin = max(min( round(text2num(pininput)), 9999),1000) //4 numbers or less.
var/obj/item/card/id/idcard = held_card
if(pin == idcard.registered_account.account_pin)
to_chat(usr, "<span class='notice'>[src] beeps, accepting the pin.</span>")
to_chat(usr, "<span class='notice'>[src.name] beeps, accepting the pin.</span>")
else
to_chat(usr, "<span class='notice'>[src] buzzes, denying the pin.</span>")
to_chat(usr, "<span class='notice'>[src.name] buzzes, denying the pin.</span>")
if(href_list["changepin"])
playsound(src, get_sfx("terminal_type"), 25, 1)
var/pinchange = input(user, "Input pin", "Pin Number") as num|null
if(pinchange > 9999 || pinchange < 1000)
to_chat(usr, "<span class='warning'>[src], you must have a 4 digit number for a pin and be between 1000 and 9999.</span>")
to_chat(usr, "<span class='warning'>[src.name], you must have a 4 digit number for a pin and be between 1000 and 9999.</span>")
return
if(pinchange)
var/pinchange2 = input(user, "Confirm pin", "Confirm pin") as num|null //time to confirm!
if(pinchange == pinchange2)
var/obj/item/card/id/idcard = held_card
idcard.registered_account.account_pin = pinchange
to_chat(usr, "<span class='notice'>[src] beeps, your pin has been changed to [pinchange]!.</span>")
to_chat(usr, "<span class='notice'>[src.name] beeps, your pin has been changed to [pinchange]!.</span>")
else
to_chat(usr, "<span class='warning'>[src] buzzes, your pins did not match!</span>")
to_chat(usr, "<span class='warning'>[src.name] buzzes, your pins did not match!</span>")
pin = ""
if(href_list["withdraw"])
@@ -139,9 +138,9 @@
if(idcard.registered_account)
var/amount = input(user, "Choose amount", "Withdraw") as num|null
if(amount>0)
amount = max(min( round(text2num(amount)), idcard.registered_account.balance),0) //make sure they aint taking out more then what they have
amount = max(min( round(text2num(amount)), idcard.registered_account.account_balance),0) //make sure they aint taking out more then what they have
to_chat(usr, "<span class='notice'>The machine prints out [amount] credits.</span>")
idcard.registered_account.balance = (idcard.registered_account.balance-amount) //subtract the amount they took out.
idcard.registered_account.account_balance = (idcard.registered_account.account_balance-amount) //subtract the amount they took out.
var/obj/item/stack/credits/C = new /obj/item/stack/credits/(loc)
C.amount = amount
if(usr.put_in_hands(C))
+10 -13
View File
@@ -10,11 +10,10 @@
icon_state = "fleshlight_base"
item_state = "fleshlight"
w_class = WEIGHT_CLASS_SMALL
economy_type = ECONOMY_PRICE_EROTIC
economy_price_mul = 0.95
var/inuse = 0
var/sleevecolor = "#ffcbd4" //pink
price = 8
var/mutable_appearance/sleeve
var/inuse = 0
/obj/item/fleshlight/examine(mob/user)
. = ..()
@@ -79,11 +78,10 @@
icon_state = "unpaired"
item_state = "fleshlight"
w_class = WEIGHT_CLASS_SMALL
economy_type = ECONOMY_PRICE_EROTIC
economy_price_mul = 1.2
var/partnercolor = "#ffcbd4"
var/partnerbase = "normal"
var/partnerorgan = "portal_vag"
price = 20
var/mutable_appearance/sleeve
var/mutable_appearance/organ
var/inuse = 0
@@ -98,7 +96,7 @@
else
. += "<span class='notice'>The device is paired, and awaiting input. </span>"
/obj/item/portallight/attack(mob/living/carbon/user, mob/living/holder)
/obj/item/portallight/attack(mob/living/carbon/user, mob/living/holder)
if(inuse) //just to stop stacking and causing people to cum instantly
return
if(!UpdateUsability())
@@ -113,8 +111,8 @@
if(option == "Fuck" && !P.is_exposed())
to_chat(holder, "<span class='notice'>You don't see anywhere to use this on.</span>")
return
/*
WARMUP START - prevents spam/instant climax
/*
WARMUP START - prevents spam/instant climax
*/
inuse = TRUE
if(user != holder)
@@ -124,8 +122,8 @@
inuse = FALSE
return
inuse = FALSE
/*
WARMUP END - proceed with the action
/*
WARMUP END - proceed with the action
*/
switch(option)
if("Fuck")
@@ -142,7 +140,7 @@
user.adjustArousalLoss(20)
target.adjustArousalLoss(20)
target.do_jitter_animation()
if(target.can_orgasm() && prob(5))
if(target.can_orgasm() && prob(5))
target.mob_climax_outside(target_genital, spillage=target_genital.is_exposed())
if(user.can_orgasm())
var/mob/living/carbon/human/O = user
@@ -278,8 +276,7 @@
icon = 'hyperstation/icons/obj/fleshlight.dmi'
desc = "A small silver box with Silver Love Co embossed."
icon_state = "box"
economy_type = ECONOMY_PRICE_EROTIC
economy_price_mul = 1.5
price = 15
// portal fleshlight box
/obj/item/storage/box/portallight/PopulateContents()
+4 -8
View File
@@ -6,16 +6,14 @@
icon = 'hyperstation/icons/obj/clothing/gloves.dmi'
alternate_worn_icon = 'hyperstation/icons/mobs/gloves.dmi'
mutantrace_variation = NO_MUTANTRACE_VARIATION
economy_type = ECONOMY_PRICE_EROTIC
economy_price_mul = 0.75
price = 5
/obj/item/clothing/gloves/latexsleeves/security
name = "security sleeves"
desc = "A pair of latex sleeves, with a band of red above the elbows denoting that the wearer is part of the security team."
icon_state = "latexsec"
item_state = "latexsec"
economy_type = ECONOMY_PRICE_EROTIC
economy_price_mul = 0.75
price = 5
/obj/item/clothing/head/dominatrixcap
name = "dominatrix cap"
@@ -47,8 +45,7 @@ obj/item/clothing/neck/stole
w_class = WEIGHT_CLASS_SMALL
icon_state = "stole"
item_state = "" //no inhands
economy_type = ECONOMY_PRICE_EXPENSIVE
economy_price_mul = 0.75
price = 3
obj/item/clothing/neck/stole/black
name = "black boa"
@@ -58,8 +55,7 @@ obj/item/clothing/neck/stole/black
icon_state = "stole"
item_state = "" //no inhands
color = "#3d3d3d"
economy_type = ECONOMY_PRICE_EXPENSIVE
economy_price_mul = 0.75
price = 3
/obj/item/clothing/suit/fluffyhalfcrop
name = "fluffy half-crop jacket"
+1 -2
View File
@@ -10,8 +10,7 @@
item_state = "rope" //This sprite is in restraints.dmi until I figure out how to refrence somewhere else
cuffsound = 'sound/weapons/cablecuff.ogg'
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
economy_type = ECONOMY_PRICE_LOW
economy_price_mul = 1.25
price = 2
/mob/living/proc/rope_add(source) //Check to see if the rope is on, and then add effects
var/mob/living/carbon/M = source
+2 -2
View File
@@ -4,9 +4,9 @@
icon = 'hyperstation/icons/obj/sounding.dmi'
throwforce = 0
icon_state = "sounding_wrapped"
var/unwrapped = 0
var/unwrapped = 0
w_class = WEIGHT_CLASS_TINY
economy_type = ECONOMY_PRICE_LOW
price = 1
/obj/item/sounding/attack_self(mob/user)
if(!istype(user))
+1 -1
View File
@@ -13,7 +13,7 @@
var/style = "long"
var/inside = FALSE
var/last = 0
economy_type = ECONOMY_PRICE_EROTIC
price = 3
/obj/item/electropack/vibrator/Initialize() //give the device its own code
. = ..()
@@ -11,8 +11,7 @@
strip_delay = 60
equip_delay_other = 60
materials = list(MAT_METAL=5000, MAT_GLASS=2000)
economy_type = ECONOMY_PRICE_EXPENSIVE
economy_price_mul = 0.75
price = 5
var/tagname = null
/datum/design/electropack/shockcollar
Binary file not shown.
-1
View File
@@ -43,7 +43,6 @@
#include "code\__DEFINES\cult.dm"
#include "code\__DEFINES\diseases.dm"
#include "code\__DEFINES\DNA.dm"
#include "code\__DEFINES\economy.dm"
#include "code\__DEFINES\events.dm"
#include "code\__DEFINES\exports.dm"
#include "code\__DEFINES\fantasy_affixes.dm"