Construction Set Skriptthread zum Construction Set

Edit:
Also, es werden dem Spieler nun entsprechend viele Septime entfernt, allerdings keine der Truhe hinzugefügt.
Die Message kommt, der Inhalt der Truhe bleibt jedoch 0. (Laut der Global.)

Merkwürdiger Weise kann ich ingame in der Konsole weder über GetItemCount den Goldbetrag in der Truhe abfragen, noch mich zu einem X-Marker in der Zelle, wo diese Truhe steht, teleportieren. In beiden Fällen wird mir angezeigt, dass die ID ungültig ist, obwohl es exakt die REF-ID ist, die die beiden Objekte haben:?
Ich wollte nämlich mal überprüfen, ob da was in der Truhe landet. Das kann ich deshalb aber nicht.

Wenn die REF-ID in der Konsole nicht funktioniert, funktioniert sie im Script natürlich auch nicht. Das ist das einzige, was ich bei meinem Test geändert hatte. Ich hab die Referenz durch eine Variable ersetzt um Arbeit zu sparen.
Irgendwas muß da mit der Referenz nicht stimmen.
Nur mal zur Sicherheit:
Du hast in deiner Mod ein Interior und einen Container erstellt. Dann den Container in das Interior gezogen und der Referenz den Namen "KKIrrlichtBankSpielerKontoTruhe01REF" gegeben und die Referenz auf Persistent (wichtig!) gestellt.
Wenn du das so gemacht hast, müßte die Referenz eigentlich funktionieren.

Gruß Peter
 
Jup, habe ich. Was mich halt wundert, dass ich mich auch nicht zu dem XMarker teleportieren kann. Den benutze ich in meinem Quest-Script und da funktioniert das wunderbar mit einer Kreatur.

Beim Laden unter Details werden mir auch die REFErence-IDs angezeigt.
 
Jup, habe ich. Was mich halt wundert, dass ich mich auch nicht zu dem XMarker teleportieren kann. Den benutze ich in meinem Quest-Script und da funktioniert das wunderbar mit einer Kreatur.

Beim Laden unter Details werden mir auch die REFErence-IDs angezeigt.

Was mir gestern nicht so richtig aufgefallen ist (hatte keine Zeit mehr), du hast in der Konsole anscheinend die EditorID verwendet. In der Konsole mußt du die FormID verwenden und zuerst die Objektreferenz setzen. Wenn das Objekt nicht sichtbar und damit nicht angeklickt werden kann, mußt du das mit dem Konsolenbefehl "PRID" machen. Die Eingabe in der Konsole sieht dann so aus:

PRID <FormID>
GetItemCount F

(F ist die FormID von GOLD001)
Mit dem XMarker müßte das genauso gehen, hab ich aber noch nie probiert.

Mir ist noch eine Idee gekommen, warum der Zugriff auf die Truhe im Script nicht richtig funktioniert. Es könnte sein das Oblivion die Änderung am Truheninhalt erst nach schließen des Inventars ausführt, da das Spiel ja bei offenem Inventar pausiert. (So wie bei Teleportringen aus Hausmods der Teleport auch erst nach schließen des Inventars erfolgt)
Ich habe das Script mal so geändert, das es nur noch den Inhalt der Truhe anpasst, sie aber sonst nicht mehr verwendet und die Global parallel aktuallisiert. Kannst ja mal ausprobieren, ob mein Verdacht stimmt.

Code:
scn KKIrrlichtBankKontoKugel01Script

short level
short button
short MenuOpen
long  Betrag

begin OnEquip player
	if (level == 0)
		Messagebox "Was für eine Aktion wollt ihr durchführen?", "Einzahlung", "Abhebung", "Kontostand einsehen"
		set level to 1
	else
		set level to 0
	endif

	set MenuOpen to 1
end

begin MenuMode 1002  ;1002 = Inventar offen
	if MenuOpen ==  1
		set button to GetButtonPressed

		if (button == -1)
			return
		endif

		if (level == 1)
			if (button == 0)
				Messagebox "Wie viel wollt ihr einzahlen?", "500", "1.000", "5.000", "10.000", "50.000", "100.000"
				set level to 2
			elseif (button == 1)
				Messagebox "Wie viel wollt ihr abheben?", "500", "1.000", "5.000", "10.000", "50.000", "100.000", "Alles"
				set level to 3
			elseif (button == 2)
				Message "Euer Kontostand beträgt %.0f", KKIrrlichtBankKontostandGlobal 
				set level to 0
			endif
			return
		endif

		if (level == 2)
			if (button == 0)
				set Betrag to 500
			elseif (button == 1)
				set Betrag to 1000
			elseif (button == 2)
				set Betrag to 5000
			elseif (button == 3)
				set Betrag to 10000
			elseif (button == 4)
				set Betrag to 50000
			elseif (button == 5)
				set Betrag to 100000
			endif
			if (player.GetItemCount gold001 >= Betrag)
				player.removeitem gold001 Betrag
				KKIrrlichtBankSpielerKontoTruhe01REF.additem gold001 Betrag
				set KKIrrlichtBankKontostandGlobal to KKIrrlichtBankKontostandGlobal + Betrag
				Message "Ihr habt %.0f Gold eingezahlt.", Betrag
			else
				Message "Ihr verfügt nicht über genügend Gold."
			endif
			set level to 0
			set MenuOpen to 0
		endif

		if (level == 3)
			if (button == 0)
				set Betrag to 500
			elseif (button == 1)
				set Betrag to 1000
			elseif (button == 2)
				set Betrag to 5000
			elseif (button == 3)
				set Betrag to 10000
			elseif (button == 4)
				set Betrag to 50000
			elseif (button == 5)
				set Betrag to 100000
			elseif (button == 6)
				set Betrag to -1
				if (KKIrrlichtBankKontostandGlobal > 0)
					KKIrrlichtBankSpielerKontoTruhe01REF.removeitem gold001 KKIrrlichtBankKontostandGlobal
					player.additem gold001 KKIrrlichtBankKontostandGlobal
					Message "Ihr habt alles Gold abgehoben."
				else
					Message "Euer Konto ist leer."
				endif
			endif
			if (Betrag > -1)
				if (KKIrrlichtBankKontostandGlobal >= Betrag)
					KKIrrlichtBankSpielerKontoTruhe01REF.removeitem gold001 Betrag
					set KKIrrlichtBankKontostandGlobal to KKIrrlichtBankKontostandGlobal - Betrag
					player.additem gold001 Betrag
					Message "Ihr habt %.0f Gold abgehoben.", Betrag
				else
					Message "Ihr verfügt nicht über genügend Gold auf eurem Konto."
				endif 
			endif
			set level to 0
			set MenuOpen to 0
		endif
	endif
end
 
  • Like
Reaktionen: Knochenkeule
Die Truhe ist nicht disabled. Das Interior kann man nicht betreten, deswegen ist das nicht notwendig.

Und ja, ich habe die Form-ID verwendet (auch von der Truhe und dem XMarker).
Und auch von Gold.

Die Abfrage player.GetItemCount 0000000F funktioniert ja beispielsweise wunderbar.

Ich habe nochmal nachgeschaut, bei der Form-ID zeigt er nicht an, dass die ID unbekannt ist, sondern, dass "01000EE1.GetItemCount" ein unbekannter Script-Befehl ist.

Ich habe das Script jetzt noch mal soweit durchgetestet. Es klappt soweit. Nur eine Kleinigkeit nicht, nämlich die Funktion "Alles abheben". Wenn man beispielsweise 10000 einzahlt, kann man danach über "Alles abheben" beliebig oft 10000 abheben, der Kontostand ändert sich auch nicht (Global bleibt gleich). Bei allen anderen buttons für Abheben (500 - 100000) klappt das wunderbar oder es kommt die Meldung, dass nicht genügend drauf ist, wenn man mehr abheben will, als drauf ist, der Kontostand sinkt entsprechend. Nur halt bei diesem einen button nicht.

Da füge ich mal noch die Zeile "set KK...Global to 0 ein".

Edit:
Ja, das klappt jetzt so.
Jetzt muss ich nur noch die Zinsenrechnung und Kontokostenrechnung vernüftig hinbekommen.
Und die Auflösung.

Danke schon mal. Könnte sein, dass ich nochmal auf Hilfe angewiesen sein werde:p
 
Zuletzt bearbeitet:
Die Abfrage player.GetItemCount 0000000F funktioniert ja beispielsweise wunderbar.

Das funktioniert weil player eine in der Konsole von Bethesda definierte Objektreferenz ist, das gilt aber nicht für andere Objekte.

Ich habe nochmal nachgeschaut, bei der Form-ID zeigt er nicht an, dass die ID unbekannt ist, sondern, dass "01000EE1.GetItemCount" ein unbekannter Script-Befehl ist.

Das funktioniert so nicht, du mußt es so machen, wie in meinem vorherigen Post beschrieben:

PRID 01000EE1
GetItemCount F

Du mußt beide Zeilen so in die Konsole eingeben. Ist deine Mod wirklich die erste nach der oblivion.esm geladene Mod? Wenn nicht, mußt du die 01 in der FormID durch die Position deiner Mod in der Ladereihenfolge ersetzen.

Da füge ich mal noch die Zeile "set KK...Global to 0 ein".
Ups..
Die Stelle hab ich beim ändern übersehen, ist genau richtig wie du ja schon rausgefunden hast.

Danke schon mal. Könnte sein, dass ich nochmal auf Hilfe angewiesen sein werde:p

Gern geschehen. Hab ja auch was dazugelernt:)

Gruß Peter
 
Hallo auch!
Ich habe einen NPC disable ins Spiel gestellt und durch ein Skript auf einem Activator enable gemacht. Nun soll er nach 5 Minuten wieder verschwinden. Dafür benötige ich ein Skript, wenn möglich auf dem NPC.
Danke im Voraus
 
Code:
scn name

short state
float timer

Begin GameMode
 if getDisabled == 0
  if state == 0
   set timer to 300
   set state to 1
  elseif state == 1
   if timer > 0
    set timer to timer - getSecondsPassed
   else
    disable
    set state to 2
   endif
  endif
 endif
end
 
  • Like
Reaktionen: enorm
Das Thema mit Knochen ist eigentlich schon gelöst aber ich wollte mich auch nochmal einbringen ;)

Also: Klar GameMode Scripts gehen nicht im Inventar, das MiscItem wird aber auch nur im Inventar benutzt und selbiges dann geschlossen.

2. Referenzen dürfen net mehr Zahlen anfangen. Und zu dem Umrechnen der Referenzen, das geht mit dem Hex System und der Postion der Mod in der Ladereihenfolge. Es gab hier vor Urzeiten mal einen Thread dazu...

Edit:

Zu dem alles Abheben: Ich bin mir nicht sicher, ich glaube aber, dass liegt daran, dass der Script im MenüMode läuft und das Spiel und somit auch die Variabeln eingefroren sind...
 
Nunja, ich habe im Quest-Script noch einen Block drin (schon vorher), der auch im MenuMode die Global hätte auf den Wert setzen sollen, der der Goldmenge in der Kiste entspricht.
 
Ich möchte, dass man beim Ausrüsten eines Misc-Items zu einen bestimmten Ort Teleportiert wird, das funktioniert auch, nur hört es nicht mehr auf. Ich kann mich gar nicht mehr wegbewegen, weil ich in einer Dauerschleife immer wieder zum Marker teleportiert werde.

Hier ist der Ausschnitt meines Scriptes:
Code:
short Teleport

Begin OnEquip
set Teleport to 1
end

Begin GameMode
If Teleport == 1
player.moveto TeleportXMarker
set Teleport to 0
endif
end
 
Schon, aber so habe ich es ganz am Anfang gemacht und ich wurde immer und immer wieder zu dem Ort teleportiert, darum dachte ich, ich mach das über Variabeln, hat aber, wie oben beschrieben, auch nichts gebracht :cry:
 
Das ist etwas unlogisch. OnEquip läuft nur einmal durch, halt, wenn man den Gegenstand im Inventar aktiviert. Der Teleport dürfte deswegen mit einem OnEquip-Block nur genau einmal pro Aktivierung durchlaufen.

Ist das Script noch länger, dass auf dem Teil liegt?
 
Nein, das ist alles. Wenn ich den Gegenstand aktiviere, passiert folgendes: Ich werde zu dem Ort teleportiert, der Bildschirm wird schwarz, der Ort ist wieder sichtbar, der Bildschirm wird schwarz, ... so geht das die ganze Zeit, daher wollte ich mit der Variabelabfrage verhindern, dass es so wird, hat aber auch nicht funktioniert. Kann es Probleme geben, wenn ich das Item in der selben Zelle aktiviere?
 
Nein, das ist alles. Wenn ich den Gegenstand aktiviere, passiert folgendes: Ich werde zu dem Ort teleportiert, der Bildschirm wird schwarz, der Ort ist wieder sichtbar, der Bildschirm wird schwarz, ... so geht das die ganze Zeit, daher wollte ich mit der Variabelabfrage verhindern, dass es so wird, hat aber auch nicht funktioniert. Kann es Probleme geben, wenn ich das Item in der selben Zelle aktiviere?

Kann es sein das dies alle 15 Sekunden passiert? Denn so ein Problem hatte ich mit dem Moveto/MovetoMarker auch schon des öfteren, bei mir hat es aber geklappt wenn ich eine Variable eingebaut habe. :)
Wie genau ist dein Skript denn dann mit der Variable aufgebaut, wann die Variable denn weitergeschalten nach oder vor dem moveto Befehl?

Wenn er danach erst weitergeschalten wird, dann wird dieser Ignoriert, alle Befehle nach Moveto/MovetoMarker werden ignoriert und nicht ausgeführt. Du musst sie also davor eintragen, wenn dies der Fall ist. ;)

MfG Master of Worlds
 
Nein, das ist alles. Wenn ich den Gegenstand aktiviere, passiert folgendes: Ich werde zu dem Ort teleportiert, der Bildschirm wird schwarz, der Ort ist wieder sichtbar, der Bildschirm wird schwarz, ... so geht das die ganze Zeit, daher wollte ich mit der Variabelabfrage verhindern, dass es so wird, hat aber auch nicht funktioniert. Kann es Probleme geben, wenn ich das Item in der selben Zelle aktiviere?

Kann es sein das dies alle 15 Sekunden passiert? Denn so ein Problem hatte ich mit dem Moveto/MovetoMarker auch schon des öfteren, bei mir hat es aber geklappt wenn ich eine Variable eingebaut habe. :)
Wie genau ist dein Skript denn dann mit der Variable aufgebaut, wann die Variable denn weitergeschalten nach oder vor dem moveto Befehl?

Wenn er danach erst weitergeschalten wird, dann wird dieser Ignoriert, alle Befehle nach Moveto/MovetoMarker werden ignoriert und nicht ausgeführt. Du musst sie also davor eintragen, wenn dies der Fall ist. ;)

MfG Master of Worlds
 
Das Script mit den Variabeln ist das von meinem ersten Post zu diesen Problem:
Code:
short Teleport

Begin OnEquip
set Teleport to 1
end

Begin GameMode
If Teleport == 1
player.moveto TeleportXMarker
set Teleport to 0
endif
end

Mit den 15 Sekunden könnte hinhauen.
 
Dann probiere es mal so. :)

Code:
short Teleport

Begin OnEquip
set Teleport to 1
end

Begin GameMode
If Teleport == 1
set Teleport to 0
player.moveto TeleportXMarker
endif
end

MfG Master of Worlds
 
  • Like
Reaktionen: bjoernret