public override void Deserialize(GenericReader reader) { base.Deserialize(reader); int version = reader.ReadInt(); m_Discoveries = new List <MysteryType>(); if (version >= 0) { m_Revealed = reader.ReadBool(); m_Completed = reader.ReadBool(); m_ResearchAdded = reader.ReadInt(); int discoveryCount = reader.ReadInt(); for (int i = 0; i < discoveryCount; ++i) { MysteryType mystery = (MysteryType)reader.ReadInt(); if (mystery != null) { m_Discoveries.Add(mystery); } } m_RevealedMysteryType = (MysteryType)reader.ReadInt(); } }
public MysteryCard(string n, string d, int p, MysteryType mt) { state = false; description = d; name = n; _mysteryType = mt; }
public MysteryCard(string n, string d, int p, MysteryType mt) { description = d; name = n; m_power = p; m_mysteryType = mt; }
public void CheckRevealMystery(Mobile from) { if (m_Discoveries.Count >= DiscoveriesRequired && m_ResearchAdded >= ResearchRequired) { int TotalValues = 0; Dictionary <MysteryType, int> DictMysteryTypes = new Dictionary <MysteryType, int>(); for (int a = 0; a < DiscoveriesRequired; a++) { MysteryType mysteryType = m_Discoveries[a]; if (DictMysteryTypes.ContainsKey(mysteryType)) { DictMysteryTypes[mysteryType]++; } else { DictMysteryTypes.Add(mysteryType, 1); } } foreach (KeyValuePair <MysteryType, int> pair in DictMysteryTypes) { TotalValues += pair.Value; } double mysteryCheck = Utility.RandomDouble(); double CumulativeAmount = 0.0; double AdditionalAmount = 0.0; //Determine Mystery foreach (KeyValuePair <MysteryType, int> pair in DictMysteryTypes) { AdditionalAmount = (double)pair.Value / (double)TotalValues; if (mysteryCheck >= CumulativeAmount && mysteryCheck < (CumulativeAmount + AdditionalAmount)) { m_RevealedMysteryType = pair.Key; } CumulativeAmount += AdditionalAmount; } from.SendSound(0x0F8); m_Revealed = true; MysteryTypeDetail mysteryTypeDetail = AncientMystery.GetMysteryDetails(m_RevealedMysteryType); from.SendMessage("You have revealed the mystery! It is " + mysteryTypeDetail.m_Name + "."); } }
public void AddDiscovery(Mobile from) { int mysteryTypeCount = Enum.GetNames(typeof(MysteryType)).Length; MysteryType mysteryType = (MysteryType)Utility.RandomMinMax(0, mysteryTypeCount - 1); MysteryTypeDetail mysteryTypeDetail = AncientMystery.GetMysteryDetails(mysteryType); m_Discoveries.Add(mysteryType); from.SendMessage("You have made a discovery towards the mystery!"); from.SendSound(0x102); CheckRevealMystery(from); }
/// <summary> /// 神秘事件更新 /// </summary> /// <param name="userID"></param> public static void UpdateRestrainExplore(string userID, MysteryType mysteryType) { UserDailyRestrain dailyRestrain = new PersonalCacheStruct <UserDailyRestrain>().FindKey(userID); if (dailyRestrain != null) { if (dailyRestrain.UserExtend == null || dailyRestrain.RefreshDate.Date != DateTime.Now.Date) { dailyRestrain.UserExtend = new DailyUserExtend(); } if (mysteryType == MysteryType.Meiritanxian) { dailyRestrain.UserExtend.ExploreNum = MathUtils.Addition(dailyRestrain.UserExtend.ExploreNum, 1); } else if (mysteryType == MysteryType.Jingjichang) { dailyRestrain.UserExtend.sportsNum = MathUtils.Addition(dailyRestrain.UserExtend.sportsNum, 1); } } }
/// <summary> /// 神秘事件剩余次数 /// </summary> /// <param name="userID"></param> /// <param name="mysteryType"></param> /// <returns></returns> public static int GetMySteryNum(string userID, MysteryType mysteryType) { int mysteryNum = 0; MysteryInfo mysteryInfo = new ConfigCacheSet<MysteryInfo>().FindKey(mysteryType); if (mysteryInfo != null) { mysteryNum = mysteryInfo.DailyNum; } UserDailyRestrain dailyRestrain = new GameDataCacheSet<UserDailyRestrain>().FindKey(userID); if (dailyRestrain != null && dailyRestrain.UserExtend != null && dailyRestrain.RefreshDate.Date == DateTime.Now.Date) { if (mysteryType == MysteryType.Meiritanxian) { mysteryNum = MathUtils.Subtraction(mysteryNum, dailyRestrain.UserExtend.ExploreNum); } else if (mysteryType == MysteryType.Jingjichang) { mysteryNum = MathUtils.Subtraction(mysteryNum, dailyRestrain.UserExtend.sportsNum); } } return mysteryNum; }
public static void IsTriggerMyStery(GameUser user, MysteryType mysteryType, out string prizecontent) { prizecontent = string.Empty; int mysteryNum = GetMySteryNum(user.UserID, mysteryType); MysteryInfo mysteryInfo = new ConfigCacheSet<MysteryInfo>().FindKey(mysteryType); if (mysteryInfo != null && mysteryNum > 0) { var randomNum = RandomUtils.GetRandom(0, 1000); if (randomNum < mysteryInfo.Probability * 1000) { CacheList<PrizeInfo> prizeInfoList = mysteryInfo.PrizeInfo; double[] probability = new double[prizeInfoList.Count]; for (int i = 0; i < prizeInfoList.Count; i++) { probability[i] = (double)prizeInfoList[i].Probability; } int index2 = RandomUtils.GetHitIndex(probability); PrizeInfo prizeInfo = prizeInfoList[index2]; prizecontent = MysteryRewardName(user, prizeInfo); UpdateRestrainExplore(user.UserID, mysteryType); } } }
/// <summary> /// 神秘事件剩余次数 /// </summary> /// <param name="userID"></param> /// <param name="mysteryType"></param> /// <returns></returns> public static int GetMySteryNum(string userID, MysteryType mysteryType) { int mysteryNum = 0; MysteryInfo mysteryInfo = new ShareCacheStruct <MysteryInfo>().FindKey(mysteryType); if (mysteryInfo != null) { mysteryNum = mysteryInfo.DailyNum; } UserDailyRestrain dailyRestrain = new PersonalCacheStruct <UserDailyRestrain>().FindKey(userID); if (dailyRestrain != null && dailyRestrain.UserExtend != null && dailyRestrain.RefreshDate.Date == DateTime.Now.Date) { if (mysteryType == MysteryType.Meiritanxian) { mysteryNum = MathUtils.Subtraction(mysteryNum, dailyRestrain.UserExtend.ExploreNum); } else if (mysteryType == MysteryType.Jingjichang) { mysteryNum = MathUtils.Subtraction(mysteryNum, dailyRestrain.UserExtend.sportsNum); } } return(mysteryNum); }
public static void IsTriggerMyStery(GameUser user, MysteryType mysteryType, out string prizecontent) { prizecontent = string.Empty; int mysteryNum = GetMySteryNum(user.UserID, mysteryType); MysteryInfo mysteryInfo = new ShareCacheStruct <MysteryInfo>().FindKey(mysteryType); if (mysteryInfo != null && mysteryNum > 0) { var randomNum = RandomUtils.GetRandom(0, 1000); if (randomNum < mysteryInfo.Probability * 1000) { CacheList <PrizeInfo> prizeInfoList = mysteryInfo.PrizeInfo; double[] probability = new double[prizeInfoList.Count]; for (int i = 0; i < prizeInfoList.Count; i++) { probability[i] = (double)prizeInfoList[i].Probability; } int index2 = RandomUtils.GetHitIndex(probability); PrizeInfo prizeInfo = prizeInfoList[index2]; prizecontent = MysteryRewardName(user, prizeInfo); UpdateRestrainExplore(user.UserID, mysteryType); } } }
public static MysteryTypeDetail GetMysteryDetails(MysteryType mysteryType) { MysteryTypeDetail mysteryTypeDetail = new MysteryTypeDetail(); switch (mysteryType) { case MysteryType.Daemon: mysteryTypeDetail.m_MysteryType = MysteryType.Daemon; mysteryTypeDetail.m_Name = "The Pact"; mysteryTypeDetail.m_StatueItemId = 13899; mysteryTypeDetail.m_StatueHue = 2500; mysteryTypeDetail.m_StatueOffsetX = 14; mysteryTypeDetail.m_StatueOffsetY = -62; mysteryTypeDetail.m_MysteryLocation = new Point3D(4644, 3654, 100); break; case MysteryType.Fountain: mysteryTypeDetail.m_MysteryType = MysteryType.Fountain; mysteryTypeDetail.m_Name = "The Collapse"; mysteryTypeDetail.m_StatueItemId = 17090; mysteryTypeDetail.m_StatueHue = 2500; mysteryTypeDetail.m_StatueOffsetX = 14; mysteryTypeDetail.m_StatueOffsetY = -40; mysteryTypeDetail.m_MysteryLocation = new Point3D(1170, 2916, 0); break; case MysteryType.Medusa: mysteryTypeDetail.m_MysteryType = MysteryType.Medusa; mysteryTypeDetail.m_Name = "The Seduction"; mysteryTypeDetail.m_StatueItemId = 16572; mysteryTypeDetail.m_StatueHue = 2500; mysteryTypeDetail.m_StatueOffsetX = 14; mysteryTypeDetail.m_StatueOffsetY = -40; mysteryTypeDetail.m_MysteryLocation = new Point3D(1128, 3452, 0); break; case MysteryType.Mongbat: mysteryTypeDetail.m_MysteryType = MysteryType.Mongbat; mysteryTypeDetail.m_Name = "The Jest"; mysteryTypeDetail.m_StatueItemId = 6483; mysteryTypeDetail.m_StatueHue = 2500; mysteryTypeDetail.m_StatueOffsetX = -7; mysteryTypeDetail.m_StatueOffsetY = -18; mysteryTypeDetail.m_MysteryLocation = new Point3D(1370, 505, 1); break; case MysteryType.Sphinx: mysteryTypeDetail.m_MysteryType = MysteryType.Sphinx; mysteryTypeDetail.m_Name = "The Enigma"; mysteryTypeDetail.m_StatueItemId = 17091; mysteryTypeDetail.m_StatueHue = 2500; mysteryTypeDetail.m_StatueOffsetX = 15; mysteryTypeDetail.m_StatueOffsetY = -35; mysteryTypeDetail.m_MysteryLocation = new Point3D(1857, 962, -1); break; case MysteryType.Vampire: mysteryTypeDetail.m_MysteryType = MysteryType.Vampire; mysteryTypeDetail.m_Name = "The Betrayal"; mysteryTypeDetail.m_StatueItemId = 17093; mysteryTypeDetail.m_StatueHue = 2500; mysteryTypeDetail.m_StatueOffsetX = 14; mysteryTypeDetail.m_StatueOffsetY = -63; mysteryTypeDetail.m_MysteryLocation = new Point3D(1467, 2511, 7); break; } return(mysteryTypeDetail); }
public MysteryInfo(MysteryType MysteryType) : this() { this.MysteryType = MysteryType; }
protected override object this[string index] { get { #region switch (index) { case "MysteryType": return(MysteryType); case "Probability": return(Probability); case "DailyNum": return(DailyNum); case "PrizeInfo": return(PrizeInfo); case "Prompt": return(Prompt); case "Broadcast": return(Broadcast); case "WinPrompt": return(_winPrompt); case "WinBroadcast": return(_winBroadcast); default: throw new ArgumentException(string.Format("MysteryInfo index[{0}] isn't exist.", index)); } #endregion } set { #region switch (index) { case "MysteryType": _MysteryType = value.ToEnum <MysteryType>(); break; case "Probability": _Probability = value.ToDecimal(); break; case "DailyNum": _DailyNum = value.ToInt(); break; case "PrizeInfo": _PrizeInfo = ConvertCustomField <CacheList <PrizeInfo> >(value, index); break; case "Prompt": _Prompt = value.ToNotNullString(); break; case "Broadcast": _Broadcast = value.ToNotNullString(); break; case "WinPrompt": _winPrompt = value.ToNotNullString(); break; case "WinBroadcast": _winBroadcast = value.ToNotNullString(); break; default: throw new ArgumentException(string.Format("MysteryInfo index[{0}] isn't exist.", index)); } #endregion } }
public void Init(string n, string d, int p, MysteryType mt) { m_cardObject = new MysteryCard(n, d, p, mt); }
protected override object this[string index] { get { #region switch (index) { case "MysteryType": return MysteryType; case "Probability": return Probability; case "DailyNum": return DailyNum; case "PrizeInfo": return PrizeInfo; case "Prompt": return Prompt; case "Broadcast": return Broadcast; case "WinPrompt": return _winPrompt; case "WinBroadcast": return _winBroadcast; default: throw new ArgumentException(string.Format("MysteryInfo index[{0}] isn't exist.", index)); } #endregion } set { #region switch (index) { case "MysteryType": _MysteryType = value.ToEnum<MysteryType>(); break; case "Probability": _Probability = value.ToDecimal(); break; case "DailyNum": _DailyNum = value.ToInt(); break; case "PrizeInfo": _PrizeInfo = ConvertCustomField<CacheList<PrizeInfo>>(value, index); break; case "Prompt": _Prompt = value.ToNotNullString(); break; case "Broadcast": _Broadcast = value.ToNotNullString(); break; case "WinPrompt": _winPrompt = value.ToNotNullString(); break; case "WinBroadcast": _winBroadcast = value.ToNotNullString(); break; default: throw new ArgumentException(string.Format("MysteryInfo index[{0}] isn't exist.", index)); } #endregion } }
/// <summary> /// 神秘事件更新 /// </summary> /// <param name="userID"></param> public static void UpdateRestrainExplore(string userID, MysteryType mysteryType) { UserDailyRestrain dailyRestrain = new GameDataCacheSet<UserDailyRestrain>().FindKey(userID); if (dailyRestrain != null) { if (dailyRestrain.UserExtend == null || dailyRestrain.RefreshDate.Date != DateTime.Now.Date) { dailyRestrain.UserExtend = new DailyUserExtend(); } if (mysteryType == MysteryType.Meiritanxian) { dailyRestrain.UserExtend.ExploreNum = MathUtils.Addition(dailyRestrain.UserExtend.ExploreNum, 1); } else if (mysteryType == MysteryType.Jingjichang) { dailyRestrain.UserExtend.sportsNum = MathUtils.Addition(dailyRestrain.UserExtend.sportsNum, 1); } } }