|
操作分“实际执行的操作”和“恢复出的操作”。恢复,指的是“实际执行的操作”它执行完后生成一个数据包,而后游戏则可以根据“它的状态”和这个数据包恢复出一个和实际执行操作一模一样的操作。
恢复数据包有两个作用
1:多人对战时在网络间流动,使各玩家实现同步。
2:作为录像存档主要数据,用于回放游戏录像。
恢复数据包主要数据类型
注:
1:恢复数据包中所有坐标都基于mod坐标系。
移动- [command]
- [move]
- x="11,12,13"
- y="13,13,14"
- [/move]
- [/command]
复制代码 它表示是一个移动操作。移动路径是(11,13)--->(12,13)--->(13,14)。
如果最后一个坐标是城市,像以上的(13,14),则这次移动将倒致部队入城。
出征- [command]
- [recall]
- value="5"
- x="19,20,21,22,23,24,25,26"
- y="2,2,3,3,3,3,3,3"
- [/recall]
- [command]
复制代码 它表示一个出征操作。出征地是(19,2)(x,y中的第一个坐标),出征部队在城内部队索引是5(经过排序)。对于出征,它一定伴随移动,x、y中的其它坐标就示出该次的移动路径。
征兵- [command]
- [recruit]
- heros="2"
- value="4"
- x="19"
- y="2"
- [/recruit]
- [random]
- value="27689"
- [/random]
- [random]
- value="17076"
- [/random]
- [/command]
复制代码 它表示一个征兵操作。征兵地是(19,2),征出的兵种在该阵营可征兵兵种中的索引是4。部队只有一个武将,武将编号是2。生成部队特质时使用随机数是27689和17076。
校验和- [command]
- [checksum]
- value="IfZ5MiVsmkKku8hq3uykIhRdzYopaa9hhq1zb4>j-fm.de94io29gi9074N4,4lL>hf0Pc9IAWW+PLh+KEDj-90caRkSEWAW6A9b0Xb26>1K0m4f6+HI+kIMTnTg-AFX"
- x="19"
- y="2"
- [/checksum]
复制代码 [/command]
它表示一次核对校验和,它不表示一个游戏操作,很大目的是为调试,一般情况下不发送。为找出程序问题,尤其是数据是否一致性问题,像招一个部队后要验证本地玩家A生成的部队和网络玩家B恢复出部队是否是同一数据,这时A就从新部队中的关键参数计算出一个校验和,发给玩家B。B玩家由恢复出部队按同样计算公式计算出一个校验和,然后检查计算出的值和收到A发来的是否一致就可判断出数据是否有问题。
value:计算出的校验和。
x,y:在基于它之上计算出的校验和,该坐标上应该有部队。
建造- [command]
- [build]
- artifical="25,4"
- builder="26,3"
- city="47,2"
- type="market"
- [/build]
- [random]
- value="23532"
- [/random]
- [random]
- value="9745"
- [/random]
- [/command]
复制代码 它表示一次建操作。要建造的建筑物位在city指定城市经济区内,放在artifical指定格子,建造者站在builder指示格子,type指示建筑物类型。两个random是产生两个特质时使用的随机数。
注:建造出的建筑物,在势力归属上属于建造者所在城市,但经济区所在城市决定它的数值。
系统通知/聊天
- 系统通知
- [command]
- [speak]
- id="server"
- message="ancientcc has left the game."
- [/speak]
- [/command]
- 服务器向客户端群发通知,通知玩家ancientcc退出了游戏。
复制代码
- 群发聊天包
- [command]
- [speak]
- id="ancientcc"
- side=1
- message="daf" // 聊天内容
- [/speak]
- [/command]
- ancientcc玩家向所有玩家群发消息,消息内空是daf。
复制代码- 和队友聊天的聊天包(发向“wei”同盟),team_name="observer"指的是所有观察身份玩家
- [command]
- [speak]
- id="ancientcc"
- side=1
- team_name=wei
- message="daf" // 聊天内容
- [/speak]
- [/command]
- ancientcc玩家向所和它同队的玩家(都属于wei同盟)群发消息,消息内空是daf。
复制代码
显示升级- [command]
- [advance_unit]
- x="47"
- y="5"
- [/advance_unit]
- [/command]
复制代码 它表示一个升级操作,要升级单位在(47,5)处。注:这包后面必须跟有一个[choose]包,以用于选择升级到哪个兵种(即使只有一个兵种这个[choose]不能少)。
升级时升级到哪个兵种- [command]
- [choose]
- value="0"
- [/choose]
- [/command]
复制代码 它表示升级时升级到哪个兵种。
选择
- [command]
- [input]
- value=1
- text=abcdef
- [/input]
- [/command]
复制代码 它表示是一个选择操作。在出来的菜单中选择#1(第二行)。
value:指的是选项菜单选择的那项索引。
text:指的是玩家输入文本(当前不支持)。
对话框显示逻辑
- game_events模式触发[message]。
- 发现[message]内有选项菜单,调用mp_sync::get_user_choice。
- 在实时状态下,mp_sync::get_user_choice显示玩家选择菜单,形成[input]块,并形成[command]写入记录器。在回放状态下,mp_sync::get_user_choice从记录器中读出[input]块。也就是说,不论是实时还是回放,mp_sync::get_user_choice都会形成一个[input]块。
重编
- [command]
- type=30
- [armory]
- city="15,33"
- diff="0,3,31,32,81,2,2,10,4"
- [/armory]
- [/command]
复制代码 它表示一次重编操作。要重编是发生在city指定城市内,diff字段指示此次重编后造成的部队变动情况。diff数值格式。对diff="0,3,31,32,81,2,2,10,4"来说,经过重编后,部队#0内有三个武将,分别是31、32、81;部队#2内有两个武将,分别是10、4。注:部队#1在重编过程中没变换。
|
|