制作 Rimworld Mod dll 部分记录

  • 准备
    https://dotnet.microsoft.com/download/dotnet-framework/net472
    点击Download .NET Framework 4.7.2 Developer Pack
    安装NDP472-DevPack-ENU.exe
    注意:提示已有 framework4.7.2 安装失败 !!重启试试!!

  • 最终文件夹结构(忽略了 bin 和 obj 文件夹)

    MOD名字
    │   MOD名字.csproj
    │   Main.cs
    │
    ├───.vscode
    │       tasks.json
    │
    └───MODname named by yourself
        ├───About
        │       About.xml
        │       Preview.png
        │
        └───Assemblies
                MOD名字.dll
                MOD名字.pdb
    
  • 创建命令(新建一个用于存放代码的文件夹,在文件夹里运行这个命令)
    dotnet new classlib

  • .csproj文件

    <!--!!!!!!!!!!!!!!!!!!!!!!!!!!你必须自行修改 HintPath 元素的文本!!!!!!!!!!!!!!!!!!!!!!!!!-->
    <!--!!!!!!!!!!!!!!!!!!!!!!!!!!你必须自行修改 HintPath 元素的文本!!!!!!!!!!!!!!!!!!!!!!!!!-->
    <!--  例如:..\Steam\steamapps\common\RimWorld\RimWorldWin64_Data\Managed 文件夹  !!!!!!-->
    <!--  可以使用 Everything 软件查找,网址:https://www.voidtools.com/zh-cn/  !!!!!!!!!!!!!-->
    <Project Sdk="Microsoft.NET.Sdk">
      <PropertyGroup>
    	<TargetFramework>net472</TargetFramework>
      </PropertyGroup>
      <ItemGroup>
    	<Reference Include="Assembly-CSharp">
    	  <HintPath>A:\Steam\steamapps\workshop\content\294100\2012810482\Source\Assemblies\Assembly-CSharp.dll</HintPath>
    	  <Private>false</Private>
    	</Reference>
    	<Reference Include="UnityEngine.CoreModule">
    	  <HintPath>A:\Steam\steamapps\workshop\content\294100\2012810482\Source\Assemblies\UnityEngine.CoreModule.dll</HintPath>
    	  <Private>false</Private>
    	</Reference>
    	<Reference Include="UnityEngine.IMGUIModule">
    	  <HintPath>A:\Steam\steamapps\workshop\content\294100\2012810482\Source\Assemblies\UnityEngine.IMGUIModule.dll</HintPath>
    	  <Private>false</Private>
    	</Reference>
    	<Reference Include="0Harmony">
    	  <HintPath>A:\Steam\steamapps\workshop\content\294100\2009463077\Current\Assemblies\0Harmony.dll</HintPath>
    	  <Private>false</Private>
    	</Reference>
    	<Reference Include="System.Core" />
    	<Reference Include="UnityEngine.TextRenderingModule">
    	  <HintPath>A:\Steam\steamapps\workshop\content\294100\2012810482\Source\Assemblies\UnityEngine.TextRenderingModule.dll</HintPath>
    	  <Private>false</Private>
    	</Reference>
    	<Reference Include="OtherAuthor.OtherMODNameMayBeYouWantModify">
    	  <HintPath>A:\Steam\steamapps\workshop\content\294100\XXXXXXXXXX\Assemblies\OtherAuthor.OtherMODNameMayBeYouWantModify.dll</HintPath>
    	  <Private>false</Private>
    	</Reference>
      </ItemGroup>
    </Project>
    
  • 编译命令
    dotnet publish -c Release -o './MODname named by yourself/Assemblies'

  • Rimworld快速启动Bat脚本(Steam在线 == Steam创意工坊Mod正常加载)

    rem Rimworldquicktest.bat --- RimworldMod快速启动
    echo off&&cls
    
    rem !!!!!你必须自行修改rimworldgamepath后的引号内的路径!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    set rimworldgamepath="A:\Steam\steamapps\common\RimWorld" && rem !!!!!!!!!!!!!!!!!!!!!!!!!
    rem !!!!!你必须自行修改rimworldgamepath后的引号内的路径!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    
    for /f "delims=" %%i in ('dir /a-d /b /on %rimworldgamepath%\RimWorld*.exe') do (
       set rimworldexename=%%i
       goto next
    )
    :next
    cd /d %rimworldgamepath%
    echo %rimworldexename%
    start %rimworldexename% -quicktest
    rem pause
    exit
    
    rem For example:    C:/RimWorld/RimWorld.exe -quicktest
    rem If you're a modder, we recommend making a shortcut to the game that does this.
    rem by .\RimWorld\Readme.txt
    
  • 打开RimworldMod所在文件夹

    @echo off
    rem openRimworldModfolder.bat --- 打开RimworldMod所在文件夹
    
    rem !!!!!你必须自行修改rimworldmodpath*后的引号内的路径!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    set rimworldmodpath1="A:\Steam\steamapps\common\RimWorld\Mods" && rem !!!!!!!!!!!!!!!!!!!!
    set rimworldmodpath2="A:\Steam\steamapps\workshop\content\294100" && rem !!!!!!!!!!!!!!!!!
    rem !!!!!你必须自行修改rimworldmodpath*后的引号内的路径!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    
    set _0or1FlagRandomskRgadKbwFDF=0
    set _colorFlagRandomskRgadKbwFDF=07
    :0
    if "%_0or1FlagRandomskRgadKbwFDF%"=="0" (
    	set _0or1FlagRandomskRgadKbwFDF=1
    	echo ======该程序可以打开 Rimworld 的 Mod 所在文件夹====== && echo 输入1打开资源		本地文件 && echo 输入2打开资源		Steam 创意工坊 && echo 输入z打开本程序文件位置 && echo 输入x立即关闭本程序 && echo 输入c清除已输入 && echo 输入1x打开资源本地文件并立即关闭 && echo=
    )
    if "%_colorFlagRandomskRgadKbwFDF%"=="07" (
    	rem pass
    ) else (
    	timeout /t 1 >nul
    	color 07
    )
    set /p input=请输入数字12、z、x、c或1x:
    if "%input%"=="1" call :1
    if "%input%"=="1x" call :1 x
    if "%input%"=="2" call :2
    if "%input%"=="z" call :z
    if "%input%"=="x" call :x
    if "%input%"=="c" call :c
    color 0c
    set _colorFlagRandomskRgadKbwFDF=0c
    echo 输入错误,重新输入,输入x可关闭本程序
    echo=
    goto 0
    
    :1
    echo 已输入1		打开资源→本地文件
    echo=
    start "" %rimworldmodpath1%
    if %1="x" exit
    goto 0
    
    :2
    echo 已输入2		打开资源→Steam 创意工坊
    echo=
    start "" %rimworldmodpath2%
    goto 0
    
    :z
    echo 已输入z		打开本程序文件位置
    echo=
    start "" %~dp0
    goto 0
    
    :x
    color 0c
    set _colorFlagRandomskRgadKbwFDF=0c
    echo 已输入x		程序即将关闭
    timeout /t 3
    exit
    
    :c
    echo 已输入c		清除已输入
    echo=
    timeout /t 1 >nul
    cls
    set _0or1FlagRandomskRgadKbwFDF=0
    goto 0
    
  • vscode > 终端(T) > 配置默认生成任务…

    {
        // See https://go.microsoft.com/fwlink/?LinkId=733558
        // for the documentation about the tasks.json format
        "version": "2.0.0",
        "tasks": [
            {
                "label": "dotnet publish",
                "type": "shell",
                "command": "dotnet publish -c Release -o './MODname named by yourself/Assemblies'",
                "problemMatcher": [],
                "group": {
                    "kind": "build",
                    "isDefault": true
                }
            }
        ]
    }
    
  • 相关链接
    RimWorld Wiki:About.xml格式
    RimWorld Wiki:MOD 开发教程(译自: Sidoupiar)
    CSDN专栏:Rimworld Mod教程(作者: Shadowrabbit)
    哔哩哔哩专栏文集:Unity游戏Mod/插件制作教程(作者: 宵夜97)
    3DM论坛:MOD制作教程(作者: JKstring)
    小莫的博客园:拦截/注入 游戏函数实现高级操作(作者: 小莫)
    动态IL织入框架Harmony简单入手(作者: 彭伟) - 360快照
    OpCodes,IL指令字段表示形式(微软 .NET API 参考文档) - 英文文档
    RimWorld Mod集(作者: spdskatr)
    灰机wiki:Mod教程
    XML 自动文档(这是什么?)(祭出老古董IE11(哆啦A梦伸手发光))

  • 相关软件

    RimWorld翻译工具[RimTrans]Github百度网盘哔哩哔哩
    代码/文本编辑工具[VSCode]官网格式化快捷键Shift + Alt + F终端快捷键Ctrl + Shift + B
    文本编辑工具[Notepad++]官网XML插件右键文件名:移动到另一视图
    反编译工具[ILSpy]GithubMicrosoft Store查看IL代码:标题栏(月亮图标附近)C# 改为 IL(或IL with C#)
    反编译工具[dnSpy]Github
    C#代码编辑/反编译工具[JetBrains Rider](个人首年140刀)官网30天免费试用无社区版/无抢先体验计划 (EAP)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值