Construction Set Der Scriptthread

Beim Posten wirst du dich statt eines Tabulators eines doppelten Leerzeichens (etc.) bedienen müssen, da die Tabtaste fürs Feldspringen reserviert ist.
 
Ich melde mich hier auch mal mit einem Problem ;)

Also ich möchte gerne über Sounds einige Dinge detektieren. Mein Problem ist, dass es nicht bei allem zu funktionieren scheint.

Mit der Abfrage Player->GetSoundPlaying "Sound-ID" sollte ich eigentlich diverse Tätigkeiten des Spielers abfangen können. Zum Beispiel beim Zaubern (zB. illusion cast für einen Illusionszauber) klappt es auch. Allerdings funktioniert es nicht mit den Sound für
- Repair / repair fail
- den Angriffssounds
- den Sounds beim Blocken

Meinen Tests nach liefern meine Scripte einen Output, wenn ich den Sound per Konsole vom Spieler abspielen lasse, aber nur wenn die Sounds mit PlaySound3D gestartet werden. Allerdings funktioniert der GetSoundPlaying-Befehl auch für nicht 3D abgespielte Sounds (man siehe das lava-Script). Meine Frage ist also:

Kann man aus irgendeinem Grund beim Spieler tatsächlich nur 3D-Sounds detektieren oder werden die entsprechenden Sounds nicht vom Spieler erzeugt sondern vom entsprechenden Gegenstand (Schmiedehammer bei repair oder Schild beim Blocken)?

Beides erscheint mir nicht wirklich logisch, weil zum Beispiel das Klirren der Rüstung, wenn man selbst getroffen wird (also nicht das, wenn man blockt) wird vom Spieler abgegeben und nciht vom getroffenen Rüstungsteil.
 
Abhilfe schaffen kann ich für das Soundproblem nicht, aber wenn man nach drink und swallow abfragt gibt es sogar gleich nen Scripterror :(
 
Hi!
Ich habe ein Script für meinen Mod geschrieben. Es geht darum einen Markt zu machen, bei dem man Rohstoffe für ihren genauen Wert verkaufen kann. Als beispiel gebe ich einfach mal Ebenerz an.
Code:
begin Ebony_Sale

short MessageOn
short MessageOn2
short sale
short button
short button2
short PCEbony
short SalePrice

set PCEbony to Player->GetItemCount "ingred_raw_ebony_01"

if ( MenuMode == 1 )
	return
endif

if ( OnActivate == 1 )
	if ( PCEbony != 0 )
		set MessageOn to 1
	else
		MessageBox "Ihr habt kein Ebenerz!"
		return
	endif
endif

if ( MessageOn == 1 )
	MessageBox "Wie viel Ebenerz wollt ihr verkaufen?Ihr habt %.0f Brocken Ebenerz", PCEbony ,"1","Alles","Nichts"
	set button to GetButtonPressed
	if ( button == 0 )
		set MessageOn2 to 1
		set sale to 1
		set MessageOn to 0
	elseif ( button == 1 )
		set MessageOn to 0
		set sale to PCEbony
		set MessageOn2 to 1
	elseif ( button == 2 )
		set MessageOn to 0
		return
	endif
endif

if ( MessageOn2 == 1 )
	set SalePrice to ( Sale * 200 );Ebenerz-Wert
	MessageBox "Ich gebe euch %.0f Draken. OK?",SalePrice,"Ja","Nein"
	set button2 to GetButtonPressed
	if ( button2 == 0 )
		Player->RemoveItem "ingred_raw_ebony_01" sale
		Player->AddItem "gold_001" SalePrice
		set MessageOn2 to 0
	elseif ( button2 == 1 )
		set MessageOn2 to 0
	endif
endif

End
Das Problem ist nur, dass sich das Menü nach der Aktivierung des NPCs nicht öffnet. Bitte um Hilfe!
 
Zuletzt bearbeitet:
Hallo,

kann mir einer helfen, wie man eine Geisterwallwand ausschalten?
Ich möchte die Wand einfach per Schalter ausschalten und wieder anschalten können.

Schonmal Danke und Grüße

Edit: Danke ercvomnil, hat super geklappt. Ich musste nur ein endif einfügen und es funktionierte, danke nochmal.

Ashgarat
 
Zuletzt bearbeitet:
Ich hab das schon ewig nicht mehr gemacht - versuchs doch mal so:
Code:
begin Script

short disabled

if ( OnActivate == 1 )
	if ( disabled == 0 )
           MeineWandID->disable
           set disabled to 1
        else
           MeineWandID->enable
           set disabled to 0
endif
end
Auf den Button - aber keine Erfolgsgarantie ;)
mfg erc
 
  • Like
Reaktionen: GottVivec
Ok, mitvorher disabled (danke an Killfetzer):
Das kommt auf das Tor:
Code:
Begin GateDisable

short state

if  ( state == 0 )
MeineTorID->disable
set state to 1
endif
end
Auf den Schalter
Code:
begin Script

short disabled

if ( OnActivate == 1 )
	if ( disabled == 0 )
           MeineWandID->enable
           set disabled to 1
        else
           MeineWandID->disable
           set disabled to 0
endif
end
mfg erc
 
  • Like
Reaktionen: GottVivec
Ich habe noch eine 2 kurze Fragen, kein Script, aber es passt am Besten hier rein.
1. Kann ich per Scriptbefehl den Schaden (Geschwindigkeit, Reichweite, etc.) einer Waffe verändern?
2. Kann ich in einer Messagebox einen Schieberegler wie bei "wie viele möchtet ihr verkaufen" und so machen und den Wert als Variable ausgeben?
 
Sinnloser Schriftzug
 
Zuletzt bearbeitet von einem Moderator:
1. Kann ich per Scriptbefehl den Schaden (Geschwindigkeit, Reichweite, etc.) einer Waffe verändern?
Wie von Killfetzer schon gesagt, nein. Aber, es würde davon abhängen, wie komplex du es haben willst, theoretisch könntest du unterschiedliche CS-Einträge für ein und dieselbe Waffe erstellen, diese mit gestaffelten Werten versehen und dann das Item im Inventar per Script austauschen, wenn die Werte geändert werden sollen. Ein Workaround, der ein wenig dirty ist, zugegeben... und je mehr man an der Waffe flexibel verändern will, desto unpraktikabler würde es. Gestaffelt geht es noch einigermaßen, wenn man mehrere Werte auf einmal verändert...

Sinnvoll könnte ich mir eine Art "Weihe" oder "Aufladung" für Waffen vorstellen, wo man als Spieler ein bestimmtes Artefakt zum Beispiel an einem Altar oder so präsentiert, und zu einer Gottheit betet. Dann kommt halt als Antwort entweder eine bessere Waffe, wenn das Gebet erhört wurde... oder die gleiche... oder 'ne miesere, wenn der Gott ungehalten ist. Man weiss ja, Götter können ziemlich launisch sein :D

Sowas ließe sich umsetzen.

Kann man aus irgendeinem Grund beim Spieler tatsächlich nur 3D-Sounds detektieren oder werden die entsprechenden Sounds nicht vom Spieler erzeugt sondern vom entsprechenden Gegenstand (Schmiedehammer bei repair oder Schild beim Blocken)?
Bei den LavaLayers geht es, weil der Scriptbefehl selfreferenzierend ist... heißt, wenn du im Script "GetSoundPlaying" nutzt, dann bedeutet das, im Grunde wird abgefragt, ob der aktive Scriptholder den Sound abspielt.

ActivatorID->GetSoundPlaying

Darum geht das beim Lava Layer... mit den anderen Sounds sieht es so aus, dass nicht der Spieler sie erzeugt. Darum klappt es nicht. Ich weiss nicht, wo du die Abfrage machst. Versuche einfach mal, den Befehl in einem Background Script auszuführen, ohne Referenz auf eine Activator ID... vielleicht geht das. Sicher bin ich nicht. Es könnte genauso gut sein, dass MW dann crasht oder einfach nur 0 zurück gibt.
 
Zuletzt bearbeitet:
Moin Leute,
gibt es eine Möglichkeit, um festzustellen, ob der Spieler beim Töten eines NPCs gesehen worden ist bzw. dadurch ein Kopfgeld bekommen hat?
 
Moin Leute,
gibt es eine Möglichkeit, um festzustellen, ob der Spieler beim Töten eines NPCs gesehen worden ist bzw. dadurch ein Kopfgeld bekommen hat?
Du kannst einfach per "if (player->CrimeLevel > 0)" abfragen. Wenn der PC einen NPC ermordet hat, und dabei nicht erwischt wurde, steigt auch sein Kopfgeld nicht.
 
  • Like
Reaktionen: Darkshade
Bei den LavaLayers geht es, weil der Scriptbefehl selfreferenzierend ist... heißt, wenn du im Script "GetSoundPlaying" nutzt, dann bedeutet das, im Grunde wird abgefragt, ob der aktive Scriptholder den Sound abspielt.

ActivatorID->GetSoundPlaying

Darum geht das beim Lava Layer... mit den anderen Sounds sieht es so aus, dass nicht der Spieler sie erzeugt. Darum klappt es nicht. Ich weiss nicht, wo du die Abfrage machst. Versuche einfach mal, den Befehl in einem Background Script auszuführen, ohne Referenz auf eine Activator ID... vielleicht geht das. Sicher bin ich nicht. Es könnte genauso gut sein, dass MW dann crasht oder einfach nur 0 zurück gibt.

Selfreferenz war mir schon klar ;) Ich hab das ganze aber sowohl mit Player als auch ohne probiert. Also der Angriff funktioniert nun, da war es nur ein Tippfehler, aber die anderen Sachen kann ich nach wie vor nicht detektieren. Für Blocken habe ich einen Workaround, ist also nicht so schlimm. Aber gerade Reparatur würde ich sehr gerne feststellen können.
 
Spezifisch oder allgemein?

willst du generell wissen, ob der Spieler auf irgendeinem Gegenstand mit einem x-beliebigen Reparaturtool eine Reparatur versucht - oder geht es Dir um einen bestimmten Gegenstand oder ein betimmtes Repairtool?

Ansonsten - ich kenne dein Script nicht - könnte es noch selbst an so simplen Sachen wie einer "IF (menumode ) -> return"-Condition scheitern, da Repair ja immer im Menumode ausgeführt wird und die Detectierung gar nicht angestossen würde.
 
Also ich habe schon eine MenuMode-Bedinung, aber mit MenuMode == 1 ;)

Ich möchte mit meinem Script feststellen, ob sich der Spieler im Reparaturmodus befindet, unabhängig davon mit welchem Hammer oder welchen Gegenständen im Inventar dieser aufgerufen wird. Die einzige Möglichkeit, die mir dazu eingefallen ist, ist das Abfragen der Geräusche Repair und repair fail, die abgespielt werden, wenn man was im Reparaturmodus repariert.

Aber vielleicht fällt dir ja noch was anderes ein. Ich möchte Schmiedehämmer unzerstörbar machen. Da das natürlich nicht geht, möchte ich abfangen, wenn ein Hammer kaputt geht (Veränderung von ItemCount) und ihn dann durch einen neuen ersetzten.