[Source] NPC im World nicht laden lassen

  • Hallo M-Core'ler/in,

    in diesem kleinen Source Tut, möchte ich euch zeigen, wie man es hinbekommt, dass NPC, in der World nicht geladen werden, obwohl sie vom Beast gesetzt worden sind. Dies ist genauso wie die GuildWar NPC's, die man bsp. im 2ten Channel "aussperrt".

    Fangen wir dann mal an:

    _______________________________________________

    Wir gehen im WorldServer und fügen in die VersionCommon.h folgendes hinzu:

    PHP
    #define        __NO_POSTBOX

    Damit, definieren wir die Funktion, damit wir später den Sourcepart auch direkt im Source wieder weg lassen kann.

    Als nächstes dann öffnen wir den WorldServer.cpp und gehen ganz nach unten und fügen vor dem s.GetToken(); dies hier ein:

    PHP
    #ifdef __NO_POSTBOX
            else if ( s.Token == "NO_POSTBOX" )
            {
                g_eLocal.SetState( EVE_NO_POSTBOX, 1 );
            }
    #endif // __NO_POSTBOX

    Mit dem #ifdef __NO_POSTBOX setzen wir fest, dass dieser nur dann eine Wirkung hat, wenn wir in der VersionCommon.h die __NO_POSTBOX definiert haben.
    Bei
    NO_POSTBOX setzen wir den Text ein, den wir dann später in
    die WorldServer.ini einsetzen, dieser muss dann auch genauso geschrieben sein, wie es im Source festgesetzt wird.

    Und unten bei g_eLocal.SetState( EVE_NO_POSTBOX, 1 );
    setzen wir, wenn der Text
    NO_POSTBOXin der WorldServer.ini gesetzt ist die EVE_NO_POSTBOX auf 1, damit diese einen TRUE sogesehen erhällt.


    Anschließend gehen wir in die flyffevent.h und fügen im enum bereich irgendwo diesen Abschnitt hinzu:

    PHP
    #ifdef __NO_POSTBOX
        EVE_NO_POSTBOX,
    #endif // __NO_POSTBOX

    dabei nutzen wir wieder #ifdef __NO_POSTBOX, damit dieser nur solange eine Wirkung hat, wie es definiert ist.

    Nun kommen wir auch schon fast zum Ende des Tut's, dazu gehen wir dann nun noch in die worldfile.cpp und suchen nach der Funktion BOOL CWorld::IsUsableDYO( CObj* pObj ) , haben wir diese, können wir dann unter

    PHP
    LPCHARACTER pCharacter    = ( (CMover*)pObj )->GetCharacter();
            if( pCharacter )
            {


    folgendes hinzufügen:

    PHP
    #ifdef __NO_POSTBOX
                // Dont Load PostBox
                if( stricmp( pCharacter->m_szKey, "MaFl_Postbox" ) == 0 )
                {
                    if( g_eLocal.GetState( EVE_NO_POSTBOX ) == TRUE )
                        return FALSE;
                }
    #endif // __NO_POSTBOX

    Im MaFl_Postboxwird der Name des NPC's eingetragen, welchen man in der Character.inc hat.

    if( g_eLocal.GetState( EVE_NO_POSTBOX ) == TRUE )
    dieser abschnitt überprüft den Status von
    EVE_NO_POSTBOX auf den Wert, welcher hinter dem == ist, in diesem Fall TRUE.

    _______________________________________________


    Damit war es dann auch mit dem Tutorial, wie man NPC's in der World ausgrentz.

    Credits: Sedrika

    DON'T COPY & PASTE

  • Ich lass die farben so, da ich es so gemacht hab, dass man direkt sieht, welches was ist.

    Und die farben sind ja vom PHP-Tag vorgegeben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!