private void HandleSaveLoadedMessage(SaveLoadedMessage <T> message) { var data = message.SaveData ?? Activator.CreateInstance <T>(); data.player = Player(message.PlayerId); data.saveSlot = message.SaveSlot; OnSaveLoaded?.Invoke(data, message.SaveData == null); }
/// <summary> /// Loads a save for the given player, using the given slot. /// <para>If no save exists on the given slot, will load an empty save.</para> /// <para>Use <see cref="HandleSaveLoadedMessage"/> to receive the save.</para> /// </summary> /// <param name="player">The player to create the save for.</param> /// <param name="saveSlot">The slot to save to.</param> public void Load(player player, int saveSlot = 1) { // This code must only execute for the local player if (GetLocalPlayer() != player) { return; } var filename = GetFileName(player, saveSlot); Preloader(filename); var sb = new StringBuilder(); for (var i = 0; i < abilityIds.Count; i++) { var abilityId = abilityIds[i]; var originalTooltip = originalTooltips[i]; var packet = BlzGetAbilityTooltip(abilityId, 0); if (packet == originalTooltip) { if (i * 2 > abilityIds.Count) { Console.WriteLine("WARNING: More than 50% of the save file storage space is in use. Please contact the mapmaker to increase storage space."); } break; } else { BlzSetAbilityTooltip(abilityId, originalTooltip, 0); sb.Append(packet); } } var save = TryLoadSave(sb); var message = new SaveLoadedMessage <T> { PlayerId = GetPlayerId(player), SaveSlot = saveSlot }; if (save?.SaveData != null && save.HashCode == GetSaveHash(JsonConvert.Serialize(save.SaveData), player)) { message.SaveData = save.SaveData; } SyncSystem.Send(message); }