• kbengine定义实体


    定义实体

    什么时候需要定义实体:

    需要进行数据存储。
    能够方便的远程访问。
    需要引擎管理和监控, 例如: AOI、Trap、等等。
    当灾难发生后服务端可以自动进行灾难的恢复。
    

    什么时候需要定义实体的属性:

    需要进行数据存储。
    实体被迁移后数据仍然有效(仅cellapp会迁移实体,比如跳转场景)。
    当灾难发生后服务端可以自动进行灾难的恢复。
    

    什么时候需要定义实体的方法:

    能够方便的远程访问。
    

    您需要执行以下步骤:

    1. 注册实体

      目录地址 : demo/scripts/entities.xml

      例子:

       <root>
           <Account/>
           <Avatar/>
           <Spaces/>
           <Space/>
           <Monster/>
           <NPC/>
           <Gate/>
       </root>
      
    2. demo/scripts/entity_defs目录下创建一个定义文件

      例子: Account.def

    3. 你可能需要定义一些属性和方法

      1. demo/scripts/目录下有三个子目录(base、cell、client),你可以根据需要添加Account.py。

      2. 不是每个实体都存在(client, base, cell)这三个部分, 你可以根据需要做出一些选择。


    定义文件的格式

    <root>
    	<Properties>
    		// 属性名称
    		<accountName>
    			// 属性类型
    			<Type>			UNICODE				</Type>
    			
    			// (可选)
    			// 属性的自定义协议ID,如果客户端不使用kbe配套的SDK来开发,客户端需要开发跟kbe对接的协议,
    			// 开发者可以定义属性的ID便于识别,c++协议层使用一个uint16来描述,如果不定义ID则引擎会使用
    			// 自身规则所生成的协议ID, 这个ID必须所有def文件中唯一
    			<Utype>			1000				</Utype>
    
    			// 属性的作用域 (参考下方:属性作用域章节)
    			<Flags>			BASE				</Flags>
    			
    			// (可选)
    			// 是否存储到数据库 
    			<Persistent>		true				</Persistent>
    			
    			// (可选)
    			// 存储到数据库中的最大长度 
    			<DatabaseLength> 	100				</DatabaseLength>
    			
    			// (可选, 不清楚最好不要设置)
    			// 默认值 
    			<Default>		kbengine			</Default>
    			
    			// (可选)
    			// 数据库索引, 支持UNIQUE与INDEX
    			<Index>			UNIQUE				</Index>
    		</accountName>
    		
    		...
    		...
    	</Properties>
    
    	<ClientMethods>
    		// 客户端暴露的远程方法名称
    		<onReqAvatarList>
    			// 远程方法的参数
    			<Arg>			AVATAR_INFOS_LIST		</Arg>
    			<Utype>			1001				</Utype>
    		</onReqAvatarList>
    
    		...
    		...
    	</ClientMethods>
    
    	<BaseMethods>
    		// Baseapp暴露的远程方法名称
    		<reqAvatarList>
    			// cell暴露方法必须存在这个标记
    			<Exposed/> 
    			<Utype>			1002				</Utype>
    		</reqAvatarList>
    		
    		...
    		...
    	</BaseMethods>
    
    	<CellMethods>
    		// Cellapp暴露的远程方法名称
    		<hello>
    			<Utype>			1003				</Utype>
    		</hello>
    	</CellMethods>
    
    </root>
    

    例子: 在客户端中调用base方法获得角色列表(Account.py):

     self.base.reqAvatarList()
    

    属性作用域

    [类型]			[client]		[base]			[cell]
    BASE			-			*			-
    BASE_AND_CLIENT		*			*			-
    CELL_PRIVATE		-			-			*(cell)
    CELL_PUBLIC		-			-			*(cells)
    CELL_PUBLIC_AND_OWN	*(client)		-			*(cells)
    ALL_CLIENTS		*(clients)		-			*(cells)
    OWN_CLIENT		*(client)		-			*(cell)
    OTHER_CLIENTS		*(other clients)	-			*(cells)
    
  • 相关阅读:
    两数相加(B站看视频总结)
    正则表达式基础1
    C语言程序的错误和警告
    C语言运算符优先级和结合性一览表
    逻辑运算符及其优先级,C语言逻辑运算符及其优先级详解
    C 语言实例
    电脑不显示桌面怎么办?
    135编辑器安卓客户端
    C语言实例-大小写字母间的转换
    C 语言实例
  • 原文地址:https://www.cnblogs.com/txbabys/p/4137037.html
Copyright © 2020-2023  润新知