Ir para conteúdo
Entre para seguir isso  
Magus

Summon Portal "City

Recommended Posts

Magus    2
Magus

Summon Portal "City

Invoque um portal e nunca se perca!

 

pimgap0.png

 

 

Olá,

Este script tem a intenção de agir como uma spell (magia) do servidor, mas como eu fiz ele por TalkActions, postei nesta seção.

 

Requerimentos

Nota: Não é necessário um servidor que possua a função doCreateTeleport(), portanto funciona em qualquer um com SVNs mais antigas (Evolutions, por exemplo).

 

Função

Ao ser usado, primeiramente, ele verifica se o jogador pode utilizar a magia (vocação), se tem nível e mana suficiente, se os parâmetros foram dados corretamente e se nenhum outro portal está aberto. Depois, um efeito da criação do portal aparecerá, este efeito dura 5 segundos (padrão) e após isto o portal é finalmente criado, na frente do personagem. Todos podem entrar no portal, porém, ele é automaticamente fechado dentro de 10 segundos (isto pode ser mudado).

Você também pode, com outro comando, salvar uma posição, para depois utilizar um portal para te levar a este local, útil para salvar locais de caças etc, quando você precisa voltar para a cidade ou quando morre.

Nota: somente dá para salvar posições em campos abertos (posição Z = 7).

 

Digamos que, é praticamente a mesma função da magia Portal do jogo Ragnarök (fiz baseado nela mesmo) dos sacerdotes.

 

Script

O script utiliza TalkActions e Movements, porém, é mais simples do que vocês imaginam.

 

TalkActions:

summonportal.lua

function onSay(cid, words, param)
city = {"Save", "Venore", "Carlin", "Thais"} -- Cidades disponíveis para teleporte (save = ponto salvo; não mude).
popen = 5 --Tempo para o portal abrir (em segundos).
ptime = 10 -- Tempo para o portal fechar (em segundos).
pvoc = {1,2,5,6} --Ids das vocações que podem invocar portais (altere de acordo com os padrões dados).
plevel = 20 --Nível mínimo necessário para poder invocar portais.
pmana = 300 --Mana necessária para poder invocar portais.
-- Função isStrInArray() e setTimer() por Colex - OTScriptLIB.

if (words == "Save Portal") then
ppos = getPlayerPosition(cid)
if (not isStrInArray(getPlayerVocation(cid), pvoc) or getPlayerLevel(cid) < plevel) then doPlayerSendCancel(cid,"Sorry, only mages above level "..plevel.." can set portal points.")
elseif (ppos.z ~= 7) then doPlayerSendCancel(cid,"Sorry, you can not point a portal to this position.")
elseif (getTilePzInfo(ppos) == 1) then doPlayerSendCancel(cid,"Sorry, you can not point a portal to a protected position.")
else
setPlayerStorageValue(cid, 7889, ppos.x)
setPlayerStorageValue(cid, 7890, ppos.y)
setPlayerStorageValue(cid, 7891, ppos.z)
doPlayerSendCancel(cid, "Position saved. You can summon a portal to this position at any time.")
end
elseif (words == "Summon Portal") then
if (not isStrInArray(getPlayerVocation(cid), pvoc) or getPlayerLevel(cid) < plevel) then doPlayerSendCancel(cid,"Sorry, only mages above level "..plevel.." can use this magic.")
elseif (getPlayerMana(cid) < pmana) then doPlayerSendCancel(cid,"You do not have enough mana.")
elseif (param == '') then str = "Disponible Places: " for i = 1,#city do if (i == #city) then str = str..city[i].."." else str = str..city[i]..", " end end doPlayerSendCancel(cid,str)
elseif (not isStrInArray(param, city)) then doPlayerSendCancel(cid,"This place does not exists or it can not be accessed by a portal.")
elseif (checkevent ~= nil) then doPlayerSendCancel(cid,"You have to wait until a other portal is closed to summon another one.")
else
ppos = getPlayerPosition(cid)
if (getPlayerLookDir(cid) == 0) then teleportPos = {x = ppos.x, y = ppos.y-1, z = ppos.z, stackpos = 1}
elseif (getPlayerLookDir(cid) == 1) then teleportPos = {x = ppos.x+1, y = ppos.y, z = ppos.z, stackpos = 1}
elseif (getPlayerLookDir(cid) == 2) then teleportPos = {x = ppos.x, y = ppos.y+1, z = ppos.z, stackpos = 1}
elseif (getPlayerLookDir(cid) == 3) then teleportPos = {x = ppos.x-1, y = ppos.y, z = ppos.z, stackpos = 1} end
if (getThingfromPos(teleportPos).uid == 0) then
stopevent = nil
doPlayerSay(cid,"Portal !!",1)
doPlayerAddMana(cid,-pmana)
doSendMagicEffect(ppos, 13)
funceffect = function() doSendMagicEffect(teleportPos, 31) end
effectevent = setTimer("funceffect", 400, {teleportPos})
checkevent = addEvent(function() enableTimer(effectevent, false) tuid = doCreateItem(1387, 1, teleportPos) if (param == city[1]) then if (getPlayerStorageValue(cid,7889)) then setGlobalStorageValue(9889, cid) doSetItemActionId(tuid,7889) else doPlayerSendCancel(cid, "You do not have any saved position to point a portal.") end elseif (param == city[2]) then doSetItemActionId(tuid,7890) elseif (param == city[3]) then doSetItemActionId(tuid,7891) elseif (param == city[4]) then doSetItemActionId(tuid,7892) end addEvent(function() doRemoveItem(getThingfromPos(teleportPos).uid,1) checkevent = nil end, (ptime*1000), {teleportPos}) end, (popen*1000), {teleportPos, cid, city})
else
doPlayerSendCancel(cid, "You can not summon a portal here.")
end
end
end
end

talkactions.xml

<talkaction words="Summon Portal" script="summonportal.lua" />
<talkaction words="Save Portal" script="summonportal.lua" />

Movements:

summonportal.lua

function onStepIn(cid, item, pos)
if (item.actionid == 7889) then
tuid = getGlobalStorageValue(9889)
topos = {x = getPlayerStorageValue(tuid,7889), y = getPlayerStorageValue(tuid,7890), z = getPlayerStorageValue(tuid,7891)}
doTeleportThing(cid, topos)
doSendMagicEffect(topos,10)
elseif (item.actionid == 7890) then --Venore
topos = {x = 1000, y = 1000, z = 7}
doTeleportThing(cid, topos)
doSendMagicEffect(topos,10)
elseif (item.actionid == 7891) then --Carlin
topos = {x = 1000, y = 1000, z = 8}
doTeleportThing(cid, topos)
doSendMagicEffect(topos,10)
elseif (item.actionid == 7892) then --Thais
topos = {x = 987, y = 1006, z = 8}
doTeleportThing(cid, topos)
doSendMagicEffect(topos,10)
end
end

movements.xml

<movevent event="StepIn" actionid="7889" script="summonportal.lua" />
<movevent event="StepIn" actionid="7890" script="summonportal.lua" />
<movevent event="StepIn" actionid="7891" script="summonportal.lua" />
<movevent event="StepIn" actionid="7892" script="summonportal.lua" />

Como usar

Primeiro de tudo, não se esqueça de entrar no tópico do OTScriptLIB, baixá-lo e adicioná-lo ao seu servidor.

Após isto, abra o arquivo summonglobal.lua (TalkAction) e edite as variáveis com comentários como desejar. A variável city serve somente para você colocar o nome de suas cidades, que serão os parâmetros usados para invocar o portal. Se no seu servidor tem mais cidades, adicione o nome dela na variável city, e também mais uma linha desta:

elseif (param == city[4]) then doSetItemActionId(tuid,7893)

Somando mais um número na função doSetItemActionId() e seguindo os padrões da linguagem.

 

Para editar as coordenadas que seus jogadores serão teleportados ao pisar no portal, abra o arquivo summonglobal.lua (Movement) e edite as variáveis topos de cada if. Cada actionid é representada por umas das cidades encontradas no outro arquivo. Se você adicionou mais uma cidade, também adicione mais umas linhas neste arquivo, somando mais um número no item.actionid e seguindo os padrões da linguagem:

elseif (item.actionid == 7893) then
topos = {x = 987, y = 1006, z = 8}
doTeleportThing(cid, topos)
doSendMagicEffect(topos,10)

É bem simples, se você seguir os passos dados corretamente não tem como errar.

 

Comandos

  • Summon Portal - Informa todos os locais disponíveis para a criação de um portal.
  • Save Portal - Salva suas coordenadas atuais, para serem usadas no invocamento de um portal específico.
  • Summon Portal "Save - Invoca um portal para teleportá-lo até seu ponto de portal, coordenadas geradas pelo "Save Portal".
  • Summon Portal "City - Invoca um portal para as demais localidades disponíveis; cada parâmetro especificado apontará para localidades diferentes.

Outros

Erros consertados:
  • Erro no invocamento de portal do ponto de portal (obrigado, [ B a l i l l o ]);
  • Agora, pontos de portal só podem ser salvos em locais abertos (posição Z = 7) (obrigado, samuelcaires);
  • Pontos de portal não podem ser salvos em zonas protegidas (obrigado, wofalas todua).

Nada mais a adicionar. Se você tem dúvidas, sugestões, ou encontrou algum erro, poste aqui. Também não posso garantir que o inglês usado no script esteja 100% correto! :P

 

Abraços! ;]

Compartilhar este post


Link para o post
Liqnkr    0
Liqnkr

Ae Magus, sempre inovando, fazendo bastente scripts agora né!

 

Parabéns!

Compartilhar este post


Link para o post
Bill Scoito    0
Bill Scoito

EXELENTEEEEE VLWW MESMOO KARAA

 

pARABENS PELO ESFORÇO ¹²³

Compartilhar este post


Link para o post
the kina    0
the kina

bOua=]

 

complicado de faze esse... mtoo bom ! ³³³...

 

(Y)parabéns(Y)

Compartilhar este post


Link para o post
demonlight    0
demonlight

Ficou mto bom, porém nunca utilizaria no meu ot....

Pq o cara cria instantaneamente (certo?), se tivesse um intervalo para criar o portal (tipo lineage 2) em q após ter falado as palavras mágicas, o tp demorasse uns 10 segundos para aparecer, Aí sim ficaria rox xP

Compartilhar este post


Link para o post
AaRoN    13
AaRoN

Muito Bom minha Ekipe DobraOT Fica Mais Melhor

Mas So Quero Saber Se Vocé Tem Como Me Ajuda A Botar Meu Client De Tibia Para 8.1 Lhe Do OTS$ Se Vocé Ou Seus Amigos Me Ajudarem Ok Duvidas Add Ai

Skype: Esnio12

MSN:[email protected]

Compartilhar este post


Link para o post
emperorchaos    0
emperorchaos

paresce ser muito bom mais nem rola por isso no ot =/ senao toda hora a cambada foge dos pk e da pk e foge =/

Compartilhar este post


Link para o post
AaRoN    13
AaRoN

No Meu Ot Nao Presto Da Erro No Global Pode Me Ajuda Ou Me Manda O Global Sem Ser Pelo Rapdshare Meu Skype Esnio12

MSN ESTOU DESATIVADO NAO POSO ENTRA NO MSN OU PORFAVOU POSTE PELO BADONGO OU PELO SENDSPACE

PQ O GLOBAL AKI DA ERRO O dofile('OTScriptLIB.lib') EU BOTO DA 1 ERO NAS SPELS EM TUDO PODE ME AJUDA OK

Compartilhar este post


Link para o post
Magus    2
Magus

demonlight, tem como fazer assim, aliás, é uma ótima idéia. Fiz ela e editei o tópico, agora tem o tempo para o portal aparecer e o tempo para sumir. ;]

 

emperorchaos, se acha que prejudicaria? Seilá, o portal fica aberto por 10 segundos (padrão), então se alguém criá-lo, o PK pode simplesmente segui-lo através do portal, além de que agora eu implantei a idéia do demonlight, que é para o portal aparecer dentro de determinado tempo. :P

 

esnio12, coloque o dofile() na primeira linha do global.lua e reinicie o OT, não tem como errar. O OTScript.LIB tem que ficar na mesma pasta do executável (exe).

 

Abraços e, obrigado pelas sugestões.

Compartilhar este post


Link para o post
Sir fanton    0
Sir fanton

bem legal mesmo a action parabens!!

Compartilhar este post


Link para o post
AaRoN    13
AaRoN

Cara Butei Mas Agora Fika Em Weapons loading....

direto

Compartilhar este post


Link para o post
'- Drugs.    0
'- Drugs.

esnio12 lol... testei aqui e funcionou perfeitamente... tanto o script do magus quanto a lib do colex... aonde você editou? mostra seu global.lua com a tag [ code ] (sem espaços) daí nois ve... (acho que pode).. se for mto grande se põe no rapidshare!

Também fala o erro que aparece no console...

 

Mas ta mto rox a action!

Compartilhar este post


Link para o post
AaRoN    13
AaRoN

dofile(OTScript)

TRUE = 1

FALSE = 0

 

LUA_ERROR = -1

LUA_NO_ERROR = 0

 

NORTH = 0

EAST = 1

SOUTH = 2

WEST = 3

SOUTHWEST = 4

SOUTHEAST = 5

NORTHWEST = 6

NORTHEAST = 7

Compartilhar este post


Link para o post
AaRoN    13
AaRoN

cara disisto disso vc n bota pra baixa aki so ta dando erro so mais acha outra coisa

isso e complicado pra caramba

Compartilhar este post


Link para o post
Black Dragon    0
Black Dragon

O.o

 

Perfeito! Sem duvida! Só que acha que traria um pequeno desequilibrio em relação aos otservers.

 

Dica: COloque para enquanto o player "invoca" o portal ele não poder se mecher. (Se já não fez isto)

Compartilhar este post


Link para o post
Magus    2
Magus

esnio12... faltou a extensão né?

dofile('OTScript.lib')

 

Black Dragon, não, não fiz isto... a função mayNotMove() é mais avançada que as outras, eu quis fazer o script para funcioná-lo corretamente em servidor com SVNs mais antigas, como Evolutions e YurOTS.

 

Mas, se alguém quiser fazer isto, é só adicionar a função antes da variável funceffect.

Compartilhar este post


Link para o post
AaRoN    13
AaRoN

Cara quando boto o .lib da erro em tudo spels tudo em tudo msm cara n tem jeito po

Compartilhar este post


Link para o post
9166858    0
9166858

NUssa!! valeuuu!

Compartilhar este post


Link para o post
AaRoN    13
AaRoN

cara so e eu buta qual quer coisa tipo o ' que voce mandou e o . tambem da erro po manda pelo menos a 1 parte do seu global.lua pq aki n da serto coisa nenhuma

Compartilhar este post


Link para o post
Black Dragon    0
Black Dragon

Sò pra esclarecer uma duvida pois não entendo nada de scripting.

 

Para deixar com que o player não possa se mover eu coloco o script do seguinte modo?:

 

function onSay(cid, words, param)

city = {"Save", "Venore", "Carlin", "Thais"} -- Cidades disponíveis para teleporte (save = ponto salvo; não mude).

popen = 5 --Tempo para o portal abrir (em segundos).

ptime = 10 -- Tempo para o portal fechar (em segundos).

pvoc = {1,2,5,6} --Ids das vocações que podem invocar portais (altere de acordo com os padrões dados).

plevel = 20 --Nível mínimo necessário para poder invocar portais.

pmana = 300 --Mana necessária para poder invocar portais.

-- Função isStrInArray() e setTimer() por Colex - OTScriptLIB.

 

if (words == "Save Portal") then

if (not isStrInArray(getPlayerVocation(cid), pvoc) or getPlayerLevel(cid) < plevel) then doPlayerSendCancel(cid,"Sorry, only mages above level "..plevel.." can set portal points.") end

ppos = getPlayerPosition(cid)

setPlayerStorageValue(cid, 7889, ppos.x)

setPlayerStorageValue(cid, 7890, ppos.y)

setPlayerStorageValue(cid, 7891, ppos.z)

doPlayerSendCancel(cid, "Position saved. You can summon a portal to this position at any time.")

elseif (words == "Summon Portal") then

if (not isStrInArray(getPlayerVocation(cid), {1,2,5,6}) or getPlayerLevel(cid) < plevel) then doPlayerSendCancel(cid,"Sorry, only mages above level "..plevel.." can use this magic.")

elseif (getPlayerMana(cid) < pmana) then doPlayerSendCancel(cid,"You do not have enough mana.")

elseif (param == '') then str = "Disponible Places: " for i = 1,#city do if (i == #city) then str = str..city.."." else str = str..city..", " end end doPlayerSendCancel(cid,str)

elseif (not isStrInArray(param, city)) then doPlayerSendCancel(cid,"This place does not exists or it can not be accessed by a portal.")

elseif (checkevent ~= nil) then doPlayerSendCancel(cid,"You have to wait until a other portal is closed to summon another one.")

else

ppos = getPlayerPosition(cid)

if (getPlayerLookDir(cid) == 0) then teleportPos = {x = ppos.x, y = ppos.y-1, z = ppos.z, stackpos = 1}

elseif (getPlayerLookDir(cid) == 1) then teleportPos = {x = ppos.x+1, y = ppos.y, z = ppos.z, stackpos = 1}

elseif (getPlayerLookDir(cid) == 2) then teleportPos = {x = ppos.x, y = ppos.y+1, z = ppos.z, stackpos = 1}

elseif (getPlayerLookDir(cid) == 3) then teleportPos = {x = ppos.x-1, y = ppos.y, z = ppos.z, stackpos = 1} end

if (getThingfromPos(teleportPos).uid == 0) then

stopevent = nil

doPlayerSay(cid,"Portal !!",1)

doPlayerAddMana(cid,-pmana)

doSendMagicEffect(ppos, 13)

mayNotMove()

funceffect = function() doSendMagicEffect(teleportPos, 31) end

effectevent = setTimer("funceffect", 400, {teleportPos})

checkevent = addEvent(function() enableTimer(effectevent, false) tuid = doCreateItem(1387, 1, teleportPos) if (param == city[1]) then if (getPlayerStorageValue(cid,7889)) then doSetItemActionId(tuid,7889) else doPlayerSendCancel(cid, "You do not have any saved position to point a portal.") end elseif (param == city[2]) then doSetItemActionId(tuid,7890) elseif (param == city[3]) then doSetItemActionId(tuid,7891) elseif (param == city[4]) then doSetItemActionId(tuid,7892) end addEvent(function() doRemoveItem(getThingfromPos(teleportPos).uid,1) checkevent = nil end, (ptime*1000), {teleportPos}) end, (popen*1000), {teleportPos, cid, city})

else

doPlayerSendCancel(cid, "You can not summon a portal here.")

end

end

end

end

 

Ps: Em que servidor funcionaria com a tal função?

Ps²: Funciona em 8.1?

Compartilhar este post


Link para o post
Visitante
Este tópico está impedido de receber novos posts.
Entre para seguir isso  
  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×