Construction Set Der Scriptthread

Wenn du einmal in folgendem Thread (mich klicken) nachguckst findest du einige Tutorials. Nicht alle behandeln das Thema Scripten, aber es sind welche dabei.
 
Ja, aber dafür brauchst du ein extra Programm da man dafür die Textur ändern müsste. Das kannst du aber über z.B. Blender regeln. Es kann auch sein das das noch mit anderen Programmen geht, aber etwas anderes würde mir jetzt nicht einfallen. Tutorials für Blender gibt es zwar auch, aber die meisten sind in Englisch. Ansonsten musst du einfach warten bis der Blender-Workshop von Daywalker an der Stelle angekommen ist, oder du wendest dich direkt an The Daywalker. ;)
 
Zum Ändern der Textur ist Nifskope um Längen besser, da schneller und für Anfänger leichter zu bedienen. Außerdem sieht man das Resultat gleich :)
mfg erc
 
  • Like
Reaktionen: 1 Person
Moinmoin :)

Npc x soll die Funktion "teilen" haben, ist das per script gemacht? finde dazu keine funktion :?

Wenn dieser NPC dann teilen kann, sollte er seine eigene Kleidung immer tragen, und keine neue die ihm per teilen ins inventar gelegt wird anziehen. Ausserdem sollte die Kleidung gar nicht im teilen-menü drinstehen...
ist sowas möglich? wie?
 
Ich greif mal ein Problem, das schon ein paar Monaten alt ist nochmal auf:

der folgende script liefert jedes mal beim testen den expression- und den right eval-fehler. ich hab echt 0 ahnung, was daran falsch sein soll. da ist echt kein leerzeichen zu viel/wenig, bla keks. ich arbeite ja schon länger mit scripts, aber mit diesem einfachen script werd ich einfach nicht fertig:?
zur wirkung des scripts: der script ist einem ring zugeordnet, der dich beim anstecken zu ort x teleportiert, wobei bei der ersten benutzung ein tagebucheintrag kommt.

begin almsiviScript

short state

if ( state == 0 )
if ( OnPCEquip == 1 )
set state to 1
if ( getjournalindex "P_4:mondschein" < 36 )
player->PositionCell, 4777, 4587, 4, 0, "Atmora, Geistermeer"
journal "P_4:mondschein" 36
set state to 0
elseif ( getjournalindex "P_4:mondschein" >= 36 )
player->PositionCell, 4777, 4587, 4, 0, "Atmora, Geistermeer"
set state to 0
endif
endif
endif

end
 
doch, er erkennt den doppelpunkt, weil ich diese quest-ID ganz oft in scripts benutze. und die anderen scripts mit ihnen funktionieren einwandfrei.

was genau meinst du mit den journals? was soll damit sein?
 
Code:
Begin begin almsiviScript

short reset
short OnPcEquip

if ( OnPCEquip == 0 )
	set reset to 0
endif

if ( reset == 1 )
	return
endif

if ( OnPCEquip == 1 )
	if ( reset == 0 )
		Set OnPCEquip to 0
		if ( GetJournalIndex "P_4:mondschein" < 36 )
			journal "P_4:mondschein" 36
		endif
		player->PositionCell, 4777, 4587, 4, 0, "Atmora, Geistermeer"
		set reset to 1
	endif
endif

End

Ich hatte wegen dem ":" bedenken, dass GetJournalIndex kein geeignetes Argument hat, aber das war wohl ein Irrtum.
Der eigentliche Fehler war OnPCEqip nicht zu deklarieren, dennoch würde ich raten das ganze so aufzubauen wie das oben, denn die var. state is bei dir z.b. immer 0 ( hab ich aus amuletAundaeScript zusammengeschnitten.)
 
hey, wow! danke! bisher wollten mir schon viele helfen und keiner hats geschafft! thx! ich habs schon getestet und es funktioniert einwandfrei.

aber was genau ist an deinem script anders? meiner war ja durch mein local "state" abgesichert, dass er nicht gelooped wird. ich hab zwar "onpcequip" nicht als local auf 0 gesetzt, aber wenn mindestens eine voraussetzungen (in meinem fall state) ungültig ist wirds doch schon nicht gelooped.

oder war es ein ganz anderer fehler?
 
also ich würde sagen wenn du im Original einfach OnPCEquip deklarierst, looped es, weil state am Ende des innersten if-Blocks immer 0 ist, genauso wie davor.

if (state == 0)
set state to 1
if (...)
set state to 0
else
set state to 0
endif
-> state ist 0
endif
 
ich hab schon wieder ein script-problem:

im grunde gehts darum, dass man sich zum cell "Atmora, Geistermeer" teleportiert und sein Gefährte nach einiger Zeit nachkommt. ebenfalls per teleportation. sobald man im gegebenen cell ankommt, soll man keine aktionen ausführen können (außer natürlich sich umzusehen) und im laufe der wartezeit sollen ein paar messageboxes mit text angezeigt werden. nach 19s taucht der gefährte auf, man kriegt einen neuen tagebucheintrag und eine tür, die zuvor unzugänglich war, wird freigegeben. nach 2s spricht dich der gefährte an.

es kommt keine fehlermeldung, aber der script wird trotzdem nicht ausgeführt. ich hab den script mehrmals nach rechtschreibfehlern und logiklücken durchsucht und nichts gefunden.

begin GalsArethiScript2

float timer
short state

if ( GetPCCell "Atmora, Geistermeer" )
if ( state == 0 )
if ( GetJournalIndex "P_4:mondschein" >= 37 )
if ( GetJournalIndex "P_4:mondschein" < 38 )
set state to 1
DisablePlayerControls
Set timer to ( timer + GetSecondsPassed )
if ( timer == 1 )
MessageBox "Ihr sollt hier auf Gals Arethi warten."
if ( timer == 4 )
MessageBox "Hmm..."
if ( timer == 9 )
MessageBox "Wo bleibt der Kerl?"
if ( timer == 14 )
MessageBox "Ich sehe schon. Das kann noch dauern."
if ( timer == 19 )
MessageBox "Ah! Geht doch."
"pirate_mondschein_entry1"->enable
"pirate_mondschein_entry2"->disable
journal "P_4:mondschein" 38
PositionCell, 4777, 4587, 4, 0, "Atmora, Geistermeer"
if ( timer == 21 )
forcegreeting
set timer to 0
endif
endif
endif
endif
endif
endif
endif
endif
endif
endif

end

(die steuerung wird während des nachfolgenden dialoges freigegeben)

thx 4 answers (falls sich jemand die mühe macht, dass alles durchzulesen xD
 
die journal bedingung würde ich durch ein einfache == 37 ersetzen, ist aber geschmackssache.
der timer zählt nie hoch weil er das nur darf wenn state == 0 ist, wird aber "innen" auf 1 gesetzt.
 
nee, quatsch. die bedingung "state == 0" ist ja schon vorher bestätigt worden. wenn state später auf 1 gesetzt wird, hat das keinen einfluss mehr drauf, weil die "kontrolle" eben schon abgeschlossen ist.

ja, das mit den journals^^ dieser script ist schon ein bisschen alt, weil ich dieses pi vor nem halben jahr abgebrochen hab und erst jetzt wieder aufgenommen hab. da hab ich...

if ( getjournalindex "P_4:mondschein" = 37 )

...ins script geschrieben und nicht gewusst, dass da 2 gleichheitszeichen hin müssen xD

äh...heißt es eig. der oder das script? :huh:
 
Probier mal das hier:

Code:
begin GalsArethiScript2

float timer
short state

if ( GetPCCell "Atmora, Geistermeer" )
	if ( state == 0 )
		if ( GetJournalIndex "P_4:mondschein" == 37 )
			set state to 1
		endif
	endif
endif

if ( state == 1 )
	DisablePlayerControls
	Set timer to ( timer + GetSecondsPassed )
	if ( timer >= 1 )
		MessageBox "Ihr sollt hier auf Gals Arethi warten."
		set state to 2
	endif
endif
if ( state == 2 )
	Set timer to ( timer + GetSecondsPassed )
	if ( timer >= 4 )
		MessageBox "Hmm..."
		set state to 3
	endif
endif
if ( state == 3 )
	Set timer to ( timer + GetSecondsPassed )
	if ( timer >= 9 )
		MessageBox "Wo bleibt der Kerl?"
		set state to 4
	endif
endif
if ( state == 4 )
	Set timer to ( timer + GetSecondsPassed )
	if ( timer >= 14 )
		MessageBox "Ich sehe schon. Das kann noch dauern."
		set state to 5
	endif
endif
if ( state == 5 )
	Set timer to ( timer + GetSecondsPassed )
	if ( timer >= 19 )
		MessageBox "Ah! Geht doch."
		"pirate_mondschein_entry1"->enable
		"pirate_mondschein_entry2"->disable
		journal "P_4:mondschein" 38
		PositionCell, 4777, 4587, 4, 0, "Atmora, Geistermeer"
		set state to 6
	endif
endif
if ( state == 6 )
	Set timer to ( timer + GetSecondsPassed )
	if ( timer >= 21 )
		forcegreeting
		set state to 7
	endif
endif

end
 
nee, es tut sich leider immer noch nichts. gar nichts, nicht mal der befehl, dass man ncihts machen kann. ich hab echt keine ahnung. sowohl dein script wie auch mein script sehen eig. vollkommen logisch aus...
 
ok bei mir funktioniert es, aber vielleicht ist ja das hier das Problem:
Der NPC der dieses Script hat steht garnicht in "Atmora, Geistermeer", wenn dieser noch da steht wo der spieler herkommt, wird das Script auf ihm nämlich nicht ausgeführt.
 
Morrowind führ nur Scripts aus, die auf Objekten liegen, die sich in der momentanen Zelle befinden und globale Scripts. Das Gals-Script gehört offensichtlich zu Gals, sonst ist ein Befehl wie ForceGreeting nutzlos. Also rate ich dir "PositionCell, 4777, 4587, 4, 0, "Atmora, Geistermeer" rauszunehmen und dafür GalsArethi->"PositionCell, 4777, 4587, 4, 0, "Atmora, Geistermeer" in das Script einzufügen das den Spieler teleportiert. Und ihn anschließen mit
"GalsArethi->disable" unsichtbar zu machen.

ersetz einfach mal

Code:
if ( GetPCCell "Atmora, Geistermeer" )
	if ( state == 0 )
		if ( GetJournalIndex "P_4:mondschein" == 37 )
			set state to 1
		endif
	endif
endif

durch

if ( GetPCCell "Seyda Neen" )
if ( state == 0 )
set state to 1
endif
endif

und gib es Fargoth und dann gehn nach Seyda Neen