Ir para conteúdo

brunolamonato

Membro
  • Registro em

  • Última visita

Histórico de Curtidas

  1. Gostei
    brunolamonato deu reputação a Bruno Carvalho em Bug de clonagem de dinheiro/itens   
    Bom, estou criando esse tópico (que eu queria ter feito em vídeo no começo do ano) para contar-lhes um dos maiores bugs que existem nos otservs.
     
    Como alguns sabem eu participei da equipe do CaterOT e lá descobri muitas falhas em servidores e até dentro da equipe já tive a ideia de publicar estes problemas.
     
    Talvez o problema que mais dá dor de cabeça nos servidores é a clonagem de dinheiro... Como aquele player ficou rico?!
    Basicamente o problema consiste em duas funções (removeMoney e removeItem), quando elas são executadas, é retornado um booleano (verdadeiro ou falso) para saber se o item/dinheiro foi removido ou não. Mas se essa função não está dentro de um verificador (IF) mesmo que ela seja falsa ela irá funcionar e entregar o dinheiro/o item comprado sem verificar nada.
     
    Aos que conhecem C++, leia esse código e me diga se ele retorna algum nil caso o dinheiro não for encontrado:
    TFS 1.3: https://github.com/otland/forgottenserver/blob/master/src/luascript.cpp#L8487
    Base TFS 0.3: https://github.com/mattyx14/otxserver/blob/otxserv2/path_8_6x/sources/luascript.cpp#L5550
     
    Verifiquei vários servidores disponíveis no github e vi que vários tem esse problema. Um dos exemplos é o Otxserver-New do malucooo.
    Com uma unica pesquisa , vemos tudo o que há no código.
    E assim encontramos vários NPCs, Actions e Moveevents que não tem esse cuidado de verificar se o dinheiro foi realmente removido. Um exemplo é o NPC Black Bert

    Ai você me fala: Ah Bruno, mas não tem como dar erro por que ele já utiliza o getMoney ali em cima...
     
    NÃO ADIANTA USAR O GETMONEY, VOCÊ SÓ USA ELE SE PRECISAR VERIFICAR MAIS DE DOIS ITENS (EM BAIXO MAIS EXPLICAÇÕES).
     
    Basicamente as pessoas que fazem esse bug utilizam programas que colocam para o npc comprar/vender o item tendo o dinheiro/item e removem o item do personagem em fração de milésimos após clicar, assim o sistema "buga" (não é um bug, ele somente retorna falso no código pelo fato de o player “não ter“ o item, passando pelo verificador (getItem e getMoney) sem dar erro... O único verificador que funciona é o que diz se o item foi realmente removido.
     
    Antes/Depois
     
    Mas ai surge o problema de: Ah, e quando há mais de um item para ser removido (ou um item junto com dinheiro)?
    Dai você usa o getItem/getMoney e abaixo dele utiliza a função de remoção, para evitar que um item seja removido do player caso ele não houver o segundo item necessário.
     
    Exemplo:

     
    Exemplo 2:

     
    Este é um exemplo de como verificar se há mais de um item necessário. E ainda depois do segundo if poderia ser colocado um else alertando aos administradores o nome do player que está tentando bugar, pois se o player não fez nada de errado esse fator nunca irá acontecer.
     
    Ainda duvidam de mim?
    Você que usa TFS 1.2+ execute esse código em uma talkaction, tendo o item 2160 ou não.
    function onSay(player, words, param) if not player:getGroup():getAccess() then return true end if player:getAccountType() < ACCOUNT_TYPE_GOD then return false end player:removeItem(2160, 1) player:sendTextMessage(MESSAGE_INFO_DESCR, "Item removido!") end  
    Isto serve para qualquer distribuição/versão de servidor.
    Não é um bug de distribuição, é um erro cometido por quase todos os SCRIPTERS.
  2. Gostei
    brunolamonato recebeu reputação de williamgranato em Problema com tibia 11   
    Eai galera do TK fmz?
    Estou tendo dificuldades pra entrar no meu ot pelo cliente 11..
    Fiz tds os procedimentos, ja tentei com cliente modificado e com ip changer, o webservice ta configurado corretamente..
     
    Mas ainda assim, depois de selecionar a lista de char, recebo esse erro :

  3. Gostei
    brunolamonato deu reputação a G3 Yuri em - Water Elementals' Cave Sul (Trapwood)   
    Entrada 
    {x = 32680, y = 32962, z = 7}
    Hunt 
    {x = 32679, y = 32963, z = 8}
    DOWNLOAD
     
    scan
     



     

Informação Importante

Confirmação de Termo