Ir para conteúdo
  • Cadastre-se

(Resolvido)[Skill Reducer] não retorna valor aleatório.


Ir para solução Resolvido por Zanrix,

Posts Recomendados

Distro: The OTX Server Version: (2.52 - 1557) - Codename: (Necron) - 8.60

 

Então galera, estou tendo problema com essa spell. estou querendo que ela retorne um valor aleatório entre 20 e 70, mas todas as tentativas que fiz utilizando o math.random foram sem sucessos, sempre retornava um valor fixo, vou postar a spell completa, com um valor fixo mesmo. A spell funciona assim, o monstro lança um attack que reduz o ml do player em x%.

Spoiler


local combat = createCombatObject()



setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_ENERGYHIT)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY)

local condition = createConditionObject(CONDITION_ATTRIBUTES)
setConditionParam(condition, CONDITION_PARAM_TICKS,10000)
setConditionParam(condition,CONDITION_PARAM_STAT_MAGICLEVELPERCENT, 30)
setCombatCondition(combat, condition)

local exhaust = createConditionObject(CONDITION_EXHAUST)
setConditionParam(exhaust, CONDITION_PARAM_SUBID, 2)
setConditionParam(exhaust, CONDITION_PARAM_TICKS, 10000)
setCombatCondition(combat, exhaust)

local area = createCombatArea(AREA_CIRCLE2X2)
setCombatArea(combat, area) function onCastSpell(cid, var)
	return doCombat(cid, combat, var)
end

 

enfim, tentei criar uma variavel e atribuir com um math.random(20,70) e dps utilizar a variavel no lugar do 30 e sempre retornou um valor fixo.

 

 

#2 - Outro problema que estou tendo com essa spell é o seguinte, se o target está sob o efeito da mesma, e ele utiliza utito tempo, ou utito tempo san o efeito que causava a redução do ml é cancelado, e o personagem ganha o bonus normal da spell (blood rage / sharpshooter) . essa parte local exhaust, foi uma das minhas tentativas para tentar por um exaust nas magias de suporte, preferível se bloquiasse apenas utito tempo e utito tempo san.

 

OBS: ja testei com a linha  setConditionParam(condition, CONDITION_PARAM_BUFF, true), mas a única diferença foi que informava no inventário, que o personagem estava com BUFF, mas o mesmo pode ser "sobreposto" .

 

OBS²: Se a spell sair com um valor aleatório ja está bom, é um começo !

 

Editado por Nandozeraah (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • Solução

Da uma testada aí

local combats, conditions = {}, {}

for i=20,70 do
  	combats[i] = createCombatObject()
	setCombatParam(combats[i], COMBAT_PARAM_EFFECT, CONST_ME_ENERGYHIT)
	setCombatParam(combats[i], COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY)
end

for i=20,70 do
  	conditions[i] = createConditionObject(CONDITION_ATTRIBUTES)
  	setConditionParam(conditions[i], CONDITION_PARAM_TICKS,10000)
	setConditionParam(conditions[i],CONDITION_PARAM_STAT_MAGICLEVELPERCENT, i)
	setCombatCondition(combats[i], conditions[i])
end

local area = createCombatArea(AREA_CIRCLE2X2)
setCombatArea(combats[i], area)

function onCastSpell(cid, var)
	local random = math.random(20,70)
	return doCombat(cid, combats[random], var)
end

 

Link para o post
Compartilhar em outros sites

Muito obrigado @Zanrix, funcionou. único detalhe é que o efeito de área não saiu, ela foi direta ao target. Mas mesmo assim, obrigado !

 

 

@EDIT[4/2/2017 18:38:27] (LuaInterface::luaSetCombatArea) Combat not found

não estava sendo possível setar a área do attack, então trouxe o LOCAL AREA para o 1° end e funcionou. agora a spell sai com a área desejada.

local combats, conditions = {}, {}
local area = createCombatArea(AREA_CIRCLE2X2)

for i=20,70 do
    combats[i] = createCombatObject()
    setCombatParam(combats[i], COMBAT_PARAM_EFFECT,CONST_ME_ENERGYHIT)
    setCombatParam(combats[i], COMBAT_PARAM_DISTANCEEFFECT,CONST_ANI_ENERGY)
    setCombatArea(combats[i], area)
end

for i=20,70 do
    conditions[i] = createConditionObject(CONDITION_ATTRIBUTES)
    setConditionParam(conditions[i], CONDITION_PARAM_TICKS,10000)
    setConditionParam(conditions[i],CONDITION_PARAM_STAT_MAGICLEVELPERCENT, i)
    setCombatCondition(combats[i], conditions[i])
end

function onCastSpell(cid, var)
    local random = math.random(20,70)
    return doCombat(cid, combats[random], var)
end

 

Editado por Nandozeraah (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
4 horas atrás, Zanrix disse:

Da uma testada aí


local combats, conditions = {}, {}

for i=20,70 do
  	combats[i] = createCombatObject()
	setCombatParam(combats[i], COMBAT_PARAM_EFFECT, CONST_ME_ENERGYHIT)
	setCombatParam(combats[i], COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGY)
end

for i=20,70 do
  	conditions[i] = createConditionObject(CONDITION_ATTRIBUTES)
  	setConditionParam(conditions[i], CONDITION_PARAM_TICKS,10000)
	setConditionParam(conditions[i],CONDITION_PARAM_STAT_MAGICLEVELPERCENT, i)
	setCombatCondition(combats[i], conditions[i])
end

local area = createCombatArea(AREA_CIRCLE2X2)
setCombatArea(combats[i], area)

function onCastSpell(cid, var)
	local random = math.random(20,70)
	return doCombat(cid, combats[random], var)
end

 

 

 

Ainda acho que um math.random() seria melhor, não?

Um loop como este, não vejo como boa ideia... :hum:

Me corrija se estiver errado.

 

@This life is filled with hurt

When happiness doesn't work

Trust me and take my hand

When the lights go out you will understand

Link para o post
Compartilhar em outros sites

@ login12, não posso discutir sobre a performance do códico, importante que funcionou...

 

Por acaso vocês sabem, se seria possível verificar por lua, se o personagem esta sobre o efeito de buff ? pois andei pensando e acho que é a maneira mais fácil para as magias (blood rage \ sharpshooter) não sobressairem nesta spell acima seria algo do tipo:

 

IFNOT BUFF THEN

 

      código

      [Blood Rage / Sharpshooter]

 

end

Link para o post
Compartilhar em outros sites

@Nandozeraah

Tenta repor aquele seu esquema de CONDITION_PARAM_SUBID, 2 e trocar esse 2 pra um outro número pra ver se funciona, acho que tiraria o conflito do buff

 

@login12

Usando diretamente o math.random eu tbm não consegui fazer funcionar.. Esse é o único outro jeito que conheço de fazer o desejado. Eu tbm posso estar errado, mas acredito que não tem problema nenhum criar loop de combats e conditions, vários sistemas grandes os usam ^-^

Link para o post
Compartilhar em outros sites

@Zanrix Acredito que não funcione por SUBID ( testei do 0 ao 5 nem magias de heal muito menos suporte tiveram exausteds criados), acredito que seja por conta da otx organizar as spells por group, igual nos servidores recentes. então para amenizar o problema, eu coloquei exausted de 9 e 10 segundos respectivamente para ( blood rage \ sharpshooter ), e para arrumar o problema do utito tempo san, coloquei um exausted de 10 segundos para o grupo de magias de heal pelo spells.xml mesmo.

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