更多游戏

创作者: Syd4r
已更新:2026-05-24 11:51:25
34KB

前置 MOD

使用 更多游戏 时将自动安装

关于此 MOD

更多游戏

为“Game With Your Friends”制作新赌场游戏的框架模组。

安装

  1. 将 BepInEx 5.x 安装到你的 Gamble With Your Friends 目录中。
  2. 将MoreGames.dll和stampsprefab资源包复制到:BepInEx/plugins/MoreGames/

如何制作你自己的自定义游戏

注意:钓鱼游戏模组: https://github.com/Syd4r/FishingGame 是使用此框架构建游戏的绝佳参考。

要制作兼容的模组,你需要按如下方式设置文件结构:

  • 你的模组名称/
    • 游戏/
      • 你的游戏名/
        • 你的游戏名(Unity资源包)
        • YourGameName.dll(继承自 GameBase 的 C# 类)
        • 游戏清单.json
      • YourGameName2/(如果你想在一个模组中放入多个游戏,可以把它们都添加到 games 文件夹中)
        • 你的游戏名2(Unity资源包)
        • 你的游戏名2.dll(扩展GameBase的C#类)
        • gamemanifest.json

如你所见,一款游戏要正常运行,主要需要三样东西:

  • 兼容的Unity资源包
  • 一个包含扩展GameBase类的dll
  • 一段定义你的模组重要信息的 JSON

在接下来的章节中,我将逐一介绍如何正确设置这些内容。

资源包

要构建一个兼容的Unity资源包,你必须先搭建一个合适的Unity场景。我强烈建议对steamapps\common\Gamble With Your Friends中的Gamble With Your Friends_data文件夹使用AssetRipper。然后,在AssetRipper中,将提取出的文件导出为一个Unity项目。在Unity Hub中,确保下载Unity版本6000.3.6f1,并用这个版本打开该Unity项目。这样你就能获得游戏所有的材质、网格和预制体。主要问题是所有脚本都会断开连接,所以你应该删除文件夹中的所有C#脚本。然后找到一个游戏中已经存在的预制体,比如Crash CasinoGame。你可以编辑这个预制体,并以它为基础来构建你想要的内容。确保移除所有使用脚本的悬空组件,因为这些会报错。另外,确保添加TextMeshPro包,这样你才能为任何文本添加TextMeshPro组件。要获取游戏的字体,请查找Assets/Font/Dangrek-Regular.ttf,并用它来构建Dangrek-Regular SDF.asset,你应该将其放在Assets/Resources/fonts & materials/中,然后在TextMeshPro中选择Dangrek-Regular即可。

如果你查看一个现有赌场游戏的预制件,它看起来会像这样:

  • 示例赌场游戏
    • 游戏名称(这里需要TextMeshPro)
    • 模型
      • (任意3D模型)(确保材质使用了游戏所用的着色器,我知道01_GWYF/和AllIn1SpriteShader/可以正常工作,但这些着色器会让3D模型看起来扁平,所以请确保预先烘焙一些光照)
      • 开始按钮(此处有盒型碰撞体)
        • 模型
          • 文本(此处需要TextMeshPro)
          • 按钮_1(使用网格:Cube.002、网格渲染器、盒型碰撞体和材质)
        • 反馈
          • 按F键
      • 或任何其他按钮
    • 反馈
      • 游戏结果反馈
      • 游戏胜利 脸书
      • 游戏失败
      • 浮动文字生成器
      • 胜利特效
        • (一大堆粒子)
      • 游戏失败特效
        • (一大堆粒子)
      • 游戏平局特效
        • (一大堆粒子)
    • 键盘点
      • 键盘(此物体带有盒体碰撞器)
        • 数字键盘底座(使用网格:Cube_4)
    • 导航网格修改器(此项含有导航网格障碍组件)

如果你在Unity场景中设置好这些内容并配置好资源打包,打包完成后只需将打包文件重命名为你的游戏名称,然后拖入游戏文件夹即可。

C# 脚本

下载 Visual Studio,并使用“类库(.Net Framework)”创建一个新项目。

创建一个新的 C# 脚本。在这个文件中,你只需要添加一个继承自 gamebase 的新公共类。例如:

public class ExampleGameName : GameBase {}

我强烈推荐使用dnSpy查看基础赌场游戏的类,或者查看 https://github.com/Syd4r/FishingGame 去了解如何做事。

以下是你应该了解的一些有用事项:

void Start() {} 这将在对象实例化时运行。

public override bool Weaved() { return true; } 我们正在半手动地织入代码,因此不需要织入器对这个文件做任何处理。

protected override void StartGame() 你的播放按钮在被点击时会运行此函数。

void Update() {} 这将每帧运行

你必须在你的C#脚本中的某个地方包含下面这段代码,将你的名称和你的模组名称替换为正确的值。

命名空间 YourModNameeMod { [BepInPlugin("com.YourName.YourModName", "YourModName", "1.0.0")] [BepInDependency("com.moregames.base", BepInDependency.DependencyFlags.HardDependency)] 公共类 YourModNamePlugin : BaseUnityPlugin { 私有方法 Awake() { Logger.LogInfo("YourModName 程序集已由 BepInEx 加载!正在等待基础加载器……"); } } }

网络设置非常重要!!!

如果你想让游戏中出现视觉上的效果,它必须通过网络同步,因此仅靠函数更新客户端的视觉效果是不够的,以下是正确设置网络的方法:

public void BroadcastTestMethod(string text) {

如果(!NetworkServer.active)返回;字符串 方法签名 = “System.Void TestMod.TestGameName::UserRpcTestMethod(System.String)”;整数 rpc哈希 = 方法签名.GetStableHashCode();NetworkWriterPooled 写入器 = NetworkWriterPool.Get();写入器.WriteString(文本);this.SendRPCInternal(方法签名, rpc哈希, 写入器, 0, 真);NetworkWriterPool.Return(写入器);

}

public void UserRpcTestMethod(string networkText) {

如果 (!NetworkClient.active) 返回; --执行视觉表现--

}

如果你的函数是在按下按钮时运行的,就必须这样设置:

服务器

public void 测试按钮点击(玩家交互 交互 = null) {

如果不是服务器激活状态,直接返回; -- 做点什么 --

}

当你想支付时,只需使用 this.Payout 函数:

this.Payout((double)multiplier, ChangeType.GameResult, null, -1L);

这个C#脚本将处理你游戏的所有逻辑,如果你有任何问题,只需在Discord上给我发消息:syd4r

游戏清单

游戏清单是整个配置过程中最简单的一部分。以下是一个游戏清单示例:

{ "name": "测试游戏名称", //这应与你的文件夹名称和所有文件名匹配 "baseMinBet": 20, //一楼键盘的最低下注额 "baseMaxBet": 360, //一楼键盘的最高下注额(由于某些原因会有10-20的偏差) "directions": [ //定义多台机器如何在集群中生成 "North", "South", ], "floorWeights": { //每层被选中的权重,这些值可使机器与其他机器以相同概率生成 "1": 0.167, "2": 0.111, "3": 0.091, "4": 0.063 }, "buttons": [ //定义在Unity中点击具有此名称的按钮时调用哪个函数 { "objectName": "PlayButton", //开始按钮必须调用TryStartGame "functionName": "TryStartGame" }, { "objectName": "TestButton", //其他按钮可以调用任何函数 "functionName": "TestFunction" }, ], "fields": [ //如果你希望在C#脚本中访问资源包中的内容,请在此处添加 { "fieldName": "testField", //C#脚本中的字段名称 "source": "child", //几乎总是child "targetName": "Test_Object" //Unity对象名称 }, { "fieldName": "testPrefabs", "source": "child", "targetNames": [ //你也可以创建Unity对象的数组 "test_1", "test_2", "test_3", "test_4", "test_5", "test_6", "test_7", "test_8", "test_9", "test_10", "test_11", "test_12" ] } ] }

请确保像这样设置gamemanifest.json,并将其包含在游戏文件夹中。

希望这能行得通??

如果你按照这些步骤操作,应该就能做出你自己的自定义游戏了。如果遇到任何问题,欢迎随时联系我。我强烈推荐去看看我是如何制作我的自定义游戏的: https://github.com/Syd4r/FishingGame

使用 Xmod 解锁 朋友,梭哈吧 的全部潜力 — 今天就探索这些顶级 MOD!