public void EndAttackPreparation() { if (this.m_battleTimer != null) { int attackLength = LogicDataTables.GetGlobals().GetAttackLengthSecs(); int battleRemainingSecs = this.m_battleTimer.GetRemainingSeconds(this.m_level.GetLogicTime()); if (battleRemainingSecs > attackLength) { int remainingPrepSecs = battleRemainingSecs - attackLength; if (this.m_replay != null) { this.m_replay.RecordPreparationSkipTime(remainingPrepSecs); } this.m_skipPreparationSecs = remainingPrepSecs; this.m_battleTimer.StartTimer(attackLength, this.m_level.GetLogicTime(), false, -1); } if (this.m_level.GetPlayerAvatar() != null) { LogicClientAvatar playerAvatar = this.m_level.GetPlayerAvatar(); if (playerAvatar.GetChangeListener() != null) { playerAvatar.GetChangeListener().BattleFeedback(5, 0); } } } }
public void RefreshAchievementProgress(LogicClientAvatar avatar, LogicAchievementData data, int value) { if (this.m_level.GetState() != 5) { int currentValue = avatar.GetAchievementProgress(data); int newValue = LogicMath.Min(value, 2000000000); if (currentValue < newValue) { avatar.SetAchievementProgress(data, value); avatar.GetChangeListener().CommodityCountChanged(0, data, newValue); } int tmp = LogicMath.Min(newValue, data.GetActionCount()); if (currentValue < tmp) { LogicClientAvatar playerAvatar = this.m_level.GetPlayerAvatar(); if (playerAvatar == avatar) { if (tmp == data.GetActionCount()) { this.m_level.GetGameListener().AchievementCompleted(data); } else { this.m_level.GetGameListener().AchievementProgress(data); } } } } }
/// <summary> /// Removes the <see cref="LogicClientAvatar" /> instance. /// </summary> public LogicClientAvatar RemoveLogicClientAvatar() { LogicClientAvatar tmp = this._avatar; this._avatar = null; return(tmp); }
/// <summary> /// Creates a new player using the specified identifier in the specified database. /// </summary> internal static LogicClientAvatar Create(Connection connection, int highId = 0, int lowId = 0, DBMS database = Settings.Database) { int low = (lowId == 0) ? Interlocked.Increment(ref Avatars.Seed) : lowId; LogicClientAvatar avatar = new LogicClientAvatar(connection, new LogicLong(highId, low)) { Token = Loader.Random.GenerateRandomString() }; switch (database) { case DBMS.Mongo: { AvatarDb.Create(avatar).GetAwaiter().GetResult(); break; } case DBMS.File: { FileInfo file = new FileInfo($"{Directory.GetCurrentDirectory()}/Saves/Players/{avatar}.json"); if (!file.Exists) { file.WriteAllText(JsonConvert.SerializeObject(avatar, AvatarDb.JsonSettings)); } break; } } Avatars.Add(avatar); return(avatar); }
public override int Execute(LogicLevel level) { LogicClientAvatar playerAvatar = level.GetPlayerAvatar(); if (playerAvatar != null) { if (playerAvatar.IsInAlliance()) { if (playerAvatar.GetAllianceId().Equals(this.m_allianceId)) { playerAvatar.SetAllianceId(null); playerAvatar.SetAllianceName(null); playerAvatar.SetAllianceBadgeId(-1); playerAvatar.SetAllianceLevel(-1); playerAvatar.GetChangeListener().AllianceLeft(); } } level.GetGameListener().AllianceLeft(); return(0); } return(-1); }
/// <summary> /// Creates the player in the database. /// </summary> internal static async Task <AvatarDb> Save(LogicClientAvatar avatar) { var updatedEntity = await Mongo.Avatars.FindOneAndUpdateAsync(avatarDb => avatarDb.HighID == avatar.HighID && avatarDb.LowID == avatar.LowID, Builders <AvatarDb> .Update.Set(avatarDb => avatarDb.Profile, BsonDocument.Parse(JsonConvert.SerializeObject(avatar, AvatarDb.JsonSettings))) ); if (updatedEntity != null) { if (updatedEntity.HighID == avatar.Identifier.High && updatedEntity.LowID == avatar.Identifier.Low) { return(updatedEntity); } Debugger.Error("updatedEntity.Ids != this.Ids"); } else { Debugger.Error("updatedEntity == null"); } return(null); }
public void AddUnitsToQueue(LogicCombatItemData data, int count) { LogicCalendar calendar = this.m_level.GetCalendar(); LogicAvatar homeOwnerAvatar = this.m_level.GetHomeOwnerAvatar(); LogicClientAvatar playerAvatar = this.m_level.GetPlayerAvatar(); LogicGameObjectManager gameObjectManager = this.m_level.GetGameObjectManagerAt(0); LogicUnitProduction production = gameObjectManager.GetUnitProduction(); if (data.GetCombatItemType() != LogicCombatItemData.COMBAT_ITEM_TYPE_CHARACTER) { if (data.GetCombatItemType() != LogicCombatItemData.COMBAT_ITEM_TYPE_SPELL) { return; } production = gameObjectManager.GetSpellProduction(); } if (production != null) { int trainCost = calendar.GetTrainingCost(data, homeOwnerAvatar.GetUnitUpgradeLevel(data)); for (int i = 0; i < count; i++) { if (production.CanAddUnitToQueue(data, true) && playerAvatar.HasEnoughResources(data.GetTrainingResource(), trainCost, false, null, false)) { playerAvatar.CommodityCountChangeHelper(0, data.GetTrainingResource(), -trainCost); production.AddUnitToQueue(data, production.GetSlotCount(), true); } } } }
public LogicClientAvatar RemoveVisitorLogicClientAvatar() { LogicClientAvatar tmp = this.m_visitorLogicClientAvatar; this.m_visitorLogicClientAvatar = null; return(tmp); }
public LogicClientAvatar RemoveOwnerLogicClientAvatar() { LogicClientAvatar tmp = this.m_ownerLogicClientAvatar; this.m_ownerLogicClientAvatar = null; return(tmp); }
public override int Execute(LogicLevel level) { LogicClientAvatar playerAvatar = level.GetPlayerAvatar(); if (playerAvatar != null) { playerAvatar.SetLeagueType(this.m_leagueType); if (this.m_leagueType != 0) { playerAvatar.SetLeagueInstanceId(this.m_leagueInstanceId.Clone()); } else { playerAvatar.SetLeagueInstanceId(null); playerAvatar.SetAttackWinCount(0); playerAvatar.SetAttackLoseCount(0); playerAvatar.SetDefenseWinCount(0); playerAvatar.SetDefenseLoseCount(0); } playerAvatar.GetChangeListener().LeagueChanged(this.m_leagueType, this.m_leagueInstanceId); return(0); } return(-1); }
private void OnAvatarReceived(ServerRequestArgs args) { if (args.ErrorCode == ServerRequestError.Success && args.ResponseMessage.Success) { this.LogicClientAvatar = ((AvatarResponseMessage)args.ResponseMessage).LogicClientAvatar; if (AllianceManager.TryGet(this.LogicClientAvatar.GetAllianceId(), out Alliance avatarAlliance) && avatarAlliance.Members.ContainsKey(this.AccountId)) { this.Alliance = avatarAlliance; this.Alliance.AddOnlineMember(this.AccountId, this); this.SendPiranhaMessage(this.Alliance.GetAllianceFulEntryUpdateMessage(), 1); this.SendPiranhaMessage(this.Alliance.GetAllianceStreamMessage(), 1); AllianceMemberUtil.SetLogicClientAvatarToAllianceMemberEntry(this.LogicClientAvatar, this.Alliance.Members[this.AccountId], this.Alliance); AllianceManager.Save(this.Alliance); } else { this.SendMessage(new StopServerSessionMessage(), 1); ServerMessageManager.SendMessage(new AllianceLeavedMessage { AccountId = this.AccountId, AllianceId = this.LogicClientAvatar.GetAllianceId() }, 9); AllianceSessionManager.Remove(this.Id); } } else { this.SendMessage(new StopServerSessionMessage(), 1); AllianceSessionManager.Remove(this.Id); } }
public override int Execute(LogicLevel level) { LogicClientAvatar playerAvatar = level.GetPlayerAvatar(); if (level.GetVillageType() == 1) { LogicGameMode gameMode = level.GetGameMode(); if (!gameMode.IsInAttackPreparationMode()) { if (gameMode.GetState() != 5) { return(-9); } } if (this.m_oldUnitData != null && this.m_newUnitData != null && gameMode.GetCalendar().IsProductionEnabled(this.m_newUnitData)) { if (!this.m_newUnitData.IsUnlockedForBarrackLevel(playerAvatar.GetVillage2BarrackLevel())) { if (gameMode.GetState() != 7) { return(-7); } } int oldUnitCount = playerAvatar.GetUnitCountVillage2(this.m_oldUnitData); int oldUnitsInCamp = this.m_oldUnitData.GetUnitsInCamp(playerAvatar.GetUnitUpgradeLevel(this.m_oldUnitData)); if (oldUnitCount >= oldUnitsInCamp) { int newUnitCount = playerAvatar.GetUnitCountVillage2(this.m_newUnitData); int newUnitsInCamp = this.m_newUnitData.GetUnitsInCamp(playerAvatar.GetUnitUpgradeLevel(this.m_newUnitData)); playerAvatar.SetUnitCountVillage2(this.m_oldUnitData, oldUnitCount - oldUnitsInCamp); playerAvatar.SetUnitCountVillage2(this.m_newUnitData, newUnitCount + newUnitsInCamp); LogicArrayList <LogicDataSlot> unitsNew = playerAvatar.GetUnitsNewVillage2(); for (int i = 0; i < unitsNew.Size(); i++) { LogicDataSlot slot = unitsNew[i]; if (slot.GetCount() > 0) { playerAvatar.CommodityCountChangeHelper(8, slot.GetData(), -slot.GetCount()); } } return(0); } return(-23); } return(-7); } return(-10); }
/// <summary> /// Adds the experience. /// </summary> internal static void AddXP(this LogicClientAvatar avatar, int value) { if (value > 0) { if (avatar.ExpLevel == 35 && avatar.ExpPoints >= 2500000) { return; } double finalValue = value; if (avatar.Booster.BoostActive) { finalValue *= avatar.Booster.BoostPackage.Boost; } avatar.ExpPoints += (int)Math.Round(finalValue); LogicExperienceLevelData experienceLevels = (LogicExperienceLevelData)CSV.Tables.Get(Gamefile.ExperienceLevels).GetDataWithID(avatar.ExpLevel - 1); if (experienceLevels.ExpPoints <= avatar.ExpPoints) { avatar.ExpPoints -= experienceLevels.ExpPoints; avatar.ExpLevel++; } avatar.Save(); } }
public override int Execute(LogicLevel level) { LogicGameObject gameObject = level.GetGameObjectManager().GetGameObjectByID(this.m_gameObjectId); if (gameObject != null && gameObject.GetGameObjectType() == LogicGameObjectType.BUILDING) { LogicBuilding building = (LogicBuilding)gameObject; if (this.m_unitData != null) { LogicUnitUpgradeComponent unitUpgradeComponent = building.GetUnitUpgradeComponent(); if (unitUpgradeComponent != null && unitUpgradeComponent.CanStartUpgrading(this.m_unitData)) { LogicClientAvatar playerAvatar = level.GetPlayerAvatar(); int upgradeLevel = playerAvatar.GetUnitUpgradeLevel(this.m_unitData); int upgradeCost = this.m_unitData.GetUpgradeCost(upgradeLevel); LogicResourceData upgradeResourceData = this.m_unitData.GetUpgradeResource(upgradeLevel); if (playerAvatar.HasEnoughResources(upgradeResourceData, upgradeCost, true, this, false)) { playerAvatar.CommodityCountChangeHelper(0, upgradeResourceData, -upgradeCost); unitUpgradeComponent.StartUpgrading(this.m_unitData); return(0); } } } } return(-1); }
public override int Execute(LogicLevel level) { LogicClientAvatar playerAvatar = level.GetPlayerAvatar(); if (playerAvatar != null && this.m_achievementData != null) { if (playerAvatar.IsAchievementCompleted(this.m_achievementData) && !playerAvatar.IsAchievementRewardClaimed(this.m_achievementData)) { playerAvatar.XpGainHelper(this.m_achievementData.GetExpReward()); if (this.m_achievementData.GetDiamondReward() > 0) { int diamondReward = this.m_achievementData.GetDiamondReward(); playerAvatar.SetDiamonds(playerAvatar.GetDiamonds() + diamondReward); playerAvatar.SetFreeDiamonds(playerAvatar.GetFreeDiamonds() + diamondReward); playerAvatar.GetChangeListener().FreeDiamondsAdded(diamondReward, 4); } playerAvatar.SetAchievementRewardClaimed(this.m_achievementData, true); playerAvatar.GetChangeListener().CommodityCountChanged(1, this.m_achievementData, 1); return(0); } } return(-1); }
/// <summary> /// Destructs this instance. /// </summary> public override void Destruct() { base.Destruct(); this._clientHome = null; this._clientAvatar = null; this._npcAvatar = null; }
public bool SpeedUp() { if (this.m_timer != null) { int remainingSecs = this.m_timer.GetRemainingSeconds(this.m_parent.GetLevel().GetLogicTime()); int speedUpCost = LogicGamePlayUtil.GetSpeedUpCost(remainingSecs, 0, this.m_parent.GetVillageType()); LogicAvatar homeOwnerAvatar = this.m_parent.GetLevel().GetHomeOwnerAvatar(); if (homeOwnerAvatar.IsClientAvatar()) { LogicClientAvatar clientAvatar = (LogicClientAvatar)homeOwnerAvatar; if (clientAvatar.HasEnoughDiamonds(speedUpCost, true, this.m_parent.GetLevel())) { clientAvatar.UseDiamonds(speedUpCost); clientAvatar.GetChangeListener().DiamondPurchaseMade(10, this.m_hero.GetGlobalID(), clientAvatar.GetUnitUpgradeLevel(this.m_hero) + 1, speedUpCost, this.m_parent.GetLevel().GetVillageType()); this.FinishUpgrading(true); return(true); } } } return(false); }
/// <summary> /// Trains the unit with new training. /// </summary> public int NewTrainingUnit(LogicLevel level) { if (LogicDataTables.GetGlobals().UseNewTraining()) { LogicUnitProduction unitProduction = this._spellProduction ? level.GetGameObjectManager().GetSpellProduction() : level.GetGameObjectManager().GetUnitProduction(); LogicClientAvatar playerAvatar = level.GetPlayerAvatar(); Int32 remainingSecs = unitProduction.GetTotalRemainingSeconds(); Int32 speedUpCost = LogicGamePlayUtil.GetSpeedUpCost(remainingSecs, this._spellProduction ? 1 : 4, level.GetVillageType()); if (!level.GetMissionManager().IsTutorialFinished()) { if (speedUpCost > 0 && LogicDataTables.GetGlobals().GetTutorialTrainingSpeedUpCost() > 0) { speedUpCost = LogicDataTables.GetGlobals().GetTutorialTrainingSpeedUpCost(); } } if (playerAvatar.HasEnoughDiamonds(speedUpCost, true, level)) { playerAvatar.UseDiamonds(speedUpCost); unitProduction.SpeedUp(); return(0); } return(-1); } return(-99); }
public override void ApplyAvatarChange(LogicClientAvatar avatar) { LogicLegendSeasonEntry legendSeasonEntry = this.VillageType == 1 ? avatar.GetLegendSeasonEntryVillage2() : avatar.GetLegendSeasonEntry(); if (legendSeasonEntry.GetLastSeasonState() != this.Entry.GetLastSeasonState()) { if (this.VillageType == 1) { avatar.SetDuelScore(avatar.GetDuelScore() - this.ScoreChange); avatar.SetLegendaryScore(avatar.GetLegendaryScoreVillage2() + this.ScoreChange); } else { avatar.SetScore(avatar.GetScore() - this.ScoreChange); avatar.SetLegendaryScore(avatar.GetLegendaryScore() + this.ScoreChange); } legendSeasonEntry.SetLastSeasonState(this.Entry.GetLastSeasonState()); legendSeasonEntry.SetLastSeasonDate(this.Entry.GetLastSeasonYear(), this.Entry.GetLastSeasonMonth()); legendSeasonEntry.SetLastSeasonRank(this.Entry.GetLastSeasonRank()); legendSeasonEntry.SetLastSeasonScore(this.Entry.GetLastSeasonScore()); if (this.BestSeason) { legendSeasonEntry.SetBestSeasonState(this.Entry.GetBestSeasonState()); legendSeasonEntry.SetBestSeasonDate(this.Entry.GetBestSeasonYear(), this.Entry.GetBestSeasonMonth()); legendSeasonEntry.SetBestSeasonRank(this.Entry.GetBestSeasonRank()); legendSeasonEntry.SetBestSeasonScore(this.Entry.GetBestSeasonScore()); } } }
public static AllianceMemberEntry GetAllianceMemberEntryFromAvatar(LogicClientAvatar entry) { AllianceMemberEntry allianceMemberEntry = new AllianceMemberEntry(); AllianceMemberUtil.SetLogicClientAvatarToAllianceMemberEntry(entry, allianceMemberEntry); return(allianceMemberEntry); }
/// <summary> /// Refreshes all open missions. /// </summary> public void RefreshOpenMissions() { if (this._level.GetState() != 4) { LogicClientAvatar playerAvatar = this._level.GetPlayerAvatar(); LogicDataTable missionTable = LogicDataTables.GetTable(20); for (int i = 0; i < missionTable.GetItemCount(); i++) { LogicMissionData missionData = (LogicMissionData)missionTable.GetItemAt(i); if (missionData.IsOpenForAvatar(playerAvatar)) { int index = -1; for (int j = 0; j < this._openMissions.Count; j++) { if (this._openMissions[j].GetMissionData() == missionData) { index = j; break; } } if (index == -1) { LogicMission mission = new LogicMission(missionData, this._level); mission.RefreshProgress(); this._openMissions.Add(mission); } } } } }
public override int Execute(LogicLevel level) { LogicArrayList <LogicComponent> components = level.GetComponentManager().GetComponents(LogicComponentType.VILLAGE2_UNIT); int remainingSecs = 0; for (int i = 0; i < components.Size(); i++) { remainingSecs += ((LogicVillage2UnitComponent)components[i]).GetRemainingSecs(); } LogicClientAvatar playerAvatar = level.GetPlayerAvatar(); int speedUpCost = LogicGamePlayUtil.GetSpeedUpCost(remainingSecs, 4, 1); if (!playerAvatar.HasEnoughDiamonds(speedUpCost, true, level)) { return(-1); } playerAvatar.UseDiamonds(speedUpCost); for (int i = 0; i < components.Size(); i++) { LogicVillage2UnitComponent component = (LogicVillage2UnitComponent)components[i]; if (component.GetCurrentlyTrainedUnit() != null && component.GetRemainingSecs() > 0) { component.ProductionCompleted(); } } playerAvatar.GetChangeListener().DiamondPurchaseMade(16, 0, 0, speedUpCost, 1); return(0); }
/// <summary> /// Uses the specified JSON to initialize an instance of <see cref="LogicClientAvatar"/>. /// </summary> private static LogicClientAvatar Load(string json) { LogicClientAvatar avatar = new LogicClientAvatar(); JsonConvert.PopulateObject(json, avatar, AvatarDb.JsonSettings); return(avatar); }
/// <summary> /// Gets if this mission is open for the specified <see cref="LogicClientAvatar"/> instance. /// </summary> public bool IsOpenForAvatar(LogicClientAvatar avatar) { if (!avatar.IsMissionCompleted(this)) { if (avatar.GetExpLevel() >= 10) { if (this._missionCategory - 1 > 1) { return(false); } } if (!this._deprecated) { for (int i = 0; i < this._missionDependencies.Count; i++) { if (!avatar.IsMissionCompleted(this._missionDependencies[i])) { return(false); } } return(true); } } return(false); }
public LogicClientAvatar RemoveAttackerLogicClientAvatar() { LogicClientAvatar tmp = this.m_attackerLogicClientAvatar; this.m_attackerLogicClientAvatar = null; return(tmp); }
public override void Destruct() { base.Destruct(); this.m_logicClientHome = null; this.m_logicClientAvatar = null; }
/// <summary> /// Called when the mission is finished. /// </summary> public void Finished() { LogicClientAvatar playerAvatar = this._level.GetPlayerAvatar(); if (!playerAvatar.IsMissionCompleted(this._data)) { Debugger.Print("Mission " + this._data.GetName() + " finished"); playerAvatar.SetMissionCompleted(this._data, true); playerAvatar.GetChangeListener().CommodityCountChanged(0, this._data.GetRewardResourceData(), 1); this.AddRewardUnits(); LogicResourceData rewardResourceData = this._data.GetRewardResourceData(); if (rewardResourceData != null) { playerAvatar.AddMisisonResourceReward(rewardResourceData, this._data.GetRewardResourceCount()); } int rewardXp = this._data.GetRewardXp(); if (rewardXp > 0) { playerAvatar.XpGainHelper(rewardXp); } } }
public override void ApplyAvatarChange(LogicClientAvatar avatar) { avatar.SetScore(LogicMath.Max(avatar.GetScore() + this.ScoreGain, 0)); avatar.SetLeagueType(this.LeagueData.GetInstanceID()); if (this.PrevLeagueData != null) { if (this.Attacker) { if (this.ScoreGain < 0) { avatar.SetAttackLoseCount(avatar.GetAttackLoseCount() + 1); } else { avatar.SetAttackWinCount(avatar.GetAttackWinCount() + 1); } } else { if (this.ScoreGain < 0) { avatar.SetDefenseLoseCount(avatar.GetDefenseLoseCount() + 1); } else { avatar.SetDefenseWinCount(avatar.GetDefenseWinCount() + 1); } } } }
/// <summary> /// Executes this command. /// </summary> public override int Execute(LogicLevel level) { if (LogicDataTables.GetGlobals().UseNewTraining()) { if (level.GetVillageType() == 0) { LogicClientAvatar playerAvatar = level.GetPlayerAvatar(); LogicUnitProduction unitProduction = this._productionType == 1 ? level.GetGameObjectManager().GetSpellProduction() : level.GetGameObjectManager().GetUnitProduction(); if (unitProduction.CanBeBoosted()) { int cost = unitProduction.GetBoostCost(); if (playerAvatar.HasEnoughDiamonds(cost, true, level)) { playerAvatar.UseDiamonds(cost); unitProduction.Boost(); return(0); } return(-2); } return(-1); } return(-32); } return(-99); }
internal override void Handle() { LogicClientAvatar avatar = this.Connection.Avatar; Alliance alliance = avatar.Alliance; if (alliance != null) { AllianceMember member = alliance.Members.Find(m => m.Identifier == avatar.Identifier); avatar.ClanHighID = 0; avatar.ClanLowID = 0; avatar.Save(); if (alliance.Members.Size == 0) { Alliances.Delete(alliance); } else { if (member.Role == (int)Alliance.Role.Leader) { LeaveAllianceMessage.FindNewLeader(alliance, member); } } new AvailableServerCommandMessage(this.Connection, new LogicLeaveAllianceCommand(this.Connection, alliance.Identifier)).Send(); alliance.AddEntry(new StreamEntry(member, member, StreamEntry.StreamEvent.Left)); alliance.Members.Remove(member); Alliances.Save(alliance); } }