Files
Mike LongandGitHub c7c61ec373 Enhance bitrunner domain creation blackbox logging (#94913)
## About The Pull Request

Improves some blackbox logging for bitrunner domain creation, by also
logging how much information they had when they chose it.

Also some minor code improvements, by making methods for whether the
name/reward of a domain is visible.

## Why It's Good For The Game

Right now, if we just look at blackbox logs, we cannot easily tell if a
domain is being deliberately avoided when possible, as we cannot tell if
it's run unintentionally or intentionally. Now we will record that
information, so we can act on it, and hopefully perform actions to
improve the domains that people attempt to avoid.
2026-01-28 11:40:33 -06:00

119 lines
4.1 KiB
Plaintext

/**
* # Virtual Domains
* Create your own: Read the readme file in the '_maps/virtual_domains' folder.
*/
/datum/lazy_template/virtual_domain
map_dir = "_maps/virtual_domains"
map_name = "None"
key = "Virtual Domain"
place_on_top = TRUE
/// Whether to tell observers this map is being used
var/announce_to_ghosts = FALSE
/// The map file to load
var/filename = "virtual_domain.dmm"
/// The start time of the map. Used to calculate time taken
var/start_time
/**
* Generic settings / UI
*/
/// Cost of this map to load
var/cost = BITRUNNER_COST_NONE
/// The description of the map for the console UI
var/desc = "A map."
/// Affects the ui and ability to scan info.
var/difficulty = BITRUNNER_DIFFICULTY_NONE
/// Write these to help complete puzzles and other objectives. Viewed in the domain info ability.
var/help_text
// Name to show in the UI
var/name = "Virtual Domain"
/// Points to reward for completion. Used to purchase new domains and calculate ore rewards.
var/reward_points = BITRUNNER_REWARD_MIN
/// Any additional flags for this domain
var/domain_flags = NONE
/**
* Player customization
*/
/// Any outfit that you wish to force on avatars. Overrides preferences
var/datum/outfit/forced_outfit
/**
* Loot
*/
/// An assoc list of typepath/amount to spawn on completion. Not weighted - the value is the amount
var/list/completion_loot
/// An assoc list of typepath/amount to spawn from secondary objectives. Not weighted - the value is the total number of items that can be obtained.
var/list/secondary_loot = list()
/// Number of secondary loot boxes generated. Resets when the domain is reloaded.
var/secondary_loot_generated
/// Has this domain been beaten with high enough score to spawn a tech disk?
var/disk_reward_spawned = FALSE
/**
* Modularity
*/
/// Whether to display this as a modular map
var/is_modular = FALSE
/// Byond will look for modular mob segment landmarks then choose from here at random. You can make them unique also.
var/list/datum/modular_mob_segment/mob_modules = list()
/// Forces all mob modules to only load once
var/modular_unique_mobs = FALSE
/**
* Spawning
*/
/// Looks for random landmarks to spawn on.
var/list/custom_spawns = list()
/// Set TRUE if you want reusable custom spawners
var/keep_custom_spawns = FALSE
/// The domain must have this many ghost candidates willing to join as entities, or else it will not load.
var/mission_min_candidates = 0
/// Maximum amount possible of above.
var/mission_max_candidates = 0
/// Ghosts that will be spawned as, presumably, an antagonist in the map.
var/list/chosen_ghosts
/// List of spawners used for candidates.
var/list/obj/effect/mob_spawn/ghost_role/ghost_spawners
/// Current domain mobs being held by ghosts
var/list/mob/living/ghost_mobs
/// The role that ghosts will get. Only used for poll text.
var/spawner_role = "Antagonist"
/datum/lazy_template/virtual_domain/proc/can_view_name(scanner_tier, server_points)
return difficulty < scanner_tier && cost <= server_points + 5
/datum/lazy_template/virtual_domain/proc/can_view_reward(scanner_tier, server_points)
return difficulty < (scanner_tier + 1) && cost <= server_points + 3
/datum/lazy_template/virtual_domain/Destroy(force)
QDEL_NULL(ghost_spawners)
QDEL_NULL(ghost_mobs)
. = ..()
/// Sends a point to any loot signals on the map
/datum/lazy_template/virtual_domain/proc/add_points(points_to_add = 1)
SEND_SIGNAL(src, COMSIG_BITRUNNER_GOAL_POINT, points_to_add)
/// Loads the ghost candidates.
/datum/lazy_template/virtual_domain/proc/load_advanced_npcs(list/mob/lucky_ghosts)
for(var/mob/lucky_ghost as anything in lucky_ghosts)
var/obj/effect/mob_spawn/ghost_role/ghost_spawner = pick(ghost_spawners)
LAZYREMOVE(ghost_spawners, ghost_spawner)
var/mob/new_mob = ghost_spawner.create(lucky_ghost, lucky_ghost.real_name)
LAZYADD(ghost_mobs, new_mob)
var/ghostname = lucky_ghost.name
notify_ghosts("[ghostname] has been selected to be a [ghost_spawner.prompt_name]!", source = new_mob, header = "001010110")
/// Overridable proc to be called after the map is loaded.
/datum/lazy_template/virtual_domain/proc/setup_domain(list/created_atoms)
return