コード例 #1
0
ファイル: APC.cs プロジェクト: abel/sinan
 public Apc(Variant config)
 {
     ID = config.GetStringOrDefault("_id");
     this.Name = config.GetStringOrDefault("Name");
     Name = config.GetStringOrDefault("Name");
     m_value = config.GetVariantOrDefault("Value");
     m_life = new PlayerProperty();
     if (m_value != null)
     {
         m_life.Add(m_value);
         this.Level = m_value.GetIntOrDefault("Level");
     }
     this.ApcType = FighterType.APC;
     Variant ui = config.GetVariantOrDefault("UI");
     if (ui != null)
     {
         this.Skin = ui.GetStringOrDefault("Skin");
         string apcType = ui.GetStringOrDefault("Type");
         if (apcType == "BB")
         {
             this.ApcType = FighterType.BB;
         }
         else if (apcType == "Boss")
         {
             this.ApcType = FighterType.Boss;
         }
     }
 }
コード例 #2
0
ファイル: HideAPC.cs プロジェクト: abel/sinan
 public HideApc(Variant config)
     : base(config)
 {
     ID = config.GetStringOrDefault("_id");
     Variant v = config.GetVariantOrDefault("Value");
     if (v != null)
     {
         SceneID = v.GetStringOrDefault("SceneID");
         Range = RangeHelper.NewRectangle(v["Range"] as Variant, true);
     }
 }
コード例 #3
0
ファイル: Box.cs プロジェクト: abel/sinan
 public Box(Variant config)
 {
     ID = config.GetStringOrDefault("_id");
     Name = config.GetStringOrDefault("Name");
     m_value = config.GetVariantOrDefault("Value");
     if (m_value != null)
     {
         this.SceneID = m_value.GetStringOrDefault("SceneID");
         this.GoodsID = m_value.GetStringOrDefault("GoodsID");
         this.OpenMS = m_value.GetIntOrDefault("OpenMS");
         this.GrowSecond = m_value.GetIntOrDefault("GrowSecond");
         this.MaxOpen = m_value.GetIntOrDefault("MaxOpen");
         m_range = RangeHelper.NewRectangle(m_value.GetVariantOrDefault("Range"), true);
     }
     Variant ui = config.GetVariantOrDefault("UI");
     if (ui != null)
     {
         this.Skin = ui.GetStringOrDefault("Skin");
     }
     if (this.GrowSecond <= 0)
     {
         this.GrowSecond = 30;
     }
 }
コード例 #4
0
ファイル: ScenePin.cs プロジェクト: abel/sinan
 public ScenePin(Variant gc)
 {
     _id = gc.GetStringOrDefault("_id");
     _autoPath = (gc.GetStringOrDefault("SubType") == "4");
     Variant v = gc.GetVariantOrDefault("Value");
     if (v != null)
     {
         _sceneA = v.GetStringOrDefault("SceneID");
         _x = v.GetIntOrDefault("X");
         _y = v.GetIntOrDefault("Y");
         m_destination = new Destination(
             v.GetStringOrDefault("SceneB"),
             v.GetIntOrDefault("BX"),
             v.GetIntOrDefault("BY")
             );
         const int s = 4;
         m_range = new Rectangle(_x - s, _y - s, 2 * s, 2 * s);
     }
 }
コード例 #5
0
ファイル: PetProperty.cs プロジェクト: abel/sinan
        public static PlayerProperty CreatePlayerProperty(Variant v)
        {
            PlayerProperty life = new PlayerProperty();

            life.LiLiang = v.GetIntOrDefault("LiLiang");
            life.TiZhi = v.GetIntOrDefault("TiZhi");
            life.ZhiLi = v.GetIntOrDefault("ZhiLi");
            life.JingShen = v.GetIntOrDefault("JingShen");
            life.KangShangHai = v.GetIntOrDefault("KangShangHai");

            //-----------------------
            life.WuLiXiShou = v.GetDoubleOrDefault("WuLiXiShou");
            life.MoFaXiShou = v.GetDoubleOrDefault("MoFaXiShou");
            life.FanJiLv = v.GetDoubleOrDefault("FanJiLv");
            life.HeJiLv = v.GetDoubleOrDefault("HeJiLv");
            life.TaoPaoLv = v.GetDoubleOrDefault("TaoPaoLv");
            life.BaoJiShangHai = v.GetDoubleOrDefault("BaoJiShangHai");
            life.HeJiShangHai = v.GetDoubleOrDefault("HeJiShangHai");

            life.SuDu = v.GetIntOrDefault("SuDu");
            life.BaoJi = v.GetIntOrDefault("BaoJi");
            life.MingZhong = v.GetIntOrDefault("MingZhong");
            life.ShanBi = v.GetIntOrDefault("ShanBi");

            life.BaoJiLv = v.GetDoubleOrDefault("BaoJiLv");
            life.MingZhongLv = v.GetDoubleOrDefault("MingZhongLv");
            life.ShanBiLv = v.GetDoubleOrDefault("ShanBiLv");
            //----------------------------------
            life.ShengMing = v.GetVariantOrDefault("ShengMing").GetIntOrDefault("M");
            life.MoFa = v.GetVariantOrDefault("MoFa").GetIntOrDefault("M");
            life.GongJi = v.GetVariantOrDefault("GongJi").GetIntOrDefault("V");
            life.MoFaGongJi = v.GetVariantOrDefault("MoFaGongJi").GetIntOrDefault("V");
            life.FangYu = v.GetVariantOrDefault("FangYu").GetIntOrDefault("V");
            life.MoFaFangYu = v.GetVariantOrDefault("MoFaFangYu").GetIntOrDefault("V");

            return life;
        }
コード例 #6
0
ファイル: FightApc_AI.cs プロジェクト: abel/sinan
        /// <summary>
        /// 检查对象是否满足条件
        /// </summary>
        /// <param name="f"></param>
        /// <param name="condition"></param>
        /// <returns></returns>
        static bool checkCondition(FightObject f, Variant condition, int round)
        {
            Variant caseHp = condition.GetVariantOrDefault("CaseHP");
            Variant caseMp = condition.GetVariantOrDefault("CaseMP");
            IList caseBuff = condition.GetValueOrDefault<IList>("CaseBuff");
            IList caseRound = condition.GetValueOrDefault<IList>("CaseRound");
            if (caseHp != null)
            {
                double a = caseHp.GetDoubleOrDefault("A");
                double b = caseHp.GetDoubleOrDefault("B");
                if (a > 0 && a < 1) //百分比
                {
                    double test = (f.HP * 1.0) / f.Life.ShengMing;
                    if (test <= a || test > b)
                    {
                        return false;
                    }
                }
                else
                {
                    if (f.HP <= a || f.HP > b)
                    {
                        return false;
                    }
                }
            }

            if (caseMp != null)
            {
                double a = caseMp.GetDoubleOrDefault("A");
                double b = caseMp.GetDoubleOrDefault("B");
                if (a > 0 && a < 1) //百分比
                {
                    double test = (f.MP * 1.0) / f.Life.MoFa;
                    if (test <= a || test > b)
                    {
                        return false;
                    }
                }
                else
                {
                    if (f.MP <= a || f.MP > b)
                    {
                        return false;
                    }
                }
            }

            if (caseBuff != null)
            {
                bool find = false;
                foreach (var b in f.Buffers)
                {
                    if (caseBuff.Contains(b.ID))
                    {
                        find = true;
                        break;
                    }
                }
                if (!find) return false;
            }

            if (caseRound != null && caseRound.Count > 0)
            {
                return caseRound.Contains(round);
            }
            return true;
        }
コード例 #7
0
ファイル: EmailBase.cs プロジェクト: abel/sinan
        /// <summary>
        /// 邮件相关信息
        /// </summary>
        /// <param name="playerid">发件人</param>
        /// <param name="name">发件人名称</param>
        /// <param name="receiveid">接收人</param>
        /// <param name="receivename">接收者名称</param>
        /// <param name="d">邮件内容</param>
        /// <returns></returns>
        public static Variant CreateEmailValue(string playerid, string name, string receiveid, string receivename, Variant d)
        {
            Variant v = new Variant();
            v.Add("SendID", playerid);
            v.Add("SendName", name);
            v.Add("ReceiveID", receiveid);
            v.Add("ReceiveName", receivename);
            v.Add("Content", d.GetValue<object>("mailMess"));
            DateTime dt = DateTime.UtcNow;
            v.Add("UpdateDate", dt);
            //邮件有效天数
            int day = Convert.ToInt32(TipManager.GetMessage(EmailReturn.HameDay));
            v.Add("EndDate", dt.AddDays(day));

            int IsHave = 0;
            if (d.ContainsKey("moneyGoods"))
            {
                Variant money = d.GetVariantOrDefault("moneyGoods");
                if (money.ContainsKey("Coin"))
                {
                    v.Add("Coin", money.GetIntOrDefault("Coin"));
                    IsHave = money.GetIntOrDefault("Coin") > 0 ? 1 : 0;
                }
                else
                {
                    v.Add("Coin", 0);
                }
                if (money.ContainsKey("Score"))
                {
                    v.Add("Score", money.GetIntOrDefault("Score"));
                    IsHave = money.GetIntOrDefault("Score") > 0 ? 1 : 0;
                }
                else
                {
                    v.Add("Score", 0);
                }
            }
            else
            {
                v.Add("Coin", 0);
                v.Add("Score", 0);
            }

            if (d.ContainsKey("goodsList"))
            {
                List<Variant> list = new List<Variant>();
                IList goodsList = d.GetValue<IList>("goodsList");
                foreach (Variant msg in goodsList)
                {
                    GameConfig gc = GameConfigAccess.Instance.FindOneById(msg.GetStringOrDefault("E"));
                    string goodsType = string.Empty;
                    int sort = 0;
                    if (gc != null)
                    {
                        goodsType = gc.Value.GetStringOrDefault("GoodsType");
                        sort = gc.Value.GetIntOrDefault("Sort");
                    }
                    else
                    {
                        if (gc == null)
                        {
                            Goods g = GoodsAccess.Instance.FindOneById(msg.GetStringOrDefault("E"));
                            if (g != null)
                            {
                                goodsType = g.Value.GetStringOrDefault("GoodsType");
                                sort = g.Value.GetIntOrDefault("Sort");
                            }
                            else
                            {
                                if (g == null)
                                {
                                    //查询是否是宠物
                                    Pet pet = PetAccess.Instance.FindOneById(msg.GetStringOrDefault("E"));
                                    if (pet != null)
                                    {
                                        goodsType = "Pet";
                                        sort = pet.Value.GetIntOrDefault("Sort");
                                    }
                                }
                            }
                        }
                    }
                    if (goodsType == string.Empty)
                        continue;

                    Variant gs = new Variant();
                    gs.Add("SoleID", msg.GetStringOrDefault("E"));
                    gs.Add("GoodsID", msg.GetStringOrDefault("G"));
                    gs.Add("Number", msg.GetIntOrDefault("A"));
                    gs.Add("GoodsType", goodsType);
                    gs.Add("Sort", sort);

                    gs.Add("Coin", msg.GetIntOrDefault("Coin"));
                    gs.Add("Score", msg.GetIntOrDefault("Score"));

                    gs.Add("T", msg.GetVariantOrDefault("T"));
                    list.Add(gs);
                }
                v.Add("GoodsList", list);
                if (list.Count > 0)
                {
                    IsHave = 1;
                }
            }
            v.Add("IsHave", IsHave);
            return v;
        }
コード例 #8
0
ファイル: BurdenManager.cs プロジェクト: abel/sinan
        /// <summary>
        /// 得到装被附加属性
        /// </summary>
        /// <param name="affix">附加属性</param>
        /// <param name="v">产生的附加属性</param>
        public static void GetAffix(Variant affix, Variant v)
        {
            if (affix == null)
                return;
            int min = affix.GetIntOrDefault("Min");
            int max = affix.GetIntOrDefault("Max");
            if (min > max)
                return;

            Variant lift = affix.GetVariantOrDefault("Life");

            if (lift == null)
                return;

            foreach (var item in lift)
            {
                if (v.ContainsKey(item.Key))
                    continue;

                Variant tmp = (Variant)item.Value;
                if (tmp == null)
                    continue;

                int m = tmp.GetIntOrDefault("Min");
                int n = tmp.GetIntOrDefault("Max");
                double range = tmp.GetDoubleOrDefault("Range");

                if (NumberRandom.RandomHit(range))
                {
                    //表示成功
                    v.Add(item.Key, NumberRandom.Next(m, n + 1));
                    if (v.Count >= max)
                        break;
                }
            }

            if (lift.Count > min && v.Count < min)
            {
                //回调
                GetAffix(affix, v);
            }
        }
コード例 #9
0
ファイル: PartInfo.cs プロジェクト: abel/sinan
        /// <summary>
        /// 领取奖励
        /// </summary>
        /// <param name="note"></param>
        /// <param name="part">活动</param>
        private static void NowAward(UserNote note, Variant part)
        {
            int index = note.GetInt32(2);
            string soleid = note.PlayerID + part.GetStringOrDefault("ID");
            PartBase model = PartAccess.Instance.FindOneById(soleid);
            if (model == null)
            {
                model = new PartBase();
                model.ID = soleid;
                model.Name = part.GetStringOrDefault("Name");
                model.SubType = part.GetStringOrDefault("SubType");
                model.Created = DateTime.UtcNow;
                model.PlayerID = note.PlayerID;
                model.PartID = part.GetStringOrDefault("ID");
                model.Value = new Variant();
            }

            Variant v = part.GetVariantOrDefault("Value");
            if (v == null)
            {
                note.Call(PartCommand.PartExchangeR, false, TipManager.GetMessage(PartReturn.Part6));
                return;
            }
            DateTime dt = DateTime.Now;
            string name = dt.ToString("yyyyddMM");
            if (model.Value.ContainsKey(name))
            {
                note.Call(PartCommand.PartExchangeR, false, TipManager.GetMessage(PartReturn.Part5));
                return;
            }
            Variant dayaward = v.GetVariantOrDefault("DayAward");
            if (dayaward == null)
            {
                note.Call(PartCommand.PartExchangeR, false, TipManager.GetMessage(PartReturn.Part6));
                return;
            }
            Variant info = null;
            foreach (var tt in dayaward)
            {
                string[] strs = tt.Key.Split('-');
                int min = Convert.ToInt32(strs[0]);
                int max = Convert.ToInt32(strs[1]);
                if (note.Player.Level >= min && note.Player.Level <= max)
                {
                    info = tt.Value as Variant;
                    break;
                }
            }
            if (info == null)
            {
                note.Call(PartCommand.PartExchangeR, false, TipManager.GetMessage(PartReturn.Part6));
                return;
            }

            IList ls = info.GetValue<IList>(note.Player.RoleID + "" + note.Player.Sex);
            if (ls == null)
            {
                note.Call(PartCommand.PartExchangeR, false, TipManager.GetMessage(PartReturn.Part6));
                return;
            }
            Variant goods = ls[index] as Variant;

            Dictionary<string, Variant> dic = PartAccess.Instance.GetPartAward(goods);

            PlayerEx b0 = note.Player.B0;
            if (BurdenManager.IsFullBurden(b0, dic))
            {
                //包袱满不能领取
                note.Call(PartCommand.PartExchangeR, false, TipManager.GetMessage(PartReturn.Part7));
                return;
            }

            model.Value[name] = dt;
            string t = dayaward.GetStringOrDefault("T");
            string m = dayaward.GetStringOrDefault("M");
            if (model.Save())
            {
                Dictionary<string, int> gos = note.Player.AddGoods(dic, GoodsSource.Yellow);
                note.Call(PartCommand.PartExchangeR, true, TipManager.GetMessage(PartReturn.Part15));
                PartApprise(note, gos, t, m, false);
            }
            else
            {
                note.Call(PartCommand.PartExchangeR, false, TipManager.GetMessage(PartReturn.Part14));
            }
        }
コード例 #10
0
ファイル: GoodsUse.cs プロジェクト: abel/sinan
 /// <summary>
 /// 场景限制
 /// </summary>
 /// <param name="player"></param>
 /// <param name="limit"></param>
 /// <returns></returns>
 private static int CheckScene(Player player, Variant limit)
 {
     Variant sceneLimit = limit.GetVariantOrDefault("Scene");
     if (sceneLimit != null)
     {
         string needScene = sceneLimit.GetStringOrDefault("SceneID");
         if (!string.IsNullOrEmpty(needScene))
         {
             if (player.SceneID != needScene)
             {
                 return GoodsReturn.NoSex;
             }
             #region 区域限制
             //Variant r = sceneLimit.GetVariantOrDefault("P");
             //if (r != null)
             //{
             //    int x = r.GetIntOrDefault("X");
             //    int y = r.GetIntOrDefault("Y");
             //    int w = r.GetIntOrDefault("W");
             //    int h = r.GetIntOrDefault("H");
             //    if (note.Player.X < x || note.Player.Y < y || note.Player.X > x + w || note.Player.Y > y + h)
             //    {
             //         player.UseGoodsR( false, TipAccess.GetMessage(GoodsReturn.NoSex));
             //        return false;
             //    }
             //}
             #endregion
         }
     }
     return 0;
 }
コード例 #11
0
ファイル: FightPlayer.cs プロジェクト: abel/sinan
 /// <summary>
 /// 获取双倍经验系数
 /// </summary>
 /// <param name="v"></param>
 /// <returns></returns>
 protected virtual double GetDouleExp(Variant v)
 {
     if (v == null) return 0;
     Variant exp = v.GetVariantOrDefault("RExp");
     if (exp == null) return 0;
     if (exp.GetDateTimeOrDefault("T") >= DateTime.UtcNow)
     {
         return exp.GetDoubleOrDefault("A");
     }
     return 0;
 }
コード例 #12
0
ファイル: PartInfo.cs プロジェクト: abel/sinan
        /// <summary>
        /// 黄钻奖励
        /// </summary>
        /// <param name="note"></param>
        /// <param name="part"></param>
        /// <returns></returns>
        private static void Yellow(UserNote note, Variant part)
        {
            //note.Player.Yellow = 81;
            string msg = note.GetString(1);

            string id = part.GetStringOrDefault("ID");
            string name = part.GetStringOrDefault("Name");
            string subtype = part.GetStringOrDefault("SubType");

            string soleid = note.Player.UserID + id;
            PartBase model = PartAccess.Instance.FindOneById(soleid);
            if (model == null)
            {
                model = new PartBase();
                model.ID = soleid;
                model.Name = name;
                model.SubType = subtype;
                model.Created = DateTime.UtcNow;
                model.PlayerID = note.Player.UserID;
                model.PartID = id;
                model.Value = new Variant();
            }
            Variant info = model.Value;

            DateTime dt = DateTime.UtcNow;

            Variant v = part.GetVariantOrDefault("Value");
            if (v == null)
            {
                note.Call(PartCommand.PartExchangeR, false, TipManager.GetMessage(PartReturn.Part6));
                return;
            }
            Variant award = v.GetVariantOrDefault("Award");
            if (award == null)
            {
                note.Call(PartCommand.PartExchangeR, false, TipManager.GetMessage(PartReturn.Part6));
                return;
            }
            if (note.Player.Yellow <= 0)
            {
                note.Call(PartCommand.PartExchangeR, false, TipManager.GetMessage(PartReturn.Part14));
                return;
            }

            if (msg == "n")
            {
                //表示领取年费奖励
                if (note.Player.Yellow % 10 != 1)
                {
                    note.Call(PartCommand.PartExchangeR, false, TipManager.GetMessage(PartReturn.Part16));
                    return;
                }
            }
            else
            {
                //int lv = 0;
                //if (!int.TryParse(msg, out lv))
                //{
                //    note.Call(PartCommand.PartExchangeR, false, TipManager.GetMessage(PartReturn.Part11));
                //    return;
                //}
                //得到黄钻等级
                msg = (note.Player.Yellow / 10).ToString();
            }

            if (info.ContainsKey(msg))
            {
                DateTime awardTime = info.GetDateTimeOrDefault(msg);
                //表示今日已经领取
                if (awardTime.ToLocalTime().Date == dt.ToLocalTime().Date)
                {
                    note.Call(PartCommand.PartExchangeR, false, TipManager.GetMessage(PartReturn.Part5));
                    return;
                }
            }

            IList select = award.GetValue<IList>(msg);

            if (select == null)
            {
                note.Call(PartCommand.PartExchangeR, false, TipManager.GetMessage(PartReturn.Part14));
                return;
            }

            Variant goods = select[0] as Variant;

            if (goods == null)
            {
                note.Call(PartCommand.PartExchangeR, false, TipManager.GetMessage(PartReturn.Part14));
                return;
            }

            Dictionary<string, Variant> dic = PartAccess.Instance.GetPartAward(goods);
            if (dic.Count == 0)
            {
                note.Call(PartCommand.PartExchangeR, false, TipManager.GetMessage(PartReturn.Part6));
                return;
            }
            PlayerEx b0 = note.Player.B0;
            if (BurdenManager.IsFullBurden(b0, dic))
            {
                //包袱满不能领取
                note.Call(PartCommand.PartExchangeR, false, TipManager.GetMessage(PartReturn.Part7));
                return;
            }

            info[msg] = dt;
            string t = award.GetStringOrDefault("T");
            string m = award.GetStringOrDefault("M");
            if (model.Save())
            {
                Dictionary<string, int> gos = note.Player.AddGoods(dic, GoodsSource.Yellow);
                note.Call(PartCommand.PartExchangeR, true, TipManager.GetMessage(PartReturn.Part15));
                PartApprise(note, gos, t, m, false);
            }
            else
            {
                note.Call(PartCommand.PartExchangeR, false, TipManager.GetMessage(PartReturn.Part14));
            }
        }
コード例 #13
0
ファイル: PartInfo.cs プロジェクト: abel/sinan
        /// <summary>
        /// 等级排行(冠军赛),老区用户奖励
        /// </summary>
        /// <param name="note"></param>
        /// <param name="part"></param>
        private static void PlayerRank(UserNote note, Variant part)
        {
            string msg = note.GetString(1);
            int index = note.GetInt32(2);

            string rs = note.Player.RoleID + note.Player.Sex;

            string subtype = part.GetStringOrDefault("SubType");

            Variant config = part.GetVariantOrDefault("Value");
            if (config == null)
            {
                note.Call(PartCommand.PartExchangeR, false, TipManager.GetMessage(PartReturn.Part6));
                return;
            }

            Variant award = null;
            Variant tmp = null;
            int oldpid = 0;
            int ranking = 0;

            string tableName = "";
            if (subtype == PartType.LevelSupp)
            {
                //tableName = "PlayerOld";
                tableName = config.GetStringOrDefault("TableName");
                //判断是不是老服用户
                ranking = PlayerSortAccess.Instance.PlayerOld(note.Player.UserID, tableName, out oldpid);
                if (ranking == 0)
                {
                    //非老区用户不能领取该奖励
                    note.Call(PartCommand.PartExchangeR, false, TipManager.GetMessage(PartReturn.Part9));
                    return;
                }
                else if (ranking == -1)
                {
                    //该奖励已经领取,不能重复领取
                    note.Call(PartCommand.PartExchangeR, false, TipManager.GetMessage(PartReturn.Part5));
                    return;
                }
                award = config.GetVariantOrDefault("Award");
                foreach (var item in award)
                {
                    string[] strs = item.Key.Split('-');
                    int min = Convert.ToInt32(strs[0]);
                    int max = Convert.ToInt32(strs[1]);
                    if (ranking >= min && ranking <= max)
                    {
                        tmp = item.Value as Variant;
                        msg = item.Key;
                        break;
                    }
                }
            }
            else
            {
                List<string> awardType = new List<string>()
                {
                    "MonthAward",
                    "WeekAward",
                    "DayAward"
                };

                if (!awardType.Contains(msg))
                {
                    note.Call(PartCommand.PartExchangeR, false, TipManager.GetMessage(PartReturn.Part10));
                    return;
                }

                award = config.GetVariantOrDefault(msg);

                if (award == null)
                {
                    note.Call(PartCommand.PartExchangeR, false, TipManager.GetMessage(PartReturn.Part10));
                    return;
                }

                string str = PlayerSortAccess.Instance.GetTableName(msg);

                if (string.IsNullOrEmpty(str))
                {
                    note.Call(PartCommand.PartExchangeR, false, TipManager.GetMessage(PartReturn.Part10));
                    return;
                }

                tableName = "Player" + str;
                if (PlayerSortAccess.Instance.IsAward(note.Player, tableName, msg))
                {
                    //该项活动奖励已经参加
                    note.Call(PartCommand.PartExchangeR, false, TipManager.GetMessage(PartReturn.Part5));
                    return;
                }
                //得到排行
                ranking = PlayerSortAccess.Instance.GetMyRank(note.Player, tableName);
                if (ranking <= 0)
                {
                    note.Call(PartCommand.PartExchangeR, false, TipManager.GetMessage(PartReturn.Part10));
                    return;
                }

                foreach (var item in award)
                {
                    string[] strs = item.Key.Split('-');
                    int min = Convert.ToInt32(strs[0]);
                    int max = Convert.ToInt32(strs[1]);
                    if (ranking >= min && ranking <= max)
                    {
                        tmp = item.Value as Variant;
                        break;
                    }
                }
            }

            if (tmp == null)
            {
                //没有达到领励排行
                note.Call(PartCommand.PartExchangeR, false, TipManager.GetMessage(PartReturn.Part10));
                return;
            }

            IList select = tmp.GetValue<IList>(rs);
            if (select == null)
            {
                //活动配置数据不正确
                note.Call(PartCommand.PartExchangeR, false, TipManager.GetMessage(PartReturn.Part6));
                return;
            }
            Variant goods = select[index] as Variant;
            if (goods == null)
            {
                note.Call(PartCommand.PartExchangeR, false, TipManager.GetMessage(PartReturn.Part6));
                return;
            }
            Dictionary<string, Variant> dic = PartAccess.Instance.GetPartAward(goods);
            if (dic.Count == 0)
            {
                note.Call(PartCommand.PartExchangeR, false, TipManager.GetMessage(PartReturn.Part6));
                return;
            }

            if (BurdenManager.IsFullBurden(note.Player.B0, dic))
            {
                note.Call(PartCommand.PartExchangeR, false, TipManager.GetMessage(PartReturn.Part7));
                return;
            }

            //冠军排行
            if (subtype == PartType.LevelRank)
            {
                string t = award.GetStringOrDefault("T");
                string m = award.GetStringOrDefault("M");
                if (PlayerSortAccess.Instance.UpdateInfo(note.Player, tableName, msg))
                {
                    Dictionary<string, int> gos = note.Player.AddGoods(dic, GoodsSource.LevelRank);
                    note.Call(PartCommand.PartExchangeR, true, TipManager.GetMessage(PartReturn.Part15));
                    PartApprise(note, gos, t, m);
                    return;
                }
            }

            //老区用户活动
            if (subtype == PartType.LevelSupp)
            {
                string t = tmp.GetStringOrDefault("T");
                string m = tmp.GetStringOrDefault("M");
                if (PlayerSortAccess.Instance.UpdateOld(oldpid, tableName))
                {
                    Dictionary<string, int> gos = note.Player.AddGoods(dic, GoodsSource.LevelSupp);
                    note.Call(PartCommand.PartExchangeR, true, TipManager.GetMessage(PartReturn.Part15));
                    PartApprise(note, gos, t, m);
                    return;
                }
            }
            //没有达到领励条件
            note.Call(PartCommand.PartExchangeR, false, TipManager.GetMessage(PartReturn.Part13));
        }
コード例 #14
0
ファイル: PartInfo.cs プロジェクト: abel/sinan
        /// <summary>
        /// 充值奖励
        /// </summary>
        /// <param name="note"></param>
        /// <param name="part"></param>
        private static void PartAward(UserNote note, Variant part)
        {
            string msg = note.GetString(1);
            int index = note.GetInt32(2);

            string id = part.GetStringOrDefault("ID");
            string name = part.GetStringOrDefault("Name");
            string subtype = part.GetStringOrDefault("SubType");

            string soleid = note.PlayerID + id;
            //取得到活动信息
            PartBase model = PartAccess.Instance.FindOneById(soleid);
            if (model == null)
            {
                model = new PartBase();
                model.ID = note.PlayerID + id;
                model.Name = name;
                model.SubType = subtype;
                model.Created = DateTime.UtcNow;
                model.PlayerID = note.PlayerID;
                model.PartID = id;
                model.Value = new Variant();
            }
            Variant info = model.Value;
            int cur = 0;
            int num = 0;

            if (subtype == PartType.CoinAchieve || subtype == PartType.CoinSupp)
            {
                num = Convert.ToInt32(msg);
                cur = info.GetIntOrDefault("Cur");
                if (cur < num)
                {
                    //活动其间充值金额不足
                    note.Call(PartCommand.PartExchangeR, false, TipManager.GetMessage(PartReturn.Part4));
                    return;
                }

                //不能重复领取
                if (subtype == PartType.CoinAchieve)
                {
                    if (info.ContainsKey(msg))
                    {
                        //该项活动已经领取,不能重复领取
                        note.Call(PartCommand.PartExchangeR, false, TipManager.GetMessage(PartReturn.Part5));
                        return;
                    }
                }
            }

            string rs = note.Player.RoleID + note.Player.Sex;

            Variant config = part.GetVariantOrDefault("Value");
            if (config == null)
            {
                //活动配置数据不正确
                note.Call(PartCommand.PartExchangeR, false, TipManager.GetMessage(PartReturn.Part6));
                return;
            }

            Variant award = config.GetVariantOrDefault("Award");

            if (award == null)
            {
                //活动配置数据不正确
                note.Call(PartCommand.PartExchangeR, false, TipManager.GetMessage(PartReturn.Part6));
                return;
            }
            Variant tmp = null;
            //选择的奖励
            if (subtype == PartType.LevelAchieve)
            {
                if (info.Count > 0)
                {
                    //该项活动已经领取,不能重复领取
                    note.Call(PartCommand.PartExchangeR, false, TipManager.GetMessage(PartReturn.Part5));
                    return;
                }

                foreach (var item in award)
                {
                    string[] strs = item.Key.Split('-');
                    int min = Convert.ToInt32(strs[0]);
                    int max = Convert.ToInt32(strs[1]);
                    if (note.Player.Level >= min && note.Player.Level <= max)
                    {
                        tmp = item.Value as Variant;
                        break;
                    }
                }
            }
            else
            {
                tmp = award.GetVariantOrDefault(msg);
            }

            if (tmp == null)
            {
                //活动配置数据不正确
                note.Call(PartCommand.PartExchangeR, false, TipManager.GetMessage(PartReturn.Part6));
                return;
            }

            IList select = tmp.GetValue<IList>(rs);
            if (select == null)
            {
                note.Call(PartCommand.PartExchangeR, false, TipManager.GetMessage(PartReturn.Part6));
                return;
            }
            Variant goods = select[index] as Variant;
            if (goods == null)
            {
                note.Call(PartCommand.PartExchangeR, false, TipManager.GetMessage(PartReturn.Part6));
                return;
            }
            Dictionary<string, Variant> dic = PartAccess.Instance.GetPartAward(goods);
            if (dic.Count == 0)
            {
                note.Call(PartCommand.PartExchangeR, false, TipManager.GetMessage(PartReturn.Part6));
                return;
            }

            if (BurdenManager.IsFullBurden(note.Player.B0, dic))
            {
                note.Call(PartCommand.PartExchangeR, false, TipManager.GetMessage(PartReturn.Part7));
                return;
            }
            if (subtype == PartType.CoinSupp)
            {
                info.SetOrInc("Cur", -num);
                //记录兑换次数
                info.SetOrInc(msg, 1);
            }
            else
            {
                info[msg] = DateTime.UtcNow;
            }
            GoodsSource gs;
            if (subtype == PartType.CoinSupp)
            {
                gs = GoodsSource.CoinSupp;
            }
            else if (subtype == PartType.CoinAchieve)
            {
                gs = GoodsSource.CoinAchieve;
            }
            else
            {
                gs = GoodsSource.LevelAchieve;
            }

            if (model.Save())
            {
                Dictionary<string, int> gos = note.Player.AddGoods(dic, gs);
                note.Call(PartCommand.PartExchangeR, true, TipManager.GetMessage(PartReturn.Part15));
                //活动通告
                PartApprise(note, gos, tmp.GetStringOrDefault("T"), tmp.GetStringOrDefault("M"));
            }
            else
            {
                note.Call(PartCommand.PartExchangeR, false, TipManager.GetMessage(PartReturn.Part8));
            }
        }
コード例 #15
0
ファイル: FightApc_AI.cs プロジェクト: abel/sinan
        private void CreateAction(FightObject[] targetTeam, Variant v, int fightCount)
        {
            int actionType = v.GetIntOrDefault("ActionType");
            FightAction action = new FightAction((ActionType)actionType, this.ID, 0);
            action.Parameter = v.GetStringOrDefault("Parameter");
            action.SkillLev = v.GetIntOrDefault("Level", 1);

            //Target  1	自己
            //Target  2	队友n
            //Target  3	敌人n
            //Target  4	随机友方(n)
            //Target  5	随机敌人(n)
            //Target  6	血量最少的敌人(n)
            int actionTarget = v.GetIntOrDefault("ActionTarget");
            if (actionTarget <= 1)
            {
                action.Target = this.ID;
            }
            else if (actionTarget == 4 || actionTarget == 2)
            {
                int index = Sinan.Extensions.NumberRandom.Next(Team.Length);
                action.Target = Team[index].ID;
            }
            else if (actionTarget == 5 || actionTarget == 3)
            {
                int index = Sinan.Extensions.NumberRandom.Next(targetTeam.Length);
                action.Target = targetTeam[index].ID;
            }
            else if (actionTarget == 6)
            {
                int min = Int32.MaxValue;
                foreach (var target in targetTeam)
                {
                    if (target.HP > 0 && target.HP < min)
                    {
                        action.Target = target.ID;
                    }
                }
            }
            else
            {
                action.Target = string.Empty;
            }
            action.Say = NewTalk(v.GetVariantOrDefault("Talk"));
            action.FightCount = fightCount;
            this.m_action = action;
        }
コード例 #16
0
ファイル: GoodsUse.cs プロジェクト: abel/sinan
        /// <summary>
        /// 产生新的道具
        /// </summary>
        /// <param name="con"></param>
        /// <param name="libao"></param>
        /// <param name="n"></param>
        private static void GetLotteryAward(Variant con, Variant libao, int n, int h)
        {
            Variant award = libao.GetVariantOrDefault("Award");
            Dictionary<string, int> dic = new Dictionary<string, int>();
            Award.GetPackets(award, dic);
            if (dic.Count > 0)
            {
                foreach (var item in dic)
                {
                    Variant v = new Variant();
                    v.Add("G", item.Key);
                    v.Add("A", item.Value);
                    if (con.Count == n)
                    {
                        v.Add("L", 1);
                    }
                    else
                    {
                        v.Add("L", 0);
                    }
                    v.Add("H", h);

                    con.Add(con.Count.ToString(), v);
                    if (con.Count >= 12)
                        return;
                }
            }
            GetLotteryAward(con, libao, n, h);
        }
コード例 #17
0
ファイル: PartInfo.cs プロジェクト: abel/sinan
        /// <summary>
        /// 物品兑换
        /// </summary>
        /// <param name="note"></param>
        /// <param name="part"></param>
        private static void Exchange(UserNote note, Variant part)
        {
            string msg = note.GetString(1);
            int index = note.GetInt32(2);

            string id = part.GetStringOrDefault("ID");
            string name = part.GetStringOrDefault("Name");
            string subtype = part.GetStringOrDefault("SubType");

            string soleid = note.PlayerID + id;
            //取得到活动信息
            PartBase model = PartAccess.Instance.FindOneById(soleid);
            if (model == null)
            {
                model = new PartBase();
                model.ID = note.PlayerID + id;
                model.Name = name;
                model.SubType = subtype;
                model.Created = DateTime.UtcNow;
                model.PlayerID = note.PlayerID;
                model.PartID = id;
                model.Value = new Variant();
            }
            Variant info = model.Value;

            string rs = note.Player.RoleID + note.Player.Sex;

            Variant config = part.GetVariantOrDefault("Value");
            if (config == null)
            {
                //活动配置数据不正确
                note.Call(PartCommand.PartExchangeR, false, TipManager.GetMessage(PartReturn.Part6));
                return;
            }

            Variant award = config.GetVariantOrDefault("Award");

            if (award == null)
            {
                note.Call(PartCommand.PartExchangeR, false, TipManager.GetMessage(PartReturn.Part6));
                return;
            }
            Variant tmp = award.GetVariantOrDefault(msg);
            //选择的奖励

            if (tmp == null)
            {
                note.Call(PartCommand.PartExchangeR, false, TipManager.GetMessage(PartReturn.Part6));
                return;
            }

            IList select = tmp.GetValue<IList>(rs);
            if (select == null)
            {
                note.Call(PartCommand.PartExchangeR, false, TipManager.GetMessage(PartReturn.Part6));
                return;
            }
            Variant goods = select[index] as Variant;
            if (goods == null)
            {
                note.Call(PartCommand.PartExchangeR, false, TipManager.GetMessage(PartReturn.Part6));
                return;
            }
            Dictionary<string, Variant> dic = PartAccess.Instance.GetPartAward(goods);
            if (dic.Count == 0)
            {
                note.Call(PartCommand.PartExchangeR, false, TipManager.GetMessage(PartReturn.Part6));
                return;
            }
            PlayerEx b0 = note.Player.B0;
            if (BurdenManager.IsFullBurden(b0, dic))
            {
                //包袱满不能领取
                note.Call(PartCommand.PartExchangeR, false, TipManager.GetMessage(PartReturn.Part7));
                return;
            }

            string goodsid = config.GetStringOrDefault("GoodsID");
            int number = Convert.ToInt32(msg);
            int total = BurdenManager.GoodsCount(b0, goodsid);
            if (total < number)
            {
                //兑换需要的道具数量不足
                note.Call(PartCommand.PartExchangeR, false, TipManager.GetMessage(PartReturn.Part12));
                return;
            }
            if (note.Player.RemoveGoods(goodsid, number, GoodsSource.Exchange))
            {

                //总共兑换次数
                info.SetOrInc(msg, 1);
                string t = award.GetStringOrDefault("T");
                string m = award.GetStringOrDefault("M");
                if (model.Save())
                {
                    Dictionary<string, int> gos = note.Player.AddGoods(dic, GoodsSource.Exchange);
                    note.Call(PartCommand.PartExchangeR, true, TipManager.GetMessage(PartReturn.Part15));
                    PartApprise(note, gos, t, m);
                }
                else
                {
                    //没有达到兑换条件
                    note.Call(PartCommand.PartExchangeR, false, TipManager.GetMessage(PartReturn.Part13));
                }

            }
            else
            {
                note.Call(PartCommand.PartExchangeR, false, TipManager.GetMessage(PartReturn.Part12));
            }
        }