Tonynh 514 Postado Julho 15, 2009 Share Postado Julho 15, 2009 (editado) Olá Xtibianos, muita gente aqui do fórum procura por dicas de como fazer suas " Edições " em seu servidor. Estou aqui para postar um tutorial.. que achei a necessidade de fazer um. ---------x--------- INTRODUCAO: 1.0- SPEELS 2.0- MONSTROS 3.0- NPC'S ---------x--------- 1.0- SPEELS Existem as spells de instant e as spells de rune, as spells de instant sao aquelas em q o monstro usa nele, e as de runa ele vai usar em vc. Entao a primeira coisa que precisamos fazer é decidir se vamos fazer uma spell de runa ou de instant, vou mostrar aqui apenas um exemplo. > Vamos começar, seguindo um exemplo de uma magia que encontrei.. resumirei o maximo..: Primeiro, crie um arquivo chamado crossover.lua, na pasta Data>Spells>Instant Obs: A localização " instant " será o tipo da magia, o qual será criada. Começamos o script com isso: area = {{0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, } Essa é a area em que a magia ira pegar, o numero 0 simboliza os espaços que a magia nao pega e os numeros 1, os lugares onde acontecerá a magia, no exemplo acima, é uma magia em forma de cruz Pulamos entao uma linha e acrescentamos isso: attackType = ATTACK_PHYSICALneedDirection = false areaEffect = NM_ME_YELLOW_RINGS animationEffect = NM_ANI_NONE hitEffect = NM_ME_HIT_AREA damageEffect = NM_ME_DRAW_BLOOD animationColor = BLACK_WHITE offensive = true drawblood = true Explicações..: attackType = o tipo de ataque que será, no exemplo será um ataque fisico, mas tbm poderia ser um ataque de fogo, ou de energy needDirection = se o ataque precisa de direção, como as firewaves areaEffect = o tipo de animação que saira na area na magia animationEffect = a animação de quando o player sofrer dano da magia damageEffect = o efeito que saira quando o player receber o dano animationColor = a cor da animação da Magia offensive = se a magia é de ataque ou nao drawblood = se embaixo do player vai sair sangue quando ele receber a magia Explicado. Pulamos mais uma vez uma linha.. e adicionamos isto: UltimateExplosionObject = MagicDamageObject(attackType, animationEffect, hitEffect, damageEffect, animationColor, offensive, drawblood, 0, 0) Essa é a função que fara com que oque explicamos acima funcione, pulamos outra linha e acrescentamos: function onCast(cid, creaturePos, level, maglv, var)centerpos = {x=creaturePos.x, y=creaturePos.y, z=creaturePos.z} n = tonumber(var) if n ~= nil then -- bugged -- ultimateExplosionObject.minDmg = var+0 -- UltimateExplosionObject.maxDmg = var+0 UltimateExplosionObject.minDmg = 0 UltimateExplosionObject.maxDmg = 0 else UltimateExplosionObject.minDmg = (level * 2 + maglv * 3) * 2.6 - 30 UltimateExplosionObject.maxDmg = (level * 2 + maglv * 3) * 3.0 end Essa é a fórmula do Dano que o player irá tomar ao receber a magia, agora pra finalizar adiconamos: return doAreaMagic(cid, centerpos, needDirection, areaEffect, area, UltimateExplosionObject:ordered())end Pronto ja terminamos nossa primeira spell, agora para faze-la funcionar precisamos acrescenta-la aou arquivo spells.xml vamos lá, na pasta Data>Spells abra o arquivo spells.xml e na sessao de INSTANT, acrescente esta linha: ------------x---------- spell name="CrossOver" words="crossover" maglv="12" mana="160" enabled="1"><vocation id="2" /><vocation id="1" /></spell> ------------x---------- Explicação..: ------------x---------- spell name = nome da magia (pode ser qualquer um) words = as palavras magicas que terao que ser ditas pra magia funcionar (tem q ser igual ao nome do script da magia) magvl = maglv necessario para usar essa magia mana = mana que será gasta enabled = se a magia esta abilitada ou nao vocation id = para quais vocações essa magia funcionará, no caso acima ela so funciona pra sorc e druid ------------x---------- Axo que está tudo pronto na parte de SPEELS, vamos ao segundo passo: 2.0- MONSTERS Crie um arquivo .xml com um nome qualquer na pasta Data>Monsters <?xml version="1.0"?><monster name="The Flash" level="500" maglevel="70" experience="1000" pushable="0" armor="80" defense="90" canpushitems="1" staticattack="50" changetarget="200" speed="100000"> <health now="25000" max="25000"/> <look type="134" head="94" body="94" legs="94" feet="79" corpse="4246"/> <combat targetdistance="4" runonhealth="0"/> <attacks> <attack type="instant" name="flash_light" exhaustion="500" cycleticks="8000" probability="40"/> </attacks> <defenses> <defense immunity="physical"/> <defense immunity="paralyze"/> </defenses> <voices> <voice sentence="HEHE Vem me pegar!!"/> <voice sentence="Bah, ja dei 5 voltas e vc ai parado!"/> </voices> <summons maxSummons="2"> <summon name="Chicken" chance="5000"/> </summons> <loot> </loot> </monster> Esse é um exemplo de um monstro que eu criei, escolhi ele porque ele apresenta quase todas as funções de um monster, vamos as explicações que realmente interessam. monster name = nome do monstro, esse nome é oq aparecerá quando vc sumonar eleexperience = a experiencia que ele dá, geralmente é um numero normal, parecido com o do Tibia, pois no config.lua é que a exp é multiplicada, portanto se vc colocar mto alto aqui, vai ficar absurda canpushitems = se o monstro pode mover objetos changetarget = dificuldade ou facilidade do monstro mudar de alvo combat targetdistance = a distancia em sqm em que o monstro ficará do player runonhealth = o life em que o monstro correrá do player <summons> = comando para ele sumonar um monstro <loot> = aqui vc ajusta os items e o dinheiro, com a chance (Vamos falar sobre isso mais a frente) e etc <attacks> = sao os ataques que seu monstro usará, tem os attack do tipo meele (dano fisico), distance (arrows, bolts, etc), instant (magias de instant), rune (magias de rune) <defenses> = aqui é pra vc colocar se o seu monstro vai ser imune a alguma coisa, exemplo: Demon é imune a fogo, entao vc poe lá: <defense immunity="fire"/> <voices> = qual será a mensagem que ele dirá (aquela msg laranja) </monster> = funciona como um end, finaliza o script Vamos falar sobre o looktype e a lootchance: "Ah eu quero criar um Boss dos orc, mas nao sei quais sao as roupinhas" Abaixo a lista dos looktypes dos monstros mais comums {["Orc Warlord"] = 2, ["War Wolf"] = 3, ["Orc Ridder"] = 4, ["Orc"] = 5, ["Orc Shaman"] =6, ["Orc Warrior"] = 7, ["Orc Berserker"] = 8, ["Necromancer"] = 9, ["Black Sheep"] = 13, ["Sheep"] = 14, ["Trol"] = 15, ["Bear"] = 16, ["Beholder"] = 17, ["Ghoul"] = 18, ["Slime"] = 19, ["Rat"]= 21, ["Cyclops"] = 22, ["Minotaur Mage"] = 23, ["Minotaur Archer"] = 24, ["Minotaur"] = 25, ["Rotworm"] = 26, ["Wolf"] = 27, [" Snake"] = 28, ["Minotaur Guard"] =29, ["Spider"] = 30, ["Deer"] = 31, ["Dog"] = 32, ["Skeleton"] = 33, ["Dragon"] = 34, ["Poison Spider"] = 36, ["Demon Skeleton"] = 37, ["Giant Spider"] = 38, ["Dragon Lord"] = 39, ["Fire Devil"] = 40, ["Lion"] = 41, ["Polar Bear"] = 42, ["Scorpion"] = 43, ["Wasp"]= 44, ["Bug"] = 45, ["Ghost"] = 48, ["Fire Elemental"] = 49, ["Orc Spearman"] = 50, ["Djinn"] =51, ["Winter Wolf"] = 52, ["Frost Troll"]=53, ["Witch"] = 54, ["Behemot"] =55, ["Cave Rat"] = 56, ["Monk"] = 57, ["Priestess"] = 58, ["Orc Leader"] = 59, ["Pig"] = 60, ["Goblin"] = 61, ["Elf"] = 62, ["Elf Arcanist"] = 63, ["Elf Scout"] = 64, ["Mummy"] = 65, ["Dwarf Geomancer"] = 66, ["Stone Golem"] = 67, ["Vampire"] = 68, ["Dwarf"] = 69, ["Dwarf Guard"] = 70, ["Dwarf Soldier"] = 71, ["Rabbit"] = 74, ["Swamp Troll"] = 76} Ps: Você também pode por roupas de players, exemplo.. para os atuais servidores SQL, recomendo para ser mais simples, você por a roupa desejada " in game " Fazer logout, Relogar.. abrir o SQL editor, e no nome de seu char, e verificar o looktype, lookfeet.. entre outros Voltando.. E a lootchance "Eu quero fazer um faraó, mas quero que item fulano caia toda hora e que item ciclano caia mto raramente", entao ai vai a lista da loot chance: --100000= all time----50000= each 2 time-- --33333= each 3 time-- --20000= each 5 time-- --10000= each 10 time-- --6666= each 15 time-- --5000 = each 20 time-- --4000 = each 25 time-- --3333 = each 30 time-- --2857 = each 35 time-- --2500 = each 40 time-- --2222 = each 45 time-- --2000 = each 50 time-- --1818 = each 55 time-- --1666 = each 60 time-- --1538 = each 65 time-- --1428 = each 70 time-- --1333 = each 75 time-- --1000 = each 100 time-- --909 = each 110 time-- --833 = each 120 time-- --800 = each 125 time --666 = each 150 time-- --588 = each 170 time-- --555 = each 180 time-- --500 = each 200 time-- --400 = each 250 time-- --333 = each 300 time-- Bom, terminamos a explicação dos monstros.. vamos agora ao Tutorial de npc.. 3.0- NPC'S Como exemplo de npc, vamos criar um NPC, que quando vc pedir ele sumone um monstro pra vc Começamos a função de um NPC com isso ------------x---------- focus = 0 contador = 0 talk_start = 0 target = 0 following = false attacking = false function onThingMove(creature, thing, oldpos, oldstackpos) end function onCreatureAppear(creature) end function onCreatureDisappear(cid, pos) if focus == cid then selfSay('Ate breve.') focus = 0 contador = 0 talk_start = 0 end end function onCreatureTurn(creature) end function msgcontains(txt, str) return (string.find(txt, str) and not string.find(txt, '(%w+)' .. str) and not string.find(txt, str .. '(%w+)')) end function onCreatureSay(cid, type, msg) msg = string.lower(msg) ------------x---------- Depois acrescentamos: ------------x---------- if ((string.find(msg, '(%a*)hi(%a*)')) and (focus == 0)) and getDistanceToCreature(cid) < 3 then selfSay('Hail ' .. creatureGetName(cid) .. '! Voce gostaria de treinar com algum de meus monstros?') focus = cid contador = 1 talk_start = os.clock() end ------------x---------- Quando vc falar HI pra ele ele vai te dizer: selfSay('Hail ' .. creatureGetName(cid) .. '! Voce gostaria de treinar com algum de meus monstros?') Dai pulamos uma linha e acrescentamos: ------------x---------- if string.find(msg, '(%a*)hi(%a*)') and (focus ~= cid) and getDistanceToCreature(cid) < 3 then selfSay('Espere ' .. creatureGetName(cid) .. '!') end ------------x---------- Isso é, se alguem chegar e falar Hi e ele estiver falando com vc, ele vai dizer para o outro: selfSay('Espere ' .. creatureGetName(cid) .. '!') Entao agora para responder a pergunta que o Npc nos fez, pulamos uma linha e colocamos: ------------x---------- if msgcontains(msg, 'yes') and focus == cid and contador == 1 then selfSay('/m trainer') talk_start = os.clock() end ------------x---------- No caso, quando vc falar yes, ele vai sumonar um trainer,aqui vc poderia substituir por qualquer outro bixo, entao fechamos o script com isso: ------------x---------- if string.find(msg, '(%a*)bye(%a*)') and focus == cid and getDistanceToCreature(cid) < 3 then selfSay('Ate Breve jovem ' .. creatureGetName(cid) .. '!') focus = 0 talk_start = 0 end end function onCreatureChangeOutfit(creature) end function onThink() if (os.clock() - talk_start) > 30 then if focus > 0 then selfSay('Próximo Por favor...') end focus = 0 contador = 0 end end ------------x---------- Que nada mais é do que, o que ele fala e faz depois que vc fala BYE, e oq ele fala e faz depois que vc se afasta muito dele. Vamos explicar algumas funções dos NPCs: selfSay = oq ele irá falar em resposta a algo q vc dissebuy(cid,itemid,qtd,price) = mto usada para Npcs que compram e vendem, esta função serve para vc comprar algo de um Npc sell(cid,itemid,qtd,price) = igual ao explicado acima, so que serve para vc vender algo para o npc PS: O tutorial possuia muitos " Quotes " então o site recusou como erro. O que seria pra ser como Quote ficaram como: ( ------------x---------- ) Desculpa qualquer coisa ai.. erros de português e etc.. :smile_positivo: ESPERO TER CONTRIBUIDO COM O XTIBIA ^^ > Este tutorial foi feito por mim. A criação do mesmo estava postado no meu blog, antes de deleta-lo. Qualquer copia do mesmo, favor pedir permissão. Créditos 100% Meus Att, Tonynh Editado Novembro 8, 2009 por Tonynh Link para o comentário Compartilhar em outros sites More sharing options...
cagaio 0 Postado Julho 15, 2009 Share Postado Julho 15, 2009 Fixo Please Link para o comentário Compartilhar em outros sites More sharing options...
LorDz 14 Postado Julho 15, 2009 Share Postado Julho 15, 2009 Falaê, otimo tutorial... Pode ajudar muita gente, mas o problema é que tem muito tópico falando sobre isso!... Aprovado :button_ok: Link para o comentário Compartilhar em outros sites More sharing options...
Tonynh 514 Postado Julho 15, 2009 Autor Share Postado Julho 15, 2009 (editado) Vindo de vc.. Valeu xD Bom se tem outros tutorias, eu acho que os membros ainda possuem algumas dúvidas.. só espero que esse tuto, ajude muita gente ^^ E outra coisa.. a maioria dos tutoriais.. são de Npcs, Monsters, Speels, ja prontas ^^ que é só.. Ctrl + c Ctrl + v ai funciona.. em meu tutorial, quis representar o que cada coisa significa.. as "funções básicas" para que cada um, possa fazer o npc, monster, spell do jeito que bem entender ^^ Editado Julho 15, 2009 por Tonynh Link para o comentário Compartilhar em outros sites More sharing options...
Filippe Ferreira 11 Postado Julho 17, 2009 Share Postado Julho 17, 2009 Ótimo tutorial, apesar de já termos alguns, esse ficou show. Aprovado e Movido. Link para o comentário Compartilhar em outros sites More sharing options...
Tonynh 514 Postado Julho 17, 2009 Autor Share Postado Julho 17, 2009 (editado) Obrigado pelo elogio, sei que estou contribuindo para o Xtibia com esse tutorial.. > Em breve com mais conteúdos ao Xtibia. :smile_positivo: Sem mais~~ Att, Tonynh Editado Julho 17, 2009 por Tonynh Link para o comentário Compartilhar em outros sites More sharing options...
cainhobong77 0 Postado Julho 18, 2009 Share Postado Julho 18, 2009 po cara perfeito tutorial (: me ajudo pakas =] :smile_positivo: Link para o comentário Compartilhar em outros sites More sharing options...
Tonynh 514 Postado Julho 18, 2009 Autor Share Postado Julho 18, 2009 Obrigado cainhobong pelo elogio.. e é pra isso mesmo que postei o tutorial no Xtibia.. pra ajudar a quem precisa :smile_positivo: Abraços.. e boa sorte Link para o comentário Compartilhar em outros sites More sharing options...
Stefano26 0 Postado Julho 18, 2009 Share Postado Julho 18, 2009 Perfeito tutorial. Como sempre, vem fazendo um bom trabalho. Eu já sou experiente em Spells, mas sou Iniciante em Monsters, então muito obrigado cara ! Jajá tou colocando sua fanbar heheheh! Link para o comentário Compartilhar em outros sites More sharing options...
Tonynh 514 Postado Julho 19, 2009 Autor Share Postado Julho 19, 2009 Opa.. obrigado pelos elogios :smile_positivo: Espero que este tutorial abra as portas para a sua criação de monsters.. :smile_positivo: Abraços.. Att, Tonynh Link para o comentário Compartilhar em outros sites More sharing options...
carlooos 0 Postado Julho 20, 2009 Share Postado Julho 20, 2009 huhu, legal vo ver se aprendo alguma coisa vlw.. Link para o comentário Compartilhar em outros sites More sharing options...
Tonynh 514 Postado Julho 25, 2009 Autor Share Postado Julho 25, 2009 Agradeço a todos pelos elogios.. Digo mais! estarei sem dá suporte a este tópico.. pois acho que já está explicado demais. Caso tenham alguma dúvida mandem-me uma PM. Abraços a todos. Att, Tonynh Link para o comentário Compartilhar em outros sites More sharing options...
renansdc 88 Postado Julho 27, 2009 Share Postado Julho 27, 2009 Muito bom para iniciantes! Aprovado :button_ok: Valeu. Link para o comentário Compartilhar em outros sites More sharing options...
_ferrari_ 1 Postado Agosto 1, 2009 Share Postado Agosto 1, 2009 um detalhe, dá pra descobrir o outfit criando uma talkaction, ela te diz o que está usando. acho que tem uma dessas na seção de actions. Link para o comentário Compartilhar em outros sites More sharing options...
danielnel 0 Postado Agosto 12, 2009 Share Postado Agosto 12, 2009 (editado) Parabens eu adorei mais aqui em casa naum da pq eu entro em spells ai tem 2 pastas scripts e lib cara ali em cima vai script e a minha xml ve se vc arruma coloca essa magia pra todas as vocações e ve se ela nuam tah bugada e adorei mais uma vez seu tutorial Editado Agosto 12, 2009 por danielnel Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados