diff --git a/code/datums/roundstats/_defines_local.dm b/code/datums/roundstats/_defines_local.dm new file mode 100644 index 0000000000..951d7118ff --- /dev/null +++ b/code/datums/roundstats/_defines_local.dm @@ -0,0 +1,7 @@ + +#define GOAL_GENERAL "Common Goal" +#define GOAL_MEDICAL "Medical Goal" +#define GOAL_SECURITY "Security Goal" +#define GOAL_ENGINEERING "Engineering Goal" +#define GOAL_CARGO "Cargo Goal" +#define GOAL_RESEARCH "Research Goal" diff --git a/code/datums/roundstats/departmentgoal.dm b/code/datums/roundstats/departmentgoal.dm new file mode 100644 index 0000000000..b0aa69784c --- /dev/null +++ b/code/datums/roundstats/departmentgoal.dm @@ -0,0 +1,99 @@ + +GLOBAL_LIST(department_goals) +GLOBAL_LIST(active_department_goals) + +/hook/startup/proc/initializeDepartmentGoals() + GLOB.department_goals = list(GOAL_GENERAL, GOAL_MEDICAL, GOAL_SECURITY, GOAL_ENGINEERING, GOAL_CARGO, GOAL_RESEARCH) + GLOB.active_department_goals = list(GOAL_GENERAL, GOAL_MEDICAL, GOAL_SECURITY, GOAL_ENGINEERING, GOAL_CARGO, GOAL_RESEARCH) + + for(var/category in GLOB.department_goals) + GLOB.department_goals[category] = list() + + for(var/subtype in subtypesof(/datum/goal)) + var/datum/goal/SG = new subtype() + + if(SG.name == "goal") + continue + + if(SG.category == category) + GLOB.department_goals[category] |= SG + + for(var/category in GLOB.active_department_goals) + GLOB.active_department_goals[category] = list() + var/list/cat_goals = GLOB.department_goals[category] + + var/goal_count = rand(2,4) + + for(var/count = 1 to goal_count) + var/datum/goal/G + + if(LAZYLEN(cat_goals)) + G = pick(cat_goals) + + if(G) + G.active_goal = TRUE + cat_goals -= G + + GLOB.active_department_goals[category] |= G + +/hook/roundend/proc/checkDepartmentGoals() + for(var/category in GLOB.active_department_goals) + var/list/cat_goals = GLOB.active_department_goals[category] + + to_world("[category]") + + if(!LAZYLEN(cat_goals)) + to_world("There were no assigned goals!") + + else + for(var/datum/goal/G in cat_goals) + var/success = G.check_completion() + to_world("[success ? "[G.name]" : "[G.name]"]") + to_world("[G.goal_text]") + +/datum/goal + var/name = "goal" + + var/goal_text = "Do nothing! Congratulations." + + var/active_goal = FALSE + + var/category = GOAL_GENERAL + +/datum/goal/proc/check_completion() + return FALSE + +/datum/goal/common + name = "goal" + + goal_text = "Congratulations, you still do nothing." + +/datum/goal/medical + name = "goal" + + goal_text = "Congratulations, you still do nothing." + category = GOAL_MEDICAL + +/datum/goal/security + name = "goal" + + goal_text = "Congratulations, you still do nothing." + category = GOAL_SECURITY + +/datum/goal/engineering + name = "goal" + + goal_text = "Congratulations, you still do nothing." + category = GOAL_ENGINEERING + +/datum/goal/cargo + name = "goal" + + goal_text = "Congratulations, you still do nothing." + category = GOAL_CARGO + +/datum/goal/research + name = "goal" + + goal_text = "Congratulations, you still do nothing." + category = GOAL_RESEARCH diff --git a/code/datums/roundstats/roundstats.dm b/code/datums/roundstats/roundstats.dm new file mode 100644 index 0000000000..c5ceb686a7 --- /dev/null +++ b/code/datums/roundstats/roundstats.dm @@ -0,0 +1,57 @@ + +/* + * lbnesquik - Github + * Provided massive components of this. Polaris PR #5720. + */ + +//This is for the round end stats system. + +//roundstat is used for easy finding of the variables, if you ever want to delete all of this, +//just search roundstat and you'll find everywhere this thing reaches into. +//It used to be bazinga but it only fly with microwaves. + +GLOBAL_VAR_INIT(cans_opened_roundstat, 0) +GLOBAL_VAR_INIT(lights_switched_on_roundstat, 0) +GLOBAL_VAR_INIT(turbo_lift_floors_moved_roundstat, 0) +GLOBAL_VAR_INIT(lost_limbs_shift_roundstat, 0) +GLOBAL_VAR_INIT(seed_planted_shift_roundstat, 0) +GLOBAL_VAR_INIT(step_taken_shift_roundstat, 0) +GLOBAL_VAR_INIT(destroyed_research_items_roundstat, 0) +GLOBAL_VAR_INIT(items_sold_shift_roundstat, 0) +GLOBAL_VAR_INIT(disposals_flush_shift_roundstat, 0) +GLOBAL_VAR_INIT(rocks_drilled_roundstat, 0) +GLOBAL_VAR_INIT(mech_destroyed_roundstat, 0) + +/hook/roundend/proc/RoundTrivia()//bazinga + var/list/valid_stats_list = list() //This is to be populated with the good shit + + if(GLOB.lost_limbs_shift_roundstat > 1) + valid_stats_list.Add("[GLOB.lost_limbs_shift_roundstat] limbs left their owners bodies this shift, oh no!") + else if(GLOB.destroyed_research_items_roundstat > 13) + valid_stats_list.Add("[GLOB.destroyed_research_items_roundstat] objects were destroyed in the name of Science! Keep it up!") + else if(GLOB.mech_destroyed_roundstat > 1) + valid_stats_list.Add("[GLOB.mech_destroyed_roundstat] mechs were destroyed this shift. What did you do?") + else if(GLOB.seed_planted_shift_roundstat > 20) + valid_stats_list.Add("[GLOB.seed_planted_shift_roundstat] were planted according to our sensors this shift.") + + if(GLOB.rocks_drilled_roundstat > 80) + valid_stats_list.Add("Our strong miners pulverized a whole [GLOB.rocks_drilled_roundstat] piles of pathetic rubble.") + else if(GLOB.items_sold_shift_roundstat > 15) + valid_stats_list.Add("The vending machines sold [GLOB.items_sold_shift_roundstat] items today.") + else if(GLOB.step_taken_shift_roundstat > 900) + valid_stats_list.Add("The employees walked a total of [GLOB.step_taken_shift_roundstat] steps for this shift! It should put them on the road to fitness!") + + if(GLOB.cans_opened_roundstat > 0) + valid_stats_list.Add("[GLOB.cans_opened_roundstat] cans were drank today!") + else if(GLOB.lights_switched_on_roundstat > 0) + valid_stats_list.Add("[GLOB.lights_switched_on_roundstat] light switches were flipped today!") + else if(GLOB.turbo_lift_floors_moved_roundstat > 20) + valid_stats_list.Add("The elevator moved up [GLOB.turbo_lift_floors_moved_roundstat] floors today!") + else if(GLOB.disposals_flush_shift_roundstat > 40) + valid_stats_list.Add("The disposal system flushed a whole [GLOB.disposals_flush_shift_roundstat] times for this shift. We should really invest in waste treatement.") + + if(LAZYLEN(valid_stats_list)) + to_world("Shift trivia!") + + for(var/body in valid_stats_list) + to_world("[body]") diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm index a208e6eefd..c078b854d0 100644 --- a/code/game/machinery/lightswitch.dm +++ b/code/game/machinery/lightswitch.dm @@ -68,6 +68,7 @@ L.updateicon() area.power_change() + GLOB.lights_switched_on_roundstat++ /obj/machinery/light_switch/power_change() diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 4f3d532c27..6ef1439430 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -557,6 +557,7 @@ GLOBAL_LIST_EMPTY(vending_products) use_power(vend_power_usage) //actuators and stuff flick("[icon_state]-vend",src) +<<<<<<< HEAD addtimer(CALLBACK(src, .proc/delayed_vend, R, user), vend_delay) /obj/machinery/vending/proc/delayed_vend(datum/stored_item/vending_product/R, mob/user) @@ -572,6 +573,25 @@ GLOBAL_LIST_EMPTY(vending_products) vend_ready = 1 currently_vending = null SStgui.update_uis(src) +======= + spawn(vend_delay) + R.get_product(get_turf(src)) + if(has_logs) + do_logging(R, user, 1) + if(prob(1)) + sleep(3) + if(R.get_product(get_turf(src))) + visible_message("\The [src] clunks as it vends an additional item.") + playsound(src, "sound/[vending_sound]", 100, 1, 1) + + GLOB.items_sold_shift_roundstat++ + + status_message = "" + status_error = 0 + vend_ready = 1 + currently_vending = null + SSnanoui.update_uis(src) +>>>>>>> 2018d76... Department and Round Goals (#7369) /obj/machinery/vending/proc/do_logging(datum/stored_item/vending_product/R, mob/user, var/vending = 0) diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index e9e3397bba..fc29b0cd04 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -321,6 +321,8 @@ if(smoke_possible) //Just making sure nothing is running. qdel(smoke_system) + GLOB.mech_destroyed_roundstat++ + QDEL_NULL(pr_int_temp_processor) QDEL_NULL(pr_inertial_movement) QDEL_NULL(pr_give_air) diff --git a/code/modules/food/food/drinks.dm b/code/modules/food/food/drinks.dm index 2723df7fe2..6f2462aae2 100644 --- a/code/modules/food/food/drinks.dm +++ b/code/modules/food/food/drinks.dm @@ -43,6 +43,7 @@ /obj/item/weapon/reagent_containers/food/drinks/proc/open(mob/user) playsound(src,"canopen", rand(10,50), 1) + GLOB.cans_opened_roundstat++ to_chat(user, "You open [src] with an audible pop!") flags |= OPENCONTAINER diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index 62350ff0cb..b9f84f5ba2 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -17,10 +17,10 @@ /obj/item/weapon/reagent_containers/food/snacks/grown/Initialize(var/mapload, var/planttype) . = ..() - + if(!dried_type) dried_type = type - + pixel_x = rand(-5.0, 5) pixel_y = rand(-5.0, 5) @@ -287,6 +287,7 @@ if(seed.get_trait(TRAIT_SPREAD) > 0) to_chat(user, "You plant the [src.name].") new /obj/machinery/portable_atmospherics/hydroponics/soil/invisible(get_turf(user),src.seed) + GLOB.seed_planted_shift_roundstat++ qdel(src) return diff --git a/code/modules/hydroponics/trays/tray.dm b/code/modules/hydroponics/trays/tray.dm index 1ac41ce60f..fba3f9ad99 100644 --- a/code/modules/hydroponics/trays/tray.dm +++ b/code/modules/hydroponics/trays/tray.dm @@ -204,6 +204,8 @@ qdel(S) + GLOB.seed_planted_shift_roundstat++ + check_health() update_icon() diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index acb0d7dc29..7ad99a7a8d 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -556,6 +556,8 @@ turf/simulated/mineral/floor/light_corner for (var/i = 1 to mineral.result_amount - mined_ore) DropMineral() + GLOB.rocks_drilled_roundstat++ + //destroyed artifacts have weird, unpleasant effects //make sure to destroy them before changing the turf though if(artifact_find && artifact_fail) diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index a6326263da..3ac9edc068 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -252,6 +252,7 @@ return var/S = pick(footstep_sounds) + GLOB.step_taken_shift_roundstat++ if(!S) return // Play every 20 steps while walking, for the sneak diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index c9617afe11..ab8a91f721 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -856,6 +856,8 @@ Note that amputating the affected organ does in fact remove the infection from t else if(disintegrate == DROPLIMB_EDGE && nonsolid) //VOREStation Add End disintegrate = DROPLIMB_BLUNT //splut + GLOB.lost_limbs_shift_roundstat++ + switch(disintegrate) if(DROPLIMB_EDGE) if(!clean) diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index 1d46e16ce5..6cd32ccff4 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -31,7 +31,7 @@ // find the attached trunk (if present) and init gas resvr. /obj/machinery/disposal/Initialize() . = ..() - + trunk = locate() in loc if(!trunk) mode = 0 @@ -481,6 +481,7 @@ playsound(src, 'sound/machines/disposalflush.ogg', 50, 0, 0) last_sound = world.time sleep(5) // wait for animation to finish + GLOB.disposals_flush_shift_roundstat++ H.init(src, air_contents) // copy the contents of disposer to holder diff --git a/code/modules/turbolift/turbolift.dm b/code/modules/turbolift/turbolift.dm index cc2739d028..25a5f70601 100644 --- a/code/modules/turbolift/turbolift.dm +++ b/code/modules/turbolift/turbolift.dm @@ -164,6 +164,8 @@ doors_closing = 0 // The doors weren't open, so they are done closing + GLOB.turbo_lift_floors_moved_roundstat++ + var/area/turbolift/origin = locate(current_floor.area_ref) if(target_floor == current_floor) diff --git a/vorestation.dme b/vorestation.dme index e0aceda193..95d654f935 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -409,6 +409,9 @@ #include "code\datums\repositories\decls.dm" #include "code\datums\repositories\repository.dm" #include "code\datums\repositories\unique.dm" +#include "code\datums\roundstats\_defines_local.dm" +#include "code\datums\roundstats\departmentgoal.dm" +#include "code\datums\roundstats\roundstats.dm" #include "code\datums\supplypacks\atmospherics.dm" #include "code\datums\supplypacks\contraband.dm" #include "code\datums\supplypacks\contraband_vr.dm"