Ir para conteúdo

Líderes

Conteúdo Popular

Exibindo conteúdo com a maior reputação em 01/19/16 em %

  1. Skulls

    Monstros duelando entre si

    Boa noite galera Como levantei no tópico: http://www.xtibia.com/forum/topic/238784-monstros-se-matando/monstros selvagens são todos tratados como amigos e, portanto, não é possível setar target neles com funções de target normal. Além disso, o callBack onTarget() não funciona para monstros. Desde então estou em busca de uma forma de fazer monstros lutarem entre si sem mexer na source e, com algumas sugestões do Lobo @Night Wolf eu consegui chegar a algo bem satisfatório para o que eu precisava. Portanto, compartilho com você a base do sistema (fiz outras coisas para o meu objetivo que acho bobeira postar aqui, mas a base do sistema de luta está aqui). Então vamos lá. Primeiramente, esse sistema é baseado em dois eventos: onThink (que repete de x em x segundos) e onAttack(para evitar que o monstro ataque players quando estiver atacando monstros. Vá em creaturescripts e crie as seguintes tags em creaturescripts.xml: <event type="think" name="monsters" event="script" value="monsters.lua"/> <event type="attack" name="monstersatt" event="script" value="monsters.lua"/> Feito isso, vá na pasta lib (data/lib) e crie um arquivo chamado monsterslib.lua. La dentro coloque: Feito isso, agora crie um arquivo chamado monsters.lua dentro de creaturescripts/scripts, e cole isso dentro Pronto é isso, você tem um pequeno framework configurável para fazer seus monstros se matarem. Para implementar o script no monstro basta ir no arquivo .xml dos monstros que deseja incluir esse sistema e colocar, logo após as defense, a tag: <script> <event name="minionatt"/> <event name="minion"/> </script> Abaixo um exemplo de utilização do framework, simulando uma luta de "raças" entre dwarfs e orcs de diferentes tipos: O código está bem auto explicativo. Qualquer dúvida me avisem. Espero que gostem. Abraços,
    4 pontos
  2. Spencer

    [NTO] Base Naruto Seal War

    Antes de baixarem eu gostaria de enfatizar alguns pontos: - Incluem-se neste download: servidor e cliente . - Inclui alguns virus da base usada no servidor ( Naruto White). - Existem Alguns Bugs no servidor e no mapa, mais nada dificil de resolver - Caso encontre alguma vocação sem spell, e que não tive muito tempo para criar. Ajudei?? REP++ Trade System {100%} Party System {100%} Transformações {100%} +100 monstros {100%} Novos Monstros {100%} Novas sprites {100%} Novas quests {100%} Novas talkactions {100%} Premium Acess {100%} Double exp para premium {100%} Bonus drop {100%} Bonus spells {100%} Vocations: Downloads: a barrinha vermelha e dos virus da base que vem do servidor naruto white mais nada que prejudique o computador pois os virus são inofencivos Não é preciso scans, pois o proprio 4shared faz, e caso peça pra esperar 1000 segundos para iniciar o Download, basta desativar a Extensão Ad-block.. Creditos Apenas Eu.
    2 pontos
  3. jvcasarin

    [GESIOR] 2012 modificado por Sekk

    BOAAS galera!!! Então, baixei um Gesior algum tempo atrás(não lembro onde), e vi que faltavam coisas interessantes nele, então resolvi tentar adicionar(tudo isso esse ano kkk) e CONSEGUI! Não quero enrolar, então vamos ao que interessa: Bom, algumas imagens: Latest News com Featured Article: Menu editado: Who is online? MOSTRANDO OUTFIT COM COR ATUAL!!!: Characters mostrando OUTFIT(COR ATUAL DO PLAYER), HP, MP, EXP, LEVEL e ITEMS!!!: Top guilds: Guild Wars: Downloads arrumados: Battlefield: Trade OFF: Zombie Event: Bom galera, eu adicionei: - Zombie Event page - Battlefield page - Trade Off - Arrumei a page Downloads - Featured Article - Top Guilds page - Guild Wars page - Modifiquei Who is online? e characters.php(outfit, mp, hp, exp, level) - Advanced Admin Panel - Background diferente - Menus novos - Arrumei o sistema de enviar e-mails no cadastro e lost account(falta apenas configurar) Download: https://github.com/s3kk/Gesior/archive/master.zip Scan: https://www.virustotal.com/pt/file/571b26e823c8b209daaf603313bee8d0a7dcfb962747e0c19f4f47dd42781e42/analysis/1452061171/ Database TOTALMENTE LIMPA E COMPATÍVEL: https://github.com/s3kk/Heromassa/blob/master/schemas/war_cast_mysql(gesior).sql Bugs: Obs.: Na página Downloads, se você possuir client próprio, edite em downloads.php o link para download do mesmo! Compátivel com OTS 8.6 e TFS 0.4. Créditos:
    2 pontos
  4. Erimyth

    Compensação por Zanera e Thera

    Ola amigos Xtbianos!! Cipsoft toma uma decisão no caso Dos Mundos Zanera e Thera. No início de Janeiro , o mundo Zanera ( no dia 04 de janeiro de 2016 ) e o mundo de Thera ( no dia 08 de janeiro de 2016 )Sofreram um Rollback Ate o ultimo server Save por motvos de falhas técnicas. E no dia 18 de janeiro mais uma vez, a equipe da Cipsoft gostaria de pedir desculpas por estes problemas e os progressos no jogo perdido de todos os personagens na Zanera e Thera que jogaram durante esse tempo. Recompensa: Para compensar o tempo perdido , haverá um fim de semana de Double XP / habilidade sobre Zanera e Thera , a partir desta sexta-feira , 22 de janeiro inciando-se no server save (10:00 CET) . o Double Exp/Habilidades serão encerrados no server save de segunda-feira, 25 janeiro. A Equipe da Cipsoft espera conseguir sanar um pouco os problemas com leveis perdidos, ajudando os jogadores afetados para recuperar algumas de suas perdas . Toda a Equipe agradece aos Jogadores por compreenderem "mesmo sendo "difícil" rsrs GOGO lvl Up, Bom jogo a todos !
    2 pontos
  5. felzan

    Galeria de aprendizado

    Estou recomeçando a aprender Lua, vou postar alguns scripts que fizer, aqui Quem quiser me dar dicas de como melhorar os códigos, a vontade 1º - Mudança na Spell que cria comida: exevo pan O tipo do item é entregue de acordo com o ML, e a quantidade de acordo com o Lv. 2º - Lenhador A ideia desse é poder usar os machados (estava pensando em qualquer arma) e definir uma chance que o item tem de derrubar a árvore, como não sei os IDs de cor ainda, peguei esses pra testar. 3º - Auto-completion TÓPICO SOBRE ISSO https://github.com/felzan/TFSLua_npp Este não é bem um script, mas ajuda na hora de escrever. É uma biblioteca de funções que são apresentadas ao longo que vou escrevendo. Quero completar, adicionar mais funções e seus parâmetros. Ele mostra uma lista de funções (a partir das letras já inseridas) e os parâmetros necessários para a função, e uma descrição. 4º - Explosion Arrow Se é uma flecha explosiva, POR QUE ELA EXPLODE QUANDO É LANÇADA?!!? A ideia dessa modificação é fazer com que a explosão aconteça quando a flecha atingir o alvo. Como é: Como ficou: Se for uma "flecha explosiva com timer (1s)": 5º - Poison Arrow Só alterei o jeito que o hp é removido, antes era em rounds com dano único. Agora da dano baseado na porcentagem de hp do alvo, mas vai decaindo. 6º - Debuff spell Fiz essa spell pra esse pedido Faz com que o player debuffado sofra mais dano.
    2 pontos
  6. Caronte

    Tirar "YES" ao Viajar

    Em cada estrofe que tem aí - Don't forget npcHandler = npcHandler in the parameters. It is required for all StdModule functions! local travelNode = keywordHandler:addKeyword({'dorion'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Voce quer viajar para Dorion por 110 gold coins?'}) travelNode:addChildKeyword({'yes'}, StdModule.travel, {npcHandler = npcHandler, premium = true, level = 2, cost = 110, destination = {x=31, y=79, z=6} }) travelNode:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, reset = true, text = 'I wouldn\'t go there either.'}) Pegue essa parte StdModule.travel, {npcHandler = npcHandler, premium = true, level = 2, cost = 110, destination = {x=31, y=79, z=6} }) e coloque em cima, em StdModule.say local travelNode = keywordHandler:addKeyword({'dorion'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Voce quer viajar para Dorion por 110 gold coins?'}) Ficando assim: local travelNode = keywordHandler:addKeyword({'dorion'}, StdModule.travel, {npcHandler = npcHandler, premium = true, level = 2, cost = 110, destination = {x=31, y=79, z=6} }) E apague a linha dos yes e no
    2 pontos
  7. Autor:Printer Aqui é um NPC, que irá proteger a cidade de invasores! <?xml version="1.0" encoding="UTF-8"?><npc name="Guard" script="guard.lua" walkinterval="0" speed="0" floorchange="0"> <health now="100" max="100" /> <look type="139" head="20" body="39" legs="45" feet="7" addons="0" /></npc>local keywordHandler = KeywordHandler:new()local npcHandler = NpcHandler:new(keywordHandler)NpcSystem.parseParameters(npcHandler)function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) endfunction onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) endfunction onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) endlocal config = { attackRadius = {x = 7, y = 5}, attackPK = {value = true, skulls = {SKULL_WHITE, SKULL_RED}}, attackMonster = {value = true, ignore = {"Rat", "Cave Rat"}}, damageValue = {min = 10, max = 20}}local targetId = 0local function searchTarget() for _, spectator in ipairs(Game.getSpectators(Npc():getPosition(), false, false, config.attackRadius.x, config.attackRadius.x, config.attackRadius.y, config.attackRadius.y)) do if not spectator:isNpc() then if ((spectator:isPlayer() and not spectator:getGroup():getAccess()) and config.attackPK.value and isInArray(config.attackPK.skulls, spectator:getSkull())) then targetId = spectator:getId() elseif spectator:isMonster() and config.attackMonster.value and not isInArray(config.attackMonster.ignore, spectator:getName()) then targetId = spectator:getId() end end endendfunction onThink() local npc = Npc() local target = Creature(targetId) -- If we have not a target, then we shall search for one if not target then searchTarget(npc) return end -- Let's get target offset position local npcPosition = npc:getPosition() local targetPosition = target:getPosition() local offsetX = npcPosition.x - targetPosition.x local offsetY = npcPosition.y - targetPosition.y -- Target is out of reach, search for new one if math.abs(offsetX) > config.attackRadius.x or math.abs(offsetY) > config.attackRadius.y then targetId = 0 searchTarget(npc) return end -- If target is found doTargetCombatHealth(npc:getId(), targetId, COMBAT_FIREDAMAGE, -config.damageValue.min, -config.damageValue.max, CONST_ME_HITBYFIRE) npcPosition:sendDistanceEffect(targetPosition, CONST_ANI_FIRE) doNpcSetCreatureFocus(targetId) npcHandler:onThink() end
    2 pontos
  8. LucaSAyreeS

    [NTO] Base NTO Foxter

    PS: Utilizar a Distro chamada Servidor, ou OTRestarter [+] Informações: - Sistema de Crítico. - Combos e Magias Novas. - Sprites de Personagens Novas. - Elemental System. - Mapa bom, com lugares novos. - Combos 90% concluídos, faltando só de alguns personagens. - Guild War System. - Sala de Quests. - Sistema de Recompensa. - Sistema de Points. - Personagens totalmente equilibrados. - Nova sala de eventos. [+] Desvantagens: - Muitos erros de distro, mas nada que afete o server. - Client com limite de sprites. [+] Imagens: [+] Downloads: http://www.4shared.com/rar/KAd6YH_cba/NTOFox.html? [+] Scan: https://www.virustotal.com/pt/file/657a18976eb2b747a0356fdd306cbc56b3677f81ed83d6698f89d86c06f63664/analysis/1453246178/ [+] Créditos: Eu pelas modificações. Aos que trabalham nessa base antes de mim.
    1 ponto
  9. SkyLigh

    Evento Double Exp

    Fala galera tudo bem? Essa semana teve um membro que pediu um evento de double exp até que consegui fazer usando alguns scripts como base, então vamos ao código. INSTALAÇÃO Vá em data/creaturescripts/scripts e em creaturescripts.xml adicione a seguinte tag. <event type="kill" name="ExpBonus" event="script" value="exp.lua"/> Em data/creaturescripts/scripts crie um arquivo .lua e renomeie para exp.lua e adicione o seguinte código. function onKill(cid, target) if isPlayer(cid) and isMonster(target) then if getGlobalStorageValue(102590) - os.time() >= 1 then local exp = getExperienceStage(getPlayerLevel(cid), getVocationInfo(getPlayerVocation(cid)).experienceMultiplier) local count = ((getMonsterInfo(string.lower(getCreatureName(target))).experience*1.5*exp)/2) doPlayerAddExperience(cid, count) addEvent(doSendAnimatedText, 500, getCreaturePosition(cid), '+'..count, math.random(50,60)) end else return TRUE end return TRUE end Agora no data/creaturescripts/scripts e login.lua adicione a seguinte tag. registerCreatureEvent(cid, "ExpBonus") Agora vá em data/talkactions/scripts talkactions.xml <talkaction words="/doubleexp" access="5" event="script" value="exp.lua"/> Em data/talkactions/scripts crie um arquivo.lua e o renomeio para exp.lua e adicione o seguinte código dentro. function onSay(cid, words, param, channel) local config = { storage = 102590, } if(param == 'cancel') then if getGlobalStorageValue(config.storage) > 0 then setGlobalStorageValue(config.storage, -1) doBroadcastMessage("Double Exp cancelado") end return true end param = tonumber(param) if(not param or param < 0) then doPlayerSendCancel(cid, "Digite por quantas horas o evento ira durar") return true end if getGlobalStorageValue(config.storage) - os.time() <= 0 then setGlobalStorageValue(config.storage, os.time()+param*60*60) doBroadcastMessage("Exp bonus ativado 50% + EXP por "..param.." horas! Aproveite.") end return true end COMO UTILIZAR Para ativar o comando digite /doubleexp Quantidade de horas que vai durar o evento Exemplo /doubleexp 3 o evento ira durar por 3 horas. Para cancelar o evento basta digitar /doubleexp cancel apenas os GOD'S podem utilizar os 2 comandos. Créditos --- Pela postagem do tópico e edição nos códigos. --- Por eu tê pego uma parte de um script dele do creaturescripts. Espero que gostem
    1 ponto
  10. SamueLGuedes

    Extensions RME #1 (Grounds)

    Introdução "Extensions, traduzindo para o português, Extensões; faz referência ao uso do auto-magic, que por via dos scripts existentes na pasta DATA/VERSÃO pode ser entendido de várias maneiras: Esses scripts, além de definir a existência do AA, funcionam como uma citação de itens registrados em uma paleta específica e/ou conjunto de itens pré montados, com o objetivo de: • Organizar, para que itens sejam facilmente encontrados; • Tornar prático o manuseio de itens que requerem montagem e/ou facilitar a aplicação desses itens." @@Daniel Extensions funciona de certo modo, para organizar todos os IDs de items no RME, como Walls / Grounds / Items em Geral, facilitando o seu manuseio, e evitando perca de tempo em procurar tal ID. No RME já estão disponiveis várias extensions onde estão separados por Pallete / TileSet, EX: Terrain Pallete, que contém TileSets como: Cave, Nature, Roofs, Snow, Stairs, Town. ou também Doodad Pallete, que mistura TileSets para estruturas em geral. e assim por diante. Hoje irei ensinar a como adicionar grounds em seu RME, de maneira facil e simples. Criação da Ground Primeiro, escolha o ground desejado, pegarei como exemplo o ID: 4526 (Grass) . na pasta do RME, vá em Data/Versão (a pasta da versão desejada), e procure por Grounds.xml. iremos pegar um ground já criado, como por exemplo: Legenda: Brush Name: Nome do ground que irá adicionar, no caso colocaremos Grass. type: tipo do item, que no caso é ground server_lookid: o ID do Item que ficara a amostra no RME z-order: No tibia, z é o algaritmo utilizado para representar altura, ou andar. No map editor, funciona como sobreposição: O Ground que possuir o z-order maior, será o ground que terá suas bordas sobre os grounds com z-order menor. Item ID: aqui você irá adicionar o item que desejado, no caso 4526, caso queira que ele adicione mais grounds, basta adicionar mais uma linha ficando: <item id="4526" chance="2500"/> <item id="4527" chance="2500"/> Chance: a chance que tem de a randomização dos grounds colocar o ID no mapa (utilizado para grounds com mais de uma sprite) Border Align "Outer": ID da borda da ground 4526 (iremos ver no proximo passo) Border Align "Inner": caso coloque o ground onde não tenha nada em volta, ficara com o ID da borda padrão 1 "mountain edge border". por fim, no script ficará assim: note que tem mais IDs, no caso é todas as IDs de sprites de grass. Criando uma Borda para o Ground Já criado a sua ground, iremos agora criar uma borda para ela. abra o arquivo: borders.xml. pegaremos como exemplo a borda do ID 4526: Legenda: border id: ID da borda, é importante seguir a ordem dos IDs, para isso veja qual foi a ultima borda adicionada. concluido a borda, volte ao arquivo ground.xml e adicione o ID da Borda na parte: <border align="outer" id="2"/> pronto, seu ground e sua borda foram criados. Adicionando ao RME Criado o seu ground, iremos colocar no RME. na mesma pasta, abra o arquivo: Tilesets.xml. procure pelo Pallet desejado, no caso irei adicionar ao Terrain Pallet / Nature: <tileset name="Nature"> <terrain> note que já terá varios Items adicionados, adicione mais uma linha, ficando: <tileset name="Nature"> <terrain> <brush name="grass"/> OBS: salve e feche. abra seu RME, agora sua ground já está pronta para ser usada. Créditos @SamueLGuedes (por montar o tutorial) @Daniel (por ajudar nas informações) Declarações finais espero que tenham gostado do tutorial, ao decorrer do tempo irei criando mais tutoriais como esse. dúvidas e sugestões podem comentar aqui mesmo, estarei aberto à criticas também.
    1 ponto
  11. PokeTournament

    Poke tournament (pokemon)

    POKE TOURNAMENT lute em arenas por fama e premiações, participe de campeonatos e faça amigos em poke tournament. Estamos online!!! Crie sua conta e faça download aqui! sobre: Em poke tournament você encontrara um novo estilo de jogo entre os Poketibias, nele você poderá controlar seu pokemon diretamente, fazer fases PVE fechadas tanto individual como em grupo, lutar PVP com seus amigos em arenas fechadas rankiado ou não, personalizar os combos dos seus pokemons e se divertir de montão com uma jogabilidade facil e competitiva! estilo: O Poke Tournament pode ser considerado um jogo do estilo M.O.B.A. (Multiplayer Online Battle Arena) apesar do jogo não contar com fases no estilo do jogo DOTA, o PkT tem como foco principal as batalhas pvp levando um novo estilo de jogo de luta 2D com a variedade estrategica de cada pokemon da serie. graficos: Alem desse novo estilo de jogo tambem estamos trabalhando em graficos novos para interface do client e movimentos de combate no pokemon, então você irá encontrar telas que facilitam a jogabilidade e movimentos para todos os ataques dos pokemons do jogo. Por enquanto estamos trabalhando somente com pokemons não evoluidos "pequenos". jogabilidade: A jogabilidade do PkT é um pouco baseada nos jogos de luta, com combos e contra ataques você terá a experiencia da adrenalina enquanto joga. Alem de poder customizar os combos de seus pokemons ao seu gosto o jogo conta com varios sistemas de batalhas inovadores, entre eles vocês encontrarão sistema de movimento ao bater, contra ataque, defesa, avanço rapido, sistema de dor, sistema de Special e muito mais. historia: A historia do jogo e baseada na primeira versão da serie de games pokemon rpg (Pokemon Red/Green), sem diferenças relevantes, a unica diferença e que depois de pallet o seu personagem irá para um Lobby onde será sua unica cidade para sempre. quests: Apesar do Pkt ser um jogo de Arena PVP, não podiamos deixar de ter aquelas quests premiadas não e mesmo? alem de quests de historia você tambem poderá fazer missões diarias, missões premiadas e missões secretas. premios: Depois de tudo isso ainda temos premios diarios para quem marcar presança, permanecer online e ate uma quantidade de Vip Points por participar de batalhas PVP Rankiadas. Progresso Final: 65% Fases (mapa): 50% prontas - (Route1, Viridian Forest, MT. Moon, Bills Route,Rock Tunel) Pokemons: 60% falta - (os pokemons que vem vem depois do numero 105) Ataques: 60% falta - (a maioria dos pokemons ainda faltam 1 ou 2 ataques) Sistemas: 95% falta - (testes e ajuste de danos e seleção de premios) Client: 60% falta - (novo designer base, recompilação do client, nova janela de health bar, equipamentos, nova janela de skills pro pokemon e nova pokedex). Prints: alguns golpes Escolhendo a fase tela pvp rankiada - fases e oponentes são sorteados tela de conversa com npc npc de produção npc de quests equipando skill no combo nosso mascote e premio especial Lucky Draw Sistema de Colisão Videos Pokeball System Vídeo da primeira fase tutorial https://www.facebook.com/Pok%C3%A9-Tournament-1398028193775843/
    1 ponto
  12. Em vasto mundo de mistérios, existe uma pequena ilha, que também guarda grandes segredos, chamada de Rookgaard. Seus habitantes se resume a cidadãos camponeses, pescadores e comerciantes, que sobrevivem do que a ilha tem para lhes oferecer. Apesar da vida calma e tranqüila que a ilha tem a oferecer, existe uma segunda realidade que cerca a ilha até os dias atuais. Aventureiros são os que decidem encarar está segunda realidade, tendo como pagamento a experiência e um vasto conhecimento que a ilha pode oferecer. Desde pequeno, Frimzen fora um garoto divertido, justo e corajoso. Por ser filho de comerciantes, e ajudá-los na loja, Frimzen sempre tivera desconfiança do mundo lá fora, pois as histórias que ele ouvia de alguns aventureiros que passavam por lá, o deixava bastante pensativo. Certo dia, como mais um dia de trabalho qualquer, Frimzen foi abastecer os suprimentos da loja, quando um homem aparentemente velho e com uma barba longa adentrou na loja, com um sorriso de um canto à outro. A felicidade tomou conta de Frimzen, que correu em direção do velho homem. - Tio Rimla, o senhor finalmente voltou! - Gritou Frimzen. Rimla é o irmão do pai de Frimzen, Paul. Rimla seu havia partido para aperfeicçoar os conhecimentos de uma linguagem antiga, uma linguagem que foi esquecida há muito tempo, A Linguagem Fict. Rimla era um Druida que se importava com as criaturas que existia em Rookgaard, porém a convivência entre humanos e as criaturas só tem piorado, desde que Banor, o Divino morreu. Era uma noite de festa, e todo o vilarejo estava presente, afinal era Rimla que estava de volta, o homem cujo conseguiu manter as ainda existentes relações com algumas criaturas, permitindo que o vilarejo fique à salvo de ataques. Era uma noite clara, onde as estrelas brilhavam bastante, e Frimzen resolveu passear pela floresta, já que a cidade toda estava em festa, e os guardas abandonaram seus postos. Frimzen nunca acreditara nas histórias de seu tio, pois no fundo, ele tinha medo. Medo de saber que existem pessoas e criaturas perversas no mundo, medo de ter medo, medo de morrer. O que viria depois da morte? Frimzen se perguntava bastante do porque nunca poder sair da vila; é tão perigoso lá fora? Foi se deixando levar durante o caminho, que Frimzen já não sabia mais onde estava. O barulho da floresta era mínimo, os sons presentes eram de alguns animais que ali estavam, e do balançar das folhas provocado pelo vento. De longe, ainda dava para ver que a cidade ainda estava comemorando a volta de Rimla. Tudo estava calmo e silencioso, até que uma lança atingiu seu braço. A descrição de tamanha dor não tem palavras. Frimzen gritou profundamente, e saiu correndo floresta adentro, sem saber mais onde estava, e isso acordou algumas criaturas que por ali estavam. O pânico já havia tomado conta de Frimzen, juntamente com um sentimento que nunca tinha sentido antes, o medo. Frimzen procurou em todas as direções, e avistou uma criatura esverdeada, que vestia um capuz azul, e carregava consigo várias lanças, além de soltar grunhidos e sons que Frimzen não conseguia assemelhar com nada que já tinha ouvido antes. A criatura segue em sua direção, acompanhado de outras criaturas esverdeadas, porém estes estavam sen lanças, e apenas com vestimentas de couro bastante velhas. Os seres que ali estavam, avançavam em sua direção, quando de repente, Frimzen escuta uma palavras estranhas, acompanhadas de uma voz familiar. - Utevo gran lux. - Disse a voz Após as palavras serem pronunciadas, um clarao de luz tomou conta daquela área, fazendo com que todas as criaturas partissem em retirada. - Você está bem? - Disse a voz. - Tio... Como você?... - Perguntou Frimzen, abismado. - É uma longa história, mas tudo o que ouviu até hoje é verdade. - Respondeu Rimla. Após isso, o susto, o medo, a felicidade e o alívio de estar vivo, contribuíram para que Frimzen desmaiasse. Frimzen não sabia, mas aquilo que ele acabara de ver, era apenas o início de algo muito vasto, e magnífico, a magia. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Bom pessoal, esse foi meu primeiro conto baseado no Tibia. Se vocês gostaram, comentem ai que eu vou dando continuidade à história. OBS: Saiu 2 tópicos porque eu tava pelo celular, peço desculpas à todos.
    1 ponto
  13. Não é pq ele já estava com citizen? Se vc mandar trocar ele nao vai ter mais citizen..
    1 ponto
  14. <?xml version="1.0"?> <outfits> <outfit id="1" storageiId = "5555" storageValue = "1"> <list gender="0" lookType="136" name="Citizen"> <attribute speed="5"/> <stats maxHealth="100"/> </list> <list gender="1" lookType="128" name="Citizen"> <attribute speed="5"/> <stats maxHealth="100"/> </list> </outfit> <outfit id="2" storageiId = "5555" storageValue = "2"> <list gender="0" lookType="137" name="Hunter"> <skills dist="3"/> </list> <list gender="1" lookType="129" name="Hunter"> <skills dist="3"/> </list> </outfit> <outfit id="3" storageiId = "5555" storageValue = "3"> <list gender="0" lookType="138" name="Mage"> <stats magLevel="2"/> <stats maxMana="200"/> </list> <list gender="1" lookType="130" name="Mage"> <stats magLevel="2"/> <stats maxMana="200"/> </list> </outfit> <outfit id="4" storageiId = "5555" storageValue = "4"> <list gender="0" lookType="139" name="Knight"> <skills sword="3"/> </list> <list gender="1" lookType="131" name="Knight"> <skills sword="3"/> </list> </outfit> <outfit id="5" premium="no" storageiId = "5555" storageValue = "5"> <list gender="0" lookType="140" name="Noblewoman"> <skills club="3"/> </list> <list gender="1" lookType="132" name="Nobleman"> <skills club="3"/> </list> </outfit> <outfit id="6" premium="no"> <list gender="0" lookType="141" name="Summoner"> <stats magLevel="2"/> <stats maxMana="100"/> </list> <list gender="1" lookType="133" name="Summoner"> <stats magLevel="2"/> <stats maxMana="100"/> </list> </outfit> <outfit id="7" premium="no"> <list gender="0" lookType="142" name="Warrior"> <skills sword="3"/> </list> <list gender="1" lookType="134" name="Warrior"> <skills sword="3"/> </list> </outfit> <outfit id="8" premium="no"> <list gender="0" lookType="147" name="Barbarian"> <skills axe="3"/> </list> <list gender="1" lookType="143" name="Barbarian"> <skills axe="3"/> </list> </outfit> <outfit id="9" premium="no"> <list gender="0" lookType="148" name="Druid"> <stats magLevel="2"/> </list> <list gender="1" lookType="144" name="Druid"> <stats magLevel="2"/> </list> </outfit> <outfit id="10" premium="no"> <list gender="0" lookType="149" name="Wizard"> <stats magLevel="1"/> <stats maxMana="100"/> </list> <list gender="1" lookType="145" name="Wizard"> <stats magLevel="1"/> <stats maxMana="100"/> </list> </outfit> <outfit id="11" premium="no"> <list gender="0" lookType="150" name="Oriental"> <attribute speed="5"/> <stats maxHealth="200"/> <stats maxMana="200"/> </list> <list gender="1" lookType="146" name="Oriental"> <attribute speed="5"/> <stats maxHealth="200"/> <stats maxMana="200"/> </list> </outfit> <outfit id="12" premium="no"> <list gender="0" lookType="155" name="Pirate"> <stats maxHealth="100"/> <skills club="3"/> </list> <list gender="1" lookType="151" name="Pirate"> <stats maxHealth="100"/> <skills club="3"/> </list> </outfit> <outfit id="13" premium="no"> <list gender="0" lookType="156" name="Assassin"> <attribute speed="5"/> <skills dist="2"/> </list> <list gender="1" lookType="152" name="Assassin"> <attribute speed="5"/> <skills dist="2"/> </list> </outfit> <outfit id="14" premium="no" > <list gender="0" lookType="157" name="Beggar"> <stats maxHealth="200"/> </list> <list gender="1" lookType="153" name="Beggar"> <stats maxHealth="200"/> </list> </outfit> <outfit id="15" premium="no" > <list gender="0" lookType="158" name="Shaman"> <stats magLevel="2"/> </list> <list gender="1" lookType="154" name="Shaman"> <stats magLevel="2"/> </list> </outfit> <outfit id="16" premium="no" > <list gender="0" lookType="252" name="Norsewoman"> <skills shielding="2"/> <stats maxHealth="200"/> </list> <list gender="1" lookType="251" name="Norseman"> <skills shielding="2"/> <stats maxHealth="200"/> </list> </outfit> <outfit id="17" premium="no" > <list gender="0" lookType="269" name="Nightmare"> <skills shielding="3"/> </list> <list gender="1" lookType="268" name="Nightmare"> <skills shielding="3"/> </list> </outfit> <outfit id="18" premium="no"> <list gender="0" lookType="270" name="Jester"> <stats maxMana="100"/> <attribute speed="5"/> <stats maxHealth="100"/> </list> <list gender="1" lookType="273" name="Jester"> <stats maxMana="100"/> <attribute speed="5"/> <stats maxHealth="100"/> </list> </outfit> <outfit id="19" premium="no"> <list gender="0" lookType="279" name="Brotherhood"> <reflect percentAll="20"/> <stats magLevel="1"/> <stats maxHealth="100"/> </list> <list gender="1" lookType="278" name="Brotherhood"> <stats magLevel="1"/> <stats maxHealth="100"/> </list> </outfit> <outfit id="20" premium="no" > <list gender="0" lookType="288" name="Demonhunter"> <attribute speed="10"/> <stats maxHealth="200"/> </list> <list gender="1" lookType="289" name="Demonhunter"> <attribute speed="10"/> <stats maxHealth="200"/> </list> </outfit> <outfit id="21" premium="no" > <list gender="0" lookType="324" name="Yalaharian"> <attribute speed="5"/> <stats magLevel="2"/> </list> <list gender="1" lookType="325" name="Yalaharian"> <attribute speed="5"/> <stats magLevel="2"/> </list> </outfit> <outfit id="22" premium="no"> <list gender="0" lookType="336" name="Warmaster"> <stats maxMana="100"/> <attribute speed="15"/> <stats maxHealth="100"/> <stats magLevel="1"/> </list> <list gender="1" lookType="335" name="Warmaster"> <stats maxMana="100"/> <attribute speed="15"/> <stats maxHealth="100"/> <stats magLevel="1"/> </list> </outfit> <outfit id="23" premium="no"> <list gender="0" lookType="329" name="Wedding"/> <list gender="1" lookType="328" name="Wedding"/> </outfit> <outfit id="24" premium="yes"> <list gender="0" lookType="366" name="Wayfarer"> <attribute speed="10"/> <stats maxHealth="100"/> <skills shielding="2"/> </list> <list gender="1" lookType="367" name="Wayfarer"> <attribute speed="10"/> <stats maxHealth="100"/> <skills shielding="2"/> </list> </outfit> <outfit id="34" access="3" premium="yes"> <list gender="0-3" lookType="75" name="Gamemaster"/> </outfit> <outfit id="35" access="4" premium="no"> <list gender="0-3" lookType="266" name="Community Manager"/> </outfit> <outfit id="36" access="5" premium="yes"> <list gender="0-3" lookType="302" name="God"/> </outfit> </outfits>
    1 ponto
  15. São duas tags diferentes cara, a tag <outfit> e a tag <outfits> a tag no singular se repete a no plural nao. Voce esta repetindo as duas. Faz assim, posta seu outfit.xml aqui que eu vou editar ele.
    1 ponto
  16. kaleudd

    CHAITOSOFT ESTA DE VOLTA

    eca manow,odeio esse tipo de gente que vende conteúdos...
    1 ponto
  17. Night Wolf

    [Pedido] Item Teleport

    @@kaleudd doTeleportThing(uid, lugar) ali deveria ser cid, não uid haha
    1 ponto
  18. Vocês estão trabalhando desde 2013 e tem problemas de versão, rme e sprites? Desculpa, mas não parece ser algo diferencial como diz, essas coisas aí são simples. @Topic No meu ponto de vista as coisas estão complicadas de verdade, depois que o PokeTibia chegou, todos os outros temas foram se perdendo, não vejo ngm a procura de um bom rpg, medieval, etc. Tenho diversas ideias, penso muitas vezes em fazer algo sério, mas desanimo na hora pelo simples fato de que só vão copiar e colocar o nome deles, como falaram acima se no mínimo fosse pessoas que colabora com a comunidade eu não me importaria, mas ser ripado por toda essa gente que só suga o trabalho suado dos outros é muito desanimador, ainda superando isso você corre o risco de ngm ver o seu trabalho pelo fato de todos estarem em algum poketibia
    1 ponto
  19. --[[ Capture The Flag System Author: Maxwell Denisson(MaXwEllDeN) Version: 2.0 Contact: <script data-cfhash='f9e31' type="text/javascript"> /* */</script> ]] local CTF = CTF_LIB function onUse(cid, item) if getPlayerStorageValue(cid, 16700) == CTF.getFlagTeam(item.itemid) then return doPlayerSendCancel(cid, "Você não pode roubar a bandeira do seu próprio time") end CTF.stealFlag(cid, CTF.getFlagTeam(item.itemid)) doRemoveItem(item.uid, 1) return true end Não tem, a actions é referente a bandeira , eu olhei todos e não achei nada , e no ot que eu peguei o sistema tá funcionando perfeitamente, unica coisa que eu mudei foi que quando eu liguei o ot tava dando erro que o Ontime não foi achado, porque no script do globalevents tava escrito Ontimer, ai eu só tirei o R para funcionar, não sei se esse é o problema Consegui resolver, eu tinha que editar as coordenadas dos Towns no remeres, e eu não tinha editado... Funfou ^^, valeu Lokoga, vou te dar REP+ por tentar me ajudar :DD
    1 ponto
  20. julhinhuu

    Tirar "YES" ao Viajar

    Você é zikka mesmo, '-' obrigado você me ajudou muito.
    1 ponto
  21. Avuenja

    Visual 2015

    Bom dia pessoal do Ékz, venho até vocês para apenas informar o motivo de voltarmos ao visual de 2015, como todos já devem ter percebido ao entrar no fórum hoje. Para quem não me conhece, sou o Coordenador de Infraestrutura da Comunidade, e cuido desta parte de visual e tudo o que se pode dizer a respeito em relação a isso. O motivo de voltarmos para a antiga skin, foi por alguns motivos que a nova não estava nos possibilitando algumas questões, e também pelo feedback dos vocês membros, pois queremos sempre o melhor para todos. Mas estaremos trabalhando nesta nova skin, e em um novo visual para o Ékz, que nos dará uma entidade visual ótima e única. Aguardem pessoal. Pois bem, é isto. Fiquem na Santa paz de Deus. Abraços
    1 ponto
  22. Finalmente o servidor mais esperado por todos irá sair do papel! Dia 21 de dezembro estreia Necronia! Para aqueles que procuram a salvação dos servidores, ou simplesmente algo diferente, eis aqui sua chance! Sou jogador do Closed Beta desde o ano passado e o servidor é simplesmente fantástico! Site: http://necronia.com/ Oficial: https://otland.net/threads/necronia-discussion-open-beta-21st-december.204040/
    1 ponto
  23. valakas

    [Encerrado] [ajuda] Tfs 0.4

    Experimenta esse exe 0.4, tem anti divulgação e anti clonagem e anti rollback, o bug que vc sitou n acontece comigo aqui boa sorte, tem cast e war system http://www.mediafire.com/download/6sa4s047gg87ygp/TheForgottenServer.rar
    1 ponto
  24. Skulls

    Instanciando Mapas v1.0

    Fala galera, tudo bem? Semana passada abri uma dúvida perguntando se alguém conhecia algum jeito de players compartilharem o mesmo espaço no mapa sem interagirem entre si, como se fossem duas dimensões separadas. Ninguém soube me dar uma solução que fizesse exatamente isso, porém, o Danihcv me deu uma luz sugerindo que eu fizesse algo próximo de um instanciador de mapa. Ou seja, uma forma de clonar automaticamente um pedaço do mapa desejado sem ter que criar mil vezes no map editor. Ainda estou trabalhando na automação do mesmo - pretendo fazer um sistema, sem ser talkaction, que sempre que for necessário ele instancia uma novo espaço para aquele mesmo mapa. Esta é uma primeira versão, feita em talkaction pois achei melhor de trabalhar num primeiro momento e testar todas as funções que eu queria adicionar, ela faz basicamente cópia de uma área do mapa. Pro projeto que eu pensei para esse sistema é suficiente que ele suporte somente mapas do mesmo tamanho e, portanto, foquei em atender esse requisito. Ainda sim, é possível trabalhar com mapas de tamanhos diferentes, desde que eles fiquem em linhas diferentes. Vamos lá Primeiramente, eu fiz um banco de funções que foram utilizadas ou serão úteis mais para frente. Em lib, crie um arquivo chamado cloneMap.lua e adicione o código abaixo: As funções estão todas funcionando, porém algumas não foram utilizadas nessa versão, ficam de bônus pra vocês. Depois disso, vá em talkactions.xml adicione a tag: <talkaction words="!clonemap" event="script" value="cmap.lua"/> Feito isso, crie dentro de scripts um arquivo chamado cmap.lua e adicione o código abaixo: Por último, vá em globalevents/scripts e abra o arquivo start.lua. Dentro da função onStartup(), antes do return true, adicione as 3 linhas a seguir: setGlobalStorageValue(5546, -1) setGlobalStorageValue(5547, -1) setGlobalStorageValue(5548, -1) Pronto. Agora algumas configurações que você deve fazer de acordo com seu mapa: emptySpaceBeginPos - É a posição no mapa onde começa a área vazia que você determinou para a criação das instâncias (Canto superior esquerdo da área, ela cresce para direita até o fim do mapa e depois para baixo e se encerra quando o mapa acaba). Storages - Storages globais onde serão armazenadas os próximos valores X, Y e Z a serem utilizados. (A progressão no eixo z ainda não foi implementada, mas a lógica é a mesma). safe_dist - É a distância entre os mapas, você pode variar de acordo com a utilização que vai dar ao mapa. Feito isso, está pronto para utilizar o Instanciador de Mapas V1.0. Como funciona: !clonemap CenterX CenterY CenterZ Side Floors Centers (X, Y e Z) são as coordenadas centrais do seu mapa (e Z é o floor mais baixo do mapa, caso ele seja multi floor, isto é o floor de valor mais alto - ex, se o seu mapa vai de z=7 até z =10, use CenterZ = 10). Side é a distância entre o centro e uma das bordas (Caso o mapa não seja quadrado, basta usar a maior distância. É possível implementar usando a mesma lógica um SideX e SideY, mas eu não tive tempo de fazê-lo). Floors é o número de andares que tem o seu mapa, se ele ocupa só um andar floor = 1, 2 floor = 2 e assim por diante. Bom é isso, espero que gostem e que seja útil para vocês. Agora vou empenhar no sistema completo, assim que terminar eu posto a versão 2.0 do instanciador com muito mais recursos. Algumas Imagens OBSERVAÇÃO IMPORTANTE Quando você utilizar o comando ingame, esteja longe da área onde o mapa será criado, senão o seu cliente irá debugar. Nada acontece, na verdade, acho que é algum problema do cliente, assim que você abre o tibia novamente tudo se estabiliza, mas é chato ficar re-abrindo então evite isso.\ Grande abraço. ps: Lembrando, novamente dos Créditos ao Danihcv pela ideia, sem o brainstorm por ele promovido no meu tópico isso não seria possível
    1 ponto
  25. Preenchi com o Nickname "Lordbaxx" (o mesmo do fórum) rs. Bom evento, parabéns por trazê-lo ao fórum. O fórum está me reconquistando!!
    1 ponto
  26. Skulls

    Frags free e vip

    local config = { useFragHandler = getBooleanFromString(getConfigValue('useFragHandler')), advancedFragList = getBooleanFromString(getConfigValue('advancedFragList')) } function onThink(cid, interval) if(not config.useFragHandler) then return false end local time = os.time() local times = {today = (time - 86400), week = (time - (7 * 86400))} local contents, result = {day = {}, week = {}, month = {}}, db.getResult("SELECT `pd`.`date`, `pd`.`level`, `p`.`name` FROM `player_killers` pk LEFT JOIN `killers` k ON `pk`.`kill_id` = `k`.`id` LEFT JOIN `player_deaths` pd ON `k`.`death_id` = `pd`.`id` LEFT JOIN `players` p ON `pd`.`player_id` = `p`.`id` WHERE `pk`.`player_id` = " .. getPlayerGUID(cid) .. " AND `k`.`unjustified` = 1 AND `pd`.`date` >= " .. (time - (30 * 86400)) .. " ORDER BY `pd`.`date` DESC") if(result:getID() ~= -1) then repeat local content = { name = result:getDataString("name"), level = result:getDataInt("level"), date = result:getDataInt("date") } if(content.date > times.today) then table.insert(contents.day, content) elseif(content.date > times.week) then table.insert(contents.week, content) else table.insert(contents.month, content) end until not result:next() result:free() end local size = { day = table.maxn(contents.day), week = table.maxn(contents.week), month = table.maxn(contents.month) } if isPremium(cid) then if size.day >=2 or (size.day + size.week)>=18 or (size.day + size.week + size.month) >=22 then doCreatureSetSkullType(cid, SKULL_RED) end else if size.day >=1 or (size.day + size.week)>=15 or (size.day + size.week + size.month) >=20 then doCreatureSetSkullType(cid, SKULL_RED) end end return true end <event type="think" interval = "1000" name="redskull" event="script" value="redskull.lua"/>
    1 ponto
  27. MuriloCavalcantti

    Templo/bank 10.x

    Amigo, o significado de templo é uma área religiosa, então tente fazer algo mais simples, veja os show-offs de outros membros, veja tutoriais explicando, mas para o começo está bom, parabéns e abraços.
    1 ponto
  28. lokoga

    Templo/bank 10.x

    Vlw maninho pelo feedback sério agradeço mesmo e vou fazer o possível para melhorar ^^. E muito obrigado mesmo pelas dicas ^^. Ok muito obrigado pela dica maninho ^^.
    1 ponto
  29. 90pedroh90

    Templo/bank 10.x

    Colocar mais dufus de grama, tirar o autoborder e usar mais o raw, colocar mais pedrinhas espalhadas pelo mapa, deixar pequenas árvores(os arbustos), criar uma área especial para o trainer no subsolo, deixar um mapa padronizado. Sempre é legal fazer algumas perguntas antes de fazer o mapa, como: Que povo fez isso?(isso define que tipo de estrutura) Aonde fez isso?(deserto?cidade élfica?...) Para qual motivo foi feito? Será que a espada dele batendo no trainer pode matar o jogador que está vindo atrás?(um pensamento com baseamento real). A gravidade aqui está certa? Essa parte da cidade é rica ou é pobre com sujeiras e casas menos estruturadas.. É sempre legal fazer essas perguntas, espero ter ajudado Mas a estrutura está boa.
    1 ponto
  30. Nada cara, que bom que ajudei. `Precisando estamos ai. Abraços,
    1 ponto
  31. Skulls

    Reescrever script pra 0.4

    Sim sim, mas o return dele não da pra fazer do jeito que vc fez, eu acho. Pelo menos nao consegui. Consegui isso: function onStatsChange(cid, attacker, STATSCHANGE_HEALTHLOSS, combat, value) local hasdebuff = getPlayerStorageValue(cid, 99881) --storage dada na debuff spell local percent = 2 -- dobro (50% seria 1.5) if hasdebuff > 0 and combat == COMBAT_FIREDAMAGE then doTargetCombatHealth(attacker, cid, COMBAT_PHYSICALDAMAGE, -value*percent+value, -value*percent+value, CONST_ME_FIREATTACK) end return true end
    1 ponto
  32. Eu respondi as perguntas mas não vi campo para botar nick...
    1 ponto
  33. @@Daniel, respondi mas já colocaram meu nome como Player. Não consegui setar para Skulls. Abraços,
    1 ponto
  34. Manin se esse teleport aparece com determinado tempo pode ser que na scipt dele tenha o local que o tp manda. Tente ir na pasta action/script desse evento ou na pasta que ele estiver (se tiver) e tente achar ^^.
    1 ponto
  35. Basicamente isso: local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE) setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false) local condition = createConditionObject(CONDITION_ATTRIBUTES) setConditionParam(condition, CONDITION_PARAM_TICKS, 10000) setConditionParam(condition, CONDITION_PARAM_SKILL_MELEE, 1) setConditionParam(condition, CONDITION_PARAM_SKILL_FIST, 1) setConditionParam(condition, CONDITION_PARAM_SKILL_DISTANCE, 1) setConditionParam(condition, CONDITION_PARAM_STAT_MAGICLEVEL, 1) setConditionParam(condition, CONDITION_PARAM_BUFF, true) setCombatCondition(combat, condition) local outfit = { lookType = 31 , lookHead = 0, lookBody = 0, lookLegs = 0, lookFeet = 0, lookAddons = 0} function undoTransform(cid, itemid1, itemid2) if getPlayerItemCount(cid, itemid1) > 0 then local item = getPlayerItemById(cid, true, itemid1) doTransformItem(item.uid, itemid2) end end function onCastSpell(cid, var) if getPlayerItemCount(cid, 2250) > 0 then local item = getPlayerItemById(cid, true, 2250) doTransformItem(item.uid, 2502) addEvent(undoTransform, 1000, cid, 2502, 2250) doSetCreatureOutfit(cid, outfit, 1000) return doCombat(cid, combat, var) end return false end Agora tem que criar um storage pra controlar isso e adicionar um check no login.lua, se o player logar no meio da magia, quando ele entrar novamente o item retornará ao anterior. Abraços,
    1 ponto
  36. Bluester

    ALTERA SCRIPT

    altere o local tempo = 2 -- Quanta horas ele vai usar o comando novamente ? ali está 2 = 2 horas. para local tempo = 168 -- Quanta horas ele vai usar o comando novamente ? ali está 168 = 1 semana.
    1 ponto
  37. Remeres é portatil? Ai deve está o problema.
    1 ponto
  38. SamueLGuedes

    Mapa não mostra nada.

    Tente reinstalar o RME, apague tudo relacionado ao Remeres, TEMP se tiver algo, Arquivos de Programa, e reinstale. caso nao funcione, verifique se nao e algum problema de driver de video, as vezes pode ser isso.
    1 ponto
  39. Administrador

    Mapa não mostra nada.

    Isso acontecia comigo ao abrir mapas em live. Pode testar se acontece a mesma coisa importando o mapa? Tente reinstalar a nova versão do visual studio.
    1 ponto
  40. Benny

    Visual 2015

    O branding ta bem non-sense, Marcelo Tenta achar algo aqui : wallhaven.cc Abraços
    1 ponto
  41. Primeiramente procure entender o que é a 'Logica de programação', é o mais básico e necessário que você irá precisar. Após isso aprenda sobre lua, existe o manual de referencia de lua e o luausers que é um forum que tem diversos exemplos, tutoriais e implementações. Somente após ter entendido o minimo necessário de lua vá para os scripts de otserv, entenda que lua é uma linguagem de script, ela geralmente é usada para implementar coisas auxiliares, não é aconselhável criar sistemas imensos e complexos somente através de lua, claro que isso varia muito de sistema pra sistema mas no geral começe com coisas simples, como actions e talkactions, spells e etc. Leia muito, veja exemplos dentro do otserv, modifique o que ja existe para testar e ver o que acontece, aprenda a ler erros de console, geralmente eles te dizem exatamente o que está errado e onde está o erro(a linha). E prática cara, não tenha medo de errar, é perfeitamente normal fazer gambiarras e cometer diversos erros no inicio. Pode ser que nada funcione bem quando ta começando, mas não desanima que você aprende. Vou deixar alguns links referentes a linguagem lua para que de uma olhada: http://www.lua.org/manual/5.1/pt/manual.html http://lua-users.org/ Já as coisas relativas a otserv aconselho a procurar por aqui mesmo, tem bastante conteúdo util, códigos interessantes, e caso não ache o que procura, pergunte que certamente terá alguém para lhe ajudar.
    1 ponto
  42. function onStepIn(cid, item, position, lastPosition, fromPosition) local itemsProibidos = {2160, 2050} for _, v in pairs(itemsProibidos) do if getPlayerItemCount(cid, v) >= 1 then doTeleportThing(cid, fromPosition) doPlayerSendCancel(cid, "Voce nao pode entrar com esses items") end end return true end
    1 ponto
  43. jeerenato

    Poke tournament (pokemon)

    Ta com a mesma ideia q eu de fazer 100% movs animado, porem usam TopDown, mas ta bacana :happy:
    1 ponto
  44. zipter98

    [AJUDA] Novas Balls

    Você não precisa reproduzir o catch.lua. Basta colocar a nova pokébola na tabela e depois aplicar as condições dela no código. Também, seria bem mais viável você criar uma fórmula que altere a catch rate do que fazer uma tabela como essa. Um pequeno bloco de código para exemplificar o que eu disse, aplicável no catch.lua original: Abaixo de: catchinfo.chance = x.chance colocaria-se: if item.itemid == 14158 and (pokes[name].type == "poison" or pokes[name].type2 == "poison") then catchinfo.chance = x.chance - (30 * x.chance / 100) end Assim, a pokébola de ID 14158 teria 30% de chance a mais de capturar pokémons do elemento poison (supus que você quisesse algo assim pelo nome da tabela). A configuração da pokébola seria padrão: configuration.lua e catch.lua (há inclusive tutoriais aqui no XTibia ensinando a configurá-las adequadamente). Você não precisa criar novos arquivos para novas pokébolas.
    1 ponto
  45. Administrador

    template nova + chat?

    Bom, agora como usuário resolvi vir testar os canais de feedback da comunidade.... 1- Queria saber pq a template fica alternando entre a nova inacabada e a antiga sem nenhum HOOK e com bugs de contraste de cores.. 2- Queria saber também pq o chat tá off sendo que pagamos uma estrutura própria e também de terceiros para fazer isso funcionar. #under, vou cobrar tio
    1 ponto
  46. Administrador

    template nova + chat?

    Entendi, vamos fazer uma reunião amanhã pra conversar sobre isso. Pra mim esses problemas já haviam sido resolvidos.
    1 ponto
  47. Tonynh

    X-SKIN TUTORIAL [2014]

    Saudações xtibianos! Como é de costume, desde 2010, todo ano venho trazer uma nova skin de tutoriais para a comunidade. E esse ano não poderia ser diferente certo? =) Informações e Funcionalidades: - Skin totalmente editável; - Fácil manuseio - Toda separada em pastas; - Contém instruções de uso; - Suporte (Utilize este tópico para qualquer dúvida) DOWNLOAD (2,28MB) Espero que gostem
    1 ponto
  48. Oneshot

    Pet System OOP

    Pet System OOP Boa tarde, pessoal. Depois de ver muitos sistemas de pet para Tibia, resolvi desenvolver o meu próprio sistema de pets. O diferencial do meu sistema é que ele é orientado a objetos. Sim, ele trata o pet do jogador como um objeto em Lua e suas ações como métodos. Essa ainda é uma versão básica, que irei aprimorar aos poucos, igual fiz com meu Forge System e Refine System. Por se tratar de uma biblioteca orientada a objetos, ele pode ser usado por qualquer scripter em diversos sistemas, e se bem adaptado, dá até para fazer um Poketibia orientado a objetos. Aliás, os comandos estão bastante semelhantes a Pokétibia. Instalação 1. Crie um arquivo em data/lib com o nome pet-system.lua e cole o conteúdo abaixo: -- This script is part of Pet System -- Copyright (C) 2013 Oneshot -- -- This program is free software: you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by -- the Free Software Foundation, either version 3 of the License, or -- (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program. If not, see <http://www.gnu.org/licenses/>. -- storages for pet system PET_UID = 80001 PET_SPECIE = 80002 PET_LEVEL = 80003 PET_EXPERIENCE = 80004 PET_HEALTH = 80005 PET_HEALTHMAX = 80006 PET_MANA = 80007 PET_MANAMAX = 80008 PET_EXHAUST = 80009 PET_ALIVE = 80010 Pets = {} -- class for pet species PetSpecie = { type = "", basehp = 0, basemp = 0, gainhp = 0, gainmp = 0, spells = {}, evolution = "", evolve = 0, } -- class for pets Pet = { it = nil, attributes = nil, level = 0, experience = 0, health = 0, healthmax = 0, mana = 0, manamax = 0, } -- create new instances of PetSpecie function PetSpecie:new(type, basehp, basemp, gainhp, gainmp, spells, evolution, evolve) local new_specie = { type = type, basehp = basehp, basemp = basemp, gainhp = gainhp, gainmp = gainmp, spells = spells, evolution = evolution, evolve = evolve, } local obj = setmetatable(new_specie, {__index = self}) Pets[type:lower()] = obj return obj end -- create new instances of Pet function PetSpecie:create() local new_pet = { it = nil, attributes = self, level = 1, experience = 0, health = self.basehp, healthmax = self.basehp, mana = self.basemp, manamax = self.basemp, } return setmetatable(new_pet, {__index = Pet}) end -- summon a player pet for the first time function Pet:hatch(cid) if getCreatureStorage(cid, PET_SPECIE) ~= -1 then return doPlayerSendCancel(cid, "You already have a pet.") end local pet = doCreateMonster(self.attributes.type, getCreaturePosition(cid)) if not pet then return false end if not doConvinceCreature(cid, pet) then doRemoveCreature(pet) return false end self:setit(pet) setCreatureMaxHealth(pet, self.healthmax) doCreatureAddHealth(pet, self.healthmax) doCreatureSetStorage(cid, PET_SPECIE, self.attributes.type) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Your new pet has born.") self:save() doSendMagicEffect(getCreaturePosition(pet), CONST_ME_HOLYDAMAGE) return self end -- make player pet say something function Pet:say(strt) doCreatureSay(self.it, strt, TALKTYPE_ORANGE_1) end -- gather a summoned player pet back function Pet:back() self:save() doSendMagicEffect(self:position(), CONST_ME_POFF) doCreatureSay(getCreatureMaster(self.it), "It's enough, ".. getCreatureName(self.it)) doRemoveCreature(self.it) end -- free a player pet forever function Pet:release() local cid = getCreatureMaster(self.it) doCreatureSay(cid, "Good bye, ".. getCreatureName(self.it) .."... :'(") doCreatureSetStorage(cid, PET_UID, -1) doCreatureSetStorage(cid, PET_SPECIE, -1) doCreatureSetStorage(cid, PET_LEVEL, -1) doCreatureSetStorage(cid, PET_EXPERIENCE, -1) doCreatureSetStorage(cid, PET_HEALTH, -1) doCreatureSetStorage(cid, PET_HEALTHMAX, -1) doCreatureSetStorage(cid, PET_MANA, -1) doCreatureSetStorage(cid, PET_MANAMAX, -1) doSendMagicEffect(self:position(), CONST_ME_POFF) doRemoveCreature(self.it) end -- add experience to player pet function Pet:addexperience(value) local prevLevel = self.level local nextLevelExp = getExperienceForLevel(self.level + 1) self.experience = self.experience + value while self.experience >= nextLevelExp do self.healthmax = self.healthmax + self.attributes.gainhp self.manamax = self.manamax + self.attributes.gainmp self.level = self.level + 1 nextLevelExp = getExperienceForLevel(self.level + 1) end if prevLevel ~= self.level then self.mana = self.manamax self.health = self.healthmax doPlayerSendTextMessage(getCreatureMaster(self.it), MESSAGE_STATUS_CONSOLE_BLUE, "Your pet advanced from level ".. prevLevel .." to level ".. self.level ..".") setCreatureMaxHealth(self.it, self.healthmax) doCreatureAddHealth(self.it, getCreatureMaxHealth(self.it)) self:save() if self.attributes.evolution then if self.attributes.evolve and self.level >= self.attributes.evolve then doCreatureSay(getCreatureMaster(self.it), "What's happening?!") addEvent(function() local cid = getCreatureMaster(self.it) local position = self:position() doRemoveCreature(self.it) local pet = doCreateMonster(self.attributes.evolution, position) if not doConvinceCreature(cid, pet) then doRemoveCreature(pet) call_pet(cid) return end doCreatureSetStorage(cid, PET_UID, pet) setCreatureMaxHealth(pet, self.healthmax) doCreatureAddHealth(pet, getCreatureMaxHealth(pet)) doSendMagicEffect(getCreaturePosition(pet), CONST_ME_MORTAREA) doCreatureSetStorage(cid, PET_SPECIE, self.attributes.evolution) end, 100) end end end end -- make pet cast a spell function Pet:cast(index) local cid = getCreatureMaster(self.it) if not self.attributes.spells[index] then return doPlayerSendCancel(cid, "This spell is unknown.") end local spell = self.attributes.spells[index] if self.level < spell.level then doPlayerSendCancel(cid, "Your pet doesn't have enough level to cast this spell.") return end if self.mana < spell.mana then doPlayerSendCancel(cid, "Your pet doesn't have enough mana to cast this spell.") return end if getCreatureStorage(cid, PET_EXHAUST) > os.clock() then doSendMagicEffect(self:position(), CONST_ME_POFF) doPlayerSendCancel(cid, "Your pet is exhausted.") return end if spell.target then local target = getCreatureTarget(self.it) if target == 0 then doPlayerSendCancel(cid, "First, select a target.") return end spell.range = spell.range or 1 if getDistanceBetween(self:position(), getCreaturePosition(target)) > spell.range then doPlayerSendCancel(cid, "Too far to cast spell.") return end doSendDistanceShoot(self:position(), getCreaturePosition(target), spell.shooteffect) doTargetCombatHealth(self.it, target, spell.type, -spell.min, -spell.max, spell.effect) else doAreaCombatHealth(self.it, spell.type, self:position(), (spell.area or 0), -min, -max, spell.effect) end self.mana = self.mana - spell.mana doCreatureSetStorage(cid, PET_EXHAUST, os.clock() + (spell.exhaust / 1000)) doCreatureSay(cid, getCreatureName(self.it) ..", use ".. spell.name .."!") self:say(spell.name) end -- set pet uid function Pet:setit(uid) self.it = uid end -- get player pet position function Pet:position() return getCreaturePosition(self.it) end -- move player pet to a direction function Pet:move(direction) local toPosition = getPosByDir(self:position(), direction, 1) if getCreatureStorage(getCreatureMaster(self.it), PET_EXHAUST) > os.clock() then doSendMagicEffect(self:position(), CONST_ME_POFF) doPlayerSendCancel(cid, "Your pet is exhausted.") return end if queryTileAddThing(self.it, toPosition) == RETURNVALUE_NOERROR then doMoveCreature(self.it, direction) doCreatureSetStorage(cid, PET_EXHAUST, os.clock() + 0.5) doCreatureSay(cid, "Move, ".. getCreatureName(self.it) .."!") end end -- save player pet attributes function Pet:save() local cid = getCreatureMaster(self.it) doCreatureSetStorage(cid, PET_UID, self.it) doCreatureSetStorage(cid, PET_SPECIE, getCreatureName(self.it)) doCreatureSetStorage(cid, PET_LEVEL, self.level) doCreatureSetStorage(cid, PET_EXPERIENCE, self.experience) doCreatureSetStorage(cid, PET_HEALTH, self.health) doCreatureSetStorage(cid, PET_HEALTHMAX, self.healthmax) doCreatureSetStorage(cid, PET_MANA, self.mana) doCreatureSetStorage(cid, PET_MANAMAX, self.manamax) end -- get player pet and return instance function get_pet(cid) local uid, it = getCreatureStorage(cid, PET_UID) for _, pet in ipairs(getCreatureSummons(cid)) do if pet == uid then it = pet break end end if not it then return false end local this_pet = { it = it, attributes = Pets[getCreatureName(it):lower()], level = getCreatureStorage(cid, PET_LEVEL), experience = getCreatureStorage(cid, PET_EXPERIENCE), health = getCreatureHealth(it), healthmax = getCreatureMaxHealth(it), mana = getCreatureStorage(cid, PET_MANA), manamax = getCreatureStorage(cid, PET_MANAMAX), } return setmetatable(this_pet, {__index = Pet}) end -- summon a existing player pet function call_pet(cid) if get_pet(cid) then return doPlayerSendCancel(cid, "You cannot summon your pet more than one time.") end if getCreatureStorage(cid, PET_SPECIE) == -1 then return doPlayerSendCancel(cid, "You don't have a pet.") end if getCreatureStorage(cid, PET_ALIVE) == 0 then return doPlayerSendCancel(cid, "You need to revive your pet") end local pet = doCreateMonster(getCreatureStorage(cid, PET_SPECIE), getCreaturePosition(cid)) if not pet then return false end if not doConvinceCreature(cid, pet) then doRemoveCreature(pet) return false end local health, healthmax = getCreatureStorage(cid, PET_HEALTH), getCreatureStorage(cid, PET_HEALTHMAX) setCreatureMaxHealth(pet, healthmax) doCreatureAddHealth(pet, healthmax) doCreatureAddHealth(pet, (health - healthmax)) doCreatureSay(cid, "Go, ".. getCreatureName(pet) .."!") doSendMagicEffect(getCreaturePosition(pet), CONST_ME_MAGIC_GREEN) doCreatureSetStorage(cid, PET_UID, pet) return true end -- is pet function is_pet(cid) return getCreatureMaster(cid) == 0 and false or isPlayer(getCreatureMaster(cid)) end dofile(getDataDir() .."/lib/pet-spells.lua") Pet_Rat = PetSpecie:new("Rat", 20, 0, 5, 5, {[1] = Rock_Throw, [2] = Dark_Bite}, "Cave Rat", 14) Pet_Cave_Rat = PetSpecie:new("Cave Rat", 40, 20, 10, 10, {[1] = Dark_Bite}, "Munster", 32) Pet_Munster = PetSpecie:new("Munster", 100, 50, 20, 20, {[1] = Dark_Bite}, false, false) 2. Crie um arquivo em data/lib com o nome pet-spells.lua e cole o código abaixo: -- This script is part of Pet System -- Copyright (C) 2013 Oneshot -- -- This program is free software: you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by -- the Free Software Foundation, either version 3 of the License, or -- (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program. If not, see <http://www.gnu.org/licenses/>. dofile("data/spells/lib/spells.lua") Dark_Bite = { name = "Dark Bite", level = 1, mana = 100, type = COMBAT_PHYSICALDAMAGE, effect = CONST_ME_BLOCKHIT, shooteffect = CONST_ANI_SMALLSTONE, target = true, range = 1, min = 300, max = 500, area = 0, exhaust = 1000, } Rock_Throw = { name = "Rock Throw", level = 1, mana = 10, type = COMBAT_PHYSICALDAMAGE, effect = CONST_ME_BLOCKHIT, shooteffect = CONST_ANI_NONE, target = true, range = 1, min = 20, max = 25, area = 0, exhaust = 1000, } 3. Crie um arquivo em data/talkactions/scripts, chamado pet-talkactions.lua e cole o conteúdo abaixo: -- This script is part of Pet System -- Copyright (C) 2013 Oneshot -- -- This program is free software: you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by -- the Free Software Foundation, either version 3 of the License, or -- (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program. If not, see <http://www.gnu.org/licenses/>. function onSay(cid, words, param, channel) param = string.explode(param, ":") if param[1]:lower() == "go" then if getTilePzInfo(getCreaturePosition(cid)) then return doPlayerSendCancel(cid, "You cannot call your pet at protection zone.") end local pet = get_pet(cid) if pet then return doPlayerSendCancel(cid, "You cannot call your pet two times.") end call_pet(cid) return true elseif param[1]:lower() == "back" then local pet = get_pet(cid) if not pet then return doPlayerSendCancel(cid, "Please call your pet first.") end pet:back() return true elseif param[1]:lower() == "release" then local pet = get_pet(cid) if not pet then return doPlayerSendCancel(cid, "Please call your pet first.") end pet:release() return true elseif param[1]:lower() == "cast" then local pet = get_pet(cid) if not pet then return doPlayerSendCancel(cid, "Please call your pet first.") end local index = tonumber(param[2]) or 1 pet:cast(index) return true elseif param[1]:lower() == "say" then local pet = get_pet(cid) if not pet then return doPlayerSendCancel(cid, "Please call your pet first.") end pet:say(param[2]) return true elseif param[1]:lower() == "move" then local pet = get_pet(cid) if not pet then return doPlayerSendCancel(cid, "Please call your pet first.") end if not isInArray({"north", "south", "east", "west"}, param[2]:lower()) then return doPlayerSendCancel(cid, "Invalid direction.") end pet:move((_G[param[2]:upper()] or NORTH)) return true elseif param[1]:lower() == "addexp" then local pet = get_pet(cid) if not pet then return doPlayerSendCancel(cid, "Please call your pet first.") end if getPlayerGroupId(cid) < 3 then return doPlayerSendCancel(cid, "You cannot use this command.") end pet:addexperience(tonumber(param[2]) or 0) return true end return true end 4. No talkactions.xml <talkaction words="/pet" event="script" value="pet-talkactions.lua"/> 5. Crie um arquivo em data/creaturescripts/scripts com o nome pet-creaturescripts.lua e adicione o conteúdo abaixo: -- This script is part of Pet System -- Copyright (C) 2013 Oneshot -- -- This program is free software: you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by -- the Free Software Foundation, either version 3 of the License, or -- (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program. If not, see <http://www.gnu.org/licenses/>. function onKill(cid, target, lastHit) local pet = get_pet(cid) if not isMonster(target) or getMonsterInfo(getCreatureName(target)) and getMonsterInfo(getCreatureName(target)).experience == 0 then return true end if not pet then return true end pet:addexperience(getMonsterInfo(getCreatureName(target)).experience) return true end function onDeath(cid, corpse, deathList) if not is_pet(cid) then return true end local master = getCreatureMaster(cid) doPlayerSendTextMessage(master, MESSAGE_EVENT_ADVANCE, "Your pet is dead.") doCreatureSetStorage(master, PET_ALIVE, 0) doCreatureSetStorage(master, PET_HEALTH, getCreatureMaxHealth(cid)) return true end 6. No arquivo login.lua de data/creaturescripts/scripts, adicione: registerCreatureEvent(cid, "PetKill") 7. No arquivo creaturescripts.xml, adicione: <event type="kill" name="PetKill" event="script" value="pet-creaturescripts.lua"/> <event type="death" name="PetDeath" event="script" value="pet-creaturescripts.lua"/> 8. Em cada arquivo XML de cada monstro que servirá como pet, adicione: <script> <event name="PetDeath"/> </script> 9. Mude o flag convinceable de cada monstro que será um tipo de pet. <flag convinceable="1"/> 10. Crie um arquivo chamado pet trainer.lua em data/npc/scripts, adicione: local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} local petState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end local PetPrices = { ["rat"] = {1000, 200}, } function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_PRIVATE and 0 or cid if msgcontains(msg, "sell") then local say = "I can offer you these pet species: " for pet_name, k in pairs(PetPrices) do local first = true if Pets[pet_name] then say = say .. (first == true and "" or ", ") .."{".. pet_name .. "}" first = false end end selfSay(say, cid) talkState[talkUser] = 1 elseif msgcontains(msg, "revive") then if getCreatureStorage(cid, PET_SPECIE) == -1 then selfSay("You don't have a pet", cid) return true end if getCreatureStorage(cid, PET_ALIVE) == 0 then if doPlayerRemoveMoney(cid, PetPrices[getCreatureStorage(cid, PET_SPECIE):lower()][2]) then selfSay("Your pet is now alive.", cid) doCreatureSetStorage(cid, PET_ALIVE, 1) else selfSay("Sorry, you need ".. PetPrices[getCreatureStorage(cid, PET_SPECIE)][2] .." gold.", cid) end else selfSay("Sorry, your pet is alive.", cid) end elseif talkState[talkUser] == 1 then if PetPrices[msg] then selfSay("A good choice, so do you want to buy a ".. msg .." pet? It will cost ".. PetPrices[msg][1] .." gold.", cid) talkState[talkUser] = 2 petState[talkUser] = msg else selfSay("Sorry, I don't know this pet specie", cid) end elseif talkState[talkUser] == 2 then if msgcontains(msg, "yes") then if get_pet(cid) or getCreatureStorage(cid, PET_SPECIE) ~= -1 then selfSay("Sorry, you already have a pet.", cid) return true end local pet = petState[talkUser] if getPlayerMoney(cid) < PetPrices[pet][1] then selfSay("Sorry, you don't have enough money", cid) return true end selfSay("This is your new pet, take care of it.", cid) Pets[pet]:create():hatch(cid) elseif msgcontains(msg, "no") then selfSay("Then not.", cid) talkState[talkUser] = 0 end end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) 11. Crie um arquivo chamado Pet Trainer.xml em data/npc, adicione: <?xml version="1.0" encoding="UTF-8"?> <npc name="Pet Trainer" script="pet trainer.lua" walkinterval="0" floorchange="0"> <health now="100" max="100"/> <look type="128" head="17" body="54" legs="114" feet="0" addons="2"/> <parameters> <parameter key="message_greet" value="Hello |PLAYERNAME|, I {sell} and {revive} pets."/> </parameters> </npc> Configuração O Pet System OOP é todo orientado a objetos. Para criar novas raças de pet é muito, mas muito simples mesmo. Basta uma linha: PetSpecie:new("Rat", 20, 0, 5, 5, {[1] = Rock_Throw, [2] = Dark_Bite}, "Cave Rat", 14) Como segue o modelo abaixo: PetSpecie:new(NOME_DO_MONSTRO, HP_INICIAL, MP_INICIAL, HP_POR_LEVEL, MP_POR_LEVEL, {[1] = MAGIA_1, [2] = MAGIA_2, [3] = MAGIA_3, ...}, NOME_DA_EVOLUÇÃO, LEVEL_DA_EVOLUÇÃO) Caso você não queira que o pet evolua, coloque os dois parâmetros como false. E para criar novas magias, é só seguir o mesmo modelo das duas magias padrão dentro de pet-spells.lua. Demonstração Este sistema está no Github sob a licença Gnu GPL v3. Você pode baixar os scripts aqui. Abraços.
    1 ponto
  49. vai em data / actions / scripts .. cria um arquivo.lua e coloca isso dentro. e depois vai em actions.xml e coloca a tag. <action actionid="1001" script="NomeDoArquivo.lua" /> actionid = coloca uma action id.. vai no RME e coloca a actionid na porta. e onde ta local level no script é o level que pode entrar na porta. bom , provavelmente o primeiro script vai bugar então usa esse.. function onUse(cid, item, topos) local level = 100 -- level que pode passar na porta . if getPlayerLevel(cid) >= level then doTeleportThing(cid, topos, TRUE) else doPlayerSendCancel(cid, "Você não pode passar aki.") end return true end
    1 ponto
  50. Vilden

    Aprenda A Usa Rme Map Editor

    Remere's Map Editor Tópico meu para download do Rme 8.54 Download clique aqui! -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~- -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~- Remere's map editor veio para revolucionar, tornando mais fácil de se fazer mapas e em pouco tempo, remeres facilitou a vida dos mappers por ter suas bordas automáticas e muitas funções adicionais, entre todos os mappers editores remeres é o melhor. Primeiro passo O primeiro passo para usa-lo é preencher uma boa área com agua assim você poderá colocar algum solo como grama, gelo, terra etc.. lembrando que o remeres faz as bordas automaticamente. Palette Palette é aquela janelinha onde fica várias opções e agora irei explicar cada uma delas.. Terrain palette Cave: Aqui você acha os tiles básicos para começar uma caverna, como chão, parede de caverna, lava, buracos etc.. Nature Aqui você tem várias coisas, tiles de grama, terra, gelo, montanhas, você também acha alguns opções para da um look em seu tile, as 'poeiras' temos 3 opções, areia, terra, pedra. Roofs Neste local você acha os telhados, tem vários tipos de telhados, os mais usado é o primeiro. Snow Aqui você encontra quase tudo para fazer uma área de gelo, escadas, tiles, montanhas de gelo, cave de gelo Stairs Vários tipos de escadas, não tem todos mais os mais usados estão aqui. Town Coisas necessárias para montar uma cidade, pisos diferentes, ruas, paredes, grades etc.. -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~- Doodad Palette Architecture Pilastras, colunas, postes de luz Beds Vários tipos de Cama Corpses Corpos de humanos, monstros etc.. Exterior Tochas, portal, alavancas, caixa de correio, enfeites, caixões, carroças etc.. Hangables Coisas que ficam na parede como, lampadas, relogio, cortinas etc.. Interior Cadeiras, mesas, balcões, baús, caixas, vazo, tapetes etc.. Magic fields Os famosos fields, de fire, energy, poison, também magic wall, lembrando que algumas ficam permanentes e outros não Nature Tudo de natureza, arvores, pedas, flores etc.. Signs Todos os tipos de placas. Smithing Items para monta sua loja de forjamento Snow Já aqui é a natureza de gelo, arvores, pedras, etc.. Splash Agua, sangue.. Statues Muitos tipos de Estátuas Trash Lixo Underwater Caso queira montar algo no estilo fundo do mar, pedras, estrelas do mar, conchas etc.. -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~- Item palette Tudo que é considerado objeto você encontra aqui, não é preciso nem explica os próprios nomes já dizem, segue as categorias: House palette, Waypoint palette e Creature palette House palette ~> Aqui é onde você monta as houses, e vê as que já estão montadas (Tutorial de como criar house no final do tópico) Waypoint palette ~> Não sei exatamente para que serve. Creature palette ~> Aqui você encontra todas as criaturas do tibia, você pode monta respaws. (Tutorial de como criar respaw no final do tópico) RAW palette Aqui você vai encontra tudo como veio ao mundo, exemplo se no doodad você clicava na cama e ela ja vinha montadinha aqui não, você tem que monta ela por partes, aqui você encontrara tudo, tudo mesmo tudo que existe no tibia estará aqui, são um total de 30 categorias. .::Tutoriais::. Como criar um respaw: Vá em creature palette la embaixo tem uma opção a Brushes e la tem spawn time/spawn size, deixe como está e tem um botão assim -> Place respaw, clique nele e logo após no local aonde você quer colocar um monster a área ira ficar vermelha no map editor então você procura um monster a sua escolha, clicar no nome do monster e coloca ele nessa área em vermelho. Como criar house: Entre neste link para ler um tutorial feito por Filippe Ferreira, http://www.xtibia.com/forum/topic/114854-fazendo-casas-no-rme/ Como adicionar um novo monster/Npc: Entre neste link para ler um tutorial feito por Vilden http://www.xtibia.com/forum/topic/122238-adicionando-npcsmonster-no-palette-rme/ -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~- -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~- Ferramentas do Map Editor Vá no Terrain pallete, repare que existe uns ícones la embaixo Opitional Auto Border: Aí você vai usando isso para por a "borda" nas montanhas, ele também pode ser usado para por bordas nos items como wooden floor, para pontes.... e ele é um "auto border manual". Eraser: Usado para apagar. Normal Door, Locked Door, Quest Door e Magic Door: São as portas, OBS: só você usar numa parede que o MAP EDITOR automaticamente seleciona o tipo de porta. Hatch Window: Janelas do UPdate 7.92, aquelas que da para fechar. Window: Janelas normais, que não é possível fechar. PZ TOOL: Área de protection Zone. NON PVP TOOL: Igual a pz tool, só que sua mana sobe e tal... NO LOGOUT TOOL: Uma área em que você fica com battle. PVP ZONE TOOL: Área em que os players podem se atacar. -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~- -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~- FAQ- Como rodar os items? Simples, com alguns items do DOODAD palette é possível rodar, apertando a tecla X Como Randomizar mapa inteiro: O RME MAP EDITOR conta com uma função muito útil para os otservers em que você fez com o SIMONE MAP EDITOR, "Randomize Map" Nessa função ele randomiza quase todos os tiles, as gramas, o gelo, a terra das caves e etc... Para fazer isso vá em Edit > Border Options > e clique em Randomize Map. Como Fazer todas as bordas: Essa função permite por bordas no seu mapa inteiro de uma vez, vá nas opçoes do auto border e clique em Borderize Map, o seu mapa ficará com as bordas. Como aumentar o zoom? Simples, use a "roleta" que tem no mouse. Como adicionar cidades? Map > Edit Towns > Add Selecione o jeito que você quer e clique em OK. Como faço para alterar andar? Use o "+" e "-". Como faço para apagar tiles de casas / PZ? Você pode apagar com qualquer "pincel", mantenha pressionada a tecla CTRL e desenhe. (Shift ainda funciona como normal) Como eu utilizo a ferramenta apagar? Selecione a ferramenta de apagar. Se você só clicar com o botão esquerdo do mouse, você só removerá itens na posição atual. Se você manter pressionada Ctrl ao clicar com o botão esquerdo do mouse, você apagará telhas e chão. Se você manter pressionado Shift ao clicar com o botão esquerdo do mouse você pode selecionar um espaço de onde você deseja excluir todos os itens. Se você mantenha pressionada Ctrl, Shift e o botão esquerdo do mouse você pode selecionar um espaço de onde você deseja excluir todos os itens e todo terreno. A não ser que você desmarque a opção "Eraser não deleta unique itens" no Menu preferências a borracha não exclui itens em containers ou itens com unique e / ou action ID. Como eu faço casas? Bom, para fazer casas no RME MAP EDITOR você deve criar uma cidade primeiro.... Para criar uma cidade vá até MAP > EDIT TOWNs Ali você faz a cidade... Agora faça uma casa, vá no pallete de casas, selecione a cidade e clique em ADD. Selecione os Tiles da casa e depois a saída dela. Pronto, aí está sua casa. Eu não encontrar um certo item, onde está ela? Você pode encontrar todos os itens utilizando o "Raw Palette" ou procure - o pressionando "J" no teclado. Você pode procurar por ambos os nomes e IDs. A lista com todos os itens encontrados de pesquisa serão exibidos em uma lista abaixo. Como faço para copiar / colar / mover uma parte do mapa? Se você tem um item ou "pincel" selecionado de um espaço para selecionar o "ponteiro" (ou o que ele é chamado). Agora mantenha pressionado shift e arraste o mouse, mantendo baixo botão esquerdo do mouse para selecionar uma área. Agora, você pode simplesmente mover a área selecionada ou pressione Ctrl + c, Ctrl + v para, em seguida, colá - lo no Editor. Você precisará clicar com o botão esquerdo do mouse antes de botar o conteúdo colado ao próprio mapa. Eu não posso colocar staglamites sobre a água! Você pode colocar doodads sobre blocking tiles, mantenha pressionada ALT. Eu quero outra árvore! Posso ver os tipos de variações? Mantenha pressionada CTRL e clique em espaço, enquanto o doodad estiver selecionado a variação mudará. As paredes têm a orientação errada! Como faço para rodar elas? Mantenha pressionado ALT com o wallbrush selecionado e clique no tile para girar que parede. Como fazer montanhas de neve/gelo? Bom, primeiro você deve baixar isso AQUI, quando substituir os arquivos, vá até a terrain pallete, e depois snow. Irá perceber que há 2 novos ícones, snowy mountain e icy mountain. Agora clique neles, faça a montanha que quiser, ficara meio "bugado", agora vá na ferramente "optional auto border", e faça as bordas da montanha de gelo. Quando eu abro meu mapa a tela fica branca!! Não é em qualquer pc que o remeres funciona, caso aconteça isso no seu pc apenas reabra o mapa caso ainda fique com a tela branca tente reinstala o remeres, tente abrir apenas o remeres. -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~- -~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~- Atalhos Lembrando que existem outros, mais não são importantes igual aos citados. Video auxiliar: -------------------------------------------------------------- http://www.youtube.com/watch?v=vHnw9VTv3C8&feature=player_embedded -------------------------------------------------------------- Qualquer dúvida pode postar, atualizarei o tópico sempre que puder, caso encontre algum erro poste. Obrigado. Tópico original (desatualizado) ~> clique aqui!
    1 ponto
Líderes está configurado para São Paulo/GMT-03:00
×
×
  • Criar Novo...