该项功能基于jass的GameCache的机制实现。当创建了指定名字(案例中为"dr.x",这个名字可以由作者自定义,但是格式只能为“**.x”,例如"aa.x","bb.x","ab.x"都是可以的)的GameCache后,平台就会对这个对象进行接管。当调用这个对象的GetStoreInteger,StoreInteger等一些列的接口时,就可以向平台的服务端提交或者读取数据。 注意:所有的服务端数据都会在游戏加载时进行下发,由于服务端的延迟问题,所以在使用Get系列的接口时,尽可能在游戏加载完成3~5秒后再使用,以避免无法获取的问题。
这里将插入一部分代码块,来对平台的GameCache进行封装。作者可以直接将这块代码复制粘贴到地图的jass代码中,后续的文档也将基于这部分代码来进行使用说明。
globals
gamecache drx //全局的gamecache
endglobals
//调用initCache初始化gamecache
function initCache takes nothing returns nothing
call FlushGameCache(InitGameCache("dr.x"))
set drx=InitGameCache("dr.x")
endfunction
//定义该函数,在下面的事件中(战斗实时事件)传入指定的参数
function ServerCommtGameData takes string key,integer value returns nothing
call StoreInteger(drx,"Data",key,value)
endfunction
//定义该函数,在下面的事件中(战斗统计事件)传入指定的参数
function ServerCommtPlayerData takes player p,string key,integer value returns nothing
local string id=I2S(GetPlayerId(p))
call StoreInteger(drx,id,key,value) //变量drx表示名为"dr.x"的GameCache对象
endfunction
//定义该函数,在下面的事件中(4.*)传入指定的参数,用户获取11平台的改键信息
function QueryYYHotKey takes string keyType, integer keyValue returns string
return GetStoredString(drx,keyType,keyValue)
endfunction
//定义该函数,可以获取玩家的官方RPG积分数据(字符串类型)
function GetOfficalRPGScoreStr takes player p, string keyName returns string
local integer pid = GetPlayerId(p)
return GetStoredString(drx,"OfficalRpgScore",I2S(pid)+"@"+keyName)
endfunction
//定义该函数,可以获取玩家的官方RPG配置
function GetOfficalRPGConf takes player p, string keyName returns string
local integer pid = GetPlayerId(p)
return GetStoredString(drx,"OfficalRpgConf",I2S(pid)+"@"+keyName)
endfunction
//判断平台是否有新的改键数据生成
function IsYYHotKeyEdited takes nothing returns boolean
return GetStoredString(drx,"HotKeyStatus","IsEdited")=="1"
endfunction
//判断平台改键数据状态
function ResetYYHotKeyEdited takes nothing returns nothing
call StoreString(drx,"HotKeyStatus","IsEdited","0")
endfunction
/*
每隔一段时间调用这个函数来轮询平台的改键是否发生变化,如果发生变化则进行相应处理后重置改键数据状态
*/
function OnTimingCheckYYHotKey takes nothing returns nothing
local boolean isHotKeyEdited = IsYYHotKeyEdited()
if isHotKeyEdited then
//在这里添加当改键数据发生变化时的处理
call ResetYYHotKeyEdited()
endif
endfunction
/*
禁用或启用11平台的改键,war3仍然会显示改键按钮,但是实际改键不生效,如需隐藏改键按钮则需要修改房间配置
参数 isEnable: “0”-禁用,“1”-启用
*/
function EnableYYHotKey takes string isEnable returns nothing
call StoreString(drx,"HotKeyStatus","IsEnable", isEnable)
endfunction
0: 近卫 [1,5]: 玩家1~5 6: 天灾 [7,11]: 玩家6~10
/*! @breif 需要在地图初始化后调用,否则上述的代码块都会失效。 */ function initCache takes nothing returns nothing
function ServerCommtGameData takes string key,integer value returns nothing;
key:“C”+"K"+玩家的正补数+“D”+玩家的反补数+“N”+玩家野怪的杀死数 value:玩家槽位id,通过GetPlayerId(GetTriggerPlayer()) 获取
key:“Assist”+助攻者槽位id value:死去玩家槽位id,通过GetPlayerId(GetTriggerPlayer()) 获取
key:“Hero”+死去玩家槽位id value:击杀者槽位id,通过GetPlayerId(GetTriggerPlayer()) 获取
key:"Roshan" value:0-表示近卫击杀, 1-表示天灾击杀
key:"Courier"+信使所属的玩家槽位id value:击杀者槽位id
key:"CSK"+玩家槽位id value:正补数
key:"CSD"+玩家槽位id value:反补数
key:"NK"+玩家槽位id value:击杀野怪数
key:"Rax"+["0": 近卫, "1": 天灾] + ["0": 上路, "1": 中路, "2": 下路] + ["0": 法师塔, "1": 近战塔] value:推倒者槽位id 例如:"Rax000" 近卫上路法师塔
key:"Tree"-世界树,"Throne"-冰封王座 value:血量百分比
key:"Tower"+["0": 近卫, "1": 天灾] + ["1": 上路, "2": 中路, "3": 下路, "4": 基地旁] + ["0": 外塔, "1": 中塔, "2": 高地塔] value:推倒者槽位id 例如: "Tower010" 近卫上路外塔
key:"Level"+等级值 value:英雄所属玩家槽位id
key: "GameStart" value: 1
key: "Damage"+造成伤害的英雄槽位id value:英雄的伤害值
key: "MapDamageOpen" value:1-使用地图上传英雄伤害 0-使用war3计算英雄伤害
key: "Talent"+玩家槽位id value: 代表一层天赋的选择情况。 十位数表示天赋的层数,从1开始。个位数表示该层天赋的选择情况,0-没有天赋 1-左侧天赋 2-右侧天赋 例如:key="Talent1" value=11 表示槽位id为1的玩家选择的10级天赋为左侧。
function ServerCommtPlayerData takes player p,string key,integer value returns nothing
p:玩家对应的player对象 key: "9" value: 英雄单位id,通过GetUnitTypeId获取
p:玩家对应的player对象 key: "1" value: 玩家杀人数
p:玩家对应的player对象 key: "2" value: 玩家死亡数
p:玩家对应的player对象 key: "3" value: 玩家正补总数
p:玩家对应的player对象 key: "4" value: 玩家反补总数
p:玩家对应的player对象 key: "5" value: 玩家助攻总数
p:玩家对应的player对象 key: "6" value: 玩家金钱数,通过PLAYERSTATERESOURCE_GOLD获取
p:玩家对应的player对象 key: "7" value: 玩家野怪的杀死数
p:玩家对应的player对象 key: "8" value: 玩家身上的装备id,通过GetItemTypeId获取 注: ""的取值从范围为[0,5]对应六件装备,如”80“, "8_1"...
p:玩家对应的player对象 key: "9" value: 英雄单位id,通过GetUnitTypeId获取
native StoreInteger takes gamecache cache, string missionKey, string key, integer value returns nothing
cache:drx(定义在全局变量中的名为“dr.x”的gamecache) missionKey:"Global" key:"Winner" value:1-近卫,2-天灾
function QueryYYHotKey takes string keyType, integer keyValue returns string
keyType:"ItemKey"-物品栏改键 "SkillKey"-技能改键 keyValue:物品栏/技能序号,从0开始
物品栏序号排列方式: 0 1 2 3 4 5 技能序号排列方式: 8 9 10 11 7 4 5 6 0 1 2 3
function GetOfficalRPGScoreStr takes player p, string keyName returns string
p:玩家对应的player对象 keyName:"rpggamec"
p:玩家对应的player对象 keyName:"rpg_gametime"
针对地图的一系列数据,对玩家只读,每个一段时间会根据后台规则刷新。
function GetOfficalRPGConf takes player p, string keyName returns string
p:玩家对应的player对象 keyName:在作者后台做的配置