Ir para conteúdo

Tutorial: Área De Treino Segura.


Addict

Posts Recomendados

Olá, irei mostrar aqui uma forma de fazer uma área de treino segura para os players, usando o map editor (sério!?) e scripts. O tutorial está longo mais por causa da explicação dos scripts, quem já sabe configurar isso é só olhar a idéia mesmo.

 

Como assim "segura"?

Sabe quando você quer treinar em paz, mas vem um PK, vê que você está AFK e te mata? Pois é, com essa minha idéia você nunca mais terá esse problema!

 

Sem mais delongas, vamos começar.

 

Primeio, faça a área no map editor da seguinte forma:

(use o estilo que quiser)

 

1170641628imagem1.png

 

Indicado com as flechas retas, está o destino dos teleports.

A janela se destaca por estar FECHADA, pois assim não tem como atirar runas ou bolts.

Ao usar a alavanca, a grade aparecerá, bloqueando a entrada no bloco de treino.

 

Scripts:

(nesse script fiz como se houvesse apenas 2 blocos a ser fechados)

 

Crie um arquivo .lua com o nome desejado na sua pasta data/actions/scripts (usarei o nome "levers_trainareas.lua")

 

function onUse(cid, item, frompos, item2, topos) 

  wall1 = {x=115, y=30, z=7, stackpos=1} 
  wall2 = {x=118, y=30, z=7, stackpos=1} 

  getwall1 = getThingfromPos(wall1) 
  getwall2 = getThingfromPos(wall2) 

--bloco 1 
  if item.uid == 8005 and item.itemid == 1945 and getwall5.itemid == 0 and getwall5.itemid == 0 then 
     doCreateItem(1547,1,wall5) 
     doTransformItem(item.uid,item.itemid+1) 
  elseif item.uid == 8005 and item.itemid == 1946 and getwall5.itemid == 1547 and getwall5.itemid == 1547 then 
     doRemoveItem(getwall5.uid,1) 
     doTransformItem(item.uid,item.itemid-1)      

--bloco 2 
  elseif item.uid == 8006 and item.itemid == 1945 and getwall6.itemid == 0 and getwall6.itemid == 0 then 
     doCreateItem(1547,1,wall6) 
     doTransformItem(item.uid,item.itemid+1) 
  elseif item.uid == 8006 and item.itemid == 1946 and getwall6.itemid == 1547 and getwall6.itemid == 1547 then 
     doRemoveItem(getwall6.uid,1) 
     doTransformItem(item.uid,item.itemid-1)    

  else 
     doPlayerSendCancel(cid,"Algo esta bloqueando a grade.") 
  end 

  return 1 
end

 

Entendendo o código:

 

wall1 = {x=115, y=30, z=7, stackpos=1} 
  wall2 = {x=118, y=30, z=7, stackpos=1}

 

Cada "wall" representa uma grade.

No bloco número 1 a grade será wall1, e no bloco 2 será wall2.

No x, y e z que aparecem você deve colocar as coordenadas do lugar onde aparecerá a GRADE de cada bloco.

 

getwall1 = getThingfromPos(wall1) 
  getwall2 = getThingfromPos(wall2)

 

Para cada wall você deverá colocar um getwall, que irá pegar a coordenada do wall descrito

para a wall1 temos o getwall1, veja: getwall1 = getThingfromPos(wall1)

 

if item.uid == 8001 and item.itemid == 1945 and getwall1.itemid == 0 and getwall1.itemid == 0 then 
     doCreateItem(1547,1,wall1) 
     doTransformItem(item.uid,item.itemid+1) 
  elseif item.uid == 8001 and item.itemid == 1946 and getwall1.itemid == 1547 and getwall1.itemid == 1547 then 
     doRemoveItem(getwall1.uid,1) 
     doTransformItem(item.uid,item.itemid-1)

 

Aqui iniciamos os comandos para criação da grade, e também para tirá-la quando a alavanca for ativada.

 

if item.uid == 8001

Quando aparecer isso, no lugar de 8001 você deve colocar o UniqueID da alavanca do bloco (nesse caso seria o bloco 1).

 

and getwall1.itemid == 0 and getwall1.itemid == 0 then

Aqui você deve trocar o numero do getwall pelo correspondente do bloco, nesse caso é o 1 mesmo.

Nesse código, você diz que no lugar onde aparecerá a grade nao deve ter nenhum item, por isso o id "0", ou seja, nada.

 

doCreateItem(1547,1,wall1)

Cria a grade de ID 1547, na posição wall1 (óbviamente você não é obrigado a usar essa grade, você pode usar qualquer parede, apenas troque o ID).

 

getwall1.itemid == 1547 and getwall1.itemid == 1547 then

Siginifica que para retirar a grade, no sqm que ela está deve estar apenas a grade (ID 1547). Note que se você usar outra parede, você deverá substituir esse ID pelo o da parede usada.

 

doRemoveItem(getwall1.uid,1)

Remove a grade da posição getwall1.

 

else 
     doPlayerSendCancel(cid,"Algo esta bloqueando a grade.") 
  end 

  return 1 
end

 

Aqui, indicamos a mensagem que será enviada ao player caso algum item esteja no lugar de onde deve aparecer a grade. Você pode escrever qualquer coisa, desde que esteje dentro das aspas, e lembre-se de não colocar acentos ou cedilha.

 

A cada grade você deverá criar um wall, um getwall para o wall, e um script inteiro como esse;

 

elseif item.uid == 8002 and item.itemid == 1945 and getwall2.itemid == 0 and getwall2.itemid == 0 then 
     doCreateItem(1547,1,wall2) 
     doTransformItem(item.uid,item.itemid+1) 
  elseif item.uid == 8002 and item.itemid == 1946 and getwall2.itemid == 1547 and getwall2.itemid == 1547 then 
     doRemoveItem(getwall2.uid,1) 
     doTransformItem(item.uid,item.itemid-1)

 

onde você deverá editar os números para que ocorra tudo certo.

 

elseif item.uid == 8002 and item.itemid == 1945 and getwall2.itemid == 0 and getwall2.itemid == 0 then

 

VEJA QUE ADICIONAMOS "else" JUNTO AO "if" QUANDO ESSE NÃO FOR O PRIMEIRO BLOCO! APENAS O PRIMEIRO BLOCO DEVE COMEÇAR COM "if"!

 

Agora em data/actions/actions.xml, insira:

 

<action uniqueid="8001" script="levers_trainarea.lua" />

 

Note que para cada alavanca você deve botar uma linha igual essa com o UniqueID da alavanca. Se tivéssemos 3 alavancas seria assim (note a mudança dos UniqueIDs):

 

<action uniqueid="8001" script="levers_trainarea.lua" />

<action uniqueid="8002" script="levers_trainarea.lua" />

<action uniqueid="8003" script="levers_trainarea.lua" />

 

 

 

Assim, o player entra no bloquinho com a alavanca, aciona ela e fecha seu bloco, teleporta-se para os montros e treina em paz sem perigo de ser atacado.

 

Lembre-se que se a parede for vertical, você deverá usar o id da grade (ou parede escolhida) na posição vertical, no caso da grade, seria ID 1546.

 

Créditos: Ajcmaster

Link para o comentário
Compartilhar em outros sites

A tuto é bom, mas o problema é quando espertinhos usarem a alavanca e sairem logo após isso.

é Preferível deixar uma PZ por toda a área, menos na área onde é pra ser atacado e na área onde é pra atacar(trainers).

Link para o comentário
Compartilhar em outros sites

Mtu bom embora eu preferisse assim

Trainter -Fogo -pared

Alavanka -Player -vaziu(transformado em parede)

Trainer -Fogo -pared

 

Quando o player entrasse nos trainer ele ativaria uma alavanka.quando ativada a parte "vaziu"entre as 2 paredes criaria uma parede.impossibilitando de alguem entrar.Quando o player kizesse sair ele apertava a alanvanka e a parede desaparecia novamente.

dece seu jeito acontecera oque o rafix falou:

 

entra uma pessoa no cubinho e fexa a porta e sem seguida da logout.

do meu jeito isso nao acontece porque quando o player fexa a porta.os trainers atkam ele e o batle nao deixa o kra sair.se o kra kiser sair tera que abrir a porta e ir para um local protegido.

Link para o comentário
Compartilhar em outros sites

SIm .. eh bom .. mas concordo com o rafix .. se o kra puxa a alavanca e sai ?

Ai vai te q fik chamando o gm ... Mas ta bom .. tpw .. ning nunca me pko quando eu tava treinado .. dai eu n sabia disso ... agr to alert ^^ !

Editado por Tyler
Link para o comentário
Compartilhar em outros sites

  • 5 months later...
  • 2 months later...
  • 5 months later...
  • 3 months later...

Otima idea...mas o cara vai no trainer depois de 15 minutos e kick e o GOD afk e a grade fica sem ninguem ou se o cara fexa a grade e logar como citou o cara acima ai...

 

Mas adorei seu tuto eu tava procurando isso ae mas pra usar em outra coisa vlwwww

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...