Ir para conteúdo

Featured Replies

Postado

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

 

 

Resolvido por Wise

Ir para solução
  • Respostas 10
  • Visualizações 1.5k
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • 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

  • 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) s

  • 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

Postado
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.

Postado
  • Autor

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

 

 

Postado
  • 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.

Postado
  • Autor

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

 

 

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

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo