Ir para conteúdo
Entre para seguir isso  
Tio Gordo

Portas de GUILD

Recommended Posts

Tio Gordo    8
Tio Gordo

Neste breve tutorial estarei explicando como criar uma porta que só pode ser abertas por membros da guilds definidas.

Sem mais, vamos começar.

 

~ Explicação Geral:

Bem galera, o código funciona da seguinte forma:

Adicionaremos um actionID à uma porta qualquer, utilizaremos como exemplo o valor 5788.

Feito isso checaremos se um player é membro de tal guild pelo "guildid".

~ Código

 

function onUse(cid, item, fromPosition, itemEx, toPosition)

local guildId = getPlayerGuildId(cid)

if guildId == 10 then

local cidPosition = getCreaturePosition(cid)

if cidPosition.x < toPosition.x then

doTeleportThing(cid, {x=1002,y=1036,z=5}, TRUE)

doCreatureSay(cid, "Welcome Guildmember!", TALKTYPE_ORANGE_1)

else

doTeleportThing(cid, {x=toPosition.x-1,y=toPosition.y,z=toPosition.z}, TRUE)

doCreatureSay(cid, "Welcome Guildmember!", TALKTYPE_ORANGE_1)

end

return TRUE

else

doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Sorry, but you're not in this guild.")

return TRUE

end

return FALSE

end

 

~ Explicação Específica:

local guildId = getPlayerGuildId(cid)

Obtém o valor da guildID

 

if guildId == 10 then

Este é o valor definido da GuildID, pode ser alterado conforme for o valor do GuildID que você desejar.

 

local cidPosition = getCreaturePosition(cid)

Devemos analisar a posição do jogador por causa do "teleport" que o player sofrerá ao abrir a porta.

 

doTeleportThing(cid, {x=1002,y=1036,z=5}, TRUE)

Coordenadas para as quais o jogador deverá ser teletransportado.

 

doCreatureSay(cid, "Welcome Guildmember!", TALKTYPE_ORANGE_1)

Mensagem exibida quando o jogador passar pela porta.

 

doTeleportThing(cid, {x=toPosition.x-1,y=toPosition.y,z=toPosition.z}, TRUE)

Posição que o jogador será transportado caso não seja um membro da Guild.

OBS.: Verifique a posição da porta. No caso, jogamos o player 1 SQM para a direita, isso que dizer que a porta está na vertical e a entrada é para a direita.

Caso a porta esteja na horizontal e o player tenha que andar para frente para entrar na porta coloque:

doTeleportThing(cid, {x=toPosition.x,y=toPosition.y+1,z=toPosition.z}, TRUE)

Caso a porta esteja na horizontal e o player tenha que andar para trás para entrar na porta coloque:

doTeleportThing(cid, {x=toPosition.x,y=toPosition.y-1,z=toPosition.z}, TRUE)

Caso a porta esteja na vertical e o player tenha que andar para a esquerda para entrar na porta coloque:

doTeleportThing(cid, {x=toPosition.x+1,y=toPosition.y+1,z=toPosition.z}, TRUE)

Continuando:

doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Sorry, but you're not in this guild.")

Mensagem que será exibida se o player não for membro da guild.

 

~ Configurando Actions:

Vá à pasta data/actions e abra o arquivo actions.xml;

Adicione a seguinte Tag:

 

[left][color=#007700][font=monospace]<[/font][/color][color=#0000BB][font=monospace]action actionid[/font][/color][color=#007700][font=monospace]=[/font][/color][color=#DD0000][font=monospace]"5788" [/font][/color][color=#0000BB][font=monospace]script[/font][/color][color=#007700][font=monospace]=[/font][/color][color=#DD0000][font=monospace]"other/guild door.lua" [/font][/color][color=#007700][font=monospace]/>  [/font][/color][/left]

 

Não esqueça de colocar o actionID = 5788 na porta no MapEditor e não esqueça de salvar o script como "guild door.lua".

 

Bem, é isso galerinha, ai está um script que pode ser interessante em alguns OTServers.

Créditos para Chaosaz e para mim que adicionei algumas tags no código, explicações e tradução.

 

P.S.: Gostaria de lembrar que no momento do teleport por coordenadas, podemos também utilizar a sintaxe

doTeleportThing(cid, {x=toPosition.x,y=toPosition.y-1,z=toPosition.z}, TRUE)

Para fazer o player andar para frente, trás, direita o esquerda. Como preferirem utilizem o código da melhor maneira possível!

 

Abraço!

Compartilhar este post


Link para o post
vHp    6
vHp

Mais um script excelente, Tio Gordo, obrigado!

Compartilhar este post


Link para o post
Criticoo    4
Criticoo

porque de vez do id não por para retornar pelo nome da guild?

por exemplo

 

if guildname == 'Tio Gordo' then

...

Compartilhar este post


Link para o post
Tio Gordo    8
Tio Gordo

Pode ser também, estou fazendo um que busca todas as guilds cadastradas e tal, mais completo e bonitinho rs

Abraço!

Compartilhar este post


Link para o post
iuniX    4
iuniX

Script de baixo nível, qualquer programador lua que se prese, sabe que não se usa TRUE e FALSE. Não se deve postar scripts usando QUOTE e muito menos sem indentação.

Sem contar que ao invés de fazer algo tabelado e organizado, fez apenas um monte de elseif e if.

 

 

Não venham me chamar de hater, estou apenas falando o que eu falaria se eu ainda fosse moderador. Tu deve estudar mais a parte de optimização do código, fica ai a dica.

Compartilhar este post


Link para o post
iuniX    4
iuniX
Script de baixo nível, qualquer programador lua que se prese, sabe que não se usa TRUE e FALSE. Não se deve postar scripts usando QUOTE e muito menos sem indentação.

Sem contar que ao invés de fazer algo tabelado e organizado, fez apenas um monte de elseif e if.

 

 

Não venham me chamar de hater, estou apenas falando o que eu falaria se eu ainda fosse moderador. Tu deve estudar mais a parte de optimização do código, fica ai a dica.

 

 

AHhhh e seu script fica bem mais utilizavel assim:

function onUse(cid, item, fromPos, itemEx, toPos)
return getPlayerGuildName(cid) == "Guild Name" and true or false
end

Compartilhar este post


Link para o post
Kuma Bear    33
Kuma Bear

O que você deveria ter feito:

1. Espaço depois das virgulas

2. Tirar saporra de pog

3. Refazer isso, e identar tudo, na boa.

 

function onUse(cid, item, fromPosition, itemEx, toPosition) 
   if getPlayerGuildId(cid) == 10 then 
       doTeleportThing(cid, {x = 0, y = 0, z = 0}, true) 
       return doCreatureSay(cid, "Welcome Guildmember!", TALKTYPE_ORANGE_1) 
   end 
   return doPlayerSendCancel(cid, "Sorry, but you aren't a member of that guild.") 
end

 

 

Isso é um script que merece respeito: Sem desmerecer o seu, claro.

http://forums.otserv.com.br/showthread.php?198459-Sistema-de-montaria!!!&p=1400386#post1400386

Editado por bolotabunito

Compartilhar este post


Link para o post
dalvorsn    46
dalvorsn

Amigo acredito que esteja iniciando ainda com a linguagem, mas tenho que lhe dizer que o script realmente não está bom.

Nosso amigo Lwkass deixou uma lista de bons tutoriais existentes no fórum, aconselho que leia e se esforçe, não é uma dificil linguagem, porém como qualquer outra precisa de estudo e esforço.

 

Voltando ao script, tenho uma ideia para você de como fazer o script, de tal forma que ele possa ser reutilizado facilmente e a configuração fique apenas na porta a qual será usado.

Eu usaria attributes na porta, pegaria esses attributes no script e compararia com o nome da guild escolhida.

Inicialmente havia pensado em criar um attribute qualquer e gravar o nome da guild, mas pensando melhor, acredito que pela propria descrição do item daria pra ser feito.

Ainda tem mais um "problema" a ser resolvido, seria essa configuração de teleporte, não há a minima necessidade disso, você pode tranquilamente usar actionId nas portas para identificar a direção a que se deve teleportar o player.

Demonstrarei mais ou menos como deve ser feito.

[spoiler=code]

function onUse(cid, item, frompos, item2, topos)
   local guildName, pos = getItemAttribute(item.uid, "description"):match("Lugar da guild: (.+)."), getThingPos(item.uid) 
   if(item.aid == 0)then -- /\
       pos.x = pos.x + 2 
   elseif(item.aid == 1)then -- \/
       pos.x = pos.x -2
   elseif(item.aid == 2)then -- >
       pos.y = pos.y + 2
   elseif(item.aid == 3)then -- <
       pos.y = pos.y - 2
   end
   if(guildName == getPlayerGuildName(cid))then
       doTeleportThing(cid, pos, false) -- esse false e pro pushMove, ou seja, false para nao parecer que ele esta sendo puxado
       doCreatureSay(cid, "Welcome Guildmember!", TALKTYPE_ORANGE_1)
   else
       doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Sorry, but you're not in this guild.")
       return false
   end


return true
end

 

 

edit

Obs.: verifique as posições ali aonde soma/subtrai 2, nao lembrei as direções em que as cordenadas aumentam/diminuem.

Editado por dalvorsn

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.

×