コード例 #1
0
ファイル: Goods_Equip.cs プロジェクト: abel/sinan
        /// <summary>
        /// 礼包
        /// </summary>
        /// <param name="note"></param>
        /// <param name="gc"></param>
        private void LiBao(UserNote note, GameConfig gc)
        {
            Variant package = note.GetVariant(0);
            int p = package.GetIntOrDefault("P");

            Variant tmp = BurdenManager.BurdenPlace(note.Player.B0, p);
            if (tmp == null)
            {
                note.Call(GoodsCommand.UseGoodsR, false, string.Format(TipManager.GetMessage(GoodsReturn.LiBao1), gc.Name));
                return;
            }

            //判断物品是否绑定
            int isBinding = tmp.GetIntOrDefault("H");
            Variant libao = gc.Value.GetVariantOrDefault("LiBao");
            if (libao == null)
            {
                note.Call(GoodsCommand.UseGoodsR, false, string.Format(TipManager.GetMessage(GoodsReturn.LiBao1), gc.Name));
                return;
            }
            Dictionary<string, Variant> dic = new Dictionary<string, Variant>();
            int bond = 0;
            int score = 0;
            int coin = 0;
            if (!libao.ContainsKey("Award"))
            {
                #region 固定奖励礼包
                foreach (var item in libao)
                {
                    switch (item.Key)
                    {
                        case "Bond":
                            bond = libao.GetIntOrDefault(item.Key);
                            break;
                        case "Score":
                            score = libao.GetIntOrDefault(item.Key);
                            break;
                        case "Coin":
                            coin = libao.GetIntOrDefault(item.Key);
                            break;
                        default:
                            GetLiBaoAward(dic, item.Key, (int)item.Value, isBinding);
                            break;
                    }
                }
                #endregion
            }
            else
            {
                #region 随机奖励礼包

                Variant award = libao.GetValue<Variant>("Award");
                Dictionary<string, int> goods = new Dictionary<string, int>();
                Award.GetPackets(award, goods);
                if (goods.Count > 0)
                {
                    foreach (var item in goods)
                    {
                        GetLiBaoAward(dic, item.Key, item.Value, isBinding);
                    }
                }
                #endregion
            }

            PlayerEx burden = note.Player.B0;
            if (dic.Count > 0)
            {
                if (BurdenManager.IsFullBurden(burden, dic))
                {
                    note.Call(GoodsCommand.UseGoodsR, false, TipManager.GetMessage(BurdenReturn.BurdenFull));
                    return;
                }
            }

            //移除成功
            if (note.Player.RemoveGoods(p, GoodsSource.LiBao))
            {
                if (dic.Count > 0)
                {
                    //得到新物品
                    note.Player.AddGoods(dic, GoodsSource.LiBao);
                }
                if (bond > 0)
                {
                    //添加
                    note.Player.AddBond(bond, FinanceType.LiBao);
                }

                if (score > 0)
                {
                    //添加
                    note.Player.AddScore(score, FinanceType.LiBao);
                }

                if (ConfigLoader.Config.FreeCoin)
                {
                    if (coin > 0)
                    {
                        note.Player.AddCoin(coin, FinanceType.LiBao);
                        UserNote un = new UserNote(note.Player, PartCommand.Recharge, new object[] { coin });
                        Notifier.Instance.Publish(un);
                    }
                }
                //移除一个道具
                note.Call(GoodsCommand.UseGoodsR, true, gc.ID);

            }
            else
            {
                note.Call(GoodsCommand.UseGoodsR, false, string.Format(TipManager.GetMessage(GoodsReturn.LiBao1), gc.Name));
            }
        }
コード例 #2
0
ファイル: TeamCaptainMediator.cs プロジェクト: abel/sinan
 /// <summary>
 /// 更新队伍信息
 /// </summary>
 /// <param name="note"></param>
 /// <param name="team"></param>
 private void UpdateTeam(UserNote note, PlayerTeam team)
 {
     Variant v = note.GetVariant(0);
     team.AutoInto = v.GetBooleanOrDefault("AutoAgree");
     team.ShieldAutoApply = v.GetBooleanOrDefault("ShieldAutoApply");
     team.Explain = v.GetStringOrDefault("Explain");
     team.Icon = v.GetStringOrDefault("Icon");
     var buffer = AmfCodec.Encode(TeamCommand.UpdateTeamR, new object[] { team });
     note.Player.CallAll(buffer);
     team.CallAway(buffer, note.Player.SceneID);
 }
コード例 #3
0
ファイル: ShipmentMediator.cs プロジェクト: abel/sinan
        private void NewOrder(UserNote note)
        {
            UserSession user = note.Session;
            Variant v = note.GetVariant(0);

            string vs = JsonConvert.SerializeObject(v);
            //LogWrapper.Warn("请求:" + vs);

            BuyGoodsRequest request = new BuyGoodsRequest();

            string meta = v.GetStringOrDefault("goodsmeta");
            request.goodsmeta = Convert.ToBase64String(Encoding.UTF8.GetBytes(meta));
            request.goodsurl = v.GetStringOrDefault("goodsurl");
            request.openid = user.UserID.PadLeft(32, '0');
            request.openkey = user.key;
            request.payitem = v.GetStringOrDefault("payitem");
            request.pf = v.GetStringOrDefault("platform") ?? v.GetStringOrDefault("pf");
            request.pfkey = v.GetStringOrDefault("pfkey");
            request.appmode = v.GetIntOrDefault("appmode", 2);
            request.device = v.GetIntOrDefault("device");
            request.zoneid = ServerLogger.zoneid;

            string host = ServerManager.BuyHost;
            string uri = ServerManager.BuyUri;

            StringBuilder sb = new StringBuilder(512);
            string quest = request.Build(sb, null).ToString();
            string sign = AppSign.Sign(uri, quest);

            sb.Clear();
            sb.Append(uri + "?");
            request.Build(sb, UrlUtility.UrlEncode);
            sb.Append("&sig=");
            sb.Append(sign);

            HttpArgs a = new HttpArgs();
            a.Host = host;
            a.Url = sb.ToString();

            //LogWrapper.Warn("请求Url:" + a.Url);

            IPEndPoint ipadd = IPHelper.CreateEndPoint(host, 443);
            byte[] bin = SslHttpClient.Get(ipadd, a, null);
            string result = Encoding.UTF8.GetString(bin);

            Variant re = JsonConvert.DeserializeObject<Variant>(result);
            if (re.GetIntOrDefault("ret", -1) == 0)
            {
                string token = re.GetStringOrDefault("token");
                if (!string.IsNullOrEmpty(token))
                {
                    if (CreateOrder(note.Player, token))
                    {
                        user.Call(MallCommand.NewTokenR, true, re);
                        return;
                    }
                }
            }
            user.Call(MallCommand.NewTokenR, false, re);
            //LogWrapper.Warn("请求结果:" + result);
        }
コード例 #4
0
ファイル: ShipmentMediator.cs プロジェクト: abel/sinan
 //保存订单到数据库
 private void CreateOrder(UserNote note)
 {
     if (note == null || note.Player == null)
     {
         return;
     }
     Variant v = note.GetVariant(0);
     if (v == null)
     {
         note.Call(MallCommand.CoinOrderR, false, v);
         return;
     }
     string token = v.GetStringOrDefault("token");
     if (string.IsNullOrEmpty(token))
     {
         note.Call(MallCommand.CoinOrderR, false, v);
         return;
     }
     bool result = CreateOrder(note.Player, token);
     note.Call(MallCommand.CoinOrderR, result, v);
 }
コード例 #5
0
ファイル: EmailBusiness.cs プロジェクト: abel/sinan
        /// <summary>
        /// 发送邮件
        /// </summary>
        /// <param name="note"></param>
        public static void SendEmail(UserNote note)
        {
            Variant d = note.GetVariant(0);
            //标题
            string title = d.GetStringOrDefault("mailtitle");
            if (title.Length > 20)
            {
                note.Call(EmailCommand.SendEmailR, false, TipManager.GetMessage(EmailReturn.EmailTitalLength));
                return;
            }
            if (d.GetStringOrEmpty("mailMess").Length > 300)
            {
                note.Call(EmailCommand.SendEmailR, false, TipManager.GetMessage(EmailReturn.EmailContent));
                return;
            }
            //mailMess
            IList goodsList = d.GetValue<IList>("goodsList");
            int fee = 5;//要扣除的邮费
            int score = 0;
            if (d.ContainsKey("moneyGoods"))
            {
                Variant mg = d.GetVariantOrDefault("moneyGoods");
                score = mg.GetIntOrDefault("Score");
                if (mg != null)
                {
                    fee += Convert.ToInt32(Math.Ceiling(score * 0.01));
                }
            }

            if (goodsList.Count > 0)
            {
                fee += goodsList.Count * 10;
            }
            //发送物品物数量

            if (note.Player.Score < (fee + score))
            {
                //游戏币不足
                note.Call(EmailCommand.SendEmailR, false, TipManager.GetMessage(EmailReturn.NoScore));
                return;
            }

            PlayerEx b0 = note.Player.B0;
            IList c = b0.Value.GetValue<IList>("C");

            if (!IsCheck(note.Player, goodsList, c))
                return;

            string name = d.GetStringOrDefault("playerName");
            if (note.Player.Name == name)
            {
                note.Call(EmailCommand.SendEmailR, false, TipManager.GetMessage(EmailReturn.NoSelf));
                return;
            }

            PlayerBusiness pb = PlayersProxy.FindPlayerByName(name);
            if (pb == null)
            {
                note.Call(EmailCommand.SendEmailR, false, TipManager.GetMessage(EmailReturn.NoExists));
                return;
            }

            if (!note.Player.AddScore(-(fee + score), FinanceType.EmailFee, string.Format("{0},{1},{2}", fee, score, pb.ID)))
            {
                note.Call(EmailCommand.SendEmailR, false, TipManager.GetMessage(EmailReturn.NoScore));
                return;
            }

            Variant dic = new Variant();
            //bool isChange = false;
            foreach (Variant gs in goodsList)
            {
                foreach (Variant con in c)
                {
                    if (con.GetIntOrDefault("P") != gs.GetIntOrDefault("P"))
                        continue;
                    //如果道具非绑定不能发送
                    string goodsid = con.GetStringOrDefault("G");
                    int num = con.GetIntOrDefault("A");

                    BurdenManager.BurdenClear(con);
                    note.Player.UpdateTaskGoods(goodsid);

                    //记录邮寄道具情况
                    dic.SetOrInc(goodsid, num);
                }
            }

            string mid = "";
            if (b0.Save())
            {
                Email model = new Email();
                model.ID = ObjectId.GenerateNewId().ToString();
                model.Name = string.IsNullOrEmpty(title) ? string.Format(TipManager.GetMessage(EmailReturn.SendEmail1), note.Player.Name) : title;
                model.Status = 0;
                model.Ver = 1;
                model.MainType = EmailCommand.Personal;
                model.Created = DateTime.UtcNow;
                model.Value = EmailBase.CreateEmailValue(note.PlayerID, note.Player.Name, pb.ID, pb.Name, d);
                model.Save();

                if (pb.Online)
                {
                    //得到新邮件请查收
                    pb.Call(EmailCommand.NewEmailTotalR, EmailAccess.Instance.NewTotal(pb.ID));
                }

                if (goodsList != null && goodsList.Count > 0)
                {
                    note.Player.UpdateBurden();
                }
                note.Call(EmailCommand.SendEmailR, true, EmailReturn.SendEmailSuccess);
                mid = model.ID;
            }

            if (dic.Count > 0)
            {
                foreach (var item in dic)
                {
                    note.Player.AddLog(Actiontype.GoodsUse, item.Key, Convert.ToInt32(item.Value), GoodsSource.SendEmail, pb.Name, 0);
                }
            }
        }
コード例 #6
0
ファイル: ArenaInfo.cs プロジェクト: abel/sinan
        /// <summary>
        /// 创建竞技场
        /// </summary>
        /// <param name="note"></param>
        public static void CreateArena(UserNote note)
        {
            string soleid = note.PlayerID + "CreateArena";
            if (!m_dic.TryAdd(soleid, soleid))
                return;
            try
            {
                Variant m = note.GetVariant(0);
                if (m == null)
                {
                    //参数为不能为空
                    note.Call(ArenaCommand.CreateArenaR, false, TipManager.GetMessage(ArenaReturn.CreateArena1));
                    return;
                }
                ArenaBase model = new ArenaBase();
                model.PlayerID = note.PlayerID;
                model.ArenaID = m.GetStringOrDefault("ID");

                GameConfig gc = GameConfigAccess.Instance.FindOneById(model.ArenaID);
                if (gc == null)
                {
                    //竞技场基本配置不正确
                    note.Call(ArenaCommand.CreateArenaR, false, TipManager.GetMessage(ArenaReturn.CreateArena2));
                    return;
                }
                Variant v = gc.Value;
                if (v == null)
                {
                    note.Call(ArenaCommand.CreateArenaR, false, TipManager.GetMessage(ArenaReturn.CreateArena2));
                    return;
                }
                //ArenaConfig.ArenaInfo(gc);

                model.Group = m.GetIntOrDefault("Group");
                //if (!ArenaConfig.IsGroup(model.Group))
                //{
                //    note.Call(ArenaCommand.CreateArenaR, false, "分组数量不正确");
                //    return;
                //}

                //Variant group = v.GetValueOrDefault<Variant>("Group").GetValueOrDefault<Variant>(model.Group.ToString());

                string petlevel = m.GetStringOrDefault("PetLevel");
                //if (!ArenaConfig.IsPetLevel(petlevel))
                //{
                //    note.Call(ArenaCommand.CreateArenaR, false, "请选择宠物等级限制");
                //    return;
                //}

                int petmix = 0;
                int petmax = 0;

                string[] strs = petlevel.Split('-');

                if (!int.TryParse(strs[0], out petmix))
                {
                    //请选择宠物最底等级限制
                    note.Call(ArenaCommand.CreateArenaR, false, TipManager.GetMessage(ArenaReturn.CreateArena3));
                    return;
                }
                if (!int.TryParse(strs[1], out petmax))
                {
                    //请选择宠物最高等级限制
                    note.Call(ArenaCommand.CreateArenaR, false, TipManager.GetMessage(ArenaReturn.CreateArena4));
                    return;
                }

                model.PetMin = petmix;
                model.PetMax = petmax;

                model.WarType = m.GetIntOrDefault("WinType");
                if (model.WarType == 0)
                {
                    for (int i = 0; i < model.Group; i++)
                    {
                        model.GroupName.Add(i.ToString());
                    }
                }

                model.IsOtherInto = m.GetBooleanOrDefault("IsOtherInto");
                model.IsWatch = m.GetBooleanOrDefault("IsWatch");

                if (model.IsOtherInto && (!model.IsWatch))
                {
                    //允许中途参战必须可以观战
                    note.Call(ArenaCommand.CreateArenaR, false, TipManager.GetMessage(ArenaReturn.CreateArena5));
                    return;
                }

                model.IsGoods = m.GetBooleanOrDefault("IsGoods");

                model.WinType = m.GetIntOrDefault("WinType");

                model.Scene = m.GetStringOrDefault("Scene");

                GameConfig sc = GameConfigAccess.Instance.FindOneById(model.Scene);
                if (sc == null)
                {
                    //场景不存在
                    note.Call(ArenaCommand.CreateArenaR, false, TipManager.GetMessage(ArenaReturn.CreateArena6));
                    return;
                }
                //得到场景信息
                model.SceneSession = new ArenaScene(sc);

                int PrepareTime = m.GetIntOrDefault("PrepareTime");
                model.PrepareTime = PrepareTime;

                int GameTime = m.GetIntOrDefault("GameTime");
                model.GameTime = GameTime;

                DateTime dt = DateTime.UtcNow;

                model.StartTime = dt.AddMinutes(PrepareTime);

                model.EndTime = model.StartTime.AddMinutes(GameTime);
                model.PetNumber = m.GetIntOrDefault("PetNumber");
                model.Name = note.Player.Name;
                //密码设置
                model.PassWord = m.GetStringOrDefault("PassWord");
                model.SoleID = GetAreneID();// Guid.NewGuid().ToString("N");
                model.UserPets = m.GetIntOrDefault("UserPets");
                model.FightPoor = m.GetIntOrDefault("FightPoor");
                if (!ArenaLimit(note, model, v))
                    return;

                ArenaBusiness dal = new ArenaBusiness();
                int a = dal.CreateArenaBase(note.PlayerID, model);
                if (a == 0)
                {
                    PlayersProxy.CallAll(ArenaCommand.CreateArenaR, new object[] { true, note.Player.Name });
                    return;
                }
                if (a == 1)
                {
                    //该竞技场已经存在
                    note.Call(ArenaCommand.CreateArenaR, false, TipManager.GetMessage(ArenaReturn.CreateArena7));
                    return;
                }
                if (a == 2)
                {
                    //你已经创建有竞技场,不能再创建
                    note.Call(ArenaCommand.CreateArenaR, false, TipManager.GetMessage(ArenaReturn.CreateArena8));
                    return;
                }
            }
            finally
            {
                m_dic.TryRemove(soleid, out soleid);
            }
        }
コード例 #7
0
ファイル: EmailBusiness.cs プロジェクト: abel/sinan
        /// <summary>
        /// 夺宝奇兵家族奖励分配
        /// </summary>
        /// <param name="note"></param>
        public static void RobFamilyAward(UserNote note)
        {
            Variant v = note.GetVariant(0);
            PlayerEx familyEx = note.Player.Family;
            string familyID = familyEx.Value.GetStringOrDefault("FamilyID");
            if (string.IsNullOrEmpty(familyID))
                return;
            Family model = FamilyAccess.Instance.FindOneById(familyID);
            if (model == null)
                return;
            IList persons = model.Value.GetValue<IList>("Persons");
            long TotalDevote = 0;//总的共献度
            foreach (Variant k in persons)
            {
                TotalDevote += k.GetIntOrDefault("Devote");
            }

            foreach (Variant k in persons)
            {
                long countL = (k.GetIntOrDefault("Devote") * v.GetIntOrDefault("Count")) / TotalDevote;
                int count = (int)countL;
                if (count > 0)
                {
                    PlayerBusiness pb = PlayersProxy.FindPlayerByID(k.GetStringOrDefault("PlayerID"));
                    if (pb != null)
                    {
                        string title = TipManager.GetMessage(EmailReturn.RobFamilyAward1);
                        string content = TipManager.GetMessage(EmailReturn.RobFamilyAward2);
                        int reTime = Convert.ToInt32(TipManager.GetMessage(EmailReturn.HameDay));
                        Variant gs = new Variant();
                        gs.Add("G", v.GetStringOrDefault("Goods"));
                        gs.Add("A", count);
                        gs.Add("E", v.GetStringOrDefault("Goods"));

                        List<Variant> goodsList = new List<Variant>() { gs };

                        if (EmailAccess.Instance.SendEmail(title, TipManager.GetMessage(EmailReturn.RobFamilyAward3), pb.ID, pb.Name, content, string.Empty, goodsList, reTime))
                        {
                            if (pb.Online)
                            {
                                pb.Call(EmailCommand.NewEmailTotalR, EmailAccess.Instance.NewTotal(pb.ID));
                            }
                        }
                    }
                }
            }
        }
コード例 #8
0
ファイル: AuctionBusiness.cs プロジェクト: abel/sinan
        /// <summary>
        /// 出售
        /// </summary>
        public static void AuctionSell(UserNote note)
        {
            int num = Convert.ToInt32(TipManager.GetMessage(AuctionReturn.AuctionSellerCount));
            if (AuctionAccess.Instance.AuctionSellerCount(note.PlayerID) >= num)
            {
                string msg = string.Format(TipManager.GetMessage(AuctionReturn.SellerCount), num);
                note.Call(AuctionCommand.AuctionSellR, false, msg);
                return;
            }

            Variant d = note.GetVariant(0);

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

            PlayerEx b0 = note.Player.B0;
            if (b0 == null)
            {
                note.Call(AuctionCommand.AuctionSellR, false, TipManager.GetMessage(AuctionReturn.BurdenTypeError));
                return;
            }

            if (d.GetStringOrDefault("PackageType") != "B0")
            {
                note.Call(AuctionCommand.AuctionSellR, false, TipManager.GetMessage(AuctionReturn.BurdenTypeError));
                return;
            }

            Variant tmp = BurdenManager.BurdenPlace(b0, d.GetIntOrDefault("Postion"));

            if (tmp == null)
            {
                note.Call(AuctionCommand.AuctionSellR, false, TipManager.GetMessage(AuctionReturn.PostionError));
                return;
            }

            string soleid = tmp.GetStringOrDefault("E");
            string goodsid = tmp.GetStringOrDefault("G");
            int nu = tmp.GetIntOrDefault("A");
            //物品发生变化
            if (soleid != d.GetStringOrDefault("SoleID"))
            {
                note.Call(AuctionCommand.AuctionSellR, false, TipManager.GetMessage(DealReturn.NumberError));
                return;
            }

            //数量发生变化
            if (nu != d.GetIntOrDefault("Number"))
            {
                note.Call(AuctionCommand.AuctionSellR, false, TipManager.GetMessage(DealReturn.NumberError));
                return;
            }

            Variant t = tmp.GetVariantOrDefault("T");
            if (t != null)
            {
                if (t.ContainsKey("EndTime"))
                {
                    note.Call(AuctionCommand.AuctionSellR, false, TipManager.GetMessage(AuctionReturn.AuctionFreezeDate));
                    return;
                }
            }

            if (tmp.GetIntOrDefault("H") == 1)
            {
                note.Call(AuctionCommand.AuctionSellR, false, TipManager.GetMessage(AuctionReturn.NoSellIsBinding));
                return;
            }

            Variant dy = new Variant(20);
            dy.Add("Number", d.GetIntOrDefault("Number"));
            dy.Add("Price", d.GetIntOrDefault("Price"));
            dy.Add("LimitTime", d.GetIntOrDefault("LimitTime"));

            string name = "";
            int startScore = 0;//起拍价

            if (soleid != tmp.GetStringOrDefault("G"))
            {
                Goods g = GoodsAccess.Instance.FindOneById(soleid);
                if (g == null)
                {
                    note.Call(AuctionCommand.AuctionSellR, false, TipManager.GetMessage(DealReturn.NumberError));
                    return;
                }
                dy.Add("SoleID", g.ID);
                dy.Add("GoodsID", g.GoodsID);
                dy.Add("GoodsType", g.Value.GetStringOrDefault("GoodsType"));
                dy.Add("Sort", g.Value.GetIntOrDefault("Sort"));
                Variant Price = g.Value.GetVariantOrDefault("Price");
                startScore = Price.GetIntOrDefault("StallScore");
                name = g.Name;

            }
            else
            {
                GameConfig gc = GameConfigAccess.Instance.FindOneById(soleid);
                if (gc == null)
                {
                    note.Call(AuctionCommand.AuctionSellR, false, TipManager.GetMessage(DealReturn.NumberError));
                    return;
                }
                dy.Add("SoleID", gc.ID);
                dy.Add("GoodsID", gc.ID);
                dy.Add("GoodsType", gc.Value.GetStringOrDefault("GoodsType"));
                dy.Add("Sort", gc.Value.GetIntOrDefault("Sort"));

                Variant Price = gc.Value.GetVariantOrDefault("Price");
                startScore = Price.GetIntOrDefault("StallScore");
                name = gc.Name;
            }

            int number = dy.GetIntOrDefault("Number");

            int startScoreTotal = startScore * number;//系统指导价
            int startPriceClient = d.GetIntOrDefault("StartPrice");//要求起价
            int priceClient = d.GetIntOrDefault("Price");//一口价

            if (startScoreTotal > startPriceClient)
            {
                note.Call(AuctionCommand.AuctionSellR, false, TipManager.GetMessage(AuctionReturn.StartScore));
                return;
            }

            if (startScoreTotal > priceClient || startPriceClient > priceClient)
            {
                note.Call(AuctionCommand.AuctionSellR, false, TipManager.GetMessage(AuctionReturn.StartPriceClient));
                return;
            }

            if (d.GetIntOrDefault("LimitTime") == 6)
            {
                dy["CustodialFees"] = Convert.ToInt32(startScore * 0.01 * number);
            }
            else if (d.GetIntOrDefault("LimitTime") == 12)
            {
                dy["CustodialFees"] = Convert.ToInt32(startScore * 0.02 * number);
            }
            else if (d.GetIntOrDefault("LimitTime") == 24)
            {
                dy["CustodialFees"] = Convert.ToInt32(startScore * 0.03 * number);
            }
            else if (d.GetIntOrDefault("LimitTime") == 48)
            {
                dy["CustodialFees"] = Convert.ToInt32(startScore * 0.05 * number);
            }
            else
            {
                note.Call(AuctionCommand.AuctionSellR, false, TipManager.GetMessage(AuctionReturn.LimitTime));
                return;
            }

            int CustodialFees = dy.GetIntOrDefault("CustodialFees");

            if (note.Player.Score < CustodialFees || (!note.Player.AddScore(-CustodialFees, FinanceType.AuctionSell)))
            {
                note.Call(AuctionCommand.AuctionSellR, false, TipManager.GetMessage(AuctionReturn.CustodialFees));
                return;
            }

            //同时清理包袱中的物品
            BurdenManager.BurdenClear(tmp);
            if (b0.Save())
            {
                //保存成功
                note.Player.UpdateBurden();
                //先扣除保管费
                dy.Add("StartPrice", d.GetIntOrDefault("StartPrice"));
                dy.Add("SellerID", note.PlayerID);
                dy.Add("SellName", note.Player.Name);
                dy.Add("BidderID", "");
                dy.Add("BidPrice", d.GetIntOrDefault("StartPrice"));//起拍价
                dy.Add("BidName", "");
                dy.Add("BidTime", null);

                DateTime dt = DateTime.UtcNow;
                dy.Add("Created", dt);
                dy.Add("EndTime", dt.AddHours(dy.GetIntOrDefault("LimitTime")));
                dy.Add("Status", 0);//0

                Auction auction = new Auction();
                auction.ID = ObjectId.GenerateNewId().ToString();
                auction.Name = name;
                auction.Modified = DateTime.UtcNow;
                auction.Value = dy;
                if (auction.Save())
                {
                    note.Call(AuctionCommand.AuctionSellR, true, "");
                    note.Player.AddLog(Actiontype.GoodsUse, goodsid, nu, GoodsSource.AuctionSell, "", 0);
                    return;
                }
            }

            note.Call(AuctionCommand.AuctionSellR, false, "");
        }
コード例 #9
0
ファイル: GoodsMediator.cs プロジェクト: abel/sinan
        /// <summary>
        /// 商品的使用
        /// </summary>
        /// <param name="note"></param>
        private void UseGoods(UserNote note)
        {
            //商品的使用

            Variant package = note.GetVariant(0);
            int check = DateLimit(note.Player, package);
            if (check != 0)
            {
                note.Call(GoodsCommand.UseGoodsR, false, TipManager.GetMessage(check));
                return;
            }

            string goodsid = package.GetStringOrDefault("E");
            string gid = string.Empty;
            Goods g = GoodsAccess.Instance.GetGoodsByID(goodsid);
            if (g != null)
            {
                string goodsType = g.Value.GetStringOrDefault("GoodsType");
                if (g.PlayerID != note.PlayerID) return;
                //表示装备的使用
                if (goodsType.StartsWith("111"))
                {
                    Dress(note, g);
                    return;
                }
                if (goodsType == "112011")
                {
                    LiBao(note, g);
                    return;
                }
                //112001	药品类
                //112002	材料类
                //112003	宠物道具
                //112004	辅助类
                //112005	技能类
                //112006	任务类
                //112007	家园类
                //112008	特殊类
                //112009    宠物
                //112010    宠物蛋
                //112011    礼包
                //药品类
            }
            GameConfig gc = GameConfigAccess.Instance.FindOneById(g == null ? goodsid : g.GoodsID);
            if (gc == null)
            {
                return;
            }
            if (gc.Value.GetStringOrDefault("GoodsType") == "112011")
            {
                LiBao(note, gc);
            }
            else
            {
                UseGoods(note, package, gc, false);
            }
        }
コード例 #10
0
ファイル: PetBusiness.cs プロジェクト: abel/sinan
        /// <summary>
        /// 添加快捷键
        /// </summary>
        /// <param name="note"></param>
        public static void AddKey(UserNote note)
        {
            string playerpetid = note.GetString(0);

            Variant o = note.GetVariant(1);
            Pet p = null;
            if (note.Player.Pet != null)
            {
                if (note.Player.Pet.ID == playerpetid)
                {
                    p = note.Player.Pet;
                }
            }
            if (p == null)
            {
                p = PetAccess.Instance.FindOneById(playerpetid);
            }
            if (p == null)
            {
                note.Call(PetsCommand.AddKeyR, false, TipManager.GetMessage(PetsReturn.NoPets));
                return;
            }

            if (!p.Value.ContainsKey("HotKeys"))
            {
                Variant v = new Variant();
                for (int i = 0; i < 10; i++)
                {
                    v.Add(i.ToString(), string.Empty);
                }
                p.Value.Add("HotKeys", v);
            }
            else
            {
                Variant h = p.Value.GetVariantOrDefault("HotKeys");
                string[] strs = new string[h.Count];
                h.Keys.CopyTo(strs, 0);
                for (int i = 0; i < strs.Length; i++)
                {
                    if (h.ContainsKey(strs[i]))
                    {
                        h[strs[i]] = string.Empty;
                    }
                }
            }

            //宠物技能槽
            IList SkillGroove = p.Value.GetValue<IList>("SkillGroove");
            Dictionary<string, string> dic = new Dictionary<string, string>();
            foreach (var item in o)
            {
                string value = (string)item.Value;
                bool IsHave = false;
                foreach (Variant v in SkillGroove)
                {
                    if (v.GetStringOrDefault("SkillID") == value)
                    {
                        IsHave = true;
                        break;
                    }
                }
                if (IsHave)
                {
                    if (!dic.ContainsKey(value))
                    {
                        //去除相同技能
                        dic.Add(value, item.Key);
                    }
                }
            }
            Variant HotKeys = p.Value.GetVariantOrDefault("HotKeys");

            foreach (string k in dic.Keys)
            {
                if (HotKeys.ContainsKey(dic[k]))
                {
                    HotKeys[dic[k]] = k;
                }
            }
            p.Save();
            note.Call(PetsCommand.UpdatePetR, true, p);

            note.Call(PetsCommand.AddKeyR, true, TipManager.GetMessage(PetsReturn.AddKey));
        }
コード例 #11
0
ファイル: DealBusiness.cs プロジェクト: abel/sinan
        /// <summary>
        /// 锁定交易
        /// </summary>
        /// <param name="note"></param>
        public static void LockDeal(UserNote note)
        {
            Variant goods = note.GetVariant(0);
            int Score = goods.GetIntOrDefault("Score");
            //int Coin = goods.GetIntOrDefault("Coin");

            if (note.Player.Score < Score)
            {
                note.Call(DealCommand.LockDealR, false, TipManager.GetMessage(DealReturn.NoScore));
                return;
            }

            //if (note.Player.Coin < Coin)
            //{
            //    note.Call(DealCommand.LockDealR, false, TipManager.GetMessage(DealReturn.NoCoin));
            //    return;
            //}

            IList gs = goods.GetValue<IList>("Goods");
            if (!note.Player.Value.ContainsKey("Deal"))
            {
                note.Call(DealCommand.LockDealR, false, TipManager.GetMessage(DealReturn.StopDeal));
                return;
            }

            Variant d = note.Player.Value.GetVariantOrDefault("Deal");

            PlayerBusiness OnLineBusiness = PlayersProxy.FindPlayerByID(d.GetStringOrDefault("PlayerID"));
            if (OnLineBusiness == null || (!OnLineBusiness.Online))
            {
                note.Player.Value.Remove("Deal");
                note.Call(DealCommand.LockDealR, false, TipManager.GetMessage(DealReturn.NoLine));
                return;
            }
            //接收物品的一方
            PlayerEx burdenOther = OnLineBusiness.B0;
            if (BurdenManager.BurdenDealFull(burdenOther, gs))
            {
                OnLineBusiness.Call(DealCommand.LockDealR, false, TipManager.GetMessage(DealReturn.LockBurdenFull_0));
                note.Call(DealCommand.LockDealR, false, TipManager.GetMessage(DealReturn.LockBurdenFull_1));
                return;
            }

            //对方包袱已满,请先整理才能交易
            PlayerEx burden = note.Player.B0;
            IList c = burden.Value.GetValue<IList>("C");

            if (!IsCheck(gs, c, note.Player))
                return;

            d["Goods"] = goods;
            d["Status"] = 2;
            Variant deal = OnLineBusiness.Value.GetVariantOrDefault("Deal");
            OnLineBusiness.Call(DealCommand.LockDealR, true, goods);
            note.Call(DealCommand.LockDealR, true, 0);
        }