Beispiel #1
0
        /// <summary>
        /// 熔炼,主要是将装备销除得到新的道具和取下镶嵌的宝石,只能够选择一颗宝石
        /// </summary>
        /// <param name="note"></param>
        private void Melt(UserNote note)
        {
            //熔练配置信息
            //string id = note.GetString(0);
            //熔炼的道具
            string goodsid = note.GetString(0);
            //选择宝石,-1表示没有选择
            string baoshi = note.GetString(1);

            //熔炼的道具信息
            Goods g = GoodsAccess.Instance.GetGoodsByID(goodsid, note.PlayerID);

            if (g == null)
            {
                note.Call(MeltCommand.MeltR, false, TipManager.GetMessage(MeltReturn.MeltEquipNo));
                return;
            }
            //熔炼物品的绑定状态
            int isBinding = g.Value.GetIntOrDefault("IsBinding");
            if (g.Value.GetIntOrDefault("IsChange") == 0)
            {
                note.Call(MeltCommand.MeltR, false, TipManager.GetMessage(MeltReturn.MeltNoChange));
                return;
            }

            if (g.Value.GetStringOrDefault("GoodsType").IndexOf("111") != 0)
            {
                note.Call(MeltCommand.MeltR, false, TipManager.GetMessage(MeltReturn.MeltEquipNo));
                return;
            }
            Variant Price = g.Value.GetValueOrDefault<Variant>("Price");
            Variant Buy = Price.GetValueOrDefault<Variant>("Buy");
            double Score = Math.Round(Buy.GetIntOrDefault("Score") * 0.5);
            if (Score > note.Player.Score)
            {
                note.Call(MeltCommand.MeltR, false, TipManager.GetMessage(MeltReturn.MeltNoScoreB));
                return;
            }
            string id = string.Empty;
            List<GameConfig> meltList = GameConfigAccess.Instance.Find("Split");
            foreach (GameConfig gcs in meltList)
            {
                if ((int)gcs.Value["Level"] == g.Value.GetIntOrDefault("Level"))
                {
                    //可以熔炼类型列表
                    IList ts = gcs.Value["Type"] as IList;
                    foreach (Variant m in ts)
                    {
                        if (m.GetStringOrDefault("GoodsType") == g.Value.GetStringOrDefault("GoodsType"))
                        {
                            id = gcs.ID;
                            break;
                        }
                    }
                }
            }

            //得到熔炼配置信息
            GameConfig gc = GameConfigAccess.Instance.FindOneById(id);
            if (gc == null)
            {
                note.Call(MeltCommand.MeltR, false, TipManager.GetMessage(MeltReturn.MeltConfigError));
                return;
            }
            //得到的道具
            IList v = gc.Value.GetValue<IList>("GetGoods");

            PlayerEx burden = note.Player.B0;
            IList c = burden.Value.GetValue<IList>("C");
            //包袱空格数
            int space = BurdenManager.BurdenSpace(c);
            //需要空格数
            int count = baoshi == "-1" ? v.Count : v.Count + 1;

            if (count > space)
            {
                //表示包袱不能存放可得到的物品
                note.Call(MeltCommand.MeltR, false, TipManager.GetMessage(MeltReturn.MeltBurdenFull));
                return;
            }
            List<Variant> list = new List<Variant>();

            Dictionary<string, PlayerEx> bus = new Dictionary<string, PlayerEx>();
            Dictionary<string, int> numberList = new Dictionary<string, int>();
            Dictionary<string, int> binds = new Dictionary<string, int>();
            Variant tmp;
            foreach (Variant m in v)
            {
                //得到的物品
                GameConfig getGoods = GameConfigAccess.Instance.FindOneById(m.GetStringOrDefault("GoodsID"));

                int a = BurdenManager.StactCount(getGoods);
                string name = "B0";
                if (a == 0)
                {
                    note.Call(MeltCommand.MeltR, false, TipManager.GetMessage(MeltReturn.MeltEquipError));
                    return;
                }
                PlayerEx b = note.Player.Value[name] as PlayerEx;
                if (!bus.ContainsKey(name)) bus.Add(name, b);

                if (!numberList.ContainsKey(getGoods.ID))
                    numberList.Add(getGoods.ID, m.GetIntOrDefault("Number"));
                else
                    numberList[getGoods.ID] += m.GetIntOrDefault("Number");

                if (!binds.ContainsKey(getGoods.ID)) binds.Add(getGoods.ID, isBinding);

                //TODO:得到的物品检查
                tmp = new Variant();
                tmp.Add("GoodsID", getGoods.ID);
                tmp.Add("Name", getGoods.Name);
                tmp.Add("Count", m.GetIntOrDefault("Number"));
                tmp.Add("IsGet", 1);
                list.Add(tmp);
            }
            if (baoshi != string.Empty)
            {
                GameConfig getBaoShi = GameConfigAccess.Instance.FindOneById(g.Value.GetVariantOrDefault("BaoShiInfo")[baoshi].ToString());
                if (getBaoShi != null)
                {
                    if (!bus.ContainsKey("B0"))
                    {
                        bus.Add("B0", note.Player.B0);
                    }
                    numberList.SetOrInc(getBaoShi.ID, 1);
                    if (!binds.ContainsKey(getBaoShi.ID))
                    {
                        binds.Add(getBaoShi.ID, isBinding);
                    }
                }
            }

            if (BurdenManager.BurdenIsFull(bus, numberList, binds))
            {
                note.Call(MeltCommand.MeltR, false, TipManager.GetMessage(MeltReturn.MeltBurdenFull));
                return;
            }

            BurdenManager.TaskGoodsInsert(bus, numberList, binds, note.PlayerID);

            #region 移除熔炼的装备
            foreach (Variant con in c)
            {
                if (con.GetStringOrDefault("E") == goodsid)
                {
                    tmp = new Variant();
                    tmp.Add("GoodsID", g.GoodsID);
                    tmp.Add("Name", g.Name);
                    tmp.Add("Count", con.GetIntOrDefault("A"));
                    tmp.Add("IsGet", 0);//0表示失去,1表示得到
                    list.Add(tmp);

                    //g.Mode = 1;
                    g.Save();

                    BurdenManager.BurdenClear(con);
                    break;
                }
            }
            #endregion

            burden.Save();
            note.Call(MeltCommand.MeltR, true, list);
            note.Player.UpdateBurden();
        }
Beispiel #2
0
 /// <summary>
 /// 通知任务系统
 /// </summary>
 protected void CheckPlayerTasks()
 {
     Dictionary<string, int> allApc = new Dictionary<string, int>();
     foreach (FightApc target in m_teamB)
     {
         FightPlayer killer = target.Killer as FightPlayer;
         if (killer != null)
         {
             allApc.SetOrInc(target.APC.ID, 1);
         }
     }
     if (allApc.Count > 0)
     {
         foreach (var p in m_players)
         {
             if (p == null) continue;
             //通知任务系统
             UserNote note2 = new UserNote(p, TaskCommand.FightingTask, new object[] { allApc });
             Notifier.Instance.Publish(note2);
         }
     }
 }