コード例 #1
0
        public override bool TakeAction()
        {
            // TODO: Add code here.
            GearLogic gearlogic = new GearLogic();

            gearlogic.SetGear(m_RequestPacket.GearId);
            PlayerLogic player = new PlayerLogic();

            player.SetUser(m_UserId);
            if (gearlogic.MyGear.Level >= player.MyPlayer.Level)
            {
                ErrorCode = (int)ErrorType.CannotOpenChance;
                ErrorInfo = "Can not upgrade,gear reached max level.";
                return(false);
            }
            int targetLevel;

            if (m_RequestPacket.IsUpToMax)
            {
                targetLevel = player.MyPlayer.Level;
            }
            else
            {
                targetLevel = gearlogic.MyGear.Level + 1;
            }
            int totalcost = gearlogic.GetLevelUpCost(targetLevel);

            if (!player.DeductCoin(totalcost))
            {
                ErrorCode = (int)ErrorType.RequireNotMet;
                ErrorInfo = "Can not upgrade, coin not enough.";
                return(false);
            }
            gearlogic.GearLevelUp(targetLevel, m_UserId);
            if (m_RequestPacket.HeroType > 0)
            {
                PlayerHeroLogic ph = new PlayerHeroLogic();
                ph.SetUser(m_UserId).SetHero(m_RequestPacket.HeroType);
                ph.RefreshMight();
                var heroInfo = ph.GetHeroInfo();
                m_ResponsePacket.HeroInfo = new PBLobbyHeroInfo()
                {
                    Type  = heroInfo.HeroType,
                    Might = heroInfo.Might
                };
            }
            m_ResponsePacket.LevelUpedGear = new PBGearInfo()
            {
                Id    = m_RequestPacket.GearId,
                Level = gearlogic.MyGear.Level
            };
            m_ResponsePacket.PlayerInfo = new PBPlayerInfo()
            {
                Id   = m_UserId,
                Coin = player.MyPlayer.Coin
            };
            return(true);
        }
コード例 #2
0
ファイル: PlayerChanceLogic.cs プロジェクト: JoeChen999/scut
        public Dictionary <int, DropItem> OpenAllChance()
        {
            Dictionary <int, DropItem> dropItems = new Dictionary <int, DropItem>();
            var dataRow = CacheSet.ChanceCostTable.GetData(m_Chance.OpenedChanceRewards.Count + 1);

            if (dataRow == null)
            {
                return(null);
            }
            PlayerLogic p = new PlayerLogic();

            p.SetUser(m_UserId);
            switch (m_Type)
            {
            case ChanceType.Coin:
                if (!p.DeductCoin(dataRow.CoinCostAll))
                {
                    return(null);
                }
                AnnouncementLogic.PushOpenTenCoinChanceAnnouncement(m_UserId);
                break;

            case ChanceType.Money:
                if (!p.DeductMoney(dataRow.MoneyCostAll))
                {
                    return(null);
                }
                AnnouncementLogic.PushOpenTenMoneyChanceAnnouncement(m_UserId);
                PlayerAchievementLogic.GetInstance(m_UserId).UpdateAchievement(AchievementType.OpenedMoneyChanceCount, m_Chance.UnopenedChanceRewards.Count);
                break;

            default:
                return(null);
            }
            int i = 0;

            foreach (var item in m_Chance.UnopenedChanceRewards)
            {
                while (m_Chance.OpenedChanceRewards.ContainsKey(i))
                {
                    i++;
                }
                m_Chance.OpenedChanceRewards.Add(i, item.Value.Clone() as DropItem);
                dropItems.Add(i, item.Value);
                i++;
            }
            m_Chance.UnopenedChanceRewards.Clear();
            return(dropItems);
        }
コード例 #3
0
ファイル: PlayerChanceLogic.cs プロジェクト: JoeChen999/scut
        public bool ResetRewards(bool IsFree)
        {
            RandomDropLogic random = RandomDropLogic.GetInstance();
            PlayerLogic     player = new PlayerLogic();

            player.SetUser(m_UserId);
            m_Chance.OpenedChanceRewards.Clear();
            m_Chance.UnopenedChanceRewards.Clear();
            switch (m_Type)
            {
            case ChanceType.Coin:
                if (!IsFree)
                {
                    if (!player.DeductCoin(GameConfigs.GetInt("ChanceRefreshCost0")))
                    {
                        return(false);
                    }
                }
                for (int i = GameConsts.Chance.MinCoinChancePackId; i <= GameConsts.Chance.MaxCoinChancePackId; i++)
                {
                    m_Chance.UnopenedChanceRewards.Add(i, random.GetChanceRewards(i));
                }
                m_Chance.TotalFreeCount = 0;
                break;

            case ChanceType.Money:
                if (!IsFree)
                {
                    if (!player.DeductMoney(GameConfigs.GetInt("ChanceRefreshCost1")))
                    {
                        return(false);
                    }
                }
                for (int i = GameConsts.Chance.MinMoneyChancePackId; i <= GameConsts.Chance.MaxMoneyChancePackId; i++)
                {
                    m_Chance.UnopenedChanceRewards.Add(i - GameConsts.Chance.MaxCoinChancePackId, random.GetChanceRewards(i));
                }
                m_Chance.TotalFreeCount = 0;
                break;

            default:
                break;
            }
            m_Chance.OpenedChanceRewards.Clear();
            return(true);
        }
コード例 #4
0
ファイル: Action1035.cs プロジェクト: JoeChen999/scut
        public override bool TakeAction()
        {
            PlayerHeroLogic ph = new PlayerHeroLogic();

            ph.SetUser(m_UserId).SetHero(m_RequestPacket.HeroType);
            Hero           hero       = ph.GetHeroInfo();
            int            skillLevel = hero.SkillLevels[m_RequestPacket.SkillIndex];
            DTSkillLevelUp skillData  = CacheSet.SkillLevelUpTable.GetData(h => (h.HeroType == m_RequestPacket.HeroType && h.SkillIndex == m_RequestPacket.SkillIndex && h.SkillLevel == skillLevel));
            PlayerLogic    p          = new PlayerLogic();

            p.SetUser(m_UserId);
            if (hero.HeroLv < skillData.RequiresHeroLevel || hero.HeroStarLevel < skillData.RequiresHeroStarLevel)
            {
                ErrorCode = (int)ErrorType.RequireNotMet;
                ErrorInfo = "require not met";
                return(false);
            }
            PlayerPackageLogic pp = new PlayerPackageLogic();

            pp.SetUser(m_UserId);
            if (!p.DeductCoin(skillData.CoinCost))
            {
                ErrorCode = (int)ErrorType.RequireNotMet;
                ErrorInfo = "You do not have enough coin";
                return(false);
            }
            if (!ph.SkillLevelUp(m_RequestPacket.SkillIndex, skillData.CostEXP))
            {
                ErrorCode = (int)ErrorType.RequireNotMet;
                ErrorInfo = "You do not have enough exp";
                return(false);
            }

            m_ResponsePacket.HeroInfo = new PBLobbyHeroInfo()
            {
                Type = hero.HeroType,
            };
            m_ResponsePacket.HeroInfo.SkillLevels.AddRange(hero.SkillLevels);
            m_ResponsePacket.HeroInfo.SkillExps.AddRange(hero.SkillExps);
            return(true);
        }
コード例 #5
0
ファイル: PlayerVipShopLogic.cs プロジェクト: JoeChen999/scut
        public bool PurchaseItem(int index, int type, int count)
        {
            var itemData = m_Shop.ShopItems[index];

            if (itemData.ItemType != type || itemData.ItemCount != count || itemData.PurchasedTimes >= 1)
            {
                return(false);
            }
            PlayerLogic player = new PlayerLogic();

            player.SetUser(m_UserId);
            switch ((GiftItemType)itemData.CurrencyType)
            {
            case GiftItemType.Money:
                if (!player.DeductMoney(itemData.OriginalPrice))
                {
                    return(false);
                }
                break;

            case GiftItemType.Coin:
                if (!player.DeductCoin(itemData.OriginalPrice))
                {
                    return(false);
                }
                break;

            case GiftItemType.Spirit:
                if (!player.DeductSpirit(itemData.OriginalPrice))
                {
                    return(false);
                }
                break;

            default:
                break;
            }
            m_Shop.ShopItems[index].PurchasedTimes += 1;
            return(true);
        }
コード例 #6
0
        public override bool TakeAction()
        {
            Transaction t      = new Transaction();
            PlayerLogic player = new PlayerLogic();

            player.SetUser(m_UserId);
            PlayerPackageLogic package = new PlayerPackageLogic();

            package.SetUser(m_UserId);
            GearLogic gear = new GearLogic();

            gear.SetGear(m_RequestPacket.GearId[0]);
            int quality = CacheSet.GearTable.GetData(gear.MyGear.TypeId).Quality;

            t.DumpEntity(package.MyPackage);
            t.DumpEntity(player.MyPlayer);
            int costCoin = gear.GetComposeCost(quality);

            if (quality == (int)GearQuality.Orange)
            {
                t.RollBack();
                ErrorCode = (int)ErrorType.CannotOpenChance;
                ErrorInfo = "wrong gearId";
                return(false);
            }

            if (!player.DeductCoin(costCoin))
            {
                t.RollBack();
                ErrorCode = (int)ErrorType.RequireNotMet;
                ErrorInfo = "You don't have enough Coin";
                return(false);
            }
            foreach (int gearId in m_RequestPacket.GearId)
            {
                gear.SetGear(gearId);
                if (quality != CacheSet.GearTable.GetData(gear.MyGear.TypeId).Quality)
                {
                    t.RollBack();
                    ErrorCode = (int)ErrorType.CannotOpenChance;
                    ErrorInfo = "wrong gearId";
                    return(false);
                }
                if (!package.DeductGear(gearId))
                {
                    t.RollBack();
                    ErrorCode = (int)ErrorType.RequireNotMet;
                    ErrorInfo = "You don't have enough Gear";
                    return(false);
                }
                gear.RemoveGear();
            }
            int position = 0;

            if (m_RequestPacket.HasItemId && m_RequestPacket.ItemId != 0)
            {
                if (!package.DeductInventory(new ItemListItem()
                {
                    Id = m_RequestPacket.ItemId, Count = 1
                }))
                {
                    t.RollBack();
                    ErrorCode = (int)ErrorType.RequireNotMet;
                    ErrorInfo = "You don't have enough Item";
                    return(false);
                }
                position = int.Parse(CacheSet.ItemTable.GetData(m_RequestPacket.ItemId).FunctionParams);
                m_ResponsePacket.ItemInfo = new PBItemInfo()
                {
                    Type = m_RequestPacket.ItemId, Count = package.MyPackage.Inventories[m_RequestPacket.ItemId]
                };
            }
            m_ResponsePacket.PlayerInfo = new PBPlayerInfo()
            {
                Id   = player.MyPlayer.Id,
                Coin = player.MyPlayer.Coin
            };
            m_ResponsePacket.RemovedGears.AddRange(m_RequestPacket.GearId);
            Gears newGear = gear.GetComposeResult(quality, position, m_UserId);

            if (newGear == null)
            {
                return(true);
            }
            package.AddGear(newGear.Id, newGear.TypeId);
            m_ResponsePacket.NewGear = new PBGearInfo()
            {
                Id    = newGear.Id,
                Type  = newGear.TypeId,
                Level = newGear.Level
            };
            return(true);
        }
コード例 #7
0
ファイル: PlayerChanceLogic.cs プロジェクト: JoeChen999/scut
        public DropItem OpenChance(int index, bool isFree)
        {
            if (isFree)
            {
                if (DateTime.UtcNow.Ticks < m_Chance.NextFreeTime)
                {
                    return(null);
                }
                switch (m_Type)
                {
                case ChanceType.Coin:
                    PlayerCoinChance coinChance = m_Chance as PlayerCoinChance;
                    if (coinChance.TotalFreeCount >= GameConsts.Chance.MaxFreeCountForCoinChance)
                    {
                        return(null);
                    }
                    coinChance.TotalFreeCount += 1;
                    m_Chance.NextFreeTime      = DateTime.UtcNow.AddSeconds(GameConsts.Chance.FreeCoinChanceCDSeconds).Ticks;
                    break;

                case ChanceType.Money:
                    m_Chance.NextFreeTime = DateTime.UtcNow.AddSeconds(GameConsts.Chance.FreeMoneyChanceCDSeconds).Ticks;
                    PlayerAchievementLogic.GetInstance(m_UserId).UpdateAchievement(AchievementType.OpenedMoneyChanceCount, 1);
                    break;

                default:
                    return(null);
                }
            }
            else
            {
                var         dataRow = CacheSet.ChanceCostTable.GetData(m_Chance.OpenedChanceRewards.Count + 1);
                PlayerLogic p       = new PlayerLogic();
                p.SetUser(m_UserId);
                switch (m_Type)
                {
                case ChanceType.Coin:
                    if (!p.DeductCoin(dataRow.CoinCost))
                    {
                        return(null);
                    }
                    break;

                case ChanceType.Money:
                    if (!p.DeductMoney(dataRow.MoneyCost))
                    {
                        return(null);
                    }
                    PlayerAchievementLogic.GetInstance(m_UserId).UpdateAchievement(AchievementType.OpenedMoneyChanceCount, 1);
                    break;

                default:
                    return(null);
                }
            }

            RandomDropLogic random = RandomDropLogic.GetInstance();
            int             id     = random.OpenChanceBox(m_Chance.UnopenedChanceRewards);
            DropItem        di     = m_Chance.UnopenedChanceRewards[id];

            try
            {
                m_Chance.OpenedChanceRewards.Add(index, di.Clone() as DropItem);
            }
            catch
            {
                return(null);
            }
            m_Chance.UnopenedChanceRewards.Remove(id);
            return(di);
        }