コード例 #1
0
ファイル: FinishBusiness.cs プロジェクト: abel/sinan
        /// <summary>
        /// 判断是否存在要求回收的物品
        /// </summary>
        /// <param name="note"></param>
        /// <param name="s"></param>
        /// <returns>true表示发生变化</returns>
        public static bool Task10004(UserNote note, Variant s)
        {
            if (s.GetIntOrDefault("Cur") == s.GetIntOrDefault("Total"))
                return false;
            if (!s.ContainsKey("GoodsID"))
                return false;

            if (s.GetIntOrDefault("Type") != 10004)
                return false;

            int m = GameConfigAccess.Instance.GetStactCount(s.GetStringOrDefault("GoodsID"));

            if (m <= 0) return false;

            PlayerEx burden = note.Player.B0;

            IList c = burden.Value.GetValue<IList>("C");
            int number = 0;
            foreach (Variant d in c)
            {
                if (d.GetStringOrDefault("G") == s.GetStringOrDefault("GoodsID"))
                {
                    number += d.GetIntOrDefault("A");
                }
            }

            if (number >= s.GetIntOrDefault("Total"))
                s["Cur"] = s.GetIntOrDefault("Total");
            else
                s["Cur"] = number;
            return true;
        }
コード例 #2
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;
         }
     }
 }
コード例 #3
0
ファイル: PlayerBusiness_Skill.cs プロジェクト: abel/sinan
        /// <summary>
        /// 学习宠物技能(御宠图鉴)
        /// </summary>
        /// <param name="variant"></param>
        public bool AddPetBook(Variant c)
        {
            string skillID = c.GetStringOrDefault("SkillID");
            if (string.IsNullOrEmpty(skillID)) return false;

            int level = c.GetIntOrDefault("SkillLev");
            var skill = m_petBook.Value.GetValueOrDefault<List<object>>(skillID);
            if (skill == null)
            {
                skill = new List<object>();
                m_petBook.Value[skillID] = skill;
            }
            if (skill.Contains(level))
            {
                return false;
            }
            int mustslevel = level - 1;
            if (mustslevel > 0 && (!skill.Contains(mustslevel)))
            {
                return false;
            }
            skill.Add(level);
            m_petBook.Save();
            this.Call(ClientCommand.UpdateActorR, new PlayerExDetail(m_petBook));
            return true;
        }
コード例 #4
0
ファイル: LimitGoods.cs プロジェクト: abel/sinan
 public static LimitGoods Create(string name, Variant v)
 {
     string goodsid = v.GetStringOrDefault("GoodsID");
     if (!string.IsNullOrEmpty(goodsid))
     {
         return new LimitGoods(name, goodsid);
     }
     return null;
 }
コード例 #5
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);
     }
 }
コード例 #6
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);
     }
 }
コード例 #7
0
ファイル: LimitOpentime.cs プロジェクト: abel/sinan
 public static LimitOpentime Create(string name, Variant v)
 {
     string openTime = v.GetStringOrDefault("OpenTime");
     var result = InitOpenTime(name, openTime);
     if (result != null && result.Count > 0)
     {
         string openTimeMsg = string.Format(TipManager.GetMessage(ClientReturn.IntoLimit6), name, openTime);
         return new LimitOpentime(result, openTimeMsg);
     }
     return null;
 }
コード例 #8
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;
     }
 }
コード例 #9
0
ファイル: FightPet.cs プロジェクト: abel/sinan
 private static string GetPetSkin(Variant v)
 {
     string skin = v.GetStringOrDefault("Skin");
     int rank = v.GetIntOrDefault("PetsRank");
     int index = skin.IndexOf('|');
     if (index >= 0)
     {
         string[] skins = skin.Split('|');
         if (rank < skins.Length)
         {
             return skins[rank];
         }
     }
     return skin + rank.ToString();
 }
コード例 #10
0
ファイル: FightAction.cs プロジェクト: abel/sinan
 public FightAction(Variant v, int fightCount)
 {
     this.ActionType = (ActionType)(v.GetIntOrDefault("fType"));
     this.Sender = v.GetStringOrDefault("handler");
     object obj;
     if (v.TryGetValueT("target", out obj))
     {
         this.Target = (obj == null ? string.Empty : obj.ToString());
     }
     if (v.TryGetValueT("parameter", out obj))
     {
         this.Parameter = (obj == null ? string.Empty : obj.ToString());
     }
     this.FightCount = fightCount;
 }
コード例 #11
0
ファイル: Goods_Equip.cs プロジェクト: abel/sinan
        /// <summary>
        /// 换装操作
        /// </summary>
        /// <param name="note"></param>
        private void Dress(UserNote note, Goods g)
        {
            //表示角色正在战斗中,客户端提交信息不进行处理
            if (note.Player.AState == ActionState.Fight)
                return;
            string goodsid = note.GetString(0);
            if (g == null)
            {
                note.Call(GoodsCommand.UseGoodsR, false, TipManager.GetMessage(GoodsReturn.NoGoodsInfo));
                return;
            }
            int check = DressLimit(note.Player, g);
            if (check != 0)
            {
                note.Call(GoodsCommand.UseGoodsR, false, TipManager.GetMessage(check));
                return;
            }
            //得到装备面板
            PlayerEx panel = note.Player.Equips;
            if (panel == null)
            {
                panel = note.Player.Value["Equips"] as PlayerEx;
                if (panel == null)
                {
                    //LogWrapper.Error("角色:" + note.Player.Name + "装被面板为空");
                    return;
                }
            }

            Variant pv = panel.Value;

            PlayerEx b = note.Player.B0;
            if (b == null)
            {
                note.Call(GoodsCommand.UseGoodsR, false, TipManager.GetMessage(GoodsReturn.EquipError));
                return;
            }

            IList c = b.Value.GetValue<IList>("C");

            string str = g.Value.GetStringOrDefault("GoodsType");
            //得到装备可以存放的位置
            GameConfig gc = GameConfigAccess.Instance.FindOneById(g.GoodsID);
            if (gc == null)
            {
                note.Call(GoodsCommand.UseGoodsR, false, TipManager.GetMessage(GoodsReturn.EquipError));
                return;
            }

            IDictionary<string, object> k = null;
            string name = string.Empty;

            switch (str)
            {

                case "111001"://武器
                    k = pv["P0"] as IDictionary<string, object>;
                    name = "P0";
                    break;
                case "111002"://头盔
                    k = pv["P5"] as IDictionary<string, object>;
                    name = "P5";
                    break;
                case "111003"://衣服
                    k = pv["P6"] as IDictionary<string, object>;
                    name = "P6";
                    break;
                case "111004"://护腕
                    IDictionary<string, object> p3 = pv["P3"] as IDictionary<string, object>;
                    IDictionary<string, object> p8 = pv["P8"] as IDictionary<string, object>;
                    if (p3.GetStringOrEmpty("E") == string.Empty)
                    {
                        k = p3;
                        name = "P3";
                    }
                    else if (p8.GetStringOrEmpty("E") == string.Empty)
                    {
                        k = p8;
                        name = "P8";
                    }
                    else if (p111004 == 0)
                    {
                        k = p3;
                        name = "P3";
                        p111004 = p111004 == 0 ? 1 : 0;
                    }
                    else
                    {
                        k = p8;
                        name = "P8";
                        p111004 = p111004 == 0 ? 1 : 0;
                    }
                    break;

                case "111005"://腰带
                    k = pv["P2"] as IDictionary<string, object>;
                    name = "P2";
                    break;
                case "111006"://鞋子
                    k = pv["P7"] as IDictionary<string, object>;
                    name = "P7";
                    break;
                case "111007"://项链
                    k = pv["P1"] as IDictionary<string, object>;
                    name = "P1";
                    break;
                case "111008"://戒子
                    IDictionary<string, object> p4 = pv["P4"] as IDictionary<string, object>;
                    IDictionary<string, object> p9 = pv["P9"] as IDictionary<string, object>;
                    if (p4.GetStringOrEmpty("E") == string.Empty)
                    {
                        k = p4;
                        name = "P4";
                    }
                    else if (p9.GetStringOrEmpty("E") == string.Empty)
                    {
                        k = p9;
                        name = "P9";
                    }
                    else if (p111008 == 0)
                    {
                        k = p4;
                        name = "P4";
                        p111008 = p111008 == 0 ? 1 : 0;
                    }
                    else
                    {
                        k = p9;
                        name = "P9";
                        p111008 = p111008 == 0 ? 1 : 0;
                    }

                    break;

                //case "111010"://坐骑
                //    k = pv["P10"] as IDictionary<string, object>;
                //    name = "P10";
                //    break;

                //case "111000"://时装
                //    k = pv["P11"] as IDictionary<string, object>;
                //    name = "P11";
                //    break;
            }

            if (k == null || name == string.Empty)
            {
                note.Call(GoodsCommand.UseGoodsR, false, TipManager.GetMessage(GoodsReturn.EquipError));
                return;
            }

            IDictionary<string, object> info = null;
            foreach (IDictionary<string, object> p in c)
            {
                if (g.ID == p.GetStringOrDefault("E"))
                {
                    //得到装备所在格子的信息
                    info = p;
                    break;
                }
            }

            if (info == null)
            {
                note.Call(GoodsCommand.UseGoodsR, false, TipManager.GetMessage(GoodsReturn.BurdenError));
                return;
            }

            string name2 = null;
            string skin = gc.UI.GetStringOrDefault("Skin");
            switch (str)
            {
                //case "111000":
                //    //时装
                //    name2 = "Coat";
                //    note.Player.Coat = skin;
                //    break;
                case "111001":
                    //武器
                    name2 = "Weapon";
                    note.Player.Weapon = skin;
                    break;
                case "111003":
                    //衣服
                    name2 = "Body";
                    note.Player.Body = skin;
                    break;
                //case "111010":
                //    //坐骑
                //    name2 = "Mount";
                //    note.Player.Mount = skin;
                //    break;
            }

            Variant tmp = new Variant();
            tmp["E"] = k["E"];
            tmp["G"] = k["G"];
            tmp["A"] = k["A"];
            tmp["S"] = k["S"];
            tmp["H"] = k["H"];
            tmp["D"] = k["D"];
            tmp["T"] = k["T"];
            //tmp["R"] = k["R"];
            //换装

            string g1 = info.GetStringOrDefault("G");
            string g2 = string.Empty;
            if (k["E"].ToString() == string.Empty)
            {
                k["E"] = info["E"];
                k["G"] = info["G"];
                k["A"] = info["A"];
                k["S"] = info["S"];
                k["H"] = info["H"];
                k["D"] = info["D"];
                k["T"] = info["T"];
                //k["R"] = info["R"];
                //更新包袱

                BurdenManager.BurdenClear(info);
            }
            else
            {
                k["E"] = info["E"];
                k["G"] = info["G"];
                k["A"] = info["A"];
                k["S"] = info["S"];
                k["H"] = info["H"];
                k["D"] = info["D"];
                k["T"] = info["T"];
                //k["R"] = info["R"];
                //note.Player.UserNote_T(k.GetStringOrDefault("G"));//表示两类道具交换,都要通知任务
                //更新包袱
                info["E"] = tmp["E"];
                info["G"] = tmp["G"];
                info["A"] = tmp["A"];
                info["S"] = tmp["S"];
                info["H"] = tmp["H"];
                info["D"] = tmp["D"];
                info["T"] = tmp["T"];
                g2 = tmp.GetStringOrDefault("G");
                //note.Player.UserNote_T(info.GetStringOrDefault("G"));
                //info["R"] = tmp["R"];
            }

            b.Save();
            note.Player.SaveClothing();
            panel.Save();
            note.Player.RefreshPlayer(name2, skin);
            note.Call(GoodsCommand.UseGoodsR, true, g.ID);
            note.Call(GoodsCommand.GetEquipPanelR, true, pv);

            note.Player.UpdateBurden();
            //通知任务
            if (!string.IsNullOrEmpty(g1))
            {
                note.Player.UpdateTaskGoods(g1);
            }
            if (!string.IsNullOrEmpty(g2))
            {
                note.Player.UpdateTaskGoods(g2);
            }
        }
コード例 #12
0
ファイル: BurdenManager.cs プロジェクト: abel/sinan
        /// <summary>
        /// 得到一种道具,判断需要多少格子
        /// </summary>
        /// <param name="Content">包袱列表</param>
        /// <param name="goodsid">道具id</param>
        /// <param name="number0">非绑定道具数量</param>
        /// <param name="number1">绑定道具数量</param>
        /// <returns>需要空格子数量</returns>
        public static int NeedSpace(IList Content, string goodsid, Variant v, int sc)
        {
            int space = 0;
            for (int isbinding = 0; isbinding <= 1; isbinding++)
            {
                //0为非绑定,1为绑定
                int number = v.GetIntOrDefault("Number" + isbinding);
                if (number <= 0)
                    continue;

                int cur = 0;//当前该物品所占的格子数
                foreach (Variant k in Content)
                {
                    if (k.GetStringOrDefault("G") != goodsid)
                        continue;
                    if (k.GetIntOrDefault("H") != isbinding)
                        continue;
                    if (v.ContainsKey("EndTime"))
                    {
                        Variant t = k.GetVariantOrDefault("T");
                        if (t == null)
                            continue;
                        if (t.GetStringOrDefault("EndTime") != v.GetStringOrDefault("EndTime"))
                            continue;
                    }
                    number += k.GetIntOrDefault("A");
                    cur++;
                }
                int m = 0;//余数
                int n = Math.DivRem(number, sc, out m);
                n = m > 0 ? n + 1 : n;
                space += (n > cur) ? (n - cur) : 0;
            }
            return space;
        }
コード例 #13
0
ファイル: BaseConfig.cs プロジェクト: abel/sinan
        public BaseConfig(Variant config)
        {
            this.BaseDirectory = AppDomain.CurrentDomain.BaseDirectory;

            this.Platform = config.GetStringOrDefault("Platform", Sinan.Entity.Platform.Tencent);
            this.DirConfig = Path.Combine(this.BaseDirectory, fixPath(config.GetStringOrDefault("DirConfig", "Config")));

            this.Crossdomain = Path.Combine(DirConfig, fixPath(config.GetStringOrDefault("Crossdomain", "crossdomain.txt")));
            this.DirBase = Path.Combine(DirConfig, fixPath(config.GetStringOrDefault("DirBase", "base")));
            this.DirGame = Path.Combine(DirConfig, fixPath(config.GetStringOrDefault("DirGame", "game")));
            this.DirDB = Path.Combine(DirConfig, fixPath(config.GetStringOrDefault("DirDB", "db")));

            this.Language = config.GetStringOrDefault("Language");
            if (!string.IsNullOrWhiteSpace(Language))
            {
                string path = Path.Combine(DirConfig, fixPath(Language));
                if (Directory.Exists(path))
                {
                    this.DirBase = path;
                }
            }

            this.DirPlugin = Path.Combine(BaseDirectory, fixPath(config.GetStringOrDefault("DirPlugin", "Plugins")));
            this.Log4Config = Path.Combine(BaseDirectory, fixPath(config.GetStringOrDefault("Log4Config", "log4net.config")));

            this.DbBase = config.GetStringOrDefault("DbBase");
            this.DbLog = config.GetStringOrDefault("DbLog");
            this.DbPlayer = config.GetStringOrDefault("DbPlayer");

            string epGame = config.GetStringOrDefault("EpGame");
            this.EpGame = CreateEndPoint(epGame);

            string epGM = config.GetStringOrDefault("EpGM");
            this.EpGM = CreateEndPoint(epGM);

            string epGMM = config.GetStringOrDefault("EpGMM");
            this.EpGMM = CreateEndPoint(epGMM);

            string epShip = config.GetStringOrDefault("EpShip");
            this.EpShip = CreateEndPoint(epShip);

            this.MaxClient = config.GetIntOrDefault("MaxClient", 500);
            this.SendQueueSize = config.GetIntOrDefault("SendQueueSize", 100);
            this.MaxLevel = config.GetIntOrDefault("MaxLevel", 100);
            this.MaxNameLen = config.GetIntOrDefault("MaxNameLen", 16);

            this.Zoneid = config.GetIntOrDefault("Zoneid");
            this.ZoneEpoch = config.GetUtcTimeOrDefault("ZoneEpoch");

            this.DesKey = config.GetStringOrDefault("DESKey");
            this.LoginKey = config.GetStringOrDefault("LoginKey") ?? config.GetStringOrDefault("MD5Key");
            this.RechargeKey = config.GetStringOrDefault("RechargeKey");
            this.GMKey = config.GetStringOrEmpty("GMKey");
            this.ReportSIP = config.GetStringOrDefault("ReportSIP");

            this.WebAddress = config.GetStringOrDefault("WebAddress");

            this.FreeCoin = config.GetBooleanOrDefault("FreeCoin", false);
        }
コード例 #14
0
ファイル: FinishBusiness.cs プロジェクト: abel/sinan
 /// <summary>
 /// 检查物品是否存在
 /// </summary>
 /// <param name="note"></param>
 /// <param name="s"></param>
 public static void TaskFinish10003(UserNote note, Variant s)
 {
     PlayerEx b0 = note.Player.B0;
     IList c = b0.Value.GetValue<IList>("C");
     int num = BurdenManager.BurdenGoodsCount(c, s.GetStringOrDefault("GoodsID"));
     s["Cur"] = Math.Min(s.GetIntOrDefault("Total"), num);
 }
コード例 #15
0
ファイル: FinishBusiness.cs プロジェクト: abel/sinan
        /// <summary>
        /// 接收任务时发方道具
        /// </summary>
        /// <param name="note"></param>
        /// <param name="s"></param>
        public static bool TaskFinish10010(UserNote note, Variant s)
        {
            if (s.GetIntOrDefault("Cur") >= s.GetIntOrDefault("Total"))
                return true;

            Dictionary<string, Variant> dic = new Dictionary<string, Variant>();
            Variant v = new Variant();
            v.Add("Number1", s.GetIntOrDefault("Total"));
            dic.Add(s.GetStringOrDefault("GoodsID"), v);
            if (BurdenManager.IsFullBurden(note.Player.B0, dic))
                return false;
            note.Player.AddGoods(dic, GoodsSource.TaskFinish10010);
            s["Cur"] = s.GetIntOrDefault("Total");
            return true;
        }
コード例 #16
0
ファイル: PlayerBusiness_Buffer.cs プロジェクト: abel/sinan
 public bool SetFightPro(Variant v, int number = 1)
 {
     string name = v.GetStringOrDefault("ProType");
     if (name == "WG" || name == "MG" || name == "MF" || name == "WF" || name == "CP")
     {
         int a = v.GetIntOrDefault("A");
         int second = v.GetIntOrDefault("S") * number;
         if (a > 0 && second > 0)
         {
             SetFightPro(name, a, second);
             return true;
         }
     }
     return false;
 }
コード例 #17
0
ファイル: ManageBusiness.cs プロジェクト: abel/sinan
        /// <summary>
        /// GM卸装
        /// </summary>
        /// <param name="player"></param>
        /// <param name="v"></param>
        private static void GMUninstall(PlayerBusiness player, Variant v)
        {
            Goods g = GoodsAccess.Instance.GetGoodsByID(v.GetStringOrDefault("E"), player.ID);
            if (g != null)
            {
                string goodsType = g.Value.GetStringOrDefault("GoodsType");
                Variant shengTi = RoleManager.Instance.GetAllRoleConfig(player.RoleID);
                string name = string.Empty;
                string value = string.Empty;
                bool ischange = false;
                switch (goodsType)
                {
                    case "111000":
                        //时装
                        name = "Coat";
                        value = shengTi.GetStringOrDefault("Coat");
                        player.Coat = value;
                        ischange = true;
                        break;
                    case "111001":
                        //武器
                        name = "Weapon";
                        value = shengTi.GetStringOrDefault("Weapon");
                        player.Weapon = value;
                        ischange = true;
                        break;
                    case "111003":
                        //衣服
                        name = "Body";
                        value = shengTi.GetStringOrDefault("Body");
                        player.Body = value;
                        ischange = true;
                        break;
                    case "111010":
                        //坐骑
                        name = "Mount";
                        value = shengTi.GetStringOrDefault("Mount");
                        player.Mount = value;
                        ischange = true;
                        break;
                }

                if (ischange)
                {
                    player.SaveClothing();
                }
                player.RefreshPlayer(name, value);
            }
            player.Call(GoodsCommand.UninstallR, true, g.GoodsID);
        }
コード例 #18
0
ファイル: FamilyBusiness.cs プロジェクト: abel/sinan
        /// <summary>
        /// 申请入族
        /// </summary>
        /// <param name="note"></param>
        public static void FamilyApply(UserNote note)
        {
            PlayerEx familyEx = note.Player.Family;
            if (familyEx == null)
            {
                note.Call(FamilyCommand.FamilyApplyR, false, TipManager.GetMessage(FamilyReturn.FamilyError));
                return;
            }
            if (familyEx == null || familyEx.Value.GetStringOrDefault("FamilyID") != string.Empty)
            {
                note.Call(FamilyCommand.FamilyApplyR, false, TipManager.GetMessage(FamilyReturn.FamilyExist));
                return;
            }

            if (familyEx.Value.GetStringOrDefault("FreezeDate") != string.Empty)
            {
                DateTime FreezeDate = familyEx.Value.GetDateTimeOrDefault("FreezeDate");
                //if ((DateTime.TryParse(familyEx.Value.GetStringOrDefault("FreezeDate"), out FreezeDate)))
                //{
                if (FreezeDate.ToLocalTime() > DateTime.Now)
                {
                    note.Call(FamilyCommand.FamilyCreateR, false, string.Format(TipManager.GetMessage(FamilyReturn.FreezeDate), FreezeDate.ToLocalTime().ToString()));
                    return;
                }
                //}
            }

            //申请的家族
            string familyid = note.GetString(0);

            Family family = FamilyAccess.Instance.FindOneById(familyid);
            if (family == null)
            {
                note.Call(FamilyCommand.FamilyApplyR, false, TipManager.GetMessage(FamilyReturn.NoFamily));
                return;
            }

            int ApplyCount = 0;//当前申请入族次数
            foreach (Variant d in applyList.Values)
            {
                if (d.GetStringOrDefault("ID") == note.PlayerID) ApplyCount++;
            }

            if (ApplyCount >= 10)
            {
                note.Call(FamilyCommand.FamilyApplyR, false, TipManager.GetMessage(FamilyReturn.InApplyLimit));
                return;
            }

            FamilyExpired();

            IList Persons = family.Value.GetValue<IList>("Persons");
            Variant dy = FamilyBase.FamilyCount(family.Value.GetIntOrDefault("Level"));
            //家族人数达到上限,不能再申请
            if (Persons.Count >= dy.GetIntOrDefault("Persons"))
            {
                note.Call(FamilyCommand.FamilyApplyR, false, TipManager.GetMessage(FamilyReturn.PersonsLimit));
                return;
            }

            string appid = family.ID + "," + note.PlayerID;
            if (applyList.ContainsKey(appid))
            {
                Variant v = applyList[appid];
                if (v.GetDateTimeOrDefault("DateTime") > DateTime.UtcNow)
                {
                    note.Call(FamilyCommand.FamilyApplyR, false, TipManager.GetMessage(FamilyReturn.IsApply));
                    return;
                }
                applyList.Remove(appid);

            }

            Variant t = new Variant();
            t.Add("DateTime", DateTime.UtcNow.AddHours(1));
            t.Add("SoleID", appid);
            t.Add("ID", note.PlayerID);
            t.Add("Name", note.Player.Name);
            t.Add("FamilyID", family.ID);
            t.Add("FamilyName", family.Name);
            if (!applyList.ContainsKey(appid))
                applyList.Add(appid, t);

            Variant tmp = new Variant();
            tmp.Add("ID", t.GetStringOrDefault("SoleID"));
            tmp.Add("Message", string.Format(TipManager.GetMessage(FamilyReturn.ApplyFamilySuccess), note.Player.Name, family.Name));

            foreach (Variant d in Persons)
            {
                if (d.GetIntOrDefault("RoleID") == 2)
                    continue;
                PlayerBusiness pb = PlayersProxy.FindPlayerByID(d.GetStringOrDefault("PlayerID"));

                if (pb != null && pb.Online)
                {
                    pb.Call(FamilyCommand.FamilyApplyR, true, tmp);
                }
            }
        }
コード例 #19
0
ファイル: FinishBusiness.cs プロジェクト: abel/sinan
 /// <summary>
 /// 接收任务时玩家等级判断
 /// </summary>
 /// <param name="note"></param>
 /// <param name="s"></param>
 /// <returns></returns>
 public static bool TaskFinish30001(UserNote note, Variant s)
 {
     //接收任务时候的等级限制
     if (s.GetStringOrDefault("Type") == "30001")
     {
         if (note.Player.Level < s.GetIntOrDefault("Total"))
         {
             note.Call(TaskCommand.UpdateTaskR, false, TipManager.GetMessage(TaskReturn.TaskRevNoLevel));
             return false;
         }
         s["Cur"] = s.GetIntOrDefault("Total");
     }
     return true;
 }
コード例 #20
0
ファイル: FinishBusiness.cs プロジェクト: abel/sinan
        /// <summary>
        /// 对话过程中回收道具,
        /// 回收成功表示任务完成条件达成
        /// </summary>
        /// <param name="note"></param>
        /// <param name="s"></param>
        public static void TaskFinish10006(UserNote note, Variant s)
        {
            string sceneid = s.GetStringOrDefault("SceneID");
            string goodsid = s.GetStringOrDefault("GoodsID");
            if (sceneid == null || goodsid == null)
                return;

            if (sceneid != note.Player.SceneID)
                return;

            int total = s.GetIntOrDefault("Total");
            if (note.Player.RemoveGoods(goodsid, total, GoodsSource.TaskFinish10006))
            {
                s["Cur"] = s.GetIntOrDefault("Total");
                note.Player.UpdateBurden();
            }
        }
コード例 #21
0
ファイル: GoodsUse.cs プロジェクト: abel/sinan
        /// <summary>
        /// 物品使用时间限制
        /// </summary>
        /// <param name="player"></param>
        /// <returns></returns>
        private static int DateLimit(PlayerBusiness player, Variant p)
        {
            Variant v = BurdenManager.BurdenPlace(player.B0, p.GetIntOrDefault("P"));
            if (v == null)
            {
                return GoodsReturn.DateLimit1;
            }
            string goodsid0 = p.GetStringOrDefault("E");
            string goodsid1 = v.GetStringOrDefault("E");
            if (string.IsNullOrEmpty(goodsid1))
            {
                return GoodsReturn.DateLimit2;
            }
            if (string.IsNullOrEmpty(goodsid0))
            {
                return GoodsReturn.DateLimit3;
            }
            if (goodsid0 != goodsid1)
            {
                return GoodsReturn.DateLimit4;
            }

            if (v.ContainsKey("T"))
            {
                //判断物品是否过期
                Variant t = v["T"] as Variant;
                if (t != null && t.ContainsKey("EndTime"))
                {
                    if (t.GetDateTimeOrDefault("EndTime") <= DateTime.UtcNow)
                    {
                        return GoodsReturn.DateLimit5;
                    }
                }
            }
            return 0;
        }
コード例 #22
0
ファイル: GoodsUse.cs プロジェクト: abel/sinan
 /// <summary>
 /// 角色限制
 /// </summary>
 /// <param name="player"></param>
 /// <param name="limit"></param>
 /// <returns></returns>
 private static int CheckRole(Player player, Variant limit)
 {
     if (limit.ContainsKey("RoleID"))
     {
         string RoleID = limit.GetStringOrDefault("RoleID");
         if (RoleID != "0" && RoleID != player.RoleID)
         {
             return GoodsReturn.NoRoleID;
         }
     }
     return 0;
 }
コード例 #23
0
ファイル: FamilyBusiness.cs プロジェクト: abel/sinan
        /// <summary>
        /// 邀请入家族
        /// </summary>
        /// <param name="note"></param>
        public static void FamilyInvite(UserNote note)
        {
            //被邀请的玩家
            string playerid = note.GetString(0);
            PlayerEx family = note.Player.Family;

            if (family.Value.GetStringOrDefault("FamilyID") == string.Empty || family.Value.GetStringOrDefault("FamilyID") == null)
            {
                note.Call(FamilyCommand.FamilyInviteR, false, TipManager.GetMessage(FamilyReturn.NoAddFamily));
                return;
            }
            //副簇长,簇长
            if (family.Value.GetIntOrDefault("FamilyRolueID") > 1 || family.Value.GetIntOrDefault("FamilyRolueID") < 0)
            {
                note.Call(FamilyCommand.FamilyInviteR, false, TipManager.GetMessage(FamilyReturn.NoPower));
                return;
            }
            Family model = FamilyAccess.Instance.FindOneById(family.Value.GetStringOrDefault("FamilyID"));
            if (model == null)
            {
                note.Call(FamilyCommand.FamilyInviteR, false, TipManager.GetMessage(FamilyReturn.FamilyError));
                return;
            }
            IList Persons = model.Value.GetValue<IList>("Persons");
            //表示已经存在
            if (FamilyBase.IsExist(Persons, playerid))
            {
                note.Call(FamilyCommand.FamilyInviteR, false, TipManager.GetMessage(FamilyReturn.FamilyExist));
                return;
            }
            Variant dy = FamilyBase.FamilyCount(model.Value.GetIntOrDefault("Level"));
            //家族人数达到上限,不能再邀请
            if (Persons.Count >= dy.GetIntOrDefault("Persons"))
            {
                note.Call(FamilyCommand.FamilyInviteR, false, TipManager.GetMessage(FamilyReturn.PersonsLimit));
                return;
            }

            PlayerBusiness OnLineBusiness = PlayersProxy.FindPlayerByID(playerid);
            if (OnLineBusiness == null)
            {
                //邀请入族
                //note.Call(FamilyCommand.FamilyInviteR, false, TipManager.GetMessage(FamilyReturn.FamilyExist));
                return;
            }

            PlayerEx player = OnLineBusiness.Family;
            if (player == null)
            {
                note.Call(FamilyCommand.FamilyInviteR, false, TipManager.GetMessage(FamilyReturn.FamilyError));
                return;
            }
            if (player.Value.GetStringOrDefault("FamilyID") != string.Empty)
            {
                note.Call(FamilyCommand.FamilyInviteR, false, TipManager.GetMessage(FamilyReturn.FamilyExist));
                return;
            }

            if (family.Value.GetStringOrDefault("FreezeDate") != string.Empty)
            {
                DateTime FreezeDate;
                //被邀请的玩家还处于冻结期
                if (DateTime.TryParse(player.Value.GetStringOrDefault("FreezeDate"), out FreezeDate))
                {
                    note.Call(FamilyCommand.FamilyInviteR, false, string.Format(TipManager.GetMessage(FamilyReturn.FreezeDate), FreezeDate.ToLocalTime().ToString()));
                    return;
                }
            }

            string invid = family.Value.GetStringOrDefault("FamilyID") + "," + playerid;
            if (inviteList.ContainsKey(invid))
            {
                Variant v = inviteList[invid] as Variant;

                if (DateTime.Parse(v.GetStringOrDefault("DateTime")) > DateTime.UtcNow)
                {
                    //表示已经邀请还没有过期
                    note.Call(FamilyCommand.FamilyInviteR, false, TipManager.GetMessage(FamilyReturn.IsInvite));
                    return;
                }
                inviteList.Remove(invid);
            }

            Variant t = new Variant();
            t.Add("SoleID", invid);
            t.Add("ID", note.PlayerID);
            t.Add("Name", note.Player.Name);
            t.Add("FamliyID", family.PlayerID);
            t.Add("FamliyName", family.Name);
            t.Add("DateTime", DateTime.UtcNow.AddHours(1));

            inviteList.Add(invid, t);
            Variant tmp = new Variant();
            tmp.Add("ID", t.GetStringOrDefault("SoleID"));
            tmp.Add("Message", string.Format(TipManager.GetMessage(FamilyReturn.InviteFamilySuccess), note.Player.Name, family.Name));

            // "【" + t["Name"].ToString() + "】邀请你加入家族【" + t["FamliyName"].ToString() + "】");
            if (OnLineBusiness.Online)
            {
                //邀请入族
                OnLineBusiness.Call(FamilyCommand.FamilyInviteR, true, tmp);
            }
        }
コード例 #24
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;
        }
コード例 #25
0
ファイル: FinishBusiness.cs プロジェクト: abel/sinan
        /// <summary>
        /// 打指定的怪得到指定的物品给指定的NPC
        /// </summary>
        /// <param name="note">角色对象</param>
        /// <param name="s"></param>
        public static bool TaskFinish10003(UserNote note, Variant s, int ApcCount)
        {
            int m = GameConfigAccess.Instance.GetStactCount(s.GetStringOrDefault("GoodsID"));
            if (m <= 0) return false;
            int Lv = s.GetIntOrDefault("GetGoodsLv");
            PlayerEx burden = note.Player.B0;
            IList c = burden.Value.GetValue<IList>("C");

            bool ischange = false;
            for (int i = 0; i < ApcCount; i++)
            {
                int total = s.GetIntOrDefault("Total");
                int cur = s.GetIntOrDefault("Cur");
                if (total <= cur)
                    continue;

                if (NumberRandom.Next(1, 101) > Lv)
                    continue;

                Dictionary<string, Variant> dic = new Dictionary<string, Variant>();
                Variant v = new Variant();
                v.Add("Number1", 1);
                string goodsid = s.GetStringOrDefault("GoodsID");
                dic.Add(goodsid, v);
                if (BurdenManager.IsFullBurden(burden, dic))
                {
                    Variant t = GoodsAccess.Instance.LiaoTianList(TipManager.GetMessage(BurdenReturn.BurdenFull));
                    note.Call(ClientCommand.SendMsgToAllPlayerR, string.Empty, t);
                    break;
                }
                note.Player.AddGoods(dic, GoodsSource.TaskFinish10003);

                if (dic.Count > 0)
                {
                    note.Player.AwardGoods.SetOrInc(goodsid, 1);
                }
                int number = BurdenManager.BurdenGoodsCount(c, goodsid);

                s["Cur"] = number >= total ? total : number;
                burden.Save();
                ischange = true;
            }
            return ischange;
        }
コード例 #26
0
ファイル: ManageAuction.cs プロジェクト: abel/sinan
        /// <summary>
        /// GM邮件发送
        /// </summary>
        /// <param name="note"></param>
        /// <returns></returns>
        public static object GMEmailSend(Notification note)
        {
            string title = note.GetString(0);
            string content = note.GetString(1);
            //int score = note.GetInt32(2);
            IList goods = note[2] as IList;
            if (goods.Count > 5)
            {
                return new object[] { false };
            }

            List<Variant> goodsList = new List<Variant>();
            foreach (Variant info in goods)
            {
                Variant v = new Variant();
                v["E"] = info.GetStringOrDefault("GoodsID");
                v["G"] = info.GetStringOrDefault("GoodsID");
                v["A"] = info.GetIntOrDefault("Number");
                v["H"] = info.GetStringOrDefault("IsBinding");
                goodsList.Add(v);
            }

            IList ms = note[3] as IList;
            foreach (Variant v in ms)
            {
                string playerid = v.GetStringOrDefault("_id");
                string name = v.GetStringOrDefault("Name");
                int reTime = Convert.ToInt32(TipManager.GetMessage(EmailReturn.HameDay));

                if (EmailAccess.Instance.SendEmail(title, TipManager.GetMessage(PetsReturn.StealPet12), playerid, name, content, string.Empty, goodsList, reTime))
                {
                    PlayerBusiness pb;
                    if (PlayersProxy.TryGetPlayerByID(Convert.ToInt32(playerid, 16), out pb))
                    {
                        if (pb != null && pb.Online)
                        {
                            pb.Call(EmailCommand.NewEmailTotalR, EmailAccess.Instance.NewTotal(pb.ID));
                        }
                    }
                }
            }
            return new object[] { true };
        }
コード例 #27
0
ファイル: SceneBusiness.cs プロジェクト: abel/sinan
 /// <summary>
 /// 获取目的地
 /// </summary>
 /// <param name="point"></param>
 static Destination InitDestination(Variant point)
 {
     if (point != null)
     {
         string sceneB = point.GetStringOrDefault("SceneB");
         if (!string.IsNullOrEmpty(sceneB))
         {
             return new Destination(
                 sceneB,
                 point.GetIntOrDefault("X"),
                 point.GetIntOrDefault("Y"));
         }
     }
     return null;
 }
コード例 #28
0
ファイル: FinishBusiness.cs プロジェクト: abel/sinan
        /// <summary>
        /// 采集物品
        /// </summary>
        /// <param name="note"></param>
        /// <param name="s"></param>
        public static bool TaskFinish10009(UserNote note, Variant s, string goodsid)
        {
            if (note.Player.SceneID != s.GetStringOrDefault("SceneID"))
            {
                note.Call(TaskCommand.TaskCollectR, false, TipManager.GetMessage(TaskReturn.CollectSceneError));
                return true;
            }
            PlayerEx burden = note.Player.B0;
            string GoodsID = s.GetStringOrDefault("GoodsID");
            if (goodsid != GoodsID)
                return false;
            int Total = s.GetIntOrDefault("Total");
            int Cur = s.GetIntOrDefault("Cur");
            if (Total == Cur)
                return false;
            //产生道具数量
            int GetGoodsLv = s.GetIntOrDefault("GetGoodsLv");
            GetGoodsLv = GetGoodsLv > (Total - Cur) ? (Total - Cur) : GetGoodsLv;
            Dictionary<string, Variant> dic = new Dictionary<string, Variant>();
            Variant v = new Variant();
            v.Add("Number1", GetGoodsLv);
            dic.Add(GoodsID, v);
            if (BurdenManager.IsFullBurden(burden, dic))
            {
                note.Call(TaskCommand.TaskCollectR, false, TipManager.GetMessage(TaskReturn.BurdenFull));
                return true;
            }

            s["Cur"] = Cur + GetGoodsLv;
            note.Player.AddGoods(dic, GoodsSource.TaskFinish10009);
            return false;
        }
コード例 #29
0
ファイル: Player_Variant.cs プロジェクト: abel/sinan
 /// <summary>
 /// 设置降生信息
 /// </summary>
 public void SetBirthInfo(Variant d)
 {
     this.Coin = d.GetInt64OrDefault("Coin");
     this.Score = d.GetInt64OrDefault("Score");
     this.Bond = d.GetInt64OrDefault("Bond");
     this.SceneID = d.GetStringOrDefault("SceneID");
     this.X = d.GetIntOrDefault("X");
     this.Y = d.GetIntOrDefault("Y");
     this.Body = d.GetStringOrDefault("Body");
     this.Weapon = d.GetStringOrDefault("Weapon");
     this.Mount = d.GetStringOrDefault("Mount");
     this.Coat = d.GetStringOrDefault("Coat");
     this.IsCoat = d.GetBooleanOrDefault("IsCoat");
 }
コード例 #30
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));
            }
        }