SceneDataDef.h
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:12k
源码类别:

模拟服务器

开发平台:

C/C++

  1. // ***************************************************************************************
  2. // 场景模块的一些数据定义
  3. // Copyright : Kingsoft 2002
  4. // Author    : wooy(wu yue)
  5. // CreateTime: 2002-11-11
  6. // ---------------------------------------------------------------------------------------
  7. // ***************************************************************************************
  8. #ifndef SCENEDATADEF_H_HEADER_INCLUDED_C225572F
  9. #define SCENEDATADEF_H_HEADER_INCLUDED_C225572F
  10. #define REGION_COMBIN_FILE_NAME_SERVER "Region_S.dat" //场景地图区域数据的服务器端版合并文件的文件名
  11. #define REGION_COMBIN_FILE_NAME_CLIENT "Region_C.dat" //场景地图区域数据的客户端版合并文件的文件名
  12. //场景地图数据文件,每个区域组织成若干个存储不同数据的文件,这些文件又以区域为单位,分别合并成一个集合文件
  13. //集合文件的格式如下:
  14. //1.先存储一个四字节的unsigned int数据,表示此合成文件中共包含几个子文件
  15. //2.存储子文件大小,以及开始开始偏移位置的信息结构的列表。有几个子文件就连续存有几个KCombinFileSection
  16. // 各子文件的偏移位置是从信息结构的列表之后的位置开始算起.
  17. struct KCombinFileSection
  18. {
  19. unsigned int uOffset; //单位:字节
  20. unsigned int uLength; //单位:字节
  21. };
  22. //3.子文件的存储次序,每个子文件对应于什么,由SCENE_FILE_INDEX里枚举给出解释。每个枚举值表示子文件在合并文件中的次序索引。
  23. enum SCENE_FILE_INDEX
  24. {
  25. REGION_OBSTACLE_FILE_INDEX = 0,//"OBSTACLE.DAT"障碍文件
  26. REGION_TRAP_FILE_INDEX, //"Trap.dat"
  27. REGION_NPC_FILE_INDEX, //"Npc_S.dat" or "Npc_C.dat"
  28. REGION_OBJ_FILE_INDEX, //"Obj_S.dat" or "Obj_C.dat"
  29. REGION_GROUND_LAYER_FILE_INDEX, //"Ground.dat"
  30. REGION_BUILDIN_OBJ_FILE_INDEX, //"BuildinObj.Dat"
  31. REGION_ELEM_FILE_COUNT
  32. };
  33. //4.存储子文件的数据。
  34. #define REGION_GROUND_LAYER_FILE "Ground.dat" //地表层信息二进制存储文件
  35. #define REGION_BUILDIN_OBJ_FILE "BuildinObj.Dat" //场景地图内建对象集合信息文件
  36. #define REGION_OBSTACLE_FILE "OBSTACLE.DAT" //障碍文件
  37. #define REGION_NPC_FILE_SERVER "Npc_S.dat"
  38. #define REGION_NPC_FILE_CLIENT "Npc_C.dat"
  39. #define REGION_OBJ_FILE_SERVER "Obj_S.dat"
  40. #define REGION_OBJ_FILE_CLIENT "Obj_C.dat"
  41. #define REGION_TRAP_FILE "Trap.dat" //事件点文件
  42. #define MAX_RESOURCE_FILE_NAME_LEN 128
  43. #define NOT_ABOVE_HEAD_OBJ 0xFFFF //并非高空对象
  44. enum IPOT_RENDER_LAYER
  45. {
  46. IPOT_RL_COVER_GROUND = 0x01, //平铺在地面上,在全部物体之下
  47. IPOT_RL_OBJECT = 0x02, //当前物体层
  48. IPOT_RL_INFRONTOF_ALL = 0x04, //在一切的上层
  49. IPOT_RL_LIGHT_PROP = 0x08, //此对象带有光源属性
  50. };
  51. //## 三维坐标
  52. struct KTriDimensionCoord
  53. {
  54. int x, y, z;
  55. };
  56. //■■■Ground.Dat地表层信息二进制存储文件■■■
  57. //按次序存储如下三部分内容:
  58. //1.文件头结构
  59. struct KGroundFileHead
  60. {
  61. unsigned int uNumGrunode; //地表格图形的数目
  62. unsigned int uNumObject; //紧贴地面的类似路面之类的对象的数目
  63. unsigned int uObjectDataOffset;
  64. };
  65. //2.存储KGroundFileHead::nNumGrunode个以KSPRCrunode结构表述的地表格图形
  66. struct KSPRCrunode//## 地表格图形信息。
  67. {
  68. struct KSPRCrunodeParam
  69. {
  70. unsigned short h, v; //此图形所在的(区域内)地表格坐标
  71. unsigned short nFrame; //引用图形的第几帧
  72. unsigned short nFileNameLen;//图形文件名长度(包括结束符),取值不可大于MAX_RESOURCE_FILE_NAME_LEN
  73. } Param;
  74. //## 图形文件名
  75. char szImgName[1]; //此结构为变长,实际长度为此结构中的nFileNameLen数值
  76. };
  77. //3.存储KGroundFileHead::nNumObject个以KSPRCoverGroundObj结构表述的紧贴地面对象
  78. //要求按照绘制的先后顺序排列好
  79. #pragma pack(push, 2)
  80. struct KSPRCoverGroundObj//## 表述紧贴地面的类似路面之类的对象结构。
  81. {
  82. //## 对象定位点在场景地图的坐标。单位(场景点坐标)
  83. int nPositionX; //横向坐标
  84. int nPositionY; //纵向坐标
  85. char szImage[MAX_RESOURCE_FILE_NAME_LEN]; //引用的图形的文件名。
  86. unsigned short nWidth; //图形横宽
  87. unsigned short nHeight;//图形纵宽
  88. //## 引用图形的第几帧
  89. unsigned short nFrame;
  90. //保留,为定值0
  91. union
  92. {
  93. unsigned char bReserved;
  94. unsigned char bRelateRegion;
  95. };
  96. //## 绘制次序(主)
  97. unsigned char bOrder;
  98. //## 绘制次序(次)
  99. short nLayer;
  100. };
  101. #pragma pack(pop)
  102. //■■■Ground.Dat地表层信息二进制存储文件--存储内容结束---■■■
  103. //■■■BuildinObj.Dat场景内建对象二进制存储文件■■■
  104. //按次序存储如下三部分内容:
  105. //1.文件头结构
  106. struct KBuildinObjFileHead
  107. {
  108. //## 区域中内建对象的数目
  109. unsigned int nNumBios; //nNumBios = nNumBiosTree + nNumBiosLine + nNumBiosPoint + nNumBiosAbove
  110. //## 以树方式排序的内建对象的数目
  111. unsigned short nNumBiosTree;
  112. //## 以底边方式排序的内建对象的数目
  113. unsigned short nNumBiosLine;
  114. //## 以点方式排序的内建对象的数目
  115. unsigned short nNumBiosPoint;
  116. //## 高空内建对象的数目
  117. unsigned short nNumBiosAbove;
  118. //## 高空对象最大的绘图次序编号。
  119. unsigned short nMaxAboveHeadObjOrder;
  120. unsigned short nNumBulidinLight;
  121. };
  122. //2.KBuildinObjFileHead::nNumBios个以KBuildinObj结构表述的场景内建对象
  123. //存储的顺序为:存储以点方式排序的全部对象;
  124. //再存储以底边方式排序的全部对象;
  125. //再存储按按树方式排序的全部对象;
  126. //再存储全部的高空对象
  127. struct KBuildinObj//## 表述场景地图上的内建对象的结构
  128. {
  129. //## 图形的属性
  130. unsigned int Props;//其值为枚举SPBIO_PROPS取值的组合
  131. //====图形相关====
  132. //四个图形点按逆时针方向摆列
  133. KTriDimensionCoord ImgPos1; //图形第一个点对应坐标点
  134. KTriDimensionCoord ImgPos2;
  135. KTriDimensionCoord ImgPos3;
  136. KTriDimensionCoord ImgPos4; //图形第四个点对应坐标点
  137. short nImgWidth; //图形贴图的宽(单位:像素点)
  138. short nImgHeight; //图形贴图的高(单位:像素点)
  139.     
  140. char  szImage[MAX_RESOURCE_FILE_NAME_LEN]; //图形资源的文件名
  141. unsigned int   uFlipTime; //当前帧切换出来的时间
  142.     unsigned short nFrame; //绘制的图形帧索引
  143. unsigned short nImgNumFrames;//此对象包含图形帧的数目
  144. unsigned short nAniSpeed; //动画的播放速度,值零表示为单帧图
  145. //====高空对象的绘图顺序====
  146. unsigned short nOrder;
  147. //====标记对象位置====
  148. KTriDimensionCoord oPos1;
  149. KTriDimensionCoord oPos2;
  150. float fAngleXY;
  151. float fNodicalY;
  152. };
  153. //■■■BuildinObj.Dat场景内建对象二进制存储文件--存储内容结束---■■■
  154. //## spbio对象的属性定义
  155. enum SPBIO_PROPS_LIST
  156. //##Documentation
  157. //## 平行于地表,不作受光切分。
  158. SPBIO_P_PLANETYPE_H = 0x00, 
  159. //##Documentation
  160. //## 平行于地表,且作受光切分。
  161. SPBIO_P_PLANETYPE_H_D = 0x01, 
  162. //##Documentation
  163. //## 垂直于地表,不作受光切分。
  164. SPBIO_P_PLANETYPE_V = 0x02, 
  165. //##Documentation
  166. //## 垂直于地表,且作受光切分。
  167. SPBIO_P_PLANETYPE_V_D = 0x03, 
  168. //##Documentation
  169. //## 图面类型定义值mask
  170. SPBIO_P_PLANETYPE_MASK = 0x03, 
  171. //##Documentation
  172. //## 不受光
  173. SPBIO_P_LIT_NONE = 0x00, 
  174. //##Documentation
  175. //## 按照切分受光
  176. SPBIO_P_LIT_DIV = 0x04, 
  177. //##Documentation
  178. //## 按照重心受光
  179. SPBIO_P_LIT_CENTRE = 0x08, 
  180. //##Documentation
  181. //## 平行受光
  182. SPBIO_P_LIT_PARALLEL = 0x0C, 
  183. //##Documentation
  184. //## 光照切分方式定义的mask
  185. SPBIO_P_LIT_MASK = 0x0C, 
  186. //##Documentation
  187. //## 不挡光
  188. SPBIO_P_BLOCK_LIGHT_NONE = 0x00, 
  189. //##Documentation
  190. //## 按照底边挡光
  191. SPBIO_P_BLOCK_LIGHT_BOTTOM = 0x10, 
  192. //##Documentation
  193. //## 按照一个圆挡光
  194. SPBIO_P_BLOCK_LIGHT_CIRCLE = 0x20, 
  195. //##Documentation
  196. //## 挡光方式定义值mask
  197. SPBIO_P_BLOCK_LIGHT_MASK = 0x30, 
  198. //##Documentation
  199. //## 档光半径为0.2
  200. SPBIO_P_BLOCK_L_RADIUS_2 = 0x00, 
  201. //##Documentation
  202. //## 档光半径为0.3
  203. SPBIO_P_BLOCK_L_RADIUS_3 = 0x40, 
  204. //##Documentation
  205. //## 档光半径为0.4
  206. SPBIO_P_BLOCK_L_RADIUS_4 = 0x80, 
  207. //##Documentation
  208. //## 档光半径为0.5
  209. SPBIO_P_BLOCK_L_RADIUS_5 = 0xC0, 
  210. //##Documentation
  211. //## 档光半径为数值mask
  212. SPBIO_P_BLOCK_L_RADIUS_MASK = 0xC0, 
  213. //##Documentation
  214. //## 按照点排序
  215. SPBIO_P_SORTMANNER_POINT = 0x0000, 
  216. //##Documentation
  217. //## 按照边排序
  218. SPBIO_P_SORTMANNER_LINE = 0x0100, 
  219. //##Documentation
  220. //## 按照树排序
  221. SPBIO_P_SORTMANNER_TREE = 0x0200, 
  222. //##Documentation
  223. //## 排序方式的mask
  224. SPBIO_P_SORTMANNER_MASK = 0x0300,
  225. //##Documentation
  226. //## 需要要加亮显示
  227. SPBIO_F_HIGHT_LIGHT = 0x0400,
  228. };
  229. //■■■Trap.dat场景事件点信息二进制存储文件■■■
  230. //按次序存储如下三部分内容:
  231. //1.文件头结构
  232. struct KTrapFileHead
  233. {
  234. unsigned int uNumTrap; //事件点的数目
  235. unsigned int uReserved[2]; //固定值为0
  236. };
  237. //2.存储KTrapFileHead::nNumTrap个以KSPTrap结构表述的地表事件点
  238. struct KSPTrap
  239. {
  240. unsigned char cX; //X位置
  241. unsigned char cY; //Y位置
  242. unsigned char cNumCell; //连续覆盖了几个小格子
  243. unsigned char cReserved; //保留,固定值为0
  244. unsigned int uTrapId; //根据事件关联文件名转化而得到的事件id标识
  245. };
  246. //■■■Trap.Dat场景事件点信息二进制存储文件--存储内容结束---■■■
  247. //■■■Npc_S.dat, Npc_C.dat地图上的npc存储文件■■■
  248. //按次序存储如下三部分内容:
  249. //1.文件头结构
  250. struct KNpcFileHead
  251. {
  252. unsigned int uNumNpc; //事件点的数目
  253. unsigned int uReserved[2]; //固定值为0
  254. };
  255. //2.存储KNpcFileHead::nNumNpc个以KSPNpc结构表述的npc
  256. struct KSPNpc
  257. {
  258. int nTemplateID; // 模板编号(对应模板文件"SettingsNpcS.txt",编号从 0 开始)
  259. int nPositionX;
  260. int nPositionY;
  261. bool bSpecialNpc; // 特殊npc
  262. char cReserved[3]; // 保留
  263. char szName[32]; // npc 名字
  264. short nLevel; // 等级
  265. short nCurFrame; // 载入时图像是第几帧
  266. short nHeadImageNo; // 头像图形编号
  267. short shKind; // npc类型
  268. unsigned char cCamp; // npc 阵营
  269. unsigned char cSeries; // npc 五行
  270. unsigned short nScriptNameLen; // Npc脚本文件名长度(包括结束符),取值不可大于MAX_RESOURCE_FILE_NAME_LEN
  271. char szScript[MAX_RESOURCE_FILE_NAME_LEN]; //Npc脚本文件名//此结构实际存储时为变长,实际长度为此结构中的nScriptNameLen数值
  272. };
  273. //■■■Npc_S.dat, Npc_C.dat地图上的npc存储文件--存储内容结束---■■■
  274. //■■■Obj_S.dat, Obj_C.dat地图上的Obj存储文件■■■
  275. //按次序存储如下三部分内容:
  276. //1.文件头结构
  277. struct KObjFileHead
  278. {
  279. unsigned int uNumObj; //事件点的数目
  280. unsigned int uReserved[2]; //固定值为0
  281. };
  282. //2.存储KObjFileHead::nNumObj个以KSPObj结构表述的Obj
  283. struct KSPObj
  284. {
  285. int nTemplateID; //模板编号(对应模板文件"SettingsObjData.txt",编号从1开始)
  286. short nState;
  287. unsigned short nBioIndex; //当bSkipPaint为真值时,此数据有效,否则为定值0
  288. KTriDimensionCoord Pos;
  289. char nDir;
  290. bool bSkipPaint; //是否忽略此obj的绘制
  291. unsigned short nScriptNameLen; //Obj脚本文件名长度(包括结束符),取值不可大于MAX_RESOURCE_FILE_NAME_LEN
  292. char szScript[MAX_RESOURCE_FILE_NAME_LEN]; //Obj脚本文件名//实际存储时为变长,实际长度为此结构中的nScriptNameLen数值
  293. };
  294. //■■■Obj_S.dat, Obj_C.dat地图上的npc存储文件--存储内容结束---■■■
  295. // 场景内建光源属性结构
  296. struct KBuildInLightInfo
  297. {
  298. KTriDimensionCoord oPos; // 光源坐标
  299. DWORD dwColor; // 光源颜色和亮度
  300. int nMinRange; // 最小半径
  301. int nMaxRange; // 最大半径
  302. int nCycle; // 循环周期,毫秒
  303. };
  304. #pragma pack(1)
  305. // 用于光照计算的颜色结构
  306. struct KLColor
  307. {
  308. //unsigned int r;
  309. //unsigned int g;
  310. //unsigned int b;
  311.     //unsigned int ReserveForAlign;
  312. unsigned short r;
  313. unsigned short g;
  314. unsigned short b;
  315.     unsigned short ReserveForAlign;
  316.     // 下面的代码导致很多的性能损失
  317. // KLColor()
  318. // {
  319. //        r = 0, g = 0, b = 0;
  320. // }
  321. //
  322. // KLColor(int rr, int gg, int bb)
  323. // {
  324. // r = rr, g = gg, b = bb;
  325. // }
  326. void SetColor(int rr, int gg, int bb)
  327. {
  328. r = rr, g = gg, b = bb;
  329. }
  330. void SetColor(DWORD dwColor)
  331. {
  332. r = (unsigned short)((dwColor>>16) & 0xff);
  333. g = (unsigned short)((dwColor>>8) & 0xff);
  334. b = (unsigned short)(dwColor & 0xff);
  335. }
  336. void Scale(float f)
  337. {
  338. r = (int)(r * f);
  339. g = (int)(g * f);
  340. b = (int)(b * f);
  341. }
  342. DWORD GetColor()
  343. {
  344. return 0xff000000 | (r<<16) | (g<<8) | b;
  345. }
  346. const KLColor& operator+=(KLColor& color)
  347. {
  348. r += color.r, g += color.g, b += color.b;
  349. return *this;
  350. }
  351. const KLColor operator+(KLColor& color)
  352. {
  353. KLColor c;
  354. c.r += r + color.r, c.g += g + color.g, c.b += b + color.b;
  355. return c;
  356. }
  357. };
  358. #pragma pack()
  359. #endif /* SCENEDATADEF_H_HEADER_INCLUDED_C225572F */