Exemplo n.º 1
0
 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);
 }
Exemplo n.º 2
0
 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);
                     }
                 }
             }
         }
     }
 }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
 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);
 }