[Dodge & Critical]
Sabe aqueles sistemas de dodge e critical que temos nos servidores de baiak? Então, é isso que hoje vou trazer para vocês!
Há um sistema disponibilizado na internet, porém não funcional, o que eu fiz foi fixá-lo e adicionar o dodge para mana também.
Testado no TFS 1.3 na versão 8.60
Na pasta lib crie um arquivo chamado dodgeCritical.lua
--[[
Dodge & Critical fixado por Movie (Movie#4361)
Disponibilizado para o TibiaKing e não autorizo outras reproduções
Mantenha os créditos <3
--]]
STORAGEVALUE_DODGE = 48900
STORAGEVALUE_CRITICAL = 48901
DODGE = {
LEVEL_MAX = 100, -- máximo de level que o dodge será
PERCENT = 0.2 -- porcentagem que irá defender o ataque
}
CRITICAL = {
LEVEL_MAX = 100, -- máximo de level que o critical será
PERCENT = 0.2 -- porcentagem que irá aumentar o ataque
}
function Player.getDodgeLevel(self)
return self:getStorageValue(STORAGEVALUE_DODGE)
end
function Player.setDodgeLevel(self, value)
return self:setStorageValue(STORAGEVALUE_DODGE, value)
end
function Player.getCriticalLevel(self)
return self:getStorageValue(STORAGEVALUE_CRITICAL)
end
function Player.setCriticalLevel(self, value)
return self:setStorageValue(STORAGEVALUE_CRITICAL, value)
end
Não esqueça de registrar a lib no lib.lua
Agora na pasta creaturescript/scripts crie um arquivo chamado dodgeCritical.lua
--[[
Dodge & Critical fixado por Movie (Movie#4361)
Disponibilizado para o TibiaKing e não autorizo outras reproduções
Mantenha os créditos <3
--]]
function onHealthChange(creature, attacker, primaryDamage, primaryType, secondaryDamage, secondaryType, origin)
if (not attacker or not creature) then
return primaryDamage, primaryType, secondaryDamage, secondaryType
end
if primaryType == COMBAT_HEALING then
return primaryDamage, primaryType, secondaryDamage, secondaryType
end
if ((creature:getDodgeLevel() * 3) >= math.random (0, 1000) and creature:isPlayer()) then
primaryDamage = 0
secondaryDamage = 0
creature:say("DODGE!", TALKTYPE_MONSTER_SAY)
creature:getPosition():sendMagicEffect(CONST_ME_BLOCKHIT)
end
if (attacker:isPlayer() and (attacker:getCriticalLevel() * 3) >= math.random (0, 1000)) then
primaryDamage = primaryDamage + math.ceil(primaryDamage * CRITICAL.PERCENT)
attacker:say("CRITICAL!", TALKTYPE_MONSTER_SAY)
creature:getPosition():sendMagicEffect(CONST_ME_EXPLOSIONHIT)
end
return primaryDamage, primaryType, secondaryDamage, secondaryType
end
<event type="healthchange" name="DodgeCritical" script="dodgeCritical.lua"/>
Agora crie outro arquivo dentro do creaturescripts/scripts com o nome dodgeMana.lua
--[[
Dodge & Critical fixado por Movie (Movie#4361)
Disponibilizado para o TibiaKing e não autorizo outras reproduções
Mantenha os créditos <3
--]]
function onManaChange(creature, attacker, primaryDamage, primaryType, secondaryDamage, secondaryType, origin)
if (not attacker or not creature) then
return primaryDamage, primaryType, secondaryDamage, secondaryType
end
if ((creature:getDodgeLevel() * 3) >= math.random (0, 1000) and creature:isPlayer()) then
primaryDamage = 0
secondaryDamage = 0
creature:say("DODGE!", TALKTYPE_MONSTER_SAY)
creature:getPosition():sendMagicEffect(CONST_ME_BLOCKHIT)
end
return primaryDamage, primaryType, secondaryDamage, secondaryType
end
<event type="manachange" name="DodgeMana" script="dodgeMana.lua"/>
Não esqueça de registra no login.lua
player:registerEvent("DodgeCritical")
player:registerEvent("DodgeMana")
Adicione também no login.lua
if player:getDodgeLevel() == -1 then
player:setDodgeLevel(0)
end
if player:getCriticalLevel() == -1 then
player:setCriticalLevel(0)
end
Agora na pasta scripts/talkactions crie um arquivo chamado dodgeCritical.lua
--[[
Dodge & Critical fixado por Movie (Movie#4361)
Disponibilizado para o TibiaKing e não autorizo outras reproduções
Mantenha os créditos <3
--]]
local dodge = TalkAction("!dodge")
local critical = TalkAction("!critical")
function dodge.onSay(player, words, param)
local skill = player:getDodgeLevel()
local message = "DODGE SYSTEM\nO sistema consiste em defender uma porcentagem dos ataques recebidos.\n\nPor Exemplo:\nCada pedra utilizada atribui 0,3% a mais de chance.\nCom 10 pedras, voce tera 3% de chance de defender 50% dos ataques recebidos.\nCom 100 pedras (maximo), voce tera 30% de chance de defender 50% dos ataques recebidos.\nCada pedra que voce usar, sua skill de dodge aumenta em 1 ponto.\n\n------------------\nDodge Skill: [" .. skill .. "/100]"
doPlayerPopupFYI(player, message)
end
dodge:register()
function critical.onSay(player, words, param)
local skill = player:getCriticalLevel()
local message = "CRITICAL SYSTEM\nO sistema consiste em ter uma chance de dar um dano critico.\n\nPor Exemplo:\nCada pedra utilizada atribui 0,3% a mais de chance.\nCom 10 pedras, voce tera 3% de chance de hitar um dano critico dos ataques desferidos ao seu oponente.\nCom 100 pedras (maximo), voce tera 30% de chance de hitar um dano critico dos ataques desferidos ao seu oponente.\nCada pedra que voce usar, sua skill de dodge aumenta em 1 ponto.\n\n------------------\nCritical Skill: [" .. skill .. "/100]"
doPlayerPopupFYI(player, message)
end
critical:register()
Pronto, agora você tem o sistema no seu servidor!
Curtiu? Dá um REP+ aí