World of Gothic Archiv
Alle Beiträge von dark-base
Seite 1 von 2  1  2 
10.06.2003, 16:05 #1
dark-base
Beiträge: 26
ZEvent Messages - ZEvent Messages
Ich möchte gerne die ZEvent Nachrichten für den ScreenFx Vob versenden, weiß aber nicht wie das geht. Kann mir da jemand helfen?
12.06.2003, 14:27 #2
dark-base
Beiträge: 26
ZEvent Messages -
Ich will die Nachricht "zEvent_BLEND_FADEIN" an dem im Spacer erstellten ScreenFX Vob senden um eine Bildschirmblende aufzurufen. Die Nachrichten kann man auch unter der Klasse "zCEvent Message" im Objekt-Dialog-Fenster im Spacer nachlesen.
12.06.2003, 16:56 #3
dark-base
Beiträge: 26
Wp bei eingefügten charaktern -
Es gibt keinen Konsolen-Befehl, der dies deaktiviert.
Du musst im Npc-Skript der Söldner die daily_routine(der Tagesablauf) ändern.

Hier ein Eintrag aus der daily_routine eines Wächters des Alten Lagers:

TA_Guard (00,00,06,00,"SPAWN_PATH_GUARD1");

Der Eintrag "SPAWN_PATH_GUARD1" ist der Name des Waypoints, zu dem er hingeht.
Die "" müssen immer am Anfang sowie am Ende eines Namens stehen.

Die Zahlen 00,00,06,00 bezeichnen die Zeit, von wie viel Uhr bis wie viel Uhr er den Zustand "Guard" ausführt. Das erste 00 sowie das zweite 00 regeln, wann er mit dem Zustand beginnt, in Stunden und Minuten. Das dritte 06 und das vierte 00 regeln, wann er diesen Zustand beendet. Auch wieder erst in Stunden- und dann Minutenanzahl. Das heißt, in diesem Fall steht der Wächter von 0.00 Uhr bis 6.00 Uhr dort und führt den Zustand "Guard" aus.

Wenn du jetzt willst, dass er von 6 Uhr morgens bis 18 Uhr abends am Waypoint "Altes_Lager" stehen soll, schreibst du:

TA_Guard (06,00,18,00,"Altes_Lager");

Der Waypointname hier war aber nur ein Beispiel, das es in Gothic nicht gibt.

Ein gutes Tutorial dafür findest du in der Modkit-Dokumentation unter "Tutorials" und dann "Skript-Tutorial".
18.07.2003, 13:55 #4
dark-base
Beiträge: 26
Held in den Normalzustand setzen -
Ich glaube diese Funktion ist die Lösung deines Problem:

// B_FullStop
// ==========
// Unterbricht jegliche Animation des NSCs. Hier wurde früher
// AI_Standup() verwendet. Dieser Befehl ist in einigen
// Situationen jedoch zu träge
// und wurde durch AI_StandUpQuick() ersetzt
//////////////////////////////////////////////////////////////////////

func void B_FullStop(var C_NPC npc)
{
PrintDebugNpc (PD_ZS_DETAIL, "B_FullStop");

Npc_ClearAIQueue (npc);
AI_StandUpQuick (npc);
};

Du kannst für dein Problem entweder diese Funktion benutzen oder AI_StandUpQuick(). Du findest die Funktion unter work/data/scripst/content/AI/AI_Intern und dort B_Functions.d
19.07.2003, 10:15 #5
dark-base
Beiträge: 26
Held in den Normalzustand setzen -
Ich hätte nicht gedacht ,dass die Funktion B_Fullstop solche Probleme machen kann, schön zu wissen. Aber auch, dass es jetzt klappt.

PS: Ich bin Arne B. :)
20.07.2003, 14:47 #6
dark-base
Beiträge: 26
NPCs sofort tot -
Z.b. über diese funktion:

//////////////////////////////////////////////////////////////////////////
// B_KillNpc
// =========
// Setzt die Lebenspunkte des angegebenen NSCs auf 0.
//////////////////////////////////////////////////////////////////////////
func void B_KillNpc(var int npcInstance)
{
PrintDebugNpc (PD_ZS_DETAIL, "B_KillNpc");

var C_NPC npc; npc = Hlp_GetNpc(npcInstance);
var int itemInstance;

npc.flags = 0;

CreateInvItem (npc,ItMi_Stuff_OldCoin_02); // Mission-Item, das verhindert, daß die Toten entfernt werden

Npc_ChangeAttribute (npc, ATR_HITPOINTS, -npc.attribute[ATR_HITPOINTS_MAX]);

if (Npc_GetInvItemBySlot(npc,INV_WEAPON,1))
{
PrintDebugNpc (PD_ZS_DETAIL, "...Waffe in Slot 1 gefunden!");
itemInstance = Hlp_GetInstanceID(item);
Npc_RemoveInvItem (npc, itemInstance);
};

if (Npc_GetInvItemBySlot(npc,INV_WEAPON,2))
{
PrintDebugNpc (PD_ZS_DETAIL, "...Waffe in Slot 2 gefunden!");
itemInstance = Hlp_GetInstanceID(item);
Npc_RemoveInvItem (npc, itemInstance);
};
};

Bei dieser Funktion musst du einfach nur den instanznamen des npc übergeben und er wird sofort gekillt.
Du findest sie unter work/data/scripts/AI/AI_Intern und dort B_Functions.d . Geht aber nur bei Möglichkeiten wo man funktionen einsetzen kann, z.B. wenn du en Schwert machen willst ,was alle töte geht das hier nicht.
20.07.2003, 14:49 #7
dark-base
Beiträge: 26
NPCs sofort tot -
sorry, habs geschrieben wärend dazu gepostet wurde.
20.07.2003, 15:20 #8
dark-base
Beiträge: 26
NPCs sofort tot -
Sehe ich das richtig ,dass du es so machen willst, dass bei jeder
Waffe ,sei es ein Hammer, ein Schwert, eine Lukerkralle... der Npc sofort tot ist?
20.07.2003, 15:23 #9
dark-base
Beiträge: 26
NPCs sofort tot -
Genauer gesagt: bei jeder Waffe wo der Npc nnormalerweise bewußtlos ist?
20.07.2003, 16:09 #10
dark-base
Beiträge: 26
NPCs sofort tot -
Da gibt es zwei möglichkeiten: entweder du machst jeder waffe einen besonderen schadenstyp dazu, sodasss sie dann sofort tot sind oder du killst sie bei der ep verteilung. Dies ist in in der datei B_GiveXP.d
im Pfad scripts/content/stoy/b programmiert.
Du musst einfach den eintarg:

func void B_DeathXP()
{
PrintDebugNpc (PD_ZS_FRAME, "B_DeathXP");
PrintGlobals (PD_ZS_CHECK);

if C_NpcIsHuman(self)
&& Npc_WasInState(self, ZS_Unconscious)
{
PrintDebugNpc (PD_ZS_CHECK, "...Opfer ist bewußtloser Mensch!");
// SN: keine XP für Finishing-Move!!!
}
else
{
PrintDebugNpc (PD_ZS_CHECK, "...Opfer ist entweder nicht bewußtlos oder kein Mensch!");
B_GiveXP (self.level * XP_PER_LEVEL_DEAD);
};
};

func void B_UnconciousXP()
{
PrintDebugNpc (PD_ZS_FRAME, "B_UnconciousXP");
PrintGlobals (PD_ZS_CHECK);

//-------- Erfahrung nur beim ersten Sieg über Menschen --------
if !C_NpcIsHuman(self)
|| !self.aivar[AIV_WASDEFEATEDBYSC]
{
PrintDebugNpc (PD_ZS_CHECK, "...erster Sieg!");
B_GiveXP (self.level * XP_PER_LEVEL_DEAD); // die vollen XP beim Sieg vergeben, da finishing-Move keine XPs mehr ergibt!
};
};

ändern indem du unter die zwei B_GiveXP befehle den Kill befehl ausführst. Dass sieht dann so aus:

func void B_DeathXP()
{
PrintDebugNpc (PD_ZS_FRAME, "B_DeathXP");
PrintGlobals (PD_ZS_CHECK);

if C_NpcIsHuman(self)
&& Npc_WasInState(self, ZS_Unconscious)
{
PrintDebugNpc (PD_ZS_CHECK, "...Opfer ist bewußtloser Mensch!");
// SN: keine XP für Finishing-Move!!!
}
else
{
PrintDebugNpc (PD_ZS_CHECK, "...Opfer ist entweder nicht bewußtlos oder kein Mensch!");
B_GiveXP (self.level * XP_PER_LEVEL_DEAD);
B_KillNpc (self);
};
};

func void B_UnconciousXP()
{
PrintDebugNpc (PD_ZS_FRAME, "B_UnconciousXP");
PrintGlobals (PD_ZS_CHECK);

//-------- Erfahrung nur beim ersten Sieg über Menschen --------
if !C_NpcIsHuman(self)
|| !self.aivar[AIV_WASDEFEATEDBYSC]
{
PrintDebugNpc (PD_ZS_CHECK, "...erster Sieg!");
B_GiveXP (self.level * XP_PER_LEVEL_DEAD); // die vollen XP beim Sieg vergeben, da finishing-Move keine XPs mehr ergibt!
B_KillNpc (self);
};
};
20.07.2003, 16:26 #11
dark-base
Beiträge: 26
NPCs sofort tot -
es kann aber seien dass die zweite methode probleme macht. Ich habs noch nie getestet ob dass klappt
24.07.2003, 19:10 #12
dark-base
Beiträge: 26
zenexp und 3DS Max 4.2 ? -
Wie die Fehlermeldung "DLL <[3DSMAX]pluginszenexp.dle> is an obsolete version - not loading" schon sagt hast du eine zu alte Version.Du hast wahrscheinlich den Zenexp aus dem Mod-Kit genommen, gell. Um den Fehler zu beheben musst du einfach ne neuere Version von nico's Page downloaden.
19.08.2003, 23:30 #13
dark-base
Beiträge: 26
Schleifen Problem - Schleifen Problem
Ich hatte in einer Funktion eine while Schleife eingebaut, worauf Gothic mir die Fehlermeldung : "U:PAR: Unknown identifier : WHILE (line 33)" gab. Da es hätte seien können, dass im Code etwas falsch war hatte ich meine Funktion zum Test auf das Simpelste und Notwendigste optimiert ,wass dann so aussah:
code\:

FUNC VOID Test()
{

var int BeendeS; //Beende Schleife

while (BeendeS == 0)
{

BeendeS = 1;

};
};



Leider bekam ich immer noch die gleiche Fehlermeldung. Es kann aber unmöglich seien, dass Gothic dieses Schlüsselwort nicht kennt, denn es wird in der Dokumentation angegeben.
Die Frage ist somit : Was mache ich falsch?
20.08.2003, 20:41 #14
dark-base
Beiträge: 26
Schleifen Problem -
quote:
Zitat von HornOx
Optimist ;) AFAIK gibts keine Schleifen in Gothic.


Und wozu ist dann dieses Schlüsselwort gut: "Die Skriptsprach(Deadalus)/2.Beschreibung der Syntax: Schlüsselwörter sind: ... while ..." ?

Außerdem: Kennt jemand eine Möglichkeit einen Befehl erst nach ein paar Sekunden auszuführen ohne AI_Wait zu benutzen?
20.08.2003, 22:24 #15
dark-base
Beiträge: 26
Schleifen Problem -
quote:
Zitat von HornOx
Ohne zu wissen was für eine Art Befehl(AI, FAI, trigger oder allgemein) ist das schwer zu beantworten. Du kannst per script einen trigger starten der mit Verzögerung eine andere Scriptfunktion aufruft.


Ich will den Befehl Ai_ProcessInfos um ein paar Sekunden verzögern.
Das mit den Triggern ist schon eine gute Idee und es klappt auch, aber es wäre schön wenn es noch eine elegantere Lösung gebe, denn ich habe in meiner Mod mehere Welten und müsste somit in jeder Welt diesen Trigger einfügen da der Dialog aus bestimmten Gründen in jeder Welt aufgerufen werden kann.
21.08.2003, 12:09 #16
dark-base
Beiträge: 26
Schleifen Problem -
Tja HornOx, zu dieser Erkenntniss bin ich auch schon gekommen.
So ungefähr aber auch mit einer loppenden ZS_Dead Schleife wollt ich es machen aber sie wird wie gesagt nicht wiederholt. Achja, warscheinlich wird der Dialog zwar aufgerufen hängt dann aber, gell. Da muss mann noch was zusätzlich hinschreiben. Was verate ich aber net, hab schließlich die letzte Wochen dran gearbeitet und wäre ja schade wenn dieses geile Freature meiner Mod(hab en Respawnen Dialog) so einfach veraten wird.
Achja, die Idee mit dem Vobtree war super, danke HornOx.
21.08.2003, 17:13 #17
dark-base
Beiträge: 26
Schleifen Problem -
Zu früh gefreut. Ich hatte als ich die letzten post gemacht hab nur getestet und nicht gleich den richtigen code benutzt. Nun aber klappt es mit den richtigen Code net, weil aus irgendeinem Grund der Trigger nach dem Tod des Helden net funzt. Ich mach nun am besten ein neues Thema auf stell dort den Code rein.
21.08.2003, 17:48 #18
dark-base
Beiträge: 26
Todes-Dialog - Todes-Dialog
Ich habe da ein kleines Problem. Ich hatte die Datei ZS_Dead.d im Ordner [GDATA]/scripts/content/AI/ZS_Human so verändert, dass nach dem Tod des Heldens ein Dialog aufgerufen werden sollte. Damit aber dieser Dialog funktionierte, musste mann dem Held 1 HP Punkt geben. Damit aber einem dann nicht die Gegner sofort wieder totschlagen hatte ich eine Funktion aufgerufen die den Befehl AI_Wait am Gegner durchführte. Durch den Funktionsaufruf wurde nämlich gleichzeitig der Code weiterverarbeitet wie in so vielen Skriptsprachen. Bis auf das manchmal der Held nicht seine Fallanimation abspielt weil der Dialog zu schnell kam klappte ja alles, bis ich diese Skript bei Orks testete. Da Orks mehrmals zuschlagen und nicht durch AI_Wait dabei gebremst werden war der Held sofort wieder tot und es funktionierte gar nichts mehr.Das einzige was mann noch wissen muss ist dass ich die globale Integer Variable "Tod" in der datei [GDATA]/scripts/content/_Intern/constants.d erstellt hab da mein Dialog dieses als condition hatte:
code\:

if (Tod == 1)
{
return 1;
};


wogegen der Sleepabit Dialog so modifieziert wurde dass er nur startete wenn Tod == 0 ist.
So hier ist nur der Code aus der ZS_Dead.d Datei:
code\:


func void GWait () //Gegener warten lassen
{
AI_Wait (other,12.0);//müsste reichen
};



func void Todesmenu ()
{

var C_NPC her;
her = Hlp_GetNpc(PC_Hero);
var C_NPC rock;
rock = Hlp_GetNpc(PC_Rockefeller);



if ( (Hlp_GetInstanceID(self)==Hlp_GetInstanceID(her))
|| (Hlp_GetInstanceID(self)==Hlp_GetInstanceID(rock)) )
{


GWait();
PrintScreen ("Du bist der Held", -1,-1,"font_old_10_white_HI.tga",9);


Tod = 1; //Ist für später für den Dialog wichtig

self.aivar[AIV_INVINCIBLE]=TRUE;
Ai_ProcessInfos (her);
Npc_ChangeAttribute (self, ATR_HITPOINTS, self.attribute[1]); //Muss seien sonst funzt Dialog nicht

};

};



func void ZS_Dead ()
{
PrintDebugNpc (PD_ZS_FRAME, "ZS_Dead" );
PrintGlobals (PD_ZS_CHECK);

C_ZSInit();

self.aivar[AIV_PLUNDERED] = FALSE;

//-------- Erfahrungspunkte für den Spieler ? --------
//SN: VORSICHT, auch in B_MagicHurtNpc() vorhanden!
if Npc_IsPlayer (other)
|| (C_NpcIsHuman (other) && other.aivar[AIV_PARTYMEMBER])
|| (C_NpcIsMonster(other) && other.aivar[AIV_MM_PARTYMEMBER])
{
B_DeathXP(); // vergibt XP an SC
};

//-----------eigene Abfrage um die Mordbilianz festzustellen *g-----------------------------

//----Wenn ein Mensch einen Menschen getötet hat-------
if (C_NpcIsHuman (self)
&& C_NpcIsHuman (other))

{
PrintScreen ("Ein Npc hat einen Kameraden auf dem Gewissen", -1,-1,"font_old_10_white_HI.tga",3);
Todesmenu();
}



//----Wenn ein Mensch von einem Monster getötet wurde-------
else if (C_NpcIsHuman (self)
&& (C_NpcIsMonster (other) || C_NpcIsOrc (other)))
{

PrintScreen ("Ein Npc wurde von einem Monster getötet", -1,-1,"font_old_10_white_HI.tga",3);
Todesmenu();
};

//-----------------------------------------------------------------------------------------



if C_NpcIsMonster(self)
{
B_GiveDeathInv (); // für Monster
PrintScreen ("Ein Monster wurde emordet", -1,-1,"font_old_10_white_HI.tga",3);
};
B_CheckDeadMissionNPCs ();
B_Respawn (self);
};

21.08.2003, 19:44 #19
dark-base
Beiträge: 26
Mipmaps? - Mipmaps?
Ich habe das Problem das dauernd wenn ich mich in meiner Welt von z.B. einer Talwand entferne diese optimiert wird bis sie fast nur noch eine Fläche ist und das will ich verhindern. Ich habe da mal irgendwas von wegen mipmaps gehört. Die Frage ist somit: stimmt das und wenn ja wie erstelle ich welche, oder liege ich komplett falsch?
22.08.2003, 00:14 #20
dark-base
Beiträge: 26
Schleifen Problem -
quote:
Zitat von HornOx
Du hättest mir viel Arbeit erspart wenn du gleich am Anfang gesagt hättest was du abgesehn von AI_Wait bereits ausprobiert hast :(



Entschuldigung, ich hatte es echt vergessen zu posten.Es war aber auch das einzigste was ich noch probiert hab. Es tut mir Leid wenn ich dir dadruch mehr Arbeit gemacht hab.

quote:

Aber mich würde immernoch interessieren warum (mein) ZS_Dead_Loop nicht geloopt wird(@NicoDe & GülleMüller)



Ich hab da keine Ahnung aber könnte es damit zu tuen haben, dass die Fuktion ZS_Dead so aufgerufen wird:
code\:

AI_StartState (self, ZS_Dead, 0, "");

22.08.2003, 00:19 #21
dark-base
Beiträge: 26
Mipmaps? -
THX, es klappt super!!!
es wäre toll wenn du mir noch sagen könntest warum es klappt, also wass es genau mit dem Befehl auf sich hat.
22.08.2003, 00:28 #22
dark-base
Beiträge: 26
Todes-Dialog -
quote:
Zitat von HornOx
Toll, weil du weniger Arbeit haben willst schiebst du Arbeit auf andere(die dir nur ratschläge/Tipps geben wollen) ab :( Der folgende Code ist ungetestet, also ignorier ihn bitte oder verzichte in Zukunft auf solche AGBs ;)


War wirklich keine so gute Idee, habs auch schon weg editiert:)

dein Vorschlag war super nur leider klappt er nicht. Sobald man dem hero den flag gibt springt der dialog an ,hängt sich aber dann auf und man kann sich nur mit dem marvin-mode und der F8 Taste retten.
Habs mit deiner und anderen Möglickeiten wie den hero einfach nur diesen flag zu geben probiert, kalppt aber alles net.:(
24.08.2003, 21:47 #23
dark-base
Beiträge: 26
Mipmaps? -
Ok, da hätte ich nur noch eine Frage: wenn man nun Inventar-Gegenstände hat wie z.B. Helme wird dann mit dem auf 0 gesetzten Levellodding auch dort die optiemierung verhindert oder muss man dafür etwas anderes machen?
30.08.2003, 21:54 #24
dark-base
Beiträge: 26
Mipmaps? -
Nun zürück zum eigentlichen Thema: Gibt es auch eine Möglichkeit die Optimierung von Inventar-Gegenstände zu verhindern?
12.09.2003, 14:43 #25
dark-base
Beiträge: 26
Soundtracker-Job für Mod gesucht -
Wir bräuchten ebenfalls noch einen Musiker und
würden uns sehr freuen, wenn du bei uns arbeiten
könntest. Hompage: http://www.ch4oz-mod.de.vu
hab dir ebenfalls eine Mail mit Info's geschickt.
Seite 1 von 2  1  2