Ir para conteúdo

Pergunta

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

 

Link para o comentário
https://xtibia.com/forum/topic/242638-resolvido-transformar-esse-talkaction-em-spell/
Compartilhar em outros sites

12 respostass a esta questão

Posts Recomendados

  • 0
  Em 27/10/2016 em 12:48, Poccnn disse:

E qual o problema de manter isso em talkaction?

Expand  

 

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.

  • 0

script:

  Mostrar conteúdo oculto

 

Tag no spells.xml 

  Mostrar conteúdo oculto

 

Se der erro ou qualquer coisa posta ai.

 

Editado por Hi im Mell
  • 0
  Em 27/10/2016 em 14:35, 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.

Expand  

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.

  • 0
  Em 27/10/2016 em 16:33, Hi im Mell disse:

script:

  Mostrar conteúdo oculto

 

Tag no spells.xml 

  Mostrar conteúdo oculto

 

Se der erro ou qualquer coisa posta ai.

 

Expand  

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>

 

  Em 28/10/2016 em 01:15, 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.

Expand  

 

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

  • 0

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.

  • 0
  Em 07/12/2016 em 19:19, 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.

Expand  

 

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?

  • 0

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

 

Editado por zipter98
  • 0
  Em 08/12/2016 em 17:15, zipter98 disse:

 

Expand  

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.

  • 0
  Em 08/12/2016 em 17:15, 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.

 

Expand  

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.

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