Ejemplo n.º 1
0
        public async Task <bool> SavePlayerSkillsAsync(IPlayerController player)
        {
            var state = player.BuildPlayerState();

            if (state == null || string.IsNullOrEmpty(state.UserId))
            {
                return(false);
            }

            return(await Task.Run(() =>
            {
                if (client.Desynchronized)
                {
                    return false;
                }
                var characterUpdate = new CharacterSkillUpdate
                {
                    Level = state.Level,
                    Experience = state.Experience,
                    UserId = state.UserId,
                    CharacterId = state.CharacterId
                };

                if (lastSavedSkills.TryGetValue(player.UserId, out var lastUpdate))
                {
                    if (!RequiresUpdate(lastUpdate, characterUpdate))
                    {
                        return true; // return true so we dont get a red name in the player list just because the exp hasnt changed.
                    }
                }

                connection.SendNoAwait("update_character_skills", characterUpdate);
                lastSavedSkills[player.UserId] = characterUpdate;
                lastSavedSkillsTime[player.UserId] = DateTime.UtcNow;
                return true;
            }));
        }