在entity_defs文件夹下的types.xml文件添加自定义类型
<root>
<!--数据类型的名字 记得要加上FIXED_DICT-->
<RoleInfo>FIXED_DICT
<Properties>
<!--角色名字-->
<RoleName>
<!--名字为字符串 用UNICODE -->
<Type> UNICODE </Type>
</RoleName>
<!--角色血量-->
<RoleHP>
<!--血量为整数 用UINT32-->
<Type> UINT32 </Type>
</RoleHP>
</Properties>
</RoleInfo>
</root>
定义好就可以在*.def文件里面使用了
列:
<root>
<ClientMethods>
<!--定义一个客户端方法-->
<onGetRoleInfo>
<!--使用刚刚定义的数据类型-->
<Arg>RoleInfo</Arg>
</onGetRoleInfo>
</ClientMethods>
<BaseMethods>
<!--定义一个服务端方法-->
<GetRoleInfo>
<!--导出方法否则客户端无法调用此方法-->
<Exposed/>
</GetRoleInfo>
</BaseMethods>
<CellMethods>
</CellMethods>
</root>
服务器端
def GetRoleInfo(self):
roleInfo={
"RoleName":"Admin",
"RoleHP":100
}
#调用客户端的onGetRoleInfo 并把数据传过去
self.client.onGetRoleInfo(roleInfo)
客户端:
//在你定义的def名+Base实现(比如AccountBase)
//继承AccountBase 并实现里面的方法
void __init__(){
//注册GetRoleInfo方法
//调用方法时用KBENGINE_EVENT_FIRE("GetRoleInfo",UKBEventData*)
KBENGINE_REGISTER_EVENT_OVERRIDE_FUNC("GetRoleInfo","GetRoleInfo",[this](const UKBEventData* EventData)
{
pBaseEntityCall->GetRoleInfo();
});
}
//当你执行KBENGINE_EVENT_FIRE("GetRoleInfo",UKBEventData*)时服务器会调用到此方法
void onGetRoleInfo(const RoleInfo arg1){
//在此实现你的需求
}