Commit 8955225bcf74ac31cb4dfa6ca0436d8d9cdae11f

Authored by zhouhaihai
1 parent 96d591f7

快速拾取。快速使用

src/actions/AdvAction.lua
... ... @@ -527,25 +527,8 @@ function _M.useItemRpc(agent, data)
527 527 adv:cost({[itemId] = count}, {log = {desc = "useItem", int1 = itemId, int2 = count}})
528 528 adv:backUse({[itemId] = count})
529 529 end
530   -
531   - if itemId == 5020 then
532   - role:finishGuide(53)
533   - end
534   - adv:checkAchievement(adv.AchievType.UseItem, count, itemId)
535   - adv:mylog({desc = "useItem", int1 = itemId, int2 = count})
536   -
537   - role:log("mission_pick_use", {
538   - mission_threadid = adv.chapterId, -- 大地图ID
539   - mission_threadname = (csvdb["adv_chapterCsv"][adv.chapterId] or {})["chapter"] or "auto", -- 大地图名称
540   - mission_id = adv.level, -- 关卡ID
541   - item_id = itemId, -- 道具ID
542   - mission_pick_use_num = count, -- 道具使用量
543   - mission_sequenceid = adv.logid, -- 本次拾荒ID,用于关联一次拾荒产生多条不同类型的日志
544   - })
545   -
546   - for i = 1, count do
547   - adv:doActive(itemData.effect, target) -- target
548   - end
  530 +
  531 + adv:useItem(itemId, count, target)
549 532  
550 533 adv:afterRound()
551 534 adv:saveDB()
... ...
src/adv/Adv.lua
... ... @@ -936,7 +936,7 @@ end
936 936  
937 937 -- log long1 字段被征用!!!
938 938 -- 在冒险中获得的物品都发放在冒险背包内
939   -function Adv:award(gift, params)
  939 +function Adv:award(gift, params, backRewardParams)
940 940 params = params or {}
941 941 local tgift = {}
942 942 if type(gift) == "string" then
... ... @@ -948,6 +948,8 @@ function Adv:award(gift, params)
948 948 end
949 949 local items = self.owner:getProperty("advItems")
950 950 local oldItems = items
  951 +
  952 + local autoUse = {}
951 953 for itemId, count in pairs(tgift) do
952 954 if count > 0 then
953 955 local buffAdd = self.battle.player:getRewardChange(itemId)
... ... @@ -956,41 +958,45 @@ function Adv:award(gift, params)
956 958 self:checkAchievement(Adv.AchievType.GetItem, count, itemId)
957 959 end
958 960 tgift[itemId] = count
959   - local origin = items:getv(itemId, 0)
960   - local nums = origin + count
961   -
962   - if csvdb["adv_artifactCsv"][itemId] then -- 获得神器
963   - self:awardArtifact(itemId, params)
964   - if not self.owner:checkOverGuide(55) then
965   - self.owner:saveGuide(55,1,true)
966   - end
  961 + if globalCsv.adv_auto_useItem[itemId] and count > 0 then
  962 + autoUse[itemId] = count
967 963 else
968   - if nums <= 0 then
969   - items = items:delk(itemId)
970   - nums = 0
  964 + local origin = items:getv(itemId, 0)
  965 + local nums = origin + count
  966 +
  967 + if csvdb["adv_artifactCsv"][itemId] then -- 获得神器
  968 + self:awardArtifact(itemId, params)
  969 + if not self.owner:checkOverGuide(55) then
  970 + self.owner:saveGuide(55,1,true)
  971 + end
971 972 else
972   - items = items:setv(itemId, nums)
973   - end
  973 + if nums <= 0 then
  974 + items = items:delk(itemId)
  975 + nums = 0
  976 + else
  977 + items = items:setv(itemId, nums)
  978 + end
974 979  
975   - if itemId == 16 and not self.owner:checkOverGuide(51,4) then
976   - self.owner:saveGuide(51,4)
977   - end
978   - if params.log then
979   - local log = clone(params.log)
980   - if log["cint1"] or log["cint2"] or log["cint3"] or log["long1"] then
981   - print("addAdvItem error log have cint1 or cint2 or cint3 ", debug.traceback())
  980 + if itemId == 16 and not self.owner:checkOverGuide(51,4) then
  981 + self.owner:saveGuide(51,4)
982 982 end
983   - log["cint1"] = itemId
984   - log["cint2"] = math.abs(count)
985   - log["cint3"] = self.chapterId
986   - log["long1"] = self.level
987   - if count >= 0 then
988   - self.owner:mylog("in_adv", log)
  983 + if params.log then
  984 + local log = clone(params.log)
  985 + if log["cint1"] or log["cint2"] or log["cint3"] or log["long1"] then
  986 + print("addAdvItem error log have cint1 or cint2 or cint3 ", debug.traceback())
  987 + end
  988 + log["cint1"] = itemId
  989 + log["cint2"] = math.abs(count)
  990 + log["cint3"] = self.chapterId
  991 + log["long1"] = self.level
  992 + if count >= 0 then
  993 + self.owner:mylog("in_adv", log)
  994 + else
  995 + self.owner:mylog("out_adv", log)
  996 + end
989 997 else
990   - self.owner:mylog("out_adv", log)
  998 + print("addAdvItem no log ", debug.traceback())
991 999 end
992   - else
993   - print("addAdvItem no log ", debug.traceback())
994 1000 end
995 1001 end
996 1002 end
... ... @@ -1001,10 +1007,48 @@ function Adv:award(gift, params)
1001 1007 if tgift[ItemId.OldCoin] then
1002 1008 self.battle.player:attrChangeCondBuffCheck(0)
1003 1009 end
  1010 +
  1011 + if backRewardParams then
  1012 + self:backReward(tgift, backRewardParams)
  1013 + end
  1014 +
  1015 + if next(autoUse) then
  1016 + for itemId, count in pairs(autoUse) do
  1017 + self:useItem(itemId, count)
  1018 + end
  1019 + self:backUse(autoUse, 1)
  1020 + end
1004 1021 return tgift
1005 1022 end
1006 1023  
1007 1024  
  1025 +function Adv:useItem(itemId, count, target)
  1026 + local itemData = csvdb["adv_itemCsv"][itemId]
  1027 + if not itemData then return end
  1028 +
  1029 + if itemData["function"] == 0 or itemData["function"] == 2 then count = 1 end
  1030 +
  1031 + if itemId == 5020 then
  1032 + role:finishGuide(53)
  1033 + end
  1034 +
  1035 + self:checkAchievement(self.AchievType.UseItem, count, itemId)
  1036 + self:mylog({desc = "useItem", int1 = itemId, int2 = count})
  1037 +
  1038 + self.owner:log("mission_pick_use", {
  1039 + mission_threadid = self.chapterId, -- 大地图ID
  1040 + mission_threadname = (csvdb["adv_chapterCsv"][self.chapterId] or {})["chapter"] or "auto", -- 大地图名称
  1041 + mission_id = self.level, -- 关卡ID
  1042 + item_id = itemId, -- 道具ID
  1043 + mission_pick_use_num = count, -- 道具使用量
  1044 + mission_sequenceid = self.logid, -- 本次拾荒ID,用于关联一次拾荒产生多条不同类型的日志
  1045 + })
  1046 +
  1047 + for i = 1, count do
  1048 + self:doActive(itemData.effect, target) -- target
  1049 + end
  1050 +end
  1051 +
1008 1052 -- 消耗物品 优先冒险背包 --check 只是检查够不够
1009 1053 function Adv:cost(item, params, check)
1010 1054 local items = self.owner:getProperty("advItems")
... ... @@ -1071,7 +1115,7 @@ local function clickOut(self, room, block, params, isExit)
1071 1115 self.battle.player:triggerPassive(Passive.DOWN_LAYER)
1072 1116  
1073 1117 if curFloorData then
1074   - self:backReward(self:award({[ItemId.AdvPoint] = curFloorData.exp}, {log = {desc = "passReward", int1 = self.chapterId, int2 = self.level}}))
  1118 + self:award({[ItemId.AdvPoint] = curFloorData.exp}, {log = {desc = "passReward", int1 = self.chapterId, int2 = self.level}}, {})
1075 1119 end
1076 1120 local isHaveRelay = self:isHaveRelay(self.level)
1077 1121  
... ... @@ -1255,7 +1299,7 @@ local function chooseCommon(self, room, block, chooseData, choose, tag)
1255 1299 skynet.error(string.format("[ERROR]: event_dropCsv no id %s in %s id: %s", effect[2], tag, chooseData.id))
1256 1300 end
1257 1301 end
1258   - self:backReward(self:award(reward, {log = {desc = "chooseEvent", key1 = tag, int1 = chooseData.id}}), {roomId = room.roomId, blockId = block.blockId})
  1302 + self:award(reward, {log = {desc = "chooseEvent", key1 = tag, int1 = chooseData.id}}, {roomId = room.roomId, blockId = block.blockId})
1259 1303 end,
1260 1304 [2] = function() --获得冒险buff
1261 1305 local layer = effect[3] or 1
... ... @@ -1419,14 +1463,12 @@ local function clickDrop(self, room, block, params)
1419 1463 if not self.battle or not self.battle.player then return end
1420 1464 self.battle.player:triggerPassive(Passive.CLICK_DROP)
1421 1465  
1422   - local reward = self:award({[block.event.item[1]] = block.event.item[2]}, {log = {desc = "clickDrop"}})
1423   - -- local reward = self:award({[5801] = 1})
1424   - -- 获取绷带的引导
  1466 + local reward = self:award({[block.event.item[1]] = block.event.item[2]}, {log = {desc = "clickDrop"}}, {roomId = room.roomId, blockId = block.blockId})
  1467 +
1425 1468 if block.event.item[1] == 5020 and not self.owner:checkOverGuide(53,2) then
1426 1469 self.owner:saveGuide(53,2)
1427 1470 end
1428 1471 block:clear()
1429   - self:backReward(reward, {roomId = room.roomId, blockId = block.blockId})
1430 1472 return true
1431 1473 end
1432 1474  
... ... @@ -1447,7 +1489,7 @@ local function clickTrader(self, room, block, params)
1447 1489 local costCount = math.ceil(goodsData.price * (block.event.shop[buyId][2] or 100) / 100)
1448 1490 if not self:cost({[goodsData.currency] = costCount}, {log = {desc = "clickTrader", int1 = block.event.id}}) then return false, 6 end --不够
1449 1491 self:backCost({[goodsData.currency] = costCount})
1450   - local reward = self:award({[goodsData.item] = goodsData.num}, {log = {desc = "clickTrader", int1 = block.event.id}})
  1492 + self:award({[goodsData.item] = goodsData.num}, {log = {desc = "clickTrader", int1 = block.event.id}}, {})
1451 1493 if goodsData.restrict == 1 then
1452 1494 self.shopStatus[goodsData.goods] = (self.shopStatus[goodsData.goods] or 0) + 1
1453 1495 elseif goodsData.restrict == 2 then
... ... @@ -1459,7 +1501,6 @@ local function clickTrader(self, room, block, params)
1459 1501 buyCount = buyCount + 1
1460 1502 self:checkTask(Adv.TaskType.Shop, 1, block.event.id)
1461 1503 self:checkAchievement(Adv.AchievType.Shop, 1, block.event.id)
1462   - self:backReward(reward)
1463 1504  
1464 1505 if (traderData.purchasetime ~= 0 and traderData.purchasetime <= buyCount) or #block.event.shop <= buyCount then
1465 1506 block:clear()
... ... @@ -1501,7 +1542,7 @@ local function clickClick(self, room, block, params)
1501 1542 local item = csvdb["event_dropCsv"][dropId]["range"]:randWeight(true)
1502 1543 reward[item[1]] = (reward[item[1]] or 0) + item[2]
1503 1544 end
1504   - self:backReward(self:award(reward, {log = {desc = "clickClick", int1 = block.event.id}}), {roomId = room.roomId, blockId = block.blockId})
  1545 + self:award(reward, {log = {desc = "clickClick", int1 = block.event.id}}, {roomId = room.roomId, blockId = block.blockId})
1505 1546 end,
1506 1547 [3] = function()
1507 1548 for _, buffId in ipairs(clickData.effect:toArray(true, "=")) do
... ... @@ -1989,10 +2030,13 @@ end
1989 2030 function Adv:pushBackEvent(btype, params)
1990 2031 table.insert(self.backEvents, {btype = btype, params = params})
1991 2032 end
1992   -
  2033 +--[=[
  2034 +tag
  2035 +1 自动拾取
  2036 +--]=]
1993 2037 function Adv:backReward(items, params)
1994 2038 params = params or {}
1995   - self:pushBackEvent(AdvBackEventType.Reward, {items = items, roomId = params.roomId, blockId = params.blockId})
  2039 + self:pushBackEvent(AdvBackEventType.Reward, {items = items, roomId = params.roomId, blockId = params.blockId, tag = params.tag})
1996 2040 end
1997 2041  
1998 2042 -- if is player enemyId is nil
... ... @@ -2033,8 +2077,12 @@ function Adv:backCost(items)
2033 2077 self:pushBackEvent(AdvBackEventType.Cost, {items = items})
2034 2078 end
2035 2079  
2036   -function Adv:backUse(items)
2037   - self:pushBackEvent(AdvBackEventType.Use, {items = items})
  2080 +--[=[
  2081 +tag
  2082 +1 自动使用
  2083 +--]=]
  2084 +function Adv:backUse(items, tag)
  2085 + self:pushBackEvent(AdvBackEventType.Use, {items = items, tag = tag})
2038 2086 end
2039 2087  
2040 2088  
... ...
src/adv/AdvBlock.lua
... ... @@ -58,6 +58,7 @@ function Block:updateEvent(event, isInit)
58 58 end
59 59 self:randomEvent()
60 60 end
  61 + self:quickDrop()
61 62 end
62 63  
63 64 function Block:clear()
... ... @@ -263,9 +264,20 @@ function Block:open()
263 264 local adv = map.adv
264 265 self.isOpen = true
265 266 self:randomEvent()
  267 + self:quickDrop()
266 268 return true
267 269 end
268 270  
  271 +function Block:quickDrop()
  272 + if self:getEventType() == AdvEventType.Drop and self.event.item then
  273 + local itemId, count = table.unpack(self.event.item)
  274 + if globalCsv.adv_auto_collect[itemId] then
  275 + self.room.map.adv:award({[itemId] = count}, {log = {desc = "clickDrop"}}, {roomId = self.room.roomId, blockId = self.blockId, tag = 1})
  276 + self:clear()
  277 + end
  278 + end
  279 +end
  280 +
269 281 function Block:getObstacle()
270 282 local data = self:getEventData()
271 283 if not data then return 0 end
... ...
src/adv/AdvPassive.lua
... ... @@ -494,7 +494,7 @@ function Passive:effect8(dropId)
494 494 skynet.error(string.format("CSVDATA Error adv_map_passive %s effect 8 not id %s in event_drop", self.id, dropId))
495 495 end
496 496 local item = dropData["range"]:randWeight(true)
497   - self.owner.battle.adv:backReward(self.owner.battle.adv:award({[item[1]] = item[2]}, {log = {desc = "passive", int1 = self.id}}), {roomId = self.owner.roomId, blockId = self.owner.blockId})
  497 + self.owner.battle.adv:award({[item[1]] = item[2]}, {log = {desc = "passive", int1 = self.id}}, {roomId = self.owner.roomId, blockId = self.owner.blockId})
498 498  
499 499 end
500 500  
... ... @@ -509,7 +509,7 @@ function Passive:effect9(itemId, triggerPms, ratio, max)
509 509 return
510 510 end
511 511 if not cond then return end
512   - self.owner.battle.adv:backReward(self.owner.battle.adv:award({[itemId] = math.floor(math.max(0, math.min(max, cond / ratio)))}, {log = {desc = "passive", int1 = self.id}}), {roomId = self.owner.roomId, blockId = self.owner.blockId})
  512 + self.owner.battle.adv:award({[itemId] = math.floor(math.max(0, math.min(max, cond / ratio)))}, {log = {desc = "passive", int1 = self.id}}, {roomId = self.owner.roomId, blockId = self.owner.blockId})
513 513 end
514 514  
515 515 --10=战斗额外掉落次数
... ...