
FlamesAdmin
Membro
-
Registro em
-
Última visita
Histórico de Curtidas
-
FlamesAdmin deu reputação a MORDUK em BASE POKEMON ROXY 100% ABERTA TFS 0.3.6 [ORIGINAL - OPEN SOURCE] (SEM TRAP - SOURCES CLEAN)Primeiramente gostaria de esclarecer algumas polemicas relacionas a base na época (2019) em que estava online comigo. O "SERVIDOR" (nome PokemonRoxy com grupo no facebook de 600 pessoas e pagina) foi vendido na época por 500 reais, sendo que a mesma estava com uma média de 50 players diarios com donaters ativos, chegou a atingir o limite de 140 players simultanêos. Quando vendi a base avisei ao comprador que a venda do servidor não limitaria a minha venda da BASE, tenho prints que comprovam. Nessa vendi uma copia da base por 100 reais na época e acabaram vazando (copias da base que estão em outros forums) Pessoas mal intensionadas colocaram um monte de trap na source pra disponibilizar a base e ganhar vendendo a source original.
O pokemon roxy pra quem não sabe foi feito a partir da base do PokemonChampions, foi corrigido todos bugs criticos da base, source e mapa refeitos do 0. A source que acompanha é a original
Vamos um ajudar o outro pra comunidade crescer cada dia mais e aumentar o nivel sempre 😉
O intuito do servidor era realmente ser algo diferente do estilo PxG da vida, algo um pouco mas casual mas ainda sim um servidor serio. porém tenho certeza que a base tem capacidade pra um projeto serio com outra proprosta de jogo. E tem gente que tem projeto excelente e promissor com a base como por exemplo pokegenerations que será lançada em breve
CRÉDITOS:
Eu (MORDUK)
que fiz praticamente tudo no servidor, desde mapa que refiz do 0, até a maioria dos scripts em lua e investi alto em alguns sistemas
Kevin L
Ajudou bastante na parte de sprites e alguns modulos
Carlos Guiminha
Sempre ajudou o servidor in-game e com sprites
Se tiver mais alguem manda msg pois não me lembro
PRINTS ANTIGAS DE QUANDO O SERVIDOR ESTAVA ONLINE (MESMOS ARQUIVOS DAQUI):
https://imgur.com/a/ttJVmFK
CONTEÚDO:
-Site (100% funcional, com shop entregando in-game automaticamente)
-Source do OTCLIENT
-Source do OTCLIENT com criptografia
-Source do Servidor
-Codeblocks usado para compilar
DOWNLOAD:
https://www.4shared.com/rar/DrHxw3cYiq/pokemon_roxy__1_.html?
SENHA DOS ARQUIVOS:
12roxy12
SCAN:
https://www.virustotal.com/gui/file/d1da37db89197ab2633488005da040bff25d126b086e8b440ff6b0f1a5642226
DATABASE:
Usar a mysteryous.sql que está na base do servidor
Sou mapper, todas as ilhas do mapa e maioria das quests foram feitas por mim. Faço trampo de copia também, a hunt de altaria foi feita por mim 100% igual da PXG, até mesmo os detalhes! faço por encomenda também!
Também faço scripts em lua
Posso ajudar com suporte a alguns problemas
Ótima base para retirada de sistemas em lua, c++ e modulos do client
ESPERO AJUDAR A COMUNIDADE E ESPERO QUE CRESÇAMOS CADA DIA MAIS UM AJUDANDO AO OUTRO.
-
FlamesAdmin deu reputação a OT Archive em OTClient para navegadoresOTClient Redemption (mehah) para navegadores
Em nome da OTServList Brasil e do OT Archive, adaptei o OTClient Redemption para rodar em navegadores web.
Source: https://github.com/mehah/otclient/pull/894 Guia de compilação e uso: https://github.com/OTArchive/otclient/wiki/Guia-‐-OTClient-Redemption-Web Demo sem assets: https://demo.otarchive.com Versão modular: https://webclient.otarchive.com Vídeo demonstrando o client se conectando a um servidor:
Em caso de dúvidas sobre o client web ou sobre servidores com suporte a websockets, por favor poste aqui.
Disponibilizou um client web para seu servidor? Me avise para que eu inclua seu OT na categoria Web na OTServList Brasil, com um botão "Jogar Agora".
-
FlamesAdmin deu reputação a L3K0T em Instalando o Sistema "max_packets_per_seconds" contra Syn Flood no seu Servidor 0.xInstalando o Sistema max_packets_per_seconds no Servidor 0.x
Passo 1: Modificar o Connection.cpp
Abra o arquivo Connection.cpp. Procure pela função: void Connection::parseHeader(const boost::system::error_code& error) Antes da linha:
--m_pendingRead; try Adicione o seguinte código:
uint32_t timePassed = std::max<uint32_t>(1, (time(NULL) - m_timeConnected) + 1); if ((++m_packetsSent / timePassed) > static_cast<uint32_t>(g_config.getNumber(ConfigManager::MAX_PACKETS_PER_SECOND))) { std::cout << convertIPAddress(getIP()) << " disconnected for exceeding packet per second limit." << std::endl; close(); m_connectionLock.unlock(); return; } if (timePassed > 2) { m_timeConnected = time(NULL); m_packetsSent = 0; }
Passo 2: Modificar o Connection.h
Abra o arquivo Connection.h. Procure pela classe: class Connection : public boost::enable_shared_from_this<Connection>, boost::noncopyable Abaixo de:
m_protocol = NULL; Adicione:
m_packetsSent = 0; m_timeConnected = time(NULL); Abaixo de:
uint32_t m_refCount; Adicione:
time_t m_timeConnected; uint32_t m_packetsSent;
Passo 3: Modificar o ProtocolGame.cpp
Abra o arquivo ProtocolGame.cpp. Procure pela função: void ProtocolGame::parsePacket(NetworkMessage &msg) Abaixo de:
if(!player || !m_acceptPackets || g_game.getGameState() == GAME_STATE_SHUTDOWN || msg.getMessageLength() <= 0) return; Adicione:
uint32_t now = time(NULL); if(m_packetTime != now) { m_packetTime = now; m_packetCount = 0; } ++m_packetCount; if(m_packetCount > (uint32_t)g_config.getNumber(ConfigManager::MAX_PACKETS_PER_SECOND)) return;
Passo 4: Modificar o ProtocolGame.h
Abra o arquivo ProtocolGame.h. Procure por: ProtocolGame(Connection_ptr connection): Protocol(connection) Substitua:
m_eventConnect = 0; por:
m_eventConnect = m_packetCount = m_packetTime = 0; Procure por:
uint32_t m_eventConnect Substitua por:
uint32_t m_eventConnect, m_maxSizeCount, m_packetCount, m_packetTime;
Passo 5: Modificar o ConfigManager.cpp
Abra o arquivo ConfigManager.cpp. Procure por: m_loaded = true; Acima disso, adicione:
m_confNumber[MAX_PACKETS_PER_SECOND] = getGlobalNumber("max_packets_per_second", 500);
Passo 6: Modificar o ConfigManager.h
Abra o arquivo ConfigManager.h. Procure por LAST_NUMBER_CONFIG /* this must be the last one */ Acima disso, adicione:
MAX_PACKETS_PER_SECOND,
Passo 7: Modificar o config.lua
No arquivo config.lua do seu servidor, adicione: max_packets_per_second = 80 Lembrando que, quanto maior o número, mais pacotes a pessoa pode enviar sem ser desconectada.
Medidas para ajudar a proteger o servidor contra ataques de "packet flood" ou "SYN flood". Esses ataques envolvem o envio de um grande número de pacotes ao servidor em um curto espaço de tempo, com a intenção de sobrecarregar os recursos do servidor e causar falhas ou degradação no desempenho. Implementando o sistema max_packets_per_seconds, você está limitando o número de pacotes que cada conexão pode enviar por segundo. Isso ajuda a mitigar o impacto de ataques de flood, desconectando automaticamente conexões que excedem o limite configurado de pacotes por segundo. Essas mudanças melhoram a resiliência do seu servidor contra certos tipos de ataques de negação de serviço (DoS), contribuindo para a estabilidade e segurança do seu OTServer.
Créditos
@L3K0T por esse tutorial formatado.
@Yan Liima [TFS 0.4 REV3996] pelo código
-
FlamesAdmin deu reputação a Zayon Owatari em [10.98] [TFS1.2] PokeFans - Poketibia com Level System, Boost, Status e Painel de Moves + PokeAdonsPokeFans é um servidor feito em cima base disponibilizada pelo @pota. No inicio era um projeto para estudar a TFS 1.2, visto que sempre trabalhei com 0.3.6.
Fiquei maravilhado com a simplicidade e as possibilidades quase infinitas da base. Comecei a me dedicar mais e eventualmente nos tornamos um servidor sério.
O PokeFans possui diversos sistemas novos que foram implementados em cima da base POTA, muitos mesmos, seria incapaz de nomear todos neste post, então deixo o link do https://trello.com/b/ELrkzeTi/pokefans
O servidor era muito popular por um tempo, atingindo números bem altos para um Poketibia (100 ~ 120 players), mas eventualmente tivemos problemas sérios com lag,
não sei se por alguém atacando, conflito de código causado pela quantidade de mudanças que fiz, fato é que após muito buscar uma resposta, finalmente consegui resolver o lag, mas não sem antes perder certa de 70% da player base.
Junto à isso tive problemas pessoas sérios e tudo isso acabou me desmotivando bastante, entretanto, PokeFans pra mim foi uma ótima fase, fiz muitos amigos, tive bons momentos e aprendi ainda mais sobre lua, c++ e até esse HTML esquisito que usamos no OTC. Por isso não podia deixar a base mofando no meu drive, ela merece estar online e proporcionar bons momentos à todos.
E com esta longa carta introdutória, com vocês, PokeFans.
IMAGENS/SISTEMAS/CONTEUDO
DOWNLOAD
https://mega.nz/file/zVBVgKIZ#mfJZjw93ir3Rrpb05qfnafMMw9dlU3KJL9hLUQCXoV8
https://www.mediafire.com/file/ejry9qxpe71mkvz/pokefans.rar/file
SCAN
https://www.virustotal.com/gui/url/f5da18695fff6d14f92c75e6d211de27c450abc5c12bfe861466c6ee9ed37578/detection
https://www.virustotal.com/gui/url/d750e2fad1faab64b5f549c854ecddb03a27ff938e03981f0f696aa16eb4a818?nocache=1
(Deu flag ESTsecurity - Malicious, não faço ideia do que seja, se alguém puder me auxiliar no que seja)
OBSERVAÇÕES
Não prestarei suporte à base, entretanto, atuo como freelancer de luascript e modulos para OTC, você pode entrar em contato comigo pelo Discord: zayonowatari
Para abrir o mapa no Remeres você precisa de um SPR/DAT sem transparência, basta salvar sem transparência diretamente do object builder.
Caso você tenha gostado da base e tenha interesse em fazer uma doação, utilize essa chave pix: f3cb7525-2b8c-47f8-8db6-876c8cd68bde
CRÉDITOS
@pota - por todo o seu trabalho e humildade em disponibilizar sua base inicialmente, sem ela não estariamos aqui.
theforgottenserver - sem eles nenhuma base estaria aqui.
OTLand e Tibiaking - ambas as comunidades me auxiliaram a vida toda com todas as dúvidas que tive, respeito máximo à todos que fazem parte disso.
-
FlamesAdmin deu reputação a Qwizer em MercadoPago Retorno automatico (PIX)MercadoPago Retorno automatico (PIX)
Abaixo Segue código PHP de pagamento via pix pelo mercado pago com retorno para quem quiser adaptar em seus sites ter uma direção de onde ir
testado em Znote e MyAcc.
pix.zip
https://mega.nz/folder/m4QkWBLS#PIvJ_scVm7w8-5FLlStTHg
-
FlamesAdmin deu reputação a boxxer321 em [PROJETO] PokeTibia + GameBoy Advanced (?)Essa foto ta muito antiga, essas sao as mais recentes:
-
FlamesAdmin deu reputação a brunei em Shiny Ditto Memoryque bom que gostou mano, e obrigado pela dica com isso agora creio que esteja 100% , topico atualizado só trocar o sdittomemory.lua .
agora tem um cooldown de 2 segundos para trocar (configurável) e coloquei um bloqueio caso o pokemon nao esteja com o moveset 100% carregado.
-
FlamesAdmin recebeu reputação de brunei em Shiny Ditto MemoryCara, ficou simplesmente perfeito, um detalhezinho que faltou é um exaust pra não spammar as trocas
-
FlamesAdmin deu reputação a brunei em Shiny Ditto MemoryOlá galera bom dia , boa tarde e boa noite a todos !
venho trazer meu primeiro projeto para contribuir com o TK , se trata de um modulo bastante util
como é minha primeira vez trazendo algo aqui , talvez eu esqueça de algo , sem enrolação vamos la.
o modulo é um Shiny Ditto Memory para PDA ,o melhor é que nao precisa de source e é bem simples de instalar !
1° ponto - Adicionar o memory sistem por TalkAction do @zipter98 (fiz algumas correçoes e melhorias no script para funcionar de uma melhor forma com o modulo)
em Talkactions.xml adicione a tag : <talkaction words="/memory;!memory" event="script" value="sdittomemory.lua"/>
2° - Em talkaction/script ,crie um arquivo sdittomemory.lua e cole esse script :
em : local cd = 2 (em segundos) mude para o numero que desejar como cooldown para efetuar a troca .
Para efetuar a troca o pokemon precisa esta com os Moves 100% ,caso contrario ira mandar uma mensagem de bloqueio.
3° - em somefunctions.lua adicione essas funçoes !
tem umas correções q eu mesmo fiz no ditto system e shiny ditto system ,e é necessario pro modulo funcionar 100% .
4° - extraia e adicione o arquivo na pasta Modulos do seu OTClient !
pronto , com isso vai funcionar o modulo
1 - no icone salvar , vc consegue salvar o pokemon que o ditto esta transformado em cada slot (pokebola) e reverter o ditto.
2 - no icone check , vc consegue remover uma memoria ou checar quais memorias o seu ditto esta usando.
3 - e no icone transformar vc transforma em cada memoria salva no s.ditto e tbm consegue reverter para virar um pokemon novo sem usar a memori etc..
entao é isso galera , espero que seja util .
CREDITOS :
@zipter98
@usoparagames Eu
game_memory.rar
-
FlamesAdmin deu reputação a r0bert0lol em [8.60][OLD Client] Narutibia (NTO HARD) - Servidor CompletoGalera tópico atualizado, adicionei o banco de dados que eu estava utilizando.
Acabei de reinstalar o servidor para um colega, utilizei um Ubuntu 14.04 e tudo está funcionando 100 % ( A única coisa que faltava era o banco de dados )
Eu gostaria de organizar, montar um tutorial step-by-step ensinando como colocar o servidor Online porém estou sem tempo, mas posso garantir que não há problemas com os arquivos o pack está completo agora com o banco de dados.
Um Guia para você que não sabe por onde começar :
Consiga uma VPS de preferência utilize o Sistema Operacional em que o server foi testado ( Ubuntu 14.04 ) Atualize as libs da sua VPS e Instale : Apache + Mysql + PhpMyAdmin ( Você pode encontrar Tutoriais aqui no Fórum ) Configure / Importe um banco de dados no PhpMyAdmin ( Agora tem banco de dados disponível ) Gerencie os arquivos, coloque o servidor no diretório /home e o site no diretório /var/www e não esqueça de editar os arquivos config.lua e config.php Com todos os arquivos configurados e posicionados no local correto, seu site já deve estar funcionando. Compile o servidor ( Caso esteja usando ubuntu 14.04 já tem uma distro compilada ) para compilar ( Você pode encontrar Tutoriais aqui no Fórum ) Agora com site funcionando e distro rodando, você apenas precisará configurar o Client do servidor para se conectar. O Client funcionará apenas após trocar o IP do executável, voce pode usar ip changer ou usar um hex editor para alterar definitivamente. Agora com client redirecionando para o IP da sua VPS você já pode se conectar no game. dbresetada.sql
Estou pensando em fazer um vídeo tutorial no Youtube colocando Online o servidor em um Ubuntu,.
Nesse vídeo eu passaria algumas dícas para quem está começando a usar Linux e realizaria um passo a passo do que é necessário para você conseguir deixar o servidor Online em qualquer VPS.
Caso alguém se interesse, deixa um Rep + Aí que assim que surgir um tempo eu gravo o vídeo para vocês.
-
FlamesAdmin recebeu reputação de S H I O N em Alguem sabe como coloca cooldown na pokebola ? (veja o exemplo abaixo)actions/goback, acima da função:
function onUse(cid, item, frompos, item2, topos) pule uma linha e acima adicione:
local exausted = 2 local STORAGE_EXAUSTED = 918312 Procure por:
if item.itemid == usando then E logo abaixo você irá encontrar por:
doReturnPokemon(cid, z, item, effect) Acima dessa linha adicione:
setPlayerStorageValue(cid, STORAGE_EXAUSTED, os.time() + exausted) Agora procure por:
local pokemon = getItemAttribute(item.uid, "poke") Pule 1 linha e adicione acima:
if getPlayerStorageValue(cid, STORAGE_EXAUSTED) > os.time() then return doPlayerSendCancel(cid, string.format("Desculpe, não é possivel. (%d segundo%s)", getPlayerStorageValue(cid, STORAGE_EXAUSTED) - os.time(), (getPlayerStorageValue(cid, STORAGE_EXAUSTED) - os.time()) > 1 and "s" or "")) end
Tenta assim.
-
FlamesAdmin deu reputação a GamerGoiano em como coloca mini mapa igual ou semelhante ao otpokemon que ta pra abri o mapa e ver todas as citis1. Copie o arquivo items.otb e o mapa.otb do seu tfs e coloque dentro da pasta DATA do seu otclient.
2. Abre o terminal (CTRL T) e digite 1 de cada vez:
g_things.loadOtb('items.otb')
g_map.loadOtbm('ots.otbm')
Vai dar um lag e o mapa vai ficar explorado.
Depois que o mapa ficar explorado, basta copiar o arquivo que salva o mapa explorado para não precisar deixar seu otb e otbm na pasta do Otclient
-
FlamesAdmin deu reputação a ZenohXX em Base PokeWish + PokelightOlá, contextualizando, para quem não me conhece, por algum tempo trabalhei em um servidor de poketibia chamado Pokelight.
Utilizamos a base, que compramos, do PokeWish parar criar nosso servidor Pokelight, mas com o tempo a staff acabou optando por tomar outros rumos, tanto profissionais quanto pessoais e acabou que não fazia mais sentido continuarmos com o projeto.
Sabendo do potencial dessa base e da paixão que ainda tenho por poketibia, na esperança de que surja um servidor bacana com esta base, venho disponibilizar todos os arquivos do servidor.
Vídeos do projeto
Em breve farei alguns tutoriais e observações de como fazer o melhor uso possível dos arquivos e disponibilizarei mais recursos usados durante o projeto, além de dar suporte a solução de problemas aqui neste tópico.
Utilize Ubuntu 20.04 para executar o servidor.
Servidor:
Link para download (Servidor Wish, cliente Wish, ferramentas e sources): https://drive.google.com/file/d/14Kl7Bw86Y9Cm1GPy-BUuDJSYqHBUCdGV
Link para download (RME): https://drive.google.com/file/d/1bwAcuhkRxF2RZ_rcpvSOvxExrWE9oMDC
Link para download (Cliente Pokelight): https://drive.google.com/file/d/1PFUp7grPXcV2enUp3Og7BO9LFnSjs5Il
Link para download (Servidor Pokelight última versão): https://drive.google.com/file/d/1057SbzLui7uOXcxJMoc5yaa3_9F8O-os/
Scan: Arquivos passam de 700MB, não é possível fazer o scan.
-
FlamesAdmin deu reputação a Under em Tutorial Iniciantes [Linguagem Lua] Get FunctionsIniciantes
?Quer ser bom pratique!Quer ser muito bom? pratique muito!, use as areas sem exemplos para treinar e aprenda neste topico a criar funções!
Como eu sei oque é uma função?
sempre que você encontrar algo assim "blablabla()" isso é uma função
assim como "() =>" isso é uma função, assim como "function ()" isso é uma função,
dentro de uma função podemos passar instruções então abrimos chaves {} aqui no lua é o then.
Beleza agora que você sabe oque é uma função continue!
Sobre
Lista com quase todas as funções disponíveis.
você sera capaz de :
Ler pequenas instruções para funções. Usar as instruções. Usar um retorno de uma função Introdução a ["get" function]
A baixo existe uma lista com a função e a sua explicação. Essas funções devem sempre retornar a string ou o valor pedido. getPlayerFood(cid) Essa função vai verificar a quantos segundos o players esta com a propriedade em um food.
Ajude esse tópico a ficar 100% com um exemplo e treine suas habilidades.
getCreatureHealth(cid) Essa função vai checkar a quantidade da vida da criatura.
Ajude esse tópico a ficar 100% com um exemplo e treine suas habilidades.
getPlayerMaxMana(cid) Essa função vai retornar a quantidade maxima de mana
Ajude esse tópico a ficar 100% com um exemplo e treine suas habilidades.
getPlayerLevel(cid) Essa função vai pegar o level atual de jogador
Ajude esse tópico a ficar 100% com um exemplo e treine suas habilidades.
getPlayerMagLevel(cid) Essa função vai pegar o magic level atual de um jogador
Ajude esse tópico a ficar 100% com um exemplo e treine suas habilidades.
getPlayerName(cid) Essa função pega o nome de um jogador
Ajude esse tópico a ficar 100% com um exemplo e treine suas habilidades.
getPlayerAccess(cid) Essa função verifica o acesso de um jogador
Ajude esse tópico aoficar 100% com um exemplo e treine suas habilidades.
getPlayerPosition(cid) Essa função verifica a posição de um player
Ela vai retornar um Array (Se você não sabe oque é um Array use o SLAD Search Like a Dev e abra o google)
Exemplo de retorno {x = 127, y = 7, z = 9, stackpos = 1} {x = 396, y = 582, z = 13, stackpos = 2} quando o player estiver em cima de um item stackpos = 2 Exemplo de uso local playerPos = getPlayerPosition(cid)--Armazenando a função em uma variavel com a posição do jogador doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your current position is [X: "..playerPos.x.." | Y: "..playerPos.y.." | Z: "..playerPos.z.."].") getPlayerSkill(cid, skillid) Essa função vai verificar a skill de um jogador Sendo esses os ids das skills que podem ser usados: 0 = Fist Fighting 1 = Club Fighting 2 = Sword Fighting 3 = Axe Fighting 4 = Distance Fighting 5 = Shielding 6 = Fishing Exemplo de uso if getPlayerSkill(cid, 2) >= 20 then -- Verificando se a skill Sword é maior que 20 doPlayerAddItem(cid, 2376, 1) -- Se sim adicionando uma Sword como recompensa else --Se não você ainda não tem skill 20 doPlayerSendCancel(cid, "Sorry, your sword skill is not high enough.") end getPlayerTown(cid) Essa função vai verificar a cidade atual de um jogador Exemplo de uso local playerPos = getCreaturePosition(cid) -- Ja aprendemos a utilizar se não se lembra para pegarmos a posição do jogador ali em cima if getPlayerTown(cid) == 1 then -- Verificamos se a cidade atual do jogador é igual a 1 -- Se sim Verificando na posição do jogador uma string , e um numero que representa a textColor ou o seu nome de efeito TEXTCOLOR_GOLD doSendAnimatedText(playerPos, 'I am leaving in town with id: 1 (Main City)! :)', TEXTCOLOR_GOLD) elseif getPlayerTown(cid) == 2 then -- Verificando se a cidade atual é igual a 2 doSendAnimatedText(playerPos, 'I am leaving in town with id: 2 (Desert City)! :)', TEXTCOLOR_GOLD) end getPlayerVocation(cid) Essa função retorna o id da vocação Exemplos de uso local playerVoc = getPlayerVocation(cid) -- colocando a função em uma variavel if playerVoc == 1 or playerVoc == 5 then --Se a vocação é Sorcerer ou Master Sorcerer then weapon = Wand weapon == 2190 --Wand of vortex elseif playerVoc == 2 or playerVoc == 6 then --Se a vocação é == Druid ou Elder Druid then weapon = Rod weapon == 2182 --Snakebite Rod elseif playerVoc == 3 or playerVoc == 7 then --Se a vocação é == Paladin ou Royal Paladin then weapon = Spear weapon == 2389 --Spear elseif playerVoc == 4 or playerVoc == 8 then --Se a vocação é == Knight ou Elite Knight then weapon = Sword weapon == 2412 --Katana end doPlayerAddItem(cid, weapon, 1) -- usando a storage do weapon para retornar a arma a ser adicionada getPlayerItemCount(cid,itemid) Essa função vai verificar quantos item == itemid o jogador possui no momento
Exemplos de uso local crystalCoins = getPlayerItemCount(cid, 2160) -- Declarada a variavel crystalCoins que vai verificar se o jogador possui o id 2160 local platinumCoins = getPlayerItemCount(cid, 2152) -- Declarada a variavel pplatinumCoins que vai verificar se o jogador possui o id 2152 local goldCoins = getPlayerItemCount(cid, 2148) -- O mesmo para o gold coin -- agora criamos uma variavel money que é igual rystalCoins * 10000 + platinumCoins * 100 + goldCoins money = crystalCoins * 10000 + platinumCoins * 100 + goldCoins -- então imprimimos para o jogador usando cid, msg doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Your money: " ..money.. "gp") getPlayerFreeCap(cid) -- Essa função verifica quanto de cap disponivel o jogador ainda tem Exemplo de uso local playerCap = getPlayerFreeCap(cid) -- armazenando a função que verifica o cap na variavel playerCap local item = 2393 --Giant Sword local itemweight = getItemWeight(item, 1) -- nova função usada para pegar o peso do item if playerCap >= itemweight then -- verificando se o cap é maior que o pseo do item -- caso seja adiciona o item e manda uma mensagem doPlayerSendTextMessage(cid,22,'You have found a giant sword.') doPlayerAddItem(cid,item,1) else -- senão não possui cap doPlayerSendTextMessage(cid, 22, 'You have found a ' .. item .. 'weighing ' ..itemweight.. ' oz it\'s too heavy.') getPlayerLight(cid) Retorna a luz atual de um jogador Exemplo 215 - Depois de usar a spell "utevo gran lux" getPlayerSlotItem(cid, slot) Essa função verifica qual item o jogador esta equipado os slots que podem ser verificados são 1 = helmet 2 = necklace slot 3 = backpack, bag 4 = armor 5 = left hand 6 = right hand 7 = legs 8 = boots 9 = ring slot 10 = ammo slot Essa função tambem retorna uma Array de um slot Por exemplo: {itemid = 2493, uid = 70001, actionid = 0} (demon helmet, slot = 1) Exemplo de uso
-- Aqui passamos o paremetro do slot e verifica com o itemid que desejar if getPlayerSlotItem(cid, 2) == 2173 then -- Verificando se tem aol doPlayerSendTextMessage(cid,22,'Ok, you can go.') else doPlayerSendTextMessage(cid,22,'Sorry, you need amulet of loss to go.') doTeleportThing(cid, fromPosition, TRUE) end getPlayerDepotItems(cid, depotid) Essa função vai verificar quanto slots e item e a sua quantidade o jogador tem no depot (slots reserved, becouse 10cc = 1 slot) xx player tem no depot exemplo de retorno 7 - quando ojogado - sword - rope - 100 uh - parcel (inside: 10 crystal coins + label) - depot chest (standard, all players have it) Exemplo de uso depotItems = getPlayerDepotItems(cid, 3) -- Verificando o depot na cidade 3 if depotItems < 2 then --quando o depot conter menos que 2 items então doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Your depot contains 1 item.") else --se não o deposit contem a quantidade de item retornada doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Your depot contains " ..depotItems.. " items.") end getPlayerSex(cid) Essa função retorna o sexo de um jogador
Retorno 0 - female 1 - male Exemplo de uso i f getPlayerSex(cid) == 0 then --female doSendAnimatedText(playerPos, 'GiRl :*:*', TEXTCOLOR_GOLD) elseif getPlayerSex(cid) == 1 then --male doSendAnimatedText(playerPos, 'Wtf? I aM BoY.', TEXTCOLOR_GOLD) else -- Caso não tenha sexo doSendAnimatedText(playerPos, 'Wtf? I aM BoY.', TEXTCOLOR_GOLD) end getPlayerLookDir(cid) Esta função retorna a direção que o jogador esta olhando
Retorno 0 - jogador esta olhando (north) (/\) 1 - jogador esta olhando (east) (>) 2 - jogador esta olhando (south) (\/) 3 - jogador esta olhando (<) Exemplo de uso local direction = getPlayerLookDir(cid) -- armazenando a direção que o player esta olhando na variavel direction if direction = 0 then --quando for north doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "You are looking to north") elseif direction = 1 then --quando for east doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "You are looking to east") elseif direction = 2 then --quando for south doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "You are looking to south") else --quando for west doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "You are looking to west") end getPlayerGUID(cid) Essa função deve retornar o id de um jogador Retorno Player.id de uma chamada de retorno then return = -1 Exemplo DE USO - Imprimito o texto no channel default com uma 'string retornando o id do jogador com a função getPlayerGUID()' doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "You are player with id: "..getPlayerGUID(cid)) getPlayerFlagValue(cid, flag) Para saber quais flags existem procure src/const.h Essa função retorna o valor de uma flag 1 quando verdadeiro 0 quando false (evento) Exemplo de uso -- Setando a variavel flagValue com a função getPlayerFlagValue(cid, id da flag) flagValue = getPlayerFlagValue(cid, 32) -- flag 32 = "Pode sumonar todos os mosntros" if flagValue = 1 then --se flag = 1 ou seja se pode sumonar. se for igual a 32 doSummonCreature("Demon", fromPosition.x + 1) -- Sumonar demon 32 = true else -- senão ou seja, se flag 32 = false doSummonCreature("Rat", fromPosition.x + 1) -- sumon rat 32 = false end getPlayerGroupId(cid) Essa função vai checar o group-id do jogador Exemplo de uso local group = getPlayerGroupId(cid) -- armazenando a função que capturar o groupid na variavel group if group == 3 --se for God só Exemplo doPlayerAddItem(cid,2160,100) --usando a função doPlayerAddItem para adicionar 100 crystal coins elseif group == 2 --se For Gamemaster só Exemplo doPlayerAddItem(cid,2160,50) --usando a função doPlayerAddItem para adicionar 50 crystal coins else -- senão chora nb doPlayerSendCancel(cid, "Sorry, cheats doesnt work for you." end getPlayerGuildId(cid) Essa função vai verificar o id da guild do jogador Exemplo de uso -- Armazenando a função que capturar o id da guild do jogador na varial guildId local guildId = getPlayerGuildId(cid) if guildId == 21 then -- se o jogador possuir 21 então doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR,"Welcome in!") -- 21 = true elseif guildId == 22 then -- se for diferente de 21 então doPlayerSendCancel(cid,"This area is not for your guild") -- 21 != true end getPlayerGuildName(cid) Essa função vai verificar o nome da guild de um jogador Exemplo de uso -- Armazenando a função que captura o nome da guild do jogador na variavel guildName local guildName = getPlayerGuildName(cid) -- mandando um animação de texto na posição atuao da criatura (cid = creatureID), concatenando com guildName ou seja a função da primeira linha e a cor gold doSendAnimatedText(getCreaturePosition(cid),guildName, TEXTCOLOR_GOLD) getPlayerGuildRank(cid) Essa função verifica o cargo que o jogador possui na guildName Exemplo de uso -- Armazenando a função que captura o cargo de um jogador da guild que ele possui local rank = getPlayerGuildRank(cid) -- inviando uma text message par ao jogador informando ele o rank na guild usando a concatenação .. variavel .. doPlayerSendTextMessage(cid,MESSAGE_INFO_DESCR,"You're a " .. rank .. " in your guild.") -
FlamesAdmin deu reputação a luanluciano93 em [TFS 1.5 - 8.60] STYLLER OT - 2023STYLLER OT - 2023 - TFS 1.5 (8.60)
Olá pessoal, hoje venho apresentar meu projeto open para vocês. Sou muito fã do mapa STYLLER, sempre em horas vagas procurava joga-lo, para quem não conhece: é um servidor estilo baiak com mais RPG, e como tenho me interessado pelas engines 1.X, resolvi criar um projeto de servidor Styller usando o TFS 1.5 para versão 8.60. O projeto está sendo desenvolvido no github (projeto github) onde posto atualizações diárias (changelog). Vocês podem postar dúvidas, erros/bugs, dicas e qualquer outra coisa aqui no tópico ou criar um issue no github. Lembre-se de dar FOLLOW no projeto no github e SEGUIR o projeto aqui no fórum para acompanhar as atualizações.
Informações do Servidor e Sistemas:
Versão: 8.60 Engine: TFS 1.5 MillhioreBT Downgrade - Branch: main (Nov 11, 2023, 104 commits) Informações. Atualizações. Server Info:
Dúvidas, erros, dicas e contribuições:
Caso tenha dúvidas, ou queira resolver algum bug/erro, dar dicas para o projeto, ou também ajudar em sua construção, crie um issue / pull requests pelo github ou use esse tópico.
Website compatível:
ZnoteACC - ranch: v2 (Jul 10, 2022, 613 commits) Créditos:
luanluciano93 GOD Bon (mapa yourots) MillhioreBT, Nekiro e TFS team (pela engine do servidor) leoloko12 (mapa styller) outros Download:
Todos os arquivos, libs e executável (para windows) estão no repositório do projeto no github (que é onde eu atualizo constantemente), basta fazer o download lá e juntar com a primeira parte.
- LINK GITHUB DO PROJETO STYLLER: https://github.com/luanluciano93/styller
Clique em CODE e depois Download ZIP
Imagens:
-
FlamesAdmin deu reputação a Denker em (POKETIBIA) First PokémonAo clicar em um baú o player receberá o pokémon, ao ser teleportado para a cidade inicial ele ganhará um kit.
OBS: Script desenvolvido para Ot's aonde não há opção de escolha para cidade inicial, sempre será a mesma.
Em Data/Actions/Script, crie um arquivo.lua e coloque:
-- Developed by: Denker local configs = { position = {x = , y = , z = }, -- Localização que o player será teletransportado level = 8, -- Level minimo item = { [1] = {id = , count = }, -- Item que será entregue [2] = {id = , count = }, }, pokemons = { [] = "Charmander", -- Pokémons a se escolher e os ID item que será correspondente a cada poke [] = "Bulbasaur", [] = "Squitler", } } function onUse(cid, item) local first_Pokemon = configs.pokemons[item.itemid] if getPlayerLevel(cid) >= configs.level then for i = 1, #configs.item do doPlayerAddItem(cid, configs.item[1].id, configs.item[1].count) end addPokeToPlayer(cid, first_Pokemon,nil,"normal") doTeleportThing(cid, configs.position) doPlayerSetTown(cid,ID) -- Seta a cidade inicial no player doPlayerSendTextMessage(cid, 27, "Você pegou "..first_Pokemon.." como seu primeiro pokémon, boa sorte em sua jornada") -- Mensagem enviada após pegar escolher o pokémon else doPlayerSendTextMessage(cid, 27, "Você não pode pegar este Pokémon") -- Mensagem caso o player não tenha o requisito end return true end
Em Data/Action/action.xml, coloque:
<action itemid="ItemID" event="script" value="arquivo.lua"/>
-
FlamesAdmin deu reputação a Black Frost21 em Alterar a descrição do item@FlamesAdminNão encontrei nos arquivos do servidor, mas nos arquivos fonte, mas Rep + para você
-
FlamesAdmin recebeu reputação de Cat em [10.98][TFS 1.2] PokeDash Pota v1.0 - Server, Client, Sources, Site, Map editor e Item editorUm PokeFlash em 10.98
-
FlamesAdmin deu reputação a L3K0T em Torneio System Completo 4 vezes ao dia + NPC + RANK apenas PARA SITEBom pessoal eu resolvi compartilhar o meu sistema de torneio para poketibia que fiz para meu projeto, ele tem a função de ocorrer 4 vezes ao dia....Falando apenas com o 1 NPC Nick da cidade aonde você por....
Como funciona ? Mata todos e o ultimo que sobrar na arena de batalha é o ganhador!
1° Pasta LIB copie um arquivo e deverá renomear para torneio ficando torneio.lua apaga tudo que tem dentro e add
torneio = { awardTournament = 2148, ---moeda usada para entra no torneio-- awardAmount = 1000, -- quantidade de moeda que o player vai ganhar ao vencer o torneio-- playerTemple = {x = 893, y = 499, z = 15}, --pra onde vai o player quando morrer ?-- tournamentFight = {x = 894, y = 538, z = 15}, --centro da arena torneio combate-- area = {fromx = 866, fromy = 508, fromz = 15, tox = 922, toy = 572, toz= 15},--canto acima direito da arena combate-canto esquerdo abaixo da arena combate-- waitPlace = {x = 969, y = 544, z = 15}, --centro da sala de espera-- waitArea = {fromx = 957, fromy = 536, fromz = 15, tox = 983, toy = 552, toz= 15}, --canto esquerdo acima da sala de espera--canto abaixo esquerdo da sala de espera-- startHour1 = "07:50:00", --horario do aviso?-- endHour1 = "08:00:00",--horario que começa?-- startHour2 = "11:50:00",--horario do aviso?-- endHour2 = "12:00:00",--horario do aviso?-- startHour3 = "17:50:00",--horario do aviso?-- endHour3 = "18:00:00",--horario do aviso?-- startHour4 = "22:50:00",--horario do aviso?-- endHour4 = "23:00:00",--horario do aviso?-- price = 500,--valor para entrar no torneio ? 500 dollar no caso-- revivePoke = 12344,--aqui é revive se tiver e se não tiver não precisa mexer-- } function getPlayersInArea(area) local players = {} for x = area.fromx,area.tox do for y = area.fromy,area.toy do for z = area.fromz,area.toz do local m = getTopCreature({x=x, y=y, z=z}).uid if m ~= 1 and isPlayer(m) then table.insert(players, m) end end end end return players end apaga os coments do scripts acima com --blablabla--
2° GLOBALEVENTS vá na pasta globalevents/scripts copia um arquivo que voc?ê deverá renomear para torneio ficando torneio.lua e add
function onTime() if #getPlayersInArea(torneio.area) > 1 then doBroadcastMessage("O Torneio dessa vez não teve vencedor, tente na proxima vez") return true end for _, pid in ipairs(getPlayersInArea(torneio.waitArea)) do puxar = math.random(-2, 2) doTeleportThing(pid, {x = torneio.tournamentFight.x + puxar, y = torneio.tournamentFight.y + puxar, z = torneio.tournamentFight.z}) end doBroadcastMessage("O torneio Iniciou!") return true end ou dependendo do tfs pode ser
function onTimer() if #getPlayersInArea(torneio.area) > 1 then doBroadcastMessage("O Torneio dessa vez não teve vencedor, tente na proxima vez") return true end for _, pid in ipairs(getPlayersInArea(torneio.waitArea)) do puxar = math.random(-2, 2) doTeleportThing(pid, {x = torneio.tournamentFight.x + puxar, y = torneio.tournamentFight.y + puxar, z = torneio.tournamentFight.z}) end doBroadcastMessage("O torneio Iniciou!") return true end
agora em globalevents.xml add as tag
<globalevent name="TournamentStart1" time="08:00" event="script" value="torneio.lua"/> <globalevent name="TournamentStart2" time="12:00" event="script" value="torneio.lua"/> <globalevent name="TournamentStart3" time="18:00" event="script" value="torneio.lua"/> <globalevent name="TournamentStart4" time="23:00" event="script" value="torneio.lua"/>
ou
<globalevent name="TournamentStart1" timer="08:00" event="script" value="torneio.lua"/> <globalevent name="TournamentStart2" timer="12:00" event="script" value="torneio.lua"/> <globalevent name="TournamentStart3" timer="18:00" event="script" value="torneio.lua"/> <globalevent name="TournamentStart4" timer="23:00" event="script" value="torneio.lua"/>
ainda em globalevents vá em globalevents/scripts copie outro arquivo e renomeia para, msgtorneio ficando msgtorneio.lua e add
local i = { ["07:50"] = {nome = "O Torneio vai começar em 10 minutos, fale com o NPC Nike no CP de sua cidade, vai custar 500 Dollar's para participar!"}, ["07:55"] = {nome = "Faltam 5 minutos para fechar as inscrições do torneio!"}, ["07:59"] = {nome = "As inscrições do Torneio fecharam!"}, ["11:50"] = {nome = "O Torneio vai começar em 10 minutos, fale com o NPC Nike no CP de sua cidade, vai custar 500 Dollar's para participar!"}, ["11:55"] = {nome = "Faltam 5 minutos para fechar as inscrições do torneio!"}, ["11:59"] = {nome = "As inscrições do Torneio fecharam!"}, ["17:50"] = {nome = "O Torneio vai começar em 10 minutos, fale com o NPC Nike no CP de sua cidade, vai custar 500 Dollar's para participar!"}, ["17:55"] = {nome = "Faltam 5 minutos para fechar as inscrições do torneio!"}, ["17:59"] = {nome = "As inscrições do Torneio fecharam!"}, ["22:50"] = {nome = "O Torneio vai começar em 10 minutos, fale com o NPC Nike no CP de sua cidade, vai custar 500 Dollar's para participar!"}, ["22:55"] = {nome = "Faltam 5 minutos para fechar as inscrições do torneio!"}, ["22:59"] = {nome = "As inscrições do Torneio fecharam!"}, } function onThink(interval, lastExecution) hours = tostring(os.date("%X")):sub(1, 5) tb = i[hours] if tb then doBroadcastMessage(hours .. " - " .. tb.nome .. "") end return true end agora as tag globalevents.xml add
<globalevent name="msg torneio" interval="60000" event="script" value="msgtorneio.lua"/>
pronto agora vamos mexer com actions...
3° ACTIONS para o player receber a recompensa... vá em actions/scripts copie um arquivo lá e renomeia para torneio ficando torneio.lua e add
function onUse(cid, item) local torneios = 1 if #getCreatureSummons(cid) >= 1 then doPlayerSendCancel(cid, "Volte seu pokémonDBR!") else if #getPlayersInArea(torneio.area) > 1 then doPlayerSendTextMessage(cid, 20 ,"Só o ultimo que ficar na arena, poderá abrir está porta! ") return true end doTeleportThing(cid, torneio.playerTemple) doBroadcastMessage("[Torneio] Parabéns ao treinador "..getCreatureName(cid).." foi o ganhador do torneio de hoje, verifique o rank em nosso site www.seusite.com!") doPlayerAddItem(cid,2148,300) addTopt(cid, torneios) doPlayerSendTextMessage(cid,MESSAGE_EVENT_ORANGE,"[Torneio] Você já venceu "..(getTopt(cid,torneio)).."x, Parabéns.") doPlayerAddItem(cid, torneio.awardTournament, torneio.awardAmount) return true end end agora a tag de actions.xml add
<action uniqueid="18279" event="script" value="torneio.lua"/>
*18279 é unique ID que vc terá que por numa porta alavanca o que for pra depois o ultimo player clicar...
4° NPC vá na pasta npc/scripts copia um arquivo e você deverá renomear para torneio ficando torneio.lua e add
local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid if msgcontains(msg, 'torneio') or msgcontains(msg, 'enter') then if getPlayerItemCount(cid, torneio.revivePoke) >= 1 then selfSay('Voce nao Pode entrar no torneio com {revives}, por favor guarde eles e volte a falar comigo novamente.', cid) return true end selfSay('Voce quer Participar no torneio por '..torneio.price..' de Dollars?', cid) talkState[talkUser] = 2 elseif talkState[talkUser] == 2 then if msgcontains(msg, 'yes') or msgcontains(msg, 'sim') then if os.date("%X") < torneio.startHour1 or os.date("%X") > torneio.endHour1 then if os.date("%X") < torneio.startHour2 or os.date("%X") > torneio.endHour2 then if os.date("%X") < torneio.startHour3 or os.date("%X") > torneio.endHour3 then if os.date("%X") < torneio.startHour4 or os.date("%X") > torneio.endHour4 then selfSay('As inscrições para o torneiro ainda não abriram, volte ás 07:50 AM, 11:50 AM, 17:50 AM ou ás 22:50 PM todo os dias', cid) return true end end end end if doPlayerRemoveMoney(cid, torneio.price) then doTeleportThing(cid, torneio.waitPlace) doPlayerSendTextMessage(cid, 21, "Bem vindo, esta e a sala de espera, voce espera aqui enquanto o torneio nao começa.") else selfSay('Voce não tem ('..torneio.price..') Dollars.', cid) end else selfSay('Certeza que voce não quer Participar? Ok, ate a Proxima', cid) talkState[talkUser] = 0 end end end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) bom agora volte um pasta e copia um arquivo.xml e renomeia para torneio ficando torneio.xml e add
<?xml version="1.0" encoding="UTF-8"?> <npc name="Nick" script="torneio.lua" walkinterval="999000" floorchange="0"> <health now="150" max="150"/> <look type="1245" head="20" body="100" legs="50" feet="99" corpse="2212"/>] <parameters> <parameter key="message_greet" value="Ola |PLAYERNAME|. Sou o NIKE, Encarregado pelo Torneio diario caso queira entrar diga: {torneio}."/> </parameters> </npc> 5° importa para seu mysql o código
ALTER TABLE `players` ADD `torneio` int(11) NOT NULL default '0'; agora a vá na pasta lib copia um arquivo.lua e renomeia para torneio e add ficando torneio.lua
function getTopt(cid) local check4 = db.getResult("SELECT `torneio` FROM `players` WHERE `id` = " .. getPlayerGUID(cid) .. " LIMIT 1") return check4:getDataInt("torneio") <= 0 and 0 or check4:getDataInt("torneio") end function addTopt(cid,amount) db.executeQuery("UPDATE `players` SET `torneio` = "..getTopt(cid).."+"..amount.." WHERE `id` = "..getPlayerGUID(cid)) end function removeTopt(cid,amount) db.executeQuery("UPDATE `players` SET `torneio` = "..getTopt(cid).."-"..amount.." WHERE `id` = "..getPlayerGUID(cid)) end function setTopt(cid,value) db.executeQuery("UPDATE `players` SET `torneio` = "..value.." WHERE `id` = "..getPlayerGUID(cid)) end 6° pronto torneio 4 vezes ao dia + npc + rank para site como usar o rank no site ? vai em htdocs/template/seulayout/index.tpl e add em algum lugar lá
<div class="top-box"> {include_php file='torneio.php'} </div>
agora vá em htdocs criar um novo text com nome torneio.php e add
<?PHP //** Connection to the database **// $ots = POT::getInstance(); $ots->connect(POT::DB_MYSQL, connection()); $SQL = POT::getInstance()->getDBHandle(); //** Top Players + online status By Kavvson **// $money_list = $SQL->query('SELECT name,torneio FROM players ORDER BY torneio DESC LIMIT 5')->fetchAll(); $i = 1; foreach($money_list as $money_chr){ echo '<center>'; echo $i.'. <a href="/pt/index.php/character/view/'.urlencode($money_chr['name']).'">'; $player = $ots->createObject('Player'); $player->find($money_chr['name']); echo '<font color="'; echo ($player->isOnline()) ? 'green' : 'green'; echo '">'; echo ''.$money_chr['name'].'</b></a></font>'; echo' Torneio Ganhos: '.$money_chr['torneio'].'</B>'; $i++; } for( $i; $i <= 1; $i++ ){ echo $i.'. <br><i>Empty</i><br /><br />'; } echo '</center>';
isso ai pessoal é completo eu fiz pro meu PokémonDBR que tinha fechado então resolvi compartilhar.... qualquer copia favor bote devido créditos e não quero ver ninguém vendendo meu scripts....
Créditos a mim... qualquer dúvida falando que não sou o dono aqui minha página da PokémonDBR e agora somos otPokémon World Online http://facebook.com/otpwonline
-
FlamesAdmin recebeu reputação de Gabuno em Como trocar Client PoketibiaVocê precisa atualizar ou instalar seu driver de vídeo para que rode no OpenGL
E obviamente o PSOUL bloqueia caso não seja o próprio executável do client dele.
-
FlamesAdmin deu reputação a pota em [10.98][TFS 1.2] PokeDash Pota v1.0 - Server, Client, Sources, Site, Map editor e Item editorDesenvolvi por muito tempo uma base Pokémon do 0 (parti do TFS 1.2 e fui implementando tudo até chegar nessa versão que estou disponibilizando). O resultado é um servidor extremamente leve e estável (já testado com 100+ players e por mais de 1 mês sem cair). Basicamente, ele suporta tranquilamente 1k+ players e não tem nenhum bug conhecido que faça com que ele caia.
Esse servidor ficou no ar por muito tempo (mais de 2 anos) e era conhecido como PokeDash. Acabei ficando sem tempo para administrar o servidor, o que fez com que a maioria dos players parassem de jogar e com que eu fechasse de vez.
Pensei por muito tempo sobre o que fazer com ele, e decidi disponibilizar para a comunidade. Trata-se de algo único (eu ao menos nunca vi um servidor de Pokémon construído a partir do TFS 1.2)!
Como desenvolvi todos os sistemas do 0, tomei cuidado para fazer tudo da melhor maneira possível e para que possa ser facilmente modificado e atualizado. Basicamente, os Pokémons podem ser criados a partir de um único arquivo XML (como monstros do Tibia), e nesse arquivo você pode especificar tudo, desde level máximo e mínimo de spawn, loots, tipos (fogo, agua, etc), se ele pode usar habilidades (surf, fly, etc), moves (quando alguém captura), ataques (quando selvagem), evoluções, chance de catch, etc.
Exemplo de Pokemon
Resumo de alguns sistemas (tem muita coisa, então coloquei os principais)
✅ Pokemons com level, status e boost. O level do player/boost também influencia no status dos pokes.
✅ Sistema de Love (seu poke fica mais forte que os demais quando upa de level matando pokemons mais fortes que ele).
✅ Base propria com Shinys e Ancients.
✅ Cada player pode conseguir ancient stone para evoluir 1 shiny para ancient através de quest.
✅ Moves bar e pokemon bar (troca de pokemon com 1 click).
✅ Autoloot agrupando em bags.
✅ Ganho de exp ao capturar/dar dex em pokes com um bonus adicional para o primeiro catch de cada poke.
✅ Mapa original com mais de 40 quests, incluindo outland com Ancients.
✅ Eventos diários automáticos: Futebol todo dia 19:30, arena PVP todo dia 20:00, golden arena aos sabados 17:00, bag premiada aos domingos/feriados 17:00.
✅ Profissões (facilmente customizáveis):
Catcher: 3.5% mais chance de capturar um Pokemon. Hunter: 10% mais status de dano para o seu Pokemon (tanto magico quanto fisico). Blocker: 25% mais vida para seus Pokemons. Healer: 100% mais cura que aplica tanto em potions quando moves dos seus Pokemons. Explorer: 15% mais experiencia para seu personagem durante a caça. ✅ Task diária de catch/loot dando Tokens. Os tokens podem ser trocados por itens raros (dentre eles premier ball e bags personalizadas) além de pagar seu curso com o NPC Job Manager para aprender uma das profissões acima. Uma das maneiras de conseguir tokens é fazendo tasks diárias.
✅ Muito mais!
Screenshots
Download
Baixe o pack contendo o servidor, cliente, site, editor de mapa e editor de itens clique aqui!. Caso considere minha contribuição interessante para a comunidade, considere realizar uma doação para a chave pix: [email protected]
GM account: gm/gmgmgm
O projeto será atualizado em sua homepage: https://pokedashpota.vercel.app/
SCAN
---EDIT---
Download sources
SCAN
Problemas e soluções
GroupID não existe ao tentar logar no server.
Erros ao importar o schema.sql.
Comando /cb não funcionando:
-
FlamesAdmin deu reputação a
Alexv45em Telara Layout Znote AAC + Ascar Layout Znote AACOlá
Venho compartilhar o Layout Telara & Ascar para Znote ACC, as páginas são todas funcionais
Telara Layout Vivo: Veja aqui
Ascar Layout Vivo: Veja aqui
download telara: GitHub
download ascar: GitHub
E muitos outros temas por vir, quando eu tiver tempo farei mais
Telara
Ascar
-
FlamesAdmin deu reputação a Cat em Telhado Venore do Tibia Completo (81 peças)Veja também: • Telhado Clássico do Tibia Completo [191 peças]
TIBIA - TELHADO VENOREAN
Estou disponibilizando esse jogo de telhados do Tibia com as peças que faltam.
(ainda faltam algumas mas da pra usar de forma completa desse jeito).
Façam bom uso!
Download:
Venorean_roofs_by_nolis.rar
Conteúdo do pack:
-
FlamesAdmin deu reputação a FlameArcixt em Remeres Map Editor (3.3) Em grupo (LIVE)??
A muito tempo eu procuro um Remere's map editor com a opção Live funcional (Mapear em grupo), no dia (28/02/2021) o membro @WooX me apresentou esse Editor que possui essa opção funcional, hoje venho compartilhar aqui no Tibiaking, Mesmo que não seja relevante.
⛔ Não vou ensinar a instalação, pois é igual em todos os editor, e já existem vários tutoriais de instalação no TibiaKing. ⛔
? Passo 1: Baixando/Usando Radmin (Necessário para quem não consegue abrir as portas do roteador/modem) ?
? Passo 2: Hosteando uma partida no Remere's Map Editor ?
? Passo 3: Entrando na live de alguém ?
Demonstração em ação (Ignorem a musica)
? DEMONSTRAÇÂO ?
⚠️ DOWNLOAD REMERES MAP EDITOR 3.3: LINK ⚠️
⚠️ DOWNLOAD RADMIN: LINK ⚠️
-
FlamesAdmin deu reputação a Diego Rulez em Instalando Site e Compilando Source (Ubuntu 20.04)Nesse tutorial vou explicar como instalar tudo que é necessário para rodar qualquer site. Também ensino como compilar as sources OTX2 e TFS-1.3. Utilizarei a versão mais atual do Ubuntu, a versão 20.04.
Iniciando
Ao executar os comandos, algumas vezes será perguntado se você deseja continuar. Por padrão sempre aperte a tecla Y e em seguida a tecla ENTER do teclado, se houver algum ponto em que você precisara agir diferente eu irei indicar o que e onde fazer.
sudo apt update sudo apt upgrade sudo apt install zip sudo apt install nano
Instalando e Configurando NGINX
sudo apt install nginx sudo nano /etc/nginx/sites-available/default Nesse arquivo deve ser adicionado a chamada index.php e deve ser removido o sinal # em algumas linhas. Vou deixar em vermelho as modificações que deverão ser feitas no arquivo. Após terminar a edição aperte CTRL+X, aperte Y, aperte ENTER (tudo isso para salvar o arquivo).
server { listen 80 default_server; listen [::]:80 default_server; root /var/www/html; # Add index.php to the list if you are using PHP index index.php index.html index.htm index.nginx-debian.html; server_name example.com www.example.com; # pass PHP scripts to FastCGI server # location ~ \.php$ { include snippets/fastcgi-php.conf; # # # With php-fpm (or other unix sockets): fastcgi_pass unix:/var/run/php/php7.1-fpm.sock; # # With php-cgi (or other tcp sockets): # fastcgi_pass 127.0.0.1:9000; } } E agora, vamos reiniciar o serviço para que entre em vigor todas as alterações.
sudo systemctl restart nginx.service Para testar se ocorreu tudo certo com a instalação, insira o IP do seu VPS no navegador. Se obtiver uma tela de Boas Vindas como na imagem abaixo. Só vá para o próximo passo se estiver tudo certo até aqui.
Instalando MariaDB
sudo apt install mariadb-server
Instalando PHP
sudo apt-get install php-fpm
Instalando phpMyAdmin
Ao executar esse comando, vai aparecer uma tela indicando para você selecionar o apache2 ou lighttpd, porém não selecione nenhuma opção, apenas aperte TAB e depois ENTER.
Na próxima tela terá duas opções YES ou NO, aperte a tecla TAB para marcar a opção NO e depois aperte ENTER para prosseguir.
sudo apt-get install phpmyadmin Após isso, execute o comando a seguir e em sequencia entre no site http://ipNumericoDoSeuServer/phpmyadmin
sudo ln -s /usr/share/phpmyadmin /var/www/html
Será nescessário criar um acesso, pois qualquer outra senha que você tenha definido anteriormente provavelmente não irá funcionar. Não esqueça de substituir as informações em evidencia pelas suas.
sudo mysql -u root CREATE USER 'DIGITE UM LOGIN'@'localhost' IDENTIFIED BY 'DIGITE UMA SENHA'; GRANT ALL PRIVILEGES ON *.* TO 'DIGITE NOVAMENTE SEU LOGIN'@'localhost'; FLUSH PRIVILEGES; Após isso, acesse: 0.0.0.0/phpmyadmin. Onde você vai trocar o 0.0.0.0 pelo IP do seu VPS.
Lembra da senha que você escolheu na instalação do MariaDB? É aqui que você vai usa-la. O usuário é root e a senha é que você escolheu. Depois clique em Banco de Dados e em seguida digite um nome para o banco de dados e clique em criar.
Agora clique em importar, selecione a database e clique em executar.
Transfira os arquivos do seu site para o diretório /var/www/html. Preste muita atenção nessa parte, pois os arquivos do site já devem estar dentro da pasta html, não pode ficar algo como /var/www/html/site. Após isso, abra o arquivo config.php do website que você deseja utilizar e coloque as informações sobre o banco de dados: nome, root, senha.
Compilando a Source TFS 1.3
Entre no repositório do forgottenserver clique aqui
Faça o download para seu PC e extraia o arquivo. Renomeie a pasta extraída para otserv e abra o famoso arquivo config.lua. Configure essa parte de acordo com seus dados, também adicione a última linha.
ip = "digita o ip do VPS" -- MySQL mysqlHost = "127.0.0.1" mysqlUser = "root" mysqlPass = "digite a senha que você escolheu na instalação do Maria DB" mysqlDatabase = "digite o nome da database que você escolheu quando criou a database" mysqlPort = 3306 mysqlSock = "" passwordType = "sha1" Salve o arquivo e depois zipe a paste com a compactação .zip e envie para o diretório /home em seu VPS. Após isso, só executar em sequencia os comandos a seguir que estará compilado.
apt-get install git cmake build-essential liblua5.2-dev libgmp3-dev libmariadb-dev-compat libboost-filesystem-dev libboost-system-dev libboost-iostreams-dev libpugixml-dev libcrypto++-dev cd /home unzip otserv.zip cd otserv mkdir build && cd build cmake .. make -j 2 mv tfs.. && cd .. Para abrir o fechar o servidor respectivamente, você vai usar:
./tfs killall -9 tfs
Compilando a Source OTX 2
Entre no repositório do OTX2 clique aqui
Faça o download para seu PC e extraia o arquivo. Renomeie a pasta extraída para otserv e abra o famoso arquivo config.lua. Configure essa parte de acordo com seus dados, também adicione a última linha.
ip = "digita o ip do VPS" -- MySQL mysqlHost = "127.0.0.1" mysqlUser = "root" mysqlPass = "digite a senha que você escolheu na instalação do Maria DB" mysqlDatabase = "digite o nome da database que você escolheu quando criou a database" mysqlPort = 3306 mysqlSock = "" encryptionType = "sha1" Salve o arquivo e depois zipe a paste com a compactação .zip e envie para o diretório /home em seu VPS. Após isso, só executar em sequencia os comandos a seguir que estará compilado.
apt-get install subversion autoconf build-essential pkg-config libboost-dev libgmp3-dev libxml2-dev liblua5.1-0-dev libmariadbclient-dev-compat ccache libboost-filesystem-dev libboost-regex-dev libboost-system-dev libboost-thread-dev screen libssl-dev libboost-iostreams-dev cd /home/ unzip otserv.zip cd otserv && cd sources sh ./autogen.sh && ./configure --enable-server-diag --enable-mysql --enable-root-permission && make -j mv theotxserver .. && cd .. Para abrir o fechar o servidor respectivamente, você vai usar:
./theotxserver killall -9 theotxserver