FlamesAdmin
-
Total de itens
1550 -
Registro em
-
Última visita
-
Dias Ganhos
19
Histórico de Reputação
-
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
-
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.
-
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.
-
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
-
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>
-
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
-
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
-
-
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>
-
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.
-
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+
-
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. -
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.
-
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.
-
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
-
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
-
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
-
FlamesAdmin recebeu reputação de raulcdj em [Resolvido] Erro Move1 TalkAction ao usa Toxic
Só o codigo? KKKKKK PDA é uma bagunça
-
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
-
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 ....
-
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
-
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:
-
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
-
-
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.