Ir para conteúdo

[TFS 1.x] Dodge System


Bruno

Posts Recomendados

Introdução

 

Este script consiste em defender uma porcentagem dos ataques recebidos de acordo com o dodge level.

Exemplo: Suponhamos que o player tenha Dodge Skill 100 e a porcentagem de defesa esteja configurado para defender 50%, o player terá 30% de chance de defender 50% dos ataques recebidos.

 

Instalação

 

O conteúdo da lib serve para o Dodge e Critical System, se você já fez este procedimento no outro script simplesmente ignore e vá para o próximo passo.

 

Em data/lib/core/core.lua adicione o seguinte conteúdo em qualquer parte:

dofile('data/lib/core/dclib.lua')
Ainda em data/lib/core/core crie um arquivo chamado dclib.lua com o seguinte conteúdo:

 

-- Configuração
DODGE = {
	STORAGE =   48900, -- player storage do sistema
	LEVEL_MAX = 100, -- máximo de dodge level que o player pode alcançar
	PERCENT = 0.5 -- porcentagem que irá defender o ataque [padrão 50% = 0.5]
}

CRITICAL = {
	STORAGE =   48901, -- player storage do sistema
	LEVEL_MAX = 100, -- máximo de critical level que o player pode alcançar
	PERCENT = 0.5 -- porcentagem que irá aumentar o ataque [padrão 50% = 0.5]
}

function Player.getDodgeLevel(self)
	return self:getStorageValue(DODGE.STORAGE)
end

function Player.setDodgeLevel(self, value)
	return self:setStorageValue(DODGE.STORAGE, value)
end

function Player.getCriticalLevel(self)
	return self:getStorageValue(CRITICAL.STORAGE)
end

function Player.setCriticalLevel(self, value)
	return self:setStorageValue(CRITICAL.STORAGE, value)
end

 

 

Agora em data/actions/actions.xml adicione a seguinte tag:

<action itemid="18413" script="other/dodge.lua"/>
Depois em data/actions/scripts/other crie um arquivo chamado dodge.lua com o seguinte conteúdo:

 

function onUse(player, item, fromPosition, target, toPosition, isHotkey)
	if player:getDodgeLevel() < DODGE.LEVEL_MAX then
		item:remove(1)
		player:getPosition():sendMagicEffect(CONST_ME_GIFT_WRAPS)
		player:setDodgeLevel(player:getDodgeLevel() + 1)
		player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Você aumentou sua skill de dodge para [" .. player:getDodgeLevel() .. "/" .. DODGE.LEVEL_MAX .. "].")
	elseif player:getDodgeLevel() >= DODGE.LEVEL_MAX then
		player:sendTextMessage(MESSAGE_STATUS_WARNING, "Você alcancou o máximo de seu DODGE Skill.\nParabéns!!!!")
		return false
    end
	return true
end

 

 

Pronto, já configuramos o item para atribuir o Dodge Skill, vamos configurar a parte dos ataques recebidos.

 

Vá em data/creaturescripts/creaturescripts.xml e adicione a seguinte tag:

<event type="healthchange" name="DodgeSystem" script="dodgeSystem.lua"/>
Agora em data/creaturescripts/scripts crie um arquivo chamado dodgeSystem.lua com o seguinte conteúdo:

 

function onHealthChange(creature, attacker, primaryDamage, primaryType, secondaryDamage, secondaryType, origin)
	if not isPlayer(creature) then return false end
	if (creature:getDodgeLevel() * 3) >= math.random (0, 1000) and isCreature(attacker) then
        if isInArray({ORIGIN_MELEE, ORIGIN_RANGED, ORIGIN_SPELL}, origin) and primaryType ~= COMBAT_HEALING then
            primaryDamage = primaryDamage - math.ceil(primaryDamage * DODGE.PERCENT)
            creature:say("DODGE!", TALKTYPE_MONSTER_SAY)
			creature:getPosition():sendMagicEffect(CONST_ME_BLOCKHIT)
        end
    end
    return primaryDamage, primaryType, secondaryDamage, secondaryType
end

 

 

Ainda em data/creaturescripts/scripts abra o arquivo login.lua e

Antes de:

return true
Adicione:

player:registerEvent("DodgeSystem")

-- Dodge System
if player:getDodgeLevel() == -1 then
    player:setDodgeLevel(0) 
end
O sistema está finalizado, agora vamos criar as talkactions para que os players acompanhem seu skill.

 

Em data/talkactions/talkactions.xml adicione a tag:

<talkaction words="!dodge" script="dodge.lua"/>
E para finalizar, em data/talkactions/scripts crie um arquivo chamado dodge.lua com o seguinte conteúdo:

 

function onSay(player, words, param)
	local skill = player:getDodgeLevel()
	local message = "DODGE SYSTEM\nO sistema consiste em defender % 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\nPara obter a pedra, voce pode comprar no NPC Hyperion, localizado no templo.\nOu atraves de nosso WebShop.\n------------------\nDodge Skill: [" .. skill .. "/100]"
	doPlayerPopupFYI(player, message)
end

 

 

Bom é isso ai!

 

Créditos:

Link para o comentário
Compartilhar em outros sites

Gostei demais Bruno, estou montando um servidor, e esse sistema caiu como uma luva. Muito obrigado por este excelente sistema!!

Vlw Krono, fico feliz que gostou! :)

Link para o comentário
Compartilhar em outros sites

  • 6 months later...

Caso eu fosse adicionar o dodge em um item como faria?

-Por exemplo uma bota aumentar 20% de dodge

 

Ótimo script btw.

 

 

Bom, próximo de vinte, fazendo uma regra de três é 66,

 

então: é só você fazer um script onEquip e outro onDeEquip.

 

no onEquip, coloca isto:

function onEquip(player) 
    player:setDodgeLevel(player:getDodgeLevel() + 66) 
    return true
end

no onDeEquip, coloca isto:

function onDeEquip(player)
    player:setDodgeLevel(player:getDodgeLevel() - 66) 
    return true
end

Ambos os scripts devem se colocados na pasta scripts, da pasta movements, e devem conter extensão .lua

 

 

agora abra o movements.xml na pasta movements e adicione duas tags:

<movevent type="Equip" itemid="ID_DA_BOTA_AQUI" slot="feet" event="script" value="nome do arquivo.lua"/>
<movevent type="DeEquip" itemid="ID_DA_BOTA_AQUI" slot="feet" event="script" value="nome do arquivo.lua"/>

 

 

Aonde fica essa pasta, core?

 

Em lugar nenhum, você tem que criar...

 

 

 

[titulo][/titulo]

 

@Tópico: Bom script @Bruno, parabéns.

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

 

 

Em lugar nenhum, você tem que criar...

 

Eu tentei, criei um arquivo.lua, e joguei aquele dofile('data/lib/core/dclib.lua') dentro, mas ai na hora de executa o distro da erro, ele não consegue encontrar os arquivo lib..

Link para o comentário
Compartilhar em outros sites

  • 1 year later...
Em 02/01/2016 at 14:40, DaniF disse:

 

 

 

Eu tentei, criei um arquivo.lua, e joguei aquele dofile('data/lib/core/dclib.lua') dentro, mas ai na hora de executa o distro da erro, ele não consegue encontrar os arquivo lib..

 

É porque ele pediu para criar um arquivo chamado ddlib, e no documento ele coloca para procurar um arquivo chamado dcllib... é só arrumar os nomes :D

Olá Bruno blz?

 

cara to com TFS 1.3 aqui e coloquei o sistema, sem usar os itens os bixos não estão hitando com physical...

 

Se sabe o que pode ser?

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

  • 3 months later...

ótimo sistema!! estou usando em meu server, porém gostaria de por uma pagina do site explicando o sistema, alguém sabe como fazer??

 E mais uma coisa ele buga o acento ai tenho que por sem acento quando ele fala "Você" ou "Parabéns"

Link para o comentário
Compartilhar em outros sites

  • 3 months later...

Olá, parabéns pelo script. Porém o único que funciona pra mim é o Crítico (apesar de em nenhum momento eu conseguir ver o crítico subir, pelo menos não deu erro).

Mas o Dodge ele nem usa a pedra pra ganhar Skill.

 

Edit.: Adaptei os 100 pontos de Dodge direto no banco de dados só pra testar, e agora meu personagem é imortal. Tem um morgaroth batendo nele e só da DODGE!

 

wCnBJnqdTx_rzY8nxbOt0A.jpeg

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

  • 1 month later...
  • 5 months later...

eu instalei o dodge e critical, só q me embananei no login.lua e ficou dando esse erro

 

[Warning - Event::checkScript] Can not load script: scripts/login.lua
data/creaturescripts/scripts/login.lua:40: 'then' expected near char(239)

 

Citar

player:registerEvent("CriticalSystem")


-- Critical System
if player:getCriticalLevel() == -1 then
    player:setCriticalLevel(0) 

player:registerEvent("DodgeSystem")

-- Dodge System
if player:getDodgeLevel() == -1 then
    player:setDodgeLevel(0) 
end
    return true
end

Em 05/06/2015 em 17:48, Bruno disse:

Introdução

 

Este script consiste em defender uma porcentagem dos ataques recebidos de acordo com o dodge level.

Exemplo: Suponhamos que o player tenha Dodge Skill 100 e a porcentagem de defesa esteja configurado para defender 50%, o player terá 30% de chance de defender 50% dos ataques recebidos.

 

Instalação

 

O conteúdo da lib serve para o Dodge e Critical System, se você já fez este procedimento no outro script simplesmente ignore e vá para o próximo passo.

 

Em data/lib/core/core.lua adicione o seguinte conteúdo em qualquer parte:

 


dofile('data/lib/core/dclib.lua')

Ainda em data/lib/core/core crie um arquivo chamado dclib.lua com o seguinte conteúdo:

 

  Mostrar conteúdo oculto

 



-- Configuração
DODGE = {
	STORAGE =   48900, -- player storage do sistema
	LEVEL_MAX = 100, -- máximo de dodge level que o player pode alcançar
	PERCENT = 0.5 -- porcentagem que irá defender o ataque [padrão 50% = 0.5]
}

CRITICAL = {
	STORAGE =   48901, -- player storage do sistema
	LEVEL_MAX = 100, -- máximo de critical level que o player pode alcançar
	PERCENT = 0.5 -- porcentagem que irá aumentar o ataque [padrão 50% = 0.5]
}

function Player.getDodgeLevel(self)
	return self:getStorageValue(DODGE.STORAGE)
end

function Player.setDodgeLevel(self, value)
	return self:setStorageValue(DODGE.STORAGE, value)
end

function Player.getCriticalLevel(self)
	return self:getStorageValue(CRITICAL.STORAGE)
end

function Player.setCriticalLevel(self, value)
	return self:setStorageValue(CRITICAL.STORAGE, value)
end

 

 

Agora em data/actions/actions.xml adicione a seguinte tag:

 


<action itemid="18413" script="other/dodge.lua"/>

Depois em data/actions/scripts/other crie um arquivo chamado dodge.lua com o seguinte conteúdo:

 

  Ocultar conteúdo

 



function onUse(player, item, fromPosition, target, toPosition, isHotkey)
	if player:getDodgeLevel() < DODGE.LEVEL_MAX then
		item:remove(1)
		player:getPosition():sendMagicEffect(CONST_ME_GIFT_WRAPS)
		player:setDodgeLevel(player:getDodgeLevel() + 1)
		player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Você aumentou sua skill de dodge para [" .. player:getDodgeLevel() .. "/" .. DODGE.LEVEL_MAX .. "].")
	elseif player:getDodgeLevel() >= DODGE.LEVEL_MAX then
		player:sendTextMessage(MESSAGE_STATUS_WARNING, "Você alcancou o máximo de seu DODGE Skill.\nParabéns!!!!")
		return false
    end
	return true
end

 

 

Pronto, já configuramos o item para atribuir o Dodge Skill, vamos configurar a parte dos ataques recebidos.

 

Vá em data/creaturescripts/creaturescripts.xml e adicione a seguinte tag:

 


<event type="healthchange" name="DodgeSystem" script="dodgeSystem.lua"/>

Agora em data/creaturescripts/scripts crie um arquivo chamado dodgeSystem.lua com o seguinte conteúdo:

 

  Ocultar conteúdo

 



function onHealthChange(creature, attacker, primaryDamage, primaryType, secondaryDamage, secondaryType, origin)
	if not isPlayer(creature) then return false end
	if (creature:getDodgeLevel() * 3) >= math.random (0, 1000) and isCreature(attacker) then
        if isInArray({ORIGIN_MELEE, ORIGIN_RANGED, ORIGIN_SPELL}, origin) and primaryType ~= COMBAT_HEALING then
            primaryDamage = primaryDamage - math.ceil(primaryDamage * DODGE.PERCENT)
            creature:say("DODGE!", TALKTYPE_MONSTER_SAY)
			creature:getPosition():sendMagicEffect(CONST_ME_BLOCKHIT)
        end
    end
    return primaryDamage, primaryType, secondaryDamage, secondaryType
end

 

 

Ainda em data/creaturescripts/scripts abra o arquivo login.lua e

Antes de:

 


return true

Adicione:

 


player:registerEvent("DodgeSystem")

-- Dodge System
if player:getDodgeLevel() == -1 then
    player:setDodgeLevel(0) 
end

O sistema está finalizado, agora vamos criar as talkactions para que os players acompanhem seu skill.

 

Em data/talkactions/talkactions.xml adicione a tag:

 


<talkaction words="!dodge" script="dodge.lua"/>

E para finalizar, em data/talkactions/scripts crie um arquivo chamado dodge.lua com o seguinte conteúdo:

 

  Ocultar conteúdo

 



function onSay(player, words, param)
	local skill = player:getDodgeLevel()
	local message = "DODGE SYSTEM\nO sistema consiste em defender % 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\nPara obter a pedra, voce pode comprar no NPC Hyperion, localizado no templo.\nOu atraves de nosso WebShop.\n------------------\nDodge Skill: [" .. skill .. "/100]"
	doPlayerPopupFYI(player, message)
end

 

 

Bom é isso ai!

 

Créditos:

 

Link para o comentário
Compartilhar em outros sites

  • 1 month later...
Em 17/01/2019 em 17:15, bilaux disse:

eu instalei o dodge e critical, só q me embananei no login.lua e ficou dando esse erro

 

[Warning - Event::checkScript] Can not load script: scripts/login.lua
data/creaturescripts/scripts/login.lua:40: 'then' expected near char(239)

 

 

estou com o mesmo erro :\ e parece que o fórum parou :|

2 minutos atrás, RichardZago disse:

estou com o mesmo erro :\ e parece que o fórum parou :|

[20:51:43.399]  data/creaturescripts/scripts/l
aturescripts/scripts/login.lua:5>
[20:51:43.496] Account Manager has logged out. 

O account manager no executável disse que logou, porém, no Tibia só dá carregando e nunca entra, agora se eu apago o teu script no login.lua, eu consigo logar, porém o dodge não funciona :\ 

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...