Пример #1
0
        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);
                    }
                }
            }
        }
Пример #2
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);
                        }
                    }
                }
            }
        }
Пример #3
0
        /// <summary>
        ///     Removes the <see cref="LogicClientAvatar" /> instance.
        /// </summary>
        public LogicClientAvatar RemoveLogicClientAvatar()
        {
            LogicClientAvatar tmp = this._avatar;

            this._avatar = null;
            return(tmp);
        }
Пример #4
0
        /// <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);
        }
Пример #6
0
        /// <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);
                    }
                }
            }
        }
Пример #8
0
        public LogicClientAvatar RemoveVisitorLogicClientAvatar()
        {
            LogicClientAvatar tmp = this.m_visitorLogicClientAvatar;

            this.m_visitorLogicClientAvatar = null;
            return(tmp);
        }
Пример #9
0
        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);
            }
        }
Пример #12
0
        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();
            }
        }
Пример #14
0
        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);
        }
Пример #16
0
 /// <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);
        }
Пример #18
0
        /// <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);
        }
Пример #19
0
        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());
                }
            }
        }
Пример #20
0
        public static AllianceMemberEntry GetAllianceMemberEntryFromAvatar(LogicClientAvatar entry)
        {
            AllianceMemberEntry allianceMemberEntry = new AllianceMemberEntry();

            AllianceMemberUtil.SetLogicClientAvatarToAllianceMemberEntry(entry, allianceMemberEntry);
            return(allianceMemberEntry);
        }
Пример #21
0
        /// <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);
                        }
                    }
                }
            }
        }
Пример #22
0
        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);
        }
Пример #23
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);
        }
Пример #24
0
        /// <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);
        }
Пример #25
0
        public LogicClientAvatar RemoveAttackerLogicClientAvatar()
        {
            LogicClientAvatar tmp = this.m_attackerLogicClientAvatar;

            this.m_attackerLogicClientAvatar = null;
            return(tmp);
        }
Пример #26
0
        public override void Destruct()
        {
            base.Destruct();

            this.m_logicClientHome   = null;
            this.m_logicClientAvatar = null;
        }
Пример #27
0
        /// <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);
        }
Пример #30
0
        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);
            }
        }