Beispiel #1
0
        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);
        }
Beispiel #2
0
        /// <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);
        }