Jump to content

Leaderboard


Popular Content

Showing content with the highest reputation since 04/24/20 in all areas

  1. 15 points
    Hoje estarei ensinando a instalar os seguintes novos atributos/sistemas em sua source CriticalHitChance e DodgeChance -- (Funciona da mesma maneira que o critical básico de script, porém sem bugs de callstack) Life e Mana Absorb -- (Regenera, de acordo com a % atribuida, a partir de dano recebido) Life e Mana Leech -- (Regenera, de acordo com a % atribuida, a partir do dano causado) Exemplo de como vai ficar Primeiro e antes de tudo, você terá de desativar o critical padrão do Tibia (Você pode pular essa parte se quiser) Vamos lá! Vá em items.cpp e procure por: attackSpeed = 0; Abaixo coloque: criticalHitChance = dodgeChance = lifeAbsorb = manaAbsorb = lifeLeech = manaLeech = 0; Depois, ainda em items.cpp, procure por: else if(tmpStrValue == "extradefense" || tmpStrValue == "extradef") { if(readXMLInteger(itemAttributesNode, "chance", intValue)) it.extraDefenseChance = intValue; if(readXMLInteger(itemAttributesNode, "value", intValue)) it.extraDefense = intValue; if(readXMLInteger(itemAttributesNode, "random_min", intValue)) it.extraDefenseRndMin = intValue; if(readXMLInteger(itemAttributesNode, "random_max", intValue)) it.extraDefenseRndMax = intValue; } Abaixo coloque: else if(tmpStrValue == "criticalhitchance") { if(readXMLInteger(itemAttributesNode, "value", intValue)) it.criticalHitChance = intValue; } else if(tmpStrValue == "dodgechance") { if(readXMLInteger(itemAttributesNode, "value", intValue)) it.dodgeChance = intValue; } else if(tmpStrValue == "lifeabsorb") { if(readXMLInteger(itemAttributesNode, "value", intValue)) it.lifeAbsorb = intValue; } else if(tmpStrValue == "manaabsorb") { if(readXMLInteger(itemAttributesNode, "value", intValue)) it.manaAbsorb = intValue; } else if(tmpStrValue == "lifeleech") { if(readXMLInteger(itemAttributesNode, "value", intValue)) it.lifeLeech = intValue; } else if(tmpStrValue == "manaleech") { if(readXMLInteger(itemAttributesNode, "value", intValue)) it.manaLeech = intValue; } Agora vá em items.h e procure por: int32_t attack, extraAttack, defense, extraDefense, armor, breakChance, hitChance, maxHitChance, runeLevel, runeMagLevel, lightLevel, lightColor, decayTo, rotateTo, alwaysOnTopOrder; Abaixo coloque: int32_t criticalHitChance, dodgeChance, lifeAbsorb, manaAbsorb, lifeLeech, manaLeech; Agora vá em item.cpp e procure por: case ATTR_ATTACK: { int32_t attack; if(!propStream.getLong((uint32_t&)attack)) return ATTR_READ_ERROR; setAttribute("attack", attack); break; } Acima coloque: case ATTR_CRITICALHITCHANCE: { int32_t criticalHitChance; if(!propStream.getLong((uint32_t&)criticalHitChance)) return ATTR_READ_ERROR; setAttribute("criticalhitchance", criticalHitChance); break; } case ATTR_DODGECHANCE: { int32_t dodgeChance; if(!propStream.getLong((uint32_t&)dodgeChance)) return ATTR_READ_ERROR; setAttribute("dodgechance", dodgeChance); break; } case ATTR_LIFEABSORB: { int32_t lifeAbsorb; if(!propStream.getLong((uint32_t&)lifeAbsorb)) return ATTR_READ_ERROR; setAttribute("lifeabsorb", lifeAbsorb); break; } case ATTR_MANAABSORB: { int32_t manaAbsorb; if(!propStream.getLong((uint32_t&)manaAbsorb)) return ATTR_READ_ERROR; setAttribute("manaabsorb", manaAbsorb); break; } case ATTR_LIFELEECH: { int32_t lifeLeech; if(!propStream.getLong((uint32_t&)lifeLeech)) return ATTR_READ_ERROR; setAttribute("lifeleech", lifeLeech); break; } case ATTR_MANALEECH: { int32_t manaLeech; if(!propStream.getLong((uint32_t&)manaLeech)) return ATTR_READ_ERROR; setAttribute("manaleech", manaLeech); break; } Procure por: if(it.attackSpeed || (item && item->getAttackSpeed())) { if(begin) { begin = false; s << " ("; } else s << ", "; s << "AS: " << (item ? item->getAttackSpeed() : it.attackSpeed); Abaixo coloque: if(it.criticalHitChance || (item && item->getCriticalHitChance())) { if(begin) { begin = false; s << " ("; } else s << ", "; s << "Crit Chance:" << std::showpos << int32_t(item ? item->getCriticalHitChance() : it.criticalHitChance) << "%"<< std::noshowpos; } if(it.dodgeChance || (item && item->getDodgeChance())) { if(begin) { begin = false; s << " ("; } else s << ", "; s << "Dodge Chance:" << std::showpos << int32_t(item ? item->getDodgeChance() : it.dodgeChance) << "%"<< std::noshowpos; } if(it.lifeAbsorb || (item && item->getLifeAbsorb())) { if(begin) { begin = false; s << " ("; } else s << ", "; s << "Life Absorb:" << std::showpos << int32_t(item ? item->getLifeAbsorb() : it.lifeAbsorb) << "%"<< std::noshowpos; } if(it.manaAbsorb || (item && item->getManaAbsorb())) { if(begin) { begin = false; s << " ("; } else s << ", "; s << "Mana Absorb:" << std::showpos << int32_t(item ? item->getManaAbsorb() : it.manaAbsorb) << "%"<< std::noshowpos; } if(it.lifeLeech || (item && item->getLifeLeech())) { if(begin) { begin = false; s << " ("; } else s << ", "; s << "Life Leech:" << std::showpos << int32_t(item ? item->getLifeLeech() : it.lifeLeech) << "%"<< std::noshowpos; } if(it.manaLeech || (item && item->getManaLeech())) { if(begin) { begin = false; s << " ("; } else s << ", "; s << "Mana Leech:" << std::showpos << int32_t(item ? item->getManaLeech() : it.manaLeech) << "%"<< std::noshowpos; } Procure por: int32_t tmp = it.armor; if(item) tmp = item->getArmor(); bool begin = true; if(tmp) { s << " (Arm:" << tmp; begin = false; } Abaixo coloque: if(it.criticalHitChance || (item && item->getCriticalHitChance())) { if(begin) { begin = false; s << " ("; } else s << ", "; s << "Crit Chance:" << std::showpos << int32_t(item ? item->getCriticalHitChance() : it.criticalHitChance) << "%"<< std::noshowpos; } if(it.dodgeChance || (item && item->getDodgeChance())) { if(begin) { begin = false; s << " ("; } else s << ", "; s << "Dodge Chance:" << std::showpos << int32_t(item ? item->getDodgeChance() : it.dodgeChance) << "%"<< std::noshowpos; } if(it.lifeAbsorb || (item && item->getLifeAbsorb())) { if(begin) { begin = false; s << " ("; } else s << ", "; s << "Life Absorb:" << std::showpos << int32_t(item ? item->getLifeAbsorb() : it.lifeAbsorb) << "%"<< std::noshowpos; } if(it.manaAbsorb || (item && item->getManaAbsorb())) { if(begin) { begin = false; s << " ("; } else s << ", "; s << "Mana Absorb:" << std::showpos << int32_t(item ? item->getManaAbsorb() : it.manaAbsorb) << "%"<< std::noshowpos; } if(it.lifeLeech || (item && item->getLifeLeech())) { if(begin) { begin = false; s << " ("; } else s << ", "; s << "Life Leech:" << std::showpos << int32_t(item ? item->getLifeLeech() : it.lifeLeech) << "%"<< std::noshowpos; } if(it.manaLeech || (item && item->getManaLeech())) { if(begin) { begin = false; s << " ("; } else s << ", "; s << "Mana Leech:" << std::showpos << int32_t(item ? item->getManaLeech() : it.manaLeech) << "%"<< std::noshowpos; } Agora vá em item.h e procure por: ATTR_DUALWIELD = 43, Abaixo coloque: ATTR_CRITICALHITCHANCE = 44, ATTR_DODGECHANCE = 45, ATTR_LIFEABSORB = 46, ATTR_MANAABSORB = 47, ATTR_LIFELEECH = 48, ATTR_MANALEECH = 49, Procure por: int32_t getExtraDefense() const; Abaixo coloque: int32_t getCriticalHitChance() const; int32_t getDodgeChance() const; int32_t getLifeAbsorb() const; int32_t getManaAbsorb() const; int32_t getLifeLeech() const; int32_t getManaLeech() const; Procure por: inline int32_t Item::getExtraDefense() const { bool ok; int32_t v = getIntegerAttribute("extradefense", ok); if(ok) return v; return items[id].extraDefense; } Abaixo coloque: inline int32_t Item::getCriticalHitChance() const { bool ok; int32_t v = getIntegerAttribute("criticalhitchance", ok); if(ok) return v; return items[id].criticalHitChance; } inline int32_t Item::getDodgeChance() const { bool ok; int32_t v = getIntegerAttribute("dodgechance", ok); if(ok) return v; return items[id].dodgeChance; } inline int32_t Item::getLifeAbsorb() const { bool ok; int32_t v = getIntegerAttribute("lifeabsorb", ok); if(ok) return v; return items[id].lifeAbsorb; } inline int32_t Item::getManaAbsorb() const { bool ok; int32_t v = getIntegerAttribute("manaabsorb", ok); if(ok) return v; return items[id].manaAbsorb; } inline int32_t Item::getLifeLeech() const { bool ok; int32_t v = getIntegerAttribute("lifeleech", ok); if(ok) return v; return items[id].lifeLeech; } inline int32_t Item::getManaLeech() const { bool ok; int32_t v = getIntegerAttribute("manaleech", ok); if(ok) return v; return items[id].manaLeech; } Agora vá em player.cpp e procure por: int32_t Player::getArmor() const { int32_t i = SLOT_FIRST, armor = 0; for(; i < SLOT_LAST; ++i) { if(Item* item = getInventoryItem((slots_t)i)) armor += item->getArmor(); } if(vocation->getMultiplier(MULTIPLIER_ARMOR) != 1.0) return int32_t(armor * vocation->getMultiplier(MULTIPLIER_ARMOR)); return armor; } Abaixo coloque: int32_t Player::getCriticalHitChance() const { int32_t i = SLOT_FIRST, crit = 0; for(; i < SLOT_LAST; ++i) { if(Item* item = getInventoryItem((slots_t)i)) crit += item->getCriticalHitChance(); } return crit; } int32_t Player::getDodgeChance() const { int32_t i = SLOT_FIRST, dodge = 0; for(; i < SLOT_LAST; ++i) { if(Item* item = getInventoryItem((slots_t)i)) dodge += item->getDodgeChance(); } return dodge; } int32_t Player::getLifeAbsorb() const { int32_t i = SLOT_FIRST, life = 0; for(; i < SLOT_LAST; ++i) { if(Item* item = getInventoryItem((slots_t)i)) life += item->getLifeAbsorb(); } return life; } int32_t Player::getManaAbsorb() const { int32_t i = SLOT_FIRST, mana = 0; for(; i < SLOT_LAST; ++i) { if(Item* item = getInventoryItem((slots_t)i)) mana += item->getManaAbsorb(); } return mana; } int32_t Player::getLifeLeech() const { int32_t i = SLOT_FIRST, life = 0; for(; i < SLOT_LAST; ++i) { if(Item* item = getInventoryItem((slots_t)i)) life += item->getLifeLeech(); } return life; } int32_t Player::getManaLeech() const { int32_t i = SLOT_FIRST, mana = 0; for(; i < SLOT_LAST; ++i) { if(Item* item = getInventoryItem((slots_t)i)) mana += item->getManaLeech(); } return mana; } Agora vá em player.h e procure por: virtual int32_t getDefense() const; Abaixo coloque: virtual int32_t getCriticalHitChance() const; virtual int32_t getDodgeChance() const; virtual int32_t getLifeAbsorb() const; virtual int32_t getManaAbsorb() const; virtual int32_t getLifeLeech() const; virtual int32_t getManaLeech() const; Agora vá em luascript.cpp e procure por: //getCreatureHealth(cid) lua_register(m_luaState, "getCreatureHealth", LuaInterface::luaGetCreatureHealth); Abaixo coloque: //getPlayerCriticalHitChance(cid) lua_register(m_luaState, "getPlayerCriticalHitChance", LuaInterface::luaGetPlayerCriticalHitChance); //getPlayerDodgeChance(cid) lua_register(m_luaState, "getPlayerDodgeChance", LuaInterface::luaGetPlayerDodgeChance); //getPlayerLifeAbsorb(cid) lua_register(m_luaState, "getPlayerLifeAbsorb", LuaInterface::luaGetPlayerLifeAbsorb); //getPlayerManaAbsorb(cid) lua_register(m_luaState, "getPlayerManaAbsorb", LuaInterface::luaGetPlayerManaAbsorb); //getPlayerLifeLeech(cid) lua_register(m_luaState, "getPlayerLifeLeech", LuaInterface::luaGetPlayerLifeLeech); //getPlayerManaLeech(cid) lua_register(m_luaState, "getPlayerManaLeech", LuaInterface::luaGetPlayerManaLeech); Procure por: int32_t LuaInterface::luaGetCreatureMaxHealth(lua_State* L) { //getCreatureMaxHealth(cid[, ignoreModifiers = false]) bool ignoreModifiers = false; if(lua_gettop(L) > 1) ignoreModifiers = popBoolean(L); ScriptEnviroment* env = getEnv(); if(Creature* creature = env->getCreatureByUID(popNumber(L))) lua_pushnumber(L, creature->getPlayer() && ignoreModifiers ? creature->healthMax : creature->getMaxHealth()); else { errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND)); lua_pushboolean(L, false); } return 1; } Abaixo coloque: int32_t LuaInterface::luaGetPlayerCriticalHitChance(lua_State* L) { //getPlayerCriticalHitChance(cid) ScriptEnviroment* env = getEnv(); if(Player* player = env->getPlayerByUID(popNumber(L))) lua_pushnumber(L, player->getCriticalHitChance()); else { errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND)); lua_pushboolean(L, false); } return 1; } int32_t LuaInterface::luaGetPlayerDodgeChance(lua_State* L) { //getPlayerDodgeChance(cid) ScriptEnviroment* env = getEnv(); if(Player* player = env->getPlayerByUID(popNumber(L))) lua_pushnumber(L, player->getDodgeChance()); else { errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND)); lua_pushboolean(L, false); } return 1; } int32_t LuaInterface::luaGetPlayerLifeAbsorb(lua_State* L) { //getPlayerLifeAbsorb(cid) ScriptEnviroment* env = getEnv(); if(Player* player = env->getPlayerByUID(popNumber(L))) lua_pushnumber(L, player->getLifeAbsorb()); else { errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND)); lua_pushboolean(L, false); } return 1; } int32_t LuaInterface::luaGetPlayerManaAbsorb(lua_State* L) { //getPlayerManaAbsorb(cid) ScriptEnviroment* env = getEnv(); if(Player* player = env->getPlayerByUID(popNumber(L))) lua_pushnumber(L, player->getManaAbsorb()); else { errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND)); lua_pushboolean(L, false); } return 1; } int32_t LuaInterface::luaGetPlayerLifeLeech(lua_State* L) { //getPlayerLifeLeech(cid) ScriptEnviroment* env = getEnv(); if(Player* player = env->getPlayerByUID(popNumber(L))) lua_pushnumber(L, player->getLifeLeech()); else { errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND)); lua_pushboolean(L, false); } return 1; } int32_t LuaInterface::luaGetPlayerManaLeech(lua_State* L) { //getPlayerManaLeech(cid) ScriptEnviroment* env = getEnv(); if(Player* player = env->getPlayerByUID(popNumber(L))) lua_pushnumber(L, player->getManaLeech()); else { errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND)); lua_pushboolean(L, false); } return 1; } Agora vá em luascript.h e procure por: static int32_t luaGetPlayerSpentMana(lua_State* L); Abaixo coloque: static int32_t luaGetPlayerCriticalHitChance(lua_State* L); static int32_t luaGetPlayerDodgeChance(lua_State* L); static int32_t luaGetPlayerLifeAbsorb(lua_State* L); static int32_t luaGetPlayerManaAbsorb(lua_State* L); static int32_t luaGetPlayerLifeLeech(lua_State* L); static int32_t luaGetPlayerManaLeech(lua_State* L); As funções Lua adicionadas foram getPlayerCriticalHitChance(cid) getPlayerDodgeChance(cid) getPlayerLifeAbsorb(cid) getPlayerManaAbsorb(cid) getPlayerLifeLeech(cid) getPlayerManaLeech(cid) Agora a parte do game.cpp. (Esta é uma parte opcional, você pode optar por não adicioná-la) Créditos: ~Mathias Kenfi
  2. 10 points
    Galera 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.
  3. 9 points
    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
  4. 8 points
    M ustang

    Servidor NTOUnLiMiTeD e NTOStorm

    Olá vim aqui postar o servidor do NARUTO STORM e NARUTO UNLIMITED pois o servidor foi vendido e mesmo assim colocaram o servidor online depois de prometer que não iriam abrir. Com mesmo mapa etc. https://www.youtube.com/channel/UCpqGkQxffeaqRdxf8UvAyUg Aqui possui alguns videos do que contem no servidor. Link do server: https://mega.nz/file/q6YQhKLa#-QJ8sK-wwaL-9d4My2LdLYABjcgrVaw73mWEewTCdTI Scan obs: Scan por @LeoTK Informações do Servidor: System de FLY Portões do GUY Imortal Mapa proprio Radar Bijuu OBS: CONTEÚDO PRÓPRIO PARA ESTE FÓRUM COMO FOI COMPRADO QUERO O CONTEÚDO SÓ AQUI NÃO ESTÁ LIBERADO A POSTAGEM EM OUTROS FÓRUNS ( não recomendo baixar e colocar online e sim estudar oque foi tentado criar pois contem muitos bugs ) Servidor criado por: Daniel e Bruno. Tenho o total direito de postar pois o mesmo foi vendido para varias outras pessoas. Caso precisem de provas que o servidor foi comprado mande uma mensagem na DM.
  5. 8 points
    Diego Rulez

    Google Cloud Plataform

    Introdução O que eu quero falar aqui não é a parte técnica de segurança, desempenho e outros pontos. Quero falar sobre o dia a dia de alguém que pretende ser um administrador e que acabou de começar um projeto. Mesmo que você seja leigo e tenha dificuldades com a "tela preta" do Linux onde você digita os comandos, ainda assim vale a pena optar pelo Linux logo de primeira pelos seguintes motivos: Quando você for inaugurar seu servidor você vai querer que ele tenha uma boa estabilidade e não fique travando ou sendo derrubado e você vai conseguir isso apenas utilizando Linux, então pra que aprender a montar tudo no Windows se depois, de qualquer forma, você vai ter que aprender Linux? Todo conhecimento é válido, mas você estaria atrasando seu lado fazendo isso. Visual Studio, complementos, bibliotecas. Antes de compilar sua source para Windows você vai precisar fazer o download, instalar e preparar o seu ambiente de trabalho e isso vai te custar muito tempo visto que são programas pesados, que demoram para serem baixados e instalados e que precisam de configurações muito especificas para compilar sem erros. Se você pode fazer isso tudo em 5 minutos e sem erros no Linux, porque insistir no Windows? Google Cloud Platform Ativando os créditos Criando o VPS Liberando as Portas Criando um acesso Enviar arquivos para o VPS A parte de compilação da source, instalar o site e abrir o server ficará para o próximo tópico, visto que, é possível aplicar em qualquer VPS e não somente do Google. Se deseja instalar um site e fazer a compilação da source clique aqui Se você tiver qualquer dúvida em relação a esse tutorial não fique acuado em perguntar, irei responder todas as dúvidas no tópico. Não respondo PM, porém também estou no Discord do TibiaKing e posso ajuda-los por lá.
  6. 8 points
    Votações Encerradas! Com mais de 90% de aprovação dos membros da comunidade, agora colocamos nossas ideias em prática. Obrigado a todos que votaram na nossa enquete e contribuíram com sugestões! Veja a seguir o que mudou no Tibia King. Novo Fórum! Os fóruns do Tibia King agora são divididos nas seguintes categorias: - Tibia King: Assuntos da comunidade, notícias, eventos e atendimento aos membros. - Open Tibia: Distribuições de conteúdos, downloads de servidores, ferramentas e recursos, códigos, websites, mapas, clients e sprites. - Gerenciamento de Otserv: Interação entre membros, show offs, divulgação de servidores, formação de equipe, pesquisas, tutoriais e suporte aos membros. - Tibia & Bots: Tudo sobre Tibia (galerias e tutoriais) e Bots (downloads, tutoriais e suporte). - Diversos: Design geral, outras linguagens de programação, divulgações & classificados e área off-topic para confraternização e outros jogos. Novo Menu! Nossos menus foram modificados para facilitar a sua busca por conteúdos no Tibia King: - Portal: Regras do Tk, Rankings, Medalhões, Staff, Nossos destaques, Usuários Online. - Fóruns: Lista de fóruns, onde você encontra todos os conteúdos da comunidade. - Otserv: Baixar Ots, ferramentas & recursos, códigos & sistemas, mapas, clients & gráficos, websites & layouts. - Recursos: Custom flags, Funções .lua, Magic/Distance Effects, Monster/Looktypes, Gerador de Outfits/Addons, Baixar Tibia Clients. - Projetos: Item Editor, Object Builder, Remere's Map Editor, The Forgotten Server, Otservbr Global. - Otservlist: Lista de servidores para você jogar ou anunciar! - Anuncie: Divulgue um banner de seu projeto no nosso site e obtenha + acessos! Novo Layout! Após a redução de propagandas no fórum fizemos uma redução de espaços, alguma falhas e poluição visual. O novo layout responsivo também trás melhorias para navegação em seu aparelho móvel! Sistema de Medalhões! Está oficialmente lançado o sistema de medalhões do Tibia King, compondo as categorias Posts, Reputação, Seguidores, Tempo de Registro, Cargos Obtidos e Eventos, você poderá ter até 6 medalhões compatíveis com o seu perfil. • Veja a lista de medalhões disponíveis! • Solicite um medalhão clicando aqui! Mais atualizações por vir! - Os classificados foram removidos do Tibia King, não permitiremos mais vendas de conteúdos na comunidade. Você pode divulgar ou contratar serviços na seção de freelancers (classificados). - Os clubes foram removidos! - Nossa seção de códigos está sofrendo alterações, os tópicos antigos serão movidos para suas respectivas áreas conforme o tempo. - Os prefixos e tags dos fóruns serão revisados, sabemos que muitos membros pediram prefixos melhores (incluindo informações sobre tfs, etc) e trabalharemos para melhorar isso também. - Sugestões? Bugs? Nos informe, ajude-nos a melhorar o Tibia King cada vez mais, comente!
  7. 7 points
    EXPLICAÇÃO/RESUMO Bom galera esse sistema foi fixado por mim e resolvi trazer pra vocês o UPDATE contendo 2 moveitem pra funcionar perfeitamente ao seu jogo, esses sistemas tem a obrigação de parar players que jogam lixo na porta da sua casa, em cima do seu depot, em teleportes, e aonde você não queira. "somente dono, sub, e convidados podem jogar lixo ou mover items da sua casa" é um pacotão completo e revisado que vai evitar engraçadinhos bugar seu server. lixo no dp 2020-05-21 23-20-34.mp4 lixo house 2020-05-21 23-22-35.mp4 TUTORIAL BY L3K0T 1° abra seu creatureevents.cpp com o editor de sua preferencia. "eu uso notepad++" ache: case CREATURE_EVENT_PREPAREDEATH: return "cid, deathList"; em baixo coloca: case CREATURE_EVENT_MOVEITEM: return "moveItem, frompos, topos, cid"; case CREATURE_EVENT_MOVEITEM2: return "cid, item, count, toContainer, fromContainer, fromPos, toPos"; ache: case CREATURE_EVENT_PREPAREDEATH: return "onPrepareDeath"; em baixo coloca: case CREATURE_EVENT_MOVEITEM: return "onMoveItem"; case CREATURE_EVENT_MOVEITEM2: return "onMoveItem2"; ache: else if(tmpStr == "preparedeath") m_type = CREATURE_EVENT_PREPAREDEATH; em baixo coloca: else if(tmpStr == "moveitem") m_type = CREATURE_EVENT_MOVEITEM; else if(tmpStr == "moveitem2") m_type = CREATURE_EVENT_MOVEITEM2; ache: bool CreatureEvents::playerLogout(Player* player, bool forceLogout) { //fire global event if is registered bool result = true; for(CreatureEventList::iterator it = m_creatureEvents.begin(); it != m_creatureEvents.end(); ++it) { if((*it)->getEventType() == CREATURE_EVENT_LOGOUT && (*it)->isLoaded() && !(*it)->executeLogout(player, forceLogout) && result) result = false; } return result; } em baixo coloca: ATENÇÃO PRA TFS 0.4 USE ESSE ABAIXO uint32_t CreatureEvent::executeMoveItem2(Player* player, Item* item, uint8_t count, const Position& fromPos, const Position& toPos, Item* toContainer, Item* fromContainer, int16_t fstack) { //onMoveItem(cid, item, count, toContainer, fromContainer, fromPos, toPos) if(m_interface->reserveEnv()) { ScriptEnviroment* env = m_interface->getEnv(); if(m_scripted == EVENT_SCRIPT_BUFFER) { env->setRealPos(player->getPosition()); std::stringstream scriptstream; scriptstream << "local cid = " << env->addThing(player) << std::endl; env->streamThing(scriptstream, "item", item, env->addThing(item)); scriptstream << "local count = " << count << std::endl; env->streamThing(scriptstream, "toContainer", toContainer, env->addThing(toContainer)); env->streamThing(scriptstream, "fromContainer", fromContainer, env->addThing(fromContainer)); env->streamPosition(scriptstream, "fromPos", fromPos, fstack); env->streamPosition(scriptstream, "toPos", toPos, 0); scriptstream << m_scriptData; bool result = true; if(m_interface->loadBuffer(scriptstream.str())) { lua_State* L = m_interface->getState(); result = m_interface->getGlobalBool(L, "_result", true); } m_interface->releaseEnv(); return result; } else { #ifdef __DEBUG_LUASCRIPTS__ char desc[30]; sprintf(desc, "%s", player->getName().c_str()); env->setEvent(desc); #endif env->setScriptId(m_scriptId, m_interface); env->setRealPos(player->getPosition()); lua_State* L = m_interface->getState(); m_interface->pushFunction(m_scriptId); lua_pushnumber(L, env->addThing(player)); LuaInterface::pushThing(L, item, env->addThing(item)); lua_pushnumber(L, count); LuaInterface::pushThing(L, toContainer, env->addThing(toContainer)); LuaInterface::pushThing(L, fromContainer, env->addThing(fromContainer)); LuaInterface::pushPosition(L, fromPos, fstack); LuaInterface::pushPosition(L, toPos, 0); bool result = m_interface->callFunction(7); m_interface->releaseEnv(); return result; } } else { std::clog << "[Error - CreatureEvent::executeMoveItem] Call stack overflow." << std::endl; return 0; } } uint32_t CreatureEvents::executeMoveItems(Creature* actor, Item* item, const Position& frompos, const Position& pos) { for(CreatureEventList::iterator it = m_creatureEvents.begin(); it != m_creatureEvents.end(); ++it) { if((*it)->getEventType() == CREATURE_EVENT_MOVEITEM) { if(!(*it)->executeMoveItem(actor, item, frompos, pos)) return 0; } } return 1; } uint32_t CreatureEvent::executeMoveItem(Creature* actor, Item* item, const Position& frompos, const Position& pos) { if(m_interface->reserveEnv()) { ScriptEnviroment* env = m_interface->getEnv(); if(m_scripted == EVENT_SCRIPT_BUFFER) { env->setRealPos(pos); std::stringstream scriptstream; env->streamThing(scriptstream, "moveItem", item, env->addThing(item)); env->streamPosition(scriptstream, "position", frompos, 0); env->streamPosition(scriptstream, "position", pos, 0); scriptstream << "local cid = " << env->addThing(actor) << std::endl; scriptstream << m_scriptData; bool result = true; if(m_interface->loadBuffer(scriptstream.str())) { lua_State* L = m_interface->getState(); result = m_interface->getGlobalBool(L, "_result", true); } m_interface->releaseEnv(); return result; } else { #ifdef __DEBUG_LUASCRIPTS__ char desc[35]; sprintf(desc, "%s", player->getName().c_str()); env->setEventDesc(desc); #endif env->setScriptId(m_scriptId, m_interface); env->setRealPos(pos); lua_State* L = m_interface->getState(); m_interface->pushFunction(m_scriptId); LuaInterface::pushThing(L, item, env->addThing(item)); LuaInterface::pushPosition(L, frompos, 0); LuaInterface::pushPosition(L, pos, 0); lua_pushnumber(L, env->addThing(actor)); bool result = m_interface->callFunction(4); m_interface->releaseEnv(); return result; } } else { std::clog << "[Error - CreatureEvent::executeMoveItem] Call stack overflow." << std::endl; return 0; } } ATENÇÃO PRA TFS 0.3.6 USE ESSE ABAIXO uint32_t CreatureEvent::executeMoveItem2(Player* player, Item* item, uint8_t count, const Position& fromPos, const Position& toPos, Item* toContainer, Item* fromContainer, int16_t fstack) { //onMoveItem(cid, item, count, toContainer, fromContainer, fromPos, toPos) if(m_interface->reserveEnv()) { ScriptEnviroment* env = m_interface->getEnv(); if(m_scripted == EVENT_SCRIPT_BUFFER) { env->setRealPos(player->getPosition()); std::stringstream scriptstream; scriptstream << "local cid = " << env->addThing(player) << std::endl; env->streamThing(scriptstream, "item", item, env->addThing(item)); scriptstream << "local count = " << count << std::endl; env->streamThing(scriptstream, "toContainer", toContainer, env->addThing(toContainer)); env->streamThing(scriptstream, "fromContainer", fromContainer, env->addThing(fromContainer)); env->streamPosition(scriptstream, "fromPos", fromPos, fstack); env->streamPosition(scriptstream, "toPos", toPos, 0); scriptstream << m_scriptData; bool result = true; if(m_interface->loadBuffer(scriptstream.str())) { lua_State* L = m_interface->getState(); result = m_interface->getGlobalBool(L, "_result", true); } m_interface->releaseEnv(); return result; } else { #ifdef __DEBUG_LUASCRIPTS__ char desc[30]; sprintf(desc, "%s", player->getName().c_str()); env->setEvent(desc); #endif env->setScriptId(m_scriptId, m_interface); env->setRealPos(player->getPosition()); lua_State* L = m_interface->getState(); m_interface->pushFunction(m_scriptId); lua_pushnumber(L, env->addThing(player)); LuaScriptInterface::pushThing(L, item, env->addThing(item)); lua_pushnumber(L, count); LuaScriptInterface::pushThing(L, toContainer, env->addThing(toContainer)); LuaScriptInterface::pushThing(L, fromContainer, env->addThing(fromContainer)); LuaScriptInterface::pushPosition(L, fromPos, fstack); LuaScriptInterface::pushPosition(L, toPos, 0); bool result = m_interface->callFunction(7); m_interface->releaseEnv(); return result; } } else { std::clog << "[Error - CreatureEvent::executeMoveItem] Call stack overflow." << std::endl; return 0; } } uint32_t CreatureEvents::executeMoveItems(Creature* actor, Item* item, const Position& frompos, const Position& pos) { // fire global event if is registered for(CreatureEventList::iterator it = m_creatureEvents.begin(); it != m_creatureEvents.end(); ++it) { if(it->second->getEventType() == CREATURE_EVENT_MOVEITEM){ if(!it->second->executeMoveItem(actor,item,frompos,pos)) return 0; } } return 1; } uint32_t CreatureEvent::executeMoveItem(Creature* actor, Item* item, const Position& frompos, const Position& pos) { if(m_interface->reserveEnv()) { ScriptEnviroment* env = m_interface->getEnv(); if(m_scripted == EVENT_SCRIPT_BUFFER) { env->setRealPos(pos); std::stringstream scriptstream; env->streamThing(scriptstream, "moveItem", item, env->addThing(item)); env->streamPosition(scriptstream, "position", frompos, 0); env->streamPosition(scriptstream, "position", pos, 0); scriptstream << "local cid = " << env->addThing(actor) << std::endl; scriptstream << m_scriptData; bool result = true; if(m_interface->loadBuffer(scriptstream.str())) { lua_State* L = m_interface->getState(); result = m_interface->getGlobalBool(L, "_result", true); } m_interface->releaseEnv(); return result; } else { #ifdef __DEBUG_LUASCRIPTS__ char desc[35]; sprintf(desc, "%s", player->getName().c_str()); env->setEventDesc(desc); #endif env->setScriptId(m_scriptId, m_interface); env->setRealPos(pos); lua_State* L = m_interface->getState(); m_interface->pushFunction(m_scriptId); LuaScriptInterface::pushThing(L, item, env->addThing(item)); LuaScriptInterface::pushPosition(L, frompos, 0); LuaScriptInterface::pushPosition(L, pos, 0); lua_pushnumber(L, env->addThing(actor)); bool result = m_interface->callFunction(4); m_interface->releaseEnv(); return result; } } else { std::clog << "[Error - CreatureEvent::executeMoveItem] Call stack overflow." << std::endl; return 0; } } 2° agora em creatureevetns.h Ache: CREATURE_EVENT_PREPAREDEATH, em baixo coloca: CREATURE_EVENT_MOVEITEM, CREATURE_EVENT_MOVEITEM2, ache: uint32_t executePrepareDeath(Creature* creature, DeathList deathList); em baixo coloca: uint32_t executeMoveItem(Creature* actor, Item* item, const Position& frompos, const Position& pos); uint32_t executeMoveItem2(Player* player, Item* item, uint8_t count, const Position& fromPos, const Position& toPos, Item* toContainer, Item* fromContainer, int16_t fstack); ache: bool playerLogout(Player* player, bool forceLogout); em baixo coloca: uint32_t executeMoveItems(Creature* actor, Item* item, const Position& frompos, const Position& pos); 3° agora em game.cpp ache: if(!canThrowObjectTo(mapFromPos, mapToPos) && !player->hasCustomFlag(PlayerCustomFlag_CanThrowAnywhere)) { player->sendCancelMessage(RET_CANNOTTHROW); return false; } ReturnValue ret = internalMoveItem(player, fromCylinder, toCylinder, toIndex, item, count, NULL); if(ret == RET_NOERROR) return true; player->sendCancelMessage(ret); return false; } troque por: if(!canThrowObjectTo(mapFromPos, mapToPos) && !player->hasCustomFlag(PlayerCustomFlag_CanThrowAnywhere)) { player->sendCancelMessage(RET_CANNOTTHROW); return false; } bool success = true; CreatureEventList moveitemEvents = player->getCreatureEvents(CREATURE_EVENT_MOVEITEM2); for(CreatureEventList::iterator it = moveitemEvents.begin(); it != moveitemEvents.end(); ++it) { Item* toContainer = toCylinder->getItem(); Item* fromContainer = fromCylinder->getItem(); if(!(*it)->executeMoveItem2(player, item, count, fromPos, toPos, (toContainer ? toContainer : 0), (fromContainer ? fromContainer : 0), fromStackpos) && success) success = false; } if(!success) return false; if(!g_creatureEvents->executeMoveItems(player, item, mapFromPos, mapToPos)) return false; ReturnValue ret = internalMoveItem(player, fromCylinder, toCylinder, toIndex, item, count, NULL); if(ret == RET_NOERROR) return true; player->sendCancelMessage(ret); return false; } feito isso é só compilar sua source no modo REDUILD pra que as funções funcione. Agora no seu otserv vai em creturescripts, vai no arquivo login.lua e registra e event: registerCreatureEvent(cid, "MoveItem") registerCreatureEvent(cid, "MoveItem2") em creaturescript .xml <event type="moveitem" name="MoveItem" event="script" value="houseprotecao.lua"/> <event type="moveitem2" name="MoveItem2" event="script" value="moveitem2.lua"/> script do houseprotecao.lua "move item1 function onMoveItem(moveItem, frompos, position, cid) if position.x == CONTAINER_POSITION then return true end local house = getHouseFromPos(position) if type(house) == 'number' then local owner = getHouseOwner(house) if owner == 0 then return false, doPlayerSendCancel(cid, 'Desculpe, isso não é possivel.') end if owner ~= getPlayerGUID(cid) then local sub = getHouseAccessList(house, 0x101):explode('\n') local guest = getHouseAccessList(house, 0x100):explode('\n') local isInvited = false if (#sub > 0) and isInArray(sub, getCreatureName(cid)) then isInvited = true end if (#guest > 0) and isInArray(guest, getCreatureName(cid)) then isInvited = true end if not isInvited then return false, doPlayerSendCancel(cid, 'Desculpe, isso não é possivel, pois você não está convidado') end end end return true end script do moveitem2.lua "moveitem2 local depottiles = {} --piso pra n jogar local depots = {2589} --id dos dps local group = 3 --id dos group 6 é todos. local function checkIfThrow(pos,topos) if topos.x == 0xffff then return false end local thing = getThingFromPos(pos) if isInArray(depottiles,thing.itemid) then if not isInArea(topos,{x=pos.x-1,y=pos.y-1,z=pos.z},{x=pos.x+1,y=pos.y+1, z=pos.z}) then return true end else for i = 1, #depots do if depots[i] == getTileItemById(topos,depots[i]).itemid or getTileInfo(topos).actionid == 7483 then return true end end end return false end function onMoveItem2(cid, item, count, toContainer, fromContainer, fromPos, toPos) if isPlayer(cid) then local pos = getThingPos(cid) if getPlayerGroupId(cid) > group then return true end if checkIfThrow({x=pos.x,y=pos.y,z=pos.z,stackpos=0},toPos) then doPlayerSendCancel(cid,"Não jogue item ai!!") doSendMagicEffect(getThingPos(cid),CONST_ME_POFF) return false end end return true end CRÉDITOS: @L3K0T Fir3element Summ Wise GOD Wille OUTROS: Funções que foram adicionada: onMoveItem2(cid, item, count, toContainer, fromContainer, fromPos, toPos) onMoveItem(moveItem, frompos, position, cid) bloquear Item para não mover certo item no seu servidor, adicione sempre antes do return true end moveitem1 if moveItem.itemid == IDDOITEM then doPlayerSendTextMessage(cid,25,'você bloqueou um item para não move no jogo!') return false end
  8. 7 points
    Nolis

    Sistema de Medalhões! Solicite aqui!

    1 - O que é Sistema de Medalhões? R = É um modo de gratificar os membros pela participação em nosso site e por trazer conteúdos para a comunidade. 2 - Para que servem os Medalhões? R = Os medalhões ficam expostos em todos os posts que você fizer e também na aba Medalhões, diretamente em seu perfil, dessa forma todos os membros poderão ver as suas conquistas! 3 - Quais medalhões posso obter? R= Você pode obter 1 medalhão de cada categoria, veja todos eles abaixo ou na página de medalhões. Posts: Reputação: Seguidores: Tempo de Registro: Medalhões de Cargos Obtidos e Eventos serão adicionados por avaliação da equipe, conforme o mérito do membro em questão. 4 - Posso ter vários medalhões da mesma categoria? R = Não, se você tinha um medalhao de 25 seguidores e passou a ter 50 seguidores, nós trocaremos o seu medalhão. 5 - Como solicito um medalhão? R = Comente neste mesmo tópico, nós adicionaremos conforme o seu perfil. 6 - Já tenho um medalhão, mas meu status agora é maior, como faço? R = Basta solicitar neste mesmo tópico e um membro da equipe removerá o antigo e adicionará o novo para você. Dúvidas? Comente!
  9. 7 points
    Nolis

    Nolis Show Off

    Dargor, Treiners e Sul
  10. 6 points
    Olá galera do TK ! Venho por meio deste tópico, publicar a ultima versão do meu servidor derivado de Tibia NTO Hard juntamente com todos os arquivos necessários para edições. Confesso que não foi fácil tomar essa decisão, afinal de contas foram mais de 5 anos nessa vida de administrador de otserver e esses arquivos são de muita valia, tenho certeza de que muito do que conquistei e me tornei, é resultante dos servidores que pude administrar. Costumo dizer que não sou programador e que estou mais para um gerente de scripts, todos os meus servidores foram criados com base em arquivos disponibilizados em comunidades como esta, sendo assim, pensei comigo, seria interessante eu disponibilizar e de certa forma contribuir, acredito que esses arquivos ainda podem ser útil para muitos. O que tem de diferente no NTO Hard ? Foi feito com muito carinho ! Rs. Eu poderia fazer uma lista (BÍBLIA) do que tem no servidor porém estou sem tempo mas tenho certeza que esse é o servidor NTO mais completo, atual e disponível para ser baixado em qualquer comunidade de otserver. Veja algumas Imagens ! O que tem nesse Pacote Full de Arquivos NTO Hard ? Datapack mais recente e completa do servidor. Site Gesior com template própria + AntiDDOS. Client Descompilado + Estendido + DLL Manabar com ajuste na altura da Barra de Vida/Chakra + DLL Proteção para extensão.cab Source OTX compatível com o servidor CabCreator Item Editor que funciona com o item.otb do server Object Builder 0.4.1 Remeres Map Editor Estendido para funcionar com o client do server Pic Editor IP Changer DOWNLOAD & SCAN dbresetada.sql
  11. 6 points
    Erimyth

    Staff TibiaKing - Recrutamento

    Ser um membro da equipe é muito mais que receber um cargo e permissões especiais, é cuidar dos membros que participam do fórum e olhar com atenção para os 10 anos de conteúdos aqui salvos. É saber que toda vez que precisamos de um servidor pra por online, um client, um código ou mapa, viemos até aqui e baixamos, e é muito fácil vir aqui e baixar. São mais de 90 mil tópicos disponíveis, e todos os dias são publicados novos arquivos e tutoriais gratuitos para a comunidade, por pessoas que tiveram a oportunidade de criar um Ot e quiseram compartilhar essa experiência, nós queremos que mais pessoas tenham essa oportunidade e queremos dar destaque a esses membros que cooperam! E é por isso que estamos recrutando membros para o nosso time! Essa é a sua chance de ajudar a comunidade Tibia King a melhorar cada vez mais! Vagas Disponíveis: 2x - Assistente (Scripting/Web) 2x - Assistente (Mapping/Spriting) 1x - Assistente (Tibia & Bots) Requisito: Possuir mais de 100 publicações (posts) na comunidade e ter conhecimento na área. Função: Aprovar/mover tópicos, ajudar membros na seção Suporte e trazer novos conteúdos para o fórum. 1x - Moderador Requisito: Já ter participado da equipe algum dia e possuir experiência com fóruns. Função: Aprovar/mover tópicos, ajudar membros na seção Suporte, trazer novos conteúdos para o fórum, punir membros infratores, revisar conteúdos publicados e ajudar na organização das seções. - Os cargos são voluntários, você pode sair quando quiser, porém se mostrar inatividade daremos sua vaga para outro membro. Para se inscrever comente neste tópico e nós entraremos em contacto! Lembre-se de informar a vaga que deseja ocupar, e sua experiencia na área escolhida!
  12. 6 points
    M ustang

    LanEngine

    Bom, recentemente estava vagando pelo meu facebook quando vi alguem querendo vender essa dll que sinceramente faz quase a mesma coisa que o ninja ripper que é extrair spr em png. Não vejo pra que vender ela então irei postar aqui para os interessados. Como usar: Troque o driver do jogo para OPENGL e jogue tudo da pasta LanEngine para dentro da pasta do jogo e aperte F1. Você pode modificar o programa abrindo a LanEngine.dll como bloco de notas ou notepad++. LanEngine Scan Creditos: Não sei quem fez...
  13. 5 points
    Bom galera hoje vou ensinar a vocês como acelerar as Sprites do seu jogo pra ficar como do Tíbia Global, assista o vídeo abaixo que você vai entender. Primeiramente vá na source do seu OTClient 0.6.6 "otclient-0.6.6\src\client"ou superior e abre o game.cpp depois de aberto procure. if(version >= 1050) mude para if(version <= 1050) Salve e Agora vá em const.h e procure. INVISIBLE_TICKS_PER_FRAME = 500, ITEM_TICKS_PER_FRAME = 500, mude para INVISIBLE_TICKS_PER_FRAME = 100, ITEM_TICKS_PER_FRAME = 100, Feito isso salve e da Rebuild no compilador do otcliente que voce usa "recompilação limpa" Depois de compilar vá no seu Object Builder e compile seu cliente pra "Improved Animations" pronto, agora só usar ATENÇÃO USE SOMENTE EM CASO DE ERROS DO OTCLIENT, CASO NÃO LER SEU CLIENTE; ache function load() local version = g_game.getClientVersion() em baixo coloca g_game.enableFeature(GameSpritesU32)
  14. 5 points
    xWhiteWolf

    Problema com Slot Backpack

    https://github.com/otland/forgottenserver/pull/2955
  15. 5 points
    TÉCNICA DOS CUBOS Inspirado nas ideias do Hawk (grupo academia de spriting), mostrarei como criar um cubo e o que pode ser feito com ele! Essa técnica é simples e pode ser feita até mesmo no paint! As imagens mostradas nesse tutorial não são de autoria minha, retirei da internet e algumas foram doadas pelo Hawk 1 - Fazendo um Cubo Trace uma linha reta no tamanho desejado (exemplo verde) e desenhe a ponta inferior do cubo usando duas linhas na diagonal, com o distanciamento de 2 pixels. Agora faça as paredes verticais proporcional ao comprimento das linhas e refaça o mesmo processo, veja a imagem: Pronto, temos um cubo, você pode criar vários modelos e replicar para uso próprio. Se preferir, detalhe o cubo com sombra e cor e você obterá um resultado melhor, veja abaixo: 2 - Usando cubos para criar itens de cenário! Tendo um cubo no tamanho proporcional ao cenário do Tibia, você pode copiar, colar e usar sua criatividade para formar outros objetos. Para mostrar como exemplo, usarei um cubo menor, veja abaixo: Objetos de Cenário ---> ---> Criaturas ---> ---> ---> ---> É isso! Agora é só praticar, mostre nos comentários o o resultado dos eu treino e até o próximo tutorial! 😀
  16. 4 points
    Olá. Como o @M ustang trouxe o servidor NTO ATOM Trago pra vocês o site do nto world ( e um pouco usado pelo o nto atom no tempo que eles não tinha site.) Espero que vocês gostem. e diverta-se com ele❤️ Download: http://www.mediafire.com/file/a80mbp219iefrwd/Site_Nto_world.rar/file Scan: https://www.virustotal.com/gui/file/e29d792e5dfa692a260f0aebe3d147146c5ddcd85bc896d7c803c5d83c780f39/detection Print's
  17. 4 points
    M ustang

    [BASE] NARUTO ATOM ONLINE - LINUX

    Bom, esses últimos dias ai vou fazer um agrado pra comunidade de tibia derivado. Hoje vou postar a base do Naruto Atom Online. ( baixe por conta e risco ) [+] Bom contem tudo do atom. [+] [+] Mesmas vocs. [+] [+] Mesmos sistemas. [+] [+] Mesmo mapa. [+] [+] Mesmo tudo. [+] OBS: CONTEÚDO PRÓPRIO PARA ESTE FÓRUM COMO FOI COMPRADO QUERO O CONTEÚDO SÓ AQUI NÃO ESTÁ LIBERADO A POSTAGEM EM OUTROS FÓRUNS Download Client ( use algum molebox unpacker) Source Créditos: Naruto Atom Online. ( o servidor foi comprado caso precise de provas eu mando )
  18. 4 points
    Tutorial completo de como compilar seu server 12.x + Site no Google Cloud Ubuntu 18 Link para os comandos necessários. https://pastebin.com/jFb53pyi
  19. 4 points
    Hello there, im realeasing my server again, i abandoned this project some time ago and i dont want it to get old without be used. so i will give it to you with some other changes that i do. Sorry if i cant support you, dont speak much Portuguese. I will add some notes PLEASE READ THEM Custom level system *REMOVED* Custom Stat System*REMOVED* ZOOM System on client (Ctrl+1 & Ctrl+2) *NEW* Reworked UI on client *NEW* Custom Autoloot system 100% *NEW* Custom Pokemon change bar (Need to add images to client only first 250 pokes with picture) *NEW* Bike & MotorBike System *NEW* Smeargle System Kecleon System Mega Stone system Outland zone lvl +150 Nightmare Zone (open pvp zone, no revives) lvl +300 Held System (elemental added) Tokens Machine !invite fixed on the source (need to activate on talkactions) PLEASE READ THIS NOTES New Prints Old Prints Mega stones looted by normal pokes with custom loot system (can check on the dex) New 3 quests untested and without pokes inside, only bosses and rewards on chests Known Bugs Scans Download Links Use the database included with the page. Credits All mentioned on the original post of DXP Cipsoft Pxg TibiaKing forums for the releases Me (Omarwsk) EDIT: sorry, i really abandoned this project, if you get this error [Error - GlobalEvent Interface] data/globalevents/scripts/broadcast.lua:onThink Description: data/globalevents/scripts/broadcast.lua:19: attempt to index field '?' (a nil value) stack traceback: data/globalevents/scripts/broadcast.lua:19: in function <data/globalevents/scripts/broadcast.lua:17> [Error - GlobalEvents::think] Couldn't execute event: autoBroadcast FIX:
  20. 4 points
    Movie

    [TFS 1.X] Online Bonus System

    Olá a todos, e estou de volta pra postar alguns conteúdos... Fui atrás de um online bonus system para tfs 1.3 e não achei e portanto decidi fazer o meu, com a ajuda do @vankk. ================================================================================================================ Testado em TFS 1.3 na versão 8.60. ================================================================================================================ ================================================================================================================ No seu banco de dados, execute a seguinte query ALTER TABLE `players` ADD `online_time` int(11) NOT NULL DEFAULT 0 ================================================================================================================ O próximo passo é apenas para quem gostaria de que, a cada server save, o número seja zerado! ================================================================================================================ Em globalevents/scripts/startup.lua, após o inicio da função onStartup() adicione o seguinte código db.query("UPDATE `players` SET `online_time` = 0") ================================================================================================================ Agora crie um arquivo chamado onlinebonus.lua em creaturescripts/scripts com isso dentro local event = {} local function addOnlineToken(playerId) local player = Player(playerId) if not player then return false end if player:getIp() == 0 then event[player:getId()] = nil return false end player:addOnlineTime(1) player:getPosition():sendMagicEffect(CONST_ME_GIFT_WRAPS) player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Você ganhou 1 online token por permanecer online por 1 hora sem deslogar.") player:addItem(12543, 1) event[player:getId()] = addEvent(addOnlineToken, 60 * 60 * 1000, player:getId()) end function onLogin(player) player:registerEvent("OnlineBonus") if event[player:getId()] == nil then event[player:getId()] = addEvent(addOnlineToken, 60 * 60 * 1000, player:getId()) end return true end -- <event type="login" name="OnlineBonus" script="onlineBonus.lua" /> A tag XML está no fim desse código. ================================================================================================================ Agora, na pasta lib, crie um arquivo chamado onlineTime.lua e coloque isso dentro function Player.getOnlineTime(self) local resultId = db.storeQuery(string.format('SELECT online_time FROM `players` WHERE `id` = %d', self:getGuid())) if not resultId then return 0 end local value = result.getNumber(resultId, "online_time") result.free(resultId) return value end function Player.addOnlineTime(self, amount) db.query(string.format("UPDATE `players` SET `online_time` = `online_time` + %d WHERE `id` = %d", amount, self:getGuid())) end Não esqueça de registrar essa lib no lib.lua. ================================================================================================================ Agora, na pasta talkactions/scripts, crie um arquivo chamado onlinebonus.lua com o seguinte código dentro: function onSay(player, words, param) local skill = player:getOnlineTime(player) local message = "--------[+]------- [Online Bonus System] -------[+]--------\n\nGanhe um online token a cada hora que você passa online sem deslogar.\n\n---------------------------------------------------\n Total\n Desde o server save você já ganhou " .. skill .. " online tokens." doPlayerPopupFYI(player, message) end -- <talkaction words="!onlinebonus" script="onlineBonus.lua"/> A tag XML está no fim desse código. ================================================================================================================ O usuário irá receber um item a cada hora online sem deslogar. O item está no código de creaturescripts com o id 12543, que pode ser alterado para qualquer item que seja agrupável. ================================================================================================================ É isso por hoje.
  21. 4 points
    • Extensions Customizadas I - Grounds • Extensions Customizadas II - Walls > Extensions Customizadas III - Doodads (objetos montados) Os arquivos que serão editados serão estes abaixo, faça um backup antes de começar: • Mostrarei 4 tipos de Doodads que podem ser criados na paleta: 1 - Um item único simples. 2 - Itens que se conectam. 3 - Vários itens sortidos. 4 - Peças no andar superior e inferior, vertical e horizontal. Agora vou mostrar como funcionam os códigos desses doodads. Eles podem ser usados como modelo para criar outros. 1 - Item único. Em RME - data - versão - doddads.xml Usarei o item Lava Fountain como exemplo: <brush name="lava fountain" type="doodad" server_lookid="5074" draggable="true" on_blocking="false" thickness="100/100"> <alternate> -- south -- <item id="5074" chance="10"/> </alternate> <alternate> -- east -- <item id="5075" chance="10"/> </alternate> </brush> Brush Name: o nome que será identificado posteriormente em tilesets.xml, para ser cadastrado na paleta Type: Não mude. Server_lookid: Id do item que aparecerá na paleta. Draggable: Se o item é arrastável ou não. On_blocking: Se o item poderá ser colocado em cima de outros objetos ou void, ou apenas em um piso andável. Thickness: Não mude. • Para este item simples, veja que é possível adicionar outras versões do mesmo item, como por exemplo ele virado para outras direções, para isso você usa a tag: <alternate> conteúdo </alternate>. • No map editor, para alternar a direção do item utilize a tecla Z. Não precisa definir a direção do item no código, conforme você utilizar a tecla Z o item será alternado de acordo com a ordem que os objetos foram adicionados no código. 2 - Itens que se conectam: Em RME - data - versão - doddads.xml Usarei o item Stone Wall como exemplo: <brush name="stone railing2" type="wall" server_lookid="3481"> <wall type="pole"> <item id="3483" chance="1"/> </wall> <wall type="horizontal"> <item id="3481" chance="1"/> </wall> <wall type="vertical"> <item id="3482" chance="1"/> </wall> <wall type="corner"> <item id="3480" chance="1"/> </wall> </brush> • Type wall permite usar as tags "pole, horizontal, vertical e corner", para definir como os itens serão conectados, portanto não mude. Não esqueça de sempre fechar a tag corretamente <wall type...> ... </wall>. Wall type Pole id: Wall type Horizontal id: Wall type Vertical id: Wall type corner id: 3 - Itens sortidos: Em RME - data - versão - doddads.xml Usarei o item Stone Rocks como exemplo: <brush name="tiny stone rocks" type="doodad" server_lookid="3614" draggable="true" on_blocking="true" on_duplicate="true" thickness="50/100"> <item id="3610" chance="4"/> <item id="3611" chance="7"/> <item id="3613" chance="7"/> <item id="3614" chance="10"/> </brush> • Parecido com o código do Lava Fountain, a diferença é que nesse caso não tem a tag alternate, pois os itens não possuem uma direção específica. Mas possuem variedades, e isso pode ser feito simplesmente duplicando o código <item id..../> • Chance irá definir qual item aparecerá mais vezes e menos vezes. 4 - Peças no andar superior e inferior Em RME - data - versão - doddads.xml Usarei o item Waterfall como exemplo: <brush name="waterfall" type="doodad" server_lookid="3569" draggable="true" on_blocking="true" on_duplicate="true" thickness="100/100"> <alternate> <composite chance="10"> <tile x="0" y="0" z="0"> <item id="3569" chance="10"/> </tile> <tile x="0" y="1" z="0"> <item id="3573" chance="10"/> </tile> <tile x="0" y="0" z="-1"> <item id="3571" chance="10"/> </tile> </composite> </alternate> <alternate> <composite chance="10"> <tile x="0" y="0" z="0"> <item id="3570" chance="10"/> </tile> <tile x="1" y="0" z="0"> <item id="3574" chance="10"/> </tile> <tile x="0" y="0" z="-1"> <item id="3572" chance="10"/> </tile> </composite> </alternate> </brush> • Veja que para adicionar um item que contém uma parte dele no andar superior, usamos o esquema x, y, z dentro da tag <composite></composite>. Lembrando que: (o centro = 0 é o SQM onde for aplicado o conjunto de itens) - X representa a linha horizontal, positivo = vai para a direita, negativo = vai para a esquerda. - Y a vertical, positivo = vai para o sul, negativo = para o norte. - e Z floors (andares), sendo que Z negativo = para subir e Z positivo = para descer, Z = 0 representa o andar-centro. - Composite chance: mantenha o mesmo valor para ambas as opções • Nesse código foi usado a tag <Alternate></alternate> por que a cachoeira possui duas direções, e para alterná-las use a tecla Z. • Observando a primeira tag <alternate> veja a posição dos três itens: • Cadastre os doodads em tilesets.xml, use a ferramenta CTRL + F para procurar itens próximos ou paletas que você quer adicionar os itens e acrescente as tags: Exemplo: <brush name="lava fountain"/> • Use os códigos de modelo para criar novos itens. • O estilo de doodad (exemplo 4) pode ser usado para criar pontes, estátuas e outros objetos que possam ser montadas as partes. • Dúvidas? Comente.
  22. 4 points
    Hologram

    Website em rede externa Free

    Objetivo: Assim como eu, alguns tem roteadores via radio que não são possiveis abrir portas, então logo é dificil tu compartilhar ideias do seu site diretamente com outras pessoas, e essa foi minha solução! Hoje falaremos sobre Ngrok: O ngrok não é nada mais nada menos do que um "túnel", onde a função dele é redirecionar conexões externas para o seu localhost. Ou seja, você consegue com ele, rodar aquele teu projeto php ou html que está em localhost na rede externa e mostrar para as outras pessoas para obter suporte, oferecer serviços ou sei lá, usa sua imaginação Disponivel para as plataformas de Windows e Linux. Como funciona: O ngrok possui um binário, onde é necessário ter Links Bloqueados para Visitantes, então você precisa de uma espécie de key oferida no site e fazer login para poder usa-lo diretamente do seu terminal ou ms-dos. Configurando o programa: Primeiramente você precisa criar uma conta, pode-se fazer isso através do Site Após criar sua conta e fazer login nela Baixe o Ngrok Em seguida o extraia para uma pasta de sua preferência: Após isso pode executar o programa, e ativar sua conta através do comando: Iniciando uma conexão: Sete o comando: E pronto! só copiar o link que o ngrok criou e colar na sua url, o seu site estará disponivel em rede externa, e quando não quiser mais usar é só dar um "Ctrl+c" no programa que ele fechara a conexão!
  23. 4 points
    Nolis

    Nolis Show Off

  24. 3 points
    imperianic

    Imperianic 7.4 HOST BR HOJE ÀS 18:00

    Imperianic 7.4 oldschool Chegou a hora! Hoje às 18:00 inauguraremos o primeiro mundo no Imperianic IMERA, hospedado no Brasil! Crie já sua conta pelo link abaixo e garanta 5 dias de Premium Account grátis! https://imera.imperianic.com/register.php?refer=tk SERVIDOR: Versão 7.72 com mecânicas do 7.4 Hospedado no Brasil Mid-RATE Free accounts com spells, cidades e viagens assim como Premium Accounts Site: www.imperianic.com CLIENTE: Layout clássico oldschool Auto backpack reopener Guia de hunts INGAME Loja INGAME Biblioteca de itens INGAME Guia e ajuda do sistema de tasks INGAME Sistema de CAM Sistema de CAST MAPA: 70+ caçadas personalizadas Mais de 30 respawns prontos para novas atualizações Áreas remodeladas com estilo oldschool Base 100% antiga do mapa da cipsoft 7.72 JOGABILIDADE: Fórmula de velocidade privada e exclusiva, onde um único nível faz diferença na velocidade para dar lost no alvo Sistema automático de guerra de guildas quando você entra em uma guild, todas as outras guildas são inimigas Sem frags por mortes de guildas / guildas e sistema imposto por PVP que dá EXP ao matar inimigos Experiência de 5% aumentada para guildas com mais de 5 membros online Anti-maker em guerras que teletransportam novatos para o templo e não dão frags aos assassinos AOE significa redução de dano ao acertar mais jogadores Perda de morte 20% maior para bênçãos do que o comum Fast travel nos barcos com delay para evitar abusos Viagme nos barcos com SQMs aleatórios para evitar armadilhas Comportamento real de monstros, mais agressivo ao longo do tempo, correndo e sem encontrar caminhos Taxa de respawn com base no número de jogadores online Compartilhamento de EXP no sistema de festas com bônus de 10% para cada vocação Dano físico aumentado para knights e paladins Fórmulas ATK / DEF baseadas no servidor cipsoft 7.72 real Remoção de frascos MF O melhor oldschool 7.4 brasileiro! © 2020 Imperianic
  25. 3 points
    God Nightstalker

    Algumas Sprites

    Olá TibiaKings! Então eu estava brincando de "pixel art" e saiu umas coisinhas. Training Mace Battle Mace Knight Sword Battle Mace Old School (7.x) Training Weapons Old School (Axe, Mace, Sword)
  26. 3 points
    Belmont

    AutoLoot 100% Funcional

    E ai pessoal, vi que muitas pessoas tem problemas em instalar, e achar um script de autoloot 100% funcional. Foi ai que decidi postar aqui para vocês, um script totalmente novo e que realmente funciona, pronto para usar e abusar dele kkk. Bom, vamos parar de lero lero e bora ao que interessa. Fixados: Dinheiro Duplicado; Coleta itens até mesmo dentro das bag dos monstros; Lembrando que esse script NÃO é de minha autoria, e que já existe no Tk, mas em tópicos diferentes. Como eu uso ele já vou deixar tudo certo para o uso do mesmo. 1° Passo - Dentro da pasta data/actions/scripts crie um arquivo chamado autoloot_boost.lua Em data/actions/actions.xml registre o script assim: <action itemid="ITEMID" event="script" value="autoloot_boost.lua"/> 2° Passo - Vá na pasta data/creaturescripts/script e crie dois arquivos, um chamado autoloot.lua e o outro fimautoloot.lua depois, adicione os seguintes códigos: autoloot.lua fimautoloot.lua Agora em data/creaturescripts/creaturescripts.xml você vai registrar esses scripts dessa forma: <event type="kill" name="autoloot" event="script" value="autoloot.lua"/> <event type="login" name="fimautoloot" event="script" value="fimautoloot.lua"/> Abra o arquivo login.lua localizado na mesma pasta e adicione este código abaixo de outro registerCreatureEvent registerCreatureEvent(cid, "autoloot") Depois de instalar tudo, vamos para a pasta data/talkactions/script nela você irá criar um arquivo chamado autoloot.lua e vai adicionar este código: Em data/talkactions/talkcations.xml resgistra o script assim: <talkaction words="!autoloot" event="script" value="autoloot.lua"/> Isso é tudo pessoal! Informações: Este sistema funciona através de Premium Account, junto com ele vem o sistema de Autoloot Booster, que consiste em vender automaticamente os itens coletados. Foi testado em um servidor de Tibia 8.60 utilizando OTX 2. Créditos: @lordzetros @KOLISAO @Dwarfer Edit: A parte do Autoloot Boost de vender automaticamente não está funcionando, se alguém expert souber o por que e quiser compartilhar conosco, fique avontade. Obrigado!
  27. 3 points
    L3K0T

    Saiba todas as funções do seu TFS

    Como diz o titulo? você pode gerar suas funções do seu tfs em um arquivo texto, para fazer isso é só ir na lib 050 e adicionar isso no final, depois é só ligar o seu servidor e assim todas funções do seu server vai aparecer no arquivo txt. "Isso é bom pra resolver problemas de scripts e trabalhar de forma melhor, com a manipulação do mesmo." function getLuaFunctions() local str = "" for f,k in pairs(_G) do if type(k) == 'function' then str = str..f..',' elseif type(k) == 'table' then for d,o in pairs(k) do if type(o) == 'function' then if f ~= '_G' and d ~= "_G" and f ~= 'package' then str = str..f.."."..d..',' end elseif type(o) == 'table' then for m,n in pairs(o) do if type(n) == 'function' then if d == "_M" and m ~= "_M" and f ~= "_G" and f ~= 'package' then str = str..f.."."..m.."," elseif f ~= '_G' and m ~= "_G" and d ~= "_G" and f ~= 'package' then str = str..f.."."..d..'.'..m..',' end elseif type(n) == 'table' then for x,p in pairs(n) do if type(p) == 'function' then if m == "_M" and d ~= "_M" and f ~= "_G" and f ~= 'package' then str = str..f.."."..d..'.'..x..',' elseif m == "_M" and d == "_M" and f ~= "_G" and f ~= 'package' then str = str..f.."."..x..',' elseif m ~= "_M" and d == "_M" and f ~= "_G" and f ~= 'package' then str = str..f..'.'..m..'.'..x..',' elseif f ~= '_G' and m ~= "_G" and d ~= "_G" and f ~= 'package' then str = str..f.."."..d..'.'..m..'.'..x..',' end end end end end end end end end return string.explode(str,',') end local k = getLuaFunctions() local file__ = io.open('funcoes do seu servidor.txt','w') table.sort(k) for i=1,#k do if k[i] ~= "" then file__:write((i-1)..' - '..k[i]..'\n') end end file__:close() Créditos: Mock
  28. 3 points
    One Punch Man

    [8.60] RoxOt Datapack

    Informações: Mapa Evolutions editado! Zombie Event Vip System AntiCrash Hunting Rooms War System Mapa 100% Spells 100% Items 100% E mais! Download Datapack: https://www.sendspace.com/file/rh6o9k xRoxOT.rar Scan: https://www.virustotal.com/gui/file/fa21b52789cf55d21c4c3f217ab151ba37e76a98b29554a93f80b4fa6970eb5c/detection
  29. 3 points
    Boa tarde galera, alguem poderia me ajudar estou tentando criar um char no meu site após instalar a maquina ubuntu 16.04 mas sempre da o mesmo erro. Error occured! Error ID: Cannot save ItemsList. Player ID not set. More info: File: /var/www/html/classes/itemslist.php Line: 67 File: /var/www/html/classes/player.php Line: 87 File: /var/www/html/pages/accountmanagement.php Line: 2380 File: /var/www/html/system/load.page.php Line: 7 File: /var/www/html/index.php Line: 37 já segui o procedimento desse video https://www.youtube.com/watch?v=bRg68tttucQ&feature=youtu.be rodei o comando SET GLOBAL sql_mode=''; na db mas também não funcionou, resolveu meu problema de criar ACC que também estava dando erro mas o de criar char continua a mesma coisa.. já tentei de tudo e nada funciona, quando tinha um gesior antigo e dava o mesmo erro apenas rodava esse comando na DB e voltava ao normal mas agora não funciona.. no xampp funciona normal mas agora que instalei no ubuntu e ta o php 7 começou dar esse erro, alguem poderia ajudar. EDIT : Bom fiquei fuçando nesse negocio e por acaso comparando minha DB antiga com a minha nova apenas tive que colocar 1 alteração alem de tudo que fiz como dito acima, fui na tabela "players" depois "operações" e substitui o AUTO_INCREMENT que estava "12" por "9118" e consegui criar o char normal agora.
  30. 3 points
    Diego Rulez

    Staff TibiaKing - Recrutamento

    Eu gostaria de me inscrever pra vaga de Assistente para Tibia/Bots, visto que tenho muito conhecimento sobre essa seção. Apesar de não ter sido da equipe ainda, gostaria de tentar uma inscrição para a vaga de Moderador. Eu estou na comunidade desde 2005 (tendo iniciado em outros foruns) e também dei bastante ideias pro @Nolis em questão de estrutura e organização do fórum. Tento essas duas vagas, porque não vi nenhuma sobre infra-estrutura que é a que eu mais conheço e ajudo aqui no fórum, fica ai a dica também, as veze cabe uma vaga de Assistente pra essa área.
  31. 3 points
    L3K0T

    Vip/Premium Accounts Diferenciado

    Olá galera, hoje resolvi trazer um sistema de Vip Account diferenciado dos comuns, tá espera ai!!! Diferenciado? isso mesmo! O sistema funciona da seguinte forma, você tem lá 2 characteres criados na sua conta e sem vip, certo? então esse sistema só pega em um personagem da sua conta, sendo assim toda sua conta fica vip, mesmo entrando no outro charactere. Esse modo foi feito para LOGIN, sei que existe itens, mais essa é uma outra forma e espero que gostem. VIP LOGIN FOR 1 PRO PLAYER Instalando: vai em data\creaturescripts abra a pasta \scripts copia um arquivo.lua e renomeia para "vipleko" sem aspas e adicione dentro. function onLogin(cid) --Script by L3K0T local leko = { vipganhos = 2, -- Quantidade de vip ganhos na conta. verificarvip = 0, -- verificação no banco de dados. msg = "Você ganhou 2 dias de vip.", --menssagem que o player recebe dentro do jogo. msgfail = "Falhou", --apenas pra testar o sistema, para desativar é só por -- do lado aonde marquei com A. ver = 1 } if getPlayerVipLeko(cid) == leko.verificarvip then doPlayerAddPremiumDays(cid, leko.vipganhos) doPlayerAddVipLeko(cid, leko.ver) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, leko.msg) end if getPlayerVipLeko(cid) == leko.ver then --A doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, leko.msgfail) --A end --A return true end --Funções banco de dados by L3K0T function getPlayerVipLeko(cid) local Verh = db.getResult("SELECT `verificar` FROM `accounts` WHERE `id` = " .. getPlayerAccountId(cid) .. "") if Verh:getID() ~= LUA_ERROR then local VerP= Verh:getDataInt("verificar") Verh:free() return VerP end return LUA_ERROR end function doPlayerAddVipLeko(cid, ver) local verih = getPlayerVipLeko(cid) + ver if verih >= 0 then db.query("UPDATE `accounts` SET `verificar` = `verificar` + " .. ver .. " WHERE `id` = " .. getPlayerAccountId(cid) .. ";") return TRUE end return FALSE end function doPlayerRemoveVipLeko(cid, ver) local veriih = getPlayerVipLeko(cid) - ver if veriih >= 0 then db.query("UPDATE `accounts` SET `verificar` = `verificar` - " .. ver .. " WHERE `id` = " .. getPlayerAccountId(cid) .. ";") return TRUE end return FALSE end Agora volte a pasta scripts e abra o creaturescripts.xml e coloca essa tag lá dentro, <event type="login" name="LekoVipLogin" event="script" value="vipleko.lua"/> vá no seu banco de dados mysql e importe essa tabela. ALTER TABLE `accounts` ADD `verificar` INT NOT NULL DEFAULT 0 feito isso ligue seu servidor e já pode brincar com o sistema Dúvidas para importar o mysql? vídeo abaixo. 2020-05-13_15-32-40.mp4
  32. 3 points
    Bruxo Ots

    Compilar TFS 1.3 Vcpkg

    Fala tigrada, videozinho curto ensinando a compilar usando a nova forma de compilar as sources tfs. Utilizei a base do pessoal da otg, mas o processo serve para ambas sources. Links Uteis Downloads Visual Studio Git Comandos para instalação do Vcpkg cd C:/ git clone https://github.com/Microsoft/vcpkg cd vcpkg ./bootstrap-vcpkg.bat ./vcpkg integrate install Bibliotecas 64x ./vcpkg install --triplet x64-windows boost-iostreams boost-asio boost-system boost-filesystem boost-variant boost-lockfree luajit libmariadb pugixml cryptopp x32 ./vcpkg install boost-iostreams boost-asio boost-system boost-filesystem boost-variant boost-lockfree luajit libmariadb pugixml cryptopp Todo o credito a equipe do TFS Links de Download sem scan pois são de fontes confiaveis.
  33. 3 points
    Cain Suicide

    Site do NTOROX

    Salve tk, Não tem muito oque falar vou estar disponibilizando o meu site que fiz em algumas horas. Modern acc Possui painel administrativo ( modern acc ) *adicionar noticias,itens etcs. Baixar: https://www.mediafire.com/file/v6zoue1lw6hlj0u/htdocs.rar/file Scan: https://www.virustotal.com/gui/file/28d82646f303fcd155f8fe289af5b6198fa89b1928856c07f698f3ca6d9a6c31/detection Bom se quiser ver como é pode acessar o http://ntorox.ddns.net:8090
  34. 3 points
  35. 3 points
    Nolis

    Lista completa de Monstros e Looktypes

    LISTA DE LOOKTYPES (Todas as Versões), Fonte: Otland Lista 0-1283
  36. 3 points
    Carlos Dukka

    Sprites Para one piece

    Boa noite galera do tk apos postar sprites da pxg padventures, nada seria mais justo do que trazer oportunidades novas a voce que deseja fazer seu servidor e ajuda a comunidade tibiana hoje trago as sprites da grandline adventures um servidor fan de piratas do anime one piece. obs aqueles que desejam construir seus servidores sem pay to win leia abaixo\/ para não ficar tudo numa imagem tive que picotar elas. então voces terão que juntar algumas o ponto positivo é que cabe certo no object, coloquei algumas imagens tambem reduzidas de mapa para termos uma noção basica de alguns locais do mapa como referencia. ah tambem alguns icones e imagens de ot client para caso alguem que saiba fazer sistema ou conheça alguem use-as spolier abaixo scanner e bom proveito. Link:http://www.mediafire.com/file/fjwe8oglat465fe/gla_sprites.rar/file Scanner:https://www.virustotal.com/gui/file/55c703241ac7e9ec69daee4e0f834285ec2c0ec996697c329160031ebb5a6d9f/detection Spollier: imagem a baixo
  37. 3 points
    @Yan Liima A acusação procede? Preciso fazer o scan completo de todos os arquivos ou posso confiar que o scan apresentado na denúncia foi resolvido? Resolvido por pm, o arquivo em questão foi removido pelo autor do tópico.
  38. 3 points
    MatteusDeli

    Exp Banner

    Boa noite, não sei se já existe este script aqui no fórum caso não aqui está. Este script foi testado na versão 8.6 TFS 0.4 Bom neste script eu tive como base o script de banner da PXG aonde você coloca ele em uma Hunt e ganha uma porcentagem X a mais de experiencia. Instalando o Script - Vá em data/lib crie um arquivo com o nome bannerExp.lua e cole o código abaixo nele: -- Configurações -- effect_invoke_banner = 10 -- efeito que saira no banner quando ele for colocado no chao effect_decay_banner = 2 -- efeito que saira no banner quando o tempo dele acabar effect_kill_banner = 36 -- efeito que saira no banner quando o player matar um monstro e ganhar o bonus de exp banner_radius_x = 5 -- distancia maxima em x que ira ocorreu o bonus banner_radius_y = 5 -- distancia maxima em y que ira ocorreu o bonus time_in_minutes = 60 -- configurado em minutos (caso queira em horas só colocar 60 * 60) config_banner = { --[ID DO ITEM CRIAR O BANNER] = {banner_id = ID DO BANNER, exp_bonus = % EXP PLAYER IRA GANHAR, time_left = TEMPO PARA SUMIR O BANNER}, [4865] = {banner_id = 8617, exp_bonus = 20, time_left = 20}, } -- Não Mexer -- time_banner = 7899987 player_use_banner = 78999788 storage_banner_x = 7889911 storage_banner_y = 7889912 storage_banner_z = 7889913 storage_banner_id = 7889914 storage_exp = 7889915 rate_level = SKILL__LEVEL - Agora vá em data/actions/scripts e crie um arquivo chamado bannerexp.lua e cole isto dentro: function onUse(cid, item, frompos, itemEx, topos) if (getPlayerStorageValue(cid, player_use_banner) >= 1) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Voce ja esta usando o banner.") return true end if (config_banner[item.itemid]) then local banner = config_banner[item.itemid] CreateBanner(cid, banner, itemEx) TimeBannerCheck(cid, banner, getThingPos(itemEx.uid)) end end function CreateBanner(cid, banner, itemEx) doCreateItem(banner.banner_id, getThingPos(itemEx.uid)) doSendMagicEffect(getThingPos(itemEx.uid), effect_invoke_banner) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Voce usou o banner de ["..banner.exp_bonus.."% EXP], ele tem duração de "..banner.time_left.." minuto(s).") setPlayerStorageValue(cid, storage_banner_x, getThingPos(itemEx.uid).x) setPlayerStorageValue(cid, storage_banner_y, getThingPos(itemEx.uid).y) setPlayerStorageValue(cid, storage_banner_z, getThingPos(itemEx.uid).z) setPlayerStorageValue(cid, storage_banner_id, banner.banner_id) setPlayerStorageValue(cid, storage_exp, banner.exp_bonus) setPlayerStorageValue(cid, player_use_banner, 1) setPlayerStorageValue(cid, time_banner, os.time() + (banner.time_left * time_in_minutes)) end function TimeBannerCheck(cid, banner, banner_pos) if not isCreature(cid) then doRemoveItem(getTileItemById(banner_pos, banner.banner_id).uid) doSendMagicEffect(banner_pos, effect_decay_banner) return true end if (getPlayerStorageValue(cid, time_banner) == os.time()) then doRemoveItem(getTileItemById(banner_pos, banner.banner_id).uid) doSendMagicEffect(banner_pos, effect_decay_banner) setPlayerStorageValue(cid, player_use_banner, -1) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "O Banner de ["..banner.exp_bonus.."% EXP] terminou.") return true end addEvent(function() TimeBannerCheck(cid, banner, banner_pos) end, 1000) end - Em Actions.XML cole esta tag: <action itemid="4865" script="bannerexp.lua"/> Aonde está 4865 você coloca o(s) ITEM_ID que será usado para summonar o banner no chão. - Agora vá em data/creatureevents/scripts crie um arquivo chamado bannerexp.lua e cole isto dentro dele: function onKill(cid, target) if not isMonster(target) then return true end if (getPlayerStorageValue(cid, storage_banner_id) <= -1) then return true end local banner_pos = {x=getPlayerStorageValue(cid, storage_banner_x), y=getPlayerStorageValue(cid, storage_banner_y), z=getPlayerStorageValue(cid, storage_banner_z)} if (getTileItemById(banner_pos, getPlayerStorageValue(cid, storage_banner_id)).uid >= 1) then CheckPlayerInArea(cid, banner_pos) else doPlayerSetRate(cid, rate_level,1) end return true end function CheckPlayerInArea(cid, banner_pos) for x=banner_pos.x-banner_radius_x, banner_pos.x+banner_radius_x do for y=banner_pos.y-banner_radius_y, banner_pos.y+banner_radius_y do local banner_area = {x=x,y=y,z=banner_pos.z} local player = getTopCreature(banner_area).uid if (isPlayer(player)) then AddBonusExp(cid, banner_pos) end end end end function AddBonusExp(cid, banner_pos) doPlayerSetExperienceRate(cid, (1+(getPlayerStorageValue(cid, storage_exp)/100))+(getPlayerExtraExpRate(cid)/100)) doSendMagicEffect(banner_pos, effect_kill_banner) end function getPlayerExtraExpRate(cid) return (getPlayerRates(cid)[rate_level]-1)*100 end - Em Creatureevents.XML cole está tag: <event type="kill" name="BannerExp" event="script" value="bannerexp.lua"/> - Agora no arquivo login.lua em data/creatureevents/scripts cole este código antes do último return true: registerCreatureEvent(cid, "BannerExp") if (getPlayerStorageValue(cid, 78999788) >= 1) then setPlayerStorageValue(cid, 78999788, -1) end Explicação: (Configuração fica no arquivo adicionado no data/lib) 1° Aqui você configura a área em que o player tem que estar matando o monstro para poder ganhar o bônus banner_radius_x = 5 -- distancia maxima em x que ira ocorreu o bonus banner_radius_y = 5 -- distancia maxima em y que ira ocorreu o bonus 2° Aqui você adiciona um novo banner (Lembre-se de adicionar o itemid que você colocar entre colchetes lá na tag em Actions.XML) -[ID DO ITEM CRIAR O BANNER] = {banner_id = ID DO BANNER, exp_bonus = % EXP PLAYER IRA GANHAR, time_left = TEMPO PARA SUMIR O BANNER}, É isso... Script básico mais eu acho que vai ser bastante útil para muitos servidores.
  39. 3 points
    9k22

    TFS 0.4 3777

    Olá @Magalhaes92, tudo bem? Primeiramente, verifique no seu config.lua o seu packetsPerSecond. O mesmo não pode ultrapassar 450. (recomendo 350 ou 400) Agora tente modificar a porta do SSH e instalar uma proteção para DDoS. Não vai ser as melhores opções, mas vai te ajudar muito. Não copie o $: $ nano /etc/ssh/sshd_config Procure por algo parecido como Port 22, modifique para um à sua escolha. Sempre que você for acessar sua máquina, você não irá usar a porta 22 e sim, a porta que você escolheu. Reinicie o SSH: $ service ssh restart Beleza, agora só você saberá o valor da porta SSH, ficará mais difícil atacarem esta porta. Instale agora um CSF dentro de uma Screen e configure: (caso não tenha screen, utilize o comando: apt get install screen -y) $ screen -S CSF $ cd /home $ rm -fv csf.tgz $ wget https://download.configserver.com/csf.tgz $ tar -xzf csf.tgz $ cd csf $ sh install.sh $ nano /etc/csf/csf.conf Use CTRL + W e procure por: TESTING = "1", mude para 0 Configure tudo: Lembre-se: Onde estiver XXXX, troque pela porta SSH. (Coloquei em XXXX pensando que você modificará a sua porta SSH) TCP_IN = "80,7171,7172,XXXX" TCP_OUT = "80,7171,7172" UDP_IN = "" UDP_OUT = "" TCP6_IN = "80,7171,7172,XXXX" TCP6_OUT = "80,7171,7172" UDP6_IN = "" UDP6_OUT = "" CT_LIMIT = "100" SYNFLOOD = "1" SYNFLOOD_RATE = "150/s" SYNFLOOD_BURST = "200" UDPFLOOD = "1" PORTFLOOD = "80;tcp;20;5,7171;tcp;20;5,7172;tcp;20;5,XXXX;tcp;5;60" PS_INTERVAL = "1500" PS_LIMIT = "20" Agora reinicie o CSF para aplicar as modificações: $ csf -r Caso seu CSF esteja desativado, utilize: $ csf -e AVISO: Caso cometa algum erro nas configurações acima, você perderá acesso à maquina. Não preciso comentar o que vai ocorrer né
  40. 3 points
    Hologram

    Edit Shop System Modern AAC

    Não sei de quem era o script original, créditos a ele Shop ModernAac editado: *Traduzi 80% para o português *Retirei o bug do f5 pra conseguir comprar vários itens na loja *Troquei algumas linhas de comando que ocasionavam erros nas versões mais atuais do Xampp *Adicionei novas tabelas *Retirei varias linhas de códigos desnecessarias pra deixar o script mais leve *Adicionei mensagem quando o item chegar pra pessoa no jogo Lets'go 1-Em sua database importe essa sql Shop.sql 2-Na aba principal do Htdocs crie uma pasta chamada "ShopSystem" e dentro dela crie 2 arquivos .php index.php shopping.php 3- E dentro dessa mesma pasta, crie uma subpasta chamada " config " e nela crie mais 3 arquivos .php config.php Altere o Login e Password para os dados do seu site, e Database para o nome da sua database functions.php index.php 4- Agora em C:\xampp\htdocs\system\pages crie um arquivo chamado shopping.php 5- Agora em C:\xampp\htdocs\templates\SUAPASTA\index.tpl Abaixo de <div class="nav_links_logged"> Adicione: 6- Agora em \Pokemon Server\datapack\globalevents\globalevents.XML adicione 7- Agora em \Pokemon Server\datapack\globalevents\scripts\ crie um arquivo .lua shop.lua
  41. 3 points
    Diego Rulez

    Host para OT dúvida

    Discordo completamente do comentário acima. Existem empresas que possuem vps e VENDEM o serviço e empresas que REVENDEM o serviço (como a servercore). É recomendado que você contrate direto na fonte, pelos seguintes motivos: Nenhum revendedor vai ter os arquivos do seu server (muitos já foram roubados aqui no fórum por contratar revendedores). O atendimento é mais rápido e direto com quem vai resolver os problemas e não com quem vai intermediar a resolução. Preço, se não está sendo revendido é claro que será mais barato. Eu recomendo que use a OVH (Empresa que todos os servidores com estabilidade usam), lá você só instala e pronto, não precisa se preocupar com nada em relação a segurança. Site da OVH: https://www.ovh.com/ca/en/ Boas opções para começar: https://www.ovhcloud.com/en-ca/vps/compare/
  42. 3 points
    Nolis

    Nolis Show Off

    Trabalhando no remake da INQUI entrada:
  43. 2 points
    ashwese

    Sprites Tokyo Ghoul

    Criador ashwese! #CREDITOS# Canal:ashwese igor O video no canal sairá em 1 hora!!!sobre essa sprite mostrando dentro do arquivo Bom proveito da sprite! estou liberando 1 pronta com varios formatos ordenados de uma só tenha um bom proveito da sprite Kaneki dat e spr tibia(sprites juntas e arquivos).zip
  44. 2 points
    Vingeance

    Vingeance's

    Medieval Yurots 8.60
  45. 2 points
    LeoTK

    Staff TibiaKing - Recrutamento

    @Erimyth gostaria de me inscrever para moderador já fui da equipe antes do fórum ser vendido comecei como suporte o antigo assistente e fui subindo de cargo até moderador tenho muitos anos de atividade no fórum e na comunidade tenho experiencia já no cargo.
  46. 2 points
    Carlos Dukka

    Sprites padventures (Parte 2)

    boa noite galera vim passar aqui rapido e deixar a parte 2,sprites padventures para galera Link:http://www.mediafire.com/file/al5m466wlupysaw/Padventures_Parte_2.rar/file Scanner: https://www.virustotal.com/gui/file/d99efa1069d19ed9b13a9ed9251d12a8b4ed42d623a4ab646a418c2013583a8f/detection Spolier: Imagem (obs para quem queira saber sobre a parte 1 anteriormente tinha postado ela no tibiaking)
  47. 2 points
    Renan Gerson

    Mapa castelo para Tíbia 8.54

    Bom, sempre que eu tiver um tempo disponível eu irei trazer algumas criações de mapas para servidores 8.54. Ao longo do tópico irão ver imagens do mapa criado por mim chamado " Castelo/Castle ". Caso queira pegar o projeto e fazer melhorias para postar no fórum certifique-se de dar os devidos créditos: -------------------------------------------------- Inicialmente criado por: Renan Gerson Modificado e melhorado por: ( SEU NOME ) -------------------------------------------------- Dês de já se consegui te ajudar da REP+ -O mapa mostrando nas imagens é um castelo com apenas um acesso ( frontal/ponte ). -Possuindo algumas casas dentro dele e uma "área real" logo a cima da entrada, uma subida em cada parte da frente do castelo para visualizar novos inimigos se aproximando e caminhos diretos da frente até a "área real". -Também possuindo duas decidas para a área de maquinas ( onde faz a energia chegar nas cassas dos moradores ). -OBS: portas não testadas. Download: https://www.mediafire.com/file/hbf6ci2fugfphow/Mapa_Castelo-Renan_Gerson.rar/file
  48. 2 points
    9k22

    ANSWERED Cast System

    Olá @bellatrikz, tudo bem? Você deverá ter uma conta com accountName = 10
  49. 2 points
    Como compilar no Windows (TFS 0.4) E aí pessoal, beleza? Apanhei muito para aprender a compilar no Windows, nunca dava conta, e um dia alguém (não me lembro quem) me ajudou e estou aqui para repassar esse conhecimento... Enfim, hoje vou ensinar como compilar a TFS 0.4 no Windows, e em breve, no Linux. Primeiramente, irei deixar a lista de programas que iremos precisar. ==================================================================================== Dev C++ (Links para download no spoiler) ==================================================================================== Uma TFS 0.4 ==================================================================================== Feito o download de tudo isso, vamos ao passo a passo. ==================================================================================== 1º Após baixar a TFS, abra a pasta e encontre a pasta src ==================================================================================== 2º Abra a pasta, encontre a pasta dev-cpp encontrada dentro da pasta src ==================================================================================== 3º Crie uma pasta chamada "Obj" dentro dessa pasta ==================================================================================== 4º Beleza, agora vamos abrir o Dev C++ ==================================================================================== 5º Com o Dev C++ aberto, vamos abrir o projeto da TFS 0.4 ==================================================================================== 6º Irá aparecer uma caixa para você escolher qual arquivo você irá procurar. Então vamos naquela pasta dev-cpp e encontraremos o "TheForgottenServer.dev" e selecionaremos ele. ==================================================================================== 7º Irá carregar muitos arquivos que apareceram em uma lista, não recomendo vocês mexerem neles se não tiver um conhecimento necessário para tal. ==================================================================================== 8º Agora vamos no Menu Project -> Project Options, ou apertar Alt + P ==================================================================================== 9º Feito isso, vamos em Parameters e iremos adicionar algumas coisas em C++ compiler e em Linker ==================================================================================== 10º Em C++ compiler coloque esses parâmetros ==================================================================================== 11º Agora em Linker, coloque esses parâmetros ==================================================================================== 12º Ainda em Project Options, vamos na aba Build Options e iremos escolher o Object file output directory e colocar aquela pasta "Obj" que criamos lá em cima ==================================================================================== 13º Feito isso, irá ficar assim ==================================================================================== 14º Agora pode dar Ok no Project Options ==================================================================================== 15º Agora, vamos COMPILAR!! Use o primeiro item (o que tem 4 janelinhas de cores diferentes) ou use Ctrl + F9 ==================================================================================== 16º Irá aparecer uma janela como essa aqui, fique tranquilo, está tudo normal! ==================================================================================== 17º Ao terminar, aparecerá essa janela e a sua TFS 0.4 está compilada. ==================================================================================== 18º Voltamos naquela pasta dev-cpp e encontraremos esse arquivo, ele é a sua Distro. ==================================================================================== 19º Agora só jogar ela na sua datapack e utilizá-la. (Não esqueça de adicionar as libs) ==================================================================================== É isso pessoal, espero que tenham conseguido, se houver alguma dúvida, vai deixar aqui nos comentários que vou tentar ir respondendo...
  50. 2 points
    9k22

    Spells em pz

    Olá @Magalhaes92, tudo bem? Olha, para deixar a magia impossível de ser utilizada em ProtectZone, você deve ir em spells.xml e mudar: aggressive="0" para: aggressive="1" Espero ter lhe ajudado
This leaderboard is set to Sao Paulo/GMT-03:00

Open Tibia Server

Quer aprender a criar seu próprio servidor de Tibia? Então está no lugar certo, aqui você encontrará milhares de tutorias, scripts, códigos, mapas e utilitários para que você possa fazer o seu próprio servidor de Tibia começando do zero.

Redes Sociais

Anuncie no Tibia King

Precisa de mais visibilidade em seus projetos? Quer fazer um plano publicitário para o seu servidor? Anuncie no Tibia King e faça sua divulgação, possuímos centenas de acessos simultâneos e milhares diários, com certeza será a sua solução!

×
×
  • Create New...