Ir para conteúdo
  • Cadastre-se

Posts Recomendados

[Quest System]

 

 

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

Spoiler

image.thumb.png.8aad4dd1d9b7e5323df09fb1bf892dbe.png

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

Spoiler
config = {
    -- Quest com prêmio apenas em pokemon
    [13123] = {
        monster = "Charizard",
        quantidade = 1,
        item = 2160,
        level = 5,
        storage = 33333
    },
    -- Quest com prêmio apenas em item
    [65535] = {
        monster = "",
        item = 2160,
        quantidade = 1,
        level = 5,
        storage = 33334
    }
}

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

 

Spoiler

dentro de servidor/data/action/script crie um arquivo chamado quest:

Spoiler
function onUse(cid, item, frompos, item2, topos)
    local match_found = false -- inicializa variável booleana para indicar correspondência encontrada
    for k, v in pairs(quest) do
        if item.actionid == k then
            match_found = true -- define variável como true se encontrar correspondência
            if v.level <= getPlayerLevel(cid) then
                if v.monster ~= "" then
                    if getPlayerStorageValue(cid, v.storage) == -1 then
                        doPlayerSendTextMessage(cid, 25, "Voce ganhou: " .. v.monster .. "")
                        addPokeToPlayer(cid, v.monster, v.boost, "normal") -- comentado porque a função não está definida
                        --addPokeToPlayer(cid, pokemon, boost, ball)
                        doPlayerAddItem(cid, v.item, v.quantidade)
                        setPlayerStorageValue(cid, v.storage , 1)
                    else
                        doPlayerSendTextMessage(cid, 25, "Voce já fez essa quest")
                    end
                else
                    if getPlayerStorageValue(cid, v.storage) == -1 then
                        doPlayerAddItem(cid, v.item, v.quantidade)
                        setPlayerStorageValue(cid, v.storage , 1)
                        doPlayerSendTextMessage(cid, 25, "Voce ganhou itens")
                    else
                        doPlayerSendTextMessage(cid, 25, "Voce já fez essa quest")
                    end
                end
            else
                doPlayerSendTextMessage(cid, 25, "Voce nao tem nivel suficiente\n[Nivel necessario:" .. v.level .. "]\n")
            end
        end
    end
   
    if not match_found then -- executa se não encontrar nenhuma correspondência
        doPlayerSendTextMessage(cid, 25, "Esse bau não está configurado para uma quest.")
    end
end

 

agora em servidor/data/action.xml

Spoiler

<action actionid="13123;65535" event="script" value="quest.lua"/>

 

 

agora vá em servidor/data/lib  crie um arquivo chamado config.lua e adicione isso lá dentro

Spoiler
quest = {
    -- POKEMONS INICIAIS
    [3336] = {
        monster = "Charmander",
        item = 2159,
        quantidade  = 1,
        level = 1,
        boost = 5,
        storage = 33335
    },
    [3337] = {
        monster = "Squirtle",
        item = 2159,
        quantidade  = 1,
        level = 1,
        boost = 5,
        storage = 33335
    },
    [3338] = {
        monster = "Bulbasaur",
        item = 2159,
        quantidade  = 1,
        level = 1,
        boost = 5,
        storage = 33335
    }
}

 

 

Agora vamos entender oq precisamos fazer!

Spoiler


[65535] = {
    monster = "",
    item = 2160,
	quantidade = 1,
    level = 5,
    storage = 33334
}

[action id] = o id que colocará dentro do báu
[monster = ""] deixe assim, se não quiser mostro apenas item, mas se quiser coloque dentro o nome
[level] level necessário para fazer
[storage] que armazenará que voce ja fez ou não fez a quest

 

 

 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)
Link para o post
Compartilhar em outros sites

Ó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

Link para o post
Compartilhar em outros sites
35 minutos atrás, 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

Spoiler

image.thumb.png.6832ecc724a30e53d9cf9242e02b5a2b.png

 

Link para o post
Compartilhar em outros sites
4 minutos atrás, 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.

Link para o post
Compartilhar em outros sites
1 hora atrás, 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.

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.

  • Conteúdo Similar

    • Por matiasz123
      [OTCLIENT SHOWOFF] Questlog Actualizado
      Updated quest log, showing quest details:
      Npc name Npc level Npc outfit Mission status Description Amount of reward experience Number of reward points Enemies you must kill Items to collect  
       

       
      When you click on the follow button, an alternative map opens that shows you the next objective of the mission and at what coordinates:


       
      If you want the system write a comment with your discord
    • Por S H I O N
      oiee, estou aqui para disponibilizar uma base bem antiga que achei nos meus arquivos, eu iria apagar ela mais preferi deixar ela aqui para caso alguem queira usar ela para alguma coisa no futuro, pq eu simplesmente peguei em 2018 por ai e nem usei mais pelo o fato de ter muitos bugs e para quem nao entende de script e sistemas ela se torna um pesadelo na vida de alguem, a maioria dos bugs q ela tem da para corrigir muito rapido mais tem uns q sao extremamente dificeis entao um conselho para quem pegar essa base... boa sorte kkkk vc vai precisar de uns meses para tirar os bugs dela mais ela e jogavel ainda. façam um bom uso dela, se caso o cara manjar bem de editar poketibias e tirar bugs e mexer com scripts, para ele vai ser facil tirar esses bugs q tem nela.
      .
      .
      .
      .
      .
      .
      .
      vamos ao que interessa, o download dela vai esta pelo o mediafire e dentro contem o servidor e o client 
      quando baixar e so trocar o ip do servidor e trocar o ip do seu client e pronto.
      .
      .
      .
      .
      .
      .
      vou deixar algumas prints abaixo.
      .
      .
      .
      espero ver um dia essa base online dnv, amava jogar, por isso nao excluir ela
      resolvi deixar aqui, acredito que vao cuidar bem dela. vlw fui.
       
    • Por spotifyy
      Olá, vou tentar não me esticar muito aqui, mas estou mexendo em uma base de poketibia(1098) para estudos
      e provavelmente em algum momento estarei oficialmente lançando.
      Aceito pessoas que também estão em aprendizado e querendo colaborar com o projeto.
      E caso você tenha muito conhecimento na área e queira colaborar também será tão bem vindo/a
      quanto alguém em aprendizado com vontade de evoluir.
       
      Algumas features
       
      >Market Global
      >Poções de XP
      >Gacha stone
      >Boost(+100)
      >Level system
      >Eggs
      >Mapa HUB
      >Eventos diários (PVP/PVE)
      >Outland
      >Shiny Hunts
      >Shiny Box Hunt
      >Area PVP
      e mais algumas outras coisas.
       
       
       
      Caso alguem tenha interesse em integrar o projeto só me chamar no discord que passo as ideias que tenho para o projeto.
       
      Discord: nenep1
       
       
       
       
       
    • Por Baryon
      Boa noite amigos, estou aqui para apresentar meu projeto.
      Estou aqui no intuito de tentar desenvolver um ats baseado em naruto full perspectiva e com uso reduzido de bot, teremos um bot próprio que ira lhe auxiliar na cura e com espaço para 1 magia com finalidade de treino, assim focando que os players possam tentar se divertir jogando na mao tanto a parte pve como pvp do game (oque eu acho mais legal).
      O Servidor ja se encontra com alguns sistema sendo eles:
      ・Passe de batalha
      ・Painel de missoes 
      ・Village war
      ・Sistema de vilas
      ・Bingo book
      ・Autoloot
      ・Ninja procurado
      ・Painel de Dungeons
      ・ World Boss
      Nossas vocaçoes sao divididas em classes sendo elas:
       ・Shooters: Deidara, Gaara, Kankuro, Tenten, Sasori, Konan.
       ・Especialistas: Shikamaru, Nagato, Hashirama, Oonoki, Orochimaru.
       ・Assassinos: Asuma, Madara, Minato, Sasuke, Obito, Kisame.
       ・Suportes: Sakura, Shizune, Ino, Tsunade.
       ・Lutadores: Naruto, Kiba, Chouji, Lee, Neji, Hinata.
             (obs: ja temos por volta de mais 10 personagens "prontos" alem desses com foco em atualizações futuras)
       Atualmente apenas eu e mais uma pessoas estamos desenvolvendo o servidor e ambos trabalham o tempo ou seja nao temos tanto tempo disponivel entao estou em buscas de novas pessoas com certa experiencia para integrar a equipe tenho em mente 4 vagas disponiveis que sao: 1 Mapper, 1 Dev, 1 Designer, 1 Moderador (ficara em contato com a staff e interagindo em nosso discord, ficando por dentro das novidades e no inicio do game ira iniciar como tutor para auxiliar os players).
       Caso alguem tenha interessa em embarcar nessa aventura favor entrar em contato cmg pelo discord 😉 em breve estarei postando mais atualizaçoes do ot aqui!

       Nosso discord: https://discord.gg/pPTkbAnNSV
      Meu contato no discord: baryon1492



    • Por LuisDias
      Olá pessoal! Estamos começando um projeto de desenvolvimento de um servidor de POKETIBIA, ainda bem no início. Gostaria de saber se é possível adicionar sistemas que não estão na base. No caso, a base utilizada será a DASH. Se for possível, gostaria de saber se alguém tem sistemas compatíveis com essa base para disponibilizar, por exemplo o MARKET. Obrigado por toda a ajuda. 
       
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo