Ir para conteúdo

nociam

Conde
  • Total de itens

    541
  • Registro em

  • Última visita

  • Dias Ganhos

    5

Histórico de Reputação

  1. Upvote
    nociam deu reputação a Tony Araujo em [OTClient - Module] Caught Achievement v1.4 - Atualizado!   
    [OTClient - Module] Caught Achievement v1.4 - Atualizado
    Autor: Tony Araújo (OrochiElf)
     

     
    Fala meus bacanos, de boas? Espero que sim. Bom, há uns 4 anos atrás, cheguei a fazer  ultima atualização do sistema de Caught Achievement, que nada mais é do que aquele sistema da PxG, onde você ganha um determinado XP pela captura de um pokemon, além de mostrar quantas pokebolas foram utilizadas, porém, aquela versão não estava muito boa, pois era necessário fazer diversas adaptações para adição de novas pokebolas, fora o código que não estava mais me agradando, então resolvi fazer uma nova atualização e deixar o sistema "auto-adaptável", onde não é necessário mais nenhuma edição nele, pois ele recebe os dados do servidor e interpreta de forma automática, sendo assim, suportando um número ilimitado de pokebolas e sem burocracias. Bom, sem mais, vamos lá. 
     
    PS: Como não existe uma base única de servidor utilizada atualmente, e sim diversas, não tem como eu fazer um tutorial único e pré-destinado de instalação, então tentarei explicar mais ou menos o que é necessário fazer para o sistema funcionar perfeitamente, mas fiquem tranquilos, é algo beeem simples. 
     
     
    Primeiramente, precisaremos criar um arquivo no [data/lib], chamado (CODDINGS-CaughtWindow.lua) (sugestivo não? kkk) e dentro adicione o código:
    LINK DO HASTEBIN AQUI
     
    Bom, a configuração é bem auto explicativa, não tem muito mistério, vamos lá:
    ["Nome do Pokemon" = {portrait = Item ID do portrait, experience = Quantidade de Exp pelo Caught, storage_balls = Storage de armazenamento, aconselho seguir o fluxo} ex: ["bulbasaur"] = {portrait = 11989, experience = 3000, storage_balls = 15050},  
     
    Bom, segunda parte da instalação é o seguinte, agora nós vamos adicionar o contador de balls, acredito que o melhor local e o de mais fácil instalação, seria no script de catch do actions, então vá nesse arquivo e procure por esse código aqui
    doRemoveItem(item.uid, 1)  
    E então, acima dele, você adiciona:
    -- Caught Window System CaughtWindow.ballcount(cid, name, item.itemid) Sendo o (name) necessariamente o nome do pokemon, então caso a variável onde guarda esse valor seja diferente, você só arruma ali na função e pronto. 
     
    Bom, para finalizarmos, vamos agora enviar a sinalização de quando o pokemon é capturado. O servidor que estou usando aqui (não sei o nome dele, achei perdido no pc), ele possui uma lib onde existe essa função responsável, então acredito que possa existir no de vocês também. Procurem por algo como catch system, catch ou algo deste genero. Aqui, existe a função chamada: doCapturePokemon, tentem procurar por ela ou similar. 
    Dentro desta função, procure por essa função aqui, ou também, similar a ela: doPlayerSendTextMessage(cid, 27, "Congratulations, you caught a pokemon ("..poke..")!")
    e logo acima, adicione:
    -- Caught Window System CaughtWindow.sendcaught(cid, poke) Seguindo a mesma lógica da anterior, a variavel (poke), necessariamente precisa ser o nome do pokemon. 
     
    Bom galera, feito isso, o sistema está perfeitamente instalado, bastando apenas vocês adicionarem o módulo no cliente. Só fazer o download dele aqui no tópico, que deixarei o .zip anexado, aconselho adicionarem ele dentro da pasta mods e não da modules, por conta do auto-carregamento de forma mais simplificada (no caso, não sendo necessário criar dependencia no game_interface), mas caso seu client não tenha, você pode criar esta pasta sem nenhum prejuízo.
     
    Bom, por hoje é isso rapeize, tamu junto e até a próxima xD
    [coddings]caughtwindow.rar
  2. Upvote
    nociam deu reputação a Gengo em [OTClient] Sistema de Dialogo Otpokemon   
    [OTClient] Sistema de Dialogo Otpokemon
     
    Venho através desse tópico contribuir para a comunidade, um simples modulo de dialogo no estilo do Otpokemon,
    não é um sistema de dialogo avançado é algo simples que deixa seu servidor intuitivo.
     
    1) Faça o download do modulo no qual se encontra no final do tópico e abrindo a pasta do seu client, extraia e coloque o modulo na pasta modules.
     
    2) O módulo utiliza uma função chamada switch que não é comum ter no otclient, porem podemos colocar sem muito esforço, na pasta do otclient abra o arquivo util.lua que se encontra em modules/corelib/ e no final do arquivo coloque o seguinte código:
     
    Feito o passo 1 e 2, vamos para a parte do servidor.
     
    1) Crie um arquivo na pasta data/lib/ podendo ter o nome de npcdialog_lib.lua e coloque o seguinte código:
     
    2) O arquivo que acabamos de criar utiliza uma função chamada table.serialize que não é comum ter nos servidores, para que funcione sem erros vamos adicionar, abra o arquivo 012-table.lua que fica na pasta do seu servidor em data/lib/ ou você pode criar o arquivo e adicionar o seguinte código:
     
     
    Feito todo esse procedimento, estarei disponibilizando um npc para que vocês possam ter uma noção de como utilizar esse sistema de dialogo.
     
    1) Crie um arquivo na pasta do servidor em data/npc/ chamado Gengo.xml e adicione o seguinte código:
     
    2) Crie um arquivo na pasta do servidor em data/npc/lib/ com o nome gengo.lua e adicione o seguinte código:
     
     
    O npc é algo simples, porem serve para que você possa ter uma noção de como utilizar as funções do npc.
     
    Demostrativo dentro do game:

     
    Arquivos para download e o scan:
     
  3. Amei
    nociam recebeu reputação de samlecter em PokeAimar (Level System) 8.54 2020 (Com Sources)   
    sim, bem melhor base mais estável., se reparar eu deixei os selvagens com a barra tb cada player morto Pokémon morto eles ganham Xp tb kkkkk.
     

     
  4. Haha
    nociam recebeu reputação de GamerGoiano em PokeAimar (Level System) 8.54 2020 (Com Sources)   
    queria testar esse jogo só não tinha o cliente show de bola, tem alguns sistemas que já tenho no tfs 1.3 interessante é combater a logica com os do outros esse servidor, exemplo o level sistem deles e praticamente igual ao meu.
     
    https://gyazo.com/dced7161ca2c4077552e1592a876b576
  5. Upvote
    nociam deu reputação a GamerGoiano em PokeAimar (Level System) 8.54 2020 (Com Sources)   
    Versão corrigida pelo @Jair Kevick
    https://mega.nz/file/bkFmDaIZ#dvrsamLjPvCzIhq-OmT8_xAlj97fiy8QUYIApL3csGM

    Me mandaram esse servidor e eu decidi deixar ele jogável porque muita gente tinha dificuldade em deixar online.
    Como deixar online:
    Basta criar um banco de dados com o xampp (use o xampp mais recente), com o nome poketibia e do lado onde está utf, escolhe Agrupamento (Colation) após isso é só importar o banco de dados que ta junto com o servidor.
    Ai é só abrir o servidor, esperar carregar e depois abrir o cliente e logar
    Conta god: GOD / 123456
    Download: https://www.mediafire.com/file/3atv44omlf3f036/PokeAimar.rar/file
    Vem com Sources e SPR+Dat Editável
    Scan: https://www.virustotal.com/gui/file/828a6e443c29221b9cd46f3fffe5f65c63bbb8e8ffc109a4fc91554d9c10e752/detection
    Créditos: Kaboflow, PDA, Psoul, Pstorm, Gengo, TFS Team, Cipsoft, DxP, PokemasterX.
    É um mistão de scripts do fórum + scripts próprios, acima listados os responsáveis pela criação do datapack e servidor.
    Descrição:
    Level System 100%
    1ª e 2ª geração completos
    Kanto e Ilhas Laranjas 100%
    Tv System 100%
    (Techinical Machine) Ensinar Moves pros Pokes 100%
    Daycare e Egg System 100%
    Duel System (PVP) 100%
    Gym System 100%
    Berries (Plantar, Colher e Usar) 100%
    Fly, Surf, Ride, Dive e Headbutt 100%
    Mastery System (Especializar em Elemento) 100%
    Tournament System 100%
    Saffari Zone 100%
    Poke Balls Effects 100%
    Pokemons na Character List 100%
    Poke Bar 100%
    Atravessar seu pokemon 100%
    Relógio In-Game 100%
    New Pokedex 100%
     



  6. Thanks
    nociam recebeu reputação de raulcdj em [Encerrado] erro npc gyn   
    Irei de ajudar essa função não é nada menos do que mostro abaixo simplesmente agora e so adptar.
     
            if #getCreatureSummons(_target) > 0 then
              doMonsterSetTarget(getCreatureSummons(getNpcCid())[1], getCreatureSummons(_target)[1])
            else
              doMonsterSetTarget(getCreatureSummons(getNpcCid())[1], _target)
            end
  7. Thanks
    nociam recebeu reputação de zllcapiroto em Loot dos Mobs   
    Mais fácil do que pensa observe.
     

  8. Haha
    nociam deu reputação a kttallan em Qual a melhor base Poketibia atualmente?   
    Tava analisando-a, mas é muito complexa para edição, os cara mal sabe usar as bases faceis como a própria Master X imagina a do Psoul que até eu tou quebrando a cara kk.
  9. Haha
    nociam deu reputação a Ayron5 em GYM SYSTEM PFV   
    Absurdo.
     
    E faz mesmo, hj eu tenho esse sistema graças a ele @nociam gente boa de mais. 
  10. Haha
    nociam deu reputação a rafersiq em [Projeto]meu poketibia   
    Eae galerinha do Xtibia vou mostra um Projeto que eu estou criando Pra colocar on 
    o projeto e um Poketibia Base shiny ,
    estou mudando um pouco o projeto por eu nao ter conseguido attivar o lvls dos pokes base que eu peguei e a dxp com LVL
     
  11. Upvote
    nociam recebeu reputação de juliocesar19 em PokeMasterX Particle BUG   
    Em outras palavras para cada skull e uma cor pelo jeito, e so setar no atributo da  aura uma dessas skull ta uma olhada como salva os genders e pronto tem n jeitos.
    edit:
            if getItemAttribute(item.uid, "aura") == "particle" then
                doCreatureSetSkullType(pk, math.random(10, 20))
            end
     
    Como saiu na net essas source vou ver como foi feito nessa abaixo, eu particularmente usaria outra struct para auras mais enfim show de bola.
     

  12. Thanks
    nociam recebeu reputação de jeanflamengo em Condition não pegar em determinados "types" de pokemon   
    doSendDistanceShoot(getThingPosWithDebug(cid), getThingPosWithDebug(target), 32) local type = isInArray({"ghost"}, pokes[getCreatureName(target)].type) local type2 = isInArray({"ghost"}, pokes[getCreatureName(target)].type2) local retConf = {} if not type or not type2 then retConf = {id = target, cd = 5, check = 0, spell = spell, cond = "Confusion"} end addEvent(doMoveDano2, 100, cid, target, NORMALDAMAGE, 0, 0, retConf, spell)  
  13. Upvote
    nociam recebeu reputação de juliocesar19 em PokeMasterX Particle BUG   
    já abriu o goback e viu o porque? esta seu problema um Randon.
  14. Upvote
    nociam deu reputação a GamerGoiano em Escolher Poke Inicial (OTCLIENT - MODULO)   
    Download: https://www.dropbox.com/s/frozgbysjvdsrxy/modzin_testando.rar?dl=0
    Scan: https://www.virustotal.com/gui/file/8ecb5e7e02fc0e03ec6d22ec688f46c77568e2af508d6a41f1d3364f668174d8/detection
    Créditos: Não sei quem fez, apenas achei numa base antiga que tinha no meu pc.

    Não vou postar o talkactions pq depende do servidor, existe um pra PDA, um pra DXP e um pra outros sv...
    Não tenho nenhuma base aqui no pc pra testar.
     
    Como usar:
    1.Crie um action que mande o opcode 70 pro Otclient
    2. Crie 3 talkactions, uma pra cada pokemon inicial
    3. Coloque o módulo na pasta mods ou na pasta modules do OTCLIENT.
     
    Script base opcode:
    function onUse(cid, item, fromPosition, itemEx, toPosition)
                doSendPlayerExtendedOpcode(cid, 70)
        return true
    end
     
    Editavel em testando.otui:
        @onClick:  g_game.talk("/squirtle squirtle")  hide()
        @onClick:  g_game.talk("/charmander charmander")  hide()
        @onClick:  g_game.talk("/bulbasaur bulbasaur")   hide()
     
     

  15. Thanks
    nociam recebeu reputação de wenderotpoke em Pokemon Moves....   
    fiz por cima só observar o que +- deve ser feito.
     

  16. Upvote
    nociam deu reputação a Felipe Moraes em Dungeon Finder   
    Esse script coloca o player em uma fila. Quando entrar outros 5 jogadores na fila, é criada uma party e todos são teleportados para a dungeon. Lembrando que a diferença de nível entre os jogadores é de no máximo 50 levels.
    Adicione uma nova tabela em seu banco de dados
    Talkactions
    GlobalEvents
    CreatureEvents
    Agora nas sources (c++) luascript.cpp Procure por:
    E insira isto depois:
    E procure por:
    E insira isto depois:
    Agora em creatureevent.h Procure por:
    E insira isto depois
    Procure por:
    E insira isto depois:
    Procure por:
    E insira isto depois:
    creatureevent.cpp Procure por:
    Insira isto logo em seguida:
    Procure por:
    E insira isto logo após:
    Busque por:

    Insira isto logo em seguida:
    Busque essa função:
    E insira isso, após a função acima:
    game.cpp Altere esse bloco
    Para esse:  
    Todos os créditos vão para Tekman, pela autoria do código.
  17. Upvote
    nociam recebeu reputação de amarelax em Corpse por vocação   
    verifica getPlayerSex(cid) == 1 
  18. Thanks
    nociam deu reputação a Poke X Ice em PokeBar(Versão:0.3.6)   
    Boa tarde, muito gente estava pedindo como adicionar essa pokemonbar ao jogo.
     
    então decidi postar 
     
    testado na pokemon dash bolz 2.0
     
    futura atualização:
     
    foto:
     
    vamos começar?
     
    vá até servidor/data/action/goback.lua
     
     
    agora em servidor/data/lib/ crie um arquivo chamado liferBar.lua
     
    agora em servido/data/lib/somefunctions.lua
    agora vá em servidor/data/lib/catch system.lua
    agora vá em servidor/data/lib/cooldown bar.lua
     
    agora vá em servidor/data/lib/level system.lua
     
    agora vá em servidor/data/creaturescript/script/exp2.0.lua
     
    agora vá em servidor/data/creaturescript/script/goback.lua
    agora vá em servidor/data/creaturescript/script/login.lua
     
    agora vá em servidor/data/talkactions/script
    agora em servidor/data/talkactions.xml
     
     
    agora vamos para source do jogo:
     
     
     
    Download:
    Creditos:
     
  19. Upvote
    nociam deu reputação a PoRaI em Porai's Show Off   
    Oi, eu sou o Porai e quero mostrar através deste tópico alguns sistemas que já desenvolvi. (estou tentando me vender :X)
    Estou atuando como freelancer, para mais informações, PM.
     
    OTPiece/Pirate King Online:
     
    Fairy Tail Online:
     
    Outros:
     
    Meu módulos geralmente são sempre client/server side para evitar eventuais atualizações no cliente, caso queira adicionar novas informações.
    Tenho beeeem mais coisa....... mas isso é bem cansativo de postar.
     
    Discord: Porai#4377
  20. Upvote
    nociam deu reputação a BlazerX em [OTC] Trainer Card   
    Trainer Card
    Fala galera do Xtibia, vim trazer mais uma contribuição para a comunidade, é um módulo para otclient básico porém legal.
     

     
    Como funciona?
    O Trainer Card vai mostrar digamos algumas informações do seu personagem, 
    você pode adicionar mais informações a esse card, vai da criatividade de cada um deixar bem funcional.
     

     
    Script do servidor:
    Crique um arquivo na pasta do seu servidor em data/creaturescript/ e coloque o nome de trainercard.lua
     
    Coloque a seguinte tag no arquivo do creaturescripts.xml:
    <event type="extendedopcode" name="TrainerCard" event="script" value="trainercard.lua"/> Registre o evento no arquivo onLogin.lua onde se encontra na mesma pasta:
    registerCreatureEvent(cid, "TrainerCard")
     
    Módulo otClient:
    Coloque o módulo na pasta do seu otClient em modules/ 
    Para abrir o módulo pressione a tecla Ctrl+Shift+Q
     

     
    Imagem do módulo:

     

     
    A base que foi utilizada do servidor foi a DarkXPoke.
    O meu módulo tem mais informações do que o da imagem, porém eu dei uma mexida,
    o módulo que o Gengo me passou do Trainer Card que eu utilizo está em um nivel totalmente
    diferente do apresentado nesse tutorial, eu só modifiquei para compartilhar com a galera.
    Espero que tenham gostado e faça um bom proveito do módulo, use sua criatividade para fazer de um belo sistema funcional.
     

     
    Créditos:
     
  21. Upvote
    nociam deu reputação a JulianoZN em [TFS 0.3.6] Campo de visão > Max view Tiles   
    Obs: ja tem tutoriais aqui no xtibia porem estão tendo problemas entao vamos lá
    Antes de começar lembre-se esse codigo nao da de usar o old cliente depois
     
    Oque Precisa ?
    Source do Servidor  e    Source do OtClient
     
    Source usada: 
     
    Para nao dar bug na hora de subir escada ou desce, aumente o máximo de tiles que poderá ser carregado
    const.h
    procure por #define NETWORKMESSAGE_MAXSIZE 15360 mude para #define NETWORKMESSAGE_MAXSIZE valor que voce quer <OBS isso e para a quantidade de pixel será possivel receber sem bugar> #define NETWORKMESSAGE_MAXSIZE 1000000000 --- Valor que coloquei no meu  
    protocalgame.cpp
     
    procure por
    bool ProtocolGame::canSee(uint16_t x, uint16_t y, uint16_t z) const { #ifdef __DEBUG__ if(z < 0 || z >= MAP_MAX_LAYERS) std::cout << "[Warning - ProtocolGame::canSee] Z-value is out of range!" << std::endl; #endif const Position& myPos = player->getPosition(); if(myPos.z <= 7) { //we are on ground level or above (7 -> 0), view is from 7 -> 0 if(z > 7) return false; } else if(myPos.z >= 8 && std::abs(myPos.z - z) > 2) //we are underground (8 -> 15), view is +/- 2 from the floor we stand on return false; //negative offset means that the action taken place is on a lower floor than ourself int32_t offsetz = myPos.z - z; return ((x >= myPos.x - 8 + offsetz) && (x <= myPos.x + 9 + offsetz) && (y >= myPos.y - 6 + offsetz) && (y <= myPos.y + 7 + offsetz)); }  
    Substitua por
     
    bool ProtocolGame::canSee(uint16_t x, uint16_t y, uint16_t z) const { #ifdef __DEBUG__ if(z < 0 || z >= MAP_MAX_LAYERS) std::cout << "[Warning - ProtocolGame::canSee] Z-value is out of range!" << std::endl; #endif const Position& myPos = player->getPosition(); if(myPos.z <= 7) { //we are on ground level or above (7 -> 0), view is from 7 -> 0 if(z > 7) return false; } else if(myPos.z >= 8 && std::abs(myPos.z - z) > 2) //we are underground (8 -> 15), view is +/- 2 from the floor we stand on return false; //negative offset means that the action taken place is on a lower floor than ourself int32_t offsetz = myPos.z - z; return ((x >= myPos.x - Map::maxClientViewportX + offsetz) && (x <= myPos.x + (Map::maxClientViewportX+1) + offsetz) && (y >= myPos.y - Map::maxClientViewportY + offsetz) && (y <= myPos.y + (Map::maxClientViewportY+1) + offsetz)); }  
    procure por
    if(newPos.z > oldPos.z) MoveDownCreature(msg, creature, newPos, oldPos, oldStackpos); else if(newPos.z < oldPos.z) MoveUpCreature(msg, creature, newPos, oldPos, oldStackpos); if(oldPos.y > newPos.y) // north, for old x { msg->AddByte(0x65); GetMapDescription(oldPos.x - 8, newPos.y - 6, newPos.z, 18, 1, msg); } else if(oldPos.y < newPos.y) // south, for old x { msg->AddByte(0x67); GetMapDescription(oldPos.x - 8, newPos.y + 7, newPos.z, 18, 1, msg); } if(oldPos.x < newPos.x) // east, [with new y] { msg->AddByte(0x66); GetMapDescription(newPos.x + 9, newPos.y - 6, newPos.z, 1, 14, msg); } else if(oldPos.x > newPos.x) // west, [with new y] { msg->AddByte(0x68); GetMapDescription(newPos.x - 8, newPos.y - 6, newPos.z, 1, 14, msg); } } } } Substitua por
    if(newPos.z > oldPos.z) MoveDownCreature(msg, creature, newPos, oldPos, oldStackpos); else if(newPos.z < oldPos.z) MoveUpCreature(msg, creature, newPos, oldPos, oldStackpos); if (oldPos.y > newPos.y) { // north, for old x msg->AddByte(0x65); GetMapDescription(oldPos.x - Map::maxClientViewportX, newPos.y - Map::maxClientViewportY, newPos.z, (Map::maxClientViewportX+1)*2, 1, msg); } else if (oldPos.y < newPos.y) { // south, for old x msg->AddByte(0x67); GetMapDescription(oldPos.x - Map::maxClientViewportX, newPos.y + (Map::maxClientViewportY+1), newPos.z, (Map::maxClientViewportX+1)*2, 1, msg); } if (oldPos.x < newPos.x) { // east, [with new y] msg->AddByte(0x66); GetMapDescription(newPos.x + (Map::maxClientViewportX+1), newPos.y - Map::maxClientViewportY, newPos.z, 1, (Map::maxClientViewportY+1)*2, msg); } else if (oldPos.x > newPos.x) { // west, [with new y] msg->AddByte(0x68); GetMapDescription(newPos.x - Map::maxClientViewportX, newPos.y - Map::maxClientViewportY, newPos.z, 1, (Map::maxClientViewportY+1)*2, msg); } } } }  
    Procure por
    ////////////// Add common messages void ProtocolGame::AddMapDescription(NetworkMessage_ptr msg, const Position& pos) { msg->AddByte(0x64); msg->AddPosition(player->getPosition()); GetMapDescription(pos.x - 8, pos.y - 6, pos.z, 18, 14, msg); }  
    Substitua por
    ////////////// Add common messages void ProtocolGame::AddMapDescription(NetworkMessage_ptr msg, const Position& pos) { msg->AddByte(0x64); msg->AddPosition(player->getPosition()); GetMapDescription(pos.x - Map::maxClientViewportX, pos.y - Map::maxClientViewportY, pos.z, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, msg); }  
    Procure por
    void ProtocolGame::MoveUpCreature(NetworkMessage_ptr msg, const Creature* creature, const Position& newPos, const Position& oldPos, uint32_t oldStackpos) { if(creature != player) return; msg->AddByte(0xBE); //floor change up if(newPos.z == 7) //going to surface { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 5, 18, 14, 3, skip); //(floor 7 and 6 already set) GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 4, 18, 14, 4, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 3, 18, 14, 5, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 2, 18, 14, 6, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 1, 18, 14, 7, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 0, 18, 14, 8, skip); if(skip >= 0) { msg->AddByte(skip); msg->AddByte(0xFF); } } else if(newPos.z > 7) //underground, going one floor up (still underground) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, oldPos.z - 3, 18, 14, 3, skip); if(skip >= 0) { msg->AddByte(skip); msg->AddByte(0xFF); } } //moving up a floor up makes us out of sync //west msg->AddByte(0x68); GetMapDescription(oldPos.x - 8, oldPos.y + 1 - 6, newPos.z, 1, 14, msg); //north msg->AddByte(0x65); GetMapDescription(oldPos.x - 8, oldPos.y - 6, newPos.z, 18, 1, msg); }  
    Substitua por
    void ProtocolGame::MoveUpCreature(NetworkMessage_ptr msg, const Creature* creature, const Position& newPos, const Position& oldPos, uint32_t oldStackpos) { if(creature != player) return; msg->AddByte(0xBE); //floor change up if(newPos.z == 7) //going to surface { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 5, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 3, skip); //(floor 7 and 6 already set) GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 4, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 4, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 3, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 5, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 2, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 6, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 1, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 7, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 0, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 8, skip); if(skip >= 0) { msg->AddByte(skip); msg->AddByte(0xFF); } } else if(newPos.z > 7) //underground, going one floor up (still underground) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, oldPos.z - 3, (Map::maxClientViewportX+1), (Map::maxClientViewportY+1)*2, 3, skip); if(skip >= 0) { msg->AddByte(skip); msg->AddByte(0xFF); } } //moving up a floor up makes us out of sync //west msg->AddByte(0x68); GetMapDescription(oldPos.x - Map::maxClientViewportX, oldPos.y - (Map::maxClientViewportY-1), newPos.z, 1, (Map::maxClientViewportY+1)*2, msg); //north msg->AddByte(0x65); GetMapDescription(oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, newPos.z, (Map::maxClientViewportX+1)*2, 1, msg); } Procure por
    void ProtocolGame::MoveDownCreature(NetworkMessage_ptr msg, const Creature* creature, const Position& newPos, const Position& oldPos, uint32_t oldStackpos) { if(creature != player) return; msg->AddByte(0xBF); //floor change down if(newPos.z == 8) //going from surface to underground { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, newPos.z, 18, 14, -1, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, newPos.z + 1, 18, 14, -2, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, newPos.z + 2, 18, 14, -3, skip); if(skip >= 0) { msg->AddByte(skip); msg->AddByte(0xFF); } } else if(newPos.z > oldPos.z && newPos.z > 8 && newPos.z < 14) //going further down { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, newPos.z + 2, 18, 14, -3, skip); if(skip >= 0) { msg->AddByte(skip); msg->AddByte(0xFF); } } //moving down a floor makes us out of sync //east msg->AddByte(0x66); GetMapDescription(oldPos.x + 9, oldPos.y - 1 - 6, newPos.z, 1, 14, msg); //south msg->AddByte(0x67); GetMapDescription(oldPos.x - 8, oldPos.y + 7, newPos.z, 18, 1, msg); } Substitua por
    void ProtocolGame::MoveDownCreature(NetworkMessage_ptr msg, const Creature* creature, const Position& newPos, const Position& oldPos, uint32_t oldStackpos) { if(creature != player) return; msg->AddByte(0xBF); //floor change down if(newPos.z == 8) //going from surface to underground { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, newPos.z, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, -1, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, newPos.z + 1, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, -2, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, newPos.z + 2, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, -3, skip); if(skip >= 0) { msg->AddByte(skip); msg->AddByte(0xFF); } } else if(newPos.z > oldPos.z && newPos.z > 8 && newPos.z < 14) //going further down { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, newPos.z + 2, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, -3, skip); if(skip >= 0) { msg->AddByte(skip); msg->AddByte(0xFF); } } //moving down a floor makes us out of sync //east msg->AddByte(0x66); GetMapDescription(oldPos.x + Map::maxClientViewportX, oldPos.y - (Map::maxClientViewportY-1), newPos.z, 1, (Map::maxClientViewportY+1)*2, msg); //south msg->AddByte(0x67); GetMapDescription(oldPos.x - Map::maxClientViewportX, oldPos.y + Map::maxClientViewportY, newPos.z, (Map::maxClientViewportX+1)*2, 1, msg); }  
    Agora no Map.h
    Procure por
    static const int32_t maxViewportX = 11; //min value: maxClientViewportX + 1 static const int32_t maxViewportY = 11; //min value: maxClientViewportY + 1 static const int32_t maxClientViewportX = 8; static const int32_t maxClientViewportY = 6;  
    Substitua por
    static const int32_t maxViewportX = 15; //min value: maxClientViewportX + 1 static const int32_t maxViewportY = 15; //min value: maxClientViewportY + 1 static const int32_t maxClientViewportX = 14; static const int32_t maxClientViewportY = 8;  
    Agora no map.cpp do Otclient
    Procure por
    void Map::resetAwareRange() { AwareRange range; range.left = 8; range.top = 6; range.bottom = 7; range.right = 9; setAwareRange(range); } Substitua por
    { AwareRange range; range.left = 15; //Change this to = maxClientViewportX range.top = 15; //Change this to = maxClientViewportY range.bottom = range.top+1; range.right = range.left+1; setAwareRange(range); } ou por { AwareRange range; range.left = 14; //Change this to = maxClientViewportX range.top = 8; //Change this to = maxClientViewportY range.bottom = range.top+1; range.right = range.left+1; setAwareRange(range); }  
  22. Upvote
    nociam deu reputação a Benny em Object Builder   
    O que é object builder?
    Object Builder é um editor que cria/edita os gráficos do seu cliente. Você pode editar ou adicionar novos itens, outfits, efeitos ou misseis (shoot) no seu cliente.
    Algumas funções:
    É mais rápido na hora de carregar/compilar seus projetos Importe ou exporte seus itens;outfits;efeitos;misseis como um sprite sheet. Suporte pra sprites transparentes Você pode cortar as imagens importadas. Versões aceitas:
    7.10 - 10.56 Downloads
    Windows [source] Mac OS X Ubuntu [precisa do wine;winetricks;wininet] Imagens
     
     
    Créditos
    EdMignari
  23. Upvote
    nociam deu reputação a Tony Araujo em [BETA-TEST] oldPokemon (SvkE based) - Online Now!   
    Fala galera, tranquilão? Bom, hoje eu to aqui pra apresentar pra vocês o meu xodó. O projeto no qual já trabalho tem 4 anos, e de muita luta e sofrimento kkkkkkk, afinal, passamos por trancos e barrancos. Foi um servidor que eu pensei em fazer diferente, a forma que ele funcionava. Trabalhei em cima de uma source até eu criar a minha própria, voltada completamente para pokémon, para ter um melhor desempenho, tirando todas as funções do tibia e deixando o servidor bem mais leve. 
     
    Bom, vamos falar exatamente o que é o oldPokemon. Eu criei esse servidor, junto com meu primo João, na ideia de trazer o oldschool do poketibia de volta a vida. Eu vejo muita gente comentando em vários forums / canais de poketibia / grupos do fb, que sentem saudades do antigo SvkE, e olha, eu também sentia, então foi de onde partimos nessa dura jornada de trazer um servidor que fosse fielmente o SvkE, porém com vários sistemas novos e funções inovadoras em nosso client e servidor. É com grande alegria que compartilho com vocês o Beta Test deste servidor, após uma longa caminhada.
     
     
    Algumas imagens do servidor:
     
    O servidor está contando com os seguintes sistemas:
     
    E MUITO MAIS!
     
     
     
    Para criar a conta, basta entrar no 1/1 e criar pelo Account Manager.
     
    Discord Link:
    https://discord.gg/UsKAPP2
     
    Download Link (Atualizado 10/04): 
    [MEGA.NZ]: https://mega.nz/#!hltigY4Z!CEncVtvPfuUzATIgK6Y9rPbrXGsCJ2xR6GxnCuWC_Dg [MEDIAFIRE]: https://www.mediafire.com/file/cbe23xa63trdc7t/oldPokemon_%2802.04%29.rar/file [DROPBOX]: https://www.dropbox.com/s/frcj0fotzfp2k56/oldPokemon%20%2802.04%29.rar?dl=0 SCAN DO CLIENT: https://www.virustotal.com/gui/file/64cb6d5bb3896fba98408336d4671e61b6c49bb57faf782f3f9bcfd393880f8d/detection  

     
  24. Upvote
    nociam deu reputação a gabriel28 em BUGS: Clonar item e "derrubar" servidores   
    Solução pro bug da party:
    Em game.cpp procure por:
    Party* party = player->getParty(); E adicione acima: 
    if (invitedPlayer == player) return false; O crash acontece quando usam elfbot e dão party em si mesmo.
    Créditos: Gesior.pl

    EDIT:
    Bug nas portas que empurram items (Geralmente são as que precisam de level pra entrar).
    Abra a porta, coloque vários items na stack e saia. Quando a porta fechar, vai crashar o seu cliente e o de todos que estiverem perto(Na mesma tela). Não sei como fica o servidor, mas da forma que testei (Criei vários items estacáveis com o GOD >/i gold), ele não caiu, mas provavelmente dê lag.
    EDIT 2:
    Quando teve o clean, deu crash nos clientes que eu tinha aberto.
    Solução:
    Mudar a quantidade máxima de item por tile e/ou tirar a script de transformar gold. (Já que na maioria dos OTs é relativamente fácil fazer dinheiro, tirar esse script diminuirá a quantidade de lixo que um player pode produzir.)
     
    EDIT3:
    Sobre o bug das mochilas:
    Script auxiliar(Se tiver pego o de antes desse edit, mude):
    Vá em: ...\data\npc\lib\npcsystem procure por: -- Handles onBuy events. If you wish to handle this yourself, use the CALLBACK_ONBUY callback.
    E substitua a função por essa:
     
    function NpcHandler:onBuy(cid, itemid, subType, amount, ignoreCap, inBackpacks) local config = { sto = 11000, --storage tempo = 60, --tempo de cooldown para comprar novamente it = {2144, 2149}, --id dos itens total = 10 --total de itens que pode ser comprado por vez } if isInArray(config.it, itemid) and amount >= config.total then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "nao pode comprar mais que "..config.total.." itens desse.") return false elseif getPlayerStorageValue(cid, config.sto) > os.time() and isInArray(config.it, itemid) and amount <= config.total then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "espere "..(getPlayerStorageValue(cid, config.sto) - os.time()).." segundo(s) para comprar novamente.") return false elseif isInArray(config.it, itemid) and amount <= config.total then setPlayerStorageValue(cid, config.sto, os.time() + config.tempo) end local callback = self:getCallback(CALLBACK_ONBUY) if(callback == nil or callback(cid, itemid, subType, amount, ignoreCap, inBackpacks)) then if(self:processModuleCallback(CALLBACK_ONBUY, cid, itemid, subType, amount, ignoreCap, inBackpacks)) then -- end end end  
  25. Upvote
    nociam deu reputação a Refe em BUGS: Clonar item e "derrubar" servidores   
    Hoje eu percebi que muitas pessoas estão levando a melhor com bugs de otserver.
    E eu vim aqui ensinar para vocês como fazer tais bugs, e para quem administra um servidor também saber como tal bug é feito e assim pensar em uma forma de fixar.
     
     
    Bug de mochilas:
    Morte no trade:
    Bug da nurse:
    Clonar item por guild:
     
     
    Bom, a minha ideia é mostrar como os bugs são feitos para os donos de servidores arrrumar.
    Obrigado pela atenção!
    Até a próxima.
  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...