Exemple #1
0
        //private static readonly Version ClientVersion_ClanLevel = new Version(0, 7, 1);
        public override void Process(
            IIntegrityChecker integrityChecker,
            IGameData gameData,
            IPlayerInventoryProvider inventoryProvider,
            GameSession session,
            Character character,
            CharacterState state)
        {
            var membership = gameData.GetClanMembership(character.Id);

            if (membership == null)
            {
                return;
            }

            var clan = gameData.GetClan(membership.ClanId);

            if (clan == null)
            {
                return;
            }

            UpdateClanExperience(gameData, session, clan);
            UpdateClanSkillsExperience(gameData, session, character, state, clan);
        }
 public abstract void Process(
     IIntegrityChecker integrityChecker,
     IGameData gameData,
     IPlayerInventoryProvider inventoryProvider,
     DataModels.GameSession session,
     Character character,
     DataModels.CharacterState state);
            public WebSocketConnection(
                ILogger logger,
                IRavenBotApiClient ravenBotApi,
                IIntegrityChecker integrityChecker,
                IPlayerInventoryProvider inventoryProvider,
                IGameData gameData,
                IGameManager gameManager,
                IGamePacketManager packetManager,
                IGamePacketSerializer packetSerializer,
                ISessionManager sessionManager,
                IExtensionWebSocketConnectionProvider extWsProvider,
                GameWebSocketConnectionProvider sessionProvider,
                WebSocket ws,
                SessionToken sessionToken)
            {
                this.receiveLoop      = new Thread(ReceiveLoop);
                this.sendLoop         = new Thread(SendLoop);
                this.gameLoop         = new Thread(GameUpdateLoop);
                this.logger           = logger;
                this.sessionToken     = sessionToken;
                this.packetManager    = packetManager;
                this.packetSerializer = packetSerializer;
                this.sessionManager   = sessionManager;
                this.sessionProvider  = sessionProvider;
                this.ws = ws;

                this.killTask      = new TaskCompletionSource <object>();
                this.gameProcessor = new GameProcessor(
                    ravenBotApi, integrityChecker, this, extWsProvider, sessionManager, inventoryProvider, gameData, gameManager, sessionToken);
            }
Exemple #4
0
 public PatreonManager(
     IGameData gameData,
     IPlayerInventoryProvider playerInventory)
 {
     this.gameData        = gameData;
     this.playerInventory = playerInventory;
 }
Exemple #5
0
        public GameProcessor(
            IRavenBotApiClient ravenbotApi,
            IIntegrityChecker integrityChecker,
            IGameWebSocketConnection websocket,
            IExtensionWebSocketConnectionProvider extWsProvider,
            ISessionManager sessionManager,
            IPlayerInventoryProvider inventoryProvider,
            IGameData gameData,
            IGameManager gameManager,
            SessionToken sessionToken)
        {
            this.gameData                    = gameData;
            this.gameManager                 = gameManager;
            this.ravenbotApi                 = ravenbotApi;
            this.integrityChecker            = integrityChecker;
            this.gameConnection              = websocket;
            this.extensionConnectionProvider = extWsProvider;
            this.sessionManager              = sessionManager;
            this.inventoryProvider           = inventoryProvider;
            this.sessionToken                = sessionToken;

            RegisterPlayerTask <ClanProcessor>(ClanProcessorName);
            RegisterPlayerTask <VillageProcessor>(VillageProcessorName);
            RegisterPlayerTask <LoyaltyProcessor>(LoyaltyProcessorName);
            RegisterPlayerTask <RestedProcessor>(RestedProcessorName);
            RegisterPlayerTask <FightingTaskProcessor>("Fighting");
            RegisterPlayerTask <MiningTaskProcessor>("Mining");
            RegisterPlayerTask <FishingTaskProcessor>("Fishing");
            RegisterPlayerTask <FarmingTaskProcessor>("Farming");
            RegisterPlayerTask <WoodcuttingTaskProcessor>("Woodcutting");
            RegisterPlayerTask <CraftingTaskProcessor>("Crafting");
            RegisterPlayerTask <CookingTaskProcessor>("Cooking");

            SendSessionData();
        }
Exemple #6
0
 public void Process(
     IIntegrityChecker integrityChecker,
     IGameData gameData,
     IPlayerInventoryProvider inventoryProvider,
     GameSession session,
     Character character,
     CharacterState state)
 {
 }
 public PlayerProvider(
     IGameData gameData,
     IPlayerStatsProvider statsProvider,
     IPlayerInventoryProvider inventoryProvider)
 {
     this.gameData          = gameData;
     this.statsProvider     = statsProvider;
     this.inventoryProvider = inventoryProvider;
 }
Exemple #8
0
 public LoyaltyManager(
     ILogger <LoyaltyManager> logger,
     IPlayerInventoryProvider inventoryProvider,
     IGameData gameData)
 {
     this.logger            = logger;
     this.inventoryProvider = inventoryProvider;
     this.gameData          = gameData;
 }
 public NpcTradeSellItemHandler(
     ILogger logger,
     IPlayerInventoryProvider inventoryProvider,
     IWorldProcessor worldProcessor,
     IGameSessionManager sessionManager)
 {
     this.logger            = logger;
     this.inventoryProvider = inventoryProvider;
     this.worldProcessor    = worldProcessor;
     this.sessionManager    = sessionManager;
 }
Exemple #10
0
 public MarketplaceManager(
     ILogger <MarketplaceManager> logger,
     IPlayerManager playerManager,
     IPlayerInventoryProvider inventoryProvider,
     IGameData gameData)
 {
     this.logger            = logger;
     this.playerManager     = playerManager;
     this.inventoryProvider = inventoryProvider;
     this.gameData          = gameData;
 }
Exemple #11
0
        public GameManager(
            IServerManager serverManager,
            IPlayerInventoryProvider inventoryProvider,
            IGameData gameData)
        {
            this.serverManager     = serverManager;
            this.inventoryProvider = inventoryProvider;
            this.gameData          = gameData;

            var items = gameData.GetItems();

            this.raidScrollId    = items.FirstOrDefault(x => x.Name.ToLower() == "raid scroll").Id;
            this.dungeonScrollId = items.FirstOrDefault(x => x.Name.ToLower() == "dungeon scroll").Id;
            this.expScrollId     = items.FirstOrDefault(x => x.Name.ToLower().Contains("exp ") && x.Name.ToLower().Contains(" scroll")).Id;
        }
        public override void Process(
            IIntegrityChecker integrityChecker,
            IGameData gameData,
            IPlayerInventoryProvider inventoryProvider,
            DataModels.GameSession session,
            Character character,
            CharacterState state)
        {
            UpdateResourceGain(integrityChecker, gameData, inventoryProvider, session, character, resources =>
            {
                session.Updated = DateTime.UtcNow;
                var skills      = gameData.GetCharacterSkills(character.SkillsId);
                if (skills == null)
                {
                    return;
                }

                var miningLevel = skills.MiningLevel;
                var multiDrop   = Random.NextDouble();
                var isMultiDrop = multiDrop <= 0.1;
                var chance      = Random.NextDouble();
                if (chance <= ItemDropRateSettings.InitDropChance)
                {
                    foreach (var res in DroppableResources.OrderByDescending(x => x.SkillLevel))
                    {
                        chance = Random.NextDouble();
                        if (miningLevel >= res.SkillLevel && (chance <= res.GetDropChance(miningLevel)))
                        {
                            IncrementItemStack(gameData, inventoryProvider, session, character, res.Id);
                            if (isMultiDrop)
                            {
                                isMultiDrop = false;
                                continue;
                            }
                            break;
                        }
                    }
                }

                ++resources.Ore;

                var villageResources = GetVillageResources(gameData, session);
                if (villageResources != null)
                {
                    ++villageResources.Ore;
                }
            });
        }
Exemple #13
0
 public FishAction(
     IGameData gameData,
     IWorldProcessor worldProcessor,
     IGameSessionManager sessionManager,
     IPlayerStatsProvider statsProvider,
     IPlayerInventoryProvider inventoryProvider)
     : base(3,
            "Fish",
            "Fishing",
            2000,
            gameData,
            worldProcessor,
            sessionManager,
            statsProvider,
            inventoryProvider)
 {
 }
        protected void IncrementItemStack(
            IGameData gameData,
            IPlayerInventoryProvider inventoryProvider,
            DataModels.GameSession session,
            Character character, Guid itemId)
        {
            var inventory = inventoryProvider.Get(character.Id);
            var items     = inventory.AddItem(itemId);

            gameData.Add(gameData.CreateSessionEvent(GameEventType.ItemAdd, session, new ItemAdd
            {
                UserId          = gameData.GetUser(character.UserId).UserId,
                Amount          = 1,
                ItemId          = itemId,
                InventoryItemId = items.FirstOrDefault().Id,
            }));
        }
Exemple #15
0
 public RockPickAction(
     IGameData gameData,
     IWorldProcessor worldProcessor,
     IGameSessionManager sessionManager,
     IPlayerStatsProvider statsProvider,
     IPlayerInventoryProvider inventoryProvider)
     : base(2,
            "RockPick",
            "Mining",
            2000,
            gameData,
            worldProcessor,
            sessionManager,
            statsProvider,
            inventoryProvider)
 {
 }
Exemple #16
0
 public AdminManager(
     ILogger <AdminManager> logger,
     IPlayerInventoryProvider inventoryProvider,
     IEntityResolver itemResolver,
     IPlayerManager playerManager,
     IGameData gameData,
     ISessionManager sessionManager,
     ISecureHasher secureHasher)
 {
     this.logger            = logger;
     this.inventoryProvider = inventoryProvider;
     this.itemResolver      = itemResolver;
     this.playerManager     = playerManager;
     this.gameData          = gameData;
     this.sessionManager    = sessionManager;
     this.secureHasher      = secureHasher;
 }
 public override void Process(
     IIntegrityChecker integrityChecker,
     IGameData gameData,
     IPlayerInventoryProvider inventoryProvider,
     DataModels.GameSession session,
     Character character,
     CharacterState state)
 {
     UpdateResourceGain(integrityChecker, gameData, inventoryProvider, session, character, resources =>
     {
         ++resources.Fish;
         var villageResources = GetVillageResources(gameData, session);
         if (villageResources != null)
         {
             ++villageResources.Fish;
         }
     });
 }
Exemple #18
0
        public override void Process(
            IIntegrityChecker integrityChecker,
            IGameData gameData,
            IPlayerInventoryProvider inventoryProvider,
            DataModels.GameSession session,
            Character character,
            CharacterState characterState)
        {
            var now       = DateTime.UtcNow;
            var resources = gameData.GetResources(character.ResourcesId);

            if (resources == null)
            {
                resources = new DataModels.Resources
                {
                    Id = Guid.NewGuid(),
                };
                gameData.Add(resources);
                character.ResourcesId = resources.Id;
            }
            var state = gameData.GetCharacterSessionState(session.Id, character.Id);

            if (now - state.LastTaskUpdate >= TimeSpan.FromSeconds(ItemDropRateSettings.ResourceGatherInterval))
            {
                session.Updated      = DateTime.UtcNow;
                state.LastTaskUpdate = DateTime.UtcNow;

                if (resources.Ore >= OrePerIngot)
                {
                    resources.Ore -= OrePerIngot;
                    IncrementItemStack(gameData, inventoryProvider, session, character, IngotId);
                }

                if (resources.Wood >= WoodPerPlank)
                {
                    resources.Wood -= WoodPerPlank;
                    IncrementItemStack(gameData, inventoryProvider, session, character, PlankId);
                }

                UpdateResources(gameData, session, character, resources);
            }
        }
Exemple #19
0
 public TreeChopAction(
     IKernel kernel,
     IGameData gameData,
     IWorldProcessor worldProcessor,
     IGameSessionManager sessionManager,
     IPlayerStatsProvider statsProvider,
     IPlayerInventoryProvider inventoryProvider)
     : base(1,
            "Chop",
            "Woodcutting",
            2000,
            gameData,
            worldProcessor,
            sessionManager,
            statsProvider,
            inventoryProvider)
 {
     this.kernel  = kernel;
     AfterAction += (_, ev) => MakeTreeStump(ev.Object);
 }
Exemple #20
0
 protected SkillObjectAction(
     int id,
     string name,
     string skillName,
     int actionTime,
     IGameData gameData,
     IWorldProcessor worldProcessor,
     IGameSessionManager gameSessionManager,
     IPlayerStatsProvider statsProvider,
     IPlayerInventoryProvider inventoryProvider)
     : base(id, name)
 {
     this.skillName         = skillName;
     this.actionTime        = actionTime;
     this.GameData          = gameData;
     this.World             = worldProcessor;
     this.Sessions          = gameSessionManager;
     this.statsProvider     = statsProvider;
     this.inventoryProvider = inventoryProvider;
 }
        public override void Process(
            IIntegrityChecker integrityChecker,
            IGameData gameData,
            IPlayerInventoryProvider inventoryProvider,
            DataModels.GameSession session,
            Character character,
            CharacterState state)
        {
            if (DateTime.UtcNow - lastUpdate < updateInterval)
            {
                return;
            }

            var village = gameData.GetOrCreateVillageBySession(session);
            var players = gameData.GetSessionCharacters(session);

            village.Experience += players.Count * 20;

            var newLevel   = GameMath.OLD_ExperienceToLevel(village.Experience);
            var levelDelta = newLevel - village.Level;

            village.Level = newLevel;

            var villageHouses = gameData.GetOrCreateVillageHouses(village);

            if (levelDelta > 0 || DateTime.UtcNow - lastExpSend > updateExpInterval)
            {
                var data = new VillageLevelUp
                {
                    Experience = village.Experience,
                    Level      = village.Level,
                    LevelDelta = levelDelta,
                    HouseSlots = villageHouses.Count
                };

                gameData.Add(gameData.CreateSessionEvent(GameEventType.VillageLevelUp, session, data));
                lastExpSend = DateTime.UtcNow;
            }

            lastUpdate = DateTime.UtcNow;
        }
Exemple #22
0
 public PlayersController(
     ILogger <PlayersController> logger,
     IGameData gameData,
     ISessionInfoProvider sessionInfoProvider,
     IPlayerInventoryProvider inventoryProvider,
     ISessionManager sessionManager,
     IPlayerManager playerManager,
     IRavenfallDbContextProvider dbProvider,
     ISecureHasher secureHasher,
     IAuthManager authManager,
     IOptions <AppSettings> settings)
     : base(logger, gameData, authManager, sessionInfoProvider, sessionManager, secureHasher)
 {
     this.sessionInfoProvider = sessionInfoProvider;
     this.sessionManager      = sessionManager;
     this.playerManager       = playerManager;
     this.dbProvider          = dbProvider;
     this.secureHasher        = secureHasher;
     this.authManager         = authManager;
     this.settings            = settings;
 }
 public WorldProcessor(
     ILogger logger,
     IKernel kernel,
     IPlayerConnectionProvider connectionProvider,
     IPlayerInventoryProvider playerInventoryProvider,
     IPlayerStatsProvider statsProvider,
     IGameSessionProcessor gameSessionProcessor,
     IGameSessionManager gameSessionManager,
     IStreamBotManager botManager,
     IGameData gameData)
 {
     this.logger                  = logger;
     this.kernel                  = kernel;
     this.statsProvider           = statsProvider;
     this.playerInventoryProvider = playerInventoryProvider;
     this.connectionProvider      = connectionProvider;
     this.gameSessionProcessor    = gameSessionProcessor;
     this.sessions                = gameSessionManager;
     this.botManager              = botManager;
     this.gameData                = gameData;
     this.kernel.RegisterTickUpdate(Update, TimeSpan.FromSeconds(1f / 60f));
 }
Exemple #24
0
 public PatreonController(
     ILogger <PatreonController> logger,
     ISessionInfoProvider sessionInfoProvider,
     IPlayerInventoryProvider inventoryProvider,
     ISessionManager sessionManager,
     IPlayerManager playerManager,
     IRavenfallDbContextProvider dbProvider,
     ISecureHasher secureHasher,
     IAuthManager authManager,
     IPatreonManager patreonManager,
     IOptions <AppSettings> settings)
 {
     this.logger = logger;
     this.sessionInfoProvider = sessionInfoProvider;
     this.sessionManager      = sessionManager;
     this.playerManager       = playerManager;
     this.dbProvider          = dbProvider;
     this.secureHasher        = secureHasher;
     this.authManager         = authManager;
     this.patreonManager      = patreonManager;
     this.settings            = settings.Value;
 }
Exemple #25
0
        protected void UpdateResourceGain(
            IIntegrityChecker integrityChecker,
            IGameData gameData,
            IPlayerInventoryProvider inventoryProvider,
            DataModels.GameSession session,
            Character character,
            Action <DataModels.Resources> onUpdate)
        {
            if (!integrityChecker.VerifyPlayer(session.Id, character.Id, 0))
            {
                return;
            }

            var now   = DateTime.UtcNow;
            var state = gameData.GetCharacterSessionState(session.Id, character.Id);

            if (now - state.LastTaskUpdate >= TimeSpan.FromSeconds(ItemDropRateSettings.ResourceGatherInterval))
            {
                session.Updated = DateTime.UtcNow;
                var resources = gameData.GetResources(character.ResourcesId);
                var oldWood   = resources.Wood;
                var oldWheat  = resources.Wheat;
                var oldFish   = resources.Fish;
                var oldOre    = resources.Ore;
                var oldCoins  = resources.Coins;

                state.LastTaskUpdate = DateTime.UtcNow;
                onUpdate?.Invoke(resources);

                if (oldCoins != resources.Coins ||
                    oldWood != resources.Wood ||
                    oldWheat != resources.Wheat ||
                    oldFish != resources.Fish ||
                    oldOre != resources.Ore)
                {
                    UpdateResources(gameData, session, character, resources);
                }
            }
        }
        public override void Process(
            IIntegrityChecker integrityChecker,
            IGameData gameData,
            IPlayerInventoryProvider inventoryProvider,
            GameSession session,
            Character character,
            CharacterState state)
        {
            var user = gameData.GetUser(character.UserId);

            var loyalty = gameData.GetUserLoyalty(character.UserId, session.UserId);

            if (loyalty == null && character.UserIdLock != null)
            {
                loyalty = gameData.GetUserLoyalty(character.UserId, character.UserIdLock.GetValueOrDefault());
            }

            if (loyalty == null)
            {
                loyalty = CreateUserLoyalty(gameData, session, user);
            }

            //bool isActive = CheckUserActivity(user.Id, character, state);

            DateTime now     = DateTime.UtcNow;
            TimeSpan elapsed = TimeSpan.Zero;

            if (lastUpdate.TryGetValue(user.Id, out var lastUpdateTime))
            {
                elapsed = now - lastUpdateTime;
                loyalty.AddPlayTime(elapsed);
            }
            lastUpdate[user.Id] = now;

            var isSubMdVip         = loyalty.IsSubscriber || loyalty.IsModerator || loyalty.IsVip;
            var activityMultiplier = isSubMdVip ? UserLoyalty.ActivityMultiplier : 1d;

            loyalty.AddExperience((double)elapsed.TotalSeconds * UserLoyalty.ExpPerSecond * activityMultiplier);
        }
 public GameWebSocketConnectionProvider(
     ILogger <GameWebSocketConnectionProvider> logger,
     IRavenBotApiClient ravenBotApi,
     IIntegrityChecker integrityChecker,
     IPlayerInventoryProvider inventoryProvider,
     IExtensionWebSocketConnectionProvider extWsProvider,
     IGameData gameData,
     IGameManager gameManager,
     IGamePacketManager packetManager,
     IGamePacketSerializer packetSerializer,
     ISessionManager sessionManager)
 {
     this.logger            = logger;
     this.ravenBotApi       = ravenBotApi;
     this.integrityChecker  = integrityChecker;
     this.inventoryProvider = inventoryProvider;
     this.extWsProvider     = extWsProvider;
     this.gameData          = gameData;
     this.gameManager       = gameManager;
     this.packetManager     = packetManager;
     this.packetSerializer  = packetSerializer;
     this.sessionManager    = sessionManager;
 }
Exemple #28
0
        public override void Process(
            IIntegrityChecker integrityChecker,
            IGameData gameData,
            IPlayerInventoryProvider inventoryProvider,
            GameSession session,
            Character character,
            CharacterState state)
        {
            if (state == null)
            {
                return;
            }

            var isResting = state.InOnsen.GetValueOrDefault() &&
                            !state.InDungeon.GetValueOrDefault() &&
                            !state.InArena &&
                            !state.InRaid &&
                            !string.IsNullOrEmpty(state.Island) &&
                            string.IsNullOrEmpty(state.DuelOpponent);

            var now = DateTime.UtcNow;

            if (!lastUpdate.TryGetValue(character.Id, out var lastUpdateTime))
            {
                lastUpdateTime = now;
            }

            var elapsed       = now - lastUpdateTime;
            var requireUpdate = isResting
                ? AddRestTime(state, elapsed)
                : RemoveRestTime(state, elapsed);

            if (!lastEvent.TryGetValue(character.Id, out var lastEventUpdate))
            {
                lastEventUpdate = DateTime.MinValue;
            }

            if (requireUpdate)
            {
                var sinceLastEvent = now - lastEventUpdate;
                if (sinceLastEvent >= RestedEventUpdateInterval)
                {
                    var restedTime    = (double)(state.RestedTime ?? 0);
                    var restedPercent = restedTime / MaxRestTime.TotalSeconds;
                    var isRested      = restedTime > 0;

                    var data = new Models.PlayerRestedUpdate
                    {
                        CharacterId   = character.Id,
                        ExpBoost      = isRested ? ExpBoost : 0,
                        StatsBoost    = isRested ? CombatStatsBoost : 0,
                        RestedTime    = restedTime,
                        RestedPercent = restedPercent,
                    };

                    var gameEvent = gameData.CreateSessionEvent(GameEventType.PlayerRestedUpdate, session, data);
                    gameData.Add(gameEvent);
                    lastEvent[character.Id] = now;

                    if (restedTime > 0)
                    {
                        TrySendToExtensionAsync(character, data);
                    }
                }
            }
            lastUpdate[character.Id] = now;
        }