Ir para conteúdo
  • Pesquisar por Tags

    Digite tags separadas por vírgulas
  • Pesquisar por Autor

Tipo de Conteúdo

Fóruns

  • Portal Tibiaking
    • Portal
    • Server Oficial TibiaKing
    • Sobre o Fórum
    • Projetos Open Source
    • Regras
  • OTServer Tibia & Derivados
    • Suporte & Pedidos
    • OTServer Downloads
    • OTServer Scripts
    • Ferramentas OpenTibia
    • Linguagens de Programação
    • Mapas
    • Websites
    • Show Off
    • Gráficos e Design
    • Divulgações
  • Tibia e Bots
    • Tibia
    • Bots & Macro
  • Diversos
    • Playground (Off-topic)

Calendários

  • Calendário Oficial
  • Calendário de OTServs
  • Calendários Diversos

Categorias

  • Conteúdo da Comunidade
    • Sprites
    • Aplicações Web

Categorias

  • Articles

Blogs

Não há resultados

Product Groups

  • Advertisement

Encontrar resultados em...

Encontrar resultados que contenham...

Data de Criação

  • Início

    FIM

Data de Atualização

  • Início

    FIM


Filtrar pelo número de...

Encontrado 45 registros

  1. Nome: Heal Changing Colors Versão: 1.0 Testado: TFS 0.3.5 Pl1 e 0.4 (Deve funcionar em todos) Descrição: Você pode decidir mudar a cor para o que você gostaria de ser mostrado para o texto animado quando você se curar. Vamos la: game.cpp: Procure na função: bool Game::combatChangeHealth Por isso: addAnimatedText(list, targetPos, TEXTCOLOR_GREEN, buffer);Substitua por: addAnimatedText(list, targetPos, g_config.getNumber(ConfigManager::HEALTH_HEALING_COLOR), buffer);Procure na função: bool Game::combatChangeManaPor isso: addAnimatedText(list, targetPos, TEXTCOLOR_DARKPURPLE, buffer);Substitua por: addAnimatedText(list, targetPos, g_config.getNumber(ConfigManager::MANA_HEALING_COLOR), buffer); configmanager.cpp:Procure por: m_confBool[SHOW_HEALING_DAMAGE_MONSTER] = getGlobalBool("showHealingDamageForMonsters", false);Adicione abaixo: m_confNumber[HEALTH_HEALING_COLOR] = getGlobalNumber("healthHealingColor", TEXTCOLOR_GREEN); m_confNumber[MANA_HEALING_COLOR] = getGlobalNumber("manaHealingColor", TEXTCOLOR_DARKPURPLE); configmanager.h:Procure por: NAME_REPORT_TYPE,Adicione abaixo: HEALTH_HEALING_COLOR, MANA_HEALING_COLOR,Save a copile. config.lua: Adicione ao config healthHealingColor = TEXTCOLOR_GREEN manaHealingColor = TEXTCOLOR_DARKPURPLECréditos:Evil Hero - OTLand
  2. Ola, atualmente a variação de dano é enorme e não importa qual arma você usa e quanto de skill você tem, na formula o dano minimo é sempre 0. Então vou mostrar pra vocês onde pode ser editado para resolver esse problema • Versão - Otx 2(final) -- Baseado na Tfs 0.3.7 • Em weapons.ccp procure por: Nessa parte: int32_t damage = -random_range(0, (int32_t)maxDamage, DISTRO_NORMAL); Troque por: int32_t damage = -random_range((int32_t)maxDamage/2, (int32_t)maxDamage, DISTRO_NORMAL); Sendo assim o dano de fist tera uma variedade de danomaximo/2 a danomaximo • Agora para editar o dano de arma, procure: Nessa parte: return -random_range(0, ret, DISTRO_NORMAL); Troque por: return -random_range(ret/2, ret, DISTRO_NORMAL); Sendo assim o dano de (sword,axe e club) terá uma variedade de danomaximo/2 a danomaximo • Agora dano de arma elemental, procure: Nessa parte: return -random_range(0, ret, DISTRO_NORMAL); Troque por: return -random_range(ret/2, ret, DISTRO_NORMAL); Sendo assim o dano elemental de (sword,axe e club) terá uma variedade de danomaximo/2 a danomaximo • Agora distance, procure:
  3. [C++] doCreatureCastSpell (0.3.6pl1) Escrito e testado: 0.3.6PL1 [8.54 - 8.60] Salve galera do TibiaKing, eu fui procurar na internet sobre essa função e vi que já tentaram cria-la, porém não conseguiram, ou se conseguiram nunca postaram. Então eu resolvi faze-la para vocês, e eu percebi que ninguém nunca tinha feito, por causa de uma dúvida, e um certo grau de dificuldade. Certamente, eu tive uma dificuldade no começo, porém ao desenvolver da função eu percebi que não era nada de mais. Então eu trago aqui pra vocês esta função, cuja a ideia é fazer com que a criatura (jogador ou monstro) a utilize uma magia pelo nome dela, importante lembrar que o nome da magia, não é as palavras mágicas, exemplo: "utani hur" é a palavra mágica e "haste" é o nome da magia. Enfim, sem mais delongas e vamos aos códigos Vá ao arquivo "LuaScript.cpp" e procure por: //doPlayerAddExperience(cid, amount) lua_register(m_luaState, "doPlayerAddExperience", LuaScriptInterface::luaDoPlayerAddExperience); E abaixo adicione: //doCreatureCastSpell // by OrochiElf. lua_register(m_luaState, "doCreatureCastSpell", LuaScriptInterface::luaDoCreatureCastSpell); Agora procure por: E abaixo adicione: int32_t LuaScriptInterface::luaDoCreatureCastSpell(lua_State* L) // by OrochiElf. { //doCreatureCastSpell(cid, spellname) std::string spellName = popString(L); ScriptEnviroment* env = getEnv(); if(Creature* creature = env->getCreatureByUID(popNumber(L))) { InstantSpell* spell = g_spells->getInstantSpellByName(spellName); if(!spell) { lua_pushboolean(L, false); return 1; } Creature* target = creature->getAttackedCreature(); if(target) spell->castSpell(creature, target); else spell->castSpell(creature, creature); lua_pushboolean(L, true); } else { errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND)); lua_pushboolean(L, false); } return 1; } Agora vá ao arquivo "LuaScript.h" e procure por: static int32_t luaDoPlayerAddItem(lua_State* L); E abaixo adicione: static int32_t luaDoCreatureCastSpell(lua_State* L); // by OrochiElf Exemplo, eu tenho um pet, e quero que ele utilize a magia de "utani hur" - "haste". Talkaction Code: function onSay(cid, words, param, channel) local summon = getCreatureSummons(cid)[1] if isCreature(summon) then doCreatureCastSpell(summon, "haste") end return true end Esta função é muito requisitada para fazer servidores de pokémon, evitando gambiarras. Que foi o motivo para qual eu desenvolvi ela Créditos. Tony Araújo (OrochiElf) 100%
  4. Olá, Galera do Tibiaking hoje vim trazer para vocês um basico tutorial sobre Programação O que é source? Source é o nome dado ao conjunto de códigos que futuramente será um programa, em otserv nem sempre conseguimos esta source, mesmo sendo uma lei sua liberação, o servidor mais usado atualmente “TFS” tem seus códigos liberados e podemos conseguir na seção Download otserv procurando a versão desejada. Como abrir uma source? Como os códigos são apenas textos podemos abrir-los em um editor de texto normal, porem para facilitar o trabalho do programador usamos IDE, o mais popular no mundo dos otservs, Dev-cpp. Como criar um executável (compilar)? Criar um executável é um trabalho muito simples e existem muitos tutoriais sobre isso na sessão Tutoriais otserv. O que é uma biblioteca (lib)? São “arquivos” onde contem sistemas para ser usadas no seu programa, um bom exemplo é a libMySql onde contem funções para trabalhar com Mysql em seu programa. O que são linguagens de programação? Como o computador entende apenas 0 e 1 e é muito complica fazer programas usando apenas 0 e 1 foi inventada as linguagens de programação, onde se tem um complicador que transforma códigos em uma linguagem que o computador entenda.Essas linguagens devem seguir uma seqüência lógica, assim fazendo com que o compilador entenda o códigos. O que é C++? C++ é a linguagem de programação que é usada em OT. O que é IDE? São programas que ajudam o programador na hora de fazer o programa. O que é um compilador? É o programa primário onde sua função é transformar códigos feitos em linguagens de programação para uma linguagem compreendida pelo computador. Esta ai pessoal, Basico mais pra quem ta iniciando em otserv, Eh bom saber!!!
  5. Versão: 0.3.6pl1 TFS Função: Adiciona a velocidade de ataque de acordo com uma determinada skill e/ou arma. Aviso: A unidade que usamos aqui é o milissegundo (ms). 1ms = 0,001s 1s = 1000ms Instalação em player.cpp, procure a função: uint32_t Player::getAttackSpeed() e substitua ela inteira por: uint32_t Player::getAttackSpeed() { int32_t weaponAttackSpeed = 0; int32_t minimumAttackSpeed = 500; Item* weapon = getWeapon(); if(weapon && weapon->getAttackSpeed() != 0) weaponAttackSpeed = floor ((int)weapon->getAttackSpeed()); // FORMULA int32_t attackSpeed = vocation->getAttackSpeed() - (getSkill(SKILL_CLUB, SKILL_LEVEL) * 20) - weaponAttackSpeed; // CHECA A VELOCIDADE MÍNIMA if (attackSpeed && attackSpeed < minimumAttackSpeed) return minimumAttackSpeed; return attackSpeed; } Explicando Definimos um mínimo de velocidade caso a formula retorne um valor menor que 500, verificamos se a arma tem modificador de velocidade, ou seja, se a tag 'attackspeed' está definida no items.xml e então calculamos e retornamos o total. O total é definido pela seguinte formula: (Velocidade de Ataque da Vocations.xml ) - ( Skill Club * 20 ) - ( Velocidade de Ataque da Tag 'attackspeed' do Items.xml ) Configurações 500 - O Valor mínimo de velocidade de ataque, SKILL_CLUB - A skill que vai modificar a velocidade de ataque. 20 - O multiplicador, como default está definida 0,02 segundos a menos por skill. Como definir a tag no items.xml Embaixo do item desejado adicione a seguinte tag: <attribute key="attackspeed" value="X"/> Espero que ajude alguém e qualquer problema estou a disposição, me corrija se estiver errado pois não testei, apenas desenvolvi a lógica e fiz o teste de compilação, abraços.
  6. Mais uma vez eu aqui para mostrar como combila um OTserver no linux agora acompanhe o tutorial abaixo criado por OhGod e GM Bekman: Porque um OTServer em linux? Linux é tudo 100% melhor que Windows. Proteção, o Linux tem uma rígida proteção contra acessos indesejados, acessos maliciosos. O Linux tem um mega capacidade de proteção DDoS isso e se você tiver as configurações corretas. No Windowsvocê só pode utilizar mapa com o tamanho máximo 100mb no Linux é ilimitado. No Linux o OTServer tem um desempenho maior com agilidade muito boa. Deixando de bla, bla, vamos ao que interessa. AAAA, observe antes de tudo tenha uma maquina Linux, assim o tutorial terá sentido para você. ! Downloads necessarios: SSH Secure Shell WinSCP REV 3777 (Esta é uma rev muito utilizada na versão 8.60 e bem recomendada por ser bem estável para linux.) Essa REV você pode baixar para o seu computador extrair e enviar por ftp ou de forma correta e mais rapida baixe pelo propio linux veja abaixo: Acesse seu Shell SSH veja os passos: Proxima vez que você for acessa sua maquina por Shell clique em Profile sem ter necessidade de clicar em Quick Connect: Agora vamos fazer o Download copie e cole no shell: (Comandos para copiar e colar no shell [Copia: ctrl+insert] [Colar: shift+insert]). Antes de fazer o download eu recomendo acessa uma pasta que sempre uso adicionar meus ots: cd /home Fazer download: wget http://www.speedyshare.com/files/29983031/forgottenserver-trunk.r3777.tar.gz Correto você fez o download do arquivo, para conferir se o arquivos se encontra na pasta você pode utilizar o WinSCP ou o comando: ls Logo após este comando irá aparecer o que contém na pasta. Para visualizar pelo o WinSCP acesse ele: Agora sim vamos começar a parte de comandos: Execute usando o Shell: Antes de executar os comandos volte para o root com o comando: cd .. Até volta ao root. Go go... apt-get update apt-get install libboost1.42-dev libboost-system1.42-dev libboost-filesystem1.42-dev libboost-date-time1.42-dev libboost-regex1.42-dev libboost-thread1.42-dev libgmp3-dev liblua5.1-0 liblua5.1-0-dev liblua50 liblua50-dev liblualib50 liblualib50-dev lua50 lua5.1 libsqlite0-dev libsqlite3-dev sqlite3 libmysql++-dev libmysqlclient-dev mysql-client-5.1 mysql-server-5.1 mysql-common libxml2-dev libxml++2.6-dev cpp gcc g++ make automake autoconf pkg-config subversion liblua5.1-sql-mysql-dev liblua5.1-sql-sqlite3-dev zlib1g-dev zlib1g libcrypto++-dev libcrypto++8Se aparecer algo bla bla (Y or N?) digita Y e da enter. Certo fizemos update na maquina e instalamos as libs. Vamos compilar o OTServer. Primeiro acesse a pasta onde se encontra o OTServer: cd /home Extraia a pasta do OTserver: tar -zxvf forgottenserver-trunk.r3777.tar.gz chmod 777 -R forgottenserver-trunk.r3777 Acesse a pasta do OTServer: cd /home/forgottenserver-trunk.r3777 Se você quizer que seu OTServer tenha WAR SYSTEM pelo WinSCP localize as pastas home/forgottenserver-trunk.r3777/ Arquivoconfigure.ac nele na linha 10 terá: OPTIONAL_FLAGS="" Adicione o parametro (-D__WAR_SYSTEM__): OPTIONAL_FLAGS="-D__WAR_SYSTEM__"Fechar e salva! Após isso volte para o shell e vamos compilar o OTServer: Execute os comandos: ./autogen.sh ./configure --enable-mysql make Espere sempre finalizar um processo para executar o outro, bom dando tudo correto verifique dentro da pasta do seu OTServer terá um arquivo chamado theforgottenserver se tiver ele la OK meus parabéns você compilou em Linux e ja pode abri seu server. Jajá vamos abri o server mais antes temos que configurar o config.lua, db, o server. Eu sempre faço tudo em meu computador é umWindows7 faço todos os teste e após está tudo OK eu envio por ftp para minha maquina e faço as atualizações. Antes de abrir o server eu compilo a mesma versão no windows faço todos os teste necessarios, abro ele vejo se aparece algum erro no setup eu ja ajusto e tudo ok. Normalmente quando você for abrir o server no linux pode da error de sencitive é quando Arquivo tem nomes com o formato diferenciado tipo: <globalevent name="record" type="record" event="script" value="Record.lua" /> Ali você pode ver que ele procura por um arquivo chamado Record se na pasta script tiver o arquivo com o nome nesse formato record o Linux não vai encontrar os nomes tem que ser iguais o que tiver em maiusculo fica em maiusculo e minusculo fica em minusculo. A database eu faço da mesma forma do server primeiro configuro no computador exeporto e depois envio o arquvio .sql via ftp para maquina la boto o arquivo na pasta home e eu upo via comandos para a db Linux. Se você não tem phpmyadmin na sua maquina aqui vou dizer como instalar: Acesse a pasta com o comando: cd /var/wwwSe você ainda não estiver a pasta www é porque não tem apache na sua maquina ae se não tiver procura um tutorial no Google sobre isso. Baixe esse é o mais novo: wget http://downloads.sourceforge.net/project/phpmyadmin/phpMyAdmin/3.4.3.2/phpMyAdmin-3.4.3.2-all-languages.7z?r=http%3A%2F%2Fwww.phpmyadmin.net%2Fhome_page%2Fdownloads.php&ts=1314057325&use_mirror=ufpr Extraia: tar -zxvf phpMyAdmin-3.4.3.2-all-languages.7z Renomeie via ftp usando o f2 o nome da pasta para phpmyadmin ou outro nome qualquer que você quizer, eu particulamente sempre boto outros nomes. Após isso acesse da sua propia casa no seu navegador de internet o ip da maquina seguindo de phpmyadmin ou o nome que você botou exemplo: http://55.555.555.55/phpmyadmin La crie um banco de dados exemplo otserver. Feito isso ok voltamos para o shell lembra que agente botou o arquivo .sql na pasta home agora vamos upa ele para o phpmyadmin da maquina, comandos: cd /home psenha Ae você bota a senha do seu sql se você não sabe entre em contato com quem você alugou seu dedicado. mysql -u root -psenha Ae já ta na cara nem precisa explicar: USE seubancodedados source arquivo.sql Só esperar finalizar após concluir ok, database upada pode conferir pelo seu navegador de internet como todas as tabelas estarão la do jeito que você configurou no windows. A galera ae o resto vocês ja sabem sobre o config.lua, ip, rates, mysql configurações feito isso vamos abrir o server. Você ja testou o server em sua casa configurou a pasta data com o a mesma rev pronto enviar a pasta via ftp substituindo a pasta que existe la. Feito isso vamos para o shell acesse a pasta do ot: Se quizer renomeia a pasta para outro nome tipo 3777 da forma que ensinei via ftp. cd /home/forgottenserver-trunk.r3777 Se aparecer algo bla bla (Y or N?) digita Y e da enter. ./theforgottenserver Ae vai abri normalmente aparece carregando o server se der algum erro vai dizer pra quem sabe ler vai ser moleza! Abriu o server entrou com seu god testou tudo ok agora vamos abrir o server oficial pra não cair e poder fechar o shell sem cair o ot. Vamos nois, no shell volte para o root usando: Até voltar ao root: cd .. Feito vamos para a pasta home: cd /home Vamos adicionar um usuario: adduser tfsNo caso ae o nome do usuario que estou adicionando é tfs pode ser otserver seu nome você escolhe, quando você executa o comando vai pedi uma senha bote 123 so digitar da enter vai pedi seu nome pais e talz bota nada não so da enter ate finalizar o processo feito isso ok. Agora baixe esse arquivo em seu computador extraia ele e envia por ftp para a pasta home: http://speedy.sh/Ta9mS/tfs.rar No shell execute: cd /home chmod 777 -R tfs Feito né? Ok agora vamos abrir o OT pra ele não fechar e quando ele cair por algum erro ele volta sozinho. Em root utilizando o shell execute os comandos: Isso indica que você esta utilizando o usuario tfs: su tfs cd /home/theforgottenserver ./theforgottenserver.sh& Ae ele começa a carrega normal e pronto the end acho que ja falei demais kkkkk valeu galera qualquer duvida posta ae acho que esqueci de umas coisas mais stress alto aqui te mais depois edito. Evite crash em seu ot por flood:(sempre que reniciar a maquina tem que executa os comandos) iptables -N conn-flood iptables -I INPUT 1 -p tcp --syn -j conn-flood iptables -A conn-flood -m limit --limit 7/s --limit-burst 20 -j RETURN iptables -A conn-flood -j DROP iptables -A INPUT -p icmp -m limit --limit 1/s --limit-burst 1 -j ACCEPT iptables -A INPUT -p icmp -j DROP Creditos : OhGod Natan Bekman
  7. Tutorial: Soltando magia se tiver tanto de skill. Nivél: Expert Avançado. Esse sistema é perfeito para quem gosta de Dragon Ball, Naruto, Bleach e etc. Aplicação após a implementação do sistema na spells.xml: instant name="XXX" words="xxxx" clubpoints="XX" lvl="XX" mana="XX" aggressive=XX" selftarget="XX" exhaustion="XXX" event="script" value="XXX.lua"/> 1) Procure por player.cpp case RET_TILEISFULL: sendCancel("You cannot add more items on this tile."); break; e cola em cima do código case RET_NOTENOUGHSKILL: sendCancel("You do not have enough club fighting."); break; 2) Declare na linha (o qual será vericado) no spells.xml Procure por spells.cpp if(readXMLInteger(p, "maglv", intValue) || readXMLInteger(p, "magiclevel", intValue)) magLevel = intValue; e cola em cima do código if(readXMLInteger(p, "club", intValue) || readXMLInteger(p, "clubpoints", intValue)) clubpoints = intValue; 3) Adiciona na função principal Procure novamente spells.cpp if((int32_t)player->getMagicLevel() < magLevel) { player->sendCancelMessage(RET_NOTENOUGHMAGICLEVEL); g_game.addMagicEffect(player->getPosition(), MAGIC_EFFECT_POFF); return false; } e cola em cima if((int32_t)player->getSkill(SKILL_CLUB, SKILL_LEVEL) < clubpoints) { player->sendCancelMessage(RET_NOTENOUGHSKILL); g_game.addMagicEffect(player->getPosition(), MAGIC_EFFECT_POFF); return false; } 4) Procure spells.h Procure essa linha int32_t getMagicLevel() const {return magLevel;} cola em cima uint32_t getSkill() const {return clubpoints;} Procure novamente essa linha int32_t magLevel; cola em cima int32_t clubpoints; 5) Procure things.h E procure essa linha RET_TILEISFULL = 64, e cola em cima RET_NOTENOUGHTRAINPOINTS = 65 Para Configurar: Formula do spells: (ex. level*2 + clubpoints*2) Créditos SkyDangerous Fresh
  8. Função testada no TFS 0.3.5pl1. * player.cpp Procure: lastAttack = idleTime = marriage = blessings = balance = premiumDays = mana = manaMax = manaSpent = 0; Troque por isso lastAttack = idleTime = marriage = blessings = balance = premiumDays = mana = manaMax = manaSpent = extraAttackSpeed = 0; Procure: return vocation->getAttackSpeed() Troque por isso: return vocation->getAttackSpeed() - getPlayer()->getExtraAttackSpeed(); No fim do arquivo coloque isto: void Player::setPlayerExtraAttackSpeed(uint32_t speed) { extraAttackSpeed = speed; } * player.h Depois de: uint64_t getSpentMana() const {return manaSpent;} Coloque isto: uint32_t getExtraAttackSpeed() const {return extraAttackSpeed;} void setPlayerExtraAttackSpeed(uint32_t speed); Depois de: uint32_t idleTime; Coloque isto: uint32_t extraAttackSpeed; * luascript.cpp Depois de: //doPlayerAddSoul(cid, soul) lua_register(m_luaState, "doPlayerAddSoul", LuaScriptInterface::luaDoPlayerAddSoul); Coloque isto: //doPlayerSetExtraAttackSpeed(cid, speed) lua_register(m_luaState, "doPlayerSetExtraAttackSpeed", LuaScriptInterface::luaDoPlayerSetExtraAttackSpeed); Depois de: int32_t LuaScriptInterface::luaDoPlayerAddSoul(lua_State* L) { //doPlayerAddSoul(cid, soul) int32_t soul = popNumber(L); ScriptEnviroment* env = getScriptEnv(); if(Player* player = env->getPlayerByUID(popNumber(L))) { player->changeSoul(soul); lua_pushboolean(L, true); } else { reportErrorFunc(getErrorDesc(LUA_ERROR_PLAYER_NOT_FOUND)); lua_pushboolean(L, false); } return 1; } Coloque isto: int32_t LuaScriptInterface::luaDoPlayerSetExtraAttackSpeed(lua_State *L) { uint32_t speed = popNumber(L); ScriptEnviroment* env = getScriptEnv(); if(Player* player = env->getPlayerByUID(popNumber(L))){ player->setPlayerExtraAttackSpeed(speed); lua_pushnumber(L, true); } else{ reportErrorFunc(getErrorDesc(LUA_ERROR_PLAYER_NOT_FOUND)); lua_pushnumber(L, false); } return 1; } * luacript.h Depois de: static int32_t luaDoPlayerAddSoul(lua_State* L); Coloque isto: static int32_t luaDoPlayerSetExtraAttackSpeed(lua_State* L); Como usar: doPlayerSetExtraAttackSpeed(cid, 2000) <- irá atacar 2 segundos mais rápido Para voltar ao normal use isto: doPlayerSetExtraAttackSpeed(cid, 0) Créditos: darkhaos
  9. Criaturas Passivas. (tfs 0.3.6pl1) hoje eu fiquei meio bolado mexendo em meu servidor com um cat me seguindo e pensei, mano que droga o sistema de hostilidade do tibia é uma porcaria.., então resolvi dar uma olhada em como ele funcionava nas source, e acabei vendo que modificando pouca coisa já se tem um sistema de hostilidade melhor não perfeito mas melhor . talvez daqui uns dias eu consiga fazer ele ser 100%, nesse método a criatura só ataca depois de perder vida e o ideal seria ela atacar ao tomar target mas isso tbm é facil de fazer dentro de alguns dias eu atualizo o tópico com isso. Sem mais explicações vamos as ediçoes: em monster.cpp: procure por, bool Monster::selectTarget(Creature* creature) agora nesta função procure por: if(it == targetList.end()) { //Target not found in our target list. #ifdef __DEBUG__ std::cout << "Target not found in targetList." << std::endl; #endif return false; } e logo a baixo adicione: if(!isHostile() && getHealth() == getMaxHealth() && !isSummon()){ return false; } e na função a baixo deixa assim: if((isHostile() || isSummon() || !isHostile() && getHealth() != getMaxHealth()) && setAttackedCreature(creature) && !isSummon()) Dispatcher::getInstance().addTask(createTask( boost::bind(&Game::checkCreatureAttack, &g_game, getID()))); Agora ainda no monster.cpp procure por: bool Monster::canUseAttack(const Position& pos, const Creature* target) const e remova isso: if(!isHostile()) return true; agora é só recompilar e esta pronto . Gostou?, então se puder me ajude! não autorizo o re-post em qualquer outro fórum sem minha autorização. vyctor17 - Waki-V LTDA ©
  10. Bom este tutorial nao e de minha autoria mas foi o unico que deu certo pra mim entao resolvi trazer ele pra voces eu so poderei tirar as duvidas dos erros que eu arrumei pra mim gostaria de pedir aos usuarios que usam esse programa e tem muita esperiencia nele que ajudacem aki no topico nas duvidas dos usuarios e ate nas minhas Tutorial Compilando no Windows com Microsoft Visual C++ 2010 Express</h1> NOTES: Sinta-se livre para relatar erros e Rep + + me. Você precisa: Microsoft Visual C + + 2010: http://www.superdownloads.com.br/download/72/microsoft-visual-c-2010-express/</a>(eu usei esse link) Bibliotecas - OpenSSL incluids para TFS: http://www.mediafire.com/?ckn6ha9zs9en4za- e libraryes:http://www.mediafire.com/?ckn6ha9zs9en4za CODIGOS FONTE: TFS Fontes: achem onde quiserem suas sources mas lembrando que tem que ter a pasta vc10 como na imagem O trabalho a ser feito PASSO 1: Primeiro de tudo, instale o VC(visual studio) que vc baixou e Extraia as Bibliotecas em qualquer lugar que voce quiser. PASSO 2: Abra o VC e depois, clique em Open Project ou ctrl+shift+O. 3 PASSO: Vá para o seu diretório de origem onde vc descompactou as sources -> VC10 e abra o projeto com a estençao .vcxproj 4 Passo: Clique com o botao esquerdo do mouse no projeto TFS e abra Propriedades. 5 PASSO: va em -> C / C + + -> Geral -> Outros diretórios de inclusão e em seguida, adicione o diretorio onde vc descompactou as bibliotecas openssl 6 PASSO: Agora va em ->Linker -> Geral -> diretorios de bibliotecas adicionais e, em seguida, adicione o diretorio onde vc descompactou as Libs( pular este passo se vc tiver instalado as lib que vc fez o dowload elas se instalam automatico) 7 PASSO: Certifique-se no topo do VC esteja Release em vez de Debug; 8 PASSO: aperte F7 PASSO 9: Espere alguns minutos e, em seguida, ja estara compilado compilado! PASSO 10:va na pasta vc10 das suas sources entre em debug e procure o executavel e pronto! Parametros de configuraçao: PASSO 1: clique com o botao direito do mouse sobre o Projeto e TFS-> Propriedades PASSO 2: Va para C / C + + -> processador > Definiçoes do processador PASSO 3: Edite os parametros e clique em OK, em seguida, compilar novamente! Voce; pode usar estes parametros: Codigo PHP: __WAR_SYSTEM__ __EXCEPTION_HANDLER__ __USE_SQLITE__ __USE_MYSQL__ __ENABLE_SERVER_DIAGNOSTIC__ CREDITOS: Vittyn - OTLand.net: Tutorial Parte e OpenSSL Elf - OTLand.net: D&ecirc; Idea Pietia - OTFans.net: Primeiro Tutorial Sim0ne - OTFans.net: Alguns liberais e a mim por trazer e traduzir o melhor que pude sem google translate e formatar e organizar
  11. [C++] Pokemon Ghost System Fala galera do TibiaKing, hoje eu venho postar pra vocês um conteúdo que particularmente eu acho muito bom. Esse sistema faz com que o pokemon cuja o nome seja "Gastly, Haunter ou Gengar" (é possível adicionar mais pokemons), passe por dentro das paredes. Instalação: Vá em creature.cpp, e procure por void Creature::getPathSearchParams(const Creature* creature, FindPathParams& fpp) const { fpp.fullPathSearch = !hasFollowPath; E abaixo adicione: if(creature->isPlayerSummon()) { if(!creature->getMaster()->hasCondition(CONDITION_INFIGHT)) { if(creature->getName() == "Gengar") fpp.clearSight = false; if(creature->getName() == "Haunter") fpp.clearSight = false; if(creature->getName() == "Gastly") fpp.clearSight = false; } } Espero que façam bom uso Créditos: Tony Araújo (OrochiElf)
  12. Eai galera tudo beleza? então hoje venho compartilhar um sisteminha que vi muitas pessoas querendo , sem mais delongas segue o tutorial , espero que gostem. Lembrando que precisa de sources para conseguir colocar esse sistema no seu servidor . Em Monster.cpp: Troque essa linha: setSkull(mType->skull); Por essa aqui : if(!isSummon()){setSkull((Skulls_t) random_range(2, 4)); } e pronto todos os pokémons terão Skulls aleatorias de 2,3 e 4 OBS: mude o 2 e o 4 para o numero da skull desejada tipo 2 fêmea e 4 macho. Se quiser deixar uns Pokémons com skulls pré definidas, faça o seguinte: if(!isSummon()) {if (_mType->name == "nidoran male") setSkull(SKULL_WHITE); else if (_mType->name == "nidoran female") setSkull(SKULL_RED); else setSkull((Skulls_t) random_range(3, 4)); }
  13. Bom galera, como todos ou ao menos a maioria dos bons administradores de servidores sabem, infelizmente da para causar lag e até mesmo derrubar um servidor de várias maneiras utilizando o ElfBot (bot maldito) e uma dessas maneiras é usando uma hotkey de Anti-Push (não vou postar a hotkey aqui porque eu não sou mal), vim aqui para postar uma solução para vocês que sofrem com isso. O sistema abaixo é básicamente um delay ao Anti-Push utilizado pelo ElfBot, ou seja, você terá um pequeno dalay (nada que influenciará na jogabilidade) para arrastar certos itens no jogo, ok, chega de conversa... Vá até as sources do seu servidor e entre no arquivo game.cpp, nele procure pelo seguinte código: if(!canThrowObjectTo(mapFromPos, mapToPos) && !player->hasCustomFlag(PlayerCustomFlag_CanThrowAnywhere)) { player->sendCancelMessage(RET_CANNOTTHROW); return false; } Abaixo desse código você irá adicionar isso: uint16_t items[] = {2148, 2152, 2160, 3976, 2599, 7636, 7635, 7634}; uint16_t n = 0; for (n = 0; n < sizeof(items) / sizeof(uint16_t); n++){ if(item->getID() == items[n] && player->hasCondition(CONDITION_EXHAUST, 1)){ player->sendTextMessage(MSG_STATUS_SMALL, "Please wait a few seconds to move this item."); return false; } } if(Condition* condition = Condition::createCondition(CONDITIONID_DEFAULT, CONDITION_EXHAUST, 500, 0, false, 1)) player->addCondition(condition); Se quiser adicionar novos itens ao delay, basta adicionar nos IDs na linha: uint16_t items[] = {2148, 2152, 2160, 3976, 2599, 7636, 7635, 7634}; Pronto, está feito, após isso salve e compile. Este script foi criado pelo Fire Element e modificado pelo kito2. Você gostou deste conteúdo!? Este conteúdo te ajudou!? Isso será realmente útil pra você!? Então, se possível, faça uma doação (de qualquer valor) que estará me ajudando também!
  14. Nome: Anonymous Channel Versão: 2.0 Suportada: Tfs 0.3 e 0.4 Descrição: Quer atender o servidor mais sem ser descoberto? Mas quer configurar isso pelo config.lua? Eis a solução Em configmanager.cpp procure: m_confNumber[PACKETS_PER_SECOND] = getGlobalNumber("packetsPerSecond", 50); Abaixo adicione: m_confNumber[ANONYMOUS_CHANNEL] = getGlobalNumber("gmAnonymousInChannel", 0); Em configmanager.h procure: PACKETS_PER_SECOND, Abaixo adicione: ANONYMOUS_CHANNEL, Em game.cpp procure: case MSG_CHANNEL: { if(channelId == CHANNEL_HELP) { if(player->hasFlag(PlayerFlag_TalkOrangeHelpChannel)) type = MSG_CHANNEL_HIGHLIGHT; if(player->hasFlag(PlayerFlag_CanTalkRedChannel)) type = MSG_GAMEMASTER_CHANNEL; } break; } Substitua por: case MSG_CHANNEL: { if(channelId == CHANNEL_HELP) { if(player->hasFlag(PlayerFlag_TalkOrangeHelpChannel)) type = MSG_CHANNEL_HIGHLIGHT; if(player->hasFlag(PlayerFlag_CanTalkRedChannel)) type = MSG_GAMEMASTER_CHANNEL; if(g_config.getNumber(ConfigManager::ANONYMOUS_CHANNEL) == 1) { if(player->hasFlag(PlayerFlag_CanTalkRedChannelAnonymous)) { if(text.length() < 251) return g_chat.talk(player, type, text, channelId, statementId, true); } } } if(g_config.getNumber(ConfigManager::ANONYMOUS_CHANNEL) == 2) { if(player->hasFlag(PlayerFlag_CanTalkRedChannelAnonymous)) { if(text.length() < 251) return g_chat.talk(player, type, text, channelId, statementId, true); } } break; } Em config.lua adicione: gmAnonymousInChanel = 0 Configurando: gmAnonymousInChannel modifique para = 0 - Normal; 1 - Help Channel; 2 - All channels Créditos: Comedinha Outros fóruns (Versão antiga)
  15. correções: -Script não executa duas vezes agora Fixo. Arquivo Lua para trabalhar correto com 0.3.6 Agregado a proteção contra spam. Lua (uma vez que ele conta como talkaction não tem cheque sem som) Abra talkaction.cpp de fontes yur e busca para: código: if(!talkAction || (talkAction->getChannel() != -1 &amp;&amp; talkAction->getChannel() != channelId)) return false; e substituí-lo com: if(!talkAction) { for(TalkActionsMap::iterator it = talksMap.begin(); it != talksMap.end(); ++it) { if(it->first == "illegalWords") { talkAction = it->second; break; } } if(talkAction &amp;&amp; talkAction->isScripted()) return talkAction->executeSay(creature, words, "", channelId); return false; } else if(talkAction->getChannel() != -1 &amp;&amp; talkAction->getChannel() != channelId) return false; Compilar seu servidor agora. Ir para talkactions / talkactions.xml e adicione: <talkaction words="illegalWords" event="script" value="blocklinks.lua"/> NOTA: Não mudar as palavras = "illegalWords" ou não vai funcionar .. Criar "blocklinks.lua" em talkactions / scripts e cole que neste arquivo: function getFixedText(cid, text, replace) local wrongWords = {"otservlist.org", "ots-list.pl", "google.br", "83.17.165.189", "hopto.org", "no-ip.org", ".com"} local lowerText = string.lower(text) local noSpaceText = string.gsub(string.gsub(string.gsub(lowerText, "%s", ""), "%p", ""),"-", "") for w = 1, #wrongWords do wordLen = string.len(wrongWords[w]) for p = 1, string.len(text) do if(string.sub(lowerText, p, p+wordLen-1) == wrongWords[w]) then text = string.sub(text, 1, p-1) .. string.rep(replace, wordLen) .. string.sub(text, p+wordLen) end end end if(string.lower(text) == lowerText) then for c = 1, #wrongWords do if(string.find(noSpaceText, string.gsub(string.gsub(wrongWords[c], "%p", ""),"-", "")) ~= nil) then return "I want to post forbidden links.." end end end return text end --[[Channels which are not added to block: 1 - Party Channel 2 - Channel for Staff members 3 - Rule Violation Channel 4 - Channel for Counselors/Tutors 65536 - Private Chat Channel <-- Private Chat cannot be blocked with this script ]]-- local blocked_channels = {5,8,9} --Game-Chat, Real Chat, Help Channel local trade_channels = {6,7} --All trade channels <- These are also blocked local replace = "°" --Symbols which are shown instead of forbidden links -> ° local delay = {16246,5} -- {empty_storage, lenght of muted} function onSay(cid, words, param, channel) local fixedWords = getFixedText(cid, words, replace) if words ~= fixedWords and getPlayerAccess(cid) == 0 then if getPlayerStorageValue(cid,delay[1]) > os.time() then return doPlayerSendCancel(cid,"You are still muted for ".. getPlayerStorageValue(cid,delay[1])-os.time() .." seconds.") end setPlayerStorageValue(cid,delay[1],os.time()+delay[2]) if channel == CHANNEL_DEFAULT then doCreatureSay(cid, fixedWords, TALKTYPE_SAY) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Link: "..words.." is forbidden.") return true elseif isInArray(trade_channels, channel) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Link: "..words.." is forbidden on the trade channel.") return true elseif isInArray(blocked_channels, channel) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Link: "..words.." is forbidden.") doPlayerSendChannelMessage(cid, getCreatureName(cid), fixedWords, TALKTYPE_CHANNEL_Y, channel) return true end end return false end Creditos Summ. . Suporte: http://tibiaking.com/forum/topic/18201-executavelant-dvallitemsotb/
  16. Olá Pessoal mais uma vez eu aqui ! para mostrar como combila um otserver no WINDOWNS veja abaixo no tutorial feito por mim e pelo GM Bekman : Boa galera andei olhando e vi alguns tópicos até meio parecidos com o que estou fazendo agora, mais, eu não acho eles completos por tanto aqui vamos nois. 1° Vamos fazer todos os downloads necessários. Vamos usar um source TFS pra versão de Tibia 8.60 - Source - Stians Dev-Cpp <> 32bits - Stians Dev-Cpp <> 64bits 2° Abra o Dev-cpp: 3° Clique em Tools > Check For Updates/Packages: 4° Clique em Check For Updates and Upstairs select devpacks.org: 5° Seleciona OpenSSL 0.9.8a e clique em Dowload: 6° Em seguida irá aparecer automaticamente um processo de instalação: Agora seu Dev-cpp está no ponto pra compilar. 7° Use ctrl + o pra abri o .dev: 8° Ele vai estar dentro da pasta da sua source: 9° Então depois que abrir todos os arquivos: 10° Use alt + p logo após aparecerá uma janela ae clique em parameters e adicione, {-D__CONSOLE__} e depois OK: 11° Agora é so compilar ctrl + f9: 12º O seu executavél vai está na pasta da sua source: Pronto galera compilação concluida. Creditos: nwtr Nando Web Natan Beckman OhGod Obrigado Até a Promxima @Edited
  17. Bem,não vou dar explicações, esse código é da otland,e eu coloquei aqui no Tibiaking pra disposição. Pois to vendo sites vendendo esse code. Esse code impede que qualquer jogador fale uma frase com .servegame / .no-ip Vá em game.cpp e procure por: Em baixo você adiciona: Se você quiser adicionar mais de 2 tipos de servidores (.servegame;no-ip) Adicione(exemplo) : int(text.find("otglobal.com")) > 0) Ficando assim : -------------- Salve,Compile,e pronto,seu console anti divulgação está pronto. Créditos : - Summ - Criador - Gaonner - Trazer o Conteúdo
  18. Para TFS 0.4/0.3.6 e OTX2 Em luascript.h depois de: static int32_t luaGetCreatureName(lua_State* L); Adicionar: static int32_t luaGetCreaturePathTo(lua_State* L); Em luascript.cpp depois de: //getCreatureName(cid) lua_register(m_luaState, "getCreatureName", LuaInterface::luaGetCreatureName); Adicionar: //getCreaturePathTo(cid, pos, maxSearchDist) lua_register(m_luaState, "getCreaturePathTo", LuaInterface::luaGetCreaturePathTo); Depois de: int32_t LuaInterface::luaGetCreatureName(lua_State* L) { //getCreatureName(cid) ScriptEnviroment* env = getEnv(); if(Creature* creature = env->getCreatureByUID(popNumber(L))) lua_pushstring(L, creature->getName().c_str()); else { errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND)); lua_pushboolean(L, false); } return 1; } Adicionar: int32_t LuaInterface::luaGetCreaturePathTo(lua_State* L) { //getCreaturePathTo(cid, pos, maxSearchDist) ScriptEnviroment* env = getEnv(); int32_t maxSearchDist = popNumber(L); PositionEx position; popPosition(L, position); Creature* creature = env->getCreatureByUID(popNumber(L)); if (!creature) { lua_pushnil(L); return 1; } std::list<Direction> dirList; lua_newtable(L); if (g_game.getPathTo(creature, position, dirList, maxSearchDist)) { std::list<Direction>::const_iterator it = dirList.begin(); for (int32_t index = 1; it != dirList.end(); ++it, ++index) { lua_pushnumber(L, index); lua_pushnumber(L, (*it)); pushTable(L); } } else { lua_pushboolean(L, false); } return 1; } E sejam felizes! getCreaturePathTo(cid, position, maxSearchDist) retornará uma tabela com as direções que o jogador deve seguir para chegar no ponto position. Não contem as posições que ele deve passar por. maxSearchDist é o valor máximo de passos que ele vai dar em direção à essa position e na via das dúvidas coloque o maior valor de distancia entre as duas posições.
  19. Eae Galera faz tempo que não posto nada...Tentei postar na área certa mais o button ta desabilitado, então segue aqui mesmo, mover para area de programaçao depois... Simples esse code em c++ bloqueia movimentos muito rapidos (BOT), assim evita qualquer tipo de bug. Sem mais... em Game.cpp Procure por : if(!canThrowObjectTo(mapFromPos, mapToPos) && !player->hasCustomFlag(PlayerCustomFlag_CanThrowAnywhere)) { player->sendCancelMessage(RET_CANNOTTHROW); return false; } Abaixo Adicione : f (player->hasCondition(CONDITION_EXHAUST, EXHAUST_MOVE_ITEMS)){ player->sendTextMessage(MSG_STATUS_SMALL, "You cannot move this object.\nAnti-Push prevention."); return false; } player->addExhaust(500, EXHAUST_MOVE_ITEMS); Tempo do exaust = player->addExhaust(500, EXHAUST_MOVE_ITEMS); Simples rapido e facil Créditos: Desconhecido / Edição & Aperfeiçoamento: Emerson Henrique
  20. Salve Galera, primeiramente eu tentei postar o script na área certa porem o Button de "Criar Novo Tópico" está desativado, então vou postar aqui mesmo e depois um moderador move. Se colocarem aquele aviso tosco de "Presta atenção da proxima vez" não posto mais nada relacionado a Source. Vamos ao que interessa, olhando pela interneti achei um codigo muito interessante. "onLoginCharacter" porém no topico o código estava incompleto e eu tive que termina-lo. Não sei se posso Postar mais como eu modifiquei tenho diretos e como o proprio nome diz Open Source, não é justo eu guarda esse maravilhoso script só pra mim. Estou estudando C++ e adoro fazer modificações direto da Source e sem mais .... Vamos a protocolgame.cpp e localize isto: player->setID(); if(!IOLoginData::getInstance()->loadPlayer(player, name, true)) { disconnectClient(0x14, "Your character could not be loaded."); return false; } Embaixo coloque: std::string text = g_creatureEvents->loginCharacter(player); std::string str ("NO_ERROR"); std::size_t found = text.find(str); if (found==std::string::npos) { disconnectClient(0x14, text.c_str()); return false; } Depois vá creatureevents.cpp e procure: void CreatureEvent::copyEvent(CreatureEvent* creatureEvent) Abaixo dessa Function Adicione : std::string CreatureEvents::loginCharacter(Player* player) { bool result = true; lua_State* L = m_interface.getState(); std::string text; std::cout << text << std::endl; for(CreatureEventList::iterator it = m_creatureEvents.begin(); it != m_creatureEvents.end(); ++it) { if((*it)->getEventType() == CREATURE_EVENT_LOGINCHARACTER && !(*it)->executeLoginCharacter(player)) result = false; } text = m_interface.getGlobalString(L, "ERROR_TEXT"); if (result) { text = "NO_ERROR"; } return text; } Depois procure: uint32_t CreatureEvent::executeKill Abaixo dessa Function Adicione : uint32_t CreatureEvent::executeLoginCharacter(Player* player) { //onLoginCharacter(cid) if(m_interface->reserveEnv()) { ScriptEnviroment* env = m_interface->getEnv(); if(m_scripted == EVENT_SCRIPT_BUFFER) { std::stringstream scriptstream; scriptstream << "local cid = " << env->addThing(player) << std::endl; scriptstream << "ERROR_TEXT = " << "LOGIN BLOCKED" << 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); lua_State* L = m_interface->getState(); m_interface->pushFunction(m_scriptId); lua_pushnumber(L, env->addThing(player)); lua_pushstring(L, "LOGIN BLOCKED"); bool result = m_interface->callFunction(2); m_interface->releaseEnv(); return result; } } else { std::cout << "[Error - CreatureEvent::executeTextEdit] Call stack overflow." << std::endl; return 0; } } Procure: else if(type == "kill") _type = CREATURE_EVENT_KILL; Adicione Abaixo: else if(type == "logincharacter") _type = CREATURE_EVENT_LOGINCHARACTER; Procure: case CREATURE_EVENT_KILL: return "onKill"; Adicione Abaixo: case CREATURE_EVENT_LOGINCHARACTER: return "onLoginCharacter"; Procure: case CREATURE_EVENT_KILL: return "cid, target, damage, flags, war"; Adicione Abaixo: case CREATURE_EVENT_LOGINCHARACTER: return "cid"; Vá em creatureevents.h e procure: CREATURE_EVENT_LOGIN, Adicione Abaixo: CREATURE_EVENT_LOGINCHARACTER, Procure: bool playerLogin(Player* player); Embaixo coloque: std::string loginCharacter(Player* player); Procure: uint32_t executeCombat( Embaixo coloque: uint32_t executeLoginCharacter(Player* player); Prontinho o Sistema ta Instalado. Um Exemplo de como usar é um Anti-MC ERROR_TEXT = "MULTI MC DETECTED" function onLoginCharacter(cid, ERROR_TEXT) local tid = getPlayersOnline(cid) for i=1, #tid do if getPlayerIp(cid) == getPlayerIp(tid[i]) then return false end end return true end XML : <event type="logincharacter" name="LoginCharacter" event="script" value="LoginCharacter.lua"/> Login.lua registerCreatureEvent(cid, "LoginCharacter") Prontinho bom profeito e Boa Noite <3 Creditos ? Caotic / Emerson Henrique
  21. File Manager Lib Alpha0.1: Biblioteca para fazer download de arquivos de maneira simples e fácil em lua, podendo ser usada em conjunto com o "OtClient" para fazer um atualizador automático. Funções Alpha0.1: Function List Alpha0.1: doDownloadFile(output, imput) doExecuteSystem(...) doRemoveFile(file) doCheckFile(file) Próxima atualização Alpha0.2: Funções que ainda vão ser adicionadas no Alpha0.2: getDownloadInfo() doExtractFile() Exemplo de uso em lua: require('fileManager') local uPd_Config = { [1] = {"teste.png", "http://wiki.ua.sapo.pt/w/images/c/c9/Rotatetrans.png"}, [2] = {"teste2.png", "http://fc08.deviantart.net/fs70/f/2013/037/5/c/google_chrome__wallpaper__by_hardii-d5u2g2j.png"}, } for i = 1, #uPd_Config do if fileManager.doRemoveFile(uPd_Config[i][1]) then print("File exist Deleting...") print("Download Start") fileManager.doDownloadFile(uPd_Config[i][1], uPd_Config[i][2]) print("Download Done") else print("Download Start") fileManager.doDownloadFile(uPd_Config[i][1], uPd_Config[i][2]) print("Download Done") end end Download Gostou?, então se puder me ajude! não autorizo o re-post em qualquer outro fórum sem minha autorização. vyctor17 - Waki-V LTDA ©
  22. Olá pessoal, estive reparando que varias pessoas estão a procura de como criar uma nova raça no Tibia além das normais (fire, venom e undead), então estarei postando o método de como criar uma nova raça. 1 - No arquivo const.h procure por: enum TextColor_t { 1.2 - E coloque isso abaixo: TEXTCOLOR_NOVARACE = 5, 2 - Agora no arquivo enums.h procure por: enum RaceType_t{ RACE_NONE = 0, RACE_VENOM, RACE_BLOOD, RACE_UNDEAD, RACE_FIRE, RACE_ENERGY, 2.1 - E coloque isso abaixo de RACE_ENERGY: RACE_NOVARACE = 6, 3 - Em monster.cpp agora procure por isso: if(readXMLString(root, "race", strValue)){ std::string tmpStrValue = asLowerCaseString(strValue); if(tmpStrValue == "venom" || atoi(strValue.c_str()) == 1) mType->race = RACE_VENOM; else if(tmpStrValue == "blood" || atoi(strValue.c_str()) == 2) mType->race = RACE_BLOOD; else if(tmpStrValue == "undead" || atoi(strValue.c_str()) == 3) mType->race = RACE_UNDEAD; else if(tmpStrValue == "fire" || atoi(strValue.c_str()) == 4) mType->race = RACE_FIRE; else if(tmpStrValue == "energy" || atoi(strValue.c_str()) == 5) mType->race = RACE_ENERGY; 3.1 - Agora coloque isso abaixo de mType->race = RACE_ENERGY; else if(tmpStrValue == "NOVARACE" || atoi(strValue.c_str()) == 6) mType->race = RACE_NOVARACE; 4 - Agora em game.cpp procure por: case RACE_BLOOD:textColor = TEXTCOLOR_RED; magicEffect = MAGIC_EFFECT_DRAW_BLOOD; splash = Item::CreateItem(ITEM_SMALLSPLASH, FLUID_BLOOD); break; 4.1 - Agora coloque isso abaixo: case RACE_NOVARACE:textColor = TEXTCOLOR_NOVARACE; magicEffect = MAGIC_EFFECT_DRAW_BLOOD; splash = Item::CreateItem(ITEM_SMALLSPLASH, FLUID_BLOOD); break; Pronto você tem uma nova raça agora no seu servidor!
  23. Fala Pessoal Do Fórum Tibia King! Hoje Estou Aqui Para Mostrar a Vocês o Que é Memória RAM, Pra Que Serve e Como Mante-lá Limpa, Para Melhor Funcionamento De Seu Computador. Todos Sabem Que Ela é Essencial Para Um Bom Servidor Né? Então Vamos Lá! O QUE É MEMÓRIA RAM? a Memória RAM é a Memória Que Armazena Tudo o Que Você Acessou Recentemente No Computador. Ela Armazena Para Que o Próximo Acesso a Determinado Processo Ou Arquivo Seja Mais Rápido. Quanto Maior a Memória RAM, Maior o Número De "Processos" Suportados. PARA QUE SERVE A MEMÓRIA RAM? Se o Processador é o Cérebro Do PC Podemos Considerar a Memória RAM o Seu Coração, Ela Armazena Informações Para Que o Processador Não Precise Acessar o Tempo Todo o HD e Assim Tornando Lento o Desempenho Do Computador, Isso é Notavelmente Visível Quando Você Está Executando Um Programa Muito Grande Ou Um Jogo e Ele Trava (Dá Aquela Parada Inesperada), Isso é Falta De Memória, o Processador Teve Que Ir Lá No HD Buscar As Informações, Atualmente Para Uso Domestico Um Pente De 512MB é Suficiente. DICAS PARA LIMPAR SUA MEMÓRIA RAM Mantenha Sempre Limpa Sua Memória, Aconselho Utilizar Aplicativos Para Limpeza De Memória. Eles São Bem Leves, Mais Cumprem o Prometido! Você Pode Utilizar Aplicativos Como Esses - RAMBooster2.0 Memory Optimizer Pro DICAS PARA MELHORAR O DESEMPENHO EM WINDOWS 7 a Memória RAM é Muito Mal Administrada Pelo Windows, Mesmo No 7. Então, Com o Passar Do Tempo o Sistema Operacional Da Microsoft Vai Acumulando Mais e Mais Memória, Sendo Que Ela Acaba Se Tornando Dispensável. Qualquer Computador Com Windows 7 (Ou Até Mesmo Em Versões Mais Antigas), Possuem Esse Problema. Existem Três Dicas Que Ajudam a Melhorar o Desempenho, Veja: 1. Comprando Mais Pentes: Atualmente, Mínimo Para Se Ter Um Desempenho Satisfatório São 2 GBs De RAM, Caso Queira Melhorar Seu Desempenho Drasticamente, Invista Em Mais Pentes (Fique Atento Com Os Limites Da Sua Placa Mãe). 2. Executando Menos Programas: Se o Seu Computador Sofre Com Lentidão, Evite Abrir Vários Programas Juntos, Como Por Exemplo: Navegador, Word, Power Point, Photoshop e De Quebra Um Editor De Vídeo. Ou Seja, Tente Organizar e Tentar Fazer Uma Coisa De Cada Vez. 3. Liberando Memória RAM Com Programas: a Última Dica é Liberar Mais Memória RAM Através De Programas. Essa Dica Vale Tanto Para Quem Tem 1 GB Como Para Quem Tem 8 GBs, Pois o Sistema Operacional Ajusta Quanto Ele Vai Utilizar Da Memória De Acordo Com o Total, Então Nunca a Mesma Quantidade De RAM Que o Windows 7 Utiliza Em Uma Máquina De 1 GB Será a Mesma Que Numa De 8 GBs, Porém Ambas Quantidades Serão Proporcionais Ao Tamanho Total. TUTORIAL MEMORY OPTIMIZER PRO (RECOMENDADO!) Utilizar Esse Tipo De Programa é Bem Simples, Veja Sua Interface - Podemos Ver Que a Máquina Está Ocupando Quase Toda a Memória, Clique Em Recover Free Memory e Veja a Mágica - Como Podemos Ver, o Programa Liberou 482 MB De RAM Em Uma Máquina Que Possue 1GB! Faça o Teste Em Sua Máquina, e Comente Seu Resultado. ÚLTIMAS DICAS (MAIS IMPORTANTES!) Essas Dicas Eu Achei Na Net, e Vou Passar Para Vocês, Tenho Certeza Que Funcionará Para Vocês Do Mesmo Jeito Que Funcionou Para Mim. o Método Abaixo é Aprovado Pela Microsoft. Primeiramente, Vá No Menu Iniciar/Todos Os Programas/Acessórios/Executar. Digite system.ini, Abrirá Um Bloco De Notas Escrito Isso - Abaixo De [386Enh], Cole Isso - 32BitDiskAccess=on 32BitFileAccess=on DMABufferSize=64 MinSPs=16 PageBuffers=32 ConservativeSwapfileUsage=1 OBS - Aconselho Apenas Colar Isso, Qualquer Outro Tipo De Edição Poderá Ferrar o Seu PC. Feche e Salve, Caso Tenha Erros Ao Salvar, Salve Na Sua Área De Trabalho, Depois Mova Para Computador/Disco Local (C:)/Windows e Substitua. Minha Outra Dica Também é Ótima. Basta Abrir o Bloco De Notas, e Colocar Isso - mystring=(80000000000000) No Meu Caso, Eu Coloquei o Valor De 80000000000000, Não Sei Se Pra Vocês Isso Vai Dar, Caso Seu PC Não Aguente, Ele Reiniciará. Adicione Ou Retire Valores De Acordo Com Seu PC (Adicione e Retire Apenas Os Números 0). Depois, Basta Salvar Com o Nome De Ram.vbs. Para Utilizá-lo, Basta Ir Clicando Para Abrir, Nada Acontecerá, Mais Você Notará a Diferença. Aconselho Abrir Apenas 8 Vezes Por Dia, Pois Talvez Seu Computador Entre Em Conflito (Bem Improvável). Pessoal, Essas Foram Minhas Dicas Sobre Como Liberar Memória RAM, Espero Que Vocês Comentem Seus Resultados! Créditos - ----
  24. Olá TibiaKing, Vou ensinar pra vocês como mecher no SQL Studio.. Vamos por a mão na massa e parar se nhênhênhê.. Primeiramente baixem o SQLite Studio (1.1.1 Última Versão). SQLite Studio 1.1.1 ( Site Oficial) Certo, primeiro vou dar uma introdução.. Pra que serve SQLite Studio? R: SQLite Studio, é os mais recentes editores de players, houses, accounts, etc.. É muito pesado o programa? Tem que instalar? R: Não, em ambas perguntas não. Não tem que instalar, e não é pesado.. Como eu mecho nisso? R: Vou lhe ensinar agora!! Bora, mão na massa!! Que Bom que estão empolgados!! 1.Abra o seu SQLite Studio 1.1.1 2.Adiciona uma nova database.. (database name pode ser qualquer um ) 3.Escolha a sua database.. exemplo: nomedadatabase.s3db (s3db é a extensão.. isso que você importará.). 4.De um duplo click no nome da database.. 5.Clique no "+" do lado de Tables.. O que essa baguiada faiz? RELAXA , já vou ensinar, detalhadamentee ( Os principais ).. 3. Accounts.. 1. De um duplo click em accounts.. 2. Click em Data, para ver as accounts das pessoas.. Quero editar uma conta.. o número de account, como faço? R:Clica como se fosse renomear a account.. dai é só mudar..) 4.Players 1.Dê um duplo click na aba Players.. 2.Click em Data, para ver os players.. Quero editar meu nome, como faço? R: Renomei-o, como se fosse uma pasta.. Tudo que eu quiser, é como se fosse renomear é? R: Basicamente sim.. Assim eu consigo diminuir o tutorial.. Alguns botões.. - Importa arquivo Melhor localização - Add Database Melhor localização - Refresh Melhor localização Valeu, espero ter ajudado, se faltar algo avisem-me.. por favor! Atenciosamente, JhonatanCWest
  25. A pedido do usuário Vyctor17 (da OTBR) fiz uma função para multiplicar o dano dos monstros: Primeiro, em luascripts.cpp deverá ser adicionado, logo após: registerMethod("Monster", "isMonster", LuaScriptInterface::luaMonsterIsMonster); Isso: registerMethod("Monster", "multiplyDamage", LuaScriptInterface::luaMonsterMultiplyDamage); Logo abaixo de: int32_t LuaScriptInterface::luaMonsterIsMonster(lua_State* L) { // monster:isMonster() const Monster* monster = getUserdata<const Monster>(L, 1); pushBoolean(L, monster != nullptr); return 1; } Isso: int32_t LuaScriptInterface::luaMonsterMultiplyDamage(lua_State* L) { // monster:multiplyDamage(multiplier) Monster* monster = getUserdata<Monster>(L, 1); if (monster) { monster->multiplier = getNumber<uint32_t>(L, 2); pushBoolean(L, true); } else { lua_pushnil(L); } return 1; } Em luascripts.h: Logo após: static int32_t luaMonsterIsMonster(lua_State* L); Isso: static int32_t luaMonsterMultiplyDamage(lua_State* L); Em monster.h: Logo após: static uint32_t monsterAutoID; Isso: int32_t multiplier; Em monster.cpp: Logo após: Monster::Monster(MonsterType* _mtype) : Creature() { Isso: multiplier = 1; No método Monster::doAttacking, procure por: ATENÇÃO, TEM QUE SER NO MÉTODO Monster::doAttacking! minCombatValue = spellBlock.minCombatValue; maxCombatValue = spellBlock.maxCombatValue; Substitua por: minCombatValue = spellBlock.minCombatValue * multiplier; maxCombatValue = spellBlock.maxCombatValue * multiplier; E está feito. Se quiser fazer o monstro não dar dano, só por um multiplier abaixo de zero.

Informação Importante

Confirmação de Termo