11API文档
注意事项
需要确保在jass的main函数开始时立刻调用SetCameraBounds
API说明
妖豆相关
/*! @brief 获取玩家妖豆余额 @param p 玩家对象 @return 玩家妖豆余额 */ function YDWERPGBillingGetCommonCurrency takes player p returns integer /*! @brief 玩家妖豆消费 @param p 玩家对象 @param consume 消费金额 @return 消费是否成功 */ function YDWERPGBillingCommonConsume takes player p,integer consume returns boolean /*! @breif 玩家使用妖豆购买商品,该商品在作者后台配置。 @param p 玩家对象 @param productId 商品id,通过作者后台配置。 @return 扣款是否成功 @sa YDWECommonBuyQueryCost, YDWECommonBuyQueryStatus, YDWECommonBuyQueryItem, YDWECommonBuyQueryName */ function YDWECommonBuyProduct takes player p, integer productId returns boolean /*! @breif 查询商品的妖豆价格 @param productId 商品id,通过作者后台配置。 @return 商品价格,如果没有该商品则返回-1。 @sa YDWECommonBuyProduct */ function YDWECommonBuyQueryCost takes integer productId returns integer /*! @breif 查询商品在后台绑定的状态id @param productId 商品id,通过作者后台配置。 @return 商品在后台绑定的状态id,如果没有该商品则返回空字符串。 @sa YDWECommonBuyProduct */ function YDWECommonBuyQueryStatus takes integer productId returns string /*! @breif 查询商品在后台绑定的道具id @param productId 商品id,通过作者后台配置。 @return 商品在后台绑定的道具id,如果没有该商品则返回字符串。 @sa YDWECommonBuyProduct */ function YDWECommonBuyQueryItem takes integer productId returns string /*! @breif 查询商品在后台绑定的道具数量 @param productId 商品id,通过作者后台配置。 @return 商品在后台绑定的道具数量。 @sa YDWECommonBuyProduct */ function YDWECommonBuyQueryItemCount takes integer productId returns integer /*! @breif 查询商品在后台绑定的商品名 @param productId 商品id,通过作者后台配置。 @return 商品在后台绑定的道具id,如果没有该商品则返回字符串。 @sa YDWECommonBuyProduct */ function YDWECommonBuyQueryName takes integer productId returns string /*! @breif 查询商品在后台绑定的类型 @param productId 商品id,通过作者后台配置。 @return 商品在后台绑定的类型, 0-错误的商品id, 1-状态, 2-累加型道具。 @sa YDWECommonBuyProduct */ function YDWECommonBuyQueryType takes integer productId returns integer
道具与状态
/*! @brief 获取玩家状态 @param p 玩家对象 @param key 状态id @return 状态值 */ function YDWERPGBillingGetStatus takes player p, string key returns integer /*! @brief 判断玩家是否拥有状态值 @param p 玩家对象 @param key 状态id @return 玩家是否拥有状态值 */ function YDWERPGBillingHasStatus takes player p, string key returns boolean /*! @brief 获取玩家道具数量 @param p 玩家对象 @param key 道具id @return 玩家道具数量 */ function YDWERPGBillingGetItem takes player p, string key returns integer /*! @brief 判断玩家是否拥有道具 @param p 玩家对象 @param key 道具id @return 玩家是否拥有道具 */ function YDWERPGBillingHasItem takes player p, string key returns boolean /*! @brief 玩家使用道具 @param p 玩家对象 @param itemid 道具id @param amount 使用数量 @return 道具是否使用成功 */ native EXNetUseItem takes player p,string itemid,integer amount returns boolean
存档相关
注意:存档只保存本地玩家的数据。存档的请求会保存在队列中,每隔0.5秒向服务端发送5条请求。期间如果有相同的存档请求,新的存档请求会覆盖老的存档请求。
/*! @breif 获取玩家存档 @param p 玩家对象 @param rKey 存档名称 @return 存档内容 */ function YDWERPGGetRemoteData takes player p, string rKey returns string /*! @breif 修改玩家存档 @param p 玩家对象 @param rKey 存档名称 @param value 新存档的内容 @return 修改是否成功 */ function YDWESaveRemoteData takes player p, string Key ,string value returns boolean
随机只读存档相关
/*! @brief 查看随机只读存档是否存在 @param p 玩家对象 @param rkey 随机只读存档名 @return 随机只读存档是否存在 */ function YDWECheckRandSavExist takes player p,string rkey returns boolean; /*! @brief 向服务端请求发送生成随机只读存档,请求发送后可以在云脚本事件"DZBLU"中重新读取新的随机只读存档 @param p 玩家对象 @param rkey 存档名 @param gkey 组名 @return 生成请求是否发送成功 */ function YDWEGenRandSav takes player p,string rkey,string gkey returns boolean; /*! @brief 向服务端请求删除随机只读存档 @param p 玩家对象 @param rkey 存档名 @return 删除请求是否发送成功 */ function YDWEDelRandSav takes player p,string rkey returns boolean; /*! @brief 获取随机只读存档的值 @param p 玩家对象 @param rkey 存档名 @return 随机只读存档的值 */ function YDWEGetRandSavData takes player p,string rkey returns integer; /*! @brief 获取随机只读存档的组id @param p 玩家对象 @param rkey 存档名 @return 随机只读存档的组id */ function YDWEGetRandSavGroupId takes player p,string rkey returns string; /*! @brief 获取随机只读存档的时间戳 @param p 玩家对象 @param rkey 存档名 @return 随机只读存档的时间戳 */ function YDWEGetRandSavTimestamp takes player p,string rkey returns integer; /*! @brief 获取随机只读存档组的剩余写入次数 @param p 玩家对象 @param gkey 组id @return 组的剩余写入次数 */ function YDWEGetRandSavTriggerLimit takes player p,string gkey returns integer; /*! @brief 获取随机标准存档的剩余写入次数 @param p 玩家对象 @param key 标准存档名 @return 标准存档的剩余写入次数 */ function YDWEGetStdSavTriggerLimit takes player p,string key returns integer;
全局存档相关
/*! @brief 获取全局存档的值 @param p 玩家对象 @param key 全局存档名 @return 全局存档的值 */ function YDWEGetGlobalSav takes player p,string key returns string;
积分相关
/*! @breif 获取玩家积分 @param p 玩家对象 @param key 积分名 @return 玩家积分 */ function YDWERPGGetKey takes player p, string key returns integer /*! @breif 修改玩家积分 @param p 玩家对象 @param key 积分名 @param value 新积分的值 */ function YDWERPGSetKey takes player p, string key, integer value returns nothing /*! @breif 玩家积分累加 @param p 玩家对象 @param key 积分名 @param value 要累加的值 */ function YDWERPGAddKey takes player p, string key, integer value returns nothing /*! @breif 游戏结束,结算积分 @warning 当游戏结束时一定要调用该函数进行积分结算 */ function YDWERPGGameEnd takes nothing returns nothing
排行相关(关联的GameCache "11.rank")
//显示当前的排名种类名称
function YDWEGetRPGRankName takes nothing returns string
return GetStoredString(ranktable, "RankKey", "0" )
endfunction
/*!
@breif 设置当前的排名种类名称
@param 排名种类名称
*/
function YDWESetRPGRankName takes string name returns nothing
call StoreString(ranktable, "RankKey", "0", name)
endfunction
/*!
@breif 设置当前的排名种类名称
@param 排名种类名称
@warning 需要先调用YDWESetRPGRankName设置排名种类,否则使用默认的排名种类
*/
function YDWESetRPGRankName takes string name returns nothing
call StoreString(ranktable, "RankKey", "0", name)
endfunction
/*!
@brief 获取排名第rank名的玩家名字
@param rank 排名
@warning 需要先调用YDWESetRPGRankName设置排名种类,否则使用默认的排名种类
*/
function YDWEGetTopsName takes integer rank returns string
return GetStoredString(ranktable, "TopsName", I2S((rank)))
endfunction
/*!
@brief 获取排名第rank名的玩家分数
@param rank 排名
@return 排名第rank名的玩家分数
@warning 需要先调用YDWESetRPGRankName设置排名种类,否则使用默认的排名种类
*/
function YDWEGetTopsScore takes integer rank returns integer
return GetStoredInteger(ranktable, "TopsScore", I2S((rank)))
endfunction
/*!
@brief 获取玩家的排名
@param playerId 玩家ID
@return 玩家的排名
@warning 需要先调用YDWESetRPGRankName设置排名种类,否则使用默认的排名种类
*/
function YDWEGetPlayerRank takes integer playerId returns integer
return GetStoredInteger(ranktable, "PlayerRank", I2S(playerId))
endfunction
/*!
@brief 获取玩家的排名分数
@param playerId 玩家ID
@return 玩家的排名分数
@warning 需要先调用YDWESetRPGRankName设置排名种类,否则使用默认的排名种类
*/
function YDWEGetPlayerRankScore takes integer playerId returns integer
return GetStoredInteger(ranktable, "PlayerScore", I2S(playerId))
endfunction
成就相关
/*! @brief 存入用户成就 @param p 玩家对象 @param key 成就名 @param value 成就值 */ function YDWEStatRemoteData takes player p, string key ,string value returns boolean
地图统计数据
/*!
@brief 获取地图的各项统计数据
@param key 统计项
@return 统计项的值
@detail 目前支持的统计项如下
"Collection" - 收藏数
@example
//获取地图的收藏数
local integer collection = S2I(YDWERPGGetMapStatistics("Collection"));
//老版的YDWE可以这样使用
local integer collection = S2I(GetStoredString(ctable, "statistic", "Collection"));
*/
function YDWERPGGetMapStatistics takes string ckey returns string
玩家唯一ID获取(关联的GameCache "11.s")
/*! @brief 获取玩家的唯一ID @param playerId 玩家ID @return 玩家的唯一ID */ function YDWEGetPlayerUniqueKey takes integer playerId returns string return GetStoredString(ctable, "UniqueID", I2S(playerId)) endfunction
防刷分机制
积分防刷
在作者后台新建积分项时,可以根据地图的逻辑设置每局积分的累加上限,从而达到防刷的目的。
存档防刷
存档需要和积分进行逻辑上的关联来实现防刷的目的。比如我们可以设置一个积分项"ArcherLevel",设置若干存档项"Begineer", "Skilled", "Master",...。因为积分具有防刷机制,所有可以通过积分项来选择如何加载存档。 下面的例子展示了如何通过积分来加载不同的存档
/**!
@breif 等级模块,根据不同的ArcherLevel选择对应的存档进行读写操纵
@detail 1. 当中立生物被杀死时,累加玩家的击杀数。
2. 玩家每击杀动物两次升一级 1~2级为新手期(Beginner存档),3~10级为老手期(Skilled存档),10级以上为大师期(Master存档)
3. 玩家每次升级后清空存档中的击杀数量
*/
library ArcherLevel initializer InitArcherLevel requires YDWERPGScores
globals
integer array g_ArcherLevel
endglobals
private function InitArcherLevel takes nothing returns nothing
local integer idx = 0
loop
exitwhen idx>=bj_MAX_PLAYERS
set g_ArcherLevel[idx] = -1
set idx = idx+1
endloop
endfunction
/**!
@brief 读取积分,并对全局变量初始化
@param p 玩家对象
*/
function GetArcherLevel takes player p returns integer
local integer pid = GetPlayerId(p)
//如果使用时未初始化等级,则读取积分进行初始化
if g_ArcherLevel[pid] ==-1 then
set g_ArcherLevel[pid] = YDWERPGGetKey(p,"ArcherLevel")
endif
return g_ArcherLevel[pid]
endfunction
/**!
@brief 升级
@param p 玩家对象
*/
function AddArcherLevel takes player p returns nothing
local integer pid = GetPlayerId(p)
//如果使用时未初始化等级,则读取积分进行初始化
if g_ArcherLevel[pid] == -1 then
set g_ArcherLevel[pid] = YDWERPGGetKey(p,"ArcherLevel")
endif
set g_ArcherLevel[pid] = g_ArcherLevel[pid] + 1
call YDWERPGAddKey(p,"ArcherLevel", 1) //向服务端发送累加积分的请求
call BJDebugMsg(GetPlayerName(p)+" level "+I2S(g_ArcherLevel[pid]-1) + "->" + I2S(g_ArcherLevel[pid]))
endfunction
/**!
@brief 读取玩家的积分,并通过积分来推断使用的存档
@param p 玩家对象
@return 玩家在当前积分下能够使用的存档
*/
function GetPlayerSaveName takes player p returns string
local integer level = GetArcherLevel(p)
local string saveName = "Beginner"
//根据积分的等级获取正确的存档名,这样即使外挂修改了其他等级时的存档,也会因为等级的限制而无法使用
if level>=10 then
set saveName = "Master"
elseif level>=3 and level <10 then
set saveName = "Skilled"
else
set saveName = "Beginner"
endif
return saveName
endfunction
/**!
@brief 根据玩家的积分来获取对应的存档数据
@param p 玩家对象
*/
function GetPlayerSaveData takes player p returns string
local string saveName = GetPlayerSaveName(p)
call BJDebugMsg(GetPlayerName(p)+" get "+saveName)
return YDWERPGGetRemoteData(p,saveName) //获取存档数据
endfunction
/**!
@brief 根据玩家的积分来设置对应的存档数据
@param p 玩家对象
@param killCnt 击杀数量
*/
function SetPlayerSaveData takes player p, integer killCnt returns nothing
local string saveName = GetPlayerSaveName(p)
call YDWESaveRemoteData(p, saveName, I2S(killCnt)) //将击杀数量写入存档数据
call BJDebugMsg(GetPlayerName(p)+" save to "+saveName)
endfunction
/**!
@breif 当中立生物被杀死时,累加玩家的击杀数, 玩家每击杀动物两次升一级,1~2级为新手期(Beginner存档),3~10级为老手期(Skilled存档),10级以上为大师期(Master存档)
*/
function NeturalUnitKilled takes nothing returns nothing
local player p = GetOwningPlayer(GetKillingUnitBJ())
local integer killCnt = 0
local string saveName = GetPlayerSaveName(p)
call BJDebugMsg(GetPlayerName(p)+" killed animal")
set killCnt = S2I(GetPlayerSaveData(p))
//这里可以校验存档的内容是否符合逻辑
if killCnt>=10000 and saveName =="Beginner" then
call BJDebugMsg(GetPlayerName(p)+" killed too many animals")
endif
set killCnt = killCnt + 1
call SetPlayerSaveData(p,killCnt)
call BJDebugMsg(GetPlayerName(p)+" killed cnt: "+I2S(killCnt))
if killCnt >= 2 then
call AddArcherLevel(p)
call SetPlayerSaveData(p, 0)
endif
endfunction
endlibrary
游戏货币相关(不再对新地图开放)
/*! @brief 获取玩家游戏货币余额 @param p 玩家对象 @return 玩家游戏货币余额 */ function YDWERPGBillingGetCurrency takes player p returns integer /*! @brief 获取玩家游戏货币扣款 @param p 玩家 @param consume 消费金额 @return 扣款是否成功 */ function YDWERPGBillingConsume takes player p,integer consume returns boolean
消费妖豆示例
local player p = GetTriggerPlayer() //触发购买的玩家
local integer itemCost = 20 //商品价格
local integer currency = YDWERPGBillingGetCommonCurrency(p)//妖豆余额可以用于在游戏中展示
local boolean buyRet = YDWERPGBillingCommonConsume(p, itemCost)
if buyRet == true then
/*
妖豆消费成功使用道具的逻辑
*/
else
/*
妖豆不足时的逻辑
*/
endif
妖豆内购状态示例
local player p = GetTriggerPlayer() //触发购买的玩家
local integer productID = 56656 //商品id
local integer productCost = YDWECommonBuyQueryCost(productID)//商品价格可以用于在游戏中展示
local string statusID = YDWECommonBuyQueryStatus(productID) //商品在后台绑定的状态ID
local string productName = YDWECommonBuyQueryName(productID) //商品在后台绑定的商品名称
local boolean buyRet = YDWECommonBuyProduct(p, productID)
if buyRet == true then
/*
商品购买成功的逻辑
*/
else
/*
妖豆不足时的逻辑
*/
endif
云脚本相关接口
ExTriggerRegisterSyncData
注册云脚本事件
参数
| 参数名 | 类型 | 说明 |
|---|---|---|
| trig | trigger | 触发器对象 |
| prefix | string | 事件ID |
EXSendRmtScriptData
描述
发送脚本请求,脚本函数名长度应小于64个字符,传入的参数应小于800个字符,否则发送失败。
参数
| 参数名 | 类型 | 说明 |
|---|---|---|
| whichPlayer | player | 发送脚本请求的玩家 |
| param1 | string | 事件ID |
| param2 | string | 事件数据 |
返回
| 返回值 | 类型 | 说明 |
|---|---|---|
| - | boolean | 发送成功返回true,发送失败返回false |
EXGetTriggerSyncData
描述
云脚本事件触发后获取事件数据
返回
| 返回值 | 类型 | 说明 |
|---|---|---|
| - | string | 事件数据 |
EXGetTriggerSyncPlayer
描述
云脚本事件触发后获取触发事件的玩家
返回
| 返回值 | 类型 | 说明 |
|---|---|---|
| - | player | 触发事件的玩家 |