-- 跨越 agent 获取数据使用 local RoleCross = {} --*********************************** agent 存在时调用 ****************************************-- RoleCross.bind = function (Role) -- 好友列表简约信息 function Role:friendSInfo() local info = { name = self:getProperty("name"), level = self:getProperty("level"), headId = self:getProperty("headId"), ltime = self:getProperty("ltime"), battleV = self:getProperty("pvpTBVC") ~= 0 and self:getProperty("pvpTBVC") or self:getProperty("hangTBV") } return info end -- 好友详细队伍信息 function Role:friendInfo() local info = self:friendSInfo() local team = self:getProperty("pvpTBVC") ~= 0 and self:getProperty("pvpTSC") or self:getProperty("hangTS") info.team = team return info end -- 好友队伍战斗信息 function Role:friendBattleInfo() return self:getProperty("pvpTBVC") ~= 0 and self:getProperty("pvpTBC") or self:getProperty("hangTB") end -- pvp 数据 function Role:pvpCInfo() local info = { name = self:getProperty("name"), level = self:getProperty("level"), headId = self:getProperty("headId"), battleV = self:getProperty("pvpTBVC"), team = self:getProperty("pvpTSC"), battleInfo = self:getProperty("pvpTBC") } return info end -- pvp 数据 function Role:pvpHInfo() local info = { name = self:getProperty("name"), level = self:getProperty("level"), headId = self:getProperty("headId"), battleV = self:getProperty("pvpTBVH"), team = self:getProperty("pvpTSH"), battleInfo = self:getProperty("pvpTBH") } return info end -- 高级pvp 排行榜 function Role:pvpHRankInfo() local info = { name = self:getProperty("name"), level = self:getProperty("level"), headId = self:getProperty("headId"), ltime = self:getProperty("ltime"), battleV = self:getProperty("pvpTBVH"), } return info end function Role:redPTag(tag, pms) pms = pms or 1 local redp = self:getProperty("redp") if not redp[tag] or redp[tag] ~= pms then redp[tag] = pms self:updateProperty({field = "redp", value = redp}) end end function Role:accountInit(initData) -- 道具 local reward = {} for k , v in pairs(initData.items or {}) do reward[tonumber(k)] = v end self:award(reward, {log = {desc = "gm"}}) -- 英雄 local breakL = 0 for i = 0, #csvdb["unit_breakCsv"] do if initData.heros.level >= csvdb["unit_breakCsv"][i].levelLimit then breakL = i else break end end local equip = "" for slot, equipId in pairs(initData.heros.equip) do equip = equip:setv(slot, equipId) end for _, heroId in ipairs(initData.heros.ids) do local hero = self:isHaveHero(heroId) local status if not hero then status, hero = self:addHero({type = heroId, log = {desc = "gm"}}) else status = true end if status then local rune = "" for slot , runeId in pairs(initData.heros.rune) do slot = tonumber(slot) local status, rune_ = self:addRune({type = slot, id = runeId, log = {desc = "gm"}}) if status == 0 then rune = rune:setv(slot, rune_:getProperty("uid")) if initData.heros.runeL and initData.heros.runeL > 0 then rune_:updateProperty({field = "level",value = initData.heros.runeL}) end rune_:updateProperty({field = "refer",value = hero:getProperty("id")}) end end local talent = "" if initData.heros.talent and initData.heros.talent > 0 then talent = talent:setv(0, initData.heros.talent) local talentData = csvdb["unit_talentCsv"][initData.heros.talent] for i = 1, 4 do talent = talent:setv(i, #talentData) end end local aheadLevel = 0 for i = 1, initData.heros.talent - 1 do aheadLevel = aheadLevel + #csvdb["unit_talentCsv"][i] end aheadLevel = aheadLevel + talent:getv(1, 0) hero:updateProperties({ level = initData.heros.level, breakL = breakL, wakeL = initData.heros.wakeL, talent = talent, equip = equip, rune = rune, }) self:checkTaskEnter("Wake", {heroType = heroId, wakeL = initData.heros.wakeL}) self:checkTaskEnter("WakeCG", {heroType = heroId}) self:checkTaskEnter("HeroTalent", {heroType = heroId, alv = aheadLevel}) end end self:checkTaskEnter("HeroLevelUp", {level = initData.heros.level}) -- fb local carbonId = initData.fb local addPre addPre = function(carbonId) local carbonData = csvdb["idle_battleCsv"][carbonId] for _, pre in ipairs(carbonData.prepose:toArray(true, "=")) do self:checkHangPass(pre) self:checkTaskEnter("HangPass", {id = pre}) addPre(pre) end end self:checkHangPass(carbonId) addPre(carbonId) self:checkTaskEnter("HangPass", {id = carbonId}) -- talent if initData.talent and initData.talent > 0 then local dishTree = self.dinerData:getProperty("dishTree") for _, v in pairs(csvdb["diner_treeCsv"]) do for id, _ in pairs(v) do dishTree = dishTree:setv(id, initData.talent) end end self.dinerData:updateProperty({field = "dishTree", value = dishTree}) end -- diner if initData.diner and initData.diner > 0 then local buildL = self.dinerData:getProperty("buildL") for typ, _ in pairs(csvdb["diner_buildingCsv"]) do buildL = buildL:setv(typ, initData.diner) end self.dinerData:updateProperty({field = "buildL", value = buildL}) end return "成功" end end --*********************************** agent 不存在时调用 ***************************************-- local CMD = {} local SRole local function unpackRoleField(field, value) if not SRole.schema[field] then return nil end local typ, def = table.unpack(SRole.schema[field]) if typ == "number" then value = tonumber(value or def) elseif typ == "table" then if type(value) == "string" then value = MsgPack.unpack(value) else value = def end end return value end local function packRoleField(field, value) if not SRole.schema[field] then return nil end local typ, def = table.unpack(SRole.schema[field]) if typ == "table" then if type(value) == "table" then value = MsgPack.pack(value) end end return value end local function getRoleKey(roleId) return string.format("role:%d", roleId) end function CMD.setProperty(roleId, field, value) local value = packRoleField(field, value) if not value then return end return redisproxy:hset(getRoleKey(roleId), field, value) end function CMD.setProperties(roleId, fields) local result = {} for k,v in pairs(fields) do local value = packRoleField(k, v) if value then result[#result + 1] = k result[#result + 1] = value end end return redisproxy:hmset(getRoleKey(roleId), table.unpack(result)) end function CMD.getProperty(roleId, field) return unpackRoleField(field ,redisproxy:hget(getRoleKey(roleId), field)) end function CMD.getProperties(roleId, fields) local returnValue = redisproxy:hmget(getRoleKey(roleId), table.unpack(fields)) local ret = {} for index, key in ipairs(fields) do ret[key] = unpackRoleField(key, returnValue[index]) end return ret end function CMD.friendSInfo(roleId) local info = CMD.getProperties(roleId, {"name", "level", "headId", "ltime", "pvpTBVC", "hangTBV"}) return { name = info.name, level = info.level, headId = info.headId, ltime = info.ltime, battleV = info.pvpTBVC ~= 0 and info.pvpTBVC or info.hangTBV, } end function CMD.friendInfo(roleId) local info = CMD.getProperties(roleId, {"name", "level", "headId", "ltime", "pvpTBVC", "hangTBV", "pvpTSC", "hangTS"}) return { name = info.name, level = info.level, headId = info.headId, ltime = info.ltime, battleV = info.pvpTBVC ~= 0 and info.pvpTBVC or info.hangTBV, team = info.pvpTBVC ~= 0 and info.pvpTSC or info.hangTS } end function CMD.friendBattleInfo(roleId) local info = CMD.getProperties(roleId, {"pvpTBC", "hangTB"}) return (next(info.pvpTBC) and next(info.pvpTBC.heros)) and info.pvpTBC or info.hangTB end function CMD.pvpCInfo(roleId) local info = CMD.getProperties(roleId, {"name", "level", "headId", "pvpTBVC", "pvpTSC", "pvpTBC"}) return { name = info.name, level = info.level, headId = info.headId, battleV = info.pvpTBVC, team = info.pvpTSC, battleInfo = info.pvpTBC } end function CMD.pvpHInfo(roleId) local info = CMD.getProperties(roleId, {"name", "level", "headId", "pvpTBVH", "pvpTSH", "pvpTBH"}) return { name = info.name, level = info.level, headId = info.headId, battleV = info.pvpTBVH, team = info.pvpTSH, battleInfo = info.pvpTBH } end -- 高级pvp 排行榜 function CMD.pvpHRankInfo(roleId) local info = CMD.getProperties(roleId, {"name", "level", "headId", "pvpTBVH", "ltime"}) local info = { name = info.name, level = info.level, headId = info.headId, ltime = info.ltime, battleV = info.pvpTBVH, } return info end -- 记录红点 function CMD.redPTag(roleId, tag, pms) pms = pms or 1 local redp = CMD.getProperty(roleId, "redp") if not redp[tag] or redp[tag] ~= pms then redp[tag] = pms CMD.setProperty(roleId, "redp", redp) end end RoleCross.handle = function(cmd, roleId, ...) SRole = SRole or require("models.Role") if CMD[cmd] then return CMD[cmd](roleId, ...) end end return RoleCross