96 lines
3.7 KiB
Plaintext
96 lines
3.7 KiB
Plaintext
|
|
/**********************************************************************************************************************
|
|||
|
|
脚本使用导出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]; // 物品列表
|
|||
|
|
};
|