Ir para conteúdo
  • Cadastre-se

(Resolvido)[Ajuda Urgente] Itens que fazer as skills


Ir para solução Resolvido por Wise,

Posts Recomendados

Boa noite, me desculpem se estiver na área errada!.

 

 

Bom galera, o título do tópico não especificou muito bem o que eu quero, mas enfim, é o seguinte, estou montando um servidor sem vocações, isso mesmo! todos começarão com a mesma vocação  e vão permanecer assim, quero que o jogador monte sua build de acordo com equips, 

 

ex :  se eu usar rapier vou ganhar bonus de atk speed, o mesmo acontece usando equipamentos leves como couro etc...

 

Até ai tudo bem,  mas o meu problema são as skills ( magias ) , peço encarecidamente que alguém me ajude com isso !!!  eu gostaria que quando eu usasse uma certa arma, ela me desse uma spell, e que essa spell fosse removida quando eu tirasse a arma..!    conseguiram entender ?  um exemplo :

 

ex :  usando rapier, vou ganhar skills de sangramento, usando shields buffs de shielding, usando swords, magias com sword, e assim vai...., ps : isso dependendo da skill também, então se eu usar o exemplo da rapier,   vamos supor que eu estou usando ela e tenho uma skill de ataque e uma de sangramento, mas a de sangramento só vou poder usar quando atingir uma certa skill com a rapier.

 

 

sei que ficou um pouco confuso, mas tenho certeza que alguem vai conseguir me ajudar   :P , por favor, simplifiquem o máximo, pois sou iniciante! , muiiito obrigado, aguardo feedback :* .

ochg.jpg

 

 

Link para o post
Compartilhar em outros sites
eu gostaria que quando eu usasse uma certa arma, ela me desse uma spell, e que essa spell fosse removida quando eu tirasse a arma

Um detalhe ou outro ficou um tanto quanto confuso, então me avise se eu não entendi muito bem o que você quis dizer.

Se por exemplo, todos os rings habilitassem determinada spell, então você poderia fazer uma checagem do slot antes do callback da mesma:

if getPlayerSlotItem(cid, CONST_SLOT_RING).uid < 1 then
    doPlayerSendCancel(cid, "You can't cast the spell without using a ring.")
    return false
end

Se forem spells pra itens distintos, você pode fazer o uso de storages. Criando movements com callback de onEquip e onDeEquip que atribuam ao player um valor dessas storages (quando ele equipar/remover o item).

Depois é só fazer a checagem do valor da storage no callback da spell.

Exemplo:

movement script:

local stor = 12345 -- storage

function onEquip(cid, item, slot)
	setPlayerStorageValue(cid, stor, 1)
	return true
end
 
function onDeEquip(cid, item, slot)
	setPlayerStorageValue(cid, stor, -1)
	return true
end

Checagem na spell light healing (exura):

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_HEALING)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false)
setCombatParam(combat, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE)
setHealingFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 5, 5, 1.5, 2)

function onCastSpell(cid, var)
    local stor = 12345 -- storage
    if getPlayerStorageValue(cid, stor) < 1 then
        doPlayerSendCancel(cid, "You can't cast the spell without using the item that allows it.")
        return false
    end
        return doCombat(cid, combat, var)
end
Editado por Suicide (veja o histórico de edições)

The corrupt fear us.

The honest support us.

The heroic join us.

Link para o post
Compartilhar em outros sites

me desculpe mesmo pela confusão kkkk , mas é isso mesmo,  uma determinada spell , habilitada pelo uso do item equipado! 

não entendo muito de storages, mas vamos lá!

 

Pelo que eu entendi ( sou leigo, perdão ) :

 

Eu adiciono uma nova storage, que vai ter um número ' x x x x '

e nela, as funções de equipado e desequipado .

 

function onEquip(cid, item, slot)
    setPlayerStorageValue(cid, stor, 1) < esse é o valor de equipado

function onDeEquip(cid, item, slot)
    setPlayerStorageValue(cid, stor, -1e esse o de desequipado

 

Quando eu for criar uma nova spell , por exemplo, eu vou adicionar a linha:

 

function onCastSpell(cid, var)
    local stor = 'x x x x' --  NÚMERO DA STORAGE
    
if getPlayerStorageValue(cid, stor) < 1 <<  Checagem pra ver se está equipado ( se estiver ,funciona corretamente ) 

 

doPlayerSendCancel(cid, "You can't cast the spell without using the item that allows it.")    < ( Caso não esteja, a spell não funciona e essa mensagem é exibida ) 
   

 

desculpe se fiz confusão mais uma vez!! mas só queria confirmar se é assim que funciona, muito obrigado :D

ochg.jpg

 

 

Link para o post
Compartilhar em outros sites
  • Solução
Eu adiciono uma nova storage, que vai ter um número ' x x x x ' e nela, as funções de equipado e desequipado .

Você cria um movement script que atribui ao player determinado valor de uma storage ao equipar/remover o item de determinado slot.

local stor = 12345 -- storage

function onEquip(cid, item, slot)
	setPlayerStorageValue(cid, stor, 1) -- já que é no callback de equipar, ele recebe o valor de ID 1 (como sendo positivo para a checagem do uso da spell)
	return true
end
 
function onDeEquip(cid, item, slot)
	setPlayerStorageValue(cid, stor, -1) -- ao remover o item, ele recebe o valor de ID -1 (como sendo negativo para a checagem do uso da spell)
	return true
end

 

Configure as tags como movevents Equip / DeEquip.

Ex:

<movevent type="Equip" itemid="ITEMID" slot="ring" event="script" value="filename.lua"/>
<movevent type="DeEquip" itemid="ITEMID" slot="ring" event="script" value="filename.lua"/>

 

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_HEALING)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false)
setCombatParam(combat, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE)
setHealingFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 5, 5, 1.5, 2)

function onCastSpell(cid, var)
    local stor = 12345 -- storage
    if getPlayerStorageValue(cid, stor) < 1 then -- checa se o valor da storage no player é menor que 1 (sendo que 1 seria o necessário)
        doPlayerSendCancel(cid, "You can't cast the spell without using the item that allows it.") -- a informação de que ele nao pode conjurar a spell é dada
        return false -- retorna false ao callback, resultando em não conjurar a spell
    end
        return doCombat(cid, combat, var) -- se a checagem acima for false, ou seja, maior ou igual a 1 (valor necessário), então significa que o player está com o item necessário equipado e a conjuração da spell é feita
end

Qualquer dúvida ou problema, é só relatar por aqui.

Editado por Suicide (veja o histórico de edições)

The corrupt fear us.

The honest support us.

The heroic join us.

Link para o post
Compartilhar em outros sites

Consegui !! fiz o teste, e não consegui usar a magia sem o item,funcionou do jeitinho que eu queria, agora só preciso encontrar o local pra mudar a storage dos players pra deixar no 1 e permitir a utilização da spell quando equipar!!

 

, me ajudou muito  mesmo !!! não sei como agradecer !! obrigado :D

ochg.jpg

 

 

Link para o post
Compartilhar em outros sites

agora só preciso encontrar o local pra mudar a storage dos players pra deixar no 1 e permitir a utilização da spell quando equipar!! , me ajudou muito mesmo !!! não sei como agradecer !! obrigado :D


Então, o valor 1 e -1 foram exemplos, você pode atribuir o id do valor da storage como preferir (desde que coincida com a estrutura de controle).
Não tem de quê, disponha ;]

The corrupt fear us.

The honest support us.

The heroic join us.

Link para o post
Compartilhar em outros sites

Bom.. não seria necessariamente usar "onEquip, onDeEquip", seria apenas criar uma condição simples nas spells.

 

if not isInArray({2160, 2158}, getPlayerSlotItem(cid, CONST_SLOT_LEFT).itemid) then
    doPlayerSendCancel(cid, "Voce não pode usar esta magia.")
    return false
end

 

Spell (Exura)

 

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_HEALING)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false)
setCombatParam(combat, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE)
setHealingFormula(combat, COMBAT_FORMULA_LEVELMAGIC, 5, 5, 1.5, 2)

function onCastSpell(cid, var)
    if not isInArray({2160, 2158}, getPlayerSlotItem(cid, CONST_SLOT_LEFT).itemid) then
        doPlayerSendCancel(cid, "Voce não pode usar esta magia.")
        return false
    end

    return doCombat(cid, combat, var)
end

Tony Araújo  ;D 

 

Link para o post
Compartilhar em outros sites

Ambos me ajudaram muito , muito obrigado!!!! esse metodo do Orochi foi mais simplificado pra mim que sou leigo kkkk! ficou mais fácil, é só alterar o id do item que eu quero,   muito obrigado pelo feedback gente, fico feliz de poder contar com gente competente como vocês,  :D.

ochg.jpg

 

 

Link para o post
Compartilhar em outros sites

Bom.. não seria necessariamente usar "onEquip, onDeEquip", seria apenas criar uma condição simples nas spells.


Sim, na verdade não seria uma condição e sim uma estrutura de controle com tabela.
Eu não havia pensado nisso já que fiz de imediato, obrigado.

The corrupt fear us.

The honest support us.

The heroic join us.

Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo