map.go 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. package constant
  2. import (
  3. "f1-game/internal/enum"
  4. ctime "github.com/cherry-game/cherry/extend/time"
  5. )
  6. const (
  7. MapCreateMainCityNumber = 10 // 尝试创建主城次数,失败则返回
  8. MapMoveSpeedMin = 1000 // 最小移动速度
  9. MapTileMeetBattleCount = 5 // 单次触发遭遇战的数量
  10. MapLeastStartWarMinite = 1 // 最少宣战时间
  11. MapInitObjectID = 10000 // 初始化对象ID
  12. MapCastleSiegeTime = 60 * ctime.MillisecondsPerMinute // 攻城持续时间
  13. MapLeastCastleSiegeTime = 1 * ctime.MillisecondsPerMinute // 最少攻城持续时间
  14. MapMaxTileRetreat = 30 // 最大撤退数
  15. MapDefaultStateID = 1 // 默认出生州
  16. MapLeastSiegeWaitTime = 10 * ctime.MillisecondsPerSecond // 最少攻城等待时间
  17. MapLeastSnatchWaitTime = 10 * ctime.MillisecondsPerSecond // 最少掠夺等待时间
  18. MapLeastDiscardWaitTime = 10 * ctime.MillisecondsPerSecond // 最少放弃等待时间
  19. MapLeastOccupyWaitTime = 10 * ctime.MillisecondsPerSecond // 最少占领等待时间
  20. MapLeastBattleWaitTime = 1 * ctime.MillisecondsPerSecond // 最少战斗等待时间
  21. MapMaxBattleWaitTime = 30 * ctime.MillisecondsPerSecond // 最大战斗等待时间,毕竟状态卡死
  22. )
  23. const (
  24. MapMainForceWaitTimePart1 = ctime.MillisecondsPerSecond // 主力出击第一阶段等待时间
  25. MapMainForceWaitTimePart2 = 10 * ctime.MillisecondsPerSecond // 主力出击第二阶段等待时间
  26. MapSiegeSquadWaitTimePart1 = 5 * ctime.MillisecondsPerSecond // 拆迁队出击第一阶段等待时间
  27. MapSiegeSquadWaitTimePart2 = 60 * ctime.MillisecondsPerSecond // 拆迁队出击第二阶段等待时间
  28. MapAutoSiegeWaitTimePart3 = ctime.MillisecondsPerSecond // 自动攻城第三阶段等待时间
  29. )
  30. const (
  31. MapAutoSiegeStage_MainForce_WaitTime = ctime.MillisecondsPerSecond // 自动攻城主力出击阶段等待时间
  32. MapAutoSiegeStage_SiegeSquad_WaitTime = 5 * ctime.MillisecondsPerSecond // 自动攻城拆迁队出击阶段等待时间
  33. )
  34. const (
  35. MapTowerWidth_Res int32 = 20
  36. MapTowerHeight_Res int32 = 20
  37. MapTowerWidth_Monster int32 = 20
  38. MapTowerHeight_Monster int32 = 20
  39. MapTowerWidth_Build int32 = 20
  40. MapTowerHeight_Build int32 = 20
  41. MapTowerHeight_Castle int32 = 50
  42. MapTowerWidth_Castle int32 = 50
  43. MapTowerWidth_March int32 = 20
  44. MapTowerHeight_March int32 = 20
  45. MapTowerWidth_ArmyLine int32 = 20
  46. MapTowerHeight_ArmyLine int32 = 20
  47. )
  48. const (
  49. MapMarkCommand_Min = 0 // 地图标记指令最小值
  50. MapMarkCommand_Max = 6 // 地图标记指令最大值
  51. )
  52. const (
  53. MapWalkableTile = 1
  54. MapMaxPathDistance = 500 // 寻路最大距离
  55. )
  56. func GetStartWarWaitTime(requiredMinites int64) int64 {
  57. return max(requiredMinites, MapLeastStartWarMinite) * ctime.MillisecondsPerMinute
  58. }
  59. func IsWalkableTile(value int32) bool {
  60. return value >= MapWalkableTile
  61. }
  62. var (
  63. evenOffsets = [][2]int32{
  64. // x + 1
  65. {1, 0},
  66. {1, -1},
  67. // x - 1
  68. {-1, 0},
  69. {-1, -1},
  70. // x
  71. {0, -1},
  72. {0, 1},
  73. }
  74. oddOffsets = [][2]int32{
  75. // x + 1
  76. {1, 0},
  77. {1, 1},
  78. // x - 1
  79. {-1, 0},
  80. {-1, 1},
  81. // x
  82. {0, -1},
  83. {0, 1},
  84. }
  85. )
  86. func EvenOffsets() [][2]int32 {
  87. return evenOffsets
  88. }
  89. func OddOffsets() [][2]int32 {
  90. return oddOffsets
  91. }
  92. const MapTile_Unknown int32 = 0
  93. const (
  94. MapTile_Start = 1
  95. MapTile_Space int32 = 1 // 空地
  96. MapTile_Hil int32 = 2 // 山
  97. MapTile_Water int32 = 3 // 水
  98. MapTile_End = 100000
  99. )
  100. const (
  101. MapCastle_Start = 100001
  102. MapCastle_Dock1 int32 = 101401 // 码头(横向)
  103. MapCastle_Dock2 int32 = 101402 // 码头(纵向)
  104. MapCastle_End = 200000
  105. )
  106. const (
  107. MapBuild_Start = 200001
  108. MapBuild_SiegeBase int32 = 200001 // 攻城地基
  109. MapBuild_LeaguePoint int32 = 201001 // 联盟驻地
  110. MapBuild_SiegeCamp int32 = 201002 // 攻城大营
  111. MapBuild_LeagueCamp int32 = 201003 // 联盟大营
  112. MapBuild_LeagueFlag int32 = 201005 // 联盟旗帜
  113. MapBuild_ArrowTower int32 = 201006 // 箭塔
  114. MapBuild_Barricade int32 = 201007 // 拒马
  115. MapBuild_ResTown int32 = 201010 // 联盟农田
  116. MapBuild_MainCity int32 = 202001 // 玩家主城
  117. MapBuild_CityBase int32 = 202002 // 玩家地基
  118. MapBuild_Camp int32 = 202003 // 营账
  119. MapBuild_End = 300000
  120. )
  121. const (
  122. MapRes_Start = 300001
  123. MapRes_End = 400000
  124. )
  125. var (
  126. // 联盟建筑-建筑数量上限属性ID映射
  127. LeagueMapBuildCountLimitAttrIDMap = map[int32]int32{
  128. MapBuild_LeaguePoint: enum.LeagueAttrResidenceCountLimit,
  129. MapBuild_SiegeCamp: enum.LeagueAttrSiegeCampLimit,
  130. MapBuild_LeagueCamp: enum.LeagueAttrCampCountLimit,
  131. MapBuild_LeagueFlag: enum.LeagueAttrFlagCountLimit,
  132. MapBuild_Barricade: enum.LeagueAttrBarricadeCountLimit,
  133. MapBuild_ArrowTower: enum.LeagueAttrArrowTowerCountLimit,
  134. MapBuild_ResTown: enum.LeagueAttrResTownCountLimit,
  135. }
  136. // 联盟建筑-建筑等级上限属性ID映射
  137. LeagueMapBuildLevelLimitAttrIDMap = map[int32]int32{
  138. MapBuild_LeagueCamp: enum.LeagueAttrCampLevelLimit,
  139. MapBuild_LeagueFlag: enum.LeagueAttrFlagCountLimit,
  140. MapBuild_Barricade: enum.LeagueAttrBarricadeLevelLimit,
  141. MapBuild_ArrowTower: enum.LeagueAttrArrowTowerLevelLimit,
  142. MapBuild_ResTown: enum.LeagueAttrResTownLevelLimit,
  143. }
  144. )
  145. const (
  146. ArmyLine_AffectMinDistance = 200 // 军情线影响最小距离
  147. ArmyLine_UpdateInterval = 5 // 军情线更新间隔时间
  148. ArmyLine_SyncMinStepLen = 20 // 军情线增量同步最小步长
  149. ArmyLine_OneBatchStepLen = 100 // 军情线一批同步多少步
  150. )
  151. func IsMapTile(configID int32) bool {
  152. return configID >= MapTile_Start && configID <= MapTile_End
  153. }
  154. func IsMapCastle(configID int32) bool {
  155. return configID >= MapCastle_Start && configID <= MapCastle_End
  156. }
  157. func IsMapBuild(configID int32) bool {
  158. return configID >= MapBuild_Start && configID <= MapBuild_End
  159. }
  160. func IsMapRes(configID int32) bool {
  161. return configID >= MapRes_Start && configID <= MapRes_End
  162. }
  163. func IsMapMarkCommandFail(command int32) bool {
  164. return command < MapMarkCommand_Min || command > MapMarkCommand_Max
  165. }
  166. // 是否为可掠夺建筑
  167. func IsSnatchableBuild(configID int32) bool {
  168. // 当前只有主城可以掠夺
  169. return configID == MapBuild_MainCity
  170. }