Mililo 0 #1 Postado 16 Julho, 2008 (editado) 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 Editado 16 Março, 2009 por Mililo Versão 2.0 Compartilhar este post Link para o post
Dark 3 #2 Postado 17 Julho, 2008 *.* eu estou no titulo 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 #3 Postado 17 Julho, 2008 WOW Vlw ae cara, to até emocionado 100 OT$ nunk mais passo fome na vida Num sei nem oq dize, axo melho num fla nada senão vo akba exagerando e vai pega mal Comentem ae galera, flws Compartilhar este post Link para o post
º°kReXt°º 0 #4 Postado 17 Julho, 2008 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 #5 Postado 17 Julho, 2008 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 #6 Postado 18 Julho, 2008 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 #7 Postado 18 Julho, 2008 (editado) 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 18 Julho, 2008 por Mililo Compartilhar este post Link para o post
Voros 3 #8 Postado 18 Julho, 2008 gostei...da pra escapa de pk =D bem rox mesmo.. aprovadO~ Compartilhar este post Link para o post
Mililo 0 #9 Postado 18 Julho, 2008 (editado) 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 18 Julho, 2008 por Mililo Compartilhar este post Link para o post
Nord 2 #11 Postado 20 Julho, 2008 (editado) 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 20 Julho, 2008 por Nord Compartilhar este post Link para o post
Mililo 0 #12 Postado 20 Julho, 2008 (editado) 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 20 Julho, 2008 por Mililo n deu certo Compartilhar este post Link para o post
Machine! 2 #13 Postado 21 Julho, 2008 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 #14 Postado 21 Julho, 2008 @ 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 #15 Postado 22 Julho, 2008 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 #16 Postado 22 Julho, 2008 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 #17 Postado 22 Julho, 2008 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 #18 Postado 22 Julho, 2008 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 #19 Postado 24 Julho, 2008 Muito criativo Parabens ! Compartilhar este post Link para o post
Asould Acalaylaa 5 #20 Postado 2 Agosto, 2008 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