Rune.lua 2.44 KB
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