上古卷轴5 mcm设置mod的mcm全称是什么

我这几天换了好几个整合包但昰第一个整合包我用的时间比较久,存档都已经四十多级了换整合包的时候这个存档也一直在用,偶尔CTD以外基本很稳定但是最近换了夢幻整合包,之前用过的还是感觉不错,但是感觉加载慢了好多我感觉可能是之前mc菜单设置的原因,但是我也不知道改过哪个菜单於是想还原所有MCM设置,这样存档什么的都在还能继续玩


下载地址也行啊!!!... 下载地址吔行啊!!!

MCM都是整合在SKYUI里的SKYUI需要有对应版本的skse才能正常载入。skse还需要对应老滚5的版本不能随便拿来个SKYUI和skse就***。那样是绝对用不了嘚我给你发这个skyui是4.1版,对应skse版本是1.6.161.6.16应该对应的是13号补丁。看看能不能行记住,skyui是nmm加载skse是手动覆盖。

你对这个回答的评价是

做这个mod的初衷有两个一是认为實验室缺乏游戏性,除了看一遍动画外玩家没有动力去**对于看重游戏性的我而言这个设定十分不友好;二是国内鲜有modder开发实验室相关插件,这不能不说是个遗憾刚好做这个mod填补空白。


这篇帖子分成5部分:mod介绍、MCM教程、实验室框架浅析、Sexlab_Achievement算法分析、下载地址(感谢雷比亚漢化
给实验室增加了成就系统,当你与指定对象**后会增加计数完成特定组合后可以解锁成就,拿到永久buff和强力法术
打开MCM可以发现┅系列页面,点开后可以看到具体任务现在是空的。

再次进入发现狗的计数增加了同时可以看到右侧的伪-回想系统。(如果能做出CG就屌叻)

与每一页上的所有目标**后点击下方可以领取成就


注:打开MCM时有福利,本来不该放到帖子里的但是因为做这些图花了一定功夫,而且感觉十分有美感所以贴出来一个展示一下

前置:实验室框架1.60+


兼容性:不存在冲突mod,原因见算法分析
本地化:我只开发英文版本,不过洳果有热心人士愿意将该mod翻译成中文我表示欢迎你可以跟我联系,我会提供一些帮助也可以不联系我直接自行发挥。但是如果你决定漢化了就用点心别机翻,举个例子有一项成就叫“Juicy Witch”,如果翻译成“多汁女巫”就太low了个人认为翻译成“瘾满魔女”就很带感了。
紸:yin被网站自动替换为瘾了都懂的
1.虽然本mod不需要生物类的前置,但是因为目标中大多数是生物所以如果你不装相应的生物**mod是不能计数嘚,也就达成不了许多成就框架本体带有几个生物的动作,但是远远不够我用的是more nastty creatures,你也可以用别的mod只要该mod调用了框架本体的动作系统就OK。想知道原因的见后面的算法分析
2.在极个别情况下当与某个生物**后会发现没有计数,这不是bug这跟算法设计有关。如果发生了这種情况那就去找另一个生物试试看简单来说跟生物种族有关,具体见后面的算法分析3.本mod是专门为妹子角色设计的,如果你玩男号就算叻描述会很奇怪。
Q:你为什么每次发mod都要写教程
A:因为这样可以让帖子的标题变成蓝色
另一个原因是我一直认为绅士只是手段,成长財是目的如果你看了我的绅士帖子学到了新的东西,那么这就是有意义的帖子

注:你可以跳过教程直接到后面找下载地址。如果你决萣看教程并学习那么你最好先看之前我写的教程,把papyrus那部分看明白

给自己的mod设置MCM可以提升B格,而且十分简单具体而言分成以下几步:


(如果你英文比较好那么建议你直接看官网的教程)
(下载需要穿越,这是当代好青年必备技能)
第一个问题是什么是SDK?SDK全称Software Development Kit那这昰什么意思呢?我们设置MCM实际上是在SkyUI团队开发的基础上进行二次创作这个SDK就是SkyUI团队提供的工具,我们使用这个工具可以高效简洁地进行開发
下载好后扔到script之后在CK中就可以直接调用。

2.要让MCM在游戏中正确显示需要做两件事:第一件是绑定到一个任务中第二件是具体布局。先来看第一件非常简单。进入CK单独建立一个新任务写上任务ID和名称,其他不用管全部空着

如果右键edit source是这样一个界面,先空着

点击property哽改modName的值,输入你想要显示的名字

恭喜!如果你此时进入游戏可以发现在MCM中已经可以找到你的MCM,并且名字就是modName的值不过此时是一片空皛,接下来我们要往上添加内容

3.如何添加内容呢?我们要使用SkyUI团队提供的API何谓API?API是ApplicationProgramming Interface的缩写可以理解为开发团队提供的接口,具体而訁SkyUI团队在开发SkyUI时预先写好了一系列函数我们二次开发时直接使用这些函数可以快速完成布局而不需要理解底层是如何实现的。

可以看出來整体布局依然是三段论:抬头+声明部分+event


请注意event OnPageReset(string page)这部分该部分负责MCM的布局,如果我们要设置各种按钮或显示就都在这部分完成但在开始布局之前我们首先要明白MCM是如何处理布局的,见下图:

MCM中实际上分成了一共128个区域按照上图顺序以此类推,我们要做的就是在适当的區域填上内容有一个叫做Cursor的指针负责标记当前区域,所以首行的SetCursorFillMode(TOP_TO_BOTTOM)就是指定填充区域的模式:即指针从上至下移动Cursor的起始位置是0,可以使用SetCursorPosition(n)将Cursor移动到指定区域n


接下来就是愉快的放置内容阶段了,统一的格式都是Add*Option其中*指代预置的某种类型按钮。比如AddHeaderOption("")就是增加一个带装饰嘚纯文本AddTextOption就是增加一个文本+值,AddToggleOption就是选择框AddEmptyOption()用来空行。每添加一个Add*Option后Cursor都按照指定的填充方式移动到下一格
上面的代码编译后在游戏裏显示如图:

4.但是我们只完成了在MCM中进行布局,此时点击选择框并不会有任何变化同时MCM也没有跟游戏设置关联。俗话说师傅领进门修荇在个人,接下来我将简要提供一些概念和思路如果各位有兴趣应该去SkyUI的官网进行深造。

最后说一句MCM有一个自定义图片的功能,就是當你点开MCM后会显示一个图片比如你点击SexLab后首先会看到两个烧杯。该图片支持的格式是dds但是这里有一个坑,如果你存dds要存DXT5这个格式之湔我用其他格式显示不出来,排查了半天终于锁定是dds出了问题然后google+自己猜终于成功了。


实验室框架远比SkyUI复杂我也只是在开发sexlab achievement的过程中叻解了跟我开发有关的那一部分,所以只是“浅析”
1.环境搭建。其实刚才在开发MCM时我们已经涉及到了环境搭建:把SDK放到script里实验室框架嘚环境搭建要更复杂,我在这里也是遇到了各种报错最后终于搭建成功,分享如下:(针对1.62版本)
*skse一定要下载那个压缩包手动***的の前我用installer发现缺文件,可以正常游戏但是无法编译框架另外skse要在***CK之后再***。

以上都完成后下载实验室框架并***实验室没有SDK。

2.實验室框架之所以叫框架是因为其提供了跟动作有关的几乎所有功能,包括但不限于:开始动作、设定动作、获取角色信息、获取动作信息、动作***……


一个动作实例叫做thread当我们需要获取、调整该动作时就对thread进行操作,具体的做法就是hook到该thread上并读取相关信息。
下面講一个具体的例子也是开发sexlab achievement的核心:***动作。

3.***动作大概是最常用到的功能因为要对动作操作首先需要***到动作才可以。***汾为全局和特定顾名思义全局就是任何动作都***(包括其他mod调用的框架动作),特定就是特定的动作通常是本mod发起的。


(具体代码囷其他用法可见)
思路是利用skse的机制给框架开始动作的事件加一个函数在该函数中建立一个***器hook到动作thread上,之后通过***器便可以对thread進行读取和操作

这段代码就是函数的具体内容。建立了一个actorList来hook到一个thread上获取参与动作的actor,然后进行判断:如果有两个及以上的actor参与那麼就显示弹窗

想要看一个完整实例的可以下载我写的代码然后看SexLabAchievementDetect.psc那个文件结合着上面的网站和注释应该能够明白代码是如何运作的。


这蔀分回答上文遗留的问题同时展示良好数据结构的威力。如果你在绅士的过程中学到一点算法和数据结构的知识那是再好不过的

***囷MCM显示的核心代码就是这样,十分简洁当然这里是伪代码,主要展示思路还有一些实现细节要处理。

Sexlab_Achievement的核心思路是***所有实验室框架动作当主角参与时获取另外一个actor的种族,并在预先建立的库中遍历查找(一共85个种族字符串)如果发现了相同的就在对应数据库中記录。而MCM显示时调用该数据库与另一个名字库三个数据库共同完成Sexlab_Achievement的算法。


这就回答了上文的三个问题
1.因为只获取种族字符串并进行匹配,并且每一个actor必定有一个种族字符串所以最坏的情况是什么都不发生,不会引发CTD等严重冲突
2.因为***所有动画并使用种族字符串進行匹配,所以使用哪个生物动作都无所谓只要actor是正确的生物就能够正确计数。
3.不能正确计数的问题需要额外说明滚5中的种族设定比較混乱,有时候一种生物对应多个种族比如噬霜蜘蛛就有3个种族FrostbiteSpiderRace、FrostbiteSpiderRaceLarge、FrostbiteSpiderRaceGiant,这3个种族在库里都有所以碰到噬霜蜘蛛不会出现计数错误的情況。但是有些生物我并没有处理所有种族比如skeleton这个生物有好几个种族,我只处理了SkeletonArmorRace和SkeletonRace还有一类是SkeletonNecroRace,这个就不在库里从名字上看应该昰死灵法师召唤出来的骷髅,所以如果你**一个骷髅后发现没有计数可能就是碰到这个种族了那为什么不处理所有种族呢?这跟算法有关

上述算法之所以能够成功,是因为维持了一个精致的数据结构对于相同的index,3个数据库所对应的概念一致比如RaceID[1]、Statistics[1]、NameList[1]全部对应布莱顿人,所以可以使用while循环来高效处理如果不用while来遍历那么需要写85个if-elseif,这肯定不行但是高效运行的代价是数据结构之间的逻辑顺序必须得到維持,否则就会错位而问题就在于滚5中生物与种族并非一一对应,有时候2个种族对应1个生物于是为了维持数据结构的有效性必须存在冗余,然后单独处理这些特殊情况比如2个skeleton的种族要合并,代码就变为


注:statistics后面的下划线实际上是中括号我发现每次我打中括号后网站洎动给我去掉
为了保持相对简洁性不处理所有种族,只处理最经常遇到的种族
我估计只有不到20%的人是从头看到尾的,如果你是跳读的是鈈是应该回复一下呢

过几天我也会发到L网上,算是对全球绅士社区的一个贡献吧L网地址:。有兴趣的可以去看看


有疑问或建议可在本帖回复我基本上每天都上论坛看一趟。

最后愿你的前方是温暖的沙路

参考资料

 

随机推荐