Ir para conteúdo
  • 0

[Resolvido] [Pedido] Heavy Slam e Passiva Iron Body


FlamesAdmin

Pergunta

Boa noite, gostaria de uma ajudinha para fazer esses 2 moves do PxG

 

Iron Body: ao usar essa passiva, ele não toma dano por x segundos e tem y chance de ativá-la.

YhN32Oc.gif

 

 

Heavy Slam: ao usar Heavy Slam, o oponente que estiver na área, é arremessado 2 sqm atrás.

fkACbqu.gif

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

1ª spell:

Isso é basicamente um Iron Defense, só que em forma de passiva, não é?

2ª spell:

Saberia dizer se esse "pulo" do pokémon é um effect, outfit ou o pokémon literalmente pula? E os oponentes na área são logo teleportados para trás ou são empurrados?

Link para o comentário
Compartilhar em outros sites

  • 0

Sim

Ele pula literalmente, são empurrados.

 

PS: no inicio da 2ª gif, ele estava com o Iron Body, não tem nada a ver com o Heavy Slam.

Editado por FlamesAdmin
Link para o comentário
Compartilhar em outros sites

  • 0

O Iron Body pode ser ativado quando, exatamente? Parece ser diferente das outras passivas, já que no segundo gif ele foi ativado sem o Bronzong receber dano.

Link para o comentário
Compartilhar em outros sites

  • 0

Iron Body:

exp2.0.lua:

Em baixo de:

if damageCombat == GROUNDDAMAGE then
    if isInArray(specialabilities["levitate"], getCreatureName(cid)) then
        valor = 0                      
    end
end

coloque:

if getCreatureName(cid) == ironBody.name and getPlayerStorageValue(cid, 2818) < os.time() and math.random(1, 100) <= ironBody.chance then
    doSetCreatureOutfit(cid, {lookType = ironBody.outfit}, ironBody.duration * 1000)
    setPlayerStorageValue(cid, 9658783, 1)
    setPlayerStorageValue(cid, 2818, os.time() + ironBody.cooldown)
    addEvent(function()
        if isCreature(cid) then
            doRemoveCondition(cid, CONDITION_OUTFIT)
            setPlayerStorageValue(cid, 9658783, -1)
        end
    end, ironBody.duration * 1000)
end
Em goback.lua (actions), abaixo de:
doCreatureSay(cid, mgo, TALKTYPE_SAY)
coloque:
if pokename == ironBody.name then
    doSetCreatureOutfit(pk, {lookType = ironBody.outfit}, ironBody.duration * 1000)
    setPlayerStorageValue(pk, 9658783, 1)
    setPlayerStorageValue(pk, 2818, os.time() + ironBody.cooldown)
    addEvent(function()
        if isCreature(pk) then
            doRemoveCondition(pk, CONDITION_OUTFIT)
            setPlayerStorageValue(pk, 9658783, -1)
        end
    end, ironBody.duration * 1000)
end
Depois, em configuration.lua:
ironBody = {
    name = "Bronzong",    --Nome do pokémon.
    outfit = xxx,         --Outfit.
    duration = 5,         --Duração.
    chance = 35,          --Chance, em %, de ativar a passiva.
    cooldown = 15,        --Cooldown para usá-la novamente.
}
E você tem certeza absoluta que o pulo do Bronzong não é um efeito? Conferiu no client da PxG?
Se for literalmente um salto, já imagino como foi feito. E, assim, adianto: será necessária a criação de um item invisível, com a propriedade do jogador poder passar por cima dele e sofrer uma elevação (como os bancos e parcels, sabe?).
Editado por zipter98
Link para o comentário
Compartilhar em outros sites

  • 0

 

Iron Body:

exp2.0.lua:

Em baixo de:

if damageCombat == GROUNDDAMAGE then
    if isInArray(specialabilities["levitate"], getCreatureName(cid)) then
        valor = 0                      
    end
end

coloque:

if getCreatureName(cid) == ironBody.name and getPlayerStorageValue(cid, 2818) < os.time() and math.random(1, 100) <= ironBody.chance then
    doSetCreatureOutfit(cid, ironBody.outfit, ironBody.duration * 1000)
    setPlayerStorageValue(cid, 9658783, 1)
    setPlayerStorageValue(cid, 2818, os.time() + ironBody.cooldown)
    addEvent(function()
        if isCreature(cid) then
            doRemoveCondition(cid, CONDITION_OUTFIT)
            setPlayerStorageValue(cid, 9658783, -1)
        end
    end, ironBody.duration * 1000)
end
Em goback.lua (actions), abaixo de:
doCreatureSay(cid, mgo, TALKTYPE_SAY)
coloque:
if pokename == ironBody.name then
    doSetCreatureOutfit(pk, ironBody.outfit, ironBody.duration * 1000)
    setPlayerStorageValue(pk, 9658783, 1)
    setPlayerStorageValue(pk, 2818, os.time() + ironBody.cooldown)
    addEvent(function()
        if isCreature(pk) then
            doRemoveCondition(pk, CONDITION_OUTFIT)
            setPlayerStorageValue(pk, 9658783, -1)
        end
    end, ironBody.duration * 1000)
end
Depois, em configuration.lua:
ironBody = {
    name = "Bronzong",    --Nome do pokémon.
    outfit = xxx,         --Outfit.
    duration = 5,         --Duração.
    chance = 35,          --Chance, em %, de ativar a passiva.
    cooldown = 15,        --Cooldown para usá-la novamente.
}
E você tem certeza absoluta que o pulo do Bronzong não é um efeito? Conferiu no client da PxG?
Se for literalmente um salto, já imagino como foi feito. E, assim, adianto: será necessária a criação de um item invisível, com a propriedade do jogador poder passar por cima dele e sofrer uma elevação (como os bancos e parcels, sabe?).

 

Nao e um efeito tem outras magias que faz isso exemplo o Earthquake o pokemon atacado que fica tando o pulo.

Link para o comentário
Compartilhar em outros sites

  • 0

Como o @nociam disse, tem outras magias que o pokemon fica 'pulando'.

No Earthquake, o oponente que está na área dele que fica 'pulando'.

Se for possível fazer esse 'pulo', td bem, mais se não for, só deixe um pequeno delay para que o efeito saia.

 

#Edit

Quando solta o Bronzong.

[26/06/2015 18:35:20] [Error - Action Interface] 
[26/06/2015 18:35:20] data/actions/scripts/goback.lua:onUse
[26/06/2015 18:35:20] Description: 
[26/06/2015 18:35:20] attempt to index a number value
[26/06/2015 18:35:20] stack traceback:
[26/06/2015 18:35:20] 	[C]: in function 'doSetCreatureOutfit'
[26/06/2015 18:35:20] 	data/actions/scripts/goback.lua:257: in function <data/actions/scripts/goback.lua:11>

Quando os selvagens atacam ele:

[26/06/2015 18:36:16] [Error - CreatureScript Interface] 
[26/06/2015 18:36:16] data/creaturescripts/scripts/exp2.0.lua:onStatsChange
[26/06/2015 18:36:16] Description: 
[26/06/2015 18:36:16] attempt to index a number value
[26/06/2015 18:36:16] stack traceback:
[26/06/2015 18:36:16] 	[C]: in function 'doSetCreatureOutfit'
[26/06/2015 18:36:16] 	data/creaturescripts/scripts/exp2.0.lua:558: in function <data/creaturescripts/scripts/exp2.0.lua:65>
Editado por FlamesAdmin
Link para o comentário
Compartilhar em outros sites

  • 0

Posso ver como ficou a configuração da tabela? E ela está em configuration.lua, certo?

Sobre o pulo, é como eu disse: aquele item terá de ser criado.

Link para o comentário
Compartilhar em outros sites

  • 0

Posso ver como ficou a configuração da tabela? E ela está em configuration.lua, certo?

Sobre o pulo, é como eu disse: aquele item terá de ser criado.

Sim, coloquei em configutarion

ironBody = {
    name = "Bronzong",    --Nome do pokémon.
    outfit = 1554,         --Outfit.
    duration = 5,         --Duração.
    chance = 35,          --Chance, em %, de ativar a passiva.
    cooldown = 15,        --Cooldown para usá-la novamente.
}

Só me corrige, eu coloquei ela láááá embaixo perto das passivesChances = {, esta certo ?

Link para o comentário
Compartilhar em outros sites

  • 0

Agora sim. Sem erro algum agora :D

2jIIkR6.gif

 

Heavy Slam

Me diz o que tem que ser feito nesse 'item invisível' para o oponente dar esse 'pulo'.

Editado por FlamesAdmin
Link para o comentário
Compartilhar em outros sites

  • 0

As configurações e atributos no programa, não sei dizer. Entretanto, pegue como base um banco (porém, neste caso, a sprite será "invisível"). O necessário é que o jogador possa passar por cima do item e sofrer uma elevação.

Editado por zipter98
Link para o comentário
Compartilhar em outros sites

  • 0

As configurações e atributos no programa, não sei dizer. Entretanto, pegue como base um banco (porém, neste caso, a sprite será "invisível"). O necessário é que o jogador possa passar por cima do item e sofrer uma elevação.

Ok irei fazer aqui.

@zipter

Nada ainda do código?

Link para o comentário
Compartilhar em outros sites

  • 0

Já terminei faz tempo, só estou esperando você avisar que criou o item.

Certamente não ficou igual a PxG, porque, caso tenham usado esse método, deve ter demorado um bom tempo para achar o tempo ideal para representar um pulo "perfeito" (como o da gif). E, sinceramente, não estava com paciência de ficar procurando tal tempo.

Função de pulo:

function jump(cid, rounds)
    doChangeSpeed(cid, -getCreatureSpeed(cid))
    doCreatureSetNoMove(cid, true)
    for i = 1, rounds do
        addEvent(function()
            if isCreature(cid) then
                local pos = getThingPos(cid)
                local item = doCreateItem(ITEM_INVISIVEL, 1, pos)
                addEvent(function()
                    local it = getTileItemById(pos, ITEM_INVISIVEL).uid
                    if it > 0 then
                        doRemoveItem(it)
                    end
                    if i == rounds then
                        doRegainSpeed(cid)
                        doCreatureSetNoMove(cid, false)
                    end
                end, rounds == 1 and 200 or (i + 2) * 100)
            end
        end, i * (rounds == 1 and 200 or 100))
    end
end
Use jump(cid, 1) para um pulo de altura "1" (como o causado pelo Earthquake), e jump(cid, 2) para pulos como do Heavy Slam.
Código do Heavy Slam:
local config = {
    areas = {area1, area2},        --Áreas, em ordem de execução.
    effect = 160,                  --Efeito.
    combat = NORMALDAMAGE,         --Elemento.
}
local function doPushCreature(target, cid)
    if target > 0 then
        if not isNpc(target) then
            local position = getThingPosition(cid)
            local fromPosition = getThingPosition(target)
            local x = ((fromPosition.x - position.x) < 0 and -1 or ((fromPosition.x - position.x) == 0 and 0 or 1))
            local y = ((fromPosition.y - position.y) < 0 and -1 or ((fromPosition.y - position.y) == 0 and 0 or 1))
            local toPosition = {x = fromPosition.x + x, y = fromPosition.y + y, z = fromPosition.z}
            if doTileQueryAdd(target, toPosition) == 1 and getTileInfo(toPosition).house == false then
                doTeleportThing(target, toPosition, true)
            end
        end
    end
end
jump(cid, 2)
addEvent(function()
    for i = 0, #config.areas - 1 do
        addEvent(function()
            local pos = getPosfromArea(cid, config.areas[i + 1])
            doMoveInArea2(cid, config.effect, config.areas[i + 1], config.combat, min, max)
            for j = 1, #pos do
                local pid = getTopCreature(pos[j]).uid
                if ehMonstro(pid) then
                    doPushCreature(pid, cid)
                elseif isSummon(pid) then
                    local master = getCreatureMaster(pid)
                    if isSummon(cid) then
                        if getPlayerStorageValue(master, 52480) >= 1 and getPlayerStorageValue(master, 52481) >= 0 then
                            local masterCid = getCreatureMaster(cid)
                            if isDuelingAgainst(masterCid, master) then
                                doPushCreature(pid, cid)
                            end
                        end
                    else
                        doPushCreature(pid, cid)
                    end
                end
            end
        end, i * 230)
    end
end, 650)
Editado por zipter98
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...