示例#1
0
 private void AllUseGoods(UserNote note)
 {
     //商品的使用
     Variant package = BurdenManager.BurdenPlace(note.Player.B0, note.GetInt32(0));
     if (package == null) return;
     string goodsid = package.GetStringOrDefault("E");
     if (goodsid == null) return;
     GameConfig gc = GameConfigAccess.Instance.FindOneById(goodsid);
     if (gc == null) return;
     UseGoods(note, package, gc, true);
 }
示例#2
0
        /// <summary>
        /// 进入玩家和怪的战斗
        /// </summary>
        /// <param name="note"></param>
        private void IntoBattle(UserNote note)
        {
            List<PlayerBusiness> players = FightBase.GetPlayers(note.Player);
            FightObject[] teamA = FightBase.CreateFightPlayers(players);
            FightType fType = (FightType)(note.GetInt32(0));
            FightObject[] teamB = FightBase.CreateApcTeam(players, fType, note[1]);

            string npcID = note.GetString(2);

            if (players.Count == 0 || teamB.Length == 0)
            {
                foreach (var v in players)
                {
                    v.SetActionState(ActionState.Standing);
                }
                return;
            }
            bool isEctype = (note.Player.Scene is SceneEctype || note.Player.Scene is SceneSubEctype);

            FightBusiness fb;
            if (fType == FightType.SceneAPC)
            {
                //打明怪
                SceneApc sab = note.GetValue<SceneApc>(3);
                int subID = note.GetInt32(4);
                fb = new FightSceneApc(teamA, teamB, players, npcID, isEctype, sab, subID);
            }
            else if (fType == FightType.RobAPC)
            {
                SceneApc sab = note.GetValue<SceneApc>(3);
                int subID = note.GetInt32(4);
                RobBusiness rb = note.GetValue<RobBusiness>(5);
                fb = new FightBusinessRobApc(teamA, teamB, players, npcID, isEctype, sab, subID, rb);
            }
            else if (fType == FightType.ProAPC)
            {
                //守护战争明怪
                SceneApc sab = note.GetValue<SceneApc>(3);
                int subID = note.GetInt32(4);
                PartBusiness pb = note.GetValue<PartBusiness>(5);
                fb = new FightBusinessProApc(teamA, teamB, players, npcID, isEctype, sab, subID, pb);
            }
            else
            {
                fb = new FightBusiness(teamA, teamB, players, npcID, isEctype);
            }
            foreach (var player in players)
            {
                player.Fight = fb;
            }
            fb.SendToClinet(FightCommand.StartFight, (int)fType, teamA, teamB);
            fb.Start();
        }
示例#3
0
        /// <summary>
        /// 跟副本怪战斗
        /// </summary>
        /// <param name="note"></param>
        private void FightEctypeApc(UserNote note)
        {
            PlayerBusiness player = note.Player;
            TeamInstanceBusiness eb = player.TeamInstance;
            if (eb == null || player.AState == ActionState.Fight || (player.TeamJob == TeamJob.Member))
            {
                return;
            }

            int index = note.GetInt32(0);
            if (!eb.CheckBatch(index))
            {
                //提示
                return;
            }

            const FightType ft = FightType.EctypeApc;
            EctypeApc apc = eb.CurrentApcs[index];
            List<PlayerBusiness> players = FightBase.GetPlayers(note.Player);
            FightObject[] teamA = FightBase.CreateFightPlayers(players);
            FightObject[] teamB = FightBase.CreateApcTeam(players, ft, apc.Apc);

            if (teamB.Length == 0 || eb.Astate != ActionState.Standing)
            {
                foreach (var v in players)
                {
                    v.SetActionState(ActionState.Standing);
                }
                return;
            }
            FightBusinessEctype fb = new FightBusinessEctype(teamA, teamB, players, eb, apc);
            foreach (var item in players)
            {
                item.Fight = fb;
            }
            fb.SendToClinet(FightCommand.StartFight, (int)ft, teamA, teamB);
            fb.Start();
        }
示例#4
0
        /// <summary>
        /// 竞价
        /// </summary>
        public static void AuctionBid(UserNote note)
        {
            string auctionid = note.GetString(0);
            int BidPrice = note.GetInt32(1);//竞价

            string npcid = note.GetString(2);//NPC
            if (!note.Player.EffectActive(npcid, ""))
                return;

            if (note.Player.Score < BidPrice)
            {
                note.Call(AuctionCommand.AuctionBidR, false, TipManager.GetMessage(AuctionReturn.NoScore));
                //游戏不足
                return;
            }
            Auction auction = AuctionAccess.Instance.FindOne(auctionid);
            if (auction == null)
            {
                //物口不存在
                note.Call(AuctionCommand.AuctionBidR, false, TipManager.GetMessage(AuctionReturn.NoGoods));
                return;
            }

            string soleid = auctionid + note.Name;
            if (!m_dic.TryAdd(soleid, soleid))
                return;
            try
            {
                if (auction.Value.GetIntOrDefault("Status") != 0)
                {
                    note.Call(AuctionCommand.AuctionBidR, false, TipManager.GetMessage(AuctionReturn.IsSell));
                    return;
                }
                DateTime dt = DateTime.UtcNow;
                DateTime EndTime;

                if (!DateTime.TryParse(auction.Value.GetStringOrEmpty("EndTime"), out EndTime))
                {
                    note.Call(AuctionCommand.AuctionBidR, false, TipManager.GetMessage(AuctionReturn.Expired));
                    return;
                }

                if (EndTime < dt)
                {
                    //过期物品不能竞拍
                    note.Call(AuctionCommand.AuctionBidR, false, TipManager.GetMessage(AuctionReturn.Expired));
                    return;
                }

                int price = auction.Value.GetIntOrDefault("Price");//一口价

                if (price > 0 && BidPrice > price)
                {
                    note.Call(AuctionCommand.AuctionBidR, false, TipManager.GetMessage(AuctionReturn.MorePrice));
                    return;
                }
                else if (price > 0 && BidPrice == price)
                {
                    //一口价操作
                    UserNote n = new UserNote(note, AuctionCommand.AuctionBuy, new object[] { auction.ID });
                    Notifier.Instance.Publish(n);
                    return;
                }
                int bidPrice = auction.Value.GetIntOrDefault("BidPrice");
                if (string.IsNullOrEmpty(auction.Value.GetStringOrEmpty("BidderID")))
                {
                    if (bidPrice > BidPrice)
                    {
                        note.Call(AuctionCommand.AuctionBidR, false, TipManager.GetMessage(AuctionReturn.LossStartPrice));
                        return;
                    }
                }
                else
                {
                    if (bidPrice >= BidPrice)
                    {
                        //竞拍价格太底
                        note.Call(AuctionCommand.AuctionBidR, false, TipManager.GetMessage(AuctionReturn.NoBidPrice));
                        return;
                    }
                }
                if (!note.Player.AddScore(-BidPrice, FinanceType.AuctionBid))
                {
                    note.Call(AuctionCommand.AuctionBidR, false, TipManager.GetMessage(AuctionReturn.MorePrice));
                    return;
                }
                if (auction.Value.GetStringOrEmpty("BidderID") != string.Empty)
                {
                    //竞购失败
                    Dictionary<string, object> bidFail = new Dictionary<string, object>();
                    bidFail.Add("GoodsName", auction.Name);
                    bidFail.Add("Name", auction.Value.GetStringOrDefault("BidName"));
                    bidFail.Add("Score", bidPrice.ToString());

                    PlayerBusiness BidOnLine = PlayersProxy.FindPlayerByID(auction.Value.GetStringOrDefault("BidderID"));
                    AuctionEmail.SendAuctionEmail(bidFail, AuctionEmail.BidFail, auction.ID, BidOnLine.ID, BidOnLine.Name, bidPrice, 0, null);

                    if (BidOnLine != null && BidOnLine.Online)
                    {
                        BidOnLine.Call(EmailCommand.NewEmailTotalR, EmailAccess.Instance.NewTotal(auction.Value.GetStringOrDefault("BidderID")));
                    }
                }

                auction.Value["BidderID"] = note.PlayerID;
                auction.Value["BidPrice"] = BidPrice;
                auction.Value["BidName"] = note.Player.Name;
                auction.Value["BidTime"] = dt;
                auction.Save();

                note.Call(AuctionCommand.AuctionBidR, true, TipManager.GetMessage(AuctionReturn.BidSuccess));
            }
            finally
            {
                string n;
                m_dic.TryRemove(soleid, out n);
            }
        }
示例#5
0
        /// <summary>
        /// 购买商城产品
        /// </summary>
        /// <param name="note"></param>
        private void BuyMallGoods(UserNote note)
        {
            //买的道具ID
            string id = note.GetString(0);
            //数量
            int number = note.GetInt32(1);
            //货币类型
            string cointype = note.GetString(2);

            //是否通过GM上下架检查
            if (ServerManager.IsMall)
            {
                //物品没有上架
                if (!MallAccess.HS.Contains(id))
                {
                    note.Call(MallCommand.BuyMallGoodsR, false, TipManager.GetMessage(MallReturn.MallDown));
                    return;
                }
            }

            GameConfig gc = GameConfigAccess.Instance.FindOneById(id);
            if (gc == null)
            {
                note.Call(MallCommand.BuyMallGoodsR, false, TipManager.GetMessage(MallReturn.MallGoodsNo));
                return;
            }

            Variant v = gc.Value;
            DateTime dt = DateTime.UtcNow;

            string upDate = v.GetStringOrDefault("UpDate");
            //上架时间
            if (!string.IsNullOrEmpty(upDate))
            {
                DateTime update = v.GetDateTimeOrDefault("UpDate").ToUniversalTime();
                if (dt < update)
                {
                    note.Call(MallCommand.BuyMallGoodsR, false, TipManager.GetMessage(MallReturn.MallUp));
                    return;
                }
            }
            string downDate = v.GetStringOrDefault("DownDate");
            //下架时间
            if (!string.IsNullOrEmpty(downDate))
            {
                DateTime endDate = v.GetDateTimeOrDefault("DownDate").ToUniversalTime();
                if (endDate < dt)
                {
                    note.Call(MallCommand.BuyMallGoodsR, false, TipManager.GetMessage(MallReturn.MallDown));
                    return;
                }
            }

            string goodsid = v.GetStringOrDefault("GoodsID");
            int count = v.GetIntOrDefault("Number");

            GameConfig gid = GameConfigAccess.Instance.FindOneById(goodsid);
            if (gid == null)
            {
                note.Call(MallCommand.BuyMallGoodsR, false, TipManager.GetMessage(MallReturn.MallGoodsNo));
                return;
            }

            if (gc.SubType == "ShiZhuang")
            {
                PlayerEx wx = note.Player.Wardrobe;
                Variant wv = wx.Value;
                IList wl = wv.GetValue<IList>("WardrobeList");
                if (wl != null)
                {
                    if (wl.Contains(goodsid))
                    {
                        note.Call(MallCommand.BuyMallGoodsR, false, TipManager.GetMessage(MallReturn.NoRepeat));
                        return;
                    }
                }

                Variant limit = gid.Value.GetVariantOrDefault("UserLimit");
                if (limit != null)
                {
                    if (limit.ContainsKey("Sex"))
                    {
                        int sex = Convert.ToInt32(limit["Sex"]);
                        if (sex != 2 && sex != note.Player.Sex)
                        {
                            note.Call(MallCommand.BuyMallGoodsR, false, TipManager.GetMessage(MallReturn.NoSex));
                            return;
                        }
                    }
                }

                //需要晶币
                int coin = gc.Value.GetIntOrDefault("ZCoin");
                if (note.Player.Coin < coin)
                {
                    note.Call(MallCommand.BuyMallGoodsR, false, TipManager.GetMessage(MallReturn.MallCoinNo));
                    return;
                }

                if (!note.Player.AddCoin(-coin, FinanceType.MallBuy, id))
                {
                    note.Call(MallCommand.BuyMallGoodsR, false, TipManager.GetMessage(MallReturn.MallCoinNo));
                    return;
                }

                int n = 0;
                if (wl != null)
                {
                    wl.Add(goodsid);
                    n = wl.Count;
                }
                else
                {
                    wv["WardrobeList"] = new List<string>() { goodsid };
                    n = 1;
                }

                if (!wx.Save())
                {
                    note.Call(MallCommand.BuyMallGoodsR, false, TipManager.GetMessage(MallReturn.MallSuccess));
                    return;
                }

                note.Call(ClientCommand.UpdateActorR, new PlayerExDetail(wx));
                note.Call(MallCommand.BuyMallGoodsR, true, TipManager.GetMessage(MallReturn.MallSuccess));

                //购买时装日志
                Variant os = new Variant();
                os["IsMode"] = 0;
                os["ShiZhuang"] = goodsid;
                os["Coin"] = -coin;
                note.Player.AddLogVariant(Actiontype.MallShiZhuang, null, null, os);

                note.Player.FinishNote(FinishCommand.Wardrobe, n);
                note.Player.AddLog(Actiontype.MallShiZhuang, goodsid, 1, GoodsSource.MallCoin, id, coin);
                return;
            }

            int sc = BurdenManager.StactCount(gid);
            if (sc <= 0)
            {
                note.Call(MallCommand.BuyMallGoodsR, false, TipManager.GetMessage(MallReturn.MallGoodsNo));
                return;
            }

            int isbinding = gc.Value.GetIntOrDefault("IsBinding");

            int zcoin = 0;
            PlayerEx burden = note.Player.B0;
            Dictionary<string, Variant> dic = new Dictionary<string, Variant>();
            Variant t = new Variant();

            if (cointype == "Coin")
            {
                //拆扣晶币
                zcoin = gc.Value.GetIntOrDefault("ZCoin");
                t.Add("Number" + isbinding, number * count);
            }
            else if (cointype == "Bond")
            {
                zcoin = gc.Value.GetIntOrDefault("ZBond");
                t.Add("Number" + isbinding, number * count);
            }
            else if (cointype == "FightValue")
            {
                zcoin = gc.Value.GetIntOrDefault("ZFightValue");
                t.Add("Number" + isbinding, number * count);
            }
            //需要晶币/点券的总量
            int cost = zcoin * number;
            if (cost <= 0 || number <= 0 || zcoin <= 0)
            {
                note.Call(MallCommand.BuyMallGoodsR, false, TipManager.GetMessage(MallReturn.MallCoinTypeNo));
                return;
            }
            GoodsAccess.Instance.TimeLines(gid, t);
            dic.Add(goodsid, t);

            if (BurdenManager.IsFullBurden(burden, dic))
            {
                note.Call(MallCommand.BuyMallGoodsR, false, TipManager.GetMessage(MallReturn.BurdenFull));
                return;
            }
            GoodsSource gs;
            if (cointype == "Coin")
            {
                if (note.Player.Coin < cost || (!note.Player.AddCoin(-cost, FinanceType.MallBuy, id)))
                {
                    note.Call(MallCommand.BuyMallGoodsR, false, TipManager.GetMessage(MallReturn.MallCoinNo));
                    return;
                }
                gs = GoodsSource.MallCoin;
            }
            else if (cointype == "Bond")
            {
                if (note.Player.Bond < cost || (!note.Player.AddBond(-cost, FinanceType.MallBuy, id)))
                {
                    note.Call(MallCommand.BuyMallGoodsR, false, TipManager.GetMessage(MallReturn.MallBondNo));
                    return;
                }
                gs = GoodsSource.MallBond;
            }
            else if (cointype == "FightValue")
            {
                if (note.Player.FightValue < cost || (!note.Player.AddFightValue(-cost, true, FinanceType.MallBuy, id)))
                {
                    note.Call(MallCommand.BuyMallGoodsR, false, TipManager.GetMessage(MallReturn.MallCoinNo));
                    return;
                }
                gs = GoodsSource.MallFightValue;
            }
            else
            {
                note.Call(MallCommand.BuyMallGoodsR, false, TipManager.GetMessage(MallReturn.MallGoodsNo));
                return;
            }
            //购买成功,发送道具
            note.Player.AddGoods(dic, gs, gc.ID, cost);
            note.Call(MallCommand.BuyMallGoodsR, true, TipManager.GetMessage(MallReturn.MallSuccess));
        }
示例#6
0
 /// <summary>
 /// 更新显示信息
 /// </summary>
 /// <param name="note"></param>
 private void SaveShowInfo(UserNote note)
 {
     int showInfo = note.GetInt32(0);
     note.Player.ShowInfo = showInfo;
     PlayerAccess.Instance.SaveValue(note.Player.PID, "ShowInfo", showInfo);
 }
示例#7
0
        /// <summary>
        /// 晶币变化
        /// </summary>
        /// <param name="note"></param>
        public static void ConsumeCoin(UserNote note)
        {
            PlayerEx ex = note.Player.Social;
            if (ex == null)
                return;
            Variant m = ex.Value.GetValueOrDefault<Variant>("Mentor");
            if (m == null)
                return;
            IList master = m.GetValue<IList>("Master");
            if (master == null || master.Count <= 0)
                return;

            Variant v = master[0] as Variant;
            if (v == null) return;

            PlayerBusiness pb = PlayersProxy.FindPlayerByID(v.GetStringOrDefault("PlayerID"));
            if (pb == null) return;

            int coin = note.GetInt32(0);
            FinanceType ft = note.GetValue<FinanceType>(1);
            int bond = 0;//得到
            int owe = 0;
            if (coin < 0)
            {
                if (note.Player.Level > 39)
                {
                    //高徒
                    bond = Convert.ToInt32(Math.Ceiling(-coin * 0.05));

                }
                else
                {
                    //学徒
                    bond = Convert.ToInt32(Math.Ceiling(-coin * 0.1));
                }
                owe = Convert.ToInt32(Math.Ceiling(-coin * 0.5));
            }
            int reTime = Convert.ToInt32(TipManager.GetMessage(EmailReturn.HameDay));
            if (bond > 0)
            {
                if (pb.AddBond(bond, FinanceType.ConsumeCoin))
                {
                    string msg = string.Format(TipManager.GetMessage(SocialReturn.ConsumeCoin1), note.Player.Name, bond);
                    //"你的徒弟【" + note.Player.Name + "】消费晶币,为感谢师傅的栽培,为师傅送上了【" + bond + "】点劵";
                    //徒弟消费奖励点劵

                    if (EmailAccess.Instance.SendEmail(TipManager.GetMessage(SocialReturn.ConsumeCoin2), TipManager.GetMessage(SocialReturn.FriendsBless8), pb.ID, pb.Name, msg, string.Empty, null, reTime))
                    {
                        if (pb.Online)
                        {
                            pb.Call(EmailCommand.NewEmailTotalR, EmailAccess.Instance.NewTotal(pb.ID));
                        }
                    }
                }
            }

            if (owe > 0)
            {
                if (pb.AddOwe(owe, FinanceType.ConsumeCoin))
                {
                    string msg = string.Format(TipManager.GetMessage(SocialReturn.ConsumeCoin3), owe);
                    // "你获得了【" + owe + "】点感恩值";
                    //徒弟消费奖励感恩值
                    if (EmailAccess.Instance.SendEmail(TipManager.GetMessage(SocialReturn.ConsumeCoin4), TipManager.GetMessage(SocialReturn.FriendsBless8), pb.ID, pb.Name, msg, string.Empty, null, reTime))
                    {
                        if (pb.Online)
                        {
                            pb.Call(EmailCommand.NewEmailTotalR, EmailAccess.Instance.NewTotal(pb.ID));
                            pb.Call(ClientCommand.SendActivtyR, new object[] { "T02", msg });
                        }
                    }
                }
            }

            //晶币消费总量
            //long gce = note.Player.GCE;
        }
示例#8
0
        /// <summary>
        /// 家园生产
        /// </summary>
        /// <param name="note"></param>
        public static void HomeProduce(UserNote note)
        {
            string soleid = note.PlayerID + "HomeProduce";
            if (!m_dic.TryAdd(soleid, soleid))
                return;

            try
            {

                string id = note.GetString(0);
                int number = note.GetInt32(1);
                string npcid = note.GetString(2);//NPC
                if (!note.Player.EffectActive(npcid, ""))
                    return;

                //要生产的道具数量
                GameConfig gc = GameConfigAccess.Instance.FindOneById(id);
                if (gc == null)
                {
                    note.Call(HomeCommand.HomeProduceR, false, TipManager.GetMessage(HomeReturn.PareError));
                    return;
                }
                string subType = gc.SubType;
                PlayerEx home = note.Player.Home;
                if (home == null)
                {
                    note.Call(HomeCommand.HomeProduceR, false, TipManager.GetMessage(HomeReturn.NoHome));
                    return;
                }

                Variant hv = home.Value;

                //得到需要的道具数量,计算出当前可以生产道具的数量
                Variant produces = hv.GetValueOrDefault<Variant>("Produces");
                if (produces == null)
                {
                    note.Call(HomeCommand.HomeProduceR, false, TipManager.GetMessage(HomeReturn.PareError));
                    return;
                }
                Variant v = produces.GetValueOrDefault<Variant>(subType);
                if (v == null)
                {
                    note.Call(HomeCommand.HomeProduceR, false, TipManager.GetMessage(HomeReturn.PareError));
                    return;
                }

                IList petList = v.GetValue<IList>("PetList");

                if (petList.Count == 0)
                {
                    note.Call(HomeCommand.HomeProduceR, false, TipManager.GetMessage(HomeReturn.InPet));
                    return;
                }

                int yaoJi = 0;
                int juanZhou = 0;
                int sheJi = 0;
                int jiaGong = 0;
                int caiJi = 0;
                int jiazhengtotal = 0;//宠物家政值总数

                Dictionary<string, Pet> producePet = new Dictionary<string, Pet>();
                foreach (Variant d in petList)
                {
                    yaoJi += d.GetIntOrDefault("YaoJi");
                    juanZhou += d.GetIntOrDefault("JuanZhou");
                    sheJi += d.GetIntOrDefault("SheJi");
                    jiaGong += d.GetIntOrDefault("JiaGong");
                    caiJi += d.GetIntOrDefault("CaiJi");
                }

                jiazhengtotal = yaoJi + juanZhou + jiaGong + caiJi;

                Dictionary<string, int> dic = new Dictionary<string, int>();
                dic.Add("YaoJi", yaoJi);
                dic.Add("JuanZhou", juanZhou);
                dic.Add("SheJi", sheJi);
                dic.Add("JiaGong", jiaGong);
                dic.Add("CaiJi", caiJi);

                //目标道具
                string goodsid = gc.Value.GetStringOrDefault("GoodsID");
                //生产所需时间,秒钟
                int produceTime = gc.Value.GetIntOrDefault("ProduceTime");
                //所需家政信息
                Variant homeInfo = gc.Value.GetValueOrDefault<Variant>("HomeValue");

                //所需家政信息
                DateTime dt = DateTime.UtcNow;
                DateTime endTime = dt.AddSeconds(number * produceTime);

                Variant mv = MemberAccess.MemberInfo(note.Player.MLevel);

                //生产队列数
                int qc = 3 + mv.GetIntOrDefault("Produce");

                IList list;
                if (v.TryGetValueT("QueueList", out list))
                {
                    //生产对列
                    for (int i = 0; i < list.Count; i++)
                    {

                    }
                }
                else
                {
                    //表示可以生产
                    v.Add("QueueList", new List<DateTime> { endTime });
                }
            }
            finally
            {
                m_dic.TryRemove(soleid, out soleid);
            }
        }
示例#9
0
        /// <summary>
        /// 包袱或仓库扩展[还要求判断是否要求晶币消费]
        /// </summary>
        /// <param name="note"></param>
        /// <param name="exname">包袱或仓库名</param>
        /// <param name="count">扩展数量</param>
        private void BurdenExtend(UserNote note)
        {
            PlayerEx burden = note.Player.B1;
            if (burden != null)
            {
                Variant v = burden.Value;
                //最大值
                int max = v.GetIntOrDefault("Max");
                //当前数量
                int cur = v.GetIntOrDefault("Cur");
                if (cur >= max)
                {
                    note.Call(BurdenCommand.BurdenExtendR, false, TipManager.GetMessage(BurdenReturn.BurdenMaxEx));
                    return;
                }

                int number = note.GetInt32(0);
                string goodsid = "";
                double lv = GameConfigAccess.Instance.FindExtend(ExtendType.B1, cur.ToString(), out number, out goodsid);

                if (string.IsNullOrEmpty(goodsid) || number <= 0)
                {
                    note.Call(PetsCommand.ShockSkillR, false, TipManager.GetMessage(ExtendReturn.B12));
                    return;
                }

                if (!note.Player.RemoveGoods(goodsid, number, GoodsSource.BurdenExtend))
                {
                    note.Call(PetsCommand.ShockSkillR, false, TipManager.GetMessage(ExtendReturn.B12));
                    return;
                }

                note.Player.UpdateBurden();
                if (NumberRandom.RandomHit(lv))
                {
                    v["Cur"] = cur + 7;
                    IList c = v.GetValue<IList>("C");
                    for (int i = cur; i < cur + 7; i++)
                    {
                        Variant d = new Variant();
                        d["P"] = i;
                        d["E"] = "";
                        d["G"] = "";
                        d["A"] = 0;
                        d["S"] = 0;
                        d["H"] = 0;
                        d["D"] = 0;
                        d["T"] = null;
                        c.Add(d);
                    }

                    burden.Save();
                    note.Call(BurdenCommand.BurdenExtendR, true, TipManager.GetMessage(BurdenReturn.Success));
                    note.Player.FinishNote(FinishCommand.ExtendLib);
                }
                else
                {
                    note.Call(PetsCommand.ShockSkillR, false, TipManager.GetMessage(ExtendReturn.B13));
                }
            }
        }
示例#10
0
        /// <summary>
        /// 合成操作,将多个道具或装备合成新的道具[完成]
        /// </summary>
        /// <param name="note"></param>
        private void Fuse(UserNote note)
        {
            //合成配置的ID
            string mixid = note.GetString(0);
            //合成数量
            int number = note.GetInt32(1);
            //提升成功率的数量
            int upCount = note.GetInt32(2);

            string npcid = note.GetString(3);
            if (!note.Player.EffectActive(npcid, ""))
                return;

            GameConfig gc = GameConfigAccess.Instance.FindOneById(mixid);
            if (gc == null)
            {
                note.Call(FuseCommand.FuseR, false, TipManager.GetMessage(FuseReturn.FuseEquipNo));
                return;
            }

            #region 目标道具基本信息,判断包袱是否满和角色游戏币是否满足
            string upid = gc.Value.GetStringOrDefault("UpID");

            string fuseGoodsID = gc.Value.GetStringOrDefault("GoodsID");
            GameConfig fuseGC = GameConfigAccess.Instance.FindOneById(fuseGoodsID);

            int m = BurdenManager.StactCount(fuseGC);

            if (m == 0)
            {
                note.Call(FuseCommand.FuseR, false, TipManager.GetMessage(FuseReturn.FuseEquipError));
                return;
            }

            int y = 0;
            int s = Math.DivRem(number, m, out y);
            //需要空格子的数量
            int n = (y == 0) ? s : s + 1;
            PlayerEx burden = note.Player.B0;
            IList c = burden.Value.GetValue<IList>("C");
            int grid = 0;
            int upNumber = 0;
            foreach (Variant d in c)
            {
                if (string.IsNullOrEmpty(d.GetStringOrDefault("E")))
                    grid++;
                //提升成功率的道具
                if (upid == d.GetStringOrDefault("G"))
                {
                    upNumber += d.GetIntOrDefault("A");
                }
            }

            if (grid < n)
            {
                //表示包袱格子数不足
                note.Call(FuseCommand.FuseR, false, TipManager.GetMessage(FuseReturn.FuseBurdenFull));
                return;
            }

            if (upNumber < upCount)
            {
                note.Call(FuseCommand.FuseR, false, TipManager.GetMessage(FuseReturn.FuseGoodsLv));
                return;
            }

            int score = 0;//合成所需游戏币

            Variant price = fuseGC.Value.GetValueOrDefault<Variant>("Price");
            Variant buy = price.GetValueOrDefault<Variant>("Buy");

            score = buy.GetIntOrDefault("Score") * number;

            #endregion

            #region 判断合成所需材料是否够
            IList mixNeed = gc.Value.GetValue<IList>("MixNeed");
            int isBinding = 0;
            foreach (Variant d in mixNeed)
            {
                int total = 0;
                int numCount = d.GetIntOrDefault("Number") * number;
                foreach (Variant con in c)
                {
                    if (con.GetStringOrDefault("G") == d.GetStringOrDefault("GoodsID"))
                    {
                        if (total < numCount && con.GetIntOrDefault("H") == 1)
                        {
                            //判断目标道具是否为绑定状态
                            isBinding = 1;
                        }
                        total += con.GetIntOrDefault("A");
                    }
                }

                if (total < numCount)
                {
                    note.Call(FuseCommand.FuseR, false, TipManager.GetMessage(FuseReturn.FuseLessNo));
                    return;
                }
            }
            #endregion

            if (note.Player.Score < score || (!note.Player.AddScore(-score, FinanceType.Fuse)))
            {
                note.Call(FuseCommand.FuseR, false, TipManager.GetMessage(FuseReturn.FuseScore));
                return;
            }

            #region 得到当前成功率
            double lv = gc.Value.GetDoubleOrDefault("ChengGongLv");
            if (upCount != 0)
            {
                lv = lv + GoodsAccess.Instance.GetSuccess(upCount);
            }

            int ml = note.Player.MLevel;
            Variant mv = MemberAccess.MemberInfo(ml);
            if (mv != null)
            {
                lv *= (1 + mv.GetDoubleOrDefault("FuseLv"));
            }

            //表示成功
            bool isSuccess = NumberRandom.RandomHit(lv);

            #endregion

            //消耗道具数量
            Variant us = new Variant();

            #region 移除道具
            foreach (Variant d in mixNeed)
            {
                int count = d.GetIntOrDefault("Number") * number;
                string gid = d.GetStringOrDefault("GoodsID");
                if (!note.Player.RemoveGoods(gid, count,GoodsSource.Fuse))
                {
                    note.Call(FuseCommand.FuseR, false, TipManager.GetMessage(FuseReturn.FuseLessNo));
                    return;
                }

                us.SetOrInc(gid, count);
            }
            #endregion

            if (upCount > 0)
            {
                if (!note.Player.RemoveGoods(upid, upCount,GoodsSource.Fuse))
                {
                    note.Call(FuseCommand.FuseR, false, TipManager.GetMessage(FuseReturn.FuseGoodsLv));
                    return;
                }
                us.SetOrInc(upid, upCount);
            }

            //取得的物品
            Variant gs = new Variant();
            if (isSuccess)
            {
                Variant doc = new Variant();
                doc.Add("Number" + isBinding, number);

                Dictionary<string, Variant> goods = new Dictionary<string, Variant>();
                goods.Add(fuseGC.ID, doc);
                note.Player.AddGoods(goods, GoodsSource.Fuse);

                gs.SetOrInc(fuseGC.ID, number);
            }

            note.Player.UpdateBurden();
            if (isSuccess)
            {
                note.Player.FinishNote(FinishCommand.HeChen, 1);
                string str = string.Format(TipManager.GetMessage(FuseReturn.FuseSuccess), fuseGC.Name, number);
                note.Call(FuseCommand.FuseR, true, str);
            }
            else
            {
                note.Call(FuseCommand.FuseR, false, TipManager.GetMessage(FuseReturn.FuseFail));
            }

            Variant os = new Variant();
            os["IsSuccess"] = isSuccess;
            os["Lv"] = lv;
            os["Score"] = -score;
            note.Player.AddLogVariant(Actiontype.Fuse, us, gs, os);
        }
示例#11
0
        /// <summary>
        /// 得到所有家族列表
        /// </summary>
        /// <param name="note"></param>
        public static void FamilyList(UserNote note)
        {
            int pageSize = note.GetInt32(0);
            int pageIndex = note.GetInt32(1);
            string familName = note.GetString(2);
            int totalCount = 0;
            int currCount = 0;
            List<Family> list = FamilyAccess.Instance.FamilyPage(pageSize, pageIndex, familName, out totalCount, out currCount);
            List<Variant> tmp = new List<Variant>();
            int a = 0;
            foreach (Family model in list)
            {
                a++;
                Variant v = new Variant();
                v.Add("ID", model.ID);
                v.Add("Name", model.Name);
                v.Add("Level", model.Value.GetIntOrDefault("Level"));

                IList persons = model.Value.GetValue<IList>("Persons");
                string bossName = string.Empty;
                foreach (Variant dy in persons)
                {
                    if (dy.GetIntOrDefault("RoleID") == 0)
                    {
                        //PlayerBusiness pb = PlayersProxy.FindPlayerByID(dy.GetStringOrDefault("PlayerID"));
                        ////族长名称
                        //if (pb != null)
                        //{
                        //    ;// pb.Name;
                        //}
                        bossName = PlayerAccess.Instance.GetPlayerName(Convert.ToInt32(dy.GetStringOrDefault("PlayerID"), 16));
                        break;
                    }
                }

                Variant number = new Variant();
                number.Add("V", persons.Count);
                Variant max = FamilyBase.FamilyCount(model.Value.GetIntOrDefault("Level"));
                number.Add("M", max == number ? 20 : max.GetIntOrDefault("Persons"));
                v.Add("Number", number);
                v.Add("BossName", bossName);
                v.Add("Notice", model.Value.GetStringOrDefault("Notice"));
                v.Add("Sort", (currCount * pageSize) + a);
                tmp.Add(v);
            }
            note.Call(FamilyCommand.FamilyListR, totalCount, tmp);
        }
示例#12
0
文件: ArenaInfo.cs 项目: abel/sinan
        /// <summary>
        /// 物品使用
        /// </summary>
        /// <param name="note"></param>
        public static void ArenaGoodsPet(UserNote note)
        {
            string sole = note.PlayerID + "ArenaGoodsPet";
            if (!m_dic.TryAdd(sole, sole))
                return;
            try
            {
                string petid = note.GetString(0);
                //使用格子物品的位置
                int position = note.GetInt32(1);

                ArenaBase model;
                if (!ArenaBusiness.ArenaList.TryGetValue(note.Player.SoleID, out model))
                {
                    //请先选择竞技场
                    note.Call(ArenaCommand.ArenaGoodsR, false, TipManager.GetMessage(ArenaReturn.ArenaGoodsPet1));
                    return;
                }

                Variant v = BurdenManager.BurdenPlace(note.Player.B0, position);
                if (v == null)
                {
                    //输入参数不对
                    note.Call(ArenaCommand.ArenaGoodsR, false, TipManager.GetMessage(ArenaReturn.ArenaGoodsPet2));
                    return;
                }

                string goodsid = v.GetStringOrDefault("G");

                if (string.IsNullOrEmpty(goodsid))
                {
                    //物品不存在
                    note.Call(ArenaCommand.ArenaGoodsR, false, TipManager.GetMessage(ArenaReturn.ArenaGoodsPet3));
                    return;
                }

                GameConfig gc = GameConfigAccess.Instance.FindOneById(goodsid);
                if (gc == null)
                {
                    //物品不存在
                    note.Call(ArenaCommand.ArenaGoodsR, false, TipManager.GetMessage(ArenaReturn.ArenaGoodsPet3));
                    return;
                }

                if (gc.SubType != GoodsSub.Supply)
                {
                    //该物品不能在战斗中使用
                    note.Call(ArenaCommand.ArenaGoodsR, false, TipManager.GetMessage(ArenaReturn.ArenaGoodsPet4));
                    return;
                }

                if (!ArenaGoods.SupplyLimit(note, gc))
                    return;

                Pet p;
                if (model.Pets.TryGetValue(petid, out p))
                {
                    if (!SupplyPet(gc.Value, p, model, note.Player.Name))
                    {
                        //不需要补充
                        note.Call(ArenaCommand.ArenaGoodsR, false, TipManager.GetMessage(ArenaReturn.ArenaGoodsPet5));
                        return;
                    }

                    //作用成功移除物品
                    if (note.Player.RemoveGoods(position, GoodsSource.ArenaGoodsPet))
                    {
                        //Variant tmp = new Variant();
                        //tmp.Add("B0", note.Player.B0);
                        //note.Call(BurdenCommand.BurdenListR, tmp);
                        note.Player.UpdateBurden();
                    }
                }
            }
            finally
            {
                m_dic.TryRemove(sole, out sole);
            }
        }
示例#13
0
文件: ArenaInfo.cs 项目: abel/sinan
        /// <summary>
        /// 宠物进入参战
        /// </summary>
        /// <param name="note"></param>
        public static void PetInArena(UserNote note)
        {
            string petid = note.GetString(0);
            string groupname = note.GetString(1);

            int x = note.GetInt32(2);
            int y = note.GetInt32(3);

            if (string.IsNullOrEmpty(note.Player.SoleID))
            {
                //请选择要参战的竞技场
                note.Call(ArenaCommand.PetInArenaR, false, TipManager.GetMessage(ArenaReturn.ArenaGroupName1));
                return;
            }

            ArenaBase model;
            if (!ArenaBusiness.ArenaList.TryGetValue(note.Player.SoleID, out model))
            {
                //请选择要参战的竞技场
                note.Call(ArenaCommand.PetInArenaR, false, TipManager.GetMessage(ArenaReturn.PetInArena1));
                return;
            }

            if (model.StartTime < DateTime.UtcNow)
            {
                //竞技场已经开始,不能再参战
                note.Call(ArenaCommand.PetInArenaR, false, TipManager.GetMessage(ArenaReturn.PetInArena2));
                return;
            }

            if (!model.GroupName.Contains(groupname))
            {
                //请选择分组
                note.Call(ArenaCommand.PetInArenaR, false, TipManager.GetMessage(ArenaReturn.PetInArena3));
                return;
            }

            if (!string.IsNullOrEmpty(note.Player.GroupName))
            {
                if (note.Player.GroupName != groupname)
                {
                    //你已经加入【" + note.Player.GroupName + "】组,不能再选择其它组
                    note.Call(ArenaCommand.PetInArenaR, false, string.Format(TipManager.GetMessage(ArenaReturn.PetInArena4), note.Player.GroupName));
                    return;
                }
            }

            PlayerEx b3 = note.Player.B3;
            IList c = b3.Value.GetValue<IList>("C");
            Variant tmp = null;
            foreach (Variant v in c)
            {
                if (v.GetStringOrDefault("E") == petid)
                {
                    tmp = v;
                    break;
                }
            }

            if (tmp == null)
            {
                //宠物不存在
                note.Call(ArenaCommand.PetInArenaR, false, TipManager.GetMessage(ArenaReturn.PetInArena5));
                return;
            }

            Pet p = PetAccess.Instance.FindOneById(petid);
            if (p == null || p.PlayerID != note.PlayerID)
            {
                note.Call(ArenaCommand.PetInArenaR, false, TipManager.GetMessage(ArenaReturn.PetInArena5));
                return;
            }

            if (PetAccess.Instance.IsFatigue(p))
            {
                //宠物过度疲劳,不能参加竞技场
                note.Call(ArenaCommand.PetInArenaR, false, TipManager.GetMessage(ArenaReturn.PetInArena6));
                return;
            }

            if (Math.Abs(note.Player.FightValue - model.FightValue) > model.FightPoor)
            {
                //战绩差距太大,不能参加
                note.Call(ArenaCommand.PetInArenaR, false, TipManager.GetMessage(ArenaReturn.PetInArena7));
                return;
            }

            int count = 0;//已经放入的宠物数量
            int groupcount = 0;//得到选组宠物总数
            foreach (Pet pk in model.Pets.Values)
            {
                if (pk.PlayerID == note.PlayerID)
                {
                    count++;
                }

                if (pk.GroupName == groupname)
                {
                    groupcount++;
                }
            }

            if (model.UserPets <= count)
            {
                //每人只能【" + model.UserPets + "】只宠物参战
                note.Call(ArenaCommand.PetInArenaR, false, string.Format(TipManager.GetMessage(ArenaReturn.PetInArena8), model.UserPets));
                return;
            }

            if (model.PetNumber <= groupcount)
            {
                //每组只能【" + model.PetNumber + "】只宠物参战
                note.Call(ArenaCommand.PetInArenaR, false, string.Format(TipManager.GetMessage(ArenaReturn.PetInArena9), model.PetNumber));
                return;
            }

            if (!model.Pets.TryAdd(p.ID, p))
            {
                //宠物已经参战
                note.Call(ArenaCommand.PetInArenaR, false, TipManager.GetMessage(ArenaReturn.PetInArena10));
                return;
            }
            note.Player.GroupName = groupname;

            p.GroupName = groupname;
            p.X = x;
            p.Y = y;

            p.BeginPoint = new Point(x, y);
            p.EndPoint = new Point(x, y);
            p.CurPoint = new Point(x, y);

            p.RangePet = string.Empty;
            p.PetStatus = 0;
            p.Range = 100;

            List<PetDetail> list = new List<PetDetail>();
            PetDetail detail = new PetDetail(p, note.Player.Name);
            list.Add(detail);

            model.CallAll(ArenaCommand.PetInArenaR, true, list);
            model.ArenaUserCount();
        }
示例#14
0
文件: ArenaInfo.cs 项目: abel/sinan
        /// <summary>
        /// 行走坐标中转
        /// </summary>
        /// <param name="note"></param>
        public static void ArenaWalk(UserNote note)
        {
            string petid = note.GetString(0);
            Int64 point = note.GetInt64(1);

            ArenaBase model;
            if (!ArenaBusiness.ArenaList.TryGetValue(note.Player.SoleID, out model))
                return;
            //开始坐标
            Point begin = new Point();
            begin.X = Convert.ToInt32(point >> 24);
            begin.Y = Convert.ToInt32(point >> 16 & 0xff);

            //结束坐标
            Point end = new Point();
            end.X = Convert.ToInt32(point >> 8 & 0xff);
            end.Y = Convert.ToInt32(point & 0xff);
            Pet p;
            if (model.Pets.TryGetValue(petid, out p))
            {
                p.StartTime = DateTime.UtcNow;
                p.BeginPoint = model.SceneSession.ToScreen(begin);
                p.EndPoint = model.SceneSession.ToScreen(end);
                p.RangePet = note.GetString(2);
                p.PetStatus = note.GetInt32(3);
            }
            if (p != null)
            {
                if (p.PetStatus != 0)
                {
                    model.CallAll(ArenaCommand.ArenaWalkR, true, petid, point);
                }
            }
        }
示例#15
0
        /// <summary>
        /// 得到邮件列表
        /// </summary>
        /// <param name="note"></param>
        public static void EmailList(UserNote note)
        {
            int pageIndex = note.GetInt32(0);
            int pageSize = 6;//note.GetInt32(1);
            //0所有按时间,1未读,2有附件,3到期时间
            int number = note.GetInt32(2);
            if (pageIndex < 0 || pageSize < 1)
            {
                note.Call(EmailCommand.EmailListR, 0, new List<Variant>());
                return;
            }
            int total = 0;
            List<Email> emailList = EmailAccess.Instance.EmailPage(note.PlayerID, pageSize, pageIndex, number, out total);

            List<Variant> list = new List<Variant>();
            foreach (Email model in emailList)
            {
                Variant mv = model.Value;
                if (mv == null)
                    continue;

                Variant v = new Variant();
                foreach (var item in mv)
                {
                    v.Add(item.Key, item.Value);
                }

                v.Add("ID", model.ID);
                v.Add("Name", model.Name);
                v.Add("MainType", model.MainType);
                v.Add("Status", model.Status);
                list.Add(v);
            }

            note.Call(EmailCommand.EmailListR, total, list);
        }
示例#16
0
 /// <summary>
 /// 成功进入场景
 /// </summary>
 /// <param name="note"></param>
 protected void IntoSceneSuccess(UserNote note)
 {
     PlayerBusiness player = note.Player;
     player.Point = 0;
     player.X = note.GetInt32(0);
     player.Y = note.GetInt32(1);
     Variant sceneinfo = CreateSceneInfo(player, false);
     IntoSceneSuccess(player, sceneinfo);
 }
示例#17
0
        /// <summary>
        /// ShuFang养殖,JiaGongFang挖掘,GuoYuan采集
        /// </summary>
        /// <param name="note"></param>
        public static void HomePluck(UserNote note)
        {
            string soleid = note.PlayerID + "HomePluck";

            if (!m_dic.TryAdd(soleid, soleid))
                return;
            try
            {
                //G_d000015成长果实,G_d000016潜力果实  Minute;
                int minute = note.GetInt32(0);
                string name = note.GetString(1);

                string npcid = note.GetString(2);//NPC
                if (!note.Player.EffectActive(npcid, ""))
                    return;

                if (minute < 1)
                {
                    note.Call(HomeCommand.HomePluckR, false, TipManager.GetMessage(HomeReturn.PareError));
                    return;
                }

                GameConfig gc = null;
                if (name == "GuoYuan")
                {
                    gc = GameConfigAccess.Instance.FindOneById("Home_CJ00002");
                }
                else if (name == "ShuFang")
                {
                    gc = GameConfigAccess.Instance.FindOneById("Home_CJ00001");
                }
                else if (name == "JiaGongFang")
                {
                    gc = GameConfigAccess.Instance.FindOneById("Home_CJ00003");
                }
                else
                {
                    note.Call(HomeCommand.HomePluckR, false, TipManager.GetMessage(HomeReturn.PareError));
                    return;
                }

                List<string> list = new List<string>() { "GuoYuan", "ShuFang", "JiaGongFang" };
                if (!list.Contains(gc.SubType))
                {
                    note.Call(HomeCommand.HomePluckR, false, TipManager.GetMessage(HomeReturn.PareError));
                    return;
                }

                string goodsID = gc.Value.GetStringOrDefault("GoodsID");
                int produceTime = gc.Value.GetIntOrDefault("ProduceTime");
                //int score = gc.Value.GetIntOrDefault("Score");
                //采集需要石币
                //int scoreT = ((minute * 60) / produceTime) * score;

                PlayerEx home = note.Player.Home;
                if (home == null)
                {
                    note.Call(HomeCommand.HomePluckR, false, TipManager.GetMessage(HomeReturn.NoHome));
                    return;
                }
                Variant produces = home.Value.GetValueOrDefault<Variant>("Produces");
                Variant v = produces.GetValueOrDefault<Variant>(gc.SubType);
                IList petList = v.GetValue<IList>("PetList");
                if (petList == null || petList.Count == 0)
                {
                    note.Call(HomeCommand.HomePluckR, false, TipManager.GetMessage(HomeReturn.InPet));
                    return;
                }

                Variant mv = MemberAccess.MemberInfo(note.Player.MLevel);
                if (mv == null)
                {
                    note.Call(HomeCommand.HomePluckR, false, TipManager.GetMessage(HomeReturn.ConfigError));
                    return;
                }
                int homeHour = mv.GetIntOrDefault("HomeHour");
                DateTime dt = DateTime.UtcNow;
                DateTime endtime = dt.AddHours(homeHour);

                //v["GoodsID"] = goodsID;
                //v["Number"] = 0;
                v["StartTime"] = dt;
                v["EndTime"] = endtime;
                //v["IsBinding"] = 1;
                home.Save();
                note.Call(HomeCommand.HomePluckR, true, TipManager.GetMessage(HomeReturn.Plucking));
            }

            finally
            {
                string str;
                m_dic.TryRemove(soleid, out str);
            }
        }
示例#18
0
文件: PetMediator.cs 项目: abel/sinan
        /// <summary>
        /// 激活兽栏
        /// </summary>
        /// <param name="note"></param>
        private void ShockPetGroove(UserNote note)
        {
            //得到道具数量
            int number = note.GetInt32(0);
            PlayerEx pg = note.Player.B3;
            Variant v = null;
            IList pc = pg.Value.GetValue<IList>("C");
            int n = 0;
            foreach (Variant k in pc)
            {
                if (k.GetStringOrDefault("E") == "-1")
                {
                    n++;
                    if (v == null)
                    {
                        v = k;
                    }
                    else if (v.GetIntOrDefault("P") > k.GetIntOrDefault("P"))
                    {
                        v = k;
                    }
                }
            }

            if (v == null)
            {
                note.Call(PetsCommand.ShockPetGrooveR, false, TipManager.GetMessage(PetsReturn.ShockFinish));
                return;
            }
            int p = v.GetIntOrDefault("P");
            string goodsid = "";
            number=0;
            double lv = GameConfigAccess.Instance.FindExtend(ExtendType.B3, p.ToString(),out number,  out goodsid);
            if (string.IsNullOrEmpty(goodsid) || number <= 0)
            {
                note.Call(PetsCommand.ShockPetGrooveR, false, TipManager.GetMessage(ExtendReturn.B32));
                return;
            }

            if (note.Player.RemoveGoods(goodsid, number, GoodsSource.ShockPetGroove))
            {
                note.Player.UpdateBurden();
                if (NumberRandom.RandomHit(lv))
                {
                    v["E"] = "";
                    if (pg.Save())
                    {
                        note.Call(ClientCommand.UpdateActorR, new PlayerExDetail(pg));
                        note.Call(PetsCommand.ShockPetGrooveR, true, string.Empty);
                        note.Player.FinishNote(FinishCommand.ExtendStables);
                    }
                }
                else
                {
                    note.Call(PetsCommand.ShockPetGrooveR, false, TipManager.GetMessage(ExtendReturn.B33));
                }
            }
            else
            {
                note.Call(PetsCommand.ShockPetGrooveR, false, TipManager.GetMessage(ExtendReturn.B32));
            }
        }
示例#19
0
        /// <summary>
        /// 家园生产
        /// </summary>
        /// <param name="note"></param>
        public static void HomeProduce(UserNote note)
        {
            string soleid = note.PlayerID + "HomeProduce";
            if (!m_dic.TryAdd(soleid, soleid))
                return;

            try
            {

                string id = note.GetString(0);
                int number = note.GetInt32(1);

                string npcid = note.GetString(2);//NPC
                if (!note.Player.EffectActive(npcid, ""))
                    return;

                if (number <= 0)
                {
                    note.Call(HomeCommand.HomeProduceR, false, TipManager.GetMessage(HomeReturn.PareError));
                    return;
                }
                //生产数量
                GameConfig gc = GameConfigAccess.Instance.FindOneById(id);
                if (gc == null)
                {
                    note.Call(HomeCommand.HomeProduceR, false, TipManager.GetMessage(HomeReturn.PareError));
                    return;
                }
                string subType = gc.SubType;
                PlayerEx home = note.Player.Home;
                if (home == null)
                {
                    note.Call(HomeCommand.HomeProduceR, false, TipManager.GetMessage(HomeReturn.NoHome));
                    return;
                }
                //得到需要的道具数量,计算出当前可以生产道具的数量

                Variant produces = home.Value.GetValueOrDefault<Variant>("Produces");
                if (produces == null)
                {
                    note.Call(HomeCommand.HomeProduceR, false, TipManager.GetMessage(HomeReturn.PareError));
                    return;
                }
                Variant v = produces.GetValueOrDefault<Variant>(subType);
                if (v == null)
                {
                    note.Call(HomeCommand.HomeProduceR, false, TipManager.GetMessage(HomeReturn.PareError));
                    return;
                }

                IList petList = v.GetValue<IList>("PetList");
                if (petList.Count == 0)
                {
                    note.Call(HomeCommand.HomeProduceR, false, TipManager.GetMessage(HomeReturn.InPet));
                    return;
                }

                int yaoJi = 0;
                int juanZhou = 0;
                int sheJi = 0;
                int jiaGong = 0;
                int caiJi = 0;
                int jiazhengtotal = 0;//宠物家政值总数

                Dictionary<string, Pet> producePet = new Dictionary<string, Pet>();
                foreach (Variant d in petList)
                {
                    yaoJi = yaoJi + d.GetIntOrDefault("YaoJi");
                    juanZhou = juanZhou + d.GetIntOrDefault("JuanZhou");
                    sheJi = sheJi + d.GetIntOrDefault("SheJi");
                    jiaGong = jiaGong + d.GetIntOrDefault("JiaGong");
                    caiJi = caiJi + d.GetIntOrDefault("CaiJi");
                }
                jiazhengtotal = yaoJi + juanZhou + jiaGong + caiJi;

                Dictionary<string, int> dic = new Dictionary<string, int>();
                dic.Add("YaoJi", yaoJi);
                dic.Add("JuanZhou", juanZhou);
                dic.Add("SheJi", sheJi);
                dic.Add("JiaGong", jiaGong);
                dic.Add("CaiJi", caiJi);
                //目标道具
                string goodsid = gc.Value.GetStringOrDefault("GoodsID");
                //生产所需时间,秒钟
                int producetime = gc.Value.GetIntOrDefault("ProduceTime");
                //所需家政信息
                Variant homeInfo = gc.Value.GetValueOrDefault<Variant>("HomeValue");
                //一条生产线可生产最大数量
                int produceMax = gc.Value.GetIntOrDefault("Number");
                if (number > produceMax)
                {
                    note.Call(HomeCommand.HomeProduceR, false, string.Format(TipManager.GetMessage(HomeReturn.HomeProduce5),produceMax));
                    return;
                }

                int need = 0;
                foreach (var item in homeInfo)
                {
                    if (!dic.ContainsKey(item.Key))
                    {
                        note.Call(HomeCommand.HomeProduceR, false, TipManager.GetMessage(HomeReturn.ConfigError));
                        return;
                    }
                    if (dic[item.Key] < (int)item.Value)
                    {
                        note.Call(HomeCommand.HomeProduceR, false, TipManager.GetMessage(HomeReturn.PetHomeNo));
                        return;
                    }
                    need += Convert.ToInt32(item.Value);
                }
                //所需物品
                IList needGoods = gc.Value.GetValue<IList>("NeedGoods");
                PlayerEx b0 = note.Player.B0;
                //需要的物品数量
                Dictionary<string, int> goods = new Dictionary<string, int>();
                int goodsTotal = 0;
                foreach (Variant ng in needGoods)
                {
                    int total = ng.GetIntOrDefault("Number") * number;
                    string gs = ng.GetStringOrDefault("GoodsID");
                    if (BurdenManager.GoodsCount(b0, gs) < total)
                    {
                        note.Call(HomeCommand.HomeProduceR, false, TipManager.GetMessage(HomeReturn.GoodsNumberNo));
                        return;
                    }
                    if (goods.ContainsKey(gs))
                    {
                        goods[gs] += total;
                    }
                    else
                    {
                        goods.Add(gs, total);
                    }

                    if (gs == "G_d000389" || gs == "G_d000390" || gs == "G_d000391")
                    {
                        goodsTotal += total;
                    }
                }

                int isbinding = 0;
                foreach (var item in goods)
                {
                    isbinding=BurdenManager.IsBinding(b0, item.Key, (int)item.Value);
                    if (isbinding == 1)
                        break;
                }

                Dictionary<string, Variant> info = new Dictionary<string, Variant>();
                Variant vg = new Variant();
                vg.Add("Number" + isbinding, number);
                info.Add(goodsid, vg);

                if (BurdenManager.IsFullBurden(b0, info))
                {
                    note.Call(HomeCommand.HomeProduceR, false, TipManager.GetMessage(HomeReturn.BurdenFull));
                    return;
                }
                DateTime dt=DateTime.UtcNow;

                if (v.ContainsKey("ProduceList"))
                {
                    Variant mv = MemberAccess.MemberInfo(note.Player.MLevel);
                    int produce = mv.GetIntOrDefault("Produce");//生产对列数

                    IList r = v.GetValue<IList>("ProduceList");
                    if (r.Count > 0)
                    {
                        for (int i = r.Count - 1; i >=0; i--)
                        {
                            DateTime t = ((DateTime)r[i]).ToUniversalTime();
                            if (t < dt)
                            {
                                //移除过期对列
                                r.Remove(r[i]);
                            }
                        }
                    }

                    if (r.Count >= produce)
                    {
                        note.Call(HomeCommand.HomeProduceR, false, TipManager.GetMessage(HomeReturn.HomeProduce2));
                        return;
                    }
                }
                int totaltime = producetime * number;
                if (v.ContainsKey("ProduceList"))
                {
                    IList pl = v.GetValue<IList>("ProduceList");
                    pl.Add(dt.AddSeconds(totaltime));
                }
                else
                {
                    v.Add("ProduceList", new List<DateTime>() { dt.AddSeconds(totaltime) });
                }
                int b = 0;
                BurdenManager.Remove(b0, goods, out b);

                Variant us = new Variant();
                foreach (var item in goods)
                {
                    us.SetOrInc(item.Key,Convert.ToInt32(item.Value));
                    //生产消耗
                    note.Player.AddLog(Actiontype.GoodsUse, item.Key, Convert.ToInt32(item.Value), GoodsSource.HomeProduce, goodsid, number);
                    note.Player.UpdateTaskGoods(item.Key);
                }

                //判断以前是否正在生产
                //string gid = v.GetStringOrDefault("GoodsID");
                //int num = v.GetIntOrDefault("Number");
                //if (num > 0)
                //{
                //    GameConfig gcm = GameConfigAccess.Instance.FindOneById(gid);
                //    if (gcm != null)
                //    {
                //        string title = TipManager.GetMessage(HomeReturn.HomeProduce3);
                //        string content = string.Format(TipManager.GetMessage(HomeReturn.HomeProduce4), gcm.Name, num);
                //        Variant gs = new Variant();
                //        gs.Add("G", gcm.ID);
                //        gs.Add("A", num);
                //        gs.Add("E", gcm.ID);
                //        gs.Add("H", v.GetIntOrDefault("IsBinding"));

                //        List<Variant> goodsList = new List<Variant>();
                //        if (number > 0)
                //        {
                //            goodsList.Add(gs);
                //        }
                //        else
                //        {
                //            goodsList = null;
                //        }
                //        int reTime = Convert.ToInt32(TipManager.GetMessage(EmailReturn.HameDay));
                //        if (EmailAccess.Instance.SendEmail(title, TipManager.GetMessage(PetsReturn.StealPet12), note.PlayerID, note.Player.Name, content, string.Empty, goodsList, reTime))
                //        {
                //            note.Call(EmailCommand.NewEmailTotalR, EmailAccess.Instance.NewTotal(note.PlayerID));
                //        }
                //        v["GoodsID"] = "";
                //        v["Number"] = 0;
                //    }
                //}

                Variant gs1 = new Variant();
                if (home.Save())
                {
                    gs1[goodsid] = number;
                    note.Player.AddGoods(info, GoodsSource.HomeProduce);

                    Variant tmp = new Variant();
                    tmp.Add(subType, v);
                    note.Call(HomeCommand.HomeProduceR, true, tmp);
                    Variant os=new Variant();
                    os["TotalTime"] = totaltime;
                    note.Player.AddLogVariant(Actiontype.HomeProduce, us, gs1, os);
                }
                else
                {
                    note.Call(HomeCommand.HomeProduceR, false, "");
                }
            }
            finally
            {
                m_dic.TryRemove(soleid, out soleid);
            }
        }
示例#20
0
文件: PetMediator.cs 项目: abel/sinan
        /// <summary>
        /// 放养
        /// </summary>
        /// <param name="note"></param>
        public void Stocking(UserNote note)
        {
            //宠物
            string id = note.GetString(0);
            bool isStocking = note.GetBoolean(1);
            if (note.Player.SceneID != SceneHome.DefaultID)
            {
                //不能在【{0}】场景{1}
                string str = string.Format(TipManager.GetMessage(PetsReturn.NoSceneID), note.Player.Scene.Name);
                note.Call(PetsCommand.StockingR, false, isStocking, str);
                return;
            }

            #region 家园驯化完成的宠物直接放养
            if (note.GetInt32(2) == 1)
            {
                PlayerEx home = note.Player.Home;
                Variant pk = home.Value["PetKeep"] as Variant;
                if (pk.GetIntOrDefault("PetsWild") != -1)
                {
                    note.Call(PetsCommand.StockingR, false, isStocking, TipManager.GetMessage(PetsReturn.NoExists));
                    //还不能放养
                    return;
                }
                if (pk.GetStringOrDefault("ID") != id)
                {
                    note.Call(PetsCommand.StockingR, false, isStocking, TipManager.GetMessage(PetsReturn.NoExists));
                    return;
                }
                Pet px = PetAccess.Instance.FindOneById(id);
                PlayerEx b2 = note.Player.B2;
                IList c2 = b2.Value.GetValue<IList>("C");
                Variant v2 = null;
                foreach (Variant v in c2)
                {
                    if (v.GetStringOrDefault("E") == string.Empty)
                    {
                        v2 = v;
                        break;
                    }
                }
                if (v2 == null)
                {
                    note.Call(PetsCommand.StockingR, false, isStocking, TipManager.GetMessage(PetsReturn.PetBurdenB2));
                    return;
                }

                v2["E"] = px.ID;
                v2["G"] = px.Value.GetStringOrDefault("PetsID");
                v2["S"] = px.Value.GetIntOrDefault("Sort");
                v2["H"] = px.Value.GetIntOrDefault("IsBinding");
                v2["A"] = 1;
                v2["D"] = 0;
                v2["R"] = px.Value.GetIntOrDefault("PetsRank");
                v2["I"] = 0;

                pk["ID"] = string.Empty;
                pk["PetID"] = string.Empty;
                pk["StartTime"] = string.Empty;
                pk["EndTime"] = string.Empty;
                pk["PetsWild"] = 0;
                pk["PetName"] = string.Empty;
                pk["PetsRank"] = 0;
                v2["T"] = PetAccess.Instance.CreateAward(note.Player.Level, id, note.PlayerID, note.Player.Pet);

                home.Save();
                b2.Save();

                note.Call(PetsCommand.StockingR, true, isStocking, PetAccess.Instance.GetPetModel(v2));
                Variant mn = new Variant();
                mn.Add("B2", note.Player.B2);
                note.Call(BurdenCommand.BurdenListR, mn);
                return;
            }
            #endregion

            #region 家园与宠物背包宠物交换
            //宠物所在位置
            PlayerEx burden0 = isStocking ? note.Player.B3 : note.Player.B2;

            //放入位置
            PlayerEx burden1 = isStocking ? note.Player.B2 : note.Player.B3;
            IList c0 = burden0.Value.GetValue<IList>("C");
            Variant v0 = null;
            foreach (Variant v in c0)
            {
                if (v.GetStringOrDefault("E") == id)
                {
                    v0 = v;
                    break;
                }
            }
            if (v0 == null)
            {
                note.Call(PetsCommand.StockingR, false, isStocking, TipManager.GetMessage(PetsReturn.NoExists));
                return;
            }

            IList c1 = burden1.Value.GetValue<IList>("C");

            Variant v1 = BurdenManager.GetBurdenSpace(c1);
            if (v1 == null)
            {
                string str = isStocking ? TipManager.GetMessage(PetsReturn.PetBurdenB2) : TipManager.GetMessage(PetsReturn.PetBurdenB3);
                note.Call(PetsCommand.StockingR, false, isStocking, str);
                return;
            }

            if (burden1.Name == "B2")
            {
                Variant ct = PetAccess.Instance.CreateAward(note.Player.Level, id, note.PlayerID, note.Player.Pet);
                //PetBusiness.CreateAward(note.Player, ct, id, note.PlayerID);

                Variant t = v0["T"] as Variant;
                if (t != null)
                {
                    if (t.ContainsKey("ProtectionTime"))
                    {
                        if (ct == null) ct = new Variant();
                        ct.Add("ProtectionTime", t.GetDateTimeOrDefault("ProtectionTime"));
                    }
                }
                v1["T"] = ct;
            }
            else
            {
                Variant t = v0.GetValueOrDefault<Variant>("T");
                Variant ct = new Variant();
                if (t != null)
                {
                    if (t.ContainsKey("ProtectionTime"))
                    {
                        ct.Add("ProtectionTime", t.GetDateTimeOrDefault("ProtectionTime"));
                    }
                }
                v1["T"] = ct;
            }
            v1["E"] = v0["E"];
            v1["G"] = v0["G"];
            v1["S"] = v0["S"];
            v1["H"] = v0["H"];
            v1["A"] = v0["A"];
            v1["D"] = v0["D"];
            v1["R"] = v0["R"];

            if (v0.GetIntOrDefault("I") == 1)
            {
                note.Player.ResetPet(null);
            }

            BurdenManager.BurdenClear(v0);
            burden0.Save();
            burden1.Save();

            //Variant ve = new Variant();
            //ve.Add("B2", note.Player.B2);
            //ve.Add("B3", note.Player.B3);
            //note.Call(BurdenCommand.BurdenListR, ve);
            note.Player.UpdateBurden("B2", "B3");
            if (isStocking)
            {
                note.Call(PetsCommand.StockingR, true, isStocking, PetAccess.Instance.GetPetModel(v1));
            }
            else
            {
                note.Call(PetsCommand.StockingR, true, isStocking, id);
            }

            bool isslip = false;
            if (isStocking)
            {
                if (v0.GetIntOrDefault("P") > 3)
                {
                    isslip = true;
                }
            }
            else
            {
                if (v1.GetIntOrDefault("P") > 3)
                {
                    isslip = true;
                }
            }

            if (isslip)
            {
                List<Variant> ps = PlayerExAccess.Instance.SlipPets(note.Player.B3);
                note.Player.GetSlipPets(ps);
            }
            #endregion
        }
示例#21
0
        /// <summary>
        /// 家园采集
        /// </summary>
        /// <param name="note"></param>
        public static void HomePluck(UserNote note)
        {
            string soleid = note.PlayerID + "HomePluck";

            if (!m_dic.TryAdd(soleid, soleid))
                return;
            try
            {
                //G_d000015成长果实,G_d000016潜力果实  Minute;
                int minute = note.GetInt32(0);
                string name = note.GetString(1);

                string npcid = note.GetString(2);//NPC
                if (!note.Player.EffectActive(npcid, ""))
                    return;

                if (minute < 1)
                {
                    note.Call(HomeCommand.HomePluckR, false, TipManager.GetMessage(HomeReturn.PareError));
                    return;
                }

                GameConfig gc = null;
                if (name == "GuoYuan")
                    gc = GameConfigAccess.Instance.FindOneById("Home_CJ00002");
                if (name == "ShuFang")
                    gc = GameConfigAccess.Instance.FindOneById("Home_CJ00001");
                if (name == "JiaGongFang")
                    gc = GameConfigAccess.Instance.FindOneById("Home_CJ00003");
                if (gc == null)
                {
                    note.Call(HomeCommand.HomePluckR, false, TipManager.GetMessage(HomeReturn.PareError));
                    return;
                }

                List<string> list = new List<string>() { "GuoYuan", "ShuFang", "JiaGongFang" };
                if (!list.Contains(gc.SubType))
                {
                    note.Call(HomeCommand.HomePluckR, false, TipManager.GetMessage(HomeReturn.PareError));
                    return;
                }

                string GoodsID = gc.Value.GetStringOrDefault("GoodsID");
                int ProduceTime = gc.Value.GetIntOrDefault("ProduceTime");
                int Score = gc.Value.GetIntOrDefault("Score");
                //采集需要石器币
                int ScoreT = ((minute * 60) / ProduceTime) * Score;

                PlayerEx home = note.Player.Home;
                if (home == null)
                {
                    note.Call(HomeCommand.HomePluckR, false, TipManager.GetMessage(HomeReturn.NoHome));
                    return;
                }
                Variant Produces = home.Value.GetValueOrDefault<Variant>("Produces");
                Variant v = Produces.GetValueOrDefault<Variant>(gc.SubType);
                IList PetList = v.GetValue<IList>("PetList");
                if (PetList.Count == 0)
                {
                    note.Call(HomeCommand.HomePluckR, false, TipManager.GetMessage(HomeReturn.InPet));
                    return;
                }
                Dictionary<string, Pet> pluckPet = new Dictionary<string, Pet>();
                foreach (Variant k in PetList)
                {
                    string pid = k.GetStringOrDefault("ID");
                    if (!string.IsNullOrEmpty(pid))
                    {
                        Pet p = PetAccess.Instance.FindOneById(pid);
                        if (p != null)
                        {
                            if (PetAccess.Instance.IsFatigue(p))
                            {
                                note.Call(HomeCommand.HomePluckR, false, TipManager.GetMessage(HomeReturn.HomeProduce1));
                                return;
                            }

                            if (!pluckPet.ContainsKey(p.ID))
                            {
                                pluckPet.Add(p.ID, p);
                            }
                        }
                    }
                }

                if (note.Player.Score < ScoreT || (!note.Player.AddScore(-ScoreT, FinanceType.HomePluck)))
                {
                    note.Call(HomeCommand.HomePluckR, false, TipManager.GetMessage(HomeReturn.HomePluckNoScore));
                    return;
                }

                foreach (Pet p in pluckPet.Values)
                {
                    int m = 0;
                    if (gc.SubType == "GuoYuan")
                    {
                        m = p.Value.GetIntOrDefault("CaiJi");
                    }
                    else if (gc.SubType == "ShuFang")
                    {
                        m = p.Value.GetIntOrDefault("JuanZhou");
                    }
                    else if (gc.SubType == "JiaGongFang")
                    {
                        m = p.Value.GetIntOrDefault("JiaGong");
                    }

                    if (m > 0)
                    {
                        //增加疲劳点
                        int fatigue = PetAccess.Instance.HomeFatigue(m);
                        PetAccess.Instance.FatigueAdd(p, fatigue);
                    }
                }

                int n = 0;
                foreach (Variant dy in PetList)
                {
                    if (gc.SubType == "GuoYuan")
                    {
                        n = n + dy.GetIntOrDefault("CaiJi");//采集
                    }
                    else if (gc.SubType == "ShuFang")
                    {
                        n = n + dy.GetIntOrDefault("JuanZhou");//卷轴,养殖
                    }
                    else if (gc.SubType == "JiaGongFang")
                    {
                        n = n + dy.GetIntOrDefault("JiaGong");//加工,挖掘
                    }
                }
                int Number = HomeNumber(n); //可生产道具数量

                if (Number == 0) return;
                DateTime dt = DateTime.UtcNow;
                DateTime endtime = dt.AddMinutes(minute);
                v["GoodsID"] = GoodsID;
                v["Number"] = Number;
                v["StartTime"] = dt;
                v["EndTime"] = endtime;
                v["IsBinding"] = 1;

                home.Save();
                note.Call(HomeCommand.HomePluckR, true, TipManager.GetMessage(HomeReturn.Plucking));
            }
            finally
            {
                string str;
                m_dic.TryRemove(soleid, out str);
            }
        }
示例#22
0
文件: PetMediator.cs 项目: abel/sinan
        /// <summary>
        /// 宠物仓库拖动操作
        /// </summary>
        /// <param name="note"></param>
        private void PetBurdenDrag(UserNote note)
        {
            string b0 = note.GetString(0);
            int p0 = note.GetInt32(1);

            string b1 = note.GetString(2);
            int p1 = note.GetInt32(3);

            PlayerEx burden0 = note.Player.Value[b0] as PlayerEx;
            PlayerEx burden1 = note.Player.Value[b1] as PlayerEx;

            IList c0 = burden0.Value.GetValue<IList>("C");
            IList c1 = burden1.Value.GetValue<IList>("C");

            Variant v0 = null;
            Variant v1 = null;
            foreach (Variant k in c0)
            {
                if (k.GetIntOrDefault("P") == p0)
                {
                    v0 = k;
                    break;
                }
            }
            foreach (Variant k in c1)
            {
                if (k.GetIntOrDefault("P") == p1)
                {
                    v1 = k;
                    break;
                }
            }

            if (v0 == null || v0.GetIntOrDefault("I") == 1)
            {
                note.Call(PetsCommand.PetBurdenDragR, false, TipManager.GetMessage(PetsReturn.NoRelease));
                return;
            }
            if (v0.GetStringOrDefault("E") == "-1")
            {
                note.Call(PetsCommand.PetBurdenDragR, false, TipManager.GetMessage(PetsReturn.NoShock));
                return;
            }

            if (v1 == null || v1.GetIntOrDefault("I") == 1)
            {
                note.Call(PetsCommand.PetBurdenDragR, false, TipManager.GetMessage(PetsReturn.NoRelease));
                return;
            }

            if (v1.GetStringOrDefault("E") == "-1")
            {
                note.Call(PetsCommand.PetBurdenDragR, false, TipManager.GetMessage(PetsReturn.NoShock));
                return;
            }

            if (Swap(v0, v1))
            {
                List<Variant> ps = PlayerExAccess.Instance.SlipPets(note.Player.B3);
                note.Player.GetSlipPets(ps);
            }
            burden0.Save();
            burden1.Save();
            Variant list = new Variant();
            list.Add(b0, burden0);
            if (b0 != b1)
            {
                list.Add(b1, burden1);
            }
            note.Call(BurdenCommand.BurdenListR, list);
        }
示例#23
0
        /// <summary>
        /// 取回宠物
        /// </summary>
        /// <param name="note"></param>
        public static void PetRetrieve(UserNote note)
        {
            string soleid = note.PlayerID + "PetRetrieve";
            if (!m_dic.TryAdd(soleid, soleid))
            {
                return;
            }
            try
            {
                IList boby = note.Body as IList;
                if (boby == null)
                    return;
                string id = note.GetString(0);
                //0表示产生宠物,1表示采集,生产取出宠物,2表示训化完成后取回宠物
                int goodsType = note.GetInt32(1);
                string bType = "B3";
                if (boby.Count > 2)
                {
                    bType = note.GetString(2);
                }

                if (bType != "B2" && bType != "B3")
                    return;

                string npcid = note.GetString(3);//NPC
                if (!note.Player.EffectActive(npcid, ""))
                    return;

                //驯化取回
                PlayerEx home = note.Player.Home;
                if (goodsType == 0)
                {
                    #region 将道具变成宠物的过程
                    Variant pk = home.Value.GetValueOrDefault<Variant>("PetKeep");
                    string goodsid = pk.GetStringOrDefault("ID");
                    Goods g = GoodsAccess.Instance.FindOneById(goodsid);
                    if (g == null)
                    {
                        note.Call(HomeCommand.PetRetrieveR, false, goodsType, TipManager.GetMessage(HomeReturn.ConfigError));
                        return;
                    }
                    if (goodsid == id)
                    {
                        if (pk.GetStringOrDefault("EndTime") != string.Empty)
                        {
                            DateTime endTime;
                            if (!DateTime.TryParse(pk.GetStringOrDefault("EndTime"), out endTime))
                            {
                                note.Call(HomeCommand.PetRetrieveR, false, goodsType, TipManager.GetMessage(HomeReturn.HomeKeeping));
                                return;
                            }
                            if (endTime > DateTime.UtcNow)
                            {
                                note.Call(HomeCommand.PetRetrieveR, false, goodsType, TipManager.GetMessage(HomeReturn.HomeKeeping));
                                return;
                            }
                        }

                        if (pk.GetIntOrDefault("PetsWild") == -1)
                        {
                            //宠物已经产生,不能重复产生
                            return;
                        }

                        string petid = g.Value.GetStringOrDefault("PetID");

                        // 得到宠物基本信息
                        GameConfig gc = GameConfigAccess.Instance.FindOneById(petid);
                        if (gc == null || gc.Value == null)
                        {
                            note.Call(HomeCommand.PetRetrieveR, false, goodsType, TipManager.GetMessage(HomeReturn.PetError));
                            return;
                        }
                        Variant model = gc.Value;
                        string petType = model.GetStringOrDefault("PetsType");
                        int petLevel = model.GetIntOrDefault("PetsLevel");

                        //宠物已经产生
                        Variant petInfo = PetAccess.CreateBase(gc, 0, g.Value.GetIntOrDefault("IsBinding"));
                        Pet p = new Pet();
                        p.ID = ObjectId.GenerateNewId().ToString();
                        p.Name = gc.Name;
                        p.Value = petInfo;
                        p.Modified = DateTime.UtcNow;
                        p.PlayerID = note.PlayerID;
                        p.Created = DateTime.UtcNow;
                        p.Save();

                        pk["ID"] = p.ID;
                        pk["PetID"] = petid;
                        pk["StartTime"] = string.Empty;
                        pk["EndTime"] = string.Empty;
                        pk["PetsWild"] = -1;
                        pk["PetName"] = gc.Name;
                        pk["PetsRank"] = gc.Value.GetIntOrDefault("PetsRank");
                        home.Save();
                        note.Call(HomeCommand.PetRetrieveR, true, goodsType, id);
                        //表示宠物驯化成功
                        note.Player.FinishNote(FinishCommand.PetJobFuHua, gc.Value.GetStringOrDefault("PetsType"));
                        //移除道具
                        GoodsAccess.Instance.Remove(g.ID, note.PlayerID);
                    }
                    return;
                    #endregion
                }
                else if (goodsType == 2)
                {
                    #region 表示取出训化成功的宠物
                    Variant pk = home.Value.GetValueOrDefault<Variant>("PetKeep");
                    if (pk.GetStringOrDefault("ID") != id)
                    {
                        //宠物ID不正确
                        note.Call(HomeCommand.PetRetrieveR, false, goodsType, TipManager.GetMessage(HomeReturn.PetError));
                        return;
                    }

                    Pet px = PetAccess.Instance.FindOneById(id);
                    if (px == null)
                    {
                        note.Call(HomeCommand.PetRetrieveR, false, goodsType, TipManager.GetMessage(HomeReturn.PetError));
                        return;
                    }
                    //宠物槽
                    PlayerEx pgx = bType == "B3" ? note.Player.B3 : note.Player.B2;
                    IList pcx = pgx.Value.GetValue<IList>("C");
                    Variant vx = null;
                    foreach (Variant k in pcx)
                    {
                        if (k.GetStringOrDefault("E") == string.Empty)
                        {
                            vx = k;
                            break;
                        }
                    }
                    if (vx == null)
                    {
                        note.Call(HomeCommand.PetRetrieveR, false, goodsType, TipManager.GetMessage(HomeReturn.PetBurdenFull));
                        return;
                    }

                    vx["E"] = px.ID;
                    vx["G"] = px.Value.GetStringOrDefault("PetsID");
                    vx["S"] = px.Value.GetIntOrDefault("Sort");
                    vx["H"] = px.Value.GetIntOrDefault("IsBinding");
                    vx["A"] = 1;
                    vx["D"] = 0;
                    vx["R"] = px.Value.GetIntOrDefault("PetsRank");
                    vx["I"] = 0;
                    if (bType == "B2")
                    {
                        Variant ct = PetAccess.Instance.CreateAward(note.Player.Level, id, note.PlayerID, note.Player.Pet);
                        vx["T"] = ct;
                    }

                    //宠物背包保存
                    pgx.Save();

                    pk["ID"] = string.Empty;
                    pk["PetID"] = string.Empty;
                    pk["StartTime"] = string.Empty;
                    pk["EndTime"] = string.Empty;
                    pk["PetsWild"] = 0;
                    pk["PetName"] = string.Empty;
                    pk["PetsRank"] = 0;
                    home.Save();
                    //更新宠物背包
                    //note.Call(ClientCommand.UpdateActorR, new PlayerExDetail(note.Player.B3));
                    note.Player.UpdateBurden(bType);
                    note.Call(HomeCommand.PetRetrieveR, true, goodsType, id);
                    if (bType == "B3")
                    {
                        //溜宠格子内,宠物将给随
                        if (vx.GetIntOrDefault("P") > 3)
                        {
                            List<Variant> ps = PlayerExAccess.Instance.SlipPets(note.Player.B3);
                            note.Player.GetSlipPets(ps);
                        }
                    }
                    else
                    {
                        note.Call(PetsCommand.StockingR, true, true, PetAccess.Instance.GetPetModel(vx));
                    }
                    return;
                    #endregion
                }

                #region 取回采集,生产,合成的宠物
                Pet pet = PetAccess.Instance.FindOneById(id);
                if (pet == null)
                {
                    note.Call(HomeCommand.PetRetrieveR, false, goodsType, TipManager.GetMessage(HomeReturn.PetError));
                    return;
                }
                //宠物槽
                PlayerEx pg = bType == "B3" ? note.Player.B3 : note.Player.B2;
                IList pc = pg.Value.GetValue<IList>("C");
                Variant v = null;
                foreach (Variant k in pc)
                {
                    if (string.IsNullOrEmpty(k.GetStringOrDefault("E")))
                    {
                        v = k;
                        break;
                    }
                }
                if (v == null)
                {
                    note.Call(HomeCommand.PetRetrieveR, false, goodsType, TipManager.GetMessage(HomeReturn.PetBurdenFull));
                    return;
                }

                Variant produces = home.Value.GetValueOrDefault<Variant>("Produces");
                foreach (string k in produces.Keys)
                {
                    Variant p = produces[k] as Variant;
                    IList petList = p.GetValue<IList>("PetList");
                    for (int i = 0; i < petList.Count; i++)
                    {
                        Variant m = petList[i] as Variant;
                        if (m.GetStringOrDefault("ID") == id)
                        {
                            if (!string.IsNullOrEmpty(p.GetStringOrDefault("GoodsID")))
                            {
                                note.Call(HomeCommand.PetRetrieveR, false, goodsType, TipManager.GetMessage(HomeReturn.Produceing));
                                return;
                            }

                            v["E"] = pet.ID;
                            v["G"] = pet.Value.GetStringOrDefault("PetsID");
                            v["S"] = pet.Value.GetIntOrDefault("Sort");
                            v["D"] = 0;
                            v["R"] = pet.Value.GetIntOrDefault("PetsRank");
                            v["I"] = 0;
                            v["A"] = 1;
                            v["H"] = pet.Value.GetIntOrDefault("IsBinding");

                            if (bType == "B2")
                            {
                                v["T"] = PetAccess.Instance.CreateAward(note.Player.Level, id, note.PlayerID, note.Player.Pet);
                            }

                            petList.Remove(m);
                            home.Save();
                            pet.Save();
                            pg.Save();
                            if (bType == "B3")
                            {
                                //溜宠格子内,宠物将给随
                                if (v.GetIntOrDefault("P") > 3)
                                {
                                    List<Variant> ps = PlayerExAccess.Instance.SlipPets(note.Player.B3);
                                    note.Player.GetSlipPets(ps);
                                }
                            }
                            else
                            {
                                note.Call(PetsCommand.StockingR, true, true, PetAccess.Instance.GetPetModel(v));
                            }
                            note.Player.UpdateBurden(bType);
                            note.Call(HomeCommand.PetRetrieveR, true, goodsType, id);
                            return;
                        }
                    }
                }
                note.Call(HomeCommand.PetRetrieveR, false, TipManager.GetMessage(HomeReturn.PetError));
                #endregion
            }
            finally
            {
                string str;
                m_dic.TryRemove(soleid, out str);
            }
        }
示例#24
0
 /// <summary>
 /// 队长返回请求结果
 /// </summary>
 /// <param name="note"></param>
 private void ReplyApply(UserNote note, PlayerTeam team)
 {
     bool reply = note.GetBoolean(0);
     string memberID = note.GetString(1);
     int check = note.GetInt32(2);
     PlayerBusiness member;
     if (note.Player.Scene.TryGetPlayer(memberID, out member))
     {
         if (member.GetHashCode() == check)
         {
             if (reply)
             {
                 if (team.TryAddMember(member))
                 {
                     var members = team.AllPlayerDetail;
                     member.Call(TeamCommand.IntoTeamR, true, new object[] { team, members });
                     note.Player.CallAllExcludeOne(member, TeamCommand.NewMemberR, team.TeamID, new PlayerDetail(member));
                     return;
                 }
             }
             else //不同意
             {
                 //对方拒绝了你的入队请求
                 member.Call(TeamCommand.IntoTeamR, false, TipManager.GetMessage(ClientReturn.ReplyApply1));
             }
         }
     }
 }
示例#25
0
        /// <summary>
        /// 将仓库中取出道具        
        /// </summary>
        /// <param name="note"></param>
        private void BurdenOut(UserNote note)
        {
            string soleid = note.PlayerID + "BurdenOut";
            if (!m_dic.TryAdd(soleid, soleid))
                return;
            try
            {
                int p = note.GetInt32(0);
                string name = note.GetString(1);
                if (string.IsNullOrEmpty(name))
                {
                    note.Call(BurdenCommand.BurdenOutR, false, TipManager.GetMessage(BurdenReturn.BurdenOut1));
                    return;
                }

                List<string> ls = new List<string>() { "B0", "B1" };
                if (!ls.Contains(name))
                {
                    note.Call(BurdenCommand.BurdenOutR, false, TipManager.GetMessage(BurdenReturn.BurdenOut1));
                    return;
                }
                //源
                PlayerEx b1 = name == "B0" ? note.Player.B0 : note.Player.B1;
                Variant v = BurdenManager.BurdenPlace(b1, p);
                if (v == null)
                {
                    note.Call(BurdenCommand.BurdenOutR, false, TipManager.GetMessage(BurdenReturn.BurdenOut1));
                    return;
                }

                string goodsid = v.GetStringOrDefault("E");
                if (string.IsNullOrEmpty(goodsid))
                {
                    note.Call(BurdenCommand.BurdenOutR, false, TipManager.GetMessage(BurdenReturn.BurdenOut2));
                    return;
                }

                //目标
                PlayerEx b0 = name == "B0" ? note.Player.B1 : note.Player.B0;
                IList c = b0.Value.GetValue<IList>("C");
                Variant m = BurdenManager.GetBurdenSpace(c);
                if (m == null)
                {
                    note.Call(BurdenCommand.BurdenOutR, false, TipManager.GetMessage(BurdenReturn.BurdenOut3));
                    return;
                }

                m["E"] = v["E"];
                m["G"] = v["G"];
                m["A"] = v["A"];
                m["S"] = v["S"];
                m["D"] = v["D"];
                m["H"] = v["H"];
                m["T"] = v["T"];
                BurdenManager.BurdenClear(v);
                b0.Save();
                b1.Save();

                Variant tmp = new Variant();
                tmp.Add("B0", note.Player.B0);
                tmp.Add("B1", note.Player.B1);
                note.Player.UpdateTaskGoods(m.GetStringOrDefault("G"));

                note.Call(BurdenCommand.BurdenListR, tmp);
                note.Call(BurdenCommand.BurdenOutR, true, string.Empty);
            }
            finally
            {
                m_dic.TryRemove(soleid, out soleid);
            }
        }
示例#26
0
        /// <summary>
        /// 购买列表
        /// </summary>
        /// <param name="note"></param>
        public static void AuctionBuyList(UserNote note)
        {
            string soleid = note.PlayerID + string.Empty + note.Name;
            if (!m_dic.TryAdd(soleid, soleid))
                return;
            try
            {
                int pageSize = note.GetInt32(0);
                int pageIndex = note.GetInt32(1);
                string goodsType = note.GetString(2);
                bool isName = note.GetBoolean(3);

                string npcid = note.GetString(4);//NPC
                if (!note.Player.EffectActive(npcid, ""))
                    return;

                int total = 0;
                int currIndex = 0;
                List<Auction> list = AuctionAccess.Instance.AuctionBuyList(note.PlayerID, goodsType, isName, pageSize, pageIndex, out total, out currIndex);
                List<Variant> msg = new List<Variant>();
                if (list != null)
                {
                    foreach (Auction a in list)
                    {
                        Variant v = new Variant();
                        v.Add("ID", a.ID);
                        v.Add("Name", a.Name);
                        foreach (var k in a.Value)
                        {
                            v.Add(k.Key, k.Value);
                        }
                        msg.Add(v);
                    }
                }
                note.Call(AuctionCommand.AuctionBuyListR, total, currIndex, msg);
            }
            finally
            {
                m_dic.TryRemove(soleid, out soleid);
            }
        }
示例#27
0
        /// <summary>
        /// 拖动拆分操作
        /// </summary>
        /// <param name="note"></param>
        private void BurdenDrag(UserNote note)
        {
            string soleid = note.PlayerID + "BurdenDrag";
            if (!m_dic.TryAdd(soleid, soleid))
            {
                return;
            }

            try
            {
                string b0 = note.GetString(0);
                string b1 = note.GetString(2);
                if (string.IsNullOrEmpty(b0) || string.IsNullOrEmpty(b1))
                {
                    note.Call(BurdenCommand.BurdenDragR, false, TipManager.GetMessage(BurdenReturn.BurdenDrag1));
                    return;
                }
                List<string> lt = new List<string>() { "B0", "B1" };
                if (!lt.Contains(b0))
                    return;
                if (!lt.Contains(b1))
                    return;

                int p0 = note.GetInt32(1);
                int p1 = note.GetInt32(3);
                int num = note.GetInt32(4);
                if (num <= 0)
                    return;

                Variant v0 = null;
                Variant v1 = null;

                PlayerEx burden0 = note.Player.Value[b0] as PlayerEx;
                PlayerEx burden1 = note.Player.Value[b1] as PlayerEx;
                if (burden0 == null || burden1 == null)
                {
                    note.Call(BurdenCommand.BurdenDragR, false, TipManager.GetMessage(BurdenReturn.BurdenDrag1));
                    return;
                }

                IList c0 = burden0.Value.GetValue<IList>("C");
                foreach (Variant d in c0)
                {
                    if (d.GetIntOrDefault("P") == p0)
                    {
                        v0 = d;
                        break;
                    }
                }

                if (v0 == null)
                {
                    note.Call(BurdenCommand.BurdenDragR, false, TipManager.GetMessage(BurdenReturn.BurdenDrag2));
                    return;
                }

                IList c1 = burden1.Value.GetValue<IList>("C");
                foreach (Variant d in c1)
                {
                    if (d.GetIntOrDefault("P") == p1)
                    {
                        v1 = d;
                        break;
                    }
                }

                if (v1 == null)
                {
                    note.Call(BurdenCommand.BurdenDragR, false, TipManager.GetMessage(BurdenReturn.BurdenDrag2));
                    return;
                }

                if (b0 == b1 && p0 == p1)
                {
                    note.Call(BurdenCommand.BurdenDragR, false, TipManager.GetMessage(BurdenReturn.NoSame));
                    return;
                }

                if (b0 == "B0" && b1 == "B1")
                {
                    GameConfig m_gc = GameConfigAccess.Instance.FindOneById(v0.GetStringOrDefault("G"));
                    if (m_gc != null)
                    {
                        //任务道具不能放入仓库中
                        if (m_gc.Value.GetStringOrDefault("GoodsType") == "112006")
                        {
                            note.Call(BurdenCommand.BurdenDragR, false, TipManager.GetMessage(BurdenReturn.TaskGoods));
                            return;
                        }
                    }
                }

                string pid0 = v0.GetStringOrDefault("E");

                string pid1 = v1.GetStringOrDefault("E");

                if (string.IsNullOrEmpty(pid0))
                {
                    //起始格子数据不正确
                    note.Call(BurdenCommand.BurdenDragR, false, TipManager.GetMessage(BurdenReturn.NoStartGrid));
                    return;
                }
                int n = v0.GetIntOrDefault("A");
                if (num > n)
                {
                    //起始格子数量小于想折分数量,数据不正确
                    note.Call(BurdenCommand.BurdenDragR, false, TipManager.GetMessage(BurdenReturn.NoNumber));
                    return;
                }

                if (!string.IsNullOrEmpty(pid1))
                    return;

                if (b0 == b1)
                {
                    //if (string.IsNullOrEmpty(pid1))
                    //{
                    if (num == n)
                    {
                        v1["E"] = v0["E"];
                        v1["G"] = v0["G"];
                        v1["S"] = v0["S"];
                        v1["A"] = v0["A"];
                        v1["H"] = v0["H"];
                        v1["D"] = v0["D"];
                        v1["T"] = v0["T"];
                        BurdenManager.BurdenClear(v0);
                    }
                    else if (num < n)
                    {
                        //分拆包袱中的道具数量
                        v0["A"] = (n - num);

                        v1["E"] = v0["E"];
                        v1["G"] = v0["G"];
                        v1["S"] = v0["S"];
                        v1["A"] = num;
                        v1["H"] = v0["H"];
                        v1["D"] = v0["D"];
                        v1["T"] = v0["T"];
                    }
                    else
                    {
                        note.Call(BurdenCommand.BurdenDragR, false, TipManager.GetMessage(BurdenReturn.NoNumber));
                        return;
                    }
                    //}
                    //else
                    //{
                    //    return;
                    //    //不相同就交换位置
                    //    //BurdenJiaoHuan(v0, v1);
                    //}
                }
                else
                {

                    //必须目标格子为空
                    //if (!string.IsNullOrEmpty(pid1))
                    //{
                    //    note.Call(BurdenCommand.BurdenDragR, false, TipManager.GetMessage(BurdenReturn.NoNumber));
                    //    return;
                    //}

                    v1["E"] = v0["E"];
                    v1["G"] = v0["G"];
                    v1["S"] = v0["S"];
                    v1["A"] = v0["A"];
                    v1["H"] = v0["H"];
                    v1["D"] = v0["D"];
                    v1["T"] = v0["T"];
                    BurdenManager.BurdenClear(v0);
                }

                burden0.Save();
                burden1.Save();

                Variant list = new Variant();
                if (b0 == b1)
                {
                    list.Add(b0, burden0);
                }
                else
                {
                    list.Add(b0, burden0);
                    list.Add(b1, burden1);
                }

                note.Call(BurdenCommand.BurdenListR, list);

                string goodsid = string.Empty;
                if ((b0 == "B0" || b1 == "B0") && v1 != null)
                {
                    //表示普通包袱减少
                    goodsid = v1.GetStringOrDefault("G");
                }

                if (!string.IsNullOrEmpty(goodsid) && note.Player.TaskGoods.Contains(goodsid))
                {
                    //通知任务系统
                    note.Player.UpdateTaskGoods(goodsid);
                }
            }
            finally
            {
                m_dic.TryRemove(soleid, out soleid);
            }
        }
示例#28
0
        /// <summary>
        /// 得到自己出售和竞标的列表
        /// </summary>
        /// <param name="note"></param>
        public static void AuctionSellOrBidList(UserNote note)
        {
            string soleid = note.PlayerID + "AuctionSellOrBidList";

            if (!m_dic.TryAdd(soleid, soleid))
                return;
            try
            {
                int total = 0;
                int curIndex = 0;

                string optionType = note.GetString(0);
                int pageSize = 6;//note.GetInt32(1)
                int pageIndex = note.GetInt32(2);

                string npcid = note.GetString(3);//NPC
                if (!note.Player.EffectActive(npcid, ""))
                    return;

                List<Variant> list = AuctionBase.GetAuctionSellList(note.PlayerID, optionType, pageSize, pageIndex, out total, out curIndex);

                note.Call(AuctionCommand.AuctionSellOrBidListR, note.GetString(0), list, total, curIndex);
            }
            finally
            {
                m_dic.TryRemove(soleid, out soleid);
            }
        }
示例#29
0
        /// <summary>
        /// 镶嵌,主要是将宝石镶嵌在装备上
        /// </summary>
        /// <param name="note"></param>
        private void Mosaic(UserNote note)
        {
            //宝石等级不能超过装备等级,必须能够改造
            string goodsid = note.GetString(0);
            //提升成功率的道具
            int upcount = note.GetInt32(1);
            //镶在什么位置
            string p = note.GetString(2);
            string baoshiid = note.GetString(3);

            int baoship = note.GetInt32(4);//宝石在包袱中的位置

            string npcid = note.GetString(5);
            if (!note.Player.EffectActive(npcid, ""))
                return;

            Goods g = GoodsAccess.Instance.GetGoodsByID(goodsid, note.PlayerID);
            if (g == null)
            {
                note.Call(MosaicCommand.MosaicR, false, TipManager.GetMessage(MosaicReturn.MosaicEquipNo));
                return;
            }

            if (g.Value.GetIntOrDefault("IsChange") == 0)
            {
                note.Call(MosaicCommand.MosaicR, false, TipManager.GetMessage(MosaicReturn.MosaicNoChange));
                return;
            }

            List<GameConfig> mosaic = GameConfigAccess.Instance.Find("Mosaic");
            GameConfig gc = null;
            foreach (GameConfig gcg in mosaic)
            {
                if (gcg.Value.GetStringOrDefault("Type") == g.Value.GetStringOrDefault("GoodsType"))
                {
                    gc = gcg;
                    break;
                }
            }
            if (gc == null)
            {
                note.Call(MosaicCommand.MosaicR, false, TipManager.GetMessage(MosaicReturn.MosaicNoLet));
                return;
            }
            //允许镶嵌的宝石列表
            IList mosaicNeed = gc.Value.GetValue<IList>("MosaicNeed");

            GameConfig baoshi = GameConfigAccess.Instance.FindOneById(baoshiid);
            if (baoshi == null)
            {
                note.Call(MosaicCommand.MosaicR, false, TipManager.GetMessage(MosaicReturn.MosaicNoBaoShi));
                return;
            }

            int baoShiLevel = baoshi.Value.GetIntOrDefault("Level");

            //需用绑定游戏币数量

            Variant price = g.Value.GetVariantOrDefault("Price");
            Variant buy = price.GetVariantOrDefault("Buy");

            if (!mosaicNeed.Contains(baoshi.ID))
            {
                //不能够镶嵌该宝石
                note.Call(MosaicCommand.MosaicR, false, TipManager.GetMessage(MosaicReturn.MosaicNoLet));
                return;
            }

            //得到物品所在孔的信息
            Variant baoShiInfo = g.Value.GetVariantOrDefault("BaoShiInfo");

            object o;
            if (!baoShiInfo.TryGetValueT(p, out o))
            {
                note.Call(MosaicCommand.MosaicR, false, TipManager.GetMessage(MosaicReturn.MosaicEquipNo));
                return;
            }

            if ((string)o == "-1")
            {
                note.Call(MosaicCommand.MosaicR, false, TipManager.GetMessage(MosaicReturn.MosaicNoPunch));
                return;
            }

            GameConfig goods = null;

            if ((string)o != "0")
            {
                //表示想镶嵌的位置存在宝石
                goods = GameConfigAccess.Instance.FindOneById((string)o);
                //表示该位置已经镶嵌宝石,但新宝石要求必须大于旧宝石
                if (goods.Value.GetIntOrDefault("Level") >= baoShiLevel)
                {
                    //新镶嵌的宝石等级要求大于旧宝石
                    note.Call(MosaicCommand.MosaicR, false, TipManager.GetMessage(MosaicReturn.MosaicNewOrOld));
                    return;
                }
            }

            string upID = gc.Value.GetStringOrDefault("UpID");

            GameConfig upGoods = GameConfigAccess.Instance.FindOneById(upID);
            if (upGoods == null)
            {
                note.Call(MosaicCommand.MosaicR, false, TipManager.GetMessage(MosaicReturn.MosaicEquipNo));
                return;
            }

            //GameConfig gcWin = ConfigAccess.Instance.FindOneById(g.GoodsID);
            //if (gcWin == null)
            //    return;

            int score = Convert.ToInt32(baoShiLevel * GetPrice(g.GoodsID) * 0.2);

            if (note.Player.Score < score || (!note.Player.AddScore(-score, FinanceType.Mosaic)))
            {
                note.Call(MosaicCommand.MosaicR, false, TipManager.GetMessage(MosaicReturn.MosaicNoScoreB));
                return;
            }

            int upCount = 0;

            PlayerEx b = note.Player.B0;

            bool isBaoShi = false;
            IList c = b.Value.GetValue<IList>("C");
            Variant vr = null;
            Variant zb = null;
            foreach (Variant con in c)
            {
                if (con.GetIntOrDefault("P") == baoship)
                {
                    if (con.GetStringOrDefault("E") == baoshiid)
                    {
                        vr = con;
                        //break;
                    }
                    else
                    {
                        note.Call(MosaicCommand.MosaicR, false, TipManager.GetMessage(MosaicReturn.MosaicNoLet));
                        return;
                    }
                }
                if (con.GetStringOrDefault("G") == upID)
                {
                    upCount += con.GetIntOrDefault("A");
                }

                if (zb == null)
                {
                    if (con.GetStringOrDefault("E") == goodsid)
                    {
                        zb = con;
                    }
                }
            }
            if (vr != null)
            {
                isBaoShi = true;
            }

            if (!isBaoShi)
            {
                note.Call(MosaicCommand.MosaicR, false, TipManager.GetMessage(MosaicReturn.MosaicNoLet));
                return;
            }

            if (upCount < upcount)
            {
                note.Call(MosaicCommand.MosaicR, false, TipManager.GetMessage(MosaicReturn.MosaicNoLet));
                return;
            }

            double lv = GetSuccessLv(baoShiLevel);
            if (upcount > 0)
            {
                lv += GoodsAccess.Instance.GetSuccess(upcount);
            }

            Variant us = new Variant();

            if (upcount > 0)
            {
                //BurdenAccess.Remove(b, UpID, upcount);
                //移除提高成功率的道具
                note.Player.RemoveGoods(upID, upcount, GoodsSource.Mosaic);

                us[upID] = upcount;
            }

            if (!note.Player.RemoveGoods(baoshiid, 1, GoodsSource.Mosaic))
            {
                note.Call(MosaicCommand.MosaicR, false, TipManager.GetMessage(MosaicReturn.MosaicNoBaoShi));
                return;
            }

            //使用的宝石
            us[baoshiid] = 1;
            bool isSuccess = NumberRandom.RandomHit(lv);
            if (isSuccess)
            {
                baoShiInfo[p] = baoshiid;
                b.Save();
                g.Save();
                note.Player.FinishNote(FinishCommand.XianQian, g.ID);
                note.Player.UpdateBurden();
                note.Call(MosaicCommand.MosaicR, true, goodsid);
            }
            else
            {
                note.Player.UpdateBurden();
                note.Call(MosaicCommand.MosaicR, false, TipManager.GetMessage(MosaicReturn.MosaicFail));
            }

            Variant os=new Variant();
            os["IsSuccess"] = isSuccess;
            //装备唯一标识
            os["ID"] = g.ID;
            os["GoodsID"] = g.GoodsID;
            os["Lv"] = lv;
            os["Score"] = -score;
            note.Player.AddLogVariant(Actiontype.Mosaic, us, null,os);
        }
示例#30
0
        /// <summary>
        /// 进入玩家之间的战斗
        /// </summary>
        /// <param name="note"></param>
        private void IntoBattlePK(UserNote note)
        {
            if (note.Player.Fight != null) return;
            PlayerBusiness playerB = note[1] as PlayerBusiness;
            if (playerB.Fight != null) return;

            List<PlayerBusiness> players = FightBase.GetPlayers(note.Player);
            FightObject[] teamA = FightBase.CreateFightPlayers(players);

            List<PlayerBusiness> playersB = FightBase.GetPlayers(playerB);
            FightObject[] teamB = FightBase.CreateFightPlayers(playersB);

            players.AddRange(playersB);
            FightBase fb = null;
            FightType ft = (FightType)(note.GetInt32(0));
            if (ft == FightType.PK)
            {   //PK
                fb = new FightBusinessPK(teamA, teamB, players);
            }
            else if (ft == FightType.RobPK)
            {
                fb = new FightBusinessRob(teamA, teamB, players);
            }
            else if (ft == FightType.ProPK)
            {
                fb = new FightBusinessPro(teamA, teamB, players);
            }
            else if (ft == FightType.CC)
            {   //切磋
                fb = new FightBusinessCC(teamB, teamA, players);
            }
            else
            {
                return;
            }
            foreach (var player in players)
            {
                player.Fight = fb;
            }
            fb.SendToClinet(FightCommand.StartFight, (int)ft, teamA, teamB);
            fb.Start();
        }