-------------------------------------------- -- 采集物 -------------------------------------------- local CollectExcel = require("excel.Collect") local Obj = require("core.Obj") local Msg = require("core.Msg") local Broadcast = require("broadcast.Broadcast") local Status = require("scene.Status") local MapCallback = require("scene.MapCallback") function create(collectId, ownerUuid) local cf = CollectExcel.collect[collectId] if not cf then assert(nil, collectId) end local collect = {} Obj.create(collect, Obj.TYPE_COLLECT) collect.collectId = collectId collect.ownerUuid = ownerUuid collect.way = cf.way return collect end function destroy(collect) Obj.destroy(collect) end function getObjAdd(collect) local collectId = collect.collectId local msgRet = Msg.gc.GC_COLLECT_ADD msgRet.obj_id = collect.id msgRet.collectId = collectId msgRet.x = collect.x msgRet.y = collect.y msgRet.way = collect.way return msgRet end function getSpeed() return 0 end function enterScene(collect, sceneID, x, y) Obj.enterScene(collect, sceneID, x, y) end function collectStart(human, obj_id, x, y, way) local collect = Obj.objs[obj_id] -- 不存在 if not collect or collect.obj_type ~= Obj.TYPE_COLLECT or collect.sceneID ~= human.sceneID then return end human.collect = human.collect or {} human.collect.startTime = os.time() human.collect.obj_id = obj_id human.x = x human.y = y human.way = way Status.doHumanControlStatusChange(human, Status.HUMAN_STATUS_COLLECT) local cf = CollectExcel.collect[collect.collectId] if cf and cf.tip1 ~= "" then Broadcast.sendErr(human, cf.tip1) end local msgRet = Msg.gc.GC_COLLECT_START msgRet.obj_id = obj_id msgRet.leftTime = cf.CollectTime Msg.send(msgRet, human.fd) end function collectFinish(human, obj_id) local collect = Obj.objs[obj_id] -- 不存在 if not collect or collect.obj_type ~= Obj.TYPE_COLLECT or collect.sceneID ~= human.sceneID then Status.doHumanControlStatusChange(human, Status.HUMAN_STATUS_NORMAL) return end local cf = CollectExcel.collect[collect.collectId] if not human.collect or human.collect.obj_id ~= obj_id or human.collect.startTime + cf.CollectTime > os.time() then Status.doHumanControlStatusChange(human, Status.HUMAN_STATUS_NORMAL) return end human.collect = nil if cf and cf.tip2 ~= "" then Broadcast.sendErr(human, cf.tip2) end Obj.leaveScene(collect) destroy(collect) Status.doHumanControlStatusChange(human, Status.HUMAN_STATUS_NORMAL) MapCallback.onCollectFinish(human, collect) local msgRet = Msg.gc.GC_COLLECT_FINISH msgRet.obj_id = obj_id Msg.send(msgRet, human.fd) end