-
Total de itens
64 -
Registro em
-
Última visita
Tudo que GstvoLiber postou
-
action Ajuda com função doClean (pos) em action
pergunta respondeu ao Bennyhappy de GstvoLiber em Scripts
Não entendi o que você quer saber... Tem como explicar sua dúvida melhor ?? -GstavoLiber -
Acho que já respondi essa pergunta umas 4x hoje rsrs... É por causa da sua Lib 050-function estar diferente da que o cara usou para fazer o sistema. Baixe algum servidor 8.60, ou 8.70 que utilize TFS, pegue essa lib e ponha no lugar do seu. Faça backup antes pra não bugar o servidor e vir me chingar. =D PS: Aconselho a aprender a falar em ingles, os caras descutiram no próprio tópico como arrumar esse erro. Se possível +REP -GstavoLiber
-
Lendo os comentários, percebi que não é só você que está com esses problemas, então, vi a solução: Na sua pasta Libs tem um arquivo chamado 050-function. Procure pelo servidor OTX 2.1 - 8.60 e procure o mesmo arquivo, depois copie e cole no lugar do seu. Isso deve resolver. Provavelmente é por causa do seu TFS ser diferente, e falta algumas funções na lib 050-function. Tenta ai qualquer coisa me pergunta. Se possível +REP -GstavoLiber
-
Cara, vai ser dificil rsrs Tenta executar isso CREATE TABLE ban_table ( id INTEGER NOT NULL, account INTEGER NOT NULL, added INTEGER NOT NULL, expires INTEGER NOT NULL, admin_id INTEGER NOT NULL DEFAULT 0, comment TEXT NOT NULL, PRIMARY KEY ( id ) ); Se nao funcionar mesmo assim, e seu server for 9.6 +, troca seu sistema de ban por esse: BAN SYSTEM 9.6 (sei que está linkado outro fórum, só estou tentando ajudar.) Se possível +REP -GstavoLiber
-
Cara, faz um favor, entra na sua pasta liquids e pega o código da sua mana potion sem ser o meu código, quero ver quais as funções ele usa, é provavel que seu TFS não aceite um função que puis ai... No Aguardo.
-
pedido Pedido tile que da kick ao perde storage
pergunta respondeu ao Gadreel de GstvoLiber em Scripts
Nossa nem deu tempo deu responder rsrsrs. Ai depois só falta por o actionid no tile né? Ou nem precisa? -
pedido Colocando para a runa nao tirar hp
pergunta respondeu ao AdilsonHacker de GstvoLiber em Scripts
Nesse seu caso, é só mudar na linha: setCombatParam(combat, COMBAT_PARAM_CREATEITEM, 1492) Para um ID de firefield que não cause dano, agora sobre o PZ não tenho idéia rsrs. -
Simples, em actions/scripts Cria um arquivo novo com qualquer nome .lua e poe dentro... ----- Config ----- local config = { cost = 500, -- Price item_id = 7620, -- Rune/Potion backpack_id = 2001 -- Backpack } local name = getItemNameById(7620) -- Same as item_id above ----- End Config ----- function onUse(cid, item, fromPosition, itemEx, toPosition) if doPlayerRemoveMoney(cid, config.cost) == TRUE then local bp = doPlayerAddItem(cid, config.backpack_id, 1) doSendMagicEffect(fromPosition, CONST_ME_GIFT_WRAPS) doSendAnimatedText(fromPosition, "Comprado", TEXTCOLOR_RED) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "VOcê comprou uma backpack de ".. name .."s por ".. config.cost .." gold.") for i=1,20 do doAddContainerItem(bp, config.item_id, 1) -- You can edit this number, it will give shots per rune. end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você precisa de ".. config.cost .." gold para comprar uma backpack de ".. name .."s.") end return TRUE end Modifique o id da potion, o preço, e o id da backpack. Em Actions.xml adicione... <action actionid="2000" event="script" value="nomeDoArquivo.lua"/> Mude o 2000 para um numero de actionid valido em seu servidor, e o nome do arquivo para o qual vc salvou o arquivo de cima. Depois no RME vai na alavanca e clica com botao direito e vai em propriedades, e poe o numero da actionid igual ao que vc configurou ali em cima. Peguei esse código de um membro de outro fórum. Créditos a rollback. Se possível +REP -GstavoLiber
-
É só substituir por esse: local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} local parameters = {} local teleports = { ["Random Void"] = {price = 100, position = {x = 0, y = 0, z = 7}} } function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function onCreatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid for name, info in pairs(teleports) do if msgcontains(msg, name) then selfSay("Você quer ir para {".. name .."}?", cid) talkState[talkUser] = 1 parameters[talkUser] = info break end end if talkState[talkUser] == 1 then if msgcontains(msg, "yes") then if isPlayerPzLocked(cid) or getCreatureSkullType(cid) > 0 then selfSay("Desculpe, você não pode viajar com PZ ou Skull por favor volte quando não estiver com PZ ou Skull.", cid) return true end if doPlayerRemoveMoney(cid, parameters[talkUser].price) then doTeleportThing(cid, parameters[talkUser].position) selfSay("Boa viagem!", cid) else selfSay("Desculpe, você não possui ".. parameters[talkUser].price .." gp para viajar.", cid) talkState[talkUser] = 0 end elseif msgcontains(msg, "no") then selfSay("Tudo bem, volte quando mudar de ideia.", cid) talkState[talkUser] = 0 npcHandler:releaseFocus(cid) end end return true end local msg = "Olá, |PLAYERNAME|. Gostaria de viajar? Posso te levar para: " local i = 1 for name, info in pairs(teleports) do msg = msg .." {".. name .."}" .. (i == 1 and "" or ", ") i = i + 1 end npcHandler:setMessage(MESSAGE_GREET, msg) npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, onCreatureSayCallback) npcHandler:addModule(FocusModule:new()) Qualquer erro ou dúvida me pergunte. Se possível +REP -GstavoLiber
-
Mostra pra min oque aconteceu no distro... Lembrando que esse script só vai funcionar se for com mana potion, testa primeiro usando a mana potion, se ela funcionar, é porque vc editou o antidote potion errado. Mas antes de tudo, faz como eu te disse, como exemplo na potion mana simples, se nela funcionar me avise.
-
erro Bug Ao passar meu servidor de 9.60 para 9.81
pergunta respondeu ao KennyConrad de GstvoLiber em Scripts
É um erro na tabela de Treiner Offline, você executou algum comando na database sobre o mesmo? Qual foi? -
blessingReductionBase = 30 blessingReductionDecrement = 5 eachBlessReduction = 8 Traduzindo, talvez não seja isso, mas quase certeza: blessingReductionBase = Percentual de redução da bless blessingReductionDecrement = Decremento da bless ( acho que tira um pouco dos 30% ) eachBlessReduction = valor de redução de CADA bless Se possível +REP -GstavoLiber
-
Bom, fiz esse script para sanar uma dúvida de um membro da comunidade, e quero compartilhar com vocês, acho que não chega a ser um tutorial, mas está bem explicado e espero que usem =) Veja: -Antes de mais nada, entre no seu RME e faça a área da quest, depois modifique as coordenadas no script segundo seu mapa. - Lembre-se de colocar um tile diferente para ajudar o player a saber a posição correta de onde estar, e de por a alavanca no lugar correto. - Adicione mais posições para nascer os monstros, quanto mais posições mais dinamico fica sua quest. Em Actions/scripts, adicione um novo documento .lua com nome que desejar, e ponha isso dentro.. local TeleportInPos = { x = 74, y = 111, z = 10} -- Posição para onde os players serão teleportados local LeverPos = { x = 90, y = 110, z = 10} -- Posição da Alavanca local timeToRemove = 40 -- Time before quest reset local tile1Pos = { x = 80, y = 80, z = 8 } -- lugar que o player deverá estar para puxar a alavanca local str = 2000 -- modifique para um storage valido no seu server local config = { { x = 19, y = 8, z = 7 }, { x = 20, y = 10, z = 7 }, { x = 23, y = 12, z = 7 }, { x = 22, y = 11, z = 7 }, { x = 28, y = 20, z = 7 } } function onUse(cid, item, frompos, item2, topos) if(getCreaturePosition(cid) == tile1Pos) then if(getPlayerStorageValue(uid, str) == 0) then doTeleportThing(cid, TeleportInPos) doSendMagicEffect(TeleportInPos, CONST_ME_TELEPORT) doPlayerSendTextMessage(cid,22,"Agora começará sua quest. Bom sorte! ") addEvent(wave1(cid), 10) addEvent(wave2(cid), 10) addEvent(wave10(cid), 1) else doPlayerSendTextMessage(cid,22,"Você não está na posição correta, ou já fez essa quest! ") -- Mensagem caso o char n esteja no tile correto end end end function wave1(cid) doCreateMonster(Dragon, config[math.random(1, #config)]) doCreateMonster(Demodras, config[math.random(1, #config)]) end function wave2(cid) doCreateMonster(Hydra, config[math.random(1, #config)]) doCreateMonster(Spider, config[math.random(1, #config)]) end function wave10(cid) doCreateMonster(TheBoss, config[math.random(1, #config)]) end Então, embaixo de: function wave2(cid) doCreateMonster(Hydra, config[math.random(1, #config)]) doCreateMonster(Spider, config[math.random(1, #config)]) end Adicione quantas waves quiser, seguindo o modelo: function waveN(cid) doCreateMonster(MONSTRO, config[math.random(1, #config)]) doCreateMonster(MONSTRO, config[math.random(1, #config)]) end n = numero da wave MONSTRO = nome do monstro Depois, em baixo de: addEvent(wave2(cid), 10) Adicione quantas waves vc tiver, seguindo o modelo: addEvent(waveN(cid), 10) Onde n = numero da wave Feito isso tudo, bora configurar para iniciar o evento... Em actions.xml adicione a linha: <action uniqueid="1026" script="nomedoarquivo.lua"/> Mude o nome do arquivo, e no RME coloque o uniqueid 1026 na sua alavanca, que deverá estar no lugar correto também. Depois disso, devemos modificar o arquivo do monstro ( The Boss). Para isso continue: Em Creaturescript/scripts adicione um arquivo com nome de sua escolha .lua e coloque isso dentro: function onDeath(cid, corpse, killer) local Pos = {x = 340, y = 840, z = 15} -- posicao para onde o player irá (sala de premios) local monstName = "TheBoss" -- nome do monstro if isMonster(cid) then if string.lower(getCreatureName(cid)) == string.lower(monstName) then doTeleportThing(killer[1], Pos) end end return TRUE end Modifique apenas a posição para a qual o player será teleportado e o nome do monstro boss. Feito isso, volte para creaturescripts.xml e adicione: <event type="death" name="Teleportquest" event="script" value="quest1.lua"/> Modificando o nome do arquivo. Estamos quase acabando ! rsrs Vá para a pasta monster e procure pelo arquivo do monstro escolhido para ser o boss, no meu caso escolhi o TheBoss, dentro do arquivo do boss, coloque: <script> <event name="Teleportquest"/> </script> E pronto !! A quest está feita. EXTRA Agora, basta ir em actions/scripts e criar um novo arquivo para o bau da quest com qualquer nome .lua e adicionar dentro: function onUse(cid, item, frompos, item2, topos) if item.uid == 2001 then -- mude para um valor que será colocado em uniqueid no bau queststatus = getPlayerStorageValue(cid,2000) -- mude para o numero da sua storage if queststatus == -1 or queststatus == 0 then doPlayerSendTextMessage(cid,22,"Você Achou Um Bolo De 100k") item_uid = doPlayerAddItem(cid,2160,10) -- mude o premio! 2160 = Crystal Coin e 10 = quantidade. setPlayerStorageValue(cid,2000,1) -- mude apenas o 2000 para o valor da sua storage else doPlayerSendTextMessage(cid,22,"Você já fez esta quest! ") end end return true end Faça as modificações que achar necessário. Depois em actions.xml adicione: <action uniqueid="2001" script="bau1.lua"/> No RME, agora no baú, adicione a uniqueid, no meu caso 2001. Bom, espero que goste e utilize em seu servidor!! Se possivel, +REP Utilizei como base Script do Vodkart para o teleport. ( acho que é assim que escreve o nick dele ). -GstavoLiber
-
Bom, para seu numero 1, basta modificar seus codigos de Potion em actions/scripts/liquids.. Veja um exemplo da mana potion... local MIN = 70 local MAX = 130 local EMPTY_POTION = 7636 local exhaust = createConditionObject(CONDITION_EXHAUST) setConditionParam(exhaust, CONDITION_PARAM_TICKS, (getConfigInfo('timeBetweenExActions') - 100)) function onUse(cid, item, fromPosition, itemEx, toPosition) if isPlayer(itemEx.uid) == FALSE then return FALSE end if hasCondition(cid, CONDITION_EXHAUST_HEAL) == TRUE then doPlayerSendDefaultCancel(cid, RETURNVALUE_YOUAREEXHAUSTED) return TRUE end if doPlayerAddMana(itemEx.uid, math.random(MIN, MAX)) == LUA_ERROR then return FALSE end doAddCondition(cid, exhaust) doSendMagicEffect(getThingPos(itemEx.uid), CONST_ME_MAGIC_BLUE) doCreatureSay(itemEx.uid, "Aaaah...", TALKTYPE_ORANGE_1) doRemoveItem(item.uid, 1) doPlayerAddItem(cid, EMPTY_POTION, 1) return TRUE end Modifiquei por.. local MIN = 70 local MAX = 130 local EMPTY_POTION = 7636 local ehPremmy = getPlayerPremiumDays(cid) local exhaust = createConditionObject(CONDITION_EXHAUST) setConditionParam(exhaust, CONDITION_PARAM_TICKS, (getConfigInfo('timeBetweenExActions') - 100)) function onUse(cid, item, fromPosition, itemEx, toPosition) if(ehPremmy >= 1) then if isPlayer(itemEx.uid) == FALSE then return FALSE end if hasCondition(cid, CONDITION_EXHAUST_HEAL) == TRUE then doPlayerSendDefaultCancel(cid, RETURNVALUE_YOUAREEXHAUSTED) return TRUE end if doPlayerAddMana(itemEx.uid, math.random(MIN, MAX)) == LUA_ERROR then return FALSE end doAddCondition(cid, exhaust) doSendMagicEffect(getThingPos(itemEx.uid), CONST_ME_MAGIC_BLUE) doCreatureSay(itemEx.uid, "Aaaah...", TALKTYPE_ORANGE_1) doRemoveItem(item.uid, 1) doPlayerAddItem(cid, EMPTY_POTION, 1) return TRUE else doPlayerSendTextMessage(cid, 27, "Você não é premium account !") end end Pronto, agora acho que só usa quem for Premmy Account. Possíveis erros: - Você utiliza um sistema de premium diferente do global; - O player restaura mana, mas ao invez dos efeitos ele retorna a mensagem de que não é premium; Bom, caso ele continue cosneguindo usar a potion, talvez você deva mecher aqui : Em actions/scripts/liquids no arquivo potions.lua : local config = { removeOnUse = "no", usableOnTarget = "yes", -- can be used on target? (fe. healing friend) splashable = "no", realAnimation = "no", -- make text effect visible only for players in range 1x1 healthMultiplier = 1.0, manaMultiplier = 1.0, } config.removeOnUse = getBooleanFromString(config.removeOnUse) config.usableOnTarget = getBooleanFromString(config.usableOnTarget) config.splashable = getBooleanFromString(config.splashable) config.realAnimation = getBooleanFromString(config.realAnimation) local POTIONS = { [8704] = {empty = 7636, splash = 2, health = {50, 100}}, -- small health potion [7618] = {empty = 7636, splash = 2, health = {100, 200}}, -- health potion [7588] = {empty = 7634, splash = 2, health = {200, 400}, level = 50, vocations = {3, 4, 7, 8}, vocStr = "knights and paladins"}, -- strong health potion [7591] = {empty = 7635, splash = 2, health = {500, 700}, level = 80, vocations = {4, 8}, vocStr = "knights"}, -- great health potion [8473] = {empty = 7635, splash = 2, health = {800, 1000}, level = 130, vocations = {4, 8}, vocStr = "knights"}, -- ultimate health potion [7620] = {empty = 7636, splash = 7, mana = {70, 130}}, -- mana potion [7589] = {empty = 7634, splash = 7, mana = {110, 190}, level = 50, vocations = {1, 2, 3, 5, 6, 7}, vocStr = "sorcerers, druids and paladins"}, -- strong mana potion [7590] = {empty = 7635, splash = 7, mana = {200, 300}, level = 80, vocations = {1, 2, 5, 6}, vocStr = "sorcerers and druids"}, -- great mana potion [8472] = {empty = 7635, splash = 3, health = {200, 400}, mana = {110, 190}, level = 80, vocations = {3, 7}, vocStr = "paladins"} -- great spirit potion } local exhaust = createConditionObject(CONDITION_EXHAUST) setConditionParam(exhaust, CONDITION_PARAM_TICKS, (getConfigInfo('timeBetweenExActions') - 100)) function onUse(cid, item, fromPosition, itemEx, toPosition) local potion = POTIONS[item.itemid] if(not potion) then return false end if(not isPlayer(itemEx.uid) or (not config.usableOnTarget and cid ~= itemEx.uid)) then if(not config.splashable) then return false end if(toPosition.x == CONTAINER_POSITION) then toPosition = getThingPos(item.uid) end doDecayItem(doCreateItem(2016, potion.splash, toPosition)) doTransformItem(item.uid, potion.empty) return true end if(hasCondition(cid, CONDITION_EXHAUST_HEAL)) then doPlayerSendDefaultCancel(cid, RETURNVALUE_YOUAREEXHAUSTED) return true end if(((potion.level and getPlayerLevel(cid) < potion.level) or (potion.vocations and not isInArray(potion.vocations, getPlayerVocation(cid)))) and not getPlayerCustomFlagValue(cid, PLAYERCUSTOMFLAG_GAMEMASTERPRIVILEGES)) then doCreatureSay(itemEx.uid, "Only " .. potion.vocStr .. (potion.level and (" of level " .. potion.level) or "") .. " or above may drink this fluid.", TALKTYPE_ORANGE_1) return true end local health = potion.health if(health and not doCreatureAddHealth(itemEx.uid, math.ceil(math.random(health[1], health[2]) * config.healthMultiplier))) then return false end local mana = potion.mana if(mana and not doPlayerAddMana(itemEx.uid, math.ceil(math.random(mana[1], mana[2]) * config.manaMultiplier))) then return false end doSendMagicEffect(getThingPos(itemEx.uid), CONST_ME_MAGIC_BLUE) if(not realAnimation) then doCreatureSay(itemEx.uid, "Aaaah...", TALKTYPE_ORANGE_1) else for i, tid in ipairs(getSpectators(getCreaturePosition(cid), 1, 1)) do if(isPlayer(tid)) then doCreatureSay(itemEx.uid, "Aaaah...", TALKTYPE_ORANGE_1, false, tid) end end end doAddCondition(cid, exhaust) if(not potion.empty or config.removeOnUse) then doRemoveItem(item.uid, 1) return true end doRemoveItem(item.uid, 1) doPlayerAddItem(cid, potion.empty, 1) return true end Modifiquei por: local config = { removeOnUse = "no", usableOnTarget = "yes", -- can be used on target? (fe. healing friend) splashable = "no", realAnimation = "no", -- make text effect visible only for players in range 1x1 healthMultiplier = 1.0, manaMultiplier = 1.0, TemPremmy = getPlayerPremiumDays(cid) } config.removeOnUse = getBooleanFromString(config.removeOnUse) config.usableOnTarget = getBooleanFromString(config.usableOnTarget) config.splashable = getBooleanFromString(config.splashable) config.realAnimation = getBooleanFromString(config.realAnimation) local POTIONS = { [8704] = {empty = 7636, splash = 2, health = {50, 100}}, -- small health potion [7618] = {empty = 7636, splash = 2, health = {100, 200}}, -- health potion [7588] = {empty = 7634, splash = 2, health = {200, 400}, level = 50, vocations = {3, 4, 7, 8}, vocStr = "knights and paladins"}, -- strong health potion [7591] = {empty = 7635, splash = 2, health = {500, 700}, level = 80, vocations = {4, 8}, vocStr = "knights"}, -- great health potion [8473] = {empty = 7635, splash = 2, health = {800, 1000}, level = 130, vocations = {4, 8}, vocStr = "knights"}, -- ultimate health potion [7620] = {empty = 7636, splash = 7, mana = {70, 130}}, -- mana potion [7589] = {empty = 7634, splash = 7, mana = {110, 190}, level = 50, vocations = {1, 2, 3, 5, 6, 7}, vocStr = "sorcerers, druids and paladins"}, -- strong mana potion [7590] = {empty = 7635, splash = 7, mana = {200, 300}, level = 80, vocations = {1, 2, 5, 6}, vocStr = "sorcerers and druids"}, -- great mana potion [8472] = {empty = 7635, splash = 3, health = {200, 400}, mana = {110, 190}, level = 80, vocations = {3, 7}, vocStr = "paladins"} -- great spirit potion } local exhaust = createConditionObject(CONDITION_EXHAUST) setConditionParam(exhaust, CONDITION_PARAM_TICKS, (getConfigInfo('timeBetweenExActions') - 100)) function onUse(cid, item, fromPosition, itemEx, toPosition) local potion = POTIONS[item.itemid] if(config.TemPremmy >= 1) then if(not potion) then return false end if(not isPlayer(itemEx.uid) or (not config.usableOnTarget and cid ~= itemEx.uid)) then if(not config.splashable) then return false end if(toPosition.x == CONTAINER_POSITION) then toPosition = getThingPos(item.uid) end doDecayItem(doCreateItem(2016, potion.splash, toPosition)) doTransformItem(item.uid, potion.empty) return true end if(hasCondition(cid, CONDITION_EXHAUST_HEAL)) then doPlayerSendDefaultCancel(cid, RETURNVALUE_YOUAREEXHAUSTED) return true end if(((potion.level and getPlayerLevel(cid) < potion.level) or (potion.vocations and not isInArray(potion.vocations, getPlayerVocation(cid)))) and not getPlayerCustomFlagValue(cid, PLAYERCUSTOMFLAG_GAMEMASTERPRIVILEGES)) then doCreatureSay(itemEx.uid, "Only " .. potion.vocStr .. (potion.level and (" of level " .. potion.level) or "") .. " or above may drink this fluid.", TALKTYPE_ORANGE_1) return true end local health = potion.health if(health and not doCreatureAddHealth(itemEx.uid, math.ceil(math.random(health[1], health[2]) * config.healthMultiplier))) then return false end local mana = potion.mana if(mana and not doPlayerAddMana(itemEx.uid, math.ceil(math.random(mana[1], mana[2]) * config.manaMultiplier))) then return false end doSendMagicEffect(getThingPos(itemEx.uid), CONST_ME_MAGIC_BLUE) if(not realAnimation) then doCreatureSay(itemEx.uid, "Aaaah...", TALKTYPE_ORANGE_1) else for i, tid in ipairs(getSpectators(getCreaturePosition(cid), 1, 1)) do if(isPlayer(tid)) then doCreatureSay(itemEx.uid, "Aaaah...", TALKTYPE_ORANGE_1, false, tid) end end end doAddCondition(cid, exhaust) if(not potion.empty or config.removeOnUse) then doRemoveItem(item.uid, 1) return true end doRemoveItem(item.uid, 1) doPlayerAddItem(cid, potion.empty, 1) return true else doPlayerSendTextMessage(cid, 27, "Você não é premium account !") end end Em outras palavras, antes de executar o código que adiciona mana para os players, eu testei se ele era premium, se fosse, executava o código, se não, parava. Aguardo FeedBack. -GstavoLiber
-
Bom, de spell não entendo muito, mas existe um GlobalEvent, no qual, faz chover em seu servidor, ou mais preciso, em volta de seu personagem, dando a impressão de que está chovendo no mundo do tibia... Com esse globalevent posso te ajudar, mas com as spells... ai não manjo. Aguardo.
-
-
Quem Está Navegando 0 membros estão online
- Nenhum usuário registrado visualizando esta página.