Ir para conteúdo
Entre para seguir isso  
Mililo

Sistema de Waypoint(parecido com DII)

Recommended Posts

Mililo    0
Mililo

Sistema de Waypoint 2.0

 

Tópico já editado com a versão 2.0

1. Introdução

2. Script

3 Configuração

4. Configuração(adicionando um novo waypoint)

5. Configuração(editando talkactions.xml)

6. Instruções de uso

 

1. O que é um sistema de waypoint?

 

Você já jogou Diablo II? Tentei fazer o mais parecido possível, mas pra quem ainda não conhece vou explicar, waypoint, pelo menos nesse caso, é um lugar que você guarda e depois pode se teleportar pra lá na hora que quiser.

E como eu fiz isso pra Otserv?

Simples(pra explica, não pra faze -.-) quando o player falar a palavra:

Waypoint

se ele tiver em cima de alguma coordenada válida como waypoint(você vai escolher quais coordenadas são válidas) o waypoint vai ficar ativado pra sempre, depois disso a qualquer hora ele pode falar:

GO "nome do local

O nome do local é vc quem escolhe, e quando ele ativar o waypoint vai aparecer escrito em uma mensagem.

Há, já tava esquecendo quando ele usa esse último código(GO) pra ir pro waypoint ele gasta uma quantidade de mana que você pode escolher quanto é, coloquei isso pra não ficar muito fácil de usar o waypoint.

 

2. O código

Primeiro vá na pasta do seu OT depois em data\talkactions\scripts copie qualquer arquivo renomeie pra waypoint.lua abra com bloco de notas e apague tudo que tem dentro depois copie e código abaixo e cole nesse arquivo.

--- Diablo II Waypoint System v2.0 100% By Mililo! Thx for Dark and Forger for tutorials ---

function onSay(cid, words, param)

--------------------------- CONFIGURAÇÃO ------------------------------------
local lugares = {[color="Sienna"][b]'Thais', 'Carlin'[/b][/color]}
local coords = { [color="Red"][b]{x=1104,  y=1026, z=7}, {x=1126,y=1043,z=7}[/b][/color] }
local mana = [color="Blue"][b]{50,100}[/b][/color]
local storages = [b][color="Orange"]{2325, 2326}[/color][/b]
exaust = [b][color="SeaGreen"]10[/color][/b]
wait_storage = [b][color="DarkSlateGray"]54321[/color][/b]
----------------------FINAL DA CONFIGURAÇÃO ---------------------------

playerpos = getPlayerPosition(cid)
playermana = getPlayerMana(cid)
playerlife = getPlayerHealth(cid)

------------ PARTE I: Salvar o Waypoint -----------
if words == 'Waypoint' or words == 'waypoint' then
if playerpos.x == coords[1].x and playerpos.y == coords[1].y and playerpos.z == coords[1].z then
n = 1
elseif playerpos.x == coords[2].x and playerpos.y == coords[2].y and playerpos.z == coords[2].z then
n = 2
else
n = 0
end

if n == 0 then
doPlayerSendTextMessage(cid, 21, "You cannot use that function here.") 
else
if playerpos.x == coords[n].x and playerpos.y == coords[n].y and playerpos.z == coords[n].z then
if getPlayerStorageValue(cid, storages[n]) ~= 1 then
doSendMagicEffect(playerpos,13)
doPlayerSendTextMessage(cid, 24, "You saved the waypoint of "..lugares[n]..".") 
setPlayerStorageValue(cid, storages[n], 1)

else 
doPlayerSendTextMessage(cid, 21, "You ever have this waypoint.")
end

else
doPlayerSendTextMessage(cid, 21, "You cannot use that function here.") 
end
end
end

--------------- PARTE 2: Teleportar para o waypoint ------------
if words == 'GO' then
if param == lugares[1] then
n2 = 1
elseif param == lugares[2] then
n2 = 2
else
n2 = 0
end

if  getPlayerStorageValue(cid, wait_storage)  == 0 then

if n2 == 0 then
doPlayerSendTextMessage(cid, 21, "You do not have the waypoint for this area.")
else
if param == lugares[n2] then
if getPlayerStorageValue(cid, storages[n2]) == 1 then
if playermana >= mana[n2] then

doTeleportThing(cid, coords[n2])
doSendMagicEffect(coords[n2],13)
doPlayerAddMana(cid,-mana[n2])
setPlayerStorageValue(cid,wait_storage, 1)
tempo = exaust * 1000
old_life = playerlife 
addEvent(cansaco,tempo,cid)

else
doPlayerSendTextMessage(cid, 21, "You do not have enough mana.")
end

else
doPlayerSendTextMessage(cid, 21, "You do not have the waypoint for this area.")
end
end
end

else 
doPlayerSendTextMessage(cid, 21, "You are exhausted.")
end
end
end


function cansaco(cid)
wait_storage = 54321
setPlayerStorageValue(cid,wait_storage, 0)
end

O código não é tão grande quanto parece é porque tá bastante espaçado.

 

3. Configuração

Vão olhando pro código e acompanhado as cores que vou falar.

 

Marrom - São os nomes dos waypoints, devem estar entre ' ' e separados por vírgula, thais e carlin foram só exemplos não tava usando mapa global pra testar e as coord não são verdadeiras, além disso usei cidades no exemplo mas você pode colocar waypoints em outras áreas como florestas, desertos etc.

 

Vermelho - São as coordenadas x,y e z dos waypoints de acordo com o tabela de cima.

Ex: Os primeiros x,y e z são de thais e os segundos de carlin.

Devem ser colocados neste formato: {x=numero,y=numero,z=numero}

 

Azul - Mana gasta pra teleportar pra cada lugar também é de acordo com as tabelas de cima, se não quiser usar mana simplesmente cooloque "0".

 

Laranja - Cada waypoint usa um storage value(eu tinha tentado fazer de um jeito mais simples usando tabelas, mas não consegui :()

A única coisa que tem que fazer aqui é colocar um número qualquer que não esteja sendo usado como storage por outro script do seu OT.

 

Verde - Tempo de exhaust em segundos.

 

Cinza - Coloque um número qualquer que não esteja sendo usado como storage no seu OT.

 

As configurações acabam aqui e além de configurar de acordo com seu mapa e OT você com certeza deve querer adicionar outros waypoints(3º, 4º etc)

pra tanto é só vc adicionar as terceiras opções nas tabelas que eu mostrei acima e seguir o 4º passo.

 

4. Adicionando um terceiro waypoint

Para adiconar um terceiro waypoint não é difícil, basta copiar as opções do segundo e mudar todos os nº2 para nº3, vou explicar exemplificadamente adiconando um terceiro waypoint chamado "Venore":

Primeiro vamos editar as configurações(linhas 8 a 10), assim:

local lugares = {'Thais', 'Carlin', 'Venore'}
local coords = { {x=1104,  y=1026, z=7}, {x=1126,y=1043,z=7}, {x=708,y=502,z=7}}
local mana = {50,100,150}
local storages = {2325, 2326,2327}

Já expliquei sobre isso tudo acima.

 

 

Agora vamos copiar as linhas 22 e 23 e colar na 24, ou 25 pra dar espaço(aperte Crtl + G pra localizar linha).

Feito isso, substitua todos os nº2 por 3 assim:

elseif playerpos.x == coords[[color="#ff0000"]3[/color]].x and playerpos.y == coords[[color="#ff0000"]3[/color]].y and playerpos.z == coords[[color="#ff0000"]3[/color]].z then
n = [color="Red"]3[/color]

 

Agora copie as linhas 52 e 53 cole na 54 ou 55 e faça o mesmo(substitua todo 2 por 3),ficando assim:

elseif param == lugares[[color="Red"]3[/color]] then
n2 = [color="#ff0000"]3[/color]

E está pronto, simples e rápido, use o mesmo método pra fazer o 4º, 5º, 6º e quantos mais waypoints você quiser! (Y)

 

5. Talkactions.xml

Agora é só abrir o talkactions.xml e colocar isso acima de </talkactions>:

<talkaction words=[color="Blue"]"Waypoint"[/color] script="waypointsystem.lua" />
<talkaction words=[color="#0000ff"]"waypoint"[/color] script="waypointsystem.lua" />
<talkaction words=[color="DarkGreen"]"GO"[/color] script="waypointsystem.lua" />

Palavra a falar pra salvar o waypoint(maisculo e minusculo), caso mude essa palavra, vá no script na linha 19:

if words == [color="#ff0000"]'Waypoint'[/color] or words == [color="#ff0000"]'waypoint'[/color] then

e mude lá também o que está em vermelho.

 

Palavra a falar pra ir ao waypoint, mude no script tb, linha 48

 

6. Usando

Já falei lá no começo como usa mas como agora vcs tem uma idéia melhor de como é o script então vo fla denovo:

1. Ande em cima de algum waypoint e diga waypoint ou outra palavra que você escolheu.

2. Saia de perto desse waypoint e diga GO "nome do waypoint pra voltar pra ele.

 

cya :bye:

Editado por Mililo
Versão 2.0

Compartilhar este post


Link para o post
Dark    3
Dark

*.* eu estou no titulo :P

 

Bem isso não seria um tutorial e sim um download, etnão vou mover para a seção de downloads. Como o tópico esta bem explicado, formatado vou te doar 100 OT$ do meu bolso :)

 

Ps: se quiser ajuda com scripts pode perguntar (Y)

 

Aprovado

Compartilhar este post


Link para o post
Mililo    0
Mililo

WOW

Vlw ae cara, to até emocionado :)

100 OT$ nunk mais passo fome na vida :D

Num sei nem oq dize, axo melho num fla nada senão vo akba exagerando e vai pega mal :P

 

Comentem ae galera, flws

Compartilhar este post


Link para o post
º°kReXt°º    0
º°kReXt°º

ooooww karaa fiko MaSSa

 

vlw meu!

 

botei aki no meu ot qe logo vo lança!!!

 

 

VlWs!

Compartilhar este post


Link para o post
subdark    0
subdark

pow sinceramente ?

 

fiko show por que sei que muitos irao utilizar isso (Y)

 

vo utilizar no meu ot aki

Compartilhar este post


Link para o post
Flay    0
Flay

Ai cara é até legalzinhu mais na verdad sub e outros membros acho que só alguns OTServs vão querer usar e não todos pois eu acho para mim que não iria ser muito legal pois ele poderia fugir de PKs assim....

 

Olha você ta de Parabens mais para mim não será muito ultil mais o Script é bem legal.

Compartilhar este post


Link para o post
Mililo    0
Mililo

Vlw ae pelos comentários e elogios galera tava com medo d ninguém quere ler pq tava mtu grande o tópico.

E esse negócio do PK é verdade msm vo tenta pensar em alguma maneira de prevenir isso já q vcs gostaram do script.

 

 

EDIT URGENTE: Galera akbei de axa um código q eu tinha colocado soh pra testes e eskeci de tirar, o código fica na linha 40 e diz assim:

setPlayerStorageValue(cid, storages[1], 5)

Quem já pego o script apaga esse código.

Quem ainda não pego n tem problema, já tirei do tópico essa linha.

 

Desculpa pelo incomodo,

Flws

Editado por Mililo

Compartilhar este post


Link para o post
Voros    3
Voros

gostei...da pra escapa de pk =D

bem rox mesmo..

aprovadO~

Compartilhar este post


Link para o post
Mililo    0
Mililo

Vlws quem gosto, e uma novidade versão 2.0 saindo quentinha do forno.

Diminui o código e a configuração ta beeeeem mais fácil, tb coloquei exhaust.

Só tem um problema, ainda da pra fugi de PK.

Vo edita o topic principal agora.

 

Quem souber responder minha dúvida:

Como checar se está com battle ativado(pz locked)?

entra no link ae e ajuda plz.

 

Edit: A solução pra fugi de PK que pensei e que sei fazer foi:

 

Depois que for falado GO "nome demora um tempo(configurável por script usando tabelas, ou seja, um tempo diferente pra cada waypoint).

 

Depois que passar esse tempo vai ser checado se a vida do player diminiu(ou seja, se ele tomo uma sd na kabeça).

 

Se tiver diminuido manda uma msg dizendo que vc ta em batalha

 

Se não tiver diminuido teleporta normal

 

Oq vcs axam dessa solução???

Editado por Mililo

Compartilhar este post


Link para o post
Sorc LokoO    0
Sorc LokoO

Aprovado

100%

Compartilhar este post


Link para o post
Nord    2
Nord

Gostei muito útil mesmo, se basear em outros jogos é interessante para se fazer scripts.

A solução para ninguém fugir de PK ou monstro é usar uma checagem no script assim:

if hasCondition(cid, CONDITION_INFIGHT) == FALSE and getPlayerSkullType(cid) == 0 then

 

Isso ali checa se ta sem fight e sem skull.

Acho que quando skullType é 0 quer dizer que ta sem skull.

Editado por Nord

Compartilhar este post


Link para o post
Mililo    0
Mililo

Vlw todos que gostaram e comentaram!

 

E vlw Nord pela ajuda ae, eu tinha perguntado se existia esse código lá na seção de suporte mas ninguem respondeu, vlw msm pelo código, vo colocar no script e testar agora.

 

Edit: Aki não deu certo não cara ta dizendo:

Attemp to call global 'hasCondition' (a nil value)

 

Tem alguma idéia do que pode ser?

Ps: Acontece isso ai tb quanto tento usar a variavel exhaust que eu vejo em outros scripts mas não consigo colocar nos meus.

Editado por Mililo
n deu certo

Compartilhar este post


Link para o post
Machine!    2
Machine!

cara scripte bem feioo ^^

e soh pq eu vi seu apelo no final, falando q abalo seu emocional (muitoo gay issu) e vc em esposa filhos para sustentar ^^ koaokaokaokaok

to indo doa 50 ot$ ^^

Compartilhar este post


Link para o post
Dark    3
Dark

@ Mililo

 

Isso acontece porque seu servidor não tem essa função. Tente usar essa:

 

getCreatureCondition(cid, CONDITION_INFIGHT)

 

(Y)

Compartilhar este post


Link para o post
Mililo    0
Mililo

Nenhum dos dois deu certo =/

Quando eu testo com o GM da aquele erro lá do global(foi burrice minha testa com Gm pq ele é diferente, não entra em battle nunca), mas quando testo com Player não dá erro nenhum mas retorna o código "you are exhausted" que não tem nda a ver com essa parte do script =(

 

Mas vlw pela ajuda ae os dois, axo que o OT que é ruim msm, não aceita função nenhuma.

 

Vlw e flws

Compartilhar este post


Link para o post
Nord    2
Nord

Vo da uma explicadinha sobre o seu erro:

CONDITION_NONE = 0
CONDITION_POISON = 1
CONDITION_FIRE = 2
CONDITION_ENERGY = 4
CONDITION_LIFEDRAIN = 8
CONDITION_HASTE = 16
CONDITION_PARALYZE = 32
CONDITION_OUTFIT = 64
CONDITION_INVISIBLE = 128
CONDITION_LIGHT = 256
CONDITION_MANASHIELD = 512
[b][color="Blue"]CONDITION_INFIGHT[/color][/b] = [color="Red"]1024[/color]
CONDITION_DRUNK = 2048
CONDITION_EXHAUST_WEAPON = 4096
CONDITION_FOOD = 8192
CONDITION_REGENERATION = 8192
CONDITION_SOUL = 16384
CONDITION_DROWN = 32768
CONDITION_MUTED = 65536
CONDITION_TRADETICKS = 131072
CONDITION_YELLTICKS = 262144
CONDITION_ATTRIBUTES = 524288
CONDITION_FREEZING = 1048576
CONDITION_DAZZLED = 2097152
CONDITION_CURSED = 4194304
CONDITION_EXHAUST_COMBAT = 8388608
CONDITION_EXHAUST_HEAL = 16777216

 

Dependendo de cada ot esse 1024 é uma condition diferente, no caso do meu é para o fight e no seu é para o exhausted, o que você pode tentar é ver qual variável em seu global.lua é parecida com alguma coisa de fight que provavelmente terá número diferente.

Compartilhar este post


Link para o post
Mililo    0
Mililo

Não kra não é isso não pq o meu global.lua ja tinha lá o 1024 pra fight e eu já testei isso do exausht, na verdade o "you are exhausted" que ele retorna é oq tá no meu script c eu mudar pra "you are dead" por exemplo, ele fala "you are dead", eu testei isso ontem.

Eu não consigo entender pq ta retornando esse exhausted, pq eu to colocando o código na linha certa tudo certo e esse exhaust não tem nada ver com essa parte do código.

Isso ta bem confuso :errm:

 

Mas eu axo que é o Otserv(Thyrania 0.2.81 XML) msm que não aceita essa função. Depois eu tento num OT sql, só que não sei mexer com sql ainda :(

 

De qualquer forma vlw por tenta ajudar.

Flws

Compartilhar este post


Link para o post
sky000    0
sky000

Gostei , o problema é bota no OT , pra quem não entende nada de script , Muahahahahaha ;)

 

Vlw

 

Sky000

Compartilhar este post


Link para o post
HeberPcL    3
HeberPcL

Muito criativo

 

Parabens !

Compartilhar este post


Link para o post
Asould Acalaylaa    5
Asould Acalaylaa

Wooow, perfeito isso. Muito bom ter se baseado no Diablo2 pra fazer esse script. Muito bom mesmo :)

Nao achei nenhum BUG! ^^

Quanto tempo pra fazer ele? :)

Compartilhar este post


Link para o post
Entre para seguir isso  
  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×