World of Gothic Archiv
> Editing Schmieden |
|
06.04.2004, 14:04 | #1 | ||
König Rhobar II Beiträge: 639 |
Schmieden
Ich habe versucht das Schmieden etwas zu erweitern, sodass man mehr als nur ein Schwert schmieden kann. Dazu habe ich mir das vom schlafen abgeguckt (sleepabit) und die funktion einfach mal Smith genannt: code\: Wenn ich das im Spiel aber testen will, kommt nur das normale schmieden. (Ich hab im Spacer dem Amboss die funktion smith zugewiesen) |
||
06.04.2004, 14:13 | #2 | ||
JonathanSalznik Beiträge: 22 |
Die Funktion muss SMITH_S1() heißen. Gothic hängt immer ein _S<erreichter Zustand des MOBs> hinten an. Bei deiner Lösung wirst du außerdem eine Mischung von "Schlafen" und "Schmieden"-Optionen im erscheinen Mulitple-Choice-Fenster bekommen. Das wird auch passieren, wenn sich der Spieler ins Bett legt. Du mußt leider sowohl sleepabit als auch deine Smith-Funktion so anpassen, dass die Conditions der C_Info-Objektt nur dann wahr sind, wenn der Spieler ein Bett bzw. einen Amboss verwendet. |
||
06.04.2004, 14:17 | #3 | ||
König Rhobar II Beiträge: 639 |
Ich hab das getrennt von sleepabit gespeichert, hab nur vergessen "mittags" in "Erzklinge schmieden" umzubenennen^^ Muss ich trotzdem da eine Bedingung einbauen, auch wenn beide funktionen anders heißen und getrennt gespeichert sind? edit: Ok, Frage hat sich erledigt, seit ich im bett ein Schwert geschmiedet hab^^ Beim Amboss kommt allerdings gar nichts |
||
06.04.2004, 14:25 | #4 | ||
JonathanSalznik Beiträge: 22 |
Leider ja.. Die Auswahl wird realisiert, indem der Spieler mit sich selbst "spricht".. und für Dialoge trägt Gothic alle passenden C_Info-Objekte aus allen Source-Dateien zusammen. |
||
06.04.2004, 14:41 | #5 | ||
König Rhobar II Beiträge: 639 |
was muss ich denn da reinschreiben, damit er erkennt, ob es ein Bett oder ein Amboos ist? also: if (???) { return 1; }; Was muss ich anstelle con ??? schreiben? edit: Ich hab das script oben editiert, so sieht es im Moment aus. beim Amboss kommen leider immernoch keine Optionen |
||
06.04.2004, 14:50 | #6 | ||
JonathanSalznik Beiträge: 22 |
Am besten definierst du an zentraler Stelle code\: Die *_S1-Funktionen setzen die mobInUse-Variable dann entsprechend und die Conditions fragen sie ab. Ich habe es gerade mal ausprobiert: Wenn ich bei der "onStateFunc" vom Amboss im Aussenring des alten Lager SMITH eintrage, wird bei mir SMITH_S1() korrekt aufgerufen. Vielleicht Probleme mit der Groß-/Kleinschreibung? |
||
06.04.2004, 15:03 | #7 | ||
König Rhobar II Beiträge: 639 |
das mit dem Amboss klappt, hatte nur vergessen auf Apply zu klicken^^ Ob das mit den variablen geklappt hat kann ich nicht sagen, weil ich bei beiden nur "ENDE." (komischerweise mit punkt) auswählen kann. Ein weiteres Problem ist, das der Amboss neben der neuen Funktion weiterhin normal glühenden Stahl zu einer glühenden Klinge verarbeitet |
||
06.04.2004, 15:09 | #8 | ||
JonathanSalznik Beiträge: 22 |
Dann hat es nicht funktioniert. "ENDE." mit Punkt ist ein spezieller Eintrag, den Gothic automatisch anzeigt, wenn überhaupt kein C_Info-Objekt gefunden wurde, bei dem die Condition wahr ist. |
||
06.04.2004, 15:26 | #9 | ||
Black Daemon Beiträge: 218 |
quote: Das leigt daran, dass das in der humans.mds so definiert ist. Am besten lässt du die Glühende Klinge im Script entfernen. Vergess nicht, dem Spieler, wenn den Ende Dialog auswählt einmal glühendes Stahl zu geben. |
||
06.04.2004, 16:55 | #10 | ||
König Rhobar II Beiträge: 639 |
Woran liegt das denn nun mit dem "ENDE."? |
||
06.04.2004, 16:59 | #11 | ||
JonathanSalznik Beiträge: 22 |
Poste bitte mal, was du genau gemacht hast. Sehen deine Condition-Funktionen so aus? code\: Steht in SMITH_S1() code\: und in SLEEPABIT_S1() code\: jeweils direkt VOR dem Ai_ProcessInfos (her)? |
||
06.04.2004, 17:03 | #12 | ||
König Rhobar II Beiträge: 639 |
Jetzt schon :D Danke |
||
06.04.2004, 17:41 | #13 | ||
aragorn_16 Beiträge: 529 |
Wo kann man denn die Schmiedebedingungen ändern? |
||
06.04.2004, 18:04 | #14 | ||
JonathanSalznik Beiträge: 22 |
quote: Kein Problem, ich habe die Infos mal ins Wiki eingetragen.. @aragorn_16: Was für Schmiedebedingungen meinst du genau? In conditionFunc kannst du eine Funktion einfügen, die TRUE zurückgeben muss, damit der Character das MOB benutzen kann. In useWithItem kommt der Name des Gegenstandes rein, den man im Inventar haben muss, um den MOB zu verwenden. |
||
07.04.2004, 17:47 | #15 | ||
aragorn_16 Beiträge: 529 |
Ich hab eigentlich gemeint, was man machen muss, um neue Waffen schmieden zu können. Werd mir das dann mal im Wiki durchlesen. |
||
07.04.2004, 18:29 | #16 | ||
König Rhobar II Beiträge: 639 |
meinst du, dass man auswählen kann, welche Waffe man schmieden will (Wie in Gothic 2)? Dann kann ich dir wenn du willst ein Beispielscript schicken, da sieht man dann, wie das genau funktioniert. |
||
07.04.2004, 20:49 | #17 | ||
aragorn_16 Beiträge: 529 |
@König Rhober II: Ich probiers mal aus, und wenn ich des nicht hinbekomm, kannst du mir schicken. |
||
07.04.2004, 22:18 | #18 | ||
aragorn_16 Beiträge: 529 |
Wenn ich diese Zeile hier einfüge: mobInUse = MOBINUSE_BED; dann kommt ständig eine Fehlermeldung. Und was ist dmit gemeint: An zentraler Stelle var int mobInUse; const int MOBINUSE_ANVIL = 1; const int MOBINUSE_BED = 2; const int MOBINUSE_PSILAB = 3; Wo soll man des denn einfügen? |
||
07.04.2004, 22:59 | #19 | ||
JonathanSalznik Beiträge: 22 |
Zentrale Stelle = (hier)Eine Datei, die vor sleepabit.d und deinen erstellten Variationen in gothic.src steht. Entweder erstellt du selbst eine oder verwendest z.B. STORYSTORY_GLOBALS.D Danach geht die Fehlermeldung auch weg.. Die kommt daher, dass die Variable mobInUse und die Konstante MOBINUSE_BED nicht vorher definiert wurden. |
||
08.04.2004, 14:36 | #20 | ||
aragorn_16 Beiträge: 529 |
Die Fehlermeldung kommt jetzt nicht mehr, allerdings kommt kein Auswahlmenü am Amboss. Woran liegt das? |
||
08.04.2004, 14:43 | #21 | ||
König Rhobar II Beiträge: 639 |
poste mal das script, sonst kann ich dir nicht helfen. Hats du im Spacer beim Amboss die funktion eingetragen? |
||
08.04.2004, 17:20 | #22 | ||
Maharreshi Beiträge: 82 |
Hallöchen! quote: Ich habe das selbe Problem, allerdings beim Bett. Ich habe die jeweiligen Bedingungen zu den Dialogen hinzugefügt, kompiliert und ausprobiert (und das mehrfach). Es funktioniert nicht! Ich habe keine Ahnung wieseo, es ist jedenfalls nicht so, dass dann die Bedingungen alle 'FALSE' wären, sondern die Funktion 'SLEEPABIT_S1' (bei mir heißt sie 'SLEEP_S1', dass habe ich auch beim VOB eingetragen: OnStateFunc: SLEEP) wird einfach nicht aufgerufen, d. h. der PC legt sich einfach aufs Bett und NICHTS weiter passiert. |
||
08.04.2004, 18:28 | #23 | ||
aragorn_16 Beiträge: 529 |
Ja, ich hab beim Amboss die Funktion eingetragen: SMITH_S1. Hier ist mal das Script: //**************************** // PC_Sleep //**************************** func void PC_Smith (var int s) { AI_StopProcessInfos(self); // [SK] ->muss hier stehen um das update zu gewährleisten self.aivar[AIV_INVINCIBLE]=FALSE; if (s == 1) { CreateInvItem(hero, ItMiSwordbladehot); Npc_RemoveInvItem(hero, ItMiSwordraw); } else { CreateInvItem(hero, ItMiSwordbladehot); Npc_RemoveInvItem(hero, ItMiSwordraw); Npc_RemoveInvItem(hero, ItMiNugget); }; PrintScreen("Waffe hergestellt!", -1,-1,"font_old_20_white.tga",3); }; func void SMITH_S1 () { var C_NPC her; her = Hlp_GetNpc(PC_Hero); var C_NPC rock; rock = Hlp_GetNpc(PC_Rockefeller); //***ALT** if(Hlp_GetInstanceID (self)== Hlp_GetInstanceID (Hero)) // MH: geändert, damit kontrollierte NSCs nicht schlafen können! if ( (Hlp_GetInstanceID(self)==Hlp_GetInstanceID(her))||(Hlp_GetInstanceID(se lf)==Hlp_GetInstanceID(rock)) ) { self.aivar[AIV_INVINCIBLE]=TRUE; mobInUse = MOBINUSE_ANVIL; Ai_ProcessInfos (her); }; }; //-------------------- Gar nicht schlafen ------------------------- INSTANCE PC_NoSmith (c_Info) { npc = PC_Hero; nr = 999; condition = PC_NoSmith_Condition; information = PC_NoSmith_Info; important = 0; permanent = 1; description = DIALOG_ENDE; }; FUNC INT PC_NoSmith_Condition() { if (mobInUse == MOBINUSE_ANVIL) { return 1; }; }; func VOID PC_NoSmith_Info() { AI_StopProcessInfos (self); self.aivar[AIV_INVINCIBLE]=FALSE; }; //---------------------- morgens -------------------------------------- INSTANCE PC_Smith_LowWeapons (C_INFO) { npc = PC_Hero; condition = PC_Smith_LowWeapons_Condition; information = PC_Smith_LowWeapons_Info; important = 0; permanent = 1; description = "Leichte Waffen schmieden"; }; FUNC INT PC_Smith_LowWeapons_Condition() { if (mobInUse == MOBINUSE_ANVIL) { return 1; }; }; func void PC_Smith_LowWeapons_Info () { PC_Smith (1); }; |
||
08.04.2004, 18:53 | #24 | ||
König Rhobar II Beiträge: 639 |
beim Amboss muss einfach nur SMITH stehen, das _S1 kannst du im Spacer weglassen |
||
08.04.2004, 20:05 | #25 | ||
aragorn_16 Beiträge: 529 |
Okay, werds mal versuchen. Danke. |
||
|