//Allows to change all base creature and res type.
        public BaseCreatureStatue(int BodyValue, ResType restype, Direction direction, AIType ai, FightMode mode, int RangePerception, int RangeFight,
            double ActiveSpeed, double PassiveSpeed)
            : base(AIType.AI_Melee,FightMode.Closest, 10, 1, 0.2, 0.4)
        {
            Body = BodyValue;
            mResTyp = restype;
            mDirection = direction;
            AI = ai;
            FightMode = mode;
            RangePerception = RangePerception;
            RangeFight = RangeFight;
            ActiveSpeed = ActiveSpeed;
            PassiveSpeed = PassiveSpeed;
            m_ResType = restype;

            CantWalk = true;
            Paralyzed = true;
            Blessed = true;

            Timer.DelayCall(TimeSpan.Zero, Freeze);
            Timer.DelayCall(TimeSpan.Zero, SetUpBase);

            SolidHueOverride = (int)m_ResType;

             //One base for each creature.
            m_base = new CreatureStatueBase(this);
        }
Example #2
0
        /// <summary>
        /// Fügt einem Spieler einen bestimmten Resourcen Betrag hinzu
        /// </summary>
        /// <param name="user">Benutzer, dem die Resourcen hinzugefügt werden sollen</param>
        /// <param name="type">Resourcen Typ</param>
        /// <param name="count">Resourcen Betrag</param>
        public void addRes(User user, ResType type, double count)
        {
            if (count < 0)
            {
                throw new ArgumentException("Der Wert von Count darf nicht kleiner als 0 sein!");
            }

            if (!resourceList.ContainsKey(user))
            {
                addUser(user);
            }

            lock (resourceList)
            {

                resourceList[user][type] += count;
            }
        }
Example #3
0
        public Node GetBinaryOp(Node left, Node right, string op, ResType opType, ResType resType)
        {
            var defleft  = DefineResType(left);
            var defright = DefineResType(right);

            if ((defleft == opType) &&
                (defright == opType || right is NodeMethodExpression))
            {
                return new NodeBinaryOp
                       {
                           left    = left,
                           right   = right,
                           op      = op,
                           resType = resType
                       }
            }
            ;
            return(new NodeError()
            {
                message = "not all operands are " + opType.ToString()
            });
        }
Example #4
0
        // 检索该帐户是否对指定的配置事项有指定的权限
        // 线程安全
        // parameters:
        //		strPath	要关心其权限的对象的资源路径
        //      resType 资源类型
        //      strOneRight 待确定的权限
        //		strExistRights	返回该对象已经存在的的权限列表
        // return:
        //		true	有
        //		false	无
        public bool HasRights(string strPath,
                              ResType resType,
                              string strQueryOneRight,
                              out string strExistRights)
        {
            strExistRights = "";

            m_lock.AcquireReaderLock(m_nTimeOut);

            try
            {
                ResultType resultType = new ResultType();
                string     strError   = "";
                int        nRet       = this.cfgRights.CheckRights(strPath,
                                                                   this.aOwnerDbName,
                                                                   this.Name,
                                                                   resType,
                                                                   strQueryOneRight,
                                                                   out strExistRights,
                                                                   out resultType,
                                                                   out strError);
                if (nRet == -1)
                {
                    throw new Exception("CheckRights()出错,原因:" + strError);
                }

                if (resultType == ResultType.Plus)
                {
                    return(true);
                }

                return(false);
            }
            finally
            {
                m_lock.ReleaseReaderLock();
            }
        }
Example #5
0
 protected void TreeView_Populate(object sender, TreeNodeEventArgs e)
 {
     using (pm2Entities pm2Entities = new pm2Entities())
     {
         IQueryable <Res_ResourceType> queryable =
             from m in pm2Entities.Res_ResourceType
             where m.Res_ResourceType2.ResourceTypeId == e.Node.Value
             select m;
         foreach (Res_ResourceType current in queryable)
         {
             TreeNode treeNode = new TreeNode();
             if (ResType.IsContainsChild(current.ResourceTypeId))
             {
                 treeNode.PopulateOnDemand = true;
             }
             treeNode.Value       = current.ResourceTypeId;
             treeNode.Text        = current.ResourceTypeName;
             treeNode.NavigateUrl = "ResourceQueryDetail.aspx?id=" + treeNode.Value;
             treeNode.Target      = "InfoList";
             e.Node.ChildNodes.Add(treeNode);
         }
     }
 }
Example #6
0
        private void ClearMyAccessPanel()
        {
            IsResourceOnEdit    = false;
            ResetButton.Visible = false;
            SaveButton.Visible  = false;
            CancButton.Visible  = false;

            for (int i = 0; i < 7; i++)
            {
                l[i].Visible = false;
                l[i].Dispose();
            }

            AssEmpNo.Dispose();
            AssCubNo.Dispose();
            ResNo.Dispose();
            ResType.Dispose();
            ResState.Dispose();
            DateOfIssue.Dispose();
            OtherInfo.Dispose();

            P = -1;
        }
        private void Running()
        {
            EditorGUILayout.LabelField("选择需要替换的资源类型");
            resType    = (ResType)EditorGUILayout.EnumPopup(resType, GUILayout.Width(300));
            deleateOld = EditorGUILayout.Toggle("删除被替换的资源文件", deleateOld, GUILayout.Width(200));
            EditorGUILayout.Space();
            switch (resType)
            {
            case ResType.UI图片:
                ShowUIImage();
                break;

            case ResType.字体:
                ShowFont();
                break;

            case ResType.音频:
                break;

            case ResType.动画:
                break;
            }
        }
Example #8
0
    string GetResourcePath(ResType restype)
    {
        string path = "";

        switch (restype)
        {
        case ResType.blocker:
            path = "Blocker";
            break;

        case ResType.piece0:
            path = "Piece0";
            break;

        case ResType.piece1:
            path = "Piece1";
            break;

        case ResType.piece2:
            path = "Piece2";
            break;

        case ResType.piece3:
            path = "Piece3";
            break;

        case ResType.piece4:
            path = "Piece4";
            break;

        case ResType.piece5:
            path = "Piece5";
            break;
        }
        return(path);
    }
Example #9
0
        /// <summary>
        /// 路径转Url
        /// </summary>
        static public string PathToUrl(string name, ResType nResType)
        {
            /// 需要再处理,现在路径要统一 fixed by ljp
            // 外部目录
            //string persistentPath = string.Empty;
            //switch (nResType)
            //{
            //    case ResType.Scene:
            //        persistentPath = StringHelper.Format("file:///{0}/scene/{1}/{2}.ab", UtilityTools._persistentDataPath, name, name);
            //        break;
            //    case ResType.Mesh:
            //        persistentPath = StringHelper.Format("file:///{0}/mesh/{1}.ab", UtilityTools._persistentDataPath, name);
            //        break;
            //    case ResType.Texture:
            //        persistentPath = StringHelper.Format("file:///{0}/texture/{1}.ab", UtilityTools._persistentDataPath, name);
            //        break;
            //}
            //if(persistentPath.Length > 0 && File.Exists(persistentPath))
            //{
            //    return persistentPath;
            //}

            // 这里要针对 android 修改一下
            switch (nResType)
            {
            case ResType.Scene:
                return(StringHelper.Format("file:///{0}/scene/{1}/{2}.ab", UtilityTools._streamingAssetsPath, name, name));

            case ResType.Mesh:
                return(StringHelper.Format("file:///{0}/mesh/{1}.ab", UtilityTools._streamingAssetsPath, name));

            case ResType.Texture:
                return(StringHelper.Format("file:///{0}/texture/{1}.ab", UtilityTools._streamingAssetsPath, name));
            }
            return("");
        }
Example #10
0
        public List <ConsResProperties> GetResourcesByType(ResType type)
        {
            List <ConsResProperties> resList = new List <ConsResProperties>();

            if (Type == type)
            {
                for (int i = 0; i < Lvl4_strings.Count; i++)
                {
                    for (int j = 0; j < Lvl4_strings.ElementAt(i).Strings.Count; j++)
                    {
                        ConsResProperties crp = new ConsResProperties();
                        crp.Id         = Lvl4_strings.ElementAt(i).Strings.ElementAt(j).Id;
                        crp.LanguageID = (int)Lvl2_Language.ElementAt(i).Name;
                        crp.CodePage   = (int)Lvl3_Data.ElementAt(i).CodePage;
                        crp.Data       = Lvl4_strings.ElementAt(i).Strings.ElementAt(j).Data;
                        crp.Type       = Type;

                        resList.Add(crp);
                    }
                }
            }

            return(resList);
        }
Example #11
0
 private static string GetExtension(ResType type)
 {
     return(type switch
     {
         ResType.View => "V56",
         ResType.Picture => "P56",
         ResType.Script => "SCR",
         ResType.Text => "TEX",
         ResType.Sound => "SND",
         ResType.Vocabulary => "VOC",
         ResType.Font => "FON",
         ResType.Cursor => "CUR",
         ResType.AudioPath => "PAT",
         ResType.Bitmap => "BIT",
         ResType.Palette => "PAL",
         ResType.CDAudio => "CDA",
         ResType.Audio => "AUD",
         ResType.Sync => "SYN",
         ResType.Message => "MSG",
         ResType.Map => "MAP",
         ResType.Heap => "HEP",
         //ResType.Patch => "PAT",
         _ => throw new NotImplementedException(),
     });
Example #12
0
 public bool IsExistRes(ResType type, string name)
 {
     return(_gameDic[type].ContainsKey(name));
 }
Example #13
0
    public System.Collections.IEnumerator UnzipProcess(object obj)
    {
        float step = 0.5f / ResManager.RES_NUM;

        for (int i = 0; i < ResManager.RES_NUM; ++i)
        {
            ResType rt           = (ResType)i;
            string  path         = RuntimeInfo.GetResStreamingPath(rt);
            string  destPath     = RuntimeInfo.GetResPersistentPath(rt);
            string  destPathTemp = destPath + ".temp";
            WWW     www          = new WWW(path);
            while (www.isDone == false)
            {
                yield return(new WaitForEndOfFrame());
            }
            if (www.bytes == null || www.bytes.Length == 0)
            {
                m_Error = "资源解压失败:" + path;
                LogMgr.Log("解压失败,未找到文件:" + www.error + ", Path:" + path);
                yield break;
            }
            try
            {
                FileInfo fi = new FileInfo(destPathTemp);
                if (fi.Exists)
                {
                    fi.Delete();
                }
                FileStream fss = fi.Create();
                fss.Write(www.bytes, 0, www.bytes.Length);
                fss.Flush();
                fss.Close();
                LZMA.DecompressFile(destPathTemp, destPath);
                if (fi.Exists)
                {
                    fi.Delete();
                }
                m_Progress += step;
            }
            catch (System.Exception e)
            {
                m_Error = "资源解压失败:" + path;
                ReportException.Instance.AddException("Exception:解压文件失败: " + e.ToString());
                yield break;
            }
            yield return(new WaitForEndOfFrame());

            try
            {
                m_ResVer[i].ResCrc = Crc.Crc32FromFile(destPathTemp);
                FileInfo ff = new FileInfo(destPath);
                m_ResVer[i].ResSize = (uint)ff.Length;
                m_Progress         += step;
            }
            catch (System.Exception e)
            {
                m_Error = "计算CRC失败:" + path;
                ReportException.Instance.AddException("Exception:计算文件CRC失败: " + e.ToString());
                yield break;
            }
            File.Delete(destPathTemp);
            yield return(new WaitForEndOfFrame());
        }
        m_bHasVerFile = true;
        m_Progress    = 1.0f;
        if (!SaveVersion())
        {
            ReportException.Instance.AddException("Exception:保存版本文件失败:");
        }
        yield break;
    }
Example #14
0
 public ResMapOffset(ResType type, ushort offset)
 {
     Type   = type;
     Offset = offset;
 }
Example #15
0
File: AILogic.cs Project: alkrot/XO
        /// <summary>
        /// Проверка на лучшие кординаты условно говоря
        /// </summary>
        /// <param name="field">Поле</param>
        /// <param name="logic">Логика игры</param>
        /// <param name="xoType">Тип символа</param>
        /// <returns>Вернем строку и столбец</returns>
        private static int[] CheckPlayer(XOType[,] field, Logic logic, XOType xoType)
        {
            var cord    = new int[2];
            var dicCord = new Dictionary <ResType, List <int[]> >();

            var fieldClone = GetClone(field);
            var isStop     = false;

            if (field[1, 1] == 0)
            {
                return(new int[] { 1, 1 });
            }

            //Найдем свободную клетку
            for (int i = 0; i < logic.Row; i++)
            {
                for (int j = 0; j < logic.Coulumn; j++)
                {
                    if (fieldClone[i, j] == 0)
                    {
                        cord             = new int[] { i, j };
                        fieldClone[i, j] = xoType;

                        ResType resType = logic.CheckWinPlayer(xoType, cord, fieldClone, true);
                        if (!dicCord.ContainsKey(resType))
                        {
                            dicCord[resType] = new List <int[]>();
                        }
                        dicCord[resType].Add(cord);
                        fieldClone[i, j] = 0;
                    }
                }

                if (isStop)
                {
                    break;
                }
            }

            if (dicCord.TryGetValue(ResType.WinnerPlayerTwo, out var cords))
            {
                return(cords.First());
            }
            if (dicCord.TryGetValue(ResType.Nothing, out var cordNothing))
            {
                foreach (var cr in cordNothing)
                {
                    var row = cr[0];
                    var col = cr[1];

                    if (row == 0 && (col == 0 || col == logic.Coulumn - 1) || row == logic.Row - 1 && (col == 0 || col == logic.Coulumn - 1))
                    {
                        cord = cr;
                        break;
                    }
                }
            }

            //Получим символ следующего игрока
            xoType = xoType == XOType.X ? XOType.O : XOType.X;
            var cord2 = new int[2];

            //Если у него ходов было больше двух, то проверим, есть ли выигрышный следующий ход
            //и вернем эти кординаты вместо прошлых
            if (logic.XOPlayer[xoType].Counter >= 2)
            {
                for (int i = 0; i < logic.Row; i++)
                {
                    for (int j = 0; j < logic.Coulumn; j++)
                    {
                        if (fieldClone[i, j] == 0)
                        {
                            fieldClone[i, j] = xoType;
                            cord2[0]         = i;
                            cord2[1]         = j;

                            if (logic.CheckWinPlayer(xoType, cord2, fieldClone, true) == ResType.WinnerPlayerOne)
                            {
                                return(cord2);
                            }
                            fieldClone[i, j] = 0;
                        }
                    }
                }
            }

            return(cord);
        }
Example #16
0
 IDictionary<int, int> GetCounter(ResType type)
 {
     Dictionary<int, int> resCounter;
     switch (type)
     {
         case ResType.Room:
             resCounter = _roomsCounter;
             break;
         case ResType.Script:
             resCounter = _scriptsCounter;
             break;
         case ResType.Costume:
             resCounter = _costumesCounter;
             break;
         case ResType.Sound:
             resCounter = _soundsCounter;
             break;
         default:
             return null;
     }
     return resCounter;
 }
Example #17
0
        /// <summary>
        /// This method gets the file extension for a given ResType.
        /// </summary>
        /// <param name="type">The type to get the extension for</param>
        /// <returns>The extension for the given type</returns>
        private string GetFileExtension(ResType type)
        {
            // Invalid has no file extension
            if (ResType.Invalid == type) return string.Empty;

            // Convert the ResType to a string and return the last 3
            // characters, this is the file extension.
            return type.ToString().Substring(3, 3).ToLower();
        }
Example #18
0
 HashSet<int> GetLock(ResType type)
 {
     HashSet<int> resLock;
     switch (type)
     {
         case ResType.Room:
             resLock = _roomsLock;
             break;
         case ResType.Script:
             resLock = _scriptsLock;
             break;
         case ResType.Costume:
             resLock = _costumesLock;
             break;
         case ResType.Sound:
             resLock = _soundsLock;
             break;
         default:
             return null;
     }
     return resLock;
 }
Example #19
0
 public bool IsResourceInUse(ResType type, int idx)
 {
     //if (!ResourceManager.ValidateResource("isResourceInUse", type, idx))
     //    return false;
     switch (type)
     {
         case ResType.Room:
             return _roomResource == (byte)idx;
         case ResType.RoomImage:
             return _roomResource == (byte)idx;
         case ResType.RoomScripts:
             return _roomResource == (byte)idx;
         case ResType.Script:
             return IsScriptInUse(idx);
         case ResType.Costume:
             return IsCostumeInUse(idx);
         case ResType.Sound:
             // Sound resource 1 is used for queued speech
             //if (_game.heversion >= 60 && idx == 1)
             //    return true;
             //else
                 return Sound.IsSoundInUse(idx);
         case ResType.Charset:
             return _charset.GetCurId() == idx;
         /*case ResType.Image:
             return ResourceManager.IsModified(type, idx) != 0;*/
         case ResType.SpoolBuffer:
             return Sound.IsSoundRunning(10000 + idx);
         default:
             return false;
     }
 }
Example #20
0
        void LoadResource(BinaryReader reader, ResType type, ushort idx)
        {
            bool dynamic = false;
            switch (type)
            {
                case ResType.Inventory:
                case ResType.String:
                case ResType.Verb:
                case ResType.VerbImage:
                case ResType.ActorName:
                case ResType.ScaleTable:
                case ResType.Temp:
                case ResType.FlObject:
                case ResType.Matrix:
                case ResType.ObjectName:
                    dynamic = true;
                    break;
            }

            if (dynamic)
            {
                int size = reader.ReadInt32();
                var ptr = reader.ReadBytes(size);

                //Console.WriteLine("Type: {0}, Index: {1}, Data: {2}", type, idx, size);

                switch (type)
                {
                    case ResType.Inventory:
                        {
                            var index = reader.ReadUInt16();
                            _inventory[idx] = index;
                            _invData[idx] = new ObjectData(index);
                            var br = new BinaryReader(new MemoryStream(ptr));
                            br.BaseStream.Seek(18, SeekOrigin.Begin);
                            var offset = br.ReadByte();
                            br.BaseStream.Seek(offset, SeekOrigin.Begin);
                            // read name
                            var name = new List<byte>();
                            var c = br.ReadByte();
                            while (c != 0)
                            {
                                name.Add(c);
                                c = br.ReadByte();
                            }
                            _invData[idx].Name = name.ToArray();
                            // read script
                            _invData[idx].Script.Data = br.ReadBytes((int)(br.BaseStream.Length - br.BaseStream.Position));
                            // read verb table
                            br.BaseStream.Seek(19, SeekOrigin.Begin);
                            if (Game.Version == 8)
                            {
                                while (true)
                                {
                                    var id = br.ReadInt32();
                                    var off = br.ReadInt32();
                                    if (id == 0)
                                        break;
                                    _invData[idx].ScriptOffsets.Add(id, off);
                                }
                                _invData[idx].Script.Offset = _invData[idx].ScriptOffsets.Count * 8 + 4;
                            }
                            else
                            {
                                while (true)
                                {
                                    var id = br.ReadByte();
                                    var off = br.ReadUInt16();
                                    if (id == 0)
                                        break;
                                    _invData[idx].ScriptOffsets.Add(id, off);
                                }
                                _invData[idx].Script.Offset = _invData[idx].ScriptOffsets.Count * 3 + 1 + 8;
                            }
                        }
                        break;

                    case ResType.ActorName:
                        {
                            Actors[idx].Name = ptr;
                        }
                        break;

                    case ResType.ObjectName:
                        {
                            var index = reader.ReadUInt16();
                            _newNames[index] = ptr;
                        }
                        break;

                    case ResType.Matrix:
                        {
                            if (idx == 1)
                            {
                                // BOXM
                                _boxMatrix.Clear();
                                _boxMatrix.AddRange(ptr);
                            }
                            else if (idx == 2)
                            {
                                // BOXD
                                var br = new BinaryReader(new MemoryStream(ptr));

                                var numBoxes = br.ReadByte();
                                _boxes = new Box[numBoxes];
                                for (int i = 0; i < numBoxes; i++)
                                {
                                    var box = new Box();
                                    box.Ulx = br.ReadInt16();
                                    box.Uly = br.ReadInt16();
                                    box.Urx = br.ReadInt16();
                                    box.Ury = br.ReadInt16();
                                    box.Lrx = br.ReadInt16();
                                    box.Lry = br.ReadInt16();
                                    box.Llx = br.ReadInt16();
                                    box.Lly = br.ReadInt16();
                                    box.Mask = br.ReadByte();
                                    box.Flags = (BoxFlags)br.ReadByte();
                                    box.Scale = br.ReadUInt16();
                                    if (Game.Version == 8)
                                    {
                                        box.ScaleSlot = br.ReadByte();
                                    }
                                    _boxes[i] = box;
                                }
                            }
                        }
                        break;

                    case ResType.Verb:
                        {
                            Verbs[idx].Text = ptr;
                        }
                        break;

                    case ResType.VerbImage:
                        {
                            var br = new BinaryReader(new MemoryStream(ptr));
                            Verbs[idx].ImageWidth = br.ReadUInt16();
                            Verbs[idx].ImageHeight = br.ReadUInt16();
                            var imgSize = (int)(br.BaseStream.Length - 4);
                            Verbs[idx].ImageData = new ImageData{ Data = br.ReadBytes(imgSize) };
                        }
                        break;

                    case ResType.String:
                        {
                            _strings[idx] = ptr;
                        }
                        break;
                }
            }
//            else
//            {
//                Console.WriteLine("Type: {0}", type);
//            }
        }
Example #21
0
        // 检查权限
        // parameters:
        //      strPath     资源路径
        //      resType     资源类型
        //      strRights   被查找的权限
        //      strExistRights  out参数,返回已存在的权限
        //      resultType  out参数,返回查找结果
        //                  Minus = -1, // 减
        //                  None = 0,   // 没有定义    
        //                  Plus = 1,   // 加
        //      strError    out参数,返回出错信息
        // return:
        //      -1  出错
        //      0   成功
        public int CheckRights(
            string strPath,
            List<string> aOwnerDbName,
            string strUserName,
            ResType resType,
            string strQueryRights,
            out string strExistRights,
            out ResultType resultType,
            out string strError)
        {
            strError = "";
            strExistRights = "";

            resultType = ResultType.None;

            Debug.Assert(resType != ResType.None, "resType参数不能为ResType.None");

            List<string> aRights = null;
            int nRet = this.BuildRightArray(
                strPath,
                aOwnerDbName,
                strUserName,
                out aRights,
                out strError);
            if (nRet == -1)
                return -1;

            string strResType = "";
            if (resType == ResType.Database)
                strResType = "database";
            else if (resType == ResType.Directory)
                strResType = "directory";
            else if (resType == ResType.File)
                strResType = "leaf";
            else if (resType == ResType.Record)
                strResType = "record";
            else if (resType == ResType.Server)
                strResType = "server";  // 2015/11/7
            else
                strResType = "leaf";

            for (int i = aRights.Count - 1; i >= 0; i--)
            {
                string strOneRights = aRights[i];

                string strSectionName = "";


                string strRealRights = "";
                if (i == aRights.Count - 1)
                {
                    strRealRights = strOneRights;
                }
                else if (i == aRights.Count - 2)
                {
                    strSectionName = "children_" + strResType;
                    strRealRights = this.GetSectionRights(strOneRights,
                        strSectionName);

                    if (strRealRights == "" && strResType != "database")
                    {
                        strSectionName = "descendant_" + strResType;
                        strRealRights = this.GetSectionRights(strOneRights,
                            strSectionName);
                    }
                }
                else
                {
                    strSectionName = "descendant_" + strResType;
                    strRealRights = this.GetSectionRights(strOneRights,
                        strSectionName);
                }

                string strPureRights = this.GetSectionRights(strRealRights, "this");

                if (strPureRights != "")
                {
                    if (strExistRights != "")
                        strExistRights = strExistRights + ",";
                    strExistRights += strPureRights;
                }

                // 检查当前权限字符串中是否存在指定的权限,加,减都返回
                resultType = this.CheckRights(strQueryRights,
                    strPureRights);
                if (resultType != ResultType.None)
                    return 0;
            }

            return 0;
        }
Example #22
0
 static extern bool EnumResourceNames(IntPtr hModule,ResType dwID,EnumResNameProcDelegate lpEnumFunc,IntPtr lParam);
Example #23
0
 private void setResourceOnPage(TextboxList holder, ResType type, double value)
 {
     holder[type.ToString()] = value.ToString();
 }
Example #24
0
        private double getResourceFromPage(TextboxList holder, ResType type)
        {
            try
            {
                return double.Parse(holder[type.ToString()]);

            }
            catch
            { }
            return 0;
        }
Example #25
0
File: ResData.cs Project: ayuexs/C-
 public void Init(string assetName, string bundleName, ResType type)
 {
     m_bundleName = bundleName;
     m_assetName  = assetName;
     m_type       = type;
 }
Example #26
0
 /// <summary>
 /// 预加载单个资源到内存
 /// </summary>
 public void PreLoadRes <T>(ResType loadType, string name, AssetType assetType)
 {
     AddSingleTask(ReferInfo.Create(loadType, name, assetType));
 }
Example #27
0
 public void EnumResourceNames(ResType resType,EnumResNameProcDelegate enumResNameProc)
 {
     EnumResourceNames(handle,resType,enumResNameProc,IntPtr.Zero);
 }
Example #28
0
 IDictionary<int, byte[]> GetResources(ResType type)
 {
     switch (type)
     {
         case ResType.Script:
             return _scripts;
         case ResType.Costume:
             return _costumes;
         case ResType.Sound:
             return _sounds;
         default:
             return null;
     }
 }
Example #29
0
 public void UnloadAssets(ResType type, List <string> names)
 {
     _resMgr.UnloadAsset(type, names);
 }
Example #30
0
        // 新增
        public static void Add(ResType type, string key, string content, string fileName = "", bool protect = true)
        {
            Res res = new Res(type, key, content, fileName, protect);

            res.Save();
        }
Example #31
0
        public MacMapSet(FileInfo macBin)
        {
            MacBin = macBin;

            using (var reader = new BinaryReader(MacBin.OpenRead()))
            {
                var resHeader = new ResHeader();

                resHeader.ResourceOffset = reader.ReadUInt32BE();
                resHeader.MapOffset      = reader.ReadUInt32BE();
                resHeader.ResourceLength = reader.ReadUInt32BE();
                resHeader.MapLength      = reader.ReadUInt32BE();

                reader.BaseStream.Seek(resHeader.MapOffset, SeekOrigin.Current);

                var mapHeader = new MapHeader();

                mapHeader.ReservedHandle   = reader.ReadUInt32BE();
                mapHeader.ReferenceNumber  = reader.ReadUInt16BE();
                mapHeader.ForkAttributes   = reader.ReadUInt16BE();
                mapHeader.TypeListOffset   = reader.ReadUInt16BE();
                mapHeader.NameListOffset   = reader.ReadUInt16BE();
                mapHeader.NumTypesMinusOne = reader.ReadUInt16BE();

                reader.BaseStream.Seek(resHeader.MapOffset + mapHeader.TypeListOffset, SeekOrigin.Begin);

                var numTypes = reader.ReadUInt16BE() + 1;
                var resTypes = new ResType[numTypes];
                var brgrIdx  = -1;

                for (var i = 0; i < numTypes; i++)
                {
                    var resType = new ResType();
                    resType.Type = Encoding.ASCII.GetString(reader.ReadBytes(4));
                    resType.NumResourcesMinusOne = reader.ReadUInt16BE();
                    resType.Offset = reader.ReadUInt16BE();

                    if (resType.Type == "BRGR")
                    {
                        brgrIdx = i;
                    }

                    resTypes[i] = resType;
                }

                if (brgrIdx < 0)
                {
                    throw new Exception("No map resource found.");
                }

                reader.BaseStream.Seek(resHeader.MapOffset + mapHeader.TypeListOffset + resTypes[brgrIdx].Offset, SeekOrigin.Begin);

                var brgrRefs = new ResReference[resTypes[brgrIdx].NumResourcesMinusOne + 1];

                for (var i = 0; i < resTypes[brgrIdx].NumResourcesMinusOne + 1; i++)
                {
                    var resRef  = new ResReference();
                    var refData = new ResReference.RefData();

                    refData.ResId          = reader.ReadUInt16BE();
                    refData.NameOffset     = reader.ReadUInt16BE();
                    refData.Attributes     = reader.ReadByte();
                    refData.HiDataOffset   = reader.ReadByte();
                    refData.LoDataOffset   = reader.ReadUInt16BE();
                    refData.ReservedHandle = reader.ReadUInt32BE();

                    resRef.Ref        = refData;
                    resRef.DataOffset = (uint)((refData.HiDataOffset << 16) | (refData.LoDataOffset));

                    brgrRefs[i] = resRef;
                }

                // get names

                for (var i = 0; i < brgrRefs.Length; i++)
                {
                    if (brgrRefs[i].Ref.NameOffset == 0xFFFF)
                    {
                        continue;
                    }

                    reader.BaseStream.Seek(resHeader.MapOffset + mapHeader.NameListOffset + brgrRefs[i].Ref.NameOffset, SeekOrigin.Begin);
                    var nameLen = reader.ReadByte();
                    brgrRefs[i].Name = Encoding.ASCII.GetString(reader.ReadBytes(nameLen));
                }

                // get data

                for (var i = 0; i < brgrRefs.Length; i++)
                {
                    reader.BaseStream.Seek(brgrRefs[i].DataOffset + resHeader.ResourceOffset, SeekOrigin.Begin);
                    var dataLen = reader.ReadUInt32BE();
                    var data    = reader.ReadBytes((int)dataLen);
                }
            }
        }
Example #32
0
    public bool CheckVersion(string xml)
    {
        XmlDocument doc = new XmlDocument();

        if (doc == null)
        {
            return(false);
        }
        doc.LoadXml(xml);
        XmlElement ele = doc.DocumentElement;

        if (ele == null)
        {
            return(false);
        }
        XmlNode nodeVer = ele.SelectSingleNode("Net");

        if (nodeVer == null)
        {
            return(false);
        }
        string resftp    = nodeVer.Attributes["resftp"].Value;
        string runftp    = nodeVer.Attributes["runftp"].Value;
        string clientUrl = nodeVer.Attributes["clienturl"].Value;

        if (nodeVer.Attributes["ftpport"] != null)
        {
            ServerSetting.ResFtpPort = ushort.Parse(nodeVer.Attributes["ftpport"].Value);
        }
        ServerSetting.SetRunFTP(runftp);
        ServerSetting.ServerList.Clear();
        for (int i = 0; i < nodeVer.ChildNodes.Count; ++i)
        {
            XmlNode node = nodeVer.ChildNodes[i];
            if (node.Name == "IP")
            {
                ServerIPData sid = new ServerIPData();
                sid.IP   = node.FirstChild.Value;
                sid.Port = ushort.Parse(node.Attributes["port"].Value);
                ServerSetting.ServerList.Add(sid);
            }
            else if (node.Name == "FTP")
            {
                ServerIPData rfd = new ServerIPData();
                rfd.IP   = node.FirstChild.Value;
                rfd.Port = ushort.Parse(node.Attributes["port"].Value);
                rfd.ISP  = byte.Parse(node.Attributes["dx"].Value);
                m_ResFtpList.Add(rfd);
            }
        }

        ServerSetting.SERVICES_URL = "";// ele.SelectSingleNode("Services").FirstChild.Value;
        XmlNode reporterNode = ele.SelectSingleNode("Reporter");

        if (reporterNode != null)
        {
            ServerSetting.ReporterIP   = reporterNode.FirstChild.Value;
            ServerSetting.ReporterPort = ushort.Parse(reporterNode.Attributes["port"].Value);
        }
        XmlNode ShareNode = ele.SelectSingleNode("Share");

        if (ShareNode != null)
        {
            string  wxid = "", wxpwd = "", sinaid = "", sinapwd = "", qqid = "", qqpwd = "";
            XmlNode xn = ShareNode.ChildNodes[0];
            if (xn != null)
            {
                wxid  = xn.Attributes["id"].Value;
                wxpwd = xn.Attributes["pwd"].Value;
            }
            xn = ShareNode.ChildNodes[1];
            if (xn != null)
            {
                sinaid  = xn.Attributes["id"].Value;
                sinapwd = xn.Attributes["pwd"].Value;
            }
            xn = ShareNode.ChildNodes[2];
            if (xn != null)
            {
                qqid  = xn.Attributes["id"].Value;
                qqpwd = xn.Attributes["pwd"].Value;
            }
            NativeInterface.InitShare(wxid, wxpwd, sinaid, sinapwd, qqid, qqpwd);
            xn = ShareNode.ChildNodes[3];
            if (xn != null)
            {
                ServerSetting.ShareWebUrl = xn.Attributes["weburl"].Value;
                ServerSetting.ShareTxt    = xn.Attributes["txt"].Value;
                ServerSetting.ShareImgUrl = xn.Attributes["imgurl"].Value;
            }
        }
        //读取现有的资源,进行比较
        XmlNode clientNode = ele.SelectSingleNode("Client");
        string  clientVer  = clientNode.FirstChild.Value;;
        uint    clientCrc  = uint.Parse(clientNode.Attributes["crc"].Value);
        uint    clientSize = uint.Parse(clientNode.Attributes["size"].Value);

        if (clientNode.Attributes["resver"] != null)
        {
            ServerSetting.RES_VERSION = uint.Parse(clientNode.Attributes["resver"].Value);
        }
        if (clientNode.Attributes["ping"] != null)
        {
            ServerSetting.SHOW_PING = uint.Parse(clientNode.Attributes["ping"].Value) != 0;
        }
        if (clientNode.Attributes["extrabtn"] != null)
        {
            ServerSetting.ShowExtraBtn = uint.Parse(clientNode.Attributes["extrabtn"].Value) != 0;
        }
        if (clientNode.Attributes["ftp_newftp"] != null)
        {
            FTPClient.USE_NEW_FTP = byte.Parse(clientNode.Attributes["ftp_newftp"].Value);
        }
        if (clientNode.Attributes["showgame"] != null)
        {
            ServerSetting.ShowGame = byte.Parse(clientNode.Attributes["showgame"].Value) != 0;
        }
        if (clientNode.Attributes["ftp_chunkcount"] != null)
        {
            FTPClient.MAX_CHUNK_COUNT = byte.Parse(clientNode.Attributes["ftp_chunkcount"].Value);
        }
        if (clientNode.Attributes["ftp_chunksize"] != null)
        {
            FTPClient.CHUNK_SIZE = int.Parse(clientNode.Attributes["ftp_chunksize"].Value);
        }
        if (clientNode.Attributes["thirdbtn"] != null)
        {
            ServerSetting.ShowHallThirdBtn = int.Parse(clientNode.Attributes["thirdbtn"].Value) != 0;
        }
        if (clientNode.Attributes["exchange"] != null)
        {
            ServerSetting.ShowExchange = int.Parse(clientNode.Attributes["exchange"].Value) != 0;
        }
        if (clientNode.Attributes["showjbp"] != null)
        {
            ServerSetting.ShowJBP = int.Parse(clientNode.Attributes["showjbp"].Value) != 0;
        }
        if (clientNode.Attributes["showmatch"] != null)
        {
            ServerSetting.ShowMatch = int.Parse(clientNode.Attributes["showmatch"].Value) != 0;
        }
        if (clientNode.Attributes["showthirdlogin"] != null)
        {
            ServerSetting.ShowThirdLoginBtn = int.Parse(clientNode.Attributes["showthirdlogin"].Value) != 0;
        }

        m_State = UpdateState.UPDATE_COMPLETE;
        //检查客户端版本号
        if (clientVer == null)
        {
            return(false);
        }
        uint ver = Utility.VersionToUint(clientVer);

        if (ver > ServerSetting.ClientVer)
        {
            //clientUrl = ReplaceFTPAddress(clientUrl);
            //版本更新
            if (RuntimeInfo.GetPlatform() == GamePlatformType.Android)
            {
                if (CheckClientFile(clientCrc))
                {
                    //文件已经下载完成。
                    //NativeInterface.DownNewClientVersion(GetClientPath());
                }
                else
                {
                    //下载资源文件
                    DownResData drd = new DownResData();
                    drd.ResType = ResType.MAX;
                    drd.ResUrl  = clientUrl;
                    drd.ResCrc  = clientCrc;
                    drd.ResSize = clientSize;
                    m_DownList.Add(drd);
                    m_State             = UpdateState.UPDATE_DOWNLOAD_RES;
                    m_AllDownloadBytes += clientSize;
                }
                m_bNewClient = true;
            }
            else if (RuntimeInfo.GetPlatform() == GamePlatformType.Windows)
            {
                m_WinSizeList = new int[5];
                for (int i = 0; i < 5; ++i)
                {
                    string str = "winsize" + (i + 1).ToString();
                    if (clientNode.Attributes[str] != null)
                    {
                        m_WinSizeList[i] = int.Parse(clientNode.Attributes[str].Value);
                    }
                }
                DownResData drd = new DownResData();
                drd.ResType = ResType.MAX;
                drd.ResUrl  = clientUrl;
                drd.ResCrc  = clientCrc;
                drd.ResSize = clientSize;
                m_DownList.Add(drd);
                m_State             = UpdateState.UPDATE_DOWNLOAD_RES;
                m_AllDownloadBytes += clientSize;
                m_bNewClient        = true;
            }
            else
            {
                NativeInterface.DownNewClientVersion(clientUrl);
                m_State = UpdateState.UPDATE_NEW_CLIENT;
                return(true);
            }
        }
        for (int i = 0; i < (int)ResManager.RES_NUM; ++i)
        {
            ResType     rt   = (ResType)i;
            XmlNode     node = ele.SelectSingleNode(rt.ToString());
            DownResData vd   = new DownResData();
            vd.ResCrc       = uint.Parse(node.Attributes["crc"].Value);
            vd.ResUnzipSize = uint.Parse(node.Attributes["unzipsize"].Value);
            if (ResManager.Instance.VersionMgr.CheckVerAndCrc(rt, vd.ResCrc, vd.ResUnzipSize))
            {
                //下载资源文件
                vd.ResType = rt;
                vd.ResUrl  = resftp + node.Attributes["url"].Value;
                vd.ResSize = uint.Parse(node.Attributes["size"].Value);
                m_DownList.Add(vd);
                m_AllDownloadBytes += vd.ResSize;
            }
        }

        //保存当前的RES_VERSION
        if (m_DownList.Count > 0)
        {
            m_State = UpdateState.UPDATE_DOWNLOAD_RES;
            return(true);
        }
        else
        {
            return(true);
        }
    }
Example #33
0
        void ReadMap()
        {
            var br = new BinaryReader(_stream);
            _stream.Seek(_mapOffset + 22, SeekOrigin.Begin);

            _resMap.resAttr = br.ReadUInt16BigEndian();
            _resMap.typeOffset = br.ReadUInt16BigEndian();
            _resMap.nameOffset = br.ReadUInt16BigEndian();
            _resMap.numTypes = br.ReadUInt16BigEndian();
            _resMap.numTypes++;

            _stream.Seek(_mapOffset + _resMap.typeOffset + 2, SeekOrigin.Begin);
            _resTypes = new ResType[_resMap.numTypes];

            for (int i = 0; i < _resMap.numTypes; i++)
            {
                _resTypes[i].id = br.ReadUInt32BigEndian();
                _resTypes[i].items = br.ReadUInt16BigEndian();
                _resTypes[i].offset = br.ReadUInt16BigEndian();
                _resTypes[i].items++;

                Debug.WriteLine("resType: <{0}> items: {1} offset: {2} (0x{3:X2})", _resTypes[i].id, _resTypes[i].items, _resTypes[i].offset, _resTypes[i].offset);
            }

            _resLists = new Resource[_resMap.numTypes][];

            for (int i = 0; i < _resMap.numTypes; i++)
            {
                _resLists[i] = new Resource[_resTypes[i].items];
                _stream.Seek(_resTypes[i].offset + _mapOffset + _resMap.typeOffset, SeekOrigin.Begin);

                for (int j = 0; j < _resTypes[i].items; j++)
                {
                    var resPtr = _resLists[i][j] = new Resource();

                    resPtr.id = br.ReadUInt16BigEndian();
                    resPtr.nameOffset = (short)br.ReadUInt16BigEndian();
                    resPtr.dataOffset = br.ReadUInt32BigEndian();
                    br.ReadUInt32BigEndian();

                    resPtr.attr = (byte)(resPtr.dataOffset >> 24);
                    resPtr.dataOffset &= 0xFFFFFF;
                }

                for (int j = 0; j < _resTypes[i].items; j++)
                {
                    if (_resLists[i][j].nameOffset != -1)
                    {
                        _stream.Seek(_resLists[i][j].nameOffset + _mapOffset + _resMap.nameOffset, SeekOrigin.Begin);

                        byte len = br.ReadByte();
						_resLists[i][j].name = br.ReadBytes(len).GetText();
                    }
                }
            }
        }
Example #34
0
 void NukeResource(ResType type, int idx)
 {
     Dictionary<int, byte[]> res;
     var resCounter = GetCounter(type);
     switch (type)
     {
         case ResType.Room:
             if (_rooms.ContainsKey(idx))
             {
                 var data = _rooms[idx];
                 _allocatedSize -= data.Size;
                 _rooms.Remove(idx);
                 resCounter.Remove(idx);
             }
             return;
         case ResType.Script:
             res = _scripts;
             break;
         case ResType.Costume:
             res = _costumes;
             break;
         case ResType.Sound:
             res = _sounds;
             break;
         default:
             return;
     }
     if (res.ContainsKey(idx))
     {
         this.Trace().Write("Resource", "NukeResource({0},{1})", type, idx);
         var data = res[idx];
         _allocatedSize -= data.Length;
         res.Remove(idx);
         resCounter.Remove(idx);
     }
 }
Example #35
0
 public void ChangePackageUi(ResType res, int num)
 {
     resTextDic[res].text = num.ToString();
 }
Example #36
0
        public override void Deserialize(GenericReader reader)
        {
            base.Deserialize(reader);
            int version = reader.ReadInt();

            //All true as there are no players here at this point.
            Frozen = true;
            CantWalk = true;
            Paralyzed = true;

            m_ResType = (ResType)reader.ReadInt();
            SolidHueOverride = (int)m_ResType;
            m_base = (CreatureStatueBase)reader.ReadItem();

            //freeze when loaded. No players will be here at this point anyways
            //they have to log in.
            Timer.DelayCall(TimeSpan.FromSeconds(0.5), Freeze);
        }
Example #37
0
 public AssetPath(string path,ResType type)
 {
     assetPath = path;
     resType =   (int)type;
 }
Example #38
0
 /// <summary>
 /// Liefert eine ganz bestimmte Resource eines Spieler zurück
 /// </summary>
 /// <param name="user">Benutzer für den die Resource abgefragt werden soll</param>
 /// <param name="type">Resourcen Typ</param>
 /// <returns>Anzahl der entsprechenden Resource</returns>
 public double getResource(User user, ResType type)
 {
     if (resourceList.ContainsKey(user))
     {
         ResList list = resourceList[user];
         return list[type];
     }
     return 0;
 }
Example #39
0
 public ACMedia(Uri url, string infoText, string name, MediaPlayType playType, Color color, ResType res, MediaSoundFx fx, bool set, float radius, float radof, byte vol, int loop, AwBooleanType osd, AwBooleanType ext, AwBooleanType nostop)
 {
     _url      = url;
     _infoText = infoText;
     _name     = name;
     _playType = playType;
     _color    = color;
     _res      = res;
     _fx       = fx;
     _set      = set;
     _radius   = radius;
     _radoff   = radof;
     _vol      = vol;
     _loop     = loop;
     _osd      = osd;
     _ext      = ext;
     _nostop   = nostop;
 }
Example #40
0
        /// <summary>
        /// Zieht einem Spieler einen bestimmten Resourcen Betrag ab
        /// </summary>
        /// <param name="user">Benutzer, von dem die Resourcen abgezogen werden sollen</param>
        /// <param name="type">Resourcen Typ</param>
        /// <param name="count">Resourcen Betrag</param>
        public void subRes(User user, ResType type, double count)
        {
            if (count < 0)
            {
                throw new ArgumentException("Der Wert von Count darf nicht kleiner als 0 sein!");
            }

            if (!resourceList.ContainsKey(user))
            {
                addUser(user);
            }

            if ((resourceList[user][type] - count) < 0)
            {
                throw new GameException("Der Spieler hat nicht genügend Resourcen");
            }

            lock (resourceList)
            {

                resourceList[user][type] -= count;

            }
        }
Example #41
0
        // https://wiki.scummvm.org/index.php?title=SCI/Specifications/Resource_files/SCI1_resources
        // http://sci.sierrahelp.com/Documentation/SCISpecifications/09-SCI1Resources.html
        protected override void ReadMap(FileStream fs)
        {
            if (!_isSCI_11.HasValue)
            {
                DetectVersion(fs);
            }

            fs.Position = 0;

            List <ResMapOffset> offsets = new List <ResMapOffset>();
            int entriesSize             = _isSCI_11.Value ? 5 : 6;

            ResMapOffset off = null;

            while (true)
            {
                int t = fs.ReadByte();
                if ((t < 0x80 || t > 0x91) && t != 0xff)
                {
                    throw new FormatException("Wrong format");
                }

                ResType type   = (ResType)t;
                ushort  offset = fs.ReadUShortBE();
                if (off != null)
                {
                    off.RecordsCount = (offset - off.Offset) / entriesSize;              // Высчитываем количество записей исходя из границ блоков
                }
                if (type == ResType.End)
                {
                    break;
                }

                off = new ResMapOffset(type, offset);

                offsets.Add(off);
            }

            for (int i = 0; i < offsets.Count; i++)
            {
                fs.Position = offsets[i].Offset;
                for (int j = 0; j < offsets[i].RecordsCount; j++)
                {
                    ushort num = fs.ReadUShortBE();
                    int    offset;
                    byte   resNum = 0;

                    if (_isSCI_11.Value)
                    {
                        offset   = fs.ReadUShortBE();
                        offset  |= fs.ReadByte() << 16;
                        offset <<= 1;
                    }
                    else
                    {
                        int address = fs.ReadIntBE();
                        resNum = (byte)((address >> 28) & 0x0F);
                        offset = address & 0x0FFFFFFF;
                    }

                    //Console.WriteLine($"{num,6} {offset:X08} {offsets[i].Type} {resNum}");

                    var ex = Resources.Find(r => r.Type == offsets[i].Type && r.Number == num);
                    if (ex != null)
                    {
                        ex.Volumes.Add(new Resource.VolumeOffset {
                            Num = resNum, Offset = offset
                        });
                    }
                    else
                    {
                        Resource res = CreateRes(offsets[i].Type);
                        res.Init(this, offsets[i].Type, num, resNum, offset);
                        Resources.Add(res);
                    }
                }
            }

            var allFiles = Directory.GetFiles(GameDirectory).Select(f => Path.GetFileName(f)).Select(f => f.ToUpper());

            foreach (ResType rt in Enum.GetValues(typeof(ResType)))
            {
                if ((byte)rt < 0x80 || (byte)rt > 0x91)
                {
                    continue;
                }

                var ext = GetExtension(rt);

                foreach (var f in allFiles.Where(f => f.EndsWith("." + ext)))
                {
                    if (!ushort.TryParse(Path.GetFileNameWithoutExtension(f), out var num))
                    {
                        continue;
                    }

                    if (GetResouce(f) == null)
                    {
                        ushort method = 0;
                        byte   resNum = 0;

                        var first = Resources.FirstOrDefault(r => r.Type == rt);
                        if (first != null)
                        {
                            method = first.GetInfo().Method;
                            resNum = first.Volumes[0].Num;
                        }

                        var info = new ResourceFileInfo1((byte)rt, num, method);
                        var res  = CreateRes(rt);
                        res.Init(this, rt, num, resNum, info);
                        Resources.Add(res);
                    }
                }
            }
        }
Example #42
0
 public AssetPath(string path,ResType type)
 {
     assetPath = path;
     resType =   (int)type;
 }
Example #43
0
    public bool CheckVerAndCrc(ResType res, uint crc, uint ressize)
    {
        int idx = (int)res;

        return(m_ResVer[idx].ResCrc != crc || m_ResVer[idx].ResSize != ressize);
    }
Example #44
0
 /// <summary>
 /// 同步加载资源
 /// </summary>
 /// <returns></returns>
 public T LoadAsset <T>(ResType type, string name, AssetType assetType) where T : Object
 {
     return(_resMgr.LoadAsset <T>(type, ResPath.Instance.GetPath(name, assetType)));
 }
Example #45
0
        public Object GetObject(ResType type, string name)
        {
            AssetRequest req = GetAssetRequest(name, type);

            return(req != null ? req.asset : null);
        }
Example #46
0
 /// <summary>
 /// 释放资源
 /// </summary>
 ///
 public void UnloadAsset(ResType type)
 {
     _resMgr.UnloadAsset(type);
 }
Example #47
0
 public static string GetResPersistentPath(ResType res)
 {
     return(string.Format("{0}/data/{1}_{2}.dat", LocalDir, GetPlatformString(), res.ToString()));
 }
Example #48
0
 public void UnloadAsset(ResType type, string name)
 {
     _resMgr.UnloadAsset(type, name);
 }
Example #49
0
 public BaseHandleResource(ResType type, HandleOperationType handleResourceType, int createdByProcess, int messageid) : base(type, createdByProcess, false, messageid)
 {
     this.handleResourceType = handleResourceType;
 }
Example #50
0
        // 检索该帐户是否对指定的配置事项有指定的权限
        // 线程安全
        // parameters:
        //		strPath	要关心其权限的对象的资源路径
        //      resType 资源类型
        //      strOneRight 待确定的权限
        //		strExistRights	返回该对象已经存在的的权限列表
        // return:
        //		true	有
        //		false	无
        public bool HasRights(string strPath,
            ResType resType,
            string strQueryOneRight,
            out string strExistRights)
        {
            strExistRights = "";

            m_lock.AcquireReaderLock(m_nTimeOut);

            try
            {
                ResultType resultType = new ResultType();
                string strError = "";
                int nRet = this.cfgRights.CheckRights(strPath,
                    this.aOwnerDbName,
                    this.Name,
                    resType,
                    strQueryOneRight,
                    out strExistRights,
                    out resultType,
                    out strError);
                if (nRet == -1)
                {
                    throw new Exception("CheckRights()出错,原因:" + strError);
                }

                if (resultType == ResultType.Plus)
                    return true;

                return false;
            }
            finally
            {
                m_lock.ReleaseReaderLock();
            }
        }