Ir para conteúdo
Banner com Efeitos

williamcgv

Membro
  • Registro em

  • Última visita

Histórico de Curtidas

  1. Obrigado
    williamcgv recebeu reputação de KiraConquest em NPC que troca um item por um item aleatório   
    -O NPC funciona realmente só que apresenta 2 problemas que preciso resolver, espero que entendam..
    É um NPC que troca um item "A, B ou C" por um item aleatório "X, Y ou Z".
     
    PROBLEMA:
    1º MENSAGEM DO NPC: Após falar o tipo de troféu (bronze/prata/ouro), o "NPC" não fala se deseja confirmar a troca do troféu pela gema, ou seja ele já faz a troca após escreve a opção de troféu.
     
    2º FALA DO NPC: O "NPC" está repetindo algumas frases de outros NPC's, por exemplo tenho um npc chamado "Mary", e ela tem uma fala que é "Venda seus gold ingot aqui!" e esse "NPC" de troca, fala a mesma frase mesmo não sendo programado na script.
    _________________________________________________________________________________________________________________________
     
    SOLUÇÃO:
    1º MENSAGEM DO NPC: Quero que mande uma mensagem de confirmação após escolher a opção de troféu (bronze/prata/ouro)
    Exemplo:
     
    #Player: Hi
    #NPC: Ola |PLAYERNAME|. Seja Bem-Vindo a Sala de Trocas. Eu coleciono {trofeus} de ouro, prata e bronze. E para garantir que todos troquem comigo, eu retribuo dando gemas aleatorias.
    #Player: troféu
    #NPC: Acho que você pretende trocar algum troféu por gemas. Qual troféu você pretende trocar comigo: {ouro}, {prata} ou {bronze}
    _________________________________________________________________________________________________________________________
     
    #Player: bronze
    #NPC: Você tem certeza que quer trocar 1 troféu de bronze por 1 gema aleatória?                         <<< A MENSAGEM DE CONFIRMAÇÃO
    #Player: sim                                              
    #NPC: Obrigado, aqui estão suas gemas.
     ________________________________________________________________________________                                                         
    #Player: prata
    #NPC: Você tem certeza que quer trocar 1 troféu de prata por 2 gema aleatória?                           <<< A MENSAGEM DE CONFIRMAÇÃO        
    #Player: sim
    #NPC: Obrigado, aqui estão suas gemas.  
     ________________________________________________________________________________                                                                     
    #Player: ouro
    #NPC: Você tem certeza que quer trocar 1 troféu de ouro por 3 gema aleatória?                           <<< A MENSAGEM DE CONFIRMAÇÃO
    #Player: sim
    #NPC: Obrigado, aqui estão suas gemas.
    _________________________________________________________________________________________________________________________
     
    2º FALA DO NPC: Quero que fale as frases que foi programado na script, ou seja não fale de outros NPC's.
    Exemplo:
     
    #Troque o seu troféu aqui.
    #Só entendo português, diga oi. #Oi! Troco gemas por troféus! _________________________________________________________________________________________________________________________     Data/npc: <npc name="Josue" script="data/npc/scripts/trofeu.lua" walkinterval="2000" floorchange="0"> <health now="100" max="100"/> <look type="133" head="79" body="0" legs="128" feet="128" addons="1"/> <parameters> <parameter key="message_greet" value="Ola |PLAYERNAME|. Seja Bem-Vindo a Sala de Trocas. Eu coleciono {trofeus} de ouro, prata e bronze. E para garantir que todos troquem comigo, eu retribuo dando gemas aleatorias."/> </parameters> </npc> Data/npc/scripts:
    local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} 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 creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end function thinkCallback(cid) local rand = math.random(1,100) if rand == 10 then selfSay('Troque o seu troféu aqui.') -- msg que vai sair do npc end if rand == 11 then selfSay ('Só entendo português, diga oi.') end if rand == 12 then selfSay ('Oi! Troco gemas por trofeús!') end return true end function greetCallback(cid) return true end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid local trophy = { ["ouro"] = {3, 5805}, --{Quantidade de items aleatórios, ID do troféu}, ["prata"] = {2, 5806}, ["bronze"] = {1, 5807}, } local items = {2154, 2156, 2158} if msgcontains(msg, "trophy") or msgcontains(msg, "trofeu") then selfSay("Acho que você pretende trocar algum troféu por gemas. Qual troféu você pretende trocar comigo: {ouro}, {prata} ou {bronze}?", cid) talkState[talkUser] = 1 return true elseif talkState[talkUser] == 1 then if trophy[msg:lower()] then local trofeu = trophy[msg:lower()] local id = trofeu[2] if getPlayerItemCount(cid, id) > 0 then for i = 1, trofeu[1] do doPlayerAddItem(cid, items[math.random(#items)], 1) end doPlayerRemoveItem(cid, id, 1) selfSay("Obrigado, aqui estão suas gemas.", cid) talkState[talkUser] = 0 return true else selfSay("Você não possui este troféu.", cid) talkState[talkUser] = 0 return true end else selfSay("Este troféu não existe.", cid) talkState[talkUser] = 0 return true end end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:setCallback(CALLBACK_ONTHINK, thinkCallback) npcHandler:setCallback(CALLBACK_GREET, greetCallback) npcHandler:addModule(FocusModule:new()) Espero que alguém me ajude necessito muito desse NPC, agradeço quem puder ajudar!
     
  2. Curtir
    williamcgv recebeu reputação de Ekr em Trainer Offline   
    17:09 Voce upou de level/magic_level/shielding -1 para o nivel: [126] de magic level: [70] e  level [31] de shielding em [0] minutos.
     
    Waat? mano você entendeu pelo menos? a mensagem ainda continua tudo errado!
  3. Gostei
    williamcgv deu reputação a olokomeu em [Tutorial] Bug "Temple position is wrong" (MySql)   
    Bem, quebrei muita cabeça um dia desses com esse maldito Bug, porém, com umas dicas do amigo "danihcv" e eu mexendo, acabei resolvendo e quis dividir esse tutorial com o povo do TibiaKing. Lembrando que esse erro acontece quem usa Mysql e possue website "Gesior"( Não sei se todas as versões dão esse erro, mas a versão 0.3.8 deu). Vamos deixar e papo e mão na massa .

    O erro é o seguinte:

    - Quando loga a conta no tibia ele abre a janela normalmente do char, porém, quando tenta logar dar esse erro:

    (Esse erro é um conflito que há entre as coordenadas (x,y e z) do config.lua + database).

    1- Para retirar esse bug, a primeira coisa será entrar no config.lua e achar essa tag:

    Caso ela estiver em "1", não altere nada. Mas se tiver outro numero, coloque "1".

    2 - Abra o arquivo accountmanagement.php, que se encontra na pasta htdocs procure essa tag:

    Dentro do (), coloque "1", se dentro do () tiver algo parecido com "$newchar_town", apague e coloque "1".

    3- Verifique ainda no mesmo arquivo accountmanagement.php essa tag:


    As coordenadas (PosX,PosY e PosZ) varia de otserver para otserver e tem que estar igual ao que tem no config.lua:

    4- Va na sua DataBase (phpadmin), procure uma "aba" acima que diz "SQL", clique nela, coloque essa tag e aperte em "executar":


    Lembrando mais uma vez, as coordenadas (PosX,PosY e PosZ) variam de otserver para otserver e devem está iguais, ao do Config.lua + accountmanagement.php .

    Pronto. Depois disso entre normalmente que o char ira logar nas coordenadas configuradas.

    Gostou? não esquece do REP+!


    Tutorial feito por:
    70% Eu
    30% danihcv
  4. Gostei
    williamcgv deu reputação a MaTTch em (Resolvido)Level e Vocação na Tela de Login   
  5. Gostei
    williamcgv deu reputação a MaTTch em (Resolvido)Level e Vocação na Tela de Login   
    Vá em iologindata.cpp e lá no final adicione isso:



     
    Agora em iologindata.h procure por:
    bool getGuidByNameEx(uint32_t& guid, bool& specialVip, std::string& name); E adicione logo abaixo:
    std::string getPlayerLevelAndVocation(const std::string& name) const; Em protocollogin.cpp procure por:
    if(g_config.getBool(ConfigManager::ON_OR_OFF_CHARLIST)) { if(g_game.getPlayerByName((*it))) output->putString("Online"); else output->putString("Offline"); } else output->putString(g_config.getString(ConfigManager::SERVER_NAME)); E substitua por:
    if(g_config.getBool(ConfigManager::ON_OR_OFF_CHARLIST)) { if(g_game.getPlayerByName((*it))) output->putString("Online"); else output->putString("Offline"); } else { if((*it) != "Account Manager") { output->putString(IOLoginData::getInstance()->getPlayerLevelAndVocation((*it))); } else output->putString(g_config.getString(ConfigManager::SERVER_NAME)); } Compile e pronto.
     
    Lembrando que em config.lua a opção displayOnOrOffAtCharlist precisa estar false.
  6. Gostei
    williamcgv deu reputação a Peemello em (Resolvido)Account Manager Invalid Password   
    Nada ve esses bagui ai de trocar a distro, tudo vocês querem trocar mesmo.
     
    Se sabe compilar ?
     
    é em protocolgame.cpp da sua source - procure por:
    if(!IOLoginData::getInstance()->getPassword(id, hash, salt, character) || !encryptTest(salt + password, hash))
        {
            ConnectionManager::getInstance()->addAttempt(getIP(), protocolId, false);
            disconnectClient(0x14, "Invalid password.");
            return false;
        }
    e apague tudo.
     
     
    pronto!, feche e compile.
     
     
    Créditos:   Caronte
     
    Te Ajudei? +REP
  7. Gostei
    williamcgv deu reputação a Wakon em (Resolvido)Healing Collor   
    Tenta colocar false nessas duas opções encontradas no config.lua:
    showHealingDamage = showHealingDamageForMonsters =
  8. Gostei
    williamcgv deu reputação a Caronte em (Resolvido)mensagem na script   
    local formulas = { {2433,2433,2433,id=7424,count=1}, -- enchanted staff = lunar staff {8931,8931,8931,id=8930,count=1},-- ephinnyc sword = emerald sword {8927,8927,8927,id=8928,count=1}, -- dark trinity mace = obsidian truncheon {8926,8926,8926,id=8924,count=1}, -- demonwing axe = hellforged axe {{2389,1},{2389,1},{2389,1},id=3965,count=1}, -- spear = hunting spear {8854,8854,8854,id=8857,count=1}, -- warsinger bow = silkweaver bow {2523,2523,2523,id=8905,count=1}, -- blessed shield = rainbow shield {8901,8901,8901,id=8900,count=1}, -- spellbook of warding = spellbook of enlightenment {2138,2138,2138,id=2131,count=1}, -- sapphire amulet = star amulet } function isInArraya(a, v,i1,i2)--- script By mock i1 = i1 or 0 i2 = i2 or 0 for i=1,#a do if i ~= i1 and i ~= i2 then if a[i] == v then return a[i], i elseif type(a[i]) == 'table' and a[i][1] == v then return a[i][1], i end end end return false end function getForm(n1,n2,n3,n1cnt,n2cnt,n3cnt)--- script By mock n1 = n1 or 0 n2 = n2 or 0 n3 = n3 or 0 n2cnt = n2cnt or 1 n1cnt = n1cnt or 1 n3cnt = n3cnt or 1 if not n1 then return 'nil' end local fnd = {} local ret = {} for i=1,#formulas do local find1, p1 = isInArraya(formulas[i], n1,0) local find2, p2 = isInArraya(formulas[i], n2,p1) local find3, p3 = isInArraya(formulas[i], n3,p1,p2) if (find1 == formulas[i][p1] or (type(formulas[i][p1]) == 'table' and formulas[i][p1][1] == find1 )) and (find2 == formulas[i][p2] or (type(formulas[i][p2]) == 'table' and formulas[i][p2][1] == find2 )) and (find3 == formulas[i][p3] or (type(formulas[i][p3]) == 'table' and formulas[i][p3][1] == find3 )) then if (type(formulas[i][1]) ~= 'table' or formulas[i][1][2] <= n1cnt) and (type(formulas[i][2]) ~= 'table' or formulas[i][2][2] <= n2cnt) and (type(formulas[i][3]) ~= 'table' or formulas[i][3][2] <= n3cnt) then if type(formulas[i][1]) == 'table' then n1 = formulas[i][1][1] n1cnt = formulas[i][1][2] end if type(formulas[i][2]) == 'table' then n2 = formulas[i][2][1] n2cnt = formulas[i][2][2] end if type(formulas[i][3]) == 'table' then n3 = formulas[i][3][1] n3cnt = formulas[i][3][2] end return {id=formulas[i].id,{n1,n1cnt},{n2,n2cnt},{n3,n3cnt},count=formulas[i].count,form=formulas[i]} end end end return n1..'-'..n2..'-'..n3 end function onUse(cid, item, frompos, item2, topos) --- script By mock if getPlayerStorageValue(cid, 10906) < os.time() then setPlayerStorageValue(cid,10906, os.time()+5) doTransformItem(item.uid, 9562) addEvent(function() for stackpos=1,255 do topos.stackpos = stackpos item = getThingfromPos(topos) if item.itemid == 9562 then doTransformItem(item.uid, 9563) break end end end,1500) local posittions = { {x=1081,y=1085,z=9,stackpos=255}, --- pos de um item {x=1082,y=1085,z=9,stackpos=255}, --- pos de um item {x=1083,y=1085,z=9,stackpos=255}, --- pos de um item {x=1081,y=1084,z=9,stackpos=255}, --- pos do resultado. } local tb = {} local k for i=1,#posittions do if i == 4 then break end; k = getThingfromPos(posittions[i]) if k.itemid ~= 0 then table.insert(tb,1,k) doSendMagicEffect(posittions[i],14) else doSendMagicEffect(posittions[i],13) end end local n1 = tb[1] or {temid=0,type=0} local n2 = tb[2] or {temid=0,type=0} local n3 = tb[3] or {temid=0,type=0} doPlayerSendTextMessage(cid, 25,"Verificando.") local ret = getForm(n1.itemid,n2.itemid,n3.itemid,n1.type,n2.type,n3.type) if type(ret) == 'table' then for i=1,#posittions do if i == 4 then break end; k = getThingfromPos(posittions[i]) for e=1,#ret do if type(ret[e]) == 'table' then if ret[e][1] == k.itemid and k.itemid ~= 0 then local del = ret[e][2] if del == 0 then del = 1 end doRemoveItem(k.uid,del) break end end end end addEvent(function() for stackpos=1,255 do topos.stackpos = stackpos item = getThingfromPos(topos) if item.itemid == 9563 then doTransformItem(item.uid, 9565) break end end doCreateItem(ret.id,ret.count, posittions[4]) if ret.count ~= 1 then fnsh = 's' end fnsh = fnsh or '' if getItemNameById == nil then getItemNameById = getItemName end doBroadcastMessage("[SISTEMA DE FUSÃO] O jogador (" .. getPlayerName(cid).. ") fundiu 3 ".. getItemNameById(k.itemid) .." e criou "..ret.count.." ".. getItemNameById(ret.id) ..fnsh..".", 22) end,3000) else addEvent(function() for stackpos=1,255 do topos.stackpos = stackpos item = getThingfromPos(topos) if item.itemid == 9563 then doTransformItem(item.uid, 9565) break end end doPlayerSendTextMessage(cid, 25,"Não existe esta combinação.") end,3000) end return TRUE else doPlayerSendCancel(cid,"Aguarde") doSendMagicEffect(topos, 2) return FALSE end end
  9. Gostei
    williamcgv deu reputação a Caronte em (Resolvido)mensagem na script   
    Tenta de novo...
    editei lá.
  10. Gostei
    williamcgv deu reputação a zipter98 em NPC que troca um item por um item aleatório   
    Woops, my bad hehe. Já mudei. 
  11. Gostei
    williamcgv deu reputação a Wise em (Resolvido)Annihilator Quest   
    Detesto refazer um script a partir de códigos imensos de outra pessoa.
    Então eu apenas apliquei a tabulação e algumas funções (um pouco modificadas) da New Library v. 1.2 de @xWhiteWolf.
    function isOnSameFloor(fromPos, toPos)     return fromPos.z == toPos.z and true or false end function isEven(arg)     return arg % 2 == 0 and true or false end function getMiddlePos(fromPos, toPos)     if not isOnSameFloor(fromPos, toPos) then         return false     end          local middle = {x = 0, y = 0, z = 0}             middle.x = isEven(fromPos.x + toPos.x) and (fromPos.x + toPos.x)/2 or math.floor((fromPos.x + toPos.x)/2) + 1         middle.y = isEven(fromPos.y + toPos.y) and (fromPos.y + toPos.y)/2 or math.floor((fromPos.y + toPos.y)/2) + 1         middle.z = fromPos.z or toPos.z     return middle end function getDistanceRadius(fromPos, toPos)     if not isOnSameFloor(fromPos, toPos) then         return false     end          local distance = getDistanceBetween(fromPos, toPos)     return isEven(distance) and (distance/2) or math.floor(distance/2) + 1 end function clearArea(middlePos, rangex, rangey)     local final = {x=1126, y=1152, z=7} -- Posição onde será teleportado quando acabar o tempo          for i = -rangex, rangex do         for j = -rangey, rangey do             pos = {x = middlePos.x + i, y = middlePos.y + j, z = middlePos.z}             creature = getTopCreature(pos).uid                          if isMonster(creature) then                 doSendMagicEffect(getThingPos(creature), 14)                 doRemoveCreature(creature)             elseif isPlayer(creature) then                 doSendMagicEffect(getThingPos(creature), 10)                 doTeleportThing(creature, final)             end         end     end          setGlobalStorageValue(sto, -1)     return true end      local t = {     lvl = 100,     entrada = {         {x = 1125, y = 1152, z = 7} -- pos players     },     saida = {         {x = 1125, y = 1153, z = 8} -- pos para onde eles irão     },     monstros = {         {{x = 1121, y = 1153, z = 8}, "Demon"} -- defina pos dos montros e nomes     } } function onUse(cid, item, fromPosition, itemEx, toPosition)     local configure = {         fromPos = {x=1121, y=1150, z=8}, -- posição superior esquerda do mapa, da area em que esta mapeado a area.         toPos = {x=1129, y=1156, z=8}, -- posição inferior direita do mapa, da area em que esta mapeado a area.         boss = "Demon" -- Aqui você bota o nome do monstro que você quer remover     }          local config = {         position = {x=1126, y=1152, z=7}, -- Contagem         position1 = {x=1121, y=1150, z=8}, -- Contagem         position2 = {x=1121, y=1156, z=8}, -- Contagem         position3 = {x=1129, y=1150, z=8}, -- Contagem         position4 = {x=1129, y=1156, z=8}, -- Contagem         fromPosition = {x=1121, y=1150, z=8},         toPosition = {x=1129, y=1156, z=8},         id = 1498,         time = 1 -- tempo que o teleport ira sumir em minutos     }     local time = 60     local sto = 5973     local check = {}          for _, k in ipairs(t.entrada) do         local x = getTopCreature(k).uid         if(x == 0 or not isPlayer(x) or getPlayerLevel(x) < t.lvl) then             doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Não tem 5 jogadores para quest.")             return true         end                      if getGlobalStorageValue(sto) == 1 then                 doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Annihilaton está bloqueada. Aguarde até que seja liberada.")                 return true             end                      table.insert(check, x)     end                      for _, summon in pairs(t.monstros) do                     local creature = getTopCreature(summon[1]).uid                     doCreateMonster(summon[2], summon[1])                 end                                      for i, tid in ipairs(check) do                         doTeleportThing(tid, t.saida[i], false)                         doSendMagicEffect(t.saida[i], 10)                         doTransformItem(item.uid, item.itemid == 1945 and 1946 or 1945)                     end                                  for i = 1,time do                 formula = time - 1*i                 addEvent(doSendAnimatedText, i*1000, config.position, formula, TEXTCOLOR_RED)                 addEvent(doSendAnimatedText, i*1000, config.position1, formula, TEXTCOLOR_RED)                 addEvent(doSendAnimatedText, i*1000, config.position2, formula, TEXTCOLOR_RED)                 addEvent(doSendAnimatedText, i*1000, config.position3, formula, TEXTCOLOR_RED)                 addEvent(doSendAnimatedText, i*1000, config.position4, formula, TEXTCOLOR_RED)             end          setGlobalStorageValue(sto, 1)     local rx = getDistanceRadius(configure.fromPos, configure.toPos)     addEvent(clearArea, config.time * 60 * 1000, getMiddlePos(configure.fromPos, configure.toPos), rx, rx)     return true end
  12. Gostei
    williamcgv deu reputação a Wise em Aleatório   
    Já que no script padrão do membro haviam outros valores a serem configurados, eu ia simplificar tudo em uma única tabela. Mas depois eu notei que o item era removido, então não tinha a necessidade daqueles outros valores, mas daí esqueci de fazer da tabela uma única variável. Obrigado por avisar.


    Agora, falando do seu script (já que falou do meu). Qual a necessidade de haver uma checagem de remoção de um item que dará ao player de 3 à 5, dentre 20 itens? Não é óbvio que ele deve ser removido? Ou será que tem alguma lógica receber de 3 à 5 itens a qualquer hora?
    Isso sim é desnecessário.


     
     


    Agora sim você explicou melhor..
     
    local items = {2183, 8920, 2181, 8912, 8921, 2187, 8910, 8922, 7764, 7773, 7770, 7855, 7864, 7861, 7745, 7754, 7751, 7748, 7755, 7753} function onUse(cid, item, frompos, item2, topos)     local bbp = doPlayerAddItem(cid, 2002, 1)         for i = 1, math.random(3, 5) do             doAddContainerItem(bbp, items[math.random(1, #items)], 1)         end     doRemoveItem(item.uid, 1)     doSendAnimatedText(getThingPos(cid), "SURPRESA!", 5)     doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você abriu a mochila surpresa azul e recebeu uma backpack com alguns itens.")     return true end
  13. Gostei
    williamcgv deu reputação a Orochi Elf em Aleatório   
    Bom.. eu vi algumas coisas desnecessárias no seu código.
    tab = {     items = {...}, } Isso é realmente necessário?
    Enfim... bom trabalho
     
    @EDIT

    local cfg = {     remove = true, -- Irá remover ao ser usado?     max = 5, -- Máximo de items     min = 3, -- Minimo de items } local items = {2183, 8920, 2181, 8912, 8921, 2187, 8910, 8922, 7764, 7773, 7770, 7855, 7864, 7861, 7745, 7754, 7751, 7748, 7755, 7753} function onUse(cid)     local bp = doPlayerAddItem(cid, 2002)          for r = 1, #items do                  doAddContainerItem(bp, items[r], math.random(cfg.min, cfg.max))     end          if cfg.remove then                  doRemoveItem(item.uid, 1)     end          doPlayerSendTextMessage(cid, 27, "Voce ganhou uma backpack com items.")     return true end  
    Pronto, agora a quantidade aleatória de items, irá funcionar.
  14. Gostei
    williamcgv deu reputação a Wise em Aleatório   
    Já que no seu script padrão o item é removido, então eu o simplifiquei.
    Não testei
    local items = {2183, 8920, 2181, 8912, 8921, 2187, 8910, 8922, 7764, 7773, 7770, 7855, 7864, 7861, 7745, 7754, 7751, 7748, 7755, 7753} function onUse(cid, item, frompos, item2, topos)     local bbp, chances = doPlayerAddItem(cid, 2002, 1), math.random(3, 5)         for x = 1, table.maxn(items) do             doRemoveItem(item.uid, 1)             doAddContainerItem(bbp, items[x], chances)             doSendAnimatedText(getThingPos(cid), "SURPRESA!", 5)         end     doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Você abriu a mochila surpresa azul e recebeu uma backpack com alguns equipamentos.")     return true end

Informação Importante

Confirmação de Termo