Ir para conteúdo

Featured Replies

Postado

[Quest System]

 

 

Estava ontem analisando minha base, aonde tinha várias quests em arquivos separados.

Mostrar conteúdo oculto

Então, pq não organizar tudo em apenas um arquivo exemplo:

Mostrar conteúdo oculto

Então fiz esse script, meio simples mas útil para organizar tudo.

 

Mostrar conteúdo oculto

 

Agora vamos entender oq precisamos fazer!

Mostrar conteúdo oculto

 

 Uma pequena atualização,  agora fica em um lugar separado a configuração para ficar mais  fácil modificar.

Agora pode adicionar o boost que voce deseja no pokemon.

 

Bem é isso.

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

Postado

Ótimo conteúdo, obrigado pela contribuição, apenas alguns adendos que podem melhorar o seu código.

vc fez um  for k, v in pairs(config) do esse for não tem nenhuma condição de parada, porém com 10-15 quests ele executará bem rapido, correto? mas imaginemos um cenário de 100 players clicando no mesmo bau ou outros ao mesmo tempo, ainda assim mesmo não lagando, ele irá fazer checagens desnecessárias.
vc pode trocar o for por
 

local questId = config[item.actionid]
if questId then
    --código aqui
else
	-- foi clicado no bau chamado um aid que não existe na config
end


apartir dai o resto do código já trabalha normal, mas ao invés de usar o K e V do for como params, vc já pode usar o questId.
 

questId.monster / questId.storage
....

 

seria menos checagems, e o questId ja retornaria exatamente o ID da config pra otimizar mais o processo

Postado
  • Autor
  Em 06/04/2023 em 17:50, FeeTads disse:

Ótimo conteúdo, obrigado pela contribuição, apenas alguns adendos que podem melhorar o seu código.

vc fez um  for k, v in pairs(config) do esse for não tem nenhuma condição de parada, porém com 10-15 quests ele executará bem rapido, correto? mas imaginemos um cenário de 100 players clicando no mesmo bau ou outros ao mesmo tempo, ainda assim mesmo não lagando, ele irá fazer checagens desnecessárias.
vc pode trocar o for por
 


local questId = config[item.actionid]
if questId then
    --código aqui
else
	-- foi clicado no bau chamado um aid que não existe na config
end


apartir dai o resto do código já trabalha normal, mas ao invés de usar o K e V do for como params, vc já pode usar o questId.
 


questId.monster / questId.storage
....

 

seria menos checagems, e o questId ja retornaria exatamente o ID da config pra otimizar mais o processo

Obrigado, futuramente faço outra atualização.

 

Fiz algumas modificações antes a config ficava dentro do script, agora ele fica separado  para ficar mais fácil configurar exemplo

Mostrar conteúdo oculto

 

Postado
  Em 06/04/2023 em 18:28, PokemonXdemon disse:

para ficar mais fácil configurar exemplo

boa, indico vc fazer o item, ser "reward" e fazer se uma table, pq futuramente vc pode querer entregar mais de 1 item na mesma quest.
 

reward = {{item, qtd}, {item, qtd}},

ai vc indexa com
 

for i=1, #quest.reward do
	doPlayerAddItem(cid, questId.reward[i][1], questId.reward[i][2])  -- [i][1] = index i, valor 1 (item), [i][2] = index i, valor 2 (qtd) 
end


ja seria um upgrade a mais no script, seria bom sempre fazer a checagem se o item é stackavel ou não tbm, caso n seja stackavel e a QTD seja maior que 1, do "doPlayerAddItem" não adiciona mais que 1 item não stackavel, da pra fazer um função pra isso, ou fazer assim:
 

for i=1, #quest.reward do
	if not isItemStackable(questId.reward[i][1]) and questId.reward[i][2] > 1 then 		-- caso o item não seja stackavel e a QTD > 1
    	for j=1, questId.reward[i][2] do						-- vai de 1 a QTD
      		doPlayerAddItem(cid, questId.reward[i][1], 1)		-- adicionando o item pro player
    	end
    else  
		doPlayerAddItem(cid, questId.reward[i][1], questId.reward[i][2])  -- [i][1] = index i, valor 1 (item), [i][2] = index i, valor 2 (qtd) 
  	end
end


da pra fazer disso uma função pra no futuro chamar de qualquer script ao inves de sempre faze-la.

Postado
  • Autor
  Em 06/04/2023 em 18:41, FeeTads disse:

boa, indico vc fazer o item, ser "reward" e fazer se uma table, pq futuramente vc pode querer entregar mais de 1 item na mesma quest.
 


reward = {{item, qtd}, {item, qtd}},

ai vc indexa com
 


for i=1, #quest.reward do
	doPlayerAddItem(cid, questId.reward[i][1], questId.reward[i][2])  -- [i][1] = index i, valor 1 (item), [i][2] = index i, valor 2 (qtd) 
end


ja seria um upgrade a mais no script, seria bom sempre fazer a checagem se o item é stackavel ou não tbm, caso n seja stackavel e a QTD seja maior que 1, do "doPlayerAddItem" não adiciona mais que 1 item não stackavel, da pra fazer um função pra isso, ou fazer assim:
 


for i=1, #quest.reward do
	if not isItemStackable(questId.reward[i][1]) and questId.reward[i][2] > 1 then 		-- caso o item não seja stackavel e a QTD > 1
    	for j=1, questId.reward[i][2] do						-- vai de 1 a QTD
      		doPlayerAddItem(cid, questId.reward[i][1], 1)		-- adicionando o item pro player
    	end
    else  
		doPlayerAddItem(cid, questId.reward[i][1], questId.reward[i][2])  -- [i][1] = index i, valor 1 (item), [i][2] = index i, valor 2 (qtd) 
  	end
end


da pra fazer disso uma função pra no futuro chamar de qualquer script ao inves de sempre faze-la.

gostei da ideia, vou anotar futuramente fazer essas mudanças.

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