11平台RPG地图接入API手册(更新于20260209)
实现原理
该项功能基于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
//获取11平台创建房间时的游戏模式
function GetYYPlatformGameMode takes nothing returns string
return GetStoredString(drx,"_YYPlatform","Room_GameMode")
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:"HeroDead"+死去玩家槽位id
value:英雄自动复活需要的时间(单位:秒)
玩家对英雄进行买活操作后
key:"HeroBuy"+买活玩家槽位id
value:下次买活的回复时间(单位:秒)
肉山被击杀时
key:"Roshan"
value:0-表示近卫击杀, 1-表示天灾击杀
信使被击杀时
key:"Courier"+信使所属的玩家槽位id
value:击杀者槽位id
玩家正补数量同步(每隔一段时间调用一次,作为参考dota每150秒调用一次)
key:"CSK"+玩家槽位id
value:正补数
玩家反补数量同步(每隔一段时间调用一次,作为参考dota每150秒调用一次)
key:"CSD"+玩家槽位id
value:反补数
玩家击杀野怪数量同步(每隔一段时间调用一次,作为参考dota每150秒调用一次)
key:"NK"+玩家槽位id
value:击杀野怪数
兵营被推倒时
key:"Rax"+["0": 近卫, "1": 天灾] + ["0": 上路, "1": 中路, "2": 下路] + ["0": 法师塔, "1": 近战塔]
value:推倒者槽位id
例如:"Rax000" 近卫上路法师塔
基地血量上报(建议在 10%,25%,50%,75%时上报一次)
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:英雄的伤害值
初始化GameCache(dr.x)之后
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: "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: 玩家金钱数,通过PLAYER_STATE_RESOURCE_GOLD获取
游戏胜负判断之前,更新玩家野怪的杀死数
p:玩家对应的player对象
key: "7"
value: 玩家野怪的杀死数
游戏胜负判断之前,更新玩家身上的装备
p:玩家对应的player对象
key: "8_"
value: 玩家身上的装备id,通过GetItemTypeId获取
注: ""的取值从范围为[0,5]对应六件装备,如"8_0", "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
获取玩家官方RPG积分
相关接口(参照预定义代码)
function GetOfficalRPGScoreStr takes player p, string keyName returns string
获取游戏局数
p:玩家对应的player对象
keyName:"rpg_gamec"
获取游玩时间
p:玩家对应的player对象
keyName:"rpg_gametime"
玩家的官方RPG配置
相关概念
针对地图的一系列数据,对玩家只读,每个一段时间会根据后台规则刷新。
相关接口(参照预定义代码)
function GetOfficalRPGConf takes player p, string keyName returns string
获取配置信息
p:玩家对应的player对象
keyName:在作者后台做的配置