Ir para conteúdo

Featured Replies

Postado
Em 10/08/2020 em 09:46, Breno Alves disse:

[Dodge & Critical]

VlVKQKC.png&key=d5c17620ae9567a1f898dd7a

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.

VlVKQKC.png&key=d5c17620ae9567a1f898dd7a

Testado no TFS 1.3 na versão 8.60

VlVKQKC.png&key=d5c17620ae9567a1f898dd7a

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

VlVKQKC.png&key=d5c17620ae9567a1f898dd7a

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

VlVKQKC.png&key=d5c17620ae9567a1f898dd7a

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

VlVKQKC.png&key=d5c17620ae9567a1f898dd7a

Pronto, agora você tem o sistema no seu servidor!

Curtiu? Dá um REP+ aí :)

 

Em 10/08/2020 em 09:46, Breno Alves disse:

[Dodge & Critical]

VlVKQKC.png&key=d5c17620ae9567a1f898dd7a

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.

VlVKQKC.png&key=d5c17620ae9567a1f898dd7a

Testado no TFS 1.3 na versão 8.60

VlVKQKC.png&key=d5c17620ae9567a1f898dd7a

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

VlVKQKC.png&key=d5c17620ae9567a1f898dd7a

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

VlVKQKC.png&key=d5c17620ae9567a1f898dd7a

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

VlVKQKC.png&key=d5c17620ae9567a1f898dd7a

Pronto, agora você tem o sistema no seu servidor!

Curtiu? Dá um REP+ aí :)

 

Opa aqui aparentemente deu tudo certo, mas como eu adiquiro esses dodge? usando qual item, nao entendo muito... porem o script parece estar funcionando! me ajude nessa duvida...

  • 2 months later...
  • Respostas 20
  • Visualizações 9.2k
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • [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 intern

  • You are deus? que fala?

  • Fiz tudo certinho aqui e nenhum erro ocorreu, porém quando solto o comando !critical ou !dodge dentro do game nada acontece e nenhum erro acontece na distro, fui registrar nas talkactions.xml e pra vê

Posted Images

Postado

Olá, estou tendo o seguinte erro com o sistema dodge. Critical funciona bem.

spacer.png

 

Fixed!

No final entendi que deveria registrar Dodge e Critical separadamente em creaturevents para que não fosse acionado pelo registro em events/creature.lua, saudações! Excelente sistema, muito obrigado ?

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

  • 1 month later...
Postado

Opa, Desculpa Reiver o topico! mas to com um errinho na hora de logar!,

 

MEU LOGIN.LUA

Spoiler

function onLogin(player)
    local loginStr = "Welcome to " .. configManager.getString(configKeys.SERVER_NAME) .. "!"
    if player:getLastLoginSaved() <= 0 then
        loginStr = loginStr .. " Please choose your outfit."
        player:sendOutfitWindow()
    else
        if loginStr ~= "" then
            player:sendTextMessage(MESSAGE_STATUS_DEFAULT, loginStr)
        end

        loginStr = string.format("Your last visit was on %s.", os.date("%a %b %d %X %Y", player:getLastLoginSaved()))
    end
    player:sendTextMessage(MESSAGE_STATUS_DEFAULT, loginStr)

    -- Stamina
    nextUseStaminaTime[player.uid] = 0

    -- Promotion
    local vocation = player:getVocation()
    local promotion = vocation:getPromotion()
    if player:isPremium() then
        local value = player:getStorageValue(STORAGEVALUE_PROMOTION)
        if not promotion and value ~= 1 then
            player:setStorageValue(STORAGEVALUE_PROMOTION, 1)
        elseif value == 1 then
            player:setVocation(promotion)
        end
    elseif not promotion then
        player:setVocation(vocation:getDemotion())
    end
    
    if player:getDodgeLevel() == -1 then
    player:setDodgeLevel(0)
    end
    
    if player:getCriticalLevel() == -1 then
    player:setCriticalLevel(0)
    end

    -- Events
    player:registerEvent("PlayerDeath")
    player:registerEvent("DropLoot")
    player:registerEvent("DodgeMana")
    player:registerEvent("DodgeCritical")
    
    return true
end
 

 

.

Spoiler

data/creaturescripts/scripts/login.lua:41: attempt to call method 'getDodgeLevel' (a nil value)
stack traceback:
        [C]: in function 'getDodgeLevel'
        data/creaturescripts/scripts/login.lua:41: in function <data/creaturescripts/scripts/login.lua:1>

 

 2

Spoiler

data/creaturescripts/scripts/login.lua:41: attempt to call method 'getCriticalLevel' (a nil value)
stack traceback:
        [C]: in function 'getCriticalLevel'
        data/creaturescripts/scripts/login.lua:41: in function <data/creaturescripts/scripts/login.lua:1>

 

  • 9 months later...
Postado
Em 10/08/2020 em 09:46, Breno Alves disse:

[Dodge & Critical]

VlVKQKC.png&key=d5c17620ae9567a1f898dd7a

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.

VlVKQKC.png&key=d5c17620ae9567a1f898dd7a

Testado no TFS 1.3 na versão 8.60

VlVKQKC.png&key=d5c17620ae9567a1f898dd7a

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

VlVKQKC.png&key=d5c17620ae9567a1f898dd7a

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

VlVKQKC.png&key=d5c17620ae9567a1f898dd7a

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

VlVKQKC.png&key=d5c17620ae9567a1f898dd7a

Pronto, agora você tem o sistema no seu servidor!

Curtiu? Dá um REP+ aí :)

Sem erros, mas não está surtindo efeito, nenhum dano critico acontece

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

  • 2 months later...

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 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo