Example #1
0
        /// <summary>
        /// 将资源配置字符串转化为游戏资源列表(GameResourceTypeSub,ModelID,Count||GameResourceTypeSub,ModelID,Count||GameResourceTypeSub,ModelID,Count)
        /// </summary>
        /// <param name="strGameResource">资源配置字符串</param>
        /// <param name="isLock">是否锁定创建的资源</param>
        /// <returns>游戏资源列表</returns>
        public static List <GameResourceObject> ConvertToGameResourceObject(String strGameResource, Boolean isLock = true)
        {
            // 检查输入字符串
            if (String.IsNullOrEmpty(strGameResource))
            {
                throw new Exception("参数为空");
            }

            // 将字符串切割
            var strArray = StringUtil.Split(strGameResource, new String[] { ",", "||" });

            // 判断数量是否足够
            if (strArray.Length % 3 != 0)
            {
                throw new Exception($"参数{strGameResource}的格式不正确");
            }

            // 处理切割后的字符串
            var gameResourceList = new List <GameResourceObject>(strArray.Length / 3);

            for (Int32 i = 0; i < strArray.Length; i += 3)
            {
                // 取出对应的值
                var resourceTypeSub = 0;
                var modelId         = 0;
                var count           = 0;
                if (ConvertUtil.TryParseToInt32(strArray[i], out resourceTypeSub) == false ||
                    ConvertUtil.TryParseToInt32(strArray[i + 1], out modelId) == false ||
                    ConvertUtil.TryParseToInt32(strArray[i + 2], out count) == false
                    )
                {
                    throw new Exception($"参数{strGameResource}的格式不正确");
                }

                // 判断数量是否正确
                if (count == 0)
                {
                    throw new Exception($"数量:{count}不正确");
                }

                // 判断模型数据是否存在,此处不用throw,因为内部会进行throw
                if (IfGameResourceModelExists((ResourceTypeSubEnum)resourceTypeSub, modelId) == false)
                {
                    throw new Exception($"资源类型对应的模型不存在,ResourceType={resourceTypeSub.ToString()},ModelId={modelId}");
                }

                // 构造对象,并添加到列表中
                var gameResourceObject = new GameResourceObject((ResourceTypeSubEnum)resourceTypeSub, modelId, count, isLock);
                gameResourceList.Add(gameResourceObject);
            }

            return(gameResourceList);
        }
Example #2
0
 /// <summary>
 /// 组装消耗数据的实体id
 /// </summary>
 /// <param name="player">玩家对象</param>
 /// <param name="obj">要组装的消耗资源</param>
 /// <param name="consumeIds">要消耗的实体id</param>
 /// <returns>组装之后的资源</returns>
 internal virtual List <GameResourceObject> BuildConsumeResource(Player player, GameResourceObject obj, Guid[] consumeIds)
 {
     throw new Exception($"未实现的资源组装。ResourceTypeSub={obj.ResourceTypeSub.ToString()}");
 }
Example #3
0
 /// <summary>
 /// 获取可以消耗的资源
 /// </summary>
 /// <param name="player">玩家对象</param>
 /// <param name="obj">要组装的消耗资源</param>
 /// <returns>组装之后的资源</returns>
 internal abstract List <GameResourceObject> BuildCanConsumeResource(Player player, GameResourceObject obj);
Example #4
0
 /// <summary>
 /// 资源是否足够
 /// </summary>
 /// <param name="player">玩家对象</param>
 /// <param name="obj">资源对象</param>
 /// <returns>ture:足够,反之不足够(最好换成自己的错误码,提示更准确的信息)</returns>
 internal abstract Boolean IsEnough(Player player, GameResourceObject obj);
Example #5
0
 /// <summary>
 /// 组装客户端数据
 /// </summary>
 /// <param name="player">玩家对象</param>
 /// <param name="obj">资源对象</param>
 /// <returns>组装客服端数据</returns>
 internal abstract Dictionary <String, Object> AssembleToClient(Player player, GameResourceObject obj);