Por
Tofames
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)
transform system.mp4
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.
Posts Recomendados
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.