Fazio 0 Postado Fevereiro 4, 2008 Share Postado Fevereiro 4, 2008 po cara muito otimo agora eu sei cria isso npc monstreos e tals continue trazendo mnais coisas Link para o comentário Compartilhar em outros sites More sharing options...
gmjuan 0 Postado Fevereiro 6, 2008 Share Postado Fevereiro 6, 2008 (editado) Tutorial esta muito bom, bem organizado,com a utilização de codes,mostrando as configurações,Bom para iniciantes que ainda estão aprendendo a mexer com OT SERVE... ..flws Editado Fevereiro 6, 2008 por GMJuan Link para o comentário Compartilhar em outros sites More sharing options...
pedr0 0 Postado Fevereiro 15, 2008 Share Postado Fevereiro 15, 2008 Nao me ajudo mais ta vlw abraços Link para o comentário Compartilhar em outros sites More sharing options...
NeoMagician 0 Postado Março 3, 2008 Share Postado Março 3, 2008 MUIto GOOD....^^ Link para o comentário Compartilhar em outros sites More sharing options...
gmjuan 0 Postado Março 19, 2008 Share Postado Março 19, 2008 Gostei do tutor,realmente apredi muita coisa que tava precisando saber,principalmente com Npc. Brigado msm cara xD Link para o comentário Compartilhar em outros sites More sharing options...
Liinnkk 0 Postado Abril 3, 2008 Share Postado Abril 3, 2008 kra eu criei meu monster so q quando eu vo sumona ele aparece sorry no possible Link para o comentário Compartilhar em outros sites More sharing options...
namelock 0 Postado Abril 7, 2008 Share Postado Abril 7, 2008 Muito bom mesmo. Mas gostaria de aprender como calcular o dano da magia. Se alguém puder me ensinar.... Vlw Link para o comentário Compartilhar em outros sites More sharing options...
jotabadboys 0 Postado Abril 14, 2008 Share Postado Abril 14, 2008 Muito bom o tutorial...bem explicado valew Link para o comentário Compartilhar em outros sites More sharing options...
didinhaxd 1 Postado Abril 15, 2008 Share Postado Abril 15, 2008 (editado) Ficou bom.. para quem não sabia né... APROVADO Metas: 1 Post [x] Servo 10 Posts [x] Camponês 25 Posts [x] Caçador 50 Posts [x] Cavaleiro 100 Posts [x] Baronete 200 Posts [ ] ALVO ~~> BARÃO Editado Abril 15, 2008 por didinhaxd Link para o comentário Compartilhar em outros sites More sharing options...
bingo 0 Postado Abril 15, 2008 Share Postado Abril 15, 2008 Muito bom, está de parabéns =) Eu apenas não entendi no caso, por exmplo, como selecionar onde o NPC vai aparecer no mapa =/ , mesmo assim está muito bom! Link para o comentário Compartilhar em outros sites More sharing options...
luan77 0 Postado Abril 22, 2008 Share Postado Abril 22, 2008 Simplesmente um dos melhores tutos q ja vi <<<<Congratulations>>>> \o> Link para o comentário Compartilhar em outros sites More sharing options...
FelipeAugustoGuimaraes 0 Postado Abril 23, 2008 Share Postado Abril 23, 2008 Thhhhxxxxxxxxx :smile_positivo: :smile_positivo: :smile_positivo: :smile_positivo: :smile_positivo: :smile_positivo: :smile_positivo: Link para o comentário Compartilhar em outros sites More sharing options...
Junocah 0 Postado Abril 26, 2008 Share Postado Abril 26, 2008 Ta bem legal teu Tutorial parabéns! Link para o comentário Compartilhar em outros sites More sharing options...
bhyller 0 Postado Abril 27, 2008 Share Postado Abril 27, 2008 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 uma duvida....pq UltimateExplosionObject.?..no caso q n for UE..e for outro nome....so muda o nome do ultimate explosion + fica o objeto? Link para o comentário Compartilhar em outros sites More sharing options...
tainann 0 Postado Abril 30, 2008 Share Postado Abril 30, 2008 Gente,peço que vcs postem o que acharam,porque realmente desanima trazer um tuto desse tamanho,separar,por cor,code,tudo bonitinho, e vcs só olharem e irem embora! Pessoal,jah vo avisando,esse tutorial não é meu,é de um usuário chamado Lucas321 de um certo fórum aí... -------------------------------------- Aprenda a fazer seus próprios Monstros, Spells e NPC Basicamente scripts sao o conjunto dos códigos que formam os arquivos de players, monster, spells, etc. Nesse tutorial vou ensinar tudo, pra vc sair daqui fazendo monstros, spells e tudo mais. E se no final houver alguma duvida poste aqui que serei grato em ajudar. Neste Tutorial existem varios comandos básicos, bons para iniciantes, parte por parte é explicada, visando um maior entendimento sobre o assunto. Vamos lá! SPELLS Primeiro vamos falar sobre as spells Existem as spells de instant e as spells de rune, as spells de instant sao aquelas em q o monstro usa nele, e as de runa ele vai usar em vc. Entao a primeira coisa que precisamos fazer é decidir se vamos fazer uma spell de runa ou de instant, vou mostrar aqui apenas um exemplo, se nao o topico ficara muito grande. Vamos começar, seguindo um exemplo de uma magia minha: Primeiro, crie um arquivo chamado crossover.lua, na pasta Data>Spells>Instant Começamos o script com isso: area = { {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, } Essa é a area em que a magia ira pegar, o numero 0 simboliza os espaços que a magia nao pega e os numeros 1, os lugares onde acontecerá a magia, no exemplo acima, é uma magia em forma de cruz Pulamos entao uma linha e acrescentamos isso: attackType = ATTACK_PHYSICAL needDirection = false areaEffect = NM_ME_YELLOW_RINGS animationEffect = NM_ANI_NONE hitEffect = NM_ME_HIT_AREA damageEffect = NM_ME_DRAW_BLOOD animationColor = BLACK_WHITE offensive = true drawblood = true Vamos às explicações: attackType = o tipo de ataque que será, no exemplo será um ataque fisico, mas tbm poderia ser um ataque de fogo, ou de energy needDirection = se o ataque precisa de direção, como as firewaves areaEffect = o tipo de animação que saira na area na magia animationEffect = a animação de quando o player sofrer dano da magia damageEffect = o efeito que saira quando o player receber o dano animationColor = a cor da animação da Magia offensive = se a magia é de ataque ou nao drawblood = se embaixo do player vai sair sangue quando ele receber a magia Explicado, pulamos uma linha e adicionamos: UltimateExplosionObject = MagicDamageObject(attackType, animationEffect, hitEffect, damageEffect, animationColor, offensive, drawblood, 0, 0) Essa é a função que fara com q oq explicamos acima funcione, pulamos outra linha e acrescentamos: function onCast(cid, creaturePos, level, maglv, var) centerpos = {x=creaturePos.x, y=creaturePos.y, z=creaturePos.z} n = tonumber(var) if n ~= nil then -- bugged -- ultimateExplosionObject.minDmg = var+0 -- UltimateExplosionObject.maxDmg = var+0 UltimateExplosionObject.minDmg = 0 UltimateExplosionObject.maxDmg = 0 else UltimateExplosionObject.minDmg = (level * 2 + maglv * 3) * 2.6 - 30 UltimateExplosionObject.maxDmg = (level * 2 + maglv * 3) * 3.0 end Essa é a fórmula do Dano que o player irá tomar ao receber a magia, agora pra finalizar adiconamos: return doAreaMagic(cid, centerpos, needDirection, areaEffect, area, UltimateExplosionObject:ordered()) end Pronto ja terminamos nossa primeira spell, agora para faze-la funcionar precisamos acrescenta-la aou arquivo spells.xml vamos lá, na pasta Data>Spells abra o arquivo spells.xml e na sessao de INSTANT, acrescente esta linha: spell name="CrossOver" words="crossover" maglv="12" mana="160" enabled="1"><vocation id="2" /><vocation id="1" /></spell> Explicando: spell name = nome da magia (pode ser qualquer um) words = as palavras magicas que terao que ser ditas pra magia funcionar (tem q ser igual ao nome do script da magia) magvl = maglv necessario para usar essa magia mana = mana que será gasta enabled = se a magia esta abilitada ou nao vocation id = para quais vocações essa magia funcionará, no caso acima ela so funciona pra sorc e druid ------------------ MONSTERS Spell criada, vamos passar para o Monstro que usara esta spell Crie um arquivo .xml com um nome qualquer na pasta Data>Monsters <?xml version="1.0"?> <monster name="The Flash" level="500" maglevel="70" experience="1000" pushable="0" armor="80" defense="90" canpushitems="1" staticattack="50" changetarget="200" speed="100000"> <health now="25000" max="25000"/> <look type="134" head="94" body="94" legs="94" feet="79" corpse="4246"/> <combat targetdistance="4" runonhealth="0"/> <attacks> <attack type="instant" name="flash_light" exhaustion="500" cycleticks="8000" probability="40"/> </attacks> <defenses> <defense immunity="physical"/> <defense immunity="paralyze"/> </defenses> <voices> <voice sentence="HEHE Vem me pegar!!"/> <voice sentence="Bah, ja dei 5 voltas e vc ai parado!"/> </voices> <summons maxSummons="2"> <summon name="Chicken" chance="5000"/> </summons> <loot> </loot> </monster> Esse é um exemplo de um monstro que eu criei, escolhi ele pq ele apresenta quase todas as funções de um monster, vamos as explicações que realmente interessam monster name = nome do monstro, esse nome é oq aparecerá quando vc sumonar ele experience = a experiencia que ele dá, geralmente é um numero normal, parecido com o do Tibia, pois no config.lua é que a exp é multiplicada, portanto se vc colocar mto alto aqui, vai ficar absurda canpushitems = se o monstro pode mover objetos changetarget = dificuldade ou facilidade do monstro mudar de alvo combat targetdistance = a distancia em sqm em que o monstro ficará do player runonhealth = o life em que o monstro correrá do player <summons> = comando para ele sumonar um monstro <loot> = aqui vc ajusta os items e o dinheiro, com a chance (Vamos falar sobre isso mais a frente) e etc <attacks> = sao os ataques que seu monstro usará, tem os attack do tipo meele (dano fisico), distance (arrows, bolts, etc), instant (magias de instant), rune (magias de rune) <defenses> = aqui é pra vc colocar se o seu monstro vai ser imune a alguma coisa, exemplo: Demon é imune a fogo, entao vc poe lá: <defense immunity="fire"/> <voices> = qual será a mensagem que ele dirá (aquela msg laranja) </monster> = funciona como um end, finaliza o script Vamos falar sobre o looktype e a lootchance: "Ah eu quero criar um Boss dos orc, mas nao sei quais sao as roupinhas" Abaixo a lista dos looktypes dos monstros mais comums {["Orc Warlord"] = 2, ["War Wolf"] = 3, ["Orc Ridder"] = 4, ["Orc"] = 5, ["Orc Shaman"] =6, ["Orc Warrior"] = 7, ["Orc Berserker"] = 8, ["Necromancer"] = 9, ["Black Sheep"] = 13, ["Sheep"] = 14, ["Trol"] = 15, ["Bear"] = 16, ["Beholder"] = 17, ["Ghoul"] = 18, ["Slime"] = 19, ["Rat"]= 21, ["Cyclops"] = 22, ["Minotaur Mage"] = 23, ["Minotaur Archer"] = 24, ["Minotaur"] = 25, ["Rotworm"] = 26, ["Wolf"] = 27, ["Snake"] = 28, ["Minotaur Guard"] =29, ["Spider"] = 30, ["Deer"] = 31, ["Dog"] = 32, ["Skeleton"] = 33, ["Dragon"] = 34, ["Poison Spider"] = 36, ["Demon Skeleton"] = 37, ["Giant Spider"] = 38, ["Dragon Lord"] = 39, ["Fire Devil"] = 40, ["Lion"] = 41, ["Polar Bear"] = 42, ["Scorpion"] = 43, ["Wasp"]= 44, ["Bug"] = 45, ["Ghost"] = 48, ["Fire Elemental"] = 49, ["Orc Spearman"] = 50, ["Djinn"] =51, ["Winter Wolf"] = 52, ["Frost Troll"]=53, ["Witch"] = 54, ["Behemot"] =55, ["Cave Rat"] = 56, ["Monk"] = 57, ["Priestess"] = 58, ["Orc Leader"] = 59, ["Pig"] = 60, ["Goblin"] = 61, ["Elf"] = 62, ["Elf Arcanist"] = 63, ["Elf Scout"] = 64, ["Mummy"] = 65, ["Dwarf Geomancer"] = 66, ["Stone Golem"] = 67, ["Vampire"] = 68, ["Dwarf"] = 69, ["Dwarf Guard"] = 70, ["Dwarf Soldier"] = 71, ["Rabbit"] = 74, ["Swamp Troll"] = 76} E a lootchance "Eu quero fazer um faraó, mas quero que item fulano caia toda hora e que item ciclano caia mto raramente", entao ai vai a lista da loot chance: --100000= all time-- --50000= each 2 time-- --33333= each 3 time-- --20000= each 5 time-- --10000= each 10 time-- --6666= each 15 time-- --5000 = each 20 time-- --4000 = each 25 time-- --3333 = each 30 time-- --2857 = each 35 time-- --2500 = each 40 time-- --2222 = each 45 time-- --2000 = each 50 time-- --1818 = each 55 time-- --1666 = each 60 time-- --1538 = each 65 time-- --1428 = each 70 time-- --1333 = each 75 time-- --1000 = each 100 time-- --909 = each 110 time-- --833 = each 120 time-- --800 = each 125 time --666 = each 150 time-- --588 = each 170 time-- --555 = each 180 time-- --500 = each 200 time-- --400 = each 250 time-- --333 = each 300 time-- NPC Bom ja criamos uma spell, um monstro, vamos criar um NPC, que quando vc pedir ele sumone um monstro pra vc Começamos a função de um NPC com isso focus = 0 contador = 0 talk_start = 0 target = 0 following = false attacking = false function onThingMove(creature, thing, oldpos, oldstackpos) end function onCreatureAppear(creature) end function onCreatureDisappear(cid, pos) if focus == cid then selfSay('Ate breve.') focus = 0 contador = 0 talk_start = 0 end end function onCreatureTurn(creature) end function msgcontains(txt, str) return (string.find(txt, str) and not string.find(txt, '(%w+)' .. str) and not string.find(txt, str .. '(%w+)')) end function onCreatureSay(cid, type, msg) msg = string.lower(msg) Bom, depois disso acrescentamos: if ((string.find(msg, '(%a*)hi(%a*)')) and (focus == 0)) and getDistanceToCreature(cid) < 3 then selfSay('Hail ' .. creatureGetName(cid) .. '! Voce gostaria de treinar com algum de meus monstros?') focus = cid contador = 1 talk_start = os.clock() end Quando vc falar HI pra ele ele vai te dizer: selfSay('Hail ' .. creatureGetName(cid) .. '! Voce gostaria de treinar com algum de meus monstros?') Dai pulamos uma linha e acrescentamos: if string.find(msg, '(%a*)hi(%a*)') and (focus ~= cid) and getDistanceToCreature(cid) < 3 then selfSay('Espere ' .. creatureGetName(cid) .. '!') end Isso é, se alguem chegar e falar Hi e ele estiver falando com vc, ele vai dizer para o outro: selfSay('Espere ' .. creatureGetName(cid) .. '!') Entao agora para responder a pergunta que o Npc nos fez, pulamos uma linha e colocamos: if msgcontains(msg, 'yes') and focus == cid and contador == 1 then selfSay('/m trainer') talk_start = os.clock() end No caso, quando vc falar yes, ele vai sumonar um trainer,aqui vc poderia substituir por qualquer outro bixo, entao fechamos o script com isso: if string.find(msg, '(%a*)bye(%a*)') and focus == cid and getDistanceToCreature(cid) < 3 then selfSay('Ate Breve jovem ' .. creatureGetName(cid) .. '!') focus = 0 talk_start = 0 end end function onCreatureChangeOutfit(creature) end function onThink() if (os.clock() - talk_start) > 30 then if focus > 0 then selfSay('Próximo Por favor...') end focus = 0 contador = 0 end end Que nada mais é do q, oq ele fala e faz depois que vc fala BYE, e oq ele fala e faz depois que vc se afasta muito dele. Vamos explicar algumas funções dos NPCs: selfSay = oq ele irá falar em resposta a algo q vc disse buy(cid,itemid,qtd,price) = mto usada para Npcs que compram e vendem, esta função serve para vc comprar algo de um Npc sell(cid,itemid,qtd,price) = igual ao explicado acima, so que serve para vc vender algo para o npc DICAS * Nunca faça monstros fortes demais, primeiro avalie a força dos jogadores do seu server e faça um monstro que eles consigam matar, mesmo que para isso ralem bastante, ninguem gosta de ver um monstro ignorante matando todo mundo, isso acaba com a graça *Faça spells balanceadas para todas as vocações, fazer uma spell onde so o druida é beneficiado, fica ruim, se fizer uma spell forte para o druida, tente fazer uma para o pally, o kina e o sorc, ou de a eles algum beneficio que o druida nao tem *Existem várias funções q podem ser usadas nos Npcs, tente tirar o máximo de proveito disso para fazer quests, eventos, etc Vlw e Comentem! Postem elogios, criticas, duvidas e sugestoes! Estou aqui para ajuda-los //Lucas321 -------------------------------- LEMBRANDO,CRÉDITOS A ELE,E NÃO A MIM. Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados