[Source]How to add new NPC Dialog's

03/11/2011 04:10 .Crasy#1
So, Hallo erstmal an alle, die hier in der Flyff welt ihre Seele verloren haben :)

Ich will euch heute mal zeigen wie man eigene NPC Dialoge via WorldDialog.dll + WorldDialog.txt Addet in paar einfach Schritten, damit es auch 100% jeder Kapiert.

Als erstes brauchen wie folgende daten:

- WorldDialog.txt
- character.txt.txt
- character.inc
- WorldDialog.dll (Besser: Source)
- Mathe Kenntnisse

So dann fangen wir mal an :)


Als erstes öffnen wir mal die "character.inc" dann sieht das am anfang so aus:
PHP Code:
//이 파일 수정 시에 절대 EditPlus를 사용하시지 마십시요.
//유니코드 부분에 충돌이 있습니다.
//메모장을 사용하여 주십시요.

/*
국가별 NPC 출력 설정 방법
SetLang( 국가 디파인 )
SetLang( 국가 디파인, 국가 서브 디파인 )
SetOutput( truth )

setLang으로 국가 설정. SetOutput으로 설정된 국가에만 NPC를 출력 할지(ture), 출력 안할지(false) 설정.
기본값은 truth임
*/

/*
국가별 MMI 출력 설정 방법
AddMenuLang( LANG_KOR, 0, MMI_XXXX )
가운데 0은 SUB LANG 
여러국가에서 나와야 하는경우엔 여러개 써야함 

AddVendorSlotLang

    설명    : AddVendorSlot( 0, IDS_CHARACTER_INC_000022 );의 확장입니다.
    사용법    : AddVendorSlotLang( LANG_JAP, 0, 0, IDS_CHARACTER_INC_000022 );
    // 뒤 2개 인자는 AddVendorSlot과 동일 하고 앞의 두개는
    // 국가 디파인, 국가 서브 디파인입니다.
... usw 
dort scrollen wir mal ganz runter, und adden einen neuen NPC mit diesem Code:
PHP Code:
MaFi_TUT_CRASY
{
    
setting
    
{
        
SetOutputfalse );
        
AddMenuMMI_DIALOG );
        
SetImage
        
(            
            
IDS_CHARACTER_INC_000864
        
);
        
m_szDialog"MaFl_Herold.txt";
    }

    
SetName
    
(
        
IDS_CHARACTER_INC_000865
    
);

So, das "MaFi_Herold.txt" könnt ihr erstmal ignorieren, das zeig ich euch in meinem nächsten tut.

Wichtig ist im moment nur:
Name = "MaFi_TUT_CRASY"
Figur = "IDS_CHARACTER_INC_000864" (könnt z.b. auch ihn als Aibatt hin haun)
IG Name = "IDS_CHARACTER_INC_000865"

als nächstes addet ihr in der "Character.txt.txt" folgendes ganz unten:

PHP Code:
IDS_CHARACTER_INC_000864    Crasy Tut NPC!
IDS_CHARACTER_INC_000865    char_Bill.tga 
Wichtig ist, das die ID hinter "INC_" genau überein stimmt mit der ID in der Character.inc, so nun habt ihr eigentlich schon die Hälfte geschafft, aber zu hauptteil kommen wir erst jetzt.

Und zwar öffnet ihr nun mal die Source, btw nicht nur ihrgend eine Source sondern die "WorldDialog71.sln" diese findet ihr im Ordner "WORLDDIALOG" in der Source, wenn ihr dies getan habt öffnet ihr an der seite (bei mir rechts) die 2 dateien "NpcScript.cpp" und die dazugehörende ".h" datei, als erstes kommen wir zu der "NpcScript.cpp" datei wenn ihr die offen habt steht am anfang erstmal nur sowas:

PHP Code:
#include "stdafx.h"
#include "NpcScript.h"

/////////////////////////////////////////////////////////////////////////////
// extern functions
/////////////////////////////////////////////////////////////////////////////
extern        void InitFunctions();
extern        PFN GetFunction( const charszFunction );

/////////////////////////////////////////////////////////////////////////////
// global variable

usw.. 
Das ist für uns aber im moment nicht wichtig.
Geht nun in dieser datei ans ende bis zu "//Script End" addet vor dem "//Script End" folgenden code:

PHP Code:
void CNpcScript::mafl_Crasy_0()
{
    
SpeakNpcId(), 1267 );
    
SetScriptTimer15 );
}

void CNpcScript::mafl_Crasy_1()
{
}

void CNpcScript::mafl_Crasy_2()
{
    
AddKey);
    
AddKey10 );
}

void CNpcScript::mafl_Crasy_3()
{

}

void CNpcScript::mafl_Crasy_4()
{
    
SayZEILE );
}

void CNpcScript::mafl_Crasy_5()
{
            
}

void CNpcScript::mafl_Crasy_6()
{

}

void CNpcScript::mafl_Crasy_7()
{

}

void CNpcScript::mafl_Crasy_8()
{

}

void CNpcScript::mafl_Crasy_9()
{
    
SayZEILE );
}

void CNpcScript::mafl_Crasy_10()
{
    
SpeakNpcId(), 1268 );
    Exit();

So, dort seht ihr "Say( ZEILE );" dies ist momentan noch nicht wichtig, dazu kommen wir später, nun ist nur wichtig das ihr in der "NpcScript.h" datei folgendes addet ganz unten vor dem "};":

PHP Code:
    void mafl_Crasy_0();
    
void mafl_Crasy_1();
    
void mafl_Crasy_2();
    
void mafl_Crasy_3();
    
void mafl_Crasy_4();
    
void mafl_Crasy_5();
    
void mafl_Crasy_6();
    
void mafl_Crasy_7();
    
void mafl_Crasy_8();
    
void mafl_Crasy_9();
    
void mafl_Crasy_10(); 
so nun öffnet ihr mal die "WorldDialog.txt" datei und addet ganz unten das, was euer NPC sagen soll, ich nehme nun mal einfach "Hallo, mein Name ist: Crasy" und als 2. adde ich darunter "Wie lautet dein Name?" dann sollte das einfach mal so aussehen:
PHP Code:
Hallomein Name istCrasy
Wie lautet dein Name

ihr dürft es nicht hinter einander schreiben!

Okay, jetzt geht ihr auf den text "Hallo, mein Name ist: Crasy" oder einfach euern 1. Text, wenn ihr das habt macht ihr mal "STRG + G" dann bekomt ihr eine Zeile angezeigt, in meinem Fall sind das die "1251" und "1252", jetzt gehen wir mit diesen 2 zeilen wieder zurück zu unserer "NpcScript.cpp" und da seht ihr, das ich 2x "Say( ZEILE)" addet habe, diese ersetzt ihr nun durch:
PHP Code:
Say(1251und Say(1252
So, ihr habt es eigentlich geschafft, alles speichern und die WorldDialog Compilen, ihr den Res ordner ziehen und fertig, schon kann euer NPC Reden :)

Hier noch paar Codes, für die, die nicht auf den lw text stehen:

PHP Code:
#b = Ihr schreibt Fett
#FarbCode = Farbig schreiben, format: Hex
#i = Euer Text ist unterstrichen 
Wer noch, will, das der NPC den text wo ihr wollt öfters Say't dann müsst ihr
PHP Code:
SetScriptTimer15 ); 
zu 
SetScriptTimer
10 ); 
ändern, und der NPC ist schneller :)

Wer Probleme o. Fragen hat, kann die hier o. per PN stellen.

Ich werde bald auch ein Tut schreiben wo wir "Speak, AddKey" behandeln, bin im moment zu Müde dafür :D

Öhm ja, hier noch Credits:

Found + Geschrieben von: Crasy 100%
Wachhalten + Unterhaltung: Cross, danke auch dafür :)

So, das wars erstmal bis später.

Mfg euer Crasy :)
03/11/2011 04:36 ©ross#2
nice tut :)
auch wenns auf dauer an die nerven geht die agnzen v16 dialoge zu adden^^

greetings
03/11/2011 07:24 [Banane]#3
Quote:
Originally Posted by ©ross View Post
nice tut :)
auch wenns auf dauer an die nerven geht die agnzen v16 dialoge zu adden^^

greetings
Sollte kein Problem sein mit etwas Ausdauer und verlust zur Realität dürfte es schon schnell gehen :D

@Topic: Nice TuT weiter so!


Gruß Die [Banane]
03/11/2011 09:22 ©ross#4
@Crasy: die unterscheidung, ob WorldShout oder im Dialog fenster solltest du hervorheben/erklären ;) (ganz vergessen^^)

und auch wie zb
Speak( NpcId(), 1267 );

diese 1267 zustande kommt.

Klar kann mans sehn aber gehört zu nem Tut dabei^^
03/11/2011 09:33 Tbyte#5
gut erklärt, verständlich und übersichtlich :)
03/11/2011 14:24 Funnny94#6
sehr interessant...
habs getestet und leuft gut
03/11/2011 14:45 Flyff_Service#7
Gutes tut, aber wenn du nur AddKey(9); AddKey(10); schreibst ist mehr als die hälfte der Funktionen unnötig^^
03/11/2011 15:43 Sedrika#8
Einiges hast du vergessen =)

Zb wann welcher dialog auftritt, welche bedingung wo wie gesetzt wird.
Im Source part zu schreiben ist easy, doch diesen ingame richtig darzustellen, ist mancham nicht so.
03/11/2011 20:01 .Crasy#9
Quote:
Originally Posted by ©ross View Post
@Crasy: die unterscheidung, ob WorldShout oder im Dialog fenster solltest du hervorheben/erklären ;) (ganz vergessen^^)

und auch wie zb
Speak( NpcId(), 1267 );

diese 1267 zustande kommt.

Klar kann mans sehn aber gehört zu nem Tut dabei^^
Das ist tut 1 von 3 zu WorldDialog :s

Und auserdem war ich da Müde und hab es durch Zufall gefunden und schnell halt das tut geschrieben :)

Klar mach ich noch Speak und so, aber alles nach dem anderen :S
09/12/2012 23:42 miguelmig#10
Anyone could translate that into English?
09/13/2012 15:12 Sedrika#11
#moved
09/19/2012 21:49 'P!nkBeatzz'#12
Gutes TuT