Ir para conteúdo

FlamesAdmin

Infante
  • Total de itens

    1550
  • Registro em

  • Última visita

  • Dias Ganhos

    19

Histórico de Reputação

  1. Upvote
    FlamesAdmin deu reputação a Tungs em [SOURCE DO PDA]   
    Olá a todos,
    Recentemente, trabalhei em um projeto de desenvolvimento de uma source para PDA e fiquei muito satisfeito com os resultados. Depois de muito esforço e testes, consegui atingir cerca de 90% de sucesso na implementação da source em diversos PDAs. Agora, gostaria de compartilhar meu trabalho com vocês.
    A source é escrita em C++ e possui diversas funções, incluindo getDamageMapPercent, isPokeball e Order System (getDirectionToWalk). Adicionado raças (Crystal, Steel, Dark), função OnSpawn, Pokemon Passivos e agressivos. Além disso, é altamente compatível com a maioria dos PDAs, embora possa haver algumas adaptações necessárias dependendo do dispositivo específico.
    Para quem estiver interessado em testar a source, deixo aqui o link para todas as funções: https://pastebin.com/ewKUt9dH
    Ficarei muito grato por qualquer feedback que vocês possam me dar sobre a minha source. Compartilhar conhecimento e ajudar a comunidade é sempre muito gratificante e espero que minha source possa ajudá-los em seus projetos. Obrigado pela atenção e apoio!
    Atenciosamente, Tungs (kevick)
     
    a source se encontra anexada nesse tópico + link do mediafire para quem não conseguir baixar aqui.
     
    Download: https://www.mediafire.com/file/8irkqnrgxtuw1b9/Source.rar/file
    Download Atualização 052023: https://www.mediafire.com/file/nbf3ypdv8yaf903/Source_PDA_atualiza%C3%A7%C3%A3o_052023.rar/file
     
    PS. QUALQUER ERRO EU AJUDAREI, BASTA COMENTAR AQUI NO TÓPICO
     

     
     
     
    ATUALIZAÇÃO 052023
     
    ADIÇÃO DA FUNÇÃO getDirectionToWalk (C++)

    após baixar e compilar a nova source que se encontra logo abaixo, adicione em 032-position.lua que se encontra na pasta lib a função abaixo: function getDirectionToWalk(p1, pos2) local dir = NORTH local pos1 = getCreaturePosition(p1) if(pos1.x > pos2.x) then dir = WEST if(pos1.y > pos2.y) then dir = NORTHWEST elseif(pos1.y < pos2.y) then dir = SOUTHWEST end elseif(pos1.x < pos2.x) then dir = EAST if(pos1.y > pos2.y) then dir = NORTHEAST elseif(pos1.y < pos2.y) then dir = SOUTHEAST end else if(pos1.y > pos2.y) then dir = NORTH elseif(pos1.y < pos2.y) then dir = SOUTH end end return dir end function getNextStepDelay(cid, dir) return tonumber(398) end  
     
    DOWNLOAD DA SOURCE ATUALIZADA: https://www.mediafire.com/file/nbf3ypdv8yaf903/Source_PDA_atualiza%C3%A7%C3%A3o_052023.rar/file
     
     
     
    Source PDA atualização 052023.rar
  2. Upvote
    FlamesAdmin deu reputação a marcoshps11 em Configurando Docker no windows, adeus VM   
    Neste tutorial, irei ensinar configurar o Docker no windows e rodar seu otserver
     
     
     
    - Diferença entre Docker x Máquina virtual:
      Docker e Máquinas Virtuais (VMs) ambas são fundamentais usadas para isolar recursos em um sistema de computação, mas funcionam de maneiras muito diferentes.
     
      VMs são ambientes de computação completos, incluindo um sistema operacional (SO) completo, que simulam o hardware de um computador físico. Isso significa que cada VM é um sistema autônomo e independente.   Já o Docker, usa a tecnologia de contêineres. Os contêineres compartilham o mesmo sistema operacional do host, mas mantêm seu próprio espaço de processo, arquivos e rede. Isso significa que eles são muito mais leves do que as VMs, pois não precisam de um SO completo, e podem ser iniciados e parados muito mais rapidamente.
    - Vantagens em utilizar o Docker
     O Docker oferece várias vantagens significativas:
    Eficiência de recursos: Como os contêineres Docker compartilham o SO do host, eles são mais leves e usam menos recursos do que as VMs. Portabilidade: O Docker permite que você "construa uma vez, execute em qualquer lugar". Uma vez criado um contêiner Docker, ele pode ser executado em qualquer sistema que suporte o Docker, independentemente das configurações subjacentes. Isolamento: Cada contêiner Docker é isolado do resto do sistema, o que ajuda a evitar conflitos entre diferentes aplicações e versões de software. Integração e entrega contínua: O Docker se integra bem com ferramentas de CI/CD (Integração Contínua / Entrega Contínua), permitindo a automatização de testes e implantação de aplicações. Escalabilidade e Orquestração: O Docker facilita a escalabilidade de aplicações, permitindo que múltiplos contêineres sejam implantados facilmente. Além disso, com ferramentas como Docker Swarm e Kubernetes, a orquestração de contêineres se torna eficiente e gerenciável  
     
    Colocando a mão na massa
     
    Este tutorial será dividido nas seguintes etapas:
    Preparação do Windows Instalando o Docker Instalando imagens mariadb e phpmyadmin Realizando a build da imagem TFS  
    1º PASSO:  Preparando o Windows com o subsistema Linux.
     
    AVISO: Essa Etapa será necessária somente caso ainda não possua o subsistema Linux ativado em seu windows
     
    Os comandos a seguir, serão todos utilizando o POWERSHELL do windows, na barra de pesquisa digite POWERSHELL e execute como administrador.
     

     
    Com o POWERSHELL aberto, execute os seguintes comandos:
     
    Habilitando subsistema Linux:
      dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart  
     
    Habilitando recurso de máquina virtual: dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart  
    Baixe e instale Kernel do Linux:  
    https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi
     
    Após essa etapa, será necessário reiniciar o computador para atualização, após reiniciar, abra novamente o PowerShell
     
    Definindo o WSL 2 como padrão: wsl --set-default-version 2  
     
    Após esses passos, basta entrar na Microsoft Store e instalar o sistema Ubuntu:


     
    Após a instalação, abra o Ubuntu, como será a primeira vez, irá solicitar para que digite um nome de usuário e uma senha.

     
     
     
    Etapa 1 concluída.
     
    Fonte: https://learn.microsoft.com/pt-br/windows/wsl/install-manual
     
    2º PASSO:  Instalando Docker.
     
    este é um passo simples, apenas entre no site oficial do Docker, baixe e instale o Docker Desktop

    https://www.docker.com/
     

     
     
    Etapa 2 concluída.
     
     
    3º PASSO:  Instalando imagens MariaDB e phpMyAdmin
     
     Assim como no passo 1, execute novamente o PowerShell como administrador e siga os seguintes passos:
     
    Primeiro vamos baixar as imagens necessárias, execute os seguintes comandos: docker pull mariadb  
    docker pull phpmyadmin/phpmyadmin  
     
    Agora iremos criar uma "Rede" para que o docker se comunique entre os containers que iremos utilizar. Execute o seguinte comando:  
    docker network create mynetwork  
      mynetwork é o nome que defini neste caso, você pode utilizar o nome que achar melhor, porém lembre-se desse nome que iremos utilizar nos próximos passos.
     
    Agora iremos iniciar essas imagens, utilizando os seguintes comandos:  
    docker run --name mariadb --network=mynetwork -e MYSQL_ROOT_PASSWORD=your_password -d mariadb  
    your_password = altere pela senha que deseja utilizar no mysql
    mynetwork = é o nome que criamos no passo anterior
     
    docker run --name myadmin --network=mynetwork --link mariadb:db -d -p 8080:80 phpmyadmin/phpmyadmin  
    Lembrando novamente, mynetwork é o nome criado anteriormente
     
    Após esses passos, será possível ver seu container rodando no Docker Desktop:

     
    Etapa 3 concluída.
     
    4º PASSO:  Gerando Imagem do TFS e configurações necessárias:

     
    Baixe a TFS, nesse exemplo será o repositório oficial https://github.com/otland/forgottenserver Extraia os arquivos após baixar com o container mariadb e phpmyadmin rodando, acesse http://localhost:8080/  com o login root, e a senha que criou no passo 3, crie uma nova base de dados e importe o arquivo schema.sql do servidor edite o arquivo config.lua.dist
     -- MySQL
    mysqlHost = "mariadb"
    mysqlUser = "root"
    mysqlPass = "SUA SENHA CRIADO NO PASSO 3"
    mysqlDatabase = "NOME DA DATABASE"
    mysqlPort = 3306
    mysqlSock = ""

    mariadb é o nome do container que estamos rodando o mysql  
     
    ** Caso queira utilizar todo potencial do seu computador na hora de buildar a TFS, no arquivo Dockerfile, edite a linha 18:
    RUN cmake --preset default && cmake --build --config RelWithDebInfo --preset default para
     
    RUN cmake --preset default && cmake --build --config RelWithDebInfo --preset default -- -j 16  
    onde 16 é o numero de processadores lógicos que deseja ser utilizados, não é necessário utilizar 100% porém quanto mais melhor, porém caso utilize mais do que está disponível poderá travar,  então utilize a quantidade mostrada pra menos.
    no gerenciador de tarefas aba desempenho, é possível visualizar a quantidade de núcleos e processadores lógicos do seu CPU


     
    Após isso, entre no Power Shell e execute o comando:  
    docker build -t server .  
     onde "server" é o nome da imagem que será gerada
     
    Após isso, é só iniciar o servidor com o seguinte comando  
    docker run --name server --network=mynetwork -p 7171:7171 -p 7172:7172 -d server  
    lembrando que mynetwork é o nome que geramos no passo 3, e o ultimo parametro é nome da imagem que geramos anteriormente.
     
    Você poderá ver seu sevidor ronando no Docker Desktop:
     

     
    caso queira parar algum servidor ou iniciar novamente, é só clicar no botão de ação:
     

     
    Caso precise fazer alguma alteração no server, basta utilizar os comandos de build e run citados anteriormente.
    Para ver os logs, basta clicar em "server" ou o nome que escolheu:


     
     
     
    Lembrando que isso é um tutorial básico para rodar o servidor na máquina local, qualquer dúvida ou sugestão, deixe comentário.
  3. Upvote
    FlamesAdmin deu reputação a Lordbaxx em Pokemon Imperium - Por Lordbaxx | Completo   
    Muita gente acompanhou, rolou alguns testes mas eu realmente perdi o tesão, passei anos e anos mexendo nesse servidor, ia e voltava, abandonava e tentava novamente, mas nunca abri mão pois achava que uma hora iria voltar a mexer com isso novamente. Acabei que estou trabalhando em área de desenvolvimento mas relacionado a jogos 3D e pixel Art, abandonei de vez a área de otServ tibiano, então aqui fica minha contribuição, pois sei que muitos ainda curtem.
     
    Servidor completamente estável, vou deixar um changelog que inclusive está junto das pastas do servidor. Foram feitos muitos testes, tem sistemas incompletos e alguns já em perfeito funcionamento... O mapa é inteiro exclusivo feito detalhe por detalhe do 0 mas lógico sem fugir do universo Pokémon.
     
    Servidor com muito conteúdo, e já jogável.
     
    Ah e não se preocupem, não tem código pra derrubar o servidor ou armadilhas como certos “nomes” da comunidades já fizeram quando postaram um server que diziam ser “contribuição”. Abrç!
     
    Os créditos estarão no fim.
     
    Perfil no facebook - Caso queiram ver mais fotos que talvez não tenha abaixo.
     
    Changelog:
     
     
    Imagens: (Contém imagens desde o inicio até etapas mais avançadas, e não tenho certeza se o cliente que disponibilizei é o mesmo das imagens, mas enfim.)
     
     
    Download: Tudo incluso no Arquivo, cliente, source, versões antigas e atual, compiladores, tudo.

    Pokemon Imperium.rar.full
     
     
    Créditos: Lordbaxx, Alexandre Lorenzon *mapa, Guilherme *thumbs e ideias.
     
  4. Upvote
    FlamesAdmin deu reputação a Poke Hero em [OPEN-SOURCE] POKEMASTERX   
    base do masterx estilo padrão pxg está aí tudo certinho ativado o sistema de portrait
    link da base : https://www.mediafire.com/folder/cz4vt8vo205o2/Base+Master+X+2021


  5. Upvote
    FlamesAdmin recebeu reputação de Rookie em Problema com borda RME   
    Abra o borders.xml na pasta da sua versão (RME/data/versão)
    Procure por
    <border id="5"> -- Sea border -- <borderitem edge="n" item="4644"/> <borderitem edge="e" item="4645"/> <borderitem edge="s" item="4646"/> <borderitem edge="w" item="4647"/> <borderitem edge="cnw" item="4652"/> <borderitem edge="cne" item="4653"/> <borderitem edge="csw" item="4654"/> <borderitem edge="cse" item="4655"/> <borderitem edge="dnw" item="4648"/> <borderitem edge="dne" item="4649"/> <borderitem edge="dsw" item="4650"/> <borderitem edge="dse" item="4651"/> </border> Substitua tudo por esse:
    <border id="5"> -- Sea border -- <borderitem edge="n" item="4632"/> <borderitem edge="e" item="4635"/> <borderitem edge="s" item="4634"/> <borderitem edge="w" item="4633"/> <borderitem edge="cnw" item="4643"/> <borderitem edge="cne" item="4642"/> <borderitem edge="csw" item="4641"/> <borderitem edge="cse" item="4640"/> <borderitem edge="dnw" item="4639"/> <borderitem edge="dne" item="4638"/> <borderitem edge="dsw" item="4637"/> <borderitem edge="dse" item="4636"/> </border>  
  6. Upvote
    FlamesAdmin recebeu reputação de No Face em Erro nas Sprites do RME Map Editor   
    Talvez seja problema de client extended/transparency. Verifique o .spr e .dat se são extended/transparency e no RME verifica se estão marcados as opções do mesmo
  7. Upvote
    FlamesAdmin deu reputação a underewarr em VIDEO [Linux - Ubuntu/Debian] Apache + MySQL + MyAAC + Compilação   
    O titulo é auto explicativo.
    Como Criar Um Server De "TIBIA" Do Zero Linux -Ubuntu/Debian]Apache + MySQL + MyAAC + Compilação #4 - YouTube
  8. Upvote
    FlamesAdmin recebeu reputação de georgelxll em Npc dando erro   
    Basta ler!
  9. Thanks
    FlamesAdmin recebeu reputação de raulcdj em [OTClient - Module] Caught Achievement v1.4 - Atualizado!   
    Link do código @KaboFlow @raulcdj
    https://pastebin.com/dKiGhW9b
     
     
    #ME
    estou com um erro 
    [Error - Action Interface] In a timer event called from: data/actions/scripts/basic/catch.lua:onUse Description: data/lib/CaughtWindow.lua:282: attempt to index a number value stack traceback: data/lib/CaughtWindow.lua:282: in function 'sendcaught' data/lib/catch system.lua:237: in function <data/lib/catch system.lua:156>  
  10. Upvote
    FlamesAdmin deu reputação a Yan Oliveira em Event Boss   
    Olá, vá na pasta Data/Globalevents/Scripts e crie um arquivo lua chamado boss e adicione o código dentro:
    ----------------------------------- EVENTO SUMMON BOSS FEITO POR YAN18 ----------------------------------------- local minutos = 20 ---- COLOCA OS MINUTOS AQUI PARA OS BOSS SUMIREM CASO NINGUÉM OS MATE ---- NOME DOS MONTROS ---- local monsters = { [1] = "Magmar" , [2] = "Electabuzz", [3] = "Scizor", } ---- POSIÇÃO DA ARENA ONDE APARECERÁ OS MONSTROS ---- local position_arena = { from_pos = {x= 964, y = 993, z= 7}, -- VARIÁVEL QUE TEM A COORDENADA INICIAL DO LUGAR ONDE VAI APARECER OS MONSTROS to_pos = {x= 978, y = 1009, z= 7}, -- VARIÁVEL QUE TEM A COORDENADA FINAL DO LUGAR ONDE VAI APARECER OS MONSTROS } ---------------------------------- CÓDIGO ---------------------------------------------- function onThink(cid, words, interval, lastExecution) ----- CRIA OS BOSS ----- for i, j in ipairs(monsters) do ----- VARIÁVEL RANDOM_POSITION GERA O SPAWN ALEATÓRIO DOS BOSS ----- local random_position = {x= math.random(position_arena.from_pos.x, position_arena.to_pos.x), y= math.random(position_arena.from_pos.y, position_arena.to_pos.y), z= math.random(position_arena.from_pos.z, position_arena.to_pos.z)} doSummonCreature(j, random_position) end doBroadcastMessage(#monsters == 1 and "A monster have been arrived in this world. Don't arrive near!" or "Some monsters have been arrived in this world. Don't arrive near by them!", 22) ---- VERIFICAÇÃO SE TEM MONSTROS NA ARENA PARA REMOVER ---- addEvent(function() local position = {} for i = position_arena.from_pos.x, position_arena.to_pos.x do for j = position_arena.from_pos.y, position_arena.to_pos.y do position[#position+1] = {x= i, y = j, z= position_arena.from_pos.z, stackpos = 0} end end for i= 1, #position do for j = 0, 255 do position[i].stackpos = j local monster = getTileThingByPos(position[i]) if isMonster(monster.uid) then for d, n in ipairs(monsters) do if getCreatureName(monster.uid) == n then doRemoveCreature(monster.uid) if d == #monsters then doBroadcastMessage(#monsters == 1 and "The monster left this world. But it will return soon...." or "The monsters left this world. But they will return soon....", 22) end end end end end end end, minutos * 60 * 1000) return true end Agora em Data/Globalevents abra o globalevents.xml e adicione a tag:
    <globalevent name="boss" interval="3600" event="script" value="boss.lua"/> <!-- TEMPO EM SEGUNDOS, JÁ DEIXEI 1 HORA --> Explicação: No código, eu criei 3 monstros genéricos para testar, só adicionar o nome deles igual está na tabela, e se quiser só 1 monstro, apague os outros dois e insira o desejado (lembrando de colocar a vírgula no final igual como está).
     
    Na variável minutos já deixei 20 como pediu, mas caso queira trocar, só alterar o valor dela (lembrando que o valor dela tem que ser menor que o intervalo do evento no xml).
     
    E na tabela position_arena, precisa colocar as coordenadas iniciais e finais da arena, já deixei pronto ali também e é só substituir.
     
    Deixei para eles nascerem em posições aleatórias dentro das coordenadas da arena, caso queira spawns fixos, só ir na variável random_position e colocar x, y e z desejados.
     
    Agora na parte do Xml como deixei o comentário na tag, já deixei 1 hora como pediu (3600 segundos), caso queira outro valor só alterar lá, lembrando que ali é em segundos.
     
    Deixei tudo comentado e explicadinho, mas qualquer dúvida só falar. Eu testei muito aqui e deu certo, mas qualquer problema só me dizer.
  11. Upvote
    FlamesAdmin deu reputação a Marshmello em Zorua System Para PDA SEM LEVEL SYSTEM   
    Fala Jovens , Vi muitas pessoas falando sobre o system de zorua, então decidir trazer pra vocês
     
    Lembrando : Testado em PDA TFS 0.3.6 SEM Level System
     
    Então Vamos lá
     
    Em CreatureScript/ Spawn.lua 
    Em baixo de  
     
    Colé Isso
     
    local function doZorua(cid) if isCreature(cid) then if isSummon(cid) then return true end if getPlayerStorageValue(cid, 74469) >= 1 then return true end if getPlayerStorageValue(cid, 22546) >= 1 then return true end if isNpcSummon(cid) then return true end if getPlayerStorageValue(cid, 637500) >= 1 then return true end --alterado v1.9 if os.date("%X") >= "00:00:00" and os.date("%X") <= "03:00:00" then chance = 0.75 elseif os.date("%X") >= "03:01:00" and os.date("%X") <= "05:00:00" then chance = 1.50 elseif os.date("%X") >= "05:01:00" and os.date("%X") <= "07:00:00" then chance = 1 elseif os.date("%X") >= "07:00:00" and os.date("%X") <= "12:00:00" then chance = 0.20 elseif os.date("%X") >= "12:01:00" and os.date("%X") <= "16:00:00" then chance = 0.10 elseif os.date("%X") >= "16:01:00" and os.date("%X") <= "18:00:00" then chance = 0.10 elseif os.date("%X") >= "18:01:00" and os.date("%X") <= "20:00:00" then chance = 0.15 elseif os.date("%X") >= "20:01:00" and os.date("%X") <= "22:00:00" then chance = 0.18 elseif os.date("%X") >= "22:01:00" and os.date("%X") <= "23:59:59" then chance = 0.30 else chance = 0 end local test = math.random(1,20000) if test <= chance*5 then doSendMagicEffect(getThingPos(cid), 18) local lvl = math.random(10, 30) local name, pos = "Zorua", getThingPos(cid) local shi = doCreateMonster(name, pos , false) doSetCreatureOutfit(shi, getCreatureOutfit(cid), -1) doCreatureSetNick(shi, getCreatureName(cid)) doRemoveCreature(cid) setPlayerStorageValue(shi, 74469, 1) print("Um " .. name .. " foi spawnado em X=" .. pos.x .. " Y=" .. pos.y .. " Z=" .. pos.z) else setPlayerStorageValue(cid, 74469, 1) end --/\ else return true end end Continuando Em Spawn.lua
    Em Baixo De 
    addEvent(doShiny, 10, cid) Adicione
    addEvent(doZorua, 10, cid) ==============================================================================
    -----------CONFIGURANDO------------------------
     
    Em
    if os.date("%X") >= "00:00:00" and os.date("%X") <= "03:00:00" then chance = 0.75 Cada Horario tem uma X Chance De Spawn  Pode ser trocadas 
    -----------------------------
    local name, pos = "Zorua", getThingPos(cid) No Local Name , Seria o poke que ira spawnar  e ficara escondido no meio de outros Pokes
    ---------------------------------------------------------------------
    Então e Isso Galera , Bom proveito do System
     
    Gostou Deixe Aquele REP+  
  12. Haha
    FlamesAdmin deu reputação a XZero em PokéEvolution   
    PokéEvolution: Site: http://pokeevolution.xyz/ Face: https://www.facebook.com/pokemonevolucao - Base Mega e Shiny, evolução por level e stone. - Level system nos pokémons. - Sistema de turret. - Sistema de card lendario. - Sistema de player shop. - Sistema de Gym e Elite Four. - Sistema de Auto-Loot - Sistema PvP, Rocket vs. Police. - Sistema de buffs. - Sistema de bosses Lendarios. - Sistema de Dungeon.                          
  13. Upvote
    FlamesAdmin deu reputação a Tony Araujo em [CREATURESCRIPT] Exp Aura Sytem (OTP Based)   
    [CREATURESCRIPT] Exp Aura System (OTP Based)
    Autor: Tony Araújo (OrochiElf)
     
    Vídeo demonstrativo: https://imgur.com/8OFTfL8 
    (por algum motivo não carregou link direto kk)
     
    Eai rapeize, beleza? Espero que sim. Bom, hoje vim trazer a vocês o sistema de Exp Aura, fiz ele baseado no do OTPokemon.
    Bom, o sistema funciona da seguinte forma, você mata um monstro e tem uma chance desse monstro criar uma aura, que no caso será um efeito que ficará se repetindo por determinado tempo, ou caso preferência, até o corpo do monstro sumir, caso apareça essa aura, você precisa ficar na posição do efeito para coletar esse bônus. É um sistema bem simples, porém legal (acredito eu kkkkkk).
    Bom, vamos lá.
     
    1. Vá em [data/creaturescripts/scripts] e lá crie um arquivo chamado (CODDINGS-ExpAura.lua), e dentro adicione:
    LINK DO HASTEBIN AQUI
     
    A configuração é bem simples, vamos lá:
    local EXPAURA = { aura_effect = 11, -- É o ID do efeito que irá ficar se repetindo, até o bonus ser coletado. gain_effect = 14, -- É o ID do efeito que irá aparecer quando o bonus for coletado. spawn_chance = 25, -- É a chance que este bônus tem de acontecer, sendo 25 = 25% use_specific_time = 15 -- Aqui você configura por quanto tempo o bônus esperará ser coletado, em segundos, porém caso prefira que espere até o corpo sumir, troque o número por false }  
    2. Continuando dentro do scripts, vá em (login.lua) e procure por:
    registerCreatureEvent E acima do primeiro resultado, você adicione:
    registerCreatureEvent(cid, "ExpAura+")  
    3. Agora vá no creaturescripts.xml e adicione a tag:
    <event type="kill" name="ExpAura+" event="script" value="CODDINGS-ExpAura.lua"/>  
    Bom galera, feito isso, está pronto para se divertir. Espero que gostem e façam bom proveito.
  14. Haha
    FlamesAdmin deu reputação a Tony Araujo em [OTClient - Module] Caught Achievement v1.4 - Atualizado!   
    Noix pae
     
    Valeu brother, quem sabe uns modules novos kkkkkk
     
    Tmjj brother xD
     
    Sem cutcharra, selo padrão tonynamoral.
  15. Upvote
    FlamesAdmin 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
  16. Thanks
    FlamesAdmin recebeu reputação de StrikersBR12 em [Resolvido] ERRO na compilaçao   
    Retira o comentário da linha de cima e coloca na de baixo
  17. Thanks
    FlamesAdmin recebeu reputação de M i s s em Função checar item na Bag   
    Se você tiver a função onMoveItem no seu servidor, em creaturescripts:
    function onMoveItem(cid, item, fromPosition, toPosition, fromItem, toItem, fromGround, toGround, status) local fromContainer = fromItem local toContainer = toItem if item.itemid == IDBIKE and isBiking(cid) then doPlayerSendCancel(cid, "Você não pode mover este item.") return false end end <event type="moveitem" name="MoveItem" event="script" value="player/moveItem.lua"/> Adicione isso no some functions.lua da lib
    function isBiking(cid) return getPlayerStorageValue(cid, 32001) == 1 end function cancelBike(cid, NotOutfit) if not NotOutfit then doRemoveCondition(cid, CONDITION_OUTFIT) end setPlayerStorageValue(cid, 32001, -1) end Muda seu script da bike por esse:
    local sBike = 2547 local t = { [16053] = {article='', name='', text='', dtext='', s=32001, condition=bikeCondition}, } function BikeSpeedOn(cid,nSpeed) setPlayerStorageValue(cid,sBike,getCreatureSpeed(cid)) doChangeSpeed(cid,-getCreatureSpeed(cid)) doChangeSpeed(cid,nSpeed) end function BikeSpeedOff(cid) doChangeSpeed(cid,-getCreatureSpeed(cid)) doChangeSpeed(cid,getPlayerStorageValue(cid,sBike)) end function onUse(cid, item, fromPosition, itemEx, toPosition) local v, r = getCreaturePosition(cid), t[item.itemid] local s = r.s local pos = {x = v.x, y = v.y, z = v.z} if r then if getPlayerStorageValue(cid, 25000) == 5 then return end if getPlayerStorageValue(cid, 23000) == 5 then return end if getPlayerStorageValue(cid, 17001) >= 1 or getPlayerStorageValue(cid, 63215) >= 1 or getPlayerStorageValue(cid, 17000) >= 1 or getPlayerStorageValue(cid, 75846) >= 1 or getPlayerStorageValue(cid, 6598754) >= 1 or getPlayerStorageValue(cid, 6598755) >= 1 then --alterado v1.9 return doPlayerSendCancel(cid, "You can't do that right now.") end local underwater = {231, 670, 671, 5405, 5406, 5407, 5408, 5409, 5410, 5427, 5428, 5429, 5430, 5431, 5432, 5433, 5434, 5435, 5436, 5437, 5438} if isInArray(underwater, getTileInfo(getThingPos(cid)).itemid) then return doPlayerSendCancel(cid, "Você não pode usar bike nesse local.") end if getPlayerStorageValue(cid, 22545) >= 1 then doPlayerSendCancel(cid, "Não pode usar isso aqui.") return true end if getPlayerStorageValue(cid, 10) >= 1 or getPlayerStorageValue(cid, 10) >= 1 then doPlayerSendCancel(cid, "Não pode usar bike na loja de roupas.") return true end if getPlayerStorageValue(cid, 154585) >= 1 then return doPlayerSendCancel(cid, "Desculpe, isso não é possível.") end if ( getPlayerItemCount(cid, 13984) <= 0 ) then return doPlayerSendCancel(cid, 'Coloque na mochila para poder usar.') end if getPlayerStorageValue(cid, s) <= 0 then doCreatureSay(cid, r.text, 19) setPlayerStorageValue(cid, s, 1) BikeSpeedOn(cid,600) if getPlayerSex(cid) == 1 then doSetCreatureOutfit(cid, {lookType = 2566, lookHead = getCreatureOutfit(cid).lookHead, lookBody = getCreatureOutfit(cid).lookBody, lookLegs = getCreatureOutfit(cid).lookLegs, lookFeet = getCreatureOutfit(cid).lookFeet}, -1) else doSetCreatureOutfit(cid, {lookType = 2565, lookHead = getCreatureOutfit(cid).lookHead, lookBody = getCreatureOutfit(cid).lookBody, lookLegs = getCreatureOutfit(cid).lookLegs, lookFeet = getCreatureOutfit(cid).lookFeet}, -1) end elseif getPlayerStorageValue(cid, s) == 1 then doCreatureSay(cid, r.dtext, 19) setPlayerStorageValue(cid, s, 0) BikeSpeedOff(cid) return doRemoveCondition(cid, CONDITION_OUTFIT) else return doPlayerSendCancel(cid, 'You can\'t do this.') end else return doPlayerSendTextMessage(cid,MESSAGE_STATUS_CONSOLE_BLUE, 'Report bugs in Bike system.') end return true end  
  18. Upvote
    FlamesAdmin recebeu reputação de raulcdj em [Resolvido] Erro Move1 TalkAction ao usa Toxic   
    Só o codigo? KKKKKK PDA é uma bagunça
  19. Amei
    FlamesAdmin recebeu reputação de raulcdj em [Resolvido] Erro Move1 TalkAction ao usa Toxic   
    Faz assim, troca o código do seu Toxic por esse:
    elseif spell == "Toxic" then local area = {rush1, rush2} for i = 0, 1 do addEvent(doMoveInArea2, i*300, cid, 114, area[i+1], POISONDAMAGE, min, max, spell) end No areas.lua adicione isso:
    rush1 = { {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 2, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, } rush2 = { {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 0, 1, 0, 0}, {0, 0, 1, 0, 2, 0, 1, 0, 0}, {0, 0, 1, 0, 0, 0, 1, 0, 0}, {0, 0, 0, 1, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, } Troca o seu código do 032-position.lua por esse:
    function getPosfromArea(cid,area) icenter = math.floor(table.getn(area)/2)+1 jcenter = math.floor(table.getn(area[1])/2)+1 center = area[icenter] ivar = table.getn(area) jvar = table.getn(area[1]) i = table.getn(area)^2 j = table.getn(area[1])^2  
    Creio que não vá mudar em nada mas nao custa tentar
  20. Upvote
    FlamesAdmin recebeu reputação de raulcdj em [Resolvido] Erro Move1 TalkAction ao usa Toxic   
    Tu trocou o código dentro do .xml da spell? K
    É pra substituir no pokemon moves ....
  21. Thanks
    FlamesAdmin recebeu reputação de raulcdj em [Resolvido] Erro Move1 TalkAction ao usa Toxic   
    Troca seu Toxic por esse
    elseif spell == "Toxic" then local area = {gale1, gale2} for i = 0, 1 do addEvent(doMoveInArea2, i*400, cid, 114, area[i+1], POISONDAMAGE, min, max, spell) end  
  22. Upvote
    FlamesAdmin 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:
     
  23. Upvote
    FlamesAdmin deu reputação a GamerGoiano em PokeAimar (Level System) 8.54 2020 (Com Sources)   
    Vai vender com a correção? Se for vender avisa que eu corrijo e posto free aqui
  24. Upvote
    FlamesAdmin recebeu reputação de BrunooMaciell em Duvida PvP   
    non-pvp/npvp/nonpvp
  25. Upvote
    FlamesAdmin deu reputação a klbkevinklb em Pescando em montanhas (andares superiores)   
    Fala gente, tudo bem...bom eu to sumido aqui do portal, porém hoje estou de volta com uma coisa para disponibilizar. Muitos ja devem saber, alguns não...a pxg tem um sistema que voce pode pescar de andares mais altos, eu procurei muito pra descobrir e bom encontrei e hjee vou ensinar a voces:
     
    abra o arquivo: actions.cpp/ procure por isso:
     

     ReturnValue Actions::canUseFar(const Creature* creature, const Position& toPos, bool checkLineOfSight)
     
    Ela vai estar assim:
     

    ReturnValue Actions::canUseFar(const Creature* creature, const Position& toPos, bool checkLineOfSight) {     if(toPos.x == 0xFFFF)         return RET_NOERROR;     const Position& creaturePos = creature->getPosition();     if(creaturePos.z > toPos.z)         return RET_FIRSTGOUPSTAIRS;     if(creaturePos.z < toPos.z)         return RET_FIRSTGODOWNSTAIRS;     if(!Position::areInRange<7,5,0>(toPos, creaturePos))         return RET_TOOFARAWAY;     if(checkLineOfSight && !g_game.canThrowObjectTo(creaturePos, toPos))         return RET_CANNOTTHROW;     return RET_NOERROR; }
     
    Troque por essa abaixo:
     
    Apague a função toda e coloque isso:
     

    ReturnValue Actions::canUseFar(const Creature* creature, const Position& toPos, bool checkLineOfSight) {     if(toPos.x == 0xFFFF)         return RET_NOERROR;     const Position& creaturePos = creature->getPosition();     if(creaturePos.z > toPos.z)         return RET_FIRSTGOUPSTAIRS; //    if(creaturePos.z < toPos.z) //        return RET_FIRSTGODOWNSTAIRS;     if(!Position::areInRange<7,5,3>(toPos, creaturePos))         return RET_TOOFARAWAY; //    if(checkLineOfSight && !g_game.canThrowObjectTo(creaturePos, toPos)) //        return RET_CANNOTTHROW;     return RET_NOERROR; }
     
     
    Feito tudo certo, voce conseguira pescar de cima de montanhas. Obrigado e boa noite a todos.
  • Quem Está Navegando   0 membros estão online

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