Die Seelensteine sind doch verchiedene Items, oder? Also ein "leerer Petty Soulgem" ist ein anderes Item als ein "Petty Soulgem mit Petty-Seele". Und ein "Leer Common Soulgem" hat wieder eine andere ID als "Common Soul gem mit Petty Seele" und noch eine andere ID hat "Common Soul Gem mit Common Soul".
Man müsste für einen neuen Seelenstein also ein Item mit einer ID für den Leerzustand haben und dan weitere Items für alle möglichen gefüllten Zustände.
Dann muss man natürlich alle Varianten im Spielerinventar abfragen. Man will ja nicht einen leeren Stein einfügen, wenn der Stein gefüllt wurde, sondern nur, wenn er benutzt wurde.
Aber jetzt wird es mit meinen Kenntnissen langsam wirklich spekulativ.
Die Benutzung des Wortes "Subroutine" erklärt sich übrigens durch einen hohen Star Trek Konsum wärend der prägenden Zeit meiner Kindheit.
Aber wie gesagt: Das behandelt eher einen anderen Aspekt des Skriptens und ich bin leider nicht gewandt genug, aus diesem Tutorial eine Essenz zu destillieren, die mir bei meinem Problem helfen würde...
Zu deinen Ideen kann ich leider gar nichts sagen... ich hab davon keine Ahnung!
Zitat von Grimoa
Die Benutzung des Wortes "Subroutine" erklärt sich übrigens durch einen hohen Star Trek Konsum wärend der prägenden Zeit meiner Kindheit.
...
OK, das ist jetzt total OffTopic, aber: Kennst Du "Sinnlos im Weltraum"??? Das ist eine Parodie auf Star Trek, imho ziemlich genial, auch wenn ich mit Star Trek eigentlich nie etwas zu tun hatte.
Puh, das wäre in der Tat sehr schwierig. Man könnte das Script der Verzauberungsaltare möglicherweise umschreiben, eine Variable einsetzen, die überprüft, ob der Spieler den Seelenstein im Inventar hat, wenn er den Altar aktiviert und anschließend in einem GameMode-Block abfragt, ob sich der Seelenstein immer noch im Inventar befindet; wenn ja, setzt er die Variable zurück, wenn nein, wird der Seelenstein readded. Quasi:
Keine Ahnung, ob das funktionieren würde, hab's nur kurz zusammen geschrieben und muss jetzt off. Aber das ist doch ein möglicher Ansatzpunkt.
Desweiteren sagt mir das Skript leider fast nichts, ausser, das ich es meiner Azuras-Stern-Kopie dann unter "Script" hinzufügen müsste?! Da steht jetzt ja "None". Ein möglicher Ansatzpunkt ist es sicher... aber warum das Skript des Verzauberungsaltars??? Soll keine Kritik sein, ich verstehs nur nicht!
Das ist auch ein bißchen kurz...
Wenn du für MW Skripten lernen willst, solltest du Morrowind Scripting for Dummies lesen. Natürlich lässt sich das nicht 1:1 auf Oblivion übertragen, weil die Funkionen anders heißen, und einiges ganz anders funktioniert. Aber die Grundlagen, "die Art zu Denken", ist gleich. Ich behaupte sogar, die ist bei allen Programmiersprachen gleich. Wenn ich verstanden habe, was eine if-then-else Konstruktion oder eine "if i=irgendwas bis irgendwas anderes, dann mach dies"-Schleife tut, dann ist der Gedanke dahinter immer gleich. Auch wenn man es anders aufschreiben muss, damit es klappt. Und natürlich gibt es noch tausend Unterschiede, aber ich rede ja über die Gundlagen. Ich kann nähmlich eigentlich weder Programmieren, noch Skripten. Ich kann nur abschreiben.
Aarh, ja, klar. Wie gesagt, hatte gerade wenig Zeit, habe jetzt auch keine.
So müsste es korrekt sein, aber nachwievor: Ich konnte es bisweilen nicht testen. Das ist das umgeschriebene Script des Verzauberungsaltars, nicht für den Seelenstein; für den Fall des Aufladens kommt dann noch ein Script an den Seelenstein. Ich muss ehrlich gestehen, ich weiß jetzt gar nicht wie das Aufladen von Seelensteinen durch den Spieler funktioniert. Kommt da das Aufladen-Menü oder was?
*wieder abhaut*
ich weiß jetzt gar nicht wie das Aufladen von Seelensteinen durch den Spieler funktioniert. Kommt da das Aufladen-Menü oder was?
...
Oblivion anschmeißt *endlich ne Ausrede, das Spiel zu starten*
Genau, wenn man einen gefüllten Seelenstein im Inventar anklickt (also equipped ?) dann kommt ein Menu, wo oben der Stein mit dem Seelenwert steht und darunter eine Liste der magischen Items im Inventar. Klicken auf die Items läd sie dann auf.
Das obere Script funktioniert nicht so dolle. Das, was ich jetzt poste, funktioniert dagegen wunderbar (soweit ich es getestet habe).
Die Zeilen
message " "
message " "
dienen der Verhinderung von so bezeichnetem Message Spam (Die Nachricht "DeinSeelenstein added" wird nicht kommen, stattdessen nur eben das Oblivion-Zeichen; wenn du willst, dass diese Nachricht angezeigt wird, musst du nur die beiden Zeilen aus dem Script löschen). So erhält der Spieler immer direkt nach Nutzung des Altars einen neuen Seelenstein derselben ID, wenn er den alten dann nicht mehr im Inventar hat - den er in dem Fall ja nur durch Nutzung des Altars verloren haben kann.
Das Recharge-Script dagegen ist eine andere Sache (danke @ Grimoa für die Aufklärung). Befindet sich der Spieler im selben Raum mit einem Objekt, auf dem ein Script mit GameMode-Block liegt - wie in diesem Fall der Verzauberungsaltar -, so wird der GameMode-Block des Scripts einmal pro Frame durchgearbeitet. Das ist bei Recharge nicht möglich; GameMode wird innerhalb von Menüs ignoriert. Um ehrlich zu sein, ich habe keine Ahnung wie genau das mit dem Recharge-Menü funktioniert, aber über ein Script offensichtlich nicht.
Ähhh... ich versteh grade nicht wirklich viel, sorry, aber ist das Skript über welches ihr jetzt grad gesprochen habt dafür da, damit ich meinen selbstgebauten Stern am Verzauberungsaltar entleeren kann und trotzdem behalte??? Das wäre ja schonmal nicht schlecht!
Aber die Sache mit dem Waffe aufladen und Stern behalten scheint mir fast nicht lösbar... ich habe zwar nicht wirklich Ahnung, aber wenn es einfach wäre, warum hätten die Entwickler es dann nicht einfach auch mit Skript machen sollen, statt es in der .exe zu codieren???
Das Script in meinem Post #18 ist für die Verzauberungsaltar-Sache. Scripts heißen immer so, wie die erste Zeile - ScriptName, wahlweise auch kurz scn - es vorschreibt. Das Script, das du ersetzen musst, heißt also EnchantingStationScript. Einfach meines drüber kopieren und dann abspeichern.
Das mit dem Recharge-Script dürfte ziemlich unmöglich sein, yeah, bedenke aber, dass ich auch kein Scripting-Profi bin. OBSE (Oblivion Script Extender) bringt immer neue Scripting-Möglichkeiten ins Spiel, vielleicht kommt irgendwann auch noch was Hilfreiches, das man hier anwenden kann.
Aber müsste man nicht mit "equip" feststellen können, wann der SPieler den Seelenstein im Inventar anklickt? Also in dem Moment, wo er ihn anklickt, gucke ich nach, wieviele Seelensteine im Inventar vorhanden sind, und wenn das Inventar geschlossen wird (GameMode) gucke ich wieder nach, und fülle bei Bedarf auf. Noch ein paar Variablen, damit das Auffüllen nur einmal geschieht und das Skript an den Seelenstein gehängt.
Natürlich unter der Annahme, dass das Aufladen-menu dann trotzdem erscheint, ohne dass ich es expliziet aufrufe. Das soll einfach erscheinen, weil der geskriptete Gegenstand ein Seelenstein ist.
@ Grimoa
Zwei Schlaue, fast ein Gedanke. Etwas Ähnliches ist mir vorhin auch eingefallen und ich habe es gleich mal ausprobiert. Es funktioniert; wie immer kann ich das nur im Bereich meiner Testereien garantieren. Existierende Scripte müssen dabei nicht modifiziert werden.
Was man braucht: Zwei neue Scripte, zwei neue Quests. Da die Scripte nicht besonders groß sind, entstehen keine besonderen Performanceeinbußen. Beide müssen natürlich Quest-Scripte sein.
Du erstellst zwei neue Quests und hängst an jedes eines der Scripte (Start Game Enabled muss markiert sein). OnEquip könnte wohl auch irgendwie funktionieren, kann Grimoa ja ausprobieren. Ich tu's jedenfalls nicht.
OnEquip könnte wohl auch irgendwie funktionieren, kann Grimoa ja ausprobieren. Ich tu's jedenfalls nicht.
...
Jaaaa..... vielleicht... aber vermutlich nicht so bald. Wenn ich das nächste mal Zeit habe, das CS auszupacken, bau ich mir erstmal ne Oblivionebene.
Ich wusste bei meinem Vorschlag nicht, dass es sowas gibt. Das ist natürlich viel direkter.
Mir ist aber glaube ich ein "Fehler" aufgefallen, der von schummelnden Spielern ausgenutzt werden könnte.(Würde bei meiner Idee genauso auftreten.)
Nachdem das Zauber bzw Aufladen-Menu aufgerufen wurde, wird ja abgefragt, wieviele Seelensteine der Spieler hat. Wenn man jetzt das Aufladen-Menu abbricht, ist man ja erstmal nur wieder im Inventar. Jetzt schmeißt man einen Seelenstein weg und schließt das Inventar. Damit ist man jetzt im GameMode, und es wird überprüft, ob ein Stein weniger da ist. Und ja, tatsächlich, ein Stein fehlt. Er wird also ersetzt. Danach kann man den Stein, den man grade weggelegt hat, aufheben. Und so weiter. Eine unerschöpfliche Seelensteinquelle.
Jedenfalls, wenn ich das richtig durchdacht habe.
Außerdem gehen deine Skripte jetzt davon aus, dass der neue Seelenstein auch nur einmal vorhanden ist, nicht mehrmals, richtig? Sonst müsste man noch präzise abfragen, wieviele Steine und dann die Differenz hinzufügen. Aber das sind ja Details.
Oha, da hat LowPost dazwischengescriptet
@ Low Post
Kann es sein, dass du zwei Mal vergessen hast, den Wert einer Variable abzufragen? Du hast zwei Mal "if ( SoulGemMenu )" drin. Es ist darüber hinaus aber unnötig, den Verbrauch mehrerer Seelensteine in einem Durchgang zu berücksichtigen. Man kann weder bei der Verzauberung noch beim Recharge mehr als einen auf einmal benutzen. Will man einen weiteren Gegenstand verzaubern/aufladen, muss man abermals das Menü öffnen. Oder du hast das nun so gemeint, dass man bei Recharge nicht zwangsweise aus dem MenuMode raus geht und mehrere nacheinander benutzt... was aber auch nichts bringt, weil die Variable x die vorhandene Menge an Seelensteinen bei jeder Benutzung mit dem neuen überschreibt.
@ Grimoa
Eigentlich hatte ich mir fest vorgenommen, dir zu widersprechen, aber... crap - du hast Recht. Ich habe eine weitere Variable eingebaut, um das zu unterbinden, aber das Posten dieses Scripts erübrigt sich, weil es nicht funktionieren kann. Jedenfalls nicht auf gewünschte Weise.
Ich habe eine weitere Variable (cheater) eingebaut, die die durch count gespeicherte Ursprungsmenge mit der vorhandenen abgleicht, sobald cheater auf 1 steht und der Spieler im Inventar (MenuMode 1002) ist. Entspricht die Ursprungsmenge der vorhandenen Menge, werden die Variablen allesamt auf 0 zurückgesetzt und der Spieler erhält im GameMode keinen Seelenstein, da kann er schmeißen wie er will. Haken an der Sache: Spieler geht ins Recharge-Menü (controlvar to 1, count to getitemcount, cheater to 1), läd eine Waffe auf, kommt zurück ins Inventar (count != vorhandene Seelensteinmenge, kein Zurücksetzen der Variablen) - verlässt der Spieler das Inventar und geht in GameMode, erhält er den Seelenstein. Geht er aber NICHT in GameMode, sondern klickt noch mal auf einen Seelenstein, gibt's ein Problem; das fängt mit count an, die die JETZT vorhandene Menge speichert, und endet damit, dass der Spieler, wenn er auf Abbrechen klickt, den Seelenstein aus dem vorhergehenden Aufladen nicht bekommt; würde der Spieler dagegen nicht abbrechen und abermals aufladen, danach ins Inventar kommen und dann in GameMode, würde er nur den einen Seelenstein aus der zweiten Benutzung zurückerhalten, nicht aber aus der ersten.