Files
mir_server/server/LogicServer/script/interface/BoxDrop.pkg
aixianling 5c9f1dae4a init
2025-01-09 17:45:40 +08:00

96 lines
3.7 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**********************************************************************************************************************
脚本使用导出C++对象说明
对于.pkg中导出的对象脚本可以直接调用对象的方法而不是使用原来的"名词空间"."函数方法"
的方式来调用。
例如脚本已经保存了一个实体指针sysarg(Entity *),如果想获取实体句柄,调用方式为:
Actor.getHandle(sysarg)
如果Entity类导出到lua脚本中那么可以直接调用Entity的接口sysarg:getHandle()
!!! 注意:格式是"对象" + ":" + "方法" 。 是冒号,不是点!!!
下面写一个脚本创建宝箱掉落的脚本范例以后对于导出到脚本的C++对象,都可以如法炮制。
步骤:假设有一个名称为"粽子"的宝箱掉落
(1) 查询游戏中当前是否已经创建了此宝箱掉落,
local fileName = "data/config/item/scriptItemConfig/RollItemDrops/drops1.txt"" --爆率的配置位置
local dropName = "roll"..tostring(itemidx) --按名字索引的
local drop = System.getObjectVar(dropName)
(2) 如果"粽子对象不存在",创建之(调用宝箱掉落管理器的接口创建)
if (not drop) then
boxdrop = CBoxDropMgr:getSingleton():createBoxDrop(dropName) -- 这里会返回一个宝箱掉落对象(CBoxDrop)
if(boxdrop) then
boxdrop:load(fileName)
end
end
(3) 到此为止宝箱掉落对象已经存在。调用其drop()方法执行掉落
local items = drop:drop()
(4) 遍历掉落物品列表dropItemList
--遍历掉落列表
if ( items.itemCount > 0) then
for i=0, items.itemCount -1 do
Actor.addItem(sysarg, items.itemList[i].wItemId, items.itemList[i].btQuality,
items.itemList[i].btStrong,
items.itemList[i].btCount,items.itemList[i].btBind,"activity",1)
end
end
总结脚本使用C++导出对象,调用对象的成员方法使用的是冒号(:),访问对象成员遍历使用的是点(.)
***********************************************************************************************************************/
// C++导出脚本对象基类
class CBaseScriptExportObject
{
// 增加对象引用计数
int addRef();
// 减少对象引用计数。计数为0会删除对象
int release();
};
// 宝箱掉落对象
class CBoxDrop : public CBaseScriptExportObject
{
// 加载掉落配置数据(配置格式和怪物掉落配置格式一样,须单独文件形式)
// drops={
// { id=375 ,count=1,strong =0,quality =2,propability=1, group=1},
// { id=380 ,count=1,strong =0,quality =2,propability=1, group=1},
// { id=382 ,count=1,strong =0,quality =2,propability=1, group=1},
// }
void load(const char *pFile);
// 执行一次掉落
DropItemList drop(void * pEntity =0);
//按概率和执行掉落
DropItemList proabilityDrop(void * pEntity =0);
};
// 宝箱掉落管理器
class CBoxDropMgr
{
// 获取宝箱掉落管理器对象
static CBoxDropMgr& getSingleton();
// 创建一个指定名称的宝箱对象
CBoxDrop* createBoxDrop(const char *pKey);
};
// 掉落物品信息
class DropItemInfo
{
unsigned char btAwardType; // 奖励类型
unsigned short wItemId; // 物品id
unsigned char btQuality; // 物品品质
unsigned char btStrong; // 物品强化等级
unsigned char btBind; // 物品绑定属性
int btCount; // 物品数量
unsigned char btAuxParam; // 辅助参数
unsigned int nTime; // 剩余存在时间,秒为单位
unsigned short nQualityDataIndex; //生成极品属性
};
// 掉落物品列表(包含多个掉落物品)
class DropItemList
{
unsigned int moneyCount; // 金钱数目
unsigned int itemCount; // 物品数目
DropItemInfo itemList[MAX_DROP_ITEM_COUNT]; // 物品列表
};