Ir para conteúdo
  • 0

Item de reflect


Tulio271

Pergunta

Coloque em meu server um novo ring:

<item id="5785" article="a" name="Fidelitas medal of honour">
<attribute key="slotType" value="ring" />
<attribute key="armor" value="6" />
<attribute key="absorbPercentAll" value="6" />
<attribute key="speed" value="120" />

<attribute key="healthGain" value="10" />
<attribute key="healthTicks" value="5" />
<attribute key="manaGain" value="10" />

<attribute key="manaTicks" value="5" />
<attribute key="weight" value="100" />
<attribute key="reflectpercentall" value="6"/>
</item>

Blz ele tem que refletir todos os danos recebidos pelo char e acontece isso mas quando o char passa pelo fogo ou posion ou qualuer coisa que de dano no char sem ter um player ou monstro fazendo isso o server debuga e fecha alguem poderia me ajudar a resolver isso?

Link para o comentário
Compartilhar em outros sites

10 respostass a esta questão

Posts Recomendados

  • 0


local itens = { -- [ID] = porcentagem.

[2463] = 20,

[2646] = 100,

}

 

local effect = 3 -- Numero do efeito ou false

 

function playerHasItemEquipped(cid, itemid)

if not isPlayer(cid) then

return false

end

 

for i = CONST_SLOT_FIRST, CONST_SLOT_LAST do

if getPlayerSlotItem(cid, i).itemid == itemid then

return true

end

end

end

 

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

if type == STATSCHANGE_HEALTHLOSS then

if isCreature(attacker) then

local total = 0

for itemid, percentage in pairs(itens) do

if playerHasItemEquipped(cid, itemid) then

total = total+percentage

end

end

if total > 0 then

doCreatureAddHealth(attacker, -math.ceil((total/100)*value))

doSendAnimatedText(getCreaturePosition(attacker), tostring(math.ceil((total/100)*value)) , COLOR_RED)

if effect then

doSendMagicEffect(getCreaturePosition(attacker), effect)

end

end

end

end

return true

end

 

Link para o comentário
Compartilhar em outros sites

  • 0

Versao TFS?

 

Bem se for 0.4:

 

creaturescripts\scripts\reflect.lua

local itens = { -- [ID] = porcentagem.
[2463] = 20,
[2646] = 100,
}

local effect = 3 -- Numero do efeito ou false

function playerHasItemEquipped(cid, itemid)
	if not isPlayer(cid) then
		return false
	end

	for i =  CONST_SLOT_FIRST,  CONST_SLOT_LAST do
		if getPlayerSlotItem(cid, i).itemid == itemid then
			return true
		end
	end
end

function onStatsChange(cid, attacker, type, combat, value)	
	if type == STATSCHANGE_HEALTHLOSS then
		if isCreature(attacker) then
			local total = 0
			for itemid, percentage in pairs(itens) do
				if playerHasItemEquipped(cid, itemid) then
					total = total+percentage
				end
			end
			if total > 0 then
				doCreatureAddHealth(attacker, -math.ceil((total/100)*value))
				if effect then
					doSendMagicEffect(getCreaturePosition(attacker), effect)
				end
			end
		end
	end
	return true
end

creaturescripts\scripts\login.lua:

 

Bota "registerCreatureEvent(cid, "Reflect")" depois de function onLogin(cid):

function onLogin(cid)
	registerCreatureEvent(cid, "Reflect")
..
..
..
end

XML:

<event type="statschange" name="Reflect" event="script" value="reflect.lua"/>

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

  • 0

MatheusMkalo

 

deu certo aqui mas eu queria que fosse igual o do item la de cima. esse script que voce me passaou qualquer dano que o player recebe ele recebra um tanto de ataque correspondente ao dano, eu queria que tipo um druid usa a sd eu queria que o mesmo ataque voltasse pra ele e nao so ele ter dano

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

  • 0


local itens = {

[2463] = 20,

[2646] = 100,

}

 

function playerHasItemEquipped(cid, itemid)

if not isPlayer(cid) then

return false

end

 

for i = CONST_SLOT_FIRST, CONST_SLOT_LAST do

if getPlayerSlotItem(cid, i).itemid == itemid then

return true

end

end

end

 

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

if type == STATSCHANGE_HEALTHLOSS then

if isCreature(attacker) then

local total = 0

for itemid, percentage in pairs(itens) do

if playerHasItemEquipped(cid, itemid) then

total = total+percentage

end

end

if total > 0 then

doTargetCombatHealth(cid, attacker, combat, -math.ceil((total/100)*value), -math.ceil((total/100)*value), nil)

end

end

end

return true

end

 

 

Link para o comentário
Compartilhar em outros sites

  • 0
local itens = {
[2463] = 20,
[2646] = 100,
}

function playerHasItemEquipped(cid, itemid)
	if not isPlayer(cid) then
		return false
	end

	for i =  CONST_SLOT_FIRST,  CONST_SLOT_LAST do
		if getPlayerSlotItem(cid, i).itemid == itemid then
			return true
		end
	end
end

function onStatsChange(cid, attacker, type, combat, value)
	if type == STATSCHANGE_HEALTHLOSS then
		if isCreature(attacker) then
			local total = 0
			for itemid, percentage in pairs(itens) do
				if playerHasItemEquipped(cid, itemid) then
					total = total+percentage
				end
			end
			if total > 0 then
				doTargetCombatHealth(cid, attacker, combat, -math.ceil((total/100)*value), -math.ceil((total/100)*value), nil)
			end
		end
	end
	return true
end

Fiz o teste e nao da refletindo correto, o primeiro tava certinho as % de reflecao esse nao esta

Link para o comentário
Compartilhar em outros sites

  • 0
local itens = {
[2463] = 20,
[2646] = 100,
}

function playerHasItemEquipped(cid, itemid)
	if not isPlayer(cid) then
		return false
	end

	for i =  CONST_SLOT_FIRST,  CONST_SLOT_LAST-1 do
		if getPlayerSlotItem(cid, i).itemid == itemid then
			return true
		end
	end
end


function onStatsChange(cid, attacker, type, combat, value)
	if type == STATSCHANGE_HEALTHLOSS then
		if isCreature(attacker) then
			local total = 0
			for itemid, percentage in pairs(itens) do
				if playerHasItemEquipped(cid, itemid) then
					total = total+percentage
				end
			end
			if total > 0 then
				if isPlayer(attacker) then
					doTargetCombatHealth(cid, attacker, combat, -math.ceil((total/100)*value)*2, -math.ceil((total/100)*value)*2, nil)
				else
					doTargetCombatHealth(cid, attacker, combat, -math.ceil((total/100)*value), -math.ceil((total/100)*value), nil)
				end
			end
		end
	end
	return true
end

Agora eu testei, funcionou aqui. Soh que ainda tem um problema que voce não deve ter pensado, se dois players tiverem 100% ou mais de reflect, os dois morrem assim que se hitarem e se for menor que 100% eles vao tomar varios danos.

 

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

  • 0

Nessa parte:

					doTargetCombatHealth(cid, attacker, combat, -math.ceil((total/100)*value)*2, -math.ceil((total/100)*value)*2, nil)
				else
					doTargetCombatHealth(cid, attacker, combat, -math.ceil((total/100)*value), -math.ceil((total/100)*value), nil)

Bota isso:

					doTargetCombatHealth(cid, attacker, COMBAT_UNDEFINEDDAMAGE, -math.ceil((total/100)*value)*2, -math.ceil((total/100)*value)*2, nil)
				else
					doTargetCombatHealth(cid, attacker, COMBAT_UNDEFINEDDAMAGE, -math.ceil((total/100)*value), -math.ceil((total/100)*value), nil)

O erro não é no calculo o problema é que ele calcula a resistencia do player ao tipo de dano. Testei com SD e funcionou perfeitamente porque o player nao tinha resistencia. Talvez mudando pra COMBAT_UNDEFINEDDAMAGE ele nao tenha resistencia mas nao vai sair o mesmo efeito da magia que o player lançou...

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

  • 0

 

 

local itens = { -- [ID] = porcentagem.

[2463] = 20,

[2646] = 100,

}

 

local effect = 3 -- Numero do efeito ou false

 

function playerHasItemEquipped(cid, itemid)

if not isPlayer(cid) then

return false

end

 

for i = CONST_SLOT_FIRST, CONST_SLOT_LAST do

if getPlayerSlotItem(cid, i).itemid == itemid then

return true

end

end

end

 

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

if type == STATSCHANGE_HEALTHLOSS then

if isCreature(attacker) then

local total = 0

for itemid, percentage in pairs(itens) do

if playerHasItemEquipped(cid, itemid) then

total = total+percentage

end

end

if total > 0 then

doCreatureAddHealth(attacker, -math.ceil((total/100)*value))

if effect then

doSendMagicEffect(getCreaturePosition(attacker), effect)

end

end

end

end

return true

end

 

MatheusMkalo teria como colocar para aparecer quanto o player ta perdendo de vida nesse script ai

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...