===== Npc schrumpfen oder wachsen lassen ===== Hallo, ich möchte euch zeigen, wie ich es in meiner Modifikation realisiert habe, den Hero zu schrumpfen bzw. danach wieder wachsen zu lassen. (Lässt sich auch auf jeden beliebigen NPC anwenden) Insgesamt sind es 12 Stufen die alle 0.38 Sekunden den Helden schrumpfen, somit kommen wir auf eine Gesamtzeit von etwa 5 Sekunden in denen der Held auf 1/3 seiner Größe skaliert wird. **1:** Zuerst einmal erstellt ihr im Spacer 2x einen oCTriggerScript. (-> zCTriggerBase -> zCTrigger -> oCTriggerScript) **2:** Den einen nennt ihr SHRINK und den anderen GROW. (-> vobName) **3:** Jeweils bei beiden stellt ihr einen Delay von 0.38 ein. (-> fireDelaySec) **4:** Nun, beim Trigger SHRINK ist es wichtig, dass unter scriptFunc eine eindeutige Funktion beschrieben wird. Ich nenne es einfach mal SHRINK_EVENT. Das gleiche auch beim Trigger GROW -> GROW_EVENT (nach jeder Einstellung, nicht vergessen Apply zu drücken!) **5:** Jetzt zu den Funktionen, sie sehen wie folgt aus: var int ShrinkStatus; func void SHRINK_EVENT() { Print ("schrumpf"); //kann man weglassen if (ShrinkStatus == 0) { Mdl_SetModelScale(hero, 0.90, 0.90, 0.90); ShrinkStatus = 1; Snd_Play("MFX_Shrink_Cast"); Wld_PlayEffect("spellFX_Shrink", hero, hero, 0, 0, 0, FALSE ); Wld_SendTrigger ("SHRINK"); } else if (ShrinkStatus == 1) { Mdl_SetModelScale(hero, 0.85, 0.85, 0.85); ShrinkStatus = 2; Wld_SendTrigger ("SHRINK"); }//Das drüber: Es wird ein Sound, sowie ein visueller Effekt abgespielt. else if (ShrinkStatus == 2) { Mdl_SetModelScale(hero, 0.80, 0.80, 0.80); ShrinkStatus = 3; Wld_SendTrigger ("SHRINK"); } else if (ShrinkStatus == 3) { Mdl_SetModelScale(hero, 0.75, 0.75, 0.75); ShrinkStatus = 4; Wld_SendTrigger ("SHRINK"); } else if (ShrinkStatus == 4) { Mdl_SetModelScale(hero, 0.70, 0.70, 0.70); ShrinkStatus = 5; Wld_SendTrigger ("SHRINK"); } else if (ShrinkStatus == 5) { Mdl_SetModelScale(hero, 0.65, 0.65, 0.65); ShrinkStatus = 6; Wld_SendTrigger ("SHRINK"); } else if (ShrinkStatus == 6) { Mdl_SetModelScale(hero, 0.60, 0.60, 0.60); ShrinkStatus = 7; Wld_SendTrigger ("SHRINK"); } else if (ShrinkStatus == 7) { Mdl_SetModelScale(hero, 0.55, 0.55, 0.55); ShrinkStatus = 8; Wld_SendTrigger ("SHRINK"); } else if (ShrinkStatus == 8) { Mdl_SetModelScale(hero, 0.50, 0.50, 0.50); ShrinkStatus = 9; Wld_SendTrigger ("SHRINK"); } else if (ShrinkStatus == 9) { Mdl_SetModelScale(hero, 0.45, 0.45, 0.45); ShrinkStatus = 10; Wld_SendTrigger ("SHRINK"); } else if (ShrinkStatus == 10) { Mdl_SetModelScale(hero, 0.40, 0.40, 0.40); ShrinkStatus = 11; Wld_SendTrigger ("SHRINK"); } else if (ShrinkStatus == 11) { Mdl_SetModelScale(hero, 0.35, 0.35, 0.35); ShrinkStatus = 12; Wld_SendTrigger ("SHRINK"); } else if (ShrinkStatus == 12) { Mdl_SetModelScale(hero, 0.30, 0.30, 0.30); ShrinkStatus = 13; Wld_SendTrigger ("SHRINK"); }; }; //Erklärung: //ShrinkStatus ist am Anfang 0, wird die Funktion SHRINK_EVENT(); jetzt z.B. in einem Dialog benutzt, //wird der Wert der Variable ShrinkStatus abgefragt. Ist er 0, so wird der Hero auf seine 90%ige größe skaliert, //ein Magiesound wird abgespielt und ein VFX auf ihm. Die Variable wird dann jeweils um eins höher gesetzt. //Am Ende wird unser im Spacer gesetzter Trigger SHRINK gefeuert. //Er hat einen Delay von 0.38s, d.h. er feuert alle 0.38 Sekunden los und führt die Funktion SHRINK_EVENT aus. //Nun ist aber ShrinkStatus = 1 und nicht mehr 0, weshalb jetzt nur noch der Held auf seine 85%ige Größe skaliert //wird und der Trigger SHRINK wird wieder gefeuert. Usw und sofort. Ist ShrinkStatus nun auf 13, hat die Funktion ihr Ende, weil sie nicht mehr erneut gefeuert wird. //Insgesamt sind es 12 Stufen die alle 0.38 Sekunden den Helden schrumpfen, somit kommen wir auf eine Gesamtzeit von etwa 5 Sekunden in denen der Held auf 1/3 seiner Größe skaliert wird. func void GROW_EVENT () { Print ("grow"); //kann man weglassen if (ShrinkStatus == 1) { Mdl_SetModelScale(hero, 1, 1, 1); ShrinkStatus = 0; Wld_SendTrigger ("GROW"); } else if (ShrinkStatus == 2) { Mdl_SetModelScale(hero, 0.90, 0.90, 0.90); ShrinkStatus = 1; Wld_SendTrigger ("GROW"); } else if (ShrinkStatus == 3) { Mdl_SetModelScale(hero, 0.85, 0.85, 0.85); ShrinkStatus = 2; Wld_SendTrigger ("GROW"); } else if (ShrinkStatus == 4) { Mdl_SetModelScale(hero, 0.80, 0.80, 0.80); ShrinkStatus = 3; Wld_SendTrigger ("GROW"); } else if (ShrinkStatus == 5) { Mdl_SetModelScale(hero, 0.75, 0.75, 0.75); ShrinkStatus = 4; Wld_SendTrigger ("GROW"); } else if (ShrinkStatus == 6) { Mdl_SetModelScale(hero, 0.70, 0.70, 0.70); ShrinkStatus = 5; Wld_SendTrigger ("GROW"); } else if (ShrinkStatus == 7) { Mdl_SetModelScale(hero, 0.65, 0.65, 0.65); ShrinkStatus = 6; Wld_SendTrigger ("GROW"); } else if (ShrinkStatus == 8) { Mdl_SetModelScale(hero, 0.60, 0.60, 0.60); ShrinkStatus = 7; Wld_SendTrigger ("GROW"); } else if (ShrinkStatus == 9) { Mdl_SetModelScale(hero, 0.55, 0.55, 0.55); ShrinkStatus = 8; Wld_SendTrigger ("GROW"); } else if (ShrinkStatus == 10) { Mdl_SetModelScale(hero, 0.50, 0.50, 0.50); ShrinkStatus = 9; Wld_SendTrigger ("GROW"); } else if (ShrinkStatus == 11) { Mdl_SetModelScale(hero, 0.45, 0.45, 0.45); ShrinkStatus = 10; Wld_SendTrigger ("GROW"); } else if (ShrinkStatus == 12) { Mdl_SetModelScale(hero, 0.40, 0.40, 0.40); ShrinkStatus = 11; Wld_SendTrigger ("GROW"); } else if (ShrinkStatus == 13) { Mdl_SetModelScale(hero, 0.35, 0.35, 0.35); ShrinkStatus = 12; Snd_Play("MFX_Shrink_Cast"); Wld_PlayEffect("spellFX_Shrink", hero, hero, 0, 0, 0, FALSE ); Wld_SendTrigger ("GROW"); }; }; //Hier das gleiche Spiel, nur das die Variable ShrinkEvent nach der Funktion SHRINK_EVENT(); auf 13 steht. //Die Funktion GROW_EVENT(); fängt dann sozusagen unten an und arbeitet sich nach oben durch. **6**: Man muss nur dafür sorgen das dieser Code geparsed wird. Am einfachsten ist es, den Code als B_*.d im Ordner \Gothic II\_work\data\Scripts\Content\Story\Events zu speichern. Sie wird dann automatisch mitgeparset. Man kann die Funktion jetzt ganz einfach aus einem Dialog oder sonst wo heraus starten. Unwar mit ''GROW_EVENT();'' oder ''SHRINK_EVENT();'' Will man jemand anderes damit schrumpfen, ersetzt man einfach überall das Hero durch die entsprechende NPC_INSTANZ. Habt ihr mehrere Welten, müssen in jeder Welt die Trigger plaziert werden, in denen sie auch GEBRAUCHT werden. Heißt, wenn ich das Event in Jharkendar haben möchte, platziere ich die Trigger nur in der Welt. In Jharkendar und Minental, dann in den beiden Zens.