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; 
        }
};

 

 

Edytowane przez Nathan.
  • 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

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...