Ir para conteúdo

Featured Replies

Postado
  • Autor

@Vodkart, se você puder, leia a resposta anterior que deixei. Eu preciso registrar o evento do NPC ter aparecido alguma vez para seguir uma quest válida para todos os players. Não estou tendo problemas em duplicar o NPC nem nada. Enquanto o servidor está rodando o script funciona perfeitamente conforme o planejado. O problema é que ao fechar/reiniciar o servidor a globalstorage perde o valor e aí tudo recomeça, o que eu não quero que aconteça. Para solucionar isso eu preciso ou manter o valor da globalstorage, que eu não sei por que diabos some, ou atualizar o valor de uma storage dos players (o que consumiria mais processamento e memória, mas estou disposto a tentar ).

 

Edit: vou deixar de lado o código e explicar com palavras a mecânica esperada. Talvez ajude.

 

-> Se o NPC ainda não apareceu na história do servidor, um jogador pode fazê-lo aparecer ao pisar em um sqm.

-> Se o NPC já apareceu alguma vez na história, ele não deve aparecer jamais, em hipótese alguma, mesmo que o servidor seja reiniciado e etc.

 

Para solucionar isso eu imaginei que a globalstorage servisse, ou um registro geral em todos os players.

Editado por Tadelho
Atualização de informações. (veja o histórico de edições)

  • Respostas 9
  • Visualizações 2.3k
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • @Vodkart , exatamente. Só descobri isso porque executei um serversave, até então eu não tinha recebido qualquer mensagem de erro.   Consegui resolver, aparentemente! Eu simplesmente adicionei a

  • executa essa query:     CREATE TABLE npc_quest ( create INT NOT NULL DEFAULT 0, PRIMARY KEY ( id ) );     e usa o scrip

  • @Tadelho Estranho, nunca vi esse caso do globalStorage não salvar, eu ia recomendar dá uma olhada no config.lua, mas como você já disse que alterou para true, já deveria está funcionando.   

Posted Images

Postado

executa essa query:

 

 

CREATE TABLE npc_quest (
    create   	INT             NOT NULL
                              DEFAULT 0,
    PRIMARY KEY ( id ) 
);

 

 

e usa o script assim:

 

local pos = {x=875,y=398,z=7} -- Local do NPC
local npc = "GoblinAssustadoOesteCidade"
function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor)
	if isPlayer(cid) and getPlayerAccess(cid) < 3 then
       if db.getResult("SELECT `create` FROM `npc_quest`;"):getDataInt("create") <= 0 then
			doCreateNpc(npc, pos)
			db.executeQuery("UPDATE `npc_quest` SET `create` = 1;")
		end	
	end
	return true
end

 

 

futuramente, quando for "remover o npc usa esta linha para voltar para 0

 

db.executeQuery("UPDATE `npc_quest` SET `create` = 0;")

 

 

-------------------------------------------------------------

 

ai para dar sequencia a sua quest, e se ele tiver aparecido alguma vez na vida, você usa assim:

 

if db.getResult("SELECT `create` FROM `npc_quest`;"):getDataInt("create") > 0 then
-- sim o npc ja foi criado alguma vez
end

 

-----------------------------------------------------------------------------------------------

@Tadelho

 

Conseguiu? fiz exatamente o que descreveu... aguardo respostas!

vodkart_logo.png

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

 

DISCORDvodkart#6090

 

Postado
  • Autor

@Vodkart irei testar logo menos e já respondo. É que este padrão se repetirá muitas vezes com outras actions e conforme a história da quest avança. O valor da tabela mudará muitas vezes por isso eu estava tentando lidar com as storages com as quais sou mais familiarizado e sei que funcionam bem para gerenciar isso.

 

A propósito, eu fiz um teste aqui: tentei executar a função pronta de "doServerSave" logo após mudar o valor da globalstorage para ver se assim salvava, e obtive uma mensagem de erro no console.

 

setGlobalStorageValue(9000, 1)
			doSaveServer()

image.thumb.png.6516dbc86b7f686e9d1f052e727d64cb.png

 

 

Isso explicaria o porquê da globalstorage não salvar?

Postado
  • Autor
  • Solução

@Vodkart , exatamente. Só descobri isso porque executei um serversave, até então eu não tinha recebido qualquer mensagem de erro.
 

Consegui resolver, aparentemente! Eu simplesmente adicionei a coluna "world_id" na tabela "global_storage" e agora está funcionando. Fechei e abri o servidor e agora o script original funciona da maneira esperada e novos jogadores não ativam mais o script. O evento ocorre apenas uma vez!

 

Ficou assim:

image.thumb.png.88f7da6aef4684df750d2a3135284d5d.png

image.thumb.png.cc59c4b58cd692058aca2e140182e1cb.png

 

 

Obrigado a todos que deram atenção ao tópico! O problema não era no script, mas sim no meu database.

 

Obs: eu coloquei o valor padrão do world_id como "0" porque este é valor configurado no meu config.lua. Se alguém que estiver lendo isso utilizar um valor diferente, terá de adaptar.

Editado por Tadelho (veja o histórico de edições)

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

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.7k

Informação Importante

Confirmação de Termo