Example #1
0
        private static void BuildByParameter(BuildParameter param)
        {
            string      outputFileName = param.outputFileName;
            BuildTarget targetPlatform = param.targetPlatform;

            List <string> allScene = new List <string> ();

            foreach (EditorBuildSettingsScene scene in EditorBuildSettings.scenes)
            {
                if (scene.enabled)
                {
                    allScene.Add(scene.path);
                }
            }

            PlayerSettings.statusBarHidden = true;

            // 実行
            string errorMessage = BuildPipeline.BuildPlayer(
                allScene.ToArray(),
                outputFileName,
                targetPlatform,
                BuildOptions.None
                ).ToString();

            // 結果出力
            if (!string.IsNullOrEmpty(errorMessage.ToString()))
            {
                Debug.LogError("Error!");
                Debug.LogError(errorMessage);
                throw new Exception();
            }

            Debug.Log("Complete!");
        }
Example #2
0
 private void Initialize()
 {
     if (File.Exists(configPath))
     {
         string config = File.ReadAllText(configPath);
         var    json   = lhJson.Parse(config) as JsonObject;
         m_buildParameter = new BuildParameter(json["buildParameter"].AsDict());
         var bundleGroupJson = json["bundleGroup"].AsList();
         for (int i = 0; i < bundleGroupJson.Count; i++)
         {
             m_bundleGroup.Add(new BundleGroup(bundleGroupJson[i].AsDict()));
         }
     }
     else
     {
         m_buildParameter = new BuildParameter()
         {
             applicationPath  = ApplicationPath.StreamingAssetsPath,
             stuff            = ".assetbundle",
             outputRootFolder = "lhBundle",
             crc = 0,
             buildAssetBundleOptions = BuildAssetBundleOptions.CollectDependencies,
             buildOptions            = BuildOptions.Development,
             buildTarget             = BuildTarget.Android
         };
     }
 }
Example #3
0
    public static void BuildIOS()
    {
        //修改导出路径
        string[] args = System.Environment.GetCommandLineArgs();
        if (args != null && args.Length >= 6)
        {
            ExportPath = args[5];
        }
        if (args != null && args.Length >= 7)
        {
            ExportName = args[6];
        }

        var buildString = GetBuildString();

        if (buildString != null)
        {
            buildParameter = new BuildParameter();
            buildParameter.SetExtraArg(buildString);
        }

        //判断是不是iOS平台
        if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.iOS)
        {
            BuildApp(BuildTarget.iOS);
        }
        else
        {
            curState = AutoPackerState.Build_App;
            EditorUserBuildSettings.SwitchActiveBuildTarget(BuildTargetGroup.iOS, BuildTarget.iOS);
        }
    }
Example #4
0
 public void Revert()
 {
     m_bundleGroup.Clear();
     m_buildParameter = null;
     Initialize();
     EditorUtility.DisplayDialog("Information", "Rever success", "Ok");
 }
Example #5
0
    public static void PackAB_PC()
    {
        //修改assetbundles生成路径
        var buildString = GetBuildString();

        if (buildString != null)
        {
            buildParameter = new BuildParameter();
            buildParameter.SetExtraArg(buildString);
        }

        //判断是不是PC平台
        if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.StandaloneWindows ||
            EditorUserBuildSettings.activeBuildTarget == BuildTarget.StandaloneWindows64 ||
            EditorUserBuildSettings.activeBuildTarget == BuildTarget.StandaloneOSX ||
            EditorUserBuildSettings.activeBuildTarget == BuildTarget.StandaloneLinux64)
        {
            PackAB(BuildTarget.StandaloneWindows64);
        }
        else
        {
            curState = AutoPackerState.Pack_AB;
            EditorUserBuildSettings.SwitchActiveBuildTarget(BuildTargetGroup.Standalone,
                                                            BuildTarget.StandaloneWindows64);
        }
    }
Example #6
0
        protected void AssertParamNeeded(BuildParameter param, BuildParameter need, int more, int?level = null)
        {
            var lv = level ?? OnLevel;

            manager.MissingRequirments(dal.Get(lv, param))
            .Where(x => x.Any(y => y.param.id == need.id && y.amount == more))
            .Any();
        }
        public override void Inject(object target, IContainer container, ImportMetadata metadata, IImportInterceptor interceptor, ErrorTracer errorTracer, BuildParameter[] parameters)
        {
            Contract.Requires<ArgumentNullException>(target != null, "target");
            Contract.Requires<ArgumentNullException>(container != null, "container");
            Contract.Requires<ArgumentNullException>(metadata != null, "metadata");
            Contract.Requires<ArgumentNullException>(errorTracer != null, "errorTracer");

            throw new NotImplementedException();
        }
Example #8
0
 public LevelParamViewModel(FakeDAL dal, BuildParameter p, int level, Build b, IMvxCommand <LevelParamViewModel> tap)
 {
     lp = dal.Get <BuildLevelParameter>()
          .Single(x => x.Game.id == p.Game.id && x.Build.id == b.id && x.Parameter.Type.id == p.Type.id && x.Parameter.id == p.id && x.Level == level);
     Amount = lp.Amount;
     Tap    = tap;
     Name   = p.Name;
     Level  = level;
 }
 public void ProcessParameterDeserializer_ConvertsExportedAgentSettings_Git()
 {
     var agentSettings = new BuildParameter
     {
         Json = @"{""unknown"": ""please help""}"
     };
     var expBuildDef = this.Serialize(new { GitAgentSettings = agentSettings });
     var procParam = new[] { "AgentSettings", expBuildDef };
     ExportedProcessParameterTransformer.ProcessParameterDeserializer(procParam).ShouldBeEquivalentTo(agentSettings);
 }
Example #10
0
        public void ProcessParameterDeserializer_ConvertsExportedAgentSettings_Git()
        {
            var agentSettings = new BuildParameter
            {
                Json = @"{""unknown"": ""please help""}"
            };
            var expBuildDef = this.Serialize(new { GitAgentSettings = agentSettings });
            var procParam   = new[] { "AgentSettings", expBuildDef };

            ExportedProcessParameterTransformer.ProcessParameterDeserializer(procParam).ShouldBeEquivalentTo(agentSettings);
        }
        public override void Inject(object target, IContainer container, ImportMetadata metadata, IImportInterceptor interceptor, ErrorTracer errorTracer, BuildParameter[] parameters)
        {
            errorTracer.Phase = "EventManager Inject " + metadata.ContractName;

            try
            {
                var eventInfo = _member as EventInfo;
                if (eventInfo != null) _manager.AddPublisher(_metadata.ContractName, eventInfo, target, errorTracer);

                var method = _member as MethodInfo;
                if (method != null) _manager.AddEventHandler(_metadata.ContractName, method, target, errorTracer);
            }
            catch (Exception e)
            {
                errorTracer.Exceptional = true;
                errorTracer.Exception = e;
            }
        }
Example #12
0
        protected void AssertParamChange(BuildParameter param, int alter, bool allowed = true, int?level = null, bool allfollowing = true)
        {
            int start = level ?? OnLevel;

            for (int i = start; i <= param.Game.MaxLevel; i++)
            {
                var del = manager.ChangeRequest(dal.Get(i, param), alter);
                if (allowed)
                {
                    Assert.IsNotNull(del, "{0} {1} not allowed lvl {3}->{2}", param.Name, alter, i, start);
                    del();
                }
                else
                {
                    Assert.IsNull(del, "{0} {1} actually is allowed lvl {2}", param.Name, alter, start);
                    break; // only first tiem will be disapplows.
                }
            }
        }
        public DefaultBuildContext(IExport targetExport, BuildMode mode, IContainer container, string contractName, 
            ErrorTracer errorTracer, BuildParameter[] parameters, IResolverExtension[] resolverExtensions)
        {
            Contract.Requires<ArgumentNullException>(targetExport != null, "targetExport");
            Contract.Requires<ArgumentNullException>(container != null, "container");
            Contract.Requires<ArgumentNullException>(errorTracer != null, "errorTracer");

            Metadata = targetExport.GetNamedExportMetadata(contractName);
            errorTracer.Export = Metadata.ToString();
            ExportType = targetExport.ImplementType;
            Target = null;
            BuildCompled = false;
            Policys = new PolicyList();
            Mode = mode;
            Container = container;
            ErrorTracer = errorTracer;
            Parameters = parameters;
            ResolverExtensions = resolverExtensions;
        }
Example #14
0
    public static void PackAB_IOS()
    {
        //修改assetbundles生成路径
        var buildString = GetBuildString();

        if (buildString != null)
        {
            buildParameter = new BuildParameter();
            buildParameter.SetExtraArg(buildString);
        }

        //判断是不是iOS平台
        if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.iOS)
        {
            PackAB(BuildTarget.iOS);
        }
        else
        {
            curState = AutoPackerState.Pack_AB;
            EditorUserBuildSettings.SwitchActiveBuildTarget(BuildTargetGroup.iOS, BuildTarget.iOS);
        }
    }
Example #15
0
        public BuildDefinitionViewModel(IBuildDefinition build)
        {
            this.Name                      = build.Name;
            this.BuildDefinition           = build;
            this.Uri                       = build.Uri;
            this.TeamProject               = build.TeamProject;
            this.ContinuousIntegrationType = GetFriendlyTriggerName(build.ContinuousIntegrationType);
            if ((build.ContinuousIntegrationType == Microsoft.TeamFoundation.Build.Client.ContinuousIntegrationType.Schedule ||
                 build.ContinuousIntegrationType == Microsoft.TeamFoundation.Build.Client.ContinuousIntegrationType.ScheduleForced) &&
                build.Schedules.Count > 0)
            {
                this.ContinuousIntegrationType = string.Format("{0} - {1}", this.ContinuousIntegrationType, ConvertTime(build.Schedules[0].StartTime.ToString(CultureInfo.CurrentCulture)));
            }
            else if (build.ContinuousIntegrationType == Microsoft.TeamFoundation.Build.Client.ContinuousIntegrationType.Gated)
            {
                this.ContinuousIntegrationType = string.Format("{0} - {1}", this.ContinuousIntegrationType, build.BatchSize);
            }
            else if (build.ContinuousIntegrationType == Microsoft.TeamFoundation.Build.Client.ContinuousIntegrationType.Batch)
            {
                this.ContinuousIntegrationType = string.Format("{0} - {1}", this.ContinuousIntegrationType, build.ContinuousIntegrationQuietPeriod);
            }

            this.BuildController = build.BuildController != null ? build.BuildController.Name : NotAvailable;
            this.Process         = build.Process != null?Path.GetFileNameWithoutExtension(build.Process.ServerPath) : NotAvailable;

            this.Description         = build.Description;
            this.DefaultDropLocation = build.DefaultDropLocation;
            this.Id               = Convert.ToInt32(build.Id);
            this.QueueStatus      = build.QueueStatus.ToString();
            this.Enabled          = build.QueueStatus != DefinitionQueueStatus.Disabled;
            this.IsGitProject     = build.SourceProviders.Any(s => s.Name.ToUpperInvariant().Contains("GIT"));
            this.IsTfvcProject    = !this.IsGitProject;
            this.LastModifiedBy   = build.Workspace.LastModifiedBy;
            this.LastModifiedDate = build.Workspace.LastModifiedDate;

            try
            {
                var parameters = WorkflowHelpers.DeserializeProcessParameters(build.ProcessParameters);
                this.OutputLocation = parameters.ContainsKey("OutputLocation") ? parameters["OutputLocation"].ToString() : "SingleFolder";

                if (parameters.ContainsKey("AgentSettings"))
                {
                    try
                    {
                        if (parameters["AgentSettings"].GetType() == typeof(AgentSettings))
                        {
                            AgentSettings ags = (AgentSettings)parameters["AgentSettings"];
                            if (ags.HasTags)
                            {
                                this.AgentTags = ags.Tags.ToString();
                            }
                        }
                        else if (parameters["AgentSettings"].GetType() == typeof(BuildParameter))
                        {
                            BuildParameter ags = (BuildParameter)parameters["AgentSettings"];
                            {
                                var jstt = JsonConvert.DeserializeObject <AgentSettingsBuildParameter>(ags.Json);
                                if (jstt.Tags != null && jstt.Tags.Count > 0)
                                {
                                    this.AgentTags = string.Join(", ", jstt.Tags.ToArray());
                                }
                            }
                        }
                    }
                    catch (Exception)
                    {
                        this.AgentTags = "Failed to determine";
                    }
                }
            }
            catch (Exception)
            {
                this.OutputLocation = "Failed to determine";
            }
        }
Example #16
0
 public static BuildLevelParameter Get(this FakeDAL dal, int level, BuildParameter param)
 {
     return(dal.Get <BuildLevelParameter>().Single(x => x.Parameter.id == param.id && x.Level == level));
 }
 private void BuildUp(BuildObject build, ErrorTracer errorTracer, BuildParameter[] buildParameters)
 {
     lock (build.Export)
     {
         var context = new DefaultBuildContext(build, container, errorTracer, buildParameters);
         build.Instance = context.Target;
         Pipeline.Build(context);
     }
 }
        /// <summary>
        ///     The build up.
        /// </summary>
        /// <param name="type">
        ///     The type.
        /// </param>
        /// <param name="constructorArguments">
        ///     The constructor arguments.
        /// </param>
        /// <returns>
        ///     The <see cref="object" />.
        /// </returns>
        internal object BuildUp(Type type, object[] constructorArguments, ErrorTracer errorTracer, BuildParameter[] buildParameters)
        {
            Contract.Requires<ArgumentNullException>(type != null, "type");

            errorTracer.Phase = "Begin Building Up";
            try
            {
                var context = new DefaultBuildContext(
                    _factory.CreateAnonymos(type, constructorArguments),
                    BuildMode.BuildUpObject,
                    container,
                    type.Name, errorTracer,
                    buildParameters, _componentRegistry.GetAll<IResolverExtension>().ToArray());
                Pipeline.Build(context);
                Contract.Assume(context.Target != null);
                return context.Target;
            }
            catch (Exception e)
            {
                errorTracer.Exceptional = true;
                errorTracer.Exception = e;
                return null;
            }
        }
        /// <summary>
        ///     The build up.
        /// </summary>
        /// <param name="toBuild"></param>
        /// <param name="export">
        ///     The export.
        /// </param>
        /// <param name="errorTracer"></param>
        /// <returns>
        ///     The <see cref="object" />.
        /// </returns>
        public object BuildUp(object toBuild, ErrorTracer errorTracer, BuildParameter[] buildParameters)
        {
            Contract.Requires<ArgumentNullException>(errorTracer != null, "errorTracer");
            Contract.Requires<ArgumentNullException>(toBuild != null, "export");

            lock (toBuild)
            {
                try
                {
                    errorTracer.Phase = "Begin Building Up";
                    var context = new DefaultBuildContext(
                        _factory.CreateAnonymosWithTarget(toBuild.GetType(), toBuild),
                        BuildMode.BuildUpObject,
                        container,
                        toBuild.GetType().Name, errorTracer,
                        buildParameters, _componentRegistry.GetAll<IResolverExtension>().ToArray());
                    Pipeline.Build(context);
                    Contract.Assume(context.Target != null);
                    return context.Target;
                }
                catch (Exception e)
                {
                    errorTracer.Exceptional = true;
                    errorTracer.Exception = e;
                    return null;
                }
            }
        }
        /// <summary>
        ///     The build up.
        /// </summary>
        /// <param name="export">
        ///     The export.
        /// </param>
        /// <param name="contractName">
        ///     The contract name.
        /// </param>
        /// <param name="tracer"></param>
        /// <param name="buildParameters"></param>
        /// <returns>
        ///     The <see cref="object" />.
        /// </returns>
        public object BuildUp(IExport export, string contractName, ErrorTracer tracer, BuildParameter[] buildParameters)
        {
            Contract.Requires<ArgumentNullException>(export != null, "export");

            lock (export)
            {
                try
                {
                    tracer.Phase = "Begin Building Up";
                    var context = new DefaultBuildContext(export, BuildMode.Resolve, container, contractName,
                        tracer, buildParameters, _componentRegistry.GetAll<IResolverExtension>().ToArray());
                    var buildObject = new BuildObject(export.ImportMetadata, context.Metadata, buildParameters);
                    Pipeline.Build(context);
                    if (tracer.Exceptional) return null;
                    buildObject.Instance = context.Target;
                    if (!export.ExternalInfo.External && !export.ExternalInfo.HandlesLiftime)
                        RebuildManager.AddBuild(buildObject);

                    Contract.Assume(context.Target != null);
                    return context.Target;
                }
                catch (Exception e)
                {
                    tracer.Exceptional = true;
                    tracer.Exception = e;
                    return null;
                }
            }
        }
Example #21
0
        public static void BuildApk()
        {
            var param = new BuildParameter(outputDirectory + @"\android\" + PlayerSettings.productName + "Dev.apk ", BuildTarget.Android);

            BuildByParameter(param);
        }
Example #22
0
        public static void BuildExe()
        {
            var param = new BuildParameter(outputDirectory + @"\exe\ " + PlayerSettings.productName + "Dev.exe ", BuildTarget.StandaloneWindows);

            BuildByParameter(param);
        }
Example #23
0
        /// <summary>
        /// 生成web自定义表单;
        /// </summary>
        /// <param name="buildPara"></param>
        /// <returns></returns>
        public string BuildCustomForm(BuildParameter buildPara)
        {
            string winType = "Edit";
            string ucode   = string.Empty;

            if (string.IsNullOrEmpty(buildPara.Id))
            {
                throw new Exception("Id不能为空!");
            }

            var fileName = BuildFile(buildPara.Id, ref ucode); //得到ini文件内容和帐套号
            var extJsStr = BuildExtJs(buildPara.Id);

            //p_form_m表中ucode可能不对,比如帐套是其他地方还原过来的,这里取默认帐套号
            if (!string.IsNullOrEmpty(ucode))
            {
                ucode = AppInfoBase.DbName;  //如NG0002
            }

            var type = buildPara.Type;  //web:网页自定义表单,app:移动自定义表单

            if (string.IsNullOrEmpty(type))
            {
                type = "web";
            }

            buildPara.AssemblyPath = AppDomain.CurrentDomain.BaseDirectory + "bin\\";
            buildPara.CsFilePath   = AppDomain.CurrentDomain.BaseDirectory + "CustomFormTemp\\";

            //获取设计器生成ini文件内容
            PbBillInfo billInfo = new PbBillInfo();

            billInfo = CommonParser.GetBillBase(fileName);

            // 生成前端代码;
            var clientGen = new ClientGen.Generator();

            if (type == "app")
            {
                if (!ClientGen.Generator.GenerateApp(billInfo, ref winType, ucode))
                {
                    throw new Exception("前端代码生成失败!");
                }
            }
            else
            {
                if (!ClientGen.Generator.Generate(billInfo, ref winType, extJsStr, ucode))
                {
                    throw new Exception("前端代码生成失败!");
                }
            }


            // 生成服务端代码;
            bool isGenerateCsFile = true;  //是否生成cs文件

            if (string.IsNullOrEmpty(buildPara.CsFilePath))
            {
                isGenerateCsFile = false;
            }

            if (type == "app")
            {
                if (!ServerGen.Generator.GenerateApp(billInfo, buildPara.AssemblyPath, isGenerateCsFile, buildPara.CsFilePath, ucode))
                {
                    throw new Exception("服务端代码生成失败!");
                }
            }
            else
            {
                if (!ServerGen.Generator.Generate(billInfo, buildPara.AssemblyPath, isGenerateCsFile, buildPara.CsFilePath, ucode))
                {
                    throw new Exception("服务端代码生成失败!");
                }
            }


            if (!ServerGen.Generator.Generate(billInfo, buildPara.AssemblyPath, isGenerateCsFile, buildPara.CsFilePath, ucode))
            {
                throw new Exception("服务端代码生成失败!");
            }



            //begin 增加一个菜单
            string configPath   = HttpContext.Current.Request.PhysicalApplicationPath + "\\NG3Config\\MainNavigation.xml";
            string menuName     = ucode + (type == "app" ? "aform" : "pform") + buildPara.Id + winType;
            string menuText     = menuName + " - " + billInfo.Description;
            string menuTabTitle = billInfo.Description;

            DataSet ds = new DataSet();

            ds.ReadXml(configPath);

            DataRow[] drs = ds.Tables["TreeNode"].Select("Text='" + menuText + "'");

            if (drs == null || drs.Length < 1)
            {
                DataRow dr = ds.Tables["TreeNode"].NewRow();
                dr["NavigateUrl"]      = "/Custom/SUP/" + menuName;
                dr["Text"]             = menuText;
                dr["TabTitle"]         = menuTabTitle;
                dr["UserType"]         = "system,developer,translator";
                dr["TreeNodeGroup_Id"] = "0";
                ds.Tables["TreeNode"].Rows.Add(dr);
                ds.WriteXml(configPath);
            }
            //end 增加一个菜单


            //// 返回URL链接;
            //var ip = string.IsNullOrEmpty(buildPara.Port) ? buildPara.Host : string.Format("{0}:{1}", buildPara.Host, buildPara.Port);
            //return string.Format(@"http://{0}/SUP/pform{1}List", ip, buildPara.Id);

            //返回生成业务点;
            return(string.Format(@"自定义表单pform{0}生成成功", buildPara.Id));
        }
Example #24
0
 protected void AssertParamChEqul(BuildParameter param, int change, int value, bool allfollowing = true)
 {
     AssertParamChange(param, change);
     AssertParamEquals(param, value);
 }
Example #25
0
        public static void BuildWebGL()
        {
            var param = new BuildParameter(outputDirectory + @"\webgl\ " + PlayerSettings.productName + "Dev ", BuildTarget.WebGL);

            BuildByParameter(param);
        }
Example #26
0
 protected void AssertParamEquals(BuildParameter param, int value, int?level = null) => Assert.AreEqual(dal.Get(level ?? OnLevel, param).Amount, value);
        public static GameBuild Generate(FakeDAL dal)
        {
            // or something
            //var g = dal.Get<GameBuild>().FirstOrDefault(x => x.Name == "Underrail");
            //if (g != null) return g; // already there

            // Gam
            using (var builder = new DefinitionBuilder(dal, "Underrail", 25))
            {
                using (var attributes = builder.ParameterType("Attributes", 3))
                {
                    t_attributes = attributes.ptype;

                    attributes.LevelPoints(1, 19, 10);
                    for (int i = 2; i <= builder.game.MaxLevel; i++)
                    {
                        attributes.LevelPoints(i, i % 4 == 0 ? 1 : 0, 20);
                    }

                    a_str = attributes.Parameter("Strength").Commit();
                    a_dex = attributes.Parameter("Dexterity").Commit();
                    a_agi = attributes.Parameter("Agility").Commit();
                    a_con = attributes.Parameter("Constitution").Commit();
                    a_per = attributes.Parameter("Perception").Commit();
                    a_wil = attributes.Parameter("Will").Commit();
                    a_int = attributes.Parameter("Intelligence").Commit();
                }
                using (var skills = builder.ParameterType("Skills"))
                {
                    t_skills = skills.ptype;

                    skills.LevelPoints(1, 120, 15);
                    for (int i = 2; i <= builder.game.MaxLevel; i++)
                    {
                        skills.LevelPoints(i, 40, 15 + (i - 1) * 5);
                    }

                    skills.SCategory("Offense");
                    s_guns      = skills.Parameter("Guns").Commit();
                    s_throwing  = skills.Parameter("Throwing").Commit();
                    s_crossbows = skills.Parameter("Crossbows").Commit();
                    s_melee     = skills.Parameter("Melee").Commit();

                    skills.SCategory("Defense");
                    s_dodge   = skills.Parameter("Dodge").Commit();
                    s_evasion = skills.Parameter("Evasion").Commit();

                    skills.SCategory("Subterfuge");
                    s_stealth       = skills.Parameter("Stealth").Commit();
                    s_hacking       = skills.Parameter("Hacking").Commit();
                    s_lockpicking   = skills.Parameter("Lockpicking").Commit();
                    s_pickpocketing = skills.Parameter("Pickpocketing").Commit();
                    s_traps         = skills.Parameter("Traps").Commit();

                    skills.SCategory("Technology");
                    s_mechanics   = skills.Parameter("Mechanics").Commit();
                    s_electronics = skills.Parameter("Electronics").Commit();
                    s_chemistry   = skills.Parameter("Chemistry").Commit();
                    s_biology     = skills.Parameter("Biology").Commit();
                    s_tailoring   = skills.Parameter("Tailoring").Commit();

                    skills.SCategory("Psi");
                    s_thoughtcontrol = skills.Parameter("Thought Control").Commit();
                    s_psychokinesis  = skills.Parameter("Psychokinesis").Commit();
                    s_metathermics   = skills.Parameter("Metathermics").Commit();
                    //                    s_temporalmanipulation = skills.Parameter("TemporalManipulation").Commit();

                    skills.SCategory("Social");
                    s_persuasion   = skills.Parameter("Persuasion").Commit();
                    s_intimidation = skills.Parameter("Intimidation").Commit();
                    s_mercantile   = skills.Parameter("Mercantile").Commit();
                }

                using (var psi = builder.ParameterType("Psi Abilities"))
                {
                    t_psi_abilities = psi.ptype;
                    for (int i = 1; i <= builder.game.MaxLevel; i++)
                    {
                        psi.LevelPoints(i, 0, 1);
                    }

                    psi.SCategory("Metathermics");
                    p_cryokinesis                   = psi.Parameter("Cryokinesis", 0).Require(0, s_metathermics).Require(1, f_psi_empathy).ImplyLevelReq().Commit();
                    p_pyrokinesis                   = psi.Parameter("Pyrokinesis", 0).Require(25, s_metathermics).Require(1, f_psi_empathy).ImplyLevelReq().Commit();
                    p_cryostasis                    = psi.Parameter("Cryostasis", 0).Require(35, s_metathermics).Require(1, f_psi_empathy).ImplyLevelReq().Commit();
                    p_pyrokinetic_stream            = psi.Parameter("Pyrokinetic Stream", 0).Require(35, s_metathermics).Require(1, f_psi_empathy).ImplyLevelReq().Commit();
                    p_cryokinetic_orb               = psi.Parameter("Cryokinetic Orb", 0).Require(40, s_metathermics).Require(1, f_psi_empathy).ImplyLevelReq().Commit();
                    p_thermodynamic_destabilisation = psi.Parameter("Thermodynamic Destabilisation", 0).Require(50, s_metathermics).Require(1, f_psi_empathy).ImplyLevelReq().Commit();
                    p_cryo_shield                   = psi.Parameter("Cryo Sheild", 0).Require(55, s_metathermics).Require(1, f_psi_empathy).ImplyLevelReq().Commit();
                    p_exothermic_aura               = psi.Parameter("Exothermic Aura", 0).Require(70, s_metathermics).Require(1, f_psi_empathy).ImplyLevelReq().Commit();

                    psi.SCategory("Psychokinesis");
                    p_telekinetic_punch      = psi.Parameter("Telekinetic Punch", 0).Require(0, s_psychokinesis).Require(1, f_psi_empathy).ImplyLevelReq().Commit();
                    p_force_field            = psi.Parameter("Force Field", 0).Require(25, s_psychokinesis).Require(1, f_psi_empathy).ImplyLevelReq().Commit();
                    p_electrokinesis         = psi.Parameter("Electrokinesis", 0).Require(30, s_psychokinesis).Require(1, f_psi_empathy).ImplyLevelReq().Commit();
                    p_force_emission         = psi.Parameter("Force Emission", 0).Require(35, s_psychokinesis).Require(1, f_psi_empathy).ImplyLevelReq().Commit();
                    p_disruptive_field       = psi.Parameter("Disruptive Field", 0).Require(40, s_psychokinesis).Require(1, f_psi_empathy).ImplyLevelReq().Commit();
                    p_electrokinetic_imprint = psi.Parameter("Electrokinetic Imprint", 0).Require(45, s_psychokinesis).Require(1, f_psi_empathy).ImplyLevelReq().Commit();
                    p_telekinetic_proxy      = psi.Parameter("Telekinetic Proxy", 0).Require(55, s_psychokinesis).Require(1, f_psi_empathy).ImplyLevelReq().Commit();
                    p_implosion = psi.Parameter("Implosion", 0).Require(70, s_psychokinesis).Require(1, f_psi_empathy).ImplyLevelReq().Commit();

                    psi.SCategory("Thought Control");
                    p_neural_overload            = psi.Parameter("Neural Overload", 0).Require(0, s_thoughtcontrol).Require(1, f_psi_empathy).ImplyLevelReq().Commit();
                    p_frighten                   = psi.Parameter("Frighten", 0).Require(30, s_thoughtcontrol).Require(1, f_psi_empathy).ImplyLevelReq().Commit();
                    p_billocation                = psi.Parameter("Billocation", 0).Require(35, s_thoughtcontrol).Require(1, f_psi_empathy).ImplyLevelReq().Commit();
                    p_mental_breakdown           = psi.Parameter("Mental Breakdown", 0).Require(45, s_thoughtcontrol).Require(1, f_psi_empathy).ImplyLevelReq().Commit();
                    p_psi_cognitive_interruption = psi.Parameter("Psi-cognitive Interruption", 0).Require(55, s_thoughtcontrol).Require(1, f_psi_empathy).ImplyLevelReq().Commit();
                    p_enrage = psi.Parameter("Enrage", 0).Require(60, s_thoughtcontrol).Require(1, f_psi_empathy).ImplyLevelReq().Commit();
                    p_psuedo_spatial_projection = psi.Parameter("Psuedo-spatial Projection", 0).Require(65, s_thoughtcontrol).Require(1, f_psi_empathy).ImplyLevelReq().Commit();
                    p_neurovisual_disruption    = psi.Parameter("Neurovisual Disruption", 0).Require(70, s_thoughtcontrol).Require(1, f_psi_empathy).ImplyLevelReq().Commit();
                }

                using (var feats = builder.ParameterType("Feats"))
                {
                    t_feats = feats.ptype;

                    feats.LevelPoints(1, 2, 1);
                    for (int i = 2; i <= builder.game.MaxLevel; i++)
                    {
                        feats.LevelPoints(i, i % 2 == 0 ? 1 : 0, 1);
                    }

                    f_expertise          = feats.Parameter("Expertise").ImplyLevelReq().Commit();
                    f_nimble             = feats.Parameter("Nimble").ImplyLevelReq().Commit();
                    f_ninja_looter       = feats.Parameter("Ninja Looter").ImplyLevelReq().Commit();
                    f_opportunist        = feats.Parameter("Opportunist").ImplyLevelReq().Commit();
                    f_pack_rathound      = feats.Parameter("Pack Rathound").ImplyLevelReq().Commit();
                    f_paranoia           = feats.Parameter("Paranoia").ImplyLevelReq().Commit();
                    f_quick_pockets      = feats.Parameter("Quick Pockets").ImplyLevelReq().Commit();
                    f_recklessness       = feats.Parameter("Recklessness").ImplyLevelReq().Commit();
                    f_snooping           = feats.Parameter("Snooping").ImplyLevelReq().Commit();
                    f_aimed_shot         = feats.Parameter("Aimed Shot").Require(10, s_guns).OrRequire(10, s_crossbows).Require(06, a_per).ImplyLevelReq().Commit();
                    f_armor_sloping      = feats.Parameter("Armor Sloping").Require(06, a_int).Require(15, s_mechanics).ImplyLevelReq().Commit();
                    f_burglar            = feats.Parameter("Burglar").Require(7, a_dex).Require(15, s_lockpicking).OrRequire(15, s_hacking).ImplyLevelReq().Commit();
                    f_clothier           = feats.Parameter("Clothier").Require(7, a_int).Require(15, s_tailoring).ImplyLevelReq().Commit();
                    f_conditioning       = feats.Parameter("Conditioning").Require(5, a_con).ImplyLevelReq().Commit();
                    f_doctor             = feats.Parameter("Doctor").Require(15, s_biology).ImplyLevelReq().Commit();
                    f_fast_metabolism    = feats.Parameter("Fast Metabolism").Require(6, a_con).ImplyLevelReq().Commit();
                    f_gun_nut            = feats.Parameter("Gun Nut").Require(7, a_int).Require(15, s_mechanics).ImplyLevelReq().Commit();
                    f_gunslinger         = feats.Parameter("Gunslinger").Require(7, a_dex).Require(15, s_guns).ImplyLevelReq().Commit();
                    f_heavy_punch        = feats.Parameter("Heavy Punch").Require(5, a_str).Require(15, s_melee).ImplyLevelReq().Commit();
                    f_hit_and_run        = feats.Parameter("Hit and Run").Require(7, a_agi).ImplyLevelReq().Commit();
                    f_juggernaut         = feats.Parameter("Juggernaut").Require(7, a_str).Require(7, a_str).ImplyLevelReq().Commit();
                    f_marksman           = feats.Parameter("Marksman").Require(5, a_dex).Require(15, s_crossbows).ImplyLevelReq().Commit();
                    f_power_management   = feats.Parameter("Power Management").Require(7, a_int).Require(15, s_electronics).ImplyLevelReq().Commit();
                    f_skinner            = feats.Parameter("Skinner").Require(7, a_int).Require(15, s_tailoring).ImplyLevelReq().Commit();
                    f_sprint             = feats.Parameter("Sprint").Require(6, a_agi).ImplyLevelReq().Commit();
                    f_stoicism           = feats.Parameter("Stoicism").Require(7, a_wil).Require(7, a_con).ImplyLevelReq().Commit();
                    f_suppressive_fire   = feats.Parameter("Suppressive Fire").Require(6, a_per).Require(10, s_guns).ImplyLevelReq().Commit();
                    f_sure_step          = feats.Parameter("Sure Step").Require(5, a_agi).ImplyLevelReq().Commit();
                    f_survival_instincts = feats.Parameter("Survival Instincts").Require(9, a_con).ImplyLevelReq().Commit();
                    f_thick_skull        = feats.Parameter("Thick Skull").Require(10, a_con).ImplyLevelReq().Commit();

                    f_corporeal_projection = feats.Parameter("Corporeal Projection").Require(1, p_telekinetic_punch).OrRequire(1, p_force_emission).Require(7, a_str).ImplyLevelReq().Commit();
                    f_disassemble          = feats.Parameter("Disassemble").Require(7, a_int).Require(20, s_electronics).OrRequire(20, s_mechanics).ImplyLevelReq().Commit();
                    f_interloper           = feats.Parameter("Interloper").Require(7, a_agi).Require(20, s_stealth).ImplyLevelReq().Commit();
                    var b_psychosis   = feats.Parameter("Psychosis");
                    var b_tranquility = feats.Parameter("Tranquility");
                    f_psychosis   = b_psychosis.ImplyLevelReq().Commit();
                    f_tranquility = b_tranquility.ImplyLevelReq().Commit();
                    b_tranquility.Require(1, f_psi_empathy).Exclude(1, f_psychosis).ImplyLevelReq().Commit();
                    b_psychosis.Require(1, f_psi_empathy).Exclude(1, f_tranquility).ImplyLevelReq().Commit();
                    f_pummel = feats.Parameter("Pummel").Require(20, s_melee).ImplyLevelReq().Commit();
                    f_yell   = feats.Parameter("Yell").Require(20, s_intimidation).ImplyLevelReq().Commit();

                    f_cerebral_trauma     = feats.Parameter("Cerebral Trauma").Require(25, s_thoughtcontrol).Require(1, p_neural_overload).ImplyLevelReq().Commit();
                    f_dirty_kick          = feats.Parameter("Dirty Kick").Require(25, s_melee).ImplyLevelReq().Commit();
                    f_force_user          = feats.Parameter("Force User").Require(7, a_wil).Require(1, p_telekinetic_punch).OrRequire(1, p_force_field).Require(25, s_psychokinesis).ImplyLevelReq().Commit();
                    f_high_technicalities = feats.Parameter("High-Technicalities").Require(5, a_int).Require(25, s_guns).ImplyLevelReq().Commit();
                    f_kneecap_shot        = feats.Parameter("Kneecap Shot").Require(4, a_per).Require(25, s_guns).OrRequire(25, s_crossbows).ImplyLevelReq().Commit();
                    f_lightning_punches   = feats.Parameter("Lightning Punches").Require(8, a_dex).Require(25, s_melee).ImplyLevelReq().Commit();
                    f_point_shot          = feats.Parameter("Point Shot").Require(6, a_per).Require(6, a_dex).Require(25, s_guns).ImplyLevelReq().Commit();
                    f_quick_tinkering     = feats.Parameter("Quick Tinkering").Require(25, s_traps).Require(7, a_dex).ImplyLevelReq().Commit();
                    f_steadfast_aim       = feats.Parameter("Steadfast Aim").Require(5, a_str).Require(6, a_dex).Require(25, s_guns).ImplyLevelReq().Commit();
                    f_vile_weaponry       = feats.Parameter("Vile Weaponry").Require(10, s_biology).Require(25, s_crossbows).OrRequire(25, s_melee).OrRequire(25, s_traps).ImplyLevelReq().Commit();
                    f_weaponsmith         = feats.Parameter("Weaponsmith").Require(6, a_int).Require(25, s_mechanics).ImplyLevelReq().Commit();
                    f_bowyer            = feats.Parameter("Bowyer").Require(7, a_int).Require(30, s_mechanics).ImplyLevelReq().Commit();
                    f_concussive_shots  = feats.Parameter("Concussive Shots").Require(30, s_crossbows).ImplyLevelReq().Commit();
                    f_crippling_strike  = feats.Parameter("Crippling Strike").Require(30, s_melee).ImplyLevelReq().Commit();
                    f_escape_artist     = feats.Parameter("Escape Artist").Require(7, a_dex).Require(30, s_dodge).ImplyLevelReq().Commit();
                    f_grenadier         = feats.Parameter("Grenadier").Require(6, a_dex).Require(40, s_throwing).ImplyLevelReq().Commit();
                    f_meditation        = feats.Parameter("Meditation").Require(7, a_wil).Require(5, a_int).Require(1, f_tranquility).Require(50, s_thoughtcontrol).OrRequire(50, s_metathermics).OrRequire(50, s_psychokinesis).ImplyLevelReq().Commit();
                    f_mental_subversion = feats.Parameter("Mental Subversion").Require(6, a_wil).Require(30, s_thoughtcontrol).Require(1, p_neural_overload).OrRequire(1, p_frighten).ImplyLevelReq().Commit();
                    f_thermodynamicity  = feats.Parameter("Thermodynamicity").Require(1, p_cryokinesis).Require(1, p_pyrokinesis).Require(30, s_metathermics).ImplyLevelReq().Commit();
                    f_trap_expert       = feats.Parameter("Trap Expert").Require(6, a_dex).Require(30, s_traps).ImplyLevelReq().Commit();

                    f_ballistics          = feats.Parameter("Ballistics").Require(6, a_int).Require(35, s_tailoring).ImplyLevelReq().Commit();
                    f_cooked_shot         = feats.Parameter("Cooked Shot").Require(5, a_dex).Require(35, s_guns).Require(25, s_chemistry).ImplyLevelReq().Commit();
                    f_deflection          = feats.Parameter("Deflection").Require(6, a_dex).Require(35, s_melee).ImplyLevelReq().Commit();
                    f_hypertoxicity       = feats.Parameter("Hypertoxicity").Require(35, s_biology).ImplyLevelReq().Commit();
                    f_last_stand          = feats.Parameter("Last Stand").Require(5, t_level).Require(9, a_con).ImplyLevelReq().Commit();
                    f_neurology           = feats.Parameter("Neurology").Require(7, a_int).Require(35, s_biology).ImplyLevelReq().Commit();
                    f_practical_physicist = feats.Parameter("Practical Physicist").Require(7, a_int).Require(35, s_electronics).ImplyLevelReq().Commit();
                    f_pyromaniac          = feats.Parameter("Pyromaniac").Require(1, p_pyrokinesis).Require(35, s_metathermics).ImplyLevelReq().Commit();
                    f_salesman            = feats.Parameter("Salesman").Require(35, s_mercantile).ImplyLevelReq().Commit();
                    f_snipe                    = feats.Parameter("Snipe").Require(10, a_per).Require(30, s_stealth).Require(35, s_guns).OrRequire(35, s_crossbows).Require(1, f_aimed_shot).ImplyLevelReq().Commit();
                    f_ambush                   = feats.Parameter("Ambush").Require(6, a_per).Require(40, s_stealth).ImplyLevelReq().Commit();
                    f_cheap_shots              = feats.Parameter("Cheap Shots").Require(6, a_dex).Require(5, a_int).Require(40, s_melee).ImplyLevelReq().Commit();
                    f_expose_weakness          = feats.Parameter("Expose Weakness").Require(5, a_int).Require(40, s_melee).ImplyLevelReq().Commit();
                    f_fancy_footwork           = feats.Parameter("Fancy Footwork").Require(7, a_agi).Require(40, s_melee).Require(40, s_dodge).ImplyLevelReq().Commit();
                    f_full_auto                = feats.Parameter("Full Auto").Require(7, a_str).Require(40, s_guns).ImplyLevelReq().Commit();
                    f_hypothermia              = feats.Parameter("Hypothermia").Require(1, p_cryokinesis).OrRequire(1, p_cryostasis).Require(40, s_metathermics).ImplyLevelReq().Commit();
                    f_mad_chemist              = feats.Parameter("Mad Chemist").Require(7, a_int).Require(40, s_chemistry).ImplyLevelReq().Commit();
                    f_pinning                  = feats.Parameter("Pinning").Require(7, a_dex).Require(40, s_throwing).ImplyLevelReq().Commit();
                    f_premeditation            = feats.Parameter("Premeditation").Require(6, a_int).Require(1, f_psi_empathy).Require(40, s_thoughtcontrol).OrRequire(40, s_metathermics).OrRequire(40, s_psychokinesis).ImplyLevelReq().Commit();
                    f_psychostatic_electricity = feats.Parameter("Psychostatic Electricity").Require(1, p_electrokinesis).OrRequire(1, p_electrokinetic_imprint).Require(40, s_psychokinesis).ImplyLevelReq().Commit();
                    f_uncanny_dodge            = feats.Parameter("Uncanny Dodge").Require(8, a_agi).Require(40, s_dodge).ImplyLevelReq().Commit();
                    f_wrestling                = feats.Parameter("Wrestling").Require(40, s_melee).Require(7, a_str).ImplyLevelReq().Commit();

                    f_bone_breaker        = feats.Parameter("Bone Breaker").Require(7, a_str).Require(45, s_melee).ImplyLevelReq().Commit();
                    f_cryogenic_induction = feats.Parameter("Cryogenic Induction").Require(1, p_cryostasis).Require(50, s_metathermics).ImplyLevelReq().Commit();
                    f_evasive_maneuvers   = feats.Parameter("Evasive Maneuvers").Require(6, a_agi).Require(50, s_evasion).ImplyLevelReq().Commit();
                    f_fatal_throw         = feats.Parameter("Fatal Throw").Require(8, a_dex).Require(50, s_throwing).ImplyLevelReq().Commit();
                    f_guard           = feats.Parameter("Guard").Require(8, t_level).Require(7, a_str).Require(50, s_melee).ImplyLevelReq().Commit();
                    f_psionic_mania   = feats.Parameter("Psionic Mania").Require(8, a_wil).Require(50, s_thoughtcontrol).OrRequire(50, s_metathermics).OrRequire(50, s_psychokinesis).ImplyLevelReq().Commit();
                    f_rapid_fire      = feats.Parameter("Rapid Fire").Require(50, s_guns).ImplyLevelReq().Commit();
                    f_ripper          = feats.Parameter("Ripper").Require(10, a_dex).Require(5, a_wil).Require(50, s_melee).OrRequire(50, s_throwing).ImplyLevelReq().Commit();
                    f_spec_ops        = feats.Parameter("Spec Ops").Require(6, a_agi).Require(50, s_guns).ImplyLevelReq().Commit();
                    f_special_tactics = feats.Parameter("Special Tactics").Require(6, a_int).Require(50, s_crossbows).ImplyLevelReq().Commit();
                    f_taste_for_blood = feats.Parameter("Taste for Blood").Require(50, s_melee).ImplyLevelReq().Commit();
                    f_three_pointer   = feats.Parameter("Three Pointer").Require(7, a_dex).Require(50, s_throwing).ImplyLevelReq().Commit();

                    f_cut_throat             = feats.Parameter("Cut Throat").Require(10, a_dex).Require(55, s_melee).Require(45, s_stealth).ImplyLevelReq().Commit();
                    f_telekinetic_undulation = feats.Parameter("Telekinetic Undulation").Require(1, p_telekinetic_proxy).Require(5, a_wil).ImplyLevelReq().Commit();
                    f_blitz             = feats.Parameter("Blitz").Require(10, t_level).Require(10, a_agi).ImplyLevelReq().Commit();
                    f_concentrated_fire = feats.Parameter("Concentrated Fire").Require(8, a_per).Require(60, s_guns).ImplyLevelReq().Commit();
                    f_sharpshooter      = feats.Parameter("Sharpshooter").Require(60, s_guns).OrRequire(60, s_crossbows).Require(1, f_aimed_shot).Require(10, a_per).ImplyLevelReq().Commit();

                    f_combo = feats.Parameter("Combo").Require(8, a_dex).Require(65, s_melee).ImplyLevelReq().Commit();
                    f_neural_overclocking = feats.Parameter("Neural Overclocking").Require(10, a_wil).Require(1, f_psi_empathy).Require(65, s_metathermics).OrRequire(65, s_thoughtcontrol).OrRequire(65, s_psychokinesis).ImplyLevelReq().Commit();
                    f_execute             = feats.Parameter("Execute").Require(70, s_guns).Require(1, f_opportunist).ImplyLevelReq().Commit();

                    f_critical_power  = feats.Parameter("Critical Power").Require(75, s_melee).OrRequire(75, s_guns).OrRequire(75, s_crossbows).ImplyLevelReq().Commit();
                    f_deadly_snares   = feats.Parameter("Deadly Snares").Require(10, a_per).Require(75, s_crossbows).Require(50, s_traps).ImplyLevelReq().Commit();
                    f_elemental_bolts = feats.Parameter("Elemental Bolts").Require(75, s_crossbows).ImplyLevelReq().Commit();

                    f_locus_of_control = feats.Parameter("Locus of Control").Require(10, a_wil).Require(75, s_thoughtcontrol).Require(1, f_psi_empathy).ImplyLevelReq().Commit();
                    f_super_slam       = feats.Parameter("Super Slam").Require(10, a_str).Require(75, s_melee).ImplyLevelReq().Commit();
                    f_commando         = feats.Parameter("Commando").Require(80, s_guns).ImplyLevelReq().Commit();
                    f_eviscerate       = feats.Parameter("Eviscerate").Require(80, s_melee).Require(8, a_dex).ImplyLevelReq().Commit();
                    f_split_spare      = feats.Parameter("Split Spare").Require(10, a_dex).Require(80, s_throwing).ImplyLevelReq().Commit();

                    f_heavyweight = feats.Parameter("Heavyweight").Require(10, a_str).Require(100, s_melee).ImplyLevelReq().Commit();

                    f_psi_empathy       = feats.Parameter("Psi Empathy", 0).ImplyLevelReq().Commit();
                    f_fisherman         = feats.Parameter("Fisherman", 0).ImplyLevelReq().Commit();
                    f_hunter            = feats.Parameter("Hunter", 0).ImplyLevelReq().Commit();
                    f_echoing_soliloquy = feats.Parameter("Echoing Soliloquy", 0).ImplyLevelReq().Commit();
                }

                return(builder.game);
            }
        }