map_static_data.proto 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. syntax = "proto3";
  2. option go_package = "/pb";
  3. package pb;
  4. //{slgeditor}这个标签是地图编辑器相关。
  5. //{slgeditor enter=MapData }
  6. // 地图数据主消息
  7. message MapData {
  8. // 地图基本信息
  9. MapInfo map_info = 1;
  10. //{slgeditor param=MapData.tiles fill=array from=cells } 用这个标签表示这个数组按NxN格子填充
  11. //地块(格子)数据数组
  12. //索引计算公式:index = y * width + x
  13. repeated TileData tiles = 2;
  14. //{slgeditor param=MapData.castles fill=map from=instances key=center globalTagInv=BuildingType globalTagInvVelue=0|10} 用对象列表中对象公共属性 BuildingType != 0 的对象填充列表,
  15. //系统城
  16. //系统城
  17. map<int32,CastleData> castles = 4;
  18. //跨洲寻路概览
  19. //{slgeditor param=MapData.path_summary}
  20. CrossStatePathSummary path_summary = 9;
  21. // 元数据,编辑器专用,方便定位修改记录
  22. MapMetadata metadata = 10;
  23. }
  24. // 地图基本信息
  25. message MapInfo {
  26. //{slgeditor param=MapInfo.map_id src=global path=map_id}
  27. //地图
  28. int32 map_id = 1;
  29. //{slgeditor param=MapInfo.version_code src=global path=version_code}
  30. // 地图版本号
  31. int32 version_code = 2;
  32. //{slgeditor param=MapInfo.width src=global path=mapwith}
  33. // 地图宽度(格子数)
  34. int32 width = 3;
  35. //{slgeditor param=MapInfo.height src=global path=mapwith}
  36. // 地图高度(格子数)
  37. int32 height = 4;
  38. // 场景名称
  39. string unity_scene_name =5 ;
  40. //{slgeditor param=MapInfo.map_name src=global path=map_name}
  41. // 地图名称
  42. string map_name = 6;
  43. // 地图描述
  44. string description = 7;
  45. }
  46. // 格子数据
  47. message TileData {
  48. //{slgeditor param=TileData.coord_index src=cell kind=pos} cell这种类型的情况,cell=pos导出格子的位置。
  49. // 格子索引(行优先顺序)
  50. // 索引计算公式:index = y * width + x
  51. // 索引从0开始,最大值为 (width * height - 1)
  52. int32 coord_index = 1;
  53. //{slgeditor param=TileData.county_id src=cell kind=area} cell这种类型的情况,cell=area 导出区域信息 反正就是导出最低一层是区域。简单来说,导出json的时候建筑有 Area0 Area1 Area2.反正就是最低一层所在的区域节点。
  54. // 所在县组合规则:
  55. //例如 1 001 001
  56. //州ID(001-999) + 省ID(001-999) + 县(001-999) //相当于原json Area1 + Area2 + Area3
  57. // Area2
  58. int32 county_id = 2;
  59. //{slgeditor param=TileData.terrain src=cell kind=ground }//这个意思是把地图碰撞值放在这里,就是那个山,水,地面那个
  60. // 地形类型
  61. TerrainType terrain = 3;
  62. //{slgeditor param=TileData.block_type src=cell kind=walkabletag} // 这个就是当前格子的地面信息是否地面可放置层。
  63. //是否静态固定阻挡
  64. MapWalkableTag block_type = 4;
  65. //{slgeditor param=TileData.castle_center src=cell kind=center globalTagInv=BuildingType globalTagInvVelue=0|10 default=-1} //这个表示检查当前格子是否被某种instance占用,包括Point,Offset.如果有,这里是instance的center,否则则是defaul值-1
  66. //系统物件中心点,坐标索引,没有就是-1
  67. int32 castle_center = 5;
  68. //{slgeditor param=TileData.is_state_boundary src=cell kind=gperimeter}
  69. //是否州界
  70. bool is_state_boundary = 6;
  71. }
  72. //行走动态标签tag
  73. enum MapWalkableTag
  74. {
  75. //不可行走
  76. mwt_disable = 0;
  77. //可行走
  78. mwt_enable = 1;
  79. //动态区域,区域通道占位点的格子标志这个
  80. mwt_dymamic = 2;
  81. }
  82. //系统城/卫城/关隘/渡口/码头
  83. // 2026.1.14 策划说码头是一个整体,只有一个血条,因此合并系统城/卫城/关隘/渡口/码头数据
  84. message CastleData
  85. {
  86. //中心点 换算公式 index = y * width + x
  87. //{slgeditor param=CastleData.center src=instance prop=pos} // 所有Vector2In都映射成 y * width + x
  88. int32 center = 1;
  89. //{slgeditor param=CastleData.config_id src=instance prop=exportId} // 就是导出Instance的id
  90. //配置Id
  91. int32 config_id = 2;
  92. //{slgeditor param=CastleData.occupied_coords src=instance prop=offsets}
  93. //占据面积(位置索引的集合),不含子建筑(卫城等)
  94. repeated int32 occupied_coords = 3;
  95. //{slgeditor param=CastleData.parent src=instance prop=parent}
  96. //父建筑数据(如有),坐标索引
  97. int32 parent = 4;
  98. //{slgeditor param=CastleData.childs src=instance prop=childs}
  99. //子建筑数据(如有),坐标索引列表
  100. repeated int32 childs = 5;
  101. //{slgeditor param=CastleData.appearance_index src=instance prop=AppearanceIndex} // 外观索引
  102. //外观索引
  103. int32 appearance_index = 6;
  104. //{slgeditor param=CastleData.tag_TilePoints fill=map_entry key=1 path=GarrisonPoint}
  105. //{slgeditor param=CastleData.tag_TilePoints fill=map_entry key=2 path=MainForce} // 将自定义点数组写入 tag_TilePoints[1].TilePoints.list(自动从 TilePoints 的 point_list_field 配置获取字段名)
  106. //{slgeditor param=CastleData.tag_TilePoints fill=map_entry key=3 path=SiegeSquad}
  107. //{slgeditor param=CastleData.tag_TilePoints fill=map_entry key=4 path=SiegePoints}
  108. //{slgeditor param=CastleData.tag_TilePoints fill=map_entry key=5 path=PassageWay}
  109. //{slgeditor param=CastleData.tag_TilePoints fill=map_entry key=6 path=Wall}
  110. //标签坐标列表,如驻守点等
  111. // Protobuf 的 map key 不支持 enum,改用 int32(存 MapRuleTag 的数值)
  112. map<int32,TilePoints> tag_TilePoints = 7;
  113. //系统对象类型(系统城、卫城、关隘、渡口、码头)
  114. //{slgeditor param=CastleData.sys_type src=tag name=BuildingType}
  115. SysObjType sys_type = 8;
  116. }
  117. //策划动态添加的tag
  118. enum MapRuleTag
  119. {
  120. //无,默认值
  121. mrt_none = 0;
  122. //驻守点
  123. mrt_garrison_point = 1;
  124. //攻城主力站位
  125. mrt_main_force = 2;
  126. //拆迁队站位
  127. mrt_siege_squad = 3;
  128. //攻城交战位置(与守军交战的位置)
  129. mrt_siege_Points = 4;
  130. //通道,关隘/渡口/码头等需要
  131. mrt_passageway = 5;
  132. //城墙
  133. mrt_wall = 6;
  134. }
  135. // 地形/地表类型
  136. enum TerrainType {
  137. tt_none = 0;
  138. tt_grass = 1; //草地
  139. tt_mountain = 2; //山
  140. tt_water=3; //水
  141. tt_snowfield = 4; //雪地
  142. tt_desert = 5; //沙漠
  143. tt_wall = 10;//城墙
  144. tt_foundation=20; //联盟驻地城内地基
  145. }
  146. // 系统对象(系统城/卫城/关卡/码头)类型
  147. enum SysObjType{
  148. so_none = 0; //无
  149. so_castle = 1; //系统城
  150. so_moutain_pass = 2 ; //关隘
  151. so_river_crossing = 3; //渡口
  152. so_dock = 4; //码头
  153. so_town = 5; //卫城
  154. }
  155. // 地图元数据
  156. message MapMetadata {
  157. // 创建时间(Unix时间戳)
  158. int64 created_time = 1;
  159. // 修改时间(Unix时间戳)
  160. int64 modified_time = 2;
  161. // 作者
  162. string author = 3;
  163. // 编辑器版本
  164. string editor_version = 4;
  165. // 备注
  166. string notes = 5;
  167. // 标签
  168. repeated string tags = 6;
  169. }
  170. //----------------------------------------------------------------
  171. //跨州寻路
  172. //跨州寻路参考
  173. message CrossStatePathSummary
  174. {
  175. //{slgeditor param=CrossStatePathSummary.one_way_path fill=map from=areaMap areaLevel=1} 这是一个跨区域寻路字典,以区域第1层划分区域。 areaLevel=i,就是区域以哪级为主。
  176. //遍历所有区域创建字典one_way_path[区域Id]
  177. //key为起始州Id
  178. map<int32,AreaStateTarget> one_way_path = 1;
  179. }
  180. //州目标
  181. message AreaStateTarget
  182. {
  183. //查找所有建筑,当拥有PassageWay自定义点数据集合,并且查询第一个点和最后一个点
  184. //如果第一个点是属于当前区域,则添加PassageWay的点的数组到字典。
  185. //如果第而个点是属于当前区域,则添加PassageWay的点的顺序反转的数组数组到字典。
  186. //以此表示当前两个区域连续。
  187. //支持多条路径:同一个目标区域可以有多个通道点实例,每个实例生成一条路径,所有路径存储在TilePathList中
  188. //{slgeditor param=AreaStateTarget.targets fill=map from=areaPath path=PassageWay areaLevel=1} // 自动从 TilePathList 和 TilePoints 的 point_list_field 配置获取字段名
  189. map<int32,TilePathList> targets = 1;
  190. }
  191. //多条路径列表
  192. //{slgeditor point_list_field=path_list message=TilePathList} // 指定 TilePathList 消息中用于存储路径列表的字段名
  193. message TilePathList
  194. {
  195. //多条路径列表
  196. //{slgeditor param=TilePathList.path_list fill=array manual=true} // 手动填充,不需要映射规则
  197. repeated TilePoints path_list =1 ;
  198. }
  199. //路径点(坐标索引)列表
  200. //{slgeditor point_list_field=points message=TilePoints} // 指定 TilePoints 消息中用于存储点列表的字段名
  201. message TilePoints
  202. {
  203. repeated int32 points =1 ;
  204. }