[C++/Fix] Levelanzeige aktualisiert sich nach Levelup nicht direkt (by .Sanii)

  • Heyho,


    ihr kennt ja sicher folgende Problematik:


    Ihr levelt und levelt, aber die Levelanzeige an eurem Namen steht noch immer auf dem Level mit dem ihr angefangen habt.


    Ich hab rausgefunden was dort los war! Folgende Problematik:


    Das Spielerlevel wird an den Clienten nur in der __Create__ mitgegeben.
    Im UpdatePacket() fehlt es allerdings. Er führt im Verlaufe des UpdatePackets das RefreshTextTail() aus, welches das Level theoretisch auch wirklich aktualisiert mit dem wert "m_dwLevel". Dieser Wert wird aber nur gesetzt wenn der Spieler "Created" wird. Sprich Spawnen, Mounten etc.


    Mit diesem Fix zeig ich euch wie ihr ganz einfach das Level in das UpdatePacket() einbaut!


    Server:


    In packet.h suchen:


    Code
    1. typedef struct packet_update_char


    unter


    Code
    1. short sAlignment;
    2. hinzufügen:
    3. DWORD dwLevel;


    In char.cpp suchen:


    Code
    1. void CHARACTER::UpdatePacket()


    unter


    Code
    1. pack.sAlignment = m_iAlignment / 10;
    2. hinzufügen:
    3. pack.dwLevel = GetLevel();


    Client:


    In Packet.h suchen:


    Code
    1. typedef struct packet_update_char


    unter


    Code
    1. short sAlignment;
    2. hinzufügen:
    3. DWORD dwLevel;


    In PythonNetworkStreamPhaseGameActor.cpp suchen:


    Code
    1. bool CPythonNetworkStream::RecvCharacterUpdatePacket()


    unter


    Code
    1. kNetUpdateActorData.m_sAlignment=chrUpdatePacket.sAlignment;
    2. hinzufügen:
    3. kNetUpdateActorData.m_dwLevel=chrUpdatePacket.dwLevel;


    In NetworkActorManager.cpp suchen:


    Code
    1. void CNetworkActorManager::UpdateActor(const SNetworkUpdateActorData& c_rkNetUpdateActorData)


    unter


    Code
    1. pkInstFind->SetAlignment(c_rkNetUpdateActorData.m_sAlignment);
    2. hinzufügen:
    3. pkInstFind->SetLevel(c_rkNetUpdateActorData.m_dwLevel);


    In NetworkActorManager.h suchen:


    Code
    1. struct SNetworkUpdateActorData


    unter


    Code
    1. short m_sAlignment;
    2. hinzufügen:
    3. DWORD m_dwLevel;


    In InstanceBase.cpp suchen:


    Code
    1. void CInstanceBase::SetAlignment(short sAlignment)


    unter der Funktion adden wir diese Funktion:


    Code
    1. void CInstanceBase::SetLevel(DWORD level)
    2. {
    3. m_dwLevel = level;
    4. UpdateTextTailLevel(m_dwLevel);
    5. }


    In InstanceBaseEffect.cpp suchen:


    Code
    1. void CInstanceBase::UpdateTextTailLevel(DWORD level)


    ersetzen mit:



    In InstanceBase.h suchen:


    Code
    1. void SetAlignment(short sAlignment);


    darunter hinzufügen:


    Code
    1. void SetLevel(DWORD level);