Ir para conteúdo
  • 0
Phineasz

Scripting Magias Que Podem Paralisar o Jogador

Pergunta

Phineasz    0
Phineasz

Alguém por favor, poderia adicionar uma função nessas magias que quando a pessoa tivesse x addon a magia pudesse paralisar o jogador? E outra que quando não tivesse o x addon full saia um efeito e quando tivesse trocasse o efeito da magia? Lembrando que não precisa estar usando o addon, só de ter ele full, a pessoa já obteria essa função na magia. Também que não iria paralisar toda hora que usar a magia, seria randômico. Obrigado desde já, rep+ para quem ajudar. Eu uso OTX versão do servidor 8.60

Link da Distro: http://www.mediafire.com/file/fhicdgigmijek35/Distro.rar/file

Link do Servidor: https://www.4shared.com/rar/ZOvKuGPYei/baiakinho.html

Exori Mas Frigo -> Paralisa o jogador. Addon Druid.

Spoiler

local combat = createCombatObject()

local meteor = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, 43)
setAttackFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 5, 5, 6, 12)

local arr = {
{0, 0, 0, 0, 0},
{0, 0, 1, 0, 0},
{0, 1, 3, 1, 0},
{0, 0, 1, 0, 0},
{0, 0, 0, 0, 0}
}

local area = createCombatArea(arr)
setCombatArea(combat, area)

local function meteorCast(p)
    doCombat(p.cid, p.combat, positionToVariant(p.pos))
end
local function stunEffect(cid)
    doSendMagicEffect(getThingPos(cid), CONST_ME_STUN)
end


function onTargetTile(cid, pos)
            local newpos = {x = pos.x + 7, y = pos.y - 6, z = pos.z}
            doSendDistanceShoot(newpos, pos, CONST_ANI_ICE)
            addEvent(meteorCast, 200, {cid = cid,pos = pos, combat = meteor})
end

setCombatCallback(combat, CALLBACK_PARAM_TARGETTILE, "onTargetTile")

function onCastSpell(cid, var)
local storage = 15234
if getPlayerStorageValue(cid, storage) == -1 then
doPlayerSendTextMessage(cid,22, "Voce precisa concluir a quest para usar a magia")
doSendMagicEffect(getCreaturePosition(cid), 4)         
return true
end
return doCombat(cid, combat, var)
end

Exori Mas Tera -> Paralisa o jogador. Addon Druid.

Spoiler

local combat = createCombatObject()

local meteor = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_EARTHDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, 45)
setAttackFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 5, 5, 6, 12)

local arr = {
{0, 0, 0, 0, 0},
{0, 0, 1, 0, 0},
{0, 1, 3, 1, 0},
{0, 0, 1, 0, 0},
{0, 0, 0, 0, 0}
}

local area = createCombatArea(arr)
setCombatArea(combat, area)

local function meteorCast(p)
    doCombat(p.cid, p.combat, positionToVariant(p.pos))
end
local function stunEffect(cid)
    doSendMagicEffect(getThingPos(cid), CONST_ME_STUN)
end


function onTargetTile(cid, pos)
            local newpos = {x = pos.x + 7, y = pos.y - 6, z = pos.z}
            doSendDistanceShoot(newpos, pos, CONST_ANI_EARTH)
            addEvent(meteorCast, 200, {cid = cid,pos = pos, combat = meteor})
end

setCombatCallback(combat, CALLBACK_PARAM_TARGETTILE, "onTargetTile")

function onCastSpell(cid, var)
local storage = 15234
if getPlayerStorageValue(cid, storage) == -1 then
doPlayerSendTextMessage(cid,22, "Voce precisa concluir a quest para usar a magia")
doSendMagicEffect(getCreaturePosition(cid), 4)         
return true
end
return doCombat(cid, combat, var)
end

Exori Mas Flam -> Paralisa o jogador. Addon Sorc.

Spoiler

local combat = createCombatObject()

local meteor = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, 6)
setAttackFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 5, 5, 6, 12)

local arr = {
{0, 0, 0, 0, 0},
{0, 0, 1, 0, 0},
{0, 1, 3, 1, 0},
{0, 0, 1, 0, 0},
{0, 0, 0, 0, 0}
}

local area = createCombatArea(arr)
setCombatArea(combat, area)

local function meteorCast(p)
    doCombat(p.cid, p.combat, positionToVariant(p.pos))
end
local function stunEffect(cid)
    doSendMagicEffect(getThingPos(cid), CONST_ME_STUN)
end


function onTargetTile(cid, pos)
            local newpos = {x = pos.x - 7, y = pos.y - 6, z = pos.z}
            doSendDistanceShoot(newpos, pos, CONST_ANI_FIRE)
            addEvent(meteorCast, 200, {cid = cid,pos = pos, combat = meteor})
end

setCombatCallback(combat, CALLBACK_PARAM_TARGETTILE, "onTargetTile")

function onCastSpell(cid, var)
local storage = 15234
if getPlayerStorageValue(cid, storage) == -1 then
doPlayerSendTextMessage(cid,22, "Voce precisa concluir a quest para usar a magia")
doSendMagicEffect(getCreaturePosition(cid), 4)         
return true
end
return doCombat(cid, combat, var)
end

Exori Mais Vis -> Paralisa o jogador. Addon Sorc.

Spoiler

local combat = createCombatObject()

local meteor = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, 40)
setAttackFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 5, 5, 6, 12)

local arr = {
{0, 0, 0, 0, 0},
{0, 0, 1, 0, 0},
{0, 1, 3, 1, 0},
{0, 0, 1, 0, 0},
{0, 0, 0, 0, 0}
}

local area = createCombatArea(arr)
setCombatArea(combat, area)

local function meteorCast(p)
    doCombat(p.cid, p.combat, positionToVariant(p.pos))
end
local function stunEffect(cid)
    doSendMagicEffect(getThingPos(cid), CONST_ME_STUN)
end


function onTargetTile(cid, pos)
            local newpos = {x = pos.x - 7, y = pos.y - 6, z = pos.z}
            doSendDistanceShoot(newpos, pos, CONST_ANI_ENERGY)
            addEvent(meteorCast, 200, {cid = cid,pos = pos, combat = meteor})
end

setCombatCallback(combat, CALLBACK_PARAM_TARGETTILE, "onTargetTile")

function onCastSpell(cid, var)
local storage = 15234
if getPlayerStorageValue(cid, storage) == -1 then
doPlayerSendTextMessage(cid,22,"Voce precisa concluir a quest para usar a magia")
doSendMagicEffect(getCreaturePosition(cid), 4)         
return true
end
return doCombat(cid, combat, var)
end

Exori Mas San -> Muda o efeito. Addon Assassin.

Spoiler

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TARGETCASTERORTOPMOST, true)
setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, true)
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_HOLYDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HOLYAREA)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_HOLY)
setAttackFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 15, 18, 21, 25)

local arr = {
    {0, 1, 0},
    {1, 3, 1},
    {0, 1, 0},
}

local area = createCombatArea(arr)
setCombatArea(combat, area)

function onCastSpell(cid, var)
local storage = 15234
if getPlayerStorageValue(cid, storage) == -1 then
doPlayerSendTextMessage(cid,22, "Voce precisa concluir a quest para usar a magia")
doSendMagicEffect(getCreaturePosition(cid), 4)         
return true
end
return doCombat(cid, combat, var)
end

Editado por Phineasz

Compartilhar este post


Link para o post

9 respostass a esta questão

Recommended Posts

  • 1
TheRatazana    8
TheRatazana

Bom, ela não está da maneira como mandei. Porém não faz sentido não estar dando damage se o doCombat está ok. Tente comparar com alguns spells da sua distro, se estiver realmente tudo bem parecido, então é algum outro fator atrapalhando. Tente também fazer o doCombat direto, sem agendar um evento, pra ver se seria esse o problema

Compartilhar este post


Link para o post
  • 0
TheRatazana    8
TheRatazana

Não sei se vai funcionar certinho, porque eu usei a source do global 8.60 pra me basear. Mas acho que seria isso:

local combat = createCombatObject()

local meteor = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, 6)
setAttackFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 5, 5, 6, 12)

local arr = {
{0, 0, 0, 0, 0},
{0, 0, 1, 0, 0},
{0, 1, 3, 1, 0},
{0, 0, 1, 0, 0},
{0, 0, 0, 0, 0}
}

local area = createCombatArea(arr)
setCombatArea(combat, area)

-- Condição para aplicar o paralyze quando o caster tiver addon full
local paralyze = createConditionObject(CONDITION_PARALYZE)
setConditionParam(paralyze, CONDITION_PARAM_TICKS, 20000)
setConditionFormula(paralyze, -1,  1,  -1,  1)

function hasAddonFull(cid, outfitID)
    -- Cheque se a função canPlayerWearOutfitId está disponível na sua distro
    return canPlayerWearOutfitId(cid, outfitID, 1) and canPlayerWearOutfitId(cid, outfitID, 2)
end

local function meteorCast(p)
    if hasAddonFull(p.cid, --[[outfitId = ]] 130) and hasAddonFull(p.cid, --[[outfitId = ]] 138) then
        -- O jogador tem o addon full, paralisar em area e usar efeito diferente
        if math.random(0, 100000) < 50000 * 1000 then -- 50% chance de paralisar
            doCombatAreaCondition(p.cid, p.pos, area, paralyze, CONST_ME_STUN)
        end
        setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_EXPLOSION)
    else
        -- O jogador não tem o addon full, apenas usar o efeito normal e realizar o combat
        setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_FIRE)
    end

    doCombat(p.cid, p.combat, positionToVariant(p.pos))
end

function onTargetTile(cid, pos)
    local newpos = {x = pos.x - 7, y = pos.y - 6, z = pos.z}
    doSendDistanceShoot(newpos, pos, CONST_ANI_FIRE)
    addEvent(meteorCast, 200, {cid = cid,pos = pos, combat = meteor})
end

setCombatCallback(combat, CALLBACK_PARAM_TARGETTILE, "onTargetTile")

function onCastSpell(cid, var)
    return doCombat(cid, combat, var)
end

Seria só mudar o outfitId e os efeitos do setCombatParam pra cada spell que você quer.

 

Ps: Quando for perguntar seja objetivo e poste sempre detalhes da distro que você usa, e se possível um link pra source dela.

Compartilhar este post


Link para o post
  • 0
Phineasz    0
Phineasz

@TheRatazana Editei o Tópico

image.png.415503c362b2fbad1af90ce01d7a994a.png

Compartilhar este post


Link para o post
  • 0
TheRatazana    8
TheRatazana

Realmente esqueci que não podia isso. No caso então você vai ter que fazer dois combates iguais, mas com efeitos diferentes (COMBAT_PARAM_EFFECT)

 

Em todo caso, remova ambos setCombatParam(combat, COMBAT_PARAM_EFFECT da função meteorCast e veja como funciona e o que falta. Pra saber se estamos com o mesmo pensamento em como deveria funcionar

Compartilhar este post


Link para o post
  • 0
Phineasz    0
Phineasz

@TheRatazana Funcionou não, mesmo erro

Compartilhar este post


Link para o post
  • 0
TheRatazana    8
TheRatazana

Seja mais específico. Diga qual é o erro. Se for sobre o setCombatParam então não tirou os que eu disse, pois são os únicos que estão dentro de uma função, o que realmente não é permitido.

Compartilhar este post


Link para o post
  • 0
Phineasz    0
Phineasz

@TheRatazana Eu esqueci de tirar um, desculpa, o erro sumiu, porém quando usa a magia ela não hita

Compartilhar este post


Link para o post
  • 0
TheRatazana    8
TheRatazana

Não faz muito sentido isso, porque sempre que a meteorCast for chamada irá fazer o doCombat. Poderia postar só a sua meteorCast?

Compartilhar este post


Link para o post
  • 0
Phineasz    0
Phineasz

@TheRatazana Creio que seja isso né?

local function meteorCast(p)
    doCombat(p.cid, p.combat, positionToVariant(p.pos))
end
local function stunEffect(cid)
    doSendMagicEffect(getThingPos(cid), CONST_ME_STUN)
end


function onTargetTile(cid, pos)
            local newpos = {x = pos.x - 7, y = pos.y - 6, z = pos.z}
            doSendDistanceShoot(newpos, pos, CONST_ANI_FIRE)
            addEvent(meteorCast, 200, {cid = cid,pos = pos, combat = meteor})
end

 

Compartilhar este post


Link para o post
Visitante
Este tópico está impedido de receber novos posts.
  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×