Ir para conteúdo
Entre para seguir isso  
dalvorsn

Metronome [Pokemon]

Recommended Posts

dalvorsn    46
dalvorsn

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 por dalvorsn
corrigir um pequeno erro .-.

Compartilhar este post


Link para o post
Oneshot    24
Oneshot

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: 50

Organização: 60

Tamanho: 45

Utilidade: 50

 

Nota Final: 51 ou B-

Remuneração Total: 20V$

Editado por Garou

Compartilhar este post


Link para o post
dalvorsn    46
dalvorsn

Ty garouzito ;]

Compartilhar este post


Link para o post
Salilo    0
Salilo

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
iuniX

Você teria que trocar as damages, por valores que não sejam do Pokemon...

Compartilhar este post


Link para o post
dalvorsn    46
dalvorsn

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
Salilo

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
caokalia

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
dalvorsn
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
Gilahof

Bem fera hein I.i

parabenss

Compartilhar este post


Link para o post
Pokemoon    0
Pokemoon

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
dalvorsn
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
Pokemoon

Tem como me mostrar como posso fazer isso, uso pokemon dash como base.

Compartilhar este post


Link para o post
dalvorsn    46
dalvorsn
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
Pokemoon

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
dalvorsn
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
Pokemoon

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
dalvorsn

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
Pokemoon

Obrigado, funcionou perfeito

Editado por Pokemoon

Compartilhar este post


Link para o post
Renanuilian    0
Renanuilian

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
Entre para seguir isso  
  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×