Ir para conteúdo

Reflect System 0.1


MrCatra

Posts Recomendados

Reflect System "0.1"

 

Ao ser obtido um item que possua o atributo Reflect o player será capaz de refletir danos Fisicos e Mágicos ao mesmo tempo. A idéia geral desse script é bem simples mesmo. Quando o player receber um damage de uma criatura (monstro ou player) esse attack será refletido em uma certa porcentagem.

Exemplo:

22:46 You see a golden amulet. It weighs 8.30 oz. [Reflect: 80%]

 

Obs¹: Os items pode ser acumulativo. Ou seja, se o amuleto der 10% de reflect e o ring der 35%. O player possuirá um Reflect = 45%.

 

[MOD]reflectSystem.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<mod name="Reflect System" version="0.1" author="Aluccard" contact="" enabled="yes">
			<description>
							Script que funciona para refletir danos para as creatures que o atacar.
			</description>

			<event type="login" name="regReflectDamage" event="script"><![CDATA[
							function onLogin(cid)
											registerCreatureEvent(cid,"ReflectDamage")
											return true
							end
	]]></event>

			<event type="statschange" name="ReflectDamage" event="script"><![CDATA[

local slotPos = {CONST_SLOT_NECKLACE, CONST_SLOT_FEET, CONST_SLOT_RING}

function onStatsChange(cid, attacker, type, combat, value)
			local reflectPercent = 0
	local dmg = value
	local playerPos = getCreaturePosition(cid)
	local attackerPos = getCreaturePosition(attacker)

	for i = 1, #slotPos do
			if getPlayerSlotItem(cid, slotPos[i]).uid > 1 then
					if getItemReflectPercent(getPlayerSlotItem(cid, slotPos[i]).uid) then
							reflectPercent = reflectPercent + getItemReflectPercent(getPlayerSlotItem(cid, slotPos[i]).uid)
					end
			end
	end

	if reflectPercent > 0 then
			dmg = math.ceil(-value*((100-reflectPercent)/100))			  
			if (dmg < 0) then
					doCreatureAddHealth(cid, dmg)  
					doSendAnimatedText(playerPos, -dmg, COLOR_RED)
					doSendMagicEffect(playerPos, 0)								
			else
					doSendMagicEffect(playerPos, 3)
			end

			dmg = math.ceil(-value*(reflectPercent/100))
			if (dmg < 0) then
					doCreatureAddHealth(attacker, dmg)
					doSendAnimatedText(attackerPos, -dmg, COLOR_RED)
					doSendDistanceShoot(playerPos, attackerPos, CONST_ANI_SMALLHOLY)
			end
	else
			return true
	end
end]]></event>
</mod>

 

Obs²: O código está meio enferrujado, mas funciona. Como podes ver o sistema está na versão 0.1 e irá ser atualizada com o tempo.

 

ReflectLib.lua

function getItemReflectPercent(itemuid)
	return getItemAttribute(itemuid, "reflectPercent")
end
function doPlayerAddReflectedItem(cid, itemid, percent)
local item = doPlayerAddItem(cid, itemid)
doItemSetAttribute(item, "description", "[Reflect: "..percent.."%]")
doItemSetAttribute(item, "reflectPercent", percent)
end

 

Obs³: Para adicionarmos novos items com o atributo Reflect usamos o comando doPlayerAddReflectedItem(cid,itemid,percent).

{itemid = id do item escolhido / percent = porcentagem do reflect}

 

Créditos:

MrCatra

Aluccard

 

 

Obrigado,MrCatra

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

Se eu não me engano o autor já postou no fórum se ainda não foi postado então arrume os code's pois estão bugados.

 

Arrumado os Codes.

 

Quanto ja postado - Eu procurei e nao achei aki no fórum pode ser que nao esteja com este nome pode ser que esteja com outro,mais se ja tiver,podem fechar.Obrigado.

 

 

 

 

-RarTnE

 

 

Obrigado.Vou estar trazendo muitos conteudos,para o XTibia.

 

Obrigado,MrCatra

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

Se meu set der um total de 120% de reflect então vou refletir 1,2x o dano que recebi? ...

Teoricamente sim, mais a ideia deste sistema e nunca passar dos 100% por isso sugiro que deve ser adicionar um If limitando o maximo para 100%.

Link para o comentário
Compartilhar em outros sites

Se meu set der um total de 120% de reflect então vou refletir 1,2x o dano que recebi? ...

Teoricamente sim, mais a ideia deste sistema e nunca passar dos 100% por isso sugiro que deve ser adicionar um If limitando o maximo para 100%.

 

Eu acho que 100% é muita coisa, deveria refletir um máximo de 50 a 75%! :)

 

Mas fica a dica, rsrs

 

Mod muito bom e espero usar algum dia :)

Link para o comentário
Compartilhar em outros sites

Se meu set der um total de 120% de reflect então vou refletir 1,2x o dano que recebi? ...

Teoricamente sim, mais a ideia deste sistema e nunca passar dos 100% por isso sugiro que deve ser adicionar um If limitando o maximo para 100%.

 

Eu acho que 100% é muita coisa, deveria refletir um máximo de 50 a 75%! :)

 

Mas fica a dica, rsrs

 

Mod muito bom e espero usar algum dia :)

 

Ta maluco, para não ficar overpower o maximo deveria ser 3% por item. Assim fica bem balanciado o servidor. Senão PVP seria uma bagunça feia.

Link para o comentário
Compartilhar em outros sites

Se meu set der um total de 120% de reflect então vou refletir 1,2x o dano que recebi? ...

Teoricamente sim, mais a ideia deste sistema e nunca passar dos 100% por isso sugiro que deve ser adicionar um If limitando o maximo para 100%.

 

Eu acho que 100% é muita coisa, deveria refletir um máximo de 50 a 75%! :)

 

Mas fica a dica, rsrs

 

Mod muito bom e espero usar algum dia :)

 

Ta maluco, para não ficar overpower o maximo deveria ser 3% por item. Assim fica bem balanciado o servidor. Senão PVP seria uma bagunça feia.

 

hashuhashuhahshu, verdade e.e

 

E agora eu pensei numa coisa, seu eu tiver reflect e o cara tb, vai ficar refletindo o dano até quando?

Ou só vai refletir uma vez...

Link para o comentário
Compartilhar em outros sites

Primeiro: Não precisa disso para colocar reflect em um determinado item! Basta ir em item.lua achar o item desejado e adiciona a seguinte tag <attribute key="reflectPercentHoly" value="10" /> que ira refletir 10% de holy (é só mudar o elemento).

Segundo: Ao passar em algum tile que te de dano o serve irá cair pois entrara em conflito então tome cuidado ao usar essa script.

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

  • 1 year later...
×
×
  • Criar Novo...