[TuT Source] World Dialog

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • [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

      Quellcode

      1. void CNpcScript::[COLOR=RoyalBlue]BEISPIEL_NPC[/COLOR][COLOR=Red]_0[/COLOR]()
      2. {
      3. Speak( NpcId(), 535 );
      4. SetScriptTimer( 15 );
      5. }
      6. void CNpcScript::[COLOR=RoyalBlue]BEISPIEL_NPC[/COLOR][COLOR=Red]_1[/COLOR]()
      7. {
      8. switch( Random( 3 ) )
      9. {
      10. case 0: PlaySound( 536 ); break;
      11. case 1: PlaySound( 537 ); break;
      12. case 2: PlaySound( 538 ); break;
      13. }
      14. LaunchQuest();
      15. }
      16. void CNpcScript::[COLOR=RoyalBlue]BEISPIEL_NPC[/COLOR][COLOR=Red]_2[/COLOR]()
      17. {
      18. }
      19. void CNpcScript::[COLOR=RoyalBlue]BEISPIEL_NPC[/COLOR][COLOR=Red]_3[/COLOR]()
      20. {
      21. }
      22. void CNpcScript::[COLOR=RoyalBlue]BEISPIEL_NPC[/COLOR][COLOR=Red]_4[/COLOR]()
      23. {
      24. }
      25. void CNpcScript::[COLOR=RoyalBlue]BEISPIEL_NPC[/COLOR][COLOR=Red]_5[/COLOR]()
      26. {
      27. }
      28. void CNpcScript::[COLOR=RoyalBlue]BEISPIEL_NPC[/COLOR][COLOR=Red]_6[/COLOR]()
      29. {
      30. }
      31. void CNpcScript::[COLOR=RoyalBlue]BEISPIEL_NPC[/COLOR][COLOR=Red]_7[/COLOR]()
      32. {
      33. }
      34. void CNpcScript::[COLOR=RoyalBlue]BEISPIEL_NPC[/COLOR][COLOR=Red]_8[/COLOR]()
      35. {
      36. }
      37. void CNpcScript::[COLOR=RoyalBlue]BEISPIEL_NPC[/COLOR][COLOR=Red]_9[/COLOR]()
      38. {
      39. }
      40. void CNpcScript::[COLOR=RoyalBlue]BEISPIEL_NPC[/COLOR][COLOR=Red]_26[/COLOR]()
      41. {
      42. }
      43. void CNpcScript::[COLOR=RoyalBlue]BEISPIEL_NPC[/COLOR][COLOR=Red]_42[/COLOR]()
      44. {
      45. }
      46. void CNpcScript::[COLOR=RoyalBlue]BEISPIEL_NPC[/COLOR][COLOR=Red]_43[/COLOR]()
      47. {
      48. }
      49. void CNpcScript::[COLOR=RoyalBlue]BEISPIEL_NPC[/COLOR][COLOR=Red]_10[/COLOR]()
      50. {
      51. switch( Random( 2 ) )
      52. {
      53. case 0: PlaySound( 552 ); break;
      54. case 1: PlaySound( 553 ); break;
      55. }
      56. Speak( NpcId(), 554 );
      57. Exit();
      58. }
      Alles anzeigen
      In die NpcScript.h folgendes:

      Quellcode

      1. void [COLOR=RoyalBlue]BEISPIEL_NPC[/COLOR][COLOR=Red]_0[/COLOR]();
      2. void [COLOR=RoyalBlue]BEISPIEL_NPC[/COLOR][COLOR=Red]_1[/COLOR]();
      3. void [COLOR=RoyalBlue]BEISPIEL_NPC[/COLOR][COLOR=Red]_2[/COLOR]();
      4. void [COLOR=RoyalBlue]BEISPIEL_NPC[/COLOR][COLOR=Red]_3[/COLOR]();
      5. void [COLOR=RoyalBlue]BEISPIEL_NPC[/COLOR][COLOR=Red]_4[/COLOR]();
      6. void [COLOR=RoyalBlue]BEISPIEL_NPC[/COLOR][COLOR=Red]_5[/COLOR]();
      7. void [COLOR=RoyalBlue]BEISPIEL_NPC[/COLOR][COLOR=Red]_6[/COLOR]();
      8. void [COLOR=RoyalBlue]BEISPIEL_NPC[/COLOR][COLOR=Red]_7[/COLOR]();
      9. void [COLOR=RoyalBlue]BEISPIEL_NPC[/COLOR][COLOR=Red]_8[/COLOR]();
      10. void [COLOR=RoyalBlue]BEISPIEL_NPC[/COLOR][COLOR=Red]_9[/COLOR]();
      11. void [COLOR=RoyalBlue]BEISPIEL_NPC[/COLOR][COLOR=Red]_26[/COLOR]();
      12. void[COLOR=RoyalBlue] BEISPIEL_NPC[/COLOR][COLOR=Red]_42[/COLOR]();
      13. void [COLOR=RoyalBlue]BEISPIEL_NPC[/COLOR][COLOR=Red]_43[/COLOR]();
      14. void [COLOR=RoyalBlue]BEISPIEL_NPC[/COLOR][COLOR=Red]_10[/COLOR]();
      Alles anzeigen
      Und in NpcScripHelper.cpp das hier:

      Quellcode

      1. {"[COLOR=deepskyblue]BEISPIEL_NPC[/COLOR][COLOR=red]_0[/COLOR]", &CNpcScript::[COLOR=deepskyblue]BEISPIEL_NPC[/COLOR][COLOR=red]_0[/COLOR]},
      2. {"[COLOR=deepskyblue]BEISPIEL_NPC[/COLOR][COLOR=red]_1[/COLOR]", &CNpcScript::[COLOR=deepskyblue]BEISPIEL_NPC[/COLOR][COLOR=red]_1[/COLOR]},
      3. {"[COLOR=deepskyblue]BEISPIEL_NPC[/COLOR][COLOR=red]_2[/COLOR]", &CNpcScript::[COLOR=deepskyblue]BEISPIEL_NPC[/COLOR][COLOR=red]_2[/COLOR]},
      4. {"[COLOR=deepskyblue]BEISPIEL_NPC[/COLOR][COLOR=red]_3[/COLOR]", &CNpcScript::[COLOR=deepskyblue]BEISPIEL_NPC[/COLOR][COLOR=red]_3[/COLOR]},
      5. {"[COLOR=deepskyblue]BEISPIEL_NPC[/COLOR][COLOR=red]_4[/COLOR]", &CNpcScript::[COLOR=deepskyblue]BEISPIEL_NPC[/COLOR][COLOR=red]_4[/COLOR]},
      6. {"[COLOR=deepskyblue]BEISPIEL_NPC[/COLOR][COLOR=red]_5[/COLOR]", &CNpcScript::[COLOR=deepskyblue]BEISPIEL_NPC[/COLOR][COLOR=red]_5[/COLOR]},
      7. {"[COLOR=deepskyblue]BEISPIEL_NPC[/COLOR][COLOR=red]_6[/COLOR]", &CNpcScript::[COLOR=deepskyblue]BEISPIEL_NPC[/COLOR][COLOR=red]_6[/COLOR]},
      8. {"[COLOR=deepskyblue]BEISPIEL_NPC[/COLOR][COLOR=red]_7[/COLOR]", &CNpcScript::[COLOR=deepskyblue]BEISPIEL_NPC[/COLOR][COLOR=red]_7[/COLOR]},
      9. {"[COLOR=deepskyblue]BEISPIEL_NPC[/COLOR][COLOR=red]_8[/COLOR]", &CNpcScript::[COLOR=deepskyblue]BEISPIEL_NPC[/COLOR][COLOR=red]_8[/COLOR]},
      10. {"[COLOR=deepskyblue]BEISPIEL_NPC[/COLOR][COLOR=red]_9[/COLOR]", &CNpcScript::[COLOR=deepskyblue]BEISPIEL_NPC[/COLOR][COLOR=red]_9[/COLOR]},
      11. {"[COLOR=deepskyblue]BEISPIEL_NPC[/COLOR][COLOR=red]_26[/COLOR]", &CNpcScript::[COLOR=deepskyblue]BEISPIEL_NPC[/COLOR][COLOR=red]_26[/COLOR]},
      12. {"[COLOR=deepskyblue]BEISPIEL_NPC[/COLOR][COLOR=red]_42[/COLOR]", &CNpcScript::[COLOR=deepskyblue]BEISPIEL_NPC[/COLOR][COLOR=red]_42[/COLOR]},
      13. {"[COLOR=deepskyblue]BEISPIEL_NPC[/COLOR][COLOR=red]_43[/COLOR]", &CNpcScript::[COLOR=deepskyblue]BEISPIEL_NPC[/COLOR][COLOR=red]_43[/COLOR]},
      14. {"[COLOR=deepskyblue]BEISPIEL_NPC[/COLOR][COLOR=red]_10[/COLOR]", &CNpcScript::[COLOR=deepskyblue]BEISPIEL_NPC[/COLOR][COLOR=red]_10[/COLOR]},
      Alles anzeigen



      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.

      Quellcode

      1. [align=left]void CNpcScript::[COLOR=RoyalBlue]BEISPIEL_NPC[/COLOR][COLOR=Red]_2[/COLOR]()
      2. {
      3. AddKey( 1500, 43 );
      4. AddKey( 10 );
      5. }
      6. void CNpcScript::[COLOR=RoyalBlue]BEISPIEL_NPC[/COLOR][COLOR=Red]_43[/COLOR]()
      7. {
      8. SetLevel( GetPlayerLvl() + 1 );
      9. }
      10. [/align]
      Alles anzeigen
      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.

      Quellcode

      1. [align=left]void CNpcScript::[COLOR=RoyalBlue]BEISPIEL_NPC[/COLOR][COLOR=Red]_2[/COLOR]()
      2. {
      3. AddKey( 1500, 43 );
      4. AddKey( 10 );
      5. }
      6. [/align]
      7. [align=left]void CNpcScript::[COLOR=RoyalBlue]BEISPIEL_NPC[/COLOR][COLOR=Red]_43[/COLOR]()
      8. {
      9. if( GetPlayerLvl() < 179 ){
      10. SetLevel( GetPlayerLvl() + 1 );
      11. } else {
      12. Exit();
      13. }
      14. }
      15. [/align]
      Alles anzeigen
      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.

      Quellcode

      1. Say( 1500 );

      GetPlayerLvl()
      Spoiler anzeigen

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

      Quellcode

      1. if GetPlayerLvl() == 179 {
      2. // dein code
      3. }

      GetPlayerJob()
      Spoiler anzeigen

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

      Quellcode

      1. if ( GetPlayerJob() == 7 ) { // 7 = Blade
      2. // dein code
      3. }

      AddExp( int nExp )
      Spoiler anzeigen

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

      Quellcode

      1. AddExp( 5000 )
      2. oder um EXP abzuziehen
      3. AddExp( -5000 )

      CreateItem( DWORD dwID, int nCount)
      Spoiler anzeigen

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

      Quellcode

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

      AddGold(int nGold)
      Spoiler anzeigen

      Man kann damit Penya hinzufügen oder abziehen.

      Quellcode

      1. AddGold( 500 );
      2. oder
      3. AddGold( -500 );
      4. [/spoiler]
      5. [B]RemoveGold( int nGold )[/B]
      6. [spoiler=0]
      7. Diese funktion dient dazu um Penya zu removen.
      8. [code]RemoveGold( 500 );
      9. [/spoiler]
      10. [B]GetPlayerGold()[/B]
      11. [spoiler=0]
      12. Hiermit kann man nach der Penya Anzahl fragen, die der User hat.
      13. [code]if( GetPlayerGold() > 500 ){
      14. // dein code
      15. }
      Alles anzeigen

      RemoveItem(DWORD dwID, int nCount )
      Spoiler anzeigen

      Hiermit kann man einem Spieler Items entfehrnen.

      Quellcode

      1. RemoveItem( 21, 1 );
      2. oder
      3. RemoveItem( II_WEA_SWO_WOODEN, 1 );

      GetItemNum( DWORD dwID )
      Spoiler anzeigen

      Fragt nach der Anzahl der Items. Nutzung:

      Quellcode

      1. if( GetItemNum( II_WEA_SWO_WOODEN ) == 1 ){
      2. // dein code
      3. }

      RemoveAllItem( DWORD dwID )
      Spoiler anzeigen

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

      Quellcode

      1. RemoveAllItem( II_WEA_SWO_WOODEN );

      ChangeJob(int nJob )
      Spoiler anzeigen

      Hiermit kann man die JobKlasse eines Chars ändern.

      Quellcode

      1. ChangeJob( 1 ) // 1 = Mercenary

      GetPlayerSex()
      Spoiler anzeigen

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

      Quellcode

      1. if( GetPlayerSex() == 1 ){
      2. // dein code
      3. }

      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.

      Quellcode

      1. if( IsParty() == true ){
      2. // dein code
      3. }

      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.

      Quellcode

      1. if( GetLang() == LANG_ENG ){
      2. // dein code
      3. }

      Exit()
      Spoiler anzeigen

      Schließt das Dialogfenster.

      GetPlayerExpPercent()
      Spoiler anzeigen

      Fragt nach der EXP prozentrate des Characters

      Quellcode

      1. if( GetPlayerExpPercent() == 9999 ){
      2. // dein code
      3. }
      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.

      Quellcode

      1. SetLevel( 60 ); // Character auf Level 60 setzen.
      2. 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.

      Quellcode

      1. AddGPPoint( 10 ); // Hinzufügen
      2. AddGPPoint( -10 ); // Entfernen





      DO NOT COPY & PASTE
    • Werbung zur Unterstützung des Forums ( Bitte AddBlocker deaktivieren )