elin吧 关注:19,939贴子:142,944

如何使用CWL制作一个自己的cnpc【未完成版】

只看楼主收藏回复

最近因为想在游戏里做一个自己的CNPC,就钻研了一下如何用CWL做mod,这里把经验发出来。


IP属地:北京1楼2025-01-30 22:11回复
    【观前提醒】
    本篇帖子与其说是攻略,倒不如说是我的经验,所以不会有任何高深内容,也不会有任何逻辑,其中会夹杂大量十分没用的我的胡思乱想,该攻略也不需要任何C#语言知识,也不需要你敲任何代码(因为我自己也没敲任何代码),是纯纯面向像我一样的小白的经验(包含了大量没用的废话),而且我自己还有大量现在也没弄懂的玩意。当然,得益于如此低的要求,我们最终做出来的CNPC也不会拥有“自定义技能”以及“自定义物品”这种需要敲代码的内容。如果有代码大佬知道如何制作欢迎发教程。
    我们通过这篇攻略能“做”出来的CNPC会包括以下内容:
    自定义角色种族;
    自定义角色战斗数据;
    自定义头像;
    自定义贴图;
    其他自定义语音和自定义角色对话之类的东西由于我没有需求所以我没钻研,你可以自行参考一下其他mod。


    IP属地:北京2楼2025-01-30 22:12
    回复
      2026-01-03 02:59:06
      广告
      不感兴趣
      开通SVIP免广告
      【前置条件】
      我们需要在Elin的创意工坊里订阅以下两个mod:
      “Custom whateverloader” 和 “CWL 示例: 小米塔 (CN/JP/EN/TW) +Voice”(直接搜miside也可以)
      前者就是我们制作CNPC也就是mod的基础工具,后者则是一个CWL的人物示例,为我们提供了方便修改的表格。



      IP属地:北京4楼2025-01-30 22:14
      回复
        【在本地创建属于你自己的mod】
        Elin的mod有两个来源,一是你订阅的mod,二是你本地的mod。
        现在我们需要在你的本地创建一个空mod。
        请根据以下路径找到Package文件夹:
        C:\ProgramFiles (x86)\Steam\steamapps\common\Elin\Package
        你应该会看到以下东西:

        不用管它们,在Package目录下创建一个空文件夹,命名为“Mod_mymod”或者任何其他名字“Mod_*”(*代表任何数量任意字符,最好只用英文)。
        随后,随便找一张jpg格式的图片(小一点的,小于1MB),塞进你创建的空文件夹里,命名为preview 如下:

        这个图片是预览图,如果你将来打算把你本地的mod上传到创意工坊,你mod在创意工坊里展示的大头照就是这张图,当然现在你可以随便找一张因为我们反正是本地自己用。
        之后,创建一个新文本文件,把后缀改成xml,命名为package,同样塞进你创建的空文件夹里。
        右键它,编辑,随后输入以下内容。
        <?xmlversion="1.0" encoding="utf-8"?>
        <Meta>
        <title>My Mod</title>
        <id>my.mod.modid</id>
        <author>你的名字</author>
        <loadPriority>100</loadPriority>
        <version>0.23.81</version>
        <tags>aaa</tags>
        <description>
        我是一个本地mod
        </description>
        <builtin>false</builtin>
        <visibility>Private</visibility>
        </Meta>
        基本上如果你只需要一个本地mod不需要上传,你可以直接复制我这里的内容。
        如果你需要两个以上的本地mod或者你需要上传你自己的mod到创意工坊,你需明白:
        “title”行描述了你的mod的名字,将来会显示在创意工坊里。
        “id”行是你mod的唯一id,它必须保证独特性,所以必须和你本地的mod以及所有创意工坊里的mod都不同。
        “author”行是作者名字
        “version”行填入游戏当前版本即可
        “visibility”行如果是Private那么只给你一个人用,如果要上传到创意工坊你得改为Public
        以上的攻略内容其实在Elin的modwiki里都有,我只是把它们用中文复述了一遍而已,更详细的内容或者怕我有遗漏可以直接看以下链接:https://elin-modding-resources.github.io/Elin.Docs/articles/2_Getting%20Started/basic_mod
        做完以上两个步骤后,我们就在本地创建了一个没有任何内容的空mod,接下来就是我们攻略的重头戏了。


        IP属地:北京5楼2025-01-30 22:17
        收起回复
          【复制一个成型mod到本地】
          因为已经有前人的经验,我们不需要自己去钻研表格的格式,只需要复制粘贴即可
          在文件管理器里根据以下路径找到文件夹:
          C:\Program Files (x86)\Steam\steamapps\workshop\content
          应该是这样的内容:

          点进去,你会看到这种东西:

          此时打开你的Steam创意工坊,点进我刚刚让你订阅的第二个mod,也就是米塔的mod。
          此时Steam页面的上方会有一个id(在下面这张图里就是3396774199)

          随后返回刚才的文件管理器,你应该能找到对应的文件夹

          点进去,把上面四个文件夹复制到你创建的空mod文件夹下。

          完成后,你的空mod文件夹下应该填充了这种内容:

          下面我们就直接对着这四个文件夹来进行修改即可。


          IP属地:北京6楼2025-01-30 22:20
          回复
            【Texture】
            这里需要存放一张游戏里你的cnpc的像素小人图,它的大小最好是宽128像素x 高128像素,后缀是png,必须是透明背景。
            该图片的名称你可以随便命名,但是它很重要,你必须记住这个命名,我们假设它为A,图片的名称就是“A.png”
            另外,仔细观察一下tinymita的小人图,你会发现人物的画像并没有占满整个图片,而是高度只占一半多,宽度更是几乎只有五分之一,也就是说需要你的图片的整个大小是128x128,但其中的小人的大小可能只是80x100等等。
            【Portrait】
            这里需要存放一张游戏里和你的cnpc对话时的立绘图,它的大小最好是宽240像素x高320像素,后缀为png,最好是黑背景。
            该图片的命名必须是“UN_A.png”,A是你刚才的命名。
            另外,最好不要用全身像,而是胸像或者半身像。
            【Sound】
            我没有太过仔细地钻研如何制作附带语音,所以我不能给出我自己的经验,我觉得你可以自己摸索一下XD。
            如果你对语音没有需求,你可以像我一样直接把Sound文件夹删除即可。
            【LangMod】
            这是最重要的文件夹,它里面存放了决定你cnpc在游戏里的数据里的表格。点进去你应该会看到三个文件夹,它们分别是供不同语言的用户使用的。如果你想把mod上传到创意工坊里且想支持不同语言,你就需要像这个mod一样创建对应语言的文件夹。当然我们这里只是做给自己玩的,所以你把EN文件夹和ZHTW文件夹统统删除即可。
            CN的文件树应该如下:
            CN/
            ├──MiSide-V1.3B.xlsx
            ├──Dialog/
            │ ├── Drama/
            │ ├── dialog.xlsx
            │ ├── tinymita.xlsx
            如果你对对话剧情(是指你按中键对角色发起对话后出现的对话内容)没有啥要求,你可以直接删除Dialog文件夹以及里面的所有东西,只保留MiSide-V1.3B.xlsx即可。
            打开MiSide-V1.3B.xlsx,你会发现它有三个表,Chara表负责CNPC的角色数据,CharaText表负责CNPC的聊天气泡内容,Race表负责CNPC的角色种族数据。


            IP属地:北京7楼2025-01-30 22:21
            收起回复
              【Chara表】
              这个表里有非常多列,我们慢慢填,所有需要你填的内容都在第四行而非第三行。
              Id列,这里需要填写你的角色的id,还记得刚才立绘和小人图的A吗?填进对应的位置。
              _id列,这里我其实不太懂数字有啥要求,目前来讲应该不小于1000都没啥问题,你随便填一个不冲突的数字就行。
              Name_JP列,角色的日文名
              Name列,角色的中文名,会显示在你的游戏里(如果你是中文玩家)
              Aka_JP列,角色的日文别名(称号)
              Aka列,角色的中文别名,
              IdActor列~defMat列,都不需要填写(因为我也没搞懂这些列是干啥的)
              LV列,角色生成时的初始等级,把8改成你想要的数字即可。
              Chance列,我目前也没搞懂这是啥)问了一圈也没人知道,保持不动即可。(猜测可能是生成概率?)
              Quality列,角色的独特等级,目前来讲,角色的独特等级只有4和没有两种情况(新增的巴哈姆特boss独特等级为3),角色独特等级为4时,角色就相当于主线人物一样了,这里我们肯定是希望把角色拉进队伍的,所以不填就行。
              Hostility列,角色对你的态度,填进Friend即可。
              Biome列,这里应该是决定角色可能会在哪里出现,不填就行,我们肯定不希望自己的角色到处乱入。
              Tag列,这里是供CWL使用的一列,可以添加任意数量的标签。请记住,标签之间用 ,(英文逗号)分隔,中间不要有空格。在这里填入neutral, addAdvZone_Asylum,后,角色会在孤儿院生成,如果想让cnpc在其他地方生成,就把Asylum换成对应的名字即可。
              Trait列,如果你在这里填AdventurerBacker或者Adventurer,那么角色就会被登记为冒险者并出现在冒险者排行里,这里我认为你可以填进Adventurer,这样方便你收服你的cnpc。当然你可以不填,但是我这里出现的问题是如果我保留Trait列为空,那么CWL将无法加载该mod,所以我做给自己玩的所有cnpc的mod都填了Adventurer,如果你不填Adventurer也能加载成功,你就可以不填。
              Tag列和Trait列的更多细节,你可以参考以下链接:
              https://elin-modding-resources.github.io/Elin.Docs/articles/100_Mod%20Documentation/Custom%20Whatever%20Loader/CN/Character%20%E8%A7%92%E8%89%B2/0_character
              Tag列和Trait列很重要,所以务必将以上链接仔细阅读一番。
              Race列,种族列,如果想用原创种族,那么在第四行填入你原创的种族id,如果想用已有种族,那么填入游戏原种族id即可。种族id可以参考以下链接:https://docs.google.com/spreadsheets/d/1CJqsXFF2FLlpPz710oCpNFYF4W_5yoVn/edit?gid=1013599051#gid=1013599051
              Job列,这里决定了cnpc的职业,不是它作为居民的工作或者兴趣也不是战斗风格,是它的职业,同样可以参考上面链接里的内容,里面有职业的英文名字。
              Tactics列,这里决定了cnpc的战斗风格,同样参考以上链接里的内容。
              aiIdle列和aiParam列,这两列我真没弄懂是啥东西,你可以参考一下SourceChara表里的内容,如果你希望你的cnpc是个坦,你就参考黄金骑士的这两列的内容,如果是个法师,你就参考流放者的这两列的内容,其余同理。
              ActCombat列,这里决定了cnpc角色会用的主动技能(不是feat开头的专长)以及对应的释放权重。
              观察这列原来的内容,每个逗号分隔的字符串里,斜杠前面是对应技能的id,斜杠后面是释放权重,但这样解释其实很难绷,因为SourceChara表里的actCombat列并不是所有技能都有权重,有的只有一个技能也有权重,有的甚至没有斜杠和权重。目前我是认为它是权重,释放的概率就是权重在总权重里的占比。
              技能的名称你可以在SourceGame表里的Element里查看:
              https://docs.google.com/spreadsheets/d/16-LkHtVqjuN9U0rripjBn-nYwyqqSGg_/edit?gid=735741154#gid=735741154
              注意,这里最好不要填入一些奇怪的东西,比如什么FDV/100或者什么ActThrow/20之类的东西,很容易导致加载出来你的存档坏掉。你最好参考已有的角色的actcombat列。
              MainElement列,这里我目前看不出有什么作用,应该是决定了角色物理攻击时造成的伤害是什么属性的,不填就是物理属性,填了就是对应属性,比如漂浮之眼这列填的就是Nerve/100,弱酸性史莱姆这里就是Acid
              Elements列,这里可以填一些你想给角色加的属性或者专长,SPD/20则会在角色的速度上+20,resMagic/20则会给予角色20魔法抗性,featRapidMagic则会给予角色快速施法的特性,同样可以参照已有的人物表。
              Equip列~tone列,不用管(或者说我也没搞懂)。
              actIdle列,这里决定了角色闲置的时候会干啥,buffMage则角色没事会给自己上buff,readBook则没事会读书等等。
              LightData和idExtra列,都不用管。
              Bio列,这里我说实话也没太看懂,我估计是决定性别和口癖的,m就是男f就是女。
              Faith列,决定了角色的信仰,不填则角色无信仰。
              Works列,角色作为居民的工作
              Hobbies列,角色作为居民的兴趣。
              IdText列,如果填入,那么角色平时的聊天气泡会使用charaText表里对应的内容。
              moveAnime列~detail列,完全不管。
              【CharaText表】
              Id列,必须和刚才你Chara表里的IdText列的内容相同。
              之后应该都很好懂了,calm是平时闲置会说的气泡,fov是看见你时会说的气泡,kill是消灭敌人时会说的气泡,dead是死亡时会说的气泡,aggro是被激怒时说的气泡。
              注意,游戏没法识别一些特殊字符,比如~,会统一表现为星号*。
              【Race表】
              如果你想用原创种族就填,否则直接删除这个表即可。
              Id列,还记得Chara表里的race列吗,把它的内容填进这个id列。
              Name_JP列,种族日文名
              Name列,种族中文名,
              Playable列,不动
              Tag列,不动
              Life列,生命力,决定了种族的初始生命力,
              Mana,法力,决定了种族的初始法力,
              Vigor,不动
              DV,闪避
              PV,防御,
              PDR,物理伤害减免
              EDR,元素伤害减免
              EP,我猜测可能是专长点数,保持不动即可。
              STR,力量
              END,体质
              DEX,灵巧
              PER,感知
              LER,学习
              WIL,意志
              CHA,魅力,
              SPD,速度,
              Ratio和int这俩我不太懂,但是在elonaplus里int是根据角色初始属性算出来的东西,我估计这里可能也和将来的系统有关。
              Martial,估计是种族肉的等级?
              Pen,不管
              Elements,和Chara表里的elements一样,抗性什么的都可以在这里填
              Skill,种族自带技能,以逗号为分割,数值和名字之间用空格。
              Figure,肢体,这里已经有了人型肢体,如果想修改最好不要自行打字,而是复制粘贴。
              GeneCap列~sex列,我都看不懂)保持原样即可。我猜测可能是决定角色的掉落尸体的品质等等。
              Age列,第四列的18,300的意思是种族的初始年龄在18到300之间浮动。
              Height列,身高
              Breeder列,作为牲畜时的繁殖力
              Food列,不太懂,
              Fur列,作为牲畜时剪毛会掉落何种纤维
              Detail_JP和Detail列想必就不用多说了。


              IP属地:北京8楼2025-01-30 22:22
              收起回复
                Chara表里的aiParam列,目前在群里看到有一位大佬说是这样的:
                这列最多填三个数字,第一个数字是默认和敌人保持的距离,如果不填,则默认取决于角色的战术风格(近战1中锋2远程3),第二个数字是当距离不对时向目标移动的概率,如果不填,则默认取决于角色战术风格(近战80中锋50远程20),第三个数字是再次移动的几率,如果不填,默认100


                IP属地:北京9楼2025-01-30 22:27
                收起回复
                  2026-01-03 02:53:06
                  广告
                  不感兴趣
                  开通SVIP免广告
                  绝世好贴 就缺少这种带入感


                  IP属地:北京来自Android客户端11楼2025-01-30 22:38
                  回复
                    好!


                    IP属地:美国来自Android客户端12楼2025-01-31 10:39
                    回复
                      想请问一下,现在可以(可能)做到更复杂的talk了吗?我其实挺期待换了引擎后能加入更丰富的条件和互动文本。(没错就是おさわり和era那种)


                      IP属地:湖南13楼2025-01-31 12:44
                      收起回复
                        【关于修改已生成的CNPC】
                        目前,我没办法做到实时对已经生成的CNPC进行修改,我能完成的只有“通过删除已经生成的CNPC然后再重新生成CNPC”来完成修改CNPC的过程。
                        下面介绍一下这个过程。
                        假设:你已经在游戏里生成了我们mod的CNPC,现在这个CNPC已经出现了,但是你不喜欢它的某个talk或者少了某个肢体,你想要修改,那么怎么办呢?
                        第一步,在游戏里打开mod页面,停用你的这个mod,随后保存退出。
                        第二步,启动游戏,进入你的存档,此时会提示你mod缺失,不必担心,直接继续游玩。随后你会发现你的CNPC变成了乞丐,不必担心,是正常现象,随后保存退出。
                        第三步,打开你的mod的本地的表格,进行你的修改,保存修改后的表格。
                        第四步,启动游戏,进入mod页面,重新启用你的mod,随后进入存档,此时不会有任何变化,继续保存退出。
                        第五步,启动游戏,进入存档,你会发现你的cnpc重新出现了,并且你的修改也实时地应用到了它身上


                        IP属地:北京14楼2025-01-31 15:47
                        收起回复
                          神一品攻略


                          IP属地:广东来自iPhone客户端15楼2025-01-31 17:31
                          回复
                            非常有帮助,谢谢楼主


                            IP属地:天津来自iPhone客户端16楼2025-02-01 00:59
                            回复
                              2026-01-03 02:47:06
                              广告
                              不感兴趣
                              开通SVIP免广告
                              喜报:现在cwl似乎可以通过关掉游戏后修改表格从而达到修改技能组的目的了。


                              IP属地:北京来自Android客户端17楼2025-03-23 14:56
                              回复