Construction Set Skriptthread zum Construction Set

Er fragt ob es soetwas gibt, nicht worauf er es legen muss ;)

Gibt es nicht im Vanilla schon so ein Script? Müsste auf dem vergifteten Apfel liegen, oder? Sekunde ich öffne einmal das CS...

mfg
Raven

EDIT: Nein, der Apfel wird über einen Effekt (Zauber) geleitet, hmmm...
EDIT²: Und noch ein Post ist wieder neu erschienen -.-"
 
  • Like
Reaktionen: bjoernret
Nimm einfach dieses Skript auf das gefragte Item:
Code:
scn name

Begin onEquip player
 if equipped == 0
  set equipped to 1
 endif
end
Die Variable "equipped" ist dabei eine Global. Du kannst natürlich auch eine Quest-Variable benutzen...
 
  • Like
Reaktionen: bjoernret
@darknightwalker:
....................
In dem Quest-Script sieht das dann etwa so aus:
Code:
scn ...

short step
float timer

begin GameMode
if (step == 0)
    set timer to 10
    set step to 1
elseif (step == 1 && timer > 0)
    set timer to timer - GetSecondsPassed
elseif (step == 1 && timer > 4 && timer < 6)
    Message "Der Timer hat die Hälfte erreicht."
elseif (step == 1 && timer <= 0)
    Message "Der Timer ist abgelaufen."
    player.AddItem gold001 100
    set step to 2
endif
end

Mit dieser Variante brauchst du dementsprechen zwei Scripts.

Habe dieses Script auf einer Quest laufen und Aktiviere den Timer mit Hilfe einer Varablen die ein Aktivator setzt.

Alles läuft soweit nur das die Zwischenzeit nicht angezeigt wird.
Habe auch die Zeit verklängert. Es brachte nichts. Es wird immer nur die letzte Message ausgegeben.

Darüberhinaus besteht das Problem das wenn der Spiler den Aktivator anklickt eine Messagebox mit mehreren Aktionen kommt.

Der Timer läuft auch wenn man bei den Messageboxen sich dagegen entscheidet bzw, einem noch ein Gegenstand fehlt um die Aktion auszuführen.
Ich bekomme den Timer in diesem Fall nicht ausgeschaltet. Mache ich es über die Variable geht der Timer nie an. Die Message dagegen lässt sich über eine Variable deaktivieren. So scheint es zu laufen. Nur da der Timer im Hintergrund weiterarbeitet ist er hal fast abgeklaufen, wenn der Sopieler den Aktivator noch einmal betätigt um eine andere Aktion auszuführen.

Wie kann ich das am besten machen? Und warum werden die Zwischenschritte im Timer nicht angezeigt?
------------------------------------------------------------------------------------------------------------------------
Ich erkläre mal kurz die Situation.

Es gibt einen Activator in der Celle. Sobald dieser aktiviert ist, erfolgt eine Messagebox mit Aktionen. Gleichzeitig läuft eine Quest die Abfragt ob der Spieler entsprechende Items im Inventar hat. In dieser Quest läuft auch der Timer.

Die Messagebox reagiert entsprechend auf die Abfrage. Hat der Spieler den Gegenstand und wählt die Aktion so startet der Timer und das Item wird entfernt, der Timer läuft. Damit der Spieler merkt das etwas passiert sollen entsprechende Messages kommen. Nach Ablauf der Zeit wird ein anderer Gegenstand hinzugeführt.

Hat der Spieler nicht das passende Item, um die Aktion die er wählt auszuführen. Soll der Timer nicht starten. Ebenso wenn der Spieler nach erscheinen der Box doch keine Aktion ausführen will.
 
Zuletzt bearbeitet:
Wenn das Script mit der Messagebox auf einem Activator legt, kannst du in das Script den Teil mit dem timer einbauen und auch die Abfrage zu den Items, die der Spieler hat. Das muss dann nicht als extra Quest laufen.

Als Beispiel:
Code:
scn ...

short button
short step
float timer

begin OnActivate
if (step == 0)
    Messagebox "xyz", "a", "b", "c"
    set step to 1
endif
end

begin GameMode
set button to GetButtonPressed
if (step == 1) && (button == -1)
    set step to 0
    return
elseif (step == 1) && (button == 0)
    ;was auch immer
    set step to 0
elseif (step == 1) && (button == 1)
    ;was auch immer
    set step to 0
elseif (step == 1) && (button == 2)
    if (player.GetItemCount [x] > 0) && (player.GetItemCount [y] > 0) ...
        player.RemoveItem [x] [Menge]
        player.RemoveItem [y] [Menge]
        ...
        set step to 2
        set timer to [Wert]
        Message "Ihr habt alles abgegeben."
    else
        "Ihr habt nicht alles, was benötigt wird."
        set step to 0
endif

if (step == 2) && (timer > 0)
    set timer to timer - GetSecondsPassed
elseif (step == 2) && (timer > 3 && timer < 7)
    Message "Kommt gleich."
elseif (step == 2) && (timer <= 0)
    player.AddItem [j] [Menge]
    ...
    Message "Fertig."
    set step to [Wert]   ;je nachdem, ob das nochmal gehen soll (0) oder nicht (3)
endif
end

So etwa würde das eben auch gehen.
 
  • Like
Reaktionen: robinH
Ja ich weiss das ich da keine Extra Quest für benötigen würde doch das Script ist so was von Umfangreich, das das nicht alles in den Aktivator passt. Noch dazu greifen mehrere Aktivatoren auf das Questscript mit den Abragen zu.

Was ich nicht verstehe, was bedeutet Button -1 . Das kenne ich nicht.

Der erste ist doch 0 der zweite 1 der dritte 2 und was ist -1?

Weisst du, ob bei dem Script die Zwischenschritte im Timer angezeigt werden?
 
Das Skript, was Knochenkeule gepostet hat, ist doch nicht zu lang... :?

Die Variable "Button" wird auf -1 gesetzt, damit die Abfrage im GameMode nicht den Standardwert 0 wiedergibt...

Zwischenschritte des Timers werden angezeigt, wenn du den richtigen Text in die Message einfügst...
 
-1 bedeutet in diesem Falle, dass kein button gedrückt wurde, deswegen return.

Ich habe das Script nicht getestet, das mal eben zu erstellen, ist doch etwas zeitaufwenig.

Ich habe allerdings auch ein kleines Problem mit einem Script.
Das Script sieht so aus:
Code:
scn KKIrrlichtBankKontoKugel01Script

short level1
short level2
short level3
short button
short button1
short button2

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

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

set button1 to GetButtonPressed
if (level1 == 1) && (level2 == 1) && (button1 == -1)
    set level2 to 0
    return
elseif (level1 == 1) && (level2 == 1) && (button1 == 0)
    if (player.GetItemCount gold001 >= 500)
        player.removeitem gold001 500
        KKIrrlichtBankSpielerKontoTruhe01REF.additem gold001 500
        Message "Ihr habt 500 Gold eingezahlt."
        set level2 to 0
     else
        Message "Ihr verfügt nicht über genügend Gold."
        set level2 to 0
     endif
elseif (level1 == 1) && (level2 == 1) && (button1 == 1)
    if (player.GetItemCount gold001 >= 1000)
        player.removeitem gold001 1000
        KKIrrlichtBankSpielerKontoTruhe01REF.additem gold001 1000
        Message "Ihr habt 1.000 Gold eingezahlt."
        set level2 to 0
     else
        Message "Ihr verfügt nicht über genügend Gold."
        set level2 to 0
     endif 
elseif (level1 == 1) && (level2 == 1) && (button1 == 2)
    if (player.GetItemCount gold001 >= 5000)
        player.removeitem gold001 5000
        KKIrrlichtBankSpielerKontoTruhe01REF.additem gold001 5000
        Message "Ihr habt 5.000 Gold eingezahlt."
        set level2 to 0
     else
        Message "Ihr verfügt nicht über genügend Gold."
        set level2 to 0
     endif 
elseif (level1 == 1) && (level2 == 1) && (button1 == 3)
    if (player.GetItemCount gold001 >= 10000)
        player.removeitem gold001 10000
        KKIrrlichtBankSpielerKontoTruhe01REF.additem gold001 10000
        Message "Ihr habt 10.000 Gold eingezahlt."
        set level2 to 0
     else
        Message "Ihr verfügt nicht über genügend Gold."
        set level2 to 0
     endif 
elseif (level1 == 1) && (level2 == 1) && (button1 == 4)
    if (player.GetItemCount gold001 >= 50000)
        player.removeitem gold001 50000
        KKIrrlichtBankSpielerKontoTruhe01REF.additem gold001 50000
        Message "Ihr habt 50.000 Gold eingezahlt."
        set level2 to 0
     else
        Message "Ihr verfügt nicht über genügend Gold."
        set level2 to 0
     endif 
elseif (level1 == 1) && (level2 == 1) && (button1 == 5)
    if (player.GetItemCount gold001 >= 100000)
        player.removeitem gold001 100000
        KKIrrlichtBankSpielerKontoTruhe01REF.additem gold001 100000
        Message "Ihr habt 100.000 Gold eingezahlt."
        set level2 to 0
     else
        Message "Ihr verfügt nicht über genügend Gold."
        set level2 to 0
     endif 
endif

set button2 to GetButtonPressed
if (level1 == 1) && (level3 == 1) && (button2 == -1)
    set level3 to 0
    return
elseif (level1 == 1) && (level3 == 1) && (button2 == 0)
    if (KKIrrlichtBankSpielerKontoTruhe01REF.GetItemCount gold001 >= 500)
        KKIrrlichtBankSpielerKontoTruhe01REF.removeitem gold001 500
        player.additem gold001 500
        Message "Ihr habt 500 Gold abgehoben."
        set level3 to 0
        set level1 to 0
     else
        Message "Ihr verfügt nicht über genügend Gold auf eurem Konto."
        set level3 to 0
        set level1 to 0
     endif
elseif (level1 == 1) && (level3 == 1) && (button2 == 1)
    if (KKIrrlichtBankSpielerKontoTruhe01REF.GetItemCount gold001 >= 1000)
        KKIrrlichtBankSpielerKontoTruhe01REF.removeitem gold001 1000
        player.additem gold001 1000
        Message "Ihr habt 1.000 Gold abgehoben."
        set level3 to 0
        set level1 to 0
     else
        Message "Ihr verfügt nicht über genügend Gold auf eurem Konto."
        set level3 to 0
        set level1 to 0
     endif 
elseif (level1 == 1) && (level3 == 1) && (button2 == 2)
    if (KKIrrlichtBankSpielerKontoTruhe01REF.GetItemCount gold001 >= 5000)
        KKIrrlichtBankSpielerKontoTruhe01REF.removeitem gold001 5000
        player.additem gold001 5000
        Message "Ihr habt 5.000 Gold abgehoben."
        set level3 to 0
        set level1 to 0
     else
        Message "Ihr verfügt nicht über genügend Gold auf eurem Konto."
        set level3 to 0
        set level1 to 0
     endif 
elseif (level1 == 1) && (level3 == 1) && (button2 == 3)
    if (KKIrrlichtBankSpielerKontoTruhe01REF.GetItemCount gold001 >= 10000)
        KKIrrlichtBankSpielerKontoTruhe01REF.removeitem gold001 10000
        player.additem gold001 10000
        Message "Ihr habt 10.000 Gold abgehoben."
        set level3 to 0
        set level1 to 0
     else
        Message "Ihr verfügt nicht über genügend Gold auf eurem Konto."
        set level3 to 0
        set level1 to 0
     endif 
elseif (level1 == 1) && (level3 == 1) && (button2 == 4)
    if (KKIrrlichtBankSpielerKontoTruhe01REF.GetItemCount gold001 >= 50000)
        KKIrrlichtBankSpielerKontoTruhe01REF.removeitem gold001 50000
        player.additem gold001 50000
        Message "Ihr habt 50.000 Gold abgehoben."
        set level3 to 0
        set level1 to 0
     else
        Message "Ihr verfügt nicht über genügend Gold auf eurem Konto."
        set level3 to 0
        set level1 to 0
     endif 
elseif (level1 == 1) && (level3 == 1) && (button2 == 5)
    if (KKIrrlichtBankSpielerKontoTruhe01REF.GetItemCount gold001 >= 100000)
        KKIrrlichtBankSpielerKontoTruhe01REF.removeitem gold001 100000
        player.additem gold001 100000
        Message "Ihr habt 100.000 Gold abgehoben."
        set level3 to 0
        set level1 to 0
     else
        Message "Ihr verfügt nicht über genügend Gold auf eurem Konto."
        set level3 to 0
        set level1 to 0
     endif 
elseif (level1 == 1) && (level3 == 1) && (button2 == 6)
    if (KKIrrlichtBankSpielerKontoTruhe01REF.GetItemCount gold001 > 0)
        KKIrrlichtBankSpielerKontoTruhe01REF.removeitem gold001 KKIrrlichtBankKontostandGlobal
        player.additem gold001 KKIrrlichtBankKontostandGlobal
        Message "Ihr habt alles Gold abgehoben."
        set level3 to 0
        set level1 to 0
     else
        Message "Euer Konto ist leer."
        set level3 to 0
        set level1 to 0
     endif 
endif


end

Die Script liegt auf einem Misc-Item. Die erste Messagebox erscheint sogar noch im Inventar. Wenn man auf "Einzahlung" oder "Abhebung" klickt, kommt noch die jeweils nächste, doch wenn ich dort auf einen button klicke, passiert nichts mehr.
KKIrrlichtBankKontostandGlobal ist eine Global.
KKIrrlichtBankSpielerKontoTruhe01REF ist die Reference ID einer Truhe, die sozusagen das Konto ist. Ihr Wert ist gleich dem Gold, dass sich in der Truhe befindet (in einem anderen Script geregelt).

Das Gold wird nicht aus dem Inventar des Spielers entfernt, es wird nichts in die Truhe gelegt, dementsprechen ändert sich auch nicht der Wert der Global.
Abheben ist ebenfalls nicht möglich, selbst, wenn was in der Truhe wäre. Hier springt das Script jeweils nicht von der Messagebox in den nächsten Bereich.
Vermutlich liegt das an der Abfrage zu den beiden Bereichen, aber ich bekomme da keine funktionierende Abfrage hin.

Noch ein Punkt:

Message "Euer Kontostand beträgt %.0f", KKIrrlichtBankKontostandGlobal

Diese Zeile klappt auch nicht so, wie sie soll. Wie muss ich das richtig schreiben, damit mir in der Message der Wert der Global ausgegeben wird?
 
Bei deinem Script sehe ich nciht durch. Aber ich habe den Fehler bei dem Timer nun gefunden.

Damit die Abfragen im Timer funtionieren, muss es folgender Massen aussehen.

if (timer > 0
set timer to timer - GetSecondsPassed
if timer > 3 && timer < 7
Message "Kommt gleich."
elseif timer <= 0
player.AddItem [j] [Menge]
...
Message "Fertig."
endif
endif
end

Denn sonst kann es niemals gehen. Warum? Die erste IF-Schleife fragt ob der Timer >0 ist.
Somit belibt nur noch die Letzte Schleife, die Fragt wann der Timer 0 Ist.
Alle Zwischenabfragen sind ja auch >0 und somit wird nur die Erste Schleife durchlaufen.
 
Hi Fans,

ich wollte mal Fragen, ob es möglich ist das man eine Druckplatte die eine geheime Wand öffnen soll, mit einen Script belegen kann, wo die Druckplatte erst funktioniert wenn ein bestimmtes Gewicht darauf liegt.

Mein Ziel ist es das ich eine Statue nehme und diese dann auf ein bestimmtes Gewicht einstelle und erst wenn die Statue mit dem bestimmten Gewicht auf die Druckplatte gestellt wird, öffnet sich diese geheime Wand.

Danke im voraus.
mfg Piet
 
Moin
Ich möchte ereichen das von mir erstellte Portale in ganz Tamriel verteilt auftauchen (so wie die Oblivion tore). dazu möchte ich den OblivionGateRandomScript als Basis verwenden. Problem ist das ich bei den Script nicht ganz durch sehe und gerne wissen möchte was ich da raus nehmen muss ( was mit der Hq zutuhen hat ) und welche Variablen ich ggf. umbenennen muss

Hier erst ma der Skript
PHP:
scn OblivionGateRandomScript

float timer
short count
ref mySpawnMarker
short rand				; this can be removed eventually. Put it in just to be able to see the numbers that were being rolled.
short destroyed		; set to 1 after destroyed script runs
short ignore

begin OnLoad
	disableLinkedPathPoints
	; reset count
	if count > 0
		set timer to 60
	endif
	set count to 0

	; if MQ is over, destroy me if I'm open
	if getdisabled == 0 && getdestroyed == 0 && getstage MQ16 >= 100
		ForceCloseOblivionGate 
		enablelinkedpathpoints
	endif
	
	; if we're not at max gates, we might open a new one here
	if MQ00.openGates < MQ00.maxOpenGates && ( getdisabled == 1 || ( MQ00.allowGatesToReopen == 1 && destroyed == 1 ) )
		set rand to GetRandomPercent 
		if rand <= MQ00.randomGateChance
			set mySpawnMarker to getParentRef
			mySpawnMarker.enable
			enablelinkedpathpoints
			set MQ00.openGates to MQ00.openGates + 1
			if destroyed == 1
				setDestroyed 0
				set destroyed to 0
			endif
		endif
	endif
end

begin OnActivate
	if isActionRef player == 1
		; we aren't "near" any gate anymore (we're in Oblivion!)
		set MQ00.nearOblivionGate to 0
		ReleaseWeatherOverride
	endif
	Activate
	set ignore to 1
	return
end

begin gamemode
	if ignore == 1
		set ignore to 0
		return
	endif

	; no need to process further if destroyed
	if destroyed == 1
		return
	endif
		
	if getdestroyed == 1 && destroyed == 0
		set destroyed to 1
		set MQ00.destroyedGates to MQ00.destroyedGates + 1
	endif

	; start churning out creatures when I'm turned on
	if GetDisabled == 0 && GetDestroyed == 0
		if IsAnimPlaying == 0
			playgroup specialidle 1
		endif

		; make sure weather is eeeevil gate weather
		if getiscurrentweather OblivionStormTamriel == 0
			if getdistance player < 4000
				if MQ00.nearOblivionGate == 0 && getdistance player < 1000
					; this should only happen when I come out an Oblivion gate into Tamriel -- I'm suddenly close but the "near" variable hasn't been set
					forceweather OblivionStormTamriel 1
				else
					setweather OblivionStormTamriel 1
				endif
				set MQ00.nearOblivionGate to GetSelf
			endif
		else
			if getdistance player > 5000 && MQ00.nearOblivionGate == GetSelf
				set MQ00.nearOblivionGate to 0
				ReleaseWeatherOverride
			endif
		endif

		if timer > 0
			set timer to timer - getsecondspassed
		elseif count < MQ00.maxCreatureCount
			set count to count + 1
			playgroup forward 1
			mySpawnMarker.placeatme LL1DaedricBeast100
			set timer to 10
		endif
	endif
end

sorry wen die Antwort bereits in den Kommentaren steht nur ist mein Englisch sehr begrenzt.

Danke schon mal im vorraus
 
@Knochenkeule

Das Hauptproblem in deinem Script ist die der Mehrfachaufruf von GetButtonPressed. Man kann damit nur ein einziges Mal den gedrückten Button abfragen. Alle weitern Aufrufe geben immer den Wert -1 zurück. Durch den mehrfachen Aufruf in deinem Script killt sich das Script praktisch selbst.
Außerdem berücksichtigt dein Script nicht, das der GameMod für jeden Frame aufgerufen wird. Es kann aber bis zu 15 Frames (laut CS-Wiki) dauern, bis GetButtonPressed nach Anzeige der Messagebox den gedrückten Button liefert. Du mußt also den Fall berücksichtigen, daß dein Script aufgerufen wird ohne das es was zu tun gibt.

Ich habe dein Script mal entsprechend geändert und da ich gerade irgendwie in Fahrt war auch etwas gestrafft, da ich fand, daß es unnötig kompliziert war. Ich hoffe das ist ok für dich. Ich konnte das Script natürlich ohne deine Mod nicht testen und hoffe mal, daß es funktioniert.

Code:
scn KKIrrlichtBankKontoKugel01Script

short level
short button
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
end

begin GameMode

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
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
		Message "Ihr habt %.0f Gold eingezahlt.", Betrag
	else
		Message "Ihr verfügt nicht über genügend Gold."
	endif
	set level 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 (button2 == 6)
		set Betrag to -1
		if (KKIrrlichtBankSpielerKontoTruhe01REF.GetItemCount gold001 > 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 (KKIrrlichtBankSpielerKontoTruhe01REF.GetItemCount gold001 >= Betrag)
			KKIrrlichtBankSpielerKontoTruhe01REF.removeitem gold001 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
endif

end

Noch ein Punkt:

Message "Euer Kontostand beträgt %.0f", KKIrrlichtBankKontostandGlobal

Diese Zeile klappt auch nicht so, wie sie soll. Wie muss ich das richtig schreiben, damit mir in der Message der Wert der Global ausgegeben wird?

Von der Syntax her ist das völlig korrekt. Da du den Fehler nicht beschreibst, fällt mir als mögliche Ursache nur der Typ der Global ein. Der sollte auf keinen Fall "Short" sein, was die Defaulteinstellung ist.

Gruß Peter
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Knochenkeule
Nun, das mit button hätte durch die drei verschiedenen Variablen doch eigentlich umgangen sein müssen oder?

Egal, ich probier mal das Script aus, mal sehen, obs hinhaut.

Edit:
Nein, klappt nicht so, wie es soll.
Wenn man etwas einzahlen will, werden dem Spieler automatisch 500 Goldmünzen abgezogen, ohne, dass man einen button drückt. Wenn man dann einen drückt, passiert nichts.

Das mit der Message und der Global (war natürlich eine short), klappt in sofern, dass sich im Scriptverlauf der Kontostand-Global nicht verändert und sie somit auf 0 bleibt.
Das wird auch angezeigt. (Kann sein, dass es vorher mit der Einstellung short auch so war, ich es aber nicht realisiert habe.)

Mal schauen, wie ich das Script noch hinbekomme.

EDIT2:
Man bin ich ein Horst. Kann garnicht gehen, das Script liegt auf einem Misc-Item.
 
Zuletzt bearbeitet:
Nun, das mit button hätte durch die drei verschiedenen Variablen doch eigentlich umgangen sein müssen oder?

Das Problem ist, das GetButtonPressed nur beim ersten Aufruf in einem Scriptdurchlauf den korrekten Wert liefert, danach nur noch -1. Du hast es aber dreimal hintereinander aufgerufen. Aus deinem Script:

Code:
set button to GetButtonPressed <= gedrückter Button
.
.
.
set button1 to GetButtonPressed <= -1

Nein, klappt nicht so, wie es soll.
Wenn man etwas einzahlen will, werden dem Spieler automatisch 500 Goldmünzen abgezogen, ohne, dass man einen button drückt. Wenn man dann einen drückt, passiert nichts.

Mist! Ich hab ein return vergessen! Füg mal an dieser Stelle ein return hinzu:

Code:
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  <= einfügen
endif

Ich hoffe es funktioniert jetzt!

Gruß Peter
 
Ich habs auch mal versucht:
Code:
Scriptname KKIrrlichtBankScript

Float KKMode
Short Button

Long Betrag

Begin OnEquip
	If KKMode == 0
		MessageBox "Was wollt ihr machen?", "Einzahlen", "Abheben", "Kontostand einsehen"
		Set Button to GetButtonPressed
		Set KKMode to 1
	Endif
End

Begin GameMode
	If KKMode == 1
		If Button == -1
			Set Button to GetButtonPressed
		Elseif Button == 0
			Set KKMode to 10
		Elseif Button == 1
			Set KKMode to 20
		Elseif Button == 2
			Set KKMode to 30
		Endif
	Elseif KKMode == 10
		Messagebox "Wie viel wollt ihr einzahlen?", "500", "1.000", "5.000", "10.000", "50.000", "100.000"
		Set KKMode to 10.1
		If KKMode == 10.1
			Set Button to GetButtonPressed
				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
					Message "Ihr habt %.0f Gold eingezahlt.", Betrag
				else
					Message "Ihr verfügt nicht über genügend Gold."
				endif
				Set KKMode to 0
		Endif
	Elseif KKMode == 20
		Messagebox "Wie viel wollt ihr abheben?", "500", "1.000", "5.000", "10.000", "50.000", "100.000", "Alles"
		Set KKMode to 20.1
		If KKMode == 20.1
			Set Button to GetButtonPressed
			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 KKIrrlichtBankKontostandGlobal
			Endif
			if (KKIrrlichtBankSpielerKontoTruhe01REF.GetItemCount gold001 >= Betrag)
				KKIrrlichtBankSpielerKontoTruhe01REF.removeitem gold001 Betrag
				player.additem gold001 Betrag
				Message "Ihr habt %.0f Gold abgehoben", Betrag
			else
				Message "Ihr habt nicht genügend Geld auf dem Konto."
			endif
			Set KKMode to 0
		Endif
	Elseif KKMode == 30
		Message "Euer Kontostand beträgt %.0f Gold", KKIrrlichtBankKontostandGlobal
		Set KKMode to 0
	Endif
End

Ich kann dazu auch nur sagen, das du eventuell eine Quest für die Message machst und dann ein fQuestDelayTime einfügst (auf 0.1 setzen oder so) dann wird das Script öfters durchlaufen was bei Messageboxen mit Buttons immer empfehlenswerter ist.
 
Nope, beides nicht.

@pk62:
Das return wird nicht den Fehler beheben, dass dem Spieler automatisch 500 Gold abgezogen werden, wenn man auf "Einzahlung" klickt und dann in die nächste Messagebox kommt.

Ich denke, ich werde mir eine Variante ausdenken, in der das Misc-Item nur den Anstoß gibt und dann alles in einem Quest-Script abläuft.

Ein Problem ist jetzt nur:
Ich habe natürlich bereits ein Quest-Script, dass allgemeine Dinge steuert.
Dort drin ist schon eine Messagebox, eine andere wird noch dazukommen.
Mit diesem Teil hätte ich dann also bereits fünf Messageboxen in dem Script. Mal schauen, ob ich da mit fQuestDelayTime was bewirken kann.
Eine weitere Quest wollte ich eigentlich nicht erstellen.

EDIT:
Naja, ist eigentlich doch kein Problem, ich kann ja über Variablen steuern, ob ein anderer Teil überhaupt durchlaufen werden soll, sprich in dem Teil GetButtonPressed überhaupt zum Tragen kommt.
 
Zuletzt bearbeitet:
Hi Fans,

ich wollte mal Fragen, ob es möglich ist das man eine Druckplatte die eine geheime Wand öffnen soll, mit einen Script belegen kann, wo die Druckplatte erst funktioniert wenn ein bestimmtes Gewicht darauf liegt.

Mein Ziel ist es das ich eine Statue nehme und diese dann auf ein bestimmtes Gewicht einstelle und erst wenn die Statue mit dem bestimmten Gewicht auf die Druckplatte gestellt wird, öffnet sich diese geheime Wand.

Danke im voraus.
mfg Piet

Ich glaube, dass ist nicht möglich. Du könntest höchstens mit einer TriggerBox abfragen, ob der Spieler die Statue im Inventar hat.
 
  • Like
Reaktionen: Piet