World of Gothic Archiv > Editing
Mission geben
Seite 1 von 1  1 
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...
Seite 1 von 1  1