diff --git a/sources/Avarice/AvariceLink.uc b/sources/Avarice/AvariceLink.uc index 817abcd..23f7c57 100644 --- a/sources/Avarice/AvariceLink.uc +++ b/sources/Avarice/AvariceLink.uc @@ -132,7 +132,7 @@ public final function Initialize(BaseText name, BaseText host, int port) linkName = name.Copy(); linkHost = host.Copy(); linkPort = port; - tcpStream = _.unreal.ActorRef(none); + tcpStream = _server.unreal.ActorRef(none); } /** diff --git a/sources/BaseRealm/Global.uc b/sources/BaseRealm/Global.uc index 724b722..e22e4c6 100644 --- a/sources/BaseRealm/Global.uc +++ b/sources/BaseRealm/Global.uc @@ -25,23 +25,21 @@ class Global extends Object; // main instance in this variable's default value. var protected Global myself; -var public RefAPI ref; -var public BoxAPI box; -var public LoggerAPI logger; -var public CollectionsAPI collections; -var public ServerUnrealAPI unreal; -var public TimeAPI time; -var public AliasesAPI alias; -var public TextAPI text; -var public MemoryAPI memory; -var public ConsoleAPI console; -var public ChatAPI chat; -var public ColorAPI color; -var public UserAPI users; -var public PlayersAPI players; -var public JSONAPI json; -var public DBAPI db; -var public AvariceAPI avarice; +var public RefAPI ref; +var public BoxAPI box; +var public LoggerAPI logger; +var public CollectionsAPI collections; +var public AliasesAPI alias; +var public TextAPI text; +var public MemoryAPI memory; +var public ConsoleAPI console; +var public ChatAPI chat; +var public ColorAPI color; +var public UserAPI users; +var public PlayersAPI players; +var public JSONAPI json; +var public DBAPI db; +var public AvariceAPI avarice; var public AcediaEnvironment environment; @@ -69,8 +67,6 @@ protected function Initialize() logger = LoggerAPI(memory.Allocate(class'LoggerAPI')); color = ColorAPI(memory.Allocate(class'ColorAPI')); alias = AliasesAPI(memory.Allocate(class'AliasesAPI')); - unreal = ServerUnrealAPI(memory.Allocate(class'ServerUnrealAPI')); - time = TimeAPI(memory.Allocate(class'TimeAPI')); console = ConsoleAPI(memory.Allocate(class'ConsoleAPI')); chat = ChatAPI(memory.Allocate(class'ChatAPI')); users = UserAPI(memory.Allocate(class'UserAPI')); @@ -88,9 +84,6 @@ public function DropCoreAPI() box = none; text = none; collections = none; - unreal.DropAPI(); - unreal = none; - time = none; logger = none; alias = none; console = none; diff --git a/sources/Chat/ChatAPI.uc b/sources/Chat/ChatAPI.uc index 540aa7f..b8601bc 100644 --- a/sources/Chat/ChatAPI.uc +++ b/sources/Chat/ChatAPI.uc @@ -38,8 +38,8 @@ protected function Finalizer() _.memory.Free(onMessageForSignal); onMessageSignal = none; onMessageForSignal = none; - _.unreal.broadcasts.OnHandleText(self).Disconnect(); - _.unreal.broadcasts.OnHandleTextFor(self).Disconnect(); + _server.unreal.broadcasts.OnHandleText(self).Disconnect(); + _server.unreal.broadcasts.OnHandleTextFor(self).Disconnect(); connectedToBroadcastAPI = false; } @@ -49,8 +49,8 @@ private final function TryConnectingBroadcastSignals() return; } connectedToBroadcastAPI = true; - _.unreal.broadcasts.OnHandleText(self).connect = HandleText; - _.unreal.broadcasts.OnHandleTextFor(self).connect = HandleTextFor; + _server.unreal.broadcasts.OnHandleText(self).connect = HandleText; + _server.unreal.broadcasts.OnHandleTextFor(self).connect = HandleTextFor; } /** diff --git a/sources/Commands/Commands_Feature.uc b/sources/Commands/Commands_Feature.uc index 0e33795..e905a9f 100644 --- a/sources/Commands/Commands_Feature.uc +++ b/sources/Commands/Commands_Feature.uc @@ -70,7 +70,7 @@ protected function OnDisabled() _.chat.OnMessage(self).Disconnect(); } if (useMutateInput) { - _.unreal.mutator.OnMutate(self).Disconnect(); + _server.unreal.mutator.OnMutate(self).Disconnect(); } useChatInput = false; useMutateInput = false; @@ -110,10 +110,10 @@ protected function SwapConfig(FeatureConfig config) { useMutateInput = newConfig.useMutateInput; if (newConfig.useMutateInput) { - _.unreal.mutator.OnMutate(self).connect = HandleMutate; + _server.unreal.mutator.OnMutate(self).connect = HandleMutate; } else { - _.unreal.mutator.OnMutate(self).Disconnect(); + _server.unreal.mutator.OnMutate(self).Disconnect(); } } } @@ -143,7 +143,7 @@ public final static function EmergencyEnable() { default.emergencyEnabledMutate = true; feature.emergencyEnabledMutate = true; - __().unreal.mutator.OnMutate(feature).connect = HandleMutate; + __server().unreal.mutator.OnMutate(feature).connect = HandleMutate; } } diff --git a/sources/Data/Database/DBAPI.uc b/sources/Data/Database/DBAPI.uc index 9fd8ed0..a9ef625 100644 --- a/sources/Data/Database/DBAPI.uc +++ b/sources/Data/Database/DBAPI.uc @@ -262,7 +262,7 @@ private function EraseAllPackageData(BaseText packageToErase) if (packageName == "") { return; } - game = _.unreal.GetGameType(); + game = _server.unreal.GetGameType(); game.DeletePackage(packageName); // Delete any leftover objects. This has to be done *after* // `DeletePackage()` call, otherwise removed garbage can reappear. diff --git a/sources/Data/Database/Local/DBRecord.uc b/sources/Data/Database/Local/DBRecord.uc index 27e926a..533409a 100644 --- a/sources/Data/Database/Local/DBRecord.uc +++ b/sources/Data/Database/Local/DBRecord.uc @@ -258,6 +258,11 @@ public static final function Global __() return class'Global'.static.GetInstance(); } +public static final function ServerGlobal __server() +{ + return class'ServerGlobal'.static.GetInstance(); +} + /** * Method for creating a new `DBRecord` in a package named `dbPackageName`, * picking an appropriate and unique name for it. @@ -293,7 +298,7 @@ private final static function DBRecord NewRecordFor(string dbPackageName) if (recordCandidate != none) { continue; } - recordCandidate = __().unreal.GetGameType() + recordCandidate = __server().unreal.GetGameType() .CreateDataObject(class'DBRecord', nextName, dbPackageName); recordCandidate.package = dbPackageName; return recordCandidate; @@ -319,7 +324,7 @@ private final static function DBRecord LoadRecordFor( string name, string package) { - return __().unreal.GetGameType() + return __server().unreal.GetGameType() .LoadDataObject(class'DBRecord', name, package); } @@ -678,7 +683,7 @@ private final function SetItem( if (oldRecord != none) { oldRecord.EmptySelf(); } - __().unreal.GetGameType() + __server().unreal.GetGameType() .DeleteDataObject(class'DBRecord', oldItem.s, package); } } @@ -712,7 +717,7 @@ private final function RemoveItem(int index) if (oldRecord != none) { oldRecord.EmptySelf(); } - __().unreal.GetGameType() + __server().unreal.GetGameType() .DeleteDataObject(class'DBRecord', oldItem.s, package); } storage.Remove(index, 1); @@ -861,7 +866,7 @@ public final function EmptySelf() return; } lockEraseSelf = true; - game = __().unreal.GetGameType(); + game = __server().unreal.GetGameType(); for (i = 0; i < storage.length; i += 1) { if (storage[i].t != DBAT_Reference) continue; diff --git a/sources/Data/Database/Local/LocalDatabaseInstance.uc b/sources/Data/Database/Local/LocalDatabaseInstance.uc index ec986b5..a11e5fd 100644 --- a/sources/Data/Database/Local/LocalDatabaseInstance.uc +++ b/sources/Data/Database/Local/LocalDatabaseInstance.uc @@ -88,7 +88,7 @@ var private int lastTaskLifeVersion; protected function Constructor() { - _.unreal.OnTick(self).connect = CompleteAllTasks; + _server.unreal.OnTick(self).connect = CompleteAllTasks; } protected function Finalizer() @@ -98,7 +98,7 @@ protected function Finalizer() CompleteAllTasks(); WriteToDisk(); rootRecord = none; - _.unreal.OnTick(self).Disconnect(); + _server.unreal.OnTick(self).Disconnect(); _.memory.Free(diskUpdateTimer); diskUpdateTimer = none; configEntry = none; @@ -125,7 +125,7 @@ private final function LocalDatabaseInstance ScheduleDiskUpdate() } WriteToDisk(); needsDiskUpdate = false; - diskUpdateTimer = _.time.StartTimer( + diskUpdateTimer = _server.time.StartTimer( class'LocalDBSettings'.default.writeToDiskDelay); diskUpdateTimer.OnElapsed(self).connect = DoDiskUpdate; return self; @@ -153,7 +153,7 @@ private final function WriteToDisk() packageName = _.text.ToString(configEntry.GetPackageName()); } if (packageName != "") { - _.unreal.GetGameType().SavePackage(packageName); + _server.unreal.GetGameType().SavePackage(packageName); } } diff --git a/sources/Data/Database/Tests/TEST_LocalDatabase.uc b/sources/Data/Database/Tests/TEST_LocalDatabase.uc index ecd6d04..47fbd6f 100644 --- a/sources/Data/Database/Tests/TEST_LocalDatabase.uc +++ b/sources/Data/Database/Tests/TEST_LocalDatabase.uc @@ -99,7 +99,7 @@ protected static function int CountRecordsInPackage(string package) local int counter; local DBRecord nextRecord; local GameInfo game; - game = __().unreal.GetGameType(); + game = __server().unreal.GetGameType(); foreach game.AllDataObjects(class'DBRecord', nextRecord, package) { counter += 1; } diff --git a/sources/Events/Signal.uc b/sources/Events/Signal.uc index c28179a..40731ab 100644 --- a/sources/Events/Signal.uc +++ b/sources/Events/Signal.uc @@ -8,15 +8,15 @@ * (`Slot` wraps over a single delegate, allowing us to store them in array), * but, unlike them, makes it possible to add several handlers for any event in * a convenient to use way, e.g.: - * `_.unreal.OnTick(self).connect = myTickHandler` + * `_server.unreal.OnTick(self).connect = myTickHandler` * To create your own `Signal` you need to: * 1. Make a non-abstract child class of `Signal`; * 2. Use one of the templates presented in this file below; * 3. Create a paired `Slot` class and set it's class to `relatedSlotClass` * in `defaultproperties`. * 4. (Recommended) Provide a standard interface by defining an event - * method (similar to `_.unreal.OnTick()`) in an object that will own - * this signal, example of definition is also listed below. + * method (similar to `_server.unreal.OnTick()`) in an object that will + * own this signal, example of definition is also listed below. * More detailed information can be found in documentation. * Copyright 2021 Anton Tarasenko *------------------------------------------------------------------------------ diff --git a/sources/Events/Slot.uc b/sources/Events/Slot.uc index e75656a..f0499ab 100644 --- a/sources/Events/Slot.uc +++ b/sources/Events/Slot.uc @@ -8,7 +8,7 @@ * (`Slot` wraps over a single delegate, allowing us to store them in array), * but, unlike them, makes it possible to add several handlers for any event in * a convenient to use way, e.g.: - * `_.unreal.OnTick(self).connect = myTickHandler` + * `_server.unreal.OnTick(self).connect = myTickHandler` * To create your own `Slot` you need to: * 1. Make a non-abstract child class of `Signal`; * 2. Use one of the templates presented in this file below. diff --git a/sources/Gameplay/KF1Frontend/BaseImplementation/EKFAmmo.uc b/sources/Gameplay/KF1Frontend/BaseImplementation/EKFAmmo.uc index bf5e5e9..e8ccce6 100644 --- a/sources/Gameplay/KF1Frontend/BaseImplementation/EKFAmmo.uc +++ b/sources/Gameplay/KF1Frontend/BaseImplementation/EKFAmmo.uc @@ -48,7 +48,8 @@ public final static /*unreal*/ function EKFAmmo Wrap( if (ammunitionInstance.class == class'KFMod.FlashlightAmmo') return none; newReference = EKFAmmo(__().memory.Allocate(class'EKFAmmo')); - newReference.ammunitionReference = __().unreal.ActorRef(ammunitionInstance); + newReference.ammunitionReference = + __server().unreal.ActorRef(ammunitionInstance); return newReference; } @@ -193,11 +194,12 @@ private function KFWeapon GetOwnerWeapon() { nextWeapon = KFWeapon(nextInventory); nextInventory = nextInventory.inventory; - if (_.unreal.inventory.GetAmmoClass(nextWeapon, 0) == ammunition.class) + if ( _server.unreal.inventory.GetAmmoClass(nextWeapon, 0) + == ammunition.class) { return nextWeapon; } - else if ( _.unreal.inventory.GetAmmoClass(nextWeapon, 1) + else if ( _server.unreal.inventory.GetAmmoClass(nextWeapon, 1) == ammunition.class) { return nextWeapon; } @@ -309,10 +311,12 @@ private function int GetLoadedAmmo() // We can also quit as soon as we have found a single weapon that // uses our ammo, since one weapon per ammo type is how Killing Floor // does things. - if (_.unreal.inventory.GetAmmoClass(ownerWeapon, 0) == ammunition.class) { + if ( _server.unreal.inventory.GetAmmoClass(ownerWeapon, 0) + == ammunition.class) + { return ownerWeapon.magAmmoRemaining; } - else if ( _.unreal.inventory.GetAmmoClass(ownerWeapon, 1) + else if ( _server.unreal.inventory.GetAmmoClass(ownerWeapon, 1) == ammunition.class) { return 1; // M4 203 diff --git a/sources/Gameplay/KF1Frontend/BaseImplementation/EKFFlashlightAmmo.uc b/sources/Gameplay/KF1Frontend/BaseImplementation/EKFFlashlightAmmo.uc index e3a5aaa..8657615 100644 --- a/sources/Gameplay/KF1Frontend/BaseImplementation/EKFFlashlightAmmo.uc +++ b/sources/Gameplay/KF1Frontend/BaseImplementation/EKFFlashlightAmmo.uc @@ -48,7 +48,7 @@ public final static /*unreal*/ function EKFFlashlightAmmo Wrap( } newReference = EKFFlashlightAmmo(__().memory.Allocate(class'EKFFlashlightAmmo')); - newReference.pawnReference = __().unreal.ActorRef(kfHumanPawn); + newReference.pawnReference = __server().unreal.ActorRef(kfHumanPawn); return newReference; } diff --git a/sources/Gameplay/KF1Frontend/BaseImplementation/EKFInventory.uc b/sources/Gameplay/KF1Frontend/BaseImplementation/EKFInventory.uc index 8428822..0ec096c 100644 --- a/sources/Gameplay/KF1Frontend/BaseImplementation/EKFInventory.uc +++ b/sources/Gameplay/KF1Frontend/BaseImplementation/EKFInventory.uc @@ -209,7 +209,7 @@ private function KillRefInventory(NativeActorRef itemRef) nativeReference.Destroy(); } if (destroyedClass != none) { - _.unreal.GetKFGameType().WeaponDestroyed(destroyedClass); + _server.unreal.GetKFGameType().WeaponDestroyed(destroyedClass); } } @@ -244,7 +244,7 @@ private function KFWeapon GetByRootWithDualRole( local InventoryAPI api; local class nextWeaponClass; local class itemRoot, nextRoot; - api = _.unreal.inventory; + api = _server.unreal.inventory; itemRoot = api.GetRootPickupClass(inventoryClass); while (inventoryChain != none) { @@ -285,7 +285,7 @@ public function EItem Add(EItem newItem, optional bool forceAddition) // Dead entity - nothing to add return none; } - dualClass = _.unreal.inventory.GetDualClass(nativeWeapon.class); + dualClass = _server.unreal.inventory.GetDualClass(nativeWeapon.class); // The only possible complication here are dual weapons - `newItem` might // cause addition of completely different weapon. if (dualClass != none) @@ -294,7 +294,7 @@ public function EItem Add(EItem newItem, optional bool forceAddition) pawn.inventory, DWR_Single); if (conflictWeapon != none) { - nativeWeapon = KFWeapon(_.unreal.inventory + nativeWeapon = KFWeapon(_server.unreal.inventory .MergeWeapons(pawn, dualClass, nativeWeapon, conflictWeapon)); } if (nativeWeapon != none) { @@ -339,7 +339,7 @@ public function EItem AddTemplate( return none; } // Handle dual pistols merging - dualClass = _.unreal.inventory.GetDualClass(newWeaponClass); + dualClass = _server.unreal.inventory.GetDualClass(newWeaponClass); if (dualClass != none) { collidingWeapon = GetByRootWithDualRole(newWeaponClass, @@ -349,7 +349,7 @@ public function EItem AddTemplate( } } // Add regular weapons - newWeapon = KFWeapon(_.unreal.inventory + newWeapon = KFWeapon(_server.unreal.inventory .MergeWeapons(GetOwnerPawn(), newWeaponClass, collidingWeapon)); if (newWeapon != none) { return class'EKFWeapon'.static.Wrap(newWeapon); @@ -464,13 +464,13 @@ private function Text CanAddWeaponClassExplain( // Start with checking conflicting weapons, since in case of conflicting // dual weapons we might need to update `additionalWeight` variable. conflictingWeapon = - _.unreal.inventory.GetByRoot(kfWeaponClass, kfPawn.inventory); + _server.unreal.inventory.GetByRoot(kfWeaponClass, kfPawn.inventory); if (conflictingWeapon != none) { // `GetByRoot()` is a simple check that thinks handcannon is in // a conflict with another handcannon, so we need to handle // dual wieldable weapons differently - dualWeildingRole = _.unreal.inventory.GetDualWieldingRole( + dualWeildingRole = _server.unreal.inventory.GetDualWieldingRole( class(conflictingWeapon.class)); if (dualWeildingRole != DWR_None) { @@ -478,7 +478,7 @@ private function Text CanAddWeaponClassExplain( return ReportConflictingItem(conflictingWeapon); } // Update additional weight - dualVersion = _.unreal.inventory.GetDualClass(kfWeaponClass); + dualVersion = _server.unreal.inventory.GetDualClass(kfWeaponClass); if (dualVersion != none) { additionalWeight = @@ -512,7 +512,7 @@ private function bool HasDualWieldingConflict( return false; } addingSingle = false; - dualClass = _.unreal.inventory.GetDualClass(kfWeaponClass); + dualClass = _server.unreal.inventory.GetDualClass(kfWeaponClass); if (dualClass == none) { dualClass = kfWeaponClass; @@ -526,14 +526,14 @@ private function bool HasDualWieldingConflict( // 2. If we do have a dual version, but we are forcing this addition and // are adding single when there is no other single pistol yet if ( addingSingle && forceAddition - && _.unreal.inventory.Get(kfWeaponClass, pawn.inventory) == none) + && _server.unreal.inventory.Get(kfWeaponClass, pawn.inventory) == none) { return false; } // 3. If we do have a dual version, but we are forcing this addition and // are adding a different skin if ( forceAddition - && _.unreal.inventory.Get(dualClass, pawn.inventory) == none) + && _server.unreal.inventory.Get(dualClass, pawn.inventory) == none) { return false; } @@ -591,7 +591,7 @@ public function bool Remove( if (!forceRemoval && kfWeapon != none && kfWeapon.bKFNeverThrow) { return false; } - if (!_.unreal.inventory.Contains(kfWeapon, pawn.inventory)) { + if (!_server.unreal.inventory.Contains(kfWeapon, pawn.inventory)) { return false; } // This code is an overkill for removing a single item and is not @@ -601,8 +601,8 @@ public function bool Remove( // Only optimize this if this method will become // a bottleneck somewhere. removalList = _.collections.EmptyDynamicArray(); - removalList.AddItem(_.unreal.ActorRef(nativeInstance), true); - pawnRef = _.unreal.ActorRef(pawn); + removalList.AddItem(_server.unreal.ActorRef(nativeInstance), true); + pawnRef = _server.unreal.ActorRef(pawn); result = RemoveInventoryArray( pawnRef, removalList, keepItem, forceRemoval, true); _.memory.Free(removalList); @@ -634,7 +634,7 @@ public function bool RemoveTemplate( pawn = GetOwnerPawn(); if (pawn == none) return false; - pawnRef = _.unreal.ActorRef(pawn); + pawnRef = _server.unreal.ActorRef(pawn); removalList = _.collections.EmptyDynamicArray(); // All removal works the same - form a "kill list", then remove // all `Inventory` at once with `RemoveInventoryArray` @@ -645,7 +645,7 @@ public function bool RemoveTemplate( removalList, keepItem, forceRemoval, - _.unreal.inventory.GetDualWieldingRole(weaponClass) == DWR_Dual); + _server.unreal.inventory.GetDualWieldingRole(weaponClass) == DWR_Dual); _.memory.Free(removalList); _.memory.Free(pawnRef); return result; @@ -672,7 +672,7 @@ private function AddClassForRemoval( if (nextInventory == none) return; dualClass = - _.unreal.inventory.GetDualClass(class(inventoryClass)); + _server.unreal.inventory.GetDualClass(class(inventoryClass)); while (nextInventory != none) { // We want to "remove" dual handcannons if removal of single handcannon @@ -686,7 +686,7 @@ private function AddClassForRemoval( } if (canRemoveInventory) { - removalArray.AddItem(_.unreal.ActorRef(nextInventory), true); + removalArray.AddItem(_server.unreal.ActorRef(nextInventory), true); if (!removeAll) { break; } @@ -723,12 +723,15 @@ public function bool RemoveAll( && (forceRemoval || !kfWeapon.bKFNeverThrow); canRemoveItem = canRemoveItem || (includeHidden && Ammunition(nextInventory) == none); - if (canRemoveItem) { - inventoryToRemove.AddItem(_.unreal.ActorRef(nextInventory), true); + if (canRemoveItem) + { + inventoryToRemove.AddItem( + _server.unreal.ActorRef(nextInventory), + true); } nextInventory = nextInventory.inventory; } - pawnRef = _.unreal.ActorRef(pawn); + pawnRef = _server.unreal.ActorRef(pawn); result = RemoveInventoryArray( pawnRef, inventoryToRemove, keepItems, forceRemoval, true); _.memory.Free(inventoryToRemove); @@ -757,7 +760,7 @@ private function bool RemoveInventoryArray( ownerPawn = Pawn(ownerPawnRef.Get()); if (ownerPawn == none) return false; - equippedWeapon = _.unreal.ActorRef(ownerPawn.weapon); + equippedWeapon = _server.unreal.ActorRef(ownerPawn.weapon); for(i = 0; i < itemsToRemove.GetLength(); i += 1) { // `itemsToRemove` is guaranteed to contain valid `ActorRef`s @@ -822,7 +825,8 @@ private function AppendSingleClass( if (kfWeaponInstance == none) { return; } - singleClass = _.unreal.inventory.GetSingleClass(kfWeaponInstance.class); + singleClass = + _server.unreal.inventory.GetSingleClass(kfWeaponInstance.class); if (singleClass != none) { singleClasses[singleClasses.length] = singleClass; } @@ -857,7 +861,7 @@ private function bool HandleInventoryRemoval( { if (KFWeapon(inventory) != none) { - singleClass = _.unreal.inventory + singleClass = _server.unreal.inventory .GetSingleClass(class(inventory.class)); } if (singleClass != none && singleClass.default.bKFNeverThrow) { @@ -914,7 +918,8 @@ private function DestroyWeaponSingle( if (kfWeaponToDestroy == none) { return; } - singleClass = _.unreal.inventory.GetSingleClass(kfWeaponToDestroy.class); + singleClass = + _server.unreal.inventory.GetSingleClass(kfWeaponToDestroy.class); if (singleClass != none) { totalAmmoPrimary = kfWeaponToDestroy.AmmoAmount(0); @@ -924,7 +929,7 @@ private function DestroyWeaponSingle( KillRefInventory(inventoryToDestroy); if (singleClass != none) { - _.unreal.inventory + _server.unreal.inventory .AddWeaponWithAmmo( Pawn(ownerPawnRef.Get()), singleClass, totalAmmoPrimary / 2, totalAmmoSecondary / 2, magazineAmmo / 2, true); diff --git a/sources/Gameplay/KF1Frontend/BaseImplementation/EKFMedicAmmo.uc b/sources/Gameplay/KF1Frontend/BaseImplementation/EKFMedicAmmo.uc index eeed5db..4b768ae 100644 --- a/sources/Gameplay/KF1Frontend/BaseImplementation/EKFMedicAmmo.uc +++ b/sources/Gameplay/KF1Frontend/BaseImplementation/EKFMedicAmmo.uc @@ -47,7 +47,7 @@ public final static /*unreal*/ function EKFMedicAmmo Wrap( } newReference = EKFMedicAmmo(__().memory.Allocate(class'EKFMedicAmmo')); newReference.medicWeaponReference = - __().unreal.ActorRef(medicWeaponInstance); + __server().unreal.ActorRef(medicWeaponInstance); return newReference; } diff --git a/sources/Gameplay/KF1Frontend/BaseImplementation/EKFPawn.uc b/sources/Gameplay/KF1Frontend/BaseImplementation/EKFPawn.uc index 0479609..884513d 100644 --- a/sources/Gameplay/KF1Frontend/BaseImplementation/EKFPawn.uc +++ b/sources/Gameplay/KF1Frontend/BaseImplementation/EKFPawn.uc @@ -43,7 +43,7 @@ public final static /*unreal*/ function EKFPawn Wrap(Pawn pawnInstance) return none; } newReference = EKFPawn(__().memory.Allocate(class'EKFPawn')); - newReference.pawnReference = __().unreal.ActorRef(pawnInstance); + newReference.pawnReference = __server().unreal.ActorRef(pawnInstance); return newReference; } diff --git a/sources/Gameplay/KF1Frontend/BaseImplementation/EKFSyringeAmmo.uc b/sources/Gameplay/KF1Frontend/BaseImplementation/EKFSyringeAmmo.uc index 72933b2..6a75aad 100644 --- a/sources/Gameplay/KF1Frontend/BaseImplementation/EKFSyringeAmmo.uc +++ b/sources/Gameplay/KF1Frontend/BaseImplementation/EKFSyringeAmmo.uc @@ -47,7 +47,7 @@ public final static /*unreal*/ function EKFSyringeAmmo Wrap( } newReference = EKFSyringeAmmo(__().memory.Allocate(class'EKFSyringeAmmo')); newReference.syringeReference = - __().unreal.ActorRef(syringeInstance); + __server().unreal.ActorRef(syringeInstance); return newReference; } diff --git a/sources/Gameplay/KF1Frontend/BaseImplementation/EKFUnknownItem.uc b/sources/Gameplay/KF1Frontend/BaseImplementation/EKFUnknownItem.uc index d809a15..6b2a462 100644 --- a/sources/Gameplay/KF1Frontend/BaseImplementation/EKFUnknownItem.uc +++ b/sources/Gameplay/KF1Frontend/BaseImplementation/EKFUnknownItem.uc @@ -47,7 +47,8 @@ public final static /*unreal*/ function EKFUnknownItem Wrap( if (inventoryInstance.class == class'KFMod.FlashlightAmmo') return none; newReference = EKFUnknownItem(__().memory.Allocate(class'EKFUnknownItem')); - newReference.inventoryReference = __().unreal.ActorRef(inventoryInstance); + newReference.inventoryReference = + __server().unreal.ActorRef(inventoryInstance); return newReference; } diff --git a/sources/Gameplay/KF1Frontend/BaseImplementation/EKFUnknownPlaceable.uc b/sources/Gameplay/KF1Frontend/BaseImplementation/EKFUnknownPlaceable.uc index 4690172..859634f 100644 --- a/sources/Gameplay/KF1Frontend/BaseImplementation/EKFUnknownPlaceable.uc +++ b/sources/Gameplay/KF1Frontend/BaseImplementation/EKFUnknownPlaceable.uc @@ -46,7 +46,7 @@ public final static /*unreal*/ function EKFUnknownPlaceable Wrap( } newReference = EKFUnknownPlaceable( __().memory.Allocate(class'EKFUnknownPlaceable')); - newReference.actorReference = __().unreal.ActorRef(actorInstance); + newReference.actorReference = __server().unreal.ActorRef(actorInstance); return newReference; } diff --git a/sources/Gameplay/KF1Frontend/BaseImplementation/EKFWeapon.uc b/sources/Gameplay/KF1Frontend/BaseImplementation/EKFWeapon.uc index d08174f..480f77f 100644 --- a/sources/Gameplay/KF1Frontend/BaseImplementation/EKFWeapon.uc +++ b/sources/Gameplay/KF1Frontend/BaseImplementation/EKFWeapon.uc @@ -45,7 +45,7 @@ public final static /*unreal*/ function EKFWeapon Wrap(KFWeapon weaponInstance) return none; } newReference = EKFWeapon(__().memory.Allocate(class'EKFWeapon')); - newReference.weaponReference = __().unreal.ActorRef(weaponInstance); + newReference.weaponReference = __server().unreal.ActorRef(weaponInstance); return newReference; } @@ -216,8 +216,8 @@ public function array GetAvailableAmmo() if (kfWeapon == none) return result; if (kfWeapon.owner == none) return result; - ammoClass1 = _.unreal.inventory.GetAmmoClass(kfWeapon, 0); - ammoClass2 = _.unreal.inventory.GetAmmoClass(kfWeapon, 1); + ammoClass1 = _server.unreal.inventory.GetAmmoClass(kfWeapon, 0); + ammoClass2 = _server.unreal.inventory.GetAmmoClass(kfWeapon, 1); nextInventory = kfWeapon.owner.inventory; while (nextInventory != none) { diff --git a/sources/Gameplay/KF1Frontend/Health/KF1_HealthComponent.uc b/sources/Gameplay/KF1Frontend/Health/KF1_HealthComponent.uc index 7ff559f..1684437 100644 --- a/sources/Gameplay/KF1Frontend/Health/KF1_HealthComponent.uc +++ b/sources/Gameplay/KF1Frontend/Health/KF1_HealthComponent.uc @@ -35,8 +35,8 @@ protected function Finalizer() super.Finalizer(); if (connectedToGameRules) { - _.unreal.gameRules.OnNetDamage(self).Disconnect(); - _.unreal.gameRules.OnScoreKill(self).Disconnect(); + _server.unreal.gameRules.OnNetDamage(self).Disconnect(); + _server.unreal.gameRules.OnScoreKill(self).Disconnect(); connectedToGameRules = false; } } @@ -54,9 +54,9 @@ private final function TryConnectToGameRules() return; } connectedToGameRules = true; - _.unreal.gameRules.OnNetDamage(self).connect = OnNetDamageHandler; + _server.unreal.gameRules.OnNetDamage(self).connect = OnNetDamageHandler; // Fixes achievements - _.unreal.gameRules.OnScoreKill(self).connect = UpdateBileAchievement; + _server.unreal.gameRules.OnScoreKill(self).connect = UpdateBileAchievement; } private final function TryReplaceDamageTypes() diff --git a/sources/Gameplay/KF1Frontend/Templates/KF1_TemplatesComponent.uc b/sources/Gameplay/KF1Frontend/Templates/KF1_TemplatesComponent.uc index cc84f31..6587b7b 100644 --- a/sources/Gameplay/KF1Frontend/Templates/KF1_TemplatesComponent.uc +++ b/sources/Gameplay/KF1Frontend/Templates/KF1_TemplatesComponent.uc @@ -88,7 +88,7 @@ private function BuildKFWeaponLists() local LevelInfo level; local KFLevelRules kfLevelRules; if (listsAreReady) return; - level = _.unreal.GetLevel(); + level = _server.unreal.GetLevel(); if (level == none) return; foreach level.DynamicActors(class'KFMod.KFLevelRules', kfLevelRules) break; if (kfLevelRules == none) return; diff --git a/sources/Gameplay/KF1Frontend/Trading/KF1_Trader.uc b/sources/Gameplay/KF1Frontend/Trading/KF1_Trader.uc index 0897d19..6f8002a 100644 --- a/sources/Gameplay/KF1Frontend/Trading/KF1_Trader.uc +++ b/sources/Gameplay/KF1Frontend/Trading/KF1_Trader.uc @@ -84,7 +84,7 @@ private static function Text GetShopVolumeName(ShopVolume newShopVolume) return namedShopVolumesCopy[i].name.Copy(); } } - newRecord.reference = __().unreal.ActorRef(newShopVolume); + newRecord.reference = __server().unreal.ActorRef(newShopVolume); newRecord.name = __().text.FromString("trader" $ namedShopVolumesCopy.length); default.namedShopVolumes[default.namedShopVolumes.length] = newRecord; @@ -114,11 +114,11 @@ public final /* unreal */ function bool Initialize(ShopVolume initShopVolume) return false; } if ( initShopVolume.bObjectiveModeOnly - && !__().unreal.GetKFGameType().bUsingObjectiveMode) { + && !__server().unreal.GetKFGameType().bUsingObjectiveMode) { return false; } myName = GetShopVolumeName(initShopVolume); - myShopVolume = _.unreal.ActorRef(initShopVolume); + myShopVolume = _server.unreal.ActorRef(initShopVolume); return true; } @@ -216,7 +216,7 @@ protected function UpdateShopList() shopVolumes[shopVolumes.length] = nextShopVolume; } - _.unreal.GetKFGameType().shopList = shopVolumes; + _server.unreal.GetKFGameType().shopList = shopVolumes; } public function bool IsAutoOpen() @@ -279,7 +279,7 @@ public function bool IsSelected() if (vanillaShopVolume == none) { return false; } - kfGameRI = _.unreal.GetKFGameRI(); + kfGameRI = _server.unreal.GetKFGameRI(); if (kfGameRI != none) { return (kfGameRI.currentShop == vanillaShopVolume); } @@ -294,7 +294,7 @@ public function ETrader Select() if (vanillaShopVolume == none) { return self; } - kfGameRI = _.unreal.GetKFGameRI(); + kfGameRI = _server.unreal.GetKFGameRI(); if (kfGameRI != none) { kfGameRI.currentShop = vanillaShopVolume; } diff --git a/sources/Gameplay/KF1Frontend/Trading/KF1_TradingComponent.uc b/sources/Gameplay/KF1Frontend/Trading/KF1_TradingComponent.uc index 5701ace..cef9c0e 100644 --- a/sources/Gameplay/KF1Frontend/Trading/KF1_TradingComponent.uc +++ b/sources/Gameplay/KF1Frontend/Trading/KF1_TradingComponent.uc @@ -42,11 +42,11 @@ protected function Constructor() local KF1_Trader nextTrader; local ShopVolume nextShopVolume; super.Constructor(); - _.unreal.OnTick(self).connect = Tick; + _server.unreal.OnTick(self).connect = Tick; // Build `registeredTraders` cache to avoid looking through // all actors each time - level = __().unreal.GetLevel(); - kfGame = __().unreal.GetKFGameType(); + level = __server().unreal.GetLevel(); + kfGame = __server().unreal.GetKFGameType(); foreach level.AllActors(class'ShopVolume', nextShopVolume) { if (nextShopVolume == none) { @@ -70,7 +70,7 @@ protected function Constructor() protected function Finalizer() { super.Finalizer(); - _.unreal.OnTick(self).Disconnect(); + _server.unreal.OnTick(self).Disconnect(); _.memory.Free(lastSelectedTrader); _.memory.FreeMany(registeredTraders); lastSelectedTrader = none; @@ -110,7 +110,7 @@ public function ETrader GetTrader(BaseText traderName) public function bool IsTradingActive() { local KFGameType kfGame; - kfGame = _.unreal.GetKFGameType(); + kfGame = _server.unreal.GetKFGameType(); return kfGame.IsInState('MatchInProgress') && !kfGame.bWaveInProgress; } @@ -129,8 +129,8 @@ public function SetTradingStatus(bool makeActive) SetCountDown(0); return; } - kfGame = _.unreal.GetKFGameType(); - kfGameRI = _.unreal.GetKFGameRI(); + kfGame = _server.unreal.GetKFGameType(); + kfGameRI = _server.unreal.GetKFGameRI(); foreach kfGame.DynamicActors(class'KFMonster', nextZed) { if (nextZed == none) continue; @@ -163,7 +163,7 @@ public function SelectTrader(ETrader newSelection) } else { - kfGameRI = _.unreal.GetKFGameRI(); + kfGameRI = _server.unreal.GetKFGameRI(); if (kfGameRI != none) { kfGameRI.currentShop = none; } @@ -190,13 +190,13 @@ public function SelectTrader(ETrader newSelection) public function int GetTradingInterval() { - return _.unreal.GetKFGameType().timeBetweenWaves; + return _server.unreal.GetKFGameType().timeBetweenWaves; } public function SetTradingInterval(int newTradingInterval) { if (newTradingInterval > 0) { - _.unreal.GetKFGameType().timeBetweenWaves = Max(newTradingInterval, 1); + _server.unreal.GetKFGameType().timeBetweenWaves = Max(newTradingInterval, 1); } } @@ -205,7 +205,7 @@ public function int GetCountDown() if (!IsTradingActive()) { return 0; } - return _.unreal.GetKFGameType().waveCountDown; + return _server.unreal.GetKFGameType().waveCountDown; } public function SetCountDown(int newCountDownValue) @@ -214,9 +214,9 @@ public function SetCountDown(int newCountDownValue) if (!IsTradingActive()) { return; } - kfGame = _.unreal.GetKFGameType(); + kfGame = _server.unreal.GetKFGameType(); if (kfGame.waveCountDown >= 5 && newCountDownValue < 5) { - _.unreal.GetKFGameRI().waveNumber = kfGame.waveNum; + _server.unreal.GetKFGameRI().waveNumber = kfGame.waveNum; } kfGame.waveCountDown = Max(newCountDownValue, 1); pausedCountDownValue = newCountDownValue; @@ -237,7 +237,8 @@ public function SetCountDownPause(bool doPause) if (IsTradingActive()) { // `+1` makes client counter stop closer to the moment // `SetCountDownPause()` was called - pausedCountDownValue = _.unreal.GetKFGameType().waveCountDown + 1; + pausedCountDownValue = + _server.unreal.GetKFGameType().waveCountDown + 1; } else { // If trading time isn't active, then we do not yet know how long @@ -286,10 +287,10 @@ protected function Tick(float delta, float timeScaleCoefficient) if (isActiveNow && tradingCountDownPaused) { if (pausedCountDownValue >= 0) { - _.unreal.GetKFGameType().waveCountDown = pausedCountDownValue; + _server.unreal.GetKFGameType().waveCountDown = pausedCountDownValue; } else { - pausedCountDownValue = _.unreal.GetKFGameType().waveCountDown; + pausedCountDownValue = _server.unreal.GetKFGameType().waveCountDown; } } } @@ -299,7 +300,7 @@ protected function CheckNativeTraderSwap() { local ETrader newSelectedTrader; if ( lastSelectedTrader == none - && _.unreal.GetKFGameRI().currentShop == none) { + && _server.unreal.GetKFGameRI().currentShop == none) { return; } if (lastSelectedTrader != none && lastSelectedTrader.IsSelected()) { diff --git a/sources/InfoQueryHandler/InfoQueryHandler.uc b/sources/InfoQueryHandler/InfoQueryHandler.uc index c6272a7..564f43b 100644 --- a/sources/InfoQueryHandler/InfoQueryHandler.uc +++ b/sources/InfoQueryHandler/InfoQueryHandler.uc @@ -52,7 +52,7 @@ public static function StaticConstructor() __().memory.Allocate(class'InfoQueryHandler_OnQuery_Signal')); // We cannot make an instance of an abstract `InfoQueryHandler` class, // use created `ConsoleWriter` to connect - __().unreal.mutator.OnMutate(default.anchor).connect = HandleMutate; + __server().unreal.mutator.OnMutate(default.anchor).connect = HandleMutate; } /** diff --git a/sources/Players/EPlayer.uc b/sources/Players/EPlayer.uc index 5aee122..ee53dd4 100644 --- a/sources/Players/EPlayer.uc +++ b/sources/Players/EPlayer.uc @@ -99,7 +99,7 @@ public final /* unreal */ function bool Initialize( idHash = none; } signalsReferences = playerSignals; - controller = _.unreal.ActorRef(initController); + controller = _server.unreal.ActorRef(initController); return true; } diff --git a/sources/ServerRealm/ServerGlobal.uc b/sources/ServerRealm/ServerGlobal.uc index 746cedc..bf079af 100644 --- a/sources/ServerRealm/ServerGlobal.uc +++ b/sources/ServerRealm/ServerGlobal.uc @@ -25,7 +25,9 @@ class ServerGlobal extends CoreGlobal; // main instance in this variable's default value. var protected ServerGlobal myself; -var public KFFrontend kf; +var public KFFrontend kf; +var public ServerUnrealAPI unreal; +var public TimeAPI time; public final static function ServerGlobal GetInstance() { @@ -47,7 +49,9 @@ protected function Initialize() } super.Initialize(); _ = class'Global'.static.GetInstance(); - kf = KFFrontend(_.memory.Allocate(class'KF1_Frontend')); + unreal = ServerUnrealAPI(_.memory.Allocate(class'ServerUnrealAPI')); + time = TimeAPI(_.memory.Allocate(class'TimeAPI')); + kf = KFFrontend(_.memory.Allocate(class'KF1_Frontend')); initialized = true; } @@ -63,7 +67,7 @@ public final function bool ConnectServerLevelCore() if (class'SideEffects'.default.allowHookingIntoMutate) { class'InfoQueryHandler'.static.StaticConstructor(); - _.unreal.mutator.OnMutate( + unreal.mutator.OnMutate( ServiceAnchor(_.memory.Allocate(class'ServiceAnchor'))) .connect = EnableCommandsFeature; } diff --git a/sources/Time/Timer.uc b/sources/Time/Timer.uc index f6b1c5e..2947768 100644 --- a/sources/Time/Timer.uc +++ b/sources/Time/Timer.uc @@ -57,7 +57,7 @@ protected function Constructor() protected function Finalizer() { _.memory.Free(onElapsedSignal); - StopMe(); // Disconnects from listening to `_.unreal.OnTick()` + StopMe(); // Disconnects from listening to `_server.unreal.OnTick()` } /** @@ -189,7 +189,7 @@ public final function Timer Start() return self; } if (!isTimerEnabled) { - _.unreal.OnTick(self).connect = Tick; + _server.unreal.OnTick(self).connect = Tick; } isTimerEnabled = true; totalElapsedTime = 0.0; @@ -203,7 +203,7 @@ public final function Timer Start() */ public final function Timer StopMe() { - _.unreal.OnTick(self).Disconnect(); + _server.unreal.OnTick(self).Disconnect(); isTimerEnabled = false; clearEventQueue = true; return self; diff --git a/sources/Unreal/BroadcastsAPI/BroadcastAPI.uc b/sources/Unreal/BroadcastsAPI/BroadcastAPI.uc index 5504c37..08de510 100644 --- a/sources/Unreal/BroadcastsAPI/BroadcastAPI.uc +++ b/sources/Unreal/BroadcastsAPI/BroadcastAPI.uc @@ -288,7 +288,7 @@ private final function TryInjectBroadcastHandler(UnrealService service) } triedToInjectBroadcasthandler = true; usedLevel = class'SideEffects'.default.broadcastHandlerInjectionLevel; - broadcastObserver = BroadcastEventsObserver(_.unreal.broadcasts.Add( + broadcastObserver = BroadcastEventsObserver(_server.unreal.broadcasts.Add( class'BroadcastEventsObserver', usedLevel)); if (broadcastObserver != none) { @@ -341,7 +341,7 @@ public final function BroadcastHandler Add( local LevelInfo level; local BroadcastHandler newBroadcastHandler; if (injectionLevel == BHIJ_None) return none; - level = _.unreal.GetLevel(); + level = _server.unreal.GetLevel(); if (level == none || level.game == none) return none; if (IsAdded(newBHClass)) return none; @@ -382,7 +382,7 @@ public final function bool Remove(class BHClassToRemove) { local LevelInfo level; local BroadcastHandler previousBH, currentBH; - level = _.unreal.GetLevel(); + level = _server.unreal.GetLevel(); if (level == none || level.game == none) { return false; } @@ -440,7 +440,7 @@ public final function BroadcastHandler FindInstance( if (BHClassToFind == none) { return none; } - BHIter = _.unreal.GetGameType().broadcastHandler; + BHIter = _server.unreal.GetGameType().broadcastHandler; while (BHIter != none) { if (BHIter.class == BHClassToFind) { diff --git a/sources/Unreal/Connections/ConnectionService.uc b/sources/Unreal/Connections/ConnectionService.uc index f87edd9..3d3bfe6 100644 --- a/sources/Unreal/Connections/ConnectionService.uc +++ b/sources/Unreal/Connections/ConnectionService.uc @@ -97,9 +97,11 @@ protected function OnLaunch() { local Controller nextController; local PlayerController nextPlayerController; - _.unreal.mutator.OnModifyLogin(_self).connect = RememberLoginOptions; - _.unreal.mutator.OnCheckReplacement(_self).connect = TryAddingController; - _.unreal.mutator.OnCheckReplacement(_self).connect = + _server.unreal.mutator.OnModifyLogin(_self).connect = + RememberLoginOptions; + _server.unreal.mutator.OnCheckReplacement(_self).connect = + TryAddingController; + _server.unreal.mutator.OnCheckReplacement(_self).connect = RecordPendingInformation; onConnectionEstablishedSignal = Connection_Signal(_.memory.Allocate(class'Connection_Signal')); @@ -120,8 +122,8 @@ protected function OnLaunch() protected function OnShutdown() { default.activeConnections = activeConnections; - _.unreal.mutator.OnModifyLogin(_self).Disconnect(); - _.unreal.mutator.OnCheckReplacement(_self).Disconnect(); + _server.unreal.mutator.OnModifyLogin(_self).Disconnect(); + _server.unreal.mutator.OnCheckReplacement(_self).Disconnect(); _.memory.Free(onConnectionEstablishedSignal); _.memory.Free(onConnectionLostSignal); onConnectionEstablishedSignal = none; @@ -277,7 +279,7 @@ public final function array GetActiveConnections( private function RememberLoginOptions(out string portal, out string options) { lastNickNameFromModifyLogin = - _.unreal.GetGameType().ParseOption(options, "Name"); + _server.unreal.GetGameType().ParseOption(options, "Name"); } private function bool RecordPendingInformation( diff --git a/sources/Unreal/GameRulesAPI/GameRulesAPI.uc b/sources/Unreal/GameRulesAPI/GameRulesAPI.uc index c736374..453fcfa 100644 --- a/sources/Unreal/GameRulesAPI/GameRulesAPI.uc +++ b/sources/Unreal/GameRulesAPI/GameRulesAPI.uc @@ -318,7 +318,7 @@ public final function GameRules Add(class newRulesClass) return none; } newGameRules = GameRules(_.memory.Allocate(newRulesClass)); - _.unreal.GetGameType().AddGameModifier(newGameRules); + _server.unreal.GetGameType().AddGameModifier(newGameRules); return newGameRules; } @@ -336,7 +336,7 @@ public final function bool Remove(class rulesClassToRemove) local GameRules rulesIter; local GameRules rulesToDestroy; if (rulesClassToRemove == none) return false; - game = _.unreal.GetGameType(); + game = _server.unreal.GetGameType(); if (game.gameRulesModifiers == none) return false; // Check root rules @@ -380,7 +380,7 @@ public final function GameRules FindInstance( if (rulesClassToFind == none) { return none; } - rulesIter = _.unreal.GetGameType().gameRulesModifiers; + rulesIter = _server.unreal.GetGameType().gameRulesModifiers; while (rulesIter != none) { if (rulesIter.class == rulesClassToFind) { diff --git a/sources/Unreal/InventoryAPI/InventoryService.uc b/sources/Unreal/InventoryAPI/InventoryService.uc index 9aac329..90898c5 100644 --- a/sources/Unreal/InventoryAPI/InventoryService.uc +++ b/sources/Unreal/InventoryAPI/InventoryService.uc @@ -37,7 +37,7 @@ public function Weapon AddWeaponWithAmmo( if (newWeapon == none) return none; // It is possible that `newWeapon` can get destroyed somewhere here, // so add two more checks - _.unreal.GetKFGameType().WeaponSpawned(newWeapon); + _server.unreal.GetKFGameType().WeaponSpawned(newWeapon); if (newWeapon == none) return none; newWeapon.GiveTo(pawn); if (newWeapon == none) return none; diff --git a/sources/Unreal/Tests/TEST_ServerUnrealAPI.uc b/sources/Unreal/Tests/TEST_ServerUnrealAPI.uc index ed6d59a..922cd45 100644 --- a/sources/Unreal/Tests/TEST_ServerUnrealAPI.uc +++ b/sources/Unreal/Tests/TEST_ServerUnrealAPI.uc @@ -26,7 +26,7 @@ protected static function int CountRulesAmount(class gameRulesClass) if (gameRulesClass == none) { return 0; } - rulesIter = __().unreal.GetGameType().gameRulesModifiers; + rulesIter = __server().unreal.GetGameType().gameRulesModifiers; while (rulesIter != none) { if (rulesIter.class == gameRulesClass) { @@ -48,11 +48,12 @@ protected static function Test_GameType() { Context("Testing methods for returning `GameType` class."); Issue("`GetGameType()` returns `none`."); - TEST_ExpectNotNone(__().unreal.GetGameType()); + TEST_ExpectNotNone(__server().unreal.GetGameType()); Issue("`GetKFGameType()` returns `none`."); - TEST_ExpectNotNone(__().unreal.GetKFGameType()); + TEST_ExpectNotNone(__server().unreal.GetKFGameType()); Issue("`GetGameType()` and `GetKFGameType()` return different values."); - TEST_ExpectTrue(__().unreal.GetGameType() == __().unreal.GetKFGameType()); + TEST_ExpectTrue( __server().unreal.GetGameType() + == __server().unreal.GetKFGameType()); } protected static function Test_GameRules() @@ -65,30 +66,30 @@ protected static function Test_GameRules() protected static function SubTest_AddRemoveGameRules() { Issue("`gameRules.Add()` does not add game rules."); - __().unreal.gameRules.Add(class'MockGameRulesA'); + __server().unreal.gameRules.Add(class'MockGameRulesA'); TEST_ExpectTrue(CountRulesAmount(class'MockGameRulesA') == 1); - __().unreal.gameRules.Add(class'MockGameRulesA'); + __server().unreal.gameRules.Add(class'MockGameRulesA'); Issue("Calling `gameRules.Add()` twice leads to rule duplication."); TEST_ExpectFalse(CountRulesAmount(class'MockGameRulesA') > 1); Issue("Calling `gameRules.Add()` leads to rule not being added."); TEST_ExpectFalse(CountRulesAmount(class'MockGameRulesA') == 0); Issue("Adding new rules with `gameRules.Add()` does not work properly."); - __().unreal.gameRules.Add(class'MockGameRulesB'); + __server().unreal.gameRules.Add(class'MockGameRulesB'); TEST_ExpectTrue(CountRulesAmount(class'MockGameRulesA') == 1); TEST_ExpectTrue(CountRulesAmount(class'MockGameRulesB') == 1); Issue("Adding/removing rules with `gameRules.Remove()` leads to" @ "unexpected results."); - __().unreal.gameRules.Remove(class'MockGameRulesB'); + __server().unreal.gameRules.Remove(class'MockGameRulesB'); TEST_ExpectTrue(CountRulesAmount(class'MockGameRulesA') == 1); TEST_ExpectTrue(CountRulesAmount(class'MockGameRulesB') == 0); - __().unreal.gameRules.Add(class'MockGameRulesB'); - __().unreal.gameRules.Remove(class'MockGameRulesA'); + __server().unreal.gameRules.Add(class'MockGameRulesB'); + __server().unreal.gameRules.Remove(class'MockGameRulesA'); TEST_ExpectTrue(CountRulesAmount(class'MockGameRulesA') == 0); TEST_ExpectTrue(CountRulesAmount(class'MockGameRulesB') == 1); - __().unreal.gameRules.Remove(class'MockGameRulesB'); + __server().unreal.gameRules.Remove(class'MockGameRulesB'); TEST_ExpectTrue(CountRulesAmount(class'MockGameRulesA') == 0); TEST_ExpectTrue(CountRulesAmount(class'MockGameRulesB') == 0); } @@ -100,28 +101,35 @@ protected static function SubTest_CheckGameRules() @ "are currently added."; issueForNotAdded = "`gameRules.AreAdded()` returns `true` for rules that" @ "are not currently added."; - __().unreal.gameRules.Remove(class'MockGameRulesA'); - __().unreal.gameRules.Remove(class'MockGameRulesB'); + __server().unreal.gameRules.Remove(class'MockGameRulesA'); + __server().unreal.gameRules.Remove(class'MockGameRulesB'); Issue(issueForNotAdded); - TEST_ExpectFalse(__().unreal.gameRules.AreAdded(class'MockGameRulesA')); - TEST_ExpectFalse(__().unreal.gameRules.AreAdded(class'MockGameRulesB')); + TEST_ExpectFalse(__server().unreal.gameRules + .AreAdded(class'MockGameRulesA')); + TEST_ExpectFalse(__server().unreal.gameRules + .AreAdded(class'MockGameRulesB')); - __().unreal.gameRules.Add(class'MockGameRulesB'); + __server().unreal.gameRules.Add(class'MockGameRulesB'); Issue(issueForNotAdded); - TEST_ExpectFalse(__().unreal.gameRules.AreAdded(class'MockGameRulesA')); + TEST_ExpectFalse(__server().unreal.gameRules + .AreAdded(class'MockGameRulesA')); Issue(issueForAdded); - TEST_ExpectTrue(__().unreal.gameRules.AreAdded(class'MockGameRulesB')); + TEST_ExpectTrue(__server().unreal.gameRules + .AreAdded(class'MockGameRulesB')); - __().unreal.gameRules.Add(class'MockGameRulesA'); + __server().unreal.gameRules.Add(class'MockGameRulesA'); Issue(issueForAdded); - TEST_ExpectTrue(__().unreal.gameRules.AreAdded(class'MockGameRulesA')); - TEST_ExpectTrue(__().unreal.gameRules.AreAdded(class'MockGameRulesB')); + TEST_ExpectTrue(__server().unreal.gameRules + .AreAdded(class'MockGameRulesA')); + TEST_ExpectTrue(__server().unreal.gameRules + .AreAdded(class'MockGameRulesB')); - __().unreal.gameRules.Remove(class'MockGameRulesB'); + __server().unreal.gameRules.Remove(class'MockGameRulesB'); Issue(issueForAdded); - TEST_ExpectTrue(__().unreal.gameRules.AreAdded(class'MockGameRulesA')); + TEST_ExpectTrue(__server().unreal.gameRules + .AreAdded(class'MockGameRulesA')); Issue(issueForNotAdded); - TEST_ExpectFalse(__().unreal.gameRules.AreAdded(class'MockGameRulesB')); + TEST_ExpectFalse(__server().unreal.gameRules.AreAdded(class'MockGameRulesB')); } protected static function Test_InventoryChainFetching() @@ -156,35 +164,35 @@ protected static function SubTest_InventoryChainFetchingSingle(Inventory chain) { Issue("Does not find correct first entry inside the inventory chain."); TEST_ExpectTrue( - __().unreal.inventory.Get(class'MockInventoryA', chain) + __server().unreal.inventory.Get(class'MockInventoryA', chain) == chain.inventory.inventory); TEST_ExpectTrue( - __().unreal.inventory.Get(class'MockInventoryB', chain) + __server().unreal.inventory.Get(class'MockInventoryB', chain) == chain.inventory); TEST_ExpectTrue( - __().unreal.inventory.Get(class'MockInventoryAChild', chain) + __server().unreal.inventory.Get(class'MockInventoryAChild', chain) == chain); Issue("Incorrectly finds missing inventory entries."); - TEST_ExpectNone(__().unreal.inventory.Get(none, chain)); - TEST_ExpectNone(__().unreal.inventory.Get(class'Winchester', chain)); + TEST_ExpectNone(__server().unreal.inventory.Get(none, chain)); + TEST_ExpectNone(__server().unreal.inventory.Get(class'Winchester', chain)); Issue("Does not find correct first entry inside the inventory chain when" @ "allowing for child classes."); TEST_ExpectTrue( - __().unreal.inventory.Get(class'MockInventoryA', chain, true) + __server().unreal.inventory.Get(class'MockInventoryA', chain, true) == chain); TEST_ExpectTrue( - __().unreal.inventory.Get(class'MockInventoryB', chain, true) + __server().unreal.inventory.Get(class'MockInventoryB', chain, true) == chain.inventory); TEST_ExpectTrue( - __().unreal.inventory.Get(class'MockInventoryAChild', chain, true) + __server().unreal.inventory.Get(class'MockInventoryAChild', chain, true) == chain); Issue("Incorrectly finds missing inventory entries when allowing for" @ "child classes."); - TEST_ExpectNone(__().unreal.inventory.Get(none, chain, true)); - TEST_ExpectNone(__().unreal.inventory.Get( class'Winchester', chain, + TEST_ExpectNone(__server().unreal.inventory.Get(none, chain, true)); + TEST_ExpectNone(__server().unreal.inventory.Get( class'Winchester', chain, true)); } @@ -192,7 +200,7 @@ protected static function SubTest_InventoryChainFetchingMany(Inventory chain) { local array result; Issue("Does not find correct entries inside the inventory chain."); - result = __().unreal.inventory.GetAll(class'MockInventoryB', chain); + result = __server().unreal.inventory.GetAll(class'MockInventoryB', chain); TEST_ExpectTrue(result.length == 2); TEST_ExpectTrue(result[0] == chain.inventory); TEST_ExpectTrue(result[1] == chain.inventory.inventory.inventory.inventory); @@ -200,12 +208,12 @@ protected static function SubTest_InventoryChainFetchingMany(Inventory chain) Issue("Does not find correct entries inside the inventory chain when" @ "allowing for child classes."); result = - __().unreal.inventory.GetAll(class'MockInventoryB', chain, true); + __server().unreal.inventory.GetAll(class'MockInventoryB', chain, true); TEST_ExpectTrue(result.length == 2); TEST_ExpectTrue(result[0] == chain.inventory); TEST_ExpectTrue(result[1] == chain.inventory.inventory.inventory.inventory); result = - __().unreal.inventory.GetAll(class'MockInventoryA', chain, true); + __server().unreal.inventory.GetAll(class'MockInventoryA', chain, true); TEST_ExpectTrue(result.length == 5); TEST_ExpectTrue(result[0] == chain); TEST_ExpectTrue(result[1] == chain.inventory.inventory); @@ -218,9 +226,9 @@ protected static function SubTest_InventoryChainFetchingMany(Inventory chain) == chain.inventory.inventory.inventory.inventory.inventory.inventory); Issue("Does not return empty array for non-existing inventory class."); - result = __().unreal.inventory.GetAll(class'Winchester', chain); + result = __server().unreal.inventory.GetAll(class'Winchester', chain); TEST_ExpectTrue(result.length == 0); - result = __().unreal.inventory.GetAll(class'Winchester', chain, true); + result = __server().unreal.inventory.GetAll(class'Winchester', chain, true); TEST_ExpectTrue(result.length == 0); } diff --git a/sources/Unreal/UnrealService.uc b/sources/Unreal/UnrealService.uc index 26b9d51..54d93a6 100644 --- a/sources/Unreal/UnrealService.uc +++ b/sources/Unreal/UnrealService.uc @@ -48,8 +48,8 @@ protected function OnShutdown() { local int i; - _.unreal.broadcasts.Remove(class'BroadcastEventsObserver'); - _.unreal.gameRules.Remove(class'AcediaGameRules'); + _server.unreal.broadcasts.Remove(class'BroadcastEventsObserver'); + _server.unreal.gameRules.Remove(class'AcediaGameRules'); for (i = 0; i < serviceSignals.length; i += 1) { _.memory.Free(serviceSignals[i].instance); }