MiddleOption.lua 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. -----------------------------------------------
  2. -- 跨服操作项
  3. -- human.db.middleOptions 跨服操作列表
  4. -- addItem 添加道具
  5. -- updateYuanbao 刷新水晶
  6. -- updateYinliang 刷新银两
  7. ------------------------------------------------
  8. local Log = require("common.Log")
  9. local Lang = require("common.Lang")
  10. local ObjHuman = require("core.ObjHuman")
  11. local BagLogic = require("bag.BagLogic")
  12. local MailLogic = require("mail.MailLogic")
  13. -- 操作类型枚举
  14. OPTYPE_ADD_ITEM = 1 -- 背包添加道具
  15. OPTYPE_UPDATE_YUANBAO = 2 -- 添加/扣水晶
  16. OPTYPE_UPDATE_YINLIANG = 3 -- 添加/扣金币
  17. -- 操作白名单,预防用
  18. LOGTYPE_WHITE_LIST = {
  19. ["minewar"] = true, -- reyes todo 这里要改成战火大陆的logtype
  20. }
  21. cmd = cmd or {}
  22. local function getOptionsByType(human, optype)
  23. human.db.middleOptions = human.db.middleOptions or {}
  24. human.db.middleOptions[optype] = human.db.middleOptions[optype] or {}
  25. return human.db.middleOptions[optype]
  26. end
  27. local function checkLogType(logType, optype)
  28. if LOGTYPE_WHITE_LIST[logType] then
  29. return true
  30. end
  31. Log.write(Log.LOGID_TEST, "not in white list", logType, optype)
  32. end
  33. function getItemCntByID(human, itemID, logType)
  34. if not _G.is_middle then return end
  35. if not checkLogType(logType, OPTYPE_ADD_ITEM) then return end
  36. local options = getOptionsByType(human, OPTYPE_ADD_ITEM)
  37. if options[itemID] == nil then return end
  38. return options[itemID][logType]
  39. end
  40. -- 跨服添加道具
  41. function addItem(human, itemID, itemCnt, logType)
  42. if not _G.is_middle then return end
  43. if not checkLogType(logType, OPTYPE_ADD_ITEM) then return end
  44. local options = getOptionsByType(human, OPTYPE_ADD_ITEM)
  45. options[itemID] = options[itemID] or {}
  46. options[itemID][logType] = (options[itemID][logType] or 0) + itemCnt
  47. end
  48. cmd[OPTYPE_ADD_ITEM] = function(human, options)
  49. local failList = nil
  50. for itemID, option in pairs(options) do
  51. for logType, itemCnt in pairs(option) do
  52. if not BagLogic.addItem(human, itemID, itemCnt, nil, logType) then
  53. if logType == "minewar" then
  54. failList = failList or {}
  55. failList[#failList + 1] = {itemID, itemCnt}
  56. end
  57. end
  58. end
  59. end
  60. if failList then
  61. MailLogic.addMail(human,Lang.MINEWAR_MAIL_TITLE2,Lang.MINEWAR_MAIL_CONTENT2,failList)
  62. end
  63. end
  64. -- 跨服更新水晶
  65. function updateYuanbao(human, value, logType)
  66. if not _G.is_middle then return end
  67. if not checkLogType(logType, OPTYPE_UPDATE_YUANBAO) then return end
  68. local options = getOptionsByType(human, OPTYPE_UPDATE_YUANBAO)
  69. options[logType] = (options[logType] or 0) + value
  70. end
  71. cmd[OPTYPE_UPDATE_YUANBAO] = function(human, options)
  72. for logType, value in pairs(options) do
  73. if value > 0 then
  74. ObjHuman.addYuanbao(human, value, logType)
  75. elseif value < 0 then
  76. ObjHuman.decYuanbao(human, "yuanbao", value, logType)
  77. end
  78. end
  79. end
  80. -- 跨服更新金币
  81. function updateYinliang(human, value, logType)
  82. if not _G.is_middle then return end
  83. if not checkLogType(logType, OPTYPE_UPDATE_YINLIANG) then return end
  84. local options = getOptionsByType(human, OPTYPE_UPDATE_YINLIANG)
  85. options[logType] = (options[logType] or 0) + value
  86. end
  87. cmd[OPTYPE_UPDATE_YINLIANG] = function(human, options)
  88. for logType, value in pairs(options) do
  89. if value ~= 0 then
  90. ObjHuman.updateYinliang(human, value, logType)
  91. end
  92. end
  93. end
  94. -- 回到本服需要处理跨服操作事件
  95. function handleOptions(human, middleOptions)
  96. if _G.is_middle then return end
  97. if not middleOptions then return end
  98. for optype, options in pairs(middleOptions) do
  99. if cmd[optype] then
  100. cmd[optype](human, options)
  101. end
  102. end
  103. end