Archiv verlassen und diese Seite im Standarddesign anzeigen : Azuras Stern
Moinmoin.
Nach längerer Pause des Oblivion- Spielens (Monate!) hab ich mich jetzt nochmal mit dem CS und PI's vertraut gemacht, um eben das Standard- Oblivion mit persönlichen Änderungen zu erweitern und damit einen neuen Reiz zu schaffen. Statt nur Erweiterungen downzuloaden interressiert es mich aber auch, selber etwas zu schaffen, statt nur zu konsumieren. Hab mit dem CS früher schonmal n bisschen was gemacht, aber alles eher trivial. Lange Rede, kurzer Sinn: Ich hab vom CS wenig Ahnung.
Erstmal wollte ich also eine Kopie von Azuras Stern machen (einfach zu testzwecken). Das war auch alles kein Problem, neue ID, neuer Name, Gewicht und Wert leicht verändert, auf den SI abgelegt und als PI gespeichert. Im Spiel konnte ich dann auch den Gegenstand finden, aufnehmen und benutzen (auch füllen), aber nach der Benutzung war er wie ein normaler Seelenstein weg!
Warum??? Wo ist das festgelegt, ob er verschwindet??? Ich dachte, wenn ich Azuras Stern eine neue ID und Namen gebe, bleiben die Eigenschaften des Originals erhalten, weil es doch eigentlich nur eine umbenannte Kopie ist?!
GlasMond
29.01.2008, 21:05
Das habe ich mich auch schon gefragt und ich befürchte, da ich keine andere Lösung dafür finden konnte, das es hardcoded ist. Wie das auch immer funktioniert. :\
Hmpf, ich nehme an, du willst damit sagen, dass ich es vergessen kann? >:(
Mist... aber was genau bedeuted "hardcoded"?
Und warum suche ich mir derart treffsicher so was kompliziertes aus??? Warum hab ich nicht einfach einen Brustharnisch kopiert??? :rolleyes:
Könnte man nicht ein Skript schreiben, dass den Stein (leer natürlich) dem Spieler wieder hinzufügt, wenn er verbraucht wurde? Ich weiß nur nicht, ob man detektieren kann, wann der Stein verbraucht wird.
Hmm... naja das Skript ginge sicher (also technisch gesehen, ich könnte es nicht) und auch ob er leer oder voll ist müsste mit einer Variablen zu klären sein... Aber warum übernimmt der Stern als Kopie nicht die Eigenschaften des Originals?! :confused:
Vielleicht steht in irgendeiner subroutine des spiels drin, wenn item *hier Azurasterncode einfügen* benutzt wird, dann füge ihn neu in das Spielerinventar ein. Oder lösch ihn erst gar nicht. Also so ähnlich, wie ich das grade mit dem Skript gemeint habe.
Wenn du den Stern kopierst, hast du zwar das gleiche Modell etc, aber einen anderen Itemcode.
Ich weiß nicht, ob das mit dem Skript so einfach ist... Hab für Obl noch nichts geskriptet bisher. Und so ein nettes Werk wie "Scripting for Dummies" hab ich auch noch nicht gefunden. Wenn das jemand kennt, immer her damit.
Die billigste Lösung wäre natürlich, ein Skript zu schreiben, das nach einem bestimmten Ereigniss (Stern wird das erste mal ins Inventar genommen) immer nachguckt, ob der Stern noch da ist. Wenn nicht, wird ein neuer hinzugefügt.
Nachteil: Der Stern kann nicht nur durch benutzten, sondern auch durch ablegen aus dem Inventar verschwinden. Dann hat man ziemlich bald ziemlich viele Sterne. Das könnte man umgehen, indem man den Stern als Questitem markiert, also unablegbar macht. Nachteil: Er ist dann eben unablegbar.
Hmmm... joa das ist schon klar, wie du das mit dem Skript gemeint hast. Das mit der Subroutine ist auch eine interessante Idee, ich denke darauf hat auch schon GlasMond angespielt. Deshalb ja meine Frage was "hardcoded" ist. Ganz nebenbei wäre ja noch interessant wo das steht :confused: ;)
Ja ohne Änderung der ID hätte ich ja gar keine Kopie machen können, die Frage ist nur, weshalb das Skript bzw. der Code, der da ja offenbar im Hintergrund noch eine Rolle spielt nicht bei der "Create a new Form?"- Frage angepasst wird?! :confused: >:(
kenet_korva
30.01.2008, 17:38
Weil diese "Subroutine" nicht mit dem CS komuniziert. Es hat auch nichts mit Azuras Stern ansich zutun. Wenn man das CS öffnet ohne etwas zu laden, finden sich dennoch einige Gegenstände in den Listen. Diese sind die, die vom Spiel Hardcoded für verschiedene Dinge verwendet werden. Das Spiel interessiert sich nur für diese Objekte und diese IDs. Wenn du eine Kopie erstellst ist es ein neues Objekt und für das Spiel genauso ein anderes Ding wie zum Beispiel der Klockenturm in Bruma. Genausowenig wird das Spiel noch etwas mit Azuras Stern anfangen können, wenn du die Id des Originals änderst. Es findet es einfach nicht mehr. Genauso mit Varla und Welkyndsteinen. Deren Wirkungen sind ebenfalls Hardcoded. (Und wenn ich mich nicht täusche auch die Eigentschaft der schwarzen Sellensteine als einzige NPC-Seelen einfagen zu können.
Und ein solches Script ist auch keine einfache Sache da man mit der Hauseigenen Scriptsprache von Oblivion ziemlich eingeschränkt ist. (Um ein nahes Beispiel zu nennen: Man könnte nicht einmal abragen, ob ein Seelenstein voll oder Leer ist.) Die Einzige Möglichkeit das zu lösen wäre zu überprüfen, ob die Spieler den Stein noch hat. Allerdings müsste man dann noch überprüfen ob der Spieler den Gegenstand nicht einfach abgelegt hat( was möglich ist aber alles in allem ein ziemliches Gefummel mit Variablen wäre.)
MODIFIED
30.01.2008, 17:38
Hardgecodet heißt, das dies offenbar fest im Code der Oblivion.exe enthalten ist, so das du mit dieser Plugin-Methode kein Einfluß nehmen kannst.
Weil diese "Subroutine" nicht mit dem CS komuniziert.
Schade eigentlich... >:(
Und wenn ich mich nicht täusche auch die Eigentschaft der schwarzen Sellensteine als einzige NPC-Seelen einfagen zu können.
Jop, du hast recht, hab grad mal da CS aufgemacht, da sind unter SoulGem genau zwei Gegenstände aufgeführt: AzuraStone und BlackSoulGem. Na toll... naja so weis ich jetzt wenigstens, wiso das CS nach dem öffnen immer direkt ein paar Gegenstände anzeigt (das hab ich mich immer schon gefragt! 8) ).
Naja und die Originale lasse ich ohnehin immer unangetastet! Weil dass die ID jeden Gegenstand einzigartig macht im CS, ist mir schon klar, es hätte mich auch nicht gewundert, wenn Azuras Stern nicht mehr funktioniert hätte nach einer ID- Änderung, aber den somit eigentlich logischen Rückschluss auf meine Kopie habe ich trotzdem nicht gezogen... doof... :(
Ach ja und Dank @ MODIFIED für die Definition! Die Oblivion.exe ... da kommt man nicht ran, oder???:D OK keine wirklich ernst gemeinte Frage schade eigentlich... aber danke an alle für Hilfe und Erklärungen!
Grimoa's Idee kann ich leider auch nicht umsetzen... kein Plan vom Skripten... und das Skripting- Tutorial kann ich nicht genügend abstrahieren, um das auf mein Problem zu beziehen!
Schade, Schade, Schade...:'( :'( :'(
Edit @ kenet_korva: Oha! Dass Oblivion keine Variable zur Seelensteinstatusabfrage kennt hätte ich nicht gedacht! Wie weis das Spiel denn dann, ob man einen Seelenstein zur Füllung benutzen kann oder nicht???
und das Skripting- Tutorial...
Wo? Welches?
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. :D
Wo? Welches?
Naja das hier: http://theelderscrolls.info/?go=4editorscripten
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... :rolleyes:
Zu deinen Ideen kann ich leider gar nichts sagen... ich hab davon keine Ahnung! :'(
Die Benutzung des Wortes "Subroutine" erklärt sich übrigens durch einen hohen Star Trek Konsum wärend der prägenden Zeit meiner Kindheit. :D
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:
ScriptName EnchantingStationScript
;Script for activation of Enchanting Station (which brings up Enchant Menu)
short HatSeelenstein
Begin OnActivate
if isActionRef player == 1
showEnchantment
endif
if ( player.GetItemCount "MeinSeelensteinEditorID" == 1 )
set HatSeelenstein to 1
endif
End
Begin GameMode
if ( HatSeelenstein == 1 ) && ( player.GetItemCount == 1 )
set HatSeelenstein to 0
else
player.AddItem "MeinSeelensteinEditorID" 1
set HatSeelenstein to 0
endif
End
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.
Öhm... erstmal: Respekt! http://www.multimediaxis.de/images/smilies/old/1/respekt_2.gif http://www.multimediaxis.de/images/smilies/old/1/respekt_2.gif http://www.multimediaxis.de/images/smilies/old/1/respekt_2.gif
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!
Aber wenn man mit einem Seelenstein einen Gegenstand wieder aufläd, kommt ja nicht das enchant-Menu. Den Fall sollte man auch abdecken...
Muss
if ( HatSeelenstein == 1 ) && ( player.GetItemCount == 1 ) vielleicht
if ( HatSeelenstein == 1 ) && ( player.GetItemCount "MeinSeelensteinEditorID" == 1) heißen? Also wenn er den Stein hat, und wenn er ihn immer noch hat, dann wird kein neuer hinzugefügt.
Naja das hier: http://theelderscrolls.info/?go=4editorscripten
Das ist auch ein bißchen kurz...
Wenn du für MW Skripten lernen willst, solltest du Morrowind Scripting for Dummies (http://planetelderscrolls.gamespy.com/View.php?view=Mods.Detail&id=6083) 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. :D Ich kann nur abschreiben.
Aarh, ja, klar. Wie gesagt, hatte gerade wenig Zeit, habe jetzt auch keine.
ScriptName EnchantingStationScript
;Script for activation of Enchanting Station (which brings up Enchant Menu)
short HatSeelenstein
Begin OnActivate
if isActionRef player == 1
showEnchantment
endif
if ( player.GetItemCount "MeinSeelensteinEditorID" == 1 )
set HatSeelenstein to 1
endif
End
Begin GameMode
if ( HatSeelenstein == 1 ) && ( player.GetItemCount "MeinSeelensteinEditorID" == 1 )
set HatSeelenstein to 0
else
player.AddItem "MeinSeelensteinEditorID" 1
set HatSeelenstein to 0
endif
End
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).
ScriptName EnchantingStationScript
;Script for activation of Enchanting Station (which brings up Enchant Menu)
short HasSoulGem
Begin OnActivate
if isActionRef player == 1
showEnchantment
endif
if ( player.GetItemCount "DeinSeelenstein" >= 1 ) && ( HasSoulGem == 0 )
set HasSoulGem to 1
endif
End
Begin GameMode
if ( HasSoulGem == 1 ) && ( player.GetItemCount "DeinSeelenstein" >= 1 )
set HasSoulGem to 0
return
endif
if ( HasSoulGem == 1 ) && ( player.GetItemCount "DeinSeelenstein" <= 0 )
message " "
message " "
player.AddItem "DeinSeelenstein" 1
set HasSoulGem to 0
endif
EndDie 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! http://www.multimediaxis.de/images/smilies/old/sm_12.gif
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??? :confused:
Und nochmal vielen Dank für eure Mühen!
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.
http://www.multimediaxis.de/images/smilies/old/1/gruebel.gif
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.
Ist nur sone wirre Theorie von mir.
@ 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.
scn SoulGemReAddScript01
short controlvar
Begin MenuMode 1049
;Recharge-Menü
if ( player.getitemcount "Seelenstein" >= 1 ) && ( controlvar == 0 )
set controlvar to 1
endif
End
Begin GameMode
if ( controlvar == 1 ) && ( player.getitemcount "Seelenstein" >= 1 )
set controlvar to 0
endif
if ( controlvar == 1 ) && ( player.getitemcount "Seelenstein" <= 0 )
message " "
message " "
player.additem "Seelenstein" 1
set controlvar to 0
endif
End
scn SoulGemReAddScript02
short controlvar
Begin MenuMode 1042
;Enchantment-Menü
if ( player.getitemcount "Seelenstein" >= 1 ) && ( controlvar == 0 )
set controlvar to 1
endif
End
Begin GameMode
if ( controlvar == 1 ) && ( player.getitemcount "Seelenstein" >= 1 )
set controlvar to 0
endif
if ( controlvar == 1 ) && ( player.getitemcount "Seelenstein" <= 0 )
message " "
message " "
player.additem "Seelenstein" 1
set controlvar to 0
endif
End
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.
Low Post
31.01.2008, 21:55
Man könnte auch alles in eine Quest packen. Außerdem deckt Katans Skript nicht die Möglichkeit von mehreren Seelensteinen im Inventar ab.
scn AzurasStar2QuestScript
short x
short SoulGemMenu
Begin Menumode
if ( ( Menumode 1042 ) || ( Menumode 1049 ) ) ;Enchantment & Recharge Menu
if ( SoulGemMenu == 0 )
set x to Player.GetItemCount [ID deines Seelensteins]
set SoulGemMenu to 1
endif
else
if ( x != Player.GetItemCount [ID deines Seelensteins] )
if ( SoulGemMenu )
set x to ( x - Player.GetItemCount [ID deines Seelensteins] )
; Message " "
; Message " "
;zum ausblenden der Nachricht einfach die beiden obigen Zeilen entkommentieren (Achtung: blendet evtl. auch wichtige Nachrichten aus)
if ( x > 0 )
Player.AddItem [ID deines Seelensteins] x
else
MessageBox "Während dem Verzaubern/Waffe aufladen wurde ein [Name deines Seelensteins] hinzugefügt."
endif
endif
set x to Player.GetItemCount [ID deines Seelensteins]
set SoulGemMenu to 0
endif
endif
End
Begin Gamemode
if ( x != Player.GetItemCount [ID deines Seelensteins] )
if ( SoulGemMenu )
set x to ( x - Player.GetItemCount [ID deines Seelensteins] )
; Message " "
; Message " "
;zum ausblenden der Nachricht einfach die beiden obigen Zeilen entkommentieren (Achtung: blendet evtl. auch wichtige Nachrichten aus)
if ( x > 0 )
Player.AddItem [ID deines Seelensteins] x
else
MessageBox "Während dem Verzaubern/Waffe aufladen wurde ein [Name deines Seelensteins] hinzugefügt."
endif
endif
set x to Player.GetItemCount [ID deines Seelensteins]
set SoulGemMenu to 0
endif
End
Skript ist, wie das von Katan, einfach nur heruntergeschrieben und ungetestet.
Müsste aber eigentlich funktionieren.
Solltest du dich entschließen auch noch OBSE zu verwenden kann man damit auch noch folgende Befehle verwenden:
GetCreatureSoulLevel (http://cs.elderscrolls.com/constwiki/index.php/GetCreatureSoulLevel)
GetCurrentSoulLevel (http://cs.elderscrolls.com/constwiki/index.php/GetCurrentSoulLevel)
GetSoulGemCapacity (http://cs.elderscrolls.com/constwiki/index.php/GetSoulGemCapacity)
GetSoulLevel (http://cs.elderscrolls.com/constwiki/index.php/GetSoulLevel)
IsSoulGem (http://cs.elderscrolls.com/constwiki/index.php/IsSoulGem)
SetCurrentSoulLevel (http://cs.elderscrolls.com/constwiki/index.php/SetCurrentSoulLevel)
SetSoulGemCapacity (http://cs.elderscrolls.com/constwiki/index.php/SetSoulGemCapacity)
SetSoulLevel (http://cs.elderscrolls.com/constwiki/index.php/SetSoulLevel)
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
Begin MenuMode 1049 ;Recharge-Menü 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 :D
Auf jeden Fall saubere Arbeit, Katan! :A
@ 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.
Low Post
01.02.2008, 06:53
Hauptproblem bei deinem Skript ist vor allem, dass du bei GetItemCount <= 0 abfragst.
Was passiert aber, wenn der Spieler am Anfang 2 Seelensteine hatte?
Dann hat er nach dem aufladen 1, dein Skript meint, er hat keinen verbraucht und fügt auch keinen neuen hinzu. Das ist eigentlich der Hauptgrund für die x-Variable. Bei dem AddItem hab ich mich nur etwas gespielt. Außerdem war ich mir nichtmehr sicher, ob man evtl. doch mehrere verwenden kann.
Da das Skript aber so "nur" alle 5 Sekunden läuft und geübte Spieler da mehr als einen Seelenstein verbraten können ist das ganze gar nicht mal so sinnlos.
Bezüglich abfrage vergessen:
da GetSoulGemMenu nur 0 oder 1 werden kann reicht das zum überprüfen von 1 durchaus aus. Beim einzigen mal wo's 0 sein muss hab ich es aber vergessen, stimmt schon.
Yeah, das ist mir auch gerade aufgefallen. Ich sollte es mir in Zukunft sparen, so früh morgens irgendwelche Schlussfolgerungen aufstellen zu wollen. Sorry. Das Problem mit der mehrmaligen Nutzung aber bleibt. Vielleicht fällt dir dazu ja noch irgendwas ein.
Hilfe!!! Ich finde es ja schön, dass sich hier um das Thema so eine lebhafte Diskussion entwickelt, aber ich kann leider kaum folgen... seid mir also nicht böse, wenn ich manchmal auf der Leitung stehe... Jedenfalls soweit ich es mitbekommen habe, habt ihr ja das Problem des Verschwindens bei Altarnutzung schon gelöst (die Feststellung hatte ich ja schonmal gepostet, will nur sichergehen, dass ich da jetzt nicht irgendwas übersehen habe...). :confused:
Ach ja mir ist was zu deiner Frage eingefallen, Katan. "GameMode" ist das Spiel selber, also die Spielwelt, in der man sich bewegt? (Hab ich so verstanden...!?) Die Lösung mag manchem jetzt vielleicht unprofessionell vorkommen, aber da wir ja nicht wie Bethesda an die .exe kommen, muss es ja auch nicht so perfekt sein. Worauf ich raus will: Wie wäre es, wenn man einen Befehl dazuschreibt, dass nach Schliessen des Aufladen- Menüs (Recharge-Menü?) das Inventar des Spielers automatisch auch geschlossen wird??? Dann wäre er wieder in GameMode und müsste das Inventar zur eneuten Aufladung auch neu öffnen (ok ein Tastendruck mehr :rolleyes: )... und dann darf das Skript ja auch wieder mit Zählen anfangen, oder?
Edit1: So hab gerade das Skript für den Altar ersetzt (nochmal Dank an alle für diese Mühen!), beim Speichern kam aber eine Fehlermeldung: Item "DeinSeelenstein" not found for parameter Objekt ID. Compiled Script not saved!. Da hab ich mir gedacht, dass das "DeinSeelenstein" nur ein Platzhalter war und hab die Editor ID von meiner Kopie eingegeben (AzurasSun). Jetzt hat's gespeichert. War das richtig oder falsch???
Edit2:
Das, was ich jetzt poste, funktioniert dagegen wunderbar (soweit ich es getestet habe).
Joa Edit1 hat sich erledigt, ich hab es grad auch einfach mal getestet und es läuft auch bei mir wunderbar (warum auch nicht). DAS IST SUPER! Echt meinen grössten Respekt an alle, die sowas schreiben können! Nächstes Zwischenziel: Das Auflade- Menü! :D
Low Post
01.02.2008, 21:58
Yeah, das ist mir auch gerade aufgefallen. Ich sollte es mir in Zukunft sparen, so früh morgens irgendwelche Schlussfolgerungen aufstellen zu wollen. Sorry. Das Problem mit der mehrmaligen Nutzung aber bleibt. Vielleicht fällt dir dazu ja noch irgendwas ein.
Naja, bei meinem Skript wird ja die Anzahl der entfernten Gegenstände wieder hinzugefügt. Wenn man das noch genauer haben will kann man natürlich noch etwas mit fQuestDelayTime herumexperimentieren, was ich aber nur ungern tun würde.
[...]
Ach ja mir ist was zu deiner Frage eingefallen, Katan. "GameMode" ist das Spiel selber, also die Spielwelt, in der man sich bewegt? (Hab ich so verstanden...!?) Die Lösung mag manchem jetzt vielleicht unprofessionell vorkommen, aber da wir ja nicht wie Bethesda an die .exe kommen, muss es ja auch nicht so perfekt sein. Worauf ich raus will: Wie wäre es, wenn man einen Befehl dazuschreibt, dass nach Schliessen des Aufladen- Menüs (Recharge-Menü?) das Inventar des Spielers automatisch auch geschlossen wird??? Dann wäre er wieder in GameMode und müsste das Inventar zur eneuten Aufladung auch neu öffnen (ok ein Tastendruck mehr :rolleyes: )... und dann darf das Skript ja auch wieder mit Zählen anfangen, oder?
Bin zwar nicht Katan, aber ich antworte darauf trotzdem mal.
Man kann einfach allgemein auch im Menumode abfragen, damit wäre das kein Problem.
Edit1: So hab gerade das Skript für den Altar ersetzt (nochmal Dank an alle für diese Mühen!), beim Speichern kam aber eine Fehlermeldung: Item "DeinSeelenstein" not found for parameter Objekt ID. Compiled Script not saved!. Da hab ich mir gedacht, dass das "DeinSeelenstein" nur ein Platzhalter war und hab die Editor ID von meiner Kopie eingegeben (AzurasSun). Jetzt hat's gespeichert. War das richtig oder falsch???[/Quopte]
Ist schon richtig, Sachen die irgentwie speziell gekennzeichnet wurden ( bei mir mit eckigen Klammer, bei Katan mit Anführungszeichen ) sind meistens Platzhalter, die man mit der entsprechenden ID ersetzen muss.
[QUOTE=JaMak062;1989811]Edit2:
Joa Edit1 hat sich erledigt, ich hab es grad auch einfach mal getestet und es läuft auch bei mir wunderbar (warum auch nicht). DAS IST SUPER! Echt meinen grössten Respekt an alle, die sowas schreiben können! Nächstes Zwischenziel: Das Auflade- Menü! :D
Welches Skript verwendest du denn?
Bei den Questskripts (letzten von Katan, bzw. mein Skript) ist das aufladen jeweils integriert. Außerdem gibt dass dann auch keine Konflikte mit anderen PIs, die auch den Verzauberungsaltar verändern, bzw. neue Möglichkeiten zum Verzaubern/Aufladen einfügen.
Zum verwenden einfach eine Quest erstellen, den Hacken bei SetGameStarted lassen/hintun, und das jeweilige Skript unter Questdata zuweisen.
Moinmoin.
Ich verwende das erweiterte Altar- Skript aus Katan's Post #18, weil das das Einzige war, das bisher voll funktionsfähig schien. Bei den anderen Skripts hat immer irgendwer einen Einwand gehabt... und Katans hat in seinem letzten Post ja auch noch behauptet, dass es ein Problem gäbe?! Da dort nichts gegenteiliges kam, bin ich davon ausgegangen, dass es stimmt. Dass du jetzt sagst, dass du das Problem eigentlich schon gelöst hast, ist natürlich super, aber das wusste ich ja nicht und aus dem Skript konnte ich es auch nicht ersehen.
Na gut, dann erklärt mir doch bitte mal einer genau, wie ich dein Skript, Low Post, da einbinden kann und dann versuch ich das! Wie erstellt man eine Quest? Und wo ist Questdata? Und muss ich jetzt auf Azuras Sonne ein Quest legen oder muss ich nur dem Questskript Azuras Sonne zuweisen? Und wie soll die Quest überhaupt ablaufen??? Ok sorry, sind verdammt viele Fragen...
Low Post
02.02.2008, 18:00
Mir ist bei meinem Skript auch noch ein Problem bei zu schneller Nutzung des Menüs aufgefallen, was dazu führt, dass ein Menumode evtl. nicht erkannt wird. Das lässt sich aber ohne Probleme über fQuestDelayTime lösen.
Mehrfachnutzung ist imo auch schon enthalten.
scn AzurasSunQuestScript
short x
short SoulGemMenu
float fQuestDelayTime
Begin Menumode
if ( ( Menumode 1042 ) || ( Menumode 1049 ) ) ;Enchantment & Recharge Menu
if ( SoulGemMenu == 0 )
set x to Player.GetItemCount
set SoulGemMenu to 1
endif
else
if ( x != Player.GetItemCount [ID deines Seelensteins] )
if ( SoulGemMenu )
set x to ( x - Player.GetItemCount [ID deines Seelensteins] )
; Message " "
; Message " "
;zum ausblenden der Nachricht einfach die beiden obigen Zeilen entkommentieren (Achtung: blendet evtl. auch wichtige Nachrichten aus)
if ( x > 0 )
Player.AddItem [ID deines Seelensteins] x
else
MessageBox "Während dem Verzaubern/Waffe aufladen wurde ein [Name deines Seelensteins] hinzugefügt."
endif
endif
set x to Player.GetItemCount [ID deines Seelensteins]
set SoulGemMenu to 0
endif
endif
End
Begin Gamemode
if ( fQuestDelayTime != 0.5 )
set fQuestDelayTime to 0.5 ;falls du jemand kennst, der das Verzauberungsmenü/Auflademenü in weniger als einer halben Sekunde verlassen kann den Wert einfach entsprechend verkleinern
else
if ( x != Player.GetItemCount [ID deines Seelensteins] )
if ( SoulGemMenu )
set x to ( x - Player.GetItemCount [ID deines Seelensteins] )
; Message " "
; Message " "
;zum ausblenden der Nachricht einfach die beiden obigen Zeilen entkommentieren (Achtung: blendet evtl. auch wichtige Nachrichten aus)
if ( x > 0 )
Player.AddItem [ID deines Seelensteins] x
else
MessageBox "Während dem Verzaubern/Waffe aufladen wurde ein [Name deines Seelensteins] hinzugefügt."
endif
endif
set x to Player.GetItemCount [ID deines Seelensteins]
set SoulGemMenu to 0
endif
endif
End
Einbinden:
Stell die Skriptart auf Quest und speicher das Skript ab.
Du gehst auf [I]Character-->Quests
in dem sich öffnendem Fenster machst du in der linken Spalten einen Klick mit der rechten Maustaste --> New
in dem nächsten Fenster gibst du die Editor-ID der Quest an (z.B. AzurasSunQuest). Mit OK bestätigen.
im Reiter Quest Data (am Anfang offen) stellst du unter Script dein Script ein.
Stell noch sicher, dass der Hacken bei Start Game Enabled ist, bzw. mach den Hacken weg und starte die Quest bei hinzufügen des Seelensteins via OnAdd Player.
Abspeichern und fertig
Moinmoin.
Joa, vielen Dank! Das hat alles wunderbar funktioniert! Leute, Leute, Leute... mannoman... das ist sowas von super!!! Ich erinnere an meinen Post #10! Und jetzt sowas... das ist schon sehr cool! 8) http://www.multimediaxis.de/images/smilies/old/sm_12.gif 8) http://www.multimediaxis.de/images/smilies/old/sm_12.gif 8) http://www.multimediaxis.de/images/smilies/old/sm_12.gif
Ach ja: Einen letzten Kritikpunkt hätte ich dann doch noch *SORRY*: Warum wird oben eingeblendet, dass einem eine "Azuras Sonne" hinzugefügt wird??? Ist das nötig? Weil mir wäre es lieber, wenn einem die Sonne stillschweigend wieder hinzugefügt wird... könnte man da nicht einfach ein paar Zeilen im Skript löschen? Aber welche? :confused:
Öhm... hat hiermit jetzt grade nix direkt zu tun, aber was muss man eigentlich tun, um den .bsa - Entpacker installieren zu können??? Ich hab die Datei runtergeladen, aber statt einer normalen .exe hab ich da nur so eine Datei, die Windows nicht erkennt...?! :confused: :confused:
P.S. Das Verzauberungs/Aufladen- Menü innerhalb einer halben Sekunde wieder verlassen??? Das ist doch garnix... :D :D :D
Low Post
03.02.2008, 13:36
um die Message zu unterbinden musst du die Zeilen mit dem ; Message " " entkommentieren (heißt: ; löschen).
ersetze einfach
; Message " "
; Message " "
;zum ausblenden der Nachricht einfach die beiden obigen Zeilen entkommentieren (Achtung: blendet evtl. auch wichtige Nachrichten aus)
mit
Message " "
Message " "
;zum ausblenden der Nachricht einfach die beiden obigen Zeilen entkommentieren (Achtung: blendet evtl. auch wichtige Nachrichten aus)
ersetzen.
BSA-Entpacker:
Welchen meinst du? Link bitte.
Achso, das heisst entkommentieren... (weil es stand ja schon im Skript, ich wusste nur nichts damit anzufangen... :( )
Naja aber jetzt funktioniert es perfekt! (Soll heissen, mir sind keine Probleme aufgefallen!) Da bleibt mir nur zu sagen: Danke! Danke an alle, die sich hier eingebracht haben, besonderen Dank an Low Post und Katan, für das Vorschreiben der Skripte! (Auch wenn am Ende Low Post's Skript Verwendung gefunden hat!)
http://www.multimediaxis.de/images/smilies/old/sm_12.gif http://www.multimediaxis.de/images/smilies/old/sm_12.gif http://www.multimediaxis.de/images/smilies/old/sm_12.gif http://www.multimediaxis.de/images/smilies/old/sm_12.gif http://www.multimediaxis.de/images/smilies/old/sm_12.gif http://www.multimediaxis.de/images/smilies/old/sm_12.gif http://www.multimediaxis.de/images/smilies/old/sm_12.gif http://www.multimediaxis.de/images/smilies/old/sm_12.gif http://www.multimediaxis.de/images/smilies/old/sm_12.gif http://www.multimediaxis.de/images/smilies/old/sm_12.gif http://www.multimediaxis.de/images/smilies/old/sm_12.gif http://www.multimediaxis.de/images/smilies/old/sm_12.gif http://www.multimediaxis.de/images/smilies/old/sm_12.gif http://www.multimediaxis.de/images/smilies/old/sm_12.gif http://www.multimediaxis.de/images/smilies/old/sm_12.gif http://www.multimediaxis.de/images/smilies/old/sm_12.gif http://www.multimediaxis.de/images/smilies/old/sm_12.gif http://www.multimediaxis.de/images/smilies/old/sm_12.gif
Ach ja, der .bsa- Entpacker: Ich meine den hier. (http://www.tessource.net/files/file.php?id=3117)
Moinmoin.
Sorry, dass ich den Thread nochmal aus der Versenkung holen muss, aber mir ist da noch was aufgefallen. Ich hatte ja anno dazumals den Seelenstein aufgenommen und dann immer mit dem Seelenstein im Inventar Änderungen am Skript erprobt. Die letzte Änderung war, dass keine Meldung mehr erscheint, wenn man Azura's Sonne zum Aufladen oder verzaubern benutzt (siehe oben http://www.multimediaxis.de/images/smilies/old/s_048.gif). Jetzt hatte ich aber nochmal einen älteren Save geladen, bevor ich Azura's Sonne aufgenommen hatte und mir ist aufgefallen, dass beim Aufnehmen immer noch eine Meldung erscheint (also: "Item xy hinzugefügt..."). Ich habe noch mal im Skript nachgeguckt und einfach die beiden Zeilen namens "MessageBox"Während dem Verzaubern/Waffe aufladen wurde ein [Azuras Sonne] hinzugefügt.""gelöscht. Jetzt erscheint keine Meldung mehr. Aber: Geht das so??? Oder führen jetzt eventuell irgendwelche Begriffe im Skript ins Leere? Kann das zu Bugs führen???
P.S. Die Frage nach dem .bsa- Entpacker steht auch noch... http://www.multimediaxis.de/images/smilies/old/s_048.gif
Powered by vBulletin® Version 4.2.3 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.