Ir para conteúdo
  • Cadastre-se

(Resolvido)[PEDIDO] Add storage


Ir para solução Resolvido por Vodkart,

Posts Recomendados

Olá pessoal!

 

Eu queria que quando um player comprasse um ticket no meu servidor, ele ganhasse uma storage e com essa storage eu possa entrar em um tp que vai aparecer em x sqm, e que o player perca essa storage perca a storage ao entrar em outro TP. Só quero as funções que devo usar.

Link para o post
Compartilhar em outros sites

Que ele ganhe acesso com o ticket comprado.

 

As storages depois eu viajo e configuro.

Editado por arthur122222 (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

Você pode usar essa função no script que compra o ticket:

setPlayerStorageValue(cid, storage_value, 1)

No mesmo local em que adiciona o item ao player.

 


Sobre as outras funções você pode usar um movement onStepIn:

local t = {
tp =  { x = 32338, y = 32225, z = 7 }, -- Local onde irá levar.
storage = {23844, 1} -- Storage desejada e valor {value, key}.
}

function onStepIn(cid, item, position, fromPosition)
    if getPlayerStorageValue(cid, t.storage[1]) == t.storage[2] then
        doTeleportThing(cid, t.tp)
        doSendMagicEffect(getCreaturePosition(cid), CONST_ME_TELEPORT)
    else
        doPlayerSendCancel(cid, "Você não tem acesso a essa área.")
        doTeleportThing(cid, fromPosition)
        doSendMagicEffect(getCreaturePosition(cid), CONST_ME_TELEPORT)    
    end
   return true
end

TAG:

<movevent event="StepIn" actionid="actionID_desejada" script="nome_do_script.lua" />


Pra tirar a storage ao entrar em um TP é bem simples.

local t = {
tp =  { x = 32338, y = 32225, z = 7 }, -- Local onde irá levar.
storage = {23844, -1} -- Storage desejada e valor {value, key}.
}

function onStepIn(cid, item, position, fromPosition)
    setPlayerStorageValue(cid, t.storage[1], t.storage[2])
    doTeleportThing(cid, t.tp)
   return true
end

TAG:

<movevent event="StepIn" actionid="actionID_desejada" script="nome_do_script.lua" />
Link para o post
Compartilhar em outros sites

E teria como eu colocar pra vender apenas uma quantia de tickets? Tipo, apenas 20 tickets liberados para os players comprarem, quem não comprou não participa do evento.

Link para o post
Compartilhar em outros sites

E teria como eu colocar pra vender apenas uma quantia de tickets? Tipo, apenas 20 tickets liberados para os players comprarem, quem não comprou não participa do evento.

Da pra tu colocar uma global storage, tipo:

setGlobalStorageValue(storage_desejada, getGlobalStorageValue(storage_desejada) +1)

Ai na verificação do método de comprar você coloca:

if getGlobalStorageValue(storage_desejada) >= 20 then
return doPlayerSendCancel(cid, "Os tickets esgotaram.")
end
Link para o post
Compartilhar em outros sites

E esse global storage vai pra onde? Paciência.. Sou iniciante. =D


Essa parte: if getGlobalStorageValue(788978) >= 20 then

return doPlayerSendCancel(cid, "Os tickets esgotaram.")
end

 

Ficaria assim mesmo?

Link para o post
Compartilhar em outros sites

Que nada, global storage é como nome diz, uma storage global como se fosse a de player mesmo.

Você pode altera-la pela database e ela reseta após reiniciar o servidor ou você pode colocar pra ela virar 0 quando acabar o evento.

Exemplo com valores do script que passei:

setGlobalStorageValue(35000, getGlobalStorageValue(35000) +1) -- Irá deixar a storage global (35000) no valor atual dela + um, se o valor for 1, vai ficar 2, e assim vai.
if getGlobalStorageValue(35000) >= 20 then -- Se a storage global (35000) for maior ou igual a 20, então irá retornar o script com a mensagem.
return doPlayerSendCancel(cid, "Os tickets esgotaram.")
end
Link para o post
Compartilhar em outros sites

Altera-la pela database... Me perdi ai, o resto entendi.

Qual exatamente sua dúvida sobre a storage global?

Link para o post
Compartilhar em outros sites

Já vem no servidor amigo, você só precisa citar um valor nela '-'.

setGlobalStorageValue(35000, getGlobalStorageValue(35000) +1)

ou,

setGlobalStorageValue(35001, getGlobalStorageValue(35001) +1)

ou,

setGlobalStorageValue(35002, getGlobalStorageValue(35002) +1)

e assim vai.

Link para o post
Compartilhar em outros sites

A pergunta é: Onde colocar isso.. AOSKosk ou já vem no servidor, sei lá.. 

 

Qual pasta, sei lá.. 

Link para o post
Compartilhar em outros sites

isso vai depender de como vc vende o item, em npc?

vodkart_logo.png

[*Ninguém será digno do sucesso se não usar suas derrotas para conquistá-lo.*]

 

DISCORDvodkart#6090

 

Link para o post
Compartilhar em outros sites

Exatamente. Eu fiz o esquema assim:

 

elseif msgcontains(msg, 'team red') then
if getPlayerItemCount(cid ,2160) >= 20 then
npcHandler:say('Did you bring me the 20 crystal coins?', cid)
npcHandler.topic[cid] = 1
else
npcHandler:say('I need a {20 crystal coins}. Please come back when you have them.', cid)
npcHandler.topic[cid] = 0
end
elseif msgcontains(msg, 'yes') and npcHandler.topic[cid] == 1 then
npcHandler.topic[cid] = 0
if getPlayerItemCount(cid,2160) >= 20 then
if doPlayerRemoveItem(cid,2160, 20) == TRUE then
npcHandler:say(done, cid)
if getGlobalStorageValue(34577) >= 20 then
                                                                           return doPlayerSendCancel(cid, "Os tickets esgotaram.")
end
else
npcHandler:say(item, cid)
end
 
 
Tá certo ou faltando alguma coisa?
Link para o post
Compartilhar em outros sites

Você pode fazer o seguinte:

elseif msgcontains(msg, 'team red') then

if getPlayerItemCount(cid ,2160) >= 20 then
npcHandler:say('Did you bring me the 20 crystal coins?', cid)
npcHandler.topic[cid] = 1
else
npcHandler:say('I need a {20 crystal coins}. Please come back when you have them.', cid)
npcHandler.topic[cid] = 0
end
elseif msgcontains(msg, 'yes') and npcHandler.topic[cid] == 1 then
npcHandler.topic[cid] = 0
if getPlayerItemCount(cid,2160) >= 20 then
if doPlayerRemoveItem(cid,2160, 20) == TRUE then

if getGlobalStorageValue(34577) < 20 then
npcHandler:say(done, cid)
else
return doPlayerSendCancel(cid, "Os tickets esgotaram.")
end
else
npcHandler:say(item, cid)
end
Link para o post
Compartilhar em outros sites

posta o npc inteiro que a gente edita

vodkart_logo.png

[*Ninguém será digno do sucesso se não usar suas derrotas para conquistá-lo.*]

 

DISCORDvodkart#6090

 

Link para o post
Compartilhar em outros sites

 local keywordHandler = KeywordHandler:new()

local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
 
function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end
 
local item = 'I\'m sorry, but you do not have the required items for this trade.'
local done = 'Here you are, thank you for your business.'
 
function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end
 
if msgcontains(msg, 'tickets') then
npcHandler:say('I sell tickets for the event.', cid)
elseif msgcontains(msg, 'blue') then
if getPlayerItemCount(cid ,2160) >= 20 then
npcHandler:say('Did you bring me the 20 crystal coins?', cid)
npcHandler.topic[cid] = 1
else
npcHandler:say('I need a {20 crystal coins}. Please come back when you have them.', cid)
npcHandler.topic[cid] = 0
end
elseif msgcontains(msg, 'yes') and npcHandler.topic[cid] == 1 then
npcHandler.topic[cid] = 0
if getPlayerItemCount(cid,2160) >= 20 then
if doPlayerRemoveItem(cid,2160, 20) == TRUE then
npcHandler:say(done, cid)
if getGlobalStorageValue(34577) >= 20 then
                                                                           return doPlayerSendCancel(cid, "Os tickets esgotaram.")
end
else
npcHandler:say(item, cid)
end
elseif msgcontains(msg, 'green') then
if getPlayerItemCount(cid ,2160) >= 20 then
npcHandler:say('Did you bring me the 20 crystal coins?', cid)
npcHandler.topic[cid] = 1
else
npcHandler:say('I need a {20 crystal coins}. Please come back when you have them.', cid)
npcHandler.topic[cid] = 0
end
elseif msgcontains(msg, 'yes') and npcHandler.topic[cid] == 1 then
npcHandler.topic[cid] = 0
if getPlayerItemCount(cid,2160) >= 20 then
if doPlayerRemoveItem(cid,2160, 20) == TRUE then
npcHandler:say(done, cid)
if getGlobalStorageValue(34578) >= 20 then
                                                                           return doPlayerSendCancel(cid, "Os tickets esgotaram.")
end
else
npcHandler:say(item, cid)
end
    elseif msgcontains(msg, 'no') and npcHandler.topic[cid] >= 1 and npcHandler.topic[cid] <= 90 then
npcHandler:say('Well, then leave.')
npcHandler.topic[cid] = 0
end
 
return true
end
 
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)

npcHandler:addModule(FocusModule:new())

Editado por arthur122222 (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

Testa ai:

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
 
function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end
 
local storage = 23844 -- Storage do player ao comprar para ter acesso ao evento.
local gstorage = 34577 -- Storage global do evento.
local done = 'Here you are, thank you for your business.'
 
function creatureSayCallback(cid, type, msg)
local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
local msg = msg:lower();
if(not npcHandler:isFocused(cid)) then
return false
end

    if msgcontains(msg, 'tickets') then
       if getGlobalStorageValue(gstorage) < 20 then
          npcHandler:say('I sell tickets for the event.', cid)
          talkState[talkUser] = 1
       else
          npcHandler:say('There are no more tickets.', cid)
          talkState[talkUser] = 0
       end
    elseif msgcontains(msg, 'blue') then
       if talkState[talkUser] == 1 then
          npcHandler:say('Did you bring me the 20 crystal coins?', cid)
          talkState[talkUser] = 2
       end
    elseif msgcontains(msg, 'green') then
       if talkState[talkUser] == 1 then
          npcHandler:say('Did you bring me the 20 crystal coins?', cid)
          talkState[talkUser] = 2
    elseif msgcontains(msg, 'yes') then
       if talkState[talkUser] == 2 then
          if doPlayerRemoveItem(cid, 2160, 20) == TRUE then
             npcHandler:say(done, cid)
             setPlayerStorageValue(cid, storage, 1)
          else
             npcHandler:say("You do not have 20 crystal coins.")
          end
       end
    elseif msgcontains(msg, 'no') then
        if talkState[talkUser] = 2 then
           npcHandler:say("Okay...")
           talkState[talkUser] = 0
        end
    end
end
        
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
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