O muito massa, ta explicando bastante! Parabéns.
- 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: Campones
Registrado: 19/08/07
Posts: 12
Reputação: 0
Char no Tibia: Elder Tarus Druid

Ta bom so que devia atualizar né ![]()
versão 8.10 XD
aprovado vey
vlws
info
Grupo: Campones
Registrado: 13/01/08
Posts: 12
Reputação: 0
Char no Tibia: Principe Stv

aprovado manin..
![]()
info
Grupo: Campones
Registrado: 18/06/08
Posts: 49
Reputação: 0
Char no Tibia: O Meu

Cara vo te flar uma coisa, muito bom seu Tópico adorei ![]()
Pessoal do :XTibia_smile: eu sei que não sou ninguém pra falar o que eu vou flar ali embaixo mas vai -.-:
Eu sei que não tenho fan mas vai
PandaXD Recomenda ![]()
Obrigado a todos.
Parabens ai vai ajuda muitas pessoas com isso ![]()
Muito bom para iniciantes!!!
Note 10!!!
do basiko ao topo, gostei, até eu aprendi uma coisinhas...
xD se vc clicko vc sabe que eu gostei suhauhsauhsuha
Editado Julho 27 por vitiman
info
Grupo: Campones
Registrado: 30/08/07
Posts: 20
Reputação: 0
Char no Tibia: Malvera Druid rack

hehe que merda
hehe que merda
desculpem! mensagem errada
dahora mais as chances nao foi muito bem esplicado.
![]()
Não achei o tutorial bom..
pelo menos pela parte de NPC e magias..
Magias vc nao fala o que podemos escrver mas soh uq eh q vc pois !! e uq significa..gostaria d esaber quais as opçoes......
Npc.. vc soh fala se ele sumonar e vc pois mta foto e explicou pouco nao consegui entender.. !! vc deveria explicar melhor kd item !!
Minha opniao =/..
valews a tentativa..
info
Grupo: Campones
Registrado: 22/08/08
Posts: 3
Reputação: 0
Char no Tibia: Lord'Paulistinha

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_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
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+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:
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 = 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)
Bom, depois disso acrescentamos:
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
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 then selfSay('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 then selfSay('/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 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
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.
Tem que dizer mais alguma coisa???
GOSTEI MTOOO!!!
Sou iniciante
e quero fazer um tibia novo sakas??
novas scripts alguns itens novos mas mudando o visual sabe?
to gostanu mto aki do Xtibia VLW msmu cara!!!!
info
Grupo: Artesão
Registrado: 24/11/07
Posts: 105
Reputação: +2
Char no Tibia: Vinicious

Parabens pelo seu 3 em 1!
Ficou muito bom, eu tinha parado de mexer com ot faz uns 5 meses, mais agora
to de volta =p.





info
Grupo: Campones
Registrado: 18/03/06
Posts: 8
Reputação: 0
Tão bom que clokei até em meus favritos =p vlw ai
tava cuns problema já resolvi ^^
continue assim ah e vc flo que o tópico era de otrocara coloca
certinho ai o nome e créditos mas mesmo assim é massa!
vlw.... :aaskull: