Ir para conteúdo

Featured Replies

Postado

Base: 

TFS 0.4.0

 

Qual erro está surgindo/O que você procura?

 

Resolvi fazer um script para quando o player pisasse em um determinado SQM, surgisse um NPC em certo ponto do mapa. A minha ideia era que o npc surgisse apenas uma vez, então resolvi utilizar uma globalstorage para que assim que o primeiro player acionasse o evento, todos os demais não conseguissem. O script funcionou perfeitamente, e de fato apenas o primeiro player consegue trazer o NPC para o local desejado. O problema é que a global storage não fica salva no valor que eu determinei (no caso, "1") e quando o servidor é fechado/reinicia, os outros jogadores conseguem acionar o evento - o que eu não quero que aconteça.

 

Gostaria de saber se as globalstorage permanecessem salvas, ou o que fazer para que elas fiquem salvas. 

Notei que no config.lua há a seguinte opção:     "saveGlobalStorage = true", mas ela já está configurada como "true", então não creio que seja isso.

 

Acho que não é a opção ideal, mas para solucionar o caso, também seria possível atualizar a storage de todos os players do servidor (ao invés de utilizar a global storage). Se alguém puder me ajudar com o script, eu agradeço.

 

Imagino que ficaria algo como: "for (id do primeiro ao último player do banco de dados)

atualizar o value de uma key da tabela player_storage", mas eu não faço ideia de como isso fica em código.

 

 

Você tem o código disponível? Se tiver publique-o aqui:

local pos = {x=875,y=398,z=7} -- Local do NPC

function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor)
	if getGlobalStorageValue(9000) <= 0 then 
		if isPlayer(cid) and getPlayerAccess(cid) < 3 and getPlayerStorageValue(cid, 9000) <= 0 then
			doCreateNpc("GoblinAssustadoOesteCidade", pos)
		end
		setGlobalStorageValue(9000, 1)
	end		
   return true
end 

 

Resolvido por Tadelho

Ir para solução
  • 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
local pos = {x=875,y=398,z=7} -- Local do NPC

function onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor)
	if not (npc_tile) then
		if getGlobalStorageValue(9000) <= 0 then 
			if isPlayer(cid) and getPlayerAccess(cid) < 3 and getPlayerStorageValue(cid, 9000) <= 0 then
				npc_tile = doCreateNpc("GoblinAssustadoOesteCidade", pos)
			end
			setGlobalStorageValue(9000, 1)
		end
	end
   return true
end 

Acredito que isso resolva, colega. A solução é guardar o uid do npc criado e fazer a verificação se ele existe ou não cada vez que o jogador pisar no piso. Caso não resolva, buscaremos outra forma para solucionar isso aí, :). 

Feliz daquele que ensina o que sabe, e aprende o que ensina.

 

               

star-wars-animated-gif-23.gif

Postado
  • Autor

@lordzetros o problema é que eu quero que seja um evento único ao longo de todo o jogo, entende? Esse NPC inclusive irá sumir depois de outro acontecimento. Preciso que o aparecimento dele fique registrado mesmo depois do servidor ser fechado/reiniciado. Eu pretendia utilizar as storages porque depois as usarei como andamento de uma quest que vale para todo e qualquer jogador.

 

Eu sei que isso será possível da seguinte forma:

1) a globalstorage 9000 recebe o valor 1 e isso fica salvo, mesmo quando o servidor reiniciar (seria o ideal, acredito), ou...

2) todos os players recebem o valor 1 na player_storage 9000.

Postado

@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. 

 

Em questão de alterar o storage, o mais viável para se fazer isso seria atualizando pela database, já que nem todos os jogadores estariam online. Daqui a pouco penso em uma solução para isso. 

Feliz daquele que ensina o que sabe, e aprende o que ensina.

 

               

star-wars-animated-gif-23.gif

Postado

Não precisa usar global storage, pega o cid do npc:

 

 

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
		local creature = getCreatureByName(npc)		
		if creature ~= nil then
			doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "O NPC ja esta andando por este mapa!.")
		else
			doCreateNpc(npc, pos)
		end	
	end
	return true
end

 

vodkart_logo.png

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

 

DISCORDvodkart#6090

 

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