Commit 6232e12181712e44ef9c61552e3fa1868f796ed5

Authored by 熊润斐
2 parents f043cffc 4a25969f

Merge branch 'cn/develop' into cn/publish/preview

# Conflicts:
#	src/csvdata
config/develop.lua
1 include("basic.lua") 1 include("basic.lua")
2 2
3 -logd = 0 -- 是否开启日志 3 +logd = 1 -- 是否开启日志
4 thread = 4 4 thread = 4
5 codeurl = "192.168.0.199:9090" 5 codeurl = "192.168.0.199:9090"
6 servId = 1 6 servId = 1
@@ -20,4 +20,4 @@ redis_auth = nil @@ -20,4 +20,4 @@ redis_auth = nil
20 mysql_host = "127.0.0.1" 20 mysql_host = "127.0.0.1"
21 mysql_port = 3306 21 mysql_port = 3306
22 mysql_user = "root" 22 mysql_user = "root"
23 -mysql_password = "123456"  
24 \ No newline at end of file 23 \ No newline at end of file
  24 +mysql_password = "123456"
src/ProtocolCode.lua
@@ -107,6 +107,7 @@ actionCodes = { @@ -107,6 +107,7 @@ actionCodes = {
107 Hero_itemComposeRpc = 225, 107 Hero_itemComposeRpc = 225,
108 Hero_setWishPoolRpc = 226, 108 Hero_setWishPoolRpc = 226,
109 Hero_changeSparkRpc = 227, 109 Hero_changeSparkRpc = 227,
  110 + Hero_saveGeniusTreeRpc = 228,
110 111
111 Hang_startRpc = 251, 112 Hang_startRpc = 251,
112 Hang_checkRpc = 252, 113 Hang_checkRpc = 252,
src/actions/ActivityAction.lua
@@ -143,7 +143,8 @@ function _M.signRpc(agent, data) @@ -143,7 +143,8 @@ function _M.signRpc(agent, data)
143 if monthData[curDay].daily_sign_email ~= "" then 143 if monthData[curDay].daily_sign_email ~= "" then
144 local emails = monthData[curDay].daily_sign_email:toArray(true,"=") 144 local emails = monthData[curDay].daily_sign_email:toArray(true,"=")
145 for _, emailId in pairs(emails) do 145 for _, emailId in pairs(emails) do
146 - redisproxy:insertEmail({roleId = role:getProperty("id"), emailId = emailId}) 146 + --redisproxy:insertEmail({roleId = role:getProperty("id"), emailId = emailId})
  147 + role:sendMail(emailId)
147 end 148 end
148 end 149 end
149 150
@@ -312,6 +313,7 @@ function _M.actBattleCommandTaskRpc(agent, data) @@ -312,6 +313,7 @@ function _M.actBattleCommandTaskRpc(agent, data)
312 activity_type = role.activity.ActivityType.BattleCommandTask, -- 活动类型,见活动类型枚举表 313 activity_type = role.activity.ActivityType.BattleCommandTask, -- 活动类型,见活动类型枚举表
313 activity_reward = reward, -- 活动奖励,json格式记录,{'itemid1':123,'itemid2':456,………...} 314 activity_reward = reward, -- 活动奖励,json格式记录,{'itemid1':123,'itemid2':456,………...}
314 }) 315 })
  316 + role:mylog("act_action", {desc="bcTask", int1=taskId, int2=taskCfg.resetType})
315 317
316 role:checkTaskEnter("FinishSpeTask", {taskId = taskId, actId = actId}) 318 role:checkTaskEnter("FinishSpeTask", {taskId = taskId, actId = actId})
317 319
@@ -1327,6 +1329,7 @@ function _M.buyBattleCommandLvlRpc(agent, data) @@ -1327,6 +1329,7 @@ function _M.buyBattleCommandLvlRpc(agent, data)
1327 role:costItems({[ItemId.Jade] = cost}, {log = {desc = "actBuyBpLevel", int1 = curLvl}}) 1329 role:costItems({[ItemId.Jade] = cost}, {log = {desc = "actBuyBpLevel", int1 = curLvl}})
1328 actData["lvl"] = nextLvl 1330 actData["lvl"] = nextLvl
1329 role.activity:updateActData("BattleCommand", actData) 1331 role.activity:updateActData("BattleCommand", actData)
  1332 + role:mylog("act_action", {desc="buyBcLvl", int1=count, int2=nextLvl})
1330 1333
1331 SendPacket(actionCodes.Activity_buyBattleCommandLvlRpc, MsgPack.pack({})) 1334 SendPacket(actionCodes.Activity_buyBattleCommandLvlRpc, MsgPack.pack({}))
1332 return true 1335 return true
src/actions/AdvAction.lua
@@ -183,6 +183,7 @@ function _M.startAdvRpc( agent, data ) @@ -183,6 +183,7 @@ function _M.startAdvRpc( agent, data )
183 cost = relayData.supply 183 cost = relayData.supply
184 end 184 end
185 role:checkTaskEnter("AdvCostPower", {count = cost}) 185 role:checkTaskEnter("AdvCostPower", {count = cost})
  186 + role:mylog("adv_action", {desc = "costPower", int1 = cost})
186 187
187 local support = {} -- 支援效果 188 local support = {} -- 支援效果
188 if AdvCommon.isEndless(chapterId) then 189 if AdvCommon.isEndless(chapterId) then
@@ -293,6 +294,8 @@ function _M.startHangRpc(agent, data) @@ -293,6 +294,8 @@ function _M.startHangRpc(agent, data)
293 if not role:checkAdvCount(adv_idle_energy) then return 7 end -- 是否有体力 294 if not role:checkAdvCount(adv_idle_energy) then return 7 end -- 是否有体力
294 295
295 role:checkTaskEnter("AdvCostPower", {count = adv_idle_energy}) 296 role:checkTaskEnter("AdvCostPower", {count = adv_idle_energy})
  297 + role:checkTaskEnter("AdvHangTime", {count = math.ceil(adv_idle_time / 3600)})
  298 + role:mylog("adv_action", {desc = "costPower", int1 = adv_idle_energy})
296 299
297 if not checkFormat(role, format, role:getAdvData():isRunning()) then return 8 end --编队是否正确 300 if not checkFormat(role, format, role:getAdvData():isRunning()) then return 8 end --编队是否正确
298 301
@@ -494,7 +497,6 @@ function _M.endHangRpc(agent, data) @@ -494,7 +497,6 @@ function _M.endHangRpc(agent, data)
494 497
495 role:checkTaskEnter("AdvHang", {}) 498 role:checkTaskEnter("AdvHang", {})
496 role:checkTaskEnter("AdvHangHeroCnt", {count = heroCnt}) 499 role:checkTaskEnter("AdvHangHeroCnt", {count = heroCnt})
497 - role:checkTaskEnter("AdvHangTime", {count = math.ceil(adv_idle_time / 3600)})  
498 500
499 SendPacket(actionCodes.Adv_endHangRpc, MsgPack.pack({reward = reward, change = change, isFull = isFull, heroFaith = heroFaithMap})) 501 SendPacket(actionCodes.Adv_endHangRpc, MsgPack.pack({reward = reward, change = change, isFull = isFull, heroFaith = heroFaithMap}))
500 return true 502 return true
src/actions/DinerAction.lua
@@ -182,13 +182,17 @@ function _M.getSellRewardRpc( agent, data ) @@ -182,13 +182,17 @@ function _M.getSellRewardRpc( agent, data )
182 local sells = json.decode(role.dinerData:getProperty("sells")) 182 local sells = json.decode(role.dinerData:getProperty("sells"))
183 183
184 local deltaTimes = {} 184 local deltaTimes = {}
185 - for slot, _ in pairs(sells) do 185 + for slot, sell in pairs(sells) do
  186 + local oldCount = sell.count
  187 + local sellDish = sell.dish
186 local temp = role.dinerData:updateSell(slot) or { 188 local temp = role.dinerData:updateSell(slot) or {
187 deltaCount = 0, 189 deltaCount = 0,
188 deltaTime = 0, 190 deltaTime = 0,
189 lastCount = 0, 191 lastCount = 0,
190 } 192 }
191 deltaTimes[slot] = temp.deltaTime 193 deltaTimes[slot] = temp.deltaTime
  194 + local sellCount = oldCount - temp.lastCount
  195 + role:mylog("diner_action", {desc = "sell", int1 = sellDish, int2 = sellCount})
192 end 196 end
193 sells = json.decode(role.dinerData:getProperty("sells")) 197 sells = json.decode(role.dinerData:getProperty("sells"))
194 for slot, sell in pairs(sells) do 198 for slot, sell in pairs(sells) do
@@ -238,7 +242,7 @@ function _M.getSellRewardRpc( agent, data ) @@ -238,7 +242,7 @@ function _M.getSellRewardRpc( agent, data )
238 role.dinerData:notifyUpdateProperty("order", role.dinerData:getProperty("order")) 242 role.dinerData:notifyUpdateProperty("order", role.dinerData:getProperty("order"))
239 end 243 end
240 244
241 - role:mylog("diner_action", {desc = "sell"}) 245 + --role:mylog("diner_action", {desc = "sell"})
242 246
243 SendPacket(actionCodes.Diner_getSellRewardRpc, MsgPack.pack({reward = reward, change = change})) 247 SendPacket(actionCodes.Diner_getSellRewardRpc, MsgPack.pack({reward = reward, change = change}))
244 return true 248 return true
@@ -327,7 +331,7 @@ function _M.expediteSellRpc( agent, data ) @@ -327,7 +331,7 @@ function _M.expediteSellRpc( agent, data )
327 end 331 end
328 role:checkTaskEnter("FoodSellQuick") 332 role:checkTaskEnter("FoodSellQuick")
329 333
330 - role:mylog("diner_action", {desc = "sellQ"}) 334 + role:mylog("diner_action", {desc = "sellQ", int1 = count + 1})
331 335
332 SendPacket(actionCodes.Diner_expediteSellRpc, MsgPack.pack({reward = reward, change = change, popular = popular})) 336 SendPacket(actionCodes.Diner_expediteSellRpc, MsgPack.pack({reward = reward, change = change, popular = popular}))
333 return true 337 return true
@@ -703,37 +707,47 @@ function _M.addWantFoodRpc(agent , data) @@ -703,37 +707,47 @@ function _M.addWantFoodRpc(agent , data)
703 if #ids > buildingData.business then return 2 end 707 if #ids > buildingData.business then return 2 end
704 708
705 local had = {} 709 local had = {}
706 - for _, itemId in ipairs(ids) do  
707 - if had[itemId] then return end  
708 - had[itemId] = 1  
709 - local foodData = csvdb["diner_materialCsv"][itemId]  
710 - if not foodData then return 3 end  
711 - if foodData.unlock ~= 0 then  
712 - -- 遍历adv_potion  
713 - for potionId, _ in pairs(csvdb["adv_potionCsv"]) do  
714 - local potionLv = role.dinerData:getProperty("dishTree"):getv(potionId, 0)  
715 - if potionLv < 1 then return 4 end  
716 -  
717 - local potionSet = csvdb["adv_potionCsv"][potionId]  
718 - if not potionSet then return 5 end  
719 -  
720 - local potionData = potionSet[potionLv]  
721 - if not potionData then return 6 end  
722 -  
723 - local cost = potionData.material:toNumMap()  
724 - if not cost[itemId] then return 7 end 710 + -- 遍历adv_potion
  711 + for potionId, potionData in pairs(csvdb["adv_potionCsv"]) do
  712 + local potionLv = role:getPotionLevel(potionId)
  713 + if potionLv > 0 then
  714 + local cfg = potionData[potionLv]
  715 + if cfg then
  716 + local cost = cfg.material:toNumMap()
  717 + for id, _ in pairs(cost) do
  718 + local itemData = csvdb["itemCsv"][id]
  719 + local mData = csvdb["diner_materialCsv"][id]
  720 + if itemData.type == ItemType.Cuisine and not had[id] then
  721 + had[id] = true
  722 + end
  723 + end
725 end 724 end
726 - if not role:checkHangPass(foodData.unlock) then  
727 - return 4 725 + end
  726 + end
  727 + -- 遍历dish
  728 + for id, lv in pairs(role.dinerData:getProperty("dishTree"):toNumMap()) do
  729 + if csvdb["diner_dishCsv"][id] and csvdb["diner_dishCsv"][id][lv] then
  730 + local data = csvdb["diner_dishCsv"][id][lv]
  731 + local costs = data.material:toNumMap()
  732 + for id, _ in pairs(costs) do
  733 + local itemData = csvdb["itemCsv"][id]
  734 + local mData = csvdb["diner_materialCsv"][id]
  735 + if itemData.type == ItemType.Cuisine and not had[id] then
  736 + had[id] = true
  737 + end
728 end 738 end
729 end 739 end
730 end 740 end
  741 + for _, itemId in ipairs(ids) do
  742 + if not had[itemId] then return 3 end
  743 + end
  744 +
731 local gfood = {} 745 local gfood = {}
732 for slot, itemId in ipairs(ids) do 746 for slot, itemId in ipairs(ids) do
733 gfood[slot] = {id = itemId, st = skynet.timex()} 747 gfood[slot] = {id = itemId, st = skynet.timex()}
734 end 748 end
735 749
736 - role:finishGuide(36) 750 + role:finishGuide(30)
737 role:mylog("diner_action", {desc = "wantFood"}) 751 role:mylog("diner_action", {desc = "wantFood"})
738 752
739 role.dinerData:updateProperty({field = "gfood", value = gfood}) 753 role.dinerData:updateProperty({field = "gfood", value = gfood})
src/actions/EmailAction.lua
@@ -133,6 +133,7 @@ function _M.drawAttachRpc(agent, data) @@ -133,6 +133,7 @@ function _M.drawAttachRpc(agent, data)
133 133
134 134
135 local email = require("models.Email").new({key = string.format("%d", id), id = id}) 135 local email = require("models.Email").new({key = string.format("%d", id), id = id})
  136 + email.owner = role
136 if not email:load() then return end 137 if not email:load() then return end
137 138
138 local attachments = getEmailAttachments(email) 139 local attachments = getEmailAttachments(email)
@@ -142,7 +143,7 @@ function _M.drawAttachRpc(agent, data) @@ -142,7 +143,7 @@ function _M.drawAttachRpc(agent, data)
142 email:setProperty("status", 2, true) 143 email:setProperty("status", 2, true)
143 email:log(role, 2) 144 email:log(role, 2)
144 SendPacket(actionCodes.Email_drawAttachRpc, MsgPack.pack({reward = reward, change = change})) 145 SendPacket(actionCodes.Email_drawAttachRpc, MsgPack.pack({reward = reward, change = change}))
145 - role:mylog("mail_action", {desc = "draw_attach", int1 = id, key1 = email:getProperty("title"), key2 = attachments}) 146 + role:mylog("mail_action", {desc = "draw_attach", int1 = email:getProperty("emailId"), key1 = email:getProperty("title"), key2 = attachments})
146 return true 147 return true
147 end 148 end
148 149
src/actions/FriendAction.lua
@@ -118,7 +118,6 @@ function _M.applyRpc(agent, data) @@ -118,7 +118,6 @@ function _M.applyRpc(agent, data)
118 118
119 local msg = MsgPack.unpack(data) 119 local msg = MsgPack.unpack(data)
120 local objectId = msg.roleId 120 local objectId = msg.roleId
121 - dump(msg)  
122 121
123 if objectId == roleId then 122 if objectId == roleId then
124 return 123 return
@@ -130,7 +129,6 @@ function _M.applyRpc(agent, data) @@ -130,7 +129,6 @@ function _M.applyRpc(agent, data)
130 red:sismember(FRIEND_BLACK_KEY:format(objectId), roleId) 129 red:sismember(FRIEND_BLACK_KEY:format(objectId), roleId)
131 red:sismember(FRIEND_BLACK_KEY:format(roleId), objectId) 130 red:sismember(FRIEND_BLACK_KEY:format(roleId), objectId)
132 end) 131 end)
133 - dump(redret)  
134 132
135 -- 玩家id不存在 133 -- 玩家id不存在
136 if not result and not roleExists(objectId) then 134 if not result and not roleExists(objectId) then
@@ -171,7 +169,7 @@ function _M.applyRpc(agent, data) @@ -171,7 +169,7 @@ function _M.applyRpc(agent, data)
171 myInfo.online = true 169 myInfo.online = true
172 myInfo.hadApply = true 170 myInfo.hadApply = true
173 171
174 - role:mylog("role_action", {desc = "addFriend", int1 = 1}) 172 + role:mylog("role_action", {desc = "applyFriend", int1 = 1})
175 173
176 rpcRole(objectId, "SendPacket", actionCodes.Friend_updateProperty, MsgPack.pack({newApply = 1, info = {myInfo}})) -- 通知对方 174 rpcRole(objectId, "SendPacket", actionCodes.Friend_updateProperty, MsgPack.pack({newApply = 1, info = {myInfo}})) -- 通知对方
177 end 175 end
@@ -420,6 +418,7 @@ function _M.deleteRpc(agent, data) @@ -420,6 +418,7 @@ function _M.deleteRpc(agent, data)
420 friend_roleid = objectId, -- 好友账户下的角色id 418 friend_roleid = objectId, -- 好友账户下的角色id
421 friend_cnt = 0, -- 操作后好友数量 419 friend_cnt = 0, -- 操作后好友数量
422 }) 420 })
  421 + role:mylog("role_action", {desc = "delFriend", int1 = 1})
423 SendPacket(actionCodes.Friend_deleteRpc, MsgPack.pack("")) 422 SendPacket(actionCodes.Friend_deleteRpc, MsgPack.pack(""))
424 return true 423 return true
425 end 424 end
@@ -646,18 +645,19 @@ function _M.randomRpc(agent, data) @@ -646,18 +645,19 @@ function _M.randomRpc(agent, data)
646 for idx, objId in ipairs(needRoleIds) do 645 for idx, objId in ipairs(needRoleIds) do
647 if not redret[idx] then 646 if not redret[idx] then
648 local online, info = getRoleInfo(objId) 647 local online, info = getRoleInfo(objId)
649 - table.insert(randomRoles, table_merge({  
650 - roleId = objId,  
651 - online = online,  
652 - hadApply = hadApply,  
653 - inBlack = inBlack,  
654 - }, info, {  
655 -  
656 - }))  
657 - if #randomRoles >= globalCsv.friendRecommendLimit then break end 648 + if next(info) then
  649 + table.insert(randomRoles, table_merge({
  650 + roleId = objId,
  651 + online = online,
  652 + hadApply = hadApply,
  653 + inBlack = inBlack,
  654 + }, info, {
  655 +
  656 + }))
  657 + if #randomRoles >= globalCsv.friendRecommendLimit then break end
  658 + end
658 end 659 end
659 end 660 end
660 -  
661 SendPacket(actionCodes.Friend_randomRpc, MsgPack.pack({list = randomRoles})) 661 SendPacket(actionCodes.Friend_randomRpc, MsgPack.pack({list = randomRoles}))
662 return true 662 return true
663 end 663 end
src/actions/GmAction.lua
@@ -301,9 +301,13 @@ function _M.get(role, pms) @@ -301,9 +301,13 @@ function _M.get(role, pms)
301 end 301 end
302 end 302 end
303 elseif pms.pm1 == "HERO" then 303 elseif pms.pm1 == "HERO" then
304 - for itemId = 400 , 700 do 304 + local unitCsv = csvdb["unitCsv"]
  305 + for itemId = 400 , 800 do
305 if csvdb["itemCsv"][itemId] then 306 if csvdb["itemCsv"][itemId] then
306 - role:award({[itemId] = 1}, {log = {desc = "gm"}}) 307 + local heroUnit = unitCsv[itemId - 300]
  308 + if heroUnit.open == 1 then
  309 + role:award({[itemId] = 1}, {log = {desc = "gm"}})
  310 + end
307 end 311 end
308 end 312 end
309 elseif pms.pm1 == "MAXHERO" then 313 elseif pms.pm1 == "MAXHERO" then
@@ -984,5 +988,43 @@ function _M.drawHero(role, t, act) @@ -984,5 +988,43 @@ function _M.drawHero(role, t, act)
984 return result 988 return result
985 end 989 end
986 990
  991 +table.insert(helpDes, {"宝藏图鉴", "treasure", "list"} )
  992 +function _M.treasure(role, pms)
  993 + local pm1 = pms.pm1
  994 + if pm1 == "LIST" then
  995 + local treasureList= role.dailyData:getProperty("treasureList")
  996 + dump(treasureList)
  997 + return "宝藏图鉴"
  998 + elseif pm1 == "FLUSH" then
  999 + local treasureList= role.dailyData:getTreasrueList(role)
  1000 + dump(treasureList)
  1001 + return "宝藏图鉴"
  1002 + elseif pm1 == "CHECK" then
  1003 + local treasureList = role.dailyData:checkTreasureList(role)
  1004 + if treasureList == nil then
  1005 + return "未挖到宝藏"
  1006 + end
  1007 + dump(treasureList)
  1008 + return "挖宝成功"
  1009 + elseif pm1 == "RESET" then
  1010 + role.dailyData:resetTreasureList()
  1011 + return "重置宝藏图鉴"
  1012 + else
  1013 + return "暂无指令: ".. pm1
  1014 + end
  1015 +end
  1016 +
  1017 +table.insert(helpDes, {"天赋点设置", "savegenius", "heroId", "wakeL", "awake"})
  1018 +function _M.savegenius(role, pms)
  1019 + local heroId = pms.pm1
  1020 + local wakeL = pms.pm2
  1021 + local awake = pms.pm3
  1022 + local hero = role.heros[tonumber(heroId)]
  1023 +
  1024 + if not hero then return "英雄不存在" end
  1025 + local genius = hero:saveGeniusTree(wakeL, awake)
  1026 + print(genius)
  1027 + return "天赋点设置成功"
  1028 +end
987 1029
988 return _M 1030 return _M
989 \ No newline at end of file 1031 \ No newline at end of file
src/actions/HangAction.lua
@@ -16,7 +16,18 @@ local table_unpack = table.unpack @@ -16,7 +16,18 @@ local table_unpack = table.unpack
16 16
17 local _M = {} 17 local _M = {}
18 18
19 -local function checkReward(role) 19 +local function getHangTime(role)
  20 + local hangInfo = role:getProperty("hangInfo")
  21 + if not hangInfo.carbonId or not hangInfo.coinTime or not hangInfo.itemTime then
  22 + return 0
  23 + end
  24 + local carbonData = csvdb["idle_battleCsv"][hangInfo.carbonId]
  25 + local nowCoinTime = math.min(skynet.timex(), hangInfo.endCoinTime or 0)
  26 +
  27 + return nowCoinTime - hangInfo.coinTime
  28 +end
  29 +
  30 +local function checkReward(role, isTreasure, carbonId)
20 local hangInfo = role:getProperty("hangInfo") 31 local hangInfo = role:getProperty("hangInfo")
21 if not hangInfo.carbonId or not hangInfo.coinTime or not hangInfo.itemTime then 32 if not hangInfo.carbonId or not hangInfo.coinTime or not hangInfo.itemTime then
22 return false 33 return false
@@ -45,7 +56,7 @@ local function checkReward(role) @@ -45,7 +56,7 @@ local function checkReward(role)
45 coinCount = (coinCount + coinDoubleCount) * expCoef 56 coinCount = (coinCount + coinDoubleCount) * expCoef
46 items[ItemId.Gold] = math.floor((items[ItemId.Gold] or 0) + coinCount * (expCarbonData.money or 0)) 57 items[ItemId.Gold] = math.floor((items[ItemId.Gold] or 0) + coinCount * (expCarbonData.money or 0))
47 items[ItemId.Exp] = math.floor((items[ItemId.Exp] or 0) + coinCount * (expCarbonData.exp or 0)) 58 items[ItemId.Exp] = math.floor((items[ItemId.Exp] or 0) + coinCount * (expCarbonData.exp or 0))
48 - items[ItemId.PlayerExp] = math.floor((items[ItemId.PlayerExp] or 0) + (coinCount * expCarbonData.playerExp or 0)) 59 + items[ItemId.PlayerExp] = math.floor((items[ItemId.PlayerExp] or 0) + coinCount * (expCarbonData.playerExp or 0))
49 60
50 local pool = {} 61 local pool = {}
51 for _, temp in pairs(carbonData.item:toArray()) do 62 for _, temp in pairs(carbonData.item:toArray()) do
@@ -114,6 +125,19 @@ local function checkReward(role) @@ -114,6 +125,19 @@ local function checkReward(role)
114 randomItem() 125 randomItem()
115 end 126 end
116 127
  128 + --挂机得到的宝藏加入到挂机奖励
  129 + if isTreasure or false == true then
  130 + local treasureList= role.dailyData:checkTreasureList(hangInfo.carbonId) or {}
  131 + if next(treasureList) ~= nil then
  132 + for id, val in pairs(treasureList) do
  133 + local award = val.award:toNumMap()
  134 + for k,v in pairs(award) do
  135 + items[k] = (award[k] or 0) + v
  136 + end
  137 + end
  138 + end
  139 + end
  140 +
117 if coinCount > 0 or itemCount > 0 then 141 if coinCount > 0 or itemCount > 0 then
118 return true 142 return true
119 end 143 end
@@ -147,7 +171,7 @@ function _M.startRpc( agent, data ) @@ -147,7 +171,7 @@ function _M.startRpc( agent, data )
147 end 171 end
148 end 172 end
149 173
150 - if checkReward(role) then 174 + if checkReward(role, true, carbonId) then
151 role:updateProperty({field = "hangBag", value = role:getProperty("hangBag")}) 175 role:updateProperty({field = "hangBag", value = role:getProperty("hangBag")})
152 end 176 end
153 177
@@ -214,6 +238,7 @@ function _M.startBattleRpc(agent, data) @@ -214,6 +238,7 @@ function _M.startBattleRpc(agent, data)
214 end 238 end
215 239
216 _BattleKey = tostring(math.random()) 240 _BattleKey = tostring(math.random())
  241 + role._StartBattleTs = skynet.timex()
217 242
218 role:checkTaskEnter("HangBattle", {id = carbonId}) 243 role:checkTaskEnter("HangBattle", {id = carbonId})
219 SendPacket(actionCodes.Hang_startBattleRpc, MsgPack.pack({key = _BattleKey})) 244 SendPacket(actionCodes.Hang_startBattleRpc, MsgPack.pack({key = _BattleKey}))
@@ -241,7 +266,7 @@ function _M.endBattleRpc(agent, data) @@ -241,7 +266,7 @@ function _M.endBattleRpc(agent, data)
241 -- end 266 -- end
242 --end 267 --end
243 268
244 - if role:checkHangPass(carbonId) then 269 + if role:checkHangPass(carbonId) then
245 return 4 270 return 4
246 end 271 end
247 272
@@ -313,6 +338,12 @@ function _M.endBattleRpc(agent, data) @@ -313,6 +338,12 @@ function _M.endBattleRpc(agent, data)
313 -- hangInfo.bossTime = skynet.timex() + cfg.idle_time 338 -- hangInfo.bossTime = skynet.timex() + cfg.idle_time
314 --end 339 --end
315 end 340 end
  341 +
  342 + --刷新宝藏图鉴
  343 + if isWin and globalCsv.idle_treasure_point and globalCsv.idle_treasure_point == carbonId then
  344 + role.dailyData:getTreasrueList()
  345 + end
  346 +
316 role:updateProperty({field = "hangInfo", value = hangInfo}) 347 role:updateProperty({field = "hangInfo", value = hangInfo})
317 348
318 role:checkBattle("hang", { 349 role:checkBattle("hang", {
@@ -323,7 +354,9 @@ function _M.endBattleRpc(agent, data) @@ -323,7 +354,9 @@ function _M.endBattleRpc(agent, data)
323 }) 354 })
324 355
325 local team = role:getProperty("pvpTC") 356 local team = role:getProperty("pvpTC")
326 - role:mylog("hang_action", {desc = "hangBattle", short1 = msg.starNum > 0 and 1 or 0, int1 = carbonId, int2 = role:getProperty("hangTBV"), cint1 = role:getHerosCamp(team.heros)}) 357 +
  358 + local battleTime = skynet.timex() - role._StartBattleTs
  359 + role:mylog("hang_action", {desc = "hangBattle", short1 = msg.starNum > 0 and 1 or 0, int1 = carbonId, int2 = role:getProperty("hangTBV"), cint1 = role:getHerosCamp(team.heros), cint2 = battleTime})
327 360
328 SendPacket(actionCodes.Hang_endBattleRpc, MsgPack.pack({ 361 SendPacket(actionCodes.Hang_endBattleRpc, MsgPack.pack({
329 starNum = msg.starNum, 362 starNum = msg.starNum,
@@ -394,7 +427,8 @@ end @@ -394,7 +427,8 @@ end
394 427
395 function _M.getRewardRpc(agent , data) 428 function _M.getRewardRpc(agent , data)
396 local role = agent.role 429 local role = agent.role
397 - checkReward(role) 430 + local hangTime = getHangTime(role)
  431 + checkReward(role, true)
398 local items = role:getProperty("hangBag") 432 local items = role:getProperty("hangBag")
399 if not next(items) then return end 433 if not next(items) then return end
400 local reward, change = role:award(items, {log = {desc = "hangReward"}}) 434 local reward, change = role:award(items, {log = {desc = "hangReward"}})
@@ -424,6 +458,7 @@ function _M.getRewardRpc(agent , data) @@ -424,6 +458,7 @@ function _M.getRewardRpc(agent , data)
424 residence_reward = reward, --获得奖励,建议使用json格式记录。示例:{ "XX": "1", "XXX": "3"} 458 residence_reward = reward, --获得奖励,建议使用json格式记录。示例:{ "XX": "1", "XXX": "3"}
425 }) 459 })
426 460
  461 + role:mylog("hang_action", {desc = "hangReward", int1 = hangInfo.carbonId, int2=hangTime})
427 462
428 SendPacket(actionCodes.Hang_getRewardRpc, MsgPack.pack({ 463 SendPacket(actionCodes.Hang_getRewardRpc, MsgPack.pack({
429 reward = reward, 464 reward = reward,
@@ -493,6 +528,8 @@ function _M.quickRpc(agent , data) @@ -493,6 +528,8 @@ function _M.quickRpc(agent , data)
493 residence_time = time, --挂机或排名时长 528 residence_time = time, --挂机或排名时长
494 residence_reward = reward, --获得奖励,建议使用json格式记录。示例:{ "XX": "1", "XXX": "3"} 529 residence_reward = reward, --获得奖励,建议使用json格式记录。示例:{ "XX": "1", "XXX": "3"}
495 }) 530 })
  531 + role:mylog("hang_action", {desc = "quick", int1 = hangInfo.carbonId, short1 = curCount})
  532 +
496 SendPacket(actionCodes.Hang_quickRpc, MsgPack.pack({ 533 SendPacket(actionCodes.Hang_quickRpc, MsgPack.pack({
497 reward = reward, 534 reward = reward,
498 change = change 535 change = change
src/actions/HeroAction.lua
@@ -151,6 +151,10 @@ function _M.wakeRpc(agent, data) @@ -151,6 +151,10 @@ function _M.wakeRpc(agent, data)
151 if curLevel == 3 then -- 解锁cg 151 if curLevel == 3 then -- 解锁cg
152 role:checkTaskEnter("WakeCG", {heroType = typ}) 152 role:checkTaskEnter("WakeCG", {heroType = typ})
153 end 153 end
  154 +
  155 + if curLevel >= 4 then --自动觉醒技能
  156 + hero:increGeniusTree()
  157 + end
154 hero:mylog({desc = "wake", int1 = hero:getProperty("wakeL")}) 158 hero:mylog({desc = "wake", int1 = hero:getProperty("wakeL")})
155 159
156 role:log("hero_rise", { 160 role:log("hero_rise", {
@@ -728,7 +732,7 @@ function _M.getResetRewardRpc(agent, data) @@ -728,7 +732,7 @@ function _M.getResetRewardRpc(agent, data)
728 equip = "", 732 equip = "",
729 rune = "", 733 rune = "",
730 }) 734 })
731 - hero:mylog({desc = "resetHero"}) 735 + hero:mylog({desc = "resetHero", int1=tmpLevel})
732 736
733 --local coef = globalCsv.unit_back_discount 737 --local coef = globalCsv.unit_back_discount
734 --coef = (pay or tmpLevel <= 60) and 1 or coef 738 --coef = (pay or tmpLevel <= 60) and 1 or coef
@@ -805,6 +809,7 @@ function _M.drawHeroRpc(agent, data) @@ -805,6 +809,7 @@ function _M.drawHeroRpc(agent, data)
805 809
806 -- 计算抽卡消耗品 810 -- 计算抽卡消耗品
807 local cost = {} 811 local cost = {}
  812 + local drawAddReward = {}
808 if buildTypeData["draw_coin_1"] == "" then 813 if buildTypeData["draw_coin_1"] == "" then
809 return 11 814 return 11
810 end 815 end
@@ -991,19 +996,29 @@ function _M.drawHeroRpc(agent, data) @@ -991,19 +996,29 @@ function _M.drawHeroRpc(agent, data)
991 local fragId = itemData.id - ItemStartId.Hero 996 local fragId = itemData.id - ItemStartId.Hero
992 local heroData = csvdb["unitCsv"][fragId] 997 local heroData = csvdb["unitCsv"][fragId]
993 local count = globalCsv.draw_unit_tofragment[heroData.rare] 998 local count = globalCsv.draw_unit_tofragment[heroData.rare]
994 - role:award({[fragId] = count}, {log = {desc = "drawHero", int1 = btype, int2 = poolId}}) 999 + role:award({[fragId] = count}, {log = {desc = "drawHero", int1 = btype, int2 = poolId, short1=isFloorBack and 1 or 0}})
995 logReward[fragId] = (logReward[fragId] or 0) + count 1000 logReward[fragId] = (logReward[fragId] or 0) + count
996 table.insert(reward, {id = fragId, count = count, from = itemId, fcount = 1}) 1001 table.insert(reward, {id = fragId, count = count, from = itemId, fcount = 1})
997 else 1002 else
998 - role:award({[itemId] = 1}, {log = {desc = "drawHero", int1 = btype, int2 = poolId}}) 1003 + role:award({[itemId] = 1}, {log = {desc = "drawHero", int1 = btype, int2 = poolId, short1=isFloorBack and 1 or 0}})
999 logReward[itemId] = (logReward[itemId] or 0) + 1 1004 logReward[itemId] = (logReward[itemId] or 0) + 1
1000 table.insert(reward, {id = itemId, count = 1}) 1005 table.insert(reward, {id = itemId, count = 1})
1001 end 1006 end
1002 1007
  1008 + -- 招募得到的英雄追加奖励
  1009 + local unitData = csvdb["unitCsv"][itemData.id - ItemStartId.Hero]
  1010 + if unitData.build_award ~= "" then
  1011 + for tId, tCount in pairs(unitData.build_award:toNumMap()) do
  1012 + drawAddReward[tId] = (drawAddReward[tId] or 0) + tCount
  1013 + end
  1014 + end
  1015 + --
  1016 +
1003 dailyDrawCnt = dailyDrawCnt + 1 1017 dailyDrawCnt = dailyDrawCnt + 1
1004 role:checkTaskEnter("DrawHeroLimitPack", {count = dailyDrawCnt}) 1018 role:checkTaskEnter("DrawHeroLimitPack", {count = dailyDrawCnt})
1005 end 1019 end
1006 1020
  1021 + role:award(drawAddReward, {log = {desc = "drawHero", int1 = btype}})
1007 role.dailyData:setProperty("drawHeroCnt", dailyDrawCnt) 1022 role.dailyData:setProperty("drawHeroCnt", dailyDrawCnt)
1008 1023
1009 if draw_floor_back_counts then 1024 if draw_floor_back_counts then
@@ -1035,7 +1050,9 @@ function _M.drawHeroRpc(agent, data) @@ -1035,7 +1050,9 @@ function _M.drawHeroRpc(agent, data)
1035 gacha_cost = cost, -- 购买道具消耗的货币 1050 gacha_cost = cost, -- 购买道具消耗的货币
1036 gacha_cnt = floorHeroCount, 1051 gacha_cnt = floorHeroCount,
1037 }) 1052 })
1038 - SendPacket(actionCodes.Hero_drawHeroRpc, MsgPack.pack({reward = reward})) -- 这个 reward 是数组 1053 +
  1054 + role:mylog("hero_action", {desc = "drawHero", int1=poolId, int2=btype, short1 = drawCount[drawType]})
  1055 + SendPacket(actionCodes.Hero_drawHeroRpc, MsgPack.pack({reward = reward, subReward = drawAddReward})) -- 这个 reward 是数组
1039 1056
1040 local feedbackId = buildTypeData["can_feedback"] or 0 1057 local feedbackId = buildTypeData["can_feedback"] or 0
1041 if feedbackId ~= 0 then 1058 if feedbackId ~= 0 then
@@ -1275,4 +1292,26 @@ function _M.changeSparkRpc(agent, data) @@ -1275,4 +1292,26 @@ function _M.changeSparkRpc(agent, data)
1275 return true 1292 return true
1276 end 1293 end
1277 1294
  1295 +function _M.saveGeniusTreeRpc(agent, data)
  1296 + local role = agent.role
  1297 + local msg = MsgPack.unpack(data)
  1298 +
  1299 + local awake = msg.awake
  1300 + local wakeL = msg.wakeL
  1301 + local heroId = msg.hero_id
  1302 + local hero = role.heros[tonumber(heroId)]
  1303 +
  1304 + if not hero then print("hero is nil") return 0 end
  1305 +
  1306 + if wakeL > hero:getProperty("wakeL") then return 1 end
  1307 +
  1308 + local genius = hero:saveGeniusTree(wakeL, awake)
  1309 + if #genius == 0 then
  1310 + genius = ""
  1311 + end
  1312 + hero:updateProperty({field="genius", value=genius})
  1313 + SendPacket(actionCodes.Hero_saveGeniusTreeRpc, MsgPack.pack({genius = genius}))
  1314 + return true
  1315 +end
  1316 +
1278 return _M 1317 return _M
src/actions/RadioAction.lua
@@ -199,7 +199,8 @@ function _M.finishQuestRpc(agent, data) @@ -199,7 +199,8 @@ function _M.finishQuestRpc(agent, data)
199 mission_result = 1, -- 战斗结果(0-无效,1-胜利,2-失败) 199 mission_result = 1, -- 战斗结果(0-无效,1-胜利,2-失败)
200 mission_roundtime = config.time, -- 完成耗时(秒) 200 mission_roundtime = config.time, -- 完成耗时(秒)
201 mission_cleartype = 2, -- 1-开始; 2-完成(领取奖励时) 201 mission_cleartype = 2, -- 1-开始; 2-完成(领取奖励时)
202 - }) 202 + })
  203 + role:mylog("role_action", {desc = "radioTask", int1 = id, short1 = bigSuccess and 1 or 0})
203 204
204 return true 205 return true
205 end 206 end
src/actions/RoleAction.lua
@@ -399,7 +399,8 @@ function _M.createRpc(agent, data) @@ -399,7 +399,8 @@ function _M.createRpc(agent, data)
399 399
400 newRole:award(globalCsv.birthItem, {log = {desc = "birth"}, notNotify = true}) 400 newRole:award(globalCsv.birthItem, {log = {desc = "birth"}, notNotify = true})
401 -- 欢迎邮件 401 -- 欢迎邮件
402 - mysqlproxy:insertEmail({roleId = roleId, emailId = 1}) 402 + --mysqlproxy:insertEmail({roleId = roleId, emailId = 1})
  403 + newRole:sendMail(1)
403 404
404 if msg.newuser then 405 if msg.newuser then
405 newRole:log("onCreateAccount") 406 newRole:log("onCreateAccount")
@@ -904,8 +905,10 @@ function _M.taskRpc(agent, data) @@ -904,8 +905,10 @@ function _M.taskRpc(agent, data)
904 -- 日常活动完成 905 -- 日常活动完成
905 if taskType == 1 then 906 if taskType == 1 then
906 role:checkTaskEnter("DailyTask", {pre = (taskStatus["a"] or 0), cur = active}) 907 role:checkTaskEnter("DailyTask", {pre = (taskStatus["a"] or 0), cur = active})
  908 + role:mylog("role_action", {desc="dayTask", int1=taskId, int2=active})
907 else 909 else
908 role:checkTaskEnter("WeekTask", {pre = (taskStatus["a"] or 0), cur = active}) 910 role:checkTaskEnter("WeekTask", {pre = (taskStatus["a"] or 0), cur = active})
  911 + role:mylog("role_action", {desc="weekTask", int1=taskId, int2=active})
909 end 912 end
910 913
911 role:changeUpdates({ 914 role:changeUpdates({
@@ -1000,6 +1003,8 @@ function _M.achiveRpc(agent, data) @@ -1000,6 +1003,8 @@ function _M.achiveRpc(agent, data)
1000 achievement_type = cfg.type, -- 成就类型,具体枚举表中成就类型枚举表 1003 achievement_type = cfg.type, -- 成就类型,具体枚举表中成就类型枚举表
1001 achievement_reward = award, -- 达成成就奖励,json格式记录,{"itemid1":123,"itemid2":12,……….} 1004 achievement_reward = award, -- 达成成就奖励,json格式记录,{"itemid1":123,"itemid2":12,……….}
1002 }) 1005 })
  1006 +
  1007 + role:mylog("role_action", {desc="finishAchieve", int1=cfg.id})
1003 end 1008 end
1004 end 1009 end
1005 end 1010 end
@@ -1034,6 +1039,7 @@ function _M.achiveRpc(agent, data) @@ -1034,6 +1039,7 @@ function _M.achiveRpc(agent, data)
1034 achievement_type = achiveTask.type, -- 成就类型,具体枚举表中成就类型枚举表 1039 achievement_type = achiveTask.type, -- 成就类型,具体枚举表中成就类型枚举表
1035 achievement_reward = reward, -- 达成成就奖励,json格式记录,{"itemid1":123,"itemid2":12,……….} 1040 achievement_reward = reward, -- 达成成就奖励,json格式记录,{"itemid1":123,"itemid2":12,……….}
1036 }) 1041 })
  1042 + role:mylog("role_action", {desc="finishAchieve", int1=taskId})
1037 1043
1038 SendPacket(actionCodes.Role_achiveRpc, MsgPack.pack(role:packReward(reward, change))) 1044 SendPacket(actionCodes.Role_achiveRpc, MsgPack.pack(role:packReward(reward, change)))
1039 end 1045 end
@@ -1057,6 +1063,7 @@ function _M.achiveRpc(agent, data) @@ -1057,6 +1063,7 @@ function _M.achiveRpc(agent, data)
1057 if preMaxCount < pData.request and overCount >= pData.request then 1063 if preMaxCount < pData.request and overCount >= pData.request then
1058 role:sendMail(101, skynet.timex(), pData.reward, {pData.level}) 1064 role:sendMail(101, skynet.timex(), pData.reward, {pData.level})
1059 flag = true 1065 flag = true
  1066 + role:mylog("role_action", {desc="fux", int1=pdata.level})
1060 end 1067 end
1061 end 1068 end
1062 if flag then 1069 if flag then
@@ -1381,7 +1388,7 @@ function _M.goldBuyRpc(agent, data) @@ -1381,7 +1388,7 @@ function _M.goldBuyRpc(agent, data)
1381 if not costD then 1388 if not costD then
1382 return 1 1389 return 1
1383 end 1390 end
1384 - if costD ~= 0 and not role:checkItemEnough({[ItemId.Diamond] = costD}) then 1391 + if costD ~= 0 and not role:checkItemEnough({[ItemId.Jade] = costD}) then
1385 return 2 1392 return 2
1386 end 1393 end
1387 local goldC = 0 1394 local goldC = 0
@@ -1403,7 +1410,7 @@ function _M.goldBuyRpc(agent, data) @@ -1403,7 +1410,7 @@ function _M.goldBuyRpc(agent, data)
1403 local coef = role.storeData:getGearExchangeCoef() 1410 local coef = role.storeData:getGearExchangeCoef()
1404 goldC = goldC * coef 1411 goldC = goldC * coef
1405 role.dailyData:updateProperty({field = "goldBuyT", value = curT + 1}) 1412 role.dailyData:updateProperty({field = "goldBuyT", value = curT + 1})
1406 - role:costItems({[ItemId.Diamond] = costD}, {log = {desc = "goldBuy"}}) 1413 + role:costItems({[ItemId.Jade] = costD}, {log = {desc = "goldBuy"}})
1407 local reward, change = role:award({[ItemId.Gold] = math.floor(goldC)}, {log = {desc = "goldBuy"}}) 1414 local reward, change = role:award({[ItemId.Gold] = math.floor(goldC)}, {log = {desc = "goldBuy"}})
1408 SendPacket(actionCodes.Role_goldBuyRpc, MsgPack.pack(role:packReward(reward, change))) 1415 SendPacket(actionCodes.Role_goldBuyRpc, MsgPack.pack(role:packReward(reward, change)))
1409 return true 1416 return true
@@ -1424,7 +1431,7 @@ function _M.diamondConvertRpc(agent, data) @@ -1424,7 +1431,7 @@ function _M.diamondConvertRpc(agent, data)
1424 role:costDiamond({count = cost, log = {desc = "convert", int1 = oper, int2 = get}}) 1431 role:costDiamond({count = cost, log = {desc = "convert", int1 = oper, int2 = get}})
1425 local reward, change 1432 local reward, change
1426 if oper == 1 then -- 钻石兑换成虹光玉 1433 if oper == 1 then -- 钻石兑换成虹光玉
1427 - reward, change = role:award({[ItemId.Jade] = get}, {log = {desc = "convert"}}) 1434 + reward, change = role:award({[ItemId.Jade] = get}, {log = {desc = "convert", short1=oper}})
1428 elseif oper == 2 then -- 钻石兑换成虹光玉再兑换成招募券 1435 elseif oper == 2 then -- 钻石兑换成虹光玉再兑换成招募券
1429 local old = role:getItemCount(ItemId.Jade) 1436 local old = role:getItemCount(ItemId.Jade)
1430 get = old + get 1437 get = old + get
@@ -1437,7 +1444,7 @@ function _M.diamondConvertRpc(agent, data) @@ -1437,7 +1444,7 @@ function _M.diamondConvertRpc(agent, data)
1437 allReward[ItemId.Jade] = remain - old 1444 allReward[ItemId.Jade] = remain - old
1438 elseif remain == old then 1445 elseif remain == old then
1439 else 1446 else
1440 - role:costItems({[ItemId.Jade] = old - remain}, {log = {desc = "convert"}}) 1447 + role:costItems({[ItemId.Jade] = old - remain}, {log = {desc = "convert", short1=oper}})
1441 end 1448 end
1442 1449
1443 if quan > 0 then 1450 if quan > 0 then
src/actions/SeaportAction.lua
@@ -59,6 +59,12 @@ function _M.donateRpc(agent, data) @@ -59,6 +59,12 @@ function _M.donateRpc(agent, data)
59 redisproxy:hincrby(SEAPORT_TRADE_TASK_2,id,itemCount) 59 redisproxy:hincrby(SEAPORT_TRADE_TASK_2,id,itemCount)
60 end 60 end
61 61
  62 + local seaport = role:getProperty("seaport") or {}
  63 + if not seaport.join then
  64 + seaport.join = 1
  65 + role:updateProperty({field = "seaport", value = seaport})
  66 + end
  67 +
62 role:costItems({[itemId] = itemCount}, {log = {desc = "seaportDonate", int1 = phase, int2 = id}}) 68 role:costItems({[itemId] = itemCount}, {log = {desc = "seaportDonate", int1 = phase, int2 = id}})
63 local reward, change = role:award(rewards, {log = {desc = "seaportDonate", int1 = ddata.phase, int2 = ddata.id}}) 69 local reward, change = role:award(rewards, {log = {desc = "seaportDonate", int1 = ddata.phase, int2 = ddata.id}})
64 70
@@ -237,6 +243,8 @@ function _M.taskRpc(agent, data) @@ -237,6 +243,8 @@ function _M.taskRpc(agent, data)
237 reward, change = role:award(itemReward, {log = {desc = "seaportTask", int1 = taskId, int2 = level}}) 243 reward, change = role:award(itemReward, {log = {desc = "seaportTask", int1 = taskId, int2 = level}})
238 244
239 seaport.collect[taskId] = nil 245 seaport.collect[taskId] = nil
  246 +
  247 + role:mylog("role_action", {desc="seaportTask", int1=taskId, int2=level, short1=bigSuccess and 1 or 0})
240 else 248 else
241 return 0 249 return 0
242 end 250 end
src/actions/StoreAction.lua
@@ -268,7 +268,7 @@ function _M.shopBuyRpc(agent , data) @@ -268,7 +268,7 @@ function _M.shopBuyRpc(agent , data)
268 local id = msg.id 268 local id = msg.id
269 local count = msg.count or 1 269 local count = msg.count or 1
270 270
271 - local dataSet = csvdb["shop_normalCsv"][id] 271 + local dataSet = csvdb["shop_normalCsv"][id]
272 if not dataSet then return end 272 if not dataSet then return end
273 273
274 if dataSet.unlock ~= "" then 274 if dataSet.unlock ~= "" then
@@ -278,6 +278,13 @@ function _M.shopBuyRpc(agent , data) @@ -278,6 +278,13 @@ function _M.shopBuyRpc(agent , data)
278 end 278 end
279 end 279 end
280 280
  281 + --判断是否是活动商品
  282 + if dataSet.activity_id and dataSet.activity_id ~= 0 then
  283 + local actCfg = csvdb["activity_ctrlCsv"][dataSet.activity_id]
  284 + if not actCfg then return 2 end
  285 + if not role.activity:isOpenById(dataSet.activity_id, "ActShopGoods") then return 3 end
  286 + end
  287 +
281 local buyRecord = role.storeData:getProperty("buyR") 288 local buyRecord = role.storeData:getProperty("buyR")
282 if math.illegalNum(count, 1, (dataSet.limit == 0 and math.huge or dataSet.limit - (buyRecord[id] or 0))) then 289 if math.illegalNum(count, 1, (dataSet.limit == 0 and math.huge or dataSet.limit - (buyRecord[id] or 0))) then
283 skynet.error(string.format("shop buy over limit, user_id:%d, goods_id:%d", role:getProperty("id"), id)) 290 skynet.error(string.format("shop buy over limit, user_id:%d, goods_id:%d", role:getProperty("id"), id))
@@ -299,19 +306,19 @@ function _M.shopBuyRpc(agent , data) @@ -299,19 +306,19 @@ function _M.shopBuyRpc(agent , data)
299 desc = "pvpShop" 306 desc = "pvpShop"
300 end 307 end
301 308
302 - if not role:checkItemEnough(cost) then return end 309 + if not role:checkItemEnough(cost) then return 4 end
303 310
304 if dataSet.limit ~= 0 then 311 if dataSet.limit ~= 0 then
305 buyRecord[id] = (buyRecord[id] or 0) + count 312 buyRecord[id] = (buyRecord[id] or 0) + count
306 role.storeData:updateProperty({field = "buyR", value = buyRecord}) 313 role.storeData:updateProperty({field = "buyR", value = buyRecord})
307 end 314 end
308 - role:costItems(cost, {log = {desc = desc, int1 = id, int2 = count}}) 315 + role:costItems(cost, {log = {desc = desc, int1 = id, int2 = count, short1 = dataSet.shop}})
309 316
310 local gift = {} 317 local gift = {}
311 for _id, _count in pairs(dataSet.gift:toNumMap()) do 318 for _id, _count in pairs(dataSet.gift:toNumMap()) do
312 gift[_id] = _count * count 319 gift[_id] = _count * count
313 end 320 end
314 - local reward = role:award(gift, {log = {desc = desc, int1 = id, int2 = count}}) 321 + local reward = role:award(gift, {log = {desc = desc, int1 = id, int2 = count, short1=dataSet.shop}})
315 322
316 if dataSet.shop == 1 then 323 if dataSet.shop == 1 then
317 role:checkTaskEnter("ShopAll", {count = count}) 324 role:checkTaskEnter("ShopAll", {count = count})
@@ -922,7 +922,7 @@ function Adv:over(success, rewardRatio, overType) @@ -922,7 +922,7 @@ function Adv:over(success, rewardRatio, overType)
922 end 922 end
923 self:clearAdvUnlockCache() 923 self:clearAdvUnlockCache()
924 924
925 - self:mylog({desc = "over", short1 = success and 1 or 0, int1 = overType}) 925 + self:mylog({desc = "over", short1 = success and 1 or 0, int1 = overType, int2 = self.chapterId, long1 = self.level})
926 926
927 927
928 local team = self.owner:getProperty("advTeam") 928 local team = self.owner:getProperty("advTeam")
src/models/Daily.lua
@@ -2,6 +2,8 @@ @@ -2,6 +2,8 @@
2 2
3 local Daily = class("Daily", require("shared.ModelBaseMysql")) 3 local Daily = class("Daily", require("shared.ModelBaseMysql"))
4 4
  5 +oneDay = 60*60*24
  6 +
5 function Daily:ctor(properties) 7 function Daily:ctor(properties)
6 Daily.super.ctor(self, properties) 8 Daily.super.ctor(self, properties)
7 end 9 end
@@ -30,6 +32,8 @@ Daily.schema = { @@ -30,6 +32,8 @@ Daily.schema = {
30 unlockPool = {"table", {}}, -- 解锁的属性卡池 32 unlockPool = {"table", {}}, -- 解锁的属性卡池
31 curPool = {"number", 0}, -- 属性卡池当前索引 33 curPool = {"number", 0}, -- 属性卡池当前索引
32 drawHeroCnt = {"number", 0}, -- 每日抽卡次数 34 drawHeroCnt = {"number", 0}, -- 每日抽卡次数
  35 +
  36 + treasureList = {"table", {}}, --挂机图鉴
33 } 37 }
34 38
35 function Daily:updateProperty(params) 39 function Daily:updateProperty(params)
@@ -60,6 +64,8 @@ function Daily:refreshDailyData(notify) @@ -60,6 +64,8 @@ function Daily:refreshDailyData(notify)
60 if self:getProperty(field) > 0 then 64 if self:getProperty(field) > 0 then
61 dataMap[field] = 0 65 dataMap[field] = 0
62 end 66 end
  67 + elseif field == "treasureList" then
  68 + dataMap[field] = self:getTreasrueList()
63 elseif field ~= "key" then 69 elseif field ~= "key" then
64 local typ, def = table.unpack(schema) 70 local typ, def = table.unpack(schema)
65 dataMap[field] = def 71 dataMap[field] = def
@@ -85,6 +91,279 @@ function Daily:refreshDailyData(notify) @@ -85,6 +91,279 @@ function Daily:refreshDailyData(notify)
85 end 91 end
86 end 92 end
87 93
  94 +--解锁
  95 +function Daily:checkUnlock(treaval)
  96 + local role = self.owner
  97 + local treasureC = treaval.unlock:toArray(true, "=")
  98 + local show = false
  99 + if treasureC[1] == 1 then --通关关卡
  100 + if self.owner:checkHangPass(treasureC[2]) then show = true end
  101 + elseif treasureC[1] == 2 then --通关拾荒章节=x层
  102 + local chapterId = treasureC[2]
  103 + local layer = 1
  104 + local advCsv = csvdb["adv_chapterCsv"][chapterId]
  105 + if not advCsv then return false end --不存在的章节
  106 + if math.floor(chapterId / 100) ~= 2 then
  107 + layer = math.min(layer, advCsv.limitlevel)
  108 + end
  109 + local advPass = role:getProperty("advPass")
  110 + if (advPass[chapterId] or 0) < layer then
  111 + show = false
  112 + else
  113 + show = true
  114 + end
  115 + elseif treasureC[1] == 3 then --拥有指定id的角色时
  116 + local hero = role:getHeroByID(treasureC[2])
  117 + if hero then show = true end
  118 + else
  119 + show = true
  120 + end
  121 + return show
  122 +end
  123 +
  124 +--CD
  125 +function Daily:checkTreasureExpired(treasureAttr, treasureList)
  126 + local curInfo = treasureList[treasureAttr.id]
  127 + if curInfo then
  128 + -- check finish
  129 + if curInfo["expire_time"] then
  130 + if curInfo.cool_time > 1 then
  131 + if skynet.timex() >= curInfo["expire_time"] then
  132 + treasureList[treasureAttr.id] = nil
  133 + curInfo = clone(treasureAttr)
  134 + elseif skynet.timex() >= curInfo["expire_time"] - curInfo.cool_time * oneDay then --未冷却
  135 + curInfo = nil
  136 + else
  137 + curInfo = clone(treasureAttr)
  138 + end
  139 + else
  140 + if skynet.timex() >= curInfo["expire_time"] then
  141 + treasureList[treasureAttr.id] = nil
  142 + end
  143 + curInfo = clone(treasureAttr)
  144 + end
  145 + else
  146 + curInfo = clone(treasureAttr)
  147 + end
  148 + else
  149 + curInfo = clone(treasureAttr)
  150 + end
  151 +
  152 + return curInfo
  153 +end
  154 +
  155 +--资源
  156 +function Daily:checkTreasureBase(treasureList, treasureBase, removeId)
  157 + local tmptreasure = {}
  158 + local num = 0
  159 + for k, val in pairs(treasureList) do
  160 + if removeId and val.id == removeId then
  161 + treasureList[k] = nil
  162 + else
  163 + if treasureBase >= val.treasure_value then
  164 + treasureBase = treasureBase - val.treasure_value
  165 + tmptreasure[val.id] = val
  166 + num = num + 1
  167 + end
  168 + end
  169 +
  170 + end
  171 + return tmptreasure, num
  172 +end
  173 +
  174 +--绑定通关关卡
  175 +function Daily:checkChapters()
  176 + local chapters = {}
  177 + local tmp_chapters = {}
  178 + local treasureList = self:getProperty("treasureList")
  179 + if next(treasureList) ~= nil then
  180 + for id, curInfo in pairs(treasureList) do
  181 + if curInfo["end_time"] then
  182 + if skynet.timex() < curInfo["end_time"] then
  183 + tmp_chapters[curInfo.chapter_id] = curInfo
  184 + end
  185 + end
  186 + end
  187 + end
  188 +
  189 + for chapter_id, val in pairs(csvdb["idle_battleCsv"]) do
  190 + if self.owner:checkHangPass(chapter_id) then
  191 + if next(tmp_chapters) == nil then
  192 + chapters[chapter_id] = val
  193 + else
  194 + if not tmp_chapters[chapter_id] then
  195 + chapters[chapter_id] = val
  196 + end
  197 + end
  198 + end
  199 + end
  200 + return chapters
  201 +end
  202 +
  203 +--权重
  204 +function Daily:checkTreasureWeight(treasureList, tmptreasure, treasureBase)
  205 + local removeId
  206 + local chapters = self:checkChapters()
  207 + local treasure
  208 + if next(chapters) == nil then return end
  209 +
  210 + while next(tmptreasure) do
  211 + local tmp, num = self:checkTreasureBase(tmptreasure, treasureBase, removeId)
  212 +
  213 + if num == 0 then
  214 + break
  215 + elseif num == 1 then
  216 + for _, val in pairs(tmp) do
  217 + treasure = val
  218 + end
  219 + else
  220 + local id = math.randWeight(tmp, "weight") --宝藏id
  221 + if not id then
  222 + break
  223 + end
  224 + treasure = tmp[id]
  225 + end
  226 +
  227 + if treasureBase >= treasure.treasure_value then
  228 + --扣除资源值
  229 + treasureBase = treasureBase - treasure.treasure_value
  230 + else
  231 + break
  232 + end
  233 + local chapterId = math.randWeight(chapters, "treasure_weight") --关卡id
  234 + if not chapterId then
  235 + break
  236 + end
  237 +
  238 + treasure.chapter_id = chapterId
  239 + treasureList[treasure.id] = treasure
  240 + removeId = treasure.id
  241 + end
  242 +end
  243 +
  244 +--chapterId
  245 +function Daily:checkTreasureChapterId(curInfo, treasureList, chapterId)
  246 + local treasure = nil
  247 +
  248 + if not curInfo then
  249 + print("curInfo is nil")
  250 + return treasure
  251 + end
  252 +
  253 + --开始挖宝关卡ID=挂机关卡ID
  254 + if chapterId == curInfo.chapter_id then
  255 + --开始挖宝
  256 + if not curInfo["end_time"] then
  257 + curInfo["end_time"] = skynet.timex() + curInfo.working_time
  258 + else
  259 + if skynet.timex() >= curInfo["end_time"] then
  260 + if curInfo.cool_time > 1 then
  261 + --宝藏冷却时间
  262 + if not curInfo["expire_time"] then
  263 + treasure = treasureList[curInfo.id]
  264 + curInfo["expire_time"] = skynet.timex() + curInfo.cool_time * oneDay
  265 + else
  266 + --已经领取宝藏 检索宝藏冷却时间
  267 + if skynet.timex() >= curInfo["expire_time"] then
  268 + treasureList[curInfo.id] = nil
  269 + end
  270 + end
  271 + else
  272 + treasure = treasureList[curInfo.id]
  273 + treasureList[curInfo.id] = nil
  274 + end
  275 + end
  276 + end
  277 + else
  278 + --已经开始挖宝
  279 + if curInfo["end_time"] then
  280 + if skynet.timex() >= curInfo["end_time"] then
  281 + if curInfo.cool_time > 1 then
  282 + --宝藏冷却时间
  283 + if not curInfo["expire_time"] then
  284 + treasure = treasureList[curInfo.id]
  285 + curInfo["expire_time"] = skynet.timex() + curInfo.cool_time * oneDay
  286 + else
  287 + --已经领取宝藏 检索宝藏冷却时间
  288 + if skynet.timex() >= curInfo["expire_time"] then
  289 + treasureList[curInfo.id] = nil
  290 + end
  291 + end
  292 + else
  293 + treasure = treasureList[curInfo.id]
  294 + treasureList[curInfo.id] = nil
  295 + end
  296 + else
  297 + curInfo["end_time"] = nil
  298 + end
  299 + end
  300 + end
  301 + return treasure
  302 +end
  303 +
  304 +function Daily:buyTreasure(treasureList)
  305 + local boughtTreasurer = {}
  306 + local treasureBase = globalCsv.idle_treasure_base
  307 + for id, val in pairs(treasureList) do
  308 + treasureBase = treasureBase - val.treasure_value
  309 + if treasureBase < 0 then
  310 + treasureBase = treasureBase + val.treasure_value
  311 + return
  312 + else
  313 + boughtTreasurer[id] = val
  314 + end
  315 + end
  316 + --self:updateProperty({field = "treasureBase", value = treasureBase})
  317 + return boughtTreasurer
  318 +end
  319 +
  320 +--重置宝藏图鉴
  321 +function Daily:resetTreasureList()
  322 + self:updateProperty({field = "treasureList", value = {}})
  323 +end
  324 +
  325 +--宝藏图鉴
  326 +function Daily:getTreasrueList()
  327 + local tmpcsv = csvdb["idle_treasureCsv"]
  328 + local treasureList = self:getProperty("treasureList") or {} --挖宝列表 过期删除 领取奖励删除 跨天更新
  329 + local tmptreasure = {}
  330 + local treasureBase = globalCsv.idle_treasure_base
  331 + for id, val in pairs(tmpcsv) do
  332 + if self:checkUnlock(val) == true then
  333 + local treasure = self:checkTreasureExpired(val, treasureList)
  334 + if treasure then
  335 + table.insert(tmptreasure, treasure)
  336 + end
  337 + end
  338 + end
  339 + table.sort(tmptreasure, function (a,b) return a.treasure_value > b.treasure_value end)
  340 +
  341 + self:checkTreasureWeight(treasureList, tmptreasure, treasureBase)
  342 + self:updateProperty({field = "treasureList", value = treasureList})
  343 + return treasureList
  344 +end
  345 +
  346 +
  347 +--检索挖宝列表
  348 +function Daily:checkTreasureList(chapterId)
  349 + local treasureList = self:getProperty("treasureList") or {}
  350 + local tmptreasure = {}
  351 + for id, val in pairs(treasureList) do
  352 + local treasure = self:checkTreasureChapterId(val, treasureList, chapterId)
  353 + if treasure ~= nil then
  354 + tmptreasure[id] = treasure
  355 + end
  356 + end
  357 +
  358 + if next(tmptreasure) == nil then
  359 + self:updateProperty({field = "treasureList", value = treasureList})
  360 + return nil
  361 + end
  362 + local boughtTreasurer = self:buyTreasure(tmptreasure)
  363 + self:updateProperty({field = "treasureList", value = treasureList})
  364 + return boughtTreasurer
  365 +end
  366 +
88 function Daily:data() 367 function Daily:data()
89 return { 368 return {
90 hangQC = self:getProperty("hangQC"), 369 hangQC = self:getProperty("hangQC"),
@@ -104,6 +383,7 @@ function Daily:data() @@ -104,6 +383,7 @@ function Daily:data()
104 goldBuyT = self:getProperty("goldBuyT"), 383 goldBuyT = self:getProperty("goldBuyT"),
105 unlockPool = self:getProperty("unlockPool"), 384 unlockPool = self:getProperty("unlockPool"),
106 curPool = self:getProperty("curPool"), 385 curPool = self:getProperty("curPool"),
  386 + treasureList = self:getProperty("treasureList"),
107 } 387 }
108 end 388 end
109 389
src/models/Hero.lua
@@ -18,6 +18,7 @@ Hero.schema = { @@ -18,6 +18,7 @@ Hero.schema = {
18 rune = {"string",""}, --零件 type=id 18 rune = {"string",""}, --零件 type=id
19 faith = {"number", 0}, -- 信赖 19 faith = {"number", 0}, -- 信赖
20 spark = {"table", {}}, -- 火花属性 20 spark = {"table", {}}, -- 火花属性
  21 + genius = {"string", "" }, --天赋点 4=10201 5=10201 6=10203 7=10204
21 } 22 }
22 23
23 function Hero:ctor( properties ) 24 function Hero:ctor( properties )
@@ -111,6 +112,7 @@ function Hero:data() @@ -111,6 +112,7 @@ function Hero:data()
111 rune = self:getProperty("rune"), 112 rune = self:getProperty("rune"),
112 faith = self:getProperty("faith"), 113 faith = self:getProperty("faith"),
113 spark = self:getProperty("spark"), 114 spark = self:getProperty("spark"),
  115 + genius = self:getProperty("genius"),
114 } 116 }
115 end 117 end
116 118
src/models/HeroPlugin.lua
@@ -381,6 +381,90 @@ function HeroPlugin.bind(Hero) @@ -381,6 +381,90 @@ function HeroPlugin.bind(Hero)
381 end 381 end
382 end 382 end
383 self:setProperty("faith", faith) 383 self:setProperty("faith", faith)
  384 + self:mylog({desc = "addFaith", int1 = exp})
  385 + end
  386 +
  387 + --检验天赋树是否合理
  388 + function Hero:checkGeniusTree(genius)
  389 + local maxWakeL = 0
  390 + local star = self:getProperty("wakeL")
  391 + if star < 4 then return maxWakeL end
  392 + if #genius == 0 then return maxWakeL end
  393 +
  394 + local geniusTree = genius:toNumMap()
  395 + local tmpgenius = ""
  396 + for wakeL, val in pairs(geniusTree) do
  397 + if wakeL < 4 then return maxWakeL end
  398 + if wakeL % 2 == 0 then
  399 + if geniusTree[wakeL+1] and geniusTree[wakeL+1] ~= val then
  400 + return 0, 0, tmpgenius
  401 + end
  402 + end
  403 + maxWakeL = math.max(maxWakeL, wakeL)
  404 + if #tmpgenius == 0 then
  405 + tmpgenius = string.format("%s=%s", tostring(wakeL), tostring(val))
  406 + else
  407 + tmpgenius = string.format("%s %s=%s", tmpgenius, tostring(wakeL), tostring(val))
  408 + end
  409 + end
  410 + return tonumber(maxWakeL), tonumber(geniusTree[maxWakeL]), tmpgenius
  411 + end
  412 +
  413 + function Hero:increGeniusTree()
  414 + local genius = self:getProperty("genius")
  415 + local wakeL = self:getProperty("wakeL")
  416 + local maxWakeL, awake
  417 + maxWakeL, awake, genius = self:checkGeniusTree(genius)
  418 + if maxWakeL >= 4 and wakeL > maxWakeL and maxWakeL % 2 == 0 then
  419 + maxWakeL = maxWakeL + 1
  420 + if #genius == 0 then
  421 + genius = string.format("%s=%s", tostring(maxWakeL), tostring(awake))
  422 + else
  423 + genius = string.format("%s %s=%s", genius, tostring(maxWakeL), tostring(awake))
  424 + end
  425 + end
  426 + return genius
  427 + end
  428 +
  429 + function Hero:resetGeniusTree()
  430 + local unit_starTalent_reset = globalCsv["unit_starTalent_reset"]
  431 + local cost = unit_starTalent_reset:toNumMap()
  432 + if not self.owner:checkItemEnough(cost) then return false end
  433 +
  434 + self.owner:costItems(cost, {log = {desc = "heroGenius", int1 = self:getProperty("id"), int2 = self:getProperty("type")}})
  435 + return true
  436 + end
  437 +
  438 + function Hero:saveGeniusTree(wakeL, awake)
  439 + local genius = self:getProperty("genius")
  440 + local typ = self:getProperty("type")
  441 + local curWakeL = self:getProperty("wakeL")
  442 + if not wakeL or not awake then
  443 + if self:resetGeniusTree() == true then return "" end
  444 + return genius
  445 + end
  446 +
  447 + local heroUnit = csvdb["unitCsv"][typ]
  448 + if not heroUnit then return genius end
  449 + if not heroUnit.awake_1 or not heroUnit.awake_2 then return genius end
  450 +
  451 + if #genius == 0 then
  452 + genius = string.format("%s=%s", tostring(wakeL), tostring(awake))
  453 + else
  454 + genius = string.format("%s %s=%s", genius, tostring(wakeL), tostring(awake))
  455 + end
  456 +
  457 + local maxWakeL
  458 + maxWakeL, _, genius = self:checkGeniusTree(genius)
  459 + if maxWakeL == 0 then
  460 + genius = self:getProperty("genius")
  461 + else
  462 + if curWakeL > wakeL and wakeL % 2 == 0 then --自动升一级,举例,6星设置4星觉醒技能。自动升级到5星
  463 + genius = string.format("%s %s=%s", genius, tostring(wakeL + 1), tostring(awake))
  464 + maxWakeL, _, genius = self:checkGeniusTree(genius)
  465 + end
  466 + end
  467 + return genius
384 end 468 end
385 469
386 end 470 end
src/models/Role.lua
@@ -198,7 +198,7 @@ Role.schema = { @@ -198,7 +198,7 @@ Role.schema = {
198 nbTask = {"table", {}}, -- 新用户活动 198 nbTask = {"table", {}}, -- 新用户活动
199 radioTask = {"table", {}}, -- 电台任务 {id = {time=end_ts,heros=heros}} 表crusadeCsv 199 radioTask = {"table", {}}, -- 电台任务 {id = {time=end_ts,heros=heros}} 表crusadeCsv
200 200
201 - seaport = {"table", {}}, -- 海岛贸易季 {time = 1234567890, donate = {}, collect = {[1] = {team = "1=2=3", time = 1234567890}}, shop = {}} 201 + seaport = {"table", {}}, -- 海岛贸易季 {time = 1234567890, donate = {}, collect = {[1] = {team = "1=2=3", time = 1234567890}}, shop = {}, join = 1}
202 202
203 returner = {"table", {}}, -- 回归者 {time = 12334233423, [1] = 1, [2] = 2, status = {[1] = 1}} 203 returner = {"table", {}}, -- 回归者 {time = 12334233423, [1] = 1, [2] = 2, status = {[1] = 1}}
204 204
src/models/RoleBattle.lua
@@ -99,7 +99,8 @@ function Role:checkBattleCheat(battleType, params) @@ -99,7 +99,8 @@ function Role:checkBattleCheat(battleType, params)
99 for arr, _ in pairs(checkCheatAttrs) do 99 for arr, _ in pairs(checkCheatAttrs) do
100 temp[arr] = hero[arr] 100 temp[arr] = hero[arr]
101 end 101 end
102 - selfTeamServer[hero.type] = temp 102 + selfTeamServer[hero.type] = temp
  103 + self:log_battle_hero(hero.type, "hangTeam")
103 end 104 end
104 -- local carbonData = csvdb["idle_battleCsv"][params.id] 105 -- local carbonData = csvdb["idle_battleCsv"][params.id]
105 -- enemyServer = packBattleEnemyCommon(carbonData) 106 -- enemyServer = packBattleEnemyCommon(carbonData)
@@ -112,6 +113,7 @@ function Role:checkBattleCheat(battleType, params) @@ -112,6 +113,7 @@ function Role:checkBattleCheat(battleType, params)
112 temp[arr] = hero[arr] 113 temp[arr] = hero[arr]
113 end 114 end
114 selfTeamServer[hero.type] = temp 115 selfTeamServer[hero.type] = temp
  116 + self:log_battle_hero(hero.type, "towerTeam")
115 end 117 end
116 -- local carbonData = csvdb["tower_battleCsv"][params.id] 118 -- local carbonData = csvdb["tower_battleCsv"][params.id]
117 -- enemyServer = packBattleEnemyCommon(carbonData) 119 -- enemyServer = packBattleEnemyCommon(carbonData)
@@ -124,6 +126,7 @@ function Role:checkBattleCheat(battleType, params) @@ -124,6 +126,7 @@ function Role:checkBattleCheat(battleType, params)
124 temp[arr] = hero[arr] 126 temp[arr] = hero[arr]
125 end 127 end
126 selfTeamServer[hero.type] = temp 128 selfTeamServer[hero.type] = temp
  129 + self:log_battle_hero(hero.type, "bonusTeam")
127 end 130 end
128 -- local carbonData = csvdb["bonus_battleCsv"][params.id] 131 -- local carbonData = csvdb["bonus_battleCsv"][params.id]
129 -- enemyServer = packBattleEnemyCommon(carbonData) 132 -- enemyServer = packBattleEnemyCommon(carbonData)
@@ -136,6 +139,7 @@ function Role:checkBattleCheat(battleType, params) @@ -136,6 +139,7 @@ function Role:checkBattleCheat(battleType, params)
136 temp[arr] = hero[arr] 139 temp[arr] = hero[arr]
137 end 140 end
138 selfTeamServer[hero.type] = temp 141 selfTeamServer[hero.type] = temp
  142 + self:log_battle_hero(hero.type, "workTeam")
139 end 143 end
140 -- local carbonData = csvdb["bonus_battleCsv"][params.id] 144 -- local carbonData = csvdb["bonus_battleCsv"][params.id]
141 -- enemyServer = packBattleEnemyCommon(carbonData) 145 -- enemyServer = packBattleEnemyCommon(carbonData)
@@ -149,6 +153,7 @@ function Role:checkBattleCheat(battleType, params) @@ -149,6 +153,7 @@ function Role:checkBattleCheat(battleType, params)
149 temp[arr] = hero[arr] 153 temp[arr] = hero[arr]
150 end 154 end
151 selfTeamServer[hero.type] = temp 155 selfTeamServer[hero.type] = temp
  156 + self:log_battle_hero(hero.type, "pvpcTeam")
152 end 157 end
153 end 158 end
154 cheat["pvph"] = cheat["pvpc"] 159 cheat["pvph"] = cheat["pvpc"]
src/models/RoleLog.lua
@@ -136,6 +136,7 @@ local ItemReason = { @@ -136,6 +136,7 @@ local ItemReason = {
136 changeSpark = 1213, -- 穿戴火花 136 changeSpark = 1213, -- 穿戴火花
137 sparkLvlUp = 1214, -- 火花强化 137 sparkLvlUp = 1214, -- 火花强化
138 sparkQualityUp = 1215, -- 火花升华 138 sparkQualityUp = 1215, -- 火花升华
  139 + heroGenius = 1216, -- 英雄天赋点
139 140
140 -- pvp 141 -- pvp
141 pvpCHead = 1301, -- pvp 跨服竞技场头像 142 pvpCHead = 1301, -- pvp 跨服竞技场头像
src/models/RolePlugin.lua
@@ -252,7 +252,8 @@ function RolePlugin.bind(Role) @@ -252,7 +252,8 @@ function RolePlugin.bind(Role)
252 local headData = csvdb["player_iconCsv"][itemId] 252 local headData = csvdb["player_iconCsv"][itemId]
253 -- pvp 跨服竞技场奖励 253 -- pvp 跨服竞技场奖励
254 if headData and headData.path == 2 then 254 if headData and headData.path == 2 then
255 - mysqlproxy:insertEmail({roleId = self:getProperty("id"), emailId = 19}) 255 + --mysqlproxy:insertEmail({roleId = self:getProperty("id"), emailId = 19})
  256 + self:sendMail(19)
256 end 257 end
257 end 258 end
258 end 259 end
@@ -397,10 +398,11 @@ function RolePlugin.bind(Role) @@ -397,10 +398,11 @@ function RolePlugin.bind(Role)
397 return true, less 398 return true, less
398 end 399 end
399 for itemId, count in pairs(itemCountT) do 400 for itemId, count in pairs(itemCountT) do
400 - if count <= 0 then  
401 - -- 判断物品数量值不应该小于等于0  
402 - less[itemId] = 0  
403 - else 401 + --if count <= 0 then
  402 + -- -- 判断物品数量值不应该小于等于0
  403 + -- less[itemId] = 0
  404 + --else
  405 + if count > 0 then
404 local last = self:getItemCount(itemId) - count 406 local last = self:getItemCount(itemId) - count
405 if last < 0 then 407 if last < 0 then
406 less[itemId] = -last 408 less[itemId] = -last
@@ -636,6 +638,15 @@ function RolePlugin.bind(Role) @@ -636,6 +638,15 @@ function RolePlugin.bind(Role)
636 return count 638 return count
637 end 639 end
638 640
  641 + function Role:getHeroByID(heroId)
  642 + for id, hero in pairs(self.heros) do
  643 + if id == heroId then
  644 + return hero
  645 + end
  646 + end
  647 + return nil
  648 + end
  649 +
639 650
640 function Role:loadHeros() 651 function Role:loadHeros()
641 local roleId = self:getProperty("id") 652 local roleId = self:getProperty("id")
@@ -825,7 +836,7 @@ function RolePlugin.bind(Role) @@ -825,7 +836,7 @@ function RolePlugin.bind(Role)
825 newRune:create() 836 newRune:create()
826 newRune:generateAttrs() 837 newRune:generateAttrs()
827 newRune.owner = self 838 newRune.owner = self
828 - self.runeBag[runeUid] = newRune 839 + self.runeBag[roleId * MAX_RUNE_NUM + runeUid] = newRune
829 if not params.notNotify then 840 if not params.notNotify then
830 local response = {} 841 local response = {}
831 table.insert(response, newRune:data()) 842 table.insert(response, newRune:data())
@@ -876,7 +887,7 @@ function RolePlugin.bind(Role) @@ -876,7 +887,7 @@ function RolePlugin.bind(Role)
876 newSpark:create() 887 newSpark:create()
877 newSpark:addAttr(data.attr:toNumMap()) 888 newSpark:addAttr(data.attr:toNumMap())
878 newSpark.owner = self 889 newSpark.owner = self
879 - self.sparkBag[sparkUid] = newSpark 890 + self.sparkBag[roleId * MAX_SPARK_NUM + sparkUid] = newSpark
880 if not params.notNotify then 891 if not params.notNotify then
881 local response = {} 892 local response = {}
882 table.insert(response, newSpark:data()) 893 table.insert(response, newSpark:data())
@@ -1360,7 +1371,7 @@ function RolePlugin.bind(Role) @@ -1360,7 +1371,7 @@ function RolePlugin.bind(Role)
1360 local function getReward(reset) 1371 local function getReward(reset)
1361 -- 全服捐赠奖励 1372 -- 全服捐赠奖励
1362 local donate = seaport.donate or {} 1373 local donate = seaport.donate or {}
1363 - if not reset and (not donate[1] or not donate[2]) then 1374 + if not reset and seaport.join and (not donate[1] or not donate[2]) then
1364 local result = self:getSeaportServerProgress() 1375 local result = self:getSeaportServerProgress()
1365 for idx, set in ipairs(csvdb["seaport_purchaseCsv"]) do 1376 for idx, set in ipairs(csvdb["seaport_purchaseCsv"]) do
1366 local done = true 1377 local done = true
@@ -1372,11 +1383,12 @@ function RolePlugin.bind(Role) @@ -1372,11 +1383,12 @@ function RolePlugin.bind(Role)
1372 end 1383 end
1373 if done then 1384 if done then
1374 update = true 1385 update = true
1375 - redisproxy:insertEmail({  
1376 - roleId = self:getProperty("id"),  
1377 - emailId = idx == 1 and 361 or 362,  
1378 - attachments = set[1].phase_award,  
1379 - }) 1386 + --redisproxy:insertEmail({
  1387 + -- roleId = self:getProperty("id"),
  1388 + -- emailId = idx == 1 and 361 or 362,
  1389 + -- attachments = set[1].phase_award,
  1390 + --})
  1391 + self:sendMail(idx == 1 and 361 or 362, nil, set[1].phase_award)
1380 -- self:award(set[1].phase_award, {log = {desc = "seaportReward", int1 = set[1].phase, int2 = set[1].id}}) 1392 -- self:award(set[1].phase_award, {log = {desc = "seaportReward", int1 = set[1].phase, int2 = set[1].id}})
1381 donate[idx] = 1 1393 donate[idx] = 1
1382 end 1394 end
@@ -1469,11 +1481,12 @@ function RolePlugin.bind(Role) @@ -1469,11 +1481,12 @@ function RolePlugin.bind(Role)
1469 end 1481 end
1470 rewardStr = rewardStr .. string.format("%s=%s",itemId,value) 1482 rewardStr = rewardStr .. string.format("%s=%s",itemId,value)
1471 end 1483 end
1472 - redisproxy:insertEmail({  
1473 - roleId = self:getProperty("id"),  
1474 - emailId = 363,  
1475 - attachments = rewardStr,  
1476 - }) 1484 + --redisproxy:insertEmail({
  1485 + -- roleId = self:getProperty("id"),
  1486 + -- emailId = 363,
  1487 + -- attachments = rewardStr,
  1488 + --})
  1489 + self:sendMail(363, nil, rewardStr)
1477 end 1490 end
1478 end 1491 end
1479 seaport.collect = {} 1492 seaport.collect = {}
@@ -1695,6 +1708,7 @@ function RolePlugin.bind(Role) @@ -1695,6 +1708,7 @@ function RolePlugin.bind(Role)
1695 1708
1696 if level > advL[1] then 1709 if level > advL[1] then
1697 self:checkTaskEnter("AdvLevel", {level = level}) 1710 self:checkTaskEnter("AdvLevel", {level = level})
  1711 + self:mylog("adv_action", {desc = "adv_level", int1 = level})
1698 end 1712 end
1699 advL[1] = level 1713 advL[1] = level
1700 advL[2] = newExp 1714 advL[2] = newExp
@@ -1763,6 +1777,7 @@ function RolePlugin.bind(Role) @@ -1763,6 +1777,7 @@ function RolePlugin.bind(Role)
1763 info.type = hero:getProperty("type") 1777 info.type = hero:getProperty("type")
1764 info.level = hero:getProperty("level") 1778 info.level = hero:getProperty("level")
1765 info.wakeL = hero:getProperty("wakeL") 1779 info.wakeL = hero:getProperty("wakeL")
  1780 + info.genius = hero:getProperty("genius")
1766 info.blockLevel = hero:getSkillLevel(4) 1781 info.blockLevel = hero:getSkillLevel(4)
1767 info.specialLevel = hero:getSkillLevel(1) 1782 info.specialLevel = hero:getSkillLevel(1)
1768 info.passiveLevel = hero:getSkillLevel(3) 1783 info.passiveLevel = hero:getSkillLevel(3)
@@ -1786,6 +1801,7 @@ function RolePlugin.bind(Role) @@ -1786,6 +1801,7 @@ function RolePlugin.bind(Role)
1786 type = hero:getProperty("type"), 1801 type = hero:getProperty("type"),
1787 level = hero:getProperty("level"), 1802 level = hero:getProperty("level"),
1788 wakeL = hero:getProperty("wakeL"), 1803 wakeL = hero:getProperty("wakeL"),
  1804 + genius = hero:getProperty("genius"),
1789 } 1805 }
1790 end 1806 end
1791 format.heros = heros 1807 format.heros = heros
@@ -2341,6 +2357,8 @@ function RolePlugin.bind(Role) @@ -2341,6 +2357,8 @@ function RolePlugin.bind(Role)
2341 gift = gift .. k.."="..v.." " 2357 gift = gift .. k.."="..v.." "
2342 end 2358 end
2343 mysqlproxy:insertEmail({roleId = self:getProperty("id"), emailId = mailId, createtime = createTime, attachments = gift, contentPms = contentPms}) 2359 mysqlproxy:insertEmail({roleId = self:getProperty("id"), emailId = mailId, createtime = createTime, attachments = gift, contentPms = contentPms})
  2360 +
  2361 + self:mylog("role_action", {desc="sendMail", int1 = mailId})
2344 self.sendMailFlag = true 2362 self.sendMailFlag = true
2345 end 2363 end
2346 2364
@@ -2757,6 +2775,37 @@ function RolePlugin.bind(Role) @@ -2757,6 +2775,37 @@ function RolePlugin.bind(Role)
2757 return towerBnous[SystemBnousType.SweepReward] or {} 2775 return towerBnous[SystemBnousType.SweepReward] or {}
2758 end 2776 end
2759 2777
  2778 + function Role:getPotionLevel(id)
  2779 + local level = self.dinerData:getProperty("dishTree"):getv(id, 1)
  2780 + local talentSet = csvdb["diner_talentCsv"][id]
  2781 + if not talentSet then return 0 end
  2782 + local talentData = talentSet[level]
  2783 + if not talentData then return 0 end
  2784 +
  2785 + if talentData.pointFront == "" then
  2786 + if talentData.levelFront ~= "" and not self:checkHangPass(tonumber(talentData.levelFront)) then
  2787 + if level == 0 then return 0 end
  2788 + end
  2789 + return level
  2790 + end
  2791 +
  2792 + if talentData.levelFront ~= "" and not self:checkHangPass(tonumber(talentData.levelFront)) then
  2793 + if level == 0 then return 0 end
  2794 + end
  2795 +
  2796 + for preId, needV in pairs(talentData.pointFront:toNumMap()) do
  2797 + if self.dinerData:getProperty("dishTree"):getv(preId, 0) < needV then
  2798 + if level == 0 then return 0 end
  2799 + if level == 1 then return 0 end
  2800 + end
  2801 + end
  2802 + return level
  2803 + end
  2804 +
  2805 + function Role:log_battle_hero(heroType, desc)
  2806 + self:mylog("hero_action", {desc = desc, int1 = heroType})
  2807 + end
  2808 +
2760 end 2809 end
2761 2810
2762 return RolePlugin 2811 return RolePlugin
2763 \ No newline at end of file 2812 \ No newline at end of file
src/models/Store.lua
@@ -301,7 +301,9 @@ function Store:onBuyCard(type, duration, id, actid) @@ -301,7 +301,9 @@ function Store:onBuyCard(type, duration, id, actid)
301 actData["unlock"] = 1 301 actData["unlock"] = 1
302 if actCfg.condition ~= 0 then 302 if actCfg.condition ~= 0 then
303 actData["lvl"] = (actData["lvl"] or 0) + actCfg.condition 303 actData["lvl"] = (actData["lvl"] or 0) + actCfg.condition
  304 + role:mylog("act_action", {desc="buyBcLvl", int1=actCfg.condition, int2=actData["lvl"]})
304 end 305 end
  306 + self.owner:mylog("act_action", {desc="buyBc", int1=id, int2=actData["lvl"] or 0})
305 self.owner.activity:updateActData("BattleCommand", actData) 307 self.owner.activity:updateActData("BattleCommand", actData)
306 end 308 end
307 end 309 end
@@ -438,19 +440,19 @@ function Store:OnTriggerLimitTimePack(eventType, param) @@ -438,19 +440,19 @@ function Store:OnTriggerLimitTimePack(eventType, param)
438 end 440 end
439 end 441 end
440 if config ~= nil then 442 if config ~= nil then
441 - local rechargeCfg = csvdb["shop_rechargeCsv"][config.packId] 443 + local rechargeCfg = csvdb["shop_normalCsv"][config.packId]
442 if rechargeCfg then 444 if rechargeCfg then
443 limitPack[rechargeCfg.id] = {timeNow + rechargeCfg.time, config.id} 445 limitPack[rechargeCfg.id] = {timeNow + rechargeCfg.time, config.id}
444 self.owner:log("push_gift", { 446 self.owner:log("push_gift", {
445 gift_id = rechargeCfg.id, --礼包ID 447 gift_id = rechargeCfg.id, --礼包ID
446 - gift_name = rechargeCfg.title, --礼包名称 448 + gift_name = rechargeCfg.descId, --礼包名称
447 }) 449 })
448 -- 每日抽卡限时礼包 触发重置 450 -- 每日抽卡限时礼包 触发重置
449 if eventType == TriggerEventType.DrawHeroCnt then 451 if eventType == TriggerEventType.DrawHeroCnt then
450 - local payR = self:getProperty("payR") 452 + local payR = self:getProperty("buyR")
451 if payR[rechargeCfg.id] then 453 if payR[rechargeCfg.id] then
452 payR[rechargeCfg.id] = nil 454 payR[rechargeCfg.id] = nil
453 - self:updateProperty({field = "payR", value = payR}) 455 + self:updateProperty({field = "buyR", value = payR})
454 end 456 end
455 end 457 end
456 self:updateProperty({field = "limitTPack", value = limitPack}) 458 self:updateProperty({field = "limitTPack", value = limitPack})
src/shared/ModelBaseMysql.lua
@@ -280,12 +280,14 @@ function ModelBaseMysql:setProperties(fields, forceSave) @@ -280,12 +280,14 @@ function ModelBaseMysql:setProperties(fields, forceSave)
280 tostring(self), self.class.__cname, property, typ, type(value))) 280 tostring(self), self.class.__cname, property, typ, type(value)))
281 281
282 if typ == "number" or typ == "string" then 282 if typ == "number" or typ == "string" then
283 - if self[propname] == value then  
284 - return 283 + if self[propname] ~= value then
  284 + self[propname] = value
  285 + self.cacheFields[property] = self[propname]
285 end 286 end
  287 + else
  288 + self[propname] = value
  289 + self.cacheFields[property] = self[propname]
286 end 290 end
287 - self[propname] = value  
288 - self.cacheFields[property] = self[propname]  
289 end 291 end
290 end 292 end
291 if forceSave then 293 if forceSave then