Anúncio

[PEDIDO] EXTENSÃO D...
 
Notifications
Clear all

[PEDIDO] EXTENSÃO DO INVENTÁRIO

8 Posts
4 Usuários
2 Reactions
65 Visualizações
miquella
(@miquella)
Posts: 14
Mentor Respeitado
Topic starter
 

Qual seria a forma mais prática de expandir o inventário, tipo pra adicionar um sistema de relíquias? Por onde seria bom começar?

 
Postado : 05/07/2025 2:32 pm
(@trevas)
Posts: 4
Apoiador Ativo
 

pegue a referencia de aneis / shelton e redirecione as coordenaras e perimetro no proprio inventario

 

 
Postado : 05/07/2025 6:15 pm
miquella
(@miquella)
Posts: 14
Mentor Respeitado
Topic starter
 

Então isso é sossegado de fazer, mas digo fazer o próprio sistema de relíquia tipo o KPT, que você expande ele.

 
Postado : 05/07/2025 8:34 pm
(@trevas)
Posts: 4
Apoiador Ativo
 

@miquella me manda algum contato q tento ver para te ajudar

 
Postado : 05/07/2025 10:18 pm
miquella
(@miquella)
Posts: 14
Mentor Respeitado
Topic starter
 

@trevas no discord: @playxtation

 
Postado : 05/07/2025 11:07 pm
Lou
 Lou
(@lou)
Posts: 25
Mentor Respeitado
 

Postado por: @miquella

Então isso é sossegado de fazer, mas digo fazer o próprio sistema de relíquia tipo o KPT, que você expande ele.

Criar o sistema de Relíquias não tem nada a ver com "extender" o inventário.

vou deixar +- o caminho das pedras daí vc estuda um pouco sobre:

  1.  Na pasta SrcServer/src/, crie um novo ficheiro de cabeçalho chamado RelicSystem.h.

  2. Conteúdo: Cole o código abaixo neste novo ficheiro. Ele define as "fichas cadastrais" das nossas relíquias.

    Ficheiro: SrcServer/src/RelicSystem.h

     
    #ifndef _RELIC_SYSTEM_H_
    #define _RELIC_SYSTEM_H_
    
    #include <vector>
    #include <string>
    #include <map>
    #include "character.h" // Inclui a definição de rsPLAYINFO
    
    // Estrutura que define as propriedades de uma Relíquia base.
    struct RelicInfo {
        int id;
        std::string name;
        std::string description;
        int bonus_attack;
        int bonus_defense;
        int bonus_hp;
        int bonus_mp;
        int bonus_critical;
    };
    
    // Estrutura que representa uma relíquia que um jogador possui no seu inventário.
    struct PlayerRelic {
        int relicID;
        bool isActive;
    };
    
    // Classe Singleton que vai gerir todo o nosso sistema.
    class cRelicSystem {
    private:
        // Guarda as definições de todas as relíquias que existem no jogo.
        std::map<int, RelicInfo> m_RelicDefinitions;
        cRelicSystem() {} // Construtor privado.
    
    public:
        static cRelicSystem* GetInstance() {
            static cRelicSystem instance;
            return &instance;
        }
    
        // Declaração das funções que vamos implementar mais tarde.
        void LoadRelicsFromFile(const char* filename);
        void OnPlayerLogin(rsPLAYINFO* player);
        void GiveRelicToPlayer(rsPLAYINFO* player, int relicID);
        // ... outras funções ...
    };
    
    #endif
    

 

Passo 3: Criar o Inventário de Relíquias no Jogador

 

Cada jogador precisa de um local na sua estrutura para guardar as relíquias que coleciona.

 Abra o ficheiro SrcServer/src/character.h (ou onde a struct rsPLAYINFO ou smCHAR estiver definida).

 Adicione o nosso novo inventário de relíquias.

Em character.h:

// ...
#include <vector> // Adicione este include no topo do ficheiro se ele não existir
#include "RelicSystem.h" // Adicione este include para que ele saiba o que é "PlayerRelic"
// ...

struct rsPLAYINFO {
    // ... todos os outros campos existentes (dwObjectSerial, smCharInfo, etc.) ...

    // --- INÍCIO DA NOSSA ADIÇÃO ---
    std::vector<PlayerRelic> Relics; // O inventário de relíquias pessoal de cada jogador.
    // --- FIM DA NOSSA ADIÇÃO ---
};
  • pasta SrcServer/src/, crie um novo ficheiro chamado RelicSystem.cpp.

  • Cole o código abaixo.

    #include "RelicSystem.h"
    #include <fstream>
    #include <sstream>
    #include <iomanip> // Necessário para std::quoted
    
    // Implementação da função que carrega as relíquias de um ficheiro de texto.
    void cRelicSystem::LoadRelicsFromFile(const char* filename) {
        std::ifstream file(filename);
        if (!file.is_open()) {
            // Log de erro: "Ficheiro de Relíquias não encontrado!"
            return;
        }
    
        std::string line;
        while (std::getline(file, line)) {
            if (line.empty() || line[0] == '#') continue;
    
            std::stringstream ss(line);
            RelicInfo relic;
    
            // Lê cada valor da linha e atribui à nossa struct RelicInfo.
            ss >> relic.id >> std::quoted(relic.name) >> std::quoted(relic.description);
            ss >> relic.bonus_attack >> relic.bonus_defense >> relic.bonus_hp >> relic.bonus_mp >> relic.bonus_critical;
    
            // Adiciona a relíquia carregada ao nosso "catálogo" de relíquias.
            m_RelicDefinitions[relic.id] = relic;
        }
    
        file.close();
        // Log: printf("Carregadas %d definições de relíquias.\n", m_RelicDefinitions.size());
    }
    
    // Deixaremos as outras funções para os próximos passos.
    // ...
    

    Abra o ficheiro principal do seu servidor OnSever.cpp 

    • No topo, adicione #include "RelicSystem.h".

    • Dentro da sua função main() ou WinMain(), logo no início, adicione a linha: cRelicSystem::GetInstance()->LoadRelicsFromFile("relics.txt");

      • Na pasta do seu servidor, crie um novo ficheiro de texto chamado relics.txt.

      • Daí vc se vira, deixei o grosso agora é com vc. boa sorte

 

 

 
Postado : 05/07/2025 11:49 pm
Raka and Prad reacted
miquella
(@miquella)
Posts: 14
Mentor Respeitado
Topic starter
 

Caraca mano, valeu vou estudar sobre. Estava a um tempo tentando entender como funcionava, você é um grande membro aqui desse forúm. Obrigado, alias, qual é o seu discord?

 
Postado : 05/07/2025 11:58 pm
noezinhos
(@noezinhos)
Posts: 6
Admin
 

qualquer coisa me adicione no discord, noezinhos

 
Postado : 06/07/2025 11:29 pm
Compartilhar:

Anúncio