Dota2互动指南编写
Dota2的互动指南是与联赛相关的游戏内建物品。它们由一个第三方脚本文件描述,并通过Dota2.com的联赛编辑页面上传至Dota2后台。 这个页面将会描述此脚本文件,以及我们建议的开发互动指南的流程。
建立和测试(Building and Testing)
首先,确保你的联赛可以使用互动指南。你可以通过联赛页面联系Valve联赛管理团队。一旦你的联赛获准使用互动指南,你需要从你的联赛编辑页面下载一份互动指南的脚本文件例程(或者直接从这里下载:http://media.steampowered.com/apps/dota2/images/leagues/CompendiumExample.zip)
在上传到Dota2后台之前,互动指南必须先在你的本机上建立并进行测试。你可以使用test_compendium命令来测试你的互动指南
例如:
test_compendium "c:/compendium/example_compendium.txt"
一旦打开你的互动指南,你可以对你的脚本文件进行修改,并且通过test_compendium_refresh命令立即重新加载你的互动指南。我们建议通过这种方式编辑你所有的脚本文件,这样你可以一边编写一边测试的你的文件。
将你在互动指南中要插入的图片和你的脚本文件放在同一路径下,这样在测试时它们将被自动加载。注意,在互动指南中的选择操作不会被真正地保存,其他部分数据是为了测试而伪造的数据(例如:进度条将会不停地移动,奖金池会上涨。) 你可以使用以下指令来模拟奖金池的值:
test_compendium_prizepool_min 1600000
- 设置奖金池的初始(最少)奖金。
test_compendium_prizepool_max 6000000
- 设置奖金池的封顶(最高)奖金。
test_compendium_prizepool_inc 5000
- 设置奖金池每秒钟将会增加的数量。
一旦你准备好通过联赛管理员页面发布、提交你的互动指南和图片,但并不设置它为公开可访问的。非公开的互动指南对于你联赛中的所有管理员都是可见的。启动你的Dota2客户端并且浏览你的互动指南确保你对它满意。如果你对它满意,再次提交它,并将其标记为公开的,之后所有购买了你联赛门票的玩家都将可以访问它。
概念(Concepts)
互动指南包含了多种脚本文件提及的概念。
页面(Pages)
互动指南是包含多个页面的虚拟图书。每个页面包含了一个将页面显示给玩家的元素列表,元素包括:图形部分(比如文本框和图片),输入部分(比如按钮和组合框),布局助手(比如容器和模板)。
元素(Elements)
页面由元素列表组成。每个元素都有一个独立命名和元素类型。每个类型都有一个必需的和可选的参数列表。
选项(Selections)
选项是用来存放互动指南中的动态值的。这些值可以由玩家或者Dota2后台进行修改。互动指南中的许多元素可以作用于选择值。每个选项必须有一个独有的索引来鉴别它。
选项是在你用来在任意时刻接收玩家在互动指南中输入的数据的。比如:允许他们对未来的比赛做出预测,对他们希望在表演赛中出现的内容进行投票,选择自己最喜欢的英雄或者物品。当用户做出选择是,实际的用户界面也会发生变化。
由玩家设定的选项可以在某个特定的时刻锁定,之后玩家无法对它们做出修改。选项也可以根据其它选项的值来锁定它们自身。
模板(Templates)
模板允许你简单的在你的脚本文件中大量复制键值和脚本值。模板必须由脚本文件中的某个名称注册,之后它们可以在你的互动指南中的任意地方被实例化。
模板也支持宏定义,本质上来说是模板的实例必须提供值的变量。模板在这之后可以使用内部查看,模板可以使用模板中定义的元素,在这之后宏定义将被提供的值所替换。在Template Element Parameters中查看语法和例子。
翻译(Localization)
翻译工作会在你发布你的互动指南后自动的进行处理。任何在你互动指南中出现的文本都会被提取并且替换为翻译键值。文本会在http://translation.steampowered.com Steam Translation Web page 发表。其它语言的版本会在社区完成翻译工作后发行。
一些便于互动指南翻译的方法:
- 不要在你的图片中添加文本,因为图片中的文本不能被翻译。取而代之的是在图片上覆盖一层文本框。
- 在互动指南发售后,在更新它时不要重命名页面或者元素。翻译的键值是根据页面和元素名称生成的,重命名它们将会导致翻译时使用的键值改变,这对翻译者来说非常痛苦。
- 试着为其它语言预留提供更多的文本空间。如果你的文本恰好填充完它的文本框,那么它很可能在翻译成其它语言时不能够完美填充。
- 不要把句子打散到多个文本框中。有些语言会阻止你将一个句子拆成多块单独的文本。
- 你可以通过在文本框开头添加^^,让某些文本不被翻译。
点数(Points)
现在互动指南可由V社提供一个使用点数的事件id。点数可以通过完成动作或者使用指定的互动指南相关物品来积累。这些点数可以用来在指南中激活特性,或者提供奖励给用户。
动作(Actions)
对于拥有V社提供的事件id的互动指南,可以定义动作。动作是被用来追踪发生的事件,并为这些动作提供奖励,比如点数获取或者直接的回报。一个典型的例子就是玩家预测比赛结果来获取点数。
脚本文件格式(The Script File Format)
互动指南脚本文件是一个KeyValues 在任意文本编辑器中都可轻松编辑的文本文档。它包含了一系列的含有参数的段落,一些是必需的,一些的可选的。test_compendium命令会在你打开互动指南时报出其中所有的错误。
根级类型(Root Level Parameters)
脚本文件的根级别必须包含以下的键值:
- "version" "3"
- 这是脚本文件的版本号,不要修改它。
- "table_of_contents_page" "<name of your table of contents page>"
- 这个值必须是页面的名称,使用者在导航中点击"Table Of Contents"按钮时,会前往至你希望他们前往的页面。
- "table_of_contents_version" "<version of the Table of Contents>"
- 这个值是一个你可以随时增大的数值。任何时候玩家打开互动指南时,这个数字会比上次互动指南被打开时的值更高,一个"!"的提示图标会在导航中"Table Of Contents"按钮旁显示。我们建议你在互动指南中添加新的页面时,自增这个数值。
- "主题色(theme_color)"
- 这是一个你的互动指南的主题RGB值。这个会用作互动指南导航按钮周围的模糊光效。
- "预加载(precache)"
- 这一项包含一个在互动指南打开前必须被下载的图像列表。如果你想要一个封面或者页面背景,但是你没有大文件图片,你可以让玩家在打开互动指南前下载大部分/所有你的图片。不在列表中的图片会在使用者浏览到包含此图片的页面时进行下载。(这些图片会在下载完成后显示)
Example "precache"
{
- "compendium2014_cover.jpg" "1"
- "compendium2014_blankpage.jpg" "1"
- "compendium2014_insidecover.jpg" "1"
}
- "compendium2014_cover.jpg" "1"
- "timers"
- 此项表示其他元素与主列表引用的次数。计数器必须按照如下格式书写:
- "HH:MM:SS DD-MM-YYYY GMT+ZZZZ" (timezone + can be a - instead)
Example "timers"
{
- "always_locked" "00:00:00 01-01-2000 GMT+0000"
- "qualifiers_start" "12:00:00 12-05-2014 GMT-0500"
- "qualifiers_end" "23:59:59 27-05-2014 GMT+0200"
- "mainevent" "09:00:00 18-07-2014 GMT+0700"
}
- "always_locked" "00:00:00 01-01-2000 GMT+0000"
- "preregister_selections"
- 此项包含了一个在页面内元素中使用前需要被定义的选项列表,任意被设置为非复选框的选项必须在此进行注册(复选框本身包含了选项的注册)。在Selection Parameters查看如何注册一个单体选项。
- "result_dialog_settings"
- 此项会定制使用者点击"More Info"按钮后弹出的复选框中的额外对话框信息。一般只用来预测比赛结果。选项中的参数如下:
- "color_title" : 标题文本的RGB颜色。
- "color_bg" : 设置扁平化背景的RGB颜色,可用"image_bg_filename"替代。
- "color_result" : 结果文本的RGB值。
- "color_extrainfo" :额外信息的文本RGB颜色值。
- "color_correctedness" :正确的/不正确的文本RGB颜色值。
- "image_bg_filename" : 替代平面阴影背景,用作对话框背景的图片。
- 此项会定制使用者点击"More Info"按钮后弹出的复选框中的额外对话框信息。一般只用来预测比赛结果。选项中的参数如下:
- "模板(templates)"
- 此项包含了一个模板定义的列表。在Compendium Templates查看更多的信息。使用"embedded template"元素类型后,模板也可以在自身页面内部被指定。只在一个页面中使用过的模板,这是优先选择的组织形式,保证在使用模板是,模板的定义在模板附近。在Template Element Parameters中查看格式细节问题。
- "pages"
- 此项包含了页面的住列表,以保证它们能够出现在互动指南中。每个页面都有一个元素列表。在Page Parameters中查看如何对不可见的页面进行布局。
- "embedded_pages"
- 这个可选项包含了在一个虚拟图书中不会显示的页面列表,取而代之的是用作弹出列表,对话框或者工具提示。在Embedded Pages中查看更多信息。
页面参数(Page Parameters)
每个页面都必须有一个独立的名称,并且包含一个元素列表。一个有效的组织技术是将模板的使用储存在页面本身中,而不是存放在全局模板列表中(一个适合存放被多重页面调用的模板的地方)。查看样例中的"page_insidecover"来了解更多。
Example "pages"
{
- "page_cover"
- {
- "elementlist"
- {
- "cover_image"
- {
- ...
- }
- }
- }
- "page_insidecover"
- {
- "templatelist"
- {
- "template_image"
- {
- "elementtype" "embedded_template"
- ...
- }
- }
- "elementlist"
- {
- "background_image"
- {
- ...
- }
- "some_text"
- {
- ...
- }
- }
- }
}
除了元素列表,页面还有如下的可选设置:
- "crease"
- 书中央的暗化分界线的可见性。这个值的范围在0~1之间,当值为1的时候是完全可见的,当值为0的时候是完全不可见的。只有左边页面的值是可用的。对于想在可见页面中排布文本或图片是非常用帮助的。
Element Parameters
这里有多种元素的类型,任意元素选项的第一个键值应为"elementtype"参数,,用来提示互动指南当前项正在描述哪一种元素类型。选项中保留的键值会根据元素的类型来进行解析。
有效的元素类型:
- "textfield"
- 一块文本。 Text Element Parameters
- "image"
- "selection"
- 一个处理用户做出的选择并看到选择结果的更小元素的集合。
- "button"
- 一个可以作为指令来使用的可点击按钮,或者用来设置一个选项的值。Button Element Parameters
- "line"
- 直接在页面上画出的线。Line Element Parameters
- "timer"
- 在注册计数器到期前显示剩余时间计数器。 Timer Element Parameters
- "progressbar"
- 显示达成目标进度的进度条。ProgressBar Element Parameters
- "video"
- 内嵌的Youtube/优酷视频。 Video Element Parameters
- "container"
- 其他元素的容器。在模板中使用,用以容纳混合的元素,以及控制元素块的可见性。Container Element Parameters
- "generic"
- 叫做scaleform的通用元素。目前只支持滚动视图内的页面。 Generic Element Parameters
除了"elementtype",一个选项还可以选择性包含一个"embedded_template"键值,默认设置为"1"。如果这么做,此元素将被注册为一个模板而不是被实例化显示在页面上。它实际上和将元素放置在模板项的根部分中一样,但是它被保存在一个页面中。将模板保存在你经常使用它们的页面附近。 在Template Element Parameters 中查看额外的模板专有元素。
文本元素参数(Text Element Parameters)
文本元素是包含了大量可翻译文本的区域。
参数:
- "文本(text)"
- 显示的文本。可以包含Text Escape Sequences.
- "字体 (font)"
- 可以是可用的Dota字体:"text", "textbold", "title". 或者它时一个字体的名称(比如"courier"或者"arial"。注意你只可以使用window或者OSX下广泛使用的字体)
- "字号(size)"
- 字号。
- "加粗(bold)"
- 加粗。
- "斜体(italic)"
- 斜体。
- "(glow)"
- 给文本周围添加一个蒙版发光效果。
- 指定页面中元素的位置。
- "w"
- 文本宽度。确保你为其它语言预留了足够的位置。(比较好的方法是为英文预留原语言2倍的空间)
- 文本高度。所以了翻译文本的另一种方法是为你当前使用的语言预留足够的行高,这样翻译后的文本可以自动换行到下一行。
- "resize_to_fit"
- 如果设置为1,文本框会重置本身以适应当前的行高。通常只有在文本框有依赖他们的元素时需要使用。(内嵌页面中的文本作用类似于工具提示,那里的背景会被重置大小以适应内部文字的大小)
- "spacing_horizontal"
- 文字水平间距。
- "spacing_vertical"
- 换行符的行间距。
- "align"
- 设置元素内部文本的按高度和宽度对齐的方式。必须是以下的对齐模式:"左对齐(left)", "右对齐(right)", "居中对齐(center)"。(默认为左对齐)
- "depth"
- 可以为"front"或者"back"(未指定时默认为"front" )Front元素将被放置在模板中现有内容的前面,Back元素将被放置在模板中现有内容的后面。记住,元素指定的顺序是他们放置在页面上的顺序。
- "color"
- 文本的RGB色值。(默认为"255 255 255" 白色)
- 这个值必须是你互动指南中的一个页面名称。点击这个文本将会跳转到那个页。对于表内内容很有用,或者在互动指南中快速前后跳转。
- "link_to_url"
- 这个值必须是一个URL地址,点击这个文本将会弹出一个浏览器并在其中加载此链接。
- "min"
- 最小值在'%prizepool_togo%和%prizepool_perc%中使用。 Text Escape Sequences.
- "max"
- 最大值在'%prizepool_togo%和%prizepool_perc%中使用。 Text Escape Sequences.
- "show_selection_tooltip"
- 如果为选项设置一个索引,在此文本上滚动鼠标将会弹出一个工具提示。这个工具提示将会基于选项中的"tooltip_data"项进行配置(并非属于此文本框)这允许自定义工具提示选项中的每一种选择。
- 当用户移动鼠标指针到此元素上时,会弹出一个工具提示。
- 用来控制合适这个元素是可见或不可见的。元素默认为可见。
Selection Points Displays
一个文本元素可以选择显示一组选项中用户获得的所有的点数,用以取代显示普通文本。主要用来显示用户预测是获得的点数。为了做到这一点,文本元素需要一个按照以下两种方式之一设置的"Points"项:
- 列表选项由索引独立分类。(键值为选项索引,值只能为"1")
- 在 "index_min"和"index_max"的值之间指定一个最小/最大选项索引范围,
- 在"index_min"和"index_max"的值间指定一个最小/最大的索引,用以在其间统计所有的索引数目。
这两种方法也可以结合使用。
样例:
Example "points"
{
- "1" "1"
- "3" "1"
- "6" "1"
}
"points"
{- "index_min" "8"
- "index_max" "11"
}
"points"
{- "index_min" "1"
- "index_max" "7"
- "10" "1"
- "11" "2"
}
文本列表(Textlists)
文本框也可以被设置为文本列表。一个文本列表是一个根据文本增长动态更新的文本元素(比如互动指南的等级,或者说联赛奖金池)一个证明文本列表有用的例子是玩家的互动指南升级时,对玩家解锁的内容的显示文本。 将一个文本元素设置为文本列表,你需要进行如下的参数设置:
- "textlist_var"
- 你想使用的数据值将决定哪块动态文本是否。当前仅支持于"prizepool"(联赛的奖金池) 和"level"(玩家的互动指南等级) 。
- "textlist_rule"
- 当决定显示某块动态文本时,比较"textlist_var"中指定的"textlist"数值的数学方法。有效的方法是 "=", "!=", ">", "<", ">=",以及 "<="。
- "textlist"
- 此项包含了在文本元素中显示的所有动态文本块的列表。此项的值应该与"textlist_var"指定的值进行比较(使用"textlist_rule"中的数学方法)此项的值是动态的文本块。
在此样例中,文本框设置为一个基于玩家互动指南等级的文本列表。文本将按照文本列表中的值等于或小于玩家的互动指南等级时动态显示。如果互动指南的等级为3,那里将会显示"额外的载入画面(Extra Loading Screen Treasures)"。如果互动指南等级为8,那么文本内容将会是"昆卡的信使:鹦鹉副将(Kunkka's Courier: Lieutenant Squawkins)"。如果等级大于10级,那么那里将不会有可见的文本。
Example "recent_rewardname"
{
- "elementtype" "textfield"
- "text" ""
- "font" "title"
- "size" "15"
- "x" "40"
- "y" "242"
- "w" "432"
- "h" "80"
- "align" "center"
- "color" "51 51 51"
- "textlist_var" "level"
- "textlist_rule" "<="
- "textlist"
- {
- "1" "200% Battle Point Booster"
- "3" "Extra Loading Screen Treasures"
- "4" "Kunkka's Courier: Lieutenant Squawkins"
- "10" "220% Battle Point Booster"
- }
}
图像元素参数(Image Element Parameters)
图像元素用来显示一幅图。
参数:
-
- 指定页面上元素的位置。
- "w"
- 元素宽度。图片将变形以适应宽度。
- "h"
- 元素高度 。图片将变形以适应高度。
- "X轴形变(scaleX)"
- 图像的水平形变量。默认值为1,负值将会翻转图像,所以-1将会沿水平轴画出完全反转的图像。
- "Y轴形变(scaleY)"
- 图像的垂直形变量。默认值为1,负值将会翻转图像,所以-1将会沿垂直轴画出完全反转的图像。
- "depth"
- Either "front" or "back" ("front" if unspecified). Front elements will be placed in front of existing content in the template. Back will be behind. Bear in mind that the order that elements are specified is the order they're placed on the page.
- "文件名(filename)"
- 图片的文件名。它应该与互动指南脚本文件同一路径下的图像文件名相同。或者你可以指定Dota 2's resource\flash3 相对路径下的存在的文件(例如:"images/heroes/beastmaster.png" 或者"images/items/abyssal_blade.png")
- "color"
- 一个叠加在图像上的可选RGB值。
- 一个描述此图片的可选项。 点击Tooltip Parameters查看更多.
- "link_to_page"
- 此值必须为互动指南中的一个页面的名称。点击此幅图将会跳转到这一页。
- "link_to_url"
- 这个值必须是一个URL地址,点击这个文本将会弹出一个浏览器并在其中加载此链接。
- "show_selection_tooltip"
- 如果为选项设置一个索引,在此文本上滚动鼠标将会弹出一个工具提示。这个工具提示将会基于选项中的"tooltip_data"项进行配置(并非属于此文本框)这允许自定义工具提示选项中的每一种选择。
- "show_selection_index"
- 如果为选项设置一个索引,此图片将会改变它的显示方式来匹配选项中"show_selection_images"项指定的图片。
- "imagestyle"
- ,如果你希望这个图片展示英雄的肖像动画,将其设置为"movie"。匹配选项中的'"show_selection_index"项的英雄值,来替代静态英雄图标。
线条元素参数(Line Element Parameters)
线条元素的用途是直接在页面上添加直线。 参数:
- "color"
- 线条的RGB颜色值。
- "thickness"
- 线条的粗细。
- "start_pos"
- 开始位置,包含线条结束位置"x"和"y"的值。
- "end_pos"
- 结束位置,包含线条结束位置"x"和"y"的值。
Example "dividing_line"
{
"elementtype" "line"
"color" "120 117 108"
"thickness" "1"
"start_pos"
{
"x" "132"
"y" "87"
}
"end_pos"
{
"x" "917"
"y" "87"
}
}
选项元素参数(Selection Element Parameters)
选项需要多个参数来告诉Dota2如何储存并展示它们。如果选项在互动指南中的组合框中显示,那些参数可以被指定为下拉列表项自身。如果选项不是一个下拉列表,(例如,它被设置为按钮,或者被Dota2后台总的某个东西指定了)那么参数会被指定为"preregister_selections"的根项。
参数被如下的所有选项类型所共享:
- selection_index
- 选项的索引。没有两个共享一个相同的索引。其他元素使用此索引来指向这个选项。
- "choice_type"
- 选择的类型必须是当前选项正在使用的类型。可用的选择有:
- "泛型(generic)" - 选项是一个字符串和相应的ID列表。字符串将被用于选择的显示,后台将会储存ID。
- "英雄(hero)" - 选项必须是英雄的ID的列表。它们将和英雄的名称一起显示。
- "所有英雄(all_heroes)" - 选项会自动填充为所有英雄的名称。
- "所有物品(all_items") - 选项会自动填充为所有物品的名称。
- "计数器(counter) - 由Dota2后台设定,而非由用户选择。显示为原始数据。
- "账户ID(accountid)" - 由Dota2后台设定,而非由用户选择。显示为与账户ID匹配的Steam档案的档案名。
- 选择的类型必须是当前选项正在使用的类型。可用的选择有:
- "choices"
- 此项必须为选项中所有有效选择的集合列表。对于"all_heroes", "all_items",和"counter"不是必须的。每个选择都应有一个文本描述和一个独有的选择键值。比如在英雄选项中,选择的键值必须是英雄ID。
- "时间(time)"选项中的时间玩家不能改进行修改。应被设置为指定在"计时器(timers)"根项的名称。
- "描述(description)"
- 这个选项的文本描述。
- "后台描述(backend_desc)"
- 当使用联赛编辑页面查看你的互动指南时显示的对选项的描述。
- "points"
- 点数的数值是有价值的。一般仅用作预测。未指定的话默认为0,也不会在界面中显示。
- "选项元素的颜色(selection_element_color)"
- 除了在下拉列表中,选项可以由按钮来初始化。标准方法是玩家点击按钮时(比如"选择一支队伍"),然后页面上的一系列图片会高亮显示(比如一系列队伍的图标),一旦玩家点击了选项中一个队伍的图标,选项将会匹配队伍的ID。如果选项这么做的话,设置"selection_element_color"来给图片添加高亮RGB色值。
- "selection_set"
- 一个可选的字串,用以在互动指南中与其它选项相匹配,确保在选项中没有两个相同的选择项。在全明星赛的投票很有用,你不会希望一个选手出现在同一场比赛的多个位置的。
- "disable_set_rollup"
- 当在联赛页面浏览互动指南时,我们会将同一选项下的多个选项集合到一个单独的条目下。当玩家进行投票时,你会有一系列的选项(比如最想看到哪十个选手进行一场表演赛)当你需要分开查看集合中的选项,而不希望这个选项集合起来,在每个选项中重置selection_set这个键值。
- "empty_string"
- 一个可选的字串。当玩家没有完成选择时,显示在"作出选择(Make A Selection)"位置。
- "tooltip_data"
- 一个可选项,用以列出选项中所有的选择项,以及和选择项相关的工具提示数据。任何被初始化文本框都会显示此选项的值,并且为当前选择项使用工具提示数据。查看Tooltip Parameters以了解如何初始化一个独立的工具提示。
- "show_selection_images"
- 此项列出选项中所有选择项,以及和它们相关的图像名称,这是一个可选的项目。任意设置为显示此图片的项目,将使用和当前的选择相关的图像。
- "action"
- 在"event_actions"列表根下的注册的操作。如果一个操作有列出的选项,一旦所有的选项都已经被玩家设置,那么这个操作将被认为全部完成了。目前第三方还不支持此操作。
- "result"
- 用来指定正在进行的预测结果的选项。结果项包含预测的正确答案,并且包含点击"更多信息(More Info)"按钮弹出的所有信息(仅为下拉列表框选项显示)。结果项中的参数如下:combo box
- "answer"
- 此项是正确答案的选择项的值。
- "answers"
- 如果有多个正确答案,那么使用"answers"来替代"answer"。这应该是一个包含了选择项值的列表。(键值为选择项的值,键值只能为1)
- "对话框信息(info_dialog)"
- 包含结果的额外信息的可选项。如果此项存在,"更多信息(More Info)"的按钮应该显示在下拉列表框界面的选项中。内部的参数为:
- "比赛ID(match_id)"
- 如果设置为世界级比赛,"观看回放(Watch Replay)"按钮必须显示,点击它将会开始下载和回放。
- "info"
- 包含结果的额外信息的字串。会在结果弹出的对话框中显示。
- "result_override"
- 可选的用来重载弹出对话框中显示结果的字串。默认情况下,弹出的对话框会使用键值为"answer"文本描述来显示正确的答案。但是如果你有多个"answers",一般最好的解决方法是补充更多的自定义描述。(比如,张三和李四以100分的成绩并列第一)
- 包含结果的额外信息的可选项。如果此项存在,"更多信息(More Info)"的按钮应该显示在下拉列表框界面的选项中。内部的参数为:
- 用来指定正在进行的预测结果的选项。结果项包含预测的正确答案,并且包含点击"更多信息(More Info)"按钮弹出的所有信息(仅为下拉列表框选项显示)。结果项中的参数如下:combo box
下拉列表框中需要的参数还有:
-
- 指定一个元素在页面上的位置。
- "textcolor"
- 下拉列表上的描述文本的RGB颜色值。
- "bgcolor"
- 下拉列表自身的阴影背景RGB颜色值。
- "combotextcolor"
- 下拉列表框中文本的RGB颜色值。
- "style"
- 下拉列表框的视觉效果。目前只支持"s_CompendiumSelectionPlain"。
样例(Examples)
一个为神秘物品投票的选项。这是一个通用的选择类型,因此不需要用英雄ID来指定他们。选项的界面使用的是图片和按钮,而不使用下拉列表选项。因此它有被指定的选项元素颜色。
Example "arcana_select_group1"
{
"selection_index" "301"
"selection_element_color" "0 255 0"
"time" "arcana"
"description" "YOUR PICK FROM GROUP 1"
"choice_type" "generic"
"choices"
{
"Storm Spirit" "1"
"Faceless Void" "2"
"Huskar" "3"
"Pudge" "4"
"Spectre" "5"
"Jakiro" "6"
"Lone Druid" "7"
}
}
用来选择玩家最喜欢的战队的选项。此项使用一个下拉列表进行选择,但是这是"选择你最喜欢的队伍"页面中的一部分。这会使"description"的键值为空,并指定一个"backend_desc",以便我们能够轻松找到互动指南的统计报告。注意:队伍名称的开头有一个^^作为转义序列,以提示翻译系统这些字串不需要被翻译。
Example "favorite_team_selection"
{
"x" "100"
"y" "20"
"textcolor" "93 57 93"
"bgcolor" "93 57 93"
"combotextcolor" "243 234 217"
"selection_index" "601"
"time" "mainevent"
"backend_desc" "Favorite Team"
"choice_type" "generic"
"choices"
{
"^^Alliance" "1"
"^^Titan" "2"
"^^EG" "3"
"^^Fnatic" "4"
"^^NewBee" "5"
"^^VG" "6"
"^^Na'Vi" "7"
"^^DK" "8"
"^^IG" "9"
"^^C9" "10"
"^^Empire" "11"
"^^Na'Vi.US" "12"
"^^Arrow Gaming" "13"
"^^LGD Gaming" "14"
"^^Mousesports" "15"
"^^Liquid" "16"
"^^MVP Phoenix" "17"
"^^CIS-Game" "18"
"^^Virtus.Pro" "19"
}
}
预测哪位英雄会获得最高击杀数的下拉选框选项。既然一个是"所有英雄"属性的选项,那么这项就不需要一个选择项列表。当预测时间结束时,它会以英雄ID的形式储存结果。在这个案例中,斧王和小鱼人联系在一起。注意:它也包含一个可选的额外信息对话框版块。
Example "hero_with_most_kills"
{
"x" "100"
"y" "150"
"textcolor" "93 57 93"
"bgcolor" "93 57 93"
"combotextcolor" "243 234 217"
"selection_index" "30"
"description" "HERO WITH THE MOST KILLS"
"points" "4"
"choice_type" "all_heroes"
"time" "qualifiers"
"result"
{
"answers"
{
"2" "1" // Axe's Hero ID
"93" "1" // Slark Hero ID
}
"info_dialog"
{
"info" "Axe and Slark tied with 22 kills"
"match_id" "679787098"
}
}
}
自定义选项布局(Custom Selection Layouts)
如果你希望更多地控制你的选项界面,你可以手动配置组件而不使用"selection"元素。以下是一个在标准"selection" 元素中包含了自定义选项元素的组件。你可以用它作为你的起始组件:
Example "custom_selection"
{
"elementtype" "container"
"x" "20"
"y" "200"
"elementlist"
{
"combobox"
{
"elementtype" "combobox"
"rx" "28"
"ry" "17"
"textcolor" "93 57 93"
"bgcolor" "93 57 93"
"combotextcolor" "243 234 217"
"selection_index" "1021"
"visibility_selection_index" "1021"
"visible_when_selection_unlocked" "1"
}
"points"
{
"elementtype" "textfield"
"rx" "378"
"ry" "0"
"text" "%selpoints_1021% pts"
"font" "text"
"size" "12"
"w" "70"
"h" "20"
"align" "right"
"color" "93 57 93"
}
"description"
{
"elementtype" "textfield"
"rx" "26"
"ry" "0"
"text" "%seldesc_1021%"
"font" "text"
"size" "12"
"w" "350"
"h" "20"
"color" "93 57 93"
}
"results"
{
"elementtype" "container"
"rx" "0"
"ry" "0"
"visibility_selection_index" "1021"
"visible_when_selection_results" "1"
"visible_when_selection_unlocked" "0"
"elementlist"
{
"yourselection"
{
"elementtype" "textfield"
"rx" "27"
"ry" "17"
"text" "Your Selection:"
"font" "text"
"size" "12"
"w" "100"
"h" "20"
"color" "93 57 93"
"resize_to_fit" "1"
}
"choice"
{
"elementtype" "textfield"
"relative_to"
{
"target" "custom_selection-results-yourselection"
"point" "tr"
"rx" "5"
"ry" "0"
}
"text" "%selection_1021%"
"font" "textbold"
"size" "12"
"w" "260"
"h" "20"
"color" "93 57 93"
"glow" "1"
}
"infobutton"
{
"elementtype" "button"
"style" "ButtonTextualRightPassport"
"text" "Show More Info"
"rx" "330"
"ry" "12"
"color" "93 57 93"
"command" "popup_results:1021"
}
"checkmark"
{
"elementtype" "image"
"rx" "0"
"ry" "5"
"w" "25"
"h" "25"
"filename" "checkmark.png"
"depth" "front"
"visibility_selection_index" "1021"
"visible_when_selection_correct" "1"
}
}
}
}
}
按钮元素参数(Button Element Parameters)
按钮元素是允许用户提供输入流的可点击按钮。一般作为下拉列表框来设置选项。
参数:
-
- 指定元素在页面上的位置。
- "样式(style)"
- 按钮的样式。有效的样式为"button_transparent", "button_solid", "button_gradient", 以及"button_close"。
- "颜色(color)"
- :可选的叠加在按钮上的RGB颜色值。目前有部分按钮样式支持颜色的设置。
- "文本(text)"
- 按钮内部的文本。目前有部分按钮样式支持文本显示。 (比如"button_close" 就是一个X)
- "对齐(align)"
- 如何使用按钮的横坐标轴,按钮会自动扩展来容纳文本。"left"会使按钮向右扩展(所以X轴会在按钮的左侧), "right"会使按钮向左扩展(所以X轴会在按钮的右侧),"center"会使按钮向两侧等量扩展(所以X轴会在按钮的中央。
- "show_confirmdialog"
- 如果你希望在用户点击时显示一个"你确定吗?(Are You Sure?)"的对话框,那么这个值应为在对话框中显示的描述性文本。如果没有指定的话,这个按钮将在被点击后立即生效。
- "selection_index"
- 如果你希望用户点击按钮时设置选项的值,这应该是你希望设置的选项的选项索引。选项必须在"preregister_selections"根项下被描述。仅当你也指定了"selection_elements" 或者"selection_force_to"时生效。
- "selection_elements"
- 当用户点击按钮时应高亮显示的元素列表。每个元素必须有一个相应的选择项的值。 当用户点击高亮元素时,选项将被设置为选择的值。
当元素都被高亮显示时,按钮将自动转换为"取消(Cancel)"按钮。查看下面的例子来了解此项的用处。
- "selection_force_to"
- 如果你想要这个按钮在用户点击时立即设置选项的值,这个值应为你想要设置的选择项的值。
- "link_to_page"
- 如果你想让这个按钮在点击后在让用户跳转到观战指南中的一页,,那么它应该是观战指南目标页面的名字。
- "link_to_url"
- 如果你想让这个按钮在点击后在让用户外部浏览器中打开一个URL地址,那么它应该是目标URL地址。
- "tooltip_data"
- 描述按钮的工具提示的可选项目。 在 Tooltip Parameters中查看。
- 用来控制合适此元素是可见/不可见的。元素总是默认可见的。
- "command"
- 如果你需要这个按钮在用户点击时发出指令,那么这个值应为"command"。以下是有效的指令:
- "goto_tournament"
- 观战指南将会关闭,并且用户会被带至赛事直播的标签页。
- "goto_offerings"
- 观战指南将会关闭,并且用户会被带至兵器库的献祭页面。
- "compendium_buy_and_useX"
- X必须是一个物品定义的索引。这会购买指定的物品。
- "popup:X"
- X必须是一个嵌入的页面的名字。对应的内嵌页面会被实例化。在Embedded Pages中查看更多。
- "close:X"
- X必须是一个嵌入的页面的名字。如果对应的内嵌页面当前可见,它将被关闭。在Embedded Pages中查看更多。
- X必须有效的选择索引。 The standard Selection Results Dialog will be popped up with the results for the specified selection.
- "request_heroes", "reroll_heroes", and "roll_daily_hero"
- 这些参数是用来处理Ti4的挑战的,现在已经弃用了。
- 如果你需要这个按钮在用户点击时发出指令,那么这个值应为"command"。以下是有效的指令:
一个选择最喜爱的英雄的样例按钮。当用户点击按钮时,一系列的英雄图标将会高亮显示,并允许用户直接点击他们想要选择的英雄。注意:这个按钮只在选项301为0时可见(未设置的)。
Example "selecthero1"
{
"elementtype" "button"
"style" "button_transparent"
"text" "SELECT HERO"
"x" "380"
"y" "175"
"align" "center"
"color" "255 255 255"
"visible_when_selection_is" "0"
"selection_index" "301"
"selection_elements"
{
"heroicon1" "15"
"heroicon2" "22"
"heroicon3" "36"
"heroicon4" "41"
"heroicon5" "50"
"heroicon6" "65"
"heroicon7" "77"
}
}
一个简单地清楚指定选项的按钮的样例。注意:只有当选项301不为0时这个是可见的。
Example "clearhero1"
{
"elementtype" "button"
"style" "Button_Close"
"x" "435"
"y" "145"
"align" "center"
"color" "255 255 255"
"selection_index" "301"
"selection_force_to" "0"
"visible_when_selection_not" "0"
}
计时器元件参数(Timer Element Parameters)
计时器元件是一种非互动性质的元件,用于显示距离达到一个特定时间点还有多长时间。一般使用于显示还有多久关闭玩家选择。 参数:
-
- 用于定位元件在页面的位置
- "time"
- 在"timers"根目录下的时间条目的名称,计时器所指示的是该事件的时间。
- "textcolor_title"
- 标题文本的RGB的颜色值。
- "textcolor_sub"
- 副标题文本的RGB的颜色值。
- "maxseconds"
- 如果你想设置一个计时器所能显示的最大时间,将这个值设置为你想要要的时间(以秒为单位)
- "timerstyle"
- 可以被设置为"hero_challenge"用于24小时英雄挑战的计时器。暂时不做讨论
Example "mainevent_timer"
{
"elementtype" "timer"
"x" "156"
"y" "525"
"time" "mainevent"
"textcolor_title" "93 57 93"
"textcolor_sub" "93 57 93"
}
进度条元件参数(ProgressBar Element Parameters)
进度条是一种非互动性质的元件,用于显示完成某个目标的进度百分比。要注意进度条元件只会绘制进度条本身那一部分,因此最好把它们摆在图片的最上层作为潜在的未被填充的区域。
参数:
-
- 用于定位元件在页面的位置
- "w"
- 元件宽度 这是进度条的最大宽度。实际的填充区域的宽度应当在0和这个值之间。
- "h"
- 元件高度。
- "data"
- 进度条所读取的数据源,目前的数据源是 "奖金池(prizepool)"以及 "互动指南等级(level)"
- "min"
- 进度条为0时数据源的值,比这个值小的都不会显示。
- "max"
- 进度条为100时数据源的值,比这个值大的都不会显示。
- "color"
- 进度条填充区域的RGB值。
- "filename"
- I如果你想用一张图代替单一色来填充进度条,那么在这里指定一个图片的文件名。这个图片的位置要放在互动指南的script文件夹下的directory目录下。或者,你可以指定一个读取图片的路径,图片需要放在Dota 2's resource\flash3路径下( 类似"images/heroes/beastmaster.png" 或 "images/items/abyssal_blade.png")
Example "main_progressbar"
{
"elementtype" "progressbar"
"x" "53"
"y" "190"
"w" "406"
"h" "21"
"data" "prizepool"
"min" "1600000"
"max" "6000000"
"filename" "compendium2014_bar_stretchgoalbar_filler.png"
}
视频元件参数(Video Element Parameters)
视频元件显示一个可播放的植入视频,注意这些视频的尺寸固定为494x278。
参数:
-
- 用于定位元件在页面的位置
- "providers"
- 现在支持2个视频源:Youtube和优酷。
- 可以只用1个或者2个都用,中国dota2用户倾向于优先使用优酷视频,而其他地区倾向于优先使用youtube视频。
- 不同的视频源有着不同的值
- 举例说明,下方例子中的youtube ID来源于该链接: http://www.youtube.com/watch?v=Eqk9C1wVT0U
- 优酷的例子来源于该链接:http://player.youku.com/embed/XNzQ2OTgzNjc2
Example "embedded_video"
{
"elementtype" "video"
"x" "9"
"y" "150"
"providers"
{
"youtube" "Eqk9C1wVT0U"
"youku" "XNzQ2OTgzNjc2"
}
}
容器元件参数(Container Element Parameters)
容器元件是一个用于包含其它元件的不可视元件,对于规划自己的工作非常有帮助,在模板里是一个非常强大的工具。
参数:
-
- 用于定位元件在页面的位置。
- "elementlist"
- 此项包含着1个或多个创建或放置于此容器中的子元件
- 相对坐标: "rx" & "ry"
- 任何一个容器中的子元件都可以相对于容器的X/Y值选择自身的坐标。这允许你很简单的定位重复的色块和元件。要使用相对坐标,子元件应当使用 "rx" 和 "ry" 代替 "x"和 "y" .
- 用于控制该元件何时可见/不可见。元件默认一直可见。请注意包含于容器中的元件只有在容器本身是可见的情况下才会评估自身的可视性参数。因此,你可以在容器和容器内子元件中使用可视性参数来进行操作.
下方例子容器中包含3个元件。容器本身只有在选项“500”的值为0时才可见,因为那3个元件在容器中,它们同样服从该规则。要注意说明文档有额外的可视性规则,它在选项“600”不为0时才可见。该规则只有在容器本身可见的情况下才有效,所以说明文档只有在选项“500”为0而选项“600”不为0的情况下才可见。还需要注意锁定键也再使用相对坐标,所以它的X&Y坐标要偏离容器的X&Y坐标。(这里我们定为55,,100)
Example "favorite_hero_unset"
{
"elementtype" "container"
"x" "50"
"y" "100"
"visibility_selection_index" "500"
"visible_when_selection_is" "0"
"elementlist"
{
"selection_hero"
{
...
}
"lockbutton"
{
"rx" "5"
"ry" "0"
...
}
"description_text"
{
"visibility_selection_index" "600"
"visible_when_selection_not" "0"
...
}
}
}
模板元件参数(Template Element Parameters)
模板是键值的一部分,它可以轻易的通过你的脚本文件复制。它们尤其适于用来制作可维护的互动指南。注意模板必须仍然指定一个 "elementtype", 除非其它所有举例的对象都指定了 要高效率的制作模板,你必须了解它们在互动指南中是如何被应用的。最直观的方式是通过一个例子来了解。首先假设我们有一个模板叫做"template_pagetitle":
Example "template_pagetitle"
{
- "embedded_template" "1"
- "elementtype" "textfield"
- "x" "0"
- "y" "46"
- "w" "512"
- "h" "20"
- "font" "title"
- "size" "16"
- "align" "center"
- "color" "93 57 93"
}
- "embedded_template" "1"
这是一个对于我们的互动指南非常有用的模板—这是一个用于显示页面标题的文本框。它规定了一个页面标题除去具体文本内容外所需的所有元素。注意它除了设置了"embedded_template" 键,看上去就像一个普通的文本框,它使互动指南不创建文本框而是把它作为一个模板记录下来。现在我们可以在一个页面中用如下方式对模板进行说明:
Example "page_example"
{
- "elementlist"
- {
- "title"
- {
- "t" "template_pagetitle"
- "text" "MY BIG PAGE TITLE"
- "size" "20"
- "t" "template_pagetitle"
- }
- "title"
- }
}
- "elementlist"
当互动指南的系统发现了"t" 键, 便会开始搜寻响应名称的模板。一旦发现该模板,将所有该模板的键合并到此部件。任意派生的情况都会会重载模板内部的键值,所以在这种情况下,较大的size(20)会被留下,而模板中的较小的size(16)会被无视。上传模板分辨率脚本文件应该如下方所示:
|in=
"page_example"
{
- "elementlist"
- {
- "title"
- {
- "text" "MY BIG PAGE TITLE"
- "size" "20"
- "elementtype" "textfield"
- "x" "0"
- "y" "46"
- "w" "512"
- "h" "20"
- "font" "title"
- "align" "center"
- "color" "93 57 93"
- "text" "MY BIG PAGE TITLE"
- }
- "title"
- }
} }} 注意"embedded_template"键并没有记录到实例中,因此这个实例不会成为一个模板。如果你有从别的模板中派生出来的模板,你需要确认它们也设置了"embedded_template"键值,这样它们才不会从父模板那里继承这个值过来。
定义(Defines)
模板也包含了叫做"required_defines"的项目。这一项包含一个任何派生实例的模板必须提供值的定义列表。当模板被互动指南系统解析时,模板中派生定义的值会被替换为实例化定义的值。 定义的名称必须为如下的脚本格式:
- %作为前缀和后缀。
- %def_ 或 %defloc_作为前缀。如果定义包含需要翻译的文本,使用%defloc_,否则使用%def_。
为了便于理解,我们看一个例子。我们希望互动指南的每一页都有一个标题,还有一个不错的边界图像。我们可以按如下所示定义一个模板。它包含文本框和图像,以及文本框内部文本的定义。注意:我们希望标题文本是可翻译的,所以我们使用 %defloc_作为定义的开始。
Example "titlesection_template"
{
- "elementtype" "container"
- "required_defines"
- {
- "%defloc_title%" "1"
- }
- "elementlist"
- {
- "titletext"
- {
- "t" "t_page_title"
- "text" "%defloc_title%"
- "t" "t_page_title"
- }
- "background_image"
- {
- "elementtype" "image"
- "filename" "compendium2014_titlebackground.png"
- "x" "185"
- "y" "35"
- "w" "142"
- "h" "42"
- "depth" "back"
- "elementtype" "image"
- }
- "titletext"
- }
}
- "elementtype" "container"
我们可以按如下方法实例化此模板:
Example "page_example"
{
- "elementlist"
- {
- "title"
- {
- "t" "titlesection_template"
- "defines"
- {
- "%defloc_title%" "MY PAGE TITLE"
- }
- "t" "titlesection_template"
- }
- "title"
- }
}
- "elementlist"
这个页面现在会显示标题文本框和图片。实例中必须包含一个在模板的"required_defines"中列出的定义好的"defines"块。使用定义用如下的好处:
- 实例不需要知道模板额内部结构。在上面的例子中,"titlesection_template"模板中的"title"实例不需要包含一个匹配元素列表以在"titletext"文本框中置入正确的文本值。这允许模板被重新设计而不破坏任何派生模板。
- 定义是有错误检查机制的,所以不能忘记在实例中指定一个模板操作必要的定义。
- 定义能够在模板中的多个位置被使用,指定实例以减少数据错误的可能。
如下是一个略微复杂的例子。注意在复合文本框如何使用%defloc_name%定义。它也使用%def_作为前缀,因为它是一个图像文件名,不应该被翻译。
Example "template_qualifier_attendee"
{
- "embedded_template" "1"
- "elementtype" "container"
- "required_defines"
- {
- "%defloc_name%" "1"
- "%def_logo%" "1"
- "%defloc_name%" "1"
- }
- "elementlist"
- {
- "name"
- {
- "t" "attendee_name"
- "text" "%defloc_name%"
- "t" "attendee_name"
- }
- "logo"
- {
- "t" "img_teambig"
- "filename" "%def_logo%"
- "t" "img_teambig"
- }
- "tiny_name"
- {
- "t" "attendee_name"
- "size" "8"
- "text" "%defloc_name%"
- "t" "attendee_name"
- }
- "name"
- }
}
- "embedded_template" "1"
跳过部分内容(Skipping Sections)
定义也可以用于立即从模板中元件。当你想要在一个模板中包含对事物多种不同处理方式,并且想要实例选择一种想要的处理方式时,这个功能非常有用。下面的键值可作为互动指南(或者容器)中元件的参数:
- "skip_element_if"
- 这个元件将被跳过,如果该键值为1.
- "skip_element_if_not"
- 这个元件将被跳过,如果该键值为0.
- "skip_element_if_empty"
- 这个元件将被跳过,如果该键值不是"". 可用于为实例指定一个可选文本块,并且在模板中包含一系列的只有在该文本块不为空的时候才显示出来的图片和文本框。
嵌套模板(Nested Templates)
一个从其它模板派生出新模板的方法。例如,你可能想要一个根文本框模板来设置字体和颜色,然后一些派生模板用作标题、副标题以及描述块。嵌套模板内部的键值会与其他值一样合并到模板链中,低级模板中的键值会重载高级模板中的键值。
调试(Debugging)
自由地使用模板和定义会导致当你的互动指南脚本文件报错时难以追踪错误的来源。"test_compendium_writeposttemplates"是一个在调试错误时很有帮助的工具。如果你在Dota2控制台中将其设置为1,运行"test_compendium"指令,在解析完成所有的模板后,互动指南系统会在硬盘上保存你的脚本文件。
你可以在Dota2的\dota\compendium_datafile.txt路径下找到解析完的脚本文件。
泛元件参数(Generic Element Parameters)
泛元件是嵌入互动指南.FLA文件中的特定的界面元素。目前其唯一用处是创建可卷动的显示元件(比如带有滚动条的嵌入窗口).
基本参数部分(Standard Parameter Sections)
某些参数对不止一种元件类型有效。该部分包括一个标准参数的列表。
位置参数(Positioning Parameters)
所有元件都可以用数种方法在他们所在的页面上定位。注意页面大小是512x576像素(在全屏16x9上显示),并且根据屏幕分辨率来调整尺寸(在其他分辨率下图像与设备同宽).
最简单的方法是直接使用X与Y坐标在页面上定位:
- "x"
- 元件X坐标
- "y"
- 元件Y坐标
如果该元件位于一个容器元件中,你可以使用相对坐标:
- "rx"
- 相对X坐标,使用父容器X坐标的偏移量
- "ry"
- 相对Y坐标,使用父容器Y坐标的偏移量
此外,元件也能相对于页面上其他元件来定位:
- "relative_to"
- 包括以下要素,解释如何定位这个元件:
- "target"
- 目标相关元件的名称。目标必须位于这个页面上,并且必须在页面元件列表先于该元件被指定。如果目标元件位于一个容器中,你必须加上容器的名字,使用连接符 '-',例如"custom_selection-results-selectionbutton"是一个名为"selectionbutton"的元件,位于容器"results"中,且该容器位于容器"custom_selection"中
- "point"
- 目标元件上的点,用来作为参考点定位该元件。必须是以下点中的一个: "tl", "tr", "bl", "br", "tm", "bm", "lm", or "rm" (t/b/l/r/m分别代表上/下/左/右/中,即分别对应左上、右上、左下、右下、上中、下中、左中、右中)。所以指定"rm"会使用目标元件的右中点作为参考点
- "rx"
- 相对X坐标,使用参考点偏移量
- "ry"
- 相对Y坐标,使用参考点偏移量
- 包括以下要素,解释如何定位这个元件:
可见性参数(Visibility Parameters)
对可见性的控制多种多样。在一个元件中组合多种可见度控制可能会造成混淆,所以只要这样想:元件默认都是可见的,下列条件中一旦任一个不合就会变得不可见
- "visible_when_prizepool_less"
- 元件只有在奖金池低于指定值时才会显示
- "visible_when_prizepool_more"
- 元件只有在奖金池高于指定值时才会显示
- "visible_when_level_less"
- 元件只有在互动指南等级低于指定值时才会显示
- "visible_when_level_more"
- 元件只有在互动指南等级高于指定值时才会显示
- "visibility_selection_index"
- 这是一个用于下面两个基于选项的可见性值的可见度选择索引
- "visible_when_selection_is"
- 元件只有在可见度选项当前选定值符合指定值时才会显示
- "visible_when_selection_not"
- 元件只有在可见度选项当前选定值不符合指定值时才会显示
- "visible_when_selection_less"
- 元件只有在可见度选项当前选定值低于指定值时才会显示
- "visible_when_selection_more"
- 元件只有在可见度选项当前选定值高于指定值时才会显示
- "visible_when_selection_locked"
- 元件只有在可见度选项锁定时才会显示(比如当前时间高于该选项的"time" field")
- "visible_when_selection_unlocked"
- 元件只有在可见度选项未锁定时才会显示(比如当前时间低于该选项的 "time" field")
- "visible_when_selection_results"
- 元件只有在可见度选项拥有结果部件时才会显示
- "visible_when_selection_correct"
- 元件只有在一个可见度选项的答案与手册所有者的选择相符时才会显示
- "visible_after_time"
- 数值为互动指南根目录 "timers" 部件中一个计时器(timer)的名字,元件只有在当前时间超过计时器时间才会可见
- "visible_until_time"
- 数值为互动指南根目录 "timers" 部件中一个计时器(timer)的名字,元件只有在当前时间还未超过计时器时间才会可见
- "visible_when_game_live"
- 元件只有在该联赛有正在直播比赛时才会可见
- "visible_when_action_started"
- 数值为一个有效的动作(Action)ID,元件只有在该动作开始后才会可见
提示信息参数(Tooltip Parameters)
提示信息可以使用文本和图像,并且可以包括以下增强设置。选项也可以为每个可用选择包括一个提示信息部件-文本区域显示选项的值并且在鼠标悬停时显示对应的提示信息
以下设置可以用于调整提示信息:
- "style"
- 提示信息的输出样式,必须为"tooltip_titleandtext", "tooltip_titletextandcountryflag",或者一个嵌入页面的名字,对应的嵌入页面将被实例化。查询嵌入页面 获取更多信息。当使用嵌入页面作为提示信息是,其余的提示信息参数将被忽略(你可以随意自定义你的嵌入页面)
- "tooltip_title"
- 提示信息的标题文本
- "tooltip_text"
- 提示信息的主体文本
- "color_title"
- 标题文本的颜色RGB值
- "color_text"
- 主体文本的颜色RGB值
- "color_bg"
- 提示信息背景的颜色RGB值
- "filename"
- 一个图像的文件名,只有当提示信息风格含有图像时才需要,"tooltip_titletextandcountryflag" 包括一个小国旗
指令参数(Command Parameters)
一些元件类型允许包括指令,当在用户点击元素时发出这些指令。需要发出的指令数据必须在元件参数的"command"项中被指定。
在"command"项目中,可以指定下列参数
- "show_confirmdialog"
- 如果你想在用户开始指令时显示一个确认对话框,将这个设定为对话框中的描述文本。如果不指定本参数,指令立即生效。
- "selection_index"
- 如果你想要这个指令设定一个选项的值,这个参数应当为想要设置的选项索引。要指定的选项则应该在根项"preregister_selections"中被描述,需要你同样指定了"selection_elements"或者"selection_force_to"才能生效。
- "selection_elements"
- 当用户点击按钮时应高亮显示的元素列表。每个元素必须有一个相应的选择项的值。 当用户点击高亮元素时,选项将被设置为选择的值。 如果这个元件是一个按钮,其将在高亮后自动改变为"取消" 按钮。
- "selection_force_to"
- 如果你想要这个按钮在用户点击时立即设置选项的值,这个值应为你想要设置的选择项的值。
- "link_to_page"
- B社必须匹配了你互动指南中某一页的名称,发出这个指令会跳转到该页面,用于目录,或者在你的指南中前后快速跳转。。
- "link_to_url"
- 如果你想让这个按钮在点击后在让用户外部浏览器中打开一个URL地址,那么它应该是目标URL地址。
- "command"
- 如果你需要这个按钮在用户点击时发出指令,那么这个值应为"command"。以下是有效的指令:
- "goto_tournament"
- 观战指南将会关闭,并且用户会被带至赛事直播的标签页。
- "goto_offerings"
- 观战指南将会关闭,并且用户会被带至兵器库的献祭页面。
- "compendium_buy_and_useX"
- X必须是一个物品定义的索引。这会购买指定的物品。
- "popup:X"
- X必须是一个嵌入的页面的名字。对应的内嵌页面会被实例化。在Embedded Pages中查看更多。
- "close:X"
- X必须是一个嵌入的页面的名字。如果对应的内嵌页面当前可见,它将被关闭。在Embedded Pages中查看更多。
- "popup_results:X"
- X必须是一个有效的选项索引,基本的选择结果对话框将带着指定选项弹出。
- "set_local_variable"
- 设置一个本地变量的值.需要额外的设置,详见下面.
- "request_heroes", "reroll_heroes", and "roll_daily_hero"
- 用于TI4挑战,现已移除.
- 如果你需要这个按钮在用户点击时发出指令,那么这个值应为"command"。以下是有效的指令:
- "variable"
- 注册的本地变量名称,只有在指令为"set_local_variable"时才需要
- "value"
- 上述的要设置的变量的值, 只有在指令为"set_local_variable"时才需要
文本转义序列(Text Escape Sequences)
文本元件可以在其 "text"(文本)值中使用转义序列,转义序列是在屏幕上显示时可以被动态信息取代的文本。某些转义序列需要额外指定"min""max" 信息
可用转义序列:
- %prizepool%
- 将被联赛当前奖金池的数值所替代
- %prizepool_togo%
- 将被联赛当前奖金池和文本区域的"max"值的区别所替代
- %prizepool_perc%
- 将被联赛当前奖金池的百分比所取代,位于文本区域的"min"和"max"数值之间
- %prizepool_owner%
- 将被互动指南所有者捐献到奖金池的金额所替代
- %selection_X%
- X必须为一个有效的选项索引,转义序列将基于选项类型被选项的当前值所替代
- %selpoints_X%
- X必须为一个有效的选项索引,转义序列将被选项的点值所替代
- %seldesc_X%
- X必须为一个有效的选项索引,转义序列将被选项的描述记录所替代
- %selanswer_X%
- X必须为一个有效的选项索引,转义序列将被选项的结果部分的第一个答案所替代
- %owner%
- 将被指南所有者的Steam用户名所替代
- %level%
- 将被互动指南的当前等级所替代
- %levelup_pts%
- 将被达到下一个互动指南等级所需的互动指南点数所替代
- %textlistvalue_X%
- X必须为有效的文本列表的名字,将被列表中当前可见的文本所替代
- %price_X%
- X必须为Dota2虚拟道具的定义索引,将显示该物品在Dota 2商店的价格,使用用户本土货币
- %action_X%
- X必须为有效的动作ID,将被用户通过指定动作赚取的点数所替代
- %actionmax_X%
- X必须为有效的动作ID,将被指定动作最大可能获得的点数所替代
- %actionscore_X%
- X必须为有效的动作ID,将被用户指定动作的得分所替代
一个有效的转义序列实例,内容写入文本区域的"text"键值:
Example "text" "$%prizepool%"
"text" "目标$%prizepool_togo%"
"text" "$%prizepool_owner%"
"text" "来自%owner%"
"text" "通过10局你最喜爱的英雄,你赢得了%selection_65211%"
"text" "%levelup_pts%点来升到下一等级"
"text" "等级%textlistvalue_mytextlist%"
嵌入页面(Embedded Pages)
嵌入页面是一个强大的工具,用于给互动指南增加额外的信息层面和交互性。嵌入页面如同普通页面一样被安置在根目录"pages"部分,添加一些参数来描述嵌入页面如何显示。随后基本页面中的元件可以设置成触发嵌入页面的显示
目前触发嵌入页面显示的方法如下:
- 设置一个按钮的"command"(指令)为"popup:<嵌入页面名称>"
- 设置一个提示信息的"style"(样式)为嵌入页面的名称
除了基本的页面参数 ,嵌入页面还拥有以下参数:
- "modal"
- 使得嵌入页面显示时表现为一个模态窗口。互动指南的其余部分将禁用。页面会在用户点击页面外时关闭
- "positioning_rule"
- 设置该嵌入页面定位的方式,必须为以下几种:
- "fixed"
- 页面将使用X/Y坐标定位,使用"x"和"y"作为参数
- "centered_on_left_page"
- 页面将在书的左页中部显示,使用"x"和"y"参数指定偏移值
- "centered_on_right_page"
- 页面将在书的右页中部显示,使用"x"和"y"参数指定偏移值
- "centered_on_book"
- 页面将在书的中部显示,使用"x"和"y"参数指定偏移值
- "as_tooltip"
- 页面作为提示信息使用,相对与提示信息对应的元件来定位,需要在"as_tooltip_data"部分指定额外数据(见下方).
- 设置该嵌入页面定位的方式,必须为以下几种:
- "resize_elements"
- 一段有关该页面中需要调整尺寸的元件列表以及如何调整它们的定义。条目中必须有与嵌入页面"elementlist"中所对应的特定名字。此功能通常用于需要动态扩展其包含的文本内容的提示信息-对于这些情况,提示信息的背景图像需要调整尺寸来包含文本
- 要调整尺寸的图像必须在根目录"precache"部分被预读,否则他们在第一次显示时将会被错误安置(就像图像不同步载入一样)。在"resize_elements"部分的元件包括以下参数:
- "horiz_rule"
- 这个规则描述元件水平放大的方向,可以设置成"none"(无), "left"(左),或者"right"(右)。例如,如果被设置成"right",元件将只会从右侧缩放来适应嵌入页面的宽度
- "vert_rule"
- 这个规则描述元件垂直放大的方向,可以设置成"none"(无), "up"(上),或者"down"(下). 例如,如果被设置成"down",元件将只会从下方缩放来适应嵌入页面的高度
- "indent_x"
- 调整元件尺寸时一个可选的额外宽度,对需要在内容和图像边缘留出空间时很有用
- "indent_y"
- 调整元件尺寸时一个可选的额外高度,对需要在内容和图像边缘留出空间时很有用
- "slice_x"
- 如果需要调整尺寸的元件是一个图像,你可以使用这个来执行一个9 way slice ,对于清晰缩放边框、矩形等很有用。这个X值用来作为两侧的缩进值创建两个纵向切片
- "slice_y"
- 如果需要调整尺寸的元件是一个图像,你可以使用这个来执行一个9 way slice ,对于清晰缩放边框、矩形等很有用。这个Y值用来作为两侧的缩进值创建两个横向切片
- "as_tooltip_data"
- 如果嵌入页面用来作为提示信息,这个部分是必要的。他包括了接下来用来描述如何操作处理提示信息的相关参数:
- "diamond"
- 用来作为链接嵌入页面和显示提示信息的原元件的箭头的图像文件名。应为菱形。这样就可以作为四方向箭头使用
- "desired"
- 提示信息的需求位置与原弹出提示信息的元件相关。必须为以下类型:"at_element_tl", "at_element_tr", "at_element_bl", "at_element_br", "at_element_tm", "at_element_bm", "at_element_lm", "at_element_rm" - TL = 左上, BR = 右下, TM = 上中, RM = 右中, 依此类推。提示信息会尝试将自己放置在指定位置。如果提示信息无法在该位置适应屏幕,提示信息将尝试更换元件周围合适的其他位置
- "indent_x"
- 一个可选的横向数值,用来从原元件推离提示信息。调整该项通常需要校准调整尺寸的元件的缩进,以及菱形的宽度
- "indent_y"
- 一个可选的纵向数值,用来从原元件推离提示信息。调整该项通常需要校准调整尺寸的元件的缩进,以及菱形的宽度
- 如果嵌入页面用来作为提示信息,这个部分是必要的。他包括了接下来用来描述如何操作处理提示信息的相关参数:
这是一个示例模板,使用一个嵌入页面作为提示信息。它包括一个短标题和描述字符串,以及一个调整尺寸来包括前两者的背景图像。它使用两块文本的定义,这样可以简单的使用提示信息覆盖元件中右侧的文本
在文本区域的"text"键值使用转义序列的示例:
Example "embedded_tt_base"
{
"positioning_rule" "as_tooltip"
"as_tooltip_data"
{
"diamond" "bg_diamond"
"desired" "at_element_lm"
"indent_x" "5"
"indent_y" "5"
}
"resize_elements"
{
"bg"
{
"horiz_rule" "right"
"vert_rule" "down"
"indent_x" "15"
"indent_y" "15"
"slice_x" "6"
"slice_y" "6"
}
}
"elementlist"
{
"nodename"
{
"elementtype" "textfield"
"font" "textbold"
"size" "9"
"x" "0"
"y" "0"
"w" "500"
"h" "14"
"text" "%defloc_title%"
"color" "190 187 178"
"depth" "front"
"resize_to_fit" "1"
}
"description"
{
"elementtype" "textfield"
"font" "textbold"
"size" "9"
"x" "0"
"y" "15"
"w" "150"
"h" "400"
"text" "%defloc_desc%"
"color" "123 118 112"
"depth" "front"
"resize_to_fit" "1"
}
"bg_diamond"
{
"elementtype" "image"
"w" "25"
"h" "25"
"depth" "back"
"filename" "tooltip_diamondpointer.png"
}
"bg"
{
"elementtype" "image"
"x" "0"
"y" "0"
"w" "50"
"h" "28"
"depth" "back"
"filename" "tooltip_background.png" // 已经在根目录'precache'部分被预读
}
}
}
这是提示信息背景图像,将被调整尺寸(使用9-way slice法)来容纳文本:
本地变量(Local Variables)
用于额外从客户端存储数据,你可以在他们的计算机上基于单进程机制临时存储数据(关闭互动指南时这些数据就会被丢弃)。这个功能的主要目的是可以创建更具互动性的可视化元件。变量可以用名称注册,带有不同的值,并且可以通过其他元件的指令来设置。其他元件随后可以使用可见性检查来基于变量状态设置可见性,示例互动指南中包括一个带有示例用法的页面
要注册一个本地变了,在根项"local_variables"中指定它和它的默认设置。这个值将被作为作为字符串存储和比较,不需要是一个整数值。
Example "local_variables"
{
"example_tab" "1"
"example_reward" "courier"
}
设置一个变量可以通过"set_local_variable"指令,依靠任何能够发出指令的元件(按钮,图片,文本)来实现,查看指令部分来获取更多信息。
Example "command"
{
"command" "set_local_variable"
"variable" "example_reward"
"value" "left"
}
在Standard Element Visibility Parameters中使用 "visible_when_variable_is"来基于你的全局变量控制其他元件的可见性。
事件动作(Event Actions)
文件中这一块的内容使用键值"event_actions"开始,包括了一个可以被互动指南获取或者用于互动指南相关奖励的动作列表。这个只有在V社为当前互动指南提供了event_id时才有效
每个事件看起来像这样:
Example "<action name>"
{
"action_id" "100"
"max_grants" "4"
"normal_points" "25"
"add_to_web_request" "1"
"min_to_grant" "8"
"reward_id" "700"
}
- "<action name>"
- 动作的根名称必须是唯一的,用于在选项中鉴定此动作。这也被用于联赛互动指南信息页面中的名称。
- "action_id"
- 这是一个独有的整数识别代号,这个值不能改变,他是用来识别每个玩家完成的动作的。不同的ID被视为不同的动作。
- "max_grants"
- 这个值限制了一个用户可以完成这个动作多少次,对于只能获取一次奖励的动作这个值为1T,对于可以完成多次的动作,这个值应该设置为次数上限。确认这一点非常重要,来确定点数和道具奖励不会被额外获取
- "normal_points"
- 指定后,将会显示用户完成这个动作后能获取多少点数。注意这并不是他们能获得的总计点数,对于总计点数你需要使用max_grants * normal_points. 这在分配点数获取量上很有用. 例如如果你想要通过一个动作给出100点, 你可以设置其 max_grants = 5 normal_points = 20, max_grants = 1 normal_points = 100,甚至是max_grants = 100 normal_points = 1. 也可以让获取的点数取决于动作完成程度。比如你想给予一个用户1到100点,你可以使用max_grants = 100 normal_points = 1, 当玩家获取79分时,执行动作79次.
- "add_to_web_request"
- 这个值决定该动作的完成次数是否会在互动指南状态页面中显示,1表示显示,2表示不显示
- "min_to_grant"
- 对于带有选项的动作, 显示了需要完成这个动作的选项数目。例如你有一套10个动作相关的选项,当你想在其中5个被选中时完成这个动作,将这个值设为5.如果这个值未指定,默认需要所有相关选项被选中才能完成动作
- "reward_id"
- 这个值指定了每次完成动作的奖励汇报,奖励id由V社设置,如果允许你使用则可以把动作和奖励联系起来