Commit 0027e33bf25e2172a48fa33ae3d7deccdc77d844

Authored by chenyueqi
1 parent fbd1b98c

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

src/GlobalVar.lua
... ... @@ -72,7 +72,7 @@ ItemType = {
72 72 EquipBase = 9, -- 基础装备
73 73 Rune = 10, -- 符文
74 74 Cuisine = 11, -- 料理(用于增加好感度、贩卖获得金币)
75   - LunchBox = 12, -- 便当盒(料理合成,冒险系统消耗道具)
  75 + Potion = 12, -- 拾荒药剂
76 76 TimeBox = 13, -- 时间箱(开启需要时间,随机产出道具)
77 77 AdvItem = 14, -- 冒险道具
78 78 FuncOpen = 15, -- 管理功能开放
... ...
src/actions/AdvAction.lua
... ... @@ -543,8 +543,8 @@ function _M.usePotionRpc(agent, data)
543 543 local msg = MsgPack.unpack(data)
544 544 local potionId = msg.potionId -- 营养剂Id
545 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 549 local potionSet = csvdb["adv_potionCsv"][potionId]
550 550 if not potionSet then return 2 end
... ... @@ -552,12 +552,9 @@ function _M.usePotionRpc(agent, data)
552 552 local potionData = potionSet[potionLv]
553 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 555 if not isCanContinue(role) then return end
560 556 local adv = role:getAdvData()
  557 + if not adv:cost({[potionId] = 1}, {}, true) then return 4 end
561 558 if adv:isWaitChooseArtifact() then return end
562 559  
563 560 adv:mylog({desc = "usePotion", int1 = potionId})
... ... @@ -565,8 +562,7 @@ function _M.usePotionRpc(agent, data)
565 562 local status = adv:doActive(potionData.effect, target) -- target
566 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 566 adv:pushBackEvent(AdvBackEventType.Potion, {id = potionId})
571 567 adv:afterRound()
572 568 adv:saveDB()
... ... @@ -737,7 +733,7 @@ function _M.endBattleRpc(agent, data)
737 733 role:finishGuide(52)
738 734 -- 调理剂使用引导(生命药剂)
739 735 if not role:checkOverGuide(61) then
740   - local potionBag = role:getProperty("potionBag")
  736 + local potionBag = role:getProperty("advItems"):toNumMap()
741 737 local own = potionBag[10] or 0
742 738 if own > 0 then
743 739 -- 造假
... ...
src/actions/CarAction.lua
... ... @@ -13,7 +13,7 @@ function _M.makePotionRpc( agent, data )
13 13 local count = msg.count
14 14 if count < 1 then return 0 end
15 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 17 if potionLv < 1 then return 1 end
18 18  
19 19 local potionSet = csvdb["adv_potionCsv"][potionId]
... ... @@ -22,20 +22,15 @@ function _M.makePotionRpc( agent, data )
22 22 local potionData = potionSet[potionLv]
23 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 25 local cost = potionData.material:toNumMap()
31 26 for k, n in pairs(cost) do
32 27 cost[k] = n * count
33 28 end
34 29 if not role:checkItemEnough(cost) then
35   - return 5
  30 + return 4
36 31 end
37   -
38 32 role:costItems(cost, {log = {desc = "makePotion", int1 = potionId, int2 = count}})
  33 + local own = potionBag[potionId] or 0
39 34 potionBag[potionId] = own + count
40 35 role:updateProperty({field = "potionBag", value = potionBag})
41 36 role:checkTaskEnter("PotionMake", {count = count, id = potionId})
... ...
src/actions/DinerAction.lua
... ... @@ -385,22 +385,12 @@ function _M.talentUpRpc( agent, data )
385 385 local msg = MsgPack.unpack(data)
386 386 local dish = msg.dish
387 387 local dishTree = role.dinerData:getProperty("dishTree")
388   - local dishLevel = dishTree:getv(dish, 0)
389 388  
390 389 local talentSet = csvdb["diner_talentCsv"][dish]
391 390 if not talentSet then
392 391 return 1
393 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 394 local typ = math.floor(dish/100 + 1)
405 395 local treeSet = csvdb["diner_treeCsv"][typ]
406 396 if not treeSet then
... ... @@ -412,6 +402,17 @@ function _M.talentUpRpc( agent, data )
412 402 return 4
413 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 416 local limit = talentData.pointFront:toNumMap()
416 417 for k,v in pairs(limit) do
417 418 local lv = dishTree:getv(k, 0)
... ...
src/adv/Adv.lua
... ... @@ -146,6 +146,10 @@ function Adv:initByChapter(params)
146 146 end
147 147 end
148 148  
  149 + if self.level == 1 or self.isRelay then
  150 + self:supplyPotion()
  151 + end
  152 +
149 153 self.maps = {}
150 154 self.maps[1] = AdvMap.new(self, 1, mapId, isEnter, isNewRelay)
151 155  
... ... @@ -396,9 +400,16 @@ function Adv:forceOver(notNotify)
396 400 local advTeam = self.owner:getProperty("advTeam")
397 401 advTeam.player = nil
398 402  
  403 + local advPotionCsv = csvdb["adv_potionCsv"]
  404 + local potionBag = self.owner:getProperty("potionBag")
  405 +
399 406 local reward = self.owner:getProperty("advItems"):toNumMap()
400 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 413 end
403 414 self.owner:award(reward, {log = {desc = "advOver", int1 = self.chapterId}})
404 415  
... ... @@ -409,6 +420,7 @@ function Adv:forceOver(notNotify)
409 420 advItems = "",
410 421 advAFGet = {},
411 422 advAFWear = {},
  423 + potionBag = potionBag,
412 424 }, notNotify)
413 425 end
414 426 end
... ... @@ -789,12 +801,18 @@ function Adv:over(success, rewardRatio, overType)
789 801 self.battle.player:triggerPassive(Passive.ADV_OVER, {score = score, level = self.level})
790 802  
791 803 local reward = {}
  804 + local advPotionCsv = csvdb["adv_potionCsv"]
  805 + local potionBag = self.owner:getProperty("potionBag")
792 806 for itemId, count in pairs(self.owner:getProperty("advItems"):toNumMap()) do
793 807 local itemCsv = csvdb["itemCsv"][itemId]
794 808 if not itemCsv then
795 809 print("ERROR: no itemId in ItemCsv : ", itemId)
796 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 816 end
799 817 end
800 818 reward = self.owner:award(reward, {log = {desc = "advOver", int1 = self.chapterId}})
... ... @@ -889,6 +907,7 @@ function Adv:over(success, rewardRatio, overType)
889 907 advItems = "",
890 908 advAFGet = {},
891 909 advAFWear = {},
  910 + potionBag = potionBag,
892 911 })
893 912 self:pushBackEvent(AdvBackEventType.End, {
894 913 success = success,
... ... @@ -973,7 +992,8 @@ function Adv:award(gift, params, backRewardParams)
973 992 if globalCsv.adv_auto_useItem[itemId] and count > 0 then
974 993 autoUse[itemId] = count
975 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 997 local nums = origin + count
978 998  
979 999 if csvdb["adv_artifactCsv"][itemId] then -- 获得神器
... ... @@ -983,10 +1003,10 @@ function Adv:award(gift, params, backRewardParams)
983 1003 end
984 1004 else
985 1005 if nums <= 0 then
986   - items = items:delk(itemId)
  1006 + items = items:delk(transId)
987 1007 nums = 0
988 1008 else
989   - items = items:setv(itemId, nums)
  1009 + items = items:setv(transId, nums)
990 1010 end
991 1011  
992 1012 if itemId == 16 and not self.owner:checkOverGuide(51,4) then
... ... @@ -1064,6 +1084,7 @@ end
1064 1084 -- 消耗物品 优先冒险背包 --check 只是检查够不够
1065 1085 function Adv:cost(item, params, check)
1066 1086 local items = self.owner:getProperty("advItems")
  1087 + local potionCsv = csvdb["adv_potionCsv"]
1067 1088 local less = {}
1068 1089 local advCost = {}
1069 1090 for itemId, count in pairs(item) do
... ... @@ -1077,9 +1098,13 @@ function Adv:cost(item, params, check)
1077 1098 less[itemId] = -last
1078 1099 end
1079 1100  
  1101 + if potionCsv[itemId] and last < 0 then -- 只能使用冒险背包里的药水
  1102 + return
  1103 + end
1080 1104 end
1081 1105 if next(less) and not self.owner:checkItemEnough(less) then return end --不够
1082 1106 if check then return true end
  1107 +
1083 1108 self:award(advCost, params)
1084 1109 if next(less) then
1085 1110 self.owner:costItems(less, params)
... ... @@ -1087,6 +1112,25 @@ function Adv:cost(item, params, check)
1087 1112 return true
1088 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 1135 local function clickOut(self, room, block, params, isExit)
1092 1136 if self:getCurMap():checkOver() then --检查是否可以出去了
... ...
src/models/RolePlugin.lua
... ... @@ -131,6 +131,9 @@ function RolePlugin.bind(Role)
131 131 self:addItem(pms)
132 132 end
133 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 139 count = checkItemCount(self, itemId, count)
... ... @@ -290,6 +293,37 @@ function RolePlugin.bind(Role)
290 293 self:changeCrossServerPvpSelfInfo("level")
291 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 327 function Role:addItem(params)
294 328 params = params or {}
295 329 params.count = math.floor(params.count or 0)
... ...