//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); }
public PatreonManager( IGameData gameData, IPlayerInventoryProvider playerInventory) { this.gameData = gameData; this.playerInventory = playerInventory; }
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(); }
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; }
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; }
public MarketplaceManager( ILogger <MarketplaceManager> logger, IPlayerManager playerManager, IPlayerInventoryProvider inventoryProvider, IGameData gameData) { this.logger = logger; this.playerManager = playerManager; this.inventoryProvider = inventoryProvider; this.gameData = gameData; }
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; } }); }
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, })); }
public RockPickAction( IGameData gameData, IWorldProcessor worldProcessor, IGameSessionManager sessionManager, IPlayerStatsProvider statsProvider, IPlayerInventoryProvider inventoryProvider) : base(2, "RockPick", "Mining", 2000, gameData, worldProcessor, sessionManager, statsProvider, inventoryProvider) { }
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; } }); }
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); } }
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); }
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; }
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)); }
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; }
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; }
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; }