Ir para conteúdo

Criando Spells/monsters/npc's


Tonynh

Posts Recomendados

Olá Xtibianos, muita gente aqui do fórum procura por dicas de como fazer suas " Edições " em seu servidor.

Estou aqui para postar um tutorial.. que achei a necessidade de fazer um.

 

---------x---------

 

INTRODUCAO:

 

1.0- SPEELS

2.0- MONSTROS

3.0- NPC'S

 

---------x---------

 

1.0- SPEELS

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.

 

> Vamos começar, seguindo um exemplo de uma magia que encontrei.. resumirei o maximo..:

Primeiro, crie um arquivo chamado crossover.lua, na pasta Data>Spells>Instant

 

Obs: A localização " instant " será o tipo da magia, o qual será criada.

 

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_PHYSICAL

needDirection = false

areaEffect = NM_ME_YELLOW_RINGS

animationEffect = NM_ANI_NONE

 

hitEffect = NM_ME_HIT_AREA

damageEffect = NM_ME_DRAW_BLOOD

animationColor = BLACK_WHITE

offensive = true

drawblood = true

 

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 mais uma vez uma linha.. e adicionamos isto:

UltimateExplosionObject = MagicDamageObject(attackType, animationEffect, hitEffect, damageEffect, animationColor, offensive, drawblood, 0, 0)

Essa é a função que fara com que oque 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+0

 

UltimateExplosionObject.minDmg = 0

UltimateExplosionObject.maxDmg = 0

else

UltimateExplosionObject.minDmg = (level * 2 + maglv * 3) * 2.6 - 30

UltimateExplosionObject.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:

 

------------x----------

 

spell name="CrossOver" words="crossover" maglv="12" mana="160" enabled="1"><vocation id="2" /><vocation id="1" /></spell>

 

------------x----------

 

Explicação..:

 

------------x----------

 

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

 

------------x----------

 

Axo que está tudo pronto na parte de SPEELS, vamos ao segundo passo:

 

2.0- MONSTERS

 

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 porque 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}

 

Ps: Você também pode por roupas de players, exemplo.. para os atuais servidores SQL, recomendo para ser mais simples, você por a roupa desejada " in game " Fazer logout, Relogar.. abrir o SQL editor, e no nome de seu char, e verificar o looktype, lookfeet.. entre outros

 

Voltando..

 

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--

 

Bom, terminamos a explicação dos monstros.. vamos agora ao Tutorial de npc..

 

3.0- NPC'S

 

Como exemplo de npc, vamos criar um NPC, que quando vc pedir ele sumone um monstro pra vc

Começamos a função de um NPC com isso

 

------------x----------

 

focus = 0

contador = 0

talk_start = 0

target = 0

following = false

attacking = false

 

function onThingMove(creature, thing, oldpos, oldstackpos)

 

end

 

 

function onCreatureAppear(creature)

 

end

 

 

function onCreatureDisappear(cid, pos)

if focus == cid then

selfSay('Ate breve.')

focus = 0

contador = 0

talk_start = 0

end

end

 

 

function onCreatureTurn(creature)

 

end

 

 

function msgcontains(txt, str)

return (string.find(txt, str) and not string.find(txt, '(%w+)' .. str) and not string.find(txt, str .. '(%w+)'))

end

 

 

function onCreatureSay(cid, type, msg)

msg = string.lower(msg)

 

------------x----------

 

Depois acrescentamos:

 

------------x----------

 

if ((string.find(msg, '(%a*)hi(%a*)')) and (focus == 0)) and getDistanceToCreature(cid) < 3 then

selfSay('Hail ' .. creatureGetName(cid) .. '! Voce gostaria de treinar com algum de meus monstros?')

focus = cid

contador = 1

talk_start = os.clock()

end

 

------------x----------

 

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:

 

------------x----------

 

if string.find(msg, '(%a*)hi(%a*)') and (focus ~= cid) and getDistanceToCreature(cid) < 3 then

selfSay('Espere ' .. creatureGetName(cid) .. '!')

end

 

------------x----------

 

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:

 

------------x----------

 

if msgcontains(msg, 'yes') and focus == cid and contador == 1 then

selfSay('/m trainer')

talk_start = os.clock()

end

 

------------x----------

 

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:

 

------------x----------

 

if string.find(msg, '(%a*)bye(%a*)') and focus == cid and getDistanceToCreature(cid) < 3 then

selfSay('Ate Breve jovem ' .. creatureGetName(cid) .. '!')

focus = 0

talk_start = 0

end

 

end

 

 

function onCreatureChangeOutfit(creature)

 

end

 

 

function onThink()

if (os.clock() - talk_start) > 30 then

if focus > 0 then

selfSay('Próximo Por favor...')

end

focus = 0

contador = 0

end

end

 

------------x----------

 

Que nada mais é do que, o que 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

 

PS: O tutorial possuia muitos " Quotes " então o site recusou como erro. O que seria pra ser como Quote ficaram como:

 

( ------------x---------- )

 

Desculpa qualquer coisa ai.. erros de português e etc.. :smile_positivo:

 

ESPERO TER CONTRIBUIDO COM O XTIBIA ^^

 

> Este tutorial foi feito por mim. A criação do mesmo estava postado no meu blog, antes de deleta-lo. Qualquer copia do mesmo, favor pedir permissão.

 

Créditos 100% Meus

 

 

Att,

Tonynh

Editado por Tonynh
Link para o comentário
Compartilhar em outros sites

Vindo de vc.. Valeu xD

 

Bom se tem outros tutorias, eu acho que os membros ainda possuem algumas dúvidas.. só espero que esse tuto, ajude muita gente ^^

 

E outra coisa.. a maioria dos tutoriais.. são de Npcs, Monsters, Speels, ja prontas ^^

que é só..

 

Ctrl + c

Ctrl + v

 

ai funciona.. em meu tutorial, quis representar o que cada coisa significa.. as "funções básicas" para que cada um, possa fazer o npc, monster, spell do jeito que bem entender ^^

Editado por Tonynh
Link para o comentário
Compartilhar em outros sites

Obrigado pelo elogio, sei que estou contribuindo para o Xtibia com esse tutorial..

 

> Em breve com mais conteúdos ao Xtibia. :smile_positivo:

 

Sem mais~~

 

Att,

Tonynh

Editado por Tonynh
Link para o comentário
Compartilhar em outros sites

Obrigado cainhobong pelo elogio.. e é pra isso mesmo que postei o tutorial no Xtibia.. pra ajudar a quem precisa :smile_positivo:

 

Abraços.. e boa sorte

Link para o comentário
Compartilhar em outros sites

Perfeito tutorial.

 

Como sempre, vem fazendo um bom trabalho.

 

Eu já sou experiente em Spells, mas sou Iniciante em Monsters, então muito obrigado cara !

 

 

Jajá tou colocando sua fanbar heheheh!

Link para o comentário
Compartilhar em outros sites

Opa.. obrigado pelos elogios :smile_positivo:

Espero que este tutorial abra as portas para a sua criação de monsters.. :smile_positivo:

 

Abraços..

 

Att,

Tonynh

Link para o comentário
Compartilhar em outros sites

Agradeço a todos pelos elogios..

Digo mais! estarei sem dá suporte a este tópico.. pois acho que já está explicado demais.

 

Caso tenham alguma dúvida mandem-me uma PM.

 

Abraços a todos.

 

Att,

Tonynh

Link para o comentário
Compartilhar em outros sites

  • 2 weeks later...

:party: Parabens eu adorei mais aqui em casa naum da pq eu entro em spells ai tem 2 pastas scripts e lib

 

downloadwb6.gif

 

cara ali em cima vai script e a minha xml ve se vc arruma coloca essa magia pra todas as vocações e ve se ela nuam tah bugada e adorei mais uma vez seu tutorial

Editado por danielnel
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...