local AbstractMobParent = require "game.abstractmobs.parent" local AbstractCharacter = AbstractMobParent:extend() local CharacterHealth = require "game.abstractmobs.character.health" local CharacterLevels = require "game.abstractmobs.character.levels" local CharacterDatas = require "game.abstractmobs.character.datas" local CharacterEquip = require "game.abstractmobs.character.equip" AbstractCharacter:implement(CharacterHealth) AbstractCharacter:implement(CharacterLevels) AbstractCharacter:implement(CharacterDatas) AbstractCharacter:implement(CharacterEquip) local CharacterStatManager = require "game.abstractmobs.character.statmanager" function AbstractCharacter:new(name) self.simplename = name AbstractCharacter.super.new(self, {"simplename", "level", "exp", "exp_next", "hp", "pp", "statuts", "equip"}, nil, CharacterStatManager) end function AbstractCharacter:initBasicElements() self:getCommonData() self:initEquip() self:initLevel() end function AbstractCharacter:createStats() local statNames = self:getStatList() local stats = {} for _, name in ipairs(statNames) do stats[name] = self:getStat(name) end if (self.hp ~= nil) then self.hp = math.min(self.hp, stats.hpmax) end if (self.pp ~= nil) then self.pp = math.min(self.pp, stats.ppmax) end return stats end function AbstractCharacter:getStat(statName, ignoreEquip) local stat = self:getComputedStat(statName) + self:getEquipStats(statName, ignoreEquip) return stat end function AbstractCharacter:createSkills() local learnedlist = {} for i, v in ipairs(self.data.skills) do local tech_name, tech_level, isLearned = v[1], v[2], false if tech_level <= self.level then local canLearn = true for i, learnedSkill in ipairs(learnedlist) do -- We check if the skill have already been learned, to level-up it if learnedSkill.name == tech_name then canLearn = false learnedSkill.level = learnedSkill.level + 1 end end if (canLearn) then local skilldata = {} skilldata.name = tech_name skilldata.level = 1 skilldata.learnedAt = tech_level table.insert(learnedlist, skilldata) end end -- On continue ensuite d'itérer dans la liste end return learnedlist end function AbstractCharacter:finishDeserialization() self:createStats() end return AbstractCharacter