AchievementInfo.lua 2.13 KB
cc.exports.AchievementInfo = {}

local xml = require("core.utils.pl.xml")

local _list = {};
local level_list = {};

--道具配置表信息
local function init()
    local configStr = cc.FileUtils:getInstance():getStringFromFile("res/config/achievement.xml");
    local data = xml.parse(configStr, false, true);

    for i,v in pairs(data) do
        if v.tag == "type" then
            local _obj = {list={}};
            _obj.viewid = tonumber(v.attr.viewid);
            _obj.id = tonumber(v.attr.id);
            _obj.name = v.attr.name;
            _obj.des = v.attr.des or "";
            for ii,vv in pairs(v) do
                if vv.tag == "reward" then
                    local info = {};
                    info.id = tonumber(vv.attr.id);
                    info.name = vv.attr.name;
                    info.itemList = StringUtil.split(vv.attr.item,";");
                    info.data = tonumber(vv.attr.data);
                    _obj.list[#_obj.list+1] = info;
                end
            end
            table.sort(_obj.list,function (aa,bb)
                return tonumber(aa.id) < tonumber(bb.id);
            end);
            _list[#_list+1] = _obj;
        elseif v.tag == "level" then
            local _obj = {};
            _obj.id = tonumber(v.attr.id);
            _obj.cnt = tonumber(v.attr.cnt);
            _obj.itemList = StringUtil.split(v.attr.item,";");
            level_list[#level_list+1] = _obj;
        end
    end
    table.sort(_list,function (aa,bb)
        return aa.viewid < bb.viewid;
    end);
    table.sort(level_list,function (aa,bb)
        return aa.id < bb.id;
    end);
end
init();

--通过成就ID获取成就信息
function AchievementInfo.getAchievementListByID(achievement_id)
    for i,v in ipairs(_list) do
        if tonumber(v.id) == tonumber(achievement_id) then
            return v;
        end
    end
end

function AchievementInfo.getAchievementList()
    return _list;
end

function AchievementInfo.getNextAchievementLevelReward(achievement_cnt)
    for i,v in ipairs(level_list) do
        if achievement_cnt < v.cnt then
            return v;
        end
    end
    return nil;
end

return AchievementInfo