def ApplyDLCInventorySaveGameData(caller: unrealsdk.UObject, function: unrealsdk.UFunction, params: unrealsdk.FStruct) -> bool: """ It doesn't seem like this is actually called anywhere, but better safe than sorry. """ if not caller.IsLocalPlayerController(): caller.ServerItemSaveGameDataCompleted() return False inv_manager = caller.GetPawnInventoryManager() for idx, saved_item in enumerate(params.ItemData): if saved_item.bEquipped: ServerSetItemSaveGameData(caller, idx, saved_item.DefinitionData, saved_item.Quantity, saved_item.bEquipped, saved_item.Mark) continue inv_manager.ClientAddItemToBackpack( expand_item_definition_data(saved_item.DefinitionData), saved_item.Quantity, saved_item.Mark, False, 14) for idx, saved_weap in enumerate(params.WeaponData): if saved_weap.QuickSlot != 0: ServerSetWeaponSaveGameData(caller, idx, saved_weap.DefinitionData, saved_weap.QuickSlot, saved_weap.Mark) continue inv_manager.ClientAddWeaponToBackpack( expand_weapon_definition_data(saved_weap.DefinitionData), saved_weap.Mark, False, 14) inv_manager.UpdateBackpackInventoryCount() caller.ServerItemSaveGameDataCompleted() return False
def ApplyItemSaveGameData(caller: unrealsdk.UObject, function: unrealsdk.UFunction, params: unrealsdk.FStruct) -> bool: inv_manager = caller.GetPawnInventoryManager() is_local = caller.IsLocalPlayerController() for idx, saved_item in enumerate(params.SaveGame.ItemData): if saved_item.bEquipped: if caller.Role == 3: # ROLE_Authority ServerSetItemSaveGameData(caller, idx, saved_item.DefinitionData, saved_item.Quantity, saved_item.bEquipped, saved_item.Mark) continue if is_local: inv_manager.ClientAddItemToBackpack( expand_item_definition_data(saved_item.DefinitionData), saved_item.Quantity, saved_item.Mark, False, 14) if is_local: caller.UnloadableDlcItemData = list( params.SaveGame.UnloadableDlcItemData) caller.ServerItemSaveGameDataCompleted() return False
def ApplyWeaponSaveGameData(caller: unrealsdk.UObject, function: unrealsdk.UFunction, params: unrealsdk.FStruct) -> bool: """ We need to call `FixupSavedWeapons` at the start here, but it uses an out argument. If we block `ValidateWeaponDefinition` and `IsLocalPlayerController`, so they return false, this function will do nothing except make that call for us """ unrealsdk.RunHook( "WillowGame.WillowPlayerController.IsLocalPlayerController", __name__, Block) unrealsdk.RunHook( "WillowGame.WillowPlayerController.ValidateWeaponDefinition", __name__, Block) caller.ApplyWeaponSaveGameData(params.SaveGame) unrealsdk.RemoveHook( "WillowGame.WillowPlayerController.IsLocalPlayerController", __name__) unrealsdk.RemoveHook( "WillowGame.WillowPlayerController.ValidateWeaponDefinition", __name__) # Now we can recreate the call like normal inv_manager = caller.GetPawnInventoryManager() is_local = caller.IsLocalPlayerController() for idx, saved_weap in enumerate(params.SaveGame.WeaponData): if saved_weap.QuickSlot != 0: if caller.Role == 3: # ROLE_Authority ServerSetWeaponSaveGameData(caller, idx, saved_weap.WeaponDefinitionData, saved_weap.QuickSlot, saved_weap.Mark) continue if is_local: inv_manager.ClientAddWeaponToBackpack( expand_weapon_definition_data(saved_weap.WeaponDefinitionData), saved_weap.Mark, False, 14) if is_local: caller.UnloadableDlcWeaponData = list( params.SaveGame.UnloadableDlcWeaponData) caller.ServerItemSaveGameDataCompleted() return False