Rune.lua 2.98 KB
local Rune = class("Rune", require("shared.ModelBaseMysql"))
Rune.schema = {
	uid 		= {"number", 0, "pri"},      		-- 唯一自增id
	roleid 		= {"number", 0, "index"},
	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:mylog(contents)
	contents = contents or {}
	if contents["cint1"] or contents["cint2"] or contents["cint3"] then
		print("heroLog error log have cint1 or cint2 or cint3 ", debug.traceback())
	end
	contents["cint1"] = self:getProperty("uid")
	contents["cint2"] = self:getProperty("type")
	contents["cint3"] = self:getProperty("id")

	self.owner:mylog("rune_action", contents)
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:toArray()
	local valueArry = values:toArray()

	if #typeMap ~= #valueArry then return nil end

	local typ, value
	local typTab = {}
	for _,w in ipairs(typeMap) do
		w = w:toArray(true, "=")
		table.insert(typTab,{t=w[1],w=w[2]})
	end

	local tk = math.randWeight(typTab, "w")
	typ =  typTab[tk]["t"]

	local range = valueArry[tk]:toArray(true,"=")
	value = math.randomInt(range[1],range[2])
	return typ, value
end

function Rune:generateAttrs()
	local runeData  = csvdb["runeCsv"][self:getProperty("type")][self:getProperty("id")]
	if not runeData then
		print(self:getProperty("type"), self:getProperty("id"))
	end
	local attrs = ""
	local typ, value = getRandomValue(runeData.attr1,runeData.range1)
	attrs = attrs:setv(typ, value)
	local typ, value = getRandomValue(runeData.attr2,runeData.range2)
    attrs = string.format("%s %d=%d", attrs, typ, value)
	--attrs = attrs:setv(typ, value)
	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