SH
pedido

Magia que invoca monstros por 5 segundos.

Por ShinySprite, 08 de jan. de 2016 em Scripts

10
2.4k
ShinySpriteS
08 de janeiro de 2016 às 15:50

Eu queria o script de alguma magia que invoca monstros e que esses monstros ataquem quem o cara que invocou atacar.

também queria que eles sumissem em 5 segundos.

Se alguem puder ajudar, dou REP+

CaronteC
08 de janeiro de 2016 às 17:15


function onCastSpell(cid, var)

 

local tempo = 5

local monstro1 = doSummonCreature("Demon", getThingPos(cid))

local monstro2 = doSummonCreature("Demon", getThingPos(cid))

local monstro3 = doSummonCreature("Demon", getThingPos(cid))

 

doConvinceCreature(cid, monstro1)

doConvinceCreature(cid, monstro2)

doConvinceCreature(cid, monstro3)

 

addEvent( function()

doRemoveCreature(monstro1)

doRemoveCreature(monstro2)

doRemoveCreature(monstro3)

end, 1000 * tempo)

 

return true

end

 


<instant name="Summon Monster" words="xtibia" lvl="8" mana="20" prem="0" exhaustion="2000" event="script" value="attack/test.lua">

<vocation id="1"/>

<vocation id="2"/>

<vocation id="5"/>

<vocation id="6"/>

</instant>

 

Luga03L
08 de janeiro de 2016 às 17:29

Eu dei uma otmizada no script do Caronte:

function onCastSpell(cid, var)    
    local tempo = 5
    local monstros = 3
    local creature = doSummonCreature("Demon", getThingPos(cid))
  
    for i = 1, monstros do
        doConvinceCreature(cid, creature)
        break
    end    
 
    addEvent(    function()
        for i = 1, monstros do
            doRemoveCreature(creature)
            break
        end
    end, 1000 * tempo)
 
    return true
end


Caso queira, algo a mais avisa ai que posso fazer :D

CaronteC
10 de janeiro de 2016 às 01:41

 

 

Eu dei uma otmizada no script do Caronte:

 

Não cara, isso não funciona, você tem que fazer do meu jeito mesmo, pois assim, você só armazena uma variável, por mais que você mude o número da variável monstros, sempre vai sumonar 1, e você colocou um break sem sentido.

 

Você sabe para que serve break?

 

 

Estaria certo, se você tivesse feito isso:

function onCastSpell(cid, var)    
    local tempo = 5
    local creature = {doSummonCreature("Demon", getThingPos(cid)), doSummonCreature("Demon", getThingPos(cid)), doSummonCreature("Demon", getThingPos(cid)) }
  
    for i = 1, #creature do
        doConvinceCreature(cid, creature[i])
    end    
 
    addEvent(    function()
        for i = 1, #creature do
            doRemoveCreature(creature[i])
        end
    end, 1000 * tempo)
 
    return true
end

 

 

Eu dei uma otmizada no script do Caronte:

 

Não cara, isso não funciona, você tem que fazer do meu jeito mesmo, pois assim, você só armazena uma variável, por mais que você mude o número da variável monstros, sempre vai sumonar 1, e você colocou um break sem sentido.

 

Você sabe para que serve break?

 

 

Estaria certo, se você tivesse feito isso:

function onCastSpell(cid, var)    
    local tempo = 5
    local creature = {doSummonCreature("Demon", getThingPos(cid)), doSummonCreature("Demon", getThingPos(cid)), doSummonCreature("Demon", getThingPos(cid)) }
  
    for i = 1, #creature do
        doConvinceCreature(cid, creature[i])
    end    
 
    addEvent(    function()
        for i = 1, #creature do
            doRemoveCreature(creature[i])
        end
    end, 1000 * tempo)
 
    return true
end
Luga03L
10 de janeiro de 2016 às 02:41

Blz, to meio noiado ultimamente kkkk dando lezera kk

samlecterS
10 de janeiro de 2016 às 13:43

 

 

Não cara, isso não funciona, você tem que fazer do meu jeito mesmo, pois assim, você só armazena uma variável, por mais que você mude o número da variável monstros, sempre vai sumonar 1, e você colocou um break sem sentido.

 

Você sabe para que serve break?

 

 

Estaria certo, se você tivesse feito isso:

function onCastSpell(cid, var)    
    local tempo = 5
    local creature = {doSummonCreature("Demon", getThingPos(cid)), doSummonCreature("Demon", getThingPos(cid)), doSummonCreature("Demon", getThingPos(cid)) }
  
    for i = 1, #creature do
        doConvinceCreature(cid, creature[i])
    end    
 
    addEvent(    function()
        for i = 1, #creature do
            doRemoveCreature(creature[i])
        end
    end, 1000 * tempo)
 
    return true
end

 

 

 

Não cara, isso não funciona, você tem que fazer do meu jeito mesmo, pois assim, você só armazena uma variável, por mais que você mude o número da variável monstros, sempre vai sumonar 1, e você colocou um break sem sentido.

 

Você sabe para que serve break?

 

 

Estaria certo, se você tivesse feito isso:

function onCastSpell(cid, var)    
    local tempo = 5
    local creature = {doSummonCreature("Demon", getThingPos(cid)), doSummonCreature("Demon", getThingPos(cid)), doSummonCreature("Demon", getThingPos(cid)) }
  
    for i = 1, #creature do
        doConvinceCreature(cid, creature[i])
    end    
 
    addEvent(    function()
        for i = 1, #creature do
            doRemoveCreature(creature[i])
        end
    end, 1000 * tempo)
 
    return true
end

 

 

Blz, to meio noiado ultimamente kkkk dando lezera kk

 

Funcionaria em poketibia? creio que não, poderiam adaptar caso não funcione? mas queria pra outros pokemons serem "sumonados" por 1 pokemon, exemplo em uma quest com celebi, ele sumonaria alguns outros pokemons para ajuda-lo (sei que pokemons não fazem isso, mas ninguém saberia que o celebi que sumonou, poderia ter "spawnado" no local) se possivel fazer isso sem ser por 1 spell, talvez um evento em creaturescripts

2 semanas depois...
System HardcoreS
18 de janeiro de 2016 às 01:30

Dando uma olhada rápida no script, não seria melhor adicionar uma checagem antes de remover pra saber se o player tem algum summon? Posso estar enganado, mas me parece que se o summon morrer antes do tempo acabar vai retornar erros na distro do servidor. De qualquer modo, nice script.

CaronteC
18 de janeiro de 2016 às 02:05
Melhor resposta

Dando uma olhada rápida no script, não seria melhor adicionar uma checagem antes de remover pra saber se o player tem algum summon? Posso estar enganado, mas me parece que se o summon morrer antes do tempo acabar vai retornar erros na distro do servidor. De qualquer modo, nice script.

 

Tem razão.

function onCastSpell(cid, var)    
    local tempo = 5
    local creature = {doSummonCreature("Demon", getThingPos(cid)), doSummonCreature("Demon", getThingPos(cid)), doSummonCreature("Demon", getThingPos(cid)) }
  
    for i = 1, #creature do
        doConvinceCreature(cid, creature[i])
    end    
 
    addEvent(    function()
        for i = 1, #creature do
			if isCreature(creature[i]) then
				doRemoveCreature(creature[i])
			end
		end
	end, 1000 * tempo)
 
    return true
end

Como o dono do pedido nem se manifestou, vou dar como resolvido

18 de janeiro de 2016 às 02:15

Uma pequena alteração no script acima, porem que pode facilitar a configuração e o entendimento do sistema.



function onCastSpell(cid, var)
local time = 5
local creature = {
"Demon",
"Demon",
"Dragon"
}

for index, creatureName in ipairs(creature) do
local monster = doSummonCreature(creatureName, getThingPos(cid))
doConvinceCreature(cid, monster)
creature[index] = monster
end

addEvent(function()
for i = 1, #creature do
if isCreature(creature[i]) then
doRemoveCreature(creature[i])
end
end
end, 1000 * time)
return true
end

Editado Janeiro 18 por NightmareStalker

CaronteC
18 de janeiro de 2016 às 02:25

Não tinha pensado em fazer mais simples também...

 


Tópico Movido
Este tópico foi movido de "OTServScriptingSuporte Scripting"
para "OTServScriptingSuporte ScriptingPedidos e dúvidas resolvidos - Scripting".