/// <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(); }
/// <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); } } }