Histórico de Curtidas
-
bielzinhocrazy recebeu reputação de Lurk em Heal aura systemSim, é possível, mas para isso você deve fazer um creaturescript, e não um talkaction, que ficaria assim :
Vai em data\creaturescripts\scripts crie um arquivo chamado auralogin.lua e coloque :
-- CONFIGURAÇÕES porcentagem = 40 -- chance de curar em cada volta da aura, em porcentagem quantheal = 10 -- porcentagem do hp máximo que cada cura irá curar. (No caso, irá curar 10% do hp máximo cada cura) tempo = 1180 -- tempo para dar uma volta no player (este tempo foi o que achei mais agradável visualmente, é recomendável não mudar) tipoaura = 30 -- número do efeito da aura (efeito de distância, pode ser identificado com /x no jogo) efeitocura = 49 -- número do efeito quando a cura chega ao player (efeito de posição fixa, pode ser identificado com /z no jogo) -- Função que chama a aura function efeitosAura(i,tm,cid) if(isCreature(cid)) then local atual = getCreaturePosition(cid) local posaura = { {x=(atual.x)-1, y=(atual.y)-1, z=atual.z}, {x=atual.x, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=atual.y, z=atual.z}, {x=(atual.x)+1, y=(atual.y)+1, z=atual.z}, {x=atual.x, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=atual.y, z=atual.z}, } local chances = math.random(100) if(chances<=porcentagem/8 and getCreatureHealth(cid)<getCreatureMaxHealth(cid)) then doCreatureAddHealth(cid, getCreatureMaxHealth(cid)/quantheal) if(i<=8 and i>1) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, atual, tipoaura) else doSendDistanceShoot({x=posaura[1].x, y=posaura[1].y, z=posaura[1].z}, atual, tipoaura) end doSendMagicEffect(atual, efeitocura) end if(i==8) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, {x=posaura[1].x, y=posaura[1].y, z=posaura[1].z}, tipoaura) elseif(i<8) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, {x=posaura[i+1].x, y=posaura[i+1].y, z=posaura[i+1].z}, tipoaura) end if(i<=8) then i = i+1 tm = tempo/8 return addEvent(efeitosAura,tm,i,tm,cid) else return efeitosAura(1,0,cid) end else return TRUE end end --Função principal function onLogin(cid) return efeitosAura(1,tempo/8,cid) end Depois vá em data\creaturescripts, abra creaturescripts.xml, e adicione a linha :
<event type="login" name="AuraLogin" script="auralogin.lua"/> Se você quiser colocar alguma condição pro player logar com aura, adicione na parte após onLogin, do arquivo auralogin.lua. Por exemplo :
function onLogin(cid) if(getPlayerLevel(cid)>1000) then return efeitosAura(1,tempo/8,cid) end return TRUE end No caso, todos os players com level maior que 1000 possuirão aura. E vai ser ligada automaticamente assim que logar.
-
bielzinhocrazy recebeu reputação de Salazar Slytherin em Heal aura systemOlá pessoal do TibiaKing,
Hoje venho trazer um script sistema de auras, que explicado superficialmente, é uma bolha de luz que te rodeia constantemente (é possível mudar o efeito visual da aura, como você poderá conferir no script), e possui uma chance pré-determinada pela pessoa, em porcentagem, de curar a cada volta que dá no player. Para ligar a aura digite !aura on, e para desligar !aura off. Vocês podem conferir como funciona assistindo o vídeo a seguir :
Bom, vamos aos códigos.
Primeiro, na pasta de seu OT, vá em data\talkactions\scripts, e crie um novo arquivo chamado aura.lua, e coloque isto nele (serão necessários dois storages) :
-- CONFIGURAÇÕES aurastr = 25950 -- storage da aura estr = 25951 -- storage para o exhaust porcentagem = 40 -- chance de curar em cada volta da aura, em porcentagem quantheal = 10 -- porcentagem do hp máximo que cada cura irá curar. (No caso, irá curar 10% do hp máximo cada cura) tempo = 1180 -- tempo para dar uma volta no player (este tempo foi o que achei mais agradável visualmente, é recomendável não mudar) tipoaura = 30 -- número do efeito da aura (efeito de distância, pode ser identificado com /x no jogo) efeitocura = 49 -- número do efeito quando a cura chega ao player (efeito de posição fixa, pode ser identificado com /z no jogo) -- Função que chama a aura function efeitosAura(i,tm,cid) if(isCreature(cid)) then local atual = getCreaturePosition(cid) local posaura = { {x=(atual.x)-1, y=(atual.y)-1, z=atual.z}, {x=atual.x, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=atual.y, z=atual.z}, {x=(atual.x)+1, y=(atual.y)+1, z=atual.z}, {x=atual.x, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=atual.y, z=atual.z}, } local chances = math.random(100) if(chances<=porcentagem/8 and getCreatureHealth(cid)<getCreatureMaxHealth(cid)) then doCreatureAddHealth(cid, getCreatureMaxHealth(cid)/quantheal) if(i<=8 and i>1) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, atual, tipoaura) else doSendDistanceShoot({x=posaura[1].x, y=posaura[1].y, z=posaura[1].z}, atual, tipoaura) end doSendMagicEffect(atual, efeitocura) end if(i==8) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, {x=posaura[1].x, y=posaura[1].y, z=posaura[1].z}, tipoaura) elseif(i<8) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, {x=posaura[i+1].x, y=posaura[i+1].y, z=posaura[i+1].z}, tipoaura) end if(i<=8 and getPlayerStorageValue(cid, aurastr)==2) then i = i+1 tm = tempo/8 return addEvent(efeitosAura,tm,i,tm,cid) elseif(i>8 and getPlayerStorageValue(cid, aurastr)==2) then return efeitosAura(1,0,cid) else return TRUE end else return TRUE end end -- Função principal function onSay(cid, words, param, channel) if(param=="on") then if getPlayerStorageValue(cid, estr) > os.time() then doPlayerSendCancel(cid, "Espere "..(getPlayerStorageValue(cid, estr) - os.time()).." segundos para poder habilitar aura novamente.") else if(getPlayerStorageValue(cid, aurastr)==2) then doPlayerSendCancel(cid,"Sua aura já está habilitada.") elseif(getPlayerStorageValue(cid, aurastr)==-1) then doPlayerSendCancel(cid,"Aura ligada!") setPlayerStorageValue(cid, aurastr, 2) efeitosAura(1,tempo/8,cid) end end elseif(param=="off") then if(getPlayerStorageValue(cid, aurastr)==2) then setPlayerStorageValue(cid, estr, os.time()+2) setPlayerStorageValue(cid, aurastr, -1) doPlayerSendCancel(cid,"Aura desligada!") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Digite '!aura on' para ligar sua aura, e '!aura off' para desligá-la.") end return TRUE end As configurações estão comentadas, portanto é só modificar de acordo com as suas preferências.
Agora, em data\talkactions, abra o arquivos talkactions.xml, e cole isto dentro dele :
<talkaction words="!aura" event="script" value="aura.lua"/> Após feito isso, para evitar erros ao player logar, será necessário criar um script que mudará o storage da aura toda vez que o player se logar novamente, para isso, vá em data\creaturescripts\scripts e crie um arquivo chamado auralogin.lua, e cole isto :
function onLogin(cid) aurastr = 25950 -- storage da aura setPlayerStorageValue(cid, aurastr, -1) return TRUE end Após isto, vá em data\creaturescripts e abra o arquivo creaturescripts.xml, e cole o seguinte código nele :
<event type="login" name="AuraLogin" script="auralogin.lua"/> E pronto! Agora é só desfrutar do sistema.
OBS : Se você der /reload talkactions no OT em execução, com algum player estando com aura em execução, elas serão interrompidas e será necessário usar !aura off, e !aura on, para reabilitá-las. Portanto cuidado!
Créditos : Eu mesmo(Fakezim/BielzinhoCrazy/GMLeal, tanto faz o nick rererere) Obrigado pessoal!
-
bielzinhocrazy recebeu reputação de
Magalhaes92em Heal aura systemSim, é possível, mas para isso você deve fazer um creaturescript, e não um talkaction, que ficaria assim :
Vai em data\creaturescripts\scripts crie um arquivo chamado auralogin.lua e coloque :
-- CONFIGURAÇÕES porcentagem = 40 -- chance de curar em cada volta da aura, em porcentagem quantheal = 10 -- porcentagem do hp máximo que cada cura irá curar. (No caso, irá curar 10% do hp máximo cada cura) tempo = 1180 -- tempo para dar uma volta no player (este tempo foi o que achei mais agradável visualmente, é recomendável não mudar) tipoaura = 30 -- número do efeito da aura (efeito de distância, pode ser identificado com /x no jogo) efeitocura = 49 -- número do efeito quando a cura chega ao player (efeito de posição fixa, pode ser identificado com /z no jogo) -- Função que chama a aura function efeitosAura(i,tm,cid) if(isCreature(cid)) then local atual = getCreaturePosition(cid) local posaura = { {x=(atual.x)-1, y=(atual.y)-1, z=atual.z}, {x=atual.x, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=atual.y, z=atual.z}, {x=(atual.x)+1, y=(atual.y)+1, z=atual.z}, {x=atual.x, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=atual.y, z=atual.z}, } local chances = math.random(100) if(chances<=porcentagem/8 and getCreatureHealth(cid)<getCreatureMaxHealth(cid)) then doCreatureAddHealth(cid, getCreatureMaxHealth(cid)/quantheal) if(i<=8 and i>1) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, atual, tipoaura) else doSendDistanceShoot({x=posaura[1].x, y=posaura[1].y, z=posaura[1].z}, atual, tipoaura) end doSendMagicEffect(atual, efeitocura) end if(i==8) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, {x=posaura[1].x, y=posaura[1].y, z=posaura[1].z}, tipoaura) elseif(i<8) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, {x=posaura[i+1].x, y=posaura[i+1].y, z=posaura[i+1].z}, tipoaura) end if(i<=8) then i = i+1 tm = tempo/8 return addEvent(efeitosAura,tm,i,tm,cid) else return efeitosAura(1,0,cid) end else return TRUE end end --Função principal function onLogin(cid) return efeitosAura(1,tempo/8,cid) end Depois vá em data\creaturescripts, abra creaturescripts.xml, e adicione a linha :
<event type="login" name="AuraLogin" script="auralogin.lua"/> Se você quiser colocar alguma condição pro player logar com aura, adicione na parte após onLogin, do arquivo auralogin.lua. Por exemplo :
function onLogin(cid) if(getPlayerLevel(cid)>1000) then return efeitosAura(1,tempo/8,cid) end return TRUE end No caso, todos os players com level maior que 1000 possuirão aura. E vai ser ligada automaticamente assim que logar.
-
bielzinhocrazy recebeu reputação de Phannm em Heal aura systemOlá pessoal do TibiaKing,
Hoje venho trazer um script sistema de auras, que explicado superficialmente, é uma bolha de luz que te rodeia constantemente (é possível mudar o efeito visual da aura, como você poderá conferir no script), e possui uma chance pré-determinada pela pessoa, em porcentagem, de curar a cada volta que dá no player. Para ligar a aura digite !aura on, e para desligar !aura off. Vocês podem conferir como funciona assistindo o vídeo a seguir :
Bom, vamos aos códigos.
Primeiro, na pasta de seu OT, vá em data\talkactions\scripts, e crie um novo arquivo chamado aura.lua, e coloque isto nele (serão necessários dois storages) :
-- CONFIGURAÇÕES aurastr = 25950 -- storage da aura estr = 25951 -- storage para o exhaust porcentagem = 40 -- chance de curar em cada volta da aura, em porcentagem quantheal = 10 -- porcentagem do hp máximo que cada cura irá curar. (No caso, irá curar 10% do hp máximo cada cura) tempo = 1180 -- tempo para dar uma volta no player (este tempo foi o que achei mais agradável visualmente, é recomendável não mudar) tipoaura = 30 -- número do efeito da aura (efeito de distância, pode ser identificado com /x no jogo) efeitocura = 49 -- número do efeito quando a cura chega ao player (efeito de posição fixa, pode ser identificado com /z no jogo) -- Função que chama a aura function efeitosAura(i,tm,cid) if(isCreature(cid)) then local atual = getCreaturePosition(cid) local posaura = { {x=(atual.x)-1, y=(atual.y)-1, z=atual.z}, {x=atual.x, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=atual.y, z=atual.z}, {x=(atual.x)+1, y=(atual.y)+1, z=atual.z}, {x=atual.x, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=atual.y, z=atual.z}, } local chances = math.random(100) if(chances<=porcentagem/8 and getCreatureHealth(cid)<getCreatureMaxHealth(cid)) then doCreatureAddHealth(cid, getCreatureMaxHealth(cid)/quantheal) if(i<=8 and i>1) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, atual, tipoaura) else doSendDistanceShoot({x=posaura[1].x, y=posaura[1].y, z=posaura[1].z}, atual, tipoaura) end doSendMagicEffect(atual, efeitocura) end if(i==8) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, {x=posaura[1].x, y=posaura[1].y, z=posaura[1].z}, tipoaura) elseif(i<8) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, {x=posaura[i+1].x, y=posaura[i+1].y, z=posaura[i+1].z}, tipoaura) end if(i<=8 and getPlayerStorageValue(cid, aurastr)==2) then i = i+1 tm = tempo/8 return addEvent(efeitosAura,tm,i,tm,cid) elseif(i>8 and getPlayerStorageValue(cid, aurastr)==2) then return efeitosAura(1,0,cid) else return TRUE end else return TRUE end end -- Função principal function onSay(cid, words, param, channel) if(param=="on") then if getPlayerStorageValue(cid, estr) > os.time() then doPlayerSendCancel(cid, "Espere "..(getPlayerStorageValue(cid, estr) - os.time()).." segundos para poder habilitar aura novamente.") else if(getPlayerStorageValue(cid, aurastr)==2) then doPlayerSendCancel(cid,"Sua aura já está habilitada.") elseif(getPlayerStorageValue(cid, aurastr)==-1) then doPlayerSendCancel(cid,"Aura ligada!") setPlayerStorageValue(cid, aurastr, 2) efeitosAura(1,tempo/8,cid) end end elseif(param=="off") then if(getPlayerStorageValue(cid, aurastr)==2) then setPlayerStorageValue(cid, estr, os.time()+2) setPlayerStorageValue(cid, aurastr, -1) doPlayerSendCancel(cid,"Aura desligada!") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Digite '!aura on' para ligar sua aura, e '!aura off' para desligá-la.") end return TRUE end As configurações estão comentadas, portanto é só modificar de acordo com as suas preferências.
Agora, em data\talkactions, abra o arquivos talkactions.xml, e cole isto dentro dele :
<talkaction words="!aura" event="script" value="aura.lua"/> Após feito isso, para evitar erros ao player logar, será necessário criar um script que mudará o storage da aura toda vez que o player se logar novamente, para isso, vá em data\creaturescripts\scripts e crie um arquivo chamado auralogin.lua, e cole isto :
function onLogin(cid) aurastr = 25950 -- storage da aura setPlayerStorageValue(cid, aurastr, -1) return TRUE end Após isto, vá em data\creaturescripts e abra o arquivo creaturescripts.xml, e cole o seguinte código nele :
<event type="login" name="AuraLogin" script="auralogin.lua"/> E pronto! Agora é só desfrutar do sistema.
OBS : Se você der /reload talkactions no OT em execução, com algum player estando com aura em execução, elas serão interrompidas e será necessário usar !aura off, e !aura on, para reabilitá-las. Portanto cuidado!
Créditos : Eu mesmo(Fakezim/BielzinhoCrazy/GMLeal, tanto faz o nick rererere) Obrigado pessoal!
-
bielzinhocrazy recebeu reputação de bandos em Heal aura systemSim, é possível, mas para isso você deve fazer um creaturescript, e não um talkaction, que ficaria assim :
Vai em data\creaturescripts\scripts crie um arquivo chamado auralogin.lua e coloque :
-- CONFIGURAÇÕES porcentagem = 40 -- chance de curar em cada volta da aura, em porcentagem quantheal = 10 -- porcentagem do hp máximo que cada cura irá curar. (No caso, irá curar 10% do hp máximo cada cura) tempo = 1180 -- tempo para dar uma volta no player (este tempo foi o que achei mais agradável visualmente, é recomendável não mudar) tipoaura = 30 -- número do efeito da aura (efeito de distância, pode ser identificado com /x no jogo) efeitocura = 49 -- número do efeito quando a cura chega ao player (efeito de posição fixa, pode ser identificado com /z no jogo) -- Função que chama a aura function efeitosAura(i,tm,cid) if(isCreature(cid)) then local atual = getCreaturePosition(cid) local posaura = { {x=(atual.x)-1, y=(atual.y)-1, z=atual.z}, {x=atual.x, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=atual.y, z=atual.z}, {x=(atual.x)+1, y=(atual.y)+1, z=atual.z}, {x=atual.x, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=atual.y, z=atual.z}, } local chances = math.random(100) if(chances<=porcentagem/8 and getCreatureHealth(cid)<getCreatureMaxHealth(cid)) then doCreatureAddHealth(cid, getCreatureMaxHealth(cid)/quantheal) if(i<=8 and i>1) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, atual, tipoaura) else doSendDistanceShoot({x=posaura[1].x, y=posaura[1].y, z=posaura[1].z}, atual, tipoaura) end doSendMagicEffect(atual, efeitocura) end if(i==8) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, {x=posaura[1].x, y=posaura[1].y, z=posaura[1].z}, tipoaura) elseif(i<8) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, {x=posaura[i+1].x, y=posaura[i+1].y, z=posaura[i+1].z}, tipoaura) end if(i<=8) then i = i+1 tm = tempo/8 return addEvent(efeitosAura,tm,i,tm,cid) else return efeitosAura(1,0,cid) end else return TRUE end end --Função principal function onLogin(cid) return efeitosAura(1,tempo/8,cid) end Depois vá em data\creaturescripts, abra creaturescripts.xml, e adicione a linha :
<event type="login" name="AuraLogin" script="auralogin.lua"/> Se você quiser colocar alguma condição pro player logar com aura, adicione na parte após onLogin, do arquivo auralogin.lua. Por exemplo :
function onLogin(cid) if(getPlayerLevel(cid)>1000) then return efeitosAura(1,tempo/8,cid) end return TRUE end No caso, todos os players com level maior que 1000 possuirão aura. E vai ser ligada automaticamente assim que logar.
-
bielzinhocrazy recebeu reputação de bandos em Heal aura systemSim, também é possível, fiz de uma maneira bem improvisada pra você ter uma ideia de como fazer :
em data\npcs crie um arquivo NOMEDONPC.xml, e cole isto :
<?xml version="1.0" encoding="UTF-8"?> <npc name="NOMEDOSEUNPC" script="data/npc/scripts/auranpc.lua" walkinterval="50000" floorchange="0"> <health now="100" max="100"/> <look type="129" head="95" body="116" legs="121" feet="115" addons="3"/> <parameters> <parameter key="message_greet" value="Oi |PLAYERNAME|. Eu possuo a habilidade de ceder {aura}. O que deseja?"/> </parameters> </npc> Coloque o nome do npc, e outfits de sua preferência.
agora vá em data\npcs\scripts, crie um arquivo chamado auranpc.lua, e cole isto :
local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid if msgcontains(msg, 'aura') then if getPlayerStorageValue(cid,20201) ~= 1 then selfSay('Para adquirir aura é necessário 10000000 golds. Você deseja adquirí-la?', cid) talkState[talkUser] = 1 else selfSay('Você já possui aura.', cid) end elseif talkState[talkUser] == 1 then if msgcontains(msg, 'yes') then if doPlayerRemoveMoney(cid, 10000000) then setPlayerStorageValue(cid,20201,1) selfSay('Parabéns, agora você possui aura!', cid) talkState[talkUser] = 0 else selfSay('Você não possui o dinheiro necessário.', cid) end else selfSay('Então porque veio aqui?', cid) end end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Você pode configurar o dinheiro (ou item) necessário ali na parte "doRemovePlayerMoney", logo após o if. Se desejar algum item, escreva "doRemovePlayerItem(cid,ID do item, quantidade)". Quando você fizer isso, também deve mudar a mensagem do NPC em que diz o que precisa, que é a parte "selfSay('Para adquirir aura é necessário 10000000 golds. Você deseja adquirí-la?', cid)".
Logo após isso, vá no creaturescript da aura (data\creaturescripts\scripts\aura.lua), e apenas na função principal (onLogin), troque por isto :
function onLogin(cid) if(getPlayerStorageValue(cid, 20201)==1) then return efeitosAura(1,tempo/8,cid) end return TRUE end E pronto, agora é só adicionar o NPC no seu mapa.
-
bielzinhocrazy recebeu reputação de uesleirodrigues em Heal aura systemOlá pessoal do TibiaKing,
Hoje venho trazer um script sistema de auras, que explicado superficialmente, é uma bolha de luz que te rodeia constantemente (é possível mudar o efeito visual da aura, como você poderá conferir no script), e possui uma chance pré-determinada pela pessoa, em porcentagem, de curar a cada volta que dá no player. Para ligar a aura digite !aura on, e para desligar !aura off. Vocês podem conferir como funciona assistindo o vídeo a seguir :
Bom, vamos aos códigos.
Primeiro, na pasta de seu OT, vá em data\talkactions\scripts, e crie um novo arquivo chamado aura.lua, e coloque isto nele (serão necessários dois storages) :
-- CONFIGURAÇÕES aurastr = 25950 -- storage da aura estr = 25951 -- storage para o exhaust porcentagem = 40 -- chance de curar em cada volta da aura, em porcentagem quantheal = 10 -- porcentagem do hp máximo que cada cura irá curar. (No caso, irá curar 10% do hp máximo cada cura) tempo = 1180 -- tempo para dar uma volta no player (este tempo foi o que achei mais agradável visualmente, é recomendável não mudar) tipoaura = 30 -- número do efeito da aura (efeito de distância, pode ser identificado com /x no jogo) efeitocura = 49 -- número do efeito quando a cura chega ao player (efeito de posição fixa, pode ser identificado com /z no jogo) -- Função que chama a aura function efeitosAura(i,tm,cid) if(isCreature(cid)) then local atual = getCreaturePosition(cid) local posaura = { {x=(atual.x)-1, y=(atual.y)-1, z=atual.z}, {x=atual.x, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=atual.y, z=atual.z}, {x=(atual.x)+1, y=(atual.y)+1, z=atual.z}, {x=atual.x, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=atual.y, z=atual.z}, } local chances = math.random(100) if(chances<=porcentagem/8 and getCreatureHealth(cid)<getCreatureMaxHealth(cid)) then doCreatureAddHealth(cid, getCreatureMaxHealth(cid)/quantheal) if(i<=8 and i>1) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, atual, tipoaura) else doSendDistanceShoot({x=posaura[1].x, y=posaura[1].y, z=posaura[1].z}, atual, tipoaura) end doSendMagicEffect(atual, efeitocura) end if(i==8) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, {x=posaura[1].x, y=posaura[1].y, z=posaura[1].z}, tipoaura) elseif(i<8) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, {x=posaura[i+1].x, y=posaura[i+1].y, z=posaura[i+1].z}, tipoaura) end if(i<=8 and getPlayerStorageValue(cid, aurastr)==2) then i = i+1 tm = tempo/8 return addEvent(efeitosAura,tm,i,tm,cid) elseif(i>8 and getPlayerStorageValue(cid, aurastr)==2) then return efeitosAura(1,0,cid) else return TRUE end else return TRUE end end -- Função principal function onSay(cid, words, param, channel) if(param=="on") then if getPlayerStorageValue(cid, estr) > os.time() then doPlayerSendCancel(cid, "Espere "..(getPlayerStorageValue(cid, estr) - os.time()).." segundos para poder habilitar aura novamente.") else if(getPlayerStorageValue(cid, aurastr)==2) then doPlayerSendCancel(cid,"Sua aura já está habilitada.") elseif(getPlayerStorageValue(cid, aurastr)==-1) then doPlayerSendCancel(cid,"Aura ligada!") setPlayerStorageValue(cid, aurastr, 2) efeitosAura(1,tempo/8,cid) end end elseif(param=="off") then if(getPlayerStorageValue(cid, aurastr)==2) then setPlayerStorageValue(cid, estr, os.time()+2) setPlayerStorageValue(cid, aurastr, -1) doPlayerSendCancel(cid,"Aura desligada!") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Digite '!aura on' para ligar sua aura, e '!aura off' para desligá-la.") end return TRUE end As configurações estão comentadas, portanto é só modificar de acordo com as suas preferências.
Agora, em data\talkactions, abra o arquivos talkactions.xml, e cole isto dentro dele :
<talkaction words="!aura" event="script" value="aura.lua"/> Após feito isso, para evitar erros ao player logar, será necessário criar um script que mudará o storage da aura toda vez que o player se logar novamente, para isso, vá em data\creaturescripts\scripts e crie um arquivo chamado auralogin.lua, e cole isto :
function onLogin(cid) aurastr = 25950 -- storage da aura setPlayerStorageValue(cid, aurastr, -1) return TRUE end Após isto, vá em data\creaturescripts e abra o arquivo creaturescripts.xml, e cole o seguinte código nele :
<event type="login" name="AuraLogin" script="auralogin.lua"/> E pronto! Agora é só desfrutar do sistema.
OBS : Se você der /reload talkactions no OT em execução, com algum player estando com aura em execução, elas serão interrompidas e será necessário usar !aura off, e !aura on, para reabilitá-las. Portanto cuidado!
Créditos : Eu mesmo(Fakezim/BielzinhoCrazy/GMLeal, tanto faz o nick rererere) Obrigado pessoal!
-
bielzinhocrazy recebeu reputação de fernandobernardin em Heal aura systemOlá pessoal do TibiaKing,
Hoje venho trazer um script sistema de auras, que explicado superficialmente, é uma bolha de luz que te rodeia constantemente (é possível mudar o efeito visual da aura, como você poderá conferir no script), e possui uma chance pré-determinada pela pessoa, em porcentagem, de curar a cada volta que dá no player. Para ligar a aura digite !aura on, e para desligar !aura off. Vocês podem conferir como funciona assistindo o vídeo a seguir :
Bom, vamos aos códigos.
Primeiro, na pasta de seu OT, vá em data\talkactions\scripts, e crie um novo arquivo chamado aura.lua, e coloque isto nele (serão necessários dois storages) :
-- CONFIGURAÇÕES aurastr = 25950 -- storage da aura estr = 25951 -- storage para o exhaust porcentagem = 40 -- chance de curar em cada volta da aura, em porcentagem quantheal = 10 -- porcentagem do hp máximo que cada cura irá curar. (No caso, irá curar 10% do hp máximo cada cura) tempo = 1180 -- tempo para dar uma volta no player (este tempo foi o que achei mais agradável visualmente, é recomendável não mudar) tipoaura = 30 -- número do efeito da aura (efeito de distância, pode ser identificado com /x no jogo) efeitocura = 49 -- número do efeito quando a cura chega ao player (efeito de posição fixa, pode ser identificado com /z no jogo) -- Função que chama a aura function efeitosAura(i,tm,cid) if(isCreature(cid)) then local atual = getCreaturePosition(cid) local posaura = { {x=(atual.x)-1, y=(atual.y)-1, z=atual.z}, {x=atual.x, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=atual.y, z=atual.z}, {x=(atual.x)+1, y=(atual.y)+1, z=atual.z}, {x=atual.x, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=atual.y, z=atual.z}, } local chances = math.random(100) if(chances<=porcentagem/8 and getCreatureHealth(cid)<getCreatureMaxHealth(cid)) then doCreatureAddHealth(cid, getCreatureMaxHealth(cid)/quantheal) if(i<=8 and i>1) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, atual, tipoaura) else doSendDistanceShoot({x=posaura[1].x, y=posaura[1].y, z=posaura[1].z}, atual, tipoaura) end doSendMagicEffect(atual, efeitocura) end if(i==8) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, {x=posaura[1].x, y=posaura[1].y, z=posaura[1].z}, tipoaura) elseif(i<8) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, {x=posaura[i+1].x, y=posaura[i+1].y, z=posaura[i+1].z}, tipoaura) end if(i<=8 and getPlayerStorageValue(cid, aurastr)==2) then i = i+1 tm = tempo/8 return addEvent(efeitosAura,tm,i,tm,cid) elseif(i>8 and getPlayerStorageValue(cid, aurastr)==2) then return efeitosAura(1,0,cid) else return TRUE end else return TRUE end end -- Função principal function onSay(cid, words, param, channel) if(param=="on") then if getPlayerStorageValue(cid, estr) > os.time() then doPlayerSendCancel(cid, "Espere "..(getPlayerStorageValue(cid, estr) - os.time()).." segundos para poder habilitar aura novamente.") else if(getPlayerStorageValue(cid, aurastr)==2) then doPlayerSendCancel(cid,"Sua aura já está habilitada.") elseif(getPlayerStorageValue(cid, aurastr)==-1) then doPlayerSendCancel(cid,"Aura ligada!") setPlayerStorageValue(cid, aurastr, 2) efeitosAura(1,tempo/8,cid) end end elseif(param=="off") then if(getPlayerStorageValue(cid, aurastr)==2) then setPlayerStorageValue(cid, estr, os.time()+2) setPlayerStorageValue(cid, aurastr, -1) doPlayerSendCancel(cid,"Aura desligada!") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Digite '!aura on' para ligar sua aura, e '!aura off' para desligá-la.") end return TRUE end As configurações estão comentadas, portanto é só modificar de acordo com as suas preferências.
Agora, em data\talkactions, abra o arquivos talkactions.xml, e cole isto dentro dele :
<talkaction words="!aura" event="script" value="aura.lua"/> Após feito isso, para evitar erros ao player logar, será necessário criar um script que mudará o storage da aura toda vez que o player se logar novamente, para isso, vá em data\creaturescripts\scripts e crie um arquivo chamado auralogin.lua, e cole isto :
function onLogin(cid) aurastr = 25950 -- storage da aura setPlayerStorageValue(cid, aurastr, -1) return TRUE end Após isto, vá em data\creaturescripts e abra o arquivo creaturescripts.xml, e cole o seguinte código nele :
<event type="login" name="AuraLogin" script="auralogin.lua"/> E pronto! Agora é só desfrutar do sistema.
OBS : Se você der /reload talkactions no OT em execução, com algum player estando com aura em execução, elas serão interrompidas e será necessário usar !aura off, e !aura on, para reabilitá-las. Portanto cuidado!
Créditos : Eu mesmo(Fakezim/BielzinhoCrazy/GMLeal, tanto faz o nick rererere) Obrigado pessoal!
-
bielzinhocrazy recebeu reputação de WhisperingSorrow em Heal aura systemOlá pessoal do TibiaKing,
Hoje venho trazer um script sistema de auras, que explicado superficialmente, é uma bolha de luz que te rodeia constantemente (é possível mudar o efeito visual da aura, como você poderá conferir no script), e possui uma chance pré-determinada pela pessoa, em porcentagem, de curar a cada volta que dá no player. Para ligar a aura digite !aura on, e para desligar !aura off. Vocês podem conferir como funciona assistindo o vídeo a seguir :
Bom, vamos aos códigos.
Primeiro, na pasta de seu OT, vá em data\talkactions\scripts, e crie um novo arquivo chamado aura.lua, e coloque isto nele (serão necessários dois storages) :
-- CONFIGURAÇÕES aurastr = 25950 -- storage da aura estr = 25951 -- storage para o exhaust porcentagem = 40 -- chance de curar em cada volta da aura, em porcentagem quantheal = 10 -- porcentagem do hp máximo que cada cura irá curar. (No caso, irá curar 10% do hp máximo cada cura) tempo = 1180 -- tempo para dar uma volta no player (este tempo foi o que achei mais agradável visualmente, é recomendável não mudar) tipoaura = 30 -- número do efeito da aura (efeito de distância, pode ser identificado com /x no jogo) efeitocura = 49 -- número do efeito quando a cura chega ao player (efeito de posição fixa, pode ser identificado com /z no jogo) -- Função que chama a aura function efeitosAura(i,tm,cid) if(isCreature(cid)) then local atual = getCreaturePosition(cid) local posaura = { {x=(atual.x)-1, y=(atual.y)-1, z=atual.z}, {x=atual.x, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=atual.y, z=atual.z}, {x=(atual.x)+1, y=(atual.y)+1, z=atual.z}, {x=atual.x, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=atual.y, z=atual.z}, } local chances = math.random(100) if(chances<=porcentagem/8 and getCreatureHealth(cid)<getCreatureMaxHealth(cid)) then doCreatureAddHealth(cid, getCreatureMaxHealth(cid)/quantheal) if(i<=8 and i>1) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, atual, tipoaura) else doSendDistanceShoot({x=posaura[1].x, y=posaura[1].y, z=posaura[1].z}, atual, tipoaura) end doSendMagicEffect(atual, efeitocura) end if(i==8) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, {x=posaura[1].x, y=posaura[1].y, z=posaura[1].z}, tipoaura) elseif(i<8) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, {x=posaura[i+1].x, y=posaura[i+1].y, z=posaura[i+1].z}, tipoaura) end if(i<=8 and getPlayerStorageValue(cid, aurastr)==2) then i = i+1 tm = tempo/8 return addEvent(efeitosAura,tm,i,tm,cid) elseif(i>8 and getPlayerStorageValue(cid, aurastr)==2) then return efeitosAura(1,0,cid) else return TRUE end else return TRUE end end -- Função principal function onSay(cid, words, param, channel) if(param=="on") then if getPlayerStorageValue(cid, estr) > os.time() then doPlayerSendCancel(cid, "Espere "..(getPlayerStorageValue(cid, estr) - os.time()).." segundos para poder habilitar aura novamente.") else if(getPlayerStorageValue(cid, aurastr)==2) then doPlayerSendCancel(cid,"Sua aura já está habilitada.") elseif(getPlayerStorageValue(cid, aurastr)==-1) then doPlayerSendCancel(cid,"Aura ligada!") setPlayerStorageValue(cid, aurastr, 2) efeitosAura(1,tempo/8,cid) end end elseif(param=="off") then if(getPlayerStorageValue(cid, aurastr)==2) then setPlayerStorageValue(cid, estr, os.time()+2) setPlayerStorageValue(cid, aurastr, -1) doPlayerSendCancel(cid,"Aura desligada!") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Digite '!aura on' para ligar sua aura, e '!aura off' para desligá-la.") end return TRUE end As configurações estão comentadas, portanto é só modificar de acordo com as suas preferências.
Agora, em data\talkactions, abra o arquivos talkactions.xml, e cole isto dentro dele :
<talkaction words="!aura" event="script" value="aura.lua"/> Após feito isso, para evitar erros ao player logar, será necessário criar um script que mudará o storage da aura toda vez que o player se logar novamente, para isso, vá em data\creaturescripts\scripts e crie um arquivo chamado auralogin.lua, e cole isto :
function onLogin(cid) aurastr = 25950 -- storage da aura setPlayerStorageValue(cid, aurastr, -1) return TRUE end Após isto, vá em data\creaturescripts e abra o arquivo creaturescripts.xml, e cole o seguinte código nele :
<event type="login" name="AuraLogin" script="auralogin.lua"/> E pronto! Agora é só desfrutar do sistema.
OBS : Se você der /reload talkactions no OT em execução, com algum player estando com aura em execução, elas serão interrompidas e será necessário usar !aura off, e !aura on, para reabilitá-las. Portanto cuidado!
Créditos : Eu mesmo(Fakezim/BielzinhoCrazy/GMLeal, tanto faz o nick rererere) Obrigado pessoal!
-
bielzinhocrazy recebeu reputação de p e o p l e em Heal aura systemOlá pessoal do TibiaKing,
Hoje venho trazer um script sistema de auras, que explicado superficialmente, é uma bolha de luz que te rodeia constantemente (é possível mudar o efeito visual da aura, como você poderá conferir no script), e possui uma chance pré-determinada pela pessoa, em porcentagem, de curar a cada volta que dá no player. Para ligar a aura digite !aura on, e para desligar !aura off. Vocês podem conferir como funciona assistindo o vídeo a seguir :
Bom, vamos aos códigos.
Primeiro, na pasta de seu OT, vá em data\talkactions\scripts, e crie um novo arquivo chamado aura.lua, e coloque isto nele (serão necessários dois storages) :
-- CONFIGURAÇÕES aurastr = 25950 -- storage da aura estr = 25951 -- storage para o exhaust porcentagem = 40 -- chance de curar em cada volta da aura, em porcentagem quantheal = 10 -- porcentagem do hp máximo que cada cura irá curar. (No caso, irá curar 10% do hp máximo cada cura) tempo = 1180 -- tempo para dar uma volta no player (este tempo foi o que achei mais agradável visualmente, é recomendável não mudar) tipoaura = 30 -- número do efeito da aura (efeito de distância, pode ser identificado com /x no jogo) efeitocura = 49 -- número do efeito quando a cura chega ao player (efeito de posição fixa, pode ser identificado com /z no jogo) -- Função que chama a aura function efeitosAura(i,tm,cid) if(isCreature(cid)) then local atual = getCreaturePosition(cid) local posaura = { {x=(atual.x)-1, y=(atual.y)-1, z=atual.z}, {x=atual.x, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=atual.y, z=atual.z}, {x=(atual.x)+1, y=(atual.y)+1, z=atual.z}, {x=atual.x, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=atual.y, z=atual.z}, } local chances = math.random(100) if(chances<=porcentagem/8 and getCreatureHealth(cid)<getCreatureMaxHealth(cid)) then doCreatureAddHealth(cid, getCreatureMaxHealth(cid)/quantheal) if(i<=8 and i>1) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, atual, tipoaura) else doSendDistanceShoot({x=posaura[1].x, y=posaura[1].y, z=posaura[1].z}, atual, tipoaura) end doSendMagicEffect(atual, efeitocura) end if(i==8) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, {x=posaura[1].x, y=posaura[1].y, z=posaura[1].z}, tipoaura) elseif(i<8) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, {x=posaura[i+1].x, y=posaura[i+1].y, z=posaura[i+1].z}, tipoaura) end if(i<=8 and getPlayerStorageValue(cid, aurastr)==2) then i = i+1 tm = tempo/8 return addEvent(efeitosAura,tm,i,tm,cid) elseif(i>8 and getPlayerStorageValue(cid, aurastr)==2) then return efeitosAura(1,0,cid) else return TRUE end else return TRUE end end -- Função principal function onSay(cid, words, param, channel) if(param=="on") then if getPlayerStorageValue(cid, estr) > os.time() then doPlayerSendCancel(cid, "Espere "..(getPlayerStorageValue(cid, estr) - os.time()).." segundos para poder habilitar aura novamente.") else if(getPlayerStorageValue(cid, aurastr)==2) then doPlayerSendCancel(cid,"Sua aura já está habilitada.") elseif(getPlayerStorageValue(cid, aurastr)==-1) then doPlayerSendCancel(cid,"Aura ligada!") setPlayerStorageValue(cid, aurastr, 2) efeitosAura(1,tempo/8,cid) end end elseif(param=="off") then if(getPlayerStorageValue(cid, aurastr)==2) then setPlayerStorageValue(cid, estr, os.time()+2) setPlayerStorageValue(cid, aurastr, -1) doPlayerSendCancel(cid,"Aura desligada!") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Digite '!aura on' para ligar sua aura, e '!aura off' para desligá-la.") end return TRUE end As configurações estão comentadas, portanto é só modificar de acordo com as suas preferências.
Agora, em data\talkactions, abra o arquivos talkactions.xml, e cole isto dentro dele :
<talkaction words="!aura" event="script" value="aura.lua"/> Após feito isso, para evitar erros ao player logar, será necessário criar um script que mudará o storage da aura toda vez que o player se logar novamente, para isso, vá em data\creaturescripts\scripts e crie um arquivo chamado auralogin.lua, e cole isto :
function onLogin(cid) aurastr = 25950 -- storage da aura setPlayerStorageValue(cid, aurastr, -1) return TRUE end Após isto, vá em data\creaturescripts e abra o arquivo creaturescripts.xml, e cole o seguinte código nele :
<event type="login" name="AuraLogin" script="auralogin.lua"/> E pronto! Agora é só desfrutar do sistema.
OBS : Se você der /reload talkactions no OT em execução, com algum player estando com aura em execução, elas serão interrompidas e será necessário usar !aura off, e !aura on, para reabilitá-las. Portanto cuidado!
Créditos : Eu mesmo(Fakezim/BielzinhoCrazy/GMLeal, tanto faz o nick rererere) Obrigado pessoal!
-
bielzinhocrazy recebeu reputação de Ribeiro Foda em Heal aura systemOlá pessoal do TibiaKing,
Hoje venho trazer um script sistema de auras, que explicado superficialmente, é uma bolha de luz que te rodeia constantemente (é possível mudar o efeito visual da aura, como você poderá conferir no script), e possui uma chance pré-determinada pela pessoa, em porcentagem, de curar a cada volta que dá no player. Para ligar a aura digite !aura on, e para desligar !aura off. Vocês podem conferir como funciona assistindo o vídeo a seguir :
Bom, vamos aos códigos.
Primeiro, na pasta de seu OT, vá em data\talkactions\scripts, e crie um novo arquivo chamado aura.lua, e coloque isto nele (serão necessários dois storages) :
-- CONFIGURAÇÕES aurastr = 25950 -- storage da aura estr = 25951 -- storage para o exhaust porcentagem = 40 -- chance de curar em cada volta da aura, em porcentagem quantheal = 10 -- porcentagem do hp máximo que cada cura irá curar. (No caso, irá curar 10% do hp máximo cada cura) tempo = 1180 -- tempo para dar uma volta no player (este tempo foi o que achei mais agradável visualmente, é recomendável não mudar) tipoaura = 30 -- número do efeito da aura (efeito de distância, pode ser identificado com /x no jogo) efeitocura = 49 -- número do efeito quando a cura chega ao player (efeito de posição fixa, pode ser identificado com /z no jogo) -- Função que chama a aura function efeitosAura(i,tm,cid) if(isCreature(cid)) then local atual = getCreaturePosition(cid) local posaura = { {x=(atual.x)-1, y=(atual.y)-1, z=atual.z}, {x=atual.x, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=atual.y, z=atual.z}, {x=(atual.x)+1, y=(atual.y)+1, z=atual.z}, {x=atual.x, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=atual.y, z=atual.z}, } local chances = math.random(100) if(chances<=porcentagem/8 and getCreatureHealth(cid)<getCreatureMaxHealth(cid)) then doCreatureAddHealth(cid, getCreatureMaxHealth(cid)/quantheal) if(i<=8 and i>1) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, atual, tipoaura) else doSendDistanceShoot({x=posaura[1].x, y=posaura[1].y, z=posaura[1].z}, atual, tipoaura) end doSendMagicEffect(atual, efeitocura) end if(i==8) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, {x=posaura[1].x, y=posaura[1].y, z=posaura[1].z}, tipoaura) elseif(i<8) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, {x=posaura[i+1].x, y=posaura[i+1].y, z=posaura[i+1].z}, tipoaura) end if(i<=8 and getPlayerStorageValue(cid, aurastr)==2) then i = i+1 tm = tempo/8 return addEvent(efeitosAura,tm,i,tm,cid) elseif(i>8 and getPlayerStorageValue(cid, aurastr)==2) then return efeitosAura(1,0,cid) else return TRUE end else return TRUE end end -- Função principal function onSay(cid, words, param, channel) if(param=="on") then if getPlayerStorageValue(cid, estr) > os.time() then doPlayerSendCancel(cid, "Espere "..(getPlayerStorageValue(cid, estr) - os.time()).." segundos para poder habilitar aura novamente.") else if(getPlayerStorageValue(cid, aurastr)==2) then doPlayerSendCancel(cid,"Sua aura já está habilitada.") elseif(getPlayerStorageValue(cid, aurastr)==-1) then doPlayerSendCancel(cid,"Aura ligada!") setPlayerStorageValue(cid, aurastr, 2) efeitosAura(1,tempo/8,cid) end end elseif(param=="off") then if(getPlayerStorageValue(cid, aurastr)==2) then setPlayerStorageValue(cid, estr, os.time()+2) setPlayerStorageValue(cid, aurastr, -1) doPlayerSendCancel(cid,"Aura desligada!") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Digite '!aura on' para ligar sua aura, e '!aura off' para desligá-la.") end return TRUE end As configurações estão comentadas, portanto é só modificar de acordo com as suas preferências.
Agora, em data\talkactions, abra o arquivos talkactions.xml, e cole isto dentro dele :
<talkaction words="!aura" event="script" value="aura.lua"/> Após feito isso, para evitar erros ao player logar, será necessário criar um script que mudará o storage da aura toda vez que o player se logar novamente, para isso, vá em data\creaturescripts\scripts e crie um arquivo chamado auralogin.lua, e cole isto :
function onLogin(cid) aurastr = 25950 -- storage da aura setPlayerStorageValue(cid, aurastr, -1) return TRUE end Após isto, vá em data\creaturescripts e abra o arquivo creaturescripts.xml, e cole o seguinte código nele :
<event type="login" name="AuraLogin" script="auralogin.lua"/> E pronto! Agora é só desfrutar do sistema.
OBS : Se você der /reload talkactions no OT em execução, com algum player estando com aura em execução, elas serão interrompidas e será necessário usar !aura off, e !aura on, para reabilitá-las. Portanto cuidado!
Créditos : Eu mesmo(Fakezim/BielzinhoCrazy/GMLeal, tanto faz o nick rererere) Obrigado pessoal!
-
bielzinhocrazy recebeu reputação de Kurwanuss em Heal aura systemOlá pessoal do TibiaKing,
Hoje venho trazer um script sistema de auras, que explicado superficialmente, é uma bolha de luz que te rodeia constantemente (é possível mudar o efeito visual da aura, como você poderá conferir no script), e possui uma chance pré-determinada pela pessoa, em porcentagem, de curar a cada volta que dá no player. Para ligar a aura digite !aura on, e para desligar !aura off. Vocês podem conferir como funciona assistindo o vídeo a seguir :
Bom, vamos aos códigos.
Primeiro, na pasta de seu OT, vá em data\talkactions\scripts, e crie um novo arquivo chamado aura.lua, e coloque isto nele (serão necessários dois storages) :
-- CONFIGURAÇÕES aurastr = 25950 -- storage da aura estr = 25951 -- storage para o exhaust porcentagem = 40 -- chance de curar em cada volta da aura, em porcentagem quantheal = 10 -- porcentagem do hp máximo que cada cura irá curar. (No caso, irá curar 10% do hp máximo cada cura) tempo = 1180 -- tempo para dar uma volta no player (este tempo foi o que achei mais agradável visualmente, é recomendável não mudar) tipoaura = 30 -- número do efeito da aura (efeito de distância, pode ser identificado com /x no jogo) efeitocura = 49 -- número do efeito quando a cura chega ao player (efeito de posição fixa, pode ser identificado com /z no jogo) -- Função que chama a aura function efeitosAura(i,tm,cid) if(isCreature(cid)) then local atual = getCreaturePosition(cid) local posaura = { {x=(atual.x)-1, y=(atual.y)-1, z=atual.z}, {x=atual.x, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=atual.y, z=atual.z}, {x=(atual.x)+1, y=(atual.y)+1, z=atual.z}, {x=atual.x, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=atual.y, z=atual.z}, } local chances = math.random(100) if(chances<=porcentagem/8 and getCreatureHealth(cid)<getCreatureMaxHealth(cid)) then doCreatureAddHealth(cid, getCreatureMaxHealth(cid)/quantheal) if(i<=8 and i>1) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, atual, tipoaura) else doSendDistanceShoot({x=posaura[1].x, y=posaura[1].y, z=posaura[1].z}, atual, tipoaura) end doSendMagicEffect(atual, efeitocura) end if(i==8) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, {x=posaura[1].x, y=posaura[1].y, z=posaura[1].z}, tipoaura) elseif(i<8) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, {x=posaura[i+1].x, y=posaura[i+1].y, z=posaura[i+1].z}, tipoaura) end if(i<=8 and getPlayerStorageValue(cid, aurastr)==2) then i = i+1 tm = tempo/8 return addEvent(efeitosAura,tm,i,tm,cid) elseif(i>8 and getPlayerStorageValue(cid, aurastr)==2) then return efeitosAura(1,0,cid) else return TRUE end else return TRUE end end -- Função principal function onSay(cid, words, param, channel) if(param=="on") then if getPlayerStorageValue(cid, estr) > os.time() then doPlayerSendCancel(cid, "Espere "..(getPlayerStorageValue(cid, estr) - os.time()).." segundos para poder habilitar aura novamente.") else if(getPlayerStorageValue(cid, aurastr)==2) then doPlayerSendCancel(cid,"Sua aura já está habilitada.") elseif(getPlayerStorageValue(cid, aurastr)==-1) then doPlayerSendCancel(cid,"Aura ligada!") setPlayerStorageValue(cid, aurastr, 2) efeitosAura(1,tempo/8,cid) end end elseif(param=="off") then if(getPlayerStorageValue(cid, aurastr)==2) then setPlayerStorageValue(cid, estr, os.time()+2) setPlayerStorageValue(cid, aurastr, -1) doPlayerSendCancel(cid,"Aura desligada!") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Digite '!aura on' para ligar sua aura, e '!aura off' para desligá-la.") end return TRUE end As configurações estão comentadas, portanto é só modificar de acordo com as suas preferências.
Agora, em data\talkactions, abra o arquivos talkactions.xml, e cole isto dentro dele :
<talkaction words="!aura" event="script" value="aura.lua"/> Após feito isso, para evitar erros ao player logar, será necessário criar um script que mudará o storage da aura toda vez que o player se logar novamente, para isso, vá em data\creaturescripts\scripts e crie um arquivo chamado auralogin.lua, e cole isto :
function onLogin(cid) aurastr = 25950 -- storage da aura setPlayerStorageValue(cid, aurastr, -1) return TRUE end Após isto, vá em data\creaturescripts e abra o arquivo creaturescripts.xml, e cole o seguinte código nele :
<event type="login" name="AuraLogin" script="auralogin.lua"/> E pronto! Agora é só desfrutar do sistema.
OBS : Se você der /reload talkactions no OT em execução, com algum player estando com aura em execução, elas serão interrompidas e será necessário usar !aura off, e !aura on, para reabilitá-las. Portanto cuidado!
Créditos : Eu mesmo(Fakezim/BielzinhoCrazy/GMLeal, tanto faz o nick rererere) Obrigado pessoal!
-
bielzinhocrazy recebeu reputação de Kurwanuss em Sistema de aprimoramento da movimentaçãoOlá pessoal,
Hoje venho trazer pra vocês um sisteminha que acabei de criar, para auxiliar a movimentação de nossos players, fazendo com que além de spells de velocidade, também tenham um recurso a mais. Funciona da seguinte maneira : para os personagens melee (paladin e knight), há um grande impulso em que eles correm super rápido até o próximo obstáculo (monstros, paredes, etc) ou até a quantidade limite de posições para se avançar do talkaction, soltando efeitos de fogo pelos pés. É possível controlar sua direção de corrida pressionando ctrl+direção. Já os personagens mágicos, druid e sorcerer, canalizarão um poder de luz e após isso, se teleportarão, em linha reta, até o próximo obstáculo, ou até a quantidade de posições limite. Não é possível utilizar continuamente, porque senão seria bastante apelativo, então coloquei uma quantidade de exhaust, no meu caso, 10 segundos, porém você pode modificar no script. Para vocês terem ideia de como funciona, fiz um vídeo (com resolução ruim a propósito, peço perdão), que está logo à seguir :
Bom, cada uma das categorias(melee, magic) tem sua vantagem, e sua desvantagem.
Melee :
-Vantagem : é possível controlar as direcionais com ctrl.
-Desvantagem : pode ser atingido durante a movimentação.
Magic :
-Vantagem : aparece instantaneamente na posição destino, após a focalização de energia.
-Desvantagem : não pode desviar de obstáculos.
Para usar, apenas digite !move.
Agora, vou mostrar-lhes os códigos e como devem ser colocados e configurados.
Em data\talkactions\scripts, crie um novo arquivo chamado move.lua, e cole o seguinte código :
local exhauststorage = 20209 -- storage para o exhaust local exhaust = 10 -- tempo do exhaust em segundos local quantpos = 30 -- posições x ou y que o personagem irá avançar, por exemplo, aqui irá se mover 30 posições pra direção em que estiver local voc = { --dependendo da vocação, a movimentação será diferente {3,4,7,8,11,12}, -- vocações melee, que no caso são knight e paladin {1,2,5,6,9,10}, -- vocações mágicas, que são sorc e druid } --Função da movimentação para paladin e knight function moveMelee(cid, t) if(isCreature(cid)) then local tmp = getPlayerLookPos(cid) if(not isCreature(getThingFromPos(tmp).uid) and doTileQueryAdd(cid, tmp)==1 and t>0) then doCreatureSetNoMove(cid, 1) t = t-1 doSendMagicEffect(getCreaturePos(cid), 15) doMoveCreature(cid, getPlayerLookDir(cid)) return addEvent(moveMelee, 10, cid, t) else doCreatureSetNoMove(cid, 0) return TRUE end else return TRUE end end --Função da movimentação para sorcerer e druid function moveMagic(cid) if(isCreature(cid)) then local tmp = getCreaturePos(cid) local dir = getPlayerLookDir(cid) for i=1, quantpos do if(dir==0) then tmp = {x=tmp.x, y=tmp.y-1, z=tmp.z} elseif(dir==1) then tmp = {x=tmp.x+1, y=tmp.y, z=tmp.z} elseif(dir==2) then tmp = {x=tmp.x, y=tmp.y+1, z=tmp.z} elseif(dir==3) then tmp = {x=tmp.x-1, y=tmp.y, z=tmp.z} end if(doTileQueryAdd(cid, tmp)~=1) then if(dir==0) then tmp = {x=tmp.x, y=tmp.y+1, z=tmp.z} elseif(dir==1) then tmp = {x=tmp.x-1, y=tmp.y, z=tmp.z} elseif(dir==2) then tmp = {x=tmp.x, y=tmp.y-1, z=tmp.z} elseif(dir==3) then tmp = {x=tmp.x+1, y=tmp.y, z=tmp.z} end break end end doTeleportThing(cid, tmp) doSendMagicEffect(getCreaturePos(cid), 49) doSendAnimatedText(getCreaturePos(cid), "Tchum!", 144) doCreatureSetNoMove(cid, 0) return TRUE else return TRUE end end --Efeitos para a movimentação de sorc e druid function magicEffect(cid, i) if(isCreature(cid)) then local atual = getCreaturePosition(cid) local posefeitos = { {x=(atual.x)-1, y=(atual.y)-1, z=atual.z}, {x=atual.x, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=atual.y, z=atual.z}, {x=(atual.x)+1, y=(atual.y)+1, z=atual.z}, {x=atual.x, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=atual.y, z=atual.z}, } if(i<=8) then doSendMagicEffect({x=posefeitos[i].x, y=posefeitos[i].y, z=posefeitos[i].z}, 39) end if(i>8) then doSendMagicEffect(atual, 49) doSendAnimatedText(atual, "Voosh", 144) return moveMagic(cid) end return addEvent(magicEffect, 50, cid, i+1) else return TRUE end end --Função principal function onSay(cid, words, param) if(getPlayerStorageValue(cid, exhauststorage)>os.time()) then doPlayerSendCancel(cid, "Voce deve esperar "..(getPlayerStorageValue(cid, exhauststorage)-os.time()).." segundos para usar a movimentação novamente.") return TRUE else setPlayerStorageValue(cid, exhauststorage, os.time()+exhaust) local v = getPlayerVocation(cid) for i=1, #voc[1] do if(v==voc[1][i]) then return moveMelee(cid, quantpos),doCreatureSay(cid, "Movimentação ultra rápida!", 1) end end return magicEffect(cid, 1),doCreatureSay(cid, "Teleport!", 1),doCreatureSetNoMove(cid, 1) end end Agora vá em data\talkactions\talkactions.xml, e adicione uma nova linha com o seguinte conteúdo :
<talkaction words="!move" event="script" value="move.lua"/> O código está comentado, então agora é só configurar e usar de acordo com as suas preferências!
OBS : Fica a seu critério colocar se apenas vip podem utilizar esse sistema, se será necessário mp, ou soul, ou hp, ou qualquer coisa que precise. Tudo isso pode ser incrementado na função principal (onSay).
Créditos : eu mesmo (GMLeal/ BielzinhoCrazy/ Fakezim) tanto faz Bom, é isso aí pessoal, bom proveito, e obrigado!
-
bielzinhocrazy recebeu reputação de Reedz em Sistema de aprimoramento da movimentaçãoEu fiz mas nem testei, estou meio sem tempo, porém a lógica está certa, tente então desta forma :
local exhauststorage = 20209 -- storage para o exhaust local exhaust = 10 -- tempo do exhaust em segundos local quantpos = 30 -- posições x ou y que o personagem irá avançar, por exemplo, aqui irá se mover 30 posições pra direção em que estiver local voc = { --dependendo da vocação, a movimentação será diferente {3,4,7,8,11,12}, -- vocações melee, que no caso são knight e paladin {1,2,5,6,9,10}, -- vocações mágicas, que são sorc e druid } --Função da movimentação para paladin e knight function moveMelee(cid, t) if(isCreature(cid)) then local tmp = getPlayerLookPos(cid) if(not isCreature(getThingFromPos(tmp).uid) and doTileQueryAdd(cid, tmp)~=1 and t>0) then if(getCreatureSkullType(cid) != SKULL_NONE and getTilePzInfo(tmp)==1) then doCreatureSetNoMove(cid, false) return TRUE end doCreatureSetNoMove(cid, true) t = t-1 doSendMagicEffect(getCreaturePos(cid), 15) doMoveCreature(cid, getPlayerLookDir(cid)) return addEvent(moveMelee, 10, cid, t) else doCreatureSetNoMove(cid, false) return TRUE end else return TRUE end end --Função da movimentação para sorcerer e druid function moveMagic(cid) if(isCreature(cid)) then tmp = getCreaturePos(cid) dir = getPlayerLookDir(cid) for i=1, quantpos do if(dir==0) then tmp = {x=tmp.x, y=tmp.y-1, z=tmp.z} elseif(dir==1) then tmp = {x=tmp.x+1, y=tmp.y, z=tmp.z} elseif(dir==2) then tmp = {x=tmp.x, y=tmp.y+1, z=tmp.z} elseif(dir==3) then tmp = {x=tmp.x-1, y=tmp.y, z=tmp.z} end if (doTileQueryAdd(cid, tmp)==1 or (getCreatureSkullType(cid)!=SKULL_NONE and getTilePzInfo(tmp)==1)) then if(dir==0) then tmp = {x=tmp.x, y=tmp.y+1, z=tmp.z} elseif(dir==1) then tmp = {x=tmp.x-1, y=tmp.y, z=tmp.z} elseif(dir==2) then tmp = {x=tmp.x, y=tmp.y-1, z=tmp.z} elseif(dir==3) then tmp = {x=tmp.x+1, y=tmp.y, z=tmp.z} end break end end doTeleportThing(cid, tmp) doSendMagicEffect(getCreaturePos(cid), 49) doCreatureSetNoMove(cid, false) return TRUE else return TRUE end end --Efeitos para a movimentação de sorc e druid function magicEffect(cid, i) if(isCreature(cid)) then local atual = getCreaturePosition(cid) local posefeitos = { {x=(atual.x)-1, y=(atual.y)-1, z=atual.z}, {x=atual.x, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=atual.y, z=atual.z}, {x=(atual.x)+1, y=(atual.y)+1, z=atual.z}, {x=atual.x, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=atual.y, z=atual.z}, } if(i<=8) then doSendMagicEffect({x=posefeitos[i].x, y=posefeitos[i].y, z=posefeitos[i].z}, 39) end if(i>8) then doSendMagicEffect(atual, 49) return moveMagic(cid) end return addEvent(magicEffect, 50, cid, i+1) else return TRUE end end --Função principal function onSay(cid, words, param) if(getPlayerStorageValue(cid, exhauststorage)>os.time()) then doPlayerSendCancel(cid, "Voce deve esperar "..(getPlayerStorageValue(cid, exhauststorage)-os.time()).." segundos para usar a movimentação novamente.") return TRUE else setPlayerStorageValue(cid, exhauststorage, os.time()+exhaust) local v = getPlayerVocation(cid) for i=1, #voc[1] do if(v==voc[1][i]) then return moveMelee(cid, quantpos),doCreatureSay(cid, "Movimentação ultra rápida!", 1) end end return magicEffect(cid, 1),doCreatureSay(cid, "Teleport!", 1),doCreatureSetNoMove(cid, true) end end Bom, se não der, quarta-feira tenho o dia livre e tento rever melhor, tá difícil arranjar um tempinho livre.
-
bielzinhocrazy recebeu reputação de NathanAmaro em Heal aura systemOlá pessoal do TibiaKing,
Hoje venho trazer um script sistema de auras, que explicado superficialmente, é uma bolha de luz que te rodeia constantemente (é possível mudar o efeito visual da aura, como você poderá conferir no script), e possui uma chance pré-determinada pela pessoa, em porcentagem, de curar a cada volta que dá no player. Para ligar a aura digite !aura on, e para desligar !aura off. Vocês podem conferir como funciona assistindo o vídeo a seguir :
Bom, vamos aos códigos.
Primeiro, na pasta de seu OT, vá em data\talkactions\scripts, e crie um novo arquivo chamado aura.lua, e coloque isto nele (serão necessários dois storages) :
-- CONFIGURAÇÕES aurastr = 25950 -- storage da aura estr = 25951 -- storage para o exhaust porcentagem = 40 -- chance de curar em cada volta da aura, em porcentagem quantheal = 10 -- porcentagem do hp máximo que cada cura irá curar. (No caso, irá curar 10% do hp máximo cada cura) tempo = 1180 -- tempo para dar uma volta no player (este tempo foi o que achei mais agradável visualmente, é recomendável não mudar) tipoaura = 30 -- número do efeito da aura (efeito de distância, pode ser identificado com /x no jogo) efeitocura = 49 -- número do efeito quando a cura chega ao player (efeito de posição fixa, pode ser identificado com /z no jogo) -- Função que chama a aura function efeitosAura(i,tm,cid) if(isCreature(cid)) then local atual = getCreaturePosition(cid) local posaura = { {x=(atual.x)-1, y=(atual.y)-1, z=atual.z}, {x=atual.x, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=atual.y, z=atual.z}, {x=(atual.x)+1, y=(atual.y)+1, z=atual.z}, {x=atual.x, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=atual.y, z=atual.z}, } local chances = math.random(100) if(chances<=porcentagem/8 and getCreatureHealth(cid)<getCreatureMaxHealth(cid)) then doCreatureAddHealth(cid, getCreatureMaxHealth(cid)/quantheal) if(i<=8 and i>1) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, atual, tipoaura) else doSendDistanceShoot({x=posaura[1].x, y=posaura[1].y, z=posaura[1].z}, atual, tipoaura) end doSendMagicEffect(atual, efeitocura) end if(i==8) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, {x=posaura[1].x, y=posaura[1].y, z=posaura[1].z}, tipoaura) elseif(i<8) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, {x=posaura[i+1].x, y=posaura[i+1].y, z=posaura[i+1].z}, tipoaura) end if(i<=8 and getPlayerStorageValue(cid, aurastr)==2) then i = i+1 tm = tempo/8 return addEvent(efeitosAura,tm,i,tm,cid) elseif(i>8 and getPlayerStorageValue(cid, aurastr)==2) then return efeitosAura(1,0,cid) else return TRUE end else return TRUE end end -- Função principal function onSay(cid, words, param, channel) if(param=="on") then if getPlayerStorageValue(cid, estr) > os.time() then doPlayerSendCancel(cid, "Espere "..(getPlayerStorageValue(cid, estr) - os.time()).." segundos para poder habilitar aura novamente.") else if(getPlayerStorageValue(cid, aurastr)==2) then doPlayerSendCancel(cid,"Sua aura já está habilitada.") elseif(getPlayerStorageValue(cid, aurastr)==-1) then doPlayerSendCancel(cid,"Aura ligada!") setPlayerStorageValue(cid, aurastr, 2) efeitosAura(1,tempo/8,cid) end end elseif(param=="off") then if(getPlayerStorageValue(cid, aurastr)==2) then setPlayerStorageValue(cid, estr, os.time()+2) setPlayerStorageValue(cid, aurastr, -1) doPlayerSendCancel(cid,"Aura desligada!") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Digite '!aura on' para ligar sua aura, e '!aura off' para desligá-la.") end return TRUE end As configurações estão comentadas, portanto é só modificar de acordo com as suas preferências.
Agora, em data\talkactions, abra o arquivos talkactions.xml, e cole isto dentro dele :
<talkaction words="!aura" event="script" value="aura.lua"/> Após feito isso, para evitar erros ao player logar, será necessário criar um script que mudará o storage da aura toda vez que o player se logar novamente, para isso, vá em data\creaturescripts\scripts e crie um arquivo chamado auralogin.lua, e cole isto :
function onLogin(cid) aurastr = 25950 -- storage da aura setPlayerStorageValue(cid, aurastr, -1) return TRUE end Após isto, vá em data\creaturescripts e abra o arquivo creaturescripts.xml, e cole o seguinte código nele :
<event type="login" name="AuraLogin" script="auralogin.lua"/> E pronto! Agora é só desfrutar do sistema.
OBS : Se você der /reload talkactions no OT em execução, com algum player estando com aura em execução, elas serão interrompidas e será necessário usar !aura off, e !aura on, para reabilitá-las. Portanto cuidado!
Créditos : Eu mesmo(Fakezim/BielzinhoCrazy/GMLeal, tanto faz o nick rererere) Obrigado pessoal!
-
bielzinhocrazy recebeu reputação de Reedz em Sistema de aprimoramento da movimentaçãoOlá pessoal,
Hoje venho trazer pra vocês um sisteminha que acabei de criar, para auxiliar a movimentação de nossos players, fazendo com que além de spells de velocidade, também tenham um recurso a mais. Funciona da seguinte maneira : para os personagens melee (paladin e knight), há um grande impulso em que eles correm super rápido até o próximo obstáculo (monstros, paredes, etc) ou até a quantidade limite de posições para se avançar do talkaction, soltando efeitos de fogo pelos pés. É possível controlar sua direção de corrida pressionando ctrl+direção. Já os personagens mágicos, druid e sorcerer, canalizarão um poder de luz e após isso, se teleportarão, em linha reta, até o próximo obstáculo, ou até a quantidade de posições limite. Não é possível utilizar continuamente, porque senão seria bastante apelativo, então coloquei uma quantidade de exhaust, no meu caso, 10 segundos, porém você pode modificar no script. Para vocês terem ideia de como funciona, fiz um vídeo (com resolução ruim a propósito, peço perdão), que está logo à seguir :
Bom, cada uma das categorias(melee, magic) tem sua vantagem, e sua desvantagem.
Melee :
-Vantagem : é possível controlar as direcionais com ctrl.
-Desvantagem : pode ser atingido durante a movimentação.
Magic :
-Vantagem : aparece instantaneamente na posição destino, após a focalização de energia.
-Desvantagem : não pode desviar de obstáculos.
Para usar, apenas digite !move.
Agora, vou mostrar-lhes os códigos e como devem ser colocados e configurados.
Em data\talkactions\scripts, crie um novo arquivo chamado move.lua, e cole o seguinte código :
local exhauststorage = 20209 -- storage para o exhaust local exhaust = 10 -- tempo do exhaust em segundos local quantpos = 30 -- posições x ou y que o personagem irá avançar, por exemplo, aqui irá se mover 30 posições pra direção em que estiver local voc = { --dependendo da vocação, a movimentação será diferente {3,4,7,8,11,12}, -- vocações melee, que no caso são knight e paladin {1,2,5,6,9,10}, -- vocações mágicas, que são sorc e druid } --Função da movimentação para paladin e knight function moveMelee(cid, t) if(isCreature(cid)) then local tmp = getPlayerLookPos(cid) if(not isCreature(getThingFromPos(tmp).uid) and doTileQueryAdd(cid, tmp)==1 and t>0) then doCreatureSetNoMove(cid, 1) t = t-1 doSendMagicEffect(getCreaturePos(cid), 15) doMoveCreature(cid, getPlayerLookDir(cid)) return addEvent(moveMelee, 10, cid, t) else doCreatureSetNoMove(cid, 0) return TRUE end else return TRUE end end --Função da movimentação para sorcerer e druid function moveMagic(cid) if(isCreature(cid)) then local tmp = getCreaturePos(cid) local dir = getPlayerLookDir(cid) for i=1, quantpos do if(dir==0) then tmp = {x=tmp.x, y=tmp.y-1, z=tmp.z} elseif(dir==1) then tmp = {x=tmp.x+1, y=tmp.y, z=tmp.z} elseif(dir==2) then tmp = {x=tmp.x, y=tmp.y+1, z=tmp.z} elseif(dir==3) then tmp = {x=tmp.x-1, y=tmp.y, z=tmp.z} end if(doTileQueryAdd(cid, tmp)~=1) then if(dir==0) then tmp = {x=tmp.x, y=tmp.y+1, z=tmp.z} elseif(dir==1) then tmp = {x=tmp.x-1, y=tmp.y, z=tmp.z} elseif(dir==2) then tmp = {x=tmp.x, y=tmp.y-1, z=tmp.z} elseif(dir==3) then tmp = {x=tmp.x+1, y=tmp.y, z=tmp.z} end break end end doTeleportThing(cid, tmp) doSendMagicEffect(getCreaturePos(cid), 49) doSendAnimatedText(getCreaturePos(cid), "Tchum!", 144) doCreatureSetNoMove(cid, 0) return TRUE else return TRUE end end --Efeitos para a movimentação de sorc e druid function magicEffect(cid, i) if(isCreature(cid)) then local atual = getCreaturePosition(cid) local posefeitos = { {x=(atual.x)-1, y=(atual.y)-1, z=atual.z}, {x=atual.x, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=atual.y, z=atual.z}, {x=(atual.x)+1, y=(atual.y)+1, z=atual.z}, {x=atual.x, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=atual.y, z=atual.z}, } if(i<=8) then doSendMagicEffect({x=posefeitos[i].x, y=posefeitos[i].y, z=posefeitos[i].z}, 39) end if(i>8) then doSendMagicEffect(atual, 49) doSendAnimatedText(atual, "Voosh", 144) return moveMagic(cid) end return addEvent(magicEffect, 50, cid, i+1) else return TRUE end end --Função principal function onSay(cid, words, param) if(getPlayerStorageValue(cid, exhauststorage)>os.time()) then doPlayerSendCancel(cid, "Voce deve esperar "..(getPlayerStorageValue(cid, exhauststorage)-os.time()).." segundos para usar a movimentação novamente.") return TRUE else setPlayerStorageValue(cid, exhauststorage, os.time()+exhaust) local v = getPlayerVocation(cid) for i=1, #voc[1] do if(v==voc[1][i]) then return moveMelee(cid, quantpos),doCreatureSay(cid, "Movimentação ultra rápida!", 1) end end return magicEffect(cid, 1),doCreatureSay(cid, "Teleport!", 1),doCreatureSetNoMove(cid, 1) end end Agora vá em data\talkactions\talkactions.xml, e adicione uma nova linha com o seguinte conteúdo :
<talkaction words="!move" event="script" value="move.lua"/> O código está comentado, então agora é só configurar e usar de acordo com as suas preferências!
OBS : Fica a seu critério colocar se apenas vip podem utilizar esse sistema, se será necessário mp, ou soul, ou hp, ou qualquer coisa que precise. Tudo isso pode ser incrementado na função principal (onSay).
Créditos : eu mesmo (GMLeal/ BielzinhoCrazy/ Fakezim) tanto faz Bom, é isso aí pessoal, bom proveito, e obrigado!
-
bielzinhocrazy recebeu reputação de Reedz em Sistema de aprimoramento da movimentaçãoPra limitar é só fazer a verificação se está pk e se é pz zone, se for, não teleportar pra dentro da pz, implementei já no script, tente com este código :
local exhauststorage = 20209 -- storage para o exhaust local exhaust = 10 -- tempo do exhaust em segundos local quantpos = 30 -- posições x ou y que o personagem irá avançar, por exemplo, aqui irá se mover 30 posições pra direção em que estiver local voc = { --dependendo da vocação, a movimentação será diferente {3,4,7,8,11,12}, -- vocações melee, que no caso são knight e paladin {1,2,5,6,9,10}, -- vocações mágicas, que são sorc e druid } --Função da movimentação para paladin e knight function moveMelee(cid, t) if(isCreature(cid)) then local tmp = getPlayerLookPos(cid) if(not isCreature(getThingFromPos(tmp).uid) and doTileQueryAdd(cid, tmp)~=1 and t>0) then if(getCreatureSkullType(cid)>0 and getTilePzInfo(tmp)==1) then doCreatureSetNoMove(cid, false) return TRUE end doCreatureSetNoMove(cid, true) t = t-1 doSendMagicEffect(getCreaturePos(cid), 15) doMoveCreature(cid, getPlayerLookDir(cid)) return addEvent(moveMelee, 10, cid, t) else doCreatureSetNoMove(cid, false) return TRUE end else return TRUE end end --Função da movimentação para sorcerer e druid function moveMagic(cid) if(isCreature(cid)) then tmp = getCreaturePos(cid) dir = getPlayerLookDir(cid) for i=1, quantpos do if(dir==0) then tmp = {x=tmp.x, y=tmp.y-1, z=tmp.z} elseif(dir==1) then tmp = {x=tmp.x+1, y=tmp.y, z=tmp.z} elseif(dir==2) then tmp = {x=tmp.x, y=tmp.y+1, z=tmp.z} elseif(dir==3) then tmp = {x=tmp.x-1, y=tmp.y, z=tmp.z} end if (doTileQueryAdd(cid, tmp)==1 or (getPlayerSkullType(cid)>0 and getTilePzInfo(tmp)==1)) then if(dir==0) then tmp = {x=tmp.x, y=tmp.y+1, z=tmp.z} elseif(dir==1) then tmp = {x=tmp.x-1, y=tmp.y, z=tmp.z} elseif(dir==2) then tmp = {x=tmp.x, y=tmp.y-1, z=tmp.z} elseif(dir==3) then tmp = {x=tmp.x+1, y=tmp.y, z=tmp.z} end break end end doTeleportThing(cid, tmp) doSendMagicEffect(getCreaturePos(cid), 49) doCreatureSetNoMove(cid, false) return TRUE else return TRUE end end --Efeitos para a movimentação de sorc e druid function magicEffect(cid, i) if(isCreature(cid)) then local atual = getCreaturePosition(cid) local posefeitos = { {x=(atual.x)-1, y=(atual.y)-1, z=atual.z}, {x=atual.x, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=atual.y, z=atual.z}, {x=(atual.x)+1, y=(atual.y)+1, z=atual.z}, {x=atual.x, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=atual.y, z=atual.z}, } if(i<=8) then doSendMagicEffect({x=posefeitos[i].x, y=posefeitos[i].y, z=posefeitos[i].z}, 39) end if(i>8) then doSendMagicEffect(atual, 49) return moveMagic(cid) end return addEvent(magicEffect, 50, cid, i+1) else return TRUE end end --Função principal function onSay(cid, words, param) if(getPlayerStorageValue(cid, exhauststorage)>os.time()) then doPlayerSendCancel(cid, "Voce deve esperar "..(getPlayerStorageValue(cid, exhauststorage)-os.time()).." segundos para usar a movimentação novamente.") return TRUE else setPlayerStorageValue(cid, exhauststorage, os.time()+exhaust) local v = getPlayerVocation(cid) for i=1, #voc[1] do if(v==voc[1][i]) then return moveMelee(cid, quantpos),doCreatureSay(cid, "Movimentação ultra rápida!", 1) end end return magicEffect(cid, 1),doCreatureSay(cid, "Teleport!", 1),doCreatureSetNoMove(cid, true) end end -
bielzinhocrazy recebeu reputação de Reedz em Sistema de aprimoramento da movimentaçãoRealmente, baixei um OT da versão 9,83, e não funcionou. Bom, eu não sei as causas porque sempre fiz scripts na versão 8.6, e faz muito, MUUUITO tempo que não faço códigos pra tibia (uns 3 a 4 anos, eu resolvi fazer alguns agora pra passar o tempo). Mas ao que parece, ao meu ver, ele não está reconhecendo as funções 'doTileQueryAdd', nem a 'doSendAnimatedText', sendo que a função 'doTileQueryAdd' é uma função chave pra verificar a posição limite em que o player pode se movimentar. Talvez possua uma sintaxe diferente devido à versão. De qualquer forma, vou tentar achar uma solução no meu tempo livre, e se eu conseguir, eu aviso.
--------------------------------------------------------------EDIT--------------------------------------------------------------
Dei uma olhada melhor aqui, e realmente, com a mudança de versões foi alterado a sintaxe dos códigos 'doTileQueryAdd' e 'doSetNoMove', fiz algumas modificações, para o OT 9.83 está funcionando corretamente agora. Segue o código do novo move.lua:
local exhauststorage = 20209 -- storage para o exhaust local exhaust = 10 -- tempo do exhaust em segundos local quantpos = 30 -- posições x ou y que o personagem irá avançar, por exemplo, aqui irá se mover 30 posições pra direção em que estiver local voc = { --dependendo da vocação, a movimentação será diferente {3,4,7,8,11,12}, -- vocações melee, que no caso são knight e paladin {1,2,5,6,9,10}, -- vocações mágicas, que são sorc e druid } --Função da movimentação para paladin e knight function moveMelee(cid, t) if(isCreature(cid)) then local tmp = getPlayerLookPos(cid) if(not isCreature(getThingFromPos(tmp).uid) and doTileQueryAdd(cid, tmp)~=1 and t>0) then doCreatureSetNoMove(cid, true) t = t-1 doSendMagicEffect(getCreaturePos(cid), 15) doMoveCreature(cid, getPlayerLookDir(cid)) return addEvent(moveMelee, 10, cid, t) else doCreatureSetNoMove(cid, false) return TRUE end else return TRUE end end --Função da movimentação para sorcerer e druid function moveMagic(cid) if(isCreature(cid)) then tmp = getCreaturePos(cid) dir = getPlayerLookDir(cid) for i=1, quantpos do if(dir==0) then tmp = {x=tmp.x, y=tmp.y-1, z=tmp.z} elseif(dir==1) then tmp = {x=tmp.x+1, y=tmp.y, z=tmp.z} elseif(dir==2) then tmp = {x=tmp.x, y=tmp.y+1, z=tmp.z} elseif(dir==3) then tmp = {x=tmp.x-1, y=tmp.y, z=tmp.z} end if (doTileQueryAdd(cid, tmp)==1) then if(dir==0) then tmp = {x=tmp.x, y=tmp.y+1, z=tmp.z} elseif(dir==1) then tmp = {x=tmp.x-1, y=tmp.y, z=tmp.z} elseif(dir==2) then tmp = {x=tmp.x, y=tmp.y-1, z=tmp.z} elseif(dir==3) then tmp = {x=tmp.x+1, y=tmp.y, z=tmp.z} end break end end doTeleportThing(cid, tmp) doSendMagicEffect(getCreaturePos(cid), 49) doCreatureSetNoMove(cid, false) return TRUE else return TRUE end end --Efeitos para a movimentação de sorc e druid function magicEffect(cid, i) if(isCreature(cid)) then local atual = getCreaturePosition(cid) local posefeitos = { {x=(atual.x)-1, y=(atual.y)-1, z=atual.z}, {x=atual.x, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=atual.y, z=atual.z}, {x=(atual.x)+1, y=(atual.y)+1, z=atual.z}, {x=atual.x, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=atual.y, z=atual.z}, } if(i<=8) then doSendMagicEffect({x=posefeitos[i].x, y=posefeitos[i].y, z=posefeitos[i].z}, 39) end if(i>8) then doSendMagicEffect(atual, 49) return moveMagic(cid) end return addEvent(magicEffect, 50, cid, i+1) else return TRUE end end --Função principal function onSay(cid, words, param) if(getPlayerStorageValue(cid, exhauststorage)>os.time()) then doPlayerSendCancel(cid, "Voce deve esperar "..(getPlayerStorageValue(cid, exhauststorage)-os.time()).." segundos para usar a movimentação novamente.") return TRUE else setPlayerStorageValue(cid, exhauststorage, os.time()+exhaust) local v = getPlayerVocation(cid) for i=1, #voc[1] do if(v==voc[1][i]) then return moveMelee(cid, quantpos),doCreatureSay(cid, "Movimentação ultra rápida!", 1) end end return magicEffect(cid, 1),doCreatureSay(cid, "Teleport!", 1),doCreatureSetNoMove(cid, true) end end -
bielzinhocrazy recebeu reputação de NathanAmaro em Heal aura systemSim, também é possível, fiz de uma maneira bem improvisada pra você ter uma ideia de como fazer :
em data\npcs crie um arquivo NOMEDONPC.xml, e cole isto :
<?xml version="1.0" encoding="UTF-8"?> <npc name="NOMEDOSEUNPC" script="data/npc/scripts/auranpc.lua" walkinterval="50000" floorchange="0"> <health now="100" max="100"/> <look type="129" head="95" body="116" legs="121" feet="115" addons="3"/> <parameters> <parameter key="message_greet" value="Oi |PLAYERNAME|. Eu possuo a habilidade de ceder {aura}. O que deseja?"/> </parameters> </npc> Coloque o nome do npc, e outfits de sua preferência.
agora vá em data\npcs\scripts, crie um arquivo chamado auranpc.lua, e cole isto :
local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid if msgcontains(msg, 'aura') then if getPlayerStorageValue(cid,20201) ~= 1 then selfSay('Para adquirir aura é necessário 10000000 golds. Você deseja adquirí-la?', cid) talkState[talkUser] = 1 else selfSay('Você já possui aura.', cid) end elseif talkState[talkUser] == 1 then if msgcontains(msg, 'yes') then if doPlayerRemoveMoney(cid, 10000000) then setPlayerStorageValue(cid,20201,1) selfSay('Parabéns, agora você possui aura!', cid) talkState[talkUser] = 0 else selfSay('Você não possui o dinheiro necessário.', cid) end else selfSay('Então porque veio aqui?', cid) end end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Você pode configurar o dinheiro (ou item) necessário ali na parte "doRemovePlayerMoney", logo após o if. Se desejar algum item, escreva "doRemovePlayerItem(cid,ID do item, quantidade)". Quando você fizer isso, também deve mudar a mensagem do NPC em que diz o que precisa, que é a parte "selfSay('Para adquirir aura é necessário 10000000 golds. Você deseja adquirí-la?', cid)".
Logo após isso, vá no creaturescript da aura (data\creaturescripts\scripts\aura.lua), e apenas na função principal (onLogin), troque por isto :
function onLogin(cid) if(getPlayerStorageValue(cid, 20201)==1) then return efeitosAura(1,tempo/8,cid) end return TRUE end E pronto, agora é só adicionar o NPC no seu mapa.
-
bielzinhocrazy recebeu reputação de xWhiteWolf em Heal aura systemOlá pessoal do TibiaKing,
Hoje venho trazer um script sistema de auras, que explicado superficialmente, é uma bolha de luz que te rodeia constantemente (é possível mudar o efeito visual da aura, como você poderá conferir no script), e possui uma chance pré-determinada pela pessoa, em porcentagem, de curar a cada volta que dá no player. Para ligar a aura digite !aura on, e para desligar !aura off. Vocês podem conferir como funciona assistindo o vídeo a seguir :
Bom, vamos aos códigos.
Primeiro, na pasta de seu OT, vá em data\talkactions\scripts, e crie um novo arquivo chamado aura.lua, e coloque isto nele (serão necessários dois storages) :
-- CONFIGURAÇÕES aurastr = 25950 -- storage da aura estr = 25951 -- storage para o exhaust porcentagem = 40 -- chance de curar em cada volta da aura, em porcentagem quantheal = 10 -- porcentagem do hp máximo que cada cura irá curar. (No caso, irá curar 10% do hp máximo cada cura) tempo = 1180 -- tempo para dar uma volta no player (este tempo foi o que achei mais agradável visualmente, é recomendável não mudar) tipoaura = 30 -- número do efeito da aura (efeito de distância, pode ser identificado com /x no jogo) efeitocura = 49 -- número do efeito quando a cura chega ao player (efeito de posição fixa, pode ser identificado com /z no jogo) -- Função que chama a aura function efeitosAura(i,tm,cid) if(isCreature(cid)) then local atual = getCreaturePosition(cid) local posaura = { {x=(atual.x)-1, y=(atual.y)-1, z=atual.z}, {x=atual.x, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=atual.y, z=atual.z}, {x=(atual.x)+1, y=(atual.y)+1, z=atual.z}, {x=atual.x, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=atual.y, z=atual.z}, } local chances = math.random(100) if(chances<=porcentagem/8 and getCreatureHealth(cid)<getCreatureMaxHealth(cid)) then doCreatureAddHealth(cid, getCreatureMaxHealth(cid)/quantheal) if(i<=8 and i>1) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, atual, tipoaura) else doSendDistanceShoot({x=posaura[1].x, y=posaura[1].y, z=posaura[1].z}, atual, tipoaura) end doSendMagicEffect(atual, efeitocura) end if(i==8) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, {x=posaura[1].x, y=posaura[1].y, z=posaura[1].z}, tipoaura) elseif(i<8) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, {x=posaura[i+1].x, y=posaura[i+1].y, z=posaura[i+1].z}, tipoaura) end if(i<=8 and getPlayerStorageValue(cid, aurastr)==2) then i = i+1 tm = tempo/8 return addEvent(efeitosAura,tm,i,tm,cid) elseif(i>8 and getPlayerStorageValue(cid, aurastr)==2) then return efeitosAura(1,0,cid) else return TRUE end else return TRUE end end -- Função principal function onSay(cid, words, param, channel) if(param=="on") then if getPlayerStorageValue(cid, estr) > os.time() then doPlayerSendCancel(cid, "Espere "..(getPlayerStorageValue(cid, estr) - os.time()).." segundos para poder habilitar aura novamente.") else if(getPlayerStorageValue(cid, aurastr)==2) then doPlayerSendCancel(cid,"Sua aura já está habilitada.") elseif(getPlayerStorageValue(cid, aurastr)==-1) then doPlayerSendCancel(cid,"Aura ligada!") setPlayerStorageValue(cid, aurastr, 2) efeitosAura(1,tempo/8,cid) end end elseif(param=="off") then if(getPlayerStorageValue(cid, aurastr)==2) then setPlayerStorageValue(cid, estr, os.time()+2) setPlayerStorageValue(cid, aurastr, -1) doPlayerSendCancel(cid,"Aura desligada!") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Digite '!aura on' para ligar sua aura, e '!aura off' para desligá-la.") end return TRUE end As configurações estão comentadas, portanto é só modificar de acordo com as suas preferências.
Agora, em data\talkactions, abra o arquivos talkactions.xml, e cole isto dentro dele :
<talkaction words="!aura" event="script" value="aura.lua"/> Após feito isso, para evitar erros ao player logar, será necessário criar um script que mudará o storage da aura toda vez que o player se logar novamente, para isso, vá em data\creaturescripts\scripts e crie um arquivo chamado auralogin.lua, e cole isto :
function onLogin(cid) aurastr = 25950 -- storage da aura setPlayerStorageValue(cid, aurastr, -1) return TRUE end Após isto, vá em data\creaturescripts e abra o arquivo creaturescripts.xml, e cole o seguinte código nele :
<event type="login" name="AuraLogin" script="auralogin.lua"/> E pronto! Agora é só desfrutar do sistema.
OBS : Se você der /reload talkactions no OT em execução, com algum player estando com aura em execução, elas serão interrompidas e será necessário usar !aura off, e !aura on, para reabilitá-las. Portanto cuidado!
Créditos : Eu mesmo(Fakezim/BielzinhoCrazy/GMLeal, tanto faz o nick rererere) Obrigado pessoal!
-
bielzinhocrazy recebeu reputação de NathanAmaro em Heal aura systemSim, é possível, mas para isso você deve fazer um creaturescript, e não um talkaction, que ficaria assim :
Vai em data\creaturescripts\scripts crie um arquivo chamado auralogin.lua e coloque :
-- CONFIGURAÇÕES porcentagem = 40 -- chance de curar em cada volta da aura, em porcentagem quantheal = 10 -- porcentagem do hp máximo que cada cura irá curar. (No caso, irá curar 10% do hp máximo cada cura) tempo = 1180 -- tempo para dar uma volta no player (este tempo foi o que achei mais agradável visualmente, é recomendável não mudar) tipoaura = 30 -- número do efeito da aura (efeito de distância, pode ser identificado com /x no jogo) efeitocura = 49 -- número do efeito quando a cura chega ao player (efeito de posição fixa, pode ser identificado com /z no jogo) -- Função que chama a aura function efeitosAura(i,tm,cid) if(isCreature(cid)) then local atual = getCreaturePosition(cid) local posaura = { {x=(atual.x)-1, y=(atual.y)-1, z=atual.z}, {x=atual.x, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=atual.y, z=atual.z}, {x=(atual.x)+1, y=(atual.y)+1, z=atual.z}, {x=atual.x, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=atual.y, z=atual.z}, } local chances = math.random(100) if(chances<=porcentagem/8 and getCreatureHealth(cid)<getCreatureMaxHealth(cid)) then doCreatureAddHealth(cid, getCreatureMaxHealth(cid)/quantheal) if(i<=8 and i>1) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, atual, tipoaura) else doSendDistanceShoot({x=posaura[1].x, y=posaura[1].y, z=posaura[1].z}, atual, tipoaura) end doSendMagicEffect(atual, efeitocura) end if(i==8) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, {x=posaura[1].x, y=posaura[1].y, z=posaura[1].z}, tipoaura) elseif(i<8) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, {x=posaura[i+1].x, y=posaura[i+1].y, z=posaura[i+1].z}, tipoaura) end if(i<=8) then i = i+1 tm = tempo/8 return addEvent(efeitosAura,tm,i,tm,cid) else return efeitosAura(1,0,cid) end else return TRUE end end --Função principal function onLogin(cid) return efeitosAura(1,tempo/8,cid) end Depois vá em data\creaturescripts, abra creaturescripts.xml, e adicione a linha :
<event type="login" name="AuraLogin" script="auralogin.lua"/> Se você quiser colocar alguma condição pro player logar com aura, adicione na parte após onLogin, do arquivo auralogin.lua. Por exemplo :
function onLogin(cid) if(getPlayerLevel(cid)>1000) then return efeitosAura(1,tempo/8,cid) end return TRUE end No caso, todos os players com level maior que 1000 possuirão aura. E vai ser ligada automaticamente assim que logar.
-
bielzinhocrazy recebeu reputação de Skydangerous em Heal aura systemOlá pessoal do TibiaKing,
Hoje venho trazer um script sistema de auras, que explicado superficialmente, é uma bolha de luz que te rodeia constantemente (é possível mudar o efeito visual da aura, como você poderá conferir no script), e possui uma chance pré-determinada pela pessoa, em porcentagem, de curar a cada volta que dá no player. Para ligar a aura digite !aura on, e para desligar !aura off. Vocês podem conferir como funciona assistindo o vídeo a seguir :
Bom, vamos aos códigos.
Primeiro, na pasta de seu OT, vá em data\talkactions\scripts, e crie um novo arquivo chamado aura.lua, e coloque isto nele (serão necessários dois storages) :
-- CONFIGURAÇÕES aurastr = 25950 -- storage da aura estr = 25951 -- storage para o exhaust porcentagem = 40 -- chance de curar em cada volta da aura, em porcentagem quantheal = 10 -- porcentagem do hp máximo que cada cura irá curar. (No caso, irá curar 10% do hp máximo cada cura) tempo = 1180 -- tempo para dar uma volta no player (este tempo foi o que achei mais agradável visualmente, é recomendável não mudar) tipoaura = 30 -- número do efeito da aura (efeito de distância, pode ser identificado com /x no jogo) efeitocura = 49 -- número do efeito quando a cura chega ao player (efeito de posição fixa, pode ser identificado com /z no jogo) -- Função que chama a aura function efeitosAura(i,tm,cid) if(isCreature(cid)) then local atual = getCreaturePosition(cid) local posaura = { {x=(atual.x)-1, y=(atual.y)-1, z=atual.z}, {x=atual.x, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=atual.y, z=atual.z}, {x=(atual.x)+1, y=(atual.y)+1, z=atual.z}, {x=atual.x, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=atual.y, z=atual.z}, } local chances = math.random(100) if(chances<=porcentagem/8 and getCreatureHealth(cid)<getCreatureMaxHealth(cid)) then doCreatureAddHealth(cid, getCreatureMaxHealth(cid)/quantheal) if(i<=8 and i>1) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, atual, tipoaura) else doSendDistanceShoot({x=posaura[1].x, y=posaura[1].y, z=posaura[1].z}, atual, tipoaura) end doSendMagicEffect(atual, efeitocura) end if(i==8) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, {x=posaura[1].x, y=posaura[1].y, z=posaura[1].z}, tipoaura) elseif(i<8) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, {x=posaura[i+1].x, y=posaura[i+1].y, z=posaura[i+1].z}, tipoaura) end if(i<=8 and getPlayerStorageValue(cid, aurastr)==2) then i = i+1 tm = tempo/8 return addEvent(efeitosAura,tm,i,tm,cid) elseif(i>8 and getPlayerStorageValue(cid, aurastr)==2) then return efeitosAura(1,0,cid) else return TRUE end else return TRUE end end -- Função principal function onSay(cid, words, param, channel) if(param=="on") then if getPlayerStorageValue(cid, estr) > os.time() then doPlayerSendCancel(cid, "Espere "..(getPlayerStorageValue(cid, estr) - os.time()).." segundos para poder habilitar aura novamente.") else if(getPlayerStorageValue(cid, aurastr)==2) then doPlayerSendCancel(cid,"Sua aura já está habilitada.") elseif(getPlayerStorageValue(cid, aurastr)==-1) then doPlayerSendCancel(cid,"Aura ligada!") setPlayerStorageValue(cid, aurastr, 2) efeitosAura(1,tempo/8,cid) end end elseif(param=="off") then if(getPlayerStorageValue(cid, aurastr)==2) then setPlayerStorageValue(cid, estr, os.time()+2) setPlayerStorageValue(cid, aurastr, -1) doPlayerSendCancel(cid,"Aura desligada!") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Digite '!aura on' para ligar sua aura, e '!aura off' para desligá-la.") end return TRUE end As configurações estão comentadas, portanto é só modificar de acordo com as suas preferências.
Agora, em data\talkactions, abra o arquivos talkactions.xml, e cole isto dentro dele :
<talkaction words="!aura" event="script" value="aura.lua"/> Após feito isso, para evitar erros ao player logar, será necessário criar um script que mudará o storage da aura toda vez que o player se logar novamente, para isso, vá em data\creaturescripts\scripts e crie um arquivo chamado auralogin.lua, e cole isto :
function onLogin(cid) aurastr = 25950 -- storage da aura setPlayerStorageValue(cid, aurastr, -1) return TRUE end Após isto, vá em data\creaturescripts e abra o arquivo creaturescripts.xml, e cole o seguinte código nele :
<event type="login" name="AuraLogin" script="auralogin.lua"/> E pronto! Agora é só desfrutar do sistema.
OBS : Se você der /reload talkactions no OT em execução, com algum player estando com aura em execução, elas serão interrompidas e será necessário usar !aura off, e !aura on, para reabilitá-las. Portanto cuidado!
Créditos : Eu mesmo(Fakezim/BielzinhoCrazy/GMLeal, tanto faz o nick rererere) Obrigado pessoal!
-
bielzinhocrazy recebeu reputação de Drafenous em Sistema de aprimoramento da movimentaçãoOlá pessoal,
Hoje venho trazer pra vocês um sisteminha que acabei de criar, para auxiliar a movimentação de nossos players, fazendo com que além de spells de velocidade, também tenham um recurso a mais. Funciona da seguinte maneira : para os personagens melee (paladin e knight), há um grande impulso em que eles correm super rápido até o próximo obstáculo (monstros, paredes, etc) ou até a quantidade limite de posições para se avançar do talkaction, soltando efeitos de fogo pelos pés. É possível controlar sua direção de corrida pressionando ctrl+direção. Já os personagens mágicos, druid e sorcerer, canalizarão um poder de luz e após isso, se teleportarão, em linha reta, até o próximo obstáculo, ou até a quantidade de posições limite. Não é possível utilizar continuamente, porque senão seria bastante apelativo, então coloquei uma quantidade de exhaust, no meu caso, 10 segundos, porém você pode modificar no script. Para vocês terem ideia de como funciona, fiz um vídeo (com resolução ruim a propósito, peço perdão), que está logo à seguir :
Bom, cada uma das categorias(melee, magic) tem sua vantagem, e sua desvantagem.
Melee :
-Vantagem : é possível controlar as direcionais com ctrl.
-Desvantagem : pode ser atingido durante a movimentação.
Magic :
-Vantagem : aparece instantaneamente na posição destino, após a focalização de energia.
-Desvantagem : não pode desviar de obstáculos.
Para usar, apenas digite !move.
Agora, vou mostrar-lhes os códigos e como devem ser colocados e configurados.
Em data\talkactions\scripts, crie um novo arquivo chamado move.lua, e cole o seguinte código :
local exhauststorage = 20209 -- storage para o exhaust local exhaust = 10 -- tempo do exhaust em segundos local quantpos = 30 -- posições x ou y que o personagem irá avançar, por exemplo, aqui irá se mover 30 posições pra direção em que estiver local voc = { --dependendo da vocação, a movimentação será diferente {3,4,7,8,11,12}, -- vocações melee, que no caso são knight e paladin {1,2,5,6,9,10}, -- vocações mágicas, que são sorc e druid } --Função da movimentação para paladin e knight function moveMelee(cid, t) if(isCreature(cid)) then local tmp = getPlayerLookPos(cid) if(not isCreature(getThingFromPos(tmp).uid) and doTileQueryAdd(cid, tmp)==1 and t>0) then doCreatureSetNoMove(cid, 1) t = t-1 doSendMagicEffect(getCreaturePos(cid), 15) doMoveCreature(cid, getPlayerLookDir(cid)) return addEvent(moveMelee, 10, cid, t) else doCreatureSetNoMove(cid, 0) return TRUE end else return TRUE end end --Função da movimentação para sorcerer e druid function moveMagic(cid) if(isCreature(cid)) then local tmp = getCreaturePos(cid) local dir = getPlayerLookDir(cid) for i=1, quantpos do if(dir==0) then tmp = {x=tmp.x, y=tmp.y-1, z=tmp.z} elseif(dir==1) then tmp = {x=tmp.x+1, y=tmp.y, z=tmp.z} elseif(dir==2) then tmp = {x=tmp.x, y=tmp.y+1, z=tmp.z} elseif(dir==3) then tmp = {x=tmp.x-1, y=tmp.y, z=tmp.z} end if(doTileQueryAdd(cid, tmp)~=1) then if(dir==0) then tmp = {x=tmp.x, y=tmp.y+1, z=tmp.z} elseif(dir==1) then tmp = {x=tmp.x-1, y=tmp.y, z=tmp.z} elseif(dir==2) then tmp = {x=tmp.x, y=tmp.y-1, z=tmp.z} elseif(dir==3) then tmp = {x=tmp.x+1, y=tmp.y, z=tmp.z} end break end end doTeleportThing(cid, tmp) doSendMagicEffect(getCreaturePos(cid), 49) doSendAnimatedText(getCreaturePos(cid), "Tchum!", 144) doCreatureSetNoMove(cid, 0) return TRUE else return TRUE end end --Efeitos para a movimentação de sorc e druid function magicEffect(cid, i) if(isCreature(cid)) then local atual = getCreaturePosition(cid) local posefeitos = { {x=(atual.x)-1, y=(atual.y)-1, z=atual.z}, {x=atual.x, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=atual.y, z=atual.z}, {x=(atual.x)+1, y=(atual.y)+1, z=atual.z}, {x=atual.x, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=atual.y, z=atual.z}, } if(i<=8) then doSendMagicEffect({x=posefeitos[i].x, y=posefeitos[i].y, z=posefeitos[i].z}, 39) end if(i>8) then doSendMagicEffect(atual, 49) doSendAnimatedText(atual, "Voosh", 144) return moveMagic(cid) end return addEvent(magicEffect, 50, cid, i+1) else return TRUE end end --Função principal function onSay(cid, words, param) if(getPlayerStorageValue(cid, exhauststorage)>os.time()) then doPlayerSendCancel(cid, "Voce deve esperar "..(getPlayerStorageValue(cid, exhauststorage)-os.time()).." segundos para usar a movimentação novamente.") return TRUE else setPlayerStorageValue(cid, exhauststorage, os.time()+exhaust) local v = getPlayerVocation(cid) for i=1, #voc[1] do if(v==voc[1][i]) then return moveMelee(cid, quantpos),doCreatureSay(cid, "Movimentação ultra rápida!", 1) end end return magicEffect(cid, 1),doCreatureSay(cid, "Teleport!", 1),doCreatureSetNoMove(cid, 1) end end Agora vá em data\talkactions\talkactions.xml, e adicione uma nova linha com o seguinte conteúdo :
<talkaction words="!move" event="script" value="move.lua"/> O código está comentado, então agora é só configurar e usar de acordo com as suas preferências!
OBS : Fica a seu critério colocar se apenas vip podem utilizar esse sistema, se será necessário mp, ou soul, ou hp, ou qualquer coisa que precise. Tudo isso pode ser incrementado na função principal (onSay).
Créditos : eu mesmo (GMLeal/ BielzinhoCrazy/ Fakezim) tanto faz Bom, é isso aí pessoal, bom proveito, e obrigado!
-
bielzinhocrazy deu reputação a Killua em Itens ganhando exp e upando (Upgrade System)Como funciona?
A cada monstro que vc mata, seus itens equipados ganham 1 de exp. Quando seus itens chegarem às quantidades de exp definidas, eles upam e ficam com o nome assim: Demon Helmet + 1. Helmets, armors, legs, e boots recebem 1 de arm a cada vez que upam. Armas recebem 1 de ataque e escudos 1 de defesa.
Para o monstro contar, ele deve dar um mínimo de exp (definido no script). O número de exp a que me refiro é aquele um presente no arquivo .xml.
Para instalar, crie Killua Items Upgrade.lua em data/creaturescripts/scripts e coloque:
Em data/creaturescripts/creaturescripts.xml coloque essas duas tags:
<event type="kill" name="Item level" event="script" value="Killua Items Upgrade.lua"/> <event type="login" name="Item levell" event="script" value="Killua Items Upgrade.lua"/> Configurando: Na tabela table_of_slots, coloque em quais slots os itens upam.
min_exp é a experiência mínima que o monstro deve ter para contar exp para o item. Se vc colocar 500, somente os monstros que tem exp igual ou superior a 500 no arquivo.xml vão valer.
exp_levels são os valores de exp que os itens devem atingir para upar. No meu caso, quando o item alcançar 50 de exp, ele upa para o level 1. Quando alcançar 50 de exp, upa para o level 2 e assim por diante.
-
bielzinhocrazy recebeu reputação de luanluciano93 em Heal aura systemOlá pessoal do TibiaKing,
Hoje venho trazer um script sistema de auras, que explicado superficialmente, é uma bolha de luz que te rodeia constantemente (é possível mudar o efeito visual da aura, como você poderá conferir no script), e possui uma chance pré-determinada pela pessoa, em porcentagem, de curar a cada volta que dá no player. Para ligar a aura digite !aura on, e para desligar !aura off. Vocês podem conferir como funciona assistindo o vídeo a seguir :
Bom, vamos aos códigos.
Primeiro, na pasta de seu OT, vá em data\talkactions\scripts, e crie um novo arquivo chamado aura.lua, e coloque isto nele (serão necessários dois storages) :
-- CONFIGURAÇÕES aurastr = 25950 -- storage da aura estr = 25951 -- storage para o exhaust porcentagem = 40 -- chance de curar em cada volta da aura, em porcentagem quantheal = 10 -- porcentagem do hp máximo que cada cura irá curar. (No caso, irá curar 10% do hp máximo cada cura) tempo = 1180 -- tempo para dar uma volta no player (este tempo foi o que achei mais agradável visualmente, é recomendável não mudar) tipoaura = 30 -- número do efeito da aura (efeito de distância, pode ser identificado com /x no jogo) efeitocura = 49 -- número do efeito quando a cura chega ao player (efeito de posição fixa, pode ser identificado com /z no jogo) -- Função que chama a aura function efeitosAura(i,tm,cid) if(isCreature(cid)) then local atual = getCreaturePosition(cid) local posaura = { {x=(atual.x)-1, y=(atual.y)-1, z=atual.z}, {x=atual.x, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=(atual.y)-1, z=atual.z}, {x=(atual.x)+1, y=atual.y, z=atual.z}, {x=(atual.x)+1, y=(atual.y)+1, z=atual.z}, {x=atual.x, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=(atual.y)+1, z=atual.z}, {x=(atual.x)-1, y=atual.y, z=atual.z}, } local chances = math.random(100) if(chances<=porcentagem/8 and getCreatureHealth(cid)<getCreatureMaxHealth(cid)) then doCreatureAddHealth(cid, getCreatureMaxHealth(cid)/quantheal) if(i<=8 and i>1) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, atual, tipoaura) else doSendDistanceShoot({x=posaura[1].x, y=posaura[1].y, z=posaura[1].z}, atual, tipoaura) end doSendMagicEffect(atual, efeitocura) end if(i==8) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, {x=posaura[1].x, y=posaura[1].y, z=posaura[1].z}, tipoaura) elseif(i<8) then doSendDistanceShoot({x=posaura[i].x, y=posaura[i].y, z=posaura[i].z}, {x=posaura[i+1].x, y=posaura[i+1].y, z=posaura[i+1].z}, tipoaura) end if(i<=8 and getPlayerStorageValue(cid, aurastr)==2) then i = i+1 tm = tempo/8 return addEvent(efeitosAura,tm,i,tm,cid) elseif(i>8 and getPlayerStorageValue(cid, aurastr)==2) then return efeitosAura(1,0,cid) else return TRUE end else return TRUE end end -- Função principal function onSay(cid, words, param, channel) if(param=="on") then if getPlayerStorageValue(cid, estr) > os.time() then doPlayerSendCancel(cid, "Espere "..(getPlayerStorageValue(cid, estr) - os.time()).." segundos para poder habilitar aura novamente.") else if(getPlayerStorageValue(cid, aurastr)==2) then doPlayerSendCancel(cid,"Sua aura já está habilitada.") elseif(getPlayerStorageValue(cid, aurastr)==-1) then doPlayerSendCancel(cid,"Aura ligada!") setPlayerStorageValue(cid, aurastr, 2) efeitosAura(1,tempo/8,cid) end end elseif(param=="off") then if(getPlayerStorageValue(cid, aurastr)==2) then setPlayerStorageValue(cid, estr, os.time()+2) setPlayerStorageValue(cid, aurastr, -1) doPlayerSendCancel(cid,"Aura desligada!") end else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Digite '!aura on' para ligar sua aura, e '!aura off' para desligá-la.") end return TRUE end As configurações estão comentadas, portanto é só modificar de acordo com as suas preferências.
Agora, em data\talkactions, abra o arquivos talkactions.xml, e cole isto dentro dele :
<talkaction words="!aura" event="script" value="aura.lua"/> Após feito isso, para evitar erros ao player logar, será necessário criar um script que mudará o storage da aura toda vez que o player se logar novamente, para isso, vá em data\creaturescripts\scripts e crie um arquivo chamado auralogin.lua, e cole isto :
function onLogin(cid) aurastr = 25950 -- storage da aura setPlayerStorageValue(cid, aurastr, -1) return TRUE end Após isto, vá em data\creaturescripts e abra o arquivo creaturescripts.xml, e cole o seguinte código nele :
<event type="login" name="AuraLogin" script="auralogin.lua"/> E pronto! Agora é só desfrutar do sistema.
OBS : Se você der /reload talkactions no OT em execução, com algum player estando com aura em execução, elas serão interrompidas e será necessário usar !aura off, e !aura on, para reabilitá-las. Portanto cuidado!
Créditos : Eu mesmo(Fakezim/BielzinhoCrazy/GMLeal, tanto faz o nick rererere) Obrigado pessoal!