(resolvido) Transformar esse Talkaction em Spell

gabriel28
em Resolvidos

gabriel28

avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 26/08/10Posts: 429Gênero: MasculinoChar no Tibia: Gabriel Rookgaardian

Como o título já diz, gostaria que alguém transformasse esse talkaction em uma spell.

Segue o script:

 

local storage = 79845 --storage para o exhaustionlocal tempo = 5 --em segundoslocal monsters = {[1] = {summons = {["rat"] = {level = 10, mana = 20}, ["dragon"] = {level = 100, mana = 200} }, maxSummons = 2  },[2] = {summons = {["rat"] = {level = 10, mana = 20}, ["dragon"] = {level = 100, mana = 200} }, maxSummons = 4  },[5] = {summons = {["rat"] = {level = 10, mana = 20}, ["dragon"] = {level = 100, mana = 200} }, maxSummons = 4  },[6] = {summons = {["rat"] = {level = 10, mana = 20}, ["dragon"] = {level = 100, mana = 200} }, maxSummons = 6  },[9] = {summons = {["rat"] = {level = 10, mana = 20}, ["dragon"] = {level = 100, mana = 200} }, maxSummons = 6  },[10] = {summons = {["rat"] = {level = 10, mana = 20}, ["dragon"] = {level = 100, mana = 200} }, maxSummons = 8  },}function onSay(cid, words, param, channel)if exhaustion.check(cid, storage) thendoPlayerSendTextMessage(cid, 22, "You are exhausted.")return trueend    --Player Status    local playerpos = getPlayerPosition(cid)    param = string.lower(param)    local loop = 0      function checkSummon()        for k, v in pairs(monsters[getPlayerVocation(cid)].summons) do            if param == k then                return true            end        end        return false    end      if not checkSummon() then        doPlayerSendCancel(cid, "You can't summon this monster.")        return true    end      for k, v in pairs(monsters[getPlayerVocation(cid)].summons) do        if (param == k) then            if (monsters[getPlayerVocation(cid)]) and #getCreatureSummons(cid) >= monsters[getPlayerVocation(cid)].maxSummons then                return doPlayerSendCancel(cid, "Você já tem sumons demais.")            else            --Summon                if getPlayerLevel(cid) < v.level then                    return doPlayerSendCancel(cid, "Você não possui level suficiente.")                elseif getCreatureMana(cid) < v.mana then                    return doPlayerSendCancel(cid, "Você não possui mana suficiente.")                end                    doConvinceCreature(cid, doCreateMonster(param, playerpos))                    doPlayerAddMana(cid, -v.mana, false)                    exhaustion.set(cid, storage, tempo)                    doSendMagicEffect(playerpos, 2)                return true            end        end    end    return trueend

 

gabriel28

avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 26/08/10Posts: 429Gênero: MasculinoChar no Tibia: Gabriel Rookgaardian

up

Poccnn

Enquanto houver armas no mundo, haverá guerra!
avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 07/03/16Posts: 1418Gênero: Masculino

E qual o problema de manter isso em talkaction?

"Deus é amor, mas matou 99,99999% de todos os seres viventes do mundo com o diluvio.

Deus é misericórdia, mas condena as pessoas ao tormento eterno do inferno.

Deus é pai, mas abandonou seus filhos a servidão.

Deus é vida, mas condenou a humanidade a morte.

Deus é o senhor. Senhor das guerras, da morte, do ódio.

 

Ninguém que ame a humanidade, mataria 99,99999% da população, não só de humanos, bem como dos demais animais, por amor. Isso não é amor, é doença, psicose de um sádico que gosta de ver sua 'criação' sofrer e ainda quer 'pagar' de misericordioso, de deus amor.

 

Não quero seu amor; não quero sua misericórdia, não quero ser seu filho, não quero sua vida, não quero que seja meu senhor.

Tu és um psicótico, doente, hipócrita, assassino; não me venha querer se passar por bondoso, amoroso, misericordioso."

gabriel28

avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 26/08/10Posts: 429Gênero: MasculinoChar no Tibia: Gabriel Rookgaardian
1 hora atrás, Poccnn disse:

E qual o problema de manter isso em talkaction?

 

No server que estou montando, todas as spells serão compradas. E essa ai será comprada em um NPC que terá que fazer uma quest pra falar com ele e poder compra-la junto com outras.

Hi im Mell

ARC!
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 16/08/16Posts: 95Gênero: Masculino

script:

Spoiler

function onCastSpell(cid, var)
local storage = 79845 --storage para o exhaustion
local tempo = 5 --em segundos

local monsters = {
[1] = {summons = {["rat"] = {level = 10, mana = 20}, ["dragon"] = {level = 100, mana = 200} }, maxSummons = 2  },
[2] = {summons = {["rat"] = {level = 10, mana = 20}, ["dragon"] = {level = 100, mana = 200} }, maxSummons = 4  },
[5] = {summons = {["rat"] = {level = 10, mana = 20}, ["dragon"] = {level = 100, mana = 200} }, maxSummons = 4  },
[6] = {summons = {["rat"] = {level = 10, mana = 20}, ["dragon"] = {level = 100, mana = 200} }, maxSummons = 6  },
[9] = {summons = {["rat"] = {level = 10, mana = 20}, ["dragon"] = {level = 100, mana = 200} }, maxSummons = 6  },
[10] = {summons = {["rat"] = {level = 10, mana = 20}, ["dragon"] = {level = 100, mana = 200} }, maxSummons = 8  },
}
if exhaustion.check(cid, storage) then
doPlayerSendTextMessage(cid, 22, "You are exhausted.")
return true
end

    --Player Status
    local playerpos = getPlayerPosition(cid)
    param = string.lower(param)
    local loop = 0
  
    function checkSummon()
        for k, v in pairs(monsters[getPlayerVocation(cid)].summons) do
            if param == k then
                return true
            end
        end
        return false
    end
  
    if not checkSummon() then
        doPlayerSendCancel(cid, "You can't summon this monster.")
        return true
    end
  
    for k, v in pairs(monsters[getPlayerVocation(cid)].summons) do
        if (param == k) then
            if (monsters[getPlayerVocation(cid)]) and #getCreatureSummons(cid) >= monsters[getPlayerVocation(cid)].maxSummons then
                return doPlayerSendCancel(cid, "Você já tem sumons demais.")
            else
            --Summon
                if getPlayerLevel(cid) < v.level then
                    return doPlayerSendCancel(cid, "Você não possui level suficiente.")
                elseif getCreatureMana(cid) < v.mana then
                    return doPlayerSendCancel(cid, "Você não possui mana suficiente.")
                end
                    doConvinceCreature(cid, doCreateMonster(param, playerpos))
                    doPlayerAddMana(cid, -v.mana, false)
                    exhaustion.set(cid, storage, tempo)
                    doSendMagicEffect(playerpos, 2)
                return true
            end
        end
    end
    return true
end
 

 

Tag no spells.xml 

Spoiler

    <instant name="NOME DA SPELL" words="nome da spell" direction="1" lvl="30" maglv="50"  mana="3000" soul="0" exhaustion="1" prem="0" enabled="1" script="LOCAL DO SCRIPT">
    </instant>

 

Se der erro ou qualquer coisa posta ai.

 

ARC! - Developer Company Games

Uma micro-empresa que trabalha com à criação/programação de jogos derivados e re-feitos.

 

Facebook ARC! Clique aqui

 

TOZ5opW.png

KNightmare Proj

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 19/10/16Posts: 18Gênero: Masculino
10 horas atrás, gabriel28 disse:

 

No server que estou montando, todas as spells serão compradas. E essa ai será comprada em um NPC que terá que fazer uma quest pra falar com ele e poder compra-la junto com outras.

mas dava so para colocar um valor de storage necessario para a talkaction, nem precisava transformar em spell, ao comprar era só mudar a storage.

gabriel28

avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 26/08/10Posts: 429Gênero: MasculinoChar no Tibia: Gabriel Rookgaardian
19 horas atrás, Hi im Mell disse:

script:

  Mostrar conteúdo oculto

function onCastSpell(cid, var)

local storage = 79845 --storage para o exhaustion

local tempo = 5 --em segundos

local monsters = {

[1] = {summons = {["rat"] = {level = 10, mana = 20}, ["dragon"] = {level = 100, mana = 200} }, maxSummons = 2  },

[2] = {summons = {["rat"] = {level = 10, mana = 20}, ["dragon"] = {level = 100, mana = 200} }, maxSummons = 4  },

[5] = {summons = {["rat"] = {level = 10, mana = 20}, ["dragon"] = {level = 100, mana = 200} }, maxSummons = 4  },

[6] = {summons = {["rat"] = {level = 10, mana = 20}, ["dragon"] = {level = 100, mana = 200} }, maxSummons = 6  },

[9] = {summons = {["rat"] = {level = 10, mana = 20}, ["dragon"] = {level = 100, mana = 200} }, maxSummons = 6  },

[10] = {summons = {["rat"] = {level = 10, mana = 20}, ["dragon"] = {level = 100, mana = 200} }, maxSummons = 8  },

}

if exhaustion.check(cid, storage) then

doPlayerSendTextMessage(cid, 22, "You are exhausted.")

return true

end

    --Player Status

    local playerpos = getPlayerPosition(cid)

    param = string.lower(param)

    local loop = 0

  

    function checkSummon()

        for k, v in pairs(monsters[getPlayerVocation(cid)].summons) do

            if param == k then

                return true

            end

        end

        return false

    end

  

    if not checkSummon() then

        doPlayerSendCancel(cid, "You can't summon this monster.")

        return true

    end

  

    for k, v in pairs(monsters[getPlayerVocation(cid)].summons) do

        if (param == k) then

            if (monsters[getPlayerVocation(cid)]) and #getCreatureSummons(cid) >= monsters[getPlayerVocation(cid)].maxSummons then

                return doPlayerSendCancel(cid, "Você já tem sumons demais.")

            else

            --Summon

                if getPlayerLevel(cid) < v.level then

                    return doPlayerSendCancel(cid, "Você não possui level suficiente.")

                elseif getCreatureMana(cid) < v.mana then

                    return doPlayerSendCancel(cid, "Você não possui mana suficiente.")

                end

                    doConvinceCreature(cid, doCreateMonster(param, playerpos))

                    doPlayerAddMana(cid, -v.mana, false)

                    exhaustion.set(cid, storage, tempo)

                    doSendMagicEffect(playerpos, 2)

                return true

            end

        end

    end

    return true

end

 

 

Tag no spells.xml 

  Mostrar conteúdo oculto

    <instant name="NOME DA SPELL" words="nome da spell" direction="1" lvl="30" maglv="50"  mana="3000" soul="0" exhaustion="1" prem="0" enabled="1" script="LOCAL DO SCRIPT">

    </instant>

 

Se der erro ou qualquer coisa posta ai.

 

Deu esse erro:

..../sumon.lua:onCastSpell

Description:

..../sumon.lua:18: bad argument #1 to 'lower' <string expected, got nil>

stack traceback:

[C]: in function 'lower'

....sumon.lua:21: in fuction <data/spells/scripts/summon/sumon.lua:1>

 

11 horas atrás, KNightmare Proj disse:

mas dava so para colocar um valor de storage necessario para a talkaction, nem precisava transformar em spell, ao comprar era só mudar a storage.

 

Spell facilitaria minha vida, já que não sei mexer muito. 

zipter98

avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 20/09/12Posts: 2553Gênero: Masculino

Temos que levar em consideração o seguinte: numa talkaction, podemos usar o argumento param para especificar qual o monstro que o jogador deseja invocar. Em spells, entretanto, não temos o luxo que a talkaction nos proporciona. 

Naturalmente, permanecer uma talkaction seria mais fácil (bastaria, como já dito, manipular storages). Se, mesmo assim, você ainda quiser uma spell, podemos escrevê-la, apesar de talkaction ser mais viável para um tipo de código influenciado por um parâmetro no comando.

Não respondo PMs solicitando suporte. Já existem seções no fórum para isto.

gabriel28

avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 26/08/10Posts: 429Gênero: MasculinoChar no Tibia: Gabriel Rookgaardian
1 hora atrás, zipter98 disse:

Temos que levar em consideração o seguinte: numa talkaction, podemos usar o argumento param para especificar qual o monstro que o jogador deseja invocar. Em spells, entretanto, não temos o luxo que a talkaction nos proporciona. 

Naturalmente, permanecer uma talkaction seria mais fácil (bastaria, como já dito, manipular storages). Se, mesmo assim, você ainda quiser uma spell, podemos escrevê-la, apesar de talkaction ser mais viável para um tipo de código influenciado por um parâmetro no comando.

 

Mas se usar essa storage, mesmo assim talkaction não apareceria no spellbook, eu teria que criar uma magia não funcional com as mesmas características dessa talkaction, certo? Tipo, mesmo nome pra usar, mesma quantidade de mana, etc...

 

Tentei substituir essa parte: function onSay(cid, words, param, channel)

Por: function onCastSpell(cid, param)

E adicionei params="1" na tag da spell no xml, não da erro mas a magia não executa.

 

Sabe como resolver?

zipter98

avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 20/09/12Posts: 2553Gênero: Masculino

onCastSpell não possui um argumento responsável pelos parâmetros da fala. Por isso, as palavras-chaves limitam-se às configuradas na tag. 

Por condições como mana, level e classe encontrarem-se na tag, não vi necessidade de mantê-las no código.

Naturalmente, sem poder usar um parâmetro para especificar qual summon o jogador deseja, será um código por monstro.

local summon_name = "Rat"              --Nome do summon.local summon_count = {                 --[vocation_id] = max_summons,    [1] = 2,    [2] = 4,    [5] = 4,    [6] = 6,    [9] = 6,    [10] = 8,}function onCastSpell(cid)    local playerpos = getPlayerPosition(cid)      if #getCreatureSummons(cid) >= summon_count[getPlayerVocation(cid)] then        doPlayerSendCancel(cid, "Você já tem sumons demais.")        return false    end               doConvinceCreature(cid, doCreateMonster(summon_name, playerpos))    doSendMagicEffect(playerpos, 2)    return trueend

 

Não respondo PMs solicitando suporte. Já existem seções no fórum para isto.

gabriel28

avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 26/08/10Posts: 429Gênero: MasculinoChar no Tibia: Gabriel Rookgaardian
1 hora atrás, zipter98 disse:

 

Obrigado! Uma spell por monstro já está de ótimo tamanho, tive uma ideia do que fazer com isso.

Vou testar aqui e já posto o feedback, mas já vou te dar rep pela ajuda.

gabriel28

avatar
Visconde
Visconde

INFOS

Grupo: ViscondeRegistrado: 26/08/10Posts: 429Gênero: MasculinoChar no Tibia: Gabriel Rookgaardian
8 horas atrás, zipter98 disse:

onCastSpell não possui um argumento responsável pelos parâmetros da fala. Por isso, as palavras-chaves limitam-se às configuradas na tag. 

Por condições como mana, level e classe encontrarem-se na tag, não vi necessidade de mantê-las no código.

Naturalmente, sem poder usar um parâmetro para especificar qual summon o jogador deseja, será um código por monstro.

 

A spell funcionou, mas quando chegava no limite de summons, não sumonava nada, mas continuava gastando mana, mas resolvi trocando o return true por return false.

Obrigado.

Poccnn

Enquanto houver armas no mundo, haverá guerra!
avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 07/03/16Posts: 1418Gênero: Masculino

Caro membro, seu tópico foi movido de Otserv > Suporte Otserv para Suporte Otserv > Otserv > Pedidos e Dúvidas Resolvidos.

 

"Deus é amor, mas matou 99,99999% de todos os seres viventes do mundo com o diluvio.

Deus é misericórdia, mas condena as pessoas ao tormento eterno do inferno.

Deus é pai, mas abandonou seus filhos a servidão.

Deus é vida, mas condenou a humanidade a morte.

Deus é o senhor. Senhor das guerras, da morte, do ódio.

 

Ninguém que ame a humanidade, mataria 99,99999% da população, não só de humanos, bem como dos demais animais, por amor. Isso não é amor, é doença, psicose de um sádico que gosta de ver sua 'criação' sofrer e ainda quer 'pagar' de misericordioso, de deus amor.

 

Não quero seu amor; não quero sua misericórdia, não quero ser seu filho, não quero sua vida, não quero que seja meu senhor.

Tu és um psicótico, doente, hipócrita, assassino; não me venha querer se passar por bondoso, amoroso, misericordioso."