[RLS] Ein Item Core-übergreifend einem anderem Spieler geben

  • Guten Tag,


    ich veröffentliche hier eine kleine Funktionalität, welche für den ein oder anderen vielleicht nützlich ist.


    Was kann man damit machen?
    Ihr könnt mithilfe dieser Kleinigkeit, ein Item erstellen, für welches die Informationen (Vnum, Anzahl, Sockets, ...) auf einem anderem Game-Core liegen, als der, auf dem es erstellt werden soll.


    Um das ganze einzubauen, benötigt ihr den Source der Game- und des DB-Cores!
    Erstellt ein Backup, falls ihr nicht genau wisst, was ihr da tut.




    Zum Einbau:
    1. Öffnet die service.h ("common"-Ordner) und fügt folgende #define-Direktive hinzu:

    Code
    1. // Enables function for giving items cross core
    2. #define __GIVE_ITEM_CROSS_CORE__


    2. Öffnet die tables.h ("common"-Ordner) und fügt folgende Header für die Game-DB-Core-Kommunikation hinzu:


    3. Fügt der Item-Manager-Klasse die Methode GiveItemCrossCore hinzu.
    Öffnet dazu die Datei item_manager.h (Game-Core-Source) und hängt unter der Methode GetSpecialGroupFromItem folgendes an:

    Code
    1. #ifdef __GIVE_ITEM_CROSS_CORE__
    2. void GiveItemCrossCore(TPlayerItem* pkItem);
    3. #endif


    Öffnet nun noch die Datei item_manager.cpp (Game-Core-Source) und fügt ganz unten folgendes hinzu:


    4. Öffnet die Datei ClientManager.cpp (DB-Core-Source) und fügt in das switch-Statement in der Methode ProcessPackets der Klasse ClientManager ("void CClientManager::ProcessPackets(CPeer * peer)" suchen) folgenden case-Block ein:

    Code
    1. #ifdef __GIVE_ITEM_CROSS_CORE__
    2. case HEADER_GD_GIVE_ITEM_CROSS_CORE:
    3. GiveItemCrossCore(((TPlayerItem*)data));
    4. break;
    5. #endif


    5. Öffnet die ClientManager.h Datei (DB-Core-Source) und fügt der ClientManager-Klasse die Methode GiveItemCrossCore hinzu. Kopiert dazu einfach unter die Methode BlockChat folgendes:

    Code
    1. #ifdef __GIVE_ITEM_CROSS_CORE__
    2. void GiveItemCrossCore(TPlayerItem* pkItem);
    3. #endif


    Öffnet nun die Datei ClientManager.cpp (DB-Core-Source) und hängt das an:


    6. Öffnet die input_db.cpp (Game-Core-Source) und fügt in das switch-Statement in der Methode Analyze der InputDB-Klasse ("int CInputDB::Analyze(LPDESC d, BYTE bHeader, const char * c_pData)" suchen) diesen case-Block ein:

    Code
    1. #ifdef __GIVE_ITEM_CROSS_CORE__
    2. case HEADER_DG_GIVE_ITEM_CROSS_CORE:
    3. GiveItemCrossCore(((TPlayerItem*)c_pData));
    4. #endif


    7. Öffnet nun noch die input.h Datei (Game-Core-Source) und fügt der InputDB-Klasse folgende Methode hinzu:

    Code
    1. #ifdef __GIVE_ITEM_CROSS_CORE__
    2. void GiveItemCrossCore(TPlayerItem* pkItemInfo);
    3. #endif


    Zu guter letzt hängt ihr nun noch an die Datei input_db.cpp (Game-Core-Source) folgendes an:




    Nun könnt ihr bspw. so ein Item Core-übergreifend erstellen:



    Was ihr nun damit anstellt, ist eure Sache. :)


    Mit freundlichen Grüßen
    Yiv