local Rune = class("Rune", require("shared.ModelBase")) Rune.schema = { uid = {"number"}, -- 唯一自增id type = {"number"}, -- 装备位置 id = {"number"}, level = {"number", 0}, -- 等级 refer = {"number", 0}, -- 已装备英雄id attrs = {"string",""} -- 基础属性值 id=value } function Rune:ctor( properties ) Rune.super.ctor(self, properties) end function Rune:notifyUpdateProperty(field, newValue, oldValue) local datas = { uid = self:getProperty("uid"), datas = { { key = field, newValue = newValue, oldValue = oldValue, } } } self:notifyUpdateProperties(datas) end function Rune:notifyUpdateProperties(params) local updateData = { uid = self:getProperty("uid"), datas = params } SendPacket(actionCodes.Role_updateRune, MsgPack.pack(updateData)) end function Rune:updateProperty(params) if not params.field or (not params.delta and not params.value) then return end if params.delta then self:incrProperty(params.field, params.delta) elseif params.value then self:setProperty(params.field, params.value) end local datas = {} table.insert(datas, {key = params.field, newValue = self:getProperty(params.field)}) self:notifyUpdateProperties(datas) end -- types 类型=权重"2=100 3=100 4=100" value最大值=最小值 "50=100 50=100 100=200" local function getRandomValue(types,values) local typeMap = types:toNumMap() local valueArry = values:toArray() if table.nums(typeMap) ~= #valueArry then return nil end local typ,value local typTab,weightSum = {},0 for t,w in pairs(typeMap) do weightSum = weightSum + w table.insert(typTab,{t=t,w=weightSum}) end local tk local tmp = math.random(1,weightSum) for k,v in ipairs(typTab) do if v.w >= tmp then typ = v.t tk = k break end end local range = valueArry[tk]:toArray(true,"=") value = math.random(range[1],range[2]) return typ,value end function Rune:generateAttrs() local runeData = csvdb["runeCsv"][self:getProperty("type")][self:getProperty("id")] local attrs = "" attrs = attrs:setv(getRandomValue(runeData.attr1,runeData.range1)) attrs = attrs:setv(getRandomValue(runeData.attr2,runeData.range2)) self:setProperty("attrs",attrs) end function Rune:data() return { uid = self:getProperty("uid"), type = self:getProperty("type"), id = self:getProperty("id"), refer = self:getProperty("refer"), attrs = self:getProperty("attrs"), level = self:getProperty("level"), } end return Rune