World of Gothic Archiv
> NWN-Hilfe Story schreiben |
|
19.08.2002, 15:08 | #1 | |||
Arkcroth Beiträge: 68 |
Story schreiben
So vielleichts Intressiert es jemanden vielleicht auch nicht aber ich werde jetzt mal Kund tun wie ich vorgehe wenn ich mir eine Story überlege (ist ja nicht so das ich nur für NWN baue *g*). Freigabe fürs ForgottenBook geb ich auf jeden Fall. 1. Die Blitzidee: Sicher kennt ihr das. Ihr habt ne fixe Idee, irgendwas wo ihr euch sagt "Das ist cool, da bau ich nen Modul!!!" Aber STOP. Vorsicht Falle! Wenn ihr wirklich ein gutes vor allem Singleplayer Modul macht braucht ihr ne Story. Eine Story verläuft immer gleich. Am Anfang ist der Held schwach oder er ist stark und wird wieder schwach. Dann baut sich Story von diesem Tiefpunkt wieder auf. Das ist das was man als nächstes machen sollte. 2. Von der Blitzidee zum Story-Konzept: Nehmt euch Word, oder nen Block und nen Stift und schreibt ganz grob diesen Verlauf auf... Natürlich kann man hier auch schon detailierte werden aber je mehr Details ihr in dieser Phase euch ausdenkt umso schneller verliert ihr den Überblick über die Story an sich (alles eigene Erfahrung... leider *g*) Ich mach hier mal nen "sehr knappes" Beispiel für einen Storyverlauf: 1. Der Spieler startet auf dem Weg in eine Stadt. 2. Der Weg wird versperrt da einige Goblins die Wege unsicher gemacht haben. 3. Der Spieler nimmt den Auftrag von einem NSC an, die Goblinhöhlen zu säubern. 4. In den Höhlen findet der Spieler mysteriöse Hinweise über den eigentlichen Agressor (die Goblin waren nur Mittel zum Zweck). 5. Aufgrund des Hinweises wird der bekommt der Spieler von dem NSC (nennen wir ihn ab hier Waldläufer)einen speziellen Auftrag und lässt ihn durch das Tor. 6. Der Spieler begibt sich zur Stadt (auf dem Weg findet er eine verschlossene Höhle und ein brennendes Bauernhaus voller Zombies... dazu aber später) 7. Seine Kontaktperson in der Stadt ist eine "schöne" Frau. Sie erklärt ihm weitere Hintergründe (Überfälle von Untoten usw.). Sie gibt den Spieler den Auftrag der Sache ein wenig nachzugehen. Dem Spieler fallen die Untoten am Bauernhaus ein. Der Spieler wird dorthin geschickt. 8. Am Bauernhaus (das sich jetzt ein wenig verändert hat... düsterer geworden) dringt er in ein Kellergewölbe ein. Dort wird es zunehmenden "darker". 9. Nachdem weitere Hinweise gefunden wurden soll der Spieler zu der Frau zurückkehren. Wieder an der Oberfläche (am Bauernhaus) ist ein grosses Böses Monster das der Spieler nicht allein erledigen kann. Im letzten Moment kommt der Waldläufer und rettet den Spieler. (Freundschaften). 10. Man geht zurück in die Stadt. Wiedersehen mit der Frau und dem Waldläufer. Dort verdichten sich die Hinweise auf den Urpsung der Untotenplage. Spieler freundet sich mit der Frau an. 11. Waldläufer und Spieler bekommen den Auftrag eine alte versiegelte Gruft zu erforschen. 12. Gruft wurde erforscht und einige myteriöse Hinweise gefunden. Die beiden Helden kehren zurück und finden eine Stadt vor die von Untoten überschwemmt wird. 13. Die Frau wird getötet, Spieler verlangt nach Rache. UND SO WEITER... weiter will ich die Story nicht erzählen... denn das ist mein derzeitiges Projekt (NWN-Modul)*g*. 3. Details ausarbeiten: Ist also Punkt 2 abgeschlossen könnt ihr für jeden Punkt ins Detail gehen... das kann sehr viel schreibarbeit werden aber je mehr ihr jetzt schon ausformuliert umso einfacher lässt es sich danach ab arbeiten (auch wieder eigene Erfahrungen *g*). Erschafft NSCs die nicht so bedeutendt sind, wie reagieren die Wachen, wie ist die allgemeine Stimmung der Bürger, solche Sachen definiert ihr jetzt. Schreibt ruhig schon vieles aus. Danach kann es auch schon eigentlich losgehen. So und nun noch nen paar Tips: 1. Setzt eure eigenen Massstäbe nicht zu hoch: Was auch viele am Anfang falsch machen ist das einem eine Geschichte im Kopf rumschwirrt die viel zu Episch ist. Viel zu gross. Man muss sich nicht gleich mit Tolkien messen. Fangt klein an. 2. Andere Fragen und Teilhaben lassen: Oft gehen einem die Ideen nach einigen Wochen aus. Fragt und diskutiert über eure Ideen und eure Story. Lasst andere mit an eurem Projekt arbeiten. Ich zum Beispiel habe jemanden der meine "Dummy-Texte" in guten Stil umschreibt. Der selbe jemand hilft mir bei der Story-Line und den Nebenquests. Wenn ihr nicht scipten könnt sondern eher landschaften designed dann besorgt euch einen Kumpel der das kann, zusammen macht das ganze mehr Spass. 3. Wenn es gute Welten gibt, warum eine neuen Erschaffen?: Fearun, der Hauptkontinent in den Frogotten Realms, aus NWN bietet unglaublich viele möglichkeiten um neuen Abenteuer und Geschichten zu erzählen. Wenn eine Welt bekannt ist würde ich in der selben Welt eine Geschichte verfassen. Man kann sich viele Dinge sparen die man in einer völlig neuen Welt erst erklären müsste. 4. Nicht aufgeben: Ich merke es gerade bei mir wieder. Ich habe jetzt eine Weile mein Modul gebaut... und hatte jetzt ne längere Ruhephase. Aber das ist der Punkt wo man nicht aufgeben sollte. Ich habe einen Haufen angefangener "Romane" auf meiner Festplatte von den ich keinen jemals zuende gebracht habe. Also wenn ihr ein Modul baut gebt nicht auf. Wenn euch Ideen fehlen fragt andere. Wenn euch Skills fehlen fragt andere. So das wars wieder von mir... Wenn ihr diskutieren wollt oder meint ich schreibe nen haufen *peeep* dann nur los! :) seeya Ark PS: Hab für den text jetzt echt lange gebraucht :) ... und Pausen dazwischen gemacht. Wundert euch also nicht über etwaige Schreib-Stil-Veränderungen *g* UND ich weis da sind nen haufen Gramatik- und Rechtschreibfehler drin *gg* |
|||
19.08.2002, 15:21 | #2 | |||
Rhaegar Beiträge: 296 |
Boah! Musstest du Punkt 13 verraten? Solche Stellen liebe ich in Buechern (lieben ist nicht das richtige Wort ich hasse sie, oder besser "ich liebe es solche Stellen zu hassen" :D )und jetzt weiss ich das schon im vorraus, sollte ich jemals dein Modul spielen ;) ! Das mit dem "sich in Details" verlieren und "nicht Aufgeben" kann ich nur bestätigen. Passiert mir selbst ziemlich haeufig. Ach ein Tipp meinerseits noch: Immer einen Fail-Safe-Plan haben! Was wenn den Spieler z.B. trotz aller Bemuehungen deinerseits, die Frau in sein Herz zu "steuern", die Frau voellig kalt laesst? Sei es weil er keinen Sinn fuer Romantik hat, oder warum auch immer. Dann wird er kaum sonderlich auf Rache sinnen.(Aber ich bin sicher du hast daran auch selbst gedacht ;), wollt's nur noch mal hervorheben). |
|||
19.08.2002, 15:27 | #3 | |||
Arkcroth Beiträge: 68 |
Naja...
Naja... Ich hoffe ich kann die Story so gut in NWN umsetzen wie ich es vor habe *g*... Noch nen paar Details... für Fearun-Freaks... Heimgesucht von diesen Untoten wird die Stadt Aschabafurt sein. Aschabafurt liegt auf dem Weg durch das Nebeltal. Das Nebeltal ist das Tal der Talländer das an den grossen alten Elfenwald Cormathor (früher auch Cormantyhr)angrenzt. Als ganz ganz groben Plan verfolge ich ein zweites Abenteuer mit dem selben Charakter aus dem ersten... wo es in in den Elfenwald treibt. Dort kann man unglaubliche Orte ausgraben... Wenn es ein vernünftiges Ruinen-TileSet gäbe könnte man sogar Myth Drannor basteln *g* seeya Ark PS@Rheagar: Findest du die Story soweit gut? Oder zu standart (ich bin mir wegen den Gobos noch unsicher... aber es gibt so wenige echte Low-Level-Monster in D&D). |
|||
19.08.2002, 15:41 | #4 | |||
Rhaegar Beiträge: 296 |
*nickt* Gobos sind der Fluch eines jeden Geschichtenerzaehlers. Man kann nicht mit ihnen, man kann aber auch nicht ohne *g*. Ansonsten finde ich die Geschichte nicht schlecht, da kann ein richtig schoenes Modul draus werden, vor allem wenn es dir gelingt die Frau wirklich so zu gestalten, dass der Spieler etwas fuer sie empfindet, so wie es Bioware z.B. mit Aribeth bei mir geschafft hat (Spoiler auf das 4.Kapitel: Spoiler! (zum lesen Text markieren)
). Ich bin jedenfalls mal auf das fertige Modul gespannt :) ! |
|||
19.08.2002, 15:51 | #5 | |||
Arkcroth Beiträge: 68 |
...
Ich denke das wird noch nen gutes Stück dauern. Was einfach daran liegt das mir das jemand fehlt der mir vorort mit dem Script hilft. C++ ist einfach nicht meine Stärke. Und ich bleib oft an so Scriptproblemen hängen... leider. Naja... mein Modul funktioniert soweit das einen der Waldläufer nach Aschabafurt schickt. Aber im moment drück ich mich davor Aschabafurt zu bauen... das ist nicht so einfach.. ich hab zwar ne Karte von der Stadt aber allein solche Sachen das es keine Furten in den TileSets gibt erschweren die Sache. Im moment überleg ich wie ich Aschabafurt aufbauen soll... Naja kommt Zeit kommt Aschabafurt :) seeya Ark |
|||
19.08.2002, 16:01 | #6 | |||
Rhaegar Beiträge: 296 |
Hab' gerade nochmal in meinem FR Campaign-Setting geblaettert. Wenn ich mir die Karte von Aschabafurt so anschaue, wird das Ganze wirklich eine Herausforderung. Ist einfach schade, dass in NWN alles in 90° Winkeln zueinander verlaeuft :( . Falls du Skriptprobleme hast: Ich helfe gerne, wenn ich kann. Notfalls auch bei etwas "groesseren" Skripten. |
|||
19.08.2002, 16:08 | #7 | |||
Arkcroth Beiträge: 68 |
dank dir aber...
hilft mir nicht immer... Ich baue VIEL auf dem Rechner zuhause. Nicht hier auf der Arbeit (*g*). Da hätt ich dann gern kompetente Hilfe *g*. naja... aber wenn du mir helfen magst ich hab da noch nen NSC der so Sachen machen soll und ich keine Ahnung hab wie ich das Anfang (kopiert aus nem andern Thread): <<<<<<< Also ich als Niete was das Scripten angeht hat hier 2 warscheinlich leichte Scripte die 2 Wachen von mir bekommen sollen. Ich hab auch schon alles vorbereitet (Unique-Tags, Wegpunkte and so on... sollte was fehlen sagt es). Die Tags der Objekte trage ich in eckigen Klammern ein [TAG]. Fangen wir mit dem leichten an. Wache1[GuardSit] soll sich auf einen Schemel[schemel] setzen und sich zum Bratenspiess[CampfirewithSpit_1] ausrichten (setzen kann er sich bei mir schon schaut aber immer in die falsche Richtung). Wenn man die Wache anspricht soll er nur sagen "Ich bin beschäftigt" (nicht im Dialog sondern nur über seinem Kopf) OPTIONAL: Wache1 benutzt den Bratenspiess (dreht das teil oder so) Und jetzt kommt der schwierige Teil: Wache2[GuardGotoPatrol] soll als erstes auf folgenden Wegpunkten laufen [bridgepatrol_waypoint1, bridgepatrol_waypoint2, bridgepatrol_waypoint3, bridgepatrol_waypoint4, bridgepatrol_waypoint5] danach zu Wache1[GuardSit] gehen, kurz den Bratenspiess[CampfirewithSpit_1] anschauen (so um die 2 Minuten) und dann wieder zum ersten Wegpunkt gehen [bridgepatrol_waypoint1] dort eine Minute warten und wieder ALLE Wegpunkte ablaufen. Danach wieder zum ersten Wegpunkt[bridgepatrol_waypoint1] gehen 5 Minuten warten. Danach geht diese Aktionskette wieder von vorne los. OPTIONAL: Wache2 könnte statt nur auf den Bratenspiess zu schauen etwas dazu sagen... so wie "Hmmmmm... sieht lecker aus." IST SOWAS MACHBAR? Und ist es so schwierig wie es sich anhört. seeya Ark PS: Wenn ihr den Text nicht versteht seit ihr nicht dumm dann hab ich warscheinlich nur WIRR geschrieben. *g* <<<<<<< Den ersten Teil hab ich fertig. Der Typ sitzt auf der Bank (keinen Schemel mehr machte Probs) und bleibt beim Reden sitzen. Das langt mir. Aber das mit der zweiten Wache ist dumm. Im moment läuft er einfach nur Wegpunkte ab. Immer und immer wieder. seeya Ark |
|||
19.08.2002, 16:14 | #8 | |||
Arkcroth Beiträge: 68 |
noch was...
quote: Naja... die 90 Grad problematik ist nicht so schlimm. Gut genug kann man es darstellen. Grösseren Bammel hab ich vor allem vor den ganzen Leuten, den Ganzen Orten die ganzen Häuser und das nur mit dem "ländlich" TileSet darzustellen. Das nervt mich. Es gibt einfach zu wenig Gebäude. Naja... und halt Aschaba ... der Fluss. Muss ja im Aurora ein See sein da man sonst durchwandern kann.... ... hmmm... ich könnte eine Furt darstellen indem ich eine Stelle in dem Fluss mit so Flussteilen darstelle... erst wollte ich ne Holzbrücke nehmen aber das wäre noch weiter weg vom FR-Campaign-Setting (jaja... hab D&D 3rd auch als P&P *g*). Einfacher ist es immer sich Orte auszudenken... aber andereseits sage ich mir. Bioware hat Niewinter auch ganz gut hinbekommen... also warum sollte sowas "kleines" wie Achabafurt nicht gehen? Vielleicht mach ich doch Stadtteile... eigentlich wollte ich das vermeiden... aber naja... seeya Ark |
|||
19.08.2002, 16:31 | #9 | |||
Rhaegar Beiträge: 296 |
Hm... Das Problem hatte ich auch mal. Wenn man die Standardprozedur zum Wegpunkte ablaufen benutzt, scheint der NPC fuer alle anderen Kommandos taub zu sein. Vermutlich wird seine Action-Queue, also die Liste die Aktionen die er zu erledigen hat nicht abgearbeitet, weil er bevor er zur nächsten Aktion springt erstmal das Wegpunktlaufen beenden muss. Das ist aber endlos... Ich weiss nicht, ob man es auch anders loesen kann, aber versuch einfach ihn manuell die Wegpunkte ablaufen zu machen. Dazu im OnSpawn-Skript ganz am Ende die Zeile mit // am Anfang auskommentieren und dann ins Heartbeat-Skript des NPCs folgendes Skript:code\: code\: Sollte funktionieren. Ich werd's gleich mal ausprobieren und sag' dir, ob es das tatsächlich tut ;) ! ___________________________ Verliebt in den UserDefined Event ^^ Überzeugter Episode 2 Hasser[/font] |
|||
19.08.2002, 16:44 | #10 | |||
Arkcroth Beiträge: 68 |
Auskommentieren?
Was soll ich denn auskommentieren? Was am Anfang? |
|||
19.08.2002, 16:55 | #11 | |||
Rhaegar Beiträge: 296 |
Re: Auskommentieren?
quote: Ganz einfach :) ! Am Ende des OnSpawn-Skripts steht irgendwo code\: Einfach durch code\: ersetzen. Du kannst es auch einfach löschen aber durch die // betrachtet der Compiler die Zeile als Kommentar und beachtet sie nicht weiter :) ! Ach ja: Hab' das Skript oben jetzt nochmal ein ganz klein wenig editiert und getestet. Wenn du die Bezeichner der Wegpunkte und Objekte alle richtig geschrieben hast funtzt es einwandfrei :) ! ___________________________ Verliebt in den UserDefined Event ^^ Überzeugter Episode 2 Hasser[/font] |
|||
19.08.2002, 17:00 | #12 | |||
Arkcroth Beiträge: 68 |
DANKE...
ich probiers gleich mal aus... ... Sowas wie dich bräuchte ich hier vorort *g* seeya Ark |
|||
19.08.2002, 17:11 | #13 | |||
Rhaegar Beiträge: 296 |
Ein Problem gibt's bei der Sache noch, dass mir gerade einfiel. Ich versuch' mal das Problem verstaendlich zu erklaeren, anstatt dir nur die Loesung hinzklatschen: Hearbeat-Skripts werden alle 6 Sekunden ausgeführt, das Skript benoetigt aber insgesamt mindestens 7-8 Minuten bis es ausgefuehrt wird. Da jede Aktion für die spätere Verwendung auf die Action-Queue gelegt wird, wird das eventuell zu einem kleinen Performance-Problem: 8 Minuten *60=480 Sekunden. Also wird das Skript 480/6=80 mal ausgeführt, der arme Mensch hat also am Ende der 8 Minuten 18(Anzahl der Actions im Skript)*80=1440 Aktionen in seiner Queue. Die werden dann zwar von den ClearAllActions()-Kommando geloescht, aber das sind irgendwie schon ein wenig zu viele um Gesund zu sein... Benutz also lieber dieses Skript: code\: Edit: Ok, jetzt funtzt es. Allerdings musst du dazu noch drei Dinge beachten: 1.) Im OnSpawn-Skript gibt es einen Abschnitt: User Defined Events. Dort bei der Zeile code\: die ersten beiden / wegmachen, damit die Zeile mitkompiliert wird. 2.)Ins OnUserDefined-Event des NPCs das Skript hier reinhauen: code\: 3.In den Saetzen des Dialogs, den man mit deinem NPC fuehren kann, mit denen man den Dialog beenden kann folgendes Skript ins "Erfolgte Aktionen"-Feld code\: Hoert sich ziemlich umstaendlich an (ist es auch ein wenig),was ;) ? Ich erklaer' gleich noch alles ein wenig und "was" "warum" noetig ist. Wenn dir das zu kompliziert ist, benutz' einfach das Skript im Posting drueber, das geht notfalls auch :) ! ___________________________ Verliebt in den UserDefined Event ^^ Überzeugter Episode 2 Hasser[/font] |
|||
19.08.2002, 18:41 | #14 | |||
Rhaegar Beiträge: 296 |
Ok, nach dem Prinzip: "Gib einem Mann Feuer und er hat es für einen tag warm, zeig' ihm wie man ein Feuer macht und er hat es für den Rest seines Lebens warm" , jetzt also ein paar Erläuterungen zum Posting davor: 1. "Was": -Die erste Zeile "if (GetLocalInt(OBJECT_SELF,"nAlreadyFired")==0)" sorgt dafür, dass das Skript nur ausgefuehrt wird, wenn nAlreadyFired auf 0 ist -Die Zeile "SetLocalInt(OBJECT_SELF,"nAlreadyFired",1);" setzt nAlreadyFired auf 1, das Skript wird von weiteren HeartBeat-Aufrufen also nicht durchlaufen -Die Zeile "ActionDoCommand(SignalEvent(OBJECT_SELF,EventUserDefined(777)));" ruft am Ende des Skriptes das UserDefined-Skript des NPC auf mit der Erkennungsnummer 777 -In diesem Skript wird falls die Erkennungsnummer 777 ist die Variable nAlreadyFired auf 0 gesetzt, das Skript kann also wieder durchlaufen werden "Warum": Siehe obiges Posting: Um dafür zu sorgen, dass das Skript nicht alle 6 Sekunden ausgeführt wird, sondern erst, wenn es einmal vollstaendig durchlaufen ist. "Und warum das eigentlich?": Auch siehe oben: Weil es nicht gut sein kann, wenn ein einzelner NPC sich bereits über 1000 Aktionen merkt, die er am Ende (durch das ClearAllActions()) eh wieder verwirft, sie sich also gar nicht merken muss. 2. "Was": -Das Skript am Ende des Dialogs ruft wie oben den UD-Event auf, der "nAlreadyFired" auf 0 zuruecksetzt.code\: "Warum": Weil wenn man einen NPC anspricht die gesamte Action-Queue gelöscht wird. Also wird auch die vorletzte Zeile wo der UD-Event(UD=UserDefined) aufgerufen wird nicht mehr ausgeführt, die Variable "nAlreadyFired" bleibt auf 1 und der NPC macht gar nichts mehr sondern guckt nur noch blöde dem PC hinterher. Also rufen wir am Ende des Dialogs den Event manuell auf, damit der NPC beim nächsten Heartbeat-Aufruf (also nach 6 Sekunden) wieder anfängt seine Runden zu drehen. 3. "Was" -Wir entfernen die Kommentar-// bei der Zeile "//SetSpawnInCondition(NW_FLAG_END_COMBAT_ROUND_EVENT); //OPTIONAL BEHAVIOR - Fire User Defined Event 1003" im OnSpawn-Skript. -Wir haben im UD-Skript die Zeilen: eingefuegt.code\: "Warum?" Das Entfernen der Kommentarstriche bewirkt, dass nach jeder Kampfrunde der UD-Event mit der Erkennungsnummer 1003 ausgefuehrt wird. Wenn die Erkennungsnummer (die man ueber GetUserDefinedEventNumber() bekommt) also 1003 ist und der NPC nicht im Kampf ist (also es die letzte Kampfrunde war), setzen wir nAlreadyFired wieder auf 0, damit er nach dem Kampf wieder weiterpatroulliert. Ansonsten wuerde er nämlich wieder nur dumm rumstehen nach einem ueberlebten Kampf. (Das ! vor GetIsInCombat musst du dir als "nicht" vorstellen. GetIsInCombat liefert "True" wenn der NPC im Kampf ist und false wenn nicht. !GetIsInCombat macht exakt das Gegenteil. 4. "Warum eigentlich das "ActionDoCommand" bei einigen Befehlen?" Das sorgt dafür, das Befehle, die eigentlich sofort ausgefuehrt werden wuerden wie andere Aktionen auf die Action-Queue gelegt werden, also erst ausgefuehrt werden nachdem ale vorigen Aktionen beendet sind. (Funktioniert leider nicht mit allen Befehlen-mit SetLocalInt z.B. nicht, deswegen auch der Umweg über SignalEvent...) Edit: Achja: 5."Warum eigentlich diese seltsamen "SetLocalInt" und "GetLocalInt"-Befehle? Variablen kann man doch viel leichter abfragen und aendern über "nAlreadyFired=1;" !" Weil Variablen die du über "int Variable1" oder "object Variable2" deklarierst immer nur im aktuellen Skriptaufruf und nur in dem Teil des Skripts in dem sie deklariert werden gültig sind (die Teile sind durch die { } gekennzeichnet.Die Variable gilt nur innerhalb der {}Klammern in denen sie deklariert wird[und in den Unterteilen dieser Teile,also in {}-Klammerabschnitten die ihrerseits von denselben {} wie die Deklaration eingeschlossen werden]). Ein anderes Skript kann also nicht auf diese Variablen zugreifen und nach der Ausführung des Skriptes sind die Variablen auch weg. Deshalb verwendet man, wenn man Variablen die auch ausserhalb des Skriptes und nach dessen Ausführung verfügbar sein muessen SetLocalInt und GetLocalInt um einem Objekt diese Variablen zuzuweisen.Im Gegensatz zu den anderen Variablen sind diese dann allen anderen Objekten und Skripts zugänglich und haben bis zum Beenden des Spiels Bestand (es sei denn du löschst sie vorher mit DeleteLocal...). In unserem Fall kann das HB-Skript das 6 Sekunden nach dem ersten Aufruf aufgerufen wird auf die wie ueblich deklarierten Variablen des vorherigen Aufrufs nicht zugreifen, deswegen SetLocalInt(...). Hoffe das hilft dir ein wenig :) ! ___________________________ Verliebt in den UserDefined Event ^^ Überzeugter Episode 2 Hasser[/font] |
|||
20.08.2002, 09:04 | #15 | |||
Arkcroth Beiträge: 68 |
Guten Morgen da bin ich wieder UND WOW vielen dank!!!
Hey geil! Nicht nur das Script ist super, nein das du mir noch ne Erklärung für die Sachen gibts ist unglaublich... nett ... lieb... whatever... Herr Rhaegar! Sie dürfen sich unglaublich gelobt fühlen. Ich bin ja sowas von begeistert... *freu* ... ich hyperventilier grad *gg*. Willst du mal ne Version des Moduls haben (noch mit dummytexten leider)? Und du kommst wie Gawain15 auf jeden Fall in die Credits... Hab nämlich vor noch nen Intro (was simples) zu machen. So mit schönen Bildern und den "Entwicklern" (hoffe ich finde nen Video-Tool mit dem das vernünftig geht). Sehr Sehr geil!!! Und nochmal vielen dank, Rhaegar! Aber da kommt der Frageteufel doch noch einmal. Wenn ich ihn jetzt schlafen lassen möchte (matten liegen bereit) muss ich wieder nur nen "object oMatte1=GetObjectByTag("BedBeddingRoll1");" oben einfügen und unten nach den WalkWaypoints einfach nen "ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectSleep(), OBJECT_SELF);" daransetzen... okay... ich seh grad dann schläfft der für immer... hmmm... kann ich da ne Duration richtig als float angeben??? seeya Ark |
|||
20.08.2002, 10:45 | #16 | |||
Rhaegar Beiträge: 296 |
Also bevor ich zum nächsten komme erst eine kleine Korrektur: Im UserDefined-Skript muss statt der Zeilen code\: folgendes stehen: code\: "Warum funktioniert das erste nicht?" Kann sein dass es doch funtzt, aber ich bin mir nicht hundertprozentig sicher, ob am Ende der letzten Kampfrunde die GetIsInCombat()-Funktion schon False liefert. "Was macht die zweite Möglichkeit?" oTarget wird die nächste Kreatur zugewiesen die folgendes erfüllt: Ihre Einstellung (CREATURE_TYPE_REPUTATION) ist feindlich (REPUTATION_TYPE_ENEMY). Zu wem ist sie am Nächsten? Zu OBJECT_SELF also unserem Wächter. Die 1 legt fest das es die nächste sein soll, eine 2 würde die zweitnächste wählen. Nun legen wir noch ein zweites Kriterium fest nämlich, dass die Kreatur vom NPC wahrgenommen werden muss (CREATURE_TYPE_PERCEPTION) und zwar mit dem Sehsinn (PERCEPTION_SEEN). oTarget ist also entweder die nächste feindliche Kreatur, die der Wäechter sieht, oder falls es keine solche gibt bekommt oTarget den Wert OBJECT-INVALID. Mit "if (!GetIsObjectValid)..." regeln wir also dass er die Variable "nAlreadyFired" erst zuruecksetzt, wenn keine Gegner mehr zu sehen sind, also am Ende des Kampfes. Zum liegen poste ich gleich noch was :) ! ___________________________ Verliebt in den UserDefined Event ^^ Überzeugter Episode 2 Hasser[/font] |
|||
20.08.2002, 11:19 | #17 | |||
Arkcroth Beiträge: 68 |
funktioniert aber doch...
Das andere Funktioniert aber doch... naja... ich baus dann trotzdem mal schnell um... funzt dann bestimmt besser *g* |
|||
20.08.2002, 11:27 | #18 | |||
Rhaegar Beiträge: 296 |
Also zum liegen. Hat einige Probleme bereitet, aber jetzt funtzt es. Zur Dauer des Schlafes: Gar kein Problem! Einfach DURATION_TYPE_TEMPORARY und einen float-Wert für die Dauer angeben. Problem: Der SleepEvent haut alles von der ActionQueue runter, deswegen muss die Zeile ganz an den Schluss.Geht aber so problemlos. Ach ja: Wenn du statt ActionMoveToObject(oMatte) folgendes verwendest, um zur Matte zu laufen erwischt er die Matte etwas präziser, wenn er wie ein Stein zu Boden sinkt ;): -------- object oMatte=GetObjectByTag("BedBed...."); location lMatte=GetLocation(oMatte); . . . ActionMoveToLocation(lMatte); -------- Btw: Nichts zu danken! Hab' selbst einiges gelernt beim Schreiben der Skripts :)! |
|||
20.08.2002, 12:06 | #19 | |||
Arkcroth Beiträge: 68 |
ich probiers mal aus...
so habs mal eingebaut und probiers gleich mal aus... leider dauern meine Replies jetzt ein wenig länger da ich nebenher leider noch arbeiten muss *g* seeya Ark EDIT: okay... ich probier das mal EDIT die Zweite: Okay... er läuft prima zur matte... aber statt das er schlafen geht bleibt er einfach die 25 sec. da stehen :( Haste ne Ahnung warum? by the way... woher kommst du eigentlich? |
|||
20.08.2002, 16:41 | #20 | |||
Arkcroth Beiträge: 68 |
hab noch...
hab noch nen bisschen rumpobiert aber es einfach nicht geschafft das der Typ sich hinsetzt :( Naja... vielleicht fällt dir ja noch was ein. seeya Ark |
|||
20.08.2002, 16:47 | #21 | |||
Rhaegar Beiträge: 296 |
Ich paste am Besten einfach nochmal das fertige Skript hierhin, so wie's bei mir funtzt: code\: (die Bezeichner der Wegpunkte und Objekte sind bei mir eventuell ein wenig anders benannt; die musst du noch auf deine Bezeichner abäendern und die Wartezeiten hab' ich bei mir auch etwas kürzer, weil es sonst eine Plage ist das Skript zu testen.) Zur btw-Frage: Bei Stuttgart in der Nähe. ___________________________ Verliebt in den UserDefined Event ^^ Überzeugter Episode 2 Hasser[/font] |
|||
20.08.2002, 16:51 | #22 | |||
Arkcroth Beiträge: 68 |
Okay... dann mach ich meine Änderungen nachträglich rein (hatte noch 2 vectoren erschaffen zu denen der ab und zu schaut). Kann es aber vielleicht auchd daran liegen das die Wache Waffen trägt? seeya Ark btw: komme aus Mannheim |
|||
20.08.2002, 16:54 | #23 | |||
Rhaegar Beiträge: 296 |
Also an den Waffen liegt's sicher nicht. *überleg* Du kannst ja auch mal dein Skript hierrein posten, dann schau' ich's kurz durch. PS: Der Waechter ist bei dir aber kein Halbelf/Elf ,oder ;) ? |
|||
20.08.2002, 17:03 | #24 | |||
Arkcroth Beiträge: 68 |
okay habs mal getestet...
Also das hier ist der Teil meines Skriptes kannst du mir sagen warum der nicht pennen will (steht nur auf der Matte rum und nach 25 seks macht er seine alte Route). >>>>>> void main() { if (GetLocalInt(OBJECT_SELF,"nAlreadyFired")==0) { object oWP1=GetWaypointByTag("bridgepatrol_waypoint_01"); object oWP2=GetWaypointByTag("bridgepatrol_waypoint_02"); object oWP3=GetWaypointByTag("bridgepatrol_waypoint_03"); object oWP4=GetWaypointByTag("bridgepatrol_waypoint_04"); object oWP5=GetWaypointByTag("bridgepatrol_waypoint_05"); object oGuardSit=GetObjectByTag("GuardSit"); object oBeddingRoll=GetObjectByTag("BedBeddingRoll1"); location lBeddingRoll=GetLocation(oBeddingRoll); vector vSpit=GetPosition(GetObjectByTag("CampfirewithSpit_1")); vector vBridge=GetPosition(GetObjectByTag("BridgeLookTag")); vector vGate=GetPosition(GetObjectByTag("Wall2Gate")); SetLocalInt(OBJECT_SELF,"nAlreadyFired",1); ActionMoveToObject(oWP1); ActionMoveToObject(oWP2); ActionMoveToObject(oWP3); ActionMoveToObject(oWP4); ActionMoveToObject(oWP5); ActionMoveToObject(oGuardSit); ActionDoCommand(SetFacingPoint(vSpit)); ActionWait(5.0); ActionSpeakString("Hm, sieht lecker aus!"); ActionWait(4.0); ActionMoveToObject(oWP1); ActionMoveToObject(oWP2); ActionMoveToObject(oWP3); ActionMoveToObject(oWP4); ActionMoveToObject(oWP5); ActionMoveToObject(oWP1); ActionWait(3.0); ActionDoCommand(SetFacingPoint(vBridge)); ActionWait(5.0); ActionDoCommand(SetFacingPoint(vGate)); ActionWait(5.0); ActionMoveToLocation(lBeddingRoll); ActionWait(5.0); ActionDoCommand(SignalEvent(OBJECT_SELF,EventUserDefined(777))); ActionDoCommand(ClearAllActions()); ActionDoCommand(ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectSleep( ),OBJECT_SELF,20.0)); } } |
|||
20.08.2002, 17:06 | #25 | |||
Arkcroth Beiträge: 68 |
Muhahahar
quote: Nein Nein... ist kein Spitzohr! Aber auch die können schlafen, oder sieht das Script vor das Elfen von diesem Effect unbeeinflusst bleiben??? seeya Ark PS: ich mach erst einmal feierabend... meld mich morgen früh so ab 9:00 wohl wieder... würd mich aber freuen wenn du ne Antwort geschrieben hast die mich morgen früh erwartet. *ggg* Also schönen Abend noch. |
|||
|