public bool LoadAlchemyConfigFile() { try { GeneralCachingXmlMgr.RemoveCachingXml(Global.GameResPath("Config/CurrencyConversion.xml")); XElement xml = GeneralCachingXmlMgr.GetXElement(Global.GameResPath("Config/CurrencyConversion.xml")); if (null == xml) { return(false); } Dictionary <int, AlchemyConfigData> tempAlchemyConfig = new Dictionary <int, AlchemyConfigData>(); IEnumerable <XElement> xmlItems = xml.Elements(); foreach (XElement xmlItem in xmlItems) { AlchemyConfigData data = new AlchemyConfigData(); data.ID = (int)Global.GetSafeAttributeLong(xmlItem, "ID"); data.TypeID = (int)Global.GetSafeAttributeLong(xmlItem, "Type"); data.Unit = (int)Global.GetSafeAttributeLong(xmlItem, "Unit"); data.Element = (int)Global.GetSafeAttributeLong(xmlItem, "Element"); data.Limit = (int)Global.GetSafeAttributeLong(xmlItem, "Limit"); tempAlchemyConfig[data.TypeID] = data; } lock (this.ConfigMutex) { this.AlchemyConfig = tempAlchemyConfig; } } catch (Exception ex) { LogManager.WriteLog(LogTypes.Fatal, string.Format("{0}解析出现异常, {1}", "Config/CurrencyConversion.xml", ex.Message), null, true); return(false); } return(true); }
public void AlchemyRollBack(GameClient client, string rollbackType) { if (GlobalNew.IsGongNengOpened(client, GongNengIDs.Alchemy, false)) { if (!string.IsNullOrEmpty(rollbackType)) { string[] valueFields = rollbackType.Split(new char[] { ',' }); if (valueFields.Length == 2) { int costType = Global.SafeConvertToInt32(valueFields[0]); int useNum = Global.SafeConvertToInt32(valueFields[1]); Dictionary <int, AlchemyConfigData> tempAlchemyConfig = null; lock (this.ConfigMutex) { tempAlchemyConfig = this.AlchemyConfig; } AlchemyConfigData alchemyConfig = null; if (!tempAlchemyConfig.TryGetValue(costType, out alchemyConfig) || useNum < alchemyConfig.Unit) { LogManager.WriteLog(LogTypes.SQL, string.Format("根据GM的要求为角色:【{0}】回滚炼金灌注【{1}】 失败!", client.ClientData.RoleID, rollbackType), null, true); client.ClientData.AlchemyInfo.rollbackType = ""; this.AlchemyRollBackOffline(client.ClientData.RoleID, ""); } else { useNum -= useNum % alchemyConfig.Unit; int element = useNum / alchemyConfig.Unit * alchemyConfig.Element; int histCost = 0; client.ClientData.AlchemyInfo.HistCost.TryGetValue(costType, out histCost); if (histCost < useNum || client.ClientData.AlchemyInfo.BaseData.Element < element) { LogManager.WriteLog(LogTypes.SQL, string.Format("根据GM的要求为角色:【{0}】回滚炼金灌注【{1}】 失败!", client.ClientData.RoleID, rollbackType), null, true); client.ClientData.AlchemyInfo.rollbackType = ""; this.AlchemyRollBackOffline(client.ClientData.RoleID, ""); } else { GameManager.ClientMgr.ModifyAlchemyElementValue(client, -element, "GM命令-alchemy", false, false); this.ModifyAddElementCost(client, costType, useNum, true); client.ClientData.AlchemyInfo.HistCost[costType] = histCost - useNum; this.UpdateAlchemyDataDB(client); client.ClientData.AlchemyInfo.rollbackType = ""; this.AlchemyRollBackOffline(client.ClientData.RoleID, ""); LogManager.WriteLog(LogTypes.SQL, string.Format("根据GM的要求为角色:【{0}】回滚炼金灌注【{1}】 成功!", client.ClientData.RoleID, rollbackType), null, true); } } } } } }
public bool AlchemyRollBackCheck(int costType, int useNum) { bool result; if (useNum <= 0 || costType < 1 || costType >= 15) { result = false; } else { Dictionary <int, AlchemyConfigData> tempAlchemyConfig = null; lock (this.ConfigMutex) { tempAlchemyConfig = this.AlchemyConfig; } AlchemyConfigData alchemyConfig = null; result = (tempAlchemyConfig.TryGetValue(costType, out alchemyConfig) && useNum >= alchemyConfig.Unit); } return(result); }
public bool ProcessAlchemyAddElementCmd(GameClient client, int nID, byte[] bytes, string[] cmdParams) { try { int result = 0; int roleID = Convert.ToInt32(cmdParams[0]); int costType = Convert.ToInt32(cmdParams[1]); int useNum = Convert.ToInt32(cmdParams[2]); bool bindOnly = true; if (cmdParams.Length >= 4) { bindOnly = (Convert.ToInt32(cmdParams[3]) > 0); } Dictionary <int, AlchemyConfigData> tempAlchemyConfig = null; lock (this.ConfigMutex) { tempAlchemyConfig = this.AlchemyConfig; } AlchemyConfigData alchemyConfig = null; if (!tempAlchemyConfig.TryGetValue(costType, out alchemyConfig)) { result = -3; client.sendCmd(nID, string.Format("{0}:{1}:{2}:{3}:{4}", new object[] { result, roleID, 0, costType, 0 }), false); return(true); } if (!this.CheckCostEnough(client, costType, useNum, bindOnly) || useNum < alchemyConfig.Unit) { if (costType < this.MinGoodsID) { result = -12; } else { result = -6; } client.sendCmd(nID, string.Format("{0}:{1}:{2}:{3}:{4}", new object[] { result, roleID, 0, costType, 0 }), false); return(true); } int todayCost = this.GetTodayAddElementCost(client, costType); if (alchemyConfig.Limit != -1 && todayCost + useNum > alchemyConfig.Limit) { result = -36; client.sendCmd(nID, string.Format("{0}:{1}:{2}:{3}:{4}", new object[] { result, roleID, 0, costType, todayCost }), false); return(true); } useNum -= useNum % alchemyConfig.Unit; if (!this.ModifyAddElementCost(client, costType, -useNum, bindOnly)) { result = -12; client.sendCmd(nID, string.Format("{0}:{1}:{2}:{3}:{4}", new object[] { result, roleID, 0, costType, todayCost }), false); return(true); } GameManager.ClientMgr.ModifyAlchemyElementValue(client, useNum / alchemyConfig.Unit * alchemyConfig.Element, "灌注", false, false); this.UpdateTodayAddElementCost(client, costType, useNum); this.UpdateHistAddElementCost(client, costType, useNum); this.UpdateAlchemyDataDB(client); todayCost = this.GetTodayAddElementCost(client, costType); client.sendCmd(nID, string.Format("{0}:{1}:{2}:{3}:{4}", new object[] { result, roleID, client.ClientData.AlchemyInfo.BaseData.Element, costType, todayCost }), false); return(true); } catch (Exception ex) { DataHelper.WriteFormatExceptionLog(ex, Global.GetDebugHelperInfo(client.ClientSocket), false, false); } return(false); }