Zh/Dota 2 Workshop Tools/Custom Nettables: Difference between revisions
< Zh | Dota 2 Workshop Tools
Jump to navigation
Jump to search
m (Nesciuse moved page Dota 2 Workshop Tools/Custom Nettables:zh-cn to Zh/Dota 2 Workshop Tools/Custom Nettables over redirect: -Language prefixes) |
m (Using L template for links) |
||
Line 4: | Line 4: | ||
== 示例 == | == 示例 == | ||
=== 注册表格 === | === 注册表格 === | ||
你必须将顶级表格的名字列在<code>game/ADDON_NAME/scripts/custom_net_tables.txt</code>。(如果此文件不在您的地图中您可以自行创建。)它使用这里所描述的: | 你必须将顶级表格的名字列在<code>game/ADDON_NAME/scripts/custom_net_tables.txt</code>。(如果此文件不在您的地图中您可以自行创建。)它使用这里所描述的:{{L|Dota 2 Workshop Tools/KeyValues3|KeyValues3句法}} | ||
<source lang="javascript"> | <source lang="javascript"> | ||
<!-- kv3 encoding:text:version{e21c7f3c-8a33-41c5-9977-a76d3a32aa0d} format:generic:version{7412167c-06e9-4698-aff2-e63eb59037e7} -->; | <!-- kv3 encoding:text:version{e21c7f3c-8a33-41c5-9977-a76d3a32aa0d} format:generic:version{7412167c-06e9-4698-aff2-e63eb59037e7} -->; | ||
Line 30: | Line 30: | ||
当服务器上的网表数据发生变化时,他将被复制到各个客户端。Javascript可以查表格中的当前值,然后订阅以获取表格变化的通知。 | 当服务器上的网表数据发生变化时,他将被复制到各个客户端。Javascript可以查表格中的当前值,然后订阅以获取表格变化的通知。 | ||
{{note|延迟是通信系统中无法避免的一部分,必须要将其考虑在内。例如如果你使用 | {{note|延迟是通信系统中无法避免的一部分,必须要将其考虑在内。例如如果你使用{{L|Dota_2_Workshop_Tools/Custom_Game_Events|自定义游戏事件}}从客户端向服务器发送数据,而后修改网表,那么客户端获得更新的网表值将需要一段时间。}} | ||
<source lang="javascript"> | <source lang="javascript"> |
Latest revision as of 07:51, 11 July 2024
自定义网表(Nettable)是一个强大的游戏服务器与客户端之间的数据通讯工具。与游戏时间不同,网表将持续进行储存,并可以随时查询,玩家断开并重连时将重新创建。
示例
注册表格
你必须将顶级表格的名字列在game/ADDON_NAME/scripts/custom_net_tables.txt
。(如果此文件不在您的地图中您可以自行创建。)它使用这里所描述的:KeyValues3句法
<!-- kv3 encoding:text:version{e21c7f3c-8a33-41c5-9977-a76d3a32aa0d} format:generic:version{7412167c-06e9-4698-aff2-e63eb59037e7} -->;
{
custom_net_tables =
[
"example_nettable_1",
"example_nettable_2"
]
}
在服务器中写入网表(Lua)
服务器代码可以使用以下函数设置表格的值: CustomNetTables:SetTableValue( string table_name, string key, table value )
一个表格可以含有任意个字符串关键字,每一个都对应着一个Lua表格值。

CustomNetTables:SetTableValue( "example_nettable_1", "key_1", {} );
CustomNetTables:SetTableValue( "example_nettable_1", "key_2", { value = "hello" } );
CustomNetTables:SetTableValue( "example_nettable_2", "key_1", { a = 1, b = 2 } );
读取客户端的网表(Javascript)
当服务器上的网表数据发生变化时,他将被复制到各个客户端。Javascript可以查表格中的当前值,然后订阅以获取表格变化的通知。

//--------------------------------------------------------------------------------------------------
// GetAllTableValues returns the entire nettable as a Javascript object
//--------------------------------------------------------------------------------------------------
$.Msg( CustomNetTables.GetAllTableValues( "example_nettable_1" ) );
//--------------------------------------------------------------------------------------------------
// GetTableValue returns the value associated with a particular key
//--------------------------------------------------------------------------------------------------
$.Msg( CustomNetTables.GetTableValue( "example_nettable_2", "key_1" ) );
//--------------------------------------------------------------------------------------------------
// SubscribeNetTableListener allows you to be notified when any value in a table changes
//--------------------------------------------------------------------------------------------------
function OnNettable2Changed( table_name, key, data )
{
$.Msg( "Table ", table_name, " changed: '", key, "' = ", data );
}
CustomNetTables.SubscribeNetTableListener( "example_nettable_2", OnNettable2Changed );