Ir para conteúdo

[TFS 1.x] Critical System


Bruno

Posts Recomendados

Introdução

 

Este script consiste em aumentar uma porcentagem dos ataques de acordo com o critical level.

Exemplo: Suponhamos que o player tenha Critical Skill 100 e a porcentagem de ataque esteja configurado para aumentar 50%, o player terá 30% de chance de au 50% dos ataques.

 

Instalação

 

O conteúdo da lib serve para o Critical e Dodge 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="18415" script="other/critical.lua"/>
Depois em data/actions/scripts/other crie um arquivo chamado critical.lua com o seguinte conteúdo:

 

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

 

 

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

 

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

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

 

function onHealthChange(creature, attacker, primaryDamage, primaryType, secondaryDamage, secondaryType, origin)
	if not isPlayer(attacker) then return false end
	if (attacker:getCriticalLevel() * 3) >= math.random (0, 1000) then
        if isInArray({ORIGIN_MELEE, ORIGIN_RANGED, ORIGIN_SPELL}, origin) and primaryType ~= COMBAT_HEALING then
            primaryDamage = primaryDamage + math.ceil(primaryDamage * CRITICAL.PERCENT)
            attacker:say("CRITICAL!", TALKTYPE_MONSTER_SAY)
			creature:getPosition():sendMagicEffect(CONST_ME_EXPLOSIONHIT)
        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("CriticalSystem")

-- Critical System
if player:getCriticalLevel() == -1 then
	player:setCriticalLevel(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="!critical" script="critical.lua"/>
E para finalizar, em data/talkactions/scripts crie um arquivo chamado critical.lua com o seguinte conteúdo:

 

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

 

 

Bom é isso ai!

 

Créditos:

Link para o comentário
Compartilhar em outros sites

Boa, acho muito interessante esse sistema.

Vlw man!

Quando eu vi a primeira vez, gostei muito ai atualizei kkkk

Link para o comentário
Compartilhar em outros sites

gostei muito do seu sistema, mas tenho uma duvida, no caso o hit que sairá critico, será o mesmo hit que seria se não fosse, o que eu quero dizer, o dano não vira com alguma corsinha diferente? vi em algum lugar que quando o cara bate o critico o dano sai laranja

Link para o comentário
Compartilhar em outros sites

Laranja é apenas a mensagem, o efeito é uma explosão que sai do adversário, seja monstro ou player.

não a mensagem de "critical!" mas sim o dano, em vez de ser vermelho no caso de um hit de physical damage, o NUMERO do valor do dano

Link para o comentário
Compartilhar em outros sites

não a mensagem de "critical!" mas sim o dano, em vez de ser vermelho no caso de um hit de physical damage, o NUMERO do valor do dano

Daria para fazer, é só colocar:

creature:say(primaryDamage, TALKTYPE_MONSTER_SAY)

 

E alterar para o efeito desejado.

Link para o comentário
Compartilhar em outros sites

Daria para fazer, é só colocar:

creature:say(primaryDamage, TALKTYPE_MONSTER_SAY)

 

E alterar para o efeito desejado.

obrigado querido :D

Link para o comentário
Compartilhar em outros sites

Da erro na talkaction:

 

 

Provavelmente não vai funcionar, pode atualizar o script por favor :D

Com base nos script do: https://github.com/orts/server

A base é a mesma amigo, se fosse erro no script, não iria funcionar as actions e o próprio sistema, não só a talkaction.

Tem ctz que é só esse erro que está gerando?

Link para o comentário
Compartilhar em outros sites

A base é a mesma amigo, se fosse erro no script, não iria funcionar as actions e o próprio sistema, não só a talkaction.

Tem ctz que é só esse erro que está gerando?

Não testei o sistema todo, só a talkaction por enquanto.

 

O comando !critical funcionou:

http://i.imgur.com/LPXfl05.png

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

×
×
  • Criar Novo...