Construction Set Der Scriptthread

Killfetzer schrieb:
Nur so als Tipp: Vermeide Umlaute in IDs! Denn der Compiler des Scripteditors stört sich an denen. Wäre blöd wenn ein Script nicht läuft wegen einer schlecht gewählten ID.
bei mir gehts. weil ich auch das nicht benutzt hab. :D
 
oder so: (verschlossener Container/Tür)

begin blabla

if ( OnActivate == 1 )
if ( GetLocked == 1 )
messagebox "Ich bin verschlossen"
;unlock
; nun wäre ich offen...
else
messagebox "Ich bin offen"
endif
endif

end
 
GetDistance

Hallo,

Erstmal Danke das ihr meine Fragen so gut wie möglich beantworten wollt.
So jetzt zum eigendlichen Problem ihrgendwie Funktioniert das nicht.
Code:
if ( ZZ_Mine_Arbeiter_02 -> GetDistance "ZZ_Mine_Flagge_01" <= 500 )
AiWander 50 5 10 0 0 0 0 0 0 0 0

       Elseif ( ZZ_Mine_Arbeiter_03 -> GetDistance "ZZ_Mine_Flagge_01" <= 500 )
       AiWander 50 5 10 0 0 0 0 0 0 0 0

            Elseif ( ZZ_Mine_Arbeiter_04 -> GetDistance "ZZ_Mine_Flagge_01" <= 500 )
            AiWander 50 5 10 0 0 0 0 0 0 0 0

                 Journal ZZ_Vul-Mine_01 15

Es soll mindestens einer ankommen, es können auch zwei oder Drei ankommen, egal wie, ich soll dann am Ziel, ein Journal eintrag bekommen, kann man da den Script so nehmen, weil in mein Versuch hat es nicht geklappt.
 
So liefert das ganze nur den Tagebucheintrag wenn der 04-Arbeiter ankommt.

Wenn du prüfen willst, ob irgendeiner ankommt, führe eine (short-)Variable angekommen ein und bau das ganze so auf:

if ( ZZ_Mine_Arbeiter_02 -> GetDistance "ZZ_Mine_Flagge_01" <= 500 )
ZZ_Mine_Arbeiter_02->AiWander 50 5 10 0 0 0 0 0 0 0 0
set angekommen to angekommen + 1
endif

if ( ZZ_Mine_Arbeiter_03 -> GetDistance "ZZ_Mine_Flagge_01" <= 500 )
ZZ_Mine_Arbeiter_03->AiWander 50 5 10 0 0 0 0 0 0 0 0
set angekommen to angekommen + 1
endif

if ( ZZ_Mine_Arbeiter_04 -> GetDistance "ZZ_Mine_Flagge_01" <= 500 )
ZZ_Mine_Arbeiter_04->AiWander 50 5 10 0 0 0 0 0 0 0 0
set angekommen to angekommen + 1
endif

if ( angekommen > 0 )
Journal ZZ_Vul-Mine_01 15
endif


Somit bekommst du sogar die genaue Anzahl der angekommenen Arbeiter.

Noch einige Anmerkungen zu dem Scriptausschnitt:
- Liegt das Script auf einem NPC? Weil das aufrufende Objekt des Scripts wird auf Wanderschaft geschickt. In meiner Version ist das verbessert.
- Gehe sicher, dass dieser gesamte Auschnitt nur einmal durchlaufen wird.
 
Wenn es auf allen drei Arbeitern läuft, personalisiere das Script doch. Das würde dann etwa so aussehen:

so hier die Script-Ausschnitte:

begin ZZ_*

short doOnce
short angekommen

...

if ( doOnce == 0 )
if ( GetDistance "ZZ_Mine_Flagge_01" <= 500 )
AiWander 50 5 10 0 0 0 0 0 0 0 0
set angekommen to angekommen + 1
set doOnce to 1
endif
endif

if ( GetJournalIndex "ZZ_Vul-Mine_01" < 15 )
if ( angekommen > 0 )
Journal "ZZ_Vul-Mine_01" 15
endif
endif

...

end


Dieses Script liefert dir für jeden Arbeiter eine getrennte Abfrage ob ER angekommen ist. Wenn es dir egal ist, welcher ankommt wird somit der Tagebucheintrag von dem ersten ankommenden ausgelöst. Bei den anderen wird nur noch der AIWander-Befejl umgesetzt.
 
Zuletzt bearbeitet:
ja das habe ich mir auch gedacht aber es ist ein teil im Script das sobald alle drei "das grass von unten Wachsen sehen" ich dann ein anderen Tagebucheintrag bekommen.
Code:
If ( Tot == 0 )
If ( GetDeadCount "ZZ_Mine_Arbeiter_02" > 0 )
If ( GetDeadCount "ZZ_Mine_Arbeiter_03" > 0 )
If ( GetDeadCount "ZZ_Mine_Arbeiter_04" > 0 )
Journal ZZ_Vul-Mine_01 20
PcExpell "ZZ_Bau und Kauf Gesellschaft"
set Tot to 1
das kommt praktisch darunter
 
Dann lässt du diesen Teil einfach unten drunter stehen. Es macht nichts, wenn du 3 mal auf einmal ausgestoßen wirst ;)
Im Ernst: es macht so gut wie keinen Unterschied ob du etwas nun 3 mal überprüfst oder nur einmal. Solange dies nur in einem Frame geschieht (tut es ja dank der tot-Variable) merkt man das nicht mal an der Performance :)
 
ich bräuchte 2 scripts:

1. er sollte an eine bestimmte Stelle im Raum teleportieren, allerdings weiß ich auch nicht, wie ich feststellen kann, welche Koordinaten diese Stelle hat.

2. er sollte den Spieler automatisch an eine Stelle in einem Raum teleportieren, wenn dieser gestorben ist und seine Lebenspunkte auf 10/maximale Lebenspunkte setzen.
(und ihn natürlich wieder zum leen erwecken)

Der script ist angehängt:
ich mache zur Zeit ein Plug-in und da gibt es einen Raum, in dem man erst mit jemanden Sprechen muss, damit dieser dann 5 Schreine aktiviert.
dazu benutze ich noch den enable/disable Befehl, den ich aus dem tutorial Scripten für dummies hab.
die Schreine fragen dann in einer ersten Messagebox, ob man einen Bereich Betreten will, der nur über die Schreine betretbar ist und an dem man dann kämpft.
in einer 2. Messagebox, die erscheint, wenn man die erste mit ja bestätigt hat, soll nachgefragt werden, wie stark die Gegner sind. 3 Stufen gibts, je nach auswahl kommt der Spieler in 1 von 3 Räumen mit entsprechend starken Monstern. Wenn er da besiegt wird, soll er wieder zurückkommen in den Teil des Raumes, wo die Schreine Stehen.
Das ganze kostet natürlich auch was.

bisher hab ich nur die beiden Messageboxen gescriptet, aber ich bin mir da auch nicht so sicher.

KOPIE!!!!!!!

begin My_unterwasserkampf

short Angeklopft

if ( MenuMode == 1 )
return
endif

if ( angeklopft == 0 )
set angeklopft to OnActivate
return
elseif ( angeklopft == 1 )
if ( Player-> GetItemCount "Gold_001" < 1000 )
MessageBox "Ihr habt nicht genügend Geld "
set angeklopft to 0
return
endif
MessageBox "Wollt ihr einen Unterwasserkampf bestreiten?" "Ja" "Nein"
set angeklopft to -1
return
elseif ( angeklopft == -1 )
set angeklopft to 0
if ( GetButtonPressed == 0 )
messagebox "Welche Kampfstärke sollen ihre Gegner haben?" "Leicht, 50 Draken" "Mittel, 100 Draken" "Hart, 200 Draken"
set angeklopft to -2
endif
elseif (angeklopft == -2)
if ( Getbuttonpressed == 0 )
endif
endif
end

KOPIE ENDE!!!!!!!

PS: mit einer "Stelle im Raum" meine ich eine stelle in einem interieor-Cell, in dem mit einigen statics ein Raum ist.
PPS: das ist jetzt 1 script von 5. das muss ich dann entsprechend den anderen schreinen Anpassen.
PPS: Ich hätte auch gerne sowas wie einen Ausgang, also, für den Fall, dass der Held gewinnt...
 
Hallo,
1.
er sollte an eine bestimmte Stelle...
Wer soll an einer bestimmten stelle (ich denke mal der player)

zu dein Script:

Code:
Begin My_Unterwasserarena_Schrein_01

Short Angeklopft
Short Button
SHort ButtonB

If ( OnActivate == 1 )
  If ( Angeklopft == 0 )
  set Angeklopft to 1 
  EndIf
EndIf

  If ( Angeklopft == 1 )
   MessageBox "Willst du für 1000 Draken die Unterwasserarena betreten?"   "Ja" "Nein"
   set Angeklopft to 2
  EndIf

If ( Angeklopft == 2 )
set Button to GetButtonPressed

If ( Button == 0 )
  If ( player -> GetItemCount "Gold_001" >=  1000 )
   player -> PositionCell x, y, z, (Unterwasserraum) 
;die XYZ Koordinaten bekommst du wenn du ein objetk markierst und in der untersten reihe Schaust.
   player -> removeitem "Gold_001" 1000
  set Angeklopft to 3
set Button to 0

Else

If ( Button == 0 )
   If ( player -> GetItemCount "Gold_001" < 1000 )
    MessageBox "Du hast nicht genug GelD"
   set Angeklopft to 0
set Button to 0
Return

Else

If ( Button == 1 )
  MessageBox "Dann nicht"
  set Angeklopft to 0
set Button to 0
Return
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf

If ( Angeklopft == 3 )
MessageBox "Welche Stärke der Monster" "Leicht 50Draken" "Mittel100Draken" "Schwer 200draken"
set Angeklopft to 4
EndIf

If ( Angeklopft == 4 )
set ButtonB to GetButtonPressed

If ( ButtonB == 0 )
  If ( player -> GetItemCount "Gold_001" >= 50 )
   placeATPC "ID-Monster leicht" 1 0 0
    player -> RemoveItem "Gold_001" 50
     set ButtonB to 0
       set Angeklopft to 0
Return

Else 

If ( ButtonB == 1 )
  If ( player -> GetItemCount "Gold_001" >= 100 )
    placeATPC "ID-Monster Mittel" 1 0 0
      player -> RemoveItem "Gold_001" 100
       set ButtonB to 0
         set Angeklopft to 0
Return

Else 

If ( ButtonB == 2 )
     If ( player -> GetItemCount "Gold_001" >= 200 )
      placeATPC "ID-Monster schwer" 1 0 0
        player -> RemoveItem "Gold_001" 100
          set ButtonB to 0
           set Angeklopft to 0
Return

Else

player -> AddItem "Gold_001" 1000
set ButtonB to 0
set Angeklopft to 0
Return

EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf

End

So müsste dein Script funktionieren.
 
1. Nimm einfach einen beliebigen NPC und schiebe ihn in dem Raum an die gewünschte Stelle. Jetzt markiere den NPC (einmal anklicken) und du kannst ganz unten (direkt über der Taskleiste) in der Mitte die Position und Rotation des markierten Gegenstandes ablesen.
Abschreiben und NPC löschen. Fertig.

2.Ich weiß nicht ob das mit dem Spieler funktioniert. Da hilft wohl nur ausprobieren:
begin my_deathscript

if ( Player->OnDeath == 1 )
Player->Resurrect
Player->PositionCell x-pos y-pos z-pos z-rot "Zellenname"
endif

end


Wenn das nicht funktioniert, musst du irgendwie abfangen, wenn der Spieler nur noch wenig Lebenspunkte hat.
 
wie muss denn das dann aussehen, mit dem positioncell?

ihr habt jetzt beide Beispiele gebracht, allerdings sind die entweder zu allgemein, odwr ich zu blöd...

x-pos = 320
y-pos = -1984
z-pos = 0
x,y,z-rot = 0

mein vorschlag wäre erst gewesen

player -> PositionCell 320, -1984, 0, (Unterwasserraum)

aber da sagt er, er hätte gerne eine z-rotation
dann hab ich

player -> PositionCell 320, -1984, 0 [0, 0, 0] (Unterwasserraum)

gemacht, wie das unten stand
da wollte er das aber auch haben.

player -> PositionCell 320, -1984, 0, 0 (Unterwasserraum)

brachte auch nichts

dann hab ich das wie killfetzer gemacht...

Player->PositionCell 320 -1984 0 0 "Unterwasserraum"

da hats dann im script geklappt...

also erstmal ein dankeschön an euch !!!

ich versuch jetzt noch den script etwas umzuformen, dass ich da noch einige Quests einführen kann und dass man sich erst entscheidet, welches Monster im Keller ist, bevor man dorthinkommt...
gibt es eigentlich eine elegantere Methode den Spieler nach einem Sieg z.B. auch über mehrere Gegner zurückzuschicken und ihm eine belohnung zu geben als dass man eigene Neue Monster erstellt und in einem Script, der das ganze Spiel läuft einige bescheuerte If-phrasen einzufügen, die ich dann nach einem erfolgreichen Nicht-klappen umändern muss?
Ich bin sicher, wenn man abfragen könnte, ob ein Monster oder der Spieler in einem bestimmten bereich ist und dann der script ausgeführt wird, würde das helfen.
 
Nimm einfach einen neuen Activatormit Mesh "EditorMarker.nif". Der sieht aus wie ein Lautsprecher und ist im Spiel nicht zu sehen. Dort kannst du gut Scripts drauflegen, die die Anwesenheit des Spielers in einem bestimmten Gebiet überprüfen.
 
also ich hab jetzt so einen activator.

und aus anderen activatoren, die den selben Mesh haben weiß ich den befehl

if ( Cellchange == 0 )
endif

was genau heißt das?

und ich hab jetzt nochmal speziell ne frage:

bisher sieht es so aus:
man geht zum Schrein, dieser fragt erst, ob man kämpfen will, dann welche Monsterstärke und teleportiert einen dementsprechend in einen anderen Teil des Interior cells und fügt noch ein Monster dort hinzu.
Wenn man stirbt wird man wiederbelebt und kommt zurück.
Frage: wieviele Lebenspunkte hat man dann?

es soll aber noch weitergehen:
-ich möchte random-monster verwenden und zwar mehrere.
-ich möchte dann, wenn alle monster besiegt sind, dass der Held zurückkommt und eine Belohnung erhält.
-ich möchte, dass der Computer weiß, wann man mindestens 1mal alle schwierigkeitsstufen gemeistert hat und dass die Dialoge auf diese Info zugreifen können. (weiß ja nicht, ob es einen Befehl wie "mid" gibt, bei denen nur bstimmte abschnitte von variabeln gelesen werden, oder ob dialoge auf variabeln zugreifen können.)
-Und schließlich möchte ich, dass, wenn man den Raum betritt ein script gestartet wird (vielleicht durch die Tür?) dass alle schreine nicht benutzbar sind. ob verschwunden oder einfach nicht reagieren ist egal.
-Und natürlich möche ich dann, dass die Schreine wieder aktiv werden und zwar durch ein spezielles Topic.

Meine Vorschläge (will euch ja nicht alles machen lassen!):
-diese dinger heißen ja Leveld creature. sowas zu machen ist nicht schwer...
-aber wie kann man denn abfragen ob eine unbestimmte Anzahl, die in einem vorher festgelegten Bereich lisgt, an Monstern, von denen man auch nur weiß, dass es eins von einigen ist, jetzt getötet wurde?
Ich möcht ja nicht, dass der Held da unten sitzen bleibt und auch nicht, dass da dann noch monster sind und er schon wieder hochkommt.
-ich hab mir schon gedanken mit globalen variabeln gemacht, allerdings bräuchte ich davon 15 Stück, die dann alle nur auf 1 oder 0 stehen... find ich etwas verschwendung. desswegen mein Einfall mit dem "mid". der Befehl kommt aus visual-basic.net, aber ich weiß nicht, ob er funktioniert...
Das ganze soll dafür gut sein, dass ein Charackter erkennt, ob man alle Schwierigkeitsstufen gemeistert hat. Das kann man natürlich auch mit 5 Journalen erreichen, mit jeweils 3 unterpunkten, aber das ist mir etwas viel Tagebucheinträge...
- das mit dem "verrigeln" der Schreine und dem anschließenden aktivieren soll dafür gut sein, dass man bei jedem Besuch erst mit einem Typen da sprechen muss, bevor die Schreine aktiviert werden.

PS:
ich zu der letzten Nachricht:
ich wollte mit dem activator feststellen, ob der Held alle monster getöttet hat, oder ob sich noch eins in dem Bereich befindet.
wenn die einzige bedingung cellchange == 0 ist dann wird der held doch auch gezählt, und dann kommt er da doch nicht mehr weg!
 
Um die Globale Variable oder die Tagebucheinträge würst du wohl nicht drumherrum kommen. Was willst du nehmen?
Zu den festellen ob der player alle umgebracht hat kannst folgenden Script verwenden (das kommt auf das jeweilige monster da du wolltest das mit mehren monster gekämpft wird benutzt ich hier 3 monster) Monster_LeichtVAr und Monster_Leicht_Behlonung sind eine Globale Varieable.:
Code:
Begin My_Monster_Leichtsript_01

if ( GetDeadCount "Monster leicht" >= 3 ) ;beschreibt wie coft du dieses  Monster getötets hast weil dreie drine sind muss da eine 3 hin
set Monster_LeichtVAr to 1
set Monster_Leicht_Behlonung to Monster_Leicht_Behlonung + 1
player -> PositionCell x, y, z "Ausgangspunkt"
; Es müssen 3 Monster sein es können auch zwei oder wie viele sein musste halt nur umändern
EndIf
End

Es kann sein das das nicht dein vorstellungen enspricht da du dann nur einmal die Belohnung für die umgebracht monster bekommst. Wie das anderst geht weis ich auch nicht. Habe es gerade selber erst gemerkt
Bei den NPC bindeste in den gesräch ein:

Code:
[B]Topic[/B]: (Belohnung)
[B]Text[/B]: (Ja du hast alle umgebracht hier dein Belohnung)
[B]Id:[/B] (Npc's ID)
[B]Funktion/Variable:[/B] ( Global Monster_Leicht_Behlonung > 0 )
[B]Result[/B]
while ( Monster_Leicht_Behlonung > 0 )
player-> Additem "Id-deiner Belohnung" 1
set Monster_Leicht_Behlonung to Monster_Leicht_Behlonung - 1
endWhile

Bei den anderen Monster (schwer usw.) musste halt nur umändern.

wen er alle drei möglcihkeiten bezwungen hat kommt folgendes:
Code:
[B]Topic[/B]: (Belohnung Spezial)
[B]Text[/B]: (Ja du hast alle Gräde gemeistert hier dein Belohnung)
[B]Id:[/B] (Npc's ID)
[B]Funktion/Variable:[/B]
 ( Global Monster_LeichtVar = 1 )
 ( Global Monster_MittelVar = 1 )
 ( Global Monster_schwerVar = 1 )
 ( Local Var < 1 )

[B]Result[/B]
player-> Additem "Id-deiner spezial Belohnung" 1
set var to 1

Auf den NPC musst du in ein Script schreiben:
Code:
Short Var
 
Zuletzt bearbeitet:
Zu den Fragen, was genau einzelne Scriptbefehle bewirken, klick auf den "Liste der Scriptingbefehle"-Link in meiner Signatur.

Du kannst das ganze auch mit einer globalen Variablen machen:

Für jeden Schwierigkeitsgrad/Schrein führst du eine lokale doOnce-Variable ein. Beim Aktivieren des Schreins, setzt du das doOnce auf 1 und die globale auf +1 ihres vorherigen Wertes. Ich meine das etwa so:

my_anzahl_kampf ist eine globale short-Variable

begin my_schrein_script

short doOnce
short state
short button

if ( doOnce == 1 )
if ( my_anzahl_kampf == 0 )
set doOnce to 0
endif
endif

if ( doOnce == 0 )
if ( state == 0 )
if ( OnActivate == 1 )
set state to 1
MessageBox "Wollt Ihr kämpfen?" "Ja" "Nein"
endif
endif
endif

if ( state == 1 )
set button to GetButtonPressed
if ( button == 0 )
MessageBox "Dann kämpft."
set doOnce to 1
set state to 0
set my_anzahl_kampt to my_anzahl_kampf + 1
endif
if ( button == 1 )
set state to 0
endif
endif

end


Dieses Script kannst du natürlich anpassen.

Wenn du nun (zB. in der Resultbox des Dialoges) my_anzahl_kampf auf 0 setzt, funktionieren alle Schreine wieder. Gleichzeitig liefert dir diese Variable die Anzahl der gemeisterten Schwiergigkeitsgrade/Schreine, da ja jeder Schrein nur einmal aktiviert werden kann, bevor du die Variable wieder zurücksetzt.


Bei Resurrect werden alle Werte auf die Standardwerte gesetzt (max Leben, Mana, Ausdauer, ...)
 
Lichtkrieger schrieb:
Um die Globale Variable oder die Tagebucheinträge würst du wohl nicht drumherrum kommen. Was willst du nehmen?
Zu den festellen ob der player alle umgebracht hat kannst folgenden Script verwenden (das kommt auf das jeweilige monster da du wolltest das mit mehren monster gekämpft wird benutzt ich hier 3 monster) Monster_LeichtVAr und Monster_Leicht_Behlonung sind eine Globale Varieable.:
Code:
Begin My_Monster_Leichtsript_01

if ( GetDeadCount "Monster leicht" >= 3 ) ;beschreibt wie coft du dieses  Monster getötets hast weil dreie drine sind muss da eine 3 hin
set Monster_LeichtVAr to 1
set Monster_Leicht_Behlonung to Monster_Leicht_Behlonung + 1
player -> PositionCell x, y, z "Ausgangspunkt"
; Es müssen 3 Monster sein es können auch zwei oder wie viele sein musste halt nur umändern
EndIf
End

Es kann sein das das nicht dein vorstellungen enspricht da du dann nur einmal die Belohnung für die umgebracht monster bekommst. Wie das anderst geht weis ich auch nicht. Habe es gerade selber erst gemerkt
Bei den NPC bindeste in den gesräch ein:

Code:
[B]Topic[/B]: (Belohnung)
[B]Text[/B]: (Ja du hast alle umgebracht hier dein Belohnung)
[B]Id:[/B] (Npc's ID)
[B]Funktion/Variable:[/B] ( Global Monster_Leicht_Behlonung > 0 )
[B]Result[/B]
while ( Monster_Leicht_Behlonung > 0 )
player-> Additem "Id-deiner Belohnung" 1
set Monster_Leicht_Behlonung to Monster_Leicht_Behlonung - 1
endWhile

Bei den anderen Monster (schwer usw.) musste halt nur umändern.

wen er alle drei möglcihkeiten bezwungen hat kommt folgendes:
Code:
[B]Topic[/B]: (Belohnung Spezial)
[B]Text[/B]: (Ja du hast alle Gräde gemeistert hier dein Belohnung)
[B]Id:[/B] (Npc's ID)
[B]Funktion/Variable:[/B]
 ( Global Monster_LeichtVar = 1 )
 ( Global Monster_MittelVar = 1 )
 ( Global Monster_schwerVar = 1 )
 ( Local Var < 1 )

[B]Result[/B]
player-> Additem "Id-deiner spezial Belohnung" 1
set var to 1

Auf den NPC musst du in ein Script schreiben:
Code:
Short Var

Nun, sagen wir, ich benutze diese Leveld creatures... ich benutze 2 verschiedene Typen von leveld-creatures für jede schwierigkeitsstufe...

nämlich bei leicht:
1 leveld (3 monster random) wahrscheinlichkeit none = 0%
2 leveld ( 3 monster random) wahrscheinlichkeit none = 50%
usw...

wäre das möglich in den script einzubauen?
du eghst ja davon aus, dass ich 3 leveld ( ? monster random) wahrscheinlichkeit none = 0% benutze...
da müsste man eben wissen, wieviele Monster NACH dem hinzufügen dieser monster und der berechnung, ob da ein monster ist oder nicht, da sind und das in eine variable einfügen...

oder könnte man vielleicht mit einem Befehl feststellen, wieviele creaturen im Spiel sind oder in einer Zelle?
z.B.
getcount "My_random-Monster"
oder sowas?

dann könnte man den Befehl ja so ändern :
if ( GetDeadCount "Monster leicht" >= ((getcount "My_random-Monster_w50" ) + (getcount "My_random-Monster_w100")) )


natürlich glaube ich nicht, dass es so einfach geht wie getcount ;)

______________________

wenn man den befehl unterhalb des "if ( GetDeadCount "Monster leicht" >= 3 )" ein wenig verschiebt und stattdessen z.B. "Hallo" als short-variabel auf 1 setzt und dann noch einen if-clause mit if ( Hallo = 1 ) macht und dahin den ganzen befehl verschiebt und danach noch hallo wieder auf 0 setzt müsste es jedesmal klappen, wenn man das Monster besiegt, oder?

soviel zur theorie, aber ich weiß nicht, ob ich das hinkrieg...

Vorschlag:
Code:
Begin My_Monster_Leichtsript_01

short Hallo

if ( GetDeadCount "Monster leicht" >= ((getcount "My_random-Monster_w50"  ) + (getcount "My_random-Monster_w100")) )
 set hallo to 1
endif

if ( Hallo == 1)
 set Monster_LeichtVAr to 1
 messagebox "Ihr habt gewonnen!"
 player->additem "My_Leicht-Unterwasser_Belohnung" 1
 player -> PositionCell x, y, z "Ausgangspunkt"
EndIf

End

die Belohnung kann er ja einfach so bekommen ;)
sonst wird das auf dauer glaub ich für den Spieler etwas zu ermüdend, wenn mandauernd dahinrennen muss, wo der NPC gerade ist.
Code:
Topic: (Belohnung Spezial)
Text: (Ja du hast alle Gräde gemeistert hier dein Belohnung)
Id: (Npc's ID)
Funktion/Variable:
 ( Global Monster_LeichtVar = 1 )
 ( Global Monster_MittelVar = 1 )
 ( Global Monster_schwerVar = 1 )
 ( Local Var < 1 )

Result
player-> Additem "Id-deiner spezial Belohnung" 1
set var to 1

das macht man dann ja auch, weil das keinen direkten einfluss hat...
also meine änderung hat auf diesen Teil deines Vorschlages keinen Einfluss ;)

@Killfetzer
ich würde aber gerne das so machen, dass der Spieler auch mehrmals den selben Schwierigkeitsgrad macht ohne die anderen zu benutzen.
außerdem soll er auch selbst über die Reihenfolge entscheiden können, sonst wäre das doch zu einfach ;) (also für mich nicht, aber für euch ;))

Vertan:

wie geht das nochmal mit dem PC-Level bei den Leveled creatures?
 
Zuletzt bearbeitet:
Die Reihenfolge kann er ja selbst entscheiden. Es ist ja egal welchen Schrein du zuerst benutzt, wenn jeder (fast) das selbe Script hat. Die Scripte würden sich ja nur noch in dem Teleport- und Monstererschaffungsbefehl (der bei meinem Script statt der zweiten MassageBox hinmüsste) unterscheiden. Und ich hab das so verstanden, dass nachdem jeder Schrein einmal benutzt wurde, du erst mit jemanden reden musst. So habe ich das Problem dann auch gelöst.

Mit dem Random-Monster und ihrer Anzahl kannst du das auch so machen: (ist jetzt nur ein Ausschnitt)(my_monster_anzahl ist globale Variable)

short zufall
short count

...

set anzahl to Random 3
set my_monster_anzahl to my_monster_anzahl + 1
set count to my_monster_anzahl

while ( count > 0 )
set zufall to Random 100
if ( zufall < 33 )
PlaceAtPC "my_monster1" 1 128 0
elseif ( zufall < 66 )
PlaceAtPC "my_monster2" 1 128 0
else
PlaceAtPC "my_monster3" 1 128 0
endif
endif
set count to count - 1
endwhile


Dieses Script plaziert jetzt zufällig zwischen 1 und 3 Monster (Wieviele wird in anzahl gespeichert) und zwar in einer zufälligen Zusammensetzung aus den drei Monstern angegebenen Monstern. Das kannst du natürlich mit beliebigen Zahlen und Monstern abändern.

EDIT: Um zu erfahren, ob alle Monster tot sind, kannst du auf jedem Monster ein Script laufen lassen, das wie folgt aussieht: (my_kill_anzahl ist globale Variable)

begin my_monster_script

if ( OnDeath == 1 )
set my_kill_anzahl to my_kill_anzahl + 1
if ( my_kill_anzahl == my_monster_anzahl )
set my_kill_anzahl to 0
set my_monster_anzahl to 0
MessageBox "Ich habe alle Monster besiegt."
endif
endif

end
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Sword