diff --git a/code/WorkInProgress/ZomgPonies/karma.dm b/code/WorkInProgress/ZomgPonies/karma.dm index c24aed2604b..45a8fcd60be 100644 --- a/code/WorkInProgress/ZomgPonies/karma.dm +++ b/code/WorkInProgress/ZomgPonies/karma.dm @@ -120,7 +120,7 @@ mob/verb/check_karma() var/currentkarma = (text2num(totalkarma) - text2num(karmaspent)) if(totalkarma) usr << {"
You have [currentkarma] available.
- You've gained [totalkarma] total karma in your time here.
"} +You've gained [totalkarma] total karma in your time here.
"} else usr << "Your total karma is: 0
" diff --git a/code/game/jobs/job/captain.dm b/code/game/jobs/job/captain.dm index af1f9ec7094..daa5869c397 100644 --- a/code/game/jobs/job/captain.dm +++ b/code/game/jobs/job/captain.dm @@ -151,7 +151,7 @@ access_theatre, access_chapel_office, access_library, access_research, access_mining, access_heads_vault, access_mining_station, access_clown, access_mime, access_hop, access_RC_announce, access_keycard_auth, access_gateway) minimal_access = list(access_security, access_sec_doors, access_brig, access_court, access_forensics_lockers, - access_medical, access_engine, access_ai_upload, access_eva, access_heads, + access_medical, access_engine, access_eva, access_heads, access_all_personal_lockers, access_maint_tunnels, access_bar, access_janitor, access_construction, access_morgue, access_crematorium, access_kitchen, access_cargo, access_cargo_bot, access_mailsorting, access_qm, access_hydroponics, access_lawyer, access_theatre, access_chapel_office, access_library, access_research, access_mining, access_heads_vault, access_mining_station, @@ -168,6 +168,7 @@ H.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(H), slot_gloves) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(H), slot_shoes) H.equip_if_possible(new /obj/item/clothing/under/rank/centcom/representative(H), slot_w_uniform) + H.equip_if_possible(new /obj/item/clothing/suit/armor/vest/fluff/deus_blueshield(H), slot_wear_suit) H.equip_to_slot_or_del(new /obj/item/device/pda/heads/hop(H), slot_belt) var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) L.imp_in = H diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm index 01f6f8d10a4..0cdc00c6f9c 100644 --- a/code/game/jobs/job_controller.dm +++ b/code/game/jobs/job_controller.dm @@ -380,7 +380,8 @@ var/global/datum/controller/occupations/job_master //give them an account in the station database if(centcomm_account_db) - var/datum/money_account/M = create_account(H.real_name, rand(50,500)*10, null) + var/balance = round(rand(1,5))*100 // Between $100 and $500 + var/datum/money_account/M = create_account(H.real_name, balance , null) if(H.mind) var/remembered_info = "" remembered_info += "Your account number is: #[M.account_number]
" diff --git a/code/game/jobs/job_objective.dm b/code/game/jobs/job_objective.dm index 1c8bbe79fcc..fafbb225d90 100644 --- a/code/game/jobs/job_objective.dm +++ b/code/game/jobs/job_objective.dm @@ -43,13 +43,17 @@ /datum/game_mode/proc/declare_job_completion() var/text = "Job Completion:" - for(var/datum/mind/employee in player_list) + var/numEmployees=0 + for(var/datum/mind/employee in ticker.minds) if(!employee.job_objectives.len)//If the employee had no objectives, don't need to process this. - return + continue + if(!employee.assigned_role=="MODE")//If the employee is a gamemode thing, skip. + continue + numEmployees++ var/tasks_completed=0 //text += "[L.name] ([ckey(D.mind.key)]), the [L.job]:\n" - text += "
[employee.key] was [employee.name] (" + text += "
[employee.key] was [employee.name], the [employee.assigned_role] (" if(employee.current) if(employee.current.stat == DEAD) text += "died" @@ -78,6 +82,6 @@ else text += "
The [employee.assigned_role] was a worthless sack of shit!" feedback_add_details("employee_success","FAIL") - - world << text + if(numEmployees>0) + world << text return 1 \ No newline at end of file diff --git a/code/game/machinery/computer/store.dm b/code/game/machinery/computer/store.dm new file mode 100644 index 00000000000..7b95104a796 --- /dev/null +++ b/code/game/machinery/computer/store.dm @@ -0,0 +1,153 @@ +/obj/machinery/computer/merch + name = "Merch Computer" + icon = 'icons/obj/computer.dmi' + icon_state = "comm_logs" + circuit = "/obj/item/weapon/circuitboard/merch" + +/obj/machinery/computer/merch/New() + ..() + +/obj/machinery/computer/merch/attack_paw(mob/user as mob) + return attack_hand(user) + +/obj/machinery/computer/merch/attack_ai(mob/user as mob) + src.add_hiddenprint(user) + return attack_hand(user) + +/obj/machinery/computer/merch/attack_hand(mob/user as mob) + user.set_machine(src) + add_fingerprint(user) + + if(stat & (BROKEN|NOPOWER)) + return + + var/balance=user.mind.initial_account.money + + var/dat = {" + + + [command_name()] Merchandise + + + +

Refresh | Balance: $[balance]

+

[command_name()] Merchandise

+

+ Doing your job and not getting any recognition at work? Well, welcome to the + merch shop! Here, you can buy cool things in exchange for money you earn when you've + completed your Job Objectives. +

+

Work hard. Get cash. Acquire bragging rights.

+

In Stock:

+ + + + + + + + "} + for(var/datum/storeitem/item in centcomm_store.items) + var/cost_class="affordable" + if(item.cost>balance) + cost_class="toomuch" + var/itemID=centcomm_store.items.Find(item) + dat += {" + + + + + + "} + dat += {" + +
#Name/DescriptionPrice
+ [itemID] + +

[item.name]

+

[item.desc]

+
+ $[item.cost] +
+ +"} + user << browse(dat, "window=merch") + onclose(user, "merch") + return + +/obj/machinery/computer/merch/Topic(href, href_list) + if(..()) + return + + //testing(href) + + src.add_fingerprint(usr) + + if (href_list["buy"]) + var/itemID = text2num(href_list["buy"]) + var/datum/storeitem/item = centcomm_store.items[itemID] + var/sure = alert(usr,"Are you sure you wish to purchase [item.name] for $[item.cost]?","You sure?","Yes","No") in list("Yes","No") + if(sure=="No") + updateUsrDialog() + return + if(!centcomm_store.PlaceOrder(usr,itemID)) + usr << "\red Unable to charge your account." + else + usr << "\blue You've successfully purchased the item. It should be in your hands or on the floor." + src.updateUsrDialog() + return + +/obj/machinery/computer/cloning/update_icon() + + if(stat & BROKEN) + icon_state = "comm_logs0" + else + if(stat & NOPOWER) + src.icon_state = "comm_logs" + stat |= NOPOWER + else + icon_state = initial(icon_state) + stat &= ~NOPOWER diff --git a/code/modules/events/event_dynamic.dm b/code/modules/events/event_dynamic.dm index add417288a9..39eb8777a82 100644 --- a/code/modules/events/event_dynamic.dm +++ b/code/modules/events/event_dynamic.dm @@ -52,11 +52,11 @@ var/global/list/possibleEvents = list() possibleEvents[/datum/event/falsealarm] = 300 possibleEvents[/datum/event/immovable_rod] = 200 possibleEvents[/datum/event/vent_clog] = 300 - possibleEvents[/datum/event/anomaly/anomaly_bluespace] = 200 + possibleEvents[/datum/event/anomaly/anomaly_bluespace] = 150 possibleEvents[/datum/event/anomaly/anomaly_flux] = 200 possibleEvents[/datum/event/anomaly/anomaly_grav] = 200 possibleEvents[/datum/event/anomaly/anomaly_pyro] = 200 - possibleEvents[/datum/event/anomaly/anomaly_vortex] = 200 + possibleEvents[/datum/event/anomaly/anomaly_vortex] = 150 possibleEvents[/datum/event/pda_spam] = max(min(25, player_list.len) * 4, 200) possibleEvents[/datum/event/money_lotto] = max(min(5, player_list.len), 50) diff --git a/code/modules/store/items.dm b/code/modules/store/items.dm new file mode 100644 index 00000000000..ea515f5ba11 --- /dev/null +++ b/code/modules/store/items.dm @@ -0,0 +1,88 @@ +///////////////////////////// +// Store Item +///////////////////////////// +/datum/storeitem + var/name="Thing" + var/desc="It's a thing." + var/typepath=/obj/item/weapon/storage/box + var/cost=0 + +/datum/storeitem/proc/deliver(var/mob/usr) + if(!istype(typepath,/obj/item/weapon/storage)) + var/obj/item/weapon/storage/box/box=new(usr.loc) + new typepath(box) + box.name="[name] package" + box.desc="A special gift for doing your job." + usr.put_in_hands(box) + else + var/thing = new typepath(usr.loc) + usr.put_in_hands(thing) + + +///////////////////////////// +// Shit for robotics/science +///////////////////////////// +/* +/datum/storeitem/robotnik_labcoat + name = "Robotnik's Research Labcoat" + desc = "Join the empire and display your hatred for woodland animals." + typepath = /obj/item/clothing/suit/storage/labcoat/custom/N3X15/robotics + cost = 350 + +/datum/storeitem/robotnik_jumpsuit + name = "Robotics Interface Suit" + desc = "A modern black and red design with reinforced seams and brass neural interface fittings." + typepath = /obj/item/clothing/under/custom/N3X15/robotics + cost = 500 +*/ + +///////////////////////////// +// General +///////////////////////////// +/datum/storeitem/snap_pops + name = "Snap-Pops" + desc = "Ten-thousand-year-old chinese fireworks: IN SPACE" + typepath = /obj/item/weapon/storage/box/snappops + cost = 200 + +/datum/storeitem/crayons + name = "Crayons" + desc = "Let security know how they're doing by scrawling lovenotes all over their hallways." + typepath = /obj/item/weapon/storage/fancy/crayons + cost = 350 + +/datum/storeitem/pipe + name = "smoking pipe" + desc = "A pipe, for smoking. Probably made of meershaum or something." + typepath = /obj/item/clothing/mask/cigarette/pipe + cost = 350 + +/datum/storeitem/katana + name = "replica katana" + desc = "Woefully underpowered in D20." + typepath = /obj/item/toy/katana + cost = 500 + +/datum/storeitem/violin + name = "space violin" + desc = "A wooden musical instrument with four strings and a bow. \"The devil went down to space, he was looking for an assistant to grief.\"" + typepath = /obj/item/device/violin + cost = 500 + +/datum/storeitem/baby + name = "Toddler" + desc = "This baby looks almost real. Wait, did it just burp?" + typepath = /obj/item/weapon/toddler + cost = 1000 + +/datum/storeitem/laserpointer + name = "laser pointer" + desc = "Don't shine it in your eyes!" + typepath = /obj/item/device/laser_pointer + cost = 1000 + +/datum/storeitem/banhammer + desc = "A banhammer" + name = "banhammer" + typepath = /obj/item/weapon/banhammer + cost = 2000 diff --git a/code/modules/store/store.dm b/code/modules/store/store.dm new file mode 100644 index 00000000000..02a50c1b31a --- /dev/null +++ b/code/modules/store/store.dm @@ -0,0 +1,65 @@ +/***************************** + * /vg/station In-Game Store * + ***************************** + +By Nexypoo + +The idea is to give people who do their jobs a reward. + +Ideally, these items should be cosmetic in nature to avoid fucking up round balance. +People joining the round get between $100 and $500. Keep this in mind. + +Money should not persist between rounds, although a "bank" system to voluntarily store +money between rounds might be cool. It'd need to be a bit volatile: perhaps completing +job objectives = good stock market, shitty job objective completion = shitty economy. + +Goal for now is to get the store itself working, however. +*/ + +var/global/datum/store/centcomm_store=new + +/datum/store + var/list/datum/storeitem/items=list() + var/list/datum/storeorder/orders=list() + + var/obj/machinery/account_database/linked_db + +/datum/store/New() + for(var/itempath in typesof(/datum/storeitem) - /datum/storeitem/) + items += new itempath() + +/datum/store/proc/charge(var/datum/mind/mind,var/amount,var/datum/storeitem/item) + if(!mind.initial_account) + //testing("No initial_account") + return 0 + if(mind.initial_account.money < amount) + //testing("Not enough cash") + return 0 + mind.initial_account.money -= amount + var/datum/transaction/T = new() + T.target_name = "[command_name()] Merchandising" + T.purpose = "Purchase of [item.name]" + T.amount = -amount + T.date = current_date_string + T.time = worldtime2text() + T.source_terminal = "\[CLASSIFIED\] Terminal #[rand(111,333)]" + mind.initial_account.transaction_log.Add(T) + return 1 + +/datum/store/proc/reconnect_database() + for(var/obj/machinery/account_database/DB in world) + if(DB.z == 1) + linked_db = DB + break + +/datum/store/proc/PlaceOrder(var/mob/living/usr, var/itemID) + // Get our item, first. + var/datum/storeitem/item = items[itemID] + if(!item) + return 0 + // Try to deduct funds. + if(!charge(usr.mind,item.cost,item)) + return 0 + // Give them the item. + item.deliver(usr) + return 1 \ No newline at end of file