Anúncio
[PEDIDO] EXTENSÃO DO INVENTÁRIO

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?
pegue a referencia de aneis / shelton e redirecione as coordenaras e perimetro no proprio inventario

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

Postado por: @miquellaEntã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:
-
Na pasta
SrcServer/src/
, crie um novo ficheiro de cabeçalho chamadoRelicSystem.h
. -
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 chamadoRelicSystem.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()
ouWinMain()
, 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
-
-

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?

qualquer coisa me adicione no discord, noezinhos
- 15 Fóruns
- 83 Tópicos
- 311 Posts
- 0 Online
- 102 Membros