Lucas Rap 8 Postado Setembro 26, 2006 Share Postado Setembro 26, 2006 (editado) Gente,peço que vcs postem o que acharam,porque realmente desanima trazer um tuto desse tamanho,separar,por cor,code,tudo bonitinho, e vcs só olharem e irem embora! Pessoal,jah vo avisando,esse tutorial não é meu,é de um usuário chamado Lucas321 de um certo fórum aí... -------------------------------------- Aprenda a fazer seus próprios Monstros, Spells e NPC Basicamente scripts sao o conjunto dos códigos que formam os arquivos de players, monster, spells, etc. Nesse tutorial vou ensinar tudo, pra vc sair daqui fazendo monstros, spells e tudo mais. E se no final houver alguma duvida poste aqui que serei grato em ajudar. Neste Tutorial existem varios comandos básicos, bons para iniciantes, parte por parte é explicada, visando um maior entendimento sobre o assunto. Vamos lá! SPELLS Primeiro vamos falar sobre as spells Existem as spells de instant e as spells de rune, as spells de instant sao aquelas em q o monstro usa nele, e as de runa ele vai usar em vc. Entao a primeira coisa que precisamos fazer é decidir se vamos fazer uma spell de runa ou de instant, vou mostrar aqui apenas um exemplo, se nao o topico ficara muito grande. Vamos começar, seguindo um exemplo de uma magia minha: Primeiro, crie um arquivo chamado crossover.lua, na pasta Data>Spells>Instant Começamos o script com isso: area = {{0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},{0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},{0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},{0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},{0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},{1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1},{0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},{0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},{0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},{0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},{0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},} Essa é a area em que a magia ira pegar, o numero 0 simboliza os espaços que a magia nao pega e os numeros 1, os lugares onde acontecerá a magia, no exemplo acima, é uma magia em forma de cruz Pulamos entao uma linha e acrescentamos isso: attackType = ATTACK_PHYSICALneedDirection = falseareaEffect = NM_ME_YELLOW_RINGSanimationEffect = NM_ANI_NONEhitEffect = NM_ME_HIT_AREAdamageEffect = NM_ME_DRAW_BLOODanimationColor = BLACK_WHITEoffensive = truedrawblood = true Vamos às explicações: attackType = o tipo de ataque que será, no exemplo será um ataque fisico, mas tbm poderia ser um ataque de fogo, ou de energy needDirection = se o ataque precisa de direção, como as firewaves areaEffect = o tipo de animação que saira na area na magia animationEffect = a animação de quando o player sofrer dano da magia damageEffect = o efeito que saira quando o player receber o dano animationColor = a cor da animação da Magia offensive = se a magia é de ataque ou nao drawblood = se embaixo do player vai sair sangue quando ele receber a magia Explicado, pulamos uma linha e adicionamos: UltimateExplosionObject = MagicDamageObject(attackType, animationEffect, hitEffect, damageEffect, animationColor, offensive, drawblood, 0, 0) Essa é a função que fara com q oq explicamos acima funcione, pulamos outra linha e acrescentamos: function onCast(cid, creaturePos, level, maglv, var)centerpos = {x=creaturePos.x, y=creaturePos.y, z=creaturePos.z}n = tonumber(var)if n ~= nil then-- bugged-- ultimateExplosionObject.minDmg = var+0-- UltimateExplosionObject.maxDmg = var+0UltimateExplosionObject.minDmg = 0UltimateExplosionObject.maxDmg = 0 elseUltimateExplosionObject.minDmg = (level * 2 + maglv * 3) * 2.6 - 30UltimateExplosionObject.maxDmg = (level * 2 + maglv * 3) * 3.0 end Essa é a fórmula do Dano que o player irá tomar ao receber a magia, agora pra finalizar adiconamos: return doAreaMagic(cid, centerpos, needDirection, areaEffect, area, UltimateExplosionObject:ordered())end Pronto ja terminamos nossa primeira spell, agora para faze-la funcionar precisamos acrescenta-la aou arquivo spells.xml vamos lá, na pasta Data>Spells abra o arquivo spells.xml e na sessao de INSTANT, acrescente esta linha: spell name="CrossOver" words="crossover" maglv="12" mana="160" enabled="1"><vocation id="2" /><vocation id="1" /></spell> Explicando: spell name = nome da magia (pode ser qualquer um) words = as palavras magicas que terao que ser ditas pra magia funcionar (tem q ser igual ao nome do script da magia) magvl = maglv necessario para usar essa magia mana = mana que será gasta enabled = se a magia esta abilitada ou nao vocation id = para quais vocações essa magia funcionará, no caso acima ela so funciona pra sorc e druid ------------------ MONSTERS Spell criada, vamos passar para o Monstro que usara esta spell Crie um arquivo .xml com um nome qualquer na pasta Data>Monsters <?xml version="1.0"?><monster name="The Flash" level="500" maglevel="70" experience="1000" pushable="0" armor="80" defense="90" canpushitems="1" staticattack="50" changetarget="200" speed="100000"><health now="25000" max="25000"/><look type="134" head="94" body="94" legs="94" feet="79" corpse="4246"/><combat targetdistance="4" runonhealth="0"/><attacks><attack type="instant" name="flash_light" exhaustion="500" cycleticks="8000" probability="40"/></attacks><defenses><defense immunity="physical"/><defense immunity="paralyze"/></defenses><voices><voice sentence="HEHE Vem me pegar!!"/><voice sentence="Bah, ja dei 5 voltas e vc ai parado!"/></voices><summons maxSummons="2"><summon name="Chicken" chance="5000"/></summons><loot></loot></monster> Esse é um exemplo de um monstro que eu criei, escolhi ele pq ele apresenta quase todas as funções de um monster, vamos as explicações que realmente interessam monster name = nome do monstro, esse nome é oq aparecerá quando vc sumonar ele experience = a experiencia que ele dá, geralmente é um numero normal, parecido com o do Tibia, pois no config.lua é que a exp é multiplicada, portanto se vc colocar mto alto aqui, vai ficar absurda canpushitems = se o monstro pode mover objetos changetarget = dificuldade ou facilidade do monstro mudar de alvo combat targetdistance = a distancia em sqm em que o monstro ficará do player runonhealth = o life em que o monstro correrá do player <summons> = comando para ele sumonar um monstro <loot> = aqui vc ajusta os items e o dinheiro, com a chance (Vamos falar sobre isso mais a frente) e etc <attacks> = sao os ataques que seu monstro usará, tem os attack do tipo meele (dano fisico), distance (arrows, bolts, etc), instant (magias de instant), rune (magias de rune) <defenses> = aqui é pra vc colocar se o seu monstro vai ser imune a alguma coisa, exemplo: Demon é imune a fogo, entao vc poe lá: <defense immunity="fire"/> <voices> = qual será a mensagem que ele dirá (aquela msg laranja) </monster> = funciona como um end, finaliza o script Vamos falar sobre o looktype e a lootchance: "Ah eu quero criar um Boss dos orc, mas nao sei quais sao as roupinhas" Abaixo a lista dos looktypes dos monstros mais comums {["Orc Warlord"] = 2, ["War Wolf"] = 3, ["Orc Ridder"] = 4, ["Orc"] = 5, ["Orc Shaman"] =6, ["Orc Warrior"] = 7, ["Orc Berserker"] = 8, ["Necromancer"] = 9, ["Black Sheep"] = 13, ["Sheep"] = 14, ["Trol"] = 15, ["Bear"] = 16, ["Beholder"] = 17, ["Ghoul"] = 18, ["Slime"] = 19, ["Rat"]= 21, ["Cyclops"] = 22, ["Minotaur Mage"] = 23, ["Minotaur Archer"] = 24, ["Minotaur"] = 25, ["Rotworm"] = 26, ["Wolf"] = 27, ["Snake"] = 28, ["Minotaur Guard"] =29, ["Spider"] = 30, ["Deer"] = 31, ["Dog"] = 32, ["Skeleton"] = 33, ["Dragon"] = 34, ["Poison Spider"] = 36, ["Demon Skeleton"] = 37, ["Giant Spider"] = 38, ["Dragon Lord"] = 39, ["Fire Devil"] = 40, ["Lion"] = 41, ["Polar Bear"] = 42, ["Scorpion"] = 43, ["Wasp"]= 44, ["Bug"] = 45, ["Ghost"] = 48, ["Fire Elemental"] = 49, ["Orc Spearman"] = 50, ["Djinn"] =51, ["Winter Wolf"] = 52, ["Frost Troll"]=53, ["Witch"] = 54, ["Behemot"] =55, ["Cave Rat"] = 56, ["Monk"] = 57, ["Priestess"] = 58, ["Orc Leader"] = 59, ["Pig"] = 60, ["Goblin"] = 61, ["Elf"] = 62, ["Elf Arcanist"] = 63, ["Elf Scout"] = 64, ["Mummy"] = 65, ["Dwarf Geomancer"] = 66, ["Stone Golem"] = 67, ["Vampire"] = 68, ["Dwarf"] = 69, ["Dwarf Guard"] = 70, ["Dwarf Soldier"] = 71, ["Rabbit"] = 74, ["Swamp Troll"] = 76} E a lootchance "Eu quero fazer um faraó, mas quero que item fulano caia toda hora e que item ciclano caia mto raramente", entao ai vai a lista da loot chance: --100000= all time----50000= each 2 time----33333= each 3 time----20000= each 5 time----10000= each 10 time----6666= each 15 time----5000 = each 20 time----4000 = each 25 time----3333 = each 30 time----2857 = each 35 time----2500 = each 40 time----2222 = each 45 time----2000 = each 50 time----1818 = each 55 time----1666 = each 60 time----1538 = each 65 time----1428 = each 70 time----1333 = each 75 time----1000 = each 100 time----909 = each 110 time----833 = each 120 time----800 = each 125 time--666 = each 150 time----588 = each 170 time----555 = each 180 time----500 = each 200 time----400 = each 250 time----333 = each 300 time-- NPC Bom ja criamos uma spell, um monstro, vamos criar um NPC, que quando vc pedir ele sumone um monstro pra vc Começamos a função de um NPC com isso focus = 0contador = 0talk_start = 0target = 0following = falseattacking = falsefunction onThingMove(creature, thing, oldpos, oldstackpos)endfunction onCreatureAppear(creature)endfunction onCreatureDisappear(cid, pos)if focus == cid thenselfSay('Ate breve.')focus = 0contador = 0talk_start = 0endendfunction onCreatureTurn(creature)endfunction msgcontains(txt, str)return (string.find(txt, str) and not string.find(txt, '(%w+)' .. str) and not string.find(txt, str .. '(%w+)'))endfunction onCreatureSay(cid, type, msg)msg = string.lower(msg) Bom, depois disso acrescentamos: if ((string.find(msg, '(%a*)hi(%a*)')) and (focus == 0)) and getDistanceToCreature(cid) < 3 thenselfSay('Hail ' .. creatureGetName(cid) .. '! Voce gostaria de treinar com algum de meus monstros?')focus = cidcontador = 1talk_start = os.clock()end Quando vc falar HI pra ele ele vai te dizer: selfSay('Hail ' .. creatureGetName(cid) .. '! Voce gostaria de treinar com algum de meus monstros?') Dai pulamos uma linha e acrescentamos: if string.find(msg, '(%a*)hi(%a*)') and (focus ~= cid) and getDistanceToCreature(cid) < 3 thenselfSay('Espere ' .. creatureGetName(cid) .. '!')end Isso é, se alguem chegar e falar Hi e ele estiver falando com vc, ele vai dizer para o outro: selfSay('Espere ' .. creatureGetName(cid) .. '!') Entao agora para responder a pergunta que o Npc nos fez, pulamos uma linha e colocamos: if msgcontains(msg, 'yes') and focus == cid and contador == 1 thenselfSay('/m trainer')talk_start = os.clock()end No caso, quando vc falar yes, ele vai sumonar um trainer,aqui vc poderia substituir por qualquer outro bixo, entao fechamos o script com isso: if string.find(msg, '(%a*)bye(%a*)') and focus == cid and getDistanceToCreature(cid) < 3 thenselfSay('Ate Breve jovem ' .. creatureGetName(cid) .. '!')focus = 0talk_start = 0endendfunction onCreatureChangeOutfit(creature)endfunction onThink()if (os.clock() - talk_start) > 30 thenif focus > 0 thenselfSay('Próximo Por favor...')endfocus = 0contador = 0endend Que nada mais é do q, oq ele fala e faz depois que vc fala BYE, e oq ele fala e faz depois que vc se afasta muito dele. Vamos explicar algumas funções dos NPCs: selfSay = oq ele irá falar em resposta a algo q vc disse buy(cid,itemid,qtd,price) = mto usada para Npcs que compram e vendem, esta função serve para vc comprar algo de um Npc sell(cid,itemid,qtd,price) = igual ao explicado acima, so que serve para vc vender algo para o npc DICAS * Nunca faça monstros fortes demais, primeiro avalie a força dos jogadores do seu server e faça um monstro que eles consigam matar, mesmo que para isso ralem bastante, ninguem gosta de ver um monstro ignorante matando todo mundo, isso acaba com a graça *Faça spells balanceadas para todas as vocações, fazer uma spell onde so o druida é beneficiado, fica ruim, se fizer uma spell forte para o druida, tente fazer uma para o pally, o kina e o sorc, ou de a eles algum beneficio que o druida nao tem *Existem várias funções q podem ser usadas nos Npcs, tente tirar o máximo de proveito disso para fazer quests, eventos, etc Vlw e Comentem! Postem elogios, criticas, duvidas e sugestoes! Estou aqui para ajuda-los //Lucas321 -------------------------------- LEMBRANDO,CRÉDITOS A ELE,E NÃO A MIM. Editado Outubro 7, 2006 por Lucas Rap Link para o comentário Compartilhar em outros sites More sharing options...
God Tarzan 0 Postado Setembro 26, 2006 Share Postado Setembro 26, 2006 Tks Link para o comentário Compartilhar em outros sites More sharing options...
Eigenlieb 9 Postado Setembro 26, 2006 Share Postado Setembro 26, 2006 @God Tarzan, Alertado por flood. Já tinha sido alertado verbalmente, no entanto continua a cometer floods. Abraços Link para o comentário Compartilhar em outros sites More sharing options...
Makunbed 0 Postado Setembro 26, 2006 Share Postado Setembro 26, 2006 aff nah vi flood aew mas td bem ;D Link para o comentário Compartilhar em outros sites More sharing options...
Lucas Rap 8 Postado Setembro 26, 2006 Autor Share Postado Setembro 26, 2006 Não viu flood? o que eh simplesmente "Tks"? nem sei o significado,e deixa de ser flood quando é,pelo menos, um pequeno comentario,coisas como "tah rox," "rox", etc são considerados floods. Vo continuar o tutorial..espero que estejam gostando Link para o comentário Compartilhar em outros sites More sharing options...
Conde do Monte Cristo 0 Postado Setembro 26, 2006 Share Postado Setembro 26, 2006 Tks - Thanks "vlw" <- Flood xDD Link para o comentário Compartilhar em outros sites More sharing options...
Chapolin 1 Postado Setembro 26, 2006 Share Postado Setembro 26, 2006 Muito bom o tutorial Lucas Rap, obrigado por trazer para o XTibia... Traga mais novidades ;D Link para o comentário Compartilhar em outros sites More sharing options...
Lucas Rap 8 Postado Setembro 26, 2006 Autor Share Postado Setembro 26, 2006 Pode deixar,vo tentar trazer mais tutos bons ai pra galerrinha do Xtibia... =D Link para o comentário Compartilhar em outros sites More sharing options...
Rickzs 0 Postado Setembro 26, 2006 Share Postado Setembro 26, 2006 Belo Tuto ;P Parabén rapaz tu tem futuro, muito bom conteúdo, como dizem É tudo em 1 Como dizem Tutorial Aprovado Atenciosamente, Rickzs Link para o comentário Compartilhar em outros sites More sharing options...
Lucas Rap 8 Postado Setembro 26, 2006 Autor Share Postado Setembro 26, 2006 Opa,obrigado Rickzs,peguei o tuto por aí, então resolvi postar aki pra ajudar a galerinha... PS:Vlw por mover pro oficial =D PS2:jah te adicionei no msn \o/ Link para o comentário Compartilhar em outros sites More sharing options...
Noxidy__ 0 Postado Setembro 27, 2006 Share Postado Setembro 27, 2006 lucas sempre ajudando no minimo 30 pessoas em um topico bom topicoo velho mi ajudo dnovo =) Link para o comentário Compartilhar em outros sites More sharing options...
Lucas Rap 8 Postado Setembro 27, 2006 Autor Share Postado Setembro 27, 2006 Aff o ruim eh que td mundo olha e ninguém comenta pow!! Hahaha que bom ter ajudado.. ainda mais 2x cara...boa sorte ae... Flws.... Link para o comentário Compartilhar em outros sites More sharing options...
Abacate123 2 Postado Outubro 7, 2006 Share Postado Outubro 7, 2006 ai cara otimo topico vai mim ajudar bastante no meu OT mas eu queria saber uma coisa comu faz npc "oracle"?? pq eu to fazendu um map com um estilu de Rookguard ai eu queria saber vlw :icon1: Link para o comentário Compartilhar em outros sites More sharing options...
Lucas Rap 8 Postado Outubro 7, 2006 Autor Share Postado Outubro 7, 2006 @kiko5 http://www.xtibia.com/forum/index.php?show...6154&hl=oraculo Dê uma olhada e vê se resolve seu problema nesse tuto ok? Flws.... Link para o comentário Compartilhar em outros sites More sharing options...
aiola 0 Postado Outubro 8, 2006 Share Postado Outubro 8, 2006 muito bom mas queria sabe uma coisa o 0(zero)e ondi pega a magia ou e q naum pega e pq tem q ser 8 zeros ou 1 (na kele lugar ondi a magia pega)naum pode ser menos??? vlws muito bom flws Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados