Ir para conteúdo
  • Cadastre-se

(Resolvido)[Pedido] Script de bau com mensagem Global


Ir para solução Resolvido por SoulSarti,

Posts Recomendados

Tfs 0.4,

Bom Dia ! Estou tendo um problema com um script de um bau que quando completa a quest, ele te teleporta para o Templo, e ao mesmo tempo manda uma mensagem Global para o servidor falando que aquele jogador completou a quest, porém se o jogador voltar na quest e ficar clicando no bau sem parar [mesmo sem pegar o premio] fica spamando a mensagem Global.

 

Script

Citar

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

local uniqueId2 = 50000   -- unique id do baú 2.

local storage1 = 2361 -- storage , se deixar a mesma do bau 1, o player poderá pegar o item de 1 baú. 
local item1 = 2361  -- item que ganha no baú 2
local quant1 = 1   -- quantidade de item.
local pos1 = {x= 157, y= 51, z= 7}  -- para onde o player será teleportado.

if item.uid == uniqueId2 then
if getPlayerStorageValue(cid, storage1) <= 0 then
   doPlayerAddItem(cid, item1, quant1)
    doTeleportThing(cid, pos1)
   setPlayerStorageValue(cid, storage1, 1)
 else
  doBroadcastMessage("O player "..getCreatureName(cid).." completou a quest X!",MESSAGE_STATUS_WARNING)
  doPlayerSendCancel(cid, "Você já fez essa quest!")
end
end


return true
end

 

Não manjo muito dessa parte..  então ... se poderem ajudar .. :D valeuu

Link para o post
Compartilhar em outros sites
function onUse(cid, item, frompos, item2, topos)

local uniqueId2 = 50000   -- unique id do baú 2.

local storage1 = 2361 -- storage , se deixar a mesma do bau 1, o player poderá pegar o item de 1 baú. 
local item1 = 2361  -- item que ganha no baú 2
local quant1 = 1   -- quantidade de item.
local pos1 = {x= 157, y= 51, z= 7}  -- para onde o player será teleportado.

if item.uid == uniqueId2 then
if getPlayerStorageValue(cid, storage1) <= 0 then
   doBroadcastMessage("O player "..getCreatureName(cid).." completou a quest X!",MESSAGE_STATUS_WARNING)
   doPlayerAddItem(cid, item1, quant1)
   doTeleportThing(cid, pos1)
   setPlayerStorageValue(cid, storage1, 1)
 else
  doPlayerSendCancel(cid, "Você já fez essa quest!")
end
end


return true
end

entao, o erro era esse   doBroadcastMessage("O player "..getCreatureName(cid).." completou a quest X!",MESSAGE_STATUS_WARNING) depois do else.

isso fazia com que a mensagem global fosse enviada no caso errado. Enfim, teste esse código e tente entender pq essa função dps do else estava errada. ^^

Link para o post
Compartilhar em outros sites

@SoulSarti Valeu cara, é que sou Leigo nessa parte de script, isso pode parecer facil pra mas pra mim é muito complicado kkkk

 

Testei aqui ta funcionado certinho \o .. seria dificil colocar uma vocação especifica para abrir o bau tambem ?

Link para o post
Compartilhar em outros sites
40 minutos atrás, Kyllini disse:

@SoulSarti Valeu cara, é que sou Leigo nessa parte de script, isso pode parecer facil pra mas pra mim é muito complicado kkkk

 

Testei aqui ta funcionado certinho \o .. seria dificil colocar uma vocação especifica para abrir o bau tambem ?

Magina! E não, não é dificil! Você quer dar um premio diferente pra cada vocação, ou só deixar uma determinada vocação poder receber a recompensa?

Link para o post
Compartilhar em outros sites

@SoulSarti então, cada bau tem seu item com id especifica já que é de cada vocação, id's [12712 [vocation 5] - 12713 [vocation 6] - 12714 [vocation 7] e 12715 [vocation 8].

 

Provavelmente você saberia me ajudar no meu outro tópico também que não tem haver com "action" de bau, e sim um script de npc que leva as pessoas pro local da quest. 

 

kkk ja estou pedindo muito .. :p

Link para o post
Compartilhar em outros sites
5 minutos atrás, Kyllini disse:

@SoulSarti então, cada bau tem seu item com id especifica já que é de cada vocação, id's [12712 [vocation 5] - 12713 [vocation 6] - 12714 [vocation 7] e 12715 [vocation 8].

 

Provavelmente você saberia me ajudar no meu outro tópico também que não tem haver com "action" de bau, e sim um script de npc que leva as pessoas pro local da quest. 

 

kkk ja estou pedindo muito .. :p

Deixa eu entender, então existem 4 baus, cada um com um uniqueid e eles devem entregar o item de acordo com a vocação do jogador. É isso?
pois é possivel também manter um unico bau e fazê-lo entregar um item diferente para cada vocação que for "abri-lo". o que voce precisa?

 

e sobre o npc, se vc ja criou o topico pra ele, me manda o link do topico. caso n tenha criado, crie e mande o link, pra gnt n misturar os casos no msm topico. tb pode ajudar outros jogadores com a msm intençao q vc.

Link para o post
Compartilhar em outros sites

Me manda o link por aqui mesmo, mas antes me diz se o codigo que eu vou te passar esta funcionando:

ele é um codigo pra qualquer quest que voce queira por no seu servidor, desde que o bau tenha uniqueid e a quest exija alguma vocação pra ser recolhida.

espero que esteja 100% funcional!

 

local config = {
items = {{id,qtd}}, -- aqui vc configura quais items vc quer dar de recompensa. caso for mais de 1, adicione uma virgula e ponha a id e qtd dentro de colchetes
--{{2160,3},{2134,1}},
voc = {5}, -- aqui vc poe os ids das vocações que podem abrir o bau. caso sejam mais de 1, basta adicionar uma virgula dps do ultimo numero e por o outro. voc = {5,6}, 
storage = 5000, -- altere para o storage que você desejar
gmessage = true, -- vai mandar mensagem global quando o jogar finalizar a quest? true = sim | false = nao
unique = 0, --uniqueid do bau. caso nao tenha, deixe 0, caso tenha, ponha o valor.
teleport = {check = false, {}}, --vai teletransportar o jogar ao finalizar a quest? se sim, mude para true e dps da virgula mude o {} para a posição desejada, ex:
--teleport = {true, {x = 2438, y = 2400, z = 9}}
nome = "Hellraiser" -- aqui vc poe o nome da sua quest, se tiver. Na mensagem global, aparecerá da seguinte maneira: 
-- "O player (nomedochar) completou a quest Hellraiser!." Deixe em branco o nome para nao mostrar qual foi a quest feita (isso ainda vai gerar uma mensagem global!)
}

function onUse(cid, item, frompos, item2, topos)
if item.uid == config.unique then
   if getPlayerStorageValue(cid, config.storage) ~= 1 and isInArray(config.voc, getPlayerVocation(cid)) then
      if config.gmessage and config.nome ~= "" then
         doBroadcastMessage("O player "..getCreatureName(cid).." completou a quest ".. config.nome .. "!",MESSAGE_STATUS_WARNING)
      elseif config.gmessage and config.nome == "" then
         doBroadcastMessage("O player "..getCreatureName(cid).." completou uma quest!",MESSAGE_STATUS_WARNING)    
      end
      setPlayerStorageValue(cid, config.storage, 1)
      for i = 1, #config.items do
          doPlayerAddItem(cid, config.items[i][1], config.items[i][2])
      end
      if config.teleport[1] then
         doTeleportThing(cid, config.teleport[2])
      end
   elseif getPlayerStorageValue(cid, config.storage) == 1 then    -- caso ja tenha feito a quest
      doPlayerSendCancel(cid, "Você já fez essa quest!")
   elseif not isInArray(config.voc, getPlayerVocation(cid)) then  -- caso nao seja da vocação apropriada
      doPlayerSendCancel(cid, "Você não pode receber a recompensa porque não tem a vocação apropriada!")
   end
end


return true
end

 

lembrando que voce pode usar esse codigo e apenas alterar as variaveis para qualquer quest que se enquadre no que eu expliquei acima.

Link para o post
Compartilhar em outros sites
Citar

[12/2/2018 22:13:7] [Error - Action Interface] 
[12/2/2018 22:13:7] data/actions/scripts/testtp.lua:onUse
[12/2/2018 22:13:7] Description: 
[12/2/2018 22:13:7] attempt to index a nil value
[12/2/2018 22:13:7] stack traceback:
[12/2/2018 22:13:7]     [C]: in function 'doTeleportThing'
[12/2/2018 22:13:7]     data/actions/scripts/testtp.lua:27: in function <data/actions/scripts/testtp.lua:14>

Então, testei aqui ... ele entregou o item certinho, a vocação e a mensagem tambem está perfeito, porém a parte de "teleporta" o jogador não funcionou ta desse jeito.

Citar

local config = {
items = {{12714,1}}, -- aqui vc configura quais items vc quer dar de recompensa. caso for mais de 1, adicione uma virgula e ponha a id e qtd dentro de colchetes
--{{2160,3},{2134,1}},
voc = {1}, -- aqui vc poe os ids das vocações que podem abrir o bau. caso sejam mais de 1, basta adicionar uma virgula dps do ultimo numero e por o outro. voc = {5,6}, 
storage = 5000, -- altere para o storage que você desejar
gmessage = true, -- vai mandar mensagem global quando o jogar finalizar a quest? true = sim | false = nao
unique = 1000, --uniqueid do bau. caso nao tenha, deixe 0, caso tenha, ponha o valor.
teleport = {check = true, {x = 157, y = 51, z = 7}}, --vai teletransportar o jogar ao finalizar a quest? se sim, mude para true e dps da virgula mude o {} para a posição desejada, ex:
--teleport = {true, {x = 2438, y = 2400, z = 9}}
nome = "Hellraiser" -- aqui vc poe o nome da sua quest, se tiver. Na mensagem global, aparecerá da seguinte maneira: 
-- "O player (nomedochar) completou a quest Hellraiser!." Deixe em branco o nome para nao mostrar qual foi a quest feita (isso ainda vai gerar uma mensagem global!)
}

function onUse(cid, item, frompos, item2, topos)
if item.uid == config.unique then
   if getPlayerStorageValue(cid, config.storage) ~= 1 and isInArray(config.voc, getPlayerVocation(cid)) then
      if config.gmessage and config.nome ~= "" then
         doBroadcastMessage("O player "..getCreatureName(cid).." completou a quest ".. config.nome .. "!",MESSAGE_STATUS_WARNING)
      elseif config.gmessage and config.nome == "" then
         doBroadcastMessage("O player "..getCreatureName(cid).." completou uma quest!",MESSAGE_STATUS_WARNING)    
      end
      setPlayerStorageValue(cid, config.storage, 1)
      for i = 1, #config.items do
          doPlayerAddItem(cid, config.items[1], config.items[2])
      end
      if config.teleport[1] then
         doTeleportThing(cid, config.teleport[2])
      end
   elseif getPlayerStorageValue(cid, config.storage) == 1 then    -- caso ja tenha feito a quest
      doPlayerSendCancel(cid, "Você já fez essa quest!")
   elseif not isInArray(config.voc, getPlayerVocation(cid)) then  -- caso nao seja da vocação apropriada
      doPlayerSendCancel(cid, "Você não pode receber a recompensa porque não tem a vocação apropriada!")
   end
end


return true
end

 

Editado por Kyllini (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
20 minutos atrás, Kyllini disse:

Então, testei aqui ... ele entregou o item certinho, a vocação e a mensagem tambem está perfeito, porém a parte de "teleporta" o jogador não funcionou ta desse jeito.

 

 

tenta assim (sono ta me atrapalhando.. aushausha)

 

local config = {
items = {{12714,1}}, -- aqui vc configura quais items vc quer dar de recompensa. caso for mais de 1, adicione uma virgula e ponha a id e qtd dentro de colchetes
--{{2160,3},{2134,1}},
voc = {1}, -- aqui vc poe os ids das vocações que podem abrir o bau. caso sejam mais de 1, basta adicionar uma virgula dps do ultimo numero e por o outro. voc = {5,6}, 
storage = 5000, -- altere para o storage que você desejar
gmessage = true, -- vai mandar mensagem global quando o jogar finalizar a quest? true = sim | false = nao
unique = 1000, --uniqueid do bau. caso nao tenha, deixe 0, caso tenha, ponha o valor.
teleport = {true, {x = 157, y = 51, z = 7}}, --vai teletransportar o jogar ao finalizar a quest? se sim, mude para true e dps da virgula mude o {} para a posição desejada, ex:
--teleport = {true, {x = 2438, y = 2400, z = 9}}
nome = "Hellraiser" -- aqui vc poe o nome da sua quest, se tiver. Na mensagem global, aparecerá da seguinte maneira: 
-- "O player (nomedochar) completou a quest Hellraiser!." Deixe em branco o nome para nao mostrar qual foi a quest feita (isso ainda vai gerar uma mensagem global!)
}

function onUse(cid, item, frompos, item2, topos)
if item.uid == config.unique then
   if getPlayerStorageValue(cid, config.storage) ~= 1 and isInArray(config.voc, getPlayerVocation(cid)) then
      if config.gmessage and config.nome ~= "" then
         doBroadcastMessage("O player "..getCreatureName(cid).." completou a quest ".. config.nome .. "!",MESSAGE_STATUS_WARNING)
      elseif config.gmessage and config.nome == "" then
         doBroadcastMessage("O player "..getCreatureName(cid).." completou uma quest!",MESSAGE_STATUS_WARNING)    
      end
      setPlayerStorageValue(cid, config.storage, 1)
      for i = 1, #config.items do
          doPlayerAddItem(cid, config.items[1], config.items[2])
      end
      if config.teleport[1] then
         tp = config.teleport[2]
         doTeleportThing(cid, tp)
      end
   elseif getPlayerStorageValue(cid, config.storage) == 1 then    -- caso ja tenha feito a quest
      doPlayerSendCancel(cid, "Você já fez essa quest!")
   elseif not isInArray(config.voc, getPlayerVocation(cid)) then  -- caso nao seja da vocação apropriada
      doPlayerSendCancel(cid, "Você não pode receber a recompensa porque não tem a vocação apropriada!")
   end
end


return true
end

 

Link para o post
Compartilhar em outros sites

Agora o Tp foi certo só que não ganhei o Item kkkk

Citar

[12/2/2018 22:40:12] [Error - Action Interface] 
[12/2/2018 22:40:12] data/actions/scripts/testtp.lua:onUse
[12/2/2018 22:40:12] Description: 
[12/2/2018 22:40:12] (luaDoPlayerAddItem) Item not found

 

já pra adiantar passar o link do outro topico xD

 

Link para o post
Compartilhar em outros sites
  • Solução
7 minutos atrás, Kyllini disse:

Agora o Tp foi certo só que não ganhei o Item kkkk

 

já pra adiantar passar o link do outro topico xD

 

UAHEUAHEUAHEUHA foi mal, eu corrigi o teleport mas eu usei uma versao antiga do script, onde eu n tinha modificado os items. 

onde tem o

for i = 1, #config.items do
          doPlayerAddItem(cid, config.items[1], config.items[2])
      end

 

substitua por 

 

for i = 1, #config.items do
          doPlayerAddItem(cid, config.items[i][1], config.items[i][2])
      end

 

Link para o post
Compartilhar em outros sites
1 minuto atrás, Kyllini disse:

@SoulSarti Aeee agora foi tudo 100% agora xD valeuuu <3

 Hehe ^^ marca la como melhor resposta e da aquele repzin maroto. Jaja vou trabalhar no script do npc. é rapido, mas eu to trabalhando nos meus projetos ao msm tempo, entao pode demorar um tiquin. mas sai ainda hoje hahaha

Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo