Alles über NPCs
Vorwort
Alle in diesem Tutorial gezeigten Beispiele beziehen sich ausschließlich auf TrinityCore, da diese mein Favorit ist.
Im folgenden wird euch beigebracht, wie ihr diverse NPC's (Non Person Character) erstellt. Die Benutzung wird euch hier auch beigebracht. Dieses Tutorial ist nicht dafür da euch den Umgang mit Programmen wie Navicat zu erläutern. Dies ist ein sehr Zeitaufwendiges Tutorial, da man sich die Tabellen Struktur genau anschauen und diese studieren muss! Am Ende befinden sich die fertigen Scripte.
TabellenNamen sind immer Lila.
Variablen sind immer Blau.
Spalten Namen sind immer Rot.
Benutzte Programme:
Non Person Characters
Ein NPC kann vieles beherbergen. Zum Beispiel Items, Menüs, Informationen, Funktionen und vieles mehr. Fangen wir damit an, wie man ein NPC erstellt.
Um einen Npc zu erstellen müssen wir zuerst die Tabellen Struktur analysieren. Deshalb schauen wir uns alle wichtigen Spalten an, eine Beschreibung dazu findet ihr also im nachfolgenden Spoiler.
creature_template
Entry
Die (eindeutige) id von eurem npc
difficulty_entry_1-3
Die Difficulty Entry ist vor allem für das erstellen von Instanzen wichtig. Hier wird nämlich die Schwierigkeit mit einer id verlinkt. Wenn man nun eine Instanz mit zwei Schwierigkeitsstufen machen möchte, dann braucht man zwei Kreaturen, damit sich die Schwierigkeit auch dynamisch anpasst. Soll der NPC in einer Instanz stehen, die den Schwierigkeitsgrad Normal hat, so sind diese Spalten leer zu lassen. Soll der in einer Normalen und schweren Instanz stehen, so ist in "difficulty_entry_1" die id von dem npc für die Heroische Schwierigkeit einzutragen. Der Npc mit der id für die heroische Schwierigkeit hat dann wiederum das Feld leer.
Für Schlachtzugs- Instanzen gilt:
Entry1 = 25 (Normal)
Entry2 = 10 (Hero)
Entry3 = 25 (Hero)
KillCredit1-2
Die KillCredit Spalten sind für Quests wichtig. Wenn ihr eine Quest habt, wo ihr mehrere verschiedene Npc töten könnt, um die Quest fertig zu stellen, dann kommt hier die id von dem ersten npc rein.
modelid1-4
Hier stehen die DisplayID's von eurem Npc. Ihr könnt mehrere ID's eintragen, diese werden dann per Zufall ausgewählt, wenn ihr euren npc später spawnt.
name & subname
Selbsterklärend (Wenn nicht bitte kommentieren)
IconName
Der IconName ist der Name des Icons, was angezeigt wird, wenn ihr mit der Maus über den Npc fahrt.
Die wichtigsten sind:
Directions - Zeigt ein Symbol an, wie bei den Stadt Wachen
Attack - Zeigt ein Schwert
Buy - Zeigt eine braune Tasche
Speak - Zeigt eine weiße Blase (Standard)
Trainer - Zeigt ein Buch
Repair - Zeigt ein Amboss / Reparier Hammer
Quest - Zeigt verschiedene Quest Icons, je nach Quest Status
minlevel und maxlevel
Kreaturen können eine sog. "Level Range" haben. Das heißt es wird per Zufall eine Zahl zwischen min und max level ausgewählt. Solltet ihr also minlevel 78 und maxlevel 80 haben, so kann eure Kreatur Level 78, 79 oder 80 sein.
epx
Die Erfahrung, die ein Kill gewährt
faction_A/H
Die zugehörige Fraktion für Allianz/Horde. Soll der Npc für Allianz und Horde freundlich sein, so kann man hier in beide spalten 7 eintragen. Ich persönlich hab die Kirin Tor favorisiert und trage daher immer 2007 ein.
npcflag
Diese Spalte ist eine der elementarsten. Sie Definiert vor allem, was NPC's können. Dahinter stecken teilweise sehr komplexe Rechnungen, also Vorsicht!
Eine komplette Übersicht erhaltet ihr .
Soll der Npc ein Vendor (Verkäufer) sein, so muss man hier die 128 eintragen. Soll der Npc ein Reparierer sein, dann muss man hier eine 4096 eintragen. Jetzt ACHTUNG! Soll der Npc ein Reparierer UND Verkäufer sein (fast immer der Fall), so muss man die Werte zusammen Rechnen. Damit dabei keine Fehler entstehen fängt man immer mit dem kleinsten Wert an! Wir Rechnen also 128 + 4096 und bekommen als Ergebnis 4224. Mit diesem Flag kann unser Npc dann Reparieren und Verkaufen.
speed_walk
Spielt eine Rolle für die Laufgeschwindigkeit von beispielsweise Patrouillen. Der Standard Wert ist immer 1, ist dieses Feld leer wird automatisch der Standard genommen.
speed_run
Hauptsächlich für angreifende Npc's wichtig. Dies ist die Geschwindigkeit, mit der sie auf einen Spieler zulaufen, wenn der Spieler in aggro range ist. Der Standard Wert ist ebenfalls 1, der empfohlene Wert für eigene feindliche Kreaturen ist 2.
scale
Die Größe
rank
Der Rang des NPCs.
0 = Normal
1 = Elite
2 = Seltene Elite
3 = Boss (Totenkopf)
4 = Selten
Bitte beachten: Nicht blind "2" eintragen! Der Rang des NPC's hat auch mit der respawn Zeit des npc's zu tun. Bei dem rang Seltene Elite bzw "2" respawnt der NPC nur alle 5 - 10 minuten (je nach worldserver.conf einstellung).
mindmg / maxdmg
Der minimalste Schaden und der maximalste Schaden
dmgschool
Ist die Damage Art.
0 = Normal
1 = Heilig
2 = Feuer
3 = Natur
4 = Frost
5 = Schatten
6 = Arkan
##### An dieser Stelle sind einige Spalten übersprungen, weil eigentlich irrelevant für die Mehrzahl an Npc's #####
unit_flags
Auch hier steckt wieder eine komplizierte Rechnung dahinter. Man kann zum Beispiel den Npc so erstellen, dass er nicht angreifbar ist mit dem Wert "2" oder "128". Eine komplette Liste gibt es .
dynamicflags
Wichtig für Quests und feindliche Kreaturen. Wieder eine Rechnung, diesmal aber eine recht einfache:
1 = man kann looten
2 = Position wird auf der Minimap angezeigt
3 = man kann looten und die Position wird auf der Map angezeigt.
trainer_type
Es gibt verschiedene Arten von Trainern:
0 = Zauber
1 = Mounts
2 = Berufe
3 = Tiere
lootid
Die ID von dem Eintrag in der "creature_loot_template". Dies wird benötigt, wenn der Npc etwas droppen soll. Dazu muss das Item in die entsprechende Tabelle eingetragen werden.
pickpocketloot
Loot Fenster für die Fähigkeit Schurkenhandel
skinloot
Loot Fenster für die Fähigkeit Häuten
AiName
Wichtig für Teleporter und Multi Menü Npcs. Auf diesen Punkt werde ich erstmal nicht eingehen, weil dieses Tutorial nur für die Grundlagen zuständig ist.
Questitem1-6
Wenn die Kreatur ein Questitem droppen soll, dann wird dies hier gespeichert. Dies ist nur ein Zusatz für Addons und wird nicht zwingend benötigt.
Die (eindeutige) id von eurem npc
difficulty_entry_1-3
Die Difficulty Entry ist vor allem für das erstellen von Instanzen wichtig. Hier wird nämlich die Schwierigkeit mit einer id verlinkt. Wenn man nun eine Instanz mit zwei Schwierigkeitsstufen machen möchte, dann braucht man zwei Kreaturen, damit sich die Schwierigkeit auch dynamisch anpasst. Soll der NPC in einer Instanz stehen, die den Schwierigkeitsgrad Normal hat, so sind diese Spalten leer zu lassen. Soll der in einer Normalen und schweren Instanz stehen, so ist in "difficulty_entry_1" die id von dem npc für die Heroische Schwierigkeit einzutragen. Der Npc mit der id für die heroische Schwierigkeit hat dann wiederum das Feld leer.
Für Schlachtzugs- Instanzen gilt:
Entry1 = 25 (Normal)
Entry2 = 10 (Hero)
Entry3 = 25 (Hero)
KillCredit1-2
Die KillCredit Spalten sind für Quests wichtig. Wenn ihr eine Quest habt, wo ihr mehrere verschiedene Npc töten könnt, um die Quest fertig zu stellen, dann kommt hier die id von dem ersten npc rein.
modelid1-4
Hier stehen die DisplayID's von eurem Npc. Ihr könnt mehrere ID's eintragen, diese werden dann per Zufall ausgewählt, wenn ihr euren npc später spawnt.
name & subname
Selbsterklärend (Wenn nicht bitte kommentieren)
IconName
Der IconName ist der Name des Icons, was angezeigt wird, wenn ihr mit der Maus über den Npc fahrt.
Die wichtigsten sind:
Directions - Zeigt ein Symbol an, wie bei den Stadt Wachen
Attack - Zeigt ein Schwert
Buy - Zeigt eine braune Tasche
Speak - Zeigt eine weiße Blase (Standard)
Trainer - Zeigt ein Buch
Repair - Zeigt ein Amboss / Reparier Hammer
Quest - Zeigt verschiedene Quest Icons, je nach Quest Status
minlevel und maxlevel
Kreaturen können eine sog. "Level Range" haben. Das heißt es wird per Zufall eine Zahl zwischen min und max level ausgewählt. Solltet ihr also minlevel 78 und maxlevel 80 haben, so kann eure Kreatur Level 78, 79 oder 80 sein.
epx
Die Erfahrung, die ein Kill gewährt
faction_A/H
Die zugehörige Fraktion für Allianz/Horde. Soll der Npc für Allianz und Horde freundlich sein, so kann man hier in beide spalten 7 eintragen. Ich persönlich hab die Kirin Tor favorisiert und trage daher immer 2007 ein.
npcflag
Diese Spalte ist eine der elementarsten. Sie Definiert vor allem, was NPC's können. Dahinter stecken teilweise sehr komplexe Rechnungen, also Vorsicht!
Eine komplette Übersicht erhaltet ihr .
Soll der Npc ein Vendor (Verkäufer) sein, so muss man hier die 128 eintragen. Soll der Npc ein Reparierer sein, dann muss man hier eine 4096 eintragen. Jetzt ACHTUNG! Soll der Npc ein Reparierer UND Verkäufer sein (fast immer der Fall), so muss man die Werte zusammen Rechnen. Damit dabei keine Fehler entstehen fängt man immer mit dem kleinsten Wert an! Wir Rechnen also 128 + 4096 und bekommen als Ergebnis 4224. Mit diesem Flag kann unser Npc dann Reparieren und Verkaufen.
speed_walk
Spielt eine Rolle für die Laufgeschwindigkeit von beispielsweise Patrouillen. Der Standard Wert ist immer 1, ist dieses Feld leer wird automatisch der Standard genommen.
speed_run
Hauptsächlich für angreifende Npc's wichtig. Dies ist die Geschwindigkeit, mit der sie auf einen Spieler zulaufen, wenn der Spieler in aggro range ist. Der Standard Wert ist ebenfalls 1, der empfohlene Wert für eigene feindliche Kreaturen ist 2.
scale
Die Größe
rank
Der Rang des NPCs.
0 = Normal
1 = Elite
2 = Seltene Elite
3 = Boss (Totenkopf)
4 = Selten
Bitte beachten: Nicht blind "2" eintragen! Der Rang des NPC's hat auch mit der respawn Zeit des npc's zu tun. Bei dem rang Seltene Elite bzw "2" respawnt der NPC nur alle 5 - 10 minuten (je nach worldserver.conf einstellung).
mindmg / maxdmg
Der minimalste Schaden und der maximalste Schaden
dmgschool
Ist die Damage Art.
0 = Normal
1 = Heilig
2 = Feuer
3 = Natur
4 = Frost
5 = Schatten
6 = Arkan
##### An dieser Stelle sind einige Spalten übersprungen, weil eigentlich irrelevant für die Mehrzahl an Npc's #####
unit_flags
Auch hier steckt wieder eine komplizierte Rechnung dahinter. Man kann zum Beispiel den Npc so erstellen, dass er nicht angreifbar ist mit dem Wert "2" oder "128". Eine komplette Liste gibt es .
dynamicflags
Wichtig für Quests und feindliche Kreaturen. Wieder eine Rechnung, diesmal aber eine recht einfache:
1 = man kann looten
2 = Position wird auf der Minimap angezeigt
3 = man kann looten und die Position wird auf der Map angezeigt.
trainer_type
Es gibt verschiedene Arten von Trainern:
0 = Zauber
1 = Mounts
2 = Berufe
3 = Tiere
lootid
Die ID von dem Eintrag in der "creature_loot_template". Dies wird benötigt, wenn der Npc etwas droppen soll. Dazu muss das Item in die entsprechende Tabelle eingetragen werden.
pickpocketloot
Loot Fenster für die Fähigkeit Schurkenhandel
skinloot
Loot Fenster für die Fähigkeit Häuten
AiName
Wichtig für Teleporter und Multi Menü Npcs. Auf diesen Punkt werde ich erstmal nicht eingehen, weil dieses Tutorial nur für die Grundlagen zuständig ist.
Questitem1-6
Wenn die Kreatur ein Questitem droppen soll, dann wird dies hier gespeichert. Dies ist nur ein Zusatz für Addons und wird nicht zwingend benötigt.
Außerdem benötigen wir "gossip_menu"
Entry
Die Entry von eurem "gossip_menu_option" Eintrag, nicht die von dem Npc!
text_id
Der Link zum Text, der in dem Menü stehen soll. Der Text befindet sich in "npc_text".
Die Entry von eurem "gossip_menu_option" Eintrag, nicht die von dem Npc!
text_id
Der Link zum Text, der in dem Menü stehen soll. Der Text befindet sich in "npc_text".
Und "gossip_menu_option"
menu_id
Hier könnt ihr euch eine Ausdenken, die noch nicht existieren sollte. Um maximale Komptabilität zu erreichen sollte die Menü Id aber grundsätzlich immer die Selbe Id wie eure Kreatur haben, der ihr das Menü verpassen möchtet!
id
Die ID des Eintrags. Es wird absteigend sortiert, also kleinste zuerst.
option_icon
Das Symbol das vor dem Menü text angezeigt werden soll.
0 = Weiße Blase
1 = Verkaufstasche
2 = Flug Symbol
3 = Buch
4 = Zahnrad
6 = Braune Tasche mit Gold
8 = Wappenrock Symbol
9 = Zwei Schwerter
option_text
Ist wohl ziemlich selbsterklärend?
option_id
Um eine allgemeine Verwirrung zu vermeiden belasse ich es bei den zwei Grund Optionen:
1 = Menü
3 = Verkäufer
npc_option_npcflag
Dies ist mit npcflag verlinkt und beherbergt absolut identische Werte. Siehe also oben.
action_menu_id
Wenn das Menü ein Untermenü haben soll muss hier die menu_id von dem Untermenü (was nämlich auch wiederum nur ein Menü ist!) eingetragen werden.
action_poi_id
Ein POI ist ein "Point of Iterest" und beschreibt ein kleines Symbol auf der Minimap. Mit dieser Option kann man zum Beispiel Wachen erstellen, wie die in Sturmwind oder Orgrimmar, die einem genau sagen können wo was ist. Die Zahl die hier eingetragen wird muss die entry aus der tabelle "points_of_interest" sein, welche relativ simpel gestaltet ist.
box_coded und box_money
sind für euch relativ unwichtig. Box_coded linkt auf ein Untermenü. Mithilfe dessen könnt ihr also einen eigenen Box- Text machen. Box Money ist das Gold, dass angezeigt wird (es wird bezahlt, wenn man auf OK klickt!)
box_text
ist der Box text, sofern nicht auf ein Untermenü verlinkt mittels box_coded
Hier könnt ihr euch eine Ausdenken, die noch nicht existieren sollte. Um maximale Komptabilität zu erreichen sollte die Menü Id aber grundsätzlich immer die Selbe Id wie eure Kreatur haben, der ihr das Menü verpassen möchtet!
id
Die ID des Eintrags. Es wird absteigend sortiert, also kleinste zuerst.
option_icon
Das Symbol das vor dem Menü text angezeigt werden soll.
0 = Weiße Blase
1 = Verkaufstasche
2 = Flug Symbol
3 = Buch
4 = Zahnrad
6 = Braune Tasche mit Gold
8 = Wappenrock Symbol
9 = Zwei Schwerter
option_text
Ist wohl ziemlich selbsterklärend?
option_id
Um eine allgemeine Verwirrung zu vermeiden belasse ich es bei den zwei Grund Optionen:
1 = Menü
3 = Verkäufer
npc_option_npcflag
Dies ist mit npcflag verlinkt und beherbergt absolut identische Werte. Siehe also oben.
action_menu_id
Wenn das Menü ein Untermenü haben soll muss hier die menu_id von dem Untermenü (was nämlich auch wiederum nur ein Menü ist!) eingetragen werden.
action_poi_id
Ein POI ist ein "Point of Iterest" und beschreibt ein kleines Symbol auf der Minimap. Mit dieser Option kann man zum Beispiel Wachen erstellen, wie die in Sturmwind oder Orgrimmar, die einem genau sagen können wo was ist. Die Zahl die hier eingetragen wird muss die entry aus der tabelle "points_of_interest" sein, welche relativ simpel gestaltet ist.
box_coded und box_money
sind für euch relativ unwichtig. Box_coded linkt auf ein Untermenü. Mithilfe dessen könnt ihr also einen eigenen Box- Text machen. Box Money ist das Gold, dass angezeigt wird (es wird bezahlt, wenn man auf OK klickt!)
box_text
ist der Box text, sofern nicht auf ein Untermenü verlinkt mittels box_coded
Als auch "npc_text"
ID
Text ID (sollte einzigartig sein, für individuelle Texte)
text xyz
Wenn ihr mal in die Tabelle seht, dann solltet ihr bemerken das die Tabelle ziemlich lang ist und mehrfach text0_x und langx beinhaltet. Dies dient lediglich den Übersetzungen.
Ihr tragt den Text, den ihr schreiben wollt bei text0_0 ein. Um eine Neue Zeile zu machen müsst ihr "$B$B" schreiben und um den Charakter Namen zu schreiben müsst ihr "$N" schreiben.
lang0
kann leer bleiben, dient auch der Übersetzung
prob0
Welcher Text soll verwendet werden? Selbstverständlich der erste (der erste hat zwar text0_0, ist aber nicht null, weil null nicht gleich eins...verwirrt) hier einfach eine 1 eintragen, damit euer Text angezeigt wird.
Text ID (sollte einzigartig sein, für individuelle Texte)
text xyz
Wenn ihr mal in die Tabelle seht, dann solltet ihr bemerken das die Tabelle ziemlich lang ist und mehrfach text0_x und langx beinhaltet. Dies dient lediglich den Übersetzungen.
Ihr tragt den Text, den ihr schreiben wollt bei text0_0 ein. Um eine Neue Zeile zu machen müsst ihr "$B$B" schreiben und um den Charakter Namen zu schreiben müsst ihr "$N" schreiben.
lang0
kann leer bleiben, dient auch der Übersetzung
prob0
Welcher Text soll verwendet werden? Selbstverständlich der erste (der erste hat zwar text0_0, ist aber nicht null, weil null nicht gleich eins...verwirrt) hier einfach eine 1 eintragen, damit euer Text angezeigt wird.
Verkaufs Npc
Eintragen in die Datenbank
Fangen wir also mal damit an, einen Vendor zu erstellen, der reparieren und verkaufen kann. Dazu tragen wir folgende Daten ein:
Spawnen
Nachdem euer Server nun neu gestartet wurde geht ins Spiel, sucht eine geeignete Position für euren Npc und gebt dann in den Chat ein ".npc add 150000". Euer Npc wird gespawnt und müsste (wenn ihr alles richtig gemacht habt) so aussehen:
Items zum Verkauf hinzufügen
Jetzt gibt es zwei Wege dem Vendor Items hinzuzufügen. Der umständliche, weg wäre über die Datenbank, indem man die "npc_vendor" tabelle öffnet und dort die entry und das item einträgt (die Spalten Namen sind ziemlich selbsterklärend, wenn nicht bitte kommentieren).
Der zweite Weg wäre per Ingame Befehl:
Solltest du nicht blind den Befehl eingetippt haben bist du einer der aufmerksamen Leser und ich appelliere hiermit an dich mir Rechtschreibfehler zu melden.
Zu den Variablen:
Damit habt ihr jetzt euren ersten (oder x-ten) Verkäufer (der reparieren kann), herzlichen Glückwunsch!
Fangen wir also mal damit an, einen Vendor zu erstellen, der reparieren und verkaufen kann. Dazu tragen wir folgende Daten ein:
Jetzt drücken wir STRG + S oder drücken auf den Haken unten, um unseren Npc zu speichern. Damit der Npc geladen wird muss leider der Server neu gestartet werden. Jedesmal wenn ihr einen Npc erstellt muss der Server neu gestartet werden.Quote:
Entry = 150000
modelid1 = 19646
Name = Verkäufer
Subname = Der reparieren kann
IconName = Repair
minlevel = 80
maxlevel = 80
faction_A = 2007
faction_H = 2007
npcflag = 4224
Scale = 1
Rank= 1
unit_class = 1 (nur um Warnungen zu verhindern)
unit_flag = 3
Spawnen
Nachdem euer Server nun neu gestartet wurde geht ins Spiel, sucht eine geeignete Position für euren Npc und gebt dann in den Chat ein ".npc add 150000". Euer Npc wird gespawnt und müsste (wenn ihr alles richtig gemacht habt) so aussehen:
Items zum Verkauf hinzufügen
Jetzt gibt es zwei Wege dem Vendor Items hinzuzufügen. Der umständliche, weg wäre über die Datenbank, indem man die "npc_vendor" tabelle öffnet und dort die entry und das item einträgt (die Spalten Namen sind ziemlich selbsterklärend, wenn nicht bitte kommentieren).
Der zweite Weg wäre per Ingame Befehl:
Code:
.npc add item [COLOR="RoyalBlue"]$id $count $incrtime $entendedcost[/COLOR]
Zu den Variablen:
Demnach sähe der Befehl in der Praxis so aus:Quote:
$id = ItemID
$count = Maximale Anzahl, die man kaufen darf (0 = unendlich)
$incrtime = Zeit, in der man das Item bei voller Kostenerstattung zurückgeben kann
$extendedcost = die ID der "extra kosten" für den Verkaufsgegenstand. Aus dem Kopf fällt mir nur die "634" ein, welche das Item für 2805 Ehrenpunkte verkaufbar macht.
Code:
.npc add item 100 0 0 634
Menü Npc
Eintragen in die Datenbank
Fangen wir also mal damit an, den NPC zu erstellen, der ein Untermenü beherbergt, als auch reparieren und verkaufen kann. Dazu tragen wir folgende Daten ein:
creature_template
gossip_menu_option
gossip_menu
npc_text
Spawnen
Nachdem euer Server nun neu gestartet wurde geht ins Spiel, sucht eine geeignete Position für euren Npc und gebt dann in den Chat ein ".npc add 60000". Euer Npc wird gespawnt und müsste (wenn ihr alles richtig gemacht habt) so aussehen:
NICHT IN PANIK GERATEN AAAAAAH!
Das ihr den Shop Link nicht seht liegt einfach daran, dass ihr noch nichts im Shop drinne habt. Fügt ein Item in eurem Shop hinzu und euch wird dann der Shop angezeigt.
Fangen wir also mal damit an, den NPC zu erstellen, der ein Untermenü beherbergt, als auch reparieren und verkaufen kann. Dazu tragen wir folgende Daten ein:
creature_template
Jetzt drücken wir STRG + S oder drücken auf den Haken unten, um unseren Npc zu speichern.Quote:
Entry = 60000
modelid1 = 19646
Name = Verkäufer
Subname = Mit Menü
IconName = Directions
GossipMenüId = 60000
minlevel = 80
maxlevel = 80
faction_A = 2007
faction_H = 2007
npcflag = 4225
Scale = 1
Rank = 1
unit_class = 1 (nur um Warnungen zu verhindern)
unit_flag = 3
gossip_menu_option
Jetzt drücken wir STRG + S oder drücken auf den Haken unten, um unsere Menüs zu Speichern.Quote:
menü_id = 60000 // Wohlwissend, dass dies die Kreatur ID ist!
id = 0
option_text = untermenü
option_icon = 0
option_id = 1
option_npc_flag = 1
action_menu_id = 60001
menu_id = 60000
id = 1 //Fortlaufend, daher ist dies keine Dopplung!
option_icon = 6
option_text = shop
option_id = 3
npc_option_npcflag = 4224
menu_id = 60001 //Untermenü
id = 0
option_icon = 0
option_text = sinnloses Untermenü
option_id = 1
npc_option_dingsda = 1
gossip_menu
Jetzt drücken wir STRG + S oder drücken auf den Haken unten, um unseren Text Link zu Speichern.Quote:
enty = 60000
text_id = 60000
npc_text
Jetzt drücken wir STRG + S oder drücken auf den Haken unten, um unseren Text zu Speichern. Damit der Npc geladen wird muss leider der Server neu gestartet werden. Jedesmal wenn ihr einen Npc erstellt muss der Server neu gestartet werden.Quote:
ID = 60000
text0_0 = LEER$B$BNAME = $N
prob0 = 1
Spawnen
Nachdem euer Server nun neu gestartet wurde geht ins Spiel, sucht eine geeignete Position für euren Npc und gebt dann in den Chat ein ".npc add 60000". Euer Npc wird gespawnt und müsste (wenn ihr alles richtig gemacht habt) so aussehen:
NICHT IN PANIK GERATEN AAAAAAH!
Das ihr den Shop Link nicht seht liegt einfach daran, dass ihr noch nichts im Shop drinne habt. Fügt ein Item in eurem Shop hinzu und euch wird dann der Shop angezeigt.
Quest Npc
Eintragen in die Datenbank
Fangen wir also mal damit an, einen NPC zu erstellen, der quests geben kann und bei dem man quests abgeben kann. Dazu tragen wir folgende Daten ein:
creature_template
creature_involvedrelation (quests-abgeben-an-creature)
creature_questrelation (quests-annehmen-an-creature)
Was, das war's schon?
Jep! Das war's schon! Ich werde euch hier keine Quests anfertigen, denn erstens reicht meine Kreativität dafür nicht aus und zweitens hat das dann wenig mit NPC's zu tun! Wenn dieses Tutorial gute Referenzen bekommt lässt sich darüber natürlich gerne nochmal reden!
Fangen wir also mal damit an, einen NPC zu erstellen, der quests geben kann und bei dem man quests abgeben kann. Dazu tragen wir folgende Daten ein:
creature_template
Jetzt drücken wir STRG + S oder drücken auf den Haken unten, um unseren Text zu Speichern. Im nachfolgenden wird auf zwei oben nicht deklarierte Tabellen zugegriffen. Der Grund, dass diese nicht deklariert sind ist, dass so ziemlich jeder die Struktur verstehen kann gleich beim Öffnen!Quote:
Entry = 150001
modelid1 = 19646
Name = Questgeber
Subname = Der mit Menü auch reparieren könnte
IconName = Buy
minlevel = 80
maxlevel = 80
faction_A = 2007
faction_H = 2007
npcflag = 3 // Flag 1 + 2 = 3 (Flag 1 = Gossip, Flag 2 = Questgeber!)
Scale = 1
Rank = 1
unit_class = 1 (nur um Warnungen zu verhindern)
creature_involvedrelation (quests-abgeben-an-creature)
Jetzt drücken wir STRG + S oder drücken auf den Haken unten, um unseren Text zu Speichern.Quote:
id = $creatureid
quest = $questid (quest_template)
creature_questrelation (quests-annehmen-an-creature)
Jetzt drücken wir STRG + S oder drücken auf den Haken unten, um unseren Text zu Speichern.Quote:
id = $creatureid
quest = $questid (quest_template)
Was, das war's schon?
Jep! Das war's schon! Ich werde euch hier keine Quests anfertigen, denn erstens reicht meine Kreativität dafür nicht aus und zweitens hat das dann wenig mit NPC's zu tun! Wenn dieses Tutorial gute Referenzen bekommt lässt sich darüber natürlich gerne nochmal reden!
Teleport Npc
Wovon redest du da?
Das wichtigste an einem Teleport Npc ist zu wissen, was ein Teleport eigentlich ist. Ist es irgend ein Programmier Wunder, das per Knopf Druck ausgelöst wird? Ist es eine physikalische Macht, die der Admin mit der Kraft seiner Gedanken kontrolliert? Nein! Es ist nichts anderes, als ein Spell. Ein Spell, der bestimmte Parameter übergeben bekommt. Klingt doch einleuchtend, nicht war?
Komm zur Sache mensch!
Nun einen Teleport Npc ist genau so einfach zu erstellen, wie es sich anhört. Zuerst müsst ihr aber lernen, wie ihr ein Menü erstellt, schaut euch dazu den Bereich "Menü Npc" an!
Um einen Teleport Npc zu erstellen ist es sehr wichtig, dass das Menü die Selbe Entry hat wie der Npc.
Erstellen wir also zuerst den Npc:
Nur mal so nebenbei... Warum diese Verschachtelung, die laut Kommentar eh egal ist? Das hat den Grund, dass ein Teleport zwei Scripte braucht, um richtig zu funktionieren. Man kann es natürlich auch mit einem Parameter machen oder mit nur einem Menü, aber so ist es einfach leichter und übersichtlicher, wenn man mehrere Einträge hat!
In der Tabelle "smart_scripts" werden all diese Scripte definiert. Dafür haben wir verschiedene Spalten und Tabellen, auf die ich nun nicht intensiv, sondern lediglich grundlegend eingehen werde.
Fertig ist euer Teleport Npc. Screenshots gibt's diesmal nicht, da das ganze Procedere wohl schlecht zu fotografieren ist.. Es bewegt sich ja alles! :P
Wer Interesse hat kann sich im nachfolgenden Spoiler noch einige Infos einholen.
Das wichtigste an einem Teleport Npc ist zu wissen, was ein Teleport eigentlich ist. Ist es irgend ein Programmier Wunder, das per Knopf Druck ausgelöst wird? Ist es eine physikalische Macht, die der Admin mit der Kraft seiner Gedanken kontrolliert? Nein! Es ist nichts anderes, als ein Spell. Ein Spell, der bestimmte Parameter übergeben bekommt. Klingt doch einleuchtend, nicht war?
Komm zur Sache mensch!
Nun einen Teleport Npc ist genau so einfach zu erstellen, wie es sich anhört. Zuerst müsst ihr aber lernen, wie ihr ein Menü erstellt, schaut euch dazu den Bereich "Menü Npc" an!
Um einen Teleport Npc zu erstellen ist es sehr wichtig, dass das Menü die Selbe Entry hat wie der Npc.
Erstellen wir also zuerst den Npc:
Danach den gossip_menu_option Eintrag:Quote:
entry = 52000 //Weil bei mir frei ist
modelid1 = 19646
name = Teleport Npc
subname = Der nicht reparieren kann
gossip_menu_id = 52000 //MUSS GLEICH ENTRY ID SEIN!
min/maxlevel = 80
faction_A/H = 2007
npcflag = 1 //Weil gossip_menu!
unit_class = 512
dynamicflags = 8
AIName = SmartAI //Weil smart Script!
Das wäre geschafft, puh.. Ist ja auch alles schön und gut, aber was hat das mit Teleportieren zu tun? Und wofür das "SmartAI"? Das SmartAI bestimmt, dass die Kreatur Ziel eines Scripts ist. Ein Script kann vieles sein, vor allem aber ist es euer bester Freund in so ziemlich jeder Gelegenheit, diesmal beim Teleportieren!Quote:
menu_id = 52000
id = 0
icon = 3 //sieht man nachher eh nicht, solang es nur einen eintrag gibt
text = Teleport me //auch egal bei einem eintag
option_id = 1
npc_option_npcflag = 1 //Weil Gossip
action_menu_id = 52001
menu_id = 52001
id = 1
option_text = Somewhere //Text ist egal!
option_id = 1 //Gossip
npc_option_npcflag = 1 //Weil immernoch Gossip!
Nur mal so nebenbei... Warum diese Verschachtelung, die laut Kommentar eh egal ist? Das hat den Grund, dass ein Teleport zwei Scripte braucht, um richtig zu funktionieren. Man kann es natürlich auch mit einem Parameter machen oder mit nur einem Menü, aber so ist es einfach leichter und übersichtlicher, wenn man mehrere Einträge hat!
In der Tabelle "smart_scripts" werden all diese Scripte definiert. Dafür haben wir verschiedene Spalten und Tabellen, auf die ich nun nicht intensiv, sondern lediglich grundlegend eingehen werde.
Tragen wir also ein:Quote:
entryorguid
Dies ist die Entry von dem Gossip Menu Eintrag.
source_type
Woher kommt das Script? Das script kommt NIEMALS von dem Spieler. Es kommt bei fertigen Scripten IMMER von einem Zauber der als Timer dient, was auch der Grund ist warum es doppelte Einträge gibt.
id
Die id des scripts. Wird source_type 9 verwendet, so ist immer ein vorherlaufendes script erforderlich (weil zeitgesteuert) und somit kommt hier eine 1, weil es dann der zweite Eintrag wäre.
link
Auf welchen event_typ soll verlinkt werden? Hinweis: Diese funktion ist veraltet und wird selten benutzt, sollte auch vermieden werden, da dies fehler verursachen kann.
event_phase_mask
Die Phase, inder das Event gestartet wird. (Dies werdet ihr noch für hunderte bug fix benötigen!) 0 bedeutet alle Phasen, alles andere spezifiziert eine Phase.
event_chance
Die chance, auf das Event.
event_flags
Bitrechnung. Hier wird beispielsweise definiert, ob das Event widerholbar ist oder nicht.
event_param1
Dar Event Parameter. An dieser Stelle sei gesagt: Es gibt keine komplette Liste mit Parametern und es ist auch nicht allgemein bekannt, wofür die restlichen Parameter sind, die nicht aufgelistet werden.
action_type
Der aktions typ, der ausgeführt werden soll. Beispielsweise heißt "62" Teleport. 59 ist Run für beschützer quests und 69 wäre dann die position, wohin der npc laufen soll.
action_param1
Eine sehr wichtige und tricky Spalte. So ziemlich jeder (mit ausnahme von meinem :P) Teleporter hat Fehler und diese rühren von dieser Spalte her! Denn dies bestimmt die MapID. Für Orte wie die Düsterbruch Arena, die nämlich nicht mehr auf der Map ist, ist daher eine 0 erforderlich. (Nebenbei mal ein kleiner Fix, für alle die sich nen Teleport Npc heruntergeladen haben: Burg Schattenfang hat nicht wie fälschlich angenommen mapid1, sondern mapid 0, weil die Brücke kein Mapobjekt ist Alles darunter und davor ist widerum mapid1)
target_param1
Das Ziel. 0 bedeutet kein Ziel bzw. dass das Ziel nachfolgenden in den Koordinaten deklariert wird.
target_x-z
Das sind die Koordinaten
target_o
Die Orientierung
comment
Ein sinnloser Kommentar? Nein! Der Kommentar ist das wichtigste und startet überhaupt erst das Script. Die ganzen vorherigen Paremeter werden durch den Kommentar übergeben, dieser ist daher ebenfalls variabel und darf nicht wahllos eingetragen werden!
[...]Kurz online gehen und ".gps" eintippen, danach geht's weiter[...]Quote:
#### Script initialisieren #####
entryorguid = 52000
source_type = 0
id = 0
event_type = 62
event_chance = 100
event_param1 = 52001 //Untermenü
event_param2 = 1 //Id von dem Untermenü Link
action_type = 80 //Aktionsliste aufrufen (scripte)
action_param1 = 52001 //Von diesem Eintrag
target_type = 1 //Merke 1 ist nicht spieler, sondern gossip
comment = On gossip option select run teleport script //Deswegen das Untermenü, weil hier das script aufgerufen wird wenn angeklickt
##### Script visualisieren #####
entryorguid = 52001
source_type = 9
id = 0
event_chance = 100
action_type = 85
action_param1 = 35517 //Der Zauber, der gecastet wird (ein blauer Kreis um das teleportieren zu erläutern. Siehe auch ingame ".cast 35517"
action_param2 = 2
comment = script - cast visual on player
##### Script definieren #####
entryorguid = 52001 //Entry vom Untermenü eintrag
source_type = 9
id = 1
link = 0
chance = 100
event_param1 = 1500
event_param2 = 1500
action_type = 62
target_param1 = 8
Quote:
action_param1 = 0 //Östliche Königreiche
target_x = -400,42
target_y = 1642,27
target_z = 18,75
target_o = 2,9
comment = script - teleport to somewhere
Fertig ist euer Teleport Npc. Screenshots gibt's diesmal nicht, da das ganze Procedere wohl schlecht zu fotografieren ist.. Es bewegt sich ja alles! :P
Wer Interesse hat kann sich im nachfolgenden Spoiler noch einige Infos einholen.
Der Zauber bzw. der blaue Kreis, der beim Teleportieren gewirkt wird ist ein Zauber den blizzard extra für das Teleportieren gemacht hat. Dieser kann allerdings durch alles beliebige ersetzt werden. Man könnte beispielsweise auch etwas schlichteres wie Eisige Pfade (61081) casten. Was man nicht tun sollte wären Spells wie Feuerball, da diese Damage machen und den Spieler töten würden!
Es ist generell möglich einen Shop und einen Teleporter in einem NPC zu haben. Der Trick besteht lediglich darin, dass das Menü indem zum Shop und zum Teleport Menü verlinkt wird nicht die selbe entry wie die creature haben darf, sondern -1. Das heißt wenn meine Kreatur entry 52000 hat, dann würde ich gossip_menu_option mit einer id von 51999 verlinken. Das Teleport Menü würde dann widerum 52000 haben, was der creature Entry entspricht und damit würde der Teleport wieder funktionieren
Es ist auch möglich einem Haustier ein Teleport zu verpassen. Die vorgehensweise ist exakt die selbe! Ihr müsst lediglich ein Haustier von euch anvisieren und dann .npc info tippen, um die Entry heraus zu bekommen. Zu dieser Entry linkt ihr dann einfach ein Menü. Beachtet dabei, dass ihr einige Flags ändern müsst! Euer Pet könnte sogar Teleportieren, Reparieren, Talente verlernen und das coolste ist, euer pet könnte ein Spell auf euch casten, wenn ihr stirbt, um euch widerzubeleben. Wie das geht werde ich aber nicht erklären, da dies an die drei Wochen dauern würde und sehr aufwendig und kompliziert ist!
Es können auch ein Teleport und ein sog. "Point of Interest" gleichzeitig aktiviert werden. Dann wird man Teleportiert + auf der Minimap wird ne kleine Flagge oder so angezeigt. Sehr nützlich, wenn man zu Inis möchte aber die spieler lieber davor porten sollte, weil da mobs stehen etc. Dazu muss man einfach den Teleport Link mit einem poi versehen.
Per SmatScript kann man einen Npc dazu bringen eine Kreatur zu Spawnen. Dies wäre für Instant 80 Server interessant, da man damit ein sehr kleines Huntertreff aufbauen könnte. Dazu einfach mal im schauen.
Eine mega Praktische Art SmartScripts zu verwenden wäre ein GameMaster Npc. Diesen könnte man in Phase 2 Spawnen, damit Spieler den nicht sehen. Und zwar kann man eigene Spells kreieren, die Ingame einen Text senden. Erstellt man also beispielsweise einen Spell der den Text ".event start 35" sendet, so kann man via Gossip den Spell starten und damit auch das Event. Vorteil: man brauch sich nie wieder Event Id's merken! Man könnte natürlich auch ein Event damit stoppen oder aber sogar Spieler damit bannen etc.
Es ist generell möglich einen Shop und einen Teleporter in einem NPC zu haben. Der Trick besteht lediglich darin, dass das Menü indem zum Shop und zum Teleport Menü verlinkt wird nicht die selbe entry wie die creature haben darf, sondern -1. Das heißt wenn meine Kreatur entry 52000 hat, dann würde ich gossip_menu_option mit einer id von 51999 verlinken. Das Teleport Menü würde dann widerum 52000 haben, was der creature Entry entspricht und damit würde der Teleport wieder funktionieren
Es ist auch möglich einem Haustier ein Teleport zu verpassen. Die vorgehensweise ist exakt die selbe! Ihr müsst lediglich ein Haustier von euch anvisieren und dann .npc info tippen, um die Entry heraus zu bekommen. Zu dieser Entry linkt ihr dann einfach ein Menü. Beachtet dabei, dass ihr einige Flags ändern müsst! Euer Pet könnte sogar Teleportieren, Reparieren, Talente verlernen und das coolste ist, euer pet könnte ein Spell auf euch casten, wenn ihr stirbt, um euch widerzubeleben. Wie das geht werde ich aber nicht erklären, da dies an die drei Wochen dauern würde und sehr aufwendig und kompliziert ist!
Es können auch ein Teleport und ein sog. "Point of Interest" gleichzeitig aktiviert werden. Dann wird man Teleportiert + auf der Minimap wird ne kleine Flagge oder so angezeigt. Sehr nützlich, wenn man zu Inis möchte aber die spieler lieber davor porten sollte, weil da mobs stehen etc. Dazu muss man einfach den Teleport Link mit einem poi versehen.
Per SmatScript kann man einen Npc dazu bringen eine Kreatur zu Spawnen. Dies wäre für Instant 80 Server interessant, da man damit ein sehr kleines Huntertreff aufbauen könnte. Dazu einfach mal im schauen.
Eine mega Praktische Art SmartScripts zu verwenden wäre ein GameMaster Npc. Diesen könnte man in Phase 2 Spawnen, damit Spieler den nicht sehen. Und zwar kann man eigene Spells kreieren, die Ingame einen Text senden. Erstellt man also beispielsweise einen Spell der den Text ".event start 35" sendet, so kann man via Gossip den Spell starten und damit auch das Event. Vorteil: man brauch sich nie wieder Event Id's merken! Man könnte natürlich auch ein Event damit stoppen oder aber sogar Spieler damit bannen etc.
PS: An alle, die jetzt gerade den Anfang gelesen haben und dann direkt nach unten gescrollt sind. Ein Tutorial soll jemandem etwas beibringen, es soll erklären und lehren. Dies ist mit einem fertigen Script nicht getan, von daher bekommt ihr hier auch keine von mir