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); } } }
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; }
/// <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; }
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; }
/// <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; }
/// <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)); } } } } }
/// <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; } }
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); }
/// <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; }