Ir para conteúdo
  • Cadastre-se

Posts Recomendados

  • Moderador

@Movie Obrigado pela contribuição. Tópico aprovado!

Meu Curso sobre Programação para OTServer

Programando OTServer

 

Peça o seu script! Entre agora mesmo no grupo

Developing

 

Conteúdos:

 

Discord: Belmont#7352

Não esqueça do REP+ :)     

Link para o post
Compartilhar em outros sites
  • Moderador
  • 5 weeks later...
  • 1 month later...
  • 3 weeks later...
On 10/16/2020 at 5:42 AM, Zoodi said:

Bom dia. Minha source não possui HealthChange. Estou a umas semanas quebrando a cabeça para como adiciona-la. Trata-se de um Tfs 1.2. Alguém pode me ajudar?

Você reparou que ele informa 1.3 né? 1.2 teria que alterar mais coisas..
Isto é uma falha das pessoas, acharem que 1.1/1.2 = 1.3, no caso a falha é do OP.. e outra, deve se elvar em consideração o que ele está chamando de 1.3.

OTSERVBR é um 1.3 todo atrapalhado.. se você tentar colocar um sistema feito para o real tfs 1.3, ele não vai funcionar no OTSERVBR.. pq o cara que esta trabalhando nisso cagou tudo desde o começo..

 

4 hours ago, Orientalz said:

aqui n deu certo n, e n tem a pasta lib.lua

O nome da pasta não é lib.lua, é lib

fica dentro da pasta data, entre as pastas item e lua..

Dentro da sua pasta do servidor.. por exemplo

otserv/ tem uma pasta data
otserv/data e dentro desta pasta data tem uma pasta lib

otserv/data/lib

 

Acho interessante pessoal ter interesse em trazer tutorial e tal, mas fazem umas coisas assim pelas coxas, sem explicação.. ele poderia ter informado onde fica a pasta, até mesmo o registro .. mas deve ser para ter gente perguntando coisa simples e tendo movimentação no post..

 

O fórum deveria ter, desde sempre, uma equipe de qualidade.. acho que já disse isso anos atrás, para evitar este tipo de coisa..

A intenção é boa, mas como dizem por aí, o inferno está cheio de gente com boas intenções.

Link para o post
Compartilhar em outros sites
  • 3 weeks later...

A minha parte do login.lua não entendi muito bem como que coloca aquilo ali sem dar erro. Outra coisa tb que não entendi, não tinha que ter uma action para usar um item e ai adicionar o dodge/critical? alguem poderia me responder essas perguntas pfv ?

image.png

Editado por pitulio (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • 1 month later...
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...

Link para o post
Compartilhar em outros sites
  • 2 months later...

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)
Link para o post
Compartilhar em outros sites
  • 1 month later...

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>

 

Link para o post
Compartilhar em outros sites
  • 9 months later...
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)
Link para o post
Compartilhar em outros sites
  • 2 months later...
  • 2 weeks later...
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í :)

 

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ê oque acontecia e apresentou esse erro.
 

Lua Script Error: [Test Interface]
data/talkactions/scripts/custom/dodgecritical.lua
data/talkactions/scripts/custom/dodgecritical.lua:10: attempt to index local 'dodge' (a nil value)
stack traceback:
        [C]: in function '__newindex'
        data/talkactions/scripts/custom/dodgecritical.lua:10: in main chunk
        [C]: in function 'reload'
        data/talkactions/scripts/reload.lua:81: in function <data/talkactions/scripts/reload.lua:59>
[Warning - Event::checkScript] Can not load script: scripts/custom/dodgecritical.lua

 

Dai removi de novo, e o erro sumiu, porém permaneceu o problema do comando não funcionar. Ao em vez de ficar por comando, não poderia ser adicionado um item ? Aonde o use no mesmo já solucionaria o problema ? Eu utilizo o TFS 1.5 Downgrade 8.6 do nekiro. Tem alguma informação que você poderia me informar ? Aguardando solução.

@EDIT
Sou das antigas e não prestei atenção na ultima parte, scripts/talkactions EU ESTAVA COLOCANDO NA TALKACTIONS/SCRIPTS.
Logo em seguida deu esse erro aqui, que por um acaso em outro topic de outra script sua tambem deu essse erro por conta da versão do tfs e o @luanluciano93 havia respondido um outro membro do forum com a solução, apliquei a mesma mudança pra esta script.
A solução foi trocar a função doPlayerPopupFYI(player, message) pela função correta da versão: player:popupFYI(message).

Editado por Tacabala22
adicionando informações para facilitar a solução do problema. (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • 11 months later...
Em 29/06/2022 em 11:51, leoterrabuio disse:

Como faço para adcionar level de dodge ou critico?

No script fala sobre uma pedra, mas qual a ID?

ja consegiu desse pedra ai?

Link para o post
Compartilhar em outros sites
  • 6 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

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.


  • Conteúdo Similar

    • Por Underewar
      Precisei dessa função e não achei em lugar nem um aqui está uma versão funcional para tfs 1.2 +.
      Listando o monstro ou player que o jogador morreu.

      Data/Creaturescript/XML
      <event type="login" name="LoginDeath" script="death_tp.lua" /> <event type="preparedeath" name="DeathTeleport" script="death_tp.lua"/> Data/Creaturescript/death_tp.lua
      function onLogin(player) player:registerEvent("DeathTeleport") return true end local maxDeathRecords = 5 -- By Underewar function onPrepareDeath(player, killer) -- Update Death DB local byPlayer = 0 local killerName if killer ~= nil then if killer:isPlayer() then byPlayer = 1 else local master = killer:getMaster() if master and master ~= killer and master:isPlayer() then killer = master byPlayer = 1 end end killerName = killer:getName() else killerName = "field item" end local byPlayerMostDamage = 0 local mostDamageKillerName if mostDamageKiller ~= nil then if mostDamageKiller:isPlayer() then byPlayerMostDamage = 1 else local master = mostDamageKiller:getMaster() if master and master ~= mostDamageKiller and master:isPlayer() then mostDamageKiller = master byPlayerMostDamage = 1 end end mostDamageName = mostDamageKiller:getName() else mostDamageName = "field item" end local playerGuid = player:getGuid() db.query("INSERT INTO `player_deaths` (`player_id`, `time`, `level`, `killed_by`, `is_player`, `mostdamage_by`, `mostdamage_is_player`, `unjustified`, `mostdamage_unjustified`) VALUES (" .. playerGuid .. ", " .. os.time() .. ", " .. player:getLevel() .. ", " .. db.escapeString(killerName) .. ", " .. byPlayer .. ", " .. db.escapeString(mostDamageName) .. ", " .. byPlayerMostDamage .. ", " .. (unjustified and 1 or 0) .. ", " .. (mostDamageUnjustified and 1 or 0) .. ")") local resultId = db.storeQuery("SELECT `player_id` FROM `player_deaths` WHERE `player_id` = " .. playerGuid) local deathRecords = 0 local tmpResultId = resultId while tmpResultId ~= false do tmpResultId = result.next(resultId) deathRecords = deathRecords + 1 end if resultId ~= false then result.free(resultId) end local limit = deathRecords - maxDeathRecords if limit > 0 then db.asyncQuery("DELETE FROM `player_deaths` WHERE `player_id` = " .. playerGuid .. " ORDER BY `time` LIMIT " .. limit) end if byPlayer == 1 then local targetGuild = player:getGuild() targetGuild = targetGuild and targetGuild:getId() or 0 if targetGuild ~= 0 then local killerGuild = killer:getGuild() killerGuild = killerGuild and killerGuild:getId() or 0 if killerGuild ~= 0 and targetGuild ~= killerGuild and isInWar(playerId, killer:getId()) then local warId = false resultId = db.storeQuery("SELECT `id` FROM `guild_wars` WHERE `status` = 1 AND ((`guild1` = " .. killerGuild .. " AND `guild2` = " .. targetGuild .. ") OR (`guild1` = " .. targetGuild .. " AND `guild2` = " .. killerGuild .. "))") if resultId ~= false then warId = result.getDataInt(resultId, "id") result.free(resultId) end if warId ~= false then db.asyncQuery("INSERT INTO `guildwar_kills` (`killer`, `target`, `killerguild`, `targetguild`, `time`, `warid`) VALUES (" .. db.escapeString(killerName) .. ", " .. db.escapeString(player:getName()) .. ", " .. killerGuild .. ", " .. targetGuild .. ", " .. os.time() .. ", " .. warId .. ")") end end end end -- teleportando o player para o templo player:teleportTo(player:getTown():getTemplePosition()) -- enchenco life e mana player:addHealth(player:getMaxHealth()) player:addMana(player:getMaxMana()) -- Remove EXP local level = player:getLevel() player:removeExperience(level * 10 * 100, true) -- DEATH MSG player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You are dead.") -- criando efeito de teleport player:getPosition():sendMagicEffect(CONST_ME_TELEPORT) return false end  
    • Por Underewar
      O sistema funciona pelo Target do Monstro, e Regenera Stamina Points.
      Em  events/scripts/creature.lua
      Vamos Adicionar a função a Baixo.
      No mesmo script vamos procurar por
      Creature:onTargetCombat(target) E colocar logo a baixo o seguinte script
      Onde está == "Trainer" Coloque o nome do trainer do seu servidor.
    • Por xWhiteWolf
      Fala galera do TK, hoje vim trazer pra vocês à pedidos do grande @azzouks uma versão do meu Dodge System por equips.

      Explicação: É um sistema onde vc pode colocar uma % de esquiva nos itens e ao usá-los você ganha a chance de desviar dos ataques e levar somente metade do dano.

      Qualquer semelhança com esse > http://www.tibiaking.com/forum/topic/8223-mod-reflect-system-01/ < mod do @Aluccard não é mera coincidência, eu usei o mod dele como base pra fazer o meu *-*

      Sem mais delongas vamos ao script:
      Vá na pasta do seu server e abra uma pasta chamada "mods".. lá dentro crie um arquivo com o nome que vc quiser (sério) de extensão.xml e adicione o seguinte nele:
       




      Configurando:
      Se você não manja de script então eu sugiro que vcs só alterem essa parte aqui:
       
      em vermelho é o máximo que uma pessoa pode ter de dodge: se ela tiver usando um full set que deixe ela com um total de 99% de dodge ela só vai poder aproveitar 50%. Isso foi feito pra evitar um bug.. vocês podem se sentir livres pra alterar esse numero mas não coloquem nada muito grande pra evitar que seus servers explodam.
      em verde é a porcentagem do dano que vocês vao tomar ao desviar.. nesse caso os ataques que eu der dodge darão 50% do dano (0.5)
      em azul é a porcentagem inicial que todos os players vão ter. Por padrão está 0 mas se vc quiser que todos os players do seu server tenham 20% e que cada item dê 5% também é possível editando esse 0 pra 20.

      Feito isso vá em data\lib\function.lua e adicione essas linhas 
      function getItemDodgePercent(itemuid) return getItemAttribute(itemuid, "dodgePercent") end function doPlayerAddDodgeItem(cid, itemid, percent) local item = doPlayerAddItem(cid, itemid) doItemSetAttribute(item, "description", "[Dodge: "..percent.."%]") doItemSetAttribute(item, "dodgePercent", percent) end Agora é só aproveitar no seu server.. toda vez que vc for usar num script vc poderá utilizar as funções getItemDodgePercent(item)
      e a doPlayerAddDodgeItem(cid, itemid, percent).

      Pra finalizar aqui tem um exemplo de uma quest que dá uma plate armor com 0.8% de dodge:




      Espero que gostem!


      EDITADO: 
       
      Fiz um script de action pra ser uma pedra que vai dar dodge nos items. Ele tem muito que melhorar mas por ora ele tá 99% pronto pra ser colocado em algum server que utilize esse dodge system.
      function isHandItem(uid) -- NW based on Mock          uid = uid or 0         if isInArray({1,2,3,4,5,6}, getItemWeaponType(uid)) then              return true          end          return false end function getItemDodgePercent(itemuid) return getItemAttribute(itemuid, "dodgePercent") or 0 end function setItemDodgePercent(uid, percent) doItemSetAttribute(uid, "description", "[Dodge: "..percent.."%]") doItemSetAttribute(uid, "dodgePercent", percent) end function onUse(cid, item, fromPosition, itemEx, toPosition)  level = 0 local upgrade = { [1] = {min = 1, max = 5, chance = 100}, [2] = {min = 5, max = 10, chance = 80}, [3] = {min = 10, max = 20, chance = 60}, [4] = {min = 20, max = 40, chance = 40}, [5] = {min = 40, max = 50, chance = 20} } function isWearing(uid) -- NW based on Mock          uid = uid or 0         if isInArray({uid}, getPlayerSlotItem(cid, 1).uid) or isInArray({uid}, getPlayerSlotItem(cid, 4).uid) or isInArray({uid}, getPlayerSlotItem(cid, 7).uid) or isInArray({uid}, getPlayerSlotItem(cid, 8).uid) then              return true          end          return false end if isHandItem(itemEx.uid) or isWearing(itemEx.uid) then local name = getItemName(itemEx.uid) local atual = math.floor(getItemDodgePercent(itemEx.uid)*10)/10 for i = 1, #upgrade do if string.find(tostring(name),"+".. i .."") then level = i end end if level >= #upgrade then doPlayerSendTextMessage(cid,MESSAGE_STATUS_CONSOLE_BLUE,"Your item is already on max level, you can't upgrade it any further.") return true end if math.random(0,100) <= upgrade[level + 1].chance then  doRemoveItem(item.uid, 1) doPlayerSendTextMessage(cid,MESSAGE_STATUS_CONSOLE_BLUE,"You leveled your "..getItemNameById(itemEx.itemid).." to ".. level+1 ..".") setItemDodgePercent(itemEx.uid, atual + (math.random(upgrade[level+1].min,upgrade[level+1].max))/10) doItemSetAttribute(itemEx.uid,'name', getItemNameById(itemEx.itemid)..' +'..(level+1)) doSendMagicEffect(toPosition, math.random(28,30)) else doRemoveItem(itemEx.uid, 1) doRemoveItem(item.uid, 1) doPlayerSendTextMessage(cid,MESSAGE_STATUS_CONSOLE_BLUE,"Your "..getItemNameById(item.itemid).." has failed and destroyed your "..getItemNameById(itemEx.itemid).." in the process") doSendMagicEffect(toPosition, 4) end else doPlayerSendTextMessage(cid, 24,"You cant refine this item.") end return true end
      Note que pra colocar dodge num item ele tem que: Estar equipado se for qualquer tipo de armadura (legs, boots, helmet, armor) ou livremente (se for weapon/shield).. Necklaces, rings e pendants não são possíveis de colocar dodge.. se vc quiser que seja edita essa função dentro do script pros slots de ring e necklace mas eu não aconselharia a fazer isso.
       e no xml coloque: 
      <action itemid="8306" script=upgraderock.lua"/>
    • Por rodrigorodriguess
      Galerinha, no meu OT, smp quando eu bato em algum monster aparece em cima umas letrinhas escrito "CRITICAL" queria saber como remove-las do meu server.. REP+ pra quem ajudar.
    • Por xWhiteWolf
      Fala galera do TK, vejo que tem bastante gente procurando esse sisteminha que é praticamente igual ao dodge system, então eu decidi fazer visto que na realidade era só mudar 3 linhas kkkk em todo caso ta aí pra quem quiser:

      creaturescripts.xml:
       <!-- CRITICAL SYSTEM -->    <event type="statschange" name="critical" event="script" value="critical.lua"/> creaturescripts\scripts\login.lua:
      --- CRITICAL SYSTEM ---- registerCreatureEvent(cid, "critical") if getPlayerStorageValue(cid, 48913) == -1 then         setPlayerStorageValue(cid, 48913, 0)      end creaturescritps\scripts\critical.lua:
      --[[Critical System -------------------------  By Night Wolf]] local lvlcrit = 48913 local multiplier = 1.5 function onStatsChange(cid, attacker, type, combat, value) if isPlayer(attacker) and (not (attacker == cid)) and (type == STATSCHANGE_HEALTHLOSS or type == STATSCHANGE_MANALOSS)  then if (getPlayerStorageValue(attacker, lvlcrit)*3) >= math.random (0,1000) then dano = math.ceil(value*(multiplier)) doTargetCombatHealth(attacker, cid, combat, -dano, -dano, 255) doSendAnimatedText(getCreaturePos(attacker), "CRITICAL!!", 144) return false end end return true end lvlcrit é o storage que fica salvo o seu level de critical e multiplier é o multiplicador do dano para ataques críticos.. nesse caso um ataque critico vai ser 1,5 vezes maior doque um ataque normal (50% maior)

      Agora em actions.xml adicione:
      <action itemid="1294" script="criticalrock.lua"/> e em actions\scripts\criticalrock.lua adicione:
      --- CRITICAL System by Night Wolf       local config = {    effectonuse = 14, -- efeito que sai    levelscrit = 100,  --- leveis que terão    storagecrit = 48913 -- storage que será verificado    }     function onUse(cid, item, frompos, item2, topos)     if getPlayerStorageValue(cid, config.storagecrit) < config.levelscrit then    doRemoveItem(item.uid, 1) doSendMagicEffect(topos,config.effectonuse) doPlayerSendTextMessage(cid,22,"You've Leveled your Critical Skill to ["..(getPlayerStorageValue(cid, config.storagecrit)+1).."/"..config.levelscrit.."].") setPlayerStorageValue(cid, config.storagecrit, getPlayerStorageValue(cid, config.storagecrit)+1) elseif getPlayerStorageValue(cid, config.storagecrit) >= config.levelscrit then doPlayerSendTextMessage(cid,22,"You've already reached the MAX level of Critical Skill.\nCongratulations!!!!")     return 0     end return 1 end Feito isso tá pronto, pra editar o item que dá a skill de critical vc edita no actions.xml mesmo:
      <action itemid="1294"   << ID do item que será usado pra dar a skill.
      A config tá bem simples:
      effectonuse = 14, -- efeito que sai
         levelscrit = 100,  --- leveis que terão 
         storagecrit = 48913 -- storage que será verificado.

      Lembrando que cada pedra utilizada dará 0,3% a mais de chance.. 10 pedras dão 3% de chance de dar critico a cada ataque e 100 pedras (NIVEL MÁXIMO PADRÃO) dará 30% de chance de dar crítico em cada ataque.
      Espero que vcs gostem, qualquer coisa deixem os comentários aqui.

      Obs: aqui tá uma foto


      Note que esse script só funciona em players, se vc quiser que funcione em monstros você vai ter que abrir um por um todos os monstros do server e colocar essa tag aqui: 
      <script> <event name="critical"/> </script> coloque antes de  </monster>
      Minha dica: coloquem apenas no Trainer pra que o player consiga ver que ele tem o critical e quanto ele tira e deixem avisado que o sistema só vai funcionar em players. 
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo