Olá pessoal do XTibia! Venho aqui, mais uma vez, apresentar um script desenvolvido por min e pelo Vodkart. O script consiste em um sistema de tiles (pisos) com action ids onde eles adicionam uma porcentagem de vida e mana para o jogador, e ainda pode ser usado como armadilha, podendo ser usado em diversas quests.
Segue o script e a explicação deste:
Como não havia as funções necessárias para o desenvolvimento do script, estas foram criadas no próprio e estão funcionando perfeitamente. Para adicionar o script, vá em data/movements/scripts, crie um arquivo .lua e cole isto dentro dele:
function onStepIn(cid, item, pos)
if (item.actionid == 60160) then
local storage = (3600*24 + os.time()) -- Tempo, no caso, 1 dia.
if getPlayerStorageValue(cid, 13090) - os.time() <= 0 then
local sec = 20 -- Até quanto segundos vai adicionar.
doFillPlayer(cid,sec)
setPlayerStorageValue(cid, 13090, storage)
doSendAnimatedText(getPlayerPosition(cid), "Aaaah...", TEXTCOLOR_ORANGE)
return TRUE
end
elseif (item.actionid == 60161) then
local sec = 10 -- Até quanto segundos vai remover.
doTrapPlayer(cid, sec)
doSendAnimatedText(getPlayerPosition(cid), "Armadilha!", TEXTCOLOR_ORANGE)
doSendMagicEffect(getPlayerPosition(cid), 11)
end
return TRUE
end
function doFillPlayer(cid, time)
if isCreature(cid) then
local percent = 2/10 -- No caso, 20%.
doCreatureAddHealth(cid, getCreatureMaxHealth(cid)*percent)
doCreatureAddMana(cid, getCreatureMaxMana(cid)*percent)
if time ~= 1 then
addEvent(doFillPlayer, 1000, cid, time - 1)
end
return TRUE
end
return TRUE
end
function doTrapPlayer(cid, time)
if isCreature(cid) then
local hp,mana = -10,-10 -- Quantidade de vida/mana a serem removidas por segundo.
doCreatureAddMana(cid, mana)
doCreatureAddHealth(cid, hp)
if time ~= 1 and getCreatureHealth(cid) > 0 then
addEvent(doTrapPlayer, 1000, cid, time - 1)
end
return TRUE
end
return TRUE
end
No script acima, você irá escolher dois action id, um para o script de cura, e outro para as armadilhas. No caso, eu escolhi o action id 60160 para a cura, e o action id 60161 para as armadilhas.
Azul: Action id usado nos tiles, lembrando que o action id do tile de cura, e o action id do tile de armadilha deve ser diferente.
Vermelho: Tempo que vai ficar adicionando/removendo vida e mana do jogador.
Verde: Quanto que vai ser adicionado de vida e mana ao jogador em porcentagem, ou seja, vai adicionar tanto por cento da vida máxima do jogador.
1/10 = 10% 2/10 = 20% 3/10 = 30% 4/10 = 40% 5/10 = 50% 6/10 = 60% 7/10 = 70% 8/10 = 80% 9/10 = 90% 1 = 100%
Laranja: Quanto que vai remover de vida e mana do jogador (desta vez, não em porcentagem!).
Marrom: Este é o tempo necessário para o jogador poder usar o tile e recuperar vida; pode ser configurado com a seguinte conta:
Numero_de_Segundos Multiplicado_por Tantas_Vezes Exemplo: 3600*24 -- No caso, são 3600 segundo, o equivalente a uma hora, multiplicado por 24, resultando em um dia.
Se você esta por dentro das novidades do forum, certamente já adicionou o script do Vodkart, que se encontra neste link:
Se já adicionou e seguiu todos os passos exatamente como esta dito lá, o script se torna menor, menos complexo e mais configurável, então pode usar, ao invés do script acima, este outro:
function onStepIn(cid, item, pos)
if (item.actionid == 60160) then
local storage = (3600*24 + os.time()) -- Tempo, no caso, 1 dia.
local sec = 20 -- Até quantos segundos vai adicionar.
local percent = 0.2 -- Porcentagem de vida/mana a serem adicionadas por segudo, no caso, 20%.
if getPlayerStorageValue(cid, 13090) - os.time() <= 0 then
doManaSecond(cid,(getCreatureMaxMana(cid)*percent), sec)
doHealthSecond(cid,(getCreatureMaxHealth(cid)*percent), sec)
setPlayerStorageValue(cid, 13090, storage)
doSendAnimatedText(getPlayerPosition(cid), "Aaaah...", TEXTCOLOR_ORANGE)
return TRUE
end
elseif (item.actionid == 60161) then
local sec = 10 -- Até quantos segundos vai remover.
local hp,mana = -10,-10 -- Quantidade de vida/mana a serem removidas por segundo,
doManaSecond(cid, mana, sec)
doHealthSecond(cid, hp, sec)
doSendAnimatedText(getPlayerPosition(cid), "Armadilha!", TEXTCOLOR_ORANGE)
doSendMagicEffect(getPlayerPosition(cid), 11)
end
return TRUE
end
A unica diferença é que se você já adicionou as funções do Vodkart, poderá contar com elas e usar o script acima, porém, os dois estão funcionando igualmente.
Após ter adicionado um dos scripts, vá em data/movements, abra o arquivo movements.xml e cole esta tag em algum lugar dele:
<movevent type="StepIn" actionid="60160;60161" event="script" value="funcao.lua"/>
Azul: Action ids usados nos tiles.
Cinza: Nome do arquivo .lua criado para adicionar um dos scripts acima.
Espero que gostem, e comentem, até a próxima!