Ir para conteúdo

Featured Replies

Postado
  • Este é um post popular.

Olá Tibia King's!

Reflect System[0.1]

Função

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%]
<?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>
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}

Creio que não esqueci de nada. Qualquer dúvida é só postar!

Sem mais,

Aluccard.

Edit:

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
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

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

  • Respostas 44
  • Visualizações 15.7k
  • Created
  • Última resposta

Top Posters In This Topic

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

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96k
  • Posts 512.6k

Informação Importante

Confirmação de Termo