源战役
25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

342 lines
15 KiB

  1. %% ---------------------------------------------------------------------------
  2. %% @doc 交易市场头文件
  3. %% @author zhaoyu
  4. %% @since 2019-12-17
  5. %% ---------------------------------------------------------------------------
  6. -ifndef(MARKET_HRL).
  7. -define(MARKET_HRL, ok).
  8. %% 交易市场-交易市场物品信息ets。保存数据格式:[#market_goods{}]
  9. -define(MARKET_GOODS_ETS, market_goods_ets). %% 正在出售的商品
  10. %% 交易市场-交易市场玩家出价信息ets。保存数据格式:[#market_bid{}]
  11. -define(MARKET_BID_ETS, market_bid_ets).
  12. %% 交易市场-入库提醒订阅信息ets。保存数据格式:[#market_reminder{}]
  13. -define(MARKET_REMINDER_ETS, market_reminder_ets).
  14. %% 交易市场-系统补给商品数据信息ets。保存数据格式:[#market_supply{}]
  15. -define(MARKET_SUPPLY_ETS, market_supply_ets).
  16. %% 市场成交记录类型-世界记录
  17. -define(MARKET_DEAL_LOG_WORLD, 1).
  18. %% 市场成交记录类型-公会记录
  19. -define(MARKET_DEAL_LOG_GUILD, 2).
  20. %% 市场成交记录类型-角色记录
  21. -define(MARKET_DEAL_LOG_ROLE, 3).
  22. %% 拍卖类型-世界拍卖
  23. -define(MARKET_SELL_TYPE_WORLD, 1).
  24. %% 拍卖类型-公会拍卖
  25. -define(MARKET_SELL_TYPE_GUILD, 2).
  26. %% 可上架区域-社团和世界都可以上架
  27. -define(MARKET_RANGE_ALL, 0).
  28. %% 可上架区域-只能上架世界
  29. -define(MARKET_RANGE_WORLD, 1).
  30. %% 可上架区域-只能上架社团
  31. -define(MARKET_RANGE_GUILD, 2).
  32. %% 系统-角色Id, 系统回购后再出售的出售者
  33. -define(MARKET_SYS_ROLE_ID, 1).
  34. %% 系统-最大角色id : 模块功能id,
  35. -define(MARKET_SYS_MAX_ROLE_ID, 655).
  36. %% 日计数器
  37. -define(MARKET_COUNTER_DAILY_REMINDER, 1).
  38. %% 市场操作
  39. -define(MARKET_OPERATION_MANUAL_ON, 1). %% 手动上架
  40. -define(MARKET_OPERATION_MANUAL_OFF, 2). %% 手动下架
  41. -define(MARKET_OPERATION_SETTLEMENT, 3). %% 成交
  42. -define(MARKET_OPERATION_SYS_DEL, 4). %% 系统删除
  43. -define(MARKET_OPERATION_SYS_ON, 5). %% 系统上架
  44. -define(MARKET_OPERATION_SYS_OFF, 6). %% 系统下架
  45. -define(MARKET_OPERATION_OFF_TO_WORLD, 7). %% 下架流拍至世界
  46. %% 购买方式
  47. -define(MARKET_BUY_TYPE_NORMAL, 1). %% 购买方式-正常竞拍
  48. -define(MARKET_BUY_TYPE_EQUIP_AUTO, 2). %% 购买方式-装备进化升星自动
  49. %% 买卖身份
  50. -define(MARKET_SELLER, 1).
  51. -define(MARKET_BUYER, 2).
  52. %% 推荐子类配置
  53. -record(market_recommend_cfg, {
  54. id = 0 %% 推荐Id
  55. ,name = <<>> %% 名称
  56. ,sell_type = 0 %% 商品大类Id
  57. ,sell_sub_type = 0 %% 商品子类Id
  58. ,quality_range = {0, 0} %% 物品品质区间
  59. }
  60. ).
  61. %% 系统回购配置
  62. -record(market_buyback_cfg, {
  63. goods_id = 0 %% 可回购物品Id
  64. ,open_day_min = 0 %% 开服天数
  65. ,open_day_max = 0 %% 开服天数
  66. ,sell_again = 0 %% 是否系统上架(1是,0否)
  67. ,buyback_time = {0, 0} %% 开售多少秒后,系统可以在此时间范围内随机回购
  68. }
  69. ).
  70. %% 系统补货配置
  71. -record(market_sys_sell_cfg, {
  72. goods_id = 0 %% 物品Id
  73. ,open_day_min = 0 %% 开服天数
  74. ,open_day_max = 0 %% 开服天数
  75. ,trigger_sys_sell_num = 0 %% 累积上架多少数量后会触发系统补充机制
  76. ,trigger_num = 0 %% 市场上在售少于多少后触发系统进行补货
  77. ,sell_num = 0 %% 每次补货数量
  78. ,sell_max_num = 0 %% 每日补货数量上限
  79. }
  80. ).
  81. %% 交易市场管理进程state
  82. -record(market_mgr, {
  83. off_time_list = [] %% 每个竞拍子类最早结束的定时信息 [#m_off_time_info{}}]
  84. ,buyback_time_list = [] %% 每个物品最早被系统回购的定时信息 [#m_buyback_time_info{}}]
  85. ,all_deal_log_list = [] %% 成交记录列表-[#deal_log_type{}]
  86. }
  87. ).
  88. %% 每个竞拍子类最早结束的定时信息
  89. -record(m_off_time_info, {
  90. key = {0, 0} %% 每个子类key {Type, SubType}
  91. ,min_off_time = 0 %% 竞拍结束时间戳
  92. ,timer_ref = 0 %% 竞拍结束定时器 TimerRef
  93. }
  94. ).
  95. %% 每个物品最早被系统回购的定时信息
  96. -record(m_buyback_time_info, {
  97. goods_type_id = 0 %% 回购物品类型Id
  98. ,min_time = 0 %% 系统回购时间戳
  99. ,timer_ref = 0 %% 系统回购定时器 TimerRef
  100. }
  101. ).
  102. %% 交易市场物品信息
  103. -record(market_goods, {
  104. id = 0 %% 交易市场商品拍卖Id
  105. ,role_id = 0 %% 出售玩家角色Id, 非玩家出售的商品id为1或者功能id
  106. ,goods_id = 0 %% 物品唯一Id
  107. ,goods_type_id = 0 %% 物品类型Id
  108. ,num = 0 %% 物品数量
  109. ,lev = 0 %% 物品等级
  110. ,color = 0 %% 物品品质
  111. ,price = 0 %% 目前竞拍价格
  112. ,sell_type = 0 %% 上架类型:1:世界上架2:社团上架
  113. ,guild_id = 0 %% 公会Id
  114. ,time = 0 %% 物品上架时间
  115. ,off_time = 0 %% 物品拍卖截止时间
  116. ,sys_buyback_time = 0 %% 系统回购时间戳-0表示系统不回购
  117. ,sys_buyback_count = 0 %% 系统回购次数
  118. ,is_to_world = 0 %% 公会上架流拍是否上架世界:0:否1:是
  119. ,bidder_id = 0 %% 最高出价玩家Id
  120. ,extra_attr = [] %% 物品额外特殊属性
  121. ,bid_count = 0 %% 出价次数
  122. ,off_shelf = 0 %% 是否下架:超时没人买就会下架
  123. %% 下面的字段不保存数据库
  124. ,type = 0 %% 商品大类
  125. ,sub_type = 0 %% 商品子类
  126. ,buyout_price = 0 %% 交易一口价(为0时无一口价)
  127. ,career = [] %% 职业限制:[]为不限
  128. ,sex = 0 %% 性别限制,0为不限,1为男,2为女
  129. ,series = 0 %% 装备套数
  130. }
  131. ).
  132. %% 交易市场玩家出价信息
  133. -record(market_bid, {
  134. key = {0, 0} %% key: {RoleId, Id}
  135. ,id = 0 %% 交易市场商品拍卖Id
  136. ,role_id = 0 %% 出价玩家角色Id
  137. ,role_name = 0 %% 出价玩家角色名字
  138. ,price = 0 %% 竞价
  139. ,time = 0 %% 最后一次出价时间戳
  140. }
  141. ).
  142. %% 交易市场玩家关注
  143. -record(market_like, {
  144. id = 0 %% 交易市场商品拍卖Id
  145. ,role_id = 0 %% 玩家角色Id
  146. ,time = 0 %% 关注时间戳
  147. }
  148. ).
  149. %% 入库提醒订阅信息
  150. -record(market_reminder, {
  151. key = {0, 0} %% Key: {RoleId, GoodsTypeId}
  152. ,role_id = 0 %% 玩家角色Id
  153. ,goods_type_id = 0 %% 物品类型Id
  154. }
  155. ).
  156. %% 系统补给商品数据信息
  157. -record(market_supply, {
  158. goods_type_id = 0 %% 物品类型Id
  159. ,num = 0 %% 全服玩家累积上架物品数量
  160. ,supply_num = 0 %% 系统今日累积补给数量
  161. ,time = 0 %% 系统最近一次补给时间戳
  162. }
  163. ).
  164. %% 筛选参数
  165. -record(market_select, {
  166. sell_type = 0 %% 拍卖类型 1:世界拍卖 2:公会拍卖
  167. ,type = 0 %% 商品大类
  168. ,sub_type = 0 %% 商品子类
  169. ,lev = {0, 0} %% 等级范围
  170. ,color = {0, 0} %% 品质范围
  171. ,series = 0 %% 装备套数
  172. ,career = 0 %% 职业限制:0为不限
  173. ,sex = 0 %% 性别限制,0为不限,1为男,2为女
  174. ,guild_id = 0 %% 公会Id
  175. }
  176. ).
  177. %% 交易市场成交记录
  178. -record(market_deal_log, {
  179. id = 0 %% 交易市场商品拍卖Id
  180. ,role_id = 0 %% 出售玩家角色Id
  181. ,get_role_id = 0 %% 获得者玩家Id
  182. ,get_role_name = 0 %% 获得者名字
  183. ,goods_id = 0 %% 物品唯一Id
  184. ,goods_type_id = 0 %% 物品类型Id
  185. ,num = 0 %% 物品数量
  186. ,lev = 0 %% 物品等级
  187. ,color = 0 %% 物品品质
  188. ,price = 0 %% 成交价格
  189. ,sell_type = 0 %% 上架类型:1:世界上架2:社团上架
  190. ,guild_id = 0 %% 公会Id
  191. ,time = 0 %% 物品上架时间
  192. ,deal_time = 0 %% 成交时间戳
  193. ,deal_type = 0 %% 成交类型:0:竞价1:一口价
  194. ,log_type = 0 %% 成交记录大类
  195. ,extra_attr = [] %% 物品额外特殊属性
  196. %% 下面的字段不保存数据库
  197. ,type = 0 %% 商品大类
  198. ,sub_type = 0 %% 商品子类
  199. }
  200. ).
  201. %% 交易市场交易记录
  202. -record(deal_log_type, {
  203. log_key = {0, 0} %% 成交记录大类-{SellType, LogType}
  204. ,log_list = [] %% 成交记录列表-[#market_deal_log{}]
  205. }
  206. ).
  207. %% 交易市场成交记录
  208. -record(market_role_deal_log, {
  209. id = 0 %% 交易市场商品拍卖Id
  210. ,role_id = 0 %% 角色Id
  211. ,rela_role_id = 0 %% 关联玩家Id
  212. ,goods_type_id = 0 %% 物品类型Id
  213. ,num = 0 %% 物品数量
  214. ,price = 0 %% 成交价格
  215. ,sell_type = 0 %% 上架类型:1:世界上架2:社团上架
  216. ,guild_id = 0 %% 公会Id
  217. ,time = 0 %% 物品上架时间
  218. ,deal_time = 0 %% 成交时间戳
  219. ,deal_type = 0 %% 成交类型:0:竞价1:一口价2:卖出
  220. ,extra_attr = [] %% 物品额外特殊属性
  221. }
  222. ).
  223. %% 角色交易市场数据
  224. -record(market_data, {
  225. deal_log_list = [] %% 成交记录列表-[#market_role_deal_log{}]
  226. ,like_list = [] %% 角色关注的物品列表-[#market_like{}]
  227. ,like_num = 0 %% 角色关注的物品数量
  228. ,reminder_list = [] %% 角色入库提醒订阅信息列表-[GoodsTypeId]
  229. }
  230. ).
  231. %% 交易市场出售的商品信息(竞拍时间结束自动下架的物品也保存在这个表)
  232. -define(SAVE_MARKET_GOODS, <<"REPLACE INTO `market_goods` (`id`, `role_id`, `goods_id`, `goods_type_id`, `num`, `lev`"
  233. ", `color`, `price`, `sell_type`, `guild_id`, `time`, `off_time`, `sys_buyback_time`, `is_to_world`, `bidder_id`, `extra_attr`, `sys_buyback_count`, `off_shelf`)"
  234. " values (~p, ~p, ~p, ~p, ~p, ~p, ~p, ~p, ~p, ~p, ~p, ~p, ~p, ~p, ~p, '~ts', ~p, ~p)">>).
  235. -define(BATCH_SAVE_MARKET_GOODS, <<"REPLACE INTO `market_goods` (`id`, `role_id`, `goods_id`, `goods_type_id`, `num`, `lev`"
  236. ", `color`, `price`, `sell_type`, `guild_id`, `time`, `off_time`, `sys_buyback_time`, `is_to_world`, `bidder_id`, `extra_attr`, `sys_buyback_count`, `off_shelf`)"
  237. " values ~ts">>).
  238. -define(LOAD_MARKET_GOODS, <<"SELECT `id`, `role_id`, `goods_id`, `goods_type_id`, `num`, `lev`, `color`, `price`"
  239. ", `sell_type`, `guild_id`, `time`, `off_time`, `sys_buyback_time`, `is_to_world`, `bidder_id`, `extra_attr`, `sys_buyback_count`, `off_shelf` FROM `market_goods`">>).
  240. -define(DEL_MARKET_GOODS, <<"DELETE FROM `market_goods` WHERE `id` = ~p AND `role_id` = ~p">>).
  241. %% 交易市场玩家竞拍出价
  242. -define(SAVE_MARKET_BID, <<"REPLACE INTO `market_bid_info` (`id`, `role_id`, `role_name`, `price`, `time`) values (~p, ~p, '~ts', ~p, ~p)">>).
  243. -define(LOAD_MARKET_BID, <<"SELECT `id`, `role_id`, `role_name`, `price`, `time` FROM `market_bid_info`">>).
  244. -define(DEL_ROLE_MARKET_BID, <<"DELETE FROM `market_bid_info` WHERE `id` = ~p AND `role_id` = ~p">>).
  245. -define(DEL_MARKET_BID, <<"DELETE FROM `market_bid_info` WHERE `id` = ~p">>).
  246. %% 玩家竞拍关注
  247. -define(SAVE_MARKET_LIKE, <<"REPLACE INTO `market_like_info` (`id`, `role_id`, `time`) values (~p, ~p, ~p)">>).
  248. -define(LOAD_MARKET_LIKE, <<"SELECT `id`, `role_id`, `time` FROM `market_like_info` WHERE `role_id` = ~p">>).
  249. -define(DEL_MARKET_LIKE, <<"DELETE FROM `market_like_info` WHERE `id` = ~p AND `role_id` = ~p">>).
  250. -define(DEL_MARKET_LIKE_BY_ID, <<"DELETE FROM `market_like_info` WHERE `id` = ~p">>).
  251. %% 交易市场成交记录
  252. -define(SAVE_MARKET_DEAL_LOG, <<"REPLACE INTO `market_deal_log` (`id`, `role_id`, `get_role_id`, `get_role_name`, `goods_id`"
  253. ", `goods_type_id`, `num`, `lev`, `color`, `price`, `sell_type`, `guild_id`, `time`, `deal_time`, `deal_type`, `log_type`"
  254. ", `extra_attr`) values ~ts">>).
  255. -define(LOAD_MARKET_DEAL_LOG, <<"SELECT `id`, `role_id`, `get_role_id`, `get_role_name`, `goods_id`, `goods_type_id`, `num`, `lev`"
  256. ", `color`, `price`, `sell_type`, `guild_id`, `time`, `deal_time`, `deal_type`, `log_type`, `extra_attr` FROM `market_deal_log`">>).
  257. -define(DEL_MARKET_DEAL_LOG, <<"DELETE FROM `market_deal_log` WHERE `id` = ~p">>).
  258. -define(DEL_ALL_MARKET_DEAL_LOG, <<"TRUNCATE TABLE `market_deal_log`">>).
  259. %% 角色交易市场成交记录
  260. -define(SAVE_M_ROLE_DEAL_LOG, <<"REPLACE INTO `market_role_deal_log` (`id`, `role_id`, `rela_role_id`, `goods_type_id`"
  261. ", `num`, `price`, `sell_type`, `guild_id`, `time`, `deal_time`, `deal_type`, `extra_attr`)"
  262. " VALUES ~ts">>).
  263. -define(LOAD_M_ROLE_DEAL_LOG, <<"SELECT `id`, `role_id`, `rela_role_id`, `goods_type_id`, `num`, `price`, `sell_type`, `guild_id`"
  264. ", `time`, `deal_time`, `deal_type`, `extra_attr` FROM `market_role_deal_log` WHERE `role_id` = ~p">>).
  265. -define(DEL_M_ROLE_DEAL_LOG, <<"DELETE FROM `market_role_deal_log` WHERE `id` = ~p AND `role_id` = ~p">>).
  266. -define(DEL_M_ROLE_DEAL_LOG_BY_TIME, <<"DELETE FROM `market_role_deal_log` WHERE `role_id` = ~p AND `deal_time` <= ~p">>).
  267. %% 交易市场入库提醒订阅信息
  268. -define(SAVE_MARKET_REMINDER, <<"REPLACE INTO `market_reminder_info` (`role_id`, `reminder_list`) values (~p, '~ts')">>).
  269. -define(LOAD_MARKET_REMINDER, <<"SELECT `reminder_list` FROM `market_reminder_info` WHERE `role_id` = ~p">>).
  270. -define(DEL_MARKET_REMINDER, <<"DELETE FROM `market_reminder_info` WHERE `role_id` = ~p">>).
  271. %% 交易市场系统补给商品数据
  272. -define(SAVE_MARKET_SUPPLY, <<"REPLACE INTO `market_goods_supply_info` (`goods_type_id`, `num`, `supply_num`, `time`) values (~p, ~p, ~p, ~p)">>).
  273. -define(BATCH_SAVE_MARKET_SUPPLY, <<"REPLACE INTO `market_goods_supply_info` (`goods_type_id`, `num`, `supply_num`, `time`) values ~ts">>).
  274. -define(LOAD_MARKET_SUPPLY, <<"SELECT `goods_type_id`, `num`, `supply_num`, `time` FROM `market_goods_supply_info`">>).
  275. -endif. %% MARKET_HRL