drakylucas 160 Postado Abril 13, 2013 Share Postado Abril 13, 2013 (editado) Créditos: 100% Draky LucasO que é?Cada level que você upa, você ganha uma quantidade de pontos configuráveis, que pode ser trocados por skills, vida e mana, porem sendo controlado o que pode ser trocado por vocação (assim. um knight, por exemplo, nao compraria ML)PS: configurem vcs mesmos tudo na LIBFuncionamento: Só colocar e ver oOVideo: comandos:/atributos/atributos add, club/atributos add, axe/atributos add, sword/atributos add, fist/atributos add, shielding/atributos add, distance/atributos add, mana/atributos add, vitality/atributos reset/atributos buildinstalação:em data/lib crie um arquivo chamado atributos.lua e nele adicione isso: vocationPoints = { [0] = 3, [1] = 3, [2] = 3, [3] = 3, [4] = 3, [5] = 5, [6] = 5, [7] = 5, [8] = 5, } skills = { ["fist"] = {id = 0,neededPoints = 20,quantoGanha = 1,vocationNeeded={3,4,7,8}}, ["club"] = {id = 1,neededPoints = 30,quantoGanha = 1,vocationNeeded={4,8}}, ["sword"] = {id = 2,neededPoints = 30,quantoGanha = 1,vocationNeeded={4,8}}, ["axe"] = {id = 3,neededPoints = 30,quantoGanha = 1,vocationNeeded={4,8}}, ["distance"] = {id = 4,neededPoints = 30,quantoGanha = 1,vocationNeeded={3,7}}, ["shielding"] = {id = 5,neededPoints = 30,quantoGanha = 1,vocationNeeded={0,1,2,3,4,5,6,7,8}}, ["magic"] = {id = 7, neededPoints = 30,quantoGanha = 1,vocationNeeded={0,1,2,5,6}}, ["vitality"] = {id = 30,neededPoints = 3,quantoGanha = 5, vocationNeeded={0,1,2,3,4,5,6,7,8}}, ["mana"] = {id = 35,neededPoints = 3,quantoGanha = 5, vocationNeeded={0,1,2,3,4,5,6,7,8}}, } resetPreco = 100 storagesUtilizadas = { storageLevelJaPego = 12448, storagePontos = 12449, storageFistPoints = 12450, storageClubPoints = 12451, storageSwordPoints = 12452, storageAxePoints = 12453, storageDistancePoints = 12454, storageShieldingPoints = 12455, storageMagicPoints = 12456, storageVitalityPoints = 12457, storageManaPoints = 12458, storageFist = 12459, storageClub = 12460, storageSword = 12461, storageAxe = 12462, storageDistance = 12463, storageShielding = 12464, storageMagic = 12465, storageVitality = 12466, storageMana = 12467, } function getPontos(cid) return (getPlayerStorageValue(cid,storagesUtilizadas.storagePontos)) end function addPontos(cid,qtd) setPlayerStorageValue(cid,storagesUtilizadas.storagePontos,getPontos(cid) + qtd) end function addSkill(cid,id,pontosUsados,quantoGanha,vocationNeeded) if not isInArray(vocationNeeded,getPlayerVocation(cid)) then return "Sua vocacao nao pode adicionar esse atributo!" end if getPontos(cid) < pontosUsados then return "Voce nao tem pontos o suficiente para adicionar esse atributo!" end local storage = { [0] = {st1 = storagesUtilizadas.storageFist,st2 = storagesUtilizadas.storageFistPoints}, [1] = {st1 = storagesUtilizadas.storageClub,st2 = storagesUtilizadas.storageClubPoints}, [2] = {st1 = storagesUtilizadas.storageSword,st2 = storagesUtilizadas.storageSwordPoints}, [3] = {st1 = storagesUtilizadas.storageAxe,st2 = storagesUtilizadas.storageAxePoints}, [4] = {st1 = storagesUtilizadas.storageDistance,st2 = storagesUtilizadas.storageDistancePoints}, [5] = {st1 = storagesUtilizadas.storageShielding,st2 = storagesUtilizadas.storageShieldingPoints}, [7] = {st1 = storagesUtilizadas.storageMagic,st2 = storagesUtilizadas.storageMagicPoints}, [30] = {st1 = storagesUtilizadas.storageVitality,st2 = storagesUtilizadas.storageVitalityPoints}, [35] = {st1 = storagesUtilizadas.storageMana,st2 = storagesUtilizadas.storageManaPoints}, } if id == 30 then setCreatureMaxHealth(cid, getCreatureMaxHealth(cid) + quantoGanha) doCreatureAddHealth(cid, quantoGanha) elseif id == 35 then setCreatureMaxMana(cid, getCreatureMaxMana(cid) + quantoGanha) doCreatureAddMana(cid, quantoGanha) else if id == 7 then doPlayerAddMagLevel(cid, quantoGanha) else doPlayerAddSkillTry(cid, id, getPlayerRequiredSkillTries(cid, id, getPlayerSkillLevel(cid, id) + quantoGanha),false) end end setPlayerStorageValue(cid,storage[id].st1,getPlayerStorageValue(cid,storage[id].st1) + quantoGanha) setPlayerStorageValue(cid,storage[id].st2,getPlayerStorageValue(cid,storage[id].st2) + pontosUsados) addPontos(cid,- pontosUsados) doSendMagicEffect(getCreaturePosition(cid), 30) return "Atributo adicionado!" end function resetPontos(cid) for i = storagesUtilizadas.storageFistPoints,storagesUtilizadas.storageManaPoints do addPontos(cid,getPlayerStorageValue(cid,i)) setPlayerStorageValue(cid,i,0) end local guid = getPlayerGUID(cid) local atuais = { hp = getCreatureMaxHealth(cid) - (getPlayerStorageValue(cid,storagesUtilizadas.storageVitality)), mp = getPlayerMaxMana(cid) - (getPlayerStorageValue(cid,storagesUtilizadas.storageMana)), magic = getPlayerMagLevel(cid) - (getPlayerStorageValue(cid,storagesUtilizadas.storageMagic)), fist = getPlayerSkillLevel(cid, 0) - (getPlayerStorageValue(cid,storagesUtilizadas.storageFist)), club = getPlayerSkillLevel(cid, 1) - (getPlayerStorageValue(cid,storagesUtilizadas.storageClub)), sword = getPlayerSkillLevel(cid, 2) - (getPlayerStorageValue(cid,storagesUtilizadas.storageSword)), axe = getPlayerSkillLevel(cid, 3) - (getPlayerStorageValue(cid,storagesUtilizadas.storageAxe)), dist = getPlayerSkillLevel(cid, 4) - (getPlayerStorageValue(cid,storagesUtilizadas.storageDistance)), shield = getPlayerSkillLevel(cid, 5) - (getPlayerStorageValue(cid,storagesUtilizadas.storageShielding)), } doRemoveCreature(cid) db.executeQuery("UPDATE `players` SET `maglevel` = " .. atuais.magic .. " WHERE `id` = "..guid) db.executeQuery("UPDATE `players` SET `health` = " .. atuais.hp .. " WHERE `id` = "..guid) db.executeQuery("UPDATE `players` SET `healthmax` = " .. atuais.hp .. " WHERE `id` = "..guid) db.executeQuery("UPDATE `players` SET `mana` = " .. atuais.mp .. " WHERE `id` = "..guid) db.executeQuery("UPDATE `players` SET `manamax` = " .. atuais.mp .. " WHERE `id` = "..guid) db.executeQuery("UPDATE `player_skills` SET `value` = " .. atuais.fist .. " WHERE `player_id` = "..guid .. " AND `skillid` = 0") db.executeQuery("UPDATE `player_skills` SET `value` = " .. atuais.club .. " WHERE `player_id` = "..guid .. " AND `skillid` = 1") db.executeQuery("UPDATE `player_skills` SET `value` = " .. atuais.sword .. " WHERE `player_id` = "..guid .. " AND `skillid` = 2") db.executeQuery("UPDATE `player_skills` SET `value` = " .. atuais.axe .. " WHERE `player_id` = "..guid .. " AND `skillid` = 3") db.executeQuery("UPDATE `player_skills` SET `value` = " .. atuais.dist .. " WHERE `player_id` = "..guid .. " AND `skillid` = 4") db.executeQuery("UPDATE `player_skills` SET `value` = " .. atuais.shield .. " WHERE `player_id` = "..guid .. " AND `skillid` = 5") for i = storagesUtilizadas.storageFist, storagesUtilizadas.storageMana do db.executeQuery("UPDATE `player_storage` SET `value` = 0 WHERE `key` = "..i .. " and `player_id` = " ..guid) end return true end agora em data/talkactions/scripts crie uma pasta chamada drakylucas e nela crie um arquivo chamado atributos.lua , colocando isso nele: function onSay(cid, words, param) local param = param:lower() local op = string.explode(param, ",") local text = "" if param == nil or (op[1] ~= "reset" and op[1] ~= "add" and op[1] ~= "build") then text = text .. "Pontos: " .. getPontos(cid) .. "\nSua vocação ganha: " .. vocationPoints[getPlayerVocation(cid)] .. " pontos por level" .. "\n\nNome - Precisa - Ganha -- Para sua voc" for i, x in pairs(skills) do if isInArray(x.vocationNeeded,getPlayerVocation(cid)) then text = text .. "\n"..i.. " - " ..x.neededPoints.. " - " .. x.quantoGanha .. "" end end text = text .. "\n\nExemplos:\n/atributos add,mana\n/atributos add,vitality" text = text .. "\nVoce pode resetar seus atributos: Digite /atributos reset (custa " .. resetPreco.."k)\nVeja sua build: /atributos build" return doShowTextDialog(cid, 1976, text) end if op[1] == "reset" then if getCreatureCondition(cid, CONDITION_INFIGHT) == true then return doPlayerSendCancel(cid,"Voce tem que estar sem battle para resetar seus atributos") end if getPlayerMoney(cid) < (resetPreco*1000) then return doPlayerSendCancel(cid,"Voce nao tem dinheiro suficiente para resetar seus atributos!") end doPlayerRemoveMoney(cid, resetPreco*1000) return resetPontos(cid) end if op[1] == "add" then if skills[op[2]] == nil then return doPlayerSendTextMessage(cid,19,"atributo nao existente. Verifique sua ortografia!") end doPlayerSendTextMessage(cid,19,addSkill(cid,skills[op[2]].id,skills[op[2]].neededPoints,skills[op[2]].quantoGanha,skills[op[2]].vocationNeeded)) return true end if op[1] == "build" then local atuais = { hp = (getPlayerStorageValue(cid,storagesUtilizadas.storageVitality)), mp = (getPlayerStorageValue(cid,storagesUtilizadas.storageMana)), magic = (getPlayerStorageValue(cid,storagesUtilizadas.storageMagic)), fist = (getPlayerStorageValue(cid,storagesUtilizadas.storageFist)), club = (getPlayerStorageValue(cid,storagesUtilizadas.storageClub)), sword = (getPlayerStorageValue(cid,storagesUtilizadas.storageSword)), axe = (getPlayerStorageValue(cid,storagesUtilizadas.storageAxe)), dist = (getPlayerStorageValue(cid,storagesUtilizadas.storageDistance)), shield = (getPlayerStorageValue(cid,storagesUtilizadas.storageShielding)), } text = "Quantidades de atributos ja recebidos: \n" .. "Vitality: "..atuais.hp.." \n" .. "Mana: "..atuais.mp.." \n" .. "Magic: "..atuais.magic.." \n" .. "Fist: "..atuais.fist.." \n" .. "Club: "..atuais.club.." \n" .. "Sword: "..atuais.sword.." \n" .. "Axe: "..atuais.axe.." \n" .. "Distance: "..atuais.dist.." \n" .. "Shielding: "..atuais.shield.." \n" .. "Pontos restantes: " .. getPontos(cid) doShowTextDialog(cid, 1976, text) return true end return true end agora em data/creaturescripts/scripts crie uma pasta chamada drakylucas e nela crie um arquivo chamado atributos.lua (sim, todos arquivos tem o mesmo nome.. cuidado nas pastas) e coloque isso: function onAdvance(cid, skill, oldLevel, newLevel) if not (vocationPoints[getPlayerVocation(cid)]) then return true end if skill == 8 then if getPlayerStorageValue(cid, storagesUtilizadas.storageLevelJaPego) < newLevel then local pts = (newLevel - (1 + getPlayerStorageValue(cid, storagesUtilizadas.storageLevelJaPego))) * vocationPoints[getPlayerVocation(cid)] addPontos(cid,pts) setPlayerStorageValue(cid,storagesUtilizadas.storageLevelJaPego,newLevel -1) doSendAnimatedText(getCreaturePosition(cid), "+"..pts, math.random(1,200)) end end return true end agora em data/creaturescripts/scripts, abre o login.lua e coloque isso ANTES do último return true: -- attribute system by draky lucas if getPlayerStorageValue(cid,storagesUtilizadas.storageLevelJaPego) == -1 then for i = storagesUtilizadas.storageLevelJaPego,storagesUtilizadas.storageMana do setPlayerStorageValue(cid,i,0) end end registerCreatureEvent(cid,"avancarGanharPontos") -- agora em data/talkactions/talkactions.xml coloque isso: <talkaction words="/atributos" event="script" value="drakylucas/atributos.lua"/> agora em data/creaturescripts/creaturescripts.xml coloque isso:<event type="advance" name="avancarGanharPontos" event="script" value="drakylucas/atributos.lua"/> reinicie o servidor e divirta-se.PS: não sei se funciona com sqlite.. eu uso MYSQL como banco de dados.Testado com TFS 0.4 Rev 3887 8.60Por favor, nao deixem de comentar, desanima criar coisas e a cada 100 visitas, apenas um comentario.EDIT: Arrumado bug do magiclevel! Editado Abril 9, 2015 por CyberBot Link para o comentário https://xtibia.com/forum/topic/211979-sistema-de-atribui%C3%A7%C3%A3o-de-pontos-by-draky-lucas/ Compartilhar em outros sites More sharing options...
ThiagoBji 146 Postado Abril 13, 2013 Share Postado Abril 13, 2013 Bom sistema mano, parabéns! (adoro seus sistemas e scripts! são bons, e criados por você, parabéns!) Uma dúvida: Tipo, eu sou level 150, ai eu já ganhei meus pontos por alcançar esse level, ai se eu morrer e voltar level 146, e upar 150, eu ganho novamente os pontos ou não? Link para o comentário https://xtibia.com/forum/topic/211979-sistema-de-atribui%C3%A7%C3%A3o-de-pontos-by-draky-lucas/#findComment-1502571 Compartilhar em outros sites More sharing options...
Gears 109 Postado Abril 13, 2013 Share Postado Abril 13, 2013 Haha sempe quis criar um system assim, porém me falta experiencia na area, quem sabe um dia não desenvolvo meu proprio /attribute points system? Rs, esse tal de DrakyLucas é foda msm ein.. kkk Link para o comentário https://xtibia.com/forum/topic/211979-sistema-de-atribui%C3%A7%C3%A3o-de-pontos-by-draky-lucas/#findComment-1502572 Compartilhar em outros sites More sharing options...
drakylucas 160 Postado Abril 13, 2013 Autor Share Postado Abril 13, 2013 (editado) Bom sistema mano, parabéns! (adoro seus sistemas e scripts! são bons, e criados por você, parabéns!) Uma dúvida: Tipo, eu sou level 150, ai eu já ganhei meus pontos por alcançar esse level, ai se eu morrer e voltar level 146, e upar 150, eu ganho novamente os pontos ou não? Não.. você só ganha uma vez os pontos.. e nao tem bug de tipo voltar 1 level e upar 3 pra ganhar 4 leveis.. vai ganhar somente os 2 (3 - 1 que voltou) leveis em pontos... Só tem uma coisa ai, tipo a maioria dos servidores começam level 8, entao o primeiro level vai contar 9leveis.. depois conta um em um.. mas ja os que tem rookgard ta certinho, level 1. PS: acredito que, se o servidor seus ja existirem (tiver online), você pode instalar o sistema sem problemas, pois ao upar um level o jogador ja irá ganhar os pontos equivalentes a todos os leveis que ele nao tinha (tipo, tou level 150, instalou o sistema, ao upar 151, eu irei ganhar os 151 leveis em pontos, assim nao deixando somente os leveis baixos em vantagens por ganharem pontos ao upar mais facil ^^) Editado Abril 13, 2013 por DrakyLucas Link para o comentário https://xtibia.com/forum/topic/211979-sistema-de-atribui%C3%A7%C3%A3o-de-pontos-by-draky-lucas/#findComment-1502579 Compartilhar em outros sites More sharing options...
PsyMcKenzie 150 Postado Abril 13, 2013 Share Postado Abril 13, 2013 Muito bom cara! REP+ Link para o comentário https://xtibia.com/forum/topic/211979-sistema-de-atribui%C3%A7%C3%A3o-de-pontos-by-draky-lucas/#findComment-1502602 Compartilhar em outros sites More sharing options...
rohfagundes 78 Postado Abril 13, 2013 Share Postado Abril 13, 2013 estava com um sistema de pontos aqui mas n dava pra resetar esse seu ai ta top muito bom =D +Rep Link para o comentário https://xtibia.com/forum/topic/211979-sistema-de-atribui%C3%A7%C3%A3o-de-pontos-by-draky-lucas/#findComment-1503019 Compartilhar em outros sites More sharing options...
Gabrielkss 10 Postado Abril 13, 2013 Share Postado Abril 13, 2013 tó tendo erros man, error - Talkactions Interface - (luaGetPlayerRequireSkillTries) Player Not found Talkactions Interface - (luaDoPlayerAddSkillTry) Player Not found sempre que vou colocar em algum skill, o resto tá normal, Link para o comentário https://xtibia.com/forum/topic/211979-sistema-de-atribui%C3%A7%C3%A3o-de-pontos-by-draky-lucas/#findComment-1503057 Compartilhar em outros sites More sharing options...
Roksas 846 Postado Abril 13, 2013 Share Postado Abril 13, 2013 Muito bom cara, bem criativo, obrigado por colaborar com este tipo de conteúdo. Link para o comentário https://xtibia.com/forum/topic/211979-sistema-de-atribui%C3%A7%C3%A3o-de-pontos-by-draky-lucas/#findComment-1503088 Compartilhar em outros sites More sharing options...
drakylucas 160 Postado Abril 13, 2013 Autor Share Postado Abril 13, 2013 (editado) tó tendo erros man, error - Talkactions Interface - (luaGetPlayerRequireSkillTries) Player Not found Talkactions Interface - (luaDoPlayerAddSkillTry) Player Not found sempre que vou colocar em algum skill, o resto tá normal, aqui nao ocorreu erro algum.. e se tiver dando erro, nao tem o minimo sentido, nao usei nenhum addEvent no script pra fazer com que o cid nao seja encontrado.. e pra ele chegar a puxar a funçao, ele tem que ter o cid oO... você instalou a lib corretamente? qual distro usa? (posta link) EDIT: axei o erro, vou arruma-lo e ja edito no topico.. esperem um pouquinho só edit2: erro arrumado.. era uma virgula na lib na funçao... acho que apertei sem qrer qnd eu tava arrumando as vocations, e devo ter bugado oO... agora está certinho dnv.. atualizem a lib e pronto Estou baixando o camtasia (20 min eu baixo), vou fazer um video mostrando o sistema, mas sem muita explicação, pois videos longos sao chatos ^^ Editado Abril 13, 2013 por DrakyLucas Link para o comentário https://xtibia.com/forum/topic/211979-sistema-de-atribui%C3%A7%C3%A3o-de-pontos-by-draky-lucas/#findComment-1503096 Compartilhar em outros sites More sharing options...
Gabrielkss 10 Postado Abril 13, 2013 Share Postado Abril 13, 2013 Aee agora sim, meu deus otimo sistema mano, melho de todos vlw por compartilhar REP++ Link para o comentário https://xtibia.com/forum/topic/211979-sistema-de-atribui%C3%A7%C3%A3o-de-pontos-by-draky-lucas/#findComment-1503119 Compartilhar em outros sites More sharing options...
Slicer 1070 Postado Abril 13, 2013 Share Postado Abril 13, 2013 bem interessante... fico bemmm complexo kkk eu fiz um sistema assim pra um amigo a um tempo soh q bem mais simples e pro otclient... n acha melhor usar.. doPlayerAddSkill(cid, skill, amout) em vez de ter q remover o player e editar a DB? ;x ps: se for usar esse comando va em lib/050-function.lua e troque a funçao la por isso.. function doPlayerAddMagLevel(cid, amount) for i = 1, amount do doPlayerAddSpentMana(cid, (getPlayerRequiredMana(cid, getPlayerMagLevel(cid, true) + 1) - getPlayerSpentMana(cid)) / getConfigInfo('rateMagic')) end return true end function doPlayerAddSkill(cid, skill, amount, round) amount = tonumber(amount) or 1 if amount <= 0 then amount = 1 end if(skill == SKILL__LEVEL) then return doPlayerAddLevel(cid, amount, round) elseif(skill == SKILL__MAGLEVEL) then return doPlayerAddMagLevel(cid, amount) end for i = 1, amount do doPlayerAddSkillTry(cid, skill, (getPlayerRequiredSkillTries(cid, skill, getPlayerSkillLevel(cid, skill) + 1) - getPlayerSkillTries(cid, skill)) / getConfigInfo('rateSkill')) end return true end ps²: caso n 'enxa' a skill toda retire isso.. / getConfigInfo('rateSkill') / getConfigInfo('rateMagic') Link para o comentário https://xtibia.com/forum/topic/211979-sistema-de-atribui%C3%A7%C3%A3o-de-pontos-by-draky-lucas/#findComment-1503122 Compartilhar em outros sites More sharing options...
Fir3element 185 Postado Abril 13, 2013 Share Postado Abril 13, 2013 bem interessante... fico bemmm complexo kkk eu fiz um sistema assim pra um amigo a um tempo soh q bem mais simples e pro otclient... n acha melhor usar.. doPlayerAddSkill(cid, skill, amout) em vez de ter q remover o player e editar a DB? ;x ps: se for usar esse comando va em lib/050-function.lua e troque a funçao la por isso.. function doPlayerAddMagLevel(cid, amount) for i = 1, amount do doPlayerAddSpentMana(cid, (getPlayerRequiredMana(cid, getPlayerMagLevel(cid, true) + 1) - getPlayerSpentMana(cid)) / getConfigInfo('rateMagic')) end return true end function doPlayerAddSkill(cid, skill, amount, round) amount = tonumber(amount) or 1 if amount <= 0 then amount = 1 end if(skill == SKILL__LEVEL) then return doPlayerAddLevel(cid, amount, round) elseif(skill == SKILL__MAGLEVEL) then return doPlayerAddMagLevel(cid, amount) end for i = 1, amount do doPlayerAddSkillTry(cid, skill, (getPlayerRequiredSkillTries(cid, skill, getPlayerSkillLevel(cid, skill) + 1) - getPlayerSkillTries(cid, skill)) / getConfigInfo('rateSkill')) end return true end ps²: caso n 'enxa' a skill toda retire isso.. / getConfigInfo('rateSkill') / getConfigInfo('rateMagic') pela função o ml vai até 150 e poco e a skill até 200 e poco, dai pela database acho que vai até quanto quiser u.u Link para o comentário https://xtibia.com/forum/topic/211979-sistema-de-atribui%C3%A7%C3%A3o-de-pontos-by-draky-lucas/#findComment-1503126 Compartilhar em outros sites More sharing options...
drakylucas 160 Postado Abril 13, 2013 Autor Share Postado Abril 13, 2013 nao, a database só é utilizada na hora de remover a skill.. leia um pouco o script.. addSkill negativo nao funciona =/ arrumei um errinho na hora do reset, reinstalem a LIB dinovo kk... agora acho q está sem nenhum bug. Link para o comentário https://xtibia.com/forum/topic/211979-sistema-de-atribui%C3%A7%C3%A3o-de-pontos-by-draky-lucas/#findComment-1503129 Compartilhar em outros sites More sharing options...
Slicer 1070 Postado Abril 13, 2013 Share Postado Abril 13, 2013 kk malz passei reto por isso.. function resetPontos(cid) fail ;x Link para o comentário https://xtibia.com/forum/topic/211979-sistema-de-atribui%C3%A7%C3%A3o-de-pontos-by-draky-lucas/#findComment-1503133 Compartilhar em outros sites More sharing options...
drakylucas 160 Postado Abril 13, 2013 Autor Share Postado Abril 13, 2013 lembrando que vocês tbm podem configurar o vocations.xml como quiser, pra ganhar menos mana, nao ganhar skills (para deixar só o sistema), etc... (mas logico q se forem deixar só o sistema, coloquem pra ganhar mais pontos Oo) Link para o comentário https://xtibia.com/forum/topic/211979-sistema-de-atribui%C3%A7%C3%A3o-de-pontos-by-draky-lucas/#findComment-1503136 Compartilhar em outros sites More sharing options...
Posts Recomendados