Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
| Nächste Überarbeitung | Vorherige Überarbeitung | ||
|
quickstart:skripte:npc [2015/08/18 20:15] 127.0.0.1 Externe Bearbeitung |
quickstart:skripte:npc [2016/02/07 13:49] (aktuell) milgo |
||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| - | == Ein neuer NPC erwacht zum Leben == | + | ===== Ein neuer NPC erwacht zum Leben ===== |
| Wichtig: Dieser Script ist für Gothic 2, unten steht der für Gothic 1! | Wichtig: Dieser Script ist für Gothic 2, unten steht der für Gothic 1! | ||
| - | Zuerst einmal : Alles was hinter // steht, wird nicht mitgeparst. Dort könnte also auch " | + | Zuerst einmal : Alles was hinter |
| Zuerst poste ich einen kompletten von mir erstellten NPC - Script, und dann werde ich ihn erklären. | Zuerst poste ich einen kompletten von mir erstellten NPC - Script, und dann werde ich ihn erklären. | ||
| - | -------- | + | ---- |
| + | |||
| + | <code C> | ||
| | | ||
| | | ||
| Zeile 53: | Zeile 55: | ||
| TA_Stand_WP(09, | TA_Stand_WP(09, | ||
| }; | }; | ||
| + | </ | ||
| - | -------- | + | ---- |
| Um zu skripten, wird ein Texteditor benötigt, für den Anfang reicht erst mal der Standard Windows - Editor (bitte kein Word benutzen!). | Um zu skripten, wird ein Texteditor benötigt, für den Anfang reicht erst mal der Standard Windows - Editor (bitte kein Word benutzen!). | ||
| Wir erstellen also ein neues Dokument, nun kann es also losgehen. | Wir erstellen also ein neues Dokument, nun kann es also losgehen. | ||
| + | <code C> | ||
| | | ||
| { | { | ||
| + | </ | ||
| + | Zunächst definiert man die sogenannte Instanz des Npcs. Als Instanz bezeichnet man eine abgeschlossene Einheit mit einer bestimmten Funktion, stellt es euch einfach als Npc-Objekt vor. Deswegen das INSTANCE. | ||
| + | Das was nun folgt, ist der eindeutige Name der Instanz. Im Prinzip kann man jeden beliebigen Namen nehmen, dieser muss aber eindeutig sein und darf nur einmal bei allen NPCs vorkommen. Piranha Bytes hat die Namensgebung wie folgt geregelt: Zuerst die Gilde (" | ||
| + | Das (Npc_Default) kommt hinter den Instanznamen eines jeden NPCs. | ||
| + | In die | ||
| + | ---- | ||
| - | Ein Npc gehört zu der Klasse Instanz. Als Instanz bezeichnet man eine abgeschlossene Einheit mit einer bestimmten Funktion. Deswegen das INSTANCE. | + | <code C> |
| - | Das was nun folgt, ist der eindeutige Name der Instanz. Im Prinzip kann man jeden beliebigen Namen nehmen, dieser muss aber eindeutig sein und darf nur einmal bei allen NPCs vorkommen. Piranha Bytes hat es so geregelt : Zuerst die Gilde (" | + | |
| - | Das (Npc_Default) kommt hinter den Instanznamen eines jeden NPCs. | + | |
| - | In die | + | |
| - | -------- | + | |
| - | + | ||
| // | // | ||
| name = " | name = " | ||
| Zeile 80: | Zeile 83: | ||
| voice = 4; | voice = 4; | ||
| | | ||
| + | </ | ||
| Sieht schwer aus, ist es aber gar nicht. | Sieht schwer aus, ist es aber gar nicht. | ||
| - | Bei ”name=...” kommt der Name hin, der im Fokus angezeigt wird. | + | Bei '' |
| Das nächste bestimmt die Gilde, in diesem Fall Paladin. Es gibt verschiedene Gilden und anfangs solltet ihr, falls der NPC später eine andere Gilde haben soll, in den anderen Skripten gucken, wie die Kürzel der anderen Gilden ist. | Das nächste bestimmt die Gilde, in diesem Fall Paladin. Es gibt verschiedene Gilden und anfangs solltet ihr, falls der NPC später eine andere Gilde haben soll, in den anderen Skripten gucken, wie die Kürzel der anderen Gilden ist. | ||
| Was nun kommt ist die ID. Sie ist eine eindeutige Nummer zur Identifizierung eines NPCs. Nur 1 NPC darf diese Nummer innehaben. | Was nun kommt ist die ID. Sie ist eine eindeutige Nummer zur Identifizierung eines NPCs. Nur 1 NPC darf diese Nummer innehaben. | ||
| - | Level dürfte klar sein. | + | Das Level des Npcs bestimmt dessen Stufe und soll seiner Kampfstärke entsprechen. Das Level entscheidet, |
| - | Flags = Da gibt es nur zwei Typen, nämlich FLAG_IMMORTAL bzw. FLAG_GHOST, für uns nicht relevant. Weil unser NPC vorerst ganz normal ist, kommt dort eine 0 hin. | + | '' |
| - | Voice= es gibt 17 verschiedene | + | '' |
| - | Npctype= Es gibt verschiedene Npc-Typen. So kann man hier beispielsweise auch NPC_AMBIENT einfügen, damit der Charakter die Standard-Ambientdialoge von sich gibt (z.B. wie man sich in Khorinis zurechtfinden kann). NPC_MAIN ist eigentlich immer eine gute Wahl. :) | + | '' |
| + | ---- | ||
| - | -------- | + | <code C> |
| // Attribute | // Attribute | ||
| | | ||
| Zeile 101: | Zeile 104: | ||
| | | ||
| | | ||
| + | </ | ||
| - | + | Hier die Attribute des NPCs, bedarf eigentlich keiner Erklärung. | |
| - | Hier die Attribute des NPC´s, bedarf eigentlich keiner Erklärung. | + | |
| Strength ist Stärke, Dexterity Geschicklichkeit, | Strength ist Stärke, Dexterity Geschicklichkeit, | ||
| Wenn ein MAX angehängt ist, ist es das was der NPC maximal haben kann. Also nur für angeschlagene NPC´s etc. interessant. | Wenn ein MAX angehängt ist, ist es das was der NPC maximal haben kann. Also nur für angeschlagene NPC´s etc. interessant. | ||
| - | --------- | + | |
| + | ---- | ||
| Hier kann man auch einfach | Hier kann man auch einfach | ||
| - | B_SetAttributesToChapter (self, x); | + | '' |
| hinschreiben. Das x steht für eine Zahl 1 bis 6, also von Kapitel 1 bis Kapitel 6. | hinschreiben. Das x steht für eine Zahl 1 bis 6, also von Kapitel 1 bis Kapitel 6. | ||
| Damit muss man nicht jedes Attribut einzeln aufschreiben. | Damit muss man nicht jedes Attribut einzeln aufschreiben. | ||
| - | Die Attribute für die einzelnen Zahlen sind in _work/ | + | Die Attribute für die einzelnen Zahlen sind in '' |
| - | --------- | + | |
| + | ---- | ||
| + | |||
| + | <code C> | ||
| // | // | ||
| | | ||
| Zeile 125: | Zeile 132: | ||
| // | // | ||
| | | ||
| + | </ | ||
| - | + | '' | |
| - | + | Es gibt 3 Kampftaktiken: '' | |
| - | B_GiveNpcTalents (self); gibt einem NPC die relevanten Talente. Die relevanten Talente sind Schleichen, Schlösserknacken etc. Macht man bei jedem NPC. | + | Das erste ist die schlechteste Kampftaktik, |
| - | Es gibt 3 Kampftaktiken, FAI_HUMAN_COWARD, | + | '' |
| - | EquipItem (self, ItMw_Drachenschneide); | + | |
| Das Ambient Inventory sollte bei jedem NPC equipped werden, damit der Spieler auch den NPC ausbeuten kann, wer er ihn mal niedergeschlagen hat. | Das Ambient Inventory sollte bei jedem NPC equipped werden, damit der Spieler auch den NPC ausbeuten kann, wer er ihn mal niedergeschlagen hat. | ||
| - | |||
| - | -------- | ||
| + | ---- | ||
| + | |||
| + | <code C> | ||
| // visuals | // visuals | ||
| | | ||
| | | ||
| | | ||
| + | </ | ||
| - | + | Das ist nun das Aussehen: | |
| - | + | '' | |
| - | Das ist nun das Aussehen: | + | Und das letzte, |
| - | Mdl_SetModelFatness (self, 0); ist auf gut Deutsch das Fett des NPCs. Hier kann man statt der 0 " | + | |
| - | Und das letzte, | + | |
| Grundsätzlich gilt: Um herauszufinden welche Rüstungen wie heißen, wie die Bewegngsanimation heißt etc. | Grundsätzlich gilt: Um herauszufinden welche Rüstungen wie heißen, wie die Bewegngsanimation heißt etc. | ||
| Immer in einem NPC Script nachschauen von dem man sicher weiß, dass er die Rüstung hat/sich so bewegt. | Immer in einem NPC Script nachschauen von dem man sicher weiß, dass er die Rüstung hat/sich so bewegt. | ||
| - | -------- | + | ---- |
| + | <code C> | ||
| // | // | ||
| | | ||
| + | </ | ||
| + | Das sind alle Kampftalente (Einhänder, | ||
| - | Das sind alle Kampftalente (Einhänder, | + | ---- |
| - | + | ||
| - | -------- | + | |
| + | <code C> | ||
| //TA | //TA | ||
| | | ||
| Zeile 168: | Zeile 177: | ||
| TA_Stand_WP(09, | TA_Stand_WP(09, | ||
| }; | }; | ||
| + | </ | ||
| Das gehört zum Tagesablauf, | Das gehört zum Tagesablauf, | ||
| - | Bei FUNC VOID Rtn_Start_555() in die geschweiften Klammern ({ und };) gehört, was der NPC in seinem Tagesablauf tut. Wird gleich erklärt. | + | Bei '' |
| Wer gut aufgepasst hat, wird bemerkt haben, dass die 555 schon die ID unseres NPCs ist. Diese muss hier dementsprechend mitgeändert werden. | Wer gut aufgepasst hat, wird bemerkt haben, dass die 555 schon die ID unseres NPCs ist. Diese muss hier dementsprechend mitgeändert werden. | ||
| - | -------- | + | ---- |
| - | + | ==== Der Tagesablauf | |
| - | == Der Tagesablauf == | + | |
| Der Tagesablauf, | Der Tagesablauf, | ||
| Zeile 194: | Zeile 203: | ||
| - | == Den NPC im Spiel benutzen == | + | ==== Den NPC im Spiel benutzen |
| - | Um den NPC auch während des Spieles benutzen zu können, müsst ihr ihn als Skriptdatei abspeichern. Dazu ist zuerst einmal die Installation des Modkits (insbesondere der Skripte) vorrausgesetzt. Ihr habt anfangs den NPC ja in euren Editor eingegeben. Nun müsst ihr " | + | Um den NPC auch während des Spieles benutzen zu können, müsst ihr ihn als Skriptdatei abspeichern. Dazu ist zuerst einmal die Installation des Modkits (insbesondere der Skripte) vorrausgesetzt. Ihr habt anfangs den NPC ja in euren Editor eingegeben. Nun müsst ihr " |
| - | Um den NPC dann auch wirklich in Gothic sehen zu können, müsst ihr nun (per Arbeitsplatz) zu folgendem Ordner gehen: [Gothic II-Verzeichnis]\\System. Dort gibt es eine Datei, die den Namen GothicStarter_mod(.exe) trägt. Da ihr das für jede Skriptänderung braucht, solltet ihr einen Rechtsklick auf die Datei machen, auf " | + | Um den NPC dann auch wirklich in Gothic sehen zu können, müsst ihr nun (per Arbeitsplatz) zu folgendem Ordner gehen: |
| - | Wenn ihr schon einmal Gothic II-Mods gespielt habt, ist euch die Auswahlliste wahrscheinlich vertraut, bis auf die Schriftzüge rechts. Für uns ist erstmal nur " | + | Wenn ihr schon einmal Gothic II-Mods gespielt habt, ist euch die Auswahlliste wahrscheinlich vertraut, bis auf die Schriftzüge rechts. Für uns ist erstmal nur " |
| Nun wird Gothic II gestartet und ihr solltet ein neues Spiel beginnen (mit Laden könnt ihr euren NPC nicht einfügen!). Nachdem ihr euch durch das Gespräch mit Xardas geklickt habt, solltet ihr am besten zu Maleth bei Lobarts Hof gehen (weil dort der Waypoint für unseren NPC ist). Dort könnt ihr den Marvin-Mode öffnen (tippe blind "b marvin b"), dann drückt ihr F2 und tippt Insert PAL_555_Reiner. Dann noch Enter und wenn alles richtig geklappt hat, sollte nun Reiner erscheinen. | Nun wird Gothic II gestartet und ihr solltet ein neues Spiel beginnen (mit Laden könnt ihr euren NPC nicht einfügen!). Nachdem ihr euch durch das Gespräch mit Xardas geklickt habt, solltet ihr am besten zu Maleth bei Lobarts Hof gehen (weil dort der Waypoint für unseren NPC ist). Dort könnt ihr den Marvin-Mode öffnen (tippe blind "b marvin b"), dann drückt ihr F2 und tippt Insert PAL_555_Reiner. Dann noch Enter und wenn alles richtig geklappt hat, sollte nun Reiner erscheinen. | ||
| - | + | Somit ist das erste Kapitel abgeschlossen. | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | Somit ist das erste Kapitel abgeschlossen. Bei Fragen, Anregungen, Kritik entweder PM im WoG an mich, oder per ICQ 309-139-139. | + | |
| Ich hoffe ihr kamt damit zurecht. | Ich hoffe ihr kamt damit zurecht. | ||
| - | Ich gebe euch noch mit auf den Weg - Fragen kostet nichts. Außer Zeit. Und die braucht ihr für erfolgreiches Modding. | + | Ich gebe euch noch mit auf den Weg - Fragen kostet nichts. Außer Zeit. Und die braucht ihr für erfolgreiches Modding. |
| - | + | ||
| - | Freundliche Grüße, | + | |
| - | Talvar | + | |
| - | + | ||
| - | Bearbeitet von Milgo | + | |
| - | == NPC Script für Gothic 1 == | + | ==== NPC Script für Gothic 1 ==== |
| Der oben genannte Script funktioniert nur in Gothic 2, deshalb schreibe ich hier einmal einen Script für Gothic 1 auf. Der wesentliche Unterschied zwischen den beiden Scripten ist die Visual Zeile: | Der oben genannte Script funktioniert nur in Gothic 2, deshalb schreibe ich hier einmal einen Script für Gothic 1 auf. Der wesentliche Unterschied zwischen den beiden Scripten ist die Visual Zeile: | ||
| + | <code C> | ||
| Mdl_SetVisualBody (self," | Mdl_SetVisualBody (self," | ||
| + | </ | ||
| + | |||
| + | '' | ||
| + | ''" | ||
| + | '' | ||
| + | ''" | ||
| + | '' | ||
| + | '' | ||
| + | |||
| + | ---- | ||
| - | ------- | ||
| - | (self, | ||
| - | bedeutet dass das visual mir selbst zugeordnet wird. | ||
| - | ------- | ||
| - | " | ||
| - | ist der Körper, also menschlicher_körper_nackt0 auf Deutsch. Dh. der Körper ohne Rüstung | ||
| - | -------- | ||
| - | 0, 3, | ||
| - | ist die Version der Textur (0) und die Hautfarbe (3), also heißt die Textur für den Körperabschnitt " | ||
| - | -------- | ||
| - | " | ||
| - | ist die Form des Kopfes (auch Mesh genannt) | ||
| - | -------- | ||
| - | 2, 1, | ||
| - | bedeuten die Textur des Kopfes (Die Hautfarbe wurde ja schon vorher erwähnt) und die Zahntextur (Sieht man im Spiel so gut wie nicht...). Hier wäre also die Kopftextur Hum_Head_V2-C3. Wer aufpast dem fällt auf das das FatBald nicht in der Textur steht. Muss es auch nicht, da die selbe Textur auf die verschiedenen Kopfformen gelegt werden kann. | ||
| - | -------- | ||
| - | Grd_Armor_M | ||
| - | ist die Rüstung die die Person anhat. Grd ist das Kürzel von Gardisten, Armor bedeutet Rüstung und m bedeutet Mittel. | ||
| - | -------- | ||
| Und hier mal der Vollständige Script für G1: | Und hier mal der Vollständige Script für G1: | ||
| + | <code C> | ||
| instance GRD_1900_Gardist (Npc_Default) | instance GRD_1900_Gardist (Npc_Default) | ||
| { | { | ||
| Zeile 292: | Zeile 285: | ||
| TA_Guard (06, | TA_Guard (06, | ||
| }; | }; | ||
| - | + | </ | |
| - | -------- | + | |
| - | MfG Gottfried | + | |