Metin2 C++26 - Automatic Packet Registration cu Reflection
Aceasta implementare automatizeaza inregistrarea packet-urilor Metin2 folosind C++26 Reflection si annotations. Nu mai trebuie sa adaugi manual cate un Set in constructorul CPacketInfoCG pentru fiecare packet nou.
- packet-urile sunt gasite automat la compile-time;
- configurarea se face direct prin annotation;
- reduce sansele sa uiti inregistrarea unui packet;
- permite verificari suplimentare pentru packet-uri;
- necesita C++26 si GCC 16.
*Link download / Code:
Pentru aceasta implementare ai nevoie de C++26 si GCC 16.
Descarca fisierul refl.hpp:
Implementarea foloseste un metadata struct pentru informatiile packet-ului, precum header-ul, numele, sequence-ul si daca packet-ul este dynamic.
Pentru un packet nou, in loc sa adaugi manual Set in CPacketInfoCG, packet-ul primeste annotation direct pe structura sa.
Exemplu de annotation:
Code:
struct[[= PacketMeta{HEADER_CG_JOIN, "ArenaJoin"}]] CGArenaJoinPacket-urile sunt tinute intr-un namespace comun, iar functia collect_packets foloseste C++26 Reflection pentru a cauta tipurile care contin metadata PacketMeta.
Lista este generata la compile-time si salvata in packet_list.
Functia register_one citeste metadata packet-ului si apeleaza automat CNetworkPacketHeaderMap::Set.
In final, functia de register parcurge lista generata la compile-time si inregistreaza toate packet-urile gasite.
Mock-ul complet oferit de autor poate fi gasit aici:
Astfel, cand adaugi un packet nou, nu mai trebuie sa modifici manual constructorul CPacketInfoCG. Este suficient ca structura packet-ului sa aiba annotation-ul necesar.


la acest mesaj și conținutul se va afișa automat.
