Ir para conteúdo

Lucas Rap

Cavaleiro
  • Total de itens

    168
  • Registro em

  • Última visita

Histórico de Reputação

  1. Upvote
    Lucas Rap recebeu reputação de Alexclusive em Saiba Tudo Sobre Npc,monster E Spells!   
    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.
  2. Upvote
    Lucas Rap recebeu reputação de TokenEvolution em Saiba Tudo Sobre Npc,monster E Spells!   
    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.
  3. Upvote
    Lucas Rap recebeu reputação de 5584759 em Adicionando Monstros Que Você Criou!   
    Fala ae galerinha do Xtibia,esse tuto não é meu ok,eh de um usuário chamado
    katchoskow de um certo fórum e resolvi trazer aki pra vcs pra ajudar blz???
    PS: Não sei que versão que funciona,tentem ai na versão que vcs tem,tentem no 7.8 tbm... ^^
    ---------
    Tutorial Ensinando como adicionar monstros ao Simone editor.
    Bom andei pesquisando por aí e descobri que muita gente que cria monstros personalizados não sabem adicioná-los no mapa, alguns tentam adicionar pelo map-spawm, mas sempre quando o map era salvo eles tinha que fazer isso denovo. Por isso resolvi postar um tutorial explicando como adicionar esses monstros no Simone editor.
    Início
    Apos ter criado o monstro desejado, va na pasta do Simone map editor, e procure pelo arquivo Itens.xml
    Abra-o e adicione isso (se colokar numa linha no meio do documento nao tem erro, mas ficara desorganizado, algumas pessoas, preferem colocar os novos monstros ou no começo ou no final.)
     

    <item id="[color=green]X[/color]" name="[color=red]Y[/color]" type="monster"/>

    [/code]  
    =-Explicando-=
    Configurando a variavel X: A letra X esta representando o ID que voce escolhera para esse seu novo monstro, escolha um ID inexistente, pois se o id escolhido já existir nao funcionara. Por exemplo: Suponhamos que eu tenha escolhido o ID 4549. Então ficara assim:
     
    <item id="[color=green]4549[/color]" name="[color=red]Y[/color]" type="monster"/>
     
    Configurando a variavel Y: A letra Y representa o nome do arquivo que voce colocou no seu monstro personalizado. Digamos que eu criei um monstro chamado "Supreme Knight", neste caso eu adicionarei este nome no local onde esta a variavel Y. Ficando assim:
     
    <item id="[color=green]X[/color]" name="[color=red]Supreme knight[/color]" type="monster"/>
     
    Finalizando
    Bom depois de seguir estes passos a linha adicionada ficara por exemplo assim:
     
    <item id="[color=green]4549[/color]" name="[color=red]Supreme knight[/color]" type="monster"/>
     
    para localizá-lo no map editor basta você ir em View>Windows>Jump to id..>ai coloque o id escolhido que o map editor autmaticamente ira selecionar para voce.
    É isso, espero ter ajudado em algo com esse tutorial..
    -=edited=-
    Tirando o Id máximo.
    Tem um arquivo na sua pasta do simone que se chama Materials.xml, abra-o com o bloco de notas e procure uma linha com esses códigos:
     
    <material name="Monsters"> <item fromid="4329" toid="4452"/> <item fromid="4538" [b]toid="4551[/b]"/> </material>
     
    Depois de achar vá onde esta escrito toid="4551" e mude para 5000, ante (") sem parenteses, só salvar depois disso e usar normal.
    --------
    Comentem se gostaram ae pessoal.. \o/
  4. Upvote
    Lucas Rap recebeu reputação de SemCultura em Saiba Tudo Sobre Npc,monster E Spells!   
    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.
  5. Upvote
    Lucas Rap deu reputação a xikoserv em Divulgue Seu Ot   
    como está em CRIAMENTO...
    asudhausdhuahsd rachei!
  6. Upvote
    Lucas Rap recebeu reputação de bizil123 em Saiba Tudo Sobre Npc,monster E Spells!   
    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.
  7. Upvote
    Lucas Rap recebeu reputação de Pikenoh em Saiba Tudo Sobre Npc,monster E Spells!   
    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.
  8. Upvote
    Lucas Rap recebeu reputação de syshuy em Saiba Tudo Sobre Npc,monster E Spells!   
    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.
  9. Upvote
    Lucas Rap recebeu reputação de milbradt em Saiba Tudo Sobre Npc,monster E Spells!   
    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.
  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...