Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
| Nächste Überarbeitung | Vorherige Überarbeitung | ||
|
tutorials:skript-tutorial [2015/08/18 20:16] 127.0.0.1 Externe Bearbeitung |
tutorials:skript-tutorial [2016/12/30 19:28] (aktuell) milky-way update formatierung |
||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| - | == Einleitung | + | ====== Skripttutorial ====== |
| Das Tutorial ist so aufgebaut, dass am Ende eine kleine Mission steht, die den Spieler ein Schwert für einen Nsc holen lässt, im Verlauf wird, an den entsprechenden Stellen erklärt, wie eine Teilaufgabe umzusetzen ist. Z.B. wird für eine hol mir ein Schwert Mission natürlich ein tolles Schwert benötigt, also wird zu diesem Zeitpunkt die Item-Klasse erklärt und dann mit Inhalt gefüllt, bis ein entsprechendes Schwert vorliegt, das dann ins Spiel eingefügt und dort benutzt werden kann. Sollte sich ein Script in G1 und G2 unterscheiden, | Das Tutorial ist so aufgebaut, dass am Ende eine kleine Mission steht, die den Spieler ein Schwert für einen Nsc holen lässt, im Verlauf wird, an den entsprechenden Stellen erklärt, wie eine Teilaufgabe umzusetzen ist. Z.B. wird für eine hol mir ein Schwert Mission natürlich ein tolles Schwert benötigt, also wird zu diesem Zeitpunkt die Item-Klasse erklärt und dann mit Inhalt gefüllt, bis ein entsprechendes Schwert vorliegt, das dann ins Spiel eingefügt und dort benutzt werden kann. Sollte sich ein Script in G1 und G2 unterscheiden, | ||
| - | == Der Auftraggeber == | + | ===== Der Auftraggeber |
| Um einen neuen Nsc im Spiel zur Verfügung zu haben muß eine Instanz der Klasse C_Npc erstellt werden. Im folgenden wird erst kurz ein allgemeiner Abriss der Klasse gegeben und diese dann mit Inhalt gefüllt. | Um einen neuen Nsc im Spiel zur Verfügung zu haben muß eine Instanz der Klasse C_Npc erstellt werden. Im folgenden wird erst kurz ein allgemeiner Abriss der Klasse gegeben und diese dann mit Inhalt gefüllt. | ||
| Die Klasse | Die Klasse | ||
| - | < | + | < |
| CLASS C_NPC | CLASS C_NPC | ||
| { | { | ||
| Zeile 11: | Zeile 11: | ||
| </ | </ | ||
| Die Id ist ein eindeutiger Indentifier, | Die Id ist ein eindeutiger Indentifier, | ||
| - | < | + | < |
| VAR STRING name [5]; // Namen des NPC | VAR STRING name [5]; // Namen des NPC | ||
| </ | </ | ||
| Der Name ist ein String und taucht z.B. auf wenn man im Spiel einen Nsc im Focus hat. | Der Name ist ein String und taucht z.B. auf wenn man im Spiel einen Nsc im Focus hat. | ||
| - | < | + | < |
| VAR STRING | VAR STRING | ||
| </ | </ | ||
| Unbenutzt, aber vorhanden, lässt sich also für spezielle Zwecke als Membervariable, | Unbenutzt, aber vorhanden, lässt sich also für spezielle Zwecke als Membervariable, | ||
| - | < | + | < |
| VAR INT npcType; | VAR INT npcType; | ||
| </ | </ | ||
| Integer, mit dem in Gothic der Charakter bestimmten Gruppen zugeordnet wird. __Npc_TypeMain__ ist z.B. einer der Hauptcharaktere (z.B. Diego). | Integer, mit dem in Gothic der Charakter bestimmten Gruppen zugeordnet wird. __Npc_TypeMain__ ist z.B. einer der Hauptcharaktere (z.B. Diego). | ||
| - | < | + | < |
| VAR INT | VAR INT | ||
| </ | </ | ||
| Hier lässt sich der Nsc auf Immortal setzen __flags = NPC_FLAG_IMMORTAL; | Hier lässt sich der Nsc auf Immortal setzen __flags = NPC_FLAG_IMMORTAL; | ||
| - | < | + | < |
| VAR INT | VAR INT | ||
| </ | </ | ||
| Die Attributwerte des Nsc werden in ein Array gespeichert, | Die Attributwerte des Nsc werden in ein Array gespeichert, | ||
| - | < | + | < |
| VAR INT protection | VAR INT protection | ||
| </ | </ | ||
| Die Protection wird genauso gehandelt wie die Attribute, hier kann man dem Nsc einen natürlichen Rüstschutz gegen bestimmte Schadenstypen verpassen, Z.B. gegen Feuer | Die Protection wird genauso gehandelt wie die Attribute, hier kann man dem Nsc einen natürlichen Rüstschutz gegen bestimmte Schadenstypen verpassen, Z.B. gegen Feuer | ||
| - | < | + | < |
| VAR INT damage | VAR INT damage | ||
| </ | </ | ||
| Gibt die Möglichkeit mehrere Arten von Nahkampfschäden an, den einen Nsc zuzuweisen, die er mit den bloßen Fäusten verursacht, ist aber nicht unbedingt sinnvoll, weil Nsc die meiste Zeit eine Waffe in der Hand haben sollten, zum rumexperimentieren Damagetypes, | Gibt die Möglichkeit mehrere Arten von Nahkampfschäden an, den einen Nsc zuzuweisen, die er mit den bloßen Fäusten verursacht, ist aber nicht unbedingt sinnvoll, weil Nsc die meiste Zeit eine Waffe in der Hand haben sollten, zum rumexperimentieren Damagetypes, | ||
| - | *__DAM_INDEX_BLUNT__ | + | |
| - | *__DAM_INDEX_EDGE__ | + | * __DAM_INDEX_EDGE__ |
| - | *__DAM_INDEX_POINT__ | + | * __DAM_INDEX_POINT__ |
| - | *__DAM_INDEX_FIRE__ | + | * __DAM_INDEX_FIRE__ |
| - | *__DAM_INDEX_FLY__ | + | * __DAM_INDEX_FLY__ |
| - | *__DAM_INDEX_MAGIC__ | + | * __DAM_INDEX_MAGIC__ |
| - | < | + | < |
| VAR INT damagetype; | VAR INT damagetype; | ||
| </ | </ | ||
| Gibt den Nahkampfschaden an, den ein Nsc mit den bloßen Fäusten macht, ist aber nicht unbedingt sinnvoll, weil Nsc die meiste Zeit eine Waffe in der Hand haben sollten. | Gibt den Nahkampfschaden an, den ein Nsc mit den bloßen Fäusten macht, ist aber nicht unbedingt sinnvoll, weil Nsc die meiste Zeit eine Waffe in der Hand haben sollten. | ||
| - | < | + | < |
| VAR INT guild, | VAR INT guild, | ||
| </ | </ | ||
| Mit Gilde gibt man dem Nsc eine entsprechende Gilde, wie z.B. __GIL_NONE__ für gildenlos. Mit Level wird dem Nsc ein entsprechender Level verpasst. | Mit Gilde gibt man dem Nsc eine entsprechende Gilde, wie z.B. __GIL_NONE__ für gildenlos. Mit Level wird dem Nsc ein entsprechender Level verpasst. | ||
| - | < | + | < |
| VAR FUNC mission [MAX_MISSIONS]; | VAR FUNC mission [MAX_MISSIONS]; | ||
| </ | </ | ||
| Obsolet | Obsolet | ||
| - | < | + | < |
| var INT fight_tactic; | var INT fight_tactic; | ||
| </ | </ | ||
| Hier wird dem Nsc seine Taktik, die er in Kämpfen anwendet zugeordnet. Wird aber später noch genauer erklärt, wie die FAI´s funktionieren | Hier wird dem Nsc seine Taktik, die er in Kämpfen anwendet zugeordnet. Wird aber später noch genauer erklärt, wie die FAI´s funktionieren | ||
| - | < | + | < |
| VAR INT weapon; | VAR INT weapon; | ||
| </ | </ | ||
| Obsolet | Obsolet | ||
| - | < | + | < |
| VAR INT voice; | VAR INT voice; | ||
| </ | </ | ||
| Stimmnr. des Charakters à wichtig für Standardausgaben in Zuständen | Stimmnr. des Charakters à wichtig für Standardausgaben in Zuständen | ||
| - | < | + | < |
| VAR INT voicePitch; | VAR INT voicePitch; | ||
| </ | </ | ||
| Gibt die Möglichkeit die Stimme des Nsc zu pitchen. | Gibt die Möglichkeit die Stimme des Nsc zu pitchen. | ||
| - | < | + | < |
| VAR INT bodymass; | VAR INT bodymass; | ||
| </ | </ | ||
| Obsolet | Obsolet | ||
| - | < | + | < |
| VAR FUNC daily_routine; | VAR FUNC daily_routine; | ||
| </ | </ | ||
| Hier wird der Tagesablauf den ein Nsc hat angemeldet, exklusiv zu start_aistate. | Hier wird der Tagesablauf den ein Nsc hat angemeldet, exklusiv zu start_aistate. | ||
| - | < | + | < |
| VAR FUNC start_aistate; | VAR FUNC start_aistate; | ||
| </ | </ | ||
| Hier kann ein Zustand angegeben werden, in dem sich ein Nsc beim einsetzen befindet. Darf nur exklusiv zu daily_routine benutzt werden. | Hier kann ein Zustand angegeben werden, in dem sich ein Nsc beim einsetzen befindet. Darf nur exklusiv zu daily_routine benutzt werden. | ||
| - | < | + | < |
| // ********************** | // ********************** | ||
| // Spawn | // Spawn | ||
| Zeile 92: | Zeile 92: | ||
| </ | </ | ||
| Erfordert einen gültigen Waypoint (muss komplett groß geschrieben werden!) aus dem zen, wenn leer ist ein toter Nsc für immer tot. | Erfordert einen gültigen Waypoint (muss komplett groß geschrieben werden!) aus dem zen, wenn leer ist ein toter Nsc für immer tot. | ||
| - | < | + | < |
| VAR INT spawnDelay; | VAR INT spawnDelay; | ||
| </ | </ | ||
| Verzögerung, | Verzögerung, | ||
| - | < | + | < |
| // ********************** | // ********************** | ||
| // SENSES | // SENSES | ||
| Zeile 103: | Zeile 103: | ||
| </ | </ | ||
| Den Nscs stehen drei Sinne zur Verfügung : | Den Nscs stehen drei Sinne zur Verfügung : | ||
| - | *__SENSE_SEE__: | + | |
| - | *__SENSE_HEAR__: | + | * __SENSE_HEAR__: |
| - | *__SENSE_SMELL__: | + | * __SENSE_SMELL__: |
| - | < | + | < |
| VAR INT senses_range; | VAR INT senses_range; | ||
| </ | </ | ||
| Reichweite der Sinne in cm. | Reichweite der Sinne in cm. | ||
| - | < | + | < |
| // ********************** | // ********************** | ||
| // Feel free to use | // Feel free to use | ||
| Zeile 118: | Zeile 118: | ||
| </ | </ | ||
| Array von 50 variablen, die ein Nsc speichern kann à Achtung werden von der AI-Logik verwendet (siehe AI_constants). | Array von 50 variablen, die ein Nsc speichern kann à Achtung werden von der AI-Logik verwendet (siehe AI_constants). | ||
| - | < | + | < |
| VAR STRING wp; | VAR STRING wp; | ||
| </ | </ | ||
| C++-Code (Gothic-exe) speichert hier den aktuellen W(ay)P(oint) des Nsc, damit er für Abfragen zur Verfügung steht, d.h. ein T(ages)A(blauf) übergibt einen WP und dieser ist dann der aktuelle self.wp. | C++-Code (Gothic-exe) speichert hier den aktuellen W(ay)P(oint) des Nsc, damit er für Abfragen zur Verfügung steht, d.h. ein T(ages)A(blauf) übergibt einen WP und dieser ist dann der aktuelle self.wp. | ||
| - | < | + | < |
| // ********************** | // ********************** | ||
| // Experience dependant | // Experience dependant | ||
| Zeile 136: | Zeile 136: | ||
| Der Nsc soll Gunther heißen, keiner Gilde angehören und ein Ambient Nsc sein. Er wird einen Level von 17 haben, Stärke ist 100, Ausdauer auch, er hat kein Mana und 200 H(it)P(oints). Zu Übungzwecken ist der Nsc leider taub und hat eine WN Reichweite von 20m, dafür ist er ein guter Kämpfer, mit dem Talent 1_Hand der Stufe zwei.Dafür benötigt er natürlich eine Waffe, die seinem Talent entspricht und sich in seinem Inventory befindet. | Der Nsc soll Gunther heißen, keiner Gilde angehören und ein Ambient Nsc sein. Er wird einen Level von 17 haben, Stärke ist 100, Ausdauer auch, er hat kein Mana und 200 H(it)P(oints). Zu Übungzwecken ist der Nsc leider taub und hat eine WN Reichweite von 20m, dafür ist er ein guter Kämpfer, mit dem Talent 1_Hand der Stufe zwei.Dafür benötigt er natürlich eine Waffe, die seinem Talent entspricht und sich in seinem Inventory befindet. | ||
| - | [[Kasten G1]] | + | |
| - | < | + | **Gothic 1:** |
| + | < | ||
| instance None_999_Gunther (Npc_Default) | instance None_999_Gunther (Npc_Default) | ||
| // direkt von C_Npc abgeleitet werden | // direkt von C_Npc abgeleitet werden | ||
| Zeile 195: | Zeile 196: | ||
| }; | }; | ||
| </ | </ | ||
| - | [[Kasten Ende]] | + | |
| - | [[Kasten G2]] | + | **Gothic 2:** |
| Folgende Dinge sind am Script für Gothic2 geändert, damit es funktioniert. | Folgende Dinge sind am Script für Gothic2 geändert, damit es funktioniert. | ||
| 1. Die Funktion " | 1. Die Funktion " | ||
| Zeile 202: | Zeile 203: | ||
| 3. Das Kampfskillsystem hat sich ein Gothic2 geändert, daher wird entweder die Funktion " | 3. Das Kampfskillsystem hat sich ein Gothic2 geändert, daher wird entweder die Funktion " | ||
| 4. Das Schwert und die Tränke wurden ausgetauscht, | 4. Das Schwert und die Tränke wurden ausgetauscht, | ||
| - | < | + | < |
| instance None_999_Gunther (Npc_Default) | instance None_999_Gunther (Npc_Default) | ||
| // direkt von C_Npc abgeleitet werden | // direkt von C_Npc abgeleitet werden | ||
| Zeile 259: | Zeile 260: | ||
| }; | }; | ||
| </ | </ | ||
| - | [[Kasten Ende]] | ||
| Auch wenn es erst später erkärt wird muß hier diese Funktion schon angelegt sein, damit der Nsc auch " | Auch wenn es erst später erkärt wird muß hier diese Funktion schon angelegt sein, damit der Nsc auch " | ||
| - | < | + | < |
| func void Rtn_Start_999 () | func void Rtn_Start_999 () | ||
| { | { | ||
| Zeile 268: | Zeile 268: | ||
| Kopiert man diesen Nsc jetzt per Texteditor in ein vorhandenes File und hat das Parameter __-zreparse__ in den [[GothicStarter]] eingetragen, | Kopiert man diesen Nsc jetzt per Texteditor in ein vorhandenes File und hat das Parameter __-zreparse__ in den [[GothicStarter]] eingetragen, | ||
| Um aber die Übersicht bei vielen Nscs nicht zu verlieren ist es ganz nützlich die schon in Gothic verwendeten Strukturen zu benutzen. Nscs sind im Ordner __/ | Um aber die Übersicht bei vielen Nscs nicht zu verlieren ist es ganz nützlich die schon in Gothic verwendeten Strukturen zu benutzen. Nscs sind im Ordner __/ | ||
| - | == Der Bursche kriegt eine Aufgabe == | + | ===== Der Bursche kriegt eine Aufgabe |
| Damit er was zu tun hat, während er auf Euch wartet, muß der Charakter entweder einen TA oder einen StartState haben, hier wird jetzt der etwas komplexere Teil eine TA zu erstellen erklärt, weil darin auch das erstellen eines Z(u)S(tands) enthalten ist, der für StartState nötig ist. In diesem Zustand wird nicht viel passieren, außer das der Nsc sich auf den zugewiesenen Wegpunkt begibt um hier auf den Spieler zu warten und sich von Zeit zu Zeit mal von diesem WP wegzubegeben um zu pinkeln. | Damit er was zu tun hat, während er auf Euch wartet, muß der Charakter entweder einen TA oder einen StartState haben, hier wird jetzt der etwas komplexere Teil eine TA zu erstellen erklärt, weil darin auch das erstellen eines Z(u)S(tands) enthalten ist, der für StartState nötig ist. In diesem Zustand wird nicht viel passieren, außer das der Nsc sich auf den zugewiesenen Wegpunkt begibt um hier auf den Spieler zu warten und sich von Zeit zu Zeit mal von diesem WP wegzubegeben um zu pinkeln. | ||
| Damit das W(ahr)N(ehmungs)-System etwas deutlicher wird, bekommt der Nsc erst mal nur zwei WN, d.h. aber auch, dass er erst mal nur auf die Annäherung und Ansprechen des Spielers reagiert und ihm alles andere egal ist, wie Schaden nehmen angesprochen werden etc. | Damit das W(ahr)N(ehmungs)-System etwas deutlicher wird, bekommt der Nsc erst mal nur zwei WN, d.h. aber auch, dass er erst mal nur auf die Annäherung und Ansprechen des Spielers reagiert und ihm alles andere egal ist, wie Schaden nehmen angesprochen werden etc. | ||
| - | [[Kasten G1]] | + | |
| - | < | + | **Gothic 1:** |
| + | < | ||
| func void ZS_GuntherWait () | func void ZS_GuntherWait () | ||
| { | { | ||
| Zeile 311: | Zeile 312: | ||
| }; | }; | ||
| </ | </ | ||
| - | [[Kasten Ende]] | + | |
| - | [[Kasten G2]] | + | **Gothic 2:** |
| Hier wurde nur " | Hier wurde nur " | ||
| - | < | + | < |
| func void ZS_GuntherWait () | func void ZS_GuntherWait () | ||
| { | { | ||
| Zeile 352: | Zeile 353: | ||
| }; | }; | ||
| </ | </ | ||
| - | [[Kasten Ende]] | ||
| So jetzt ist es schon fast fertig, damit aber dieser ZS auch als TA verwendet werden kann muss er angemeldet werden. Dafür muss in der Datei __TA.d__ (in G1 sie in __/ | So jetzt ist es schon fast fertig, damit aber dieser ZS auch als TA verwendet werden kann muss er angemeldet werden. Dafür muss in der Datei __TA.d__ (in G1 sie in __/ | ||
| - | < | + | < |
| func void TA_GuntherWait ( var int start_h, | func void TA_GuntherWait ( var int start_h, | ||
| var int start_m, | var int start_m, | ||
| Zeile 367: | Zeile 367: | ||
| und die | und die | ||
| - | < | + | < |
| func void Rtn_Start_999 () | func void Rtn_Start_999 () | ||
| { | { | ||
| Zeile 381: | Zeile 381: | ||
| HINWEIS: TAs müssen mindesten zweimal in den Routinen auftauchen, auch wenn die Nscs 24h lang das gleiche tun, das hat was damit zu tun, dass der C++-Code die TAs von ZS nur so unterscheiden kann . | HINWEIS: TAs müssen mindesten zweimal in den Routinen auftauchen, auch wenn die Nscs 24h lang das gleiche tun, das hat was damit zu tun, dass der C++-Code die TAs von ZS nur so unterscheiden kann . | ||
| - | Zustände sind bei G1 in __/ | + | Zustände sind bei G1 in __/ |
| Ein letzter Schritt und Gunther ist dauerhaft im Spiel : | Ein letzter Schritt und Gunther ist dauerhaft im Spiel : | ||
| Anmeldung in der __/ | Anmeldung in der __/ | ||
| - | < | + | < |
| Wld_InsertNpc(None_999_Gunther," | Wld_InsertNpc(None_999_Gunther," | ||
| </ | </ | ||
| in den Oldcamp-Block, | in den Oldcamp-Block, | ||
| - | == Der Auftrag == | + | ===== Der Auftrag |
| Aufträge werden in Gothic über ein Dialogsystem implementiert, | Aufträge werden in Gothic über ein Dialogsystem implementiert, | ||
| - | < | + | < |
| instance Instanz_Name (C_INFO) | instance Instanz_Name (C_INFO) | ||
| { | { | ||
| Zeile 410: | Zeile 410: | ||
| </ | </ | ||
| Ist ein Dialog Important spricht der Nsc den Sc von sich aus an, sobald er ihn entdeckt (deshalb WN AssessPlayer in ZS_GuntherWait aktiviert s.o.) | Ist ein Dialog Important spricht der Nsc den Sc von sich aus an, sobald er ihn entdeckt (deshalb WN AssessPlayer in ZS_GuntherWait aktiviert s.o.) | ||
| - | < | + | < |
| permanent | permanent | ||
| }; | }; | ||
| </ | </ | ||
| Ist ein Dialog Permanent wird er, so lange seine Condition True ist immer angeboten | Ist ein Dialog Permanent wird er, so lange seine Condition True ist immer angeboten | ||
| - | < | + | < |
| FUNC int Instanz_Name_Condition() | FUNC int Instanz_Name_Condition() | ||
| { | { | ||
| Zeile 422: | Zeile 422: | ||
| </ | </ | ||
| Hier sollten per Abfrage Bedingungen erfragt werden, damit der Dialog gestartet werden kann. Gibt die Funktion einfach TRUE zurück wird der Dialog immer angeboten. | Hier sollten per Abfrage Bedingungen erfragt werden, damit der Dialog gestartet werden kann. Gibt die Funktion einfach TRUE zurück wird der Dialog immer angeboten. | ||
| - | < | + | < |
| func void Instanz_Name_Info() | func void Instanz_Name_Info() | ||
| { | { | ||
| Zeile 429: | Zeile 429: | ||
| </ | </ | ||
| Da es sich beim Exit auch um einen Dialog handelt wird hier nicht mehr Schritt für Schritt erklärt wofür dieser ist, nur soviel, die Exit-Funktion sorgt dafür, das es immer eine Auswahl im Dialogscreen gibt, mit der der Spieler den Dialog verlassen kann. | Da es sich beim Exit auch um einen Dialog handelt wird hier nicht mehr Schritt für Schritt erklärt wofür dieser ist, nur soviel, die Exit-Funktion sorgt dafür, das es immer eine Auswahl im Dialogscreen gibt, mit der der Spieler den Dialog verlassen kann. | ||
| - | < | + | < |
| // ************************ EXIT ************************** | // ************************ EXIT ************************** | ||
| Zeile 455: | Zeile 455: | ||
| Lets Go: Notwendige globale Variablen, ist so nicht sauber und sollte in einem eigenen File gepflegt werden, aber für die Tutorial Zwecke reicht es so erst mal. In Gothic sind sie aber in ___work/ | Lets Go: Notwendige globale Variablen, ist so nicht sauber und sollte in einem eigenen File gepflegt werden, aber für die Tutorial Zwecke reicht es so erst mal. In Gothic sind sie aber in ___work/ | ||
| - | < | + | < |
| const string GunthersSword | const string GunthersSword | ||
| var int int_GotSword; | var int int_GotSword; | ||
| Zeile 530: | Zeile 530: | ||
| Anmerkung: Bitte daran denken in der __Mod.ini__ den Parameter __force_subtitles=1__ zu setzen, sonst gibt es keine Textausgaben, | Anmerkung: Bitte daran denken in der __Mod.ini__ den Parameter __force_subtitles=1__ zu setzen, sonst gibt es keine Textausgaben, | ||
| - | Anmerkung 2: Zum Erstellen von Dialogen existiert ein Tool, den [http:// | + | Anmerkung 2: Zum Erstellen von Dialogen existiert ein Tool, den [[http:// |
| - | == Den Gegenstand der Begierde erstellen == | + | ===== Den Gegenstand der Begierde erstellen |
| Gunther will ein Schwert haben, das es so in Gothic nicht gibt, also muss es erstellt werden. | Gunther will ein Schwert haben, das es so in Gothic nicht gibt, also muss es erstellt werden. | ||
| Die Klasse | Die Klasse | ||
| - | < | + | < |
| CLASS C_Item | CLASS C_Item | ||
| { | { | ||
| Zeile 543: | Zeile 543: | ||
| </ | </ | ||
| Id wie bei der C_Npc Klasse (s.o.) | Id wie bei der C_Npc Klasse (s.o.) | ||
| - | < | + | < |
| VAR STRING | VAR STRING | ||
| </ | </ | ||
| Synonym zu C_Npc | Synonym zu C_Npc | ||
| - | < | + | < |
| VAR INT hp,hp_max; | VAR INT hp,hp_max; | ||
| </ | </ | ||
| Synonym zu C_Npc | Synonym zu C_Npc | ||
| - | < | + | < |
| VAR INT mainflag, | VAR INT mainflag, | ||
| VAR INT weight, | VAR INT weight, | ||
| </ | </ | ||
| Gewicht und Wert lassen sich als integer angeben. | Gewicht und Wert lassen sich als integer angeben. | ||
| - | < | + | < |
| // Für Waffen | // Für Waffen | ||
| VAR INT damageType; | VAR INT damageType; | ||
| </ | </ | ||
| Synonym zu C_Npc. | Synonym zu C_Npc. | ||
| - | < | + | < |
| VAR INT damageTotal; | VAR INT damageTotal; | ||
| </ | </ | ||
| Synonym zu C_Npc | Synonym zu C_Npc | ||
| - | < | + | < |
| VAR INT damage [DAM_INDEX_MAX]; | VAR INT damage [DAM_INDEX_MAX]; | ||
| </ | </ | ||
| Synonym zu C_Npc | Synonym zu C_Npc | ||
| - | < | + | < |
| // Für Rüstungen | // Für Rüstungen | ||
| VAR INT wear; | VAR INT wear; | ||
| </ | </ | ||
| Hier ist eigentlich nur __WEAR_TORSO__ interessant, | Hier ist eigentlich nur __WEAR_TORSO__ interessant, | ||
| - | < | + | < |
| VAR INT protection | VAR INT protection | ||
| </ | </ | ||
| Dies ist ein Array in dem für jede Schadensklasse ein eigener Rüstschutz angegeben werden kann. | Dies ist ein Array in dem für jede Schadensklasse ein eigener Rüstschutz angegeben werden kann. | ||
| - | < | + | < |
| // Für Nahrung | // Für Nahrung | ||
| VAR INT nutrition | VAR INT nutrition | ||
| </ | </ | ||
| Obsolet | Obsolet | ||
| - | < | + | < |
| // Benötigte Attribute zum Benutzen des Items | // Benötigte Attribute zum Benutzen des Items | ||
| VAR INT cond_atr | VAR INT cond_atr | ||
| Zeile 589: | Zeile 589: | ||
| </ | </ | ||
| Ein Array von zweimal drei Integer, in dem angegeben werde kann welche Stärke (z.B. 10) etc. nötig ist um diese Item anzulegen oder zu Benutzen. | Ein Array von zweimal drei Integer, in dem angegeben werde kann welche Stärke (z.B. 10) etc. nötig ist um diese Item anzulegen oder zu Benutzen. | ||
| - | < | + | < |
| // Attribute, die bei anlegen des Items verändert werden | // Attribute, die bei anlegen des Items verändert werden | ||
| VAR INT change_atr | VAR INT change_atr | ||
| Zeile 595: | Zeile 595: | ||
| </ | </ | ||
| Obsolet | Obsolet | ||
| - | < | + | < |
| // Parserfunktionen | // Parserfunktionen | ||
| VAR FUNC magic; | VAR FUNC magic; | ||
| Zeile 616: | Zeile 616: | ||
| </ | </ | ||
| Obsolet **?** | Obsolet **?** | ||
| - | < | + | < |
| // Die 3DS-Datei | // Die 3DS-Datei | ||
| VAR STRING visual; | VAR STRING visual; | ||
| </ | </ | ||
| - | Gibt' | + | Gibt an welche Datei als Darstellung für das Item geladen wird. |
| - | < | + | < |
| // Veränderung des NSC-Meshes beim Anlegen dieses Gegenstandes | // Veränderung des NSC-Meshes beim Anlegen dieses Gegenstandes | ||
| Zeile 628: | Zeile 628: | ||
| </ | </ | ||
| Wird zum Anlegen einer Rüstung benutzt, weil dann ein anderes ASC.File als visual geladen wird. | Wird zum Anlegen einer Rüstung benutzt, weil dann ein anderes ASC.File als visual geladen wird. | ||
| - | < | + | < |
| VAR INT visual_skin; | VAR INT visual_skin; | ||
| </ | </ | ||
| Texturvariation für das betreffende Rüstungsmesh. | Texturvariation für das betreffende Rüstungsmesh. | ||
| - | < | + | < |
| VAR STRING | VAR STRING | ||
| </ | </ | ||
| Interner Name für das Benutzen von Items. | Interner Name für das Benutzen von Items. | ||
| - | < | + | < |
| VAR INT material; | VAR INT material; | ||
| </ | </ | ||
| Mit dem Material sind z.B. die " | Mit dem Material sind z.B. die " | ||
| - | < | + | < |
| // VAR STRING pfx; // Magic Weapon PFX | // VAR STRING pfx; // Magic Weapon PFX | ||
| </ | </ | ||
| Obsolet | Obsolet | ||
| - | < | + | < |
| VAR INT munition; | VAR INT munition; | ||
| </ | </ | ||
| Bei Bögen wird hier angegeben mit welcher Munition sie schießen (Arrow V Bolt). | Bei Bögen wird hier angegeben mit welcher Munition sie schießen (Arrow V Bolt). | ||
| - | < | + | < |
| VAR INT spell; | VAR INT spell; | ||
| </ | </ | ||
| Gibt an welchen Spell magische Items ausführen. | Gibt an welchen Spell magische Items ausführen. | ||
| - | < | + | < |
| VAR INT range; | VAR INT range; | ||
| </ | </ | ||
| Gibt den Radius an, in dem eine Nahkampfwaffe trifft. | Gibt den Radius an, in dem eine Nahkampfwaffe trifft. | ||
| - | < | + | < |
| VAR INT mag_circle; | VAR INT mag_circle; | ||
| </ | </ | ||
| Welchem Magischen Zirkel ist dieses Item zugeordnet. | Welchem Magischen Zirkel ist dieses Item zugeordnet. | ||
| - | < | + | < |
| VAR STRING description; | VAR STRING description; | ||
| </ | </ | ||
| Die Beschreibung, | Die Beschreibung, | ||
| - | < | + | < |
| VAR STRING text[ITM_TEXT_MAX]; | VAR STRING text[ITM_TEXT_MAX]; | ||
| VAR INT count[ITM_TEXT_MAX]; | VAR INT count[ITM_TEXT_MAX]; | ||
| Zeile 672: | Zeile 672: | ||
| So dann soll jetzt mal ein schönes Schwert entstehen, nach dem Gunther suchen lassen kann. Damit den Spieler das Schwert auch interessiert sollte es natürlich ein paar nette Werte haben, also soll es 1000 Erz wert sein und einen Schaden von 300 machen, das Visual wird aus den Gothicdaten geklaut, weil Visuals erstellen an einer andern Stelle erklärt wird. Ansonsten muss das Schwert natürlich eine Nahkampfwaffe und ein Schwert sein, sollte aus Metall bestehen und vielleicht noch ein bisschen von sich preisgeben(Beschreibung). | So dann soll jetzt mal ein schönes Schwert entstehen, nach dem Gunther suchen lassen kann. Damit den Spieler das Schwert auch interessiert sollte es natürlich ein paar nette Werte haben, also soll es 1000 Erz wert sein und einen Schaden von 300 machen, das Visual wird aus den Gothicdaten geklaut, weil Visuals erstellen an einer andern Stelle erklärt wird. Ansonsten muss das Schwert natürlich eine Nahkampfwaffe und ein Schwert sein, sollte aus Metall bestehen und vielleicht noch ein bisschen von sich preisgeben(Beschreibung). | ||
| - | [[Kasten G1]] | + | |
| + | **Gothic 1:** | ||
| < | < | ||
| INSTANCE ItMw_1H_GuntherWantedSword (C_Item) | INSTANCE ItMw_1H_GuntherWantedSword (C_Item) | ||
| Zeile 699: | Zeile 700: | ||
| }; | }; | ||
| </ | </ | ||
| - | [[Kasten Ende]] | + | |
| - | [[Kasten G2]] | + | **Gothic 2:** |
| Hier wurde das Visual ausgetauscht, | Hier wurde das Visual ausgetauscht, | ||
| - | < | + | < |
| INSTANCE ItMw_1H_GuntherWantedSword (C_Item) | INSTANCE ItMw_1H_GuntherWantedSword (C_Item) | ||
| { | { | ||
| Zeile 728: | Zeile 729: | ||
| }; | }; | ||
| </ | </ | ||
| - | [[Kasten Ende]] | ||
| Das Item lässt sich jetzt genauso wie Gunther per Konsole im Spiel einfügen. | Das Item lässt sich jetzt genauso wie Gunther per Konsole im Spiel einfügen. | ||
| Zeile 735: | Zeile 735: | ||
| Dafür öffnet man die Datei __/ | Dafür öffnet man die Datei __/ | ||
| - | Hier fügt man für das neue File den Pfad __ITEMS\\// | + | Hier fügt man für das neue File den Pfad __ITEMS\// |
| Achtung! Diese Datei erfordert zwingend Großbuchstaben. Falls es mal beim Gamestart Probleme geben sollte kann es sein, das eine Datei Daten aus einer anderen Datei referenziert und deshalb diese vor einer anderen geparst werden muß. Lösungshinweise: | Achtung! Diese Datei erfordert zwingend Großbuchstaben. Falls es mal beim Gamestart Probleme geben sollte kann es sein, das eine Datei Daten aus einer anderen Datei referenziert und deshalb diese vor einer anderen geparst werden muß. Lösungshinweise: | ||
| Natürlich lassen sich so auch neue Ordner referenzieren, | Natürlich lassen sich so auch neue Ordner referenzieren, | ||
| - | == Den " | + | ===== Den " |
| Hier wird wieder ein Dialog angelegt, in dem bestimmte Bedingungen erfüllt sein müssen und an Hand dieser werde noch Belohnungen verteilt, in diesem Fall // | Hier wird wieder ein Dialog angelegt, in dem bestimmte Bedingungen erfüllt sein müssen und an Hand dieser werde noch Belohnungen verteilt, in diesem Fall // | ||
| - | < | + | < |
| // ************************ EXIT ************************** | // ************************ EXIT ************************** | ||
| instance | instance | ||
| Zeile 785: | Zeile 785: | ||
| // 3.Schwert instanz abfragen, nur dann macht Auftraglösen Sinn | // 3.Schwert instanz abfragen, nur dann macht Auftraglösen Sinn | ||
| if (Npc_KnowsInfo ( hero, None_999_Gunther_AskForSword)) | if (Npc_KnowsInfo ( hero, None_999_Gunther_AskForSword)) | ||
| - | & | + | &&! int_GotSword |
| && | && | ||
| { | { | ||
| Zeile 836: | Zeile 836: | ||
| **Anmerkung zum obigen Codeabschnitt: | **Anmerkung zum obigen Codeabschnitt: | ||
| - | < | + | < |
| other.exp | other.exp | ||
| //die Zahl in Klammern gibt die erhaltenen Exp an | //die Zahl in Klammern gibt die erhaltenen Exp an | ||
| Zeile 846: | Zeile 846: | ||
| Außerdem könnt ihr auch hero angeben wenn ihr den Spieler meint, also: | Außerdem könnt ihr auch hero angeben wenn ihr den Spieler meint, also: | ||
| - | < | + | < |
| AI_Output( self, hero, " | AI_Output( self, hero, " | ||
| </ | </ | ||