[Text Tutorial] Neuer Tauschhändler

02/19/2011 19:21 rädsun#1
Hallo ePvPers,
ich möchte Euch heute mal zeigen, wie man einen neuen Tauschhandel NPC einfügt.

Quote:
Was alles beschrieben wird in dem Tutorial:
- Wie man einen NPC aufstellt
- Wie man diesem einen Namen gibt
- Wie man diesem NPC das Tauschhandelsmenü zuordnet
- Wie man den Inhalt der Tausche definiert (ja das Wort Tausche ist der Plural von Tausch XD)
Quote:
Was wir benötigen:

- dyoManager [[Only registered and activated users can see links. Click Here To Register...]]
- Exchange_Script.txt
- character.inc
- character.txt.txt
- textClient.inc
- propMover.txt
- propMover.txt.txt
- defineObj.h
- propItem.txt
- propitem.txt.txt
Wir beginnen, indem wir einen neuen X-beliebigen NPC aufstellen.
Dazu öffnen wir unseren DyoManager und und gehen auf "File" und dann auf "Open". Wir gehen in den Resource Ordner (!! Wichtig !! dass es der Resource Ordner und nicht der Client ist, NPCs sind Serverside!)> World und öffnen den "Wd Ordner" der jeweiligen Welt. Dort wird sich eine Datei namens "WdXYZ.dyo" befinden.
Diese öffnen wir durch einen Doppelklick.
Möglicherweise sind dort (je nach World) schon einige NPCs eingetragen, das macht aber nichts.
Das Ganze könnte so aussehen:

Quote:
5
180
0
0
0
6947
100
3217
0
1
1
5
984
-1
0
2
MaFl_TestNPC
1
0
----------
5
0
0
0
0
7940,799
159,0761
2405,927
1
1
1
5
220
-1
0
2
MaFl_DrEstern
1
0
----------
-1
Die "-1" muss ganz zum Schluss unter dem Bindestrichen des letzten definierten NPCs der Map stehen, ohne diese werden die NPCs nicht gespawnt.

Wir nehmen uns zur Definition der Zahlen mal einen NPC, d.h. bis zum "----------" vor.

Quote:
5
180
0
0
0
6947
100
3217
0
1
1
5
984
-1
0
2
MaFl_TestNPC
1
0
----------
Die °Zahl, bzw. die Richtung, in die der NPC schaut.
Die Koordinaten des NPCs, bzw. wo er sich auf der Map befinden soll
Die Model ID des NPCs (wo man diese findet, später mehr)
Der Definitionsname des NPCs (nicht der inGame Name)
Zeigt an, dass hier die Definition des NPCs endet, darunter beginnt die eines Anderen.

So, da wir das nun wissen, gehen wir in FlyFF inGame, suchen uns den Standort des NPCs heraus und drücken 1x die Taste "9". Damit ist die jetzige Position in der Datei "Postion.txt" gespeichert, welche sich im Client finden lässt.
Jetzt müssen wir uns überlegen, wie der NPC ausschauen soll.
In meinem Beispiel möchte ich einen NPC, der wie ein Giant Aibatt aussieht. Dazu öffne ich nun die Datei "propMover.txt.txt" und suche nach
Quote:
Giant Aibatt
und kopiere mir den nebenstehenden Code:
Quote:
IDS_PROPMOVER_TXT_000012
Danach öffne ich die propMover.txt und suche nach der kopierten ID.
Ich finde dann
Quote:
MI_AIBATT4
Dieses "MI_AIBATT4" kopiere ich mir wiederum und gehe in die Datei "defineObj.h" und suche danach.
Quote:
#define MI_AIBATT4 71
Model ID

Die Model ID des Giant Aibatts ist also 71.

Nun öffnen wir wieder unseren DyoManager und darin die jeweilige "WdMAPNAME".dyo Datei.
und tragen alles ein.

Quote:
5
180
0
0
0
6947
100
3217
0
1
1
5
71
-1
0
2
MaFl_Tauschhandel
1
0
----------
Einen Namen können wir uns aussuchen. Ich nehme "MaFl_Tauschhandel", die ID des Models haben wir bereits gefunden und die Koordinaten finden wir in der Datei "Postion.txt". Bei der °Zahl rate ich Euch auszuprobieren, da man dafür logisch denken muss um von vorne rein die "richtige" °Zahl hinzubekommen. Man kann diese ja immer noch ändern.

Wir speichern alles ab. Damit steht der NPC schonmal "dumm und doof" ohne irgendetwas zu können.

Da wir dies ändern wollen, machen wir uns nun an die Datei "Exchange_Script.txt"
Sobald wir diese geöffnet haben, sieht das eventuell so aus
(Ich nehme einfach das erste Tauschevent mit dem ersten Tausch als Beispiel:)

Quote:
MMI_EVENT_MAY //5¿ù À̺¥Æ®
{
// À̺¥Æ® ¼³¸í
DESCRIPTION
{
TID_GAME_EVENT_MAY_TEXT01
TID_GAME_EVENT_MAY_TEXT02
TID_GAME_EVENT_MAY_TEXT03
}

// ¸®½ºÆ® ¼³¸í
SET TID_GAME_EVENT_MAY_COND01
{
//¸Þ½ÃÁö ³»¿ë
RESULTMSG
{
TID_GAME_EVENT_MAY_COND01_SUCCESS // ¼º°ø
TID_GAME_EVENT_MAY_COND01_FAIL // ½ÇÆÐ
}
//Á¶°Ç
CONDITION
{
//¾ÆÀÌÅÛ ID °¹¼ö
II_SYS_SYS_EVE_HAPPYMONEY01 30000
}
//»èÁ¦
REMOVE
{
II_SYS_SYS_EVE_HAPPYMONEY01 30000
}
//Áö±Þ Áö±Þ°¹¼ö
PAY 1
{
//¾ÆÀÌÅÛ ID °¹¼ö È®·ü(n/1000000)
II_RID_RID_STI_BIKE2 1 1000000
}
}
Eventname (wichtig, um das Event für den jeweiligen NPC einzustellen)
Eventbeschreibung, die in einem extra Textfensterabschnitt beim Öffnen des "Tauschhandelsladens" angezeigt wird
Beschreibung für den ersten Tausch; hier beginnen die Tauschoptionen für den 1ten Tausch
Hier wird beschrieben, welcher Text angezeigt werden soll, wenn der 1. der Tausch erfolgreich war / 2. der Tausch fehlschlug.
Hier wird beschrieben, was benötigt wird um den Tausch durchzuführen (Definitionsitemname), die Zahl dahinter ist die Itemanzahl
Hier wird beschrieben, was aus dem Inventar bei dem Tausch entfernt wird, die Zahl dahinter ist die Itemanzahl
Hier wird beschrieben, was von dem Npc ausgezahlt wird, um den Tausch zu begleichen
Die "1" steht für "Das Item wird 1x ausgezahlt"
Die Zahl 1MIO (1000000) steht für "Wird zu 100% ausgezahlt" - Man kann dies auch verstellen, das ist einem selbst überlassen, die jeweiligen Wahrscheinlichkeiten für 20, 50% oder X-Prozent kann man sich ja selbst ausrechnen.


So, wir beginnen:
Zunächst einmal möchten wir den Text für den Tauschhandelsladen definieren. Dazu kopieren wir uns den Textclient Code:
Quote:
TID_GAME_EVENT_MAY_TEXT01
Mit diesem im Gepäck suchen wir in der Datei "textClient.inc" danach.
Wir finden:
Quote:
TID_GAME_EVENT_MAY_TEXT01 0xffffffff
{
IDS_TEXTCLIENT_INC_001706
Farbe des Anzeigetextes in HTML
Die Stelle für die textClient.txt.txt

Wir kopieren uns den IDS_TEXTCLIENT Code und suchen in der Datei "Textclient.txt.txt" danach. Wir können den hier beschrieben Text nun beliebig umändern. Beispielsweise so:
Quote:
Hallo und Willkommen in meinem Tauschhandelsladen, viel Spaß beim Einkaufen!
Wir speichern ab und sind damit fertig (Die anderen Texte können wir natürlich nach dem gleichen Verfahren auch bearbeiten).

Nun zu dem "Namen" für das erste Handelsangebot. Dieses definieren wir nach dem gleichen Prinzip wie bei der "Willkommensnachricht" des Tauschhandelsladens.
- SET TID_GAME_EVENT_MAY_COND01 kopieren
- in der Datei textClient.inc danach suchen
- IDS_TEXTCLIENT Code kopieren
- in der Datei "textClient.txt.txt" danach suchen
- Beliebig ersetzen

Und dreimal darf man raten, das selbe gilt auch für die Fail / Succes Nachrichten.

Kommen wir nun zum Bearbeiten des eigentlichen Handels.
Vorab: Ich möchte das ganze als Beispeil so einstellen, dass man für 100 Fire B Karten zu einer 100%tigen Wahrscheinlichkeit eine Fire A Karte bekommt. Ihr könnt natürlich in jeglicher Art und Weise kreativ sein mit Euren Tauschangeboten^^

Als erstes bearbeiten wir die CONDITION. D.h., was wir benötigen für den Handel. In meinem Fall 100 Fire B Karten.
Wir öffnen die propitem.txt.txt und suchen nach "Fire Card (B)" und finden hierzu den IDS_PROPITEM Code
Quote:
IDS_PROPITEM_TXT_009462
Mit diesem nun ab in die "Propitem.txt". Wir suchen danach und finden die Definition des Items "Fire Card (B)":
Quote:
II_GEN_MAT_ELE_CANDLEC
Dieser wird an der CONDITION Stelle natürlich eingefügt, dahinter die Mengenzahl, in meinem Fall "100".

Soweit so gut. Weiter mit dem, was bei dem Handel aus dem Inventar genommen werden soll. In diesem Fall eben auch wieder "100 Fire Card (B)". Das Ganze schaut also so aus:
Quote:
REMOVE
{
II_GEN_MAT_ELE_CANDLEC 100
}
Zu guter Letzt wird definiert, was der nette NPC auszahlen soll, in diesem Fall eine Fire Card A. Um den "Definitionscode" dieses Items zu erfahren, verwenden wir wieder das selbe Prinzip:
- Propitem.txt.txt öffnen
- Suche nach "Fire Card (A)"
- IDS_PROPITEM Code kopieren
- In der Datei "Propitem.txt danach suchen"
- Definitionscode kopieren

In diesem Fall sieht dieser so aus:
Quote:
II_GEN_MAT_ELE_CANDLEB
Wir fügen den Salat in das Exchange_script.txt ein:
Quote:
PAY 1
{
//¾ÆÀÌÅÛ ID °¹¼ö È®·ü(n/1000000)
II_GEN_MAT_ELE_CANDLEB 1 1000000
}
Kleiner Überblick darüber, was wir nun bereits hinter uns haben:
Quote:
- NPC ins Spiel eingefügt
- Exchange Script (in meinem Beispiel nur den ersten Handel) "vorbereitet"
So, wir wollen jetzt aber noch, dass unser vorhin ins Spiel eingefügt NPC die tolle Aufgabe bekommt, diesen Tausch anzubieten.
Dazu öffnen wir die Datei "character.inc" und scrollen ganz nach unten, um einen neuen Eintrag zu machen.
Ohne Schnickschnack, wie beispielsweise ein Dialogtext, den der NPC in einem seperaten Menü anzeigen soll, sieht das ganze dann so aus:

Quote:
MaFl_Tauschhandel
{
setting
{
AddMenu( MMI_EVENT_MAY );
}

SetName
(
IDS_CHARACTER_INC_001011
);
}
NPC Name, den wir in die vorhin in die .dyo Datei eingetragen haben
Option AddMenu bedeutet, dass der NPC ein Menü bekommt, welches, wird im Anschluss definiert. In unserem Fall soll er das Tauschevent "MMI_EVENT_MAY" ausführen.
Dies ist der Name, den der NPC inGame überm' Kopf stehen hat

Um diesen einzustellen, ganz simpel in die Datei "Character.txt.txt" und ganz nach unten scrollen. Wir machen einen neuen Eintrag, mit einer Zahl, die noch nicht in Verwendung, logischer Weise macht man die "danachkommende" Zahl:

Quote:
IDS_CHARACTER_INC_001011 Dickes Aibatt
Nun noch ganz Wichtig:
Wir gehen in unseren Resource Ordner und starten die "Merge2.exe"
Damit werden die Resdateien in den Resclient kopiert. Diese nehmen wir von dort aus und transferieren diese in unseren Client.
Wenn wir nun inGame schauen, sehen wir an der jeweiligen Stelle unseren tollen kleinen Selfmade NPC.

Soo, das wars. Unser NPC steht, hat ein schickes Aussehen und weis, was er zu tun hat.
In meinem Beispiel habe ich nur eine Tauschoption bearbeitet, ihr könnt natürlich X-beliebig viele hinzufügen, oder auch streichen.
Die anderen Events die in der Exchange_script.txt stehen könnt ihr logischerweise auch verwenden, ich habe nur der Übersicht zu Gute das Erste verwendet.

Edit.: Hier ein kleines Beispiel mit Behemoth Waffen, was ich gemacht habe:
[Only registered and activated users can see links. Click Here To Register...]

Quote:
Credits:
5% Sedrika für die Verlinkung zum dyoManager
95% Ich, für das Verfassen des Textes
02/19/2011 19:35 Fullscreen#2
Sehr guter Guide. Alles schön übersichtlich gestaltet, Farben verwendet usw.

Ganz klar 10/10.
02/19/2011 20:09 _DEFiNiTiON_#3
Sehr gut erklärt , sehr übersichtlich ne lockere 1+
Weiter so !!
02/19/2011 20:48 flyffmen#4
1+ mit stern es ist alles drin was seien soll und das hilft mir auch wen ich dan vieleicht mal nen neuen NPC erstelle.
02/20/2011 08:53 .[S]hexx*...#5
Wirklich gut gelunden dein TuT ;DD Weiter so.
02/20/2011 10:24 Achileus#6
Respekt muss man sagen,das TuT ist wieder mal einer der besten!
02/20/2011 11:39 Knot94#7
Sehr gut ausführlich gute Fabwahl. Einfach Tip-Top.
02/27/2011 21:37 Dreatmaster#8
Sehr gut, hast ein Thanks.

Was du noch reinmachen könntest wäre, wie man diese Texte ändert wenn man den NPC anklickt.
z.B wenn du [Juwel Verwalter] Peach anklickst kommt
Dialog
Handel
Shining Oricalcum herstellen
...
usw.

Das man das auch in der TextClient.inc bestimmen kann.
Man schreibt also z.B bei Peach in der Character.inc
Quote:
MaFl_Peach // [보석 전문가] 피치
{
setting
{
AddMenu( MMI_DIALOG );
AddMenu( MMI_TRADE );
AddVendorItem( 0, IK3_SCROLL, -1, 190, 190, 100 );
AddMenu( MMI_SMELT_EXTRACTION ); // 보석 추출

AddMenu( MMI_SMELT_MIXJEWEL ) // 빛나는 오리칼쿰 생성
AddMenu( MMI_SMELT_JEWEL ); // 얼터멋 웨폰 보석 합성
AddMenu( MMI_LVREQDOWN_CANCEL ); // 착용 레벨 하락 취소
AddMenu( MMI_BLESSING_CANCEL ); //여신의 축복 취소
Das rot markierte ist ingame "Shining Oricalcum herstellen", wenn man das jetzt kopiert und in die TextClient.inc geht findet man

Quote:
TID_MMI_SMELT_MIXJEWEL 0xffffffff
{
IDS_TEXTCLIENT_INC_001633
}
Wir kopieren das blaue und gehn in die TextClient.txt und finden

Quote:
IDS_TEXTCLIENT_INC_001633 Shining Oricalkum herstellen
Das können wir jetzt einfach beliebig ändern

und ingame heißt es dann genauso wie wir es wollen.
02/27/2011 23:43 rädsun#9
Das habe ich ja mit Absicht weggelassen, da ich ein Dialogtext oder sonstiges unnötig finde. Wenn man möchte kann man ja ein zweites Menü noch adden, beispielsweise Buffen oder whatever. So kann man den NPC anklicken und hat direkt das Tauschhandelsmenü.
Finde ich ehrlich gesagt praktischer.
02/28/2011 17:25 Dreatmaster#10
Ja gut oke praktischer ja aber sobald es mehrere Menüs sind sollte man die Menüs auch benennen können...ist ja auch ehrlich gesagt nicht schlimm, trotzdem Respekt für den Guide gut gemacht