Commit 8955225bcf74ac31cb4dfa6ca0436d8d9cdae11f
1 parent
96d591f7
快速拾取。快速使用
Showing
4 changed files
with
107 additions
and
64 deletions
Show diff stats
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=战斗额外掉落次数 | ... | ... |