NPCDoSomethingProxy.lua 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. local RemoteProxy = requireProxy("remote/RemoteProxy")
  2. local NPCDoSomethingProxy = class("NPCDoSomethingProxy", RemoteProxy)
  3. NPCDoSomethingProxy.NAME = global.ProxyTable.NPCDoSomethingProxy
  4. NPCDoSomethingProxy.STEP = {
  5. Waiting = 1,
  6. AddItem = 2,
  7. DoThings = 3,
  8. Done = 4
  9. }
  10. local cjson = require("cjson")
  11. function NPCDoSomethingProxy:ctor()
  12. NPCDoSomethingProxy.super.ctor(self)
  13. self.onDoThingsData = nil
  14. self.sellStep = NPCDoSomethingProxy.STEP.Waiting
  15. self.sellPrice = nil
  16. self.doSomethingParam = {}
  17. end
  18. function NPCDoSomethingProxy:SetonDoThingsData(data)
  19. self.onDoThingsData = data
  20. local BagProxy = global.Facade:retrieveProxy(global.ProxyTable.Bag)
  21. if data then
  22. self:SetDoThingsStep(NPCDoSomethingProxy.STEP.AddItem)
  23. BagProxy:SetOnSellOrRepaire(data.MakeIndex)
  24. else
  25. self:SetDoThingsStep(NPCDoSomethingProxy.STEP.Waiting)
  26. BagProxy:CleanOnSellOrRepaire()
  27. end
  28. end
  29. function NPCDoSomethingProxy:SetDoSomethingParam(data)
  30. if data and next(data) then
  31. self.doSomethingParam = data
  32. else
  33. self.doSomethingParam = {}
  34. end
  35. end
  36. function NPCDoSomethingProxy:GetDoSomethingParam()
  37. return self.doSomethingParam
  38. end
  39. function NPCDoSomethingProxy:SetDoThingsStep(step)
  40. if step then
  41. self.sellStep = step
  42. end
  43. end
  44. function NPCDoSomethingProxy:GetDoThingsStep()
  45. return self.sellStep
  46. end
  47. function NPCDoSomethingProxy:RequestNpcDoSomething()
  48. local NPCProxy = global.Facade:retrieveProxy(global.ProxyTable.NPC)
  49. local npcId = NPCProxy:GetCurrentNPCID()
  50. if not self.onDoThingsData or not npcId then
  51. return
  52. end
  53. local step = self:GetDoThingsStep()
  54. if step ~= NPCDoSomethingProxy.STEP.AddItem then
  55. return
  56. end
  57. local param = self:GetDoSomethingParam()
  58. local flag = param.Flag or 0
  59. local recovery = param.Recovery
  60. local data = self.onDoThingsData
  61. local Name = data.Name
  62. local MakeIndex = data.MakeIndex
  63. local sendData = {
  64. Name = Name,
  65. Flag = flag,
  66. Recovery = recovery,
  67. MakeIndex = MakeIndex
  68. }
  69. local jsonStr = cjson.encode(sendData)
  70. LuaSendMsg(global.MsgType.MSG_CS_NPC_DOSOMETHING, npcId, 0, 0, 0, jsonStr, string.len(jsonStr))
  71. end
  72. function NPCDoSomethingProxy:ResetDoSomethingState()
  73. self:SetonDoThingsData(nil)
  74. self:SetDoSomethingParam(nil)
  75. local NPCProxy = global.Facade:retrieveProxy(global.ProxyTable.NPC)
  76. local EVENT_TYPE = NPCProxy.EVENT_TYPE
  77. local data = {
  78. way = EVENT_TYPE.DOSOMETHING,
  79. reset = true
  80. }
  81. global.Facade:sendNotification(global.NoticeTable.Layer_NPC_Sell_Repaire_UpDate, data)
  82. end
  83. function NPCDoSomethingProxy:CleanOnDoData()
  84. self:SetonDoThingsData(nil)
  85. local NPCProxy = global.Facade:retrieveProxy(global.ProxyTable.NPC)
  86. local EVENT_TYPE = NPCProxy.EVENT_TYPE
  87. local data = {
  88. way = EVENT_TYPE.DOSOMETHING,
  89. reset = true
  90. }
  91. global.Facade:sendNotification(global.NoticeTable.Layer_NPC_Sell_Repaire_UpDate, data)
  92. end
  93. local function handle_MSG_SC_NPC_DOSOMETHING(msg)
  94. local NPCDoSomethingProxy = global.Facade:retrieveProxy(global.ProxyTable.NPCDoSomethingProxy)
  95. local header = msg:GetHeader()
  96. local param1 = header.param1
  97. if param1 > 0 then
  98. NPCDoSomethingProxy:CleanOnDoData()
  99. return
  100. end
  101. local jsonData = ParseRawMsgToJson(msg)
  102. if not jsonData then
  103. return -1
  104. end
  105. dump(jsonData)
  106. NPCDoSomethingProxy:SetDoSomethingParam(jsonData)
  107. local NPCProxy = global.Facade:retrieveProxy(global.ProxyTable.NPC)
  108. local EVENT_TYPE = NPCProxy.EVENT_TYPE
  109. local data = {
  110. type = EVENT_TYPE.DOSOMETHING
  111. }
  112. if tonumber(jsonData.Flag) ~= EVENT_TYPE.DOSOMETHING then
  113. return
  114. end
  115. global.Facade:sendNotification(global.NoticeTable.Layer_NPC_Sell_Repaire_Open, data)
  116. end
  117. function NPCDoSomethingProxy:RegisterMsgHandler()
  118. NPCDoSomethingProxy.super.RegisterMsgHandler(self)
  119. local msgType = global.MsgType
  120. -- NPC 自定义框
  121. LuaRegisterMsgHandler(msgType.MSG_SC_NPC_DOSOMETHING, handle_MSG_SC_NPC_DOSOMETHING)
  122. end
  123. return NPCDoSomethingProxy