Ir para conteúdo
  • Cadastre-se

(Resolvido)Script de Passiva para Players


Ir para solução Resolvido por xWhiteWolf,

Posts Recomendados

Gostaria de um Script para player de passiva, quando ele são atacados ele tem uma certa % de dar a passiva, que séria umas spells normal.
 

;D

Link para o post
Compartilhar em outros sites

se vc manjar de script dá pra editar esse meu script de dodge com o script do item soltar magia com uma spell qualquer e fazer do jeitinho que vc quer. (ta na minha assinatura)

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

se vc manjar de script dá pra editar esse meu script de dodge com o script do item soltar magia com uma spell qualquer e fazer do jeitinho que vc quer. (ta na minha assinatura)

 

Ver esse q eu fiz so pra test...

 

 

function onStatsChange(cid, attacker, type, combat, value)

  local chance = 10

    if isPlayer(attacker) then

      return true

    end

    if type == STATSCHANGE_HEALTHLOSS and  == true and isPlayer(cid) and isPlayer(attacker) then

    if math.random(1, 10) <= chance then

      doSendMagicEffect(getPlayerPosition(attacker), 13)

   

   end

   end

  return

end

Link para o post
Compartilhar em outros sites

Isso dai tá com erro.. olha só

function onStatsChange(cid, attacker, type, combat, value) --- função
  local chance = 10      ------ chance = 10
    if isPlayer(attacker) then   --- se for player o atacante então
      return true -------- cancelar o script
    end
    if type == STATSCHANGE_HEALTHLOSS and  == true and isPlayer(cid) and isPlayer(attacker) then   --- se o tipo de status ao ser mudado for perca de vida e o seu valor
----- seja true e eu for player e o atacante for player então:

    if math.random(1, 10) <= chance then --- se um numero aleatório entre 1 e 10 for menor ou igual a 10 então 
      doSendMagicEffect(getPlayerPosition(attacker), 13)  --- mandar efeito 13 na posição do atacante
   
   end 
   end
  return  --- return oque?? Tem que retornar algo
end

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

seria algo + OU - assim:
 


-------------- Magia a ser utilizada --- sem o function onCastSpell ---
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HITAREA)
setCombatParam(combat, COMBAT_PARAM_USECHARGES, true)


local area = createCombatArea(AREA_SQUARE1X1)
setCombatArea(combat, area)


function onGetFormulaValues(cid, level, skill, attack, factor)
local skillTotal, levelTotal = skill + attack, level / 5
return -(skillTotal * 1.5 + levelTotal), -(skillTotal * 2.5 + levelTotal)
end


setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues")
-------
local config = {
percent = 5,  -- porcentagem de sair a magia
valorvida = 100 --quanto deve ser o valor minimo de vida a perder para executar o script 
}




function onStatsChange(cid, attacker, type, combat, value)
if type == STATSCHANGE_HEALTHLOSS and value >= config.valorvida then
if math.random (1,config.percent) == 1 then
 doCombat(cid, combat, var)
end
return true
end
return true
end

Só tem que ver se isso daqui funciona: Lembra de adicionar a tag no creaturescripts.xml e de registrar o evento no login.lua


ps: peço desculpa pelo double post mas ia ficar mt ruim fazer tudo num post só

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

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

Olha esse que fiz agora

 

local chance = 1.0

function onStatsChange(cid, attacker, type, combat, value)
if type == STATSCHANGE_HEALTHLOSS then
if math.random(1, 10) <= chance then
doSendAnimatedText(getCreaturePos(cid), "Passive", 6)
return false
end
end
return true
end


deu esse erro
 

 

[Error - CreatureScript Interface]
data/creaturescripts/scripts/passive.lua
Description:
(luaSetCombatArea) Area not found


seria algo + OU - assim:
 


-------------- Magia a ser utilizada --- sem o function onCastSpell ---
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HITAREA)
setCombatParam(combat, COMBAT_PARAM_USECHARGES, true)


local area = createCombatArea(AREA_SQUARE1X1)
setCombatArea(combat, area)


function onGetFormulaValues(cid, level, skill, attack, factor)
local skillTotal, levelTotal = skill + attack, level / 5
return -(skillTotal * 1.5 + levelTotal), -(skillTotal * 2.5 + levelTotal)
end


setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues")
-------
local config = {
percent = 5,  -- porcentagem de sair a magia
valorvida = 100 --quanto deve ser o valor minimo de vida a perder para executar o script 
}




function onStatsChange(cid, attacker, type, combat, value)
if type == STATSCHANGE_HEALTHLOSS and value >= config.valorvida then
if math.random (1,config.percent) == 1 then
 doCombat(cid, combat, var)
end
return true
end
return true
end

Só tem que ver se isso daqui funciona: Lembra de adicionar a tag no creaturescripts.xml e de registrar o evento no login.lua


ps: peço desculpa pelo double post mas ia ficar mt ruim fazer tudo num post só

 

deu esse erro

[Error - CreatureScript Interface]
data/creaturescripts/scripts/passive.lua
Description:
(luaSetCombatArea) Area not found

Link para o post
Compartilhar em outros sites

foi mal, tinha esquecido que as areas tão na lib de spells: 
 

-------------- Magia a ser utilizada --- sem o function onCastSpell ---
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HITAREA)
setCombatParam(combat, COMBAT_PARAM_USECHARGES, true)


local areaspell = {
{1, 1, 1},
{1, 3, 1},
{1, 1, 1}
}


local area = createCombatArea(areaspell)
setCombatArea(combat, area)


function onGetFormulaValues(cid, level, skill, attack, factor)
local skillTotal, levelTotal = skill + attack, level / 5
return -(skillTotal * 1.5 + levelTotal), -(skillTotal * 2.5 + levelTotal)
end


setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues")
-------
local config = {
percent = 5,  -- porcentagem de sair a magia
valorvida = 100 --quanto deve ser o valor minimo de vida a perder para executar o script 
}




function onStatsChange(cid, attacker, type, combat, value)
if type == STATSCHANGE_HEALTHLOSS and value >= config.valorvida then
if math.random (1,config.percent) == 1 then
 doCombat(cid, combat, var)
end
end
return true
end

isso deve funcionar, se não funcionar daí eu teria que fazer mais testes 

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

foi mal, tinha esquecido que as areas tão na lib de spells: 

 

-------------- Magia a ser utilizada --- sem o function onCastSpell ---
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_HITAREA)
setCombatParam(combat, COMBAT_PARAM_USECHARGES, true)


local areaspell = {
{1, 1, 1},
{1, 3, 1},
{1, 1, 1}
}


local area = createCombatArea(areaspell)
setCombatArea(combat, area)


function onGetFormulaValues(cid, level, skill, attack, factor)
local skillTotal, levelTotal = skill + attack, level / 5
return -(skillTotal * 1.5 + levelTotal), -(skillTotal * 2.5 + levelTotal)
end


setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues")
-------
local config = {
percent = 5,  -- porcentagem de sair a magia
valorvida = 100 --quanto deve ser o valor minimo de vida a perder para executar o script 
}




function onStatsChange(cid, attacker, type, combat, value)
if type == STATSCHANGE_HEALTHLOSS and value >= config.valorvida then
if math.random (1,config.percent) == 1 then
 doCombat(cid, combat, var)
end
end
return true
end

isso deve funcionar, se não funcionar daí eu teria que fazer mais testes 

agora n deu erro mais, nao aconteçe nada Oo

Link para o post
Compartilhar em outros sites

vc registrou o evento no login.lua? colocou no creaturescripts.xml? O script funciona assim, se vc tomar 100 de dano ele tem 20% de chance de ativar um exori.. 

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

Regitrei sim, so q nao esta saindo nada Oo vou almenta a %


ele ta dando erro nessa função

[Error - CreatureScript Interface]
data/creaturescripts/scripts/passive.lua:onStatsChange
Description:
attempt to index a nil value
stack traceback:
        [C]: in function 'doCombat'
        data/creaturescripts/scripts/passive.lua:38: in function <data/creatures
cripts/scripts/passive.lua:35>
 
Editado por Golf (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

Tenta tirar o "var" da linha onde está o:

doCombat(cid, combat, var)

ficando assim:

doCombat(cid, combat)

"A alma permanece em suas criações" V89E5aN.png


142c9d3439.jpg
(Não dou suporte por mensagem privada.)

Link para o post
Compartilhar em outros sites

 

Tenta tirar o "var" da linha onde está o:

doCombat(cid, combat, var)

ficando assim:

doCombat(cid, combat)

Msm Jeito

Link para o post
Compartilhar em outros sites

vou testar no meu server, não sei se essa é a forma certa de fazer oque vc quer..

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites
  • Solução

cara, eu consegui aqui fazer dar um exori a cada % após tomar danos maiores que um valor determinado.. mas isso taria mais pra um counter attack doque pruma passiva.. me fala quais tipos de passiva vc quer que eu faço pra ti, porque cada uma vai ser muito diferente da outra.

assim foi como ficou pra dar exori:

-------------- area da magia ---


local area = createCombatArea{ 
{1, 1, 1},
{1, 3, 1},
{1, 1, 1}
}




-------
local config = {
percent = 20,  -- porcentagem de sair a magia (50 = 50% de chance)
valorvida = 100 --quanto deve ser o valor minimo de vida a perder para executar o script 
}




function onStatsChange(cid, attacker, type, combat, value)
if type == STATSCHANGE_HEALTHLOSS and value >= config.valorvida then
if math.random (1,100) <= config.percent then
local pos = getCreaturePosition(cid)
local level, magic = getPlayerLevel(cid), getPlayerMagLevel(cid)
local min, max = -(magic * 1.5 + level), -(magic * 2.5 + level)
doAreaCombatHealth(cid, COMBAT_PHYSICALDAMAGE, pos, area, min, max, CONST_ME_HITAREA)
end
end
return true
end

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites
  • 6 years later...

 

Em 16/05/2014 em 01:56, xWhiteWolf disse:

cara, eu consegui aqui fazer dar um exori a cada % após tomar danos maiores que um valor determinado.. mas isso taria mais pra um counter attack doque pruma passiva.. me fala quais tipos de passiva vc quer que eu faço pra ti, porque cada uma vai ser muito diferente da outra.

assim foi como ficou pra dar exori:



-------------- area da magia ---


local area = createCombatArea{ 
{1, 1, 1},
{1, 3, 1},
{1, 1, 1}
}




-------
local config = {
percent = 20,  -- porcentagem de sair a magia (50 = 50% de chance)
valorvida = 100 --quanto deve ser o valor minimo de vida a perder para executar o script 
}




function onStatsChange(cid, attacker, type, combat, value)
if type == STATSCHANGE_HEALTHLOSS and value >= config.valorvida then
if math.random (1,100) <= config.percent then
local pos = getCreaturePosition(cid)
local level, magic = getPlayerLevel(cid), getPlayerMagLevel(cid)
local min, max = -(magic * 1.5 + level), -(magic * 2.5 + level)
doAreaCombatHealth(cid, COMBAT_PHYSICALDAMAGE, pos, area, min, max, CONST_ME_HITAREA)
end
end
return true
end

 

Boa noite, desculpa reviver o topico, mas como faço pra ele executar uma spells quando tiver com 50% de hp? eu tentei um aqui mas da erro, n sei aonde errei.

 

Spoiler


local config = {
    vocations = {102,103,104,105,106,107,148,149,150,151,152,178,179,180,181,182,183,184,185,186,187,541,542,543,544,545,546,547,548,549,550,531,532,533,534,535,536,537,538,539,540,471,472,473,474,475,476,477,478,479,480,381,382,383,384,385,386,387,388,389,390},     --IDs das vocações.
    time = 2,                       --Exhaust, em minutos.
    hpPercent = 30,                 --Porcentagem de vida.
    spell = "passivareflect"
}   
function onStatsChange(cid, attacker, type, combat, value)
    if type == STATSCHANGE_HEALTHLOSS and isPlayer(cid) and isInArray(config.vocations, getPlayerVocation(cid)) then
        if getPlayerStorageValue(cid, 18182) < os.time() and getCreatureHealth(cid) <= getCreatureMaxHealth(cid) * config.hpPercent / 100 then
	    doCreatureCastSpell(cid, config.spell) 
            setPlayerStorageValue(cid, 18182, os.time() + config.time * 60)
        end
    end
    return true
end

 


esse e o erro:

 

Spoiler

[23:41:23.702] [Error - CreatureScript Interface]
[23:41:23.704] data/creaturescripts/scripts/passive/android.lua:onStatsChange
[23:41:23.704] Description:
[23:41:23.705] data/creaturescripts/scripts/passive/android.lua:10: attempt to call global 'doCreatureCastSpell' (a nil value)
[23:41:23.706] stack traceback:
[23:41:23.706]  data/creaturescripts/scripts/passive/android.lua:10: in function <data/creaturescripts/scripts/passive/android.lua:7>

 


 

Editado por elielder
esqueci do erro (veja o histórico de edições)
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