Ir para conteúdo

Saiba Tudo Sobre Npc,monster E Spells!


Lucas Rap

Posts Recomendados

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 por Lucas Rap
Link para o comentário
Compartilhar em outros sites

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

  • 2 weeks later...

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

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

×
×
  • Criar Novo...