Hero.lua 3.46 KB
local Hero = class("Hero", require("shared.ModelBase"))

local HeroPlugin = import(".HeroPlugin")
HeroPlugin.bind(Hero)

Hero.schema = {
	id 			= {"number"},
	type 		= {"number", 0},
	level		= {"number", 1},		-- 等级
	breakL		= {"number", 0},		-- 突破等级
	wakeL		= {"number", 1},		-- 觉醒等级
	talent		= {"string", ""},		-- 0=阶段 1=1 2=1 3=1 4=1 四个天赋当前阶段的等级  阶段默认为1  等级默认为0
	battleV		= {"number", 0},		-- 保存战斗力
	-- loveExp		= {"number", 0},		--好感度经验
	-- loveL		= {"number", 0},		--好感度等级
	equip       = {"string",""},        --装备 type=level
	rune       = {"string",""},        --零件 type=id
	faith	   = {"number", 0},			-- 信赖
	spark		= {"table", {}},		-- 火花属性
}

function Hero:ctor( properties )
	Hero.super.ctor(self, properties)
end

function Hero:notifyUpdateProperty(field, newValue, oldValue)
	local datas = {
		id = self:getProperty("id"),
		datas = {
			{
				key = field,
				newValue = newValue,
				oldValue = oldValue,
			}
		}
	}
	self:notifyUpdateProperties(datas)
end

function Hero:notifyUpdateProperties(params)
	local updateData = {
		id = self:getProperty("id"),
		datas = params
	}
	SendPacket(actionCodes.Hero_updateProperty, MsgPack.pack(updateData))
end

function Hero:updateProperties(params, notNotify)
	self:setProperties(params)

	local check = {level = true, breakL = true, wakeL = true, talent = true, loveL = true, equip = true, rune = true, spark = true}
	local datas = {}
	local updateBV = false
	for k , v in pairs(params) do
		if check[k] then updateBV = true end
		table.insert(datas, {key = k, newValue = self:getProperty(k)})
	end
	if updateBV then
		local orginValue = self:getProperty("battleV")
		local curValue = self:saveBattleValue()
		if orginValue ~= curValue then
			table.insert(datas, { key = "battleV", newValue = curValue })
		end
	end
	if not notNotify then
		self:notifyUpdateProperties(datas)
	end
end

function Hero: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)})

	local check = {level = true, breakL = true, wakeL = true, talent = true, loveL = true, equip = true, rune = true, spark = true}
	if check[params.field] then
		local orginValue = self:getProperty("battleV")
		local curValue = self:saveBattleValue()
		if orginValue ~= curValue then
			table.insert(datas, { key = "battleV", newValue = curValue })
		end
	end

	self:notifyUpdateProperties(datas)
end

function Hero:data()
	return {
		id = self:getProperty("id"),
		type = self:getProperty("type"),
		level = self:getProperty("level"),
		breakL = self:getProperty("breakL"),
		wakeL = self:getProperty("wakeL"),
		talent  = self:getProperty("talent"),
		battleV = self:getProperty("battleV"),
		-- loveExp = self:getProperty("loveExp"),
		-- loveL = self:getProperty("loveL"),
		equip = self:getProperty("equip"),
		rune = self:getProperty("rune"),
		faith = self:getProperty("faith"),
		spark = self:getProperty("spark"),
	}
end

function Hero:getCamp()
    return csvdb["unitCsv"][self:getProperty("type")].camp
end

function Hero:getRare()
    return csvdb["unitCsv"][self:getProperty("type")].rare
end

function Hero:getPosition()
    return csvdb["unitCsv"][self:getProperty("type")].position
end

return Hero