Ir para conteúdo

Líderes

Conteúdo Popular

Exibindo conteúdo com a maior reputação em 09/22/13 em todas áreas

  1. Oneshot

    Monstros Passivos

    Monstros Passivos Muito bom dia, galera. Sabe, eu estava estudando como funcionam os servidores de pokémons, aqueles que ainda estão começando, embriões de bons servidores, não grandes servidores como o Poke Brasil Online (PokeBro). O problema de todos esses servidores, é que todos são dependentes de sistemas criados pelo brun123 (se não me engano) dentro das sources, ou seja, esses servidores são dependentes do executável compilado do PDA, entre outros. A pedido de um amigo, eu desenvolvi o sistema de monstros passivos. Sim aquele sistema que dá um upgrade na inteligência artificial das criaturas, onde algumas podem atacar o jogador assim que o ver, outras podem atacar apenas quando for atacadas. É um sistema muito básico mesmo, eu fiz com C++ e Lua por puro comodismo, e pretendo deixar mais avançado apenas com C++ e uso de flags nos XMLs. Se você quiser usar, sinta-se a vontade. No seu arquivo monster.h, procure por: bool isHostile() {return mType->isHostile;} Substitua por: bool isHostile() const { std::string value; if(!getStorage("hostile", value)) return mType->isHostile; return booleanString(value); } No seu arquivo monster.cpp, procure por: Monster::selectTarget Dentro da função, procure por: if(!isTarget(creature)) return false; Adicione abaixo: if(!isHostile()) return false; No diretório creaturescripts/scripts, crie um novo arquivo com nome passive.lua e adicione: PASSIVE_BEHAVIOR = {"Deer", "Rabbit"} -- Aqui ficam os monstros que não atacam, mesmo que atacados. function onCombat(cid, target) if isMonster(target) then if not isInArray(PASSIVE_BEHAVIOR, getCreatureName(target)) then doCreatureSetStorage(target, "hostile", 1) end doMonsterSetTarget(target, cid) end return true end No mesmo diretório, abra o arquivo login.lua e adicione: registerCreatureEvent(cid, "PassiveSystem") No diretório creaturescripts/, abra o arquivo creaturescripts.xml e adicione: <event type="combat" name="PassiveSystem" event="script" value="passive.lua"/> Agora é só compilar seu servidor, sem a pasta obj, ou seja, dê um Rebuild All e correr pro abraço com seu sistema de monstros passivos. Abraços, Oneshot.
    5 pontos
  2. Avuenja

    Site feito por Avuenja

    Olá pessoal! Fiz agorinha mesmo!Ainda ta só html, e textos de teste, para a formatação então não reparem muito. Mas quero opinião sincera sobre o mesmo.
    4 pontos
  3. (Para ver maior, clique na imagem) Pack: http://www.4shared.com/rar/u8DzeL5w/mega_pack_collage___by_annypor.html?
    3 pontos
  4. Nolis

    [Encerrado]OTAvatar Voltou !

    É isso mesmo galera, o Avatar (OTAvatar) está de volta, com novidades e novas espectativas. Para quem não sabe da história, tudo iniciou com a criação do OTAvatar, onde foram reunidas várias doações de sprites de outros servidores que não deram certo. Gustavo Ferreira começou patrocinando o OTAvatar, dentre toda a história do projeto se destacaram algumas figuras de ambos os fóruns. Infelizmente, por conta de problemas pessoais o projeto teve que ser cancelado, o site foi fechado, e o projeto arquivado. Agora nos reerguemos, uma equipe antes com mentes fortes se transformou apenas em um projeto antigo tentando voltar a ser o que era quando estava crescendo. AGRADECIMENTOS Agradecimentos Gerais: Gustavo Carvalho Pereira Rafael Carvalho Pereira Comedinhas Demonbholder Vodkart Insaend Won Helder Matheus Sesso Raphaelpdc Setzen Kaio Santos BlWalker Bolz Warotserv Eratsu Jamison Avuenja BloodWalker Warotserver Omega Blueheaven Nogard OrochiElf Agradecimento Test Server Subwat Vodkart Won Helder Comedinhas Demonbholder • • •• • • Apresentação Geral O servidor Avatar terá 90% das sprites editadas, dessas, grande parte são doações, (gostaria que se alguém reconhecesse algum trabalho doado comentasse no tópico para eu adicionar os créditos.). O servidor se baseia no desenho Avatar - A lenda de Aang, pretendemos criar um servidor 100% RPG e diferente que agrade o público. Equipe Avatar • Daniel (Administrador, RPG Maker, Mapper) • Jamison (Administrador, Mapper, Scripter) • Ozai (Coadministrador, Designer, Spriter, Scripter) • Nogard (Coadministrador, RPG Maker, Spriter) • Omega Blueheaven (Diretor, RPG Maker, Scripter) • Kaiquegabriel (Diretor, RPG Maker, Mapper) • Avuenja (Webmaster) • Raphaelpdc (Colaborador, spriter) • Kaio Santos (Patrocinador) • Matheus Sesso (Patrocinador) Sprites e Mapa Site Outfits: Waterbender, Firebender, Earthbender, Airbender e Warrior e Bender; Magias: pelo menos 5 sprites de efeitos novos adicionados; Sprites de sistemas: Sprite do APA, que foi feita exclusivamente por Insaend entre outras. • • • • Sistemas Fly: Dobradores de ar podem voar pelo mapa utilizando um sistema muito criativo; Apa: Temos o apa como meio de transporte Kyoshi: Os jogadores iniciantes começam na ilha kyoshi e aprendem suas dobras, há muitas quests e RPG; Spirit On: Jogadores experientes podem ter acesso ao mundo espiritual, incluindo novas outfits e magias; Guerra de Nações: é um evento onde as nações guerreiam, uma quest que todos os jogadores devem fazer, invadir nações inimigas e capturar recompensas. Controle de magias: As vocações só poderão usar magia se tiver o elemento por perto, um jarro da água e um lago permitem um waterbender usar a magia como exemplo. Vocações Chi Blocker Warrior Waterbender Firebender Earthbender Airbender VAGAS Sem vagas no momento. Em breve mais atualizações.
    3 pontos
  5. BananaFight

    [Arquivado]Level System

    Level System Fala galerinha, eu terminei hoje de criar as formulas de experiencia por level, e de experiencia por monstro. Exp por monstro Diferente de outros pokemons, Cada pokemon terá sua base de exp, e quando você matar um pokemon, você recebera a xp que for calculada. Formula de exp : er = 1,0 para Pokemon selvagens ou 1.5 para pokemon de npcs. eb = Exp base do pokemon que você derrotou. lvl = nível do pokemon que você derrotou. pc = 1 ( Esta parte foi removida ). wlvl = nivel do seu pokemon. wr = 1.5 caso seu pokemon tenha desvantagem contra o inimigo, e 1.0 caso você tenha vantagem ou seja do mesmo tipo. O Resultado desta formula sera a xp que você irá ganhar. Exp por level Cada level tera uma quantidade diferente para que se possa evoluir de level. Formula do Level: math.floor((((2*maxlevel/(maxlevel-level))^4+ level^3)*(baseexp/20))) maxlevel = O maximo de level que o seu pokemon pode chegar level = Level do seu pokemon baseexp = a base da exp que o seu pokemon tem Bom pessoal, estas serão as formulas do sistema de up level, espero que gostem, estar formulas foram tiradas do site "pokemon world online wiki", para que consigamos nos aproximas das formulas reais. http://iblamelee.co.uk/pwo/wiki/index.php?title=Base_Experience
    3 pontos
  6. Olá xtibia e todo os usúarios, por meio desse topico resolvi criar um tutorial como ADICIONAR icon system ao servidor, sem desloga vamos lá? Servidor usado para adicionar icon system http://www.xtibia.com/forum/topic/201018-pxo-server-11-by-smix/ Bom.. como o server dele já vem istalado o systema de icon system fica até mais facil, vamos lá? logo apoís abaixa-lo o servidor vamo ao primeiro passo para adicionar icon. 1* irei usar como TESTE 3 IDS do item.otb 13590,13591 e 13592. Bom o ID 13590 sera usado como 'On' Icone On.(Icone Vivo). o ID 13591 sera usado como icone OFF/icone morto. e o ID 13592 sera usado como USÊ/Icone sendo usado. agora vamos lá nas modificações dos scripts? Action configurações. Agora vamos para a parte de LIB. Mais tome muito atenção aqui, porque tem que faze bem certinho se não bugara muitas coisas. Lib configurações. agora vamos as configurações no movements. Movements configurações. Agora vamos ao item.xml
    2 pontos
  7. Versão: 0.3.6pl1 TFS Função: Adiciona a velocidade de ataque de acordo com uma determinada skill e/ou arma. Autor: henriqueberro (eu). 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, o código inteiro é de minha autoria e livre para modificações e uso, abraços.
    2 pontos
  8. BananaFight

    Function onGainExp(cid, value)

    Function onGainExp(cid, value) Criador: knightxd Descrição: Esta função é ativada quando uma criatura ganha EXP. E você pode retornar falso (return false) para que está criatura não ganhe EXP. Instalação: Creatureevent.h procure por : CREATURE_EVENT_OUTFIT, e adicione embaixo : CREATURE_EVENT_GAINEXP, Novamente, Procure por uint32_t executeOutfit(Creature* creature, const Outfit_t& old, const Outfit_t& current); e adicione embaixo: uint32_t executeGainExp(Player* player, int32_t value); Agora, Abra creatureevent.cpp e Procure por : else if(tmpStr == "outfit") m_type = CREATURE_EVENT_OUTFIT; e adicione embaixo: else if(tmpStr == "gainexp") m_type = CREATURE_EVENT_GAINEXP; Procure por: case CREATURE_EVENT_OUTFIT: return "onOutfit"; e adicione embaixo: case CREATURE_EVENT_GAINEXP: return "onGainExp"; Agora, Procure por: case CREATURE_EVENT_OUTFIT: return "cid, old, current";~ e adicione embaixo: case CREATURE_EVENT_GAINEXP: return "cid, value"; Agora, Procure por: std::cout << "[Error - CreatureEvent::executeStatsChange] Call stack overflow." << std::endl; return 0; } } embaixo adicione: uint32_t CreatureEvent::executeGainExp(Player* player, int32_t value) { //onGainExp(cid, value) 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; scriptstream << "local value = " << value << 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->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)); lua_pushnumber(L, value); bool result = m_interface->callFunction(2); m_interface->releaseEnv(); return result; } } else { std::clog << "[Error - CreatureEvent::executeGainExp] Call stack overflow." << std::endl; return 0; } } Agora em Player.cpp procure por bool Player::gainExperience(double& gainExp e embaixo adicione: if(gainExp >= 1) { bool deny = false; CreatureEventList gainExpEvents = this->getCreatureEvents(CREATURE_EVENT_GAINEXP); for(CreatureEventList::iterator it = gainExpEvents.begin(); it != gainExpEvents.end(); ++it) { if(!(*it)->executeGainExp(this, gainExp)) deny = true; } if(deny) return false; } Exemplo de uso: function onGainExp(cid, value) print(value) end Não esqueça de registrar o evento no onlogin Considerações finais: Sim eu sei que já existe um sistema igual no xtibia, porem ele esta errado, este funciona em qualquer source. Desculpem pessoal, mais o xtibia tinha cortado um pedaço do tutorial, e ele estava incompleto, Agora ja foi corrigido.
    2 pontos
  9. Gabriel Couto

    Anyur's Art Place

    (OLD) (NEW)
    2 pontos
  10. Cara, explique melhor da próxima vez. Como não entendi exatamente o que você queria, fiz opção pra duas checagens: se o cara está em tal posição e se o cara tem tal storage. Basta colocar true no lugar do false que você quer checar e preencher adequadamente. Se não quiser checar nada e sempre teleportar quando o cara for logar, é só deixar tudo false. Salve como logoutteste.lua em creaturescripts/scripts function onLogout(cid) local checkpos = false -- Checar se o cara está na posição abaixo? local pos = {x=123, y=321, z=7} local checkStorage = false -- Checar se o cara tem o valor do storage abaixo? local storage = 66123 local stg_value = 1231 local TP_position = {x=160, y=50, z=7} -- Posição para a qual o jogador será enviado if checkpos then pos = getThingPos(cid) if pos.x == checkpos.x and pos.y == checkpos.y and pos.z == checkpos.z then doTeleportThing(cid, TP_position) end return true elseif checkStorage then if getPlayerStorageValue(cid, storage) == stg_value then doTeleportThing(cid, TP_position) return true end return true end doTeleportThing(cid, TP_position) return true end Creaturescripts.xml: <event type="logout" name="TesteLogout" event="script" value="logoutteste.lua"/> OBS.: não precisa registrar no login.lua por ser evento de logout
    2 pontos
  11. 2 pontos
  12. Creditos: Vodkart Kydrai fala galerinha resolvi posta alguns script que acontece quando o player mata algum monstro ... o primeiro é o script que acontece quando voce mata um Monstro abre o teleport. o segundo é matar o monstro e sumir a parede por algum tempo. Obs: o Nome do monstro deve ser colocado com Letra Maiuscula. [ Matar monstro e abrir Teleport ] creaturescript\script [ Matar Monstro e parede sumir por determinado tempo ] creaturescript\script [ Matar Monstro e ser teleportado ] [ Matar Monstro e Ganhar Storage ]
    1 ponto
  13. alissonfgp

    Global Server 10.10

    Estou liberando o update de correção de bugs, tivemos muitos reportes de bugs, mas consegui trabalhar bem na reparação dos erros. Pesso desculpa pelo atraso neste update. Segue abaixo o que foi corrigido neste update: * Sem os novos sistemas de Browse Field, PVP(10.10) e Guild mark 10.10 * New Ab'Dendriel 98% * Houses De Ab'Dendriel Adicionadas * Protection Zones das novas areas * New Drefia 98% * Monsters 10.10, mas nao completos faltam loots e attacks (Postarei em breve no forum caso ninguem poste) * Npcs adicionado (mas estao com nome e outfit alterada tem que ajustar.) * Bug de Fibula removido * Bug dos 15kk Trolls Removido * Bug da ML removido * Bug Factory Quarter Yalahar new cave de War golems corrigido agora 100% acessivel * Adicionado Trainers Offline em Ab'Dendriel e Ankrahmun (as que faltavam) * Protection Zone em Quirefang * Concertado hits de alguns monstros das versoes 9.4 ~~ 9.6 * Bug Demon Oak, entrar mais que 1 player foi corrigido, Só entra 1 agora * Bug Warzones (agora pode refaze-las apos 20h) * Npc Avar Tar entregando Demon outfits and addons * Save configurado agora nao salva frequentemente * Buracos no mapa corrigido-- se encontrarem mais por favor reportem * Novas mounts adicionadas * NPCS Gamon(Thais), Nydala(Carlin) e Allen(Venore) vendendo a nova cama canopy bed kit adicionado * Database concertada (erro quando deslogava character resetava o player)-- precisa importa sql doc gatilho player dentro da pasta * Items.xml com corpses dos novos monstros * Items.xml Alguns items adicionados (Nail case, Tiles entre outros, Nao estao 100% peso, Descriçao e talz) * /newtype adicionado 10x (para quem quiser ver as novas looktype) * Porta da ilha Vegas trancada (Soft boots free ¬¬) * D'lair Kazz Adicionada * Lizard Chosen new respawn adicionado * Lancer Beetle new respawn adicionado Sources nao postarei ainda vou tentar adicionar os novos sistemas. Creditos: 8.6 Denner 8.6x+ Alissonfgp (EU) Outros (reportaram bugs, no mapa, scripts e talz) Distro: TFS Team 9.86 e Update 10.10 feito por min(Alissonfgp). Links: Datapack: http://www.4shared.com/rar/j-GBsosP/Global1010byAlissonfgpPT_2_.html Distro TFS 0.3: http://www.mediafire.com/?cbvkjxe1oggcr52 Source 0.3 Novo Sistema de Party adicionado: http://www.4shared.com/rar/lpVxPgKU/03_Source_1010_By_Alissonfgp.html Scan: https://www.virustotal.com/pt-br/url/4822c0a42c15bb81680e89daa34a55d91a58043272b2fc33cc127b28ec709724/analysis/1381956584/ Scans: SCAN DATAPACK: https://www.virustotal.com/pt-br/url/908394709feeffb6a947ded09b79db2b659ead4f655e75072bab33e77a222ff7/analysis/1381322018/ SCAN TFS 0.3: https://www.virustotal.com/pt-br/url/b30016d7ece4a831a9a4e02c002bc0255736f4356cd96b8cfdc4f13d04c8b4f7/analysis/1377522194/ Senha do God... Account: tibia Password: 234567 UPDATE DIA 13/10/2013 Link: http://www.4shared.com/rar/j-GBsosP/Global1010byAlissonfgpPT_2_.html Scan: https://www.virustotal.com/pt-br/url/908394709feeffb6a947ded09b79db2b659ead4f655e75072bab33e77a222ff7/analysis/1381322018/ Alguns Bugs Removidos... * Novo Sistema de Party Adicionado * Quest Drefia Adicionado * Portas de Drefia e Buracos, onde se usa Corda(rope) arrumado * Monsters 10.10 98% loots e atks (by Avronex) * Database Sqlite arrumado * Portas de Venore concertadas (as portas com a maçaneta brilhando e que nao querem abrir adicione actionid 100) * Libs sem utilizaçao removidas. * Mounts e Mount doll concertados... * Bug Container Removido * Bug 64 Bits para win64 removido (agr roda sem esse erros) * NPC e Escada em Thais, npc Xodet de Potions... Breve... Browse field e Novo Sistema de Guild e a Source. E removerei mais bugs... Algumas imagens: Novo Party System Drefia Ab'dendriel Norte Carlin Norte Ab'dendriel Hellgate
    1 ponto
  14. Boa galera, vejo que ainda tem muita gente que necessita de um tutorial parecido com esse, então resolvi posta pra alguns pode ser besteira mais pra outros pode ser muito bom. Vamos nois... Vai até htdocs/confg/config.php Procure por: // E-MAIL config Estará assim: // E-MAIL config $config['site']['send_emails'] = 0; // is acc. maker configured to send e-mails? $config['site']['mail_address'] = ""; // e-mail address $config['site']['smtp_enabled'] = "yes"; // send by smtp or mail function (set 0 if use mail function) $config['site']['smtp_host'] = "smtp.gmail.com"; // address $config['site']['smtp_port'] = 465; // port $config['site']['smtp_auth'] = "yes"; // need authorization? (set 0 if not need auth) $config['site']['smtp_user'] = ""; // login $config['site']['smtp_pass'] = ""; // password 1° Criei um email no Gmail.com 2° Vamos configurar. Em: $config['site']['send_emails'] = 0; // is acc. maker configured to send e-mails? Bote 1 no lugar do 0. Ficará: $config['site']['send_emails'] = 1; // is acc. maker configured to send e-mails? Em: $config['site']['mail_address'] = ""; // e-mail address Bote o email que você criou no Gmail. Ficará: $config['site']['mail_address'] = "meuemail@gmail.com"; // e-mail address Em: $config['site']['smtp_enabled'] = "yes"; // send by smtp or mail function (set 0 if use mail function) Deixa assim mesmo está correto. Em: $config['site']['smtp_host'] = "smtp.gmail.com"; // address Deixa assim mesmo está correto. Em: $config['site']['smtp_port'] = 465; // port Aqui você troque o port, que está 465 bote o correto 587. Ficará: $config['site']['smtp_port'] = 587; // port Em: $config['site']['smtp_auth'] = "yes"; // need authorization? (set 0 if not need auth) Deixa assim mesmo está correto. Em: $config['site']['smtp_user'] = ""; // login Novamente bote o email que você criou. Ficará: $config['site']['smtp_user'] = "meuemail@gmail.com"; // login Em: $config['site']['smtp_pass'] = ""; // password Aqui você bota a senha do seu email. Ficará: $config['site']['smtp_pass'] = "123456"; // password Bom galera fazendo tudo da forma correta, seu sistema de recuperar accounts estará funcionando corretamente. Existem alguns outros detalhes não tão importantes mais fazem diferença. // USE ONLY IF YOU CONFIGURED E-MAIL AND IT WORK $config['site']['create_account_verify_mail'] = 0; // quando o jogador criar conta deve usar para a direita de e-mail, receberá senha aleatória para a conta, como na tíbia RL, 1 = sim, 0 = não $config['site']['generate_new_reckey'] = 1; // vamos gerar chave de recuperação do jogador novo, ele vai receber e-mail com a tecla rec novo (não exibir na página, o hacker não pode gerar a chave REC) $config['site']['generate_new_reckey_price'] = 5; // você pode obter alguns pontos Premium para os principais novo rec $config['site']['send_mail_when_change_password'] = 1; // enviar e-mail com a nova senha quando alterar a senha para a conta, defina 0 se queixa de alguém para enviar spam $config['site']['send_mail_when_generate_reckey'] = 1; // enviar e-mail com a tecla REC (tecla é exibido na página de qualquer maneira quando gerar), conjunto 0, se o abuso de alguém para enviar spam $config['site']['send_register_email'] = 1; // enviar e-mail quando registrar conta Galera quem gostar comenta e rep++ té aproxima.
    1 ponto
  15. Roksas

    [Tutorial] Dicas Para Um Bom Ot

    Dicas para um bom OT ! Ola galera, hoje vou postar algumas dicas para voces nao se darem mal com 20 players com um OT durando 1 semana! 1º Dica: Muitas pessoas pensam que as rates de Magic Level e Skill tem que ser iguais, isso é o maior erro! As rates de Magic Level tem que ser 5x menos do que a de skill, exemplo: Rates: Skills:25x - ml:5x. 2º Dica: Ots bons não sao Ots com 99999xp e nem o essencial seria de 50x para baixo, geralmente seu OT duarará nem 2 meses com uns Rates altos assim, OTS com Rates de EXP 12x abaixo, esses sim sao OTS bons e que vão durar bastante, pelo menos eh oque eu e meus amigos pensamos a respeito! 3º Dica: Ots sempre com rates baixas para ter um bom números de player e em competição em skills. 4º Dica: Seu server precisa ter uma economia, entao não bote npc vendendo runas de 100x, bote vendendo runas de 1x e caras, para que tenhu uma economia bem equilibrada e assim sorcerer e druids venderão bps. 5º Dica: Ter seu proprio mapa, com várias quests (mais não de armas fortes, so algumas e que não tenhu quests de todos os itens) ou se você preferir pode por um MAP pronto mais é sempre bom fazer modificações. Dar tempo para os players explorarem o mapa e gostarem tambem e uma boa. 6º Dica: Quando um player começar a jogar não o ponha com os itens como um Plate Set e uma Serpent Sword (se preferir deixe assim), ponha ele com Equipes medios e que não dê para vender. Pense nisso, tambem pode ler o Tutorial de Planejamento do "tibiaa4e", eu gostei! 7º Dica: Bom, dependendo do OT que voce criar, nao coloque runas e bolts infinitos, isto estraga a jogabilidade e nao dara uma boa qualidade para o RPG do jogo, na opniao de muitas pessoas! 8º Dica: Sempre e bom colocar um fast attack, apenas um pouco, tem OTS que em 3 segundos voce mata um Demon, gente isso e muito ruim, estraga totalmente a jogabilidade, o jogo fica muito facil, se fosse para ter rates altas, jogo facil de mao beijada nao seria RPG. 9º Dica: NÃO fazer evento a cada 5 em 5 minutos um evento em 1 em 1 mes ou em 2 e 2 messes ate vai, mais tem que ser dificeis. Como por exemplo Bless Castle, Castle of Honour, muitos OTS tem, eu pelo menos gosto. A cada 1 semana/1 mes, eles fazem esses eventos de War em um castelo, no final a Guild que sobrar ganha. Muito bom isso tambem! 10º Dica: Sempre ver se os player estão de bot ou macro, e na área de trainer coloque bastante food. Obrigado e pense nisso. Abraço e boa sorte com seu OT! Atensiosamente, Roksas.
    1 ponto
  16. *Atualizado 04/04/14 *Suporta qualquer tipo de [banco de dados] *Suporta qualquer versao de ot server - Team Balance Por Tile - O Sistema se Basea em um Balanceamente Por Escolha. - Voce Pode Escolher que Time Vai Entrar e Pode Criar Varios Times ex: [Rosa,preto,branco,azul,vermelho......] - Team Storages: - Red: 6666 - Blue: 6667 - Vai em moveevents/Team1.lua e add isso: XML: <movevent type="StepIn" actionid="8888" event="script" value="Team1.lua"/> - Vai em moveevents/Team2.lua e add isso: XML: <movevent type="StepIn" actionid="8888" event="script" value="Team2.lua"/> - Em Moveevents cria um Arquivo chamado TileTeam.lua: XML: <movevent type="StepIn" actionid="14999-15000" event="script" value="TileTeam.lua"/> - Depois vai em creaturescripts/Logout.lua e add isso: XML: <event type="logout" name="logar" event="script" value="Logout.lua"/> Registra no Login.lua: registerCreatureEvent(cid, "logar") - Depois Cria um Arquivo chamado Death.lua: XML: <event type="death" name="deathtime" event="script" value="Death.lua"/> Registra no Login.lua: registerCreatureEvent(cid, "deathtime") - Depois talkactions/online.lua xml: <talkaction words="!online" event="script" value="online.lua"/> - Team Balance Por Login *ATUALIZADO [06/10/13] *Suport [Mysql] *Suporta qualquer tipo de [banco de dados] *Suporta qualquer versao de ot server *Favor trocar todos os scripts e nao reaproveitar os Antigos scripts *Download Mapa ja configurado: http://www.4shared.com/rar/glPqSHjG/world.html? Eae Galera , eu vi muita gente querendo o Script de Team balance e nao os que tem na Net para baixar Eu vou ensinar a instalar o sistema em qualquer Servidor de War: *Primeiro vai na sua Lib e cria um arquivo chamado War.Lib: Depois vai na cria um arquivo chamado data.lib ass essa linha dentro do arquivo data.lib *Depois vai em data/creaturescripts/loginwar.lua *Agora a parte do Change Map, vai em globalevents/scripts/changemap.lua e add isso : XmL: 2400 é 40 minutos *Agora os Comandos [Online e Changemap] : online: vai em talkactions/script/online.lua: *Changemap vai em talkactions/scripts/changemap.lua: XML: *Obs: da pra por 2 bases pra cada Time um exemplo: [1] = {{2,2},{3,3}}, = voce vai no seu mapa editor e coloca 4 bases 2 azul e 2 vermelho ai vc add as townid de cada time ficando assim [1] = {{2,3},{4,5}}, = ficando assim ele vai ter 4 bases 2 pra cada time e so configurar os templos de cada time no MAPA editor =D *obs²: nao adianta instala o sistema sem coloca as townid/os templos no Mapa editor vai da Erro .Voce tem que ir no mapa editor e coloca pelo menos 2 mapa pro sistema de changemap funciona se nao vai da erro tambem Creditos : Nextbr
    1 ponto
  17. Oneshot

    Fist Fighting/Attackspeed

    Nome: Fist Fighting/Attackspeed Tipo: C++ Autor: Oneshot Já vi alguns pedidos no fórum sobre a skill Fist Fighting, onde quanto mais você treinasse ela, mais rápido você atacaria no jogo, e parece que isto é um feature do Tibia. Como é uma modificação muito fácil nas sources, resolvi passar aí para a galera. Por padrão, o intervalo entre ataques do Tibia é 2000ms, ou seja, um ataque físico a cada dois segundos. Eu fiz uma pequena modificação nas sources onde o Fist Fighting seria inversamente proporcional ao tal intervalo, ou seja, quanto maior o valor da skill, menor seria o intervalo. Fiz de um modo que um jogador com Fist Fighting de nível 200, então, teria uma redução de 75% no intervalo de ataque, ou seja, um ataque a cada meio segundo ou dois ataques por segundo Leve em consideração que ele pega como base o attackspeed da vocação ou da arma usada, ou seja, se seu servidor já tem o tal chamado "fast attack", de nada adianta adicionar esse código C++. Abra seu player.cpp, procure por isso: Player::getAttackSpeed() Substitua toda a função, dependendo da versão de seu servidor: 0.3.6 uint32_t Player::getAttackSpeed() { Item* weapon = getWeapon(); if(weapon && weapon->getAttackSpeed() != 0) return std::ceil(weapon->getAttackSpeed() * (1 - (getSkill(SKILL_FIST, SKILL_LEVEL) * 0.00375))); return std::ceil(vocation->getAttackSpeed() * (1 - (getSkill(SKILL_FIST, SKILL_LEVEL) * 0.00375))); } 0.4 uint32_t Player::getAttackSpeed() const { return std::ceil(((weapon && weapon->getAttackSpeed() != 0) ? weapon->getAttackSpeed() * (1 - (getSkill(SKILL_FIST, SKILL_LEVEL) * 0.00375)) : (vocation->getAttackSpeed() / std::max((size_t)1, getWeapons().size()) * (1 - (getSkill(SKILL_FIST, SKILL_LEVEL) * 0.00375))))); } Isso adiciona uma utilidade para a skill Fist Fighting que em muitos dos servidores é algo deixado de lado e inútil. Abraços.
    1 ponto
  18. warotserv

    Tile Trainer

    Outro script que fiz e estou disponibilizando: Tile Trainer O que ele faz? Enquanto o player estiver em um tile que possui determinada action id, ele vai ficar treinando suas habilidades. Primeiro, em "movements\scripts" crie um arquivo chamado "skill.lua". Feito isso, coloque em seu conteúdo o seguinte texto: local delay = 200 local FIST = 0 local CLUB = 1 local SWORD = 2 local AXE = 3 local DISTANCE = 4 local SHIELDING = 5 local FISHING = 6 function samePos(pos1, pos2) if pos1.x == pos2.x and pos1.y == pos2.y and pos1.z == pos2.z then return true else return false end end function addSkillFunction(cid, item, position) if not isPlayer(cid) == TRUE then return FALSE end local playerPos = getCreaturePosition(cid) if not samePos(position,playerPos) then return FALSE end if (isKnight(cid) == TRUE) then doPlayerAddSkillTry(cid, FIST, 1) doPlayerAddSkillTry(cid, CLUB, 1) doPlayerAddSkillTry(cid, SWORD, 1) doPlayerAddSkillTry(cid, AXE, 1) doPlayerAddSkillTry(cid, SHIELDING, 1) doPlayerAddMana(cid,80) doPlayerAddSpentMana(cid, 80) doSendMagicEffect(position, 2) addEvent(addSkillFunction,delay,cid, item, position) return TRUE end if (isPaladin(cid) == TRUE) then doPlayerAddSkillTry(cid, DISTANCE, 1) doPlayerAddSkillTry(cid, SHIELDING, 1) doPlayerAddMana(cid,80) doPlayerAddSpentMana(cid, 80) doSendMagicEffect(position, 5) addEvent(addSkillFunction,delay,cid, item, position) return TRUE end if (isSorcerer(cid) == TRUE or isDruid(cid)) then doPlayerAddMana(cid,80) doPlayerAddSpentMana(cid, 80) addEvent(addSkillFunction,delay,cid, item, position) return TRUE end return FALSE end function onStepIn(cid, item, position) if isPlayer(cid) then local playerPos = getCreaturePosition(cid) addEvent(addSkillFunction,delay,cid, item, position) doPlayerSendTextMessage(cid, 25, "TREINANDO") end return true end depois, em "movements.xml" adicione a seguinte linha: <movevent type="StepIn" actionid="8585" script="skill.lua"/> Bom, é isso. Acho que não precisa explicar, está bem fácil de entender e alterar o código. Espero ter ajudado. P.S.: Não me importo que roubem meus créditos e/ou postem em outros fórums.
    1 ponto
  19. Gabriel Couto

    [Jovem Zare] Episódio #1

    [Jovem Zare] Episódio #1 É dia, faz calor. É a hora de sair para a aventura, e Zare, um jovem adolescente, iria sair para se aventurar mundo afora. Pegou sua mochila e lança e saiu andando pela cidade. Pelo calor do momento, vários outros aventureiros estavam na cidade. A cidade passava por reformas, mas o piso de pedras de paralelepípedo parecia que nunca seria trocado, mas quem reclamava isso? A melhor opção era descer bueiros, procurar dinheiro perdido para juntar! Sim, muita gente esquecia ou guardava coisas pouco valiosas no bueiro, valia à tentativa sair procurando por aí. O subsolo da cidade era muito úmido, não existiam paredes, só o barro do chão e do lado. Era um local escavado, e Zare começou a temer, pois ouvia ruídos, temia o caminho à frente, assim como a problemática que seria o local ruir e trancá-lo por lá. Apesar do dia quente, o local lamacento e pedregoso era frio. Pela pouca iluminação, teve que usar uma tocha, e o calor da chama foi um alívio naquele momento. Mas a tremedeira continuava; não pelo clima, mas pelo medo do que iria encontrar no seu caminho. Aventura realmente não era seu maior ofício. Após uma hora andando, havia matado alguns ratos que o atacara, e havia encontrado um pouco de dinheiro perto de uma corda, a qual levou junto em sua mochila. Congelou, ouvia gritos; sim, alguém estava gritando à poucos metros, eram uivos de dor de alguém que poderia ter sido atacado por alguma coisa. “Não seriam os ratos, com certeza?” perguntou-se em sua mente, mas o escuro o impedia de ver, foi se aproximando..
    1 ponto
  20. warotserv

    PvP Team

    Este sistema faz com que o server seja divido em 2 times, o time vermelho e o time azul. em "data\creaturescripts\scripts" crie um arquivo chamado "pvpTeam.lua" e cole o seguinte código redTeamSpawn = { x = 218, y = 172, z = 7} -- red team spawn position blueTeamSpawn = { x = 218, y = 170, z = 7} -- blue team spawn position redTeamParticipants = {} blueTeamParticipants = {} function teamLength(team) -- return the number of players in team local count = 0 for _ in pairs(team) do count = count + 1 end return count end function playerJoin(cid) -- try to join player in event if ableToJoin(cid) then redTeamParticipantsLength = teamLength(redTeamParticipants) blueTeamParticipantsLength = teamLength(blueTeamParticipants) if redTeamParticipantsLength <= blueTeamParticipantsLength then redTeamParticipants[cid] = true doPlayerSendTextMessage(cid,22,"Voce foi escolhido para ser do time vermelho.") doTeleportThing(cid, redTeamSpawn) else blueTeamParticipants[cid] = true doPlayerSendTextMessage(cid,22,"Voce foi escolhido para ser do time azul.") doTeleportThing(cid, blueTeamSpawn) end return TRUE else return FALSE end end function playerRemove(cid) -- remove player from event (if its participating) if isParticipating(cid) then if redTeamParticipants[cid] == true then redTeamParticipants[cid] = nil else blueTeamParticipants[cid] = nil end return TRUE else return FALSE end end function isParticipating (cid) -- verify if player is participating of the event if blueTeamParticipants[cid] == true or redTeamParticipants[cid] == true then return TRUE else return FALSE end end function ableToJoin (cid) -- checks if players are able to join if isPlayer(cid) and not isParticipating(cid) then return TRUE else return FALSE end end function arePlayersOfSameTeam (cid1, cid2) -- checks if the players are of the same team if ((blueTeamParticipants[cid1] == true and blueTeamParticipants[cid2] == true) or (redTeamParticipants[cid1] and redTeamParticipants[cid2])) then return TRUE else return FALSE end end function onLogin(cid) -- checks if it's really a player and if it's only if isPlayer(cid) then if isParticipating(cid) == true then return FALSE -- Ooops! If the script reachs here, we gotta verify what's going wrong else if playerJoin(cid) == true then return TRUE -- everything gone as expected else return FALSE -- Ooops! If the script reachs here, we gotta verify what's going wrong end end else return TRUE end end function onLogout(cid) -- this function is essential to not unbalance the teams if isParticipating (cid) then return playerRemove(cid) end return TRUE end function onAttack(cid, attacker) -- verify if both are players if not isPlayer(cid) or not isPlayer(attacker) then return TRUE end -- are those players participating of the event? if not isParticipating(cid) or not isParticipating (attacker) then return TRUE end if arePlayersOfSameTeam(cid, attacker) then -- a player of the same team cannot attack the other!! return FALSE else return TRUE end end function onStatsChange(cid, attacker, t, combat, value) -- verify if both are players if not isPlayer(cid) or not isPlayer(attacker) then return TRUE end -- verify if both are participating of PVP if isParticipating(cid) and isParticipating(attacker) then -- both are participating of event -- verify if both are of the same team if arePlayersOfSameTeam(cid, attacker) then -- they're of the same team. Only heals are acceptable if t == STATSCHANGE_HEALTHGAIN or t == STATSCHANGE_MANAGAIN then return TRUE else return FALSE end else -- they're not of the same team. Only damages are acceptable if t == STATSCHANGE_HEALTHGAIN or t == STATSCHANGE_MANAGAIN then return FALSE else return TRUE end end else -- one or both are not participating of event return TRUE end -- getting local player1Team = monstersTeam[getCreatureName(cid)] -- return if it has no team if player1Team == nil then return TRUE end -- getting monster that is attacking team local monster2Team = monstersTeam[getCreatureName(attacker)] -- return if it has no team if monster2Team == nil then return TRUE end -- check if they're of the same team if monster1Team == monster2Team then -- if they're of the same team, returning false will not allow the damage to be done to its partner return FALSE else return TRUE end return TRUE end agora, em "creaturescripts.xml" adicione o seguinte <event type="attack" name="PvpTeam1" event="script" value="pvpTeam.lua"/> <event type="statschange" name="PvpTeam2" event="script" value="pvpTeam.lua"/> <event type="login" name="PvpTeam3" event="script" value="pvpTeam.lua"/> <event type="logout" name="PvpTeam4" event="script" value="pvpTeam.lua"/> depois, no arquivo "login.lua" que se encontra em "data\creaturescripts\scripts" adicione registerCreatureEvent(cid, "PvpTeam1") registerCreatureEvent(cid, "PvpTeam2") registerCreatureEvent(cid, "PvpTeam3") registerCreatureEvent(cid, "PvpTeam4") Bom, é isso. Espero ter ajudado. P.S.: Não me importo que roubem meus créditos e/ou postem em outros fórums.
    1 ponto
  21. warotserv

    Anti Fast-attack Elf Bot

    Bom... decidi postar agora o script que eu fiz para barrar os botters de fast attack. Primeiro, crie um arquivo chamado "antiBot.lua" em "data\creaturescripts\scripts" e nele adicione o seguinte conteúdo: -- counts physicals, casts .... [player name : creature cid] playerAttacksMade = {} playerActivateTime = {} playerBlocked = {} function tablelength(T) local count = 0 for _ in pairs(T) do count = count + 1 end return count end function onLogin(cid) if isPlayer(cid) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, 'Loading Anti Bot... done.' ) playerAttacksMade[cid] = {} playerActivateTime[cid] = {} playerBlocked[cid] = false end return true end function onLogout(cid) if isPlayer(cid) then playerAttacksMade[cid] = nil playerActivateTime[cid] = nil playerBlocked[cid] = nil end return true end function onStatsChange(cid, attacker, type, combat, value) local maxAttacks = { 6, --pos 1 6, --pos 2 6, --pos 3 6, --pos 4 7, --pos 5 7, --pos 6 7, --pos 7 7, --pos 8 } if not type == STATSCHANGE_HEALTHLOSS or not type == STATSCHANGE_MANALOSS or not isPlayer(attacker) then return true end if value <= 0 then return true end if playerAttacksMade[attacker][cid] == nil then playerAttacksMade[attacker][cid] = 0 playerActivateTime[attacker][cid] = os.time() end local currentTime = os.time() --TESTE --doPlayerSendTextMessage(attacker, MESSAGE_STATUS_CONSOLE_ORANGE, playerAttacksMade[attacker][cid] .. '________' .. attacker .. '_____' .. cid .. '______' .. currentTime .. '_______' .. playerActivateTime[attacker][cid] ) if currentTime >= playerActivateTime[attacker][cid] then playerActivateTime[attacker][cid] = currentTime + 1 playerAttacksMade[attacker][cid] = 0 else playerAttacksMade[attacker][cid] = playerAttacksMade[attacker][cid] + 1 end if playerAttacksMade[attacker][cid] > maxAttacks[getPlayerVocation(attacker)] then playerBlocked[attacker] = true doBroadcastMessage('O player ' .. getPlayerName(attacker) .. ' esta usando bot de fast attack. O seu ataque foi travado ate que ele relogue.', 21) doShowTextDialog(attacker,1952,"PARE DE USAR ELFBOT! Seu ataque foi bloqueado. Para destravar basta relogar. Obrigado. (Sistema exclusivo do ot)") return FALSE end return TRUE end function onCombat(cid, target) if isPlayer(cid) then if not playerBlocked[cid] then registerCreatureEvent(target, "AntiBot2") else return false end end return true end function onCast(cid, target) if isPlayer(cid) then if playerBlocked[cid] then return false end end return true end e em "creaturescripts.xml", encontrado em "data\creaturescripts" adicione: <event type="combat" name="AntiBot1" event="script" value="antiBot.lua"/> <event type="statschange" name="AntiBot2" event="script" value="antiBot.lua"/> <event type="login" name="AntiBot3" event="script" value="antiBot.lua"/> <event type="logout" name="AntiBot4" event="script" value="antiBot.lua"/> <event type="cast" name="AntiBot5" event="script" value="antiBot.lua"/> Agora vou explicar a parte configurável: Aqui você vai modificar qual o número máximo de ações de combate (que dão dano) que certa vocação poderá dar. Posição 1 é Sorcerer, 2 é Druid, 3 é Paladin, 4 é Knight e assim por diante.... Escolha bem esses números! Caso você erre, ele irá ficar detectando erradamente. Por exemplo,vamos supor que o knight tenha o fastAttack em 500ms (logo ele executará 2 ataques por segundo) e que sua magia de dano de menor exhaust tenha um exhaust de apenas 600ms, logo o numero maximo de ataques dele por segundo será 4 (cuidado quando spells de dano diferentes puderem ser usadas ao mesmo tempo, daí você terá de acrescentar mais 1 ao número de ataques por segundo. Não se esqueça dos dots Por favor, testem e me falem o que acharam. Espero que ajude a tirar os botters de seu server. P.S.: Não me importo que roubem meus créditos e/ou postem em outros fórums. É bom espalhar esse script uma vez que botters nos servers 8.6 é muito comum.
    1 ponto
  22. warotserv

    Sistema anti-pega-e-corre (quest)

    Bom dia. Como muitos devem saber a prática de se completar uma quest de baú e depois sair correndo (sem matar os monstros por perto) é muito comum. Com isso, decidi implementar um sistema simples de impedir que isso aconteça. Primeiramente, darei uma visão geral do que é verificado para que o player tenha sucesso na quest. O player não poderá estar a X SQM de distância do baú de quest. O player não poderá estar em uma andar diferente do baú de quest. Agora explicando o que deve ser feito. No arquivo de sua quest, cole o seguinte código -- this table will store the players who are on delay to have their quest completed (successfully or not) playersCompletingQuests = {} local checkingEventDelay = 250 local checkingEventTimes = 60 local maxDistanceToBeCompleted = 7 -- SQM function getDistance (pos1, pos2) -- get distance between two positions (using tibia formula) local difX = pos1.x - pos2.x local difY = pos1.y - pos2.y local difZ = pos1.z - pos2.z -- math.abs() of difs if difX < 0 then difX = -difX end if difY < 0 then difY = -difY end if difZ < 0 then difZ = -difZ end -- using tibia formula local maxDif = difX if maxDif < difY then maxDif = difY end if maxDif < difZ then maxDif = difZ end -- return the result return maxDif end -- To be completed, it's essential that player stays nearby the chest AND at the same floor. function canBeCompleted(cid, item, topos) -- checks if player respected the delay and distance -- check if player is on-line or if it died during the delay time if not isPlayer(cid) then return false end -- store player position in a variable local playerPos = getCreaturePosition(cid) -- check if the distance between player and chest is below the maximum allowed if getDistance(playerPos, topos) > maxDistanceToBeCompleted then return false end -- check same floor condition if playerPos.z ~= topos.z then return false end -- reach here means the player can receive its awards return true end function completeQuest(cid, item, topos) --Event will call this -- remove the player from playersCompletingQuests playersCompletingQuests[cid] = nil -- give player it's awards!!! --double checking if the player hasn't done the quest yet if not questAlreadyCompleted(cid, item) then doCreatureSay(cid, "COMPLETEI UMA QUEST!!", TALKTYPE_ORANGE_1) doPlayerSendTextMessage(cid,22,"Voce completou a quest, parabens!") -- AQUI VOCÊ IMPLEMENTARÁ A PARTE DE ENTREGAR O PRÊMIO AO PLAYER -- AQUI VOCÊ IMPLEMENTARÁ A PARTE DE ACRESCENTAR A STORAGE AO PLAYER else doPlayerSendTextMessage(cid,22,"Voce ja completou essa quest.") end end function checkingEvent(cid, item, topos, checkingsLeft) if checkingsLeft <= 0 then completeQuest(cid, item, topos) else if canBeCompleted(cid, item, topos) then doCreatureSay(cid, checkingsLeft, TALKTYPE_ORANGE_1) addEvent(checkingEvent, checkingEventDelay, cid, item, topos, checkingsLeft-1) else -- cannot be completed if isPlayer(cid) then -- is player online? doCreatureSay(cid, "fail", TALKTYPE_ORANGE_1) doPlayerSendTextMessage(cid,22,"Voce falhou em completar a quest. tente novamente!") end -- remove the player from playersCompletingQuests playersCompletingQuests[cid] = nil end end end function questAlreadyCompleted(cid, item) local queststatus = getPlayerStorageValue(cid,STORAGE_NUMBER) -- COLOQUE O STORAGE NUMBER DA QUEST AQUI!!!!!! if queststatus == -1 then return false else return true end end function isOnAnotherQuest(cid) if playersCompletingQuests[cid] == true then return true else return false end end function onUse(cid, item, frompos, item2, topos) if questAlreadyCompleted(cid, item) then doPlayerSendTextMessage(cid,22,"Voce ja completou essa quest.") elseif isOnAnotherQuest(cid) then doPlayerSendTextMessage(cid,22,"Voce ja esta tentando completar uma outra quest. Aguarde!") else playersCompletingQuests[cid] = true -- player is now trying to achieve success in a quest addEvent(checkingEvent, 0, cid, item, topos, checkingEventTimes) end return true end Agora, faça as devidas mudanças, para se adaptar à sua quest, em: faça o que se pede. Agora, explicando o que pode ser configurado: checkingEventDelay representa de quanto em quanto tempo (em milissegundos) a função "checkingEvent" será chamada. checkingEventTimes representa quantas vezes a função "checkingEvent" será chamada. maxDistanceToBeCompleted representa qual é a distancia máxima que o player pode se distanciar do baú, para que a quest não falhe. Bom, é isso. Espero ter ajudado. P.S.: Não me importo que roubem meus créditos e/ou postem em outros fórums.
    1 ponto
  23. 1 ponto
  24. Mensagem Oficial: "Feliz aniversário TibiaBR.com! Congratulations to the 10th anniversary! A decade of bringing news and entertainment to Brasilian players! Best wishes to the entire TibiaBR-team from all of us!" Traduzido: "Feliz Aniversário TibiaBR.com! Parabéns pelo décimo aniversário! Uma década trazendo notícia e entretenimento para os jogadores brasileiros! Todos nós desejamos tudo de bom para a equipe do TibiaBR!" Fonte: Tibia.com Att, Anyur.
    1 ponto
  25. killerBM

    Poketibia Serv Download

    vou arrumar o tópico todo em breve, eu nao coloquei o client pq vcs iriao ter que criar outro por causa do ip entao abaixem um de qalqer outro poke 8.54 e usem o ip tibia multichange Tou Criando meu OTSERV quem quiser participar da staff só mandar um email pra min Email:cidinhocid@hotmail.com site:http://pokecreater.no.comunidades.net/
    1 ponto
  26. WH47

    Anyur's Art Place

    Eu amo seus collage, pqp <3 Não exagerou em nada, mas também não deixou faltar nada, ficou top
    1 ponto
  27. Nolis

    uMapinha

    nao é tao morta assim heuheu @UP
    1 ponto
  28. WH47

    Assinatura da Semana #89

    1 ponto
  29. Benny

    Anyur's Art Place

    masoq UAehUAHEUAHEUAHEUAHEUAHEUAA q nada a ver UAHEUAHEUAEHUEHAEAUHAEU
    1 ponto
  30. Insaend

    [Encerrado]OTAvatar Voltou !

    Boa Daniel finalmente você volto... espero poder ter tempo para ajudar um velho amigo! Parabéns o projeto era bom espero que continue e melhore ainda mais!
    1 ponto
  31. apt-get install libmysql++-dev libmysqlclient-dev mysql-common mysql-server-5.5
    1 ponto
  32. Marok

    [Encerrado]OTAvatar Voltou !

    Que delicinha de server, gostoso também o dono do tópico. Acompanharei o seu desenvolvimento. Beijos, me liga.
    1 ponto
  33. Oneshot

    Anti Fast-attack Elf Bot

    Meus sinceros parabéns, afinal o bom scripter não é aquele que desenvolve códigos complexos, mas sim aquele que desenvolve códigos com criatividade. Tome meu like e compre tudo de doce.
    1 ponto
  34. Downloadsss

    Poke pro (novidades)

    O jogo Poke pro , Como já citei varias vezes , o poke pro foi criado por , adm Fanta para entreter , divertir e aprofundar os conhecimentos pokemons , Como dito em nosso slogan , Poke pro profissional em diversão. Hoje o jogo e um serve grande instável , com 2 mundos ,hunts exclusivas , Mapa editado , Quests totalmentes únicas do poke pro Media de 60 / 80 e eventos e updates diarios Shop O nosso shop vende : Vip 15 days : 5 $ vip 30 days : 10$ articuno + moltres + zapdos 50 $ - promoção regice - regirock - registel suicune-entei-raikou celebi - shiny celebi lugia - hoho mew - mew - shiny mew - shiny mewtwo shiny articuno - shiny moltres zekrom (5 geração) reshisram ( 5 geração) Sistemas do jogo Sistema de duel :, 1x1 , 2x2 , 3x3 com 1 a 6 pokes Sistema de boost : Ate 800 stone o suporte , e 1 poke por vez fora a boost stone event drop seu poke + 60 Sistema de gins : Os 8 ginasios iniciais de kanto , e aos domingo evento pokemon league Sistema de vip: Hunts exclusivas , quests excusivas , lendarios unicos e vantagens em level e captura Sistema de vocações : Todas as vocações de todos os tipos estão livres em 4 taks Sistema de namer: Npc namer muda o nome do jogador Sistema golden arena : Sistema golden arena em horarios diferentes aos sabados Sistema de guild : O player pode escolher , criar uma guild , ou entrar numa guild sistema de shinys: Alguns shinys exclusivos , shiny moltres , articuno e celebi e outros shiny normais espalhados pelo mapa. Ranking sistema: No site do jogo Temos o ranking atualizando a cada save Sistema de box: Box 1 : Box inicial , uma pequena quest onde um player level 40 ja pode fazela box 4: Se localiza na cidade exclusiva do poke pro , onde os premios ja melhoram muito. box 5 : box , Nivel considerado medio por ter um supreme legendario palkia como sua boss box 6: Localizada , em uma cidade exclusiva toyse , Ja se pode com muita sorte com 0,3 % de chance já pode vir um lendario box 7: Com o mapa todo criado propio pelo poke pro, quest muito dificil apenas 15 player conseguem fazer elas unidos em um so para matar o maligno rayquasa. box 8: Infelizmente so se consegue fazer ela com mais ou menos 30 players de lendarios fortes. box 9 : box mais dificultada do jogo com a ultilidade de 2 tipos exclusivos do jogo Pokemons power - evolução de um poke shiny e pokemon lord especie mais forte do jogo Sistema de quests: tiranitar quest (vip) box 4 quest 2 (vip) shiny celebi quest zapdos quest articuno quest segundo pokemon quest terceiro pokemon quest seu primeiro shiny seu primeiro lendario (vip) Seu primeiro lendario (free) Palkia quest shiny moltres quest regice quest darkrai quest hooper quest Pokemons power: Criado pelo poke pro considerada a evolução de um shiny pokemon evolui para shiny power apos a ultilização da shiny power ruby stone. Habilidades Voar Nadar montar cavar cortar quebrar teleportar controlar mente blink/teleport poke Pokemons : Inicias : Charmander , squirtle , bulbasauro cindaquil ,chicorita , totodile geração: i (x) ii(x) iii() ix () Alguns pokemons da 4 geração como magmorta , electivire e lucario e uns da 3 como tropius também se encontram pelo mapa Bugs encontrados: os que foram encontrados foram arrumados. Sites: guiapokemonprovicio.blogspot.com.br pokepro.sytes.net Staff: Tutor downloads Adm fanta tutor black wolf (estamos em fase de teste de tutores)
    1 ponto
  35. Pokemon né e mi complicado ! @edit E meu caro amigo ta na área errada!
    1 ponto
  36. Nu77

    New SUJA'SHOW OFF

    Pdc blue, nen sabia disso kkk, dei uma editada no pikachu e como tinha dito estarei postando o eevee! Oque acharam agora? edit pikachu: Eevee:
    1 ponto
  37. Gabriel Couto

    Assinatura da Semana #89

    Boa Sorte, todo mundo )
    1 ponto
  38. Mophus

    Assinatura da Semana #89

    http://4.imgland.net/f424z.png
    1 ponto
  39. Vodkart

    filho na adolescencia?

    é legal ter filho? criar um filho? bancar um filho? reveja seus conceitos sexo é bom cara, mas filho não
    1 ponto
  40. Tonynh

    filho na adolescencia?

    Não me leve a mal.. Mas pensar em ter um filho agora na adolescência, é ser muito imaturo. Ter um filho não é só dar de comida, ou criar como se cria um animal de estimação. É dedicar a maior parte da sua vida a ela, e isso não é nada fácil. É preciso de muita preparação, e é provável que você não teria tempo sobrando para fazer o que gosta, se divertir, etc. Se você e a futura mãe dessa criança pretendem fazer faculdade, isso prejudicaria e muito. - Ah, mas eu deixaria uma babá tomando conta. Você deixaria que uma pessoa que nem conhece cuidasse do seu filho ao invés da própria família? É melhor nem ter.. Sem contar que vocês são adolescentes, e você nem sabe se ela é a mulher da sua vida ainda. (sei o que estou falando) Eu mesmo, pretendo ter filhos, mas só depois de formado. Enfim, dei minha opinião sobre o assunto, a decisão é sua.
    1 ponto
  41. Essa função é muito útil pra scripters, ela cria um arquivo .txt na pasta do ot (onde fica o .exe) com TODAS funções da distro, TODAS mesmo. function onUse(cid, item) local k = getLuaFunctions() --- Create file content your server function list local file__ = io.open('Your Server Function List.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() return true end function getLuaFunctions()-- by Mock 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 É só criar uma tag de um item qualquer e dar use nele e pronto, a lista está pronta. OBS: Acho que não tem necessidade de explicar como instala. Créditos: Mock e iuniX
    1 ponto
  42. Então... Te indico 3 paços importantes: 1° - Nunca coloque nada atrás/envolta do sprite. 2° - Tente não deixar com os pixels retos na ponta da espada, faça-os curvados . 3° - Não use cores padrão do paint, pois são cores muito saturadas. (dai vc pergunta: o que é uma cor saturada?, vou explicar) ---------- COR SATURADA ---------- Bem, para sabermos o que é cor saturada, temos que saber o que é saturação. Saturação é o nível de tonalidade cinza de uma cor. Essa é a tabela de cores do Paint. Agora Percebam que o ponteiro de onde indica a cor está bem em cima, e veja a tonalidade da cor. Podemos dizer que a cor está pura, forte, etc. Esses tipos de cores são cores saturadas. Agora vamos ver esta cor: Podemos ver que o ponteiro de escolha de cor está mais pra baixo, e a cor com uma tonalidade MUITO mais puxada pra cinza. Isso é uma cor praticamente sem saturação. observando as duas caixas de cores podemos perceber que quanto mais pra baixo o ponteiro de escolha de cor, menos saturada fica essa cor. Sendo assim, SATURAÇÃO = QUANTIDADE DE CINZA EM UMA COR. --------------------------------------------------------------------------------------------------- Entendendo isso, é só re-fazer o sprite.. Agora com a pointa correta, sem nada atrás e com cores MENOS saturadas... Eu fiz um pequeno edit na forma de sua espada, e coloquei umas cores nela (cores demonstrativas). Vá trocando elas com desse jeito: VINHO = CINZA BEM ESCURO VERMELHO = CINZA ESCURO AZUL = COR MÉDIA (CINZA NORMAL) VERDE = CINZA CLARO (obs: faça isso nesta última, a que eu editei) Faça isso e veremos o resultado!!
    1 ponto
  43. ShinySprite

    [Pedido] Wallace

    Se não for tarde eu fiz ele, ta uma merda mais fiz: Primeira Sprite
    1 ponto
  44. dyego2008

    Pedito monsters xml

    Vai na pasta Monsters e abra o arquivo monsters.xml e cole isto (Obs: otthers/devovorga.xml coloque no diretório certo para não dar erro) <monster name="Halloween Hare" file="Misc/halloweenhare.xml"/> <monster name="Devorga" file="otthers/devorga.xml"/> Depois copie qualquer monsters exeplo demon.xml e renomeie para o nome dos bichos. Halloween Hare <?xml version="1.0" encoding="UTF-8"?> <monster name="The Halloween Hare" nameDescription="The Halloween Hare" race="blood" experience="0" speed="1050" manacost="0"> <health now="2000" max="2000"/> <look type="292"/> <targetchange interval="2000" chance="95"/> <strategy attack="0" defense="0"/> <flags> <flag summonable="0"/> <flag attackable="1"/> <flag hostile="1"/> <flag illusionable="0"/> <flag convinceable="0"/> <flag pushable="0"/> <flag canpushitems="1"/> <flag canpushcreatures="0"/> <flag targetdistance="5"/> <flag staticattack="10"/> <flag runonhealth="0"/> </flags> <attacks> <attack name="melee" interval="2000" skill="0" attack="0"/> <attack name="outfit" interval="2000" radius="7" chance="6" monster="bat" duration="166000"> <attribute key="areaEffect" value="poff"/> </attack> <attack name="outfit" interval="2000" radius="7" chance="5" monster="Thornback tortoise" duration="166000"> <attribute key="areaEffect" value="poff"/> </attack> <attack name="outfit" interval="2000" radius="7" chance="6" monster="orc" duration="166000"> <attribute key="areaEffect" value="poff"/> </attack> <attack name="outfit" interval="2000" radius="7" chance="5" monster="snake" duration="166000"> <attribute key="areaEffect" value="poff"/> </attack> <attack name="outfit" interval="2000" radius="7" chance="6" monster="warlock" duration="166000"> <attribute key="areaEffect" value="poff"/> </attack> <attack name="outfit" interval="2000" radius="7" chance="5" monster="witch" duration="166000"> <attribute key="areaEffect" value="poff"/> </attack> <attack name="outfit" interval="2000" radius="7" chance="5" monster="necromancer" duration="166000"> <attribute key="areaEffect" value="poff"/> </attack> <attack name="outfit" interval="2000" radius="7" chance="5" monster="dwarf geomancer" duration="166000"> <attribute key="areaEffect" value="poff"/> </attack> <attack name="outfit" interval="2000" radius="7" chance="5" monster="monk" duration="166000"> <attribute key="areaEffect" value="poff"/> </attack> <attack name="outfit" interval="2000" radius="7" chance="5" monster="crab" duration="166000"> <attribute key="areaEffect" value="poff"/> </attack> <attack name="outfit" interval="2000" radius="7" chance="5" monster="ghost" duration="166000"> <attribute key="areaEffect" value="poff"/> </attack> <attack name="outfit" interval="2000" radius="7" chance="5" monster="minotaur mage" duration="166000"> <attribute key="areaEffect" value="poff"/> </attack> <attack name="outfit" interval="2000" radius="7" chance="5" monster="green frog" duration="166000"> <attribute key="areaEffect" value="poff"/> </attack> <attack name="outfit" interval="2000" radius="7" chance="5" monster="parrot" duration="166000"> <attribute key="areaEffect" value="poff"/> </attack> <attack name="outfit" interval="2000" radius="7" chance="5" monster="halloweenhare" duration="700000"> <attribute key="areaEffect" value="poff"/> </attack> <attack name="outfit" interval="2000" radius="7" chance="5" monster="The Halloween Hare" duration="7000"> <attribute key="areaEffect" value="poff"/> </attack> <attack name="outfit" interval="2000" radius="7" chance="15" item="2096" duration="166000"> <attribute key="areaEffect" value="poff"/> </attack> </attacks> <defenses armor="999" defense="999"> <defense name="healing" interval="1000" chance="50" min="1500" max="2000"> <attribute key="areaEffect" value="blueshimmer"/> </defense> </defenses> <immunities> <immunity name="physical"/> <immunity name="energy"/> <immunity name="fire"/> <immunity name="poison"/> <immunity name="drown"/> <immunity name="lifedrain"/> <immunity name="paralyze"/> <immunity name="outfit"/> <immunity name="drunk"/> <immunity name="invisible"/> </immunities> </monster> Devovorga <?xml version="1.0" encoding="UTF-8" ?> <monster name="Devovorga" nameDescription="Devovorga" race="venom" experience="700000" speed="350" manacost="0"> <health now="1000000" max="1000000" /> <look type="354"/> <targetchange interval="2000" chance="7" /> <strategy attack="100" defense="20" /> <flags> <flag summonable="0" /> <flag attackable="1" /> <flag hostile="1" /> <flag illusionable="0" /> <flag convinceable="0" /> <flag pushable="0" /> <flag canpushitems="1" /> <flag canpushcreatures="1" /> <flag targetdistance="1" /> <flag runonhealth="0" /> </flags> <attacks> <attack name="melee" interval="1200" min="-0" max="-3100"/> <attack name="lifedrain" interval="2000" chance="7" length="8" spread="0" min="-0" max="-1110"> <attribute key="areaEffect" value="redspark"/> </attack> <attack name="earth" interval="2000" chance="15" radius="6" target="0" min="-0" max="-450"> <attribute key="areaEffect" value="bigplants"/> </attack> <attack name="poisoncondition" interval="3000" chance="28" radius="7" target="0" max="-950"> <attribute key="areaEffect" value="carniphila"/> </attack> <attack name="cursecondition" interval="4000" chance="35" radius="7" target="0" max="-1200"> <attribute key="areaEffect" value="smallclouds"/> </attack> </attacks> <defenses armor="40" defense="39"> <defense name="healing" interval="3000" chance="20" min="2000" max="3000"> <attribute key="areaEffect" value="blueshimmer"/> </defense> </defenses> <immunities> <immunity paralyze="1" /> <immunity invisible="1" /> </immunities> <voices interval="3000" chance="10"> <voice sentence="Slurp!"/> <voice sentence="See how weak you are?"/> <voice sentence="I tried to save you, but there's no use."/> <voice sentence="My soul, power, hatred, knowledge and fury are far away."/> </voices> </monster>
    1 ponto
  45. LuckinhaSan

    [Znote AAC] Naxtie Layout

    Então aqui vai, um layout novo para ZNote AAC... Divirta-se! Prints Download - Naxtie Layout Créditos - Naxtie
    1 ponto
  46. a Script : <item id="2352" article="a" name="crystal arrow"> <attribute key="weight" value="70" /> <attribute key="slotType" value="ammo" /> <attribute key="attack" value="38" /> <attribute key="weaponType" value="ammunition" /> <attribute key="ammoType" value="arrow" /> <attribute key="shootType" value="etherealspear" /> <attribute key="ammoAction" value="removecount" /> </item> vermelho: o ataque que você deseja. Verde:o id e o nome do item que você deseja. Testado e aprovado. se você gostou +Rep (: Ali eu testei com outra arrow mais a script e a mesma.
    1 ponto
Líderes está configurado para São Paulo/GMT-03:00
×
×
  • Criar Novo...