Game Api Reference

    Data Center Game — API Reference for Modding (FFI via Il2Cpp)

    All types live in the Il2Cpp namespace. Assembly: Assembly-CSharp.dll.


    1. BalanceSheet (extends MonoBehaviour)

    Singleton financial tracker. Manages revenue, expenses, penalties per customer per month.

    Static Fields

    TypeNameNotes
    BalanceSheetinstanceSingleton accessor

    Instance Properties / Fields

    TypeNameNotes
    List<MonthlySnapshot>historyHistorical monthly financial snapshots
    Dictionary<int, CustomerRecord>currentRecordsLive records keyed by customer ID
    floattotalMonthlySalarySum of all technician salaries
    floatcurrentSalaryExpenseRunning salary expense this period
    List<GameObject>activeRowsUI rows currently shown
    CoroutinetrackFinancesCoroutineRunning finance tracking coroutine

    Methods

    SignatureNotes
    CustomerRecord GetOrCreateRecord(CustomerItem item)Get or lazily create a record for a customer
    void RegisterSalary(int monthlySalary)Register a technician's salary
    int CountFailingApps(CustomerBase cb)Count apps failing SLA for a customer base
    void SaveSnapshot(int month, DateTime snapshotTime)Freeze current month into history
    MonthlySnapshot GetLatestSnapshot()Get most recent monthly snapshot
    void FillInBalanceSheet()Refresh the balance sheet UI
    void AddRow(string name, float revenue, float penalties, float total, Sprite logo = null)Add a display row
    void AddSalaryRow(float salaryExpense)Add the salary expense row

    Nested: BalanceSheet.CustomerRecord

    TypeNameNotes
    intcustomerID
    stringcustomerName
    SpritecustomerLogo
    floatrevenueGross revenue from this customer
    floatpenaltiesSLA penalties incurred
    floatTotalProperty (getter only): revenue - penalties

    Nested: BalanceSheet.MonthlySnapshot

    TypeNameNotes
    intmonthMonth index
    intdayDay within month
    List<CustomerRecord>recordsPer-customer breakdown
    floatsalaryExpenseTechnician salaries this month
    floatTotalRevenueProperty (getter): sum of all customer revenues
    floatTotalPenaltiesProperty (getter): sum of all penalties
    floatGrandTotalProperty (getter): TotalRevenue - TotalPenalties - salaryExpense

    2. Technician (extends MonoBehaviour)

    Represents a single technician NPC that can repair broken servers/switches.

    Enum: Technician.TechnicianState

    ValueMeaning
    IdleStanding around
    GoingForNewServerWalking to pick up a new server
    BringingNewServerCarrying a new server to the rack
    GoingBackWithOldServerCarrying a broken server to dumpster
    EndingHisWorkFinishing up

    Instance Properties / Fields

    TypeNameNotes
    inttechnicianIDUnique ID
    stringtechnicianNameDisplay name
    intsalaryMonthly salary cost
    TechnicianStatecurrentStateCurrent state machine state
    boolisBusyWhether actively on a job
    ServerserverServer currently being worked on
    TransformtransformIdleIdle position
    TransformtransformContainerContainer/storage position
    TransformtransformDumpsterDumpster position
    TransformtransformInHandPositionPosition for item in hand
    TransformtransformDeviceSpawnPositionWhere new devices appear
    TransformpositionOfDeviceToBeReplacedTarget rack slot
    TwoBoneIKConstraintleftHandIK / rightHandIKIK constraints for animation
    TransformleftHandTarget / rightHandTargetIK hand targets

    Methods

    SignatureNotes
    void AssignJob(TechnicianManager.RepairJob job)Assign a repair job to this technician
    void RepairDevice()Execute the repair action
    void RotateTowardsGoal(Vector3 goal)Rotate to face a position
    void PositionHandTargetsOnDevice(GameObject device)Position IK targets on a device

    3. TechnicianManager (extends MonoBehaviour)

    Singleton that manages the pool of technicians and dispatch queue.

    Static Fields

    TypeNameNotes
    TechnicianManagerinstanceSingleton accessor
    floatDISPATCH_INTERVALSeconds between dispatch ticks

    Instance Properties / Fields

    TypeNameNotes
    TransformtransformContainerShared container position
    TransformtransformDumpsterShared dumpster position
    TransformtransformDeviceSpawnPositionShared spawn position
    intlastAssignedIndexRound-robin index
    floatlastDispatchTimeTimestamp of last dispatch
    CoroutinedispatchCoroutineRunning dispatch coroutine
    intQueuedJobCountProperty: number of jobs waiting

    Methods

    SignatureNotes
    void AddTechnician(Technician technician)Register a new technician
    void SendTechnician(NetworkSwitch nswitch, Server server)Dispatch a tech to repair a device
    void RequestNextJob(Technician technician)Technician requests another job
    void EnqueueDispatch(RepairJob job)Add a job to the queue
    bool IsDeviceAlreadyAssigned(NetworkSwitch ns, Server s)Check if a device has a tech en route
    void RestoreJobQueue(List<RepairJobSaveData> savedJobs)Restore jobs from save
    void FireTechnician(int technicianID)Remove a technician

    Nested: TechnicianManager.RepairJob

    TypeNameNotes
    TechnicianassignedTechnician
    stringDeviceName

    4. MainGameManager (extends MonoBehaviour)

    Central singleton — game state, customer management, prefabs, UI canvases.

    Static Fields

    TypeNameNotes
    MainGameManagerinstanceSingleton accessor
    PlayerManager.OnBuyingWallonBuyingWallEventEvent fired when a wall is purchased

    Instance Properties / Fields — Game State

    TypeNameNotes
    intdifficultyGame difficulty level
    boolisGamePausedIs the game currently paused
    boolisPauseMenuDisallowedPause menu locked out
    boolisPlayerCameraDisallowedCamera control locked
    boolisAllowedToSaveCan save right now
    boolloadingFirstTimeTrue during initial load
    stringlanguageXMLPathPath to localization XML
    boolisIPHintHiddenWhether IP hints are hidden
    floatxpGainMultiplierXP multiplier
    floatwallPriceCurrent wall purchase price
    floatautoSaveIntervalMinutesAuto-save interval
    boolautoSaveEnabledAuto-save toggle

    Instance Properties / Fields — Customer Data

    TypeNameNotes
    Il2CppReferenceArray<CustomerCard>customerCardsUI cards for customer choice
    Il2CppReferenceArray<CustomerItem>customerItemsAll possible customers
    Il2CppReferenceArray<CustomerBase>customerBasesActive customer base instances
    Il2CppReferenceArray<CustomerItem>chosenCustomerItemsCurrently chosen customers
    List<int>availableCustomerIndicesIndices of available customers
    List<string>availableSubnetsFree subnets for assignment
    List<int>existingCustomerIDsIDs of active customers
    List<Vector3>assignedAppsLogosLogo positions
    Il2CppReferenceArray<Sprite>appTypesLogosSprite array for app type icons

    Instance Properties / Fields — Prefabs / Scene References

    TypeNameNotes
    Il2CppReferenceArray<GameObject>serverPrefabsServer prefabs by type
    Il2CppReferenceArray<GameObject>switchesPrefabsSwitch prefabs
    Il2CppReferenceArray<GameObject>patchPanelsPrefabsPatch panel prefabs
    GameObjectrackPackedPrefabPacked rack prefab
    GameObjectrackPrefabStandard rack prefab
    GameObjectrackMountsRack mount points
    Il2CppReferenceArray<GameObject>cableSpinnerPrefabCable spinner prefabs
    Il2CppReferenceArray<GameObject>sfpPrefabsSFP module prefabs
    Il2CppReferenceArray<GameObject>sfpsBoxedPrefabBoxed SFP prefabs
    GameObjectemptySfpBoxEmpty SFP box
    GameObjectwallsWalls parent object
    GameObjectparticleSystemBrokenDeviceBroken-device particle effect
    TransformparentUsableObjectsParent for all usable objects
    TransformplaceToRespawnLostUsableObjectsLost-and-found respawn point
    intlastUsedRackPositionGlobalUIDUID counter for rack positions
    Il2CppReferenceArray<GameObject>techniciansPrefabsTechnician prefabs
    GameObjectprefabPushTrolleySupporterPackTrolley prefab
    TransformdefaultTrolleyPositionDefault trolley position

    Methods — Customer / Subnet Management

    SignatureNotes
    CustomerItem GetCustomerItemByID(int customerID)Look up a customer by ID
    void ShuffleAvailableCustomers()Randomize customer selection
    void ShuffleAvailableSubnets()Randomize subnet pool
    string GetFreeSubnet(float appRequirements)Get a suitable free subnet
    bool IsSubnetValid(string subnet)Validate a subnet string
    void RemoveUsedSubnet(string subnet)Mark a subnet as used
    void ReturnSubnet(string subnet)Return a subnet to the free pool
    float GetCustomerTotalRequirement(CustomerItem customer)Get total speed requirement
    bool IsCustomerSuitableForBase(CustomerItem customer, int customerBaseID)Check compatibility

    Methods — UI / Canvas

    SignatureNotes
    void ShowCustomerCardsCanvas(CustomerBaseDoor door)Open customer choice UI
    void ButtonCustomerChosen(int cardID)Simulate choosing a customer card
    void ButtonCancelCustomerChoice()Cancel customer choice
    void ShowBuyWallCanvas(Wall wall)Open wall purchase UI
    void ButtonBuyWall()Confirm wall purchase
    void ButtonCancelBuyWall()Cancel wall purchase
    void ShowNetworkConfigCanvas(NetworkSwitch ns)Open switch config UI
    void CloseNetworkConfigCanvas()Close switch config UI
    void OpenAnyCanvas()Generic canvas open handler
    void CloseAnyCanvas(bool isCustomerChoice = false)Generic canvas close handler

    Methods — Save / Load / Misc

    SignatureNotes
    void OnLoad()Called after loading a save
    IEnumerator AutoSaveCoroutine()Auto-save coroutine
    void SetAutoSaveInterval(float minutes)Change auto-save interval
    void SetAutoSaveEnabled(bool enabled)Enable/disable auto-save
    void RestartAutoSave()Restart the auto-save coroutine
    void ResetTrolleyPosition()Reset the trolley to default position
    void LoadTrolleyPosition(Vector3 pos, Quaternion rot)Set trolley transform
    string ReturnServerNameFromType(int type)Map server type int → display name
    string ReturnSwitchNameFromType(int type)Map switch type int → display name

    5. PlayerManager (extends MonoBehaviour)

    Singleton player controller — movement, interaction, object-in-hand state.

    Enum: PlayerManager.ObjectInHand

    Value
    None
    Server1U / Server2U / Server3U
    Switch
    Rack
    CableSpinner
    PatchPanel
    SFPModule / SFPBox

    Delegate: PlayerManager.OnBuyingWall

    Multicast delegate (no parameters, void return). Fired on wall purchase.

    Static Fields

    TypeNameNotes
    PlayerManagerinstanceSingleton accessor

    Instance Properties / Fields

    TypeNameNotes
    FirstPersonControllerfpcFPS controller reference
    GameObjectplayerGOPlayer game object
    boolenabledMouseMovementMouse look enabled
    boolenabledPlayerMovementWASD movement enabled
    CinemachineCameravcamVirtual camera
    ImageimageWaitForActionAction progress image
    TransformmoveItemPositionPosition in front of player
    boolenabledRayLookInteractRaycast interaction enabled
    boolisGamePausedLocal pause flag
    boolplayerIsSittingPlayer is seated
    ObjectInHandobjectInHandWhat the player is carrying
    GameObjectobjectInHandPositionGOThe carried object
    intnumberOfObjectsInHandCount (for stacks like SFP boxes)
    GameObjectdefaultActionDustParticleDust effect for actions

    Methods

    SignatureNotes
    void ConfinedCursorforUI()Switch cursor to confined mode (for UI)
    void PlayerStopMovement()Freeze player movement
    void LockedCursorForPlayerMovement()Lock cursor for FPS movement
    void GainIOPSEffect()Play the XP/IOPS gain particle effect

    6. NetworkMap (extends MonoBehaviour)

    Network topology graph — tracks devices, connections, LACP groups, cable routing.

    Instance Properties / Fields — Dictionaries (the core data)

    TypeNameNotes
    Dictionary<string, Device>devicesAll registered devices by name
    Dictionary<int, CustomerBase>customerBasesCustomer bases by ID
    Dictionary<string, Server>serversServers by name/ID
    Dictionary<string, NetworkSwitch>switchesSwitches by name/ID
    Dictionary<string, Server>brokenServersBroken servers
    Dictionary<string, NetworkSwitch>brokenSwitchesBroken switches
    Dictionary<int, LACPGroup>lacpGroupsLACP groups by ID
    intnextLACPGroupIdNext LACP group ID to assign
    Dictionary<string, HashSet<string>>switchConnectionsSwitch-to-device connections
    Dictionary<int, ValueTuple<string,string>>cableConnectionsCable ID → (endpoint A, endpoint B)
    Dictionary<string, List<string>>adjacencyListGraph adjacency list

    Methods — Device Management

    SignatureNotes
    void ClearMap()Wipe the entire network map
    void RegisterCustomerBase(CustomerBase cb)Register a customer base
    void RegisterServer(Server server)Register a server
    void RegisterSwitch(NetworkSwitch ns)Register a switch
    void AddDevice(string name, TypeOfLink type, int customerID = -1)Add a generic device
    void RemoveDevice(string name)Remove a device
    Device GetDevice(string name)Look up a device by name
    List<Device> GetAllDevices()Get all devices
    string GenerateDeviceName(TypeOfLink type, Vector3 pos)Auto-generate a device name

    Methods — Connections / Routing

    SignatureNotes
    void Connect(string from, string to)Create a connection
    void Disconnect(string from, string to)Remove a connection
    List<List<string>> FindAllRoutes(string baseName, string serverName)Find all routes between a base and server
    List<List<string>> FindPhysicalPath(string start, string target)Find physical cable paths
    void RegisterCableConnection(int cableId, ...)Register a physical cable (many params)
    void AddSwitchConnection(string switchName, string deviceName)Add a switch↔device link
    void RemoveCableConnection(int cableId)Remove a cable connection
    void RemoveIsolatedDevices()Clean up unconnected devices
    string PrintNetworkMap()Debug dump of the entire map
    bool IsIpAddressDuplicate(string ip, Server exclude)Check for IP conflicts
    bool IsPatchPanelPort(string deviceName)Check if a device is a patch panel port
    string ResolveThroughPatchPanel(string port, string from)Resolve a patch panel connection

    Methods — Customer / Speed Updates

    SignatureNotes
    void UpdateCustomerServerCountAndSpeed(int custId, int count, float speed)Update customer metrics
    void UpdateDeviceCustomerID(string deviceName, int customerID)Reassign a device's customer

    Methods — Broken Devices

    SignatureNotes
    void AddBrokenServer(Server server)Mark server as broken
    void AddBrokenSwitch(NetworkSwitch ns)Mark switch as broken
    void RemoveBrokenServer(string serverId)Unmark server
    void RemoveBrokenSwitch(string switchId)Unmark switch

    Methods — LACP

    SignatureNotes
    int CreateLACPGroup(string deviceA, string deviceB, List<int> cableIds)Create a link aggregation group
    void RemoveLACPGroup(int groupId)Remove a LACP group
    void RemoveCableFromLACPGroups(int cableId)Remove a cable from its LACP groups
    void SetLACPGroups(Dictionary<int, LACPGroup> groups)Bulk-set LACP groups

    Nested: NetworkMap.Device

    TypeNameNotes
    stringNameDevice name
    CableLink.TypeOfLinkTypeLink type (Ethernet, fiber, etc.)
    intCustomerIDOwning customer (-1 = none)
    HashSet<Device>ConnectionsAdjacent devices

    Nested: NetworkMap.LACPGroup

    TypeNameNotes
    intgroupId
    stringdeviceA / deviceBEndpoint device names
    List<int>cableIdsCables in this LAG
    float GetAggregatedSpeed(Dictionary<int, CableInfo> cables)Total LAG bandwidth

    7. Server (extends UsableObject)

    Individual server — processing, IP, customer assignment, health, power state.

    Instance Properties / Fields

    TypeNameNotes
    stringServerIDUnique server identifier
    intserverTypeType index (1U/2U/3U)
    stringIPAssigned IP address
    intappIDAssigned application ID
    floatmaxProcessingSpeedMaximum IOPS/speed
    floatcurrentProcessingSpeedCurrent speed
    floatpreviousProcessingSpeedPrevious tick's speed
    boolisOnPower state
    boolisBrokenIs this server broken
    inttimeToBrakeTicks until breakdown (countdown)
    inteolTimeEnd-of-life time
    intexistingWarningSignsActive warning sign count
    intexistingErrorSignsActive error sign count
    boolisWarningClearedHas the warning been acknowledged
    boolhasInitializedHas the server finished init
    List<CableLink>activeLinksCurrently active cable connections
    Il2CppReferenceArray<CableLink>cablelinksAll cable link slots
    ImagecustomerLogoCustomer logo on the server screen
    ImageappLogoApp logo on the server screen
    GameObjectcanvasServer screen UI canvas
    TextMeshProUGUItxtIPIP text on the screen
    TextMeshProUGUItxtServerScreenScreen text
    CoroutinebreakingRoutineActive breaking coroutine

    Methods

    SignatureNotes
    void PowerButton(bool forceState = false)Toggle power (or force on/off)
    bool IsAnyCableConnected()Check if any cable is connected
    void ServerInsertedInRack(ServerSaveData data = null)Called when placed into a rack
    void RegisterLink(CableLink link)Register a new cable link
    void UnregisterLink(CableLink link)Unregister a cable link
    void UpdateServerScreenUI()Refresh the screen display
    void ButtonClickChangeCustomer(bool forward)Cycle customer assignment
    int GetNextCustomerID(int currentID, bool forward)Get next valid customer ID
    void ButtonClickChangeIP()Open IP change dialog
    void SetIP(string ip)Set the server's IP address
    int GetCustomerID()Get the assigned customer ID
    void UpdateCustomer(int newCustomerID)Change customer assignment
    void UpdateAppID(int appID)Change app assignment
    bool ValidateRackPosition()Check if correctly placed in rack
    void ClearWarningSign(bool isPreserved = false)Clear a warning sign
    void ClearErrorSign()Clear an error sign
    void RepairDevice()Repair this server
    void SetPowerLightMaterial(Material mat)Change the power LED material

    8. NetworkSwitch (extends UsableObject)

    Network switch device — similar lifecycle to Server.

    Instance Properties / Fields

    TypeNameNotes
    stringswitchIdUnique ID
    intswitchTypeType index
    boolisOnPower state
    stringlabelDisplay label
    inttimeToBrakeCountdown to breakdown
    inteolTimeEnd-of-life time
    boolisBrokenBroken state
    intexistingWarningSigns / existingErrorSignsSign counters
    boolisWarningClearedWarning acknowledged
    CoroutinebreakingRoutineBreaking coroutine
    GameObjectcanvasScreen canvas
    TextMeshProUGUItxtScreenScreen text

    Methods

    SignatureNotes
    void PowerButton(bool forceState = false)Toggle power
    bool IsAnyCableConnected()Check cable connections
    void SwitchInsertedInRack(SwitchSaveData data = null)Placed in rack
    void DisconnectCablesWhenSwitchIsOff()Disconnect all cables on power-off
    void HandleNewCableWhileOff(int cableId)Handle cable plugged in while off
    string GetSwitchId()Get switch ID
    void UpdateScreenUI()Refresh screen
    void DisconnectCables()Disconnect all
    void ReconnectCables()Reconnect all
    bool ValidateRackPosition()Validate placement
    void ButtonShowNetworkSwitchConfig()Open config UI
    void ClearWarningSign(bool isPreserved = false)Clear warning
    void ClearErrorSign()Clear error

    9. StaticUIElements (extends MonoBehaviour) — HUD / Notifications

    The main HUD controller. Manages top-left stats, notifications, messages, cursor hints.

    Static Fields

    TypeNameNotes
    intMAX_MESSAGESMax messages in the message field
    floatMESSAGE_DURATIONHow long messages stay visible

    Instance Properties / Fields — HUD Elements

    TypeNameNotes
    GameObjectcanvasStaticThe main static HUD canvas
    GameObjectimagePointerPointer/crosshair image
    TextMeshProUGUItxtUnderPointerTooltip text under cursor
    ImageholdKeyIndicatorHold-key progress ring
    ImagenextToPointerSprite shown next to cursor
    ImageblackOverBlack overlay (fade to black)
    GameObjectloadingLoading screen GO
    TextMeshProUGUItxtMessagesFieldMessage log text
    GameObjecterrorSignPrefabPrefab for error signs
    GameObjectwarningSignPrefabPrefab for warning signs
    intnextErrorWarningUIDUID counter

    Instance Properties / Fields — Top-Left Stats

    TypeNameNotes
    GameObjecttopLeft_coinsPrestigeStats container
    TextMeshProUGUItopLeft_coinTXTMoney display
    TextMeshProUGUItopLeft_MoneyPerSecondMoney/sec rate
    TextMeshProUGUItopLeft_ExpensesPerSecondExpenses/sec rate
    TextMeshProUGUItopLeft_reputationTXTReputation display
    TextMeshProUGUItopLeft_xpTXTXP display
    TextMeshProUGUItopLeft_XPPerSecondXP/sec rate

    Instance Properties / Fields — Notification Banner

    TypeNameNotes
    GameObjectnotificationGONotification banner game object
    ImagenotificationSpriteNotification icon
    TextMeshProUGUInotificationTextNotification text

    Instance Properties / Fields — Input / Key Hints

    TypeNameNotes
    boolisKeyboardOrMouseInput device detection
    GameObjectkeyhint_buttonE"Press E" hint
    TransformkeyboardParentParent for key hint prefabs
    GameObjectkeyHintCustomPrefabCustom key hint prefab
    GameObjectprefabParticleUpgradeUpgrade particle effect
    TextMeshProUGUItxtLoadingInfoLoading screen info text

    Methods

    SignatureNotes
    void CalculateRates(out float moneyPerSec, out float xpPerSec, out float expensesPerSec)Very useful: compute live financial rates
    void SetNotification(int localisationUID, Sprite sprite = null, string text = "")Show a notification banner
    void ShowStaticCanvas(bool active)Show/hide the HUD
    GameObject CreateCustomKeyHint(InputAction action, int textUID, Transform parent = null, bool isPermanent = false)Create a key hint
    void RemoveCustomKeyHint()Remove custom key hint
    void InstantiateParticleUpgrade(Transform t)Spawn upgrade particles
    void UpdateMessageDisplay()Refresh message field
    void AddMeesageInField(string message)Add a message to the message log (note: typo is in the game)
    int InstantiateErrorWarningSign(bool isError, Vector3 objectPos)Spawn an error/warning sign at position
    void DestroyErrorWarningSign(int uid)Destroy a sign by UID
    void ShowSpriteNextToPointer(Sprite s)Show a sprite next to cursor
    void ClearSpriteNextToPointer()Clear cursor sprite
    void ShowTextUnderCursor(string text)Show tooltip text
    void HideTextUnderCursor()Hide tooltip text
    void UpdateHoldProgress(float value)Update the hold-key progress (0..1)
    void SetLoadingInfo(string s)Set loading screen text

    10. TimeController (extends MonoBehaviour)

    Singleton day/night cycle and time tracking.

    Static Fields

    TypeNameNotes
    TimeControllerinstanceSingleton accessor
    OnEndOfTheDayonEndOfTheDayCallbackEvent: end of day

    Instance Properties / Fields

    TypeNameNotes
    floatsecondsInFullDayReal seconds per game day
    floatcurrentTimeOfDayCurrent time (0.0–1.0 normalized)
    floattimeMultiplierSpeed multiplier
    intdayCurrent day number

    Methods

    SignatureNotes
    bool TimeIsBetween(float startHour, float endHour)Check if current time is in range
    float CurrentTimeInHours()Get current time as hours (0–24)
    int HoursFromDate(float time, int day)Convert to total hours

    11. CustomerBase (extends MonoBehaviour)

    A customer tenant in the data center — tracks SLA, app performance, revenue.

    Static Fields

    TypeNameNotes
    floatEPSILONFloating-point comparison epsilon
    intsatisfiedCustomerCountGlobal count of satisfied customers

    Instance Properties / Fields

    TypeNameNotes
    intcustomerBaseIDBase slot ID
    intcustomerIDCustomer data ID
    ImagecustomerLogoLogo image reference
    CustomerItemcustomerItemCustomer definition
    TextMeshProUGUItxtNumberOfServersServer count display
    TextMeshProUGUItxtCurrentSpeedCurrent speed display
    floatcurrentSpeedCurrent total processing speed
    inthowLongToWaitBeforeFineGrace period before penalties
    floatcurrentTotalAppSpeeRequirementsCurrent total requirements
    floatmaximumAppRequirementsSpeedTotalMax possible requirement
    boolwasFullySatisfiedWas fully satisfied last check

    Methods

    SignatureNotes
    IEnumerator CheckIfAppRequirementsAreMet()Continuous SLA check
    IEnumerator UpdateMoney()Continuous revenue/penalty generation
    bool AreAllAppRequirementsMet()One-shot SLA check
    void UpdateCustomerServerCountAndSpeed(int count, float speed)Update metrics
    void AddAppPerformance(int appID, float speed)Add speed to an app
    void ResetAllAppSpeeds()Zero out all app speeds
    bool IsIPPresent(string ip)Check if an IP is configured here
    int GetAppIDForIP(string ip)Get app ID for an IP
    void SetUpBase(CustomerItem item, CustomerBaseSaveData data = null)Initialize with a customer
    void SetUpApp(int appID, int difficulty, CustomerBaseSaveData data = null)Set up an app slot
    string AppText(int appID, string subnet)Generate display text for an app
    void UpdateSpeedOnCustomerBaseApp(int appID, float speed)Update per-app speed
    int GetServerTypeForIP(string ip)Get required server type for IP
    float GetTotalAppSpeed()Get total app speed
    void LoadData(CustomerBaseSaveData data)Restore from save

    12. CustomerItem (extends ScriptableObject)

    Static definition of a customer — what they need, what they pay.

    Fields

    TypeNameNotes
    intcustomerIDUnique ID
    stringcustomerNameDisplay name
    SpritelogoCompany logo sprite
    Il2CppStructArray<int>appTypesApp type IDs this customer needs
    intdifficultyDifficulty tier
    intreputationReputation reward/requirement
    floatslaSLA target (speed threshold)
    intdowntimeFinePerHourPenalty per hour of downtime

    13. SaveSystem (static utility class)

    Save/load system.

    Static Fields

    TypeNameNotes
    stringsaveDirPathSave directory path
    stringloadSaveNameName of save being loaded
    intversionCurrent save version
    intversionToIgnoreFromCompat cutoff version
    boolisQuittingApp is quitting flag

    Static Methods

    SignatureNotes
    void SaveGame(string savename = null, string stringNameOfSave = null)Save game
    SaveData LoadGame(string savename)Load and return save data
    void DeleteSaveFile(string savename)Delete a save
    void SaveGameData()Serialize current game state
    string NewestSave()Get the newest save file name
    void LoadGameData()Apply loaded data to game
    void Load(string savename, bool isFromPauseMenu)Full load pipeline
    void AutoSave()Trigger auto-save

    Singleton Access Pattern (from Rust via Il2Cpp FFI)

    All major managers follow the singleton pattern:

    MainGameManager.instance
    PlayerManager.instance
    BalanceSheet.instance
    TechnicianManager.instance
    TimeController.instance
    

    These are static fields returning the live MonoBehaviour instance. From Rust FFI, you would:

    1. Resolve the Il2Cpp class pointer for e.g. Il2Cpp.MainGameManager
    2. Read the static field instance
    3. Use the instance pointer to call methods or read fields

    Key Modding Use Cases

    Use CaseClass(es)Key Members
    Read player money/XP/repStaticUIElementsCalculateRates(), topLeft_coinTXT, etc.
    Show notificationsStaticUIElementsSetNotification(), AddMeesageInField()
    Financial dataBalanceSheetcurrentRecords, history, GetLatestSnapshot()
    Server health monitoringServer, NetworkMapisBroken, brokenServers, brokenSwitches
    Network topologyNetworkMapdevices, FindAllRoutes(), PrintNetworkMap()
    Time/day infoTimeControllerday, CurrentTimeInHours(), timeMultiplier
    Technician statusTechnician, TechnicianManagerisBusy, currentState, QueuedJobCount
    Customer SLA statusCustomerBaseAreAllAppRequirementsMet(), currentSpeed
    Save/loadSaveSystemSaveGame(), LoadGame(), AutoSave()
    Pause/unpauseMainGameManagerisGamePaused
    Player interaction lockPlayerManagerenabledRayLookInteract, PlayerStopMovement()
    Spawn error/warning signsStaticUIElementsInstantiateErrorWarningSign()