Construction Set Der Scriptthread

Irgendwo liegt der Wurm ich finde ihn nicht. Der Felsen will einfach nicht verschwinden:
Code:
Begin ZZ_Diamant_Script_01

Short Zufall
Short Zeit
Short Var
Short LocalDaysPassed

If ( MenuMode == 1 )
return
endIf

If ( OnActivate == 1 )
If ( player -> GetItemCount "miner's pick" >= 1 )
set Zufall to Random 4

Else
MessageBox " Du brauchst eine Spitzhacke."
EndIf
EndIf

If ( Zufall == 1 )
MessageBox " Du hast ein Stück Diamant aus dem Felsen bekommen"
player -> AddItem "ingred_diamond_01" 1
set Zeit to 1
set Zufall to 0
set Var to 1


ElseIf ( Zufall == 2 )
MessageBox " Du hast Zwei Stücke Diamanten aus dem Felsen bekommen"
player -> AddItem "ingred_diamond_01" 2
set Zeit to 1
set Zufall to 0
set Var to 1


ElseIf ( Zufall == 3 )
MessageBox " Du hast den Diamantenfelsen zerstört"
set Zeit to 1
set Zufall to 0
set Var to 1


EndIf

If ( Zeit == 1 )
If ( LocalDaysPassed != Day )
set LocalDaysPassed to Day 
set LocalDaysPassed to LocalDaysPassed + 1
; da is mir noch was aufgefallen 
EndIf
EndIf

If ( Var == 1 )
If ( LocalDaysPassed < 1 )
Disable

ElseIf ( LocalDaysPassed >= 1 )
Enable
set LocalDaysPassed to 0
set Zeit to 0
set Var to 0
return
EndIf
EndIf

End

Das Script soll Bewirken das der player auf einen felsen klick wenn er keine Spitzhacke hat kommt folgendes: Du brauchst eine Spitzhacke.
Wenn er eine hat soll es per zufall geschehen das er die Diamanten bekommt entweder einen oder zwei oder keinen in jeden Fall soll der felsen verschwinden und nach einem tag wieder kommen.
Das mit dem einen tag ist nur damit ich nicht so lange warten muss wenn ich es Teste.
Da bei Random 4 ich habe extra 4 gemacht weil bei random 3 ich nie das letzte hatte.
 
Zuletzt bearbeitet:
Random X liefert eine Zufallszahl von 0 bis X-1. Das heißt mit Random 1 bekommst du immer eine 0.

Wenn du Random 3 nimmst, hast du drei mögliche Ergebnisse: 0, 1, 2.

Wenn du unbedingt Zahlen größer Null haben willst mach es so:

set my_var to 1 + Random 3
 
  • Like
Reaktionen: Lichtkrieger
Du hast meine Oanzleft-mining-Scripts als Vorlage genommen?

Für die die's nicht wissen das Script hängt an Felsen die als Aktivator deklariert sind und daher haben sie kein Inventar welches sich öffnet

Das war so gedacht: (Hier mal die Struktur)

begin

short Zufall


if ( OnActivate )

if ( Zufall == -1 )
; = container- der eigentlich ein Aktivator ist- bereits geleert
; msgbox "Hier ist nichts mehr zu holen"
return
elseif ( Zufall == 0 )
; = noch nicht festgelegt wieviel man hier rausholen kann
; also zufällig maximale Menge abbaubare Edelsteine festlegen:
set Zufall to Random 5
set Zufall to Zufall + 1
endif

if ( Spieler hat keine Spitzhacke: )

;msgbox "ihr hab keine Hacke..."

return
endif

if ( Spieler hat Hacke nicht in der Hand )
; msgbox "Ihr habt keine Hacke in der Hand"
return
endif

if ( Spieler hat Waffe nicht gezogen )
;msg "Ihr solltet Euer Werkzeug zum Schlag bereit halten!"
return
endif


if ( GetDistance Player> 256 )
; die Reichweite eine Spitzhacke ist begrenzt....
; msg "Ihr seid zu weit weg - daneben gehauen..."
return
endif

;bis hierhin, der Spieler hat eine Spitzhacke in der Hand und
;grade den Felsen angeklickt der auch in seiner Nähe ist


if ( Spieler hat viel Glück )

if (Zufall >= 2 )
;sollten noch 2 oder mehr Steine da sein...
;kriegt er zwei auf einmal
set Zufall to Zufall -2
Player-> AddItem "Stein" 2

else
;kriegt er nur einen Stein
set Zufall to Zufall -1
Player-< additem "Stein" 1
endif

else

; spieler hat grade weniger Glück
;msgbox "Daneben gehauen..."
endif

if ( Zufall == 0 )
; Spieler hat nun alle Steine, das Vorkommen ist ausgebeutet
set Zufall to -1
endif

; alles was bis hier geschieht wird nur dann einmal ausgeführt
; wenn der Spieler den Felsen aktiviert
endif

end

Eventuelle weitere Variablen im Originalscript sind nur dafür zuständig den Glücks-Moment des Spielers mit einzubeziehen da es ja keinen Miner-Skill gibt :D
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Lichtkrieger
Sorry für meine Zwischenfrage.
Ist es möglich per Script festzustellen, ob der spieler den "wirkung bei benutzen" spruch einer waffe benutzt? Diese waffe soll dann aus dem inventar des spielers entfernt, ihm eine fackel in hinzufügt und diese dann ausrüstet werden. Dann soll nach 30 die Fackel wieder entfernt werden, und wieder die waffe hinzugefügt und ausgerüstet werden.
Gehts das? Wenn ja, wied müßte das script dafür aussehen?
mfg erc
 
Du hast meine Oanzleft-mining-Scripts als Vorlage genommen?

Nein , habe ich nicht, wieso was ist das?

Wie meinst du das
If ( spieler hat viel Glück ) was soll da reinkommen

zu dem Miner-Skill ich kann ja einen machen.

Zu ercvomnil

begin Script

short OnPCEquip
short PCSkipEquip
Short timer

set PCSkipEquip to 1

if ( OnPCEquip )
player -> AddItem "fakel" 1
set OnPCEquip to 0
set Timer to GetSecondsPassed
player -> Equip "Fakel"

endif

If ( timer >= 30 )
player -> RemoveItem "Fakel" 1
set timer to 0
endIf


end


Das script kommt auf dei waffe
Weiss nicht ob der so funzt müsste aber ich habe den ein bissl umgeändert von ReneMiner mit dem Händler amulett

Was meinst du mit 30 nach 30 Fakeln oder sdekunden
 
Zuletzt bearbeitet:
Also nocmal die Scriptsuche zusammengefasst:

Ich brauche ein Script dass wenn man den Activator aktiviert er die Idle2 ausführt, dazu sollte auch noch der Activator "tueroeffnerauch" die Idle2 ausführen. Nach zwanzig Sekunden sollte der erste Activator die Idle3 ausführen und dann sollten sich beide auf Idle1/0 zurücksetzen.

...!!!
Ohne dem komm ich nicht weiter.
 
Ich brauche ein Script dass...

Ich will nicht so tun, als hätte ich viel Ahnung davon, aber so spontan würde ich sagen, dass "PlayGroup" oder "LoopGroup" geeignet sind, um spezifische Animationen abzuspielen.

Ein Beispiel für ein "Warte-x-Sekunden-Skript" sollte sicherlich auch irgendwo zu finden sein. Irgendwas mit "GetSecondsPassed" oder so.

Beides wird irgendwo in "Morrowind Scripting für Dummies" beschrieben.
 
Eigentlich finde ich die (einseitige) Diskussion ganz witzig, aber ich poste mal meine Vermutungen. Ich habe noch nie die Idles verwendet, deshalb weiß ich nicht genau, wie sie funktionieren.

begin my_Activator1_script

short state
float timer

if ( state == 0 )
if ( OnActivate == 1 )
playgroup "idle2"
my_activator2->playgroup "idle2"
set state to 1
endif
endif

if ( state == 1 )
set timer to timer + GetSecondsPassed
if ( timer >= 20 )
playgroup "idle3"
my_activator2->playgroup "idle3"
set timer to 0
set state to 0
endif

end

endif
 
Sorry für meine Zwischenfrage.
Ist es möglich per Script festzustellen, ob der spieler den "wirkung bei benutzen" spruch einer waffe benutzt? Diese waffe soll dann aus dem inventar des spielers entfernt, ihm eine fackel in hinzufügt und diese dann ausrüstet werden. Dann soll nach 30 die Fackel wieder entfernt werden, und wieder die waffe hinzugefügt und ausgerüstet werden.
Gehts das? Wenn ja, wied müßte das script dafür aussehen?
mfg erc
Ich muß leider noch mal fragen, ob das geht. so wie das script jetz is, wird die Fackel sofort ausgerüstet und nach den 30 sec stürzt MW ab.
Ich habs auch schon mal mit geteffects "..." versucht, es klappt aber irgendwie nicht.:cry:
(und ja, ich habe sowohl sfd, als auch killfetzers befehle tutorial gelesen.)
mfg erc
 
Also dazu muss ich leider sagen, dass mir keine direkte Möglichkeit einfällt.

Du könntest mit GetSpellEffects abfragen ob die Verzauberung der Waffe auf den Spieler wirkt (was sie ja nur nach dem Benutzen tut) und dann den Rest per Hand steuern.
Also als Benutzen-Effekt erstellst du eine Verzauberung "Wirkung durch Benutzen" mit einem Effekt, der 30 Sekunden lang wirkt.

Dann legst du ein Script in dieser Art auf die Waffe:

Code:
begin my_waffe_script

short doOnce

if ( doOnce == 1 )
if ( GetSpellEffects "my_verzauberung" == 1 )
Player->AddItem "my_flare" 1
Player->Equip "my_flare"
set doOnce to 1
endif
else
if ( GetSpellEffects "my_verzauberung" == 0 )
if ( Player->GetItemCount "my_flare" >= 1 )
Player->RemoveItem "my_flare" 1
endif
set doOnce to 0
endif

end

Ob das so funktioniert weiß ich nicht, musst du halt ausprobieren.
 
  • Like
Reaktionen: ercvomnil
Hallo ich bins wieder mal, ich habe den Script von ReneMiner etwas verändert so das es auch eine neue Fertigkeit gibt. Der sinn des Script liegt darin das der player eine Spitzhacke in die hanmd nehmen muss und nah genug an den Felsen sein muss und wenn er diesen da activiert soll eine reihe von Zufällen kommen und der player soll dementprechend die Rohstoffe bekommen ausserdem soll er noch punkte pekommen und wenn er 100 punkte hat steigt er in seiner fertigkeit die wiederum soll bewirken das er mehr rohstoffe bekommen KANN.

Code:
Begin ZZ_Diamanten_Script_01

short Zufall

Short LocalDaysPassed

if ( OnActivate )
if ( Zufall == -1 )
MessageBox "Du hast schon alles aus dem Felsen rausgeholt"
return

ElseIf ( Zufall == 0 )
set Zufall to Random 5
set Miner_Skill to Miner_SkillWert
set Miner_SkillWert to Zufall + Miner_SkillWert
endif

if ( Spitzhacke == 0 )
MessageBox "Ihr habt keine Spitzhacke in der Hand."
return
endif

if ( GetDistance "Player" > 512 )
MessageBox "Ihr seid zu weit vom Felsen weg."
return
endif

;if ( Spieler hat viel Glück )

if ( Miner_SkillWert >= 100 )
set Zufall to -1
set Miner_Aufstieg to Miner_Aufstieg + 10
Player -> AddItem "ingred_diamond_01" 10
MessageBox "Du hast 10 Stück Diamanten bekommen."

elseif ( Miner_SkillWert >= 90 ) 
set Zufall to -1
set Miner_Aufstieg to Miner_Aufstieg + 9
Player -> Additem "ingred_diamond_01" 9
MessageBox "Du hast 9 Stück Diamanten bekommen."

elseif ( Miner_SkillWert >= 80 )
set Zufall to -1
set Miner_Aufstieg to Miner_Aufstieg + 8
Player -> Additem "ingred_diamond_01" 8
MessageBox "Du hast 8 Stück Diamanten bekommen."


elseif ( Miner_SkillWert >= 70 )
set Zufall to -1
set Miner_Aufstieg to Miner_Aufstieg + 7
Player -> Additem "ingred_diamond_01" 7
MessageBox "Du hast 7 Stück Diamanten bekommen."


elseif ( Miner_SkillWert >= 60 ) 
set Zufall to -1
set Miner_Aufstieg to Miner_Aufstieg + 6
Player -> Additem "ingred_diamond_01" 6
MessageBox "Du hast 6 Stück Diamanten bekommen."


elseif ( Miner_SkillWert >= 50 )
set Zufall to -1
set Miner_Aufstieg to Miner_Aufstieg + 5
Player -> Additem "ingred_diamond_01" 5
MessageBox "Du hast 5 Stück Diamanten bekommen."


elseif ( Miner_SkillWert >= 40 )
set Zufall to -1
set Miner_Aufstieg to Miner_Aufstieg + 5
Player -> Additem "ingred_diamond_01" 4
MessageBox "Du hast 4 Stück Diamanten bekommen."

elseif ( Miner_SkillWert >= 30 )
set Zufall to -1
set Miner_Aufstieg to Miner_Aufstieg + 5
Player -> Additem "ingred_diamond_01" 3
MessageBox "Du hast 3 Stück Diamanten bekommen."

elseif ( Miner_SkillWert >= 20 )
set Zufall to -1
set Miner_Aufstieg to Miner_Aufstieg + 5
Player -> Additem "ingred_diamond_01" 2
MessageBox "Du hast 2 Stück Diamanten bekommen."


elseif ( Miner_SkillWert >= 10 )
set Zufall to -1
set Miner_Aufstieg to Miner_Aufstieg + 1
Player -> Additem "ingred_diamond_01" 5
MessageBox "Du hast 1 Stück Diamanten bekommen."


elseif ( Miner_SkillWert >= 10 )
set Miner_Aufstieg to Miner_Aufstieg + 2
MessageBox "Du hast dieses mal nichts aus dem Felsen bekommen." 
endif


If ( Miner_Aufstieg >= 100 )
set Miner_Skill to Miner_Skill + 1
set Miner_aufstieg to 0
MessageBox "Deine Bergbau Fähigkeiten sind nun auf %.0f gestiegen.", Miner_Skill
EndIf

If ( Miner_Skill >= 100 )
 set Miner_Aufstieg to 0
endIf


if ( Zufall == 0 )
set Zufall to -1
endif

If ( Zufall == -1)
If ( LocalDaysPassed != Day )
set LocalDaysPassed to Day
set LocalDaysPassed to LocalDaysPassed +1

EndIf
endIf

If ( LocalDaysPassed >= 2 )
 set Zufall to 0
set LocalDaysPassed to 0
EndIf
Return

endif

miner_skill ist eine globale Variable und ist auf den wert (Value) 5
Miner_skillwert ist auch eine globale variable und ist auf den Wert 5
Spitzhacke ist auch eine und liegt auf 0

dann habe ich noch ein script der auf der Hacke liegt
Code:
Begin ZZ_Spitzhacke_Script

Short OnPcEquip

If ( OnPCEquip == 1 )
set Spitzhacke to 1

Else

If ( OnPCEquip == 0 )
set Spitzhacke to 0
return
EndIf
EndIf

End

Sie soll bewirken das wenn man die Hacke anlegt der wert der Spitzhacke auf 1 geht.

wenn ich es teste geht irgendwie irgendwas net.
ich vermute das bei den Spitzhacken Script was falsch ist.
 
Zuletzt bearbeitet:
Wozu Spitzhacke mit Script + Variable? Kannst doch an jedem Felsen- also im Felsen-Script abfragen ob der Spieler eine Spitzhacke oder eine Stahlrhim-Hacke equipped hat.

Und wichtig: Der Felsen darf kein Container sein. Setz die Anzahl der Diamanten zufällig- braucht's eben ein Script für Diamanten, eins für Rubine, eins für Smaragde, eins für Afamantium usw.

Ein Objekt welches im Script mit GetItemCount auf sein Inventar zugreift bevor der Spieler das Objekt aktiviert und somit ein abfragbares Inventar in seinem Spielstand hat bringt MW zum Absturz.

Genauso Zauber die noch wirken aber von einem Objekt gewirkt worden sind welches inzwischen per setDelete 1, removeItem oder "Leiche beseitigen" entfernt wurde- Absturz
...
 
Der Fehler bei der Spitzhacke sollte doch bei der 2. Abfrage liegen, denn du prüfst auf den selben Wert wie bei der ersten (IfOnPCEquip ==1).
 
Der Ebenerz Felsen ist jetzt kein Container mehr sondern ein Activator er hat jetzt folgendes Script dran.
Code:
Begin ZZ_EbenErz_Script_01

short Zufall

Short LocalDaysPassed

if ( OnActivate )
if ( Zufall == -1 )
MessageBox "Du hast schon alles aus dem Felsen rausgeholt"
return

ElseIf ( Zufall == 0 )
set Zufall to Random 5
set Miner_SkillWert to Zufall + Miner_Skill
endif

if ( OnPCEquip "Miner's Pick" == 0 )
MessageBox "Ihr habt keine Spitzhacke in der Hand."
return
endif

If ( player -> GetItemCount "Miner's Pick" < 1 )
MessageBox "Ihr besitzt keine Spitzhacke."
return
endif

if ( GetDistance "Player" > 256 )
MessageBox "Ihr seid zu weit vom Felsen weg."
return
endif

;if ( Spieler hat viel Glück )

if ( Miner_SkillWert >= 100 )
set Zufall to -1
set Miner_Aufstieg to Miner_Aufstieg + 10
Player -> AddItem "ingred_raw_ebony_01" 10
MessageBox "Du hast 10 Stück Ebenerz bekommen."

elseif ( Miner_SkillWert >= 90 ) 
set Zufall to -1
set Miner_Aufstieg to Miner_Aufstieg + 9
Player -> Additem "ingred_raw_ebony_01" 9
MessageBox "Du hast 9 Stück Ebenerz bekommen."

elseif ( Miner_SkillWert >= 80 )
set Zufall to -1
set Miner_Aufstieg to Miner_Aufstieg + 8
Player -> Additem "ingred_raw_ebony_01" 8
MessageBox "Du hast 8 Stück Ebenerz bekommen."

elseif ( Miner_SkillWert >= 70 )
set Zufall to -1
set Miner_Aufstieg to Miner_Aufstieg + 7
Player -> Additem "ingred_raw_ebony_01" 7
MessageBox "Du hast 7 Stück Ebenerz bekommen."

elseif ( Miner_SkillWert >= 60 ) 
set Zufall to -1
set Miner_Aufstieg to Miner_Aufstieg + 6
Player -> Additem "ingred_raw_ebony_01" 6
MessageBox "Du hast 6 Stück Ebenerz bekommen."

elseif ( Miner_SkillWert >= 50 )
set Zufall to -1
set Miner_Aufstieg to Miner_Aufstieg + 5
Player -> Additem "ingred_raw_ebony_01" 5
MessageBox "Du hast 5 Stück Ebenerz bekommen."

elseif ( Miner_SkillWert >= 40 )
set Zufall to -1
set Miner_Aufstieg to Miner_Aufstieg + 5
Player -> Additem "ingred_raw_ebony_01" 4
MessageBox "Du hast 4 Stück Ebenerz bekommen."

elseif ( Miner_SkillWert >= 30 )
set Zufall to -1
set Miner_Aufstieg to Miner_Aufstieg + 5
Player -> Additem "ingred_raw_ebony_01" 3
MessageBox "Du hast 3 Stück Ebenerz bekommen."

elseif ( Miner_SkillWert >= 20 )
set Zufall to -1
set Miner_Aufstieg to Miner_Aufstieg + 5
Player -> Additem "ingred_raw_ebony_01" 2
MessageBox "Du hast 2 Stück Ebenerz bekommen."

elseif ( Miner_SkillWert >= 10 )
set Zufall to -1
set Miner_Aufstieg to Miner_Aufstieg + 5
Player -> Additem "ingred_raw_ebony_01" 1
MessageBox "Du hast 1 Stück Ebenerz bekommen."

elseif ( Miner_SkillWert >= 10 )
MessageBox "Du hast dieses mal nichts aus dem Felsen bekommen." 
EndIf

If ( Miner_Aufstieg >= 100 )
set Miner_Skill to Miner_Skill + 1
set Miner_aufstieg to 0
MessageBox "Deine Bergbau Fähigkeiten sind nun auf %.0f gestiegen.", Miner_Skill
EndIf

If ( Miner_Skill >= 100 )
 set Miner_Aufstieg to 0
endIf


if ( Zufall == 0 )
set Zufall to -1
endif

If ( Zufall == -1)
If ( LocalDaysPassed != Day )
set LocalDaysPassed to Day
set LocalDaysPassed to LocalDaysPassed +1

EndIf
endIf

If ( LocalDaysPassed >= 2 )
 set Zufall to 0
set LocalDaysPassed to 0
EndIf
Return


endif

end

Aber immer wenn ich ihn anklicke schreit er ein EXPRESSION (oder so) Fehler dann drücke ich auf ok, dann kommt Right Reval oder so, habe ich mir nicht ganz genau gemerkt.
Könnt ihr mir sagen wo da der Fehler liegt. Ich glaube das Expression bedeutet das da eine Doppelte Leerstelle ist, ich find aber keine, kann das noch wo anderst dran liegen?
 
Ich habe es inzwischen aufegeben das mit der Bergau Fertigkeit, weil ich es einfach net hinbekomme.
Code:
Begin ZZ_EbenErz_Script_01


Short Benutzt
Short Zufall
Short Zeit
short Tage
short Tag
Short Nicht

If ( OnActivate == 1 )
If ( Benutzt == 1 )
MessageBox "Du hast aus diesem Felsen schon alles rausgeholt."
Return

ElseIf ( Benutzt == 0 )
set Zufall to Random 5
EndIf

if ( Player -> HasItemEquipped "Miner's Pick" == 0 )
MessageBox "Ihr habt keine Spitzhacke in der Hand."
set Nicht to 0
return
endif

if ( GetDistance "Player" > 512 )
MessageBox "Ihr seid zu weit vom Felsen weg."
set Nicht to 0
return
endif

If ( Zufall == 4 )
Player -> AddItem "ingred_raw_ebony_01" 4
Set Zeit to 1
Set Zufall to 6
set Benutzt to 1
MessageBox "Du hast eine Riesige Menge Rohes Ebenerz aus dem Felsen gehauen."

ElseIf ( Zufall == 3 )
Player -> AddItem "ingred_raw_ebony_01" 3
Set Zeit to 1
Set Zufall to 6
set Benutzt to 1
MessageBox "Du hast eine grosse Menge Rohes Ebenerz aus dem Felsen gehauen."

ElseIf ( Zufall == 2 )
Player -> AddItem "ingred_raw_ebony_01" 2
Set Zeit to 1
Set Zufall to 6
set Benutzt to 1
MessageBox "Du hast eine normale Menge Rohes Ebenerz aus dem Felsen gehauen."

ElseIf ( Zufall == 1 )
Player -> AddItem "ingred_raw_ebony_01" 1
Set Zeit to 1
Set Zufall to 6
set Benutzt to 1
MessageBox "Du hast eine kleine Menge Rohes Ebenerz aus dem Felsen gehauen."

ElseIf ( Zufall == 0 )
set Benutzt to 1
Set Zufall to 6
Set Zeit to 1
MessageBox "Du hast nichts aus dem Felsen bekommen."

EndIf

If ( Zeit == 1 )
If ( Tag != Day )
set Tag to Day
set Tage to Tage + 1

If ( Tage >= 2 )
set Tag to 0
Set Tage to 0
set Zeit to 0
set Benutzt to 0
set Zufall to 0
Return
EndIf
EndIf
EndIf
EndIf
End

Es geht alles, bisauf das man den felsen nach einem Tag neu anklicken kann und erz bekommt. Das mit dem den Tag habe ich nur zum Testen gemacht eigendlich soll es sich erst nach einem Monat erneuern.