dalvorsn 46 #1 Postado 29 Maio, 2011 (editado) Servidor Testado: TFS 0.3.6 (pokemon dash by mastercraft) Protocolo: 8.54 Autor: Dalvo [baseada na magia da Svke]. Metronome Acredito que muitos conheçam a magia, é uma magia randômica com 7 possíveis magias. São todas magias de área e dos seguintes tipos: • Fogo • Pedra • Água • Elétrica • Dark • Folhas • Gelo Vale lembrar que os efeitos foram feitos em cima do server "Pokemon Dash". Instalação Em data\spells\scripts crie um arquivo x de extensão .lua e coloque isso dentro: local fire1 = createCombatArea{ {1, 1, 1}, {1, 2, 1}, {1, 1, 1} } local fire2 = createCombatArea{ {0, 0, 0, 1, 0, 0, 0}, {0, 0, 1, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 1, 0}, {1, 0, 0, 2, 0, 0, 1}, {0, 1, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 1, 0, 0}, {0, 0, 0, 1, 0, 0, 0} } local fire3 = createCombatArea{ {1, 0, 0, 0, 1, 0, 0, 0, 1}, {0, 0, 0, 1, 1, 1, 0, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 0, 0}, {0, 1, 1, 0, 0, 0, 1, 1, 0}, {1, 1, 0, 0, 2, 0, 0, 1, 1}, {0, 1, 1, 0, 0, 0, 1, 1, 0}, {0, 0, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 1, 1, 1, 0, 0, 0}, {1, 0, 0, 0, 1, 0, 0, 0, 1} } function onCastSpell(cid, var) local function variavel(cid, elemento, defec, mefec) local dano1, dano2 = 150,160 if isCreature(cid) then local pos = getThingPos(cid) pos.x = pos.x + math.random(-4,4) pos.y = pos.y + math.random(-4,4) local frompos = getThingPos(cid) frompos.x = pos.x - 6 frompos.y = pos.y - 6 doSendDistanceShoot(frompos, pos, defec) doAreaCombatHealth(cid, elemento, pos, 0, -dano1, -dano2, mefec) end end local function leaf(cid, elemento, defec, mefec) local dano1, dano2 = 150,160 if not(isCreature(cid))then return true end pos = getThingPos(cid) for x= -6,6 do for y= -6,6 do topos = {x=pos.x+x, y=pos.y+y, z=pos.z} doSendDistanceShoot(getThingPos(cid), topos, defec) doAreaCombatHealth(cid, elemento, topos, 0, -dano1, -dano2, mefec) end end end local function fogo(cid, elemento, mefec, area) local dano1, dano2 = 150,160 if(isCreature(cid))then doAreaCombatHealth(cid, elemento, getThingPos(cid), area, - dano1, - dano2, mefec) end end local function sortear() local magias = math.random(1,7) if magias == 1 then for i = 1, 72 do addEvent(variavel, i*35, cid,ELECTRICDAMAGE,41,48) end elseif magias == 2 then for i = 1, 72 do addEvent(variavel, i*35,cid,ICEDAMAGE,42,52) end elseif magias == 3 then for i = 1, 72 do addEvent(variavel, i*35,cid,GHOSTDAMAGE,18,140) end elseif magias == 4 then for i = 1, 72 do addEvent(variavel, i*35,cid,WATERDAMAGE,2,53) end elseif magias == 5 then for i = 1, 72 do addEvent(variavel, i*35,cid,ROCKDAMAGE,11,44) end elseif magias == 6 then leaf(cid,GRASSDAMAGE,8, CONST_ME_NONE) elseif magias == 7 then fogo(cid, FIREDAMAGE, 6, fire1) addEvent(fogo, 100, cid, FIREDAMAGE, 35, fire1) addEvent(fogo, 400, cid, FIREDAMAGE, 6, fire2) addEvent(fogo, 500, cid, FIREDAMAGE, 35, fire2) addEvent(fogo, 800, cid, FIREDAMAGE, 6, fire3) end end doSendMagicEffect(getThingPos(cid), 161) addEvent(sortear, 1000) return true end Salve e feche. Agora vá em data\spells\spells.xml e cole esta tag: <instant name="metronome" words="metronome" lvl="10" mana="10" selftarget="1" exhaustion="2000" needlearn="0" event="script" value="x.lua"> </instant> Obs.: Configure a sua maneira. Para quem usa "Pokemon Dash", aqui está ela em forma de talkaction local magma1 = createCombatArea{ {1, 1, 1}, {1, 2, 1}, {1, 1, 1} } local magma2 = createCombatArea{ {0, 0, 0, 1, 0, 0, 0}, {0, 0, 1, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 1, 0}, {1, 0, 0, 2, 0, 0, 1}, {0, 1, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 1, 0, 0}, {0, 0, 0, 1, 0, 0, 0} } local magma3 = createCombatArea{ {1, 0, 0, 0, 1, 0, 0, 0, 1}, {0, 0, 0, 1, 1, 1, 0, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 0, 0}, {0, 1, 1, 0, 0, 0, 1, 1, 0}, {1, 1, 0, 0, 2, 0, 0, 1, 1}, {0, 1, 1, 0, 0, 0, 1, 1, 0}, {0, 0, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 1, 1, 1, 0, 0, 0}, {1, 0, 0, 0, 1, 0, 0, 0, 1} } elseif pokemon.x.spell == "Metronome" then doCreatureSay(getCreatureSummons(cid)[1], ""..string.upper(c[getCreatureOutfit(getCreatureSummons(cid)[1]).lookType].x.spell).."!", TALKTYPE_MONSTER) doCreatureSay(cid, ""..getCreatureName(getCreatureSummons(cid)[1])..", "..c[getCreatureOutfit(getCreatureSummons(cid)[1]).lookType].x.spell.."!", TALKTYPE_SAY) exhaustion.set(cid, pokemon.x.ex, pokemon.x.cd) doSendMagicEffect(getThingPos(getCreatureSummons(cid)[1]), 161) local function variavel(cid, elemento, defec, mefec) if isCreature(cid) then if isCreature(getCreatureSummons(cid)[1]) then local pos = getThingPos(getCreatureSummons(cid)[1]) pos.x = pos.x + math.random(-4,4) pos.y = pos.y + math.random(-4,4) local frompos = getThingPos(getCreatureSummons(cid)[1]) frompos.x = pos.x - 7 frompos.y = pos.y - 6 doSendDistanceShoot(frompos, pos, defec) doAreaCombatHealth(getCreatureSummons(cid)[1], elemento, pos, 0, -((num1)+(getPlayerLevel(cid)*(num3))), -((num2)+(getPlayerLevel(cid)*(num3))), mefec) end end end local function leaf(params) lugar = getThingPos(getCreatureSummons(params.cid)[1]) for x= -7,7 do for y= -6,6 do topos = {x=lugar.x+x, y=lugar.y+y, z=lugar.z} doSendDistanceShoot(getThingPos(getCreatureSummons(params.cid)[1]), topos, 8) end end end posit = getThingPos(getCreatureSummons(cid)[1]) local function fogo(params) if #getCreatureSummons(params.cid) >= 1 then doAreaCombatHealth(getCreatureSummons(params.cid)[1], params.el, posit, params.ar, -((num1)+(getPlayerLevel(cid)*(num3))), -((num2)+(getPlayerLevel(cid)*(num3))), params.ef) else end end local function sortear() local magias = math.random(1,7) if magias == 1 then for r = 1, 72 do addEvent(variavel, r*35, cid,ELECTRICDAMAGE,41,48) end elseif magias == 2 then for r = 1, 72 do addEvent(variavel, r*35,cid,ICEDAMAGE,42,52) end elseif magias == 3 then for r = 1, 72 do addEvent(variavel, r*35,cid,GHOSTDAMAGE,18,140) end elseif magias == 4 then for r = 1, 72 do addEvent(variavel, r*35,cid,WATERDAMAGE,2,53) end elseif magias == 5 then for r = 1, 72 do addEvent(variavel, r*35,cid,ROCKDAMAGE,11,44) end elseif magias == 6 then addEvent(leaf, 0, {cid = cid}) addEvent(doAreaCombatHealth, 0, getCreatureSummons(cid)[1], GRASSDAMAGE, getThingPos(getCreatureSummons(cid)[1]), grassarea, -((num1)+(getPlayerLevel(cid)*(num3))), -((num2)+(getPlayerLevel(cid)*(num3))), 255) elseif magias == 7 then addEvent(fogo, 0, {cid = cid, el = element, ar = magma1, ef = 6}) addEvent(fogo, 100, {cid = cid, el = element, ar = magma1, ef = 35}) addEvent(fogo, 400, {cid = cid, el = element, ar = magma2, ef = 6}) addEvent(fogo, 500, {cid = cid, el = element, ar = magma2, ef = 35}) addEvent(fogo, 800, {cid = cid, el = element, ar = magma3, ef = 6}) end end addEvent(sortear, 1000) return 0 [/spoiler] Se tiver algum erro ou se tiverem dúvidas quanto ao script, postem que verei o que fazer. Ela foi feita para pokemon, mais pode ser reaproveitada facilmente Fico por aqui, façam bom uso. (Y) [Proibido postar em outros lugares sem minha autorização.] Editado 8 Junho, 2011 por dalvorsn corrigir um pequeno erro .-. 1 Lightwood reagiu a isto Compartilhar este post Link para o post
Oneshot 24 #2 Postado 3 Junho, 2011 (editado) Gostei da ideia da magia aleatorizada, já vi algo feito nesses moldes, mas era uma magia que criava diferentes tipos de área e causava diferentes tipos de dano, conforme o valor de um certo storage. No seu caso, a condição pra função doCombat é um math.random. Criatividade: 50Organização: 60 Tamanho: 45 Utilidade: 50 Nota Final: 51 ou B- Remuneração Total: 20V$ Editado 3 Junho, 2011 por Garou Compartilhar este post Link para o post
Salilo 0 #4 Postado 6 Junho, 2011 Cara, coloquei no meu sv 8.54 (sv n é de pokemon) e a magia não arranca dano das criaturas... tem como me ajudar? Compartilhar este post Link para o post
iuniX 4 #5 Postado 6 Junho, 2011 Você teria que trocar as damages, por valores que não sejam do Pokemon... Compartilhar este post Link para o post
dalvorsn 46 #6 Postado 6 Junho, 2011 Substitua os tipos de damages por damages originais do tibia, que se não me engano são esses: COMBAT_FIREDAMAGE COMBAT_ENERGYDAMAGE COMBAT_EARTHDAMAGE COMBAT_ICEDAMAGE COMBAT_HOLYDAMAGE COMBAT_DEATHDAMAGE COMBAT_DROWNDAMAGE COMBAT_PHYSICALDAMAGE Quanto ao damage, eles são configuraveis por função, aonde está: local dano1, dano2 = 150,160 Você pode usar o damage final ou pode se quiser fazer formulas. ex.: local dano1, dano2 = ((getPlayerLevel(cid)*150)/2),((getPlayerLevel(cid)*160)/2) Se ainda persistir a duvida poste novamente =D Compartilhar este post Link para o post
Salilo 0 #7 Postado 6 Junho, 2011 Consegui hehehe ^^" muito obrigado por esclarecer minhas duvidas, antes eu tinha colocado apenas "PHYSICALDAMAGE" por isso não foi, eu mecho a muito tempo com ot, mais eu nunca presto muita atenção, o que me torna muito noob... tenho duvidas ainda de um mega iniciante... mas de qualquer forma, obrigado por sua ajuda, e ja adicioner a formula também... no meu servidor éla ficara soltando 4 tipos de magia, 1 de air , fogo , earth e water xD (sv de avatar ;P) Compartilhar este post Link para o post
caokalia 0 #8 Postado 8 Junho, 2011 Mano, seu script é muito bom!! Mas tem um porem, o metronome de fogo nao está funcionando poderia concertar e postar o script concertado para o pokemon dash? Compartilhar este post Link para o post
dalvorsn 46 #9 Postado 8 Junho, 2011 Mano, seu script é muito bom!!Mas tem um porem, o metronome de fogo nao está funcionando poderia concertar e postar o script concertado para o pokemon dash? Esqueci de colocar a area do de fogo .-. Basta tu adicionar isso no arquivo que você tiver usando ele: local magma1 = createCombatArea{ {1, 1, 1}, {1, 2, 1}, {1, 1, 1} } local magma2 = createCombatArea{ {0, 0, 0, 1, 0, 0, 0}, {0, 0, 1, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 1, 0}, {1, 0, 0, 2, 0, 0, 1}, {0, 1, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 1, 0, 0}, {0, 0, 0, 1, 0, 0, 0} } local magma3 = createCombatArea{ {1, 0, 0, 0, 1, 0, 0, 0, 1}, {0, 0, 0, 1, 1, 1, 0, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 0, 0}, {0, 1, 1, 0, 0, 0, 1, 1, 0}, {1, 1, 0, 0, 2, 0, 0, 1, 1}, {0, 1, 1, 0, 0, 0, 1, 1, 0}, {0, 0, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 1, 1, 1, 0, 0, 0}, {1, 0, 0, 0, 1, 0, 0, 0, 1} } Compartilhar este post Link para o post
Gilahof 0 #10 Postado 19 Junho, 2011 Bem fera hein I.i parabenss Compartilhar este post Link para o post
Pokemoon 0 #11 Postado 27 Setembro, 2011 quanto coloco no talkactions esta tanto esse erro [27/09/2011 19:14:53] [Error - LuaScriptInterface::loadFile] data/talkactions/scripts/move7.lua:3819: function at line 2519 has more than 60 upvalues [27/09/2011 19:14:53] [Warning - Event::loadScript] Cannot load script (data/talkactions/scripts/move7.lua) [27/09/2011 19:14:53] data/talkactions/scripts/move7.lua:3819: function at line 2519 has more than 60 upvalues [27/09/2011 19:14:53] Reloaded talk actions. podes me ajudar nisso Compartilhar este post Link para o post
dalvorsn 46 #12 Postado 14 Outubro, 2011 quanto coloco no talkactions esta tanto esse erro [27/09/2011 19:14:53] [Error - LuaScriptInterface::loadFile] data/talkactions/scripts/move7.lua:3819: function at line 2519 has more than 60 upvalues [27/09/2011 19:14:53] [Warning - Event::loadScript] Cannot load script (data/talkactions/scripts/move7.lua) [27/09/2011 19:14:53] data/talkactions/scripts/move7.lua:3819: function at line 2519 has more than 60 upvalues [27/09/2011 19:14:53] Reloaded talk actions. podes me ajudar nisso tem mais que 60 variáveis locais, terá que passar as varias para uma lib ou coloca-las como globais Compartilhar este post Link para o post
Pokemoon 0 #13 Postado 18 Outubro, 2011 Tem como me mostrar como posso fazer isso, uso pokemon dash como base. Compartilhar este post Link para o post
dalvorsn 46 #14 Postado 18 Outubro, 2011 Tem como me mostrar como posso fazer isso, uso pokemon dash como base. Sabe o que é uma variavel local ? Basicamente isso: [color=blue]local[/color] var = 1 Tu pode simplesmente fazer isso, e funcionará da mesma forma, porém se não me engano vai gasta pouco mais de memoria, mas acredito ser coisa insignificante. var = 1 Pronto, a variavel 'var' deixou de ser uma variavel local. Agora faça isso com mais variaveis até ficar abaixo de 60 variaveis locais. Compartilhar este post Link para o post
Pokemoon 0 #15 Postado 18 Outubro, 2011 Nossa mano vc e muito bom e outra coisa que diferencia vc e a humildade .Funcionou perfeitamente, so mais uma pergunta o golpe do GRASSDAMAGE nao tira hit tem soluçao? Mas muito obrigado pela sua resposta. Compartilhar este post Link para o post
dalvorsn 46 #16 Postado 19 Outubro, 2011 Nossa mano vc e muito bom e outra coisa que diferencia vc e a humildade .Funcionou perfeitamente, so mais uma pergunta o golpe do GRASSDAMAGE nao tira hit tem soluçao?Mas muito obrigado pela sua resposta. já faz um tempo razoavel que fiz esse script, ele hitava normalmente, o que pode estar acontecendo é no seu distro não ter esse damage, teria que verificar nas suas sources se possui ele, pode ser simplesmente o nome diferente. Compartilhar este post Link para o post
Pokemoon 0 #17 Postado 20 Outubro, 2011 Bom dalvorsn eu sempre estou pesquisando algumas coisas para melhorar meu ot e ha muitos post seus que vc mesmo ajuda os outros ate mesmo o tao sonhado boost, eu so queria mais uma ajuda como coloca essa spell para que os hits sejam por level [spoiler=FIgth] local scyther = {lookType = 145} local kabutops = {lookType = 750} local shinyscyther = {lookType = 713} local scythe1 = createCombatArea{ {0, 0, 0}, {0, 0, 0}, {0, 2, 0}, {1, 0, 0}, } local scythe2 = createCombatArea{ {1, 0, 0}, {0, 0, 0}, {0, 2, 0}, } local scythe3 = createCombatArea{ {1, 0, 0, 0}, {0, 0, 2, 0}, {0, 0, 0, 0}, } local scythe4 = createCombatArea{ {0, 0, 0, 1}, {0, 0, 2, 0}, {0, 0, 0, 0}, } local rollarea = createCombatArea{ {1, 1, 1}, {1, 2, 1}, {1, 1, 1}, } function onCastSpell(cid, var) if getCreatureCondition(getCreatureMaster(cid), CONDITION_INFIGHT) == FALSE then return true end if getCreatureCondition(cid, CONDITION_OUTFIT) == true then return true end doCreatureSay(cid, "Counter Helix", TALKTYPE_MONSTER) if getCreatureOutfit(cid).lookType == 15 then doSetCreatureOutfit(cid, scyther, -1) doChangeSpeed(cid, -1000) damage = 300 elseif getCreatureOutfit(cid).lookType == 147 then doSetCreatureOutfit(cid, shinyscyther, -1) doChangeSpeed(cid, -1000) damage = 600 elseif getCreatureOutfit(cid).lookType == 13 then doSetCreatureOutfit(cid, kabutops, -1) doChangeSpeed(cid, -1000) damage = 600 end local dmg = damage local function damage(params) if isCreature(params.cid) then doAreaCombatHealth(params.cid, FLYDAMAGE, getThingPos(params.cid), rollarea, -(params.dmg), -(params.dmg), 255) doAreaCombatHealth(params.cid, element, getThingPos(params.cid), scythe1, 0, 0, 128) doAreaCombatHealth(params.cid, element, getThingPos(params.cid), scythe2, 0, 0, 131) doAreaCombatHealth(params.cid, element, getThingPos(params.cid), scythe3, 0, 0, 129) doAreaCombatHealth(params.cid, element, getThingPos(params.cid), scythe4, 0, 0, 130) end end local function voltar(params) if isCreature(params.cid) then doRemoveCondition(params.cid, CONDITION_OUTFIT) doChangeSpeed(cid, 1000) doRemoveCondition(getCreatureMaster(cid),CONDITION_INFIGHT) end end local vezes = 3 local delay = 600 -- não mexe for i = 1, vezes do addEvent(damage, delay*i, {cid = cid, dmg = dmg}) end addEvent(voltar, 800*vezes, {cid = cid}) end Compartilhar este post Link para o post
dalvorsn 46 #18 Postado 21 Outubro, 2011 Faz na variavel 'damage'. Ex.: if getCreatureOutfit(cid).lookType == 15 then doSetCreatureOutfit(cid, scyther, -1) doChangeSpeed(cid, -1000) [color=red] damage = (getPlayerLevel(getCreatureMaster(cid)) * 5) + 300[/color] elseif getCreatureOutfit(cid).lookType == 147 then doSetCreatureOutfit(cid, shinyscyther, -1) doChangeSpeed(cid, -1000) [color=red]damage = (getPlayerLevel(getCreatureMaster(cid)) * 5) + 600[/color] elseif getCreatureOutfit(cid).lookType == 13 then doSetCreatureOutfit(cid, kabutops, -1) doChangeSpeed(cid, -1000) [color=red]damage = (getPlayerLevel(getCreatureMaster(cid)) * 5) + 600[/color] end Compartilhar este post Link para o post
Pokemoon 0 #19 Postado 21 Outubro, 2011 (editado) Obrigado, funcionou perfeito Editado 23 Novembro, 2011 por Pokemoon Compartilhar este post Link para o post
Renanuilian 0 #20 Postado 21 Março, 2012 Onde eu posso alterar o efeito de area de "Blizzard, Electric Storm"? Estou achando a area muito grande, e pouco certeira (hita uma vez, muito raro hitar duas vezes), queria que hitasse pelo menos duas vezes com exatidão. Compartilhar este post Link para o post