Ir para conteúdo

Featured Replies

Postado

Hi,
Para devolver o que recebi aqui, colocarei para si um sistema de transformação a trabalhar na TFS 1.X.
(Testei em 1.4.2) 

 

MUDANÇA DE SOURCE NECESSÁRIA PARA O BOM FUNCIONAMENTO!

Havia algo dentro do código TFS (e provavelmente outras distros) que não estava funcionando corretamente e depois que eu informei, eles se fundiram em tfs principais, então já está dentro do TFS 1.5, mas não está em versões mais antigas.
Trata-se de refrescar a velocidade do jogador após a transformação, se você não tiver isso, então sua velocidade do vocations.xml baseSpeed não é refrescada.
Você precisa adicionar isto às sources:

https://github.com/otland/forgottenserver/pull/4215/files

se você não tem acesso às sources, eu tenho um meio de contornar isso, mas não vou inundar este posto, então escreva em pv.

 

Créditos: 
Erexo (guião original)
Itutorial (TFS 1.X),
Tofame (alteração: talkaction --> spell; source mudanças; correções do scripts)

 

 

no final do global.lua:

--[[
voc = from vocation
newVoc = to vocation
looktype = new outfit
revertLooktype = current outfit
level = lvl needed to transform
rage = soul needed to transform (you can disable it, just type 0)
kiToTrans = mana to transform
addHp = maxHp added when you transform
addKi = maxMana added
effectOn = magic effect when you use transform
aura = magic effect when you have current transform (can be disabled, just type 0). type nil in this version
constant = if transform is constant (when it is, player dont lose transform/outfit and maxHp/Mana, and cannot use revert)
--]]
exhaust_transform = {}
-- [1-8] naruto,
transform = {
[1] = {voc = 1, newVoc = 2, from_looktype = 2, looktype = 3, level = 50, rage = 0, mana = 50, addHealth = 450, addMana = 450, effect = 76, aura = nil, constant = false},
[2] = {voc = 2, newVoc = 3, from_looktype = 3, looktype = 4, level = 100, rage = 0, mana = 50, addHealth = 500, addMana = 500, effect = 76, aura = nil, constant = false},
[3] = {voc = 3, newVoc = 4, from_looktype = 4, looktype = 5, level = 150, rage = 0, mana = 50, addHealth = 650, addMana = 650, effect = 76, aura = nil, constant = false},
[4] = {voc = 4, newVoc = 5, from_looktype = 5, looktype = 6, level = 200, rage = 0, mana = 50, addHealth = 800, addMana = 800, effect = 76, aura = nil, constant = false},
[5] = {voc = 5, newVoc = 6, from_looktype = 6, looktype = 7, level = 250, rage = 0, mana = 50, addHealth = 900, addMana = 900, effect = 76, aura = nil, constant = false},
[6] = {voc = 6, newVoc = 7, from_looktype = 7, looktype = 8, level = 300, rage = 0, mana = 50, addHealth = 1000, addMana = 1000, effect = 76, aura = nil, constant = false},
[7] = {voc = 7, newVoc = 8, from_looktype = 8, looktype = 9, level = 400, rage = 0, mana = 50, addHealth = 1500, addMana = 1500, effect = 76, aura = nil, constant = false},
[8] = {voc = 8, newVoc = 9, from_looktype = 9, looktype = 10, level = 500, rage = 0, mana = 50, addHealth = 1500, addMana = 1500, effect = 76, aura = nil, constant = false} -- end naruto transforms
}

spells/scripts/revert.lua

local combat = Combat()
combat:setParameter(COMBAT_PARAM_AGGRESSIVE, false)

function onCastSpell(player, variant)
    local pid = player:getId()

    local TRANS = transform[player:getVocation():getId() - 1] -- - [player:getVocation():getId() - 4] domyslnie, should be -1.

    if not TRANS then
    player:sendCancelMessage("You cannot revert.")
    return false
    end

    local outfit = player:getOutfit()
    outfit.lookType = TRANS.from_looktype

    if TRANS.constant then
        player:setOutfit(outfit)
    else
        player:setOutfit(outfit, false)
    end
	
    exhaust_transform[pid] = 1
    player:setMaxHealth(player:getMaxHealth() - TRANS.addHealth)
    player:setMaxMana(player:getMaxMana() - TRANS.addMana)
    player:setVocation(TRANS.voc)
    player:save()
return combat:execute(player, variant)
end

spells/scripts/transform.lua

local combat = Combat()
combat:setParameter(COMBAT_PARAM_AGGRESSIVE, false)

function onCastSpell(player, variant)
	local effectPosition = Position(player:getPosition().x, player:getPosition().y, player:getPosition().z)

    local pid = player:getId()

    local TRANS = transform[player:getVocation():getId()]
	
	if not TRANS then
        player:sendCancelMessage("You cannot transform.")
        return false
    end

	if TRANS.effect == 76 then
		effectPosition = Position(player:getPosition().x + 2, player:getPosition().y, player:getPosition().z)
	end
	
    if player:getLevel() < TRANS.level then
        player:sendCancelMessage("You must reach level "..TRANS.level.." to transform.")
        return false
    end
    if player:getSoul() < TRANS.rage then
        player:sendCancelMessage("You need "..TRANS.rage.." to transform.")
        return false
    end
    if player:getMana() < TRANS.mana then
        player:sendCancelMessage("You need "..TRANS.mana.." to transform.")
        return false
    end

    local outfit = player:getOutfit()
    outfit.lookType = TRANS.looktype

    if TRANS.constant then
        player:setOutfit(outfit)
    else
        player:setOutfit(outfit, false)
    end

    player:addSoul(-TRANS.rage)
    player:setMaxHealth(player:getMaxHealth() + TRANS.addHealth)
    player:setMaxMana(player:getMaxMana() + TRANS.addMana)
    effectPosition:sendMagicEffect(TRANS.effect)
    player:setVocation(TRANS.newVoc)
    player:save()
    return combat:execute(player, variant)
end

spells.xml:

<instant group="support" spellid="175" name="Revert" words="revert" level="1" mana="10" aggressive="0" selftarget="1" cooldown="1000" groupcooldown="1000" needlearn="0" script="revert.lua" />
	<instant group="support" spellid="175" name="Transform" words="transform" level="1" mana="10" aggressive="0" selftarget="1" cooldown="1000" groupcooldown="1000" needlearn="0" script="transform.lua" />

 

 

As coisas abaixo são opcionais, adicione-as se você quiser ter aura. Se você não estiver usando, deixe a aura = nil em global.lua

Também observei que isso poderia causar atrasos/screen freeze, por isso não recomendo o uso de aura.

 

globalevents.xml adicionar linha:

<globalevent name="TransformEffects" interval="2000" script="TransformEffects.lua"/>

TransformEffects.lua (data/globalevents/scripts/TransformEffects.lua):

function onThink(interval)
    for _, player in pairs(Game.getPlayers()) do
        if player then
            TRANS = transform[player:getVocation():getId()]
            if TRANS then
                if TRANS.aura ~= nil then
                    player:getPosition():sendMagicEffect(TRANS.aura)
                end
            end
        end
    end
return true
end

 

edit:

só consigo falar um pouco de espanhol e muito bem em inglês, por isso uso DEEPL para falar portugês.

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

Postado
  • Autor
On 8/25/2022 at 12:22 PM, luanluciano93 said:

Legal cara, obrigado por postar o sistema. Fico muito feliz em ver que os derivados estão começando a usar as TFS mais atuais e saindo da mesmice. 

obrigado pelas palavras amáveis

 

 

O correio foi atualizado, fiz algumas correções e alguns arranjos. A transformação deve funcionar perfeitamente agora. Recomendo escrever quaisquer bugs que me apareçam. 

Ainda estou usando um tradutor (deepl), então se algo não estiver claro, eu ficaria grato se você me dissesse. Tenho bons idiomas inglês e espanhol, mas não portugês.

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

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