Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • ✅ Pełny dostęp do działów i ukrytych treści
    • ✅ Możliwość pisania i odpowiadania w tematach
    • ✅ System prywatnych wiadomości
    • ✅ Zbieranie reputacji i rozwijanie swojego profilu
    • ✅ Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[C++] Modernizacja i optymalizacja struktury DynamicCharacterPtr.


Rekomendowane odpowiedzi

Opublikowano (edytowane)

Witajcie !

Niedługo opublikuję mój nowy projekt czystego źródła. Mam ambicję, by stał się on najlepszą darmową bazą do rozpoczęcia pracy nad własnym serwerem.

Stawiając na jakość i chcąc być na bieżąco z najnowszymi standardami C++, postanowiłem przeprowadzić solidną przebudowę struktury DynamicCharacterPtr.
__________________________________________________________________________________________________________________


char.cpp

Szukamy:


 

Cytat

 

LPCHARACTER DynamicCharacterPtr::Get() const {
    LPCHARACTER p = nullptr;
    if (is_pc) {
        p = CHARACTER_MANAGER::Instance().FindByPID(id);
    } else {
        p = CHARACTER_MANAGER::Instance().Find(id);
    }
    return p;
}

DynamicCharacterPtr& DynamicCharacterPtr::operator=(LPCHARACTER character) {
    if (character == nullptr) {
        Reset();
        return *this;
    }
    if (character->IsPC()) {
        is_pc = true;
        id = character->GetPlayerID();
    } else {
        is_pc = false;
        id = character->GetVID();
    }
    return *this;
}

 


Zamieniamy na :

 

Cytat

 

LPCHARACTER DynamicCharacterPtr::Get() const 
{
    auto& manager = CHARACTER_MANAGER::instance();
    return is_pc ? manager.FindByPID(id) : manager.Find(id);
}

DynamicCharacterPtr& DynamicCharacterPtr::operator=(LPCHARACTER character) 
{
    if (!character) 
    {
        Reset();
        return *this;
    } 
    
    is_pc = character->IsPC();
    id = is_pc ? character->GetPlayerID() : character->GetVID();
    
    return *this;
}

 

_______________________________________________________________________________________________

char.h

Szukamy:

 

Cytat

 

// <Factor> Dynamically evaluated CHARACTER* equivalent.
// Referring to SCharDeadEventInfo.
struct DynamicCharacterPtr {
    DynamicCharacterPtr() : is_pc(false), id(0) {}
    DynamicCharacterPtr(const DynamicCharacterPtr& o)
        : is_pc(o.is_pc), id(o.id) {}

    // Returns the LPCHARACTER found in CHARACTER_MANAGER.
    LPCHARACTER Get() const; 
    // Clears the current settings.
    void Reset() {
        is_pc = false;
        id = 0;
    }

    // Basic assignment operator.
    DynamicCharacterPtr& operator=(const DynamicCharacterPtr& rhs) {
        is_pc = rhs.is_pc;
        id = rhs.id;
        return *this;
    }
    // Supports assignment with LPCHARACTER type.
    DynamicCharacterPtr& operator=(LPCHARACTER character);
    // Supports type casting to LPCHARACTER.
    operator LPCHARACTER() const {
        return Get();
    }

    bool is_pc;
    uint32_t id;
};

 


Zamieniamy na :

 

Cytat

 

struct DynamicCharacterPtr 
{
    private:
        bool is_pc = false;
        uint32_t id = 0;
    
    public:
        DynamicCharacterPtr() = default;
        DynamicCharacterPtr(const DynamicCharacterPtr& o) = default;
        DynamicCharacterPtr& operator=(const DynamicCharacterPtr& rhs) = default;
        DynamicCharacterPtr(DynamicCharacterPtr&& o) noexcept = default;
        DynamicCharacterPtr& operator=(DynamicCharacterPtr&& rhs) noexcept = default;
        
        LPCHARACTER Get() const; 
        
        void Reset() 
        {
            is_pc = false;
            id = 0;
        }

        DynamicCharacterPtr& operator=(LPCHARACTER character);
        operator LPCHARACTER() const 
        {
            return Get();
        }
        
        bool IsPC() const 
        {
            return is_pc; 
        }
        
        uint32_t GetID() const 
        {
            return id; 
        }
        
        void SetIsPC(bool value) 
        {
            is_pc = value; 
        }
        
        void SetID(uint32_t value) 
        {
            id = value; 
        }
};

 

 

  • 1 rok później...
Opublikowano

Temat został opublikowany w nie tym dziale co trzeba, tematy z C++ powinny być publikowane w tym dziale : Metin2 - Questy, Dify, C++, Python - MPCforum.pl - MultiPlayer Community

ostrzegam na przyszłość a sam temat zostanie przeniesiony do odpowiedniego działu. 

╔═▣◎▣═══ SILENCE ═══▣◎▣═╗
» Cień ostrza. Cisza przed burzą. «
☯ Wojownik starego świata ☯

⛩️Droga bushido ⛩️

Szept nocy... znikam, zanim mnie zauważysz.

════════════════════════

1.gif

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...