Tks
- Fórum
- OTServ
- Tutoriais
- Tutoriais de Scripting
- Saiba Tudo Sobre Npc,monster E Spells!
Saiba Tudo Sobre Npc,monster E Spells!
Por Lucas Rap, 25 de set. de 2006 em Tutoriais de Scripting
info
Grupo: Banidos
Registrado: 25/09/06
Posts: 10
Reputação: 0
info
Grupo: Visconde
Registrado: 11/01/06
Posts: 300
Reputação: +9
Char no Tibia: Lippisch

@God Tarzan,
Alertado por flood.
Já tinha sido alertado verbalmente, no entanto continua a cometer floods.
Abraços
aff nah vi flood aew mas td bem ;D
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 ![]()
info
Grupo: Visconde
Registrado: 16/09/06
Posts: 464
Reputação: 0
Gênero: Masculino
Char no Tibia: Yonlu

Tks - Thanks
"vlw" <- Flood
xDD
Muito bom o tutorial Lucas Rap, obrigado por trazer para o XTibia...
Traga mais novidades ;D
Pode deixar,vo tentar trazer mais tutos bons ai pra galerrinha do Xtibia... =D
![]()
Belo Tuto ;P
Parabén rapaz tu tem futuro, muito bom conteúdo, como dizem É tudo em 1
Como dizem Tutorial Aprovado
Atenciosamente,
Rickzs
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/
lucas
sempre ajudando
no minimo 30 pessoas em um topico
bom topicoo
velho
mi ajudo dnovo =)
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....
Editado Setembro 29 por Lucas Rap
info
Grupo: Artesão
Registrado: 19/05/06
Posts: 125
Reputação: +2

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:
Editado Outubro 7 por kiko5
@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....
Editado Outubro 7 por Lucas Rap





info
Grupo: Cavaleiro
Registrado: 18/11/05
Posts: 168
Reputação: +8
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:
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:
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 endEssa é a fórmula do Dano que o player irá tomar ao receber a magia, agora pra finalizar adiconamos:
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:
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
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:
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()endQuando 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) .. '!')endIsso é, 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()endNo 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 = 0endendQue 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 por Lucas Rap