Ir para conteúdo

[Encerrado] Cancelar spell ao tomar dano 8.60


Meguminyan

Posts Recomendados

RESOLVIDO
adicionei um evento OnstatsChange no creature script para rodar se o player tiver a storage "sentado" , se sim e perder vida ele executa os comandos da segunda parte da skill pro player levantar e interromper o heal

 

 


----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

Gostaria de pedir ajuda pra modificar esse script, eu entendo muito pouco de programação, conheço algumas funções basicas então eu montei esse script usando vários outros então pode estar mal otimizado, mas o que quero nele seria o que está dito no titulo, cancelar a spell ao receber dano, ou uma alternativa seria tomar o dobro de dano enquanto está usando.

explicando a spell: Ao usar a spell "Rest" o player ira sentar, é adicionado um storage quando senta para ativar a regeneração do script de 10% da hp por segundo e quando ele usa a spell de novo ele levanta e é removido o storage e a regeneração para. alem disso o player fica com a condition pacified para não poder atacar os monstros.

o script funciona tudo certo, o problema é que o player pode sentar no meio dos mobs e tankar curando 10% da life por segundo, eu queria que ao usar a spell ele recebesse o dobro de dano ou levantasse ao receber dano assim parando a spell.
 
 

local tempo = 999999
local config = {
[1] = 28,  
[2] = 29,  
[3] = 30,  
[4] = 31,  
[5] = 32,  
[6] = 33, 
[7] = 34,
[8] = 28
}
		local info = {	
		health = 7,
		storage = 2138,
	}
	
local combat1 = createCombatObject()
setCombatParam(combat1, COMBAT_PARAM_AGGRESSIVE, false)

local disable = createConditionObject(CONDITION_PACIFIED)
setConditionParam(disable, CONDITION_PARAM_TICKS, tempo * 1000)
setCombatCondition(combat1, disable)

function getDmg_combat1(cid, level, maglevel)
	return ((getPlayerLevel(cid)*1) + (getPlayerMagLevel(cid) * 2.5))*-1  ,((getPlayerLevel(cid)*1) + (getPlayerMagLevel(cid) * 2.5))*-1 
end
setCombatCallback(combat1, CALLBACK_PARAM_LEVELMAGICVALUE, "getDmg_combat1")

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[i],y=dirEmitPos.y-dirList[i+1],z=dirEmitPos.z},dirList[1])
				elseif (startDir == 2) then -- S
					doSendDistanceShoot(dirEmitPos,{x=dirEmitPos.x+dirList[i],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[i],z=dirEmitPos.z},dirList[1])
				else -- W / Something weird happened
					doSendDistanceShoot(dirEmitPos,{x=dirEmitPos.x-dirList[i+1],y=dirEmitPos.y-dirList[i],z=dirEmitPos.z},dirList[1])
				end
				i = i + 2
			end		
		end
	end
end
	
function onCastSpell(cid, var)
if getPlayerStorageValue(cid, 2139) == 0 then
doPlayerSendCancel(cid, "You can't do this now")
return false
end
if getPlayerStorageValue(cid, 2138) == 1 then
local healthPercent = getCreatureMaxHealth(cid) * (info.health / 100)
local currcolor = getCreatureOutfit(cid)
local homem = {lookType = config[getPlayerVocation(cid)], lookHead = currcolor.lookHead, lookBody = currcolor.lookBody, lookLegs = currcolor.lookLegs, lookFeet = currcolor.lookFeet} 
local target = getCreatureTarget(cid)
doSetCreatureOutfit(cid, homem)
registerCreatureEvent(cid, "noMove")
doPlayerSendCancel(cid, "You are now resting.")
mayNotMove(cid, true)
setPlayerStorageValue(cid, 2138, 0)
removeHealth(cid, healthPercent, 2, 2138)
setPlayerStorageValue(cid, info.storage, 0)
setPlayerStorageValue(cid, temp.storage, os.time() + temp.exhausted)
addEvent(RunPart,000,combat1,cid,var)  
else
mayNotMove(cid, false)
		setPlayerStorageValue(cid, 2138, 1)
		setPlayerStorageValue(cid, info.storage, 1)
		setPlayerStorageValue(cid, temp.storage, os.time() + temp.exhausted)
        doRemoveCondition(cid, CONDITION_OUTFIT)
		doRemoveCondition(cid, CONDITION_PACIFIED)
		
		end
	return true
end

 

Editado por Meguminyan
Resolvido
Link para o comentário
Compartilhar em outros sites

  • 4 weeks later...
A questão neste suporte foi encerrada por falta de respostas. Este tópico está fechado e foi movido para Suporte - Tópicos Sem Resposta.

+ Caso a dúvida não tenha sido resolvida você poderá criar outro tópico solicitando ajuda.
* Lembre-se que é permitido dar UP no tópico a cada 24 horas para assim o destacar e manter movimentado.
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...