示例#1
0
            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();
                }
            }
示例#2
0
 public MysteryCard(string n, string d, int p, MysteryType mt)
 {
     state        = false;
     description  = d;
     name         = n;
     _mysteryType = mt;
 }
示例#3
0
 public MysteryCard(string n, string d, int p, MysteryType mt)
 {
     description   = d;
     name          = n;
     m_power       = p;
     m_mysteryType = mt;
 }
示例#4
0
            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 + ".");
                }
            }
示例#5
0
            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);
            }
示例#6
0
        /// <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);
                }
            }
        }
示例#7
0
 /// <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;
 }
示例#8
0
 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);
         }
     }
 }
示例#9
0
        /// <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);
        }
示例#10
0
        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);
                }
            }
        }
示例#11
0
        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);
        }
示例#12
0
 public MysteryInfo(MysteryType MysteryType)
     : this()
 {
     this.MysteryType = MysteryType;
 }
示例#13
0
        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
            }
        }
示例#14
0
 public void Init(string n, string d, int p, MysteryType mt)
 {
     m_cardObject = new MysteryCard(n, d, p, mt);
 }
示例#15
0
        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
            }
        }
示例#16
0
 public MysteryInfo(MysteryType MysteryType)
     : this()
 {
     this.MysteryType = MysteryType;
 }
示例#17
0
 /// <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);
         }
     }
 }