[TuT Source] World Dialog

  • Hallo MMORPG-Core,

    in diesem sicherlich längeren Tutorial werde ich euch soviel ich kann von der World Dialog alles erklären.

    Sollte ich mehr später rausbekommen, wird es natürlich aktualisiert.

    _____________________________________

    Dann fangen wir mal an.

    Index

    • Was macht die World Dialog ?
    • Welche Funktionen gibt es ?
    • Wie kann ich NPC's einfügen ?
    • Wie weise ich einem NPC Funktionen hinzu ?
    • Beispiele für Funktionen.


    Was macht die World Dialog ?

    Spoiler anzeigen

    Die WorldDialog dient dazu, um bestimmte sachen in NPC's zu Programieren, damit diese bestimmte sachen machen, das erstellen einer Guild oder Job Changes nach Quests (oder auch ohne Quest).
    Mit der WorldDialog kann man aufjeden fall einiges machen.

    Welche Funktionen gibt es ?

    Spoiler anzeigen

    Hierzu hab ich mal eine Tabelle erstellt, die die Funktionen alle (die ich kenne) erklärt.
    Auf die Nutzung der Funktionen gehe ich später ein.

    [table="head"]Funktion|Beschreibung
    Say( DWORD szMsg )| Lässt den NPC im Dialog etwas sagen
    GetPlayerLvl()|Ermittelt das Spieler Level
    GetPlayerJob()|Ermittelt den Spieler Job
    SetQuestState(int nQuest, int n)|Setzt einen Quest Status
    GetQuestState(int nQuest)|Ermittelt nach die Quest Status
    SetQuest(int nQuest)|Setzt eine Quest
    RemoveQuest(int nQuest)|Entfernt eine Quest
    AddExp( int nExp )|Fügt EXP hinzu
    CreateItem( DWORD dwID, int nCount)|Erstellt ein Item
    AddGold(int nGold)|Fügt Penya hinzu
    RemoveGold( int nGold )|Entfernt Penya
    GetPlayerGold()|Fragt nach der Penya
    RemoveItem(DWORD dwID, int nCount )|Entfernt ein Item
    GetLocalEventState( int nEvent )|Fragt nach dem Event State
    InitStat()|Löscht alle Stat werte und gibt die Punkte wieder
    InitStr()|Löscht alle STR werte und gibt die Punkte wieder
    InitSta()|Löscht alle STA werte und gibt die Punkte wieder
    InitDex()|Löscht alle DEX werte und gibt die Punkte wieder
    InitInt()|Löscht alle INT werte und gibt die Punkte wieder
    GetItemNum( DWORD dwID )|Fragt nach der Anzahl eines Items
    RemoveAllItem( DWORD dwID )|Entfernt alle Items nach ID
    ChangeJob(int nJob )|Ändert die Job Klasse
    GetPlayerSex()|Fragt nach dem geschlecht des Spielers
    AddKey( DWORD szWord )|Fügt einen Key hinzu
    AddKey( DWORD szWord , DWORD szKey )|Fügt einen Key hinzu
    AddKey( DWORD szWord , DWORD szKey, int nParam )|Fügt einen Key hinzu
    IsParty()|Fragt nach der Party (Bool Wert)
    IsPartyMaster()|Fragt nach dem Leader der Party (Bool Wert)
    IsGuild()|Fragt nach der Guild ab (Bool Wert)
    IsGuildMaster()|Fragt nach dem Leader der Guild (Bool Wert)
    CreateGuild()|Erstellt eine Guild
    DestroyGuild()|Löscht eine Guild
    GetLang()|Fragt nach der LANG
    Exit()|Schließt das Dialog Fenster
    GetPlayerExpPercent()|Fragt nach der EXP des Spielers (9999 = 99.99%)
    SetLevel( int nSetLevel )|Setzt das Spieler Level
    AddGPPoint( int nAddGPPoint )|Fügt GP Punkte hinzu[/table]

    Wie kann ich NPC's einfügen ?

    Spoiler anzeigen

    Um einen NPC Einzufügen, muss man bestimmte sachen beachten.

    1. Einen NPC Namen nehmen, den es noch nicht gibt.
    2. Auf Groß-Klein Schreibweise achten.


    Hier mal ein Beispiels NPC, den ihr als Vorlage nehmen könnt:
    Dies ist der NPC Name, den ihr in der Character.inc stehen habt.
    Dies sind die Keys, die müssen so bleiben.

    Dieser Eintrag kommt in die NpcScrip.cpp

    In die NpcScript.h folgendes:

    Und in NpcScripHelper.cpp das hier:

    Wie weise ich einem NPC Funktionen hinzu ?

    Spoiler anzeigen


    Einem NPC kann man mit der Funktion AddKey( ... ) funktionen zu weisen, wenn man aber eigene Texte da haben will und den Key für die funktion ändern will, kann man AddKey( ..., ... ) mit den 2 Parametern nehmen.

    AddKey( DWORD szWord , DWORD szKey );
    v
    AddKey( n'te Zeile -1 , Key );
    Sagen wir euer Text befindet sich in Zeile 1501, dann müsst ihr als Zeile 1500 nehmen. Und key könnt ihr eine der Funktionen nehmen. Im beispiel werde ich 43 nehmen. So wäre dies dann:
    AddKey( 1500, 43 );

    Wenn ihr nun in der WorldDialog.txt in Zeile 1501 "Hallo" steht, wird beim klick darauf die Funktion in Key 43 aufgerufen.

    Nehmen wir uns mal Key 43 vor und machen da mal einen level up, wenn man es anklickt.

    Nun würd dies bei jedem klick darauf ein level up machen, wenn man allerdings verhindern will, dass es über das Maximale level geht, dann macht man eine If abfrage.

    In diesem beispiel soll 179 das Maximale Level darstellen.

    Beispiele für Funktionen

    Spoiler anzeigen


    Say( DWORD szMsg )

    Spoiler anzeigen


    szMsg ist die Zeile - 1 im Worlddialog, so wäre der Text in Zeile 1501 = 1500.

    Code
    Say( 1500 );


    GetPlayerLvl()

    Spoiler anzeigen


    Mit GetPlayerLvl() fragt man nach dem level eines chars ab.
    Beispiel der Nutzung:

    Code
    if GetPlayerLvl() == 179 {
    // dein code
    }


    GetPlayerJob()

    Spoiler anzeigen


    Mit GetPlayerJob() fragt man nach der Jobklasse des Spielers.
    Die Nutzung:

    Code
    if ( GetPlayerJob() == 7 ) { // 7 = Blade
    // dein code
    }


    AddExp( int nExp )

    Spoiler anzeigen


    Die Funktion AddExp( int nExp ) fügt einem Spieler eine bestimmte anzahl an EXP hinzu.
    Beispiel:

    Code
    AddExp( 5000 ) 
    oder um EXP abzuziehen 
    AddExp( -5000 )


    CreateItem( DWORD dwID, int nCount)

    Spoiler anzeigen


    Mit dieser Funktion erstellt man ein Item beim Character.
    Die Nutzung folgt auf 2 weisen:

    Code
    CreateItem( 21, 1 );
    Dies Wäre direkt anhand der ID oder
    CreateItem( II_WEA_SWO_WOODEN , 1 );
    Dies wäre anhand der Definition.


    AddGold(int nGold)

    Spoiler anzeigen


    Man kann damit Penya hinzufügen oder abziehen.
    [code]AddGold( 500 );
    oder
    AddGold( -500 );


    RemoveGold( int nGold )

    Spoiler anzeigen


    Diese funktion dient dazu um Penya zu removen.
    [code]RemoveGold( 500 );


    GetPlayerGold()

    Spoiler anzeigen


    Hiermit kann man nach der Penya Anzahl fragen, die der User hat.

    Code
    if( GetPlayerGold() > 500 ){
    // dein code
    }


    RemoveItem(DWORD dwID, int nCount )

    Spoiler anzeigen


    Hiermit kann man einem Spieler Items entfehrnen.

    Code
    RemoveItem( 21, 1 );
    oder
    RemoveItem( II_WEA_SWO_WOODEN, 1 );


    GetItemNum( DWORD dwID )

    Spoiler anzeigen


    Fragt nach der Anzahl der Items. Nutzung:

    Code
    if( GetItemNum( II_WEA_SWO_WOODEN ) == 1 ){
    // dein code
    }


    RemoveAllItem( DWORD dwID )

    Spoiler anzeigen


    Diese Funktion löscht jedes Item, mit der angegebenen dwID, was sich im Inventar befindet.

    Code
    RemoveAllItem( II_WEA_SWO_WOODEN );


    ChangeJob(int nJob )

    Spoiler anzeigen


    Hiermit kann man die JobKlasse eines Chars ändern.

    Code
    ChangeJob( 1 ) // 1 = Mercenary


    GetPlayerSex()

    Spoiler anzeigen


    Hiermit fragt man nach dem Geschlecht des Characters, dieser kann nur 0 (M) oder 1 (F) sein.

    Code
    if( GetPlayerSex() == 1 ){
    // dein code
    }


    AddKey( DWORD szWord )
    AddKey( DWORD szWord , DWORD szKey )
    AddKey( DWORD szWord , DWORD szKey, int nParam )

    Spoiler anzeigen


    Siehe oben im Thread bei NPC hinzufügen.


    IsParty()

    Spoiler anzeigen


    IsParty() ist eine Boolsche abfrage, welche true oder false haben kann.

    Code
    if( IsParty() == true ){
    // dein code
    }


    IsPartyMaster()

    Spoiler anzeigen


    Das selbe wie IsParty() nur das man hier Leader abfragt


    IsGuild()

    Spoiler anzeigen


    Ist das selbe wie IsParty(), nur das hier nach einer Guild abgefragt wird.


    IsGuildMaster()

    Spoiler anzeigen


    Ist das Selbe wie IsGuild(), nur das hier der Guild Master abgefragt wird.


    CreateGuild()

    Spoiler anzeigen


    Erstellt eine Guilde


    DestroyGuild()

    Spoiler anzeigen


    Löscht eine Guilde


    GetLang()

    Spoiler anzeigen


    Fragt nach der LANG des Clienten ab.

    Code
    if( GetLang() == LANG_ENG ){
    // dein code
    }


    Exit()

    Spoiler anzeigen


    Schließt das Dialogfenster.


    GetPlayerExpPercent()

    Spoiler anzeigen


    Fragt nach der EXP prozentrate des Characters

    Code
    if( GetPlayerExpPercent() == 9999 ){
    // dein code
    }

    In dem fall sind 9999 = 99,99% und 5938 wären 59,38%


    SetLevel( int nSetLevel )

    Spoiler anzeigen


    Mit SetLevel( int nSetLevel ) setzt man das Levels eines Spielers.

    Code
    SetLevel( 60 ); // Character auf Level 60 setzen.
    SetLevel( GetPlayerLvl() +/- 1 ); Character Level +/- 1.


    AddGPPoint( int nAddGPPoint )

    Spoiler anzeigen


    hiermit fügt ihr einem Spieler GP Punkte hinzu oder nehmt ihm bestimmte weg.

    Code
    AddGPPoint( 10 ); // Hinzufügen
    AddGPPoint( -10 ); // Entfernen


    DO NOT COPY & PASTE

  • Bringt mir nicht viel, weil ich kaum etwas davon verstehe - wird aber sicherlich vielen Leuten helfen.

    Schön strukturiert & übersichtlich - wie immer gute Arbeit von Sedrika!

    [LEFT][COLOR=#000000][FONT=Tahoma][SIGPIC][/SIGPIC]
    [/FONT][/COLOR][/LEFT]

  • Danke an euch beiden, alles von der World Dialog hab ich aber noch nicht verstanden =)
    Jedoch, wenn ich mehr weis, wird das hier mit hinein gebaut.

Jetzt mitmachen!

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