
夜之城盟友 - 沉浸式同伴系统
为你在夜之城中喜爱的角色增添大量游戏内容。邀请他们一起闲逛,或组建你的战斗小队。模组与框架,支持自定义NPV与AMM角色。完全模块化,你可以自由配置自己的体验♪
查看大图[img]https://i.imgur.com/4Q0K5Iv.png[/img]

V1.5.0
上传中.... :)*
V1.4.5 支持新的 NCA 编辑器 - 该编辑器允许你创建附加组件并管理你的模组数据,无需编写脚本。
- 在可选文件中添加了 Misty - 我将在下一次更新中将她添加到 AIO 版本中。
新角色 由 CinziaV 和 Seracen 制作的大量新角色!
V1.5 即将推出,包含修复、更新后的 UI、动画系统、升级后的编辑器以及更多内容 ♪
1. 安装所有前置要求 页面顶部
2. 将模组内容解压到你的游戏文件夹(例如 "Steam Games\steamapps\common\Cyberpunk 2077")或使用如 Vortex 之类的模组加载器
3. (可选)安装附加组件 查看 使用此模组的模组 部分!
已在版本 2.31 和《往日之影》DLC 上测试(但该模组不需要此 DLC)
手动更新 ⚠️ 如果你没有使用模组管理器,请按照以下步骤更新到新版本: ⚠️
保留 Characters 和 Modules 文件夹,这样你就不必重新安装角色:
<游戏目录>\bin\x64\plugins\cyber_engine_tweaks\mods\NightCityAllies\Characters
<游戏目录>\bin\x64\plugins\cyber_engine_tweaks\mods\NightCityAllies\Modules
删除 <游戏目录>\bin\x64\plugins\cyber_engine_tweaks\mods\NightCityAllies\ 内的所有内容,除了 Characters 和 Modules 文件夹。
现在你可以安全地安装新版本了
如果仍有问题,请尝试删除此文件夹,然后验证游戏文件:<游戏目录>\r6\cache
模组兼容性 检查你是否安装了以下模组,以防遇到问题。
一旦你解锁了任何角色,你的手机会出现一个信息线程,允许你将角色召唤到你身边。剧情角色通常可以通过在故事中与他们成为朋友或完成特定任务来解锁。在某些时候,当你可以将他们作为同伴解锁时,他们会给你发送信息。雇佣兵可以在来生酒吧和其他多个地点雇佣。走近头顶有雇佣图标的雇佣兵,并支付(目前)一次性雇佣费来获得该雇佣兵。如果同一地点有任务进行中,该图标可能不会显示

当你在 NCA 中解锁角色后: 按住 "T" 打开手机并呼叫雇佣兵。 在看着同伴时按 "F" 打开互动菜单 (或者靠近角色查看 - 取决于你的模组设置!)
同伴会跟随你,与你并肩作战,在你的公寓里闲逛等。
作弊码 如果你只想要角色生成器,或者不喜欢这种渐进式的游戏方式。
解锁所有角色(如果他们在你当前的位置则不起作用)
GetMod("NightCityAllies"):Cheat("UNLOCKALL")
解锁特定角色(你仍然需要有该角色的扩展包)
GetMod("NightCityAllies"):Cheat("UNLOCK Character.Jackie")
生成任何角色,即使未安装为扩展包
GetMod("NightCityAllies"):ForceSpawnCharacter("Character.Alt")
删除模组进度(保存游戏并重新加载)
GetMod("NightCityAllies"):Reset()
给模组制作者 *你很快就能用编辑器完成所有操作,这些描述是为了直接创建 .lua 文件,虽然不完整但仍然有用。
NCA 模组制作指南 0. 资源和先决条件 1. 创建附加组件 2. 雇佣兵附加组件示例 3. 可解锁角色 4-1. 电话对话和效果 4-2. 添加休闲电话对话
以下是一些旧描述,我需要将它们转移到更新的文章中,但它们仍然有效
添加自定义交互
要向互动菜单添加新的交互,你只需要创建一个如下所示的文件:
[游戏或模组文件夹]\bin\x64\plugins\cyber_engine_tweaks\mods\NightCityAllies\Interactions\080_example.lua
名称前的数字决定了条目在菜单中的位置,在这个例子中,080 将排在 "遣散" 选项的正上方。
希望这能说清楚。 :D
010_stop_command.lua
030_social.lua
050_commands.lua
070_equipment.lua
080_example.lua
090_send_away.lua
内容看起来应该是这样的: 我在 Miscellaneous 文件部分添加了一个更详细的示例并进行了解释
return {
{
label = "跳舞!",
type = gameinteractionsChoiceType.Blueline,
icon = TweakDBInterface.GetChoiceCaptionIconPartRecord("ChoiceCaptionParts.DanceIcon"),
callback = function(npc)
-- 在这里定义选择互动菜单选项时会发生什么
npc:PlayAnimation("stand__dance__04")
end,
condition = function(npc)
-- 在这里通过返回 true 或 false 来告诉 UI 是否应显示或隐藏该选项
return Game.GetQuestsSystem():GetFactStr("mq003_done") ~= 0
end
},
}
这个例子可以让 NPC 跳舞,但只有在完成主线任务 3 后该选项才可用。 该系统目前仅适用于 NCA 控制下的 NPC,例如你遇到的雇佣兵或生成的同伴。
子菜单 使用回调函数中的第二个参数 "ui" 来创建子菜单,如下所示:
return {
{label = "打开子菜单", callback = function(npc, ui)
ui:choice(npc:GetName() .. " -> MySubmenu", {
{label = "选项 1", callback = function(npc) npc:DoSomething() end},
{label = "选项 2", callback = function(npc) npc:GetEntity():DoSomethingWithTheEntity() end},
{label = "选项 3", callback = function(npc) npc:AnotherThing() end},
})
end},
-- 你可以在这里添加更多菜单项
}
添加角色
在 WolvenKit -> Tweak Browser 中找到角色记录,查看所有可以更改的值,例如帕南的记录名为 "Character.Panam"。 使用 TweakXL 更改角色的数值,相关文档在此: https://github.com/psiberx/cp2077-tweak-xl/wiki/YAML-Tweaks
Character.YourCustomPanam:
$type: Character_Record
$base: Character.Panam # 以此角色为基础,基于帕南
primaryEquipment: Character.YourCustomPanam_inline1 # 替换帕南的主要装备组
#自定义装备组
Character.YourCustomPanam_inline1:
$type: gamedataNPCEquipmentGroup_Record
equipmentItems:
- Character.YourCustomPanam_inline2
#自定义装备物品记录,更换主要武器
Character.YourCustomPanam_inline2:
$type: gamedataNPCEquipmentItem_Record
equipSlot: AttachmentSlots.WeaponRight
item: Items.Preset_Sor22_Default # <- 将她的主要武器更换为 Sor22 步枪(其余部分是从帕南那里复制的)
onBodySlot: AttachmentSlots.ItemSlotGenericRanged
equipCondition:
- WeaponConditions.SniperPrimaryWeaponSniperEquipCondition
unequipCondition:
- WeaponConditions.SniperPrimaryWeaponSniperUnequipCondition
应该就是这样了。
有关示例,请查看此模组的文件:Lucy by xBaebsae for Night City Allies
准备自定义角色 如果你和我一样是这方面的新手,并且有兴趣创建自己的自定义 NPC,但不知道从哪里开始,我建议你深入研究 wiki 中提供的资源以及下面的 YT 教程:
https://wiki.redmodding.org/cyberpunk-2077-modding/modding-guides/npcs/npv-v-as-custom-npc https://www.youtube.com/watch?v=f9KWa_qJDUo&list=PL2HshRoogFoEIZqk3jzZD8CvyIeOi3Sul
这里我就不详细解释它是如何工作的了,因为已经有一些很好的教程了。
自定义角色准备好了?
要让你的角色可以通过手机界面生成,你只需按照 添加角色 部分所述创建 .json 文件,使用相同的结构:[模组根文件夹]\bin\x64\plugins\cyber_engine_tweaks\mods\NightCityAllies\Characters\your_unique_filename.json
{
"name": "你的角色",
"record": "Character.YourCharacter"
}
完成。 Json 仍然有效,但我现在推荐使用 .lua。可以参考某个剧情角色的文件。
AMM 角色 只有在你想让本模组中的 AMM 角色在未启用 AMM 的情况下也可用时,才需要考虑这一点。
如果你的角色是为 AMM 制作的,并且还没有单独的 .yaml tweak 文件,你需要创建一个。我建议在 WolvenKit 的 Tweak Browser 中查找一个与你的自定义角色相似的角色,例如帕南的角色记录是 "Character.Panam"。然后你需要创建一个具有唯一名称的 yaml 文件,例如 [模组根文件夹]\r6\tweaks\[模组文件夹]\my_custom_character.yaml
内容应该如下所示:
Character.YourNPV:
$type: Character_Record #重要
$base: Character.Panam #此角色基于帕南
displayName: "NPV"
fullDisplayName: "你的自定 NPC 名称"
entityTemplatePath: "path\\to\\your\\character.ent" #用你的自定义 .ent 覆盖帕南的外观
isBumpable: true #让她不是鬼魂 x)
primaryEquipment: Character.tut_npv_d_inline1
abilities: #不是必须的,但我为我的角色更改了帕南的 "Ability.IsDefensive" 为 IsBalanced
- Ability.CanCrouch
- Ability.CanSprint
- Ability.CanSwitchWeapon
- Ability.CanShootWhileMoving
- Ability.CanPreciseShoot
- Ability.CanChargedShoot
- Ability.CanSmartShoot
- Ability.CanUseLeftHand
- Ability.CanUseRightHand
- Ability.CanUseLegs
- Ability.CanTaunt
- Ability.CanCloseCombat
- Ability.IsBalanced #已更改
#自定义装备组
Character.tut_npv_d_inline1:
$type: gamedataNPCEquipmentGroup_Record
equipmentItems:
- Character.tut_npv_d_inline2
#自定义装备物品记录,更换主要武器
Character.tut_npv_d_inline2:
$type: gamedataNPCEquipmentItem_Record
equipSlot: AttachmentSlots.WeaponRight
item: Items.Preset_Achilles_Default # 这会将她主要武器更换为你在此处输入的任何 Items.Preset - 条目
onBodySlot: AttachmentSlots.ItemSlotGenericRanged
equipCondition:
- WeaponConditions.SniperPrimaryWeaponSniperEquipCondition
# - WeaponConditions.BaseRangedPrimaryWeaponEquipCondition
unequipCondition:
- WeaponConditions.SniperPrimaryWeaponSniperUnequipCondition
# - WeaponConditions.BaseRangedPrimaryWeaponUnequipCondition
有了这个文件,"Character.YourNPV" 就是你需要在之前创建的 .json 文件中放入的记录。这仅在你未使用 AMM 时是必须的,因为 AMM 角色也可以通过手机生成。
另外,我想现在也可以这样支持我: https://ko-fi.com/draystation 干杯 ♪
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。