World of Gothic Archiv
> Editing Mission geben |
|
26.02.2002, 21:24 | #1 | ||
Harri Beiträge: 214 |
Mission geben
Ich hab vor einer Figur die kein Humanmodel ist eine Mission zu geben. Was muß ich da im wesendlichen beachten. Bis jetzt klappt das noch nicht so richtig. Bearbeitet habe ich die „Startup.d“ Wld_InsertNpc (xx_2000,"OC1"); //Test “Ta.d” // ********************************************* // Spez. TA für xx // ********************************************* func void TA_Sleepxx (var int start_h, var int start_m, var int stop_h, var int stop_m, VAR string waypoint) {TA_Min (self, start_h,start_m, stop_h, stop_m, ZS_Sleepxx, waypoint);}; angelegt: “ZS_Sleepxx.d” func void ZS_Sleepxx() { GuardPerception (); Npc_PercEnable (self, PERC_ASSESSPLAYER, B_AssessSC); AI_StandUp (self); AI_SetWalkmode (self,NPC_WALK); AI_GotoWP (self, self.wp); if (Wld_IsFPAvailable(self,"FP_STAND")) { AI_GotoFP (self, "FP_STAND"); AI_AlignToFP( self ); //Richte Dich aus } else { AI_AlignToWP (self); }; AI_PlayAni (self,"s_FistRun"); }; func void ZS_Sleepxx_loop() { AI_PlayAni (self,"t_Stand_2_Sleep"); }; func void ZS_Sleepxx_end() { AI_PlayAni (self,"s_FistRun"); }; “gol_2000_xx.d” instance Xx_2000 (Npc_Default) { //-------- primary data -------- name = "Xx-Test"; // npctype = npctype_ambient; guild = GIL_Golem; level = 100; // voice = 4; id = 2000; //-------- abilities -------- attribute [ATR_STRENGTH] = 100; attribute [ATR_DEXTERITY] = 100; attribute [ATR_HITPOINTS_MAX] = 500; attribute [ATR_HITPOINTS] = 500; attribute [ATR_MANA_MAX] = 0; attribute [ATR_MANA] = 0; //-------------------------------------------------------------- protection [PROT_BLUNT] = 50; // stumpfe Waffen protection [PROT_EDGE] = 150; // Waffen mit EDGE-Schaden (Klingen) protection [PROT_POINT] = 200; // Waffen mit POINT-Schaden (Pfeile,Bolzen) protection [PROT_FIRE] = 999; // Feuerschaden protection [PROT_FLY] = 999; // FLY-Schaden,d.h. wenn die Figur weggeschleudert wird protection [PROT_MAGIC] = 10; // Magie-Schaden //-------------------------------------------------------------- damagetype = DAM_FLY; //-------------------------------------------------------------- fight_tactic = FAI_GOLEM; //-------------------------------------------------------------- //-------- visuals -------- // animations Npc_SetToFistMode(self); Mdl_SetVisual (self, "xx.mds"); Mdl_SetVisualBody (self, "xx_body", DEFAULT, DEFAULT, "", DEFAULT, DEFAULT, -1); //-------- Talente -------- //-------------------------------------------------------------- senses = SENSE_HEAR | SENSE_SEE | SENSE_SMELL; senses_range = 1000; aivar[AIV_MM_Behaviour] = PASSIVE; aivar[AIV_MM_PercRange] = 1500; aivar[AIV_MM_DrohRange] = 1500; aivar[AIV_MM_AttackRange] = 1500; aivar[AIV_MM_DrohTime] = 0; aivar[AIV_MM_FollowTime] = 5; aivar[AIV_MM_FollowInWater] = TRUE; // aivar[AIV_MM_REAL_ID] = ID_STONEGOLEM; //------------------------------------------------------------- //-------- inventory -------- CreateInvItems (self, ItFoRice,6); CreateInvItem (self, ItFoBooze); CreateInvItem (self, ItMi_Stuff_Plate_01); //-------------Daily Routine------------- daily_routine = Rtn_start_2000; }; FUNC VOID Rtn_start_2000 () { TA_Sleepxx (20,50,07,50,"FP_ROAM_OW_MEATBUG_04_03"); TA_Sleepxx (07,50,20,50,"FP_ROAM_OW_MEATBUG_04_03"); }; Und die dazu gehörigen Animationen. Er ist nirgends zu sehen! Ich kann aber mit Insert xx_2000 die Figur einfügen. Das klappt und der greift mich auch gleich an. Hab ich irgend was vergessen oder falsch gescriptet? |
||
27.02.2002, 20:41 | #2 | ||
GülleMüller Beiträge: 472 |
mhhh... Scheint eigentlich alles richtig zu sein. Wo genau hast du "Wld_InsertNpc (xx_2000,"OC1"); //Test " eingefügt? Vielleicht ist es wichtig, daß du es entweder in die Funktion "FUNC VOID STARTUP_SUB_OLDCAMP ()",oder "..._SURFACE ()" reinschreiben mußt(Wenn du es nicht schon so gemacht hast)?! Ich kann dir nur noch n Tipp geben: Überprüfe, ob der NPC richtig eingefügt und initialisiert wurde, indem du die Funktion Hlp_IsValidNpc(xx_2000) aufrufst (gibt 1=true oder 0=false zurück) aufrufst. Das geht z.B. bei "B_KAPITELWECHSEL.d": füge nach "B_Give_SkipChapter2Weapons ();" unter KAPITEL 1 dies ein if (Hlp_IsValidNPC(xx_2000) == 1) { introducechapter ("xx_2000 is da","Die Welt der Verurteilten","chapter1.tga","levelup.wav", 6000); } else { introducechapter ("xx_2000 nicht da","Die Welt der Verurteilten","chapter1.tga","levelup.wav", 6000); }; Dann reparsen (logisch hehe ) und Gothic starten. Wenn du dann mit Diego fertig bist kommt das Bild mit Kapitel 1 und so mit der entsprechenden Meldung. Achso, startest du Gothic direkt oder als MOD? Wie ich nämlich erwähnt hatte konnte ich auch keinen NPC einfügen, wenn ich in der MOD ini Datei noch die Files stehn hatte. Als ich alles außer vdf=... rausgenommen hatte ging es. Ich hoffe es hilft ein wenig. CU und good luck :D |
||
02.03.2002, 01:16 | #3 | ||
GülleMüller Beiträge: 472 |
Nur als Info...
Falls es jemand wissen möchte: Wir haben es jetzt raus, weshalb es nicht gefunzt hatte: Bei dem Aufruf "TA_Sleepxx (20,50,07,50,"FP_ROAM_OW_MEATBUG_04_03");" muß ein existierender Wegpunkt hin. So wie ich das mitbekommen haben darf es kein Freepoint sein... Weiterhin ist es nicht wichtig, wo man die Wld_InsertNPC() reinschreibt. Die Way-/Freepoints von allen ZENs wurden schon vor dem Aufruf von "startup.d" geladen und sind somit immer erreichbar. Ich glaube die einzelnen Funktionen in startup hat pb der Übersicht wegen gemacht, obwohl ich das alles absolut verwirrend finde(aber jeder hat halt ne andere Scriptingart). Wenn ich was falsches schreibe BITTE korrigieren! Danke. GülleMüller |
||
02.03.2002, 08:07 | #4 | ||
Alistair Beiträge: 82 |
Sehr interesant - danke. Ich habe auch solche Probleme gehabt. |
||
02.03.2002, 14:12 | #5 | ||
Harri Beiträge: 214 |
Ich denke mal das Problem ist noch nicht 100%ig gelöst Der NPC erscheint zwar und kann auch auf einem Freepoint mit B_GotoFP (self, "FP_xx"); Platziert und Ausgerichtet werden, aber... @GülleMüller die Ani: AI_PlayAni (self,"t_Stand_2_Sleep"); Wird nicht “abgespielt”. Der NPC befindet sich im „Ambiente-mod“! Oder ist es bei dir anders? |
||
03.03.2002, 03:36 | #6 | ||
GülleMüller Beiträge: 472 |
Jo du hast recht Harri... Die Anim wird nicht ausgeführt. Das Ding steht nur rum. Vielleicht ist da was an der Ani frisch(ohne dir nahetreten zu wollen :) ). Was sollte da eigentlich passieren? Schlafen legen oder so? Ach nochwas: gibt es n Prog,wo man sich die anims anschaun kann(also ein Gothicanimation exporter/viewer oder so) bevor man es einfügt? |
||
03.03.2002, 12:44 | #7 | ||
NicoDE Beiträge: 1.398 |
AniViewer...
soetwas gibt es leider nicht, da 3ds max in der Beziehung völlig ausreichend ist und für Details doch die Engine herhalten muß. - nico |
||
03.03.2002, 13:02 | #8 | ||
Harri Beiträge: 214 |
Nein die Ani ist ok. Das kann man auch feststellen wenn man den anderen Typ (also ohne _2000) einfügt. Dieser wird allerdings nicht über TA_ in den Sleep-mode gesetzt sondern direkt in der xx.d mit der Funktion: aivar[AIV_MM_SleepStart] = 22; aivar[AIV_MM_SleepEnd] = 6; aivar[AIV_MM_EatGroundStart] = 6; aivar[AIV_MM_EatGroundEnd] = 22; Wobei EatGround die gleiche Ani abspielt wie Sleep. |
||
04.03.2002, 01:29 | #9 | ||
Harri Beiträge: 214 |
Ich hab das Problem etwas eingegrenzt. Es ist warscheinlich ganz wichtig in der ZS_ die Anis GROß zu schreiben: func void ZS_Sleepxx_loop() { PrintDebugNpc (PD_ZS_LOOP, "ZS_Sleepxx_Loop" ); AI_PlayAni (self,"T_STAND_2_SLEEP"); AI_PlayAni (self,"S_SLEEP"); }; func void ZS_Sleepxx_end() { PrintDebugNpc( PD_TA_FRAME, "ZS_Sleepxx_End" ); AI_PlayAni (self,"T_SLEEP_2_STAND"); }; Allerdings ist etwas „unschön“. Wenn der NPC aus der TA_ gerissen wird (z.B. angreifen) wird diese augenblicklich abgebrochen und das Ende nicht animiert. Jedenfalls nicht bei mir. Ist das normal oder haben wir da immer noch einen Fehler im Script? |
||
04.03.2002, 08:54 | #10 | ||
NicoDE Beiträge: 1.398 |
Ja, es leider nicht unwichtig, ob die Animation groß oder klein geschrieben wird (als Fausregel gilt: groß schreiben, ist aber nicht bei allen so =/ ). Zu dem 'Herausreißen' aus den TAs... das ist 'normal'. - nico |
||
04.03.2002, 13:31 | #11 | ||
GülleMüller Beiträge: 472 |
Der Abbruch ist in den jeweiligen Perceptions definiert. Wenn er angegriffen wird reißt es ihn sofort aus der Ani, aber wenn er nur nen Feind sieht beendet er erst (End schleife) die Ani und geht dann zum agnriff über. Das müßte irgendwo in perception(s).d sein. Hab dir ne m@il geschickt, weil hab noch probs mit den Anis... |
||
|