Construction Set Der Scriptthread

Hallo,
ich hab ein Problem mit dem folgenden Script:
Scruffy soll die ganze Zeit still in der Ecke stehen, bis zum Journaleintrag "my_toilet_blocked" == 30.
Danach soll er durch den Raum gehen, einige Sekunden stehenbleiben (den Timer hab ich noch rausgelassen, will erstmal dass das andere funktioniert...), zurück zu seiner Ausgangsposition gehen und dann den Player ansprechen. Er soll dann wieder wie am Anfang in seiner Ecke stehen.

Der Fehler ist: er setzt sich gar nicht erst in Bewegung. Ich hab in einem Test-Plugin mal ein ähnliches Script geschrieben, und da hats einwandfrei funktioniert... Hoffe dass mir jemand helfen kann!


Code:
begin my_f_scruffy_script

short ControlVar
short nolore
short TravelState
short doOnce


if ( ControlVar == 0 )
	set nolore to 0			;deaktiviert allgemeine Dialogoptionen
	set ControlVar to 1		;fängt Schleife ab
	set TravelState to 0					
endif

if ( MenuMode == 1 )
	return
endif

if ( TravelState == 0 )
	AiWander 0, 0, 0, 75, 5, 0, 5, 5, 0, 0, 5, 5	;Scruffy steht in der Ecke, idle-Bewegungen
	set TravelState to 1
endif

if ( TravelState == 1 )
	if ( GetJournalIndex "my_toilet_blocked" == 30 )
		set TravelState to 5
	endif
;******************* Scruffy kriegt Eimer und Kelle und startet Richtung Klo
elseif ( TravelState == 5 )
	AITravel 1256, -3993, 449, 0,0,3  		;geht Richtung Klo
	set TravelState to 10

elseif ( TravelState == 10 )
	if ( GetAIPackageDone == 1 )			;hat Klo erreicht
		set TravelState to 40	
	endif

elseif ( TravelState == 40 )
	AITravel 1236, 4426, 448, 0,0,60		; geht zurück zum Ausgangspunkt in der Ecke
	set TravelState to 50
	
elseif ( TravelState == 50 )
	if ( GetAIPackageDone == 1 )			;hat die Ecke erreicht
		set TravelState to 7         
	endif

elseif ( TravelState == 70 )
	AiWander 0, 0, 0, 75, 5, 0, 5, 5, 0, 0, 5, 5	;nach dem Reperaturversuch
	set TravelState to -1
	set doOnce to 1
endif

if ( doOnce == 1 )
	if ( GetDistance Player <= 100 )
		if ( GetJournalIndex "my_toilet_blocked" == 30 )
			if ( getLOS Player == 1 )
				ForceGreeting
				set doOnce to -1
			endif
		endif
	endif
endif
end
 
hi leute^^

ich hätte auch mal wieder ein problem und zwar mit einem script das bewirken soll das wenn man ihn aktiviert eine messagebox erscheint, in der eine frage formuliert ist, und man 2 antworten zur wahl hat. wenn man die erste wählt sollen gewisse werte auf einen ebenso bestimmten wert gehoben werden wenn man den 2ten button drückt soll die messagebox geschlossen werden und der gegenstand soll danach wieder bei aktivierung die messagebox öffnen
Short controlvar
Short button



If ( OnActivate == 1 ) ; aktiviert den kelch
If ( controlvar == 0)

MessageBox "Wollt ihr aus dem Kelch trinken", "Ja", "Nein",
Set controlvar to 1
if ( controlvar == 1 )
set button to GetButtonPressed
if ( button == -1 )
return
elseif ( button == 0 )
MessageBox "Ihr Spürt das Blut des Gottes in euren Adern brennen"
Activate
set controlvar to 2
Endif

if ( controlvar == 2)
Player -> Setstrength, 100
endif
endif
endif
endif
end


bitte um hilfe^^
mfg Dante
 
Zuletzt bearbeitet:
Probiere das mal.

Begin god_blood_script

short questionState
short button
short p_strength

If ( OnActivate == 1)
Set questionState to 1
Return
EndIf

If ( questionState == 0 )
Return
EndIf

If ( questionState == 1 )
MessageBox "Wollt Ihr aus dem Kelch trinken?" "Ja" "Nein"
Set questionState to 2
Return
EndIf

If ( questionState == 2 )
Set button to GetButtonPressed
If ( button == 0 ) ; Frage wurde mit Ja beantwortet
Set p_strength to ( ( Player->GetStrength ) + 100 )
Player->SetStrength, p_strength
Messagebox "Ihr spürt das Blut des Gottes in euren Adern brennen"
Set questionState to 0
EndIf

If ( button == 1 )
Set questionState to 0
EndIf

EndIf

End god_blood_script
 
  • Like
Reaktionen: Dante117
Das könnte man mit einer "DoOnce"-Abfrage regeln, wobei das wahrscheinlich durch den "72 Std. Bug" umgangen werden kann.

Alternativ könnte man den Kelch danach disablen, wie den Bittercup beim Kriegergildenquest (Bittercup-Script). Zur Not könnte der Kelch mit Script, nach dem Trinken, ja gegen einen Kelch ohne Script ausgetauscht werden. ;)
 
Also da ich an einer Widerstandsgilde arbeite habe ich eine Frage wie kann ich etwas an einem bestimmten Ort erscheinen lassen wenn der Spieler einen bestimmten Tagebuch eintrag bekommen hat/jemand bestimmtes gestorben ist.
Tagebucheintrag Feuerbuch 800

Und Erscheinen soll das Item Blutsopfer.7,02


Sterben soll die Person Seperat.4

Erscheinen soll das Item Blutopfer.7,1


/////

Bitte auch sagen wie ich Dinge verschwinden lassen kann
__

Danke
 
Sachen Erscheinen und Verschwinden lassen kannst du einfach mit dem Enable/Disable-Befehl.

Um zum Beipiel bei einem bestimmten Tagebucheintrag ein ein Objekt erscheinen zu lassen, reicht folgendes Script

Code:
begin my_scriptname

short state

if ( state == 0 )
  Disable
  set state to 1
endif

if ( state == 1 )
  if ( GetJounalIndex "Tagebuchthema" == Indexwert )
    Enable
    set state to 2
  endif
endif

end
 
  • Like
Reaktionen: Tilon
Ich möchte 6 Glocken in einer bestimmten Reihenfolge vom Spieler läuten lassen. Ich weiß, dass es in Bloodmoon an einer Stelle genauso etwas gab, aber leider finde ich das Script dazu nicht. Auf den Glocken liegt immer nur ein Script, dass beim Aktivieren einen bestimmten Ton spielt, aber ich habe nirgendwo ein Script gefunden, das abfragt, ob es in einer bestimmten Reihenfolge gemacht wurde.
Das Script bei mir funktioniert leider nicht.

Man muss, bevor man die Melodie spielt, an einem "Traumschrein" einen Schalter betätigen, womit man die globale Variable zz1_glockevar von 0 auf 1 setzt. Das funktioniert auch. Allerdings funktioniert es bei dem Script, das auf meiner ersten zu läutenden Glocke liegt, nicht, die globale Variable zz1_melodievar von 0 auf 1 zu setzen. Eigentlich sollte bei jeder richtig aktivierten Glocke die Variable zz1_melodievar um eins erhöht werden.

begin zz1_bell4script
short status
if ( status == 0 )
set status to onactivate
elseif ( status == 1 )

if ( zz1_melodievar == 0 )
if ( zz1_glockevar == 0 );wenn die Glocke nur geläutet wird, um den Ton zu hören - bis hierher funktioniert es


playsound3D "bell4"
set status to 0


elseif ( zz1_glockevar == 1 ); wenn die Glocke geläutet wird, um den 1. Ton einer Melodie zu spielen, soll die Globale Variable zz1_melodievar von 0 auf 1 gesetzt werden, das funktioniert leider nicht


playsound3D "bell4"
set zz1_melodievar to 1
set status to 0
endif

elseif ( zz1_melodievar >= 1 ) ; wenn die Glocke zu einem anderen Zeitpunkt geläutet wird, als beim 1. Ton der Melodie, soll ein Feuerzauber den Spieler treffen. das funktioniert auch nicht.

playsound3D "bell4"
"zz1_dummycaster1"->cast "zz1_firespell" player
messagebox, "Das war der falsche Ton, du musst von vorne beginnen. Gehe wieder zum Traumschrein."
set zz1_melodievar to 0
set zz1_glockevar to 0
set status to 0
endif
endif
end
 
Zuletzt bearbeitet:
Eigentlich ist das gar nicht so schwer.

Du sagst das Script auf dem Schrein funktioniert und setzt die Variable korrekt auf 1? Gut, dann hier das Glockending, du brauchst sechs davon, X steht für die Glockennummer.

Code:
begin zz1_bellscript_X
IF ( menumode == 1 )
 return
EndIF

IF ( OnActivate == 0 )
 return
EndIF

playsound3D "Bell[X]" ;Nummer des Glockentons ergänzen.

IF ( zz1_glockevar == 0 ) ;Testhören
 return
EndIF

IF ( zz1_melodievar != [Reihenfolgenr.] ) ;Zahl einsetzen
 Cast "zz1_firespell" player
 MessageBox, "Das war der falsche Ton, du musst von vorne beginnen. Gehe wieder zum Traumschrein."
 Set zz1_melodievar to 0
 Set zz1_glockevar to 0
 return
EndIF

Set zz1_melodievar to ( zz1_melodievar + 1 )
;richtige Reihenfolge, nächste Glocke scharf schalten.
;bei der letzten kann ein anderer Befehl gesetzt werden.

end

Dieses universelle Script kann auf alle Glocken gepackt werden, natürlich jeweils modifiziert in Sachen "SoundID" und Glockennummer, die dann halt auf der ersten Glocke mit 0 beginnt. Der Traumschrein muß bei Aktivierung auch die Global zz1_melodievar immer auf 0 setzen, sonst gibt das Chaos... ^^

Viel Erfolg... :)
 
  • Like
Reaktionen: Silbermond
Ich brauche mal eure Hilfe bei meinem Script. Und zwar soll folgendes passieren: Der NPC bzw. die Kreatur soll tot sein. Wenn der Spieler dann auf ihn zu geht soll sie wiederauferstehen und kämpfen. Habe hier schon einmal ein Script. Das Problem daran ist, dass der Gegner zwar aufersteht, aber gleich wieder umfällt :(


short controlvar

If ( controlvar == 0 )
If ( GetDistance, Player < 256 )
SetHealth, 400
Resurrect
PlaySound, "_sky01"
set controlvar to 1
endif
endif
 
Könnte vielleicht daran liegen, dass du das "ressurect" vor das Sethealth setzen musst, damit der NPC nachdem er aufersteht die 400 HP hat, und nicht davor. ^^'

Pagan

PS. Also so ungefähr:

Code:
short controlvar

If ( controlvar == 0 )
If ( GetDistance, Player < 256 )
Resurrect
SetHealth, 400
PlaySound, "_sky01"
set controlvar to 1
endif
endif
 
  • Like
Reaktionen: 1 Person
Beim resurrect bekommt die Kreatur wieder die Grundwerte aus dem CS. Wurde dort bei Health der Wert 0 vorgegeben, wird wahrscheinlich nicht einmal ein Sethealth sie anschließend am Leben erhalten können.
Die alternative Möglichkeit wäre dann, das Health der Kreatur im CS auf einen passenden Wert zu setzen und sie per Distanzcheck zu töten.
 
Doch es geht so wie es da steht. Nur muss eben das resurrect als erstes vor dem set health stehen
 
Hallo ich(scriptnoob) bräuche ein Script für meinen EimerMod

es sollte so funktionieren das ich es auf ein Misc Item legen kann welches bei der aufnahme durch ein anderes ersetzt wird so dass das neue Item im Inventar erscheint und das alte aus dem Spiel entfernt wird :? ist das überhaupt möglich? :huh:

kann mir wer eins machen? ich werde ihn dann auch in den Credits vermerken :)
 
Code:
Begin eimer_script 

if ( OnActivate = 1 ) 
delete 
Player-> AddItem "ID des Gegenstandes" 1 
endif 

End

Müsste so eigentlich klappen. Wenn nicht, sag bescheid (vergesse manchmal die einfachsten Scriptregeln, daher kann das schon mal passieren). :-D

Pagan
 
  • Like
Reaktionen: Skuzzlebutt
Code:
Script Error

Script eimer_script
Script command "delete" not found on line 4.
delete


Script eimer_script
Miss matched if/else/endif starting on line 3.

hab ich was falsch gemacht :? :(