Ir para conteúdo
  • Cadastre-se

[Ajuda] Spell direcional bugada


Posts Recomendados

Brother isto sempre acontece com spells com mais de um turno. Pois ele manda por exemplo 10 efeitos. Cada um de 1 em 1 segundo digamos assim.

Nos 3 primeiros segundos, você esta olhando pra cima.

 

Agora se você se mexer nos proximos segundos a spell vai pegar a posição nova, e então ira mudar. Fazendo com que pareça estar errada.

 

Não sei se consegui explicar direito, é algo complicadinho.

z_WL63_Tt.png

Link para o post
Compartilhar em outros sites

E você sabe como fazer ele não mudar a posição? 

E sabe porque a combinação de soltar para cima e mover para baixo não altera o efeito?
@Edit: Soltar para o lado direito e mover para o esquerdo/vice-versa também não altera

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



 tumblr_mwfeg45FIV1qk4cb3o4_500.gif

Link para o post
Compartilhar em outros sites
  • 3 weeks later...

Cara, eu já pus pro boneco não poder se mexer enquanto executa a spell, mas se ele usar enquanto se move clicando em alguma parte do mapa ou tiver de follow em alguém, a direção sai errada. (Já usei andando constantemente pela seta, não atrapalha)

 

Como eu faria para a spell pegar a posição minha só depois de tipo 200ms? Daí ele não erraria por algum motivo(apesar de que ele vai em direção errada mesmo clicando em um sentido contínuo, sem mudar)..

Spell:

-- Areas/Combat for 200ms
local combat2_Brush = createCombatObject()
setCombatParam(combat2_Brush, COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA)
setCombatParam(combat2_Brush, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat2_Brush, COMBAT_PARAM_BLOCKARMOR, true)
setCombatArea(combat2_Brush,createCombatArea({{3}}))
function onGetFormulaValues(cid, level, maglevel)
min = -((level*0.2) + (maglevel*1.3)+10)
max = -((level*0.2) + (maglevel*1.7)+20)
return min, max
end
 
setCombatCallback(combat2_Brush, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")
 
local con_Fire__combat2_Brush = createConditionObject(CONDITION_FIRE)
addDamageCondition(con_Fire__combat2_Brush, 3, 500, -15)
setCombatCondition(combat2_Brush, con_Fire__combat2_Brush)
 
-- Areas/Combat for 400ms
local combat4_Brush = createCombatObject()
setCombatParam(combat4_Brush, COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA)
setCombatParam(combat4_Brush, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat4_Brush, COMBAT_PARAM_BLOCKARMOR, true)
setCombatArea(combat4_Brush,createCombatArea({{1, 1, 1},
{0, 2, 0}}))
function onGetFormulaValues(cid, level, maglevel)
min = -((level*0.2) + (maglevel*1.3)+10)
max = -((level*0.2) + (maglevel*1.7)+20)
return min, max
end
 
setCombatCallback(combat4_Brush, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")
local con_Fire__combat4_Brush = createConditionObject(CONDITION_FIRE)
addDamageCondition(con_Fire__combat4_Brush, 3, 500, -15)
setCombatCondition(combat4_Brush, con_Fire__combat4_Brush)
 
-- Areas/Combat for 600ms
local combat6_Brush = createCombatObject()
setCombatParam(combat6_Brush, COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA)
setCombatParam(combat6_Brush, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat6_Brush, COMBAT_PARAM_BLOCKARMOR, true)
setCombatArea(combat6_Brush,createCombatArea({{1, 1, 1, 1, 1},
{0, 0, 0, 0, 0},
{0, 0, 2, 0, 0}}))
function onGetFormulaValues(cid, level, maglevel)
min = -((level*0.2) + (maglevel*1.3)+10)
max = -((level*0.2) + (maglevel*1.7)+20)
return min, max
end
 
setCombatCallback(combat6_Brush, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")
local con_Fire__combat6_Brush = createConditionObject(CONDITION_FIRE)
addDamageCondition(con_Fire__combat6_Brush, 3, 500, -15)
setCombatCondition(combat6_Brush, con_Fire__combat6_Brush)
 
-- Areas/Combat for 800ms
local combat8_Brush = createCombatObject()
setCombatParam(combat8_Brush, COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA)
setCombatParam(combat8_Brush, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat8_Brush, COMBAT_PARAM_BLOCKARMOR, true)
setCombatArea(combat8_Brush,createCombatArea({{1, 1, 1, 1, 1, 1, 1},
{0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 2, 0, 0, 0}}))
function onGetFormulaValues(cid, level, maglevel)
min = -((level*0.2) + (maglevel*1.3)+10)
max = -((level*0.2) + (maglevel*1.7)+20)
return min, max
end
 
setCombatCallback(combat8_Brush, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")
local con_Fire__combat8_Brush = createConditionObject(CONDITION_FIRE)
addDamageCondition(con_Fire__combat8_Brush, 3, 500, -15)
setCombatCondition(combat8_Brush, con_Fire__combat8_Brush)
 
-- Areas/Combat for 1000ms
local combat10_Brush = createCombatObject()
setCombatParam(combat10_Brush, COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA)
setCombatParam(combat10_Brush, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat10_Brush, COMBAT_PARAM_BLOCKARMOR, true)
setCombatArea(combat10_Brush,createCombatArea({{1, 1, 1, 1, 1},
{0, 0, 0, 0, 0},
{0, 0, 2, 0, 0}}))
function onGetFormulaValues(cid, level, maglevel)
min = -((level*0.2) + (maglevel*1.3)+10)
max = -((level*0.2) + (maglevel*1.7)+20)
return min, max
end
 
setCombatCallback(combat10_Brush, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")
local con_Fire__combat10_Brush = createConditionObject(CONDITION_FIRE)
addDamageCondition(con_Fire__combat10_Brush, 3, 500, -15)
setCombatCondition(combat10_Brush, con_Fire__combat10_Brush)
 
-- Areas/Combat for 1200ms
local combat12_Brush = createCombatObject()
setCombatParam(combat12_Brush, COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA)
setCombatParam(combat12_Brush, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat12_Brush, COMBAT_PARAM_BLOCKARMOR, true)
setCombatArea(combat12_Brush,createCombatArea({{1, 1, 1},
{0, 2, 0}}))
function onGetFormulaValues(cid, level, maglevel)
min = -((level*0.2) + (maglevel*1.3)+10)
max = -((level*0.2) + (maglevel*1.7)+20)
return min, max
end
 
setCombatCallback(combat12_Brush, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")
local con_Fire__combat12_Brush = createConditionObject(CONDITION_FIRE)
addDamageCondition(con_Fire__combat12_Brush, 3, 500, -15)
setCombatCondition(combat12_Brush, con_Fire__combat12_Brush)
 
-- Areas/Combat for 1400ms
local combat14_Brush = createCombatObject()
setCombatParam(combat14_Brush, COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA)
setCombatParam(combat14_Brush, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat14_Brush, COMBAT_PARAM_BLOCKARMOR, true)
setCombatArea(combat14_Brush,createCombatArea({{3}}))
function onGetFormulaValues(cid, level, maglevel)
min = -((level*0.2) + (maglevel*1.3)+10)
max = -((level*0.2) + (maglevel*1.7)+20)
return min, max
end
 
setCombatCallback(combat14_Brush, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")
local con_Fire__combat14_Brush = createConditionObject(CONDITION_FIRE)
addDamageCondition(con_Fire__combat14_Brush, 3, 500, -15)
setCombatCondition(combat14_Brush, con_Fire__combat14_Brush)
 
-- =============== CORE FUNCTIONS ===============
local function RunPart(c,cid,var,dirList,dirEmitPos,startDir) -- Part
if (isCreature(cid)) then
doCombat(cid, c, var)
if (dirList ~= nil) then -- Emit distance effects
local i = 2;
while (i < #dirList) do
if (startDir == 0) then -- N
doSendDistanceShoot(dirEmitPos,{x=dirEmitPos.x-dirList,y=dirEmitPos.y-dirList[i+1],z=dirEmitPos.z},dirList[1])
elseif (startDir == 2) then -- S
doSendDistanceShoot(dirEmitPos,{x=dirEmitPos.x+dirList,y=dirEmitPos.y+dirList[i+1],z=dirEmitPos.z},dirList[1])
elseif (startDir == 1) then -- E
doSendDistanceShoot(dirEmitPos,{x=dirEmitPos.x+dirList[i+1],y=dirEmitPos.y+dirList,z=dirEmitPos.z},dirList[1])
else -- W / Something weird happened
doSendDistanceShoot(dirEmitPos,{x=dirEmitPos.x-dirList[i+1],y=dirEmitPos.y-dirList,z=dirEmitPos.z},dirList[1])
end
i = i + 2
end
end
end
end
 
function onCastSpell(cid, var)
doCreatureSetNoMove(cid, true)
addEvent(doCreatureSetNoMove, 1800, cid, false)
local startPos = getCreaturePosition(cid)
local startDir = getCreatureLookDirection(cid)
addEvent(RunPart,200,combat2_Brush,cid,var)
addEvent(RunPart,400,combat4_Brush,cid,var)
addEvent(RunPart,600,combat6_Brush,cid,var)
addEvent(RunPart,800,combat8_Brush,cid,var)
addEvent(RunPart,1000,combat10_Brush,cid,var)
addEvent(RunPart,1200,combat12_Brush,cid,var)
addEvent(RunPart,1400,combat14_Brush,cid,var)
return true
end



 tumblr_mwfeg45FIV1qk4cb3o4_500.gif

Link para o post
Compartilhar em outros sites

Tenta aí, fiz de cabeça, porque estou no trabalho.

local combat = {}

local area = {
	[1] = {
		{3},
	},
	[2] = {
		{1, 1, 1},
		{0, 2, 0},
	},
	[3] = {
		{1, 1, 1, 1, 1},
		{0, 0, 0, 0, 0},
		{0, 0, 2, 0, 0},
	},
	[4] = {
		{1, 1, 1, 1, 1, 1, 1},
		{0, 0, 0, 0, 0, 0, 0},
		{0, 0, 0, 0, 0, 0, 0},
		{0, 0, 0, 2, 0, 0, 0},
	},
}

area[5] = area[3]
area[6] = area[2]
area[7] = area[1]
	
	

for i = 1, 7 do
	combat[i] = createCombatObject()
	setCombatParam(combat[i], COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)
	setCombatParam(combat[i], COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA)
	if i == 1 then
		setCombatParam(combat[i], COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE)
	end
	setCombatFormula(combat[i], COMBAT_FORMULA_LEVELMAGIC, -2, -5, -2, -5)
	
	setCombatArea(combat[i], createCombatArea(area[i]))
end

function callback_spell(cid, var)
	for i = 1, 7 do
		local delay = (i * 100) - 100
		addEvent(function()
			doCombat(cid, combat[i], var)
		end, delay)
	end
end

function onCastSpell(cid, var)
	callback_spell(cid, var)
	return true
end
Editado por Garou (veja o histórico de edições)

Link para o post
Compartilhar em outros sites

Continua mudando direção após andar depois que solta a spell. Ex: Solto pra cima, ando pra ca >, ela vira o resto da spell pra la <.
Por isso fiz o pedido do nomove.



 tumblr_mwfeg45FIV1qk4cb3o4_500.gif

Link para o post
Compartilhar em outros sites

Vê aí se isso abaixo resolve

 

Se não, só quando eu chegar em casa

 

P.S: Particularmente prefiro resolver sem apelar para doCreatureSetNoMove

local combat = {}

local area = {
	[1] = {
		{3},
	},
	[2] = {
		{1, 1, 1},
		{0, 2, 0},
	},
	[3] = {
		{1, 1, 1, 1, 1},
		{0, 0, 0, 0, 0},
		{0, 0, 2, 0, 0},
	},
	[4] = {
		{1, 1, 1, 1, 1, 1, 1},
		{0, 0, 0, 0, 0, 0, 0},
		{0, 0, 0, 0, 0, 0, 0},
		{0, 0, 0, 2, 0, 0, 0},
	},
}

area[5] = area[3]
area[6] = area[2]
area[7] = area[1]
	
	

for i = 1, 7 do
	combat[i] = createCombatObject()
	setCombatParam(combat[i], COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)
	setCombatParam(combat[i], COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA)
	if i == 1 then
		setCombatParam(combat[i], COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_FIRE)
	end
	setCombatFormula(combat[i], COMBAT_FORMULA_LEVELMAGIC, -2, -5, -2, -5)
	
	setCombatArea(combat[i], createCombatArea(area[i]))
end

function callback_spell(cid, var)
	for i = 1, 7 do
		local delay = (i * 100) - 100
		addEvent(function()
			doCombat(cid, combat[i], var)
		end, delay)
	end
end

function onCastSpell(cid, var)
	local position = getCreatureLookPosition(cid)
	callback_spell(cid, positionToVariant(position))
	return true
end
Editado por Garou (veja o histórico de edições)

Link para o post
Compartilhar em outros sites

Mesmo bug.
Um fato interessante: Quando solto pra lá >, se eu dou mais um passo pra la > ele desce \/, e se eu dou outro passo ele muda pra la <



 tumblr_mwfeg45FIV1qk4cb3o4_500.gif

Link para o post
Compartilhar em outros sites

É meio chato isso mesmo, eu lembro que eu consegui arrumar isso fazendo um sistema de magias com doAreaCombatHealth, sem usar createCombatObject e setCombatArea.

 

Vou deixar a treta para programadores mais experientes.

 

Abraços.

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

Link para o post
Compartilhar em outros sites

Quero saber como faço a magia dar NoMove antes de pegar a posição da spell  :rock:



 tumblr_mwfeg45FIV1qk4cb3o4_500.gif

Link para o post
Compartilhar em outros sites
  • 1 month later...

Podia fazer algum script que declare um storage value que impede o player de se mover,

e sempre que ele usasse alguma magia ele receberia esse storage, pelo tempo que a magia durasse.

n garanto que consiga fazer, mas é algo a se pensar :)

Link para o post
Compartilhar em outros sites

Mas a magia com a função

 doCreatureSetNoMove(cid, true)

 que faz o player não poder se mexer durante a spell continua fazendo ela bugar, caso o player utilize enquanto estiver no meio de um percurso.

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



 tumblr_mwfeg45FIV1qk4cb3o4_500.gif

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