local RolePlugin = {} function RolePlugin.bind(Role) function Role:log() end function Role:loadAll() self:loadHeros() end function Role:reloadWhenLogin() end function Role:onCrossDay(now) end function Role:onOfflineEvent() end function Role:addHero(params) local roleId = self:getProperty("id") local heroId = tonum(redisproxy:hincrby(string.format(R_INCR, roleId), "hero", 1)) local heroType = params.type local unitData = csvdb["unitCsv"][heroType] redisproxy:sadd(string.format(R_HEROS, roleId), heroId) local heroInfo = { key = string.format(R_HERO, roleId, heroId), id = heroId, type= heroType, } local newHero = require("models.Hero").new(heroInfo) newHero:create() newHero.owner = self self.heros[heroId] = newHero if not params.notNotify then local heroResponse = {} table.insert(heroResponse, newHero:data()) local bin = MsgPack.pack(heroResponse) SendPacket(actionCodes.Hero_loadInfos, bin) end end function Role:delHero(params) local roleId = self:getProperty('id') local hero = self.heros[heroId] if not hero then return end self.heros[heroId] = nil redisproxy:pipelining(function (red) red:del(string.format(R_HERO, roleId, heroId)) red:srem(string.format(R_HEROS, roleId), heroId) end) SendPacket(actionCodes.Hero_loadInfos, MsgPack.pack({{id = heroId, bDel = true}})) end function Role:loadHeros() local roleId = self:getProperty("id") local heroIds = redisproxy:smembers(string.format(R_HEROS, roleId)) local redret = redisproxy:pipelining(function (red) for _, heroId in ipairs(heroIds) do red:hgetall(string.format(R_HERO, roleId, heroId)) end end) for index, heroId in ipairs(heroIds) do local hero = require("models.Hero").new({key = string.format(R_HERO, roleId, heroId)}) if hero:load(table.array2Table(redret[index])) then hero.owner = self self.heros[tonumber(heroId)] = hero end end end -- 发奖功能入口 function Role:award() end end return RolePlugin