public static void InitDemonGoodsDataList(GameClient client) { if (null == client.ClientData.DamonGoodsDataList) { client.ClientData.DamonGoodsDataList = Global.sendToDB <List <GoodsData>, string>(204, string.Format("{0}:{1}", client.ClientData.RoleID, 5000), client.ServerId); if (client.ClientData.DamonGoodsDataList == null || client.ClientData.DamonGoodsDataList.Count == 0) { client.ClientData.DamonGoodsDataList = new List <GoodsData>(); DamonMgr.AddOldDamonGoodsData(client); } } JingLingQiYuanManager.getInstance().RefreshProps(client, true); }
public static void RemoveDamonGoodsData(GameClient client, GoodsData goodsData) { if (null != client.ClientData.DamonGoodsDataList) { if (goodsData.Site == 5000) { lock (client.ClientData.DamonGoodsDataList) { client.ClientData.DamonGoodsDataList.Remove(goodsData); } JingLingQiYuanManager.getInstance().RefreshProps(client, true); } } }
public static void AddDamonGoodsData(GameClient client, GoodsData goodsData, bool refreshProps = true) { if (goodsData.Site == 0 || goodsData.Site == 10000) { if (null == client.ClientData.DamonGoodsDataList) { client.ClientData.DamonGoodsDataList = new List <GoodsData>(); } lock (client.ClientData.DamonGoodsDataList) { client.ClientData.DamonGoodsDataList.Add(goodsData); } JingLingQiYuanManager.getInstance().RefreshProps(client, true); } }
/// <summary> /// 初始化列表 /// </summary> public static void InitDemonGoodsDataList(GameClient client) { if (null == client.ClientData.DamonGoodsDataList) { client.ClientData.DamonGoodsDataList = Global.sendToDB <List <GoodsData>, string>((int)TCPGameServerCmds.CMD_GETGOODSLISTBYSITE, string.Format("{0}:{1}", client.ClientData.RoleID, (int)SaleGoodsConsts.UsingDemonGoodsID), client.ServerId); //这样做能够保证gamedb的请求每次客户端登录后最多一次 if (null == client.ClientData.DamonGoodsDataList || client.ClientData.DamonGoodsDataList.Count == 0) { client.ClientData.DamonGoodsDataList = new List <GoodsData>(); DamonMgr.AddOldDamonGoodsData(client); } } JingLingQiYuanManager.getInstance().RefreshProps(client); }
/// <summary> /// 兼容老版本的宠物 /// </summary> /// <param name="goodsData"></param> public static void AddOldDamonGoodsData(GameClient client) { if (null == client.ClientData.GoodsDataList) { return; } List <GoodsData> listDamon = new List <GoodsData>(); // 把在装备栏也在背包中的精灵添加到精灵栏 for (int i = 0; i < client.ClientData.GoodsDataList.Count; i++) { int nCategories = Global.GetGoodsCatetoriy(client.ClientData.GoodsDataList[i].GoodsID); if (nCategories >= (int)ItemCategories.ShouHuChong && nCategories <= (int)ItemCategories.ChongWu) { if (client.ClientData.GoodsDataList[i].Using > 0 && client.ClientData.GoodsDataList[i].Site == 0) { int nBagIndex = Global.GetIdleSlotOfDamonGoods(client); string[] dbFields = null; String strcmd = Global.FormatUpdateDBGoodsStr(client.ClientData.RoleID, client.ClientData.GoodsDataList[i].Id, client.ClientData.GoodsDataList[i].Using, "*", "*", "*", (int)SaleGoodsConsts.UsingDemonGoodsID, "*", "*", client.ClientData.GoodsDataList[i].GCount, "*", nBagIndex, "*", "*", "*", "*", "*", "*", "*", "*", "*", "*", "*"); // 卓越信息 [12/13/2013 LiaoWei] 装备转生 TCPProcessCmdResults dbRequestResult = Global.RequestToDBServer(TCPClientPool.getInstance(), TCPOutPacketPool.getInstance(), (int)TCPGameServerCmds.CMD_DB_UPDATEGOODS_CMD, strcmd, out dbFields, client.ServerId); if (dbRequestResult == TCPProcessCmdResults.RESULT_FAILED) { continue; } if (dbFields.Length <= 0 || Convert.ToInt32(dbFields[1]) < 0) { continue; } AddDamonGoodsData(client, client.ClientData.GoodsDataList[i], false); client.ClientData.GoodsDataList[i].Site = (int)SaleGoodsConsts.UsingDemonGoodsID; client.ClientData.GoodsDataList[i].BagIndex = nBagIndex; listDamon.Add(client.ClientData.GoodsDataList[i]); } } } // 添加到精灵栏的精灵从背包中移除 for (int i = 0; i < listDamon.Count; i++) { Global.RemoveGoodsData(client, listDamon[i]); } JingLingQiYuanManager.getInstance().RefreshProps(client); }
/// <summary> /// 删除精灵装备栏物品 /// </summary> /// <param name="goodsData"></param> public static void RemoveDamonGoodsData(GameClient client, GoodsData goodsData) { if (null == client.ClientData.DamonGoodsDataList) { return; } if (goodsData.Site != (int)SaleGoodsConsts.UsingDemonGoodsID) { return; } lock (client.ClientData.DamonGoodsDataList) { client.ClientData.DamonGoodsDataList.Remove(goodsData); } JingLingQiYuanManager.getInstance().RefreshProps(client); }
public static void UpdateRolePetSkill(GameClient client) { List <PassiveSkillData> resultList = new List <PassiveSkillData>(); List <GoodsData> petList = client.ClientData.DamonGoodsDataList; GoodsData warPet = client.ClientData.DamonGoodsDataList.Find(_g => _g.Using > 0); if (warPet != null) { List <PetSkillInfo> allSkillList = new List <PetSkillInfo>(); List <PetSkillInfo> petSkillList = GetPetSkillInfo(warPet); var temp = from info in petSkillList where info.PitIsOpen && info.SkillID > 0 select info; if (temp.Any()) { foreach (var t in temp) { SystemXmlItem systemMagic = null; if (!GameManager.SystemMagicsMgr.SystemXmlItemDict.TryGetValue(t.SkillID, out systemMagic)) { continue; } PassiveSkillData data = new PassiveSkillData(); data.skillId = t.SkillID; data.skillLevel = t.Level; data.triggerRate = (int)(systemMagic.GetDoubleValue("TriggerOdds") * 100); data.triggerType = systemMagic.GetIntValue("TriggerType"); data.coolDown = systemMagic.GetIntValue("CDTime"); data.triggerCD = systemMagic.GetIntValue("TriggerCD"); resultList.Add(data); } } } client.passiveSkillModule.UpdateSkillList(resultList); JingLingQiYuanManager.getInstance().RefreshProps(client); }
public static void UpdateRolePetSkill(GameClient client) { List <PassiveSkillData> resultList = new List <PassiveSkillData>(); List <GoodsData> petList = client.ClientData.DamonGoodsDataList; GoodsData warPet = client.ClientData.DamonGoodsDataList.Find((GoodsData _g) => _g.Using > 0); if (warPet != null) { List <PetSkillInfo> allSkillList = new List <PetSkillInfo>(); List <PetSkillInfo> petSkillList = PetSkillManager.GetPetSkillInfo(warPet); IEnumerable <PetSkillInfo> temp = from info in petSkillList where info.PitIsOpen && info.SkillID > 0 select info; if (temp.Any <PetSkillInfo>()) { foreach (PetSkillInfo t in temp) { SystemXmlItem systemMagic = null; if (GameManager.SystemMagicsMgr.SystemXmlItemDict.TryGetValue(t.SkillID, out systemMagic)) { resultList.Add(new PassiveSkillData { skillId = t.SkillID, skillLevel = t.Level, triggerRate = (int)(systemMagic.GetDoubleValue("TriggerOdds") * 100.0), triggerType = systemMagic.GetIntValue("TriggerType", -1), coolDown = systemMagic.GetIntValue("CDTime", -1), triggerCD = systemMagic.GetIntValue("TriggerCD", -1) }); } } } } client.passiveSkillModule.UpdateSkillList(resultList); JingLingQiYuanManager.getInstance().RefreshProps(client, true); }
public static void AddOldDamonGoodsData(GameClient client) { if (null != client.ClientData.GoodsDataList) { List <GoodsData> listDamon = new List <GoodsData>(); int i = 0; while (i < client.ClientData.GoodsDataList.Count) { int nCategories = Global.GetGoodsCatetoriy(client.ClientData.GoodsDataList[i].GoodsID); if (nCategories >= 9 && nCategories <= 10) { if (client.ClientData.GoodsDataList[i].Using > 0 && client.ClientData.GoodsDataList[i].Site == 0) { int nBagIndex = Global.GetIdleSlotOfDamonGoods(client); string[] dbFields = null; string strcmd = Global.FormatUpdateDBGoodsStr(new object[] { client.ClientData.RoleID, client.ClientData.GoodsDataList[i].Id, client.ClientData.GoodsDataList[i].Using, "*", "*", "*", 5000, "*", "*", client.ClientData.GoodsDataList[i].GCount, "*", nBagIndex, "*", "*", "*", "*", "*", "*", "*", "*", "*", "*", "*" }); TCPProcessCmdResults dbRequestResult = Global.RequestToDBServer(TCPClientPool.getInstance(), TCPOutPacketPool.getInstance(), 10006, strcmd, out dbFields, client.ServerId); if (dbRequestResult != TCPProcessCmdResults.RESULT_FAILED) { if (dbFields.Length > 0 && Convert.ToInt32(dbFields[1]) >= 0) { DamonMgr.AddDamonGoodsData(client, client.ClientData.GoodsDataList[i], false); client.ClientData.GoodsDataList[i].Site = 5000; client.ClientData.GoodsDataList[i].BagIndex = nBagIndex; listDamon.Add(client.ClientData.GoodsDataList[i]); } } } } IL_2AC: i++; continue; goto IL_2AC; } for (i = 0; i < listDamon.Count; i++) { Global.RemoveGoodsData(client, listDamon[i]); } JingLingQiYuanManager.getInstance().RefreshProps(client, true); } }
/// <summary> /// 精灵升级处理 /// </summary> public static TCPProcessCmdResults UpgradeDamonProcess(TCPOutPacketPool pool, GameClient client, GoodsData goodsData, out TCPOutPacket tcpOutPacket, int nID, TCPClientPool tcpClientPool, TCPManager tcpMgr) { tcpOutPacket = null; String strcmd = ""; SystemXmlItem xmlItem = null; if (!GameManager.SystemGoods.SystemXmlItemDict.TryGetValue(goodsData.GoodsID, out xmlItem) || null == xmlItem) { strcmd = string.Format("{0}:{1}:{2}:{3}:{4}", -13, client.ClientData.RoleID, goodsData.Id, 0, 0); tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, nID); return(TCPProcessCmdResults.RESULT_DATA); } int MaxUpgradeLevel = xmlItem.GetIntValue("SuitID") * 10 + 9; // 检测强化等级 if (goodsData.Forge_level >= MaxUpgradeLevel) { // 强化等级已到最高级 strcmd = string.Format("{0}:{1}:{2}:{3}:{4}", -4, client.ClientData.RoleID, goodsData.Id, goodsData.Forge_level, goodsData.Binding); tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, nID); return(TCPProcessCmdResults.RESULT_DATA); } // 必须在精灵栏才能强化 if (goodsData.Site != (int)SaleGoodsConsts.UsingDemonGoodsID) { strcmd = string.Format("{0}:{1}:{2}:{3}:{4}", -9, client.ClientData.RoleID, goodsData.Id, goodsData.Forge_level, goodsData.Binding); tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, nID); return(TCPProcessCmdResults.RESULT_DATA); } SystemXmlItem xmlItems = null; GameManager.SystemDamonUpgrade.SystemXmlItemDict.TryGetValue(goodsData.Forge_level + 2, out xmlItems); if (null == xmlItems) { // 配置错误 strcmd = string.Format("{0}:{1}:{2}:{3}:{4}", -6, client.ClientData.RoleID, goodsData.Id, 0, 0); tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, nID); return(TCPProcessCmdResults.RESULT_DATA); } int nReqMoHe = xmlItems.GetIntValue("NeedEXP"); long lHaveMoHe = GameManager.ClientMgr.GetMUMoHeValue(client); if (lHaveMoHe < nReqMoHe) { // 魔核不足 strcmd = string.Format("{0}:{1}:{2}:{3}:{4}", -11, client.ClientData.RoleID, goodsData.Id, goodsData.Forge_level, goodsData.Binding); tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, nID); return(TCPProcessCmdResults.RESULT_DATA); } GameManager.ClientMgr.ModifyMUMoHeValue(client, -nReqMoHe, "精灵升级", true, true); // 找到精灵基本的扩展属性 //EquipPropItem orgItem = GameManager.EquipPropsMgr.FindEquipPropItem(goodsData.GoodsID); //// 找到精灵现有的属性 //EquipPropItem newProp = null; //GameManager.EquipPropsMgr.ParseEquipProps(goodsData.Props, out newProp); //// 为精灵升级相应的属性 //bool bHaveAddVal = false; //for (int i = 0; i < orgItem.ExtProps.Length; i++) //{ // if (orgItem.ExtProps[i] > 0) // { // double dAddVal = 0.0; // UpgradeAttrDict.TryGetValue(i + 1, out dAddVal); // if (dAddVal > 0.0) // { // if (newProp == null) // { // newProp = new EquipPropItem(); // } // newProp.ExtProps[i] = orgItem.ExtProps[i] * (1 + (goodsData.Forge_level - 1) * dAddVal); // bHaveAddVal = true; // } // } //} //String strProps = ""; //if (bHaveAddVal) //{ // strProps = GameManager.EquipPropsMgr.EquipPropsToString(newProp.ExtProps); //} //else //{ // strProps = goodsData.Props; //} // 将修改后的属性保存到数据库 int nBingProp = 1; string[] dbFields = null; string strDbCmd = Global.FormatUpdateDBGoodsStr(client.ClientData.RoleID, goodsData.Id, "*", goodsData.Forge_level + 1, "*", "*", "*", "*", "*" /*strProps*/, "*", "*", "*", "*", "*", "*", nBingProp, "*", "*", "*", "*", "*", "*", "*"); // 卓越一击 [12/13/2013 LiaoWei] 装备转生 TCPProcessCmdResults dbRequestResult = Global.RequestToDBServer(tcpClientPool, pool, (int)TCPGameServerCmds.CMD_DB_UPDATEGOODS_CMD, strDbCmd, out dbFields, client.ServerId); if (dbRequestResult == TCPProcessCmdResults.RESULT_FAILED) { strcmd = string.Format("{0}:{1}:{2}:{3}:{4}", -10, client.ClientData.RoleID, goodsData.Id, 0, 0); tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, nID); return(TCPProcessCmdResults.RESULT_DATA); } if (dbFields.Length <= 0 || Convert.ToInt32(dbFields[1]) < 0) { strcmd = string.Format("{0}:{1}:{2}:{3}:{4}", -10, client.ClientData.RoleID, goodsData.Id, 0, 0); tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, nID); return(TCPProcessCmdResults.RESULT_DATA); } int oldUsing = goodsData.Using; bool nRet = true; //如果是佩戴在身上,则先脱下来 if (goodsData.Using > 0) { //先强迫修改为不使用装备,记住后边改回去 goodsData.Using = 0; //重新计算装备的合成属性 Global.RefreshEquipProp(client, goodsData); //此处的变化不通知客户端 } // 级别加1 goodsData.Forge_level += 1; goodsData.Binding = nBingProp; JingLingQiYuanManager.getInstance().RefreshProps(client); if (oldUsing != goodsData.Using) { goodsData.Using = oldUsing; //重新计算装备的合成属性 if (Global.RefreshEquipProp(client, goodsData)) { //通知客户端属性变化 GameManager.ClientMgr.NotifyUpdateEquipProps(tcpMgr.MySocketListener, pool, client); // 总生命值和魔法值变化通知(同一个地图才需要通知) GameManager.ClientMgr.NotifyOthersLifeChanged(tcpMgr.MySocketListener, pool, client); } } //写入角色物品的得失行为日志(扩展) Global.ModRoleGoodsEvent(client, goodsData, 0, "强化"); EventLogManager.AddGoodsEvent(client, OpTypes.Forge, OpTags.None, goodsData.GoodsID, goodsData.Id, 0, goodsData.GCount, "强化"); strcmd = string.Format("{0}:{1}:{2}:{3}:{4}", 1, client.ClientData.RoleID, goodsData.Id, goodsData.Forge_level, nBingProp); tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, nID); return(TCPProcessCmdResults.RESULT_DATA); }
public static TCPProcessCmdResults UpgradeDamonProcess(TCPOutPacketPool pool, GameClient client, GoodsData goodsData, out TCPOutPacket tcpOutPacket, int nID, TCPClientPool tcpClientPool, TCPManager tcpMgr) { tcpOutPacket = null; SystemXmlItem xmlItem = null; TCPProcessCmdResults result; if (!GameManager.SystemGoods.SystemXmlItemDict.TryGetValue(goodsData.GoodsID, out xmlItem) || null == xmlItem) { string strcmd = string.Format("{0}:{1}:{2}:{3}:{4}", new object[] { -13, client.ClientData.RoleID, goodsData.Id, 0, 0 }); tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, nID); result = TCPProcessCmdResults.RESULT_DATA; } else { int MaxUpgradeLevel = xmlItem.GetIntValue("SuitID", -1) * 10 + 9; if (goodsData.Forge_level >= MaxUpgradeLevel) { string strcmd = string.Format("{0}:{1}:{2}:{3}:{4}", new object[] { -4, client.ClientData.RoleID, goodsData.Id, goodsData.Forge_level, goodsData.Binding }); tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, nID); result = TCPProcessCmdResults.RESULT_DATA; } else if (goodsData.Site != 5000) { string strcmd = string.Format("{0}:{1}:{2}:{3}:{4}", new object[] { -9, client.ClientData.RoleID, goodsData.Id, goodsData.Forge_level, goodsData.Binding }); tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, nID); result = TCPProcessCmdResults.RESULT_DATA; } else { SystemXmlItem xmlItems = null; GameManager.SystemDamonUpgrade.SystemXmlItemDict.TryGetValue(goodsData.Forge_level + 2, out xmlItems); if (null == xmlItems) { string strcmd = string.Format("{0}:{1}:{2}:{3}:{4}", new object[] { -6, client.ClientData.RoleID, goodsData.Id, 0, 0 }); tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, nID); result = TCPProcessCmdResults.RESULT_DATA; } else { int nReqMoHe = xmlItems.GetIntValue("NeedEXP", -1); long lHaveMoHe = (long)GameManager.ClientMgr.GetMUMoHeValue(client); if (lHaveMoHe < (long)nReqMoHe) { string strcmd = string.Format("{0}:{1}:{2}:{3}:{4}", new object[] { -11, client.ClientData.RoleID, goodsData.Id, goodsData.Forge_level, goodsData.Binding }); tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, nID); result = TCPProcessCmdResults.RESULT_DATA; } else { GameManager.ClientMgr.ModifyMUMoHeValue(client, -nReqMoHe, "精灵升级", true, true, false); int nBingProp = 1; string[] dbFields = null; string strDbCmd = Global.FormatUpdateDBGoodsStr(new object[] { client.ClientData.RoleID, goodsData.Id, "*", goodsData.Forge_level + 1, "*", "*", "*", "*", "*", "*", "*", "*", "*", "*", "*", nBingProp, "*", "*", "*", "*", "*", "*", "*" }); TCPProcessCmdResults dbRequestResult = Global.RequestToDBServer(tcpClientPool, pool, 10006, strDbCmd, out dbFields, client.ServerId); if (dbRequestResult == TCPProcessCmdResults.RESULT_FAILED) { string strcmd = string.Format("{0}:{1}:{2}:{3}:{4}", new object[] { -10, client.ClientData.RoleID, goodsData.Id, 0, 0 }); tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, nID); result = TCPProcessCmdResults.RESULT_DATA; } else if (dbFields.Length <= 0 || Convert.ToInt32(dbFields[1]) < 0) { string strcmd = string.Format("{0}:{1}:{2}:{3}:{4}", new object[] { -10, client.ClientData.RoleID, goodsData.Id, 0, 0 }); tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, nID); result = TCPProcessCmdResults.RESULT_DATA; } else { int oldUsing = goodsData.Using; if (goodsData.Using > 0) { goodsData.Using = 0; Global.RefreshEquipProp(client, goodsData); } goodsData.Forge_level++; goodsData.Binding = nBingProp; JingLingQiYuanManager.getInstance().RefreshProps(client, true); if (oldUsing != goodsData.Using) { goodsData.Using = oldUsing; if (Global.RefreshEquipProp(client, goodsData)) { GameManager.ClientMgr.NotifyUpdateEquipProps(tcpMgr.MySocketListener, pool, client); GameManager.ClientMgr.NotifyOthersLifeChanged(tcpMgr.MySocketListener, pool, client, true, false, 7); } } Global.ModRoleGoodsEvent(client, goodsData, 0, "强化", false); EventLogManager.AddGoodsEvent(client, OpTypes.Forge, OpTags.None, goodsData.GoodsID, (long)goodsData.Id, 0, goodsData.GCount, "强化"); string strcmd = string.Format("{0}:{1}:{2}:{3}:{4}", new object[] { 1, client.ClientData.RoleID, goodsData.Id, goodsData.Forge_level, nBingProp }); tcpOutPacket = TCPOutPacket.MakeTCPOutPacket(pool, strcmd, nID); result = TCPProcessCmdResults.RESULT_DATA; } } } } } return(result); }