Пример #1
0
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
Пример #2
0
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
Пример #3
0
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
Пример #4
0
def GeneratePlayerSaveGame(caller: unrealsdk.UObject,
                           function: unrealsdk.UFunction,
                           params: unrealsdk.FStruct) -> bool:
    # This hook is also called when you load into any map, after the load hook
    # It doesn't break anything so might as well let it
    new_save = SaveManager(caller.SaveGameName)
    existing_save = SaveManager(caller.SaveGameName)
    existing_save.load()

    for item in get_all_items_and_weapons(caller.GetPawnInventoryManager()):
        if item.Class.Name == "WillowWeapon" and not item.CanBeSaved():
            continue
        new_save.add_item(item.DefinitionData,
                          item.Class.Name == "WillowWeapon", existing_save)

    new_save.write()

    return True