Commit c7ecb87fb0756e9da2b2cf935303e0bc854f0265
1 parent
1313eac0
添加 测试账号 方法
Showing
5 changed files
with
164 additions
and
3 deletions
Show diff stats
src/actions/HttpAction.lua
| ... | ... | @@ -184,5 +184,23 @@ function _M.gm_action(query) |
| 184 | 184 | return gmFuncs[query.cmd](role, query) |
| 185 | 185 | end |
| 186 | 186 | |
| 187 | +function _M.account_init(query, body) | |
| 188 | + if not query.id or not body or body == "" then return "指令不存在" end | |
| 189 | + | |
| 190 | + local ok, result = pcall(json.decode, body) | |
| 191 | + if not ok or type(result) ~= 'table' then | |
| 192 | + return "decode body error" | |
| 193 | + end | |
| 194 | + query.id = tonumber(query.id) | |
| 195 | + local agent = datacenter.get("agent", query.id) | |
| 196 | + if agent and agent.serv then | |
| 197 | + -- local ok, result = pcall(skynet.call, agent.serv, "role", "accountInit", result) | |
| 198 | + -- return ok and result or "指令在线失败" | |
| 199 | + skynet.call(agent.serv, "role", "accountInit", result) | |
| 200 | + return "成功" | |
| 201 | + else | |
| 202 | + return "角色不在线" | |
| 203 | + end | |
| 204 | +end | |
| 187 | 205 | |
| 188 | 206 | return _M |
| 189 | 207 | \ No newline at end of file | ... | ... |
src/models/Hero.lua
| ... | ... | @@ -44,6 +44,28 @@ function Hero:notifyUpdateProperties(params) |
| 44 | 44 | SendPacket(actionCodes.Hero_updateProperty, MsgPack.pack(updateData)) |
| 45 | 45 | end |
| 46 | 46 | |
| 47 | +function Hero:updateProperties(params, notNotify) | |
| 48 | + self:setProperties(params) | |
| 49 | + | |
| 50 | + local check = {level = true, breakL = true, wakeL = true, talent = true, loveL = true, equip = true, rune = true} | |
| 51 | + local datas = {} | |
| 52 | + local updateBV = false | |
| 53 | + for k , v in pairs(params) do | |
| 54 | + if check[k] then updateBV = true end | |
| 55 | + table.insert(datas, {key = k, newValue = self:getProperty(k)}) | |
| 56 | + end | |
| 57 | + if updateBV then | |
| 58 | + local orginValue = self:getProperty("battleV") | |
| 59 | + local curValue = self:saveBattleValue() | |
| 60 | + if orginValue ~= curValue then | |
| 61 | + table.insert(datas, { key = "battleV", newValue = curValue }) | |
| 62 | + end | |
| 63 | + end | |
| 64 | + if not notNotify then | |
| 65 | + self:notifyUpdateProperties(datas) | |
| 66 | + end | |
| 67 | +end | |
| 68 | + | |
| 47 | 69 | function Hero:updateProperty(params) |
| 48 | 70 | if not params.field or (not params.delta and not params.value) then |
| 49 | 71 | return | ... | ... |
src/models/RoleCross.lua
| ... | ... | @@ -42,6 +42,120 @@ RoleCross.bind = function (Role) |
| 42 | 42 | return info |
| 43 | 43 | end |
| 44 | 44 | |
| 45 | + function Role:accountInit(initData) | |
| 46 | + -- 道具 | |
| 47 | + local reward = {} | |
| 48 | + for k , v in pairs(initData.items or {}) do | |
| 49 | + reward[tonumber(k)] = v | |
| 50 | + end | |
| 51 | + self:award(reward) | |
| 52 | + | |
| 53 | + -- 英雄 | |
| 54 | + local breakL = 0 | |
| 55 | + for i = 0, #csvdb["unit_breakCsv"] do | |
| 56 | + if initData.heros.level >= csvdb["unit_breakCsv"][i].levelLimit then | |
| 57 | + breakL = i | |
| 58 | + else | |
| 59 | + break | |
| 60 | + end | |
| 61 | + end | |
| 62 | + local equip = "" | |
| 63 | + for slot, equipId in pairs(initData.heros.equip) do | |
| 64 | + equip = equip:setv(slot, equipId) | |
| 65 | + end | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + for _, heroId in ipairs(initData.heros.ids) do | |
| 70 | + local hero = self:isHaveHero(heroId) | |
| 71 | + local status | |
| 72 | + if not hero then | |
| 73 | + status, hero = self:addHero({type = heroId}) | |
| 74 | + else | |
| 75 | + status = true | |
| 76 | + end | |
| 77 | + if status then | |
| 78 | + local rune = "" | |
| 79 | + for slot , runeId in pairs(initData.heros.rune) do | |
| 80 | + slot = tonumber(slot) | |
| 81 | + local status, rune_ = self:addRune({type = slot, id = runeId}) | |
| 82 | + if status == 0 then | |
| 83 | + rune = rune:setv(slot, rune_:getProperty("uid")) | |
| 84 | + if initData.heros.runeL and initData.heros.runeL > 0 then | |
| 85 | + rune_:updateProperty({field = "level",value = initData.heros.runeL}) | |
| 86 | + end | |
| 87 | + rune_:updateProperty({field = "refer",value = hero:getProperty("id")}) | |
| 88 | + end | |
| 89 | + end | |
| 90 | + local talent = "" | |
| 91 | + if initData.heros.talent and initData.heros.talent > 0 then | |
| 92 | + talent = talent:setv(0, initData.heros.talent) | |
| 93 | + local talentData = csvdb["unit_talentCsv"][initData.heros.talent] | |
| 94 | + for i = 1, 4 do | |
| 95 | + talent = talent:setv(i, #talentData) | |
| 96 | + end | |
| 97 | + end | |
| 98 | + local aheadLevel = 0 | |
| 99 | + for i = 1, initData.heros.talent - 1 do | |
| 100 | + aheadLevel = aheadLevel + #csvdb["unit_talentCsv"][i] | |
| 101 | + end | |
| 102 | + aheadLevel = aheadLevel + talent:getv(1, 0) | |
| 103 | + | |
| 104 | + hero:updateProperties({ | |
| 105 | + level = initData.heros.level, | |
| 106 | + breakL = breakL, | |
| 107 | + wakeL = initData.heros.wakeL, | |
| 108 | + talent = talent, | |
| 109 | + equip = equip, | |
| 110 | + rune = rune, | |
| 111 | + }) | |
| 112 | + self:checkTaskEnter("Wake", {heroType = heroId, wakeL = initData.heros.wakeL}) | |
| 113 | + self:checkTaskEnter("WakeCG", {heroType = heroId}) | |
| 114 | + self:checkTaskEnter("HeroTalent", {heroType = heroId, alv = aheadLevel}) | |
| 115 | + | |
| 116 | + end | |
| 117 | + end | |
| 118 | + self:checkTaskEnter("HeroLevelUp", {level = initData.heros.level}) | |
| 119 | + | |
| 120 | + -- fb | |
| 121 | + local carbonId = initData.fb | |
| 122 | + local passCarbon = self:getProperty("hangPass") | |
| 123 | + local addPre | |
| 124 | + addPre = function(carbonId) | |
| 125 | + local carbonData = csvdb["idle_battleCsv"][carbonId] | |
| 126 | + for _, pre in ipairs(carbonData.prepose:toArray(true, "=")) do | |
| 127 | + passCarbon[pre] = 1 | |
| 128 | + self:checkTaskEnter("HangPass", {id = pre}) | |
| 129 | + addPre(pre) | |
| 130 | + end | |
| 131 | + end | |
| 132 | + passCarbon[carbonId] = 1 | |
| 133 | + addPre(carbonId) | |
| 134 | + self:updateProperty({field = "hangPass", value = passCarbon}) | |
| 135 | + self:checkTaskEnter("HangPass", {id = carbonId}) | |
| 136 | + | |
| 137 | + -- talent | |
| 138 | + if initData.talent and initData.talent > 0 then | |
| 139 | + local dishTree = self.dinerData:getProperty("dishTree") | |
| 140 | + for _, v in pairs(csvdb["diner_treeCsv"]) do | |
| 141 | + for id, _ in pairs(v) do | |
| 142 | + dishTree = dishTree:setv(id, initData.talent) | |
| 143 | + end | |
| 144 | + end | |
| 145 | + self.dinerData:updateProperty({field = "dishTree", value = dishTree}) | |
| 146 | + end | |
| 147 | + -- diner | |
| 148 | + if initData.diner and initData.diner > 0 then | |
| 149 | + local buildL = self.dinerData:getProperty("buildL") | |
| 150 | + for typ, _ in pairs(csvdb["diner_buildingCsv"]) do | |
| 151 | + buildL = buildL:setv(typ, initData.diner) | |
| 152 | + end | |
| 153 | + self.dinerData:updateProperty({field = "buildL", value = buildL}) | |
| 154 | + end | |
| 155 | + | |
| 156 | + return "成功" | |
| 157 | + end | |
| 158 | + | |
| 45 | 159 | end |
| 46 | 160 | |
| 47 | 161 | ... | ... |
src/models/RolePlugin.lua
| ... | ... | @@ -372,14 +372,14 @@ function RolePlugin.bind(Role) |
| 372 | 372 | local bin = MsgPack.pack(heroResponse) |
| 373 | 373 | SendPacket(actionCodes.Hero_loadInfos, bin) |
| 374 | 374 | end |
| 375 | - return true | |
| 375 | + return true, newHero | |
| 376 | 376 | end |
| 377 | 377 | |
| 378 | 378 | function Role:isHaveHero(heroType) |
| 379 | 379 | if not csvdb["unitCsv"][heroType] then return false end |
| 380 | 380 | for _, hero in pairs(self.heros) do |
| 381 | 381 | if hero:getProperty("type") == heroType then |
| 382 | - return true | |
| 382 | + return hero | |
| 383 | 383 | end |
| 384 | 384 | end |
| 385 | 385 | end |
| ... | ... | @@ -524,7 +524,7 @@ function RolePlugin.bind(Role) |
| 524 | 524 | SendPacket(actionCodes.Role_loadRunes, MsgPack.pack(response)) |
| 525 | 525 | end |
| 526 | 526 | self:checkTaskEnter("AddRune", {id = params.id, type = params.type, rarity = data.rarity}, params.notNotify) |
| 527 | - return 0 | |
| 527 | + return 0, newRune | |
| 528 | 528 | else |
| 529 | 529 | return 1 |
| 530 | 530 | end | ... | ... |
src/services/httpweb.lua
| ... | ... | @@ -32,6 +32,13 @@ rpcOtherUnion = function(...) end |
| 32 | 32 | local table = table |
| 33 | 33 | local string = string |
| 34 | 34 | |
| 35 | +skynet.register_protocol { | |
| 36 | + name = "role", | |
| 37 | + id = 13, | |
| 38 | + pack = skynet.pack, | |
| 39 | + unpack = skynet.unpack, | |
| 40 | +} | |
| 41 | + | |
| 35 | 42 | local port = ... |
| 36 | 43 | port = tonumber(port) |
| 37 | 44 | ... | ... |