protected override void ServerUpdate(ServerUpdateData data) { var privateState = data.PrivateState; var publicState = data.PublicState; var liquidContainerState = privateState.LiquidStateWater; var isFull = liquidContainerState.Amount >= this.LiquidContainerConfig.Capacity; var isActive = !isFull; if (isActive) { // perform electricity checks (if applies) isActive = this.ElectricityConsumptionPerSecondWhenActive <= 0 || publicState.ElectricityConsumerState == ElectricityConsumerState.PowerOnActive; } publicState.IsActive = isActive; LiquidContainerSystem.UpdateWithManufacturing( data.GameObject, liquidContainerState, this.LiquidContainerConfig, privateState.ManufacturingState, this.ManufacturingConfig, data.DeltaTime * RateManufacturingSpeedMultiplier.SharedValue, isProduceLiquid: isActive, forceUpdateRecipe: !isFull); }
protected override void ServerUpdate(ServerUpdateData data) { var privateState = data.PrivateState; var liquidContainerState = privateState.LiquidStateWater; LiquidContainerSystem.UpdateWithManufacturing( data.GameObject, liquidContainerState, this.LiquidContainerConfig, privateState.ManufacturingState, this.ManufacturingConfig, data.DeltaTime, // the well is always produce water isProduceLiquid: true, forceUpdateRecipe: liquidContainerState.Amount < this.LiquidContainerConfig.Capacity); }
protected override void ServerUpdate(ServerUpdateData data) { var worldObject = data.GameObject; var privateState = data.PrivateState; var objectDeposit = this.SharedGetDepositWorldObject(worldObject.OccupiedTile); if (objectDeposit == null) { // no deposit object - stop progressing privateState.LiquidContainerState.Amount = 0; privateState.FuelBurningState.FuelUseTimeRemainsSeconds = 0; return; } var fuelBurningState = privateState.FuelBurningState; // Please note: fuel is used only to produce oil. // Fuel is not used for "petroleum canister" crafting. var isFull = privateState.LiquidContainerState.Amount >= this.LiquidContainerConfig.Capacity; FuelBurningMechanic.Update( worldObject, fuelBurningState, null, this.ManufacturingConfig, data.DeltaTime, isNeedFuelNow: !isFull); var isFuelBurning = fuelBurningState.FuelUseTimeRemainsSeconds > 0; data.PublicState.IsManufacturingActive = isFuelBurning; LiquidContainerSystem.UpdateWithManufacturing( worldObject, data.PrivateState.LiquidContainerState, this.LiquidContainerConfig, data.PrivateState.ManufacturingState, this.ManufacturingConfig, data.DeltaTime, // the pump produce petroleum only when fuel is burning isProduceLiquid: isFuelBurning, forceUpdateRecipe: true); }
protected override void ServerUpdate(ServerUpdateData data) { var worldObject = data.GameObject; var privateState = data.PrivateState; var objectDeposit = this.SharedGetDepositWorldObject(worldObject.OccupiedTile); var isPvEserver = PveSystem.ServerIsPvE; var fuelBurningState = privateState.FuelBurningState; if (objectDeposit == null && !isPvEserver) { // no deposit object - stop progressing privateState.LiquidContainerState.Amount = 0; if (fuelBurningState != null) { fuelBurningState.FuelUseTimeRemainsSeconds = 0; } return; } var deltaTime = data.DeltaTime; var deltaTimeForManufacturing = deltaTime; if (objectDeposit == null && isPvEserver) { // On PvE servers extractors work on reduced speed // if there is no deposit (the extractor built by player anywhere). deltaTimeForManufacturing *= PveSystem.DepositExtractorWithoutDepositActionSpeedMultiplier; } else if (objectDeposit != null && !isPvEserver && objectDeposit.ProtoStaticWorldObject is IProtoObjectDeposit protoObjectDeposit && protoObjectDeposit.LifetimeTotalDurationSeconds <= 0) { // Public extractor (for infinite deposit) in PvP. Much faster extraction. deltaTimeForManufacturing *= PublicExtractorSpeedMultiplierInPvP; } // apply extraction rate multiplier deltaTimeForManufacturing *= StructureConstants.ManufacturingSpeedMultiplier; var isActive = false; var isFull = privateState.LiquidContainerState.Amount >= this.LiquidContainerConfig.Capacity; if (fuelBurningState == null) { // no fuel burning state if (this.ElectricityConsumptionPerSecondWhenActive <= 0) { // no fuel burning and no electricity consumption - always active isActive = true; } else { // Consuming electricity. // Active only if electricity state is on and has active recipe. var publicState = data.PublicState; if (publicState.ElectricityConsumerState == ElectricityConsumerState.PowerOn) { isActive = !isFull; } } } else { // Please note: fuel is used only to produce oil. // Fuel is not used for "petroleum canister" crafting. FuelBurningMechanic.Update( worldObject, fuelBurningState, byproductsCraftQueue: null, this.ManufacturingConfig, deltaTime, byproductsQueueRate: 1, isNeedFuelNow: !isFull); var isFuelBurning = fuelBurningState.FuelUseTimeRemainsSeconds > 0; isActive = isFuelBurning; } data.PublicState.IsActive = isActive; LiquidContainerSystem.UpdateWithManufacturing( worldObject, data.PrivateState.LiquidContainerState, this.LiquidContainerConfig, data.PrivateState.ManufacturingState, this.ManufacturingConfig, deltaTimeForManufacturing, // the pump produce petroleum only when active isProduceLiquid: data.PublicState.IsActive, forceUpdateRecipe: true); }
protected override void ServerUpdate(ServerUpdateData data) { var worldObject = data.GameObject; var privateState = data.PrivateState; var objectDepletedDeposit = ObjectDepletedDeposit.SharedGetDepletedDepositWorldObject(worldObject.OccupiedTile); var objectDeposit = this.SharedGetDepositWorldObject(worldObject.OccupiedTile); var fuelBurningState = privateState.FuelBurningState; if (objectDepletedDeposit is not null) { // this is a depleted deposit - stop extraction data.PublicState.IsActive = false; privateState.LiquidContainerState.Amount = 0; if (fuelBurningState is not null) { fuelBurningState.FuelUseTimeRemainsSeconds = 0; } return; } var isActive = false; var isFull = privateState.LiquidContainerState.Amount >= this.LiquidContainerConfig.Capacity; if (fuelBurningState is null) { // no fuel burning state if (this.ElectricityConsumptionPerSecondWhenActive <= 0) { // no fuel burning and no electricity consumption - always active isActive = true; } else { // Consuming electricity. // Active only if electricity state is on and has active recipe. var publicState = data.PublicState; if (publicState.ElectricityConsumerState == ElectricityConsumerState.PowerOnActive) { isActive = !isFull; } } } else { // Please note: fuel is used only to produce oil. // Fuel is not used for "petroleum canister" crafting. FuelBurningMechanic.Update( worldObject, fuelBurningState, byproductsCraftQueue: null, this.ManufacturingConfig, data.DeltaTime * FuelBurningSpeedMultiplier, byproductsQueueRate: 1, isNeedFuelNow: !isFull); var isFuelBurning = fuelBurningState.FuelUseTimeRemainsSeconds > 0; isActive = isFuelBurning; } data.PublicState.IsActive = isActive; LiquidContainerSystem.UpdateWithManufacturing( worldObject, data.PrivateState.LiquidContainerState, this.LiquidContainerConfig, data.PrivateState.ManufacturingState, this.ManufacturingConfig, data.DeltaTime * SharedGetSpeedMultiplier(objectDeposit), // the pump produce petroleum only when active isProduceLiquid: data.PublicState.IsActive, forceUpdateRecipe: true); }