Пример #1
0
 public abstract void Process(
     IIntegrityChecker integrityChecker,
     IGameData gameData,
     IPlayerInventoryProvider inventoryProvider,
     DataModels.GameSession session,
     Character character,
     DataModels.CharacterState state);
Пример #2
0
        public static Models.CharacterState Map(DataModels.CharacterState data)
        {
            var state = DataMapper.Map <Models.CharacterState, DataModels.CharacterState>(data);

            if (state == null)
            {
                state = new Models.CharacterState();
                if (data != null)
                {
                    state.Id           = data.Id;
                    state.Task         = data.Task;
                    state.TaskArgument = data.TaskArgument;
                    state.InRaid       = data.InRaid;
                    state.Island       = data.Island;
                    state.DuelOpponent = data.DuelOpponent;
                    state.RestedTime   = data.RestedTime ?? 0d;
                    state.X            = data.X;
                    state.Y            = data.Y;
                    state.Z            = data.Z;
                }
            }

            if (data != null)
            {
                state.InDungeon  = data.InDungeon.GetValueOrDefault();
                state.InOnsen    = data.InOnsen.GetValueOrDefault();
                state.RestedTime = data.RestedTime.GetValueOrDefault();
            }

            return(state);
        }
Пример #3
0
        private DataModels.CharacterState CreateCharacterState(CharacterStateUpdate update)
        {
            var state = new DataModels.CharacterState
            {
                Id           = Guid.NewGuid(),
                DuelOpponent = update.DuelOpponent,
                Health       = update.Health,
                InArena      = update.InArena,
                InRaid       = update.InRaid,
                Island       = update.Island,
                Task         = update.Task,
                TaskArgument = update.TaskArgument
            };

            return(state);
        }
Пример #4
0
 public static Models.CharacterState Map(DataModels.CharacterState data)
 {
     return(DataMapper.Map <Models.CharacterState, DataModels.CharacterState>(data));
 }
Пример #5
0
        public static Player Map(
            this User user,
            IGameData gameData,
            Character character,
            bool rejoin = false,
            bool inGame = false)
        {
            var playItems = gameData.GetAllPlayerItems(character.Id);

            if (inGame && character.UserIdLock != null)
            {
                var targetStreamUser = gameData.GetUser(character.UserIdLock.Value);
                // if we got streamer tokens, only send the ones for the appropriate streamer
                playItems = playItems.Where(x => x.Tag == null || x.Tag == targetStreamUser.UserId).ToList();
            }

            var invItems = Map(playItems);

            if (user == null)
            {
                return(null);
            }

            var clanMembership = gameData.GetClanMembership(character.Id);
            var clan           = clanMembership != null?Map(gameData, gameData.GetClan(clanMembership.ClanId)) : null;

            var clanRole = clanMembership != null?Map(gameData.GetClanRole(clanMembership.ClanRoleId), clanMembership) : null;

            var characterState = gameData.GetCharacterState(character.StateId);

            if (character.StateId == null || characterState == null)
            {
                characterState = new DataModels.CharacterState()
                {
                    Id = Guid.NewGuid()
                };
                character.StateId = characterState.Id;
                gameData.Add(characterState);
            }

            return(new Player
            {
                Id = character.Id,
                UserName = user.UserName,
                UserId = user.UserId,
                Name = character.Name,
                IsRejoin = rejoin,
                IsAdmin = user.IsAdmin.GetValueOrDefault(),
                IsModerator = user.IsModerator.GetValueOrDefault(),
                Appearance = Map(gameData.GetAppearance(character.SyntyAppearanceId)),
                Resources = Map(gameData.GetResources(character.ResourcesId)),
                Skills = Map(gameData.GetCharacterSkills(character.SkillsId)),
                State = Map(characterState),
                InventoryItems = invItems,
                Statistics = Map(gameData.GetStatistics(character.StatisticsId)),
                Clan = clan,
                ClanRole = clanRole,
                OriginUserId = character.OriginUserId,
                Revision = character.Revision.GetValueOrDefault(),
                Identifier = character.Identifier,
                CharacterIndex = character.CharacterIndex,
                PatreonTier = user.PatreonTier.GetValueOrDefault(),
                IsHiddenInHighscore = user.IsHiddenInHighscore.GetValueOrDefault()
            });
        }
Пример #6
0
 public abstract void Handle(
     IIntegrityChecker integrityChecker,
     IGameData gameData,
     DataModels.GameSession session,
     Character character,
     DataModels.CharacterState state);
Пример #7
0
        private void UpdateSessionTasks(DateTime utcNow)
        {
            var session = gameData.GetSession(sessionToken.SessionId);

            if (session == null)
            {
                return;
            }


            // force keep a session alive if we are connected here
            session.Stopped = null;
            session.Status  = (int)SessionStatus.Active;
            session.Updated = utcNow;


            var village = GetTaskProcessor(VillageProcessorName);

            if (village != null)
            {
                village.Process(integrityChecker, gameData, inventoryProvider, session, null, null);
            }


            var characters = gameData.GetSessionCharacters(session);

            if (characters.Count > 0)
            {
                var loyalty = GetTaskProcessor(LoyaltyProcessorName);
                var clan    = GetTaskProcessor(ClanProcessorName);
                var rested  = GetTaskProcessor(RestedProcessorName);

                foreach (var character in characters)
                {
                    //if (character.CharacterIndex == 0)
                    //{
                    //    var inventory = inventoryProvider.Get(character.Id);
                    //    inventory.AddPatreonTierRewards();
                    //}

                    var state = gameData.GetCharacterState(character.StateId);
                    if (state == null)
                    {
                        state = new DataModels.CharacterState
                        {
                            Id = Guid.NewGuid()
                        };
                        gameData.Add(state);
                        character.StateId = state.Id;
                    }

                    rested.Process(integrityChecker, gameData, inventoryProvider, session, character, state);
                    clan.Process(integrityChecker, gameData, inventoryProvider, session, character, state);
                    loyalty.Process(integrityChecker, gameData, inventoryProvider, session, character, state);

                    if (string.IsNullOrEmpty(state.Task) ||
                        (state.InOnsen ?? false) ||
                        (state.InDungeon ?? false) ||
                        state.InArena ||
                        state.InRaid ||
                        string.IsNullOrEmpty(state.Island) ||
                        state.Island == "War" ||
                        !string.IsNullOrEmpty(state.DuelOpponent))
                    {
                        continue;
                    }

                    var task = GetTaskProcessor(state.Task);
                    if (task != null)
                    {
                        task.Process(integrityChecker, gameData, inventoryProvider, session, character, state);
                    }
                }
            }
        }