Commit 0027e33bf25e2172a48fa33ae3d7deccdc77d844

Authored by chenyueqi
1 parent fbd1b98c

调理剂生产和使用逻辑优化

@@ -72,7 +72,7 @@ ItemType = { @@ -72,7 +72,7 @@ ItemType = {
72 EquipBase = 9, -- 基础装备 72 EquipBase = 9, -- 基础装备
73 Rune = 10, -- 符文 73 Rune = 10, -- 符文
74 Cuisine = 11, -- 料理(用于增加好感度、贩卖获得金币) 74 Cuisine = 11, -- 料理(用于增加好感度、贩卖获得金币)
75 - LunchBox = 12, -- 便当盒(料理合成,冒险系统消耗道具) 75 + Potion = 12, -- 拾荒药剂
76 TimeBox = 13, -- 时间箱(开启需要时间,随机产出道具) 76 TimeBox = 13, -- 时间箱(开启需要时间,随机产出道具)
77 AdvItem = 14, -- 冒险道具 77 AdvItem = 14, -- 冒险道具
78 FuncOpen = 15, -- 管理功能开放 78 FuncOpen = 15, -- 管理功能开放
src/actions/AdvAction.lua
@@ -543,8 +543,8 @@ function _M.usePotionRpc(agent, data) @@ -543,8 +543,8 @@ function _M.usePotionRpc(agent, data)
543 local msg = MsgPack.unpack(data) 543 local msg = MsgPack.unpack(data)
544 local potionId = msg.potionId -- 营养剂Id 544 local potionId = msg.potionId -- 营养剂Id
545 local target = msg.target -- {roomId = 1, blockId = 1} 选择的目标 545 local target = msg.target -- {roomId = 1, blockId = 1} 选择的目标
546 - local potionLv = role.dinerData:getProperty("dishTree"):getv(potionId, 0)  
547 - if potionLv == 0 then return 1 end 546 + local potionLv = role.dinerData:getProperty("dishTree"):getv(potionId, 1)
  547 + if potionLv < 1 then return 1 end
548 548
549 local potionSet = csvdb["adv_potionCsv"][potionId] 549 local potionSet = csvdb["adv_potionCsv"][potionId]
550 if not potionSet then return 2 end 550 if not potionSet then return 2 end
@@ -552,12 +552,9 @@ function _M.usePotionRpc(agent, data) @@ -552,12 +552,9 @@ function _M.usePotionRpc(agent, data)
552 local potionData = potionSet[potionLv] 552 local potionData = potionSet[potionLv]
553 if not potionData then return 3 end 553 if not potionData then return 3 end
554 554
555 - local potionBag = role:getProperty("potionBag")  
556 - local own = potionBag[potionId] or 0  
557 - if own <= 0 then return 4 end  
558 -  
559 if not isCanContinue(role) then return end 555 if not isCanContinue(role) then return end
560 local adv = role:getAdvData() 556 local adv = role:getAdvData()
  557 + if not adv:cost({[potionId] = 1}, {}, true) then return 4 end
561 if adv:isWaitChooseArtifact() then return end 558 if adv:isWaitChooseArtifact() then return end
562 559
563 adv:mylog({desc = "usePotion", int1 = potionId}) 560 adv:mylog({desc = "usePotion", int1 = potionId})
@@ -565,8 +562,7 @@ function _M.usePotionRpc(agent, data) @@ -565,8 +562,7 @@ function _M.usePotionRpc(agent, data)
565 local status = adv:doActive(potionData.effect, target) -- target 562 local status = adv:doActive(potionData.effect, target) -- target
566 if not status then return end 563 if not status then return end
567 564
568 - potionBag[potionId] = own - 1  
569 - role:updateProperty({field = "potionBag", value = potionBag}) 565 + adv:cost({[potionId] = 1}, {log = {desc = "usePotion", int1 = potionId}})
570 adv:pushBackEvent(AdvBackEventType.Potion, {id = potionId}) 566 adv:pushBackEvent(AdvBackEventType.Potion, {id = potionId})
571 adv:afterRound() 567 adv:afterRound()
572 adv:saveDB() 568 adv:saveDB()
@@ -737,7 +733,7 @@ function _M.endBattleRpc(agent, data) @@ -737,7 +733,7 @@ function _M.endBattleRpc(agent, data)
737 role:finishGuide(52) 733 role:finishGuide(52)
738 -- 调理剂使用引导(生命药剂) 734 -- 调理剂使用引导(生命药剂)
739 if not role:checkOverGuide(61) then 735 if not role:checkOverGuide(61) then
740 - local potionBag = role:getProperty("potionBag") 736 + local potionBag = role:getProperty("advItems"):toNumMap()
741 local own = potionBag[10] or 0 737 local own = potionBag[10] or 0
742 if own > 0 then 738 if own > 0 then
743 -- 造假 739 -- 造假
src/actions/CarAction.lua
@@ -13,7 +13,7 @@ function _M.makePotionRpc( agent, data ) @@ -13,7 +13,7 @@ function _M.makePotionRpc( agent, data )
13 local count = msg.count 13 local count = msg.count
14 if count < 1 then return 0 end 14 if count < 1 then return 0 end
15 local potionBag = role:getProperty("potionBag") 15 local potionBag = role:getProperty("potionBag")
16 - local potionLv = role.dinerData:getProperty("dishTree"):getv(potionId, 0) 16 + local potionLv = role.dinerData:getProperty("dishTree"):getv(potionId, 1)
17 if potionLv < 1 then return 1 end 17 if potionLv < 1 then return 1 end
18 18
19 local potionSet = csvdb["adv_potionCsv"][potionId] 19 local potionSet = csvdb["adv_potionCsv"][potionId]
@@ -22,20 +22,15 @@ function _M.makePotionRpc( agent, data ) @@ -22,20 +22,15 @@ function _M.makePotionRpc( agent, data )
22 local potionData = potionSet[potionLv] 22 local potionData = potionSet[potionLv]
23 if not potionData then return 3 end 23 if not potionData then return 3 end
24 24
25 - local own = potionBag[potionId] or 0  
26 - if own+count > potionData.limit then  
27 - return 4  
28 - end  
29 -  
30 local cost = potionData.material:toNumMap() 25 local cost = potionData.material:toNumMap()
31 for k, n in pairs(cost) do 26 for k, n in pairs(cost) do
32 cost[k] = n * count 27 cost[k] = n * count
33 end 28 end
34 if not role:checkItemEnough(cost) then 29 if not role:checkItemEnough(cost) then
35 - return 5 30 + return 4
36 end 31 end
37 -  
38 role:costItems(cost, {log = {desc = "makePotion", int1 = potionId, int2 = count}}) 32 role:costItems(cost, {log = {desc = "makePotion", int1 = potionId, int2 = count}})
  33 + local own = potionBag[potionId] or 0
39 potionBag[potionId] = own + count 34 potionBag[potionId] = own + count
40 role:updateProperty({field = "potionBag", value = potionBag}) 35 role:updateProperty({field = "potionBag", value = potionBag})
41 role:checkTaskEnter("PotionMake", {count = count, id = potionId}) 36 role:checkTaskEnter("PotionMake", {count = count, id = potionId})
src/actions/DinerAction.lua
@@ -385,22 +385,12 @@ function _M.talentUpRpc( agent, data ) @@ -385,22 +385,12 @@ function _M.talentUpRpc( agent, data )
385 local msg = MsgPack.unpack(data) 385 local msg = MsgPack.unpack(data)
386 local dish = msg.dish 386 local dish = msg.dish
387 local dishTree = role.dinerData:getProperty("dishTree") 387 local dishTree = role.dinerData:getProperty("dishTree")
388 - local dishLevel = dishTree:getv(dish, 0)  
389 388
390 local talentSet = csvdb["diner_talentCsv"][dish] 389 local talentSet = csvdb["diner_talentCsv"][dish]
391 if not talentSet then 390 if not talentSet then
392 return 1 391 return 1
393 end 392 end
394 393
395 - local talentData = talentSet[dishLevel]  
396 - if not talentData then  
397 - return 2  
398 - end  
399 -  
400 - if not talentSet[dishLevel+1] then  
401 - return 21  
402 - end  
403 -  
404 local typ = math.floor(dish/100 + 1) 394 local typ = math.floor(dish/100 + 1)
405 local treeSet = csvdb["diner_treeCsv"][typ] 395 local treeSet = csvdb["diner_treeCsv"][typ]
406 if not treeSet then 396 if not treeSet then
@@ -412,6 +402,17 @@ function _M.talentUpRpc( agent, data ) @@ -412,6 +402,17 @@ function _M.talentUpRpc( agent, data )
412 return 4 402 return 4
413 end 403 end
414 404
  405 + -- 调理剂的默认等级是1级
  406 + local dishLevel = dishTree:getv(dish, treeData.rarity == 2 and 1 or 0)
  407 + local talentData = talentSet[dishLevel]
  408 + if not talentData then
  409 + return 2
  410 + end
  411 +
  412 + if not talentSet[dishLevel+1] then
  413 + return 21
  414 + end
  415 +
415 local limit = talentData.pointFront:toNumMap() 416 local limit = talentData.pointFront:toNumMap()
416 for k,v in pairs(limit) do 417 for k,v in pairs(limit) do
417 local lv = dishTree:getv(k, 0) 418 local lv = dishTree:getv(k, 0)
@@ -146,6 +146,10 @@ function Adv:initByChapter(params) @@ -146,6 +146,10 @@ function Adv:initByChapter(params)
146 end 146 end
147 end 147 end
148 148
  149 + if self.level == 1 or self.isRelay then
  150 + self:supplyPotion()
  151 + end
  152 +
149 self.maps = {} 153 self.maps = {}
150 self.maps[1] = AdvMap.new(self, 1, mapId, isEnter, isNewRelay) 154 self.maps[1] = AdvMap.new(self, 1, mapId, isEnter, isNewRelay)
151 155
@@ -396,9 +400,16 @@ function Adv:forceOver(notNotify) @@ -396,9 +400,16 @@ function Adv:forceOver(notNotify)
396 local advTeam = self.owner:getProperty("advTeam") 400 local advTeam = self.owner:getProperty("advTeam")
397 advTeam.player = nil 401 advTeam.player = nil
398 402
  403 + local advPotionCsv = csvdb["adv_potionCsv"]
  404 + local potionBag = self.owner:getProperty("potionBag")
  405 +
399 local reward = self.owner:getProperty("advItems"):toNumMap() 406 local reward = self.owner:getProperty("advItems"):toNumMap()
400 for itemId, count in pairs(reward) do 407 for itemId, count in pairs(reward) do
401 - reward[itemId] = math.ceil(count * globalCsv.adv_fail_reward_ratio / 100) -- 奖励相当于失败 408 + if advPotionCsv[itemId] then
  409 + potionBag[itemId] = (potionBag[itemId] or 0) + count
  410 + else
  411 + reward[itemId] = math.ceil(count * globalCsv.adv_fail_reward_ratio / 100) -- 奖励相当于失败
  412 + end
402 end 413 end
403 self.owner:award(reward, {log = {desc = "advOver", int1 = self.chapterId}}) 414 self.owner:award(reward, {log = {desc = "advOver", int1 = self.chapterId}})
404 415
@@ -409,6 +420,7 @@ function Adv:forceOver(notNotify) @@ -409,6 +420,7 @@ function Adv:forceOver(notNotify)
409 advItems = "", 420 advItems = "",
410 advAFGet = {}, 421 advAFGet = {},
411 advAFWear = {}, 422 advAFWear = {},
  423 + potionBag = potionBag,
412 }, notNotify) 424 }, notNotify)
413 end 425 end
414 end 426 end
@@ -789,12 +801,18 @@ function Adv:over(success, rewardRatio, overType) @@ -789,12 +801,18 @@ function Adv:over(success, rewardRatio, overType)
789 self.battle.player:triggerPassive(Passive.ADV_OVER, {score = score, level = self.level}) 801 self.battle.player:triggerPassive(Passive.ADV_OVER, {score = score, level = self.level})
790 802
791 local reward = {} 803 local reward = {}
  804 + local advPotionCsv = csvdb["adv_potionCsv"]
  805 + local potionBag = self.owner:getProperty("potionBag")
792 for itemId, count in pairs(self.owner:getProperty("advItems"):toNumMap()) do 806 for itemId, count in pairs(self.owner:getProperty("advItems"):toNumMap()) do
793 local itemCsv = csvdb["itemCsv"][itemId] 807 local itemCsv = csvdb["itemCsv"][itemId]
794 if not itemCsv then 808 if not itemCsv then
795 print("ERROR: no itemId in ItemCsv : ", itemId) 809 print("ERROR: no itemId in ItemCsv : ", itemId)
796 elseif itemCsv.type ~= ItemType.AdvItem then 810 elseif itemCsv.type ~= ItemType.AdvItem then
797 - reward[itemId] = math.ceil(count * rewardRatio / 100) 811 + if advPotionCsv[itemId] then
  812 + potionBag[itemId] = (potionBag[itemId] or 0) + count
  813 + else
  814 + reward[itemId] = math.ceil(count * rewardRatio / 100)
  815 + end
798 end 816 end
799 end 817 end
800 reward = self.owner:award(reward, {log = {desc = "advOver", int1 = self.chapterId}}) 818 reward = self.owner:award(reward, {log = {desc = "advOver", int1 = self.chapterId}})
@@ -889,6 +907,7 @@ function Adv:over(success, rewardRatio, overType) @@ -889,6 +907,7 @@ function Adv:over(success, rewardRatio, overType)
889 advItems = "", 907 advItems = "",
890 advAFGet = {}, 908 advAFGet = {},
891 advAFWear = {}, 909 advAFWear = {},
  910 + potionBag = potionBag,
892 }) 911 })
893 self:pushBackEvent(AdvBackEventType.End, { 912 self:pushBackEvent(AdvBackEventType.End, {
894 success = success, 913 success = success,
@@ -973,7 +992,8 @@ function Adv:award(gift, params, backRewardParams) @@ -973,7 +992,8 @@ function Adv:award(gift, params, backRewardParams)
973 if globalCsv.adv_auto_useItem[itemId] and count > 0 then 992 if globalCsv.adv_auto_useItem[itemId] and count > 0 then
974 autoUse[itemId] = count 993 autoUse[itemId] = count
975 else 994 else
976 - local origin = items:getv(itemId, 0) 995 + local transId = globalCsv.adv_item_potion[itemId] or itemId
  996 + local origin = items:getv(transId, 0)
977 local nums = origin + count 997 local nums = origin + count
978 998
979 if csvdb["adv_artifactCsv"][itemId] then -- 获得神器 999 if csvdb["adv_artifactCsv"][itemId] then -- 获得神器
@@ -983,10 +1003,10 @@ function Adv:award(gift, params, backRewardParams) @@ -983,10 +1003,10 @@ function Adv:award(gift, params, backRewardParams)
983 end 1003 end
984 else 1004 else
985 if nums <= 0 then 1005 if nums <= 0 then
986 - items = items:delk(itemId) 1006 + items = items:delk(transId)
987 nums = 0 1007 nums = 0
988 else 1008 else
989 - items = items:setv(itemId, nums) 1009 + items = items:setv(transId, nums)
990 end 1010 end
991 1011
992 if itemId == 16 and not self.owner:checkOverGuide(51,4) then 1012 if itemId == 16 and not self.owner:checkOverGuide(51,4) then
@@ -1064,6 +1084,7 @@ end @@ -1064,6 +1084,7 @@ end
1064 -- 消耗物品 优先冒险背包 --check 只是检查够不够 1084 -- 消耗物品 优先冒险背包 --check 只是检查够不够
1065 function Adv:cost(item, params, check) 1085 function Adv:cost(item, params, check)
1066 local items = self.owner:getProperty("advItems") 1086 local items = self.owner:getProperty("advItems")
  1087 + local potionCsv = csvdb["adv_potionCsv"]
1067 local less = {} 1088 local less = {}
1068 local advCost = {} 1089 local advCost = {}
1069 for itemId, count in pairs(item) do 1090 for itemId, count in pairs(item) do
@@ -1077,9 +1098,13 @@ function Adv:cost(item, params, check) @@ -1077,9 +1098,13 @@ function Adv:cost(item, params, check)
1077 less[itemId] = -last 1098 less[itemId] = -last
1078 end 1099 end
1079 1100
  1101 + if potionCsv[itemId] and last < 0 then -- 只能使用冒险背包里的药水
  1102 + return
  1103 + end
1080 end 1104 end
1081 if next(less) and not self.owner:checkItemEnough(less) then return end --不够 1105 if next(less) and not self.owner:checkItemEnough(less) then return end --不够
1082 if check then return true end 1106 if check then return true end
  1107 +
1083 self:award(advCost, params) 1108 self:award(advCost, params)
1084 if next(less) then 1109 if next(less) then
1085 self.owner:costItems(less, params) 1110 self.owner:costItems(less, params)
@@ -1087,6 +1112,25 @@ function Adv:cost(item, params, check) @@ -1087,6 +1112,25 @@ function Adv:cost(item, params, check)
1087 return true 1112 return true
1088 end 1113 end
1089 1114
  1115 +-- 补满冒险背包药剂,从药剂背包扣除药水放到冒险背包
  1116 +function Adv:supplyPotion()
  1117 + local potionCsv = csvdb["adv_potionCsv"]
  1118 + local potionBag = self.owner:getProperty("potionBag")
  1119 + local advItems = self.owner:getProperty("advItems")
  1120 + for potionId, set in pairs(potionCsv) do
  1121 + local count = potionBag[potionId] or 0
  1122 + if count > 0 then
  1123 + local num = math.min(set[1].limit,count)
  1124 + advItems = advItems:setv(potionId,num)
  1125 + potionBag[potionId] = num ~= count and (count - num) or nil
  1126 + end
  1127 + end
  1128 + self.owner:updateProperties({
  1129 + advItems = advItems,
  1130 + potionBag = potionBag,
  1131 + })
  1132 +end
  1133 +
1090 --事件点击处理 1134 --事件点击处理
1091 local function clickOut(self, room, block, params, isExit) 1135 local function clickOut(self, room, block, params, isExit)
1092 if self:getCurMap():checkOver() then --检查是否可以出去了 1136 if self:getCurMap():checkOver() then --检查是否可以出去了
src/models/RolePlugin.lua
@@ -131,6 +131,9 @@ function RolePlugin.bind(Role) @@ -131,6 +131,9 @@ function RolePlugin.bind(Role)
131 self:addItem(pms) 131 self:addItem(pms)
132 end 132 end
133 end, 133 end,
  134 + [ItemType.Potion] = function ()
  135 + self:addPotion({id = itemId, count = count, notNotify = pms.notNotify, log = pms.log})
  136 + end,
134 } 137 }
135 -- 对数量筛查 138 -- 对数量筛查
136 count = checkItemCount(self, itemId, count) 139 count = checkItemCount(self, itemId, count)
@@ -290,6 +293,37 @@ function RolePlugin.bind(Role) @@ -290,6 +293,37 @@ function RolePlugin.bind(Role)
290 self:changeCrossServerPvpSelfInfo("level") 293 self:changeCrossServerPvpSelfInfo("level")
291 end 294 end
292 295
  296 + function Role:addPotion(params)
  297 + dump(params)
  298 + local pId = globalCsv.adv_item_potion[params.id]
  299 + local potionBag = self:getProperty("potionBag")
  300 + local origin = potionBag[pId] or 0
  301 + local nums = origin + params.count
  302 + potionBag[pId] = nums
  303 +
  304 + self:logItems(params.id, origin, nums, params.log)
  305 + if params.log then
  306 + local log = clone(params.log)
  307 + if log["cint1"] or log["cint2"] then
  308 + print("addItem error log have cint1 or cint2 ", debug.traceback())
  309 + end
  310 + log["cint1"] = params.id
  311 + log["cint2"] = math.abs(params.count)
  312 + if params.count <= 0 then
  313 + self:mylog("out_item", log)
  314 + else
  315 + self:mylog("in_item", log)
  316 + end
  317 + else
  318 + print("addItem no log ", debug.traceback())
  319 + end
  320 +
  321 + self:updateProperty({field = "potionBag", value = potionBag})
  322 + if not params.notNotify then
  323 + SendPacket(actionCodes.Role_updateItems, MsgPack.pack({[params.id] = params.count}))
  324 + end
  325 + end
  326 +
293 function Role:addItem(params) 327 function Role:addItem(params)
294 params = params or {} 328 params = params or {}
295 params.count = math.floor(params.count or 0) 329 params.count = math.floor(params.count or 0)