public static void GuildFightCombatUserList()
 {
     _fightUserList = new CacheList<FightUser>();
     var fightList = new ShareCacheStruct<ServerFight>().FindAll(m => m.FastID == info.FastID);
     foreach (ServerFight fight in fightList)
     {
         if (string.IsNullOrEmpty(fight.CombatMember))
         {
             continue;
         }
         string[] strList = fight.CombatMember.Split(',');
         foreach (string s in strList)
         {
             if (string.IsNullOrEmpty(s))
             {
                 continue;
             }
             var FightStatusUser = _fightUserList.Find(m => !m.IsRemove && m.UserId == s);
             if (FightStatusUser != null)
             {
                 continue;
             }
             FightUser fightUser = new FightUser();
             fightUser.GuildID = fight.GuildID;
             fightUser.UserId = s;
             GameUser user = UserCacheGlobal.CheckLoadUser(s);
             if (user != null)
             {
                 fightUser.UserName = user.NickName;
                 user.UserStatus = UserStatus.FightCombat;
             }
             fightUser.WinCount = 0;
             fightUser.CityID = fight.CityID;
             fightUser.ObtainNum = 0;
             fightUser.InspirePercent = 0;
             fightUser.IsRemove = false;
             fightUser.IsNotEnough = false;
             _fightUserList.Add(fightUser);
         }
     }
 }
Beispiel #2
0
 public override bool TakeAction()
 {
     CacheList<GeneralHeritage> heritageList = new CacheList<GeneralHeritage>();
     GeneralHeritage heritage = new GeneralHeritage();
     UserGeneral general = new GameDataCacheSet<UserGeneral>().FindKey(ContextUser.UserID, generalID);
     if (general == null)
     {
         return false;
     }
     if (ContextUser.HeritageList.Count > 0)
     {
         heritageList = ContextUser.HeritageList;
         if (heritageList.Find(m => m.Type == heritageType) != null)
         {
             heritage = heritageList.Find(m => m.Type == heritageType);
         }
     }
     if (heritageType == HeritageType.Heritage)
     {
         int opsid = 0;
         OpsInfo opsInfo = GeneralHelper.HeritageOpsInfo(opsid);
         GeneralHeritage gHeritage = heritageList.Find(m => m.Type == HeritageType.IsHeritage);
         if (opsInfo != null)
         {
             short genlv = MathUtils.Addition(gHeritage == null ? 0.ToShort() : gHeritage.GeneralLv, 3.ToShort());
             if (gHeritage != null && general.GeneralLv < genlv)
             {
                 ErrorCode = LanguageManager.GetLang().ErrorCode;
                 ErrorInfo = LanguageManager.GetLang().St1418_HeritageLvLow;
                 return false;
             }
             ContextUser.HeritageList.Remove(heritage);
             heritage.GeneralID = generalID;
             heritage.Type = heritageType;
             heritage.GeneralLv = MathUtils.RoundCustom(heritage.GeneralLv * opsInfo.Num).ToShort();
             heritage.GeneralLv = general.GeneralLv;
             heritage.PowerNum = MathUtils.RoundCustom(heritage.PowerNum * opsInfo.Num).ToShort();
             if (heritage.PowerNum < general.TrainingPower)
             {
                 heritage.PowerNum = general.TrainingPower;
             }
             heritage.SoulNum = MathUtils.RoundCustom(heritage.SoulNum * opsInfo.Num).ToShort();
             if (heritage.SoulNum < general.SoulNum)
             {
                 heritage.SoulNum = general.TrainingSoul;
             }
             heritage.IntellectNum = MathUtils.RoundCustom(heritage.IntellectNum * opsInfo.Num).ToShort();
             if (heritage.IntellectNum < general.IntellectNum)
             {
                 heritage.IntellectNum = general.TrainingIntellect;
             }
             heritage.opsType = 1;
             ContextUser.HeritageList.Add(heritage);
         }
     }
     else if (heritageType == HeritageType.IsHeritage)
     {
         ContextUser.HeritageList = new CacheList<GeneralHeritage>();
         heritage.GeneralID = generalID;
         heritage.GeneralLv = general.GeneralLv;
         heritage.Type = heritageType;
         heritage.PowerNum = general.TrainingPower;
         heritage.SoulNum = general.TrainingSoul;
         heritage.IntellectNum = general.TrainingIntellect;
         ContextUser.HeritageList.Add(heritage);
     }
     return true;
 }
Beispiel #3
0
 /// <summary>
 /// 公会技能是否开启
 /// </summary>
 /// <param name="abilityList"></param>
 /// <param name="info"></param>
 /// <returns></returns>
 public static bool IsAbilityOpen(CacheList<GuildAbility> abilityList, GuildAbilityInfo info)
 {
     GuildAbility ability = abilityList.Find(m => m.ID == info.ID);
     if (ability != null)
     {
         return false;
     }
     //没有前提条件
     if (info.PreAbility.Count == 0 && info.PreAbilityLv.Length == 0)
     {
         return true;
     }
     bool result = true;
     for (int i = 0; i < info.PreAbility.Count; i++)
     {
         GuildAbility preAbi = abilityList.Find(m => m.ID.ToString() == info.PreAbility[i]);
         if (preAbi == null || preAbi.Lv < Convert.ToInt32(info.PreAbilityLv[i]))
         {
             return false;
         }
     }
     return result;
 }
Beispiel #4
0
        public static CacheList<PrizeItemInfo> GetPlotMonsterItems(string userID, int plotNpcID)
        {
            CacheList<PrizeItemInfo> itemList = new CacheList<PrizeItemInfo>();
            GameUser userInfo = new GameDataCacheSet<GameUser>().FindKey(userID);
            if (userInfo != null)
            {
                int doubleitem = GetDouble(userID, plotNpcID);
                int multiple = FestivalHelper.DuplicateDropDouble(userID);
                List<PlotEmbattleInfo> embattleInfoList = new ConfigCacheSet<PlotEmbattleInfo>().FindAll(m => m.PlotNpcID == plotNpcID);
                foreach (PlotEmbattleInfo embattleInfo in embattleInfoList)
                {
                    MonsterInfo monster = new ConfigCacheSet<MonsterInfo>().FindKey(embattleInfo.MonsterID);
                    if (monster == null)
                    {
                        continue;
                    }
                    //原因:活动类型修改
                    if (RandomUtils.IsHit(NoviceHelper.FestivalMultiple(monster.ItemProbability)))
                    //if (RandomUtils.IsHit(FestivalHelper.DuplicateDropDouble(userID, monster.ItemProbability)))
                    {
                        if (ItemBaseInfo.IsExist(monster.ItemID))
                        {
                            PrizeItemInfo itemInfo = itemList.Find(m => m.ItemID == monster.ItemID);
                            if (itemInfo == null)
                            {
                                itemInfo = new PrizeItemInfo
                                {
                                    Type = 0,
                                    ItemID = monster.ItemID,
                                    Num = 1 * doubleitem * multiple
                                };
                                itemList.Add(itemInfo);
                            }
                            else
                            {
                                itemInfo.Num += 1 * doubleitem * multiple;
                            }
                        }
                    }
                }

                foreach (var itemInfo in itemList)
                {
                    UserItemHelper.AddUserItem(userID, itemInfo.ItemID, itemInfo.Num);
                    CacheList<PrizeItemInfo> prizeItemInfos = new CacheList<PrizeItemInfo>();
                    prizeItemInfos.Add(new PrizeItemInfo() { Type = 0, ItemID = itemInfo.ItemID, Num = itemInfo.Num });

                    if (prizeItemInfos.Count > 0)
                    {
                        userInfo.UserExtend.UpdateNotify(obj =>
                            {
                                userInfo.UserExtend.ItemList = prizeItemInfos;
                                return true;
                            });
                        //userInfo.Update();
                    }
                }
            }
            return itemList;
        }
Beispiel #5
0
        /// <summary>
        /// 扫荡副本
        /// </summary>
        /// <param name="userID"></param>
        /// <param name="itemProbability"></param>
        /// <param name="itemRank"></param>
        /// <returns></returns>
        private static CacheList<PrizeItemInfo> GetPrizeItems(string userID, decimal itemProbability, string itemRank, int plotID, UserPlotInfo userPlot)
        {
            List<UniversalInfo> universalInfoList = new List<UniversalInfo>();
            var itemList = new CacheList<PrizeItemInfo>();

            string[] items = itemRank.Trim().Split(new[] { ',' });
            int count = items.Length + 1;
            int[] precent = new int[count];
            int precentNum = 0;
            for (int i = 0; i < count; i++)
            {
                if (i != (count - 1))
                {
                    var itemInfo = items[i].Split('=');
                    decimal prize = itemInfo[2].ToDecimal();
                    precent[i] = (prize * 1000).ToInt();
                    precentNum = MathUtils.Addition(precentNum, precent[i]);
                }
                else
                {
                    precent[i] = (1000 - precentNum);
                }
            }

            int index = RandomUtils.GetHitIndexByTH(precent);
            if (index != (count - 1))
            {
                int itemId = 0;
                int num = 0;
                if (items.Length > 1)
                {

                    itemId = items[index].Split('=')[0].ToInt();
                    num = items[index].Split('=')[1].ToInt();
                }
                else
                {
                    itemId = items[0].Split('=')[0].ToInt();
                    num = items[0].Split('=')[1].ToInt();
                }

                var itemBase = new ConfigCacheSet<ItemBaseInfo>().FindKey(itemId);
                if (itemBase != null)
                {
                    PrizeItemInfo prizeItem = itemList.Find(m => m.ItemID == itemId);
                    if (prizeItem == null)
                    {
                        prizeItem = new PrizeItemInfo
                        {
                            Type = 0,
                            ItemID = itemId,
                            Num = num
                        };
                        itemList.Add(prizeItem);
                    }
                    else
                    {
                        prizeItem.Num += num;
                    }
                }

            }
            GameUser userInfo = new GameDataCacheSet<GameUser>().FindKey(userID);
            foreach (var itemInfo in itemList)
            {

                UserItemHelper.AddUserItem(userID, itemInfo.ItemID, itemInfo.Num, universalInfoList);
                if (userInfo != null)
                {
                    CacheList<PrizeItemInfo> prizeItemInfos = new CacheList<PrizeItemInfo>();
                    prizeItemInfos.Add(new PrizeItemInfo() { Type = 0, ItemID = itemInfo.ItemID, Num = itemInfo.Num });

                    if (prizeItemInfos.Count > 0)
                    {
                        userInfo.UserExtend.UpdateNotify(obj =>
                            {
                                userInfo.UserExtend.ItemList = prizeItemInfos;
                                return true;
                            });
                        //userInfo.Update();
                    }
                }
            }
            NoviceHelper.PlotFestivalList(userInfo, plotID); //活动集合

            if (universalInfoList.Count > 0)
            {
                foreach (var item in universalInfoList)
                {
                    if (userPlot.ItemList != null)
                    {
                        userPlot.ItemList.Add(item);
                    }
                }
            }
            return itemList;
        }
Beispiel #6
0
 /// <summary>
 /// 天地劫获取灵件
 /// </summary>
 /// <param name="userInfo"></param>
 /// <param name="itemList"></param>
 /// <param name="npcInfo"></param>
 /// <param name="chatService"></param>
 private static void GetKalpaplotSparePart(GameUser userInfo, CacheList<PrizeItemInfo> itemList, PlotNPCInfo npcInfo, TjxChatService chatService)
 {
     if (npcInfo != null && RandomUtils.IsHit(npcInfo.SparePartProbability))
     {
         SparePartInfo partInfo = new ConfigCacheSet<SparePartInfo>().FindKey(npcInfo.SparePartID);
         if (partInfo != null && SparePartInfo.IsExist(npcInfo.SparePartID))
         {
             UserSparePart sparePart = UserSparePart.GetRandom(npcInfo.SparePartID);
             if (sparePart != null)
             {
                 PrizeItemInfo itemInfo = itemList.Find(m => m.ItemID == npcInfo.SparePartID);
                 if (itemInfo == null)
                 {
                     itemInfo = new PrizeItemInfo
                     {
                         Type = 1,
                         ItemID = npcInfo.SparePartID,
                         Num = 1
                     };
                     itemList.Add(itemInfo);
                 }
                 else
                 {
                     itemInfo.Num += 1;
                 }
                 if (UserHelper.AddSparePart(userInfo, sparePart))
                 {
                     //userInfo.Update();
                 }
                 else
                 {
                     //掉落灵件
                     chatService.SystemSendWhisper(userInfo, string.Format(LanguageManager.GetLang().St4303_SparePartFalling, partInfo.Name));
                 }
             }
         }
     }
 }
Beispiel #7
0
 /// <summary>
 /// 天地劫获取附魔符
 /// </summary>
 /// <param name="userInfo"></param>
 /// <param name="itemList"></param>
 /// <param name="npcInfo"></param>
 /// <param name="chatService"></param>
 private static void GetKalpaplotEnchant(GameUser userInfo, CacheList<PrizeItemInfo> itemList, int plotID)
 {
     EnchantInfo enchantInfo = GetPrizeEnchant(userInfo.UserID, plotID);
     if (enchantInfo == null || enchantInfo.EnchantID == 0)
         return;
     PrizeItemInfo itemInfo = itemList.Find(m => m.ItemID == enchantInfo.EnchantID);
     if (itemInfo == null)
     {
         itemInfo = new PrizeItemInfo
                        {
                            Type = 2,
                            ItemID = enchantInfo.EnchantID,
                            Num = 1
                        };
         itemList.Add(itemInfo);
     }
     else
     {
         itemInfo.Num += 1;
     }
 }
Beispiel #8
0
        public override bool TakeAction()
        {
            CacheList <GeneralHeritage> heritageList = new CacheList <GeneralHeritage>();
            GeneralHeritage             heritage     = new GeneralHeritage();
            UserGeneral general = new PersonalCacheStruct <UserGeneral>().FindKey(ContextUser.UserID, generalID);

            if (general == null)
            {
                return(false);
            }
            if (ContextUser.HeritageList.Count > 0)
            {
                heritageList = ContextUser.HeritageList;
                if (heritageList.Find(m => m.Type == heritageType) != null)
                {
                    heritage = heritageList.Find(m => m.Type == heritageType);
                }
            }
            if (heritageType == HeritageType.Heritage)
            {
                int             opsid     = 0;
                OpsInfo         opsInfo   = GeneralHelper.HeritageOpsInfo(opsid);
                GeneralHeritage gHeritage = heritageList.Find(m => m.Type == HeritageType.IsHeritage);
                if (opsInfo != null)
                {
                    short genlv = MathUtils.Addition(gHeritage == null ? 0.ToShort() : gHeritage.GeneralLv, 3.ToShort());
                    if (gHeritage != null && general.GeneralLv < genlv)
                    {
                        ErrorCode = LanguageManager.GetLang().ErrorCode;
                        ErrorInfo = LanguageManager.GetLang().St1418_HeritageLvLow;
                        return(false);
                    }
                    ContextUser.HeritageList.Remove(heritage);
                    heritage.GeneralID = generalID;
                    heritage.Type      = heritageType;
                    heritage.GeneralLv = MathUtils.RoundCustom(heritage.GeneralLv * opsInfo.Num).ToShort();
                    heritage.GeneralLv = general.GeneralLv;
                    heritage.PowerNum  = MathUtils.RoundCustom(heritage.PowerNum * opsInfo.Num).ToShort();
                    if (heritage.PowerNum < general.TrainingPower)
                    {
                        heritage.PowerNum = general.TrainingPower;
                    }
                    heritage.SoulNum = MathUtils.RoundCustom(heritage.SoulNum * opsInfo.Num).ToShort();
                    if (heritage.SoulNum < general.SoulNum)
                    {
                        heritage.SoulNum = general.TrainingSoul;
                    }
                    heritage.IntellectNum = MathUtils.RoundCustom(heritage.IntellectNum * opsInfo.Num).ToShort();
                    if (heritage.IntellectNum < general.IntellectNum)
                    {
                        heritage.IntellectNum = general.TrainingIntellect;
                    }
                    heritage.opsType = 1;
                    ContextUser.HeritageList.Add(heritage);
                }
            }
            else if (heritageType == HeritageType.IsHeritage)
            {
                ContextUser.HeritageList = new CacheList <GeneralHeritage>();
                heritage.GeneralID       = generalID;
                heritage.GeneralLv       = general.GeneralLv;
                heritage.Type            = heritageType;
                heritage.PowerNum        = general.TrainingPower;
                heritage.SoulNum         = general.TrainingSoul;
                heritage.IntellectNum    = general.TrainingIntellect;
                ContextUser.HeritageList.Add(heritage);
            }
            return(true);
        }
Beispiel #9
0
        /// <summary>
        /// 通關副本掉落物品
        /// </summary>
        /// <param name="userID"></param>
        /// <param name="itemProbability"></param>
        /// <param name="itemRank"></param>
        /// <returns></returns>
        private static CacheList<PrizeItemInfo> GetKalpaPrizeItems(string userID, decimal itemProbability, string itemRank, int plotID, UserPlotInfo userPlot)
        {
            var itemList = new CacheList<PrizeItemInfo>();
            PlotInfo plotInfo = new ShareCacheStruct<PlotInfo>().FindKey(plotID);
            if (plotInfo == null)
            {
                return itemList;
            }

            string[] items = itemRank.Trim().Split(new[] { ',' });
            int count = items.Length + 1;
            int[] precent = new int[count];
            int precentNum = 0;
            for (int i = 0; i < count; i++)
            {
                if (i != (count - 1))
                {
                    var itemInfo = items[i].Split('=');
                    decimal prize = itemInfo[2].ToDecimal();
                    precent[i] = (prize * 1000).ToInt();
                    precentNum = MathUtils.Addition(precentNum, precent[i]);
                }
                else
                {
                    precent[i] = (1000 - precentNum);
                }
            }

            int index = RandomUtils.GetHitIndexByTH(precent);
            if (plotInfo.PlotType != PlotType.Kalpa && index != (count - 1))
            {
                if (items.Length == 0)
                {
                    return itemList;
                }
                string[] itemArray = items[index].Split('=');
                if (itemArray.Length == 2)
                {
                    int itemId = itemArray[0].ToInt();
                    if (new ShareCacheStruct<ItemBaseInfo>().FindKey(itemId) != null)
                    {
                        PrizeItemInfo itemInfo = itemList.Find(m => m.ItemID == itemId);
                        if (itemInfo == null)
                        {
                            itemInfo = new PrizeItemInfo
                                           {
                                               Type = 0,
                                               ItemID = itemId,
                                               Num = itemArray[1].ToInt()
                                           };
                            itemList.Add(itemInfo);
                        }
                        else
                        {
                            itemInfo.Num += itemArray[1].ToInt();
                        }
                    }
                }
            }
            List<UniversalInfo> universalInfoList = new List<UniversalInfo>();
            GameUser userInfo = new PersonalCacheStruct<GameUser>().FindKey(userID);
            foreach (var itemInfo in itemList)
            {
                UserItemHelper.AddUserItem(userID, itemInfo.ItemID, itemInfo.Num, universalInfoList);
                if (userInfo != null)
                {
                    CacheList<PrizeItemInfo> prizeItemInfos = new CacheList<PrizeItemInfo>();
                    prizeItemInfos.Add(new PrizeItemInfo() { Type = 0, ItemID = itemInfo.ItemID, Num = itemInfo.Num });

                    if (prizeItemInfos.Count > 0)
                    {
                        userInfo.UserExtend.UpdateNotify(obj =>
                        {
                            userInfo.UserExtend.ItemList = prizeItemInfos;
                            return true;
                        });
                        //userInfo.Update();
                    }
                }
            }

            if (universalInfoList.Count > 0 && userPlot != null)
            {
                universalInfoList.ForEach(universalInfo =>
                {
                    userPlot.ItemList.Add(universalInfo);
                });
            }
            NoviceHelper.PlotFestivalList(userInfo, plotID); //活动集合
            GetKalpaplotEnchant(userInfo, itemList, plotID); //副本掉落附魔符
            return itemList;
        }