Commit 3d8468b26490c039d2cd004287a84b56aad2adf3
1 parent
b8788f58
火花系统
Showing
14 changed files
with
435 additions
and
6 deletions
Show diff stats
src/GlobalVar.lua
| @@ -81,6 +81,7 @@ ItemType = { | @@ -81,6 +81,7 @@ ItemType = { | ||
| 81 | SelectItemBox = 17, -- 自选箱子 | 81 | SelectItemBox = 17, -- 自选箱子 |
| 82 | CommonPaster = 18, -- 万能贴纸 | 82 | CommonPaster = 18, -- 万能贴纸 |
| 83 | BossTicket = 20, -- boss挑战门票 | 83 | BossTicket = 20, -- boss挑战门票 |
| 84 | + Spark = 21, -- 火花 | ||
| 84 | } | 85 | } |
| 85 | 86 | ||
| 86 | --在这个里面的会记录的是功能开放 对应类型open 而不是 ID | 87 | --在这个里面的会记录的是功能开放 对应类型open 而不是 ID |
src/ProtocolCode.lua
| @@ -51,6 +51,8 @@ actionCodes = { | @@ -51,6 +51,8 @@ actionCodes = { | ||
| 51 | Role_broadGetSSR = 135, -- 全服广播 获得ssr英雄 | 51 | Role_broadGetSSR = 135, -- 全服广播 获得ssr英雄 |
| 52 | Role_renameTeamRpc = 136, -- 编队改名 | 52 | Role_renameTeamRpc = 136, -- 编队改名 |
| 53 | Role_accuseRpc = 137, -- 举报 | 53 | Role_accuseRpc = 137, -- 举报 |
| 54 | + Role_loadSparks = 138, | ||
| 55 | + Role_updateSpark = 139, -- 更新火花 | ||
| 54 | 56 | ||
| 55 | Adv_startAdvRpc = 151, | 57 | Adv_startAdvRpc = 151, |
| 56 | Adv_startHangRpc = 152, | 58 | Adv_startHangRpc = 152, |
| @@ -102,6 +104,7 @@ actionCodes = { | @@ -102,6 +104,7 @@ actionCodes = { | ||
| 102 | Hero_drawHeroExtraRewardNtf = 224, | 104 | Hero_drawHeroExtraRewardNtf = 224, |
| 103 | Hero_itemComposeRpc = 225, | 105 | Hero_itemComposeRpc = 225, |
| 104 | Hero_setWishPoolRpc = 226, | 106 | Hero_setWishPoolRpc = 226, |
| 107 | + Hero_changeSparkRpc = 227, | ||
| 105 | 108 | ||
| 106 | Hang_startRpc = 251, | 109 | Hang_startRpc = 251, |
| 107 | Hang_checkRpc = 252, | 110 | Hang_checkRpc = 252, |
| @@ -152,6 +155,8 @@ actionCodes = { | @@ -152,6 +155,8 @@ actionCodes = { | ||
| 152 | Car_runeUpRpc = 402, | 155 | Car_runeUpRpc = 402, |
| 153 | Car_saleEquipRpc = 403, | 156 | Car_saleEquipRpc = 403, |
| 154 | Car_saleRuneRpc = 404, | 157 | Car_saleRuneRpc = 404, |
| 158 | + Car_sparkLvlUpRpc = 405, | ||
| 159 | + Car_sparkQualityUpRpc = 406, | ||
| 155 | 160 | ||
| 156 | 161 | ||
| 157 | Friend_searchRpc = 450, | 162 | Friend_searchRpc = 450, |
src/RedisKeys.lua
| @@ -14,6 +14,8 @@ R_EMAIL_ITEM = "email:%d:%d" --邮件 | @@ -14,6 +14,8 @@ R_EMAIL_ITEM = "email:%d:%d" --邮件 | ||
| 14 | R_STORE = "role:%d:store" -- 商店 | 14 | R_STORE = "role:%d:store" -- 商店 |
| 15 | R_ORDERS = "role:%d:orders" -- 订单 | 15 | R_ORDERS = "role:%d:orders" -- 订单 |
| 16 | R_ORDER = "order:%d:%d" | 16 | R_ORDER = "order:%d:%d" |
| 17 | +R_SPARKIDS = "role:%d:sparkIds" -- 玩家拥有火花自增id | ||
| 18 | +R_SPARK = "role:%d:spark:%d" -- 火花详细信息 | ||
| 17 | 19 | ||
| 18 | -- 通用排行榜 | 20 | -- 通用排行榜 |
| 19 | RANK_COMMON = "rank:common:" | 21 | RANK_COMMON = "rank:common:" |
src/actions/CarAction.lua
| @@ -211,4 +211,92 @@ function _M.saleRuneRpc(agent, data ) | @@ -211,4 +211,92 @@ function _M.saleRuneRpc(agent, data ) | ||
| 211 | return true | 211 | return true |
| 212 | end | 212 | end |
| 213 | 213 | ||
| 214 | +function _M.sparkQualityUpRpc( agent, data ) | ||
| 215 | + local role = agent.role | ||
| 216 | + local msg = MsgPack.unpack(data) | ||
| 217 | + local uid = msg.uid | ||
| 218 | + local ownSpark = role.sparkBag[uid] | ||
| 219 | + if not ownSpark then return 1 end | ||
| 220 | + | ||
| 221 | + | ||
| 222 | + local cfg_id = ownSpark:getProperty("cfg_id") | ||
| 223 | + local level = ownSpark:getProperty("level") | ||
| 224 | + | ||
| 225 | + local sparkSet = csvdb["sparkCsv"][cfg_id] | ||
| 226 | + if not sparkSet then return 4 end | ||
| 227 | + local sparkData = sparkSet[level] | ||
| 228 | + if not sparkData then return 5 end | ||
| 229 | + | ||
| 230 | + if sparkData.star_up == 0 then return 6 end | ||
| 231 | + local cost = sparkData.star_item:toNumMap() | ||
| 232 | + if not role:checkItemEnough(cost) then | ||
| 233 | + return 7 | ||
| 234 | + end | ||
| 235 | + | ||
| 236 | + role:costItems(cost, {log = {desc = "sparkQualityUp", int1 = uid, int2 = level}}) | ||
| 237 | + | ||
| 238 | + local newSet = csvdb["sparkCsv"][sparkData.star_up] | ||
| 239 | + if not newSet then return 8 end | ||
| 240 | + local newSparkData = newSet[0] | ||
| 241 | + if not newSparkData then return 9 end | ||
| 242 | + local attrs = newSparkData.attr:toNumMap() | ||
| 243 | + ownSpark:addAttr(attrs) | ||
| 244 | + ownSpark:updateProperty({field = "level",value = 0}) | ||
| 245 | + ownSpark:updateProperty({field = "cfg_id",value = sparkData.star_up}) | ||
| 246 | + --role:checkTaskEnter("SparkQualityUp") | ||
| 247 | + | ||
| 248 | + | ||
| 249 | + ownSpark:mylog({desc = "sparkQualityUp", int1 = sparkData.id , int2 = sparkData.star_up}) | ||
| 250 | + | ||
| 251 | + SendPacket(actionCodes.Car_sparkQualityUpRpc, '') | ||
| 252 | + return true | ||
| 253 | +end | ||
| 254 | + | ||
| 255 | +function _M.sparkLvlUpRpc( agent, data ) | ||
| 256 | + local role = agent.role | ||
| 257 | + local msg = MsgPack.unpack(data) | ||
| 258 | + local uid = msg.uid | ||
| 259 | + local ownSpark = role.sparkBag[uid] | ||
| 260 | + if not ownSpark then return 1 end | ||
| 261 | + | ||
| 262 | + | ||
| 263 | + local cfg_id = ownSpark:getProperty("cfg_id") | ||
| 264 | + local level = ownSpark:getProperty("level") | ||
| 265 | + | ||
| 266 | + local sparkSet = csvdb["sparkCsv"][cfg_id] | ||
| 267 | + if not sparkSet then return 4 end | ||
| 268 | + local sparkData = sparkSet[level] | ||
| 269 | + if not sparkData then return 5 end | ||
| 270 | + | ||
| 271 | + if level >= #sparkSet then return 6 end | ||
| 272 | + local cost = sparkData.lv_up_item:toNumMap() | ||
| 273 | + if not role:checkItemEnough(cost) then | ||
| 274 | + return 7 | ||
| 275 | + end | ||
| 276 | + local weight = math.random(0, 100) | ||
| 277 | + local addLvl = 1 | ||
| 278 | + if weight < sparkData.probability then | ||
| 279 | + addLvl = 2 | ||
| 280 | + end | ||
| 281 | + | ||
| 282 | + role:costItems(cost, {log = {desc = "sparkLvlUp", int1 = uid, int2 = level}}) | ||
| 283 | + local attrs = {} | ||
| 284 | + for i = 1, addLvl do | ||
| 285 | + local cfg = sparkSet[level + i] | ||
| 286 | + if not cfg then break end | ||
| 287 | + for k, v in pairs(cfg.attr:toNumMap()) do | ||
| 288 | + attrs[k] = (attrs[k] or 0) + v | ||
| 289 | + end | ||
| 290 | + end | ||
| 291 | + ownSpark:addAttr(attrs) | ||
| 292 | + ownSpark:updateProperty({field = "level",value = level+addLvl}) | ||
| 293 | + --role:checkTaskEnter("SparkLvlUp") | ||
| 294 | + | ||
| 295 | + | ||
| 296 | + ownSpark:mylog({desc = "sparkLvlUp", int1 = level + addLvl}) | ||
| 297 | + | ||
| 298 | + SendPacket(actionCodes.Car_sparkLvlUpRpc, MsgPack.pack({big = (addLvl == 2)})) | ||
| 299 | + return true | ||
| 300 | +end | ||
| 301 | + | ||
| 214 | return _M | 302 | return _M |
| 215 | \ No newline at end of file | 303 | \ No newline at end of file |
src/actions/GmAction.lua
| @@ -166,6 +166,15 @@ function _M.rune(role, pms) | @@ -166,6 +166,15 @@ function _M.rune(role, pms) | ||
| 166 | return result | 166 | return result |
| 167 | end | 167 | end |
| 168 | 168 | ||
| 169 | +table.insert(helpDes, {"获得火花" , "spark", "零件id"}) | ||
| 170 | +function _M.spark(role, pms) | ||
| 171 | + local id = tonum(pms.pm1) | ||
| 172 | + local result = role:addSpark({id = id, log = {desc = "gm"}}) | ||
| 173 | + role:mylog("gm_action", {desc = "spark", int1 = id, key1 = pms.sender}) | ||
| 174 | + | ||
| 175 | + return result == 0 and "成功" or "失败" | ||
| 176 | +end | ||
| 177 | + | ||
| 169 | table.insert(helpDes, {"通关挂机副本", "fb", "挂卡id"}) | 178 | table.insert(helpDes, {"通关挂机副本", "fb", "挂卡id"}) |
| 170 | function _M.fb(role, pms) -- 直接通关 | 179 | function _M.fb(role, pms) -- 直接通关 |
| 171 | local carbonId = tonum(pms.pm1) | 180 | local carbonId = tonum(pms.pm1) |
| @@ -594,6 +603,13 @@ function _M.clearbag(role, pms) | @@ -594,6 +603,13 @@ function _M.clearbag(role, pms) | ||
| 594 | end | 603 | end |
| 595 | role:delRunes(uids, {log = {desc = "gm"}}) | 604 | role:delRunes(uids, {log = {desc = "gm"}}) |
| 596 | 605 | ||
| 606 | + -- 火花 | ||
| 607 | + uids = {} | ||
| 608 | + for uid, _ in pairs(role.sparkBag) do | ||
| 609 | + table.insert(uids, uid) | ||
| 610 | + end | ||
| 611 | + role:delSparks(uids, {log = {desc = "gm"}}) | ||
| 612 | + | ||
| 597 | return "成功" | 613 | return "成功" |
| 598 | end | 614 | end |
| 599 | 615 |
src/actions/HeroAction.lua
| @@ -105,6 +105,25 @@ function _M.wakeRpc(agent, data) | @@ -105,6 +105,25 @@ function _M.wakeRpc(agent, data) | ||
| 105 | if not role:checkItemEnough(cost) then | 105 | if not role:checkItemEnough(cost) then |
| 106 | return 4 | 106 | return 4 |
| 107 | end | 107 | end |
| 108 | + local curLevel = hero:getProperty("wakeL") | ||
| 109 | + local sparkInfo = hero:getProperty("spark") | ||
| 110 | + -- 大于等于7的时候需要装备火花才能升 | ||
| 111 | + if curLevel >= 7 then | ||
| 112 | + if #sparkInfo == 0 then | ||
| 113 | + return 5 | ||
| 114 | + end | ||
| 115 | + local ok = false | ||
| 116 | + for _, info in ipairs(sparkInfo) do | ||
| 117 | + local cfg = csvdb["sparkCsv"][info.cfg_id][info.level or 0] | ||
| 118 | + if not cfg then return 6 end | ||
| 119 | + if cfg.star == curLevel then | ||
| 120 | + ok = true | ||
| 121 | + break | ||
| 122 | + end | ||
| 123 | + end | ||
| 124 | + if not ok then return 7 end | ||
| 125 | + end | ||
| 126 | + | ||
| 108 | 127 | ||
| 109 | role:costItems(cost, {log = {desc = "heroWake", int1 = msg.id, int2 = hero:getProperty("type")}}) | 128 | role:costItems(cost, {log = {desc = "heroWake", int1 = msg.id, int2 = hero:getProperty("type")}}) |
| 110 | 129 | ||
| @@ -112,7 +131,6 @@ function _M.wakeRpc(agent, data) | @@ -112,7 +131,6 @@ function _M.wakeRpc(agent, data) | ||
| 112 | local oldBattleV = hero:getProperty("battleV") | 131 | local oldBattleV = hero:getProperty("battleV") |
| 113 | hero:updateProperty({field = "wakeL", delta = 1}) | 132 | hero:updateProperty({field = "wakeL", delta = 1}) |
| 114 | 133 | ||
| 115 | - local curLevel = hero:getProperty("wakeL") | ||
| 116 | role:checkTaskEnter("Wake", {heroType = typ, wakeL = curLevel}) | 134 | role:checkTaskEnter("Wake", {heroType = typ, wakeL = curLevel}) |
| 117 | if curLevel == 3 then -- 解锁cg | 135 | if curLevel == 3 then -- 解锁cg |
| 118 | role:checkTaskEnter("WakeCG", {heroType = typ}) | 136 | role:checkTaskEnter("WakeCG", {heroType = typ}) |
| @@ -1193,4 +1211,55 @@ function _M.setWishPoolRpc(agent, data) | @@ -1193,4 +1211,55 @@ function _M.setWishPoolRpc(agent, data) | ||
| 1193 | return true | 1211 | return true |
| 1194 | end | 1212 | end |
| 1195 | 1213 | ||
| 1214 | +function _M.changeSparkRpc(agent, data) | ||
| 1215 | + local role = agent.role | ||
| 1216 | + local msg = MsgPack.unpack(data) | ||
| 1217 | + | ||
| 1218 | + local idx = msg.index | ||
| 1219 | + local sparkId = msg.spark_id | ||
| 1220 | + local heroId = msg.hero_id | ||
| 1221 | + local hero = role.heros[heroId] | ||
| 1222 | + if not hero then return 1 end | ||
| 1223 | + | ||
| 1224 | + local spark = role.sparkBag[sparkId] | ||
| 1225 | + if not spark then return 2 end | ||
| 1226 | + | ||
| 1227 | + local lvl = spark:getProperty("level") | ||
| 1228 | + local cfgId = spark:getProperty("cfg_id") | ||
| 1229 | + | ||
| 1230 | + local dataSet = csvdb["sparkCsv"][cfgId] | ||
| 1231 | + if not dataSet then return 3 end | ||
| 1232 | + local cfg = dataSet[lvl] | ||
| 1233 | + if not cfg then return 4 end | ||
| 1234 | + | ||
| 1235 | + if hero:getProperty("wakeL") < cfg.star then return 5 end | ||
| 1236 | + | ||
| 1237 | + local itemCfg = csvdb["itemCsv"][cfgId] | ||
| 1238 | + if not itemCfg then return 6 end | ||
| 1239 | + if itemCfg.quality ~= hero:getRare() then return 6 end | ||
| 1240 | + | ||
| 1241 | + local sparkList = hero:getProperty("spark") or {} | ||
| 1242 | + local oldSparkInfo = sparkList[idx] or {} | ||
| 1243 | + sparkList[idx] = spark:data() | ||
| 1244 | + hero:updateProperty({field="spark", value=sparkList}) | ||
| 1245 | + | ||
| 1246 | + role:delSparks({sparkId}, {log = {desc = "changeSpark"}}) | ||
| 1247 | + local oldId = oldSparkInfo["cfg_id"] or 0 | ||
| 1248 | + local oldLevel = oldSparkInfo["level"] or 0 | ||
| 1249 | + local oldSparkSet = csvdb["sparkCsv"][oldId] | ||
| 1250 | + print(oldId, oldLevel) | ||
| 1251 | + local reward = {} | ||
| 1252 | + if oldSparkSet then | ||
| 1253 | + local oldSparkCfg = oldSparkSet[oldLevel] | ||
| 1254 | + dump(oldSparkCfg) | ||
| 1255 | + if oldSparkSet then | ||
| 1256 | + reward = oldSparkCfg.back:toNumMap() | ||
| 1257 | + end | ||
| 1258 | + end | ||
| 1259 | + dump(reward) | ||
| 1260 | + | ||
| 1261 | + SendPacket(actionCodes.Hero_changeSparkRpc, MsgPack.pack({reward = reward})) | ||
| 1262 | + return true | ||
| 1263 | +end | ||
| 1264 | + | ||
| 1196 | return _M | 1265 | return _M |
src/actions/RoleAction.lua
| @@ -16,6 +16,7 @@ local httpc = require("http.httpc") | @@ -16,6 +16,7 @@ local httpc = require("http.httpc") | ||
| 16 | 16 | ||
| 17 | local WAVE_HERO_NUMS = 150 | 17 | local WAVE_HERO_NUMS = 150 |
| 18 | local WAVE_RUNE_NUMS = 150 | 18 | local WAVE_RUNE_NUMS = 150 |
| 19 | +local WAVE_SPARK_NUMS = 150 | ||
| 19 | 20 | ||
| 20 | local function validName(name) | 21 | local function validName(name) |
| 21 | name = string.upper(name) | 22 | name = string.upper(name) |
| @@ -204,6 +205,16 @@ function _M.loginRpc( agent, data ) | @@ -204,6 +205,16 @@ function _M.loginRpc( agent, data ) | ||
| 204 | table_insert(modules, "runeBag") | 205 | table_insert(modules, "runeBag") |
| 205 | end | 206 | end |
| 206 | 207 | ||
| 208 | + local sparkIds = {} | ||
| 209 | + for id ,_ in pairs(role.sparkBag) do | ||
| 210 | + table.insert(sparkIds, id) | ||
| 211 | + end | ||
| 212 | + local sparkWave = math.ceil(#sparkIds / WAVE_SPARK_NUMS) | ||
| 213 | + if #sparkIds <= 50 then | ||
| 214 | + sparkWave = 0 | ||
| 215 | + table_insert(modules, "sparkBag") | ||
| 216 | + end | ||
| 217 | + | ||
| 207 | for _, name in ipairs(modules) do | 218 | for _, name in ipairs(modules) do |
| 208 | response[name] = {} | 219 | response[name] = {} |
| 209 | for id, unit in pairs(role[name]) do | 220 | for id, unit in pairs(role[name]) do |
| @@ -211,12 +222,29 @@ function _M.loginRpc( agent, data ) | @@ -211,12 +222,29 @@ function _M.loginRpc( agent, data ) | ||
| 211 | end | 222 | end |
| 212 | end | 223 | end |
| 213 | 224 | ||
| 214 | - response.wave = 1 + heroWave + runeWave + 1 | 225 | + response.wave = 1 + heroWave + runeWave + sparkWave + 1 |
| 215 | 226 | ||
| 216 | SendPacket(actionCodes.Role_loginRpc, MsgPack.pack(response)) | 227 | SendPacket(actionCodes.Role_loginRpc, MsgPack.pack(response)) |
| 217 | 228 | ||
| 218 | local curWave = 1 | 229 | local curWave = 1 |
| 219 | 230 | ||
| 231 | + local sparkIndex = 1 | ||
| 232 | + for index = curWave + 1, curWave + sparkWave do | ||
| 233 | + local sparkResponse = {sparkBag = {}} | ||
| 234 | + for i = sparkIndex, sparkIndex + WAVE_SPARK_NUMS do | ||
| 235 | + local sparkId = sparkIds[i] | ||
| 236 | + if not sparkId then | ||
| 237 | + break | ||
| 238 | + end | ||
| 239 | + local spark = role.sparkBag[sparkId] | ||
| 240 | + table.insert(sparkResponse.sparkBag, spark:data()) | ||
| 241 | + sparkIndex = sparkIndex + 1 | ||
| 242 | + end | ||
| 243 | + sparkResponse.sparkWave = index | ||
| 244 | + SendPacket(actionCodes.Role_loginRpc, MsgPack.pack(sparkResponse)) | ||
| 245 | + end | ||
| 246 | + curWave = curWave + sparkWave | ||
| 247 | + | ||
| 220 | local runeIndex = 1 | 248 | local runeIndex = 1 |
| 221 | for index = curWave + 1, curWave + runeWave do | 249 | for index = curWave + 1, curWave + runeWave do |
| 222 | local runeResponse = {runeBag = {}} | 250 | local runeResponse = {runeBag = {}} |
src/models/Hero.lua
| @@ -16,6 +16,7 @@ Hero.schema = { | @@ -16,6 +16,7 @@ Hero.schema = { | ||
| 16 | equip = {"string",""}, --装备 type=level | 16 | equip = {"string",""}, --装备 type=level |
| 17 | rune = {"string",""}, --零件 type=id | 17 | rune = {"string",""}, --零件 type=id |
| 18 | faith = {"number", 0}, -- 信赖 | 18 | faith = {"number", 0}, -- 信赖 |
| 19 | + spark = {"table", {}}, -- 火花属性 | ||
| 19 | } | 20 | } |
| 20 | 21 | ||
| 21 | function Hero:ctor( properties ) | 22 | function Hero:ctor( properties ) |
| @@ -47,7 +48,7 @@ end | @@ -47,7 +48,7 @@ end | ||
| 47 | function Hero:updateProperties(params, notNotify) | 48 | function Hero:updateProperties(params, notNotify) |
| 48 | self:setProperties(params) | 49 | self:setProperties(params) |
| 49 | 50 | ||
| 50 | - local check = {level = true, breakL = true, wakeL = true, talent = true, loveL = true, equip = true, rune = true} | 51 | + local check = {level = true, breakL = true, wakeL = true, talent = true, loveL = true, equip = true, rune = true, spark = true} |
| 51 | local datas = {} | 52 | local datas = {} |
| 52 | local updateBV = false | 53 | local updateBV = false |
| 53 | for k , v in pairs(params) do | 54 | for k , v in pairs(params) do |
| @@ -78,7 +79,7 @@ function Hero:updateProperty(params) | @@ -78,7 +79,7 @@ function Hero:updateProperty(params) | ||
| 78 | local datas = {} | 79 | local datas = {} |
| 79 | table.insert(datas, {key = params.field, newValue = self:getProperty(params.field)}) | 80 | table.insert(datas, {key = params.field, newValue = self:getProperty(params.field)}) |
| 80 | 81 | ||
| 81 | - local check = {level = true, breakL = true, wakeL = true, talent = true, loveL = true, equip = true, rune = true} | 82 | + local check = {level = true, breakL = true, wakeL = true, talent = true, loveL = true, equip = true, rune = true, spark = true} |
| 82 | if check[params.field] then | 83 | if check[params.field] then |
| 83 | local orginValue = self:getProperty("battleV") | 84 | local orginValue = self:getProperty("battleV") |
| 84 | local curValue = self:saveBattleValue() | 85 | local curValue = self:saveBattleValue() |
| @@ -103,7 +104,8 @@ function Hero:data() | @@ -103,7 +104,8 @@ function Hero:data() | ||
| 103 | -- loveL = self:getProperty("loveL"), | 104 | -- loveL = self:getProperty("loveL"), |
| 104 | equip = self:getProperty("equip"), | 105 | equip = self:getProperty("equip"), |
| 105 | rune = self:getProperty("rune"), | 106 | rune = self:getProperty("rune"), |
| 106 | - faith = self:getProperty("faith") | 107 | + faith = self:getProperty("faith"), |
| 108 | + spark = self:getProperty("spark"), | ||
| 107 | } | 109 | } |
| 108 | end | 110 | end |
| 109 | 111 |
src/models/HeroPlugin.lua
| @@ -121,11 +121,13 @@ function HeroPlugin.bind(Hero) | @@ -121,11 +121,13 @@ function HeroPlugin.bind(Hero) | ||
| 121 | local attrs = self:getBaseAttrs() | 121 | local attrs = self:getBaseAttrs() |
| 122 | -- 装备零件 | 122 | -- 装备零件 |
| 123 | local equipAttrs = self:getRuneEquipAttrs() | 123 | local equipAttrs = self:getRuneEquipAttrs() |
| 124 | + local sparkAttrs = self:getSparkAttrs() | ||
| 124 | 125 | ||
| 125 | for _, attName in pairs(AttsEnumEx) do | 126 | for _, attName in pairs(AttsEnumEx) do |
| 126 | attrs[attName] = attrs[attName] or 0 | 127 | attrs[attName] = attrs[attName] or 0 |
| 127 | attrs[attName] = attrs[attName] + addAttr(attrs[attName], equipAttrs.percent[attName], 1, attName) | 128 | attrs[attName] = attrs[attName] + addAttr(attrs[attName], equipAttrs.percent[attName], 1, attName) |
| 128 | attrs[attName] = attrs[attName] + addAttr(attrs[attName], equipAttrs.value[attName], 0, attName) | 129 | attrs[attName] = attrs[attName] + addAttr(attrs[attName], equipAttrs.value[attName], 0, attName) |
| 130 | + attrs[attName] = attrs[attName] + addAttr(attrs[attName], sparkAttrs[attName], 0, attName) | ||
| 129 | end | 131 | end |
| 130 | 132 | ||
| 131 | -- 羁绊加成 | 133 | -- 羁绊加成 |
| @@ -225,6 +227,19 @@ function HeroPlugin.bind(Hero) | @@ -225,6 +227,19 @@ function HeroPlugin.bind(Hero) | ||
| 225 | return attrs | 227 | return attrs |
| 226 | end | 228 | end |
| 227 | 229 | ||
| 230 | + function Hero:getSparkAttrs() | ||
| 231 | + local attrs = {} | ||
| 232 | + for _, attName in pairs(AttsEnumEx) do | ||
| 233 | + attrs[attName] = 0 | ||
| 234 | + end | ||
| 235 | + for _, data in pairs(self.spark or {}) do | ||
| 236 | + for k, v in pairs(data.attrs:toNumMap()) do | ||
| 237 | + attrs[AttsEnumEx[k]] = attrs[AttsEnumEx[k]] + v | ||
| 238 | + end | ||
| 239 | + end | ||
| 240 | + return attrs | ||
| 241 | + end | ||
| 242 | + | ||
| 228 | 243 | ||
| 229 | -- 战斗力(当前属性)= POWER[(生命 + 防御 * 7 + 闪避 * 4)*(攻击*4 + 命中 * 2)*(1 + 暴击几率/100 * 暴击伤害/100)* 攻击速度 / 60000 ,0.8 ] | 244 | -- 战斗力(当前属性)= POWER[(生命 + 防御 * 7 + 闪避 * 4)*(攻击*4 + 命中 * 2)*(1 + 暴击几率/100 * 暴击伤害/100)* 攻击速度 / 60000 ,0.8 ] |
| 230 | -- function Hero:getBattleValue(activeRelation) -- isReal包括队伍加成 | 245 | -- function Hero:getBattleValue(activeRelation) -- isReal包括队伍加成 |
src/models/Role.lua
| @@ -25,6 +25,7 @@ function Role:ctor( properties ) | @@ -25,6 +25,7 @@ function Role:ctor( properties ) | ||
| 25 | self.storeData = nil | 25 | self.storeData = nil |
| 26 | self.heros = {} | 26 | self.heros = {} |
| 27 | self.runeBag = {} | 27 | self.runeBag = {} |
| 28 | + self.sparkBag = {} | ||
| 28 | self.advData = nil | 29 | self.advData = nil |
| 29 | self.activity = nil | 30 | self.activity = nil |
| 30 | self._pushToken = nil | 31 | self._pushToken = nil |
src/models/RoleLog.lua
| @@ -127,6 +127,9 @@ local ItemReason = { | @@ -127,6 +127,9 @@ local ItemReason = { | ||
| 127 | refer = 1210, -- 穿戴 | 127 | refer = 1210, -- 穿戴 |
| 128 | itemCompose = 1211, -- 天赋道具合成 | 128 | itemCompose = 1211, -- 天赋道具合成 |
| 129 | radioQuest = 1212, -- 电台任务奖励 | 129 | radioQuest = 1212, -- 电台任务奖励 |
| 130 | + changeSpark = 1213, -- 穿戴火花 | ||
| 131 | + sparkLvlUp = 1214, -- 火花强化 | ||
| 132 | + sparkQualityUp = 1215, -- 火花升华 | ||
| 130 | 133 | ||
| 131 | -- pvp | 134 | -- pvp |
| 132 | pvpCHead = 1301, -- pvp 跨服竞技场头像 | 135 | pvpCHead = 1301, -- pvp 跨服竞技场头像 |
| @@ -622,6 +625,8 @@ local LogType = { | @@ -622,6 +625,8 @@ local LogType = { | ||
| 622 | in_adv = "common", | 625 | in_adv = "common", |
| 623 | out_adv = "common", | 626 | out_adv = "common", |
| 624 | in_artifact = "common", | 627 | in_artifact = "common", |
| 628 | + in_spark = "common", | ||
| 629 | + out_spark = "common", | ||
| 625 | 630 | ||
| 626 | mail_action = "common", | 631 | mail_action = "common", |
| 627 | role_action = "common", | 632 | role_action = "common", |
| @@ -634,6 +639,7 @@ local LogType = { | @@ -634,6 +639,7 @@ local LogType = { | ||
| 634 | tower_action = "common", | 639 | tower_action = "common", |
| 635 | gm_action = "common", | 640 | gm_action = "common", |
| 636 | act_action = "common", | 641 | act_action = "common", |
| 642 | + spark_action = "common", | ||
| 637 | } | 643 | } |
| 638 | 644 | ||
| 639 | -- 如要修改 要提前修改 _template mapping -- 对应 mapping 为 gamelog-* | 645 | -- 如要修改 要提前修改 _template mapping -- 对应 mapping 为 gamelog-* |
src/models/RolePlugin.lua
| @@ -12,6 +12,7 @@ function RolePlugin.bind(Role) | @@ -12,6 +12,7 @@ function RolePlugin.bind(Role) | ||
| 12 | self:loadDiner() | 12 | self:loadDiner() |
| 13 | self:loadActivity() | 13 | self:loadActivity() |
| 14 | self:loadStoreInfo() | 14 | self:loadStoreInfo() |
| 15 | + self:loadSparks() | ||
| 15 | end | 16 | end |
| 16 | 17 | ||
| 17 | function Role:reloadWhenLogin() | 18 | function Role:reloadWhenLogin() |
| @@ -96,6 +97,11 @@ function RolePlugin.bind(Role) | @@ -96,6 +97,11 @@ function RolePlugin.bind(Role) | ||
| 96 | self:addRune({type = typ,id = itemId, notNotify = pms.notNotify, log = pms.log}) | 97 | self:addRune({type = typ,id = itemId, notNotify = pms.notNotify, log = pms.log}) |
| 97 | end | 98 | end |
| 98 | end, | 99 | end, |
| 100 | + [ItemType.Spark] = function() | ||
| 101 | + for _= 1, count do | ||
| 102 | + self:addSpark({id = itemId, notNotify = pms.notNotify, log = pms.log}) | ||
| 103 | + end | ||
| 104 | + end, | ||
| 99 | [ItemType.AdvItem] = function() --冒险道具不会进入 玩家仓库 | 105 | [ItemType.AdvItem] = function() --冒险道具不会进入 玩家仓库 |
| 100 | count = 0 | 106 | count = 0 |
| 101 | end, | 107 | end, |
| @@ -748,6 +754,23 @@ function RolePlugin.bind(Role) | @@ -748,6 +754,23 @@ function RolePlugin.bind(Role) | ||
| 748 | end | 754 | end |
| 749 | end | 755 | end |
| 750 | 756 | ||
| 757 | + function Role:loadSparks() | ||
| 758 | + local roleId = self:getProperty("id") | ||
| 759 | + local sparkIds = redisproxy:smembers(string.format(R_SPARKIDS, roleId)) | ||
| 760 | + local redret = redisproxy:pipelining(function (red) | ||
| 761 | + for _, sparkId in ipairs(sparkIds) do | ||
| 762 | + red:hgetall(string.format(R_SPARK, roleId, sparkId)) | ||
| 763 | + end | ||
| 764 | + end) | ||
| 765 | + for index, sparkId in ipairs(sparkIds) do | ||
| 766 | + local spark = require("models.Spark").new({key = string.format(R_SPARK, roleId, sparkId)}) | ||
| 767 | + if spark:load(table.array2Table(redret[index])) then | ||
| 768 | + spark.owner = self | ||
| 769 | + self.sparkBag[tonumber(sparkId)] = spark | ||
| 770 | + end | ||
| 771 | + end | ||
| 772 | + end | ||
| 773 | + | ||
| 751 | -- 0 为操作成功 | 774 | -- 0 为操作成功 |
| 752 | function Role:addRune(params) | 775 | function Role:addRune(params) |
| 753 | if params.type and params.id then | 776 | if params.type and params.id then |
| @@ -802,6 +825,101 @@ function RolePlugin.bind(Role) | @@ -802,6 +825,101 @@ function RolePlugin.bind(Role) | ||
| 802 | end | 825 | end |
| 803 | end | 826 | end |
| 804 | 827 | ||
| 828 | + -- 0 为操作成功 | ||
| 829 | + function Role:addSpark(params) | ||
| 830 | + if params.id then | ||
| 831 | + local set = csvdb["sparkCsv"][params.id] | ||
| 832 | + if not set then return 2 end | ||
| 833 | + local data = set[0] | ||
| 834 | + if not data then return 3 end | ||
| 835 | + | ||
| 836 | + local roleId = self:getProperty("id") | ||
| 837 | + local sparkUid = tonum(redisproxy:hincrby(string.format(R_INCR, roleId), "spark", 1)) | ||
| 838 | + | ||
| 839 | + redisproxy:sadd(string.format(R_SPARKIDS, roleId), sparkUid) | ||
| 840 | + | ||
| 841 | + local sparkInfo = { | ||
| 842 | + key = string.format(R_SPARK, roleId, sparkUid), | ||
| 843 | + id = sparkUid, | ||
| 844 | + cfg_id = params.id, | ||
| 845 | + } | ||
| 846 | + | ||
| 847 | + local newSpark = require("models.Spark").new(sparkInfo) | ||
| 848 | + newSpark:create() | ||
| 849 | + newSpark:addAttr(data.attr:toNumMap()) | ||
| 850 | + newSpark.owner = self | ||
| 851 | + self.sparkBag[sparkUid] = newSpark | ||
| 852 | + if not params.notNotify then | ||
| 853 | + local response = {} | ||
| 854 | + table.insert(response, newSpark:data()) | ||
| 855 | + dump(response) | ||
| 856 | + SendPacket(actionCodes.Role_loadSparks, MsgPack.pack(response)) | ||
| 857 | + end | ||
| 858 | + --self:checkTaskEnter("AddRune", {id = params.id, type = params.type, rarity = data.rarity}, params.notNotify) | ||
| 859 | + | ||
| 860 | + self:logItems(params.id, 0, 1, params.log) | ||
| 861 | + if params.log then | ||
| 862 | + local log = clone(params.log) | ||
| 863 | + if log["cint1"] or log["cint2"] or log["cint3"] then | ||
| 864 | + print("addRune error log have cint1 or cint2 or cint3 ", debug.traceback()) | ||
| 865 | + end | ||
| 866 | + | ||
| 867 | + log["cint1"] = sparkUid | ||
| 868 | + log["cint2"] = params.cfg_id | ||
| 869 | + | ||
| 870 | + self:mylog("in_spark", log) | ||
| 871 | + else | ||
| 872 | + print("addSpark no log ", debug.traceback()) | ||
| 873 | + end | ||
| 874 | + | ||
| 875 | + return 0, newSpark | ||
| 876 | + else | ||
| 877 | + return 1 | ||
| 878 | + end | ||
| 879 | + end | ||
| 880 | + | ||
| 881 | + function Role:delSparks(sparkIds, params) -- 批量删除 {id, } | ||
| 882 | + params = params or {} | ||
| 883 | + local roleId = self:getProperty('id') | ||
| 884 | + local bDel = {} | ||
| 885 | + for _, sparkId in pairs(sparkIds) do | ||
| 886 | + local spark = self.sparkBag[sparkId] | ||
| 887 | + if spark then | ||
| 888 | + | ||
| 889 | + self:logItems(spark:getProperty("id"), 1, 0, params.log) | ||
| 890 | + if params.log then | ||
| 891 | + local log = clone(params.log) | ||
| 892 | + if log["cint1"] or log["cint2"] then | ||
| 893 | + print("delSpark error log have cint1 or cint2 ", debug.traceback()) | ||
| 894 | + end | ||
| 895 | + | ||
| 896 | + log["cint1"] = sparkId | ||
| 897 | + log["cint2"] = spark:getProperty("cfg_id") | ||
| 898 | + | ||
| 899 | + self:mylog("out_spark", log) | ||
| 900 | + else | ||
| 901 | + print("delSparks no log ", debug.traceback()) | ||
| 902 | + end | ||
| 903 | + | ||
| 904 | + self.sparkBag[sparkId] = nil | ||
| 905 | + table.insert(bDel, sparkId) | ||
| 906 | + end | ||
| 907 | + end | ||
| 908 | + | ||
| 909 | + redisproxy:pipelining(function (red) | ||
| 910 | + for _, sparkId in pairs(bDel) do | ||
| 911 | + red:del(string.format(R_SPARK, roleId, sparkId)) | ||
| 912 | + red:srem(string.format(R_SPARKIDS, roleId), sparkId) | ||
| 913 | + end | ||
| 914 | + end) | ||
| 915 | + local response = {} | ||
| 916 | + for _, sparkId in pairs(bDel) do | ||
| 917 | + table.insert(response, {id = sparkId, bDel = true}) | ||
| 918 | + end | ||
| 919 | + | ||
| 920 | + SendPacket(actionCodes.Role_loadSparks, MsgPack.pack(response)) | ||
| 921 | + end | ||
| 922 | + | ||
| 805 | function Role:delRunes(runeIds, params) -- 批量删除 {id, } | 923 | function Role:delRunes(runeIds, params) -- 批量删除 {id, } |
| 806 | params = params or {} | 924 | params = params or {} |
| 807 | local roleId = self:getProperty('id') | 925 | local roleId = self:getProperty('id') |
| @@ -0,0 +1,78 @@ | @@ -0,0 +1,78 @@ | ||
| 1 | +local Spark = class("Spark", require("shared.ModelBase")) | ||
| 2 | +Spark.schema = { | ||
| 3 | + id = {"number"}, -- 唯一自增id | ||
| 4 | + cfg_id = {"number"}, | ||
| 5 | + level = {"number", 0}, -- 等级 | ||
| 6 | + attrs = {"table", {}} -- 基础属性值 id=value | ||
| 7 | +} | ||
| 8 | + | ||
| 9 | +function Spark:ctor( properties ) | ||
| 10 | + Spark.super.ctor(self, properties) | ||
| 11 | +end | ||
| 12 | + | ||
| 13 | +function Spark:notifyUpdateProperty(field, newValue, oldValue) | ||
| 14 | + local datas = { | ||
| 15 | + id = self:getProperty("id"), | ||
| 16 | + datas = { | ||
| 17 | + { | ||
| 18 | + key = field, | ||
| 19 | + newValue = newValue, | ||
| 20 | + oldValue = oldValue, | ||
| 21 | + } | ||
| 22 | + } | ||
| 23 | + } | ||
| 24 | + self:notifyUpdateProperties(datas) | ||
| 25 | +end | ||
| 26 | + | ||
| 27 | +function Spark:mylog(contents) | ||
| 28 | + contents = contents or {} | ||
| 29 | + if contents["cint1"] or contents["cint2"] then | ||
| 30 | + print("sparkLog error log have cint1 or cint2 ", debug.traceback()) | ||
| 31 | + end | ||
| 32 | + contents["cint1"] = self:getProperty("id") | ||
| 33 | + contents["cint2"] = self:getProperty("cfg_id") | ||
| 34 | + | ||
| 35 | + self.owner:mylog("spark_action", contents) | ||
| 36 | +end | ||
| 37 | + | ||
| 38 | +function Spark:notifyUpdateProperties(params) | ||
| 39 | + local updateData = { | ||
| 40 | + id = self:getProperty("id"), | ||
| 41 | + datas = params | ||
| 42 | + } | ||
| 43 | + SendPacket(actionCodes.Role_updateSpark, MsgPack.pack(updateData)) | ||
| 44 | +end | ||
| 45 | + | ||
| 46 | +function Spark:updateProperty(params) | ||
| 47 | + if not params.field or (not params.delta and not params.value) then | ||
| 48 | + return | ||
| 49 | + end | ||
| 50 | + if params.delta then | ||
| 51 | + self:incrProperty(params.field, params.delta) | ||
| 52 | + elseif params.value then | ||
| 53 | + self:setProperty(params.field, params.value) | ||
| 54 | + end | ||
| 55 | + local datas = {} | ||
| 56 | + table.insert(datas, {key = params.field, newValue = self:getProperty(params.field)}) | ||
| 57 | + | ||
| 58 | + self:notifyUpdateProperties(datas) | ||
| 59 | +end | ||
| 60 | + | ||
| 61 | +function Spark:addAttr(attrs) | ||
| 62 | + local curAttrs = clone(self:getProperty("attrs")) | ||
| 63 | + for k, v in pairs(attrs) do | ||
| 64 | + curAttrs[k] = (curAttrs[k] or 0) + v | ||
| 65 | + end | ||
| 66 | + self:updateProperty({field = "attrs", value = curAttrs}) | ||
| 67 | +end | ||
| 68 | + | ||
| 69 | +function Spark:data() | ||
| 70 | + return { | ||
| 71 | + id = self:getProperty("id"), | ||
| 72 | + cfg_id = self:getProperty("cfg_id"), | ||
| 73 | + level = self:getProperty("level"), | ||
| 74 | + attrs = self:getProperty("attrs"), | ||
| 75 | + } | ||
| 76 | +end | ||
| 77 | + | ||
| 78 | +return Spark | ||
| 0 | \ No newline at end of file | 79 | \ No newline at end of file |