Sid Meier's Civilization VI

Sid Meier's Civilization VI

评价数不足
数据同步 API
   
奖励
收藏
已收藏
取消收藏
Type: Mod
Mod: Gameplay, UI
文件大小
发表于
更新日期
148.760 KB
10 月 5 日 上午 6:58
10 月 6 日 上午 5:56
2 项改动说明 ( 查看 )

订阅以下载
数据同步 API

描述
注意:如果你的模组中覆盖了 StagingRoom.lua ,那么记得在 OnChat 函数开始加上以过滤数据
if toPlayer >= 655000 and toPlayer <= 999999 then
return
end

基于文明六多人游戏的聊天系统实现数据同步
实现了多人游戏数据同步,并且不会因为频繁传输而导致重载。



为什么要使用数据同步?
• 当你使用 SetProperty 存储数据时,其他玩家在多人游戏下无法获取到。
• 当你使用 ChangeGoldAttachModifierByID 等函数修改游戏数据,但这些修改不在全局事件中时,其他玩家不会同步。
• 当你使用自定义 UI 或机制,需要频繁传输数据,而 PlayerConfigurations:SetValue 又会导致游戏重载时。



为什么使用聊天系统进行数据同步?
• 聊天系统有事件监听函数 MultiplayerChat,任何发给全体玩家的消息都会触发。
• 使用 PlayerConfigurations:SetValue 在同一回合多次传输数据会触发重载,而聊天系统不会。
• 游戏内的其他机制(如外交事件 DiplomacyMeet)需要手动设置目标,可能影响文明关系。



玩家在聊天框输入类似数据会生效吗?
不会。
只要不是通过端口 -1(聊天框发给所有人的 ID)发送的数据,就可以在回调中进行过滤。

不过,如果有其他模组监听了所有 MultiplayerChat 事件,数据泄露是必然的



会造成数据不同步吗?
不会。
在模组「万界交易系统」中,该机制经过大量测试(约 100 回合,期间有数百次绑定 modifier 操作)均无任何重载或崩溃。



附加功能
模组内置函数:
GameEvents.BroadcastInfo_SDBC.Call(iPlayerID, infoString)
用于向全局聊天发送信息。

例如:
在与朋友 PVE 时使用的作弊模组中,如果有人修改了效果,通过该函数全局广播即可防止朋友偷偷使用作弊模组。



感谢使用!如果有更好的数据同步方式,欢迎联系我
6 条留言
sy19890515 10 月 19 日 上午 6:38 
请问这个mod怎么用啊?
四路泰坦 10 月 17 日 上午 11:51 
很好的模组
iPlayGamesITA 10 月 10 日 上午 3:50 
I don't understand what this mod does
少卿 10 月 7 日 下午 10:49 
太有用了这个模组
PhantomJ_M 10 月 7 日 下午 3:08 
过于扭曲
zero魂 10 月 7 日 上午 2:50 
牛逼啊,能够解决很多MOD重载的问题? 牛逼!