Construction Set Der Scriptthread

@Atrus: Also, so wie ich das sehe, gibts da keinen Umweg. Aber ich weiß es nicht genau. Wäre schon besser wenn da einer der SuperScripter hier aus dem Forum drüber nachdenken würde... :-D


Ich selbst hab aber auch noch ne Frage:

Code:
Begin Angriff_Kaiserliche_a 

short done 

if ( MenuMode = 1 ) 
return 
endif 

if ( GetDistance, Nord >= 1408 ) 
if ( done = 0 ) 
StartCombat, Nord_krieger 
set done to 1 
endif 
endif 

if ( Nord_krieger -> OnDeath = 1 ) 
set done to 0 
endif 

End

So, dieses Script soll bewirken, das die Imperiale Wache, die das Script trägt, jeden Nord der sich ihr auf 1408 Spieleinheiten nähert angreift und tötet. Allerdings weiß ich nicht ob das so klappt, da ich befürchte, das die Kaiserliche Wache nen austicker kriegt, und durchs ganze Land ziehen will und alle Nords töten will. (Was noch gesagt werden muss: Sowohl die Kaiserliche Wache und der Nordkrieger sind nicht Unique. Soll sowas wie ein allgemeines Wachen Script gehen ...)

Danke schonmal.

Pagan

MOin Pagan, (ne abend)
na egal, ich würde das Eher so machen das man Die Nords alle in Eine Fraktion steckt und dann bei der Fraktion der Wachen das Verhalten auf Angreifen stellt (Im Fraktionsmenü).

Das dein Script nicht funzt ist klar, siehe Folgendes:

Code:
Begin Angriff_Kaiserliche_a 

short done 




if ( MenuMode = 1 ) 
return 
endif 

if ( GetDistance, Nord <= 1408 )  ;Hier war das Zeichen Falsch Rum!!!
if ( done = 0 ) 
StartCombat, Nord_krieger 
set done to 1 
endif 
endif 

if ( Nord_krieger -> OnDeath = 1 ) 
set done to 0 
endif 

End

Die Wache hatte den Befehl dass sie alle Nords angreift wo weiter weg als 1408 Einheiten sind, also SEHR viele:roll:

PS: Wie man das mit der Fraktion macht weiß ich nicht :oops:

MSFG Teemperor
 
  • Like
Reaktionen: Pagan
ich hab auch ne frage, nähmlich ist es möglich einen NPC durch ein monster gezielt angreifen zu lassen und umgekehrt? wenn ja, kann man dieses event auslösen, wenn der player einen raum betritt, eine tür öffnet und einen activator aktiviert(also nicht alles auf einmal, seperat). und nochwas, gibt es eine begrenzung für NPCs und /oder creatures einschließlich des players in exterriors? also sagt mir das cs ab ca. 1000 npcs speicher überlastet?

ps.:nicht wundern, in meiner nächsten mod kommt ne riesengroße schlacht vor, und da braucht man viel teilnehmer.

pps.: eine frage die sich wahrscheinlich von seelbst beantwortet: kann man durch ein skript die zeit verlangsamen, also sowas wie bullet time wie zb. timeshift?

@atrus: vielleicht hilfts, wenn man das "if menumode ==1 ,return ,endif" weglässt(sry wegen der schreibweise)
 
Zuletzt bearbeitet:
@ Numidium: Ja es ist möglich, weise ihnen nur andere, individuelle ID´s zu und Lege ein Script auf sie z.B:
Code:
begin kampf

short Kampf

If (On activate == 1)
If (Kampf == 0)
    set Kampf to 1
    ID1->StartCombat "ID2"
endif
endif
; Dieses Script auf einen Activator legen zum Beispiel
end
.
Und von einem Einheiten-Limit hab ich noch nie etwas gehört, nur bei den Rechnern gibt es grenzen:lol:.
 
kämpfen die dann auch gegeneinander oder schlägt der eine dann den anderen, biss er tot ist?

Die NPC in Morrowind brauchen keinen Befehl um sich zu wehren das machen die Selber, aber du kannst ja gleiche Script auf dei Verteidiger auch legen nur mit vertauschten ID´s (ID1 mit Id2 tauschen) wenn sie schon mal den angreifern entgegenrennen sollen :roll:
 
Hallo,ich brauche mal dringend hilfe,und zwar:
Ich möchte das wenn der spieler in einem bestimmten bett schläft,und dann danach aufwacht,ihm 20000 Draken fehlen,nun soll man ein journal bekommen,nun soll sich im topic neueste gerüchte eine neue meldung sichtbar machen,dann soll ein Bestimmter npc aktiviert werden.
 
Der etwas andere Alchemy-Sorter

Also. Das Script sollte Alchemiezutaten ordnen, und zwar nach ihren Effekten, nicht nach Name.

Dazu hab ich zwei Objekte pro Effekt, das eine ist der Container (z.B. "ph_jar_weakntoice" für "Anfälligkeit für Eis"), das andre ist ein Activater, der wie ein Seelenstein aussieht. Den klickt man an. Daran ist dieses Script befestigt:

Begin "ph_act_weakntoice"

short var
short button

If ( OnActivate == 1 )
If ( var == 0 )
MessageBox "Der im Holz eingebettete Edelstein funkelt geheimnissvol. Als ihr genauer hinschaut, spürt ihr darin eine Art Intelligenz, deren einziges Denken auf den Drang gerichtet ist, euer Gepäck zu durchwühlen.", "Tiefer hineinblicken", "Zurücktreten"
set var to 1
endif
endif

If ( var == 1)
If ( GetButtonPressed == 0 )
MessageBox "Der Stein blitzt auf und ihr fühlt, wie ein fremdes Bewusstsein über euch hinwegwäscht. Ihr fühlt euch etwas schwach, als wäre euch etwas genommen worden..."
Player -> ModCurrentHealth -20
Player-> ModCurrentMagicka -30
Startscript "ph_sort_weakntoice"
set var to 0
elseif ( GetButtonpressed == 1 )
MessageBox "Der Stein gibt ein enttäuschtes funkeln von sich und erlischt dann wieder."
set var to 0
return
else
return
endif
endif

end
Beim klicken auf "tiefer hineinblicken" wird dieses Script gestartet, das das Sortieren erst vornimmt:

Begin ph_sort_weakntoice

short count

If ( player->getAlchemy >= 15 )

set count to ( player->getItemCount, "ingred_bear_fat_SA" )
while ( count > 0 )
set count to ( count -1 )
player->removeItem, "ingred_bear_fat_SA", 1
"ph_jar_weakntoice"->additem, "ingred_bear_fat_SA", 1
endwhile

set count to ( player->getItemCount, "ingred_fire_salts_01" )
while ( count > 0 )
set count to ( count -1 )
player->removeItem, "ingred_fire_salts_01", 1
"ph_jar_weakntoice"->additem, "ingred_fire_salts_01", 1
endwhile

set count to ( player->getItemCount, "ingred_red_lichen_01" )
while ( count > 0 )
set count to ( count -1 )
player->removeItem, "ingred_red_lichen_01", 1
"ph_jar_weakntoice"->additem, "ingred_red_lichen_01", 1
endwhile

endif

If ( player->getAlchemy >= 30 )

set count to ( player->getItemCount, "ingred_shalk_resin_01" )
while ( count > 0 )
set count to ( count -1 )
player->removeItem, "ingred_shalk_resin_01", 1
"ph_jar_weakntoice"->additem, "ingred_shalk_resin_01", 1
endwhile

endif

If ( player->getAlchemy >= 45 )

set count to ( player->getItemCount, "ingred_fire_EYE_01" )
while ( count > 0 )
set count to ( count -1 )
player->removeItem, "ingred_fire_EYE_01", 1
"ph_jar_weakntoice"->additem, "ingred_fire_EYE_01", 1
endwhile

set count to ( player->getItemCount, "KO_Cait_Egg" )
while ( count > 0 )
set count to ( count -1 )
player->removeItem, "KO_Cait_Egg", 1
"ph_jar_weakntoice"->additem, "KO_Cait_Egg", 1
endwhile

set count to ( player->getItemCount, "KO_Cait_Egg2" )
while ( count > 0 )
set count to (count -1)
player->removeItem, "KO_Cait_Egg2", 1
"ph_jar_weakntoice"->additem, "KO_Cait_Egg2", 1
endwhile

set count to ( player->getItemCount, "KO_Cait_Egg4" )
while ( count > 0 )
set count to ( count -1 )
player->removeItem, "KO_Cait_Egg4", 1
"ph_jar_weakntoice"->additem, "KO_Cait_Egg4", 1
endwhile

set count to ( player->getItemCount, "NOM_food_egg2" )
while ( count > 0 )
set count to ( count -1 )
player->removeItem, "NOM_food_egg2", 1
"ph_jar_weakntoice"->additem, "NOM_food_egg2", 1
endwhile

endif

end
Die Ingredienzien sind schlicht und einfach diejenigen, die ich mir für den Effekt "Anfälligkeit für Eis" herausgeschrieben habe. Ich benutze übrigens Sri's Alchemy und verschiedene andere Mods, es sind also nicht mehr die original Morrowind-Zutaten.
Zusätzlich werden nur jene Ingredienzien einsortiert, deren Effekt man aufgrund des Alchemieskills kennt.

Das Script funktioniert soweit, dass der Spieler Leben und Mana verliert, wenn er das Script aktiviert, ansonsten passiert aber gar nix. Was hab ich falsch gemacht?

Bitte um Hilfe!
 
Hallo, ich hab ein Script-Problem...
Ich gebe einem NPC einen Gegenstand, der schickt mich für 3 Tage weg, weil er arbeiten muss. Und nach diesen drei Tagen soll eine Meldung am Bildschirm sowie ein Journaleintrag erscheinen. Ich habs mit

if (GetJournalIndex "my_f_würfel" == 30)
set daytimer to daytimer + 1

if (daytimer >=3)
Journal "my_f_würfel" 40
MessageBox "Seit meinem Gespräch mit Prof. Farnsworth sind drei Tage vergangen, vielleicht sollte ich mal vorbeischauen und sehen wie er vorankommt."
endif
endif

versucht, und auch mit

if (GetJournalIndex "my_f_würfel" == 30)
set daytimer to daytimer + DaysPassed

if (daytimer >=3)
Journal "my_f_würfel" 40
MessageBox "Seit meinem Gespräch mit Prof. Farnsworth sind drei Tage vergangen, vielleicht sollte ich mal vorbeischauen und sehen wie er vorankommt."
endif
endif

Die Message erscheint aber sofort, nachdem ich den Dialog beendet hab... Wo ist der Fehler? Wahrscheinlich irgendwas total banales, aber das ist mein erstes ernsthaftes Script... Danke!
 
UBP: versuch mal

set daytimer to ( daytimer + 1 )

bzw

set daytimer to ( daytimer + getDaysPassed )

Bitte achte auf Klammern und Leerzeichen.
 
CeNedra: player->getAlchemy mußt Du zusätzlich in Klammern packen.

UBP: Wie sieht der Rest vom Skript aus?

-- Das was für heute von mir, mein Rücken braucht wieder Pause :(
 
Hi, ich habe ein Scriptproblem. ;)

Was hab ich am Script falsch gemacht?
Begin DW_jinchuuriki_script


Short status


If ( player-> Currenthealth =< 30 )

messagebox "Eine seltsame Kraft erwacht in euch."

player-> addspell "DW_jinchuuriki_kraft"

ModCurrenthealth, 60

set timer to (timer + getsecondspassed )

if timer > 60

player-> removespell "DW_jinchuuriki_kraft"

set timer to 0

set status to 1

endif

endif

end

Den ganzen Script, oder? :lol:

Der Script soll bewirken, dass, wenn der Spieler weniger als 30 Lebenspunkte hat, eine Messagebox erscheint, seine Lebenspunkte auf 60 gestellt werden und er die Fähigkeit "DW_jinchuuriki_kraft" für 60 Secunden erhällt.

Danke im Vorraus. ;)
 
Hi, ich habe ein Scriptproblem. ;)

Was hab ich am Script falsch gemacht?
Begin DW_jinchuuriki_script


Short status


If ( player-> Currenthealth =< 30 )

messagebox "Eine seltsame Kraft erwacht in euch."

player-> addspell "DW_jinchuuriki_kraft"

ModCurrenthealth, 60

set timer to (timer + getsecondspassed )

if timer > 60

player-> removespell "DW_jinchuuriki_kraft"

set timer to 0

set status to 1

endif

endif

end

Du hast einmal vergessen die status Variable in die if-Bedingung zu setzen, du hast das Komma nach MessageBox vergessen, und einmal die Klammern bei einer if-Bedingung. , dadurch das du die Variable in die Bedingung setzt, funktioniert das Script aber nur einmal, da du die variable am Ende endgütlig auf 1 setzt. Wenn du willst, das das immer wieder funktioniert, mach einfach noch ein

Code:
if ( Cellchanged == 1 ) 
set status to o 
endif

ans Ende. Das bewirkt, das wenn der Spieler die Zelle verlässt, und dann wieder reingeht, er wieder geheilt werden kann. Du kannst aber auch einfach noch etwas mit dem Timer ändern, sodass es so gut wie immer klappt.

Müsste also so aussehen:

Code:
Begin DW_jinchuuriki_script


Short status
short help

if ( menumode = 1 )  ;verhindert, dass das Script ausgeführt wird, wenn der Spieler irgendwelche Menüs offen hat
return 
endif 

If ( player-> Currenthealth =< 30 ) 
if ( status = 0 )
if ( help = 0 ) 
        set help to 1
	messagebox, "Eine seltsame Kraft erwacht in euch."
      player-> addspell "DW_jinchuuriki_kraft"
	ModCurrenthealth, 60

	set timer to (timer + getsecondspassed )

	if ( timer  >= 60 )
        if ( help = 1 ) 
	player-> removespell "DW_jinchuuriki_kraft"
	set status to 1

        if ( timer >= 63 )  ;das hier müsste dein Script so gut wie immer nutzbar machen 
        if ( help = 1 )     
        set help to 0
        set timer to 0         
        set status to 0
	endif

endif

end


Pagan
 
  • Like
Reaktionen: Drachenwächter
Vielen Dank!
Scripten kann ich nicht so gut (besser gesagt: so gut wie garnicht :-D ), morgen setzt ich mich wohl lieber wieder ans Tutorial.^^

Edit: Das ModCurrentHealth, 60 mach ich lieber raus, sonst ist der Charakter ja unsterblich. :shock:
Es gibt doch keine Probleme wenn ich die Zeile einfach entferne, oder?

Edit2: Wenn ich das ModCurrentHealth, 60 drinlasse kommt die Meldung: "Script DW_jinchuuriki_script
Miss matched if/else/endif starting on line 11."
Was besdeutet das? Hab ich schonwieder was falschgemacht?^^
 
Zuletzt bearbeitet:
Nein, die Nachricht würde auch kommen, wenn du es rausnimmst, da ich ein endif am Ende vergessen habe. :-D Also, unter das vorletzte endif einfach noch eins setzen.


Pagan


(ich hoffe es klappt jetzt)

EDIT: Achne, eigentlich habe ich 5 endifs vergessen. Also unter das vorletzte, oder auch letzte, einfach noch 5 endifs untereinander hinzufügen. ^^'
 
  • Like
Reaktionen: Drachenwächter
Danke ihr beiden, aber ich muss schon wieder nerven. :-D
Der Script funktioniert nicht richtig (oder ich mache wieder was falsch ^^ ). Egal wieviele Lebenspunkte ich noch habe, der Script aktiviert sich nicht.
Hoffentlich könnt ihr mir nochmal helfen. ;)

Drachenwächter
 
CeNedra: player->getAlchemy mußt Du zusätzlich in Klammern packen.

UBP: Wie sieht der Rest vom Skript aus?

-- Das was für heute von mir, mein Rücken braucht wieder Pause :(



begin my_f_farnsworth_script

short ControlVar
short nolore
short daytimer

if (ControlVar == 0)
set nolore to 0
set ControlVar to 1
endif

if (MenuMode == 1)
return
endif

if (GetJournalIndex "my_f_würfel" == 30)
set daytimer to ( daytimer + DaysPassed )

if (daytimer >=3)
Journal "my_f_würfel" 40
MessageBox "Seit meinem Gespräch mit Prof. Farnsworth sind drei Tage vergangen, vielleicht sollte ich mal vorbeischauen und sehen wie er vorankommt."
my_f_farnsworth -> AddItem "my_magic_bottle" 1
endif
endif
end

das ist das ganze skript, und ich will auch noch einiges dazu machen. aber erstmal sollte es nur so laufen. danke!
 
DW, versuchs mal hiermit:

Code:
begin DW_jinchuuriki_script

short hilfe	; benutze keine Namen, die eine Funktion sein KÖNNTEN

float timer	; timer ist immer ein float

if ( menuMode == 1 )	; == immer doppelt
	return
endif 

if ( player->getHealth <= 30 )	; < und > immer links
	if ( hilfe == 0 ) 
		messagebox, "Eine seltsame Kraft erwacht in Euch."
		player->addSpell, "DW_jinchuuriki_kraft"
		player->modCurrenthealth, 60 ; könnte höher sein
		set hilfe to 1
	endif
endif

if ( hilfe == 1 ) 
	set timer to ( timer + getSecondsPassed )	; Leerzeichen um die Klammern etc
endif

if ( timer > 60 )
	if ( hilfe == 1 ) 
		player->removeSpell, "DW_jinchuuriki_kraft"
		set hilfe to 0
		set timer to 0         
	endif
endif

end
 
UBP:

Code:
begin UBP_f_farnsworth_script

short kontrolle
short noLore
short currentDay
short anzahlTage

if ( kontrolle == 0 )	; Leerzeichen
	set noLore to 0
	set kontrolle to 1
endif

if ( MenuMode == 1 )
	return
endif

if ( getJournalIndex "UBP_f_würfel" != 30 ) ; Zähler abfangen
	return
endif

if ( getJournalIndex "UBP_f_würfel" == 30 )	; Leerzeichen
	if ( anzahlTage == 0 )
		set currentDay to day	; day ist der Kalendertag im Spiel, der Name ist fest
		set anzahlTage to 1
	endif
	if ( currentDay != day )	; ein Tag ist vergangen
		set currentDay to day
		set anzahlTage to ( anzahlTage + 1 )
	endif
	if ( anzahlTage > 3 )	; Drei Tage später
		journal, "UBP_f_würfel", 40
		messageBox, "Seit meinem Gespräch mit Prof. Farnsworth sind drei Tage vergangen, vielleicht sollte ich mal vorbeischauen und nachsehen, wie er vorankommt."
		"UBP_f_farnsworth"->addItem, "UBP_magic_bottle", 1	; UBP_f_farnsworth sollte auf Corpses Persist eingestellt sein
	endif
endif

end

Anmerkung: Du solltest allen Objekten / NPCs usw ein eindeutiges Kürzel voranstellen, damit Du Deine Sachen leichter wiederfindest.:)
 
  • Like
Reaktionen: UglyBassPlayer