MA
spell

[Encerrado] Jutsu sennin modo

Por matheuspeixoto12, 30 de out. de 2013 em Tópicos Sem Resposta

resolvido
otserv
tibia
script
19
1.8k
30 de outubro de 2013 às 14:38

Boa tarde pessoal, tudo bem?

 

estava pensando em um jutsu para meu server, mas como não sou bom em criar scripts de spells venho pedir para alguém me ajudar rs :)

 

vamos ao jutsu:

 

Então pensei em um jutsu que o player primeiramente o consegue em um npc, porém isso eu sei fazer, depois ele usa o jutsu e muda a outfit e fica saindo efeito por 5 minutos (configuravel) enquanto o jutsu está ativo ele poderá usar mais 1 jutsu novo e quando o jutsu "acabar" irá aparecer uma mensagem dizendo "você não está no modo sennin".

 

Alguém pode me ajudar?

 

também tenho mais 1 tópico, se quiserem olhar http://www.xtibia.com/forum/topic/223281-jutsu-de-andar-na-agua/

 

 

Obrigado, dúvidas deixem nos comentários.

OmegaO
30 de outubro de 2013 às 15:57

Tópico na seção errada, favor prestar mais atenção da próxima vez.
Movido para pedidos e dúvidas - servidores derivados.

30 de outubro de 2013 às 19:26

desculpe :)

1 mês depois...
GabrieltxuG
08 de novembro de 2013 às 09:42

Tópico movido para a seção de dúvidas e pedidos resolvidos.

10 de novembro de 2013 às 21:37

não está resolvido não !

gonorreiaswatG
14 de novembro de 2013 às 02:51

Boa noite.

 

Fiz o script conforme entendi, e ainda adicionei para quando se tornar um "Sennin", além do Outfit e Efeito, ficar mais ágil também.

Obs: Coloquei o Condition Infight para evitar que players efetuem logout enquanto estão com o script, porém, NÃO bugará mesmo se ocorrer.

Tudo facilmente configurável.

 

Sem mais delongas, abaixo segue o script:

 

Esta tag vai em spells.xml:

<instant name="Sennin" words="sennin" lvl="1" mana="0" aggressive="0" selftarget="1" exhaustion="1000" needlearn="0" event="script" value="sennin.lua"/>

E agora o arquivo sennin.lua, cole este script abaixo:

 

 

local tempo = 5 -- Tempo em minutos para a duração
local repetindo = 1000 -- Tempo em milésimos entre um efeito e outro
local transform = {lookType = 25} -- aqui a LookType do outfit
local strg = 50078 -- aqui não precisa mexer

local condition_outfit = createConditionObject(CONDITION_OUTFIT)
setConditionParam(condition_outfit, CONDITION_PARAM_OUTFIT, true)
setConditionParam(condition_outfit, CONDITION_PARAM_TICKS, -1)
addOutfitCondition(condition_outfit, transform)

local condition_haste = createConditionObject(CONDITION_HASTE)
setConditionParam(condition_haste, CONDITION_PARAM_TICKS, tempo * 60 * 1000)
setConditionFormula(condition_haste, 0.5, -34, 0.5, -34)

local condition_infight = createConditionObject(CONDITION_INFIGHT)
setConditionParam(condition_infight, CONDITION_PARAM_TICKS, -1)

    function onCastSpell(cid, var)
        doAddCondition(cid, condition_outfit)
        doAddCondition(cid, condition_haste)
        doAddCondition(cid, condition_infight)
        setPlayerStorageValue(cid, strg, 1)
        Effect(cid)
        addEvent(StopEffect, tempo * 60 * 1000, cid)
end

    function Effect(cid)
    if (isCreature(cid)) then
         if (getPlayerStorageValue(cid, strg) == 1) then
    local position = getCreaturePosition(cid)
    local efeito = CONST_ME_MAGIC_GREEN
        setPlayerStorageValue(cid, strg, 1)
        doSendMagicEffect(position, efeito)
    end
        addEvent(Effect, repetindo, cid)
    else
        return StopEffect(cid)
    end
end

    function StopEffect(cid)
    if (getPlayerStorageValue(cid, strg) == 1) then
        setPlayerStorageValue(cid, strg, 0)
        doPlayerSendTextMessage(cid, 27, "Voce nao esta mais no modo Sennin.")
        doRemoveCondition(cid, CONDITION_OUTFIT)
        doRemoveCondition(cid, CONDITION_HASTE)
        doRemoveCondition(cid, CONDITION_INFIGHT)
      end
  return TRUE
end

 

 

 

Testei aqui e funcionou perfeitamente.

Caso apresente algum erro, poste aqui para resolvermos.

 

Boa sorte.

Editado Novembro 14 por Adriano Swatt

14 de novembro de 2013 às 14:17

e tem como eu colocar para mudar a vocação e quando acabar voltar ?

 

no caso eu queria colocar 2 spells para apenas quem estiver no modo sennin usar

gonorreiaswatG
17 de novembro de 2013 às 19:59

Poderia até ser, porém, poderia por para só usar essas spells se tivesse tal storage que ganha quando se torna Sennin.

Acho que seria mais fácil.

 

Mas se necessitar mesmo da nova vocação, da também.

 

-edit-

Agora fica a seu critério decidir se vai querer.

Eu acho mais fácil trabalhar com storage para liberar magias do que vocações, pois podem haver bugs e dá mais trabalho para remover esta se o player conseguir fazer logout e etc..


-edit²-

Tópico abandonado?

Posso solicitar o 'fechamento'?

Editado Novembro 17 por Adriano Swatt

18 de novembro de 2013 às 11:00

Desculpe, estive fora de casa por uns dias, então pode ser por storage mesmo, como que se faz?

gonorreiaswatG
18 de novembro de 2013 às 12:42

Você já tem as magias prontas?

Se tiver, poste-as aqui para que eu configure as mesmas para poder ser usadas somente se tiver tal storage.

Logo em seguida eu adiciono ao script que postei para adicionar storage quando "transformar" em Sennin.

 

Então, aguardo a postagem das magias.

20 de novembro de 2013 às 23:54
No caso desta é o amaterasu do sasuke, mas pode se com ela pois irei adicionar mais coisas além do sennin modo :)


local combat = createCombatObject()

setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)

setCombatParam(combat, COMBAT_PARAM_EFFECT,134)

setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -8.2, 1, -9.2, 1)


function onCastSpell(cid, var)

local position1 = {x=getThingPosition(getCreatureTarget(cid)).x+1, y=getThingPosition(getCreatureTarget(cid)).y, z=getThingPosition(getCreatureTarget(cid)).z}

doSendMagicEffect(position1, 79)

local efeito = 110

doSendMagicEffect(getThingPos(cid), efeito)

doCreatureSay(cid, "Amaterasu", TALKTYPE_MONSTER)

doCombat(cid, combat, var)

end
gonorreiaswatG
21 de novembro de 2013 às 08:50

Teste este abaixo.

Me avise do resultado.

local strg = 50078 -- este valor tem que ser o mesmo que o do script do Sennin, então se não alterou o que postei, deixe-o assim mesmo.
local position1 = {x=getThingPosition(getCreatureTarget(cid)).x+1, y=getThingPosition(getCreatureTarget(cid)).y, z=getThingPosition(getCreatureTarget(cid)).z}
local efeito = 110
    
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT,134)
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -8.2, 1, -9.2, 1)
 
function onCastSpell(cid, var)
    if getPlayerStorageValue(cid, strg) == 1 then
        doSendMagicEffect(position1, 79)
        doSendMagicEffect(getThingPos(cid), efeito)
        doCreatureSay(cid, "Amaterasu", TALKTYPE_MONSTER)
        doCombat(cid, combat, var)
    else
        doPlayerSendCancel(cid, "Voce precisa estar no modo Sennin para usar esta magia.")
    end
end

Boa sorte.

Editado Novembro 21 por Adriano Swatt

21 de novembro de 2013 às 14:05

achei 2 erros, o sennin está sem exausted e o amaterasu não está funcionando.

 

OBS: não apareceu nenhum erro no distro

gonorreiaswatG
21 de novembro de 2013 às 16:34

O Exhaust do Modo Sennin já está pronto.

 

 

 

local tempo = 5 -- Tempo em minutos para a duração
local repetindo = 1000 -- Tempo em milésimos entre um efeito e outro
local transform = {lookType = 25} -- aqui a LookType do outfit
local strg = 50078 -- aqui não precisa mexer
local strg_exhaust = 50079
local tempo_exhaust = 5 -- em minutos

local condition_outfit = createConditionObject(CONDITION_OUTFIT)
setConditionParam(condition_outfit, CONDITION_PARAM_OUTFIT, true)
setConditionParam(condition_outfit, CONDITION_PARAM_TICKS, -1)
addOutfitCondition(condition_outfit, transform)

local condition_haste = createConditionObject(CONDITION_HASTE)
setConditionParam(condition_haste, CONDITION_PARAM_TICKS, tempo * 60 * 1000)
setConditionFormula(condition_haste, 0.5, -34, 0.5, -34)

local condition_infight = createConditionObject(CONDITION_INFIGHT)
setConditionParam(condition_infight, CONDITION_PARAM_TICKS, -1)

    function onCastSpell(cid, var)
    if getPlayerStorageValue(cid, strg) == 1 then
        doPlayerSendCancel(cid, "Voce ja esta no modo Sennin.")
    else
    if getPlayerStorageValue(cid, strg_exhaust) - os.time() >= 0 then
        doPlayerSendCancel(cid, "Voce precisa esperar " .. getPlayerStorageValue(cid, strg_exhaust) - os.time() .. " segundos para usar novamente.")
    else
        doAddCondition(cid, condition_outfit)
        doAddCondition(cid, condition_haste)
        doAddCondition(cid, condition_infight)
        setPlayerStorageValue(cid, strg, 1)
        Effect(cid)
        addEvent(StopEffect, tempo * 60 * 1000, cid)
    end
  end
end

    function Effect(cid)
    if (isCreature(cid)) then
         if (getPlayerStorageValue(cid, strg) == 1) then
    local position = getCreaturePosition(cid)
    local efeito = CONST_ME_MAGIC_GREEN
        setPlayerStorageValue(cid, strg, 1)
        doSendMagicEffect(position, efeito)
    end
        addEvent(Effect, repetindo, cid)
    else
        return StopEffect(cid)
    end
end

    function StopEffect(cid)
    if (getPlayerStorageValue(cid, strg) == 1) then
        setPlayerStorageValue(cid, strg, 0)
        setPlayerStorageValue(cid, strg_exhaust, os.time() + tempo_exhaust * 60)
        doPlayerSendTextMessage(cid, 27, "Voce nao esta mais no modo Sennin.")
        doRemoveCondition(cid, CONDITION_OUTFIT)
        doRemoveCondition(cid, CONDITION_HASTE)
        doRemoveCondition(cid, CONDITION_INFIGHT)
      end
  return TRUE
end

 

 

Testado e 100% funcional.

 

Agora o da magia, nem magia em si está funcionando.

Testei do jeito que me mandou e não funciona, por isto deu erro quando adaptei o script.

 

Me envie a magia que deseja, funcionando, e eu adiciono o script para usar somente no modo Sennin.

 

-EDIT-

Agora o da magia está funcionando perfeitamente, eu que havia cometido um erro bobo aqui na hora de registrá-la.

E só funciona no modo Sennin, bom agora está tudo perfeito e testado.

A magia deve ficar assim:

 

 

local strg = 50078 -- este valor tem que ser o mesmo que o do script do Sennin, então se não alterou o que postei, deixe-o assim mesmo.
    
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT,134)
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -8.2, 1, -9.2, 1)
 
function onCastSpell(cid, var)
    if getPlayerStorageValue(cid, strg) == 1 then
local position1 = {x=getThingPosition(getCreatureTarget(cid)).x+1, y=getThingPosition(getCreatureTarget(cid)).y, z=getThingPosition(getCreatureTarget(cid)).z}
        doSendMagicEffect(position1, 79)
local efeito = 110
        doSendMagicEffect(getThingPos(cid), efeito)
        doCreatureSay(cid, "Amaterasu", TALKTYPE_MONSTER)
        doCombat(cid, combat, var)
    else
        doPlayerSendCancel(cid, "Voce precisa estar no modo Sennin para usar esta magia.")
    end
end

 

Como disse acima, tudo testado e funcionando perfeitamente.

 

Boa sorte.

Editado Novembro 21 por Adriano Swatt

21 de novembro de 2013 às 16:52

vou testa-la aqui novamente depois que eu chegar do inglês pois funcionava hehe