Zh/Dota 2 Workshop Tools/Custom Nettables: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
(Created page with "自定义网表(Nettable)是一个强大的游戏服务器与客户端之间的数据通讯工具。与游戏时间不同,网表将持续进行储存,并可以随时...")
 
m (Using L template for links)
 
(5 intermediate revisions by 4 users not shown)
Line 1: Line 1:
{{lang|title=自定义网表|Dota 2 Workshop Tools/Custom Nettables}}
自定义网表(Nettable)是一个强大的游戏服务器与客户端之间的数据通讯工具。与游戏时间不同,网表将持续进行储存,并可以随时查询,玩家断开并重连时将重新创建。
自定义网表(Nettable)是一个强大的游戏服务器与客户端之间的数据通讯工具。与游戏时间不同,网表将持续进行储存,并可以随时查询,玩家断开并重连时将重新创建。


== 示例 ==
== 示例 ==
=== 注册表格 ===
=== 注册表格 ===
你必须将顶级表格的名字列在<code>game/ADDON_NAME/scripts/custom_net_tables.txt</code>。(如果此文件不在您的地图中您可以自行创建。)它使用这里所描述的KeyValues3句法:[[Dota 2 Workshop Tools/KeyValues3]]
你必须将顶级表格的名字列在<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 29: Line 30:
当服务器上的网表数据发生变化时,他将被复制到各个客户端。Javascript可以查表格中的当前值,然后订阅以获取表格变化的通知。
当服务器上的网表数据发生变化时,他将被复制到各个客户端。Javascript可以查表格中的当前值,然后订阅以获取表格变化的通知。


{{note|延迟是通信系统中无法避免的一部分,必须要将其考虑在内。例如如果你使用[[Dota_2_Workshop_Tools/Custom_Game_Events|自定义游戏事件]]从客户端向服务器发送数据,而后修改网表,那么客户端获得更新的网表值将需要一段时间。}}
{{note|延迟是通信系统中无法避免的一部分,必须要将其考虑在内。例如如果你使用{{L|Dota_2_Workshop_Tools/Custom_Game_Events|自定义游戏事件}}从客户端向服务器发送数据,而后修改网表,那么客户端获得更新的网表值将需要一段时间。}}


<source lang="javascript">
<source lang="javascript">
Line 54: Line 55:
</source>
</source>


{{shortpagetitle}}
[[Category:Dota 2 Workshop Tools]]
[[Category:Dota 2 Workshop Tools]]

Latest revision as of 07:51, 11 July 2024

English (en)中文 (zh)Translate (Translate)

自定义网表(Nettable)是一个强大的游戏服务器与客户端之间的数据通讯工具。与游戏时间不同,网表将持续进行储存,并可以随时查询,玩家断开并重连时将重新创建。

示例

注册表格

你必须将顶级表格的名字列在game/ADDON_NAME/scripts/custom_net_tables.txt。(如果此文件不在您的地图中您可以自行创建。)它使用这里所描述的:KeyValues3句法(en)

<!-- 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表格值。

Note.png注意:当一个关键字的值发生变化时,这个关键字的整个值都将传输到每一个客户端(表格中的其他值不会。)经常发生变化的值应该储存在单独的关键字中,以避免不必要的网络通信和客户端及服务器的计算量。
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可以查表格中的当前值,然后订阅以获取表格变化的通知。

Note.png注意:延迟是通信系统中无法避免的一部分,必须要将其考虑在内。例如如果你使用自定义游戏事件(en)从客户端向服务器发送数据,而后修改网表,那么客户端获得更新的网表值将需要一段时间。
//--------------------------------------------------------------------------------------------------
// 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 );