Construction Set Der Scriptthread

WOW!!!
das ist ja toll!
so hauts hin!!!

sag mal die variabel anzahl...
ist das eine andere als My_Monster_Anzahl
und ist das gloal oder short?
 
Zuletzt bearbeitet:
Position(Cell)-Befehl:

PositionCell xpos ypos zpos zrot "Cellname"

um etwas in Interior-Zellen zu platzieren bzw.

Position xpos ypos zpos zrot [optional "Cellname"]

ohne Zellenname um etwas in der gleichen, akiuellen Exteriorzelle zu platzieren, wird dabei ein Zellenname angegeben dann muss es eine Exterior-Zelle mit Eigennamen sein (z.B. Balmora, Ahemmusa-Lager oder Zergonipal)- Regionen funktionieren so nicht.

Cellchanged:

Der Cellchanged-Event findet immer dann statt wenn der Spieler eine neue Zelle betritt. Cellchanged ist dann für einen Frame lang == 1.
Achtung: Wird an einer teleportierenden Tür durch ein Script das OnActivate abgefangen und dann ein Activate-Befehl gegeben um die Tür zu durchqueren dann geht der Cellchanged-Event verloren: d.h. hinter solchen Türen ist kein Cellchanged==1 registrierbar.
Beispiel: Mach an die Addamarsatus-Höhlentür folgendes Script:

begin adamtuer

if ( OnActivate == 1 )
;messagebox "Tür aktiviert"
Activate
endif

end

befreie nun in Addamarsatus alle Sklaven, gehe hinaus und wieder rein: Die Sklaven die nun verschwunden sein sollen sind noch da!!! Wieso? Sie Disablen sich selbst nur bei Cellchanged==1, also wenn der Spieler hereinkommt.
Allerdings: würde man in Addamarsatus einen Markieren-Zauber setzen, nach dem Befreien hinausgehen und per Rückkehr-Zauber zurück hinein: die Sklaven wären weg, trotz "defekter" Tür...
 
Ich weis nicht ob es den Befehl GetCount gibt. Ich glaube nicht.
Da du gesagt hast:
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.

das macht das ganze um einiges einfacher.
Gib doch einfach die belohnung in die Kreatur.
Zu dein Level-creature mach doch einfach random Funktion.
Das folgende script teil fügst du einfach da hin wo das monster bei den player auftaucht.
.
.
.
If ( Angeklopft == 4 )
set ButtonB to GetButtonPressed

If ( ButtonB == 0 )
If ( player -> GetItemCount "Gold_001" >= 50 )
set ChanceL to Random 3
player -> RemoveItem "Gold_001" 50
set ButtonB to 0
set Angeklopft to 0
Return

Else

If ( ButtonB == 1 )
If ( player -> GetItemCount "Gold_001" >= 100 )
set ChanceM to Random 3
player -> RemoveItem "Gold_001" 100
set ButtonB to 0
set Angeklopft to 0
Return

Else

If ( ButtonB == 2 )
If ( player -> GetItemCount "Gold_001" >= 200 )
set ChanceS to Random 3
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

.
.
.

If ( ChanceL == 1 )
placeATPC "ID-Monster leicht_01" 1 0 0
ElseIf ( ChanceL == 2 )
placeATPC "ID-Monster leicht_02" 1 0 0
ElseIf ( ChanceL == 3 )
placeATPC "ID-Monster leicht_03" 1 0 0
EndIf

If ( ChanceM == 1 )
placeATPC "ID-Monster Mittel_01" 1 0 0
ElseIf ( ChanceM == 2 )
placeATPC "ID-Monster Mittel_02" 1 0 0
ElseIf ( ChanceM == 3 )
placeATPC "ID-Monster Mittel_03" 1 0 0
EndIf

If ( ChanceS == 1 )
placeATPC "ID-Monster Schwer_01" 1 0 0
ElseIf ( ChanceS == 2 )
placeATPC "ID-Monster Schwer_02" 1 0 0
ElseIf ( ChanceS == 3 )
placeATPC "ID-Monster Schwer_03" 1 0 0
EndIf

End
Natürlich musst du oben ncoh eintragen:

Code:
Short ChanceL
Short ChanceM
Short ChanceS

Den Folgenden Script kannste wegmachen:

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

und Stadtdessen eine Tür machen mit einen Schlüssel den du auch in die Kreaturen machst.

Auf die Tür kommt dann:
Code:
Begin My_Tür_Unterwasser_script

If ( OnActivate == 1 )
player -> RemoveItem (Schlüssel-ID) 1
Activate
Endif
End

Nochwas: Was hast du gegen mein ersten Script der war doch gut bis auf ein fehler das mit x, y, z, (...) ; da kommt ja x, y, z, "..." hin :pfeif:
Du kannst das doch so lassen der player Zahlt die 1000Draken und wenn er beimn zweiten kein geld mehr hat kommt er zurück und bekommt auch die 1000draken wieder. Daran habe ich gedacht.
Ich glaube sogar anderst wäre es nicht möglich da das monster bei den player auftaucht und er dann teleportiert wird.
 
HILFEEEEEE

ich komm nicht mehr mit!!!

also

nochmal die allgemeine Situation:

ich habe einen interior cell.

da sind im moment 2 Räume mit statics hingestellt.

in den ersten Raum kommt man von draußen rein. und da steht ein shrine.

der schrein wird durch einen Script auf die Tür deaktiviert und durch den entsprechenden Befehl bei einem topic mit einer in dem Raum befindlicher NPC wieder aktiviert.

wenn man den Schrein anspricht, fragt der, ob man kämpfen will, ohne geld dabei zu bezahlen.

wenn man ja sagt, dann fragt er welche stärke der kampf haben soll

Leicht: 1-3 Monster random (My_Wasserratte, My_Mudcrab und slaughterfisch_small)

wenn man leicht wählt, kommt man in einen anderen Raum im selben interior , in den man auch kommt, wenn man mittel oder Schwer wählt.

dem PC werden Draken in der vorher angegebenen Menge abgezogen, je nachdem ob Leicht (50) Mittel (100) oder schwer (200).

dann kommen die oder das Monster in den Raum. je nachdem, ob mal leicht, mittel oder Schwer gewählt hat.

stirbt der PC, kommt er wiederbelebt in den Raum, wo er den interior auch betreten hat. die monster verschwinden wieder aus dem anderen Raum.

siegt der PC über alle monster, kommt er auch wieder zurück, bekommt aber eine Messagebox, wo steht, wa er als Belohnung bekommt und die bekommt er dann auch.

Der Charackter kann beliebig oft und in einer Reihenfolge eigener Wahl die Schwierigkeitsgrade wählen und kämpfen

Der NPC, der in dem Eingangsraum steht weiß, wann der Spieler alle Schwierigkeitsgrade bestanden hat und gibt ihm dann was.

Nun hab ich einige Scripte von euch erhalten:

Code:
Short ChanceL
Short ChanceM
Short ChanceS

If ( Angeklopft == 4 )
set ButtonB to GetButtonPressed

If ( ButtonB == 0 )
If ( player -> GetItemCount "Gold_001" >= 50 )
set ChanceL to Random 3
player -> RemoveItem "Gold_001" 50
set ButtonB to 0
set Angeklopft to 0
Return

Else

If ( ButtonB == 1 )
If ( player -> GetItemCount "Gold_001" >= 100 )
set ChanceM to Random 3
player -> RemoveItem "Gold_001" 100
set ButtonB to 0
set Angeklopft to 0
Return

Else

If ( ButtonB == 2 )
If ( player -> GetItemCount "Gold_001" >= 200 )
set ChanceS to Random 3
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

.
.
.

If ( ChanceL == 1 )
placeATPC "ID-Monster leicht_01" 1 0 0
ElseIf ( ChanceL == 2 )
placeATPC "ID-Monster leicht_02" 1 0 0
ElseIf ( ChanceL == 3 )
placeATPC "ID-Monster leicht_03" 1 0 0
EndIf

If ( ChanceM == 1 )
placeATPC "ID-Monster Mittel_01" 1 0 0
ElseIf ( ChanceM == 2 )
placeATPC "ID-Monster Mittel_02" 1 0 0
ElseIf ( ChanceM == 3 )
placeATPC "ID-Monster Mittel_03" 1 0 0
EndIf

If ( ChanceS == 1 )
placeATPC "ID-Monster Schwer_01" 1 0 0
ElseIf ( ChanceS == 2 )
placeATPC "ID-Monster Schwer_02" 1 0 0
ElseIf ( ChanceS == 3 )
placeATPC "ID-Monster Schwer_03" 1 0 0
EndIf

End

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

Code:
Begin My_Tür_Unterwasser_script

If ( OnActivate == 1 )
player -> RemoveItem (Schlüssel-ID) 1
Activate
Endif
End

Code:
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

Code:
 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

Code:
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


und noch einige andere....

gut, wie passt das jetzt zusammen?

ich habe keinen Überblick mehr, welche scripte ich aneinander oder ineinanderschieben muss und welcher Script wohin kommt, noch ob die überhaupt das von mir gewünschte bezwecken!!!


PS:
Ich finde es sehr nett von euch, dass ihr euch hier Zeit nehmt und Fragen beantwortet, die z.T. nicht einmal richtig gestellt sind und auch solchen wie mir helfen wollt.
sollte ich unangemessen ungeheltene Kritik üben oder eure Lösungsvorschläge nicht verstehen, bitte seit nicht böse darüber...
Allerdings würde ich schon gerne einen oder mehrere Scripts bekommen, die das von Mir gewünschte Ergebnis oder etwas annäherndes ergeben, meinetwegen auch durch eigene Änderungen und zusammenführungen.
aber bitte...
@Lichtkrieger: Ich hab keine Ahnung, was dieser Ellenlanger Script bewirkt.
Ich hab auch keine Ahnung, wie man einen Script da anfügen kann, wo etwas bei jemanden auftaucht! und dann sagst du natürlich musst du nochwas oben anfügen...

wie gesagt, bitte seit net böse, aber ich bin lediglich mit der visual basic.net Programmiersprache vertraut und diese hier unterscheidet sich doch schon arg. desswegen fürchte ich, dass ich genausogut überhauptkeine Vorkenntnise haben kann...
 
Mein Script sehe so aus das würde dann auf den Schrein kommen das nicht nehmen:
Code:
Begin My_Unterwasserarena_Schrein_01

Short ChanceL
Short ChanceM
Short ChanceS
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 )
set ChanceL to Random 3
player -> RemoveItem "Gold_001" 50
set ButtonB to 0
set Angeklopft to 0
Return

Else

If ( ButtonB == 1 )
If ( player -> GetItemCount "Gold_001" >= 100 )
set ChanceM to Random 3
player -> RemoveItem "Gold_001" 100
set ButtonB to 0
set Angeklopft to 0
Return

Else

If ( ButtonB == 2 )
If ( player -> GetItemCount "Gold_001" >= 200 )
set ChanceS to Random 3
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

If ( ChanceL == 1 )
placeATPC "ID-Monster leicht_01" 1 0 0
ElseIf ( ChanceL == 2 )
placeATPC "ID-Monster leicht_02" 1 0 0
ElseIf ( ChanceL == 3 )
placeATPC "ID-Monster leicht_03" 1 0 0
EndIf

If ( ChanceM == 1 )
placeATPC "ID-Monster Mittel_01" 1 0 0
ElseIf ( ChanceM == 2 )
placeATPC "ID-Monster Mittel_02" 1 0 0
ElseIf ( ChanceM == 3 )
placeATPC "ID-Monster Mittel_03" 1 0 0
EndIf

If ( ChanceS == 1 )
placeATPC "ID-Monster Schwer_01" 1 0 0
ElseIf ( ChanceS == 2 )
placeATPC "ID-Monster Schwer_02" 1 0 0
ElseIf ( ChanceS == 3 )
placeATPC "ID-Monster Schwer_03" 1 0 0
EndIf

End


Mit deinen anforderungen würde es so aussehen:
Code:
Begin My_Unterwasserscript_01

Short My_Schrein_Var
Short ChanceL
Short ChanceM
Short ChanceS
Short Button

If ( OnActivate == 1 )
If ( My_Schrein_Var == 1 ) ; My_Schrein_Var ist eine Global-Variable und wird durch das gesprch mit den NPC auf 1 gesetzt.
set My_Schrein_Var to 2
EndIf
EndIf

If ( My_Schrein_Var == 2 ) 
MessageBox "Willst du gegen ein" "Leichten gegner für 50Dr. Kämpfen" "Normalen gegner für 100Dr. Kämpfen" "Schweren gegner für 200Dr. Kämpfen" "Öhm nö heute doch nicht"
set My_Schrein_Var to 3
EndIf

If ( My_Schrein_Var == 4 )
set Button to getButtonPressed 

If ( Button == 0 ) ;Drückst du den ersten Button also leicht
If ( player -> GetItemCount "Gold_001" 50
player -> PositionCell x, y, z, "Name der Celle"
player -> RemoveItem "Gold_001" 50 ;hier wird den player Geld abgezockt
set ChanceL to Random 3 ;Chance wird zu Zufall 3 also es kann passieren das es 1, 2 oder 3 als Frame anzeigt. 
set My_Schrein_Var to 0
set Button to 0
return

Else

If ( Button == 1 )
If ( player -> GetItemCount "Gold_001" >= 100 )
player -> RemoveItem "Gold_001" 100
player -> PositionCell x, y, z, "Name der Celle"
set ChanceM to Random 3
set Button to 0
set My_Schrein_Var to 0
return

Else

If ( Button == 2 )
If ( player -> GetItemCount "Gold_001" >= 200 )
player -> RemoveItem "Gold_001" 200
player -> PositionCell x, y, z, "Name der Celle"
set ChanceS to Random 3
set Button to 0
set My_Schrein_Var to 0
return

Else 

set Button to 0
set My_Schrein_Var to 1
return

EndIf
EndIf
EndIf
EndIf
EndIf
EndIf
EndIf

If ( ChanceL == 1 )
placeATPC "ID-Monster leicht_01" 1 0 0 ;irgendeine Id deines Monster z.B My wasserratte
ElseIf ( ChanceL == 2 )
placeATPC "ID-Monster leicht_02" 1 0 0 ; hier die andere
ElseIf ( ChanceL == 3 )
placeATPC "ID-Monster leicht_03" 1 0 0 ; hier auch eine ander so das du immer eins von den 3monser bekommst welches weist du nciht
EndIf

If ( ChanceM == 1 )
placeATPC "ID-Monster Mittel_01" 1 0 0
ElseIf ( ChanceM == 2 )
placeATPC "ID-Monster Mittel_02" 1 0 0
ElseIf ( ChanceM == 3 )
placeATPC "ID-Monster Mittel_03" 1 0 0
EndIf

If ( ChanceS == 1 )
placeATPC "ID-Monster Schwer_01" 1 0 0
ElseIf ( ChanceS == 2 )
placeATPC "ID-Monster Schwer_02" 1 0 0
ElseIf ( ChanceS == 3 )
placeATPC "ID-Monster Schwer_03" 1 0 0
EndIf
End

Dieses Script bewirkt das wen du den NPC angesprochen hast der Schrein activiert wird und du nun ihn anklicken kannst darauf hin wird dir eine Frage gestellt gegen wen du kämpfen willst leicht M.... usw. nun wirst du dort hin teleportiert und der gegner einer von den 3en taucht auf das Geld wird dir dann abgezockt. das kommt auf den Schrein
 
Zuletzt bearbeitet:
wie gesagt, bitte seit net böse, aber ich bin lediglich mit der visual basic.net Programmiersprache vertraut und diese hier unterscheidet sich doch schon arg. desswegen fürchte ich, dass ich genausogut überhauptkeine Vorkenntnise haben kann...

Ich hatte nur Delphi-Vorkenntnisse und hab es kapiert. Das wirst du auch noch hinbekommen. Lies dir dazu aber UNBEDINGT eines der Scriptingtutorial durch (zB. MORROWIND Scripting for Dummies 8; bei Google; auf Englisch)


Zu den Scripts: Es ist kein Wunder, dass du nicht durchblickst, Lichtkrieger und ich haben zwei komplett andere Lösungswege gewählt. Lichtkrieger geht da mit einer Reihe von LeveledCreatures rein, die er dann zählt. Während ich normale Kreaturen nehme und diese dann durch mein eigenes Zufallscript überwache. Meine Methode hat den Vorteil, dass du (bzw. dein PI) weiß welche Monster erschaffen wurden und somit direkt auf sie zugreifen kann. Bei Lichtkriegers Lösung werden zwar irgendwelche Monster erschaffen, aber du weißt nicht welche und wie viele erschaffen werden.

Ich versuche mal eine Komplettlösung für dein Problem zu entwickeln.
Hier erst mal was ich für Bezeichnungen verwende:
my_door1 - Tür aus dem Raum
my_shrine1 - Schrein im Raum
my_monster1, my_monster2, my_monster3 - leichte Monster
my_monster4, my_monster5, my_monster6 - mittlere Monster
my_monster7, my_monster8, my_monster9 - schwere Monster
my_shrine_active, my_monster_anzahl, my_kill_anzahl, my_alle_grade, my_grad_aktuell - globale Variablen

Auf die Tür legst du folgendes Script:
begin my_door1_script

if ( OnActivate == 1 )
set my_shrine_active to 1
Activate
endif

end


Auf den Schrein legst du folgendes Script:
begin my_shrine1_script

short state
short zufall
short button
short count

if ( my_shrine_active == 1 )
return
endif

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

if ( state == 1 )
set button to GetButtonPressed
if ( button == 0 )
MessageBox "Wie schwer soll der Kampf sein?" "Leicht (50 Draken)" "Mittel (100 Draken)" "Schwer (200 Draken)"
set state to 2
set button to -1
endif
if ( button == 1 )
set state to 0
set button to -1
endif
endif

if ( state == 2 )
set button to GetButtonPressed
if ( button == 0 )
set my_grad_aktuell to 1
Player->PositionCell x-pos ypos z-pos z-rot "Kampfraum"
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
set state to 0
set button to -1
StartScript my_kontroll_script
endif
if ( button == 1 )
set my_grad_aktuell to 2
Player->PositionCell x-pos ypos z-pos z-rot "Kampfraum"
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_monster4" 1 128 0
elseif ( zufall < 66 )
PlaceAtPC "my_monster5" 1 128 0
else
PlaceAtPC "my_monster6" 1 128 0
endif
endif
set count to count - 1
endwhile
set state to 0
set button to -1
StartScript my_kontroll_script
endif
if ( button == 2 )
set my_grad_aktuell to 3
Player->PositionCell x-pos ypos z-pos z-rot "Kampfraum"
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_monster7" 1 128 0
elseif ( zufall < 66 )
PlaceAtPC "my_monster8" 1 128 0
else
PlaceAtPC "my_monster9" 1 128 0
endif
endif
set count to count - 1
endwhile
set state to 0
set button to -1
StartScript my_kontroll_script
endif
endif

end


Auf alle Monstertypen (1-9) legst du folgendes Script:

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


Dein NPC kann nun mit der globalen Variable my_alle_grade abfragen, ob alle Schwierigkeitsgrade bestanden wurden (dann ist diese 1).
Mit der globalen Variable my_shrine_active kann gesteuert werden, ob der Schrein funktioniert. Wenn du mit dem NPC sprichst musst du sie wieder auf 0 setzen, damit der Schrein wieder funktioniert.

Zsätzlich machst du noch dieses Script, das nirgendwo draufliegt:
my_kontroll_script

short belohnung
short schwierigkeit1
short schwierigkeit2
short schwierigkeit3
short test

if ( Player->OnDeath == 1 )
Player->Resurrect
Player->PositionCell xpos ypos zpos zrot "Schreinraum"
endif

if ( my_monster_anzahl == 0 )
PositionCell xpos ypos zpos zrot "Schreinraum"
MessageBox "Ihr habt gewonnen und erhaltet eine Belohnung."
if ( my_grad_aktuell == 1 )
set schwierigkeit1 to 1
Player->AddItem "Gold_001" 50
endif
if ( my_grad_aktuell == 2 )
set schwierigkeit2 to 1
Player->AddItem "Gold_001" 100
endif
if ( my_grad_aktuell == 3 )
set schwierigkeit3 to 1
Player->AddItem "Gold_001" 200
endif
if ( my_alle_grade == 0 )
set test to schwierigkeit1
set test to test + schwierigkeit2
set test to test + schwierigleit3
if ( test == 3 )
set my_alle_grade to 1
endif
endif
endif

end


PS: Das sind lange ungetestete Scripte. Ich übernehme keine Garantie, dass ich nicht irgendwo einen Befehl vergessen habe ;)
 
Zuletzt bearbeitet:
Ich habe jetzt nichts mehr hier noch an Infos zu geben aber da ihr jetzt das mit der Programmierer-Spache erwähnt hattet wollte ich nur sagen das ich NULL vorkenntnisse hatte. Ich habe es trotzdem verstanden. Ich muss troztdem manchmal nachfragen den keiner ist perfeckt.
 
also ich hab das jetzt mal so gemacht wie ihr killfetzer gesagt hat und...

an befehlen hast du ein "begin" und das aktivieren der Schreine in einem Dialog vergessen...
so nebenbei...

aber es funktioniert jetzt überhaupt nicht.

man geht ins haus (durch die Tür) und der Schrein ist aktiv. man kann ihn sofort benutzen. allerdings ist das egal, denn der script auf dem schrein scheint nicht zu starten!

der schrein hat bell1 als sound eingestellt und wenn man den Schrein anspricht, dann ertönt der Glockenschlag, (und der schrein dreht sich um 45°) aber mehr passiert nicht.
Auch nicht, wenn man den NPC anspricht.

dann hab ich mir mal den kontrollscript einfach mal versucht zu verstehen...
(Ich hab 3 Messageboxen eingeführt, damit ich auch sehe, dass ich was kriege ;))

Code:
begin my_kontroll_script

short belohnung
short schwierigkeit1
short schwierigkeit2
short schwierigkeit3
short test

if ( Player->OnDeath == 1 )
	Resurrect
	PositionCell 152 -2755 5665 0 "Terra, Monsterfarm"
endif

if ( my_monster_anzahl == 0 )
	PositionCell 152 -2755 5665 0 "Terra, Monsterfarm"MessageBox "Ihr habt gewonnen und erhaltet eine Belohnung."
	if ( my_grad_aktuell == 1 )
		set schwierigkeit1 to 1
		Player->AddItem "Gold_001" 50
		messagebox "Belohnung1"
	endif
	if ( my_grad_aktuell == 2 )
		set schwierigkeit2 to 1
		Player->AddItem "Gold_001" 100
		messagebox "Belohnung2"
	endif
		if ( my_grad_aktuell == 3 )
		set schwierigkeit3 to 1
		Player->AddItem "Gold_001" 200
		messagebox "Belohnung3"
	endif
	if ( my_alle_grade == 0 )
		set test to schwierigkeit1
		set test to test + schwierigkeit2
		set test to test + schwierigkeit3
		if ( test == 3 )
			set my_alle_grade to 1
		endif
	endif
endif

end

so...
nun habe ich entweder einen Fehler gesehen oder lerne durch diese Frage etwas hinzu ;)

if ( Player->OnDeath == 1 )
Resurrect
PositionCell 152 -2755 5665 0 "Terra, Monsterfarm"
endif

jedesmal, wenn der Spieler stribt kommt er an diese Position!
also auch, wenn er im restlichen Spiel stirbt?
(ich hab das noch nicht ganz verstanden, wann ein Script automatisch läuft und wann er gestartet werden muss und für was der Script dann gilt...)

if ( my_monster_anzahl == 0 )
PositionCell 152 -2755 5665 0 "Terra, Monsterfarm"MessageBox "Ihr habt gewonnen und erhaltet eine Belohnung."

das ist doch immer automatisch erfüllt, weil die variable My_monster_anzahl doch auf 0 gestartet wird, oder?
dann müsste man eigentlich doch eine dauermeldung bekommen und andauernd an diesen Ort gebeamt werden!?!

if ( my_grad_aktuell == 1 )
set schwierigkeit1 to 1
Player->AddItem "Gold_001" 50
messagebox "Belohnung1"
endif
if ( my_grad_aktuell == 2 )
set schwierigkeit2 to 1
Player->AddItem "Gold_001" 100
messagebox "Belohnung2"
endif
if ( my_grad_aktuell == 3 )
set schwierigkeit3 to 1
Player->AddItem "Gold_001" 200
messagebox "Belohnung3"
endif

dieser my_Grad_aktuell bleibt doch beständig bei einem Wert... also, da die vorrausgestellte bedingung immer erfüllt ist, wenn der Script gestartet ist und eine dieser Bedingungen einmal erfüllt bleibt, bis eine andere erfüllt wird müsste man ziemlich schnell ziemlich reich werden ;) (und viele Messageboxen bekommen...)

if ( my_alle_grade == 0 )
set test to schwierigkeit1
set test to test + schwierigkeit2
set test to test + schwierigkeit3
if ( test == 3 )
set my_alle_grade to 1
endif
endif

vorrausgesetzt, der Script wird öfter ausgeführt... ah, dann versteh ichs... ein gutes Beispiel dafür, wann man keine globalen variabeln benutzt ;)

aber sag mir jetzt nochmal, wofür du belohnung deklariert hast?
ich schau mir jetzt mal den script an dem Schrein genauer an... melde mich dann nochmal in ner halben stunde frühestens... wenn ihr nichts geschrieben habt dann eben als meine eigene Antwort ;)
 
Du könntest bei den Wiederbelebungscribt ja eine Globale-Variable machen:
Code:
If ( Tot == 1 )
if ( Player->OnDeath == 1 )
Resurrect
PositionCell 152 -2755 5665 0 "Terra, Monsterfarm"
set Tot to 0
endif

wenn du den Raum betriest machst du einfach noch ne zeile:
Code:
set Tot to 1

wenn du den Raum verlässt machst du einfach:
Code:
set Tot to 0
 
Okay, wie gesagt ist nicht perfekt :)

Zum Problem, dass der Schrein sofort aktiviert ist (ich dachte, das soll so sein):
Ändere im my_shrine1_script die Zeile if ( my_shrine_active == 1 ) in if ( my_shrine_active == 0 ) um.
In dem my_door1_script änderst du entsprechend set my_shrine_active to 1 in set my_shrine_active to 0.
Jetzt musst du deinem NPC im Topic noch den Befehl set my_shrine_active to 1 un die Resultbox schreiben.

Zum Problem des immer wieder belebens:
Ändere das my_kontroll_script so ab:
begin my_kontroll_script

short belohnung
short schwierigkeit1
short schwierigkeit2
short schwierigkeit3
short test

if ( GetPCCell "Kampfraum" == 1 )
if ( Player->OnDeath == 1 )
Player->Resurrect
Player->PositionCell xpos ypos zpos zrot "Schreinraum"
endif
endif

if ( my_monster_anzahl == 0 )
PositionCell xpos ypos zpos zrot "Schreinraum"
MessageBox "Ihr habt gewonnen und erhaltet eine Belohnung."
if ( my_grad_aktuell == 1 )
set schwierigkeit1 to 1
Player->AddItem "Gold_001" 50
endif
if ( my_grad_aktuell == 2 )
set schwierigkeit2 to 1
Player->AddItem "Gold_001" 100
endif
if ( my_grad_aktuell == 3 )
set schwierigkeit3 to 1
Player->AddItem "Gold_001" 200
endif
if ( my_alle_grade == 0 )
set test to schwierigkeit1
set test to test + schwierigkeit2
set test to test + schwierigleit3
if ( test == 3 )
set my_alle_grade to 1
endif
endif
StopScript my_kontroll_script
endif

end



Und weiter gehts:
dann müsste man eigentlich doch eine dauermeldung bekommen und andauernd an diesen Ort gebeamt werden!?!
die Variable my_monster_anzahl wird auf 0 gesetzt, sobald du alle Monster besiegt hast. Danach bekommst du deine Belohnung und das Script terminiert sich selbst (den Befehl hatte ich auch vergessen ;)). Neu aufgerufen wird das Script allerdings erst, wenn wieder neue Monster erzeugt sind.

dann müsste man eigentlich doch eine dauermeldung bekommen und andauernd an diesen Ort gebeamt werden!?!
Ähhm??? Hab mir das Script erst anders überlegt und dann scheinbar nicht mehr gelöscht.

der schrein hat bell1 als sound eingestellt und wenn man den Schrein anspricht, dann ertönt der Glockenschlag, (und der schrein dreht sich um 45°) aber mehr passiert nicht.
Auch nicht, wenn man den NPC anspricht.
Also, das ist mir ein absolutes Rätsel. :huh:
Ist dein Schrein auch wirklich ein Objekt des Typs Activator? Wenn nein, könnte es daran liegen.
 
Zuletzt bearbeitet:
Sword schrieb:
if ( Player->OnDeath == 1 )
Resurrect
PositionCell 152 -2755 5665 0 "Terra, Monsterfarm"
endif
Aua, aua, aua- wo ist denn das Script dran? Ist es ein globales Script und wird durch ein globales Script gestartet? Dann wird es abstürzen...

Ist es eines das von irgendeinem Objekt gestartet wird oder an einem Objekt hängt? Dann wird das Objekt wiederbelebt (ist es kein NPC und keine Kreatur wird es abstürzen) und das Objekt wird umpositioniert.

da musst Du unbedingt hinschreiben:

Player-> Ressurect
Player-> Positioncell x y z rot "cellid"

Ausserdem ganz wichtig:

wenn Du den Player in einem Script umpositionierst dann wird das Script an der Stelle unterbrochen. Je nachdem ob das Script an einem tragbaren Objekt in des Spieler Inventar ist(1) oder ob es an einem lokalen Objekt in einer Zelle ist(2) oder ob das Script global läuft(3) wird danach das Spiel in eine Endlosschleife von Teleports ausarten(1), nach dem Teleport garnichts mehr aus dem Script ausgeführt(2) oder das Script wieder oben gestartet(3) wobei aber der Interpreter einen Bug hat und ins nächste If reingeht auch wenn es nicht zutrifft! Im letzten Fall (3) also das Script immer so stricken das nach dem "Player-> Position(cell) x y z rot cellid" nichts mehr kommt bzw. eine return- oder stopscript-Anweisung steht
 
Eine Tür ist dazu da sich zu drehen und einen Sound abzuspielen oder den Spieler zu teleportieren und dabei einen Sound abzuspielen.
Dies sind Aktionen, die die Tür durchführen will. Du willst aber, dass sie dein Script ausführt. (Theoretisch ginge es auch mit einer Tür, allerdings müsste ich dann das Script oben umschreiben)

Also: Lösche die Tür, erstelle einen Activator mit gleichem Aussehen und ID und leg mein Script drauf.
 
Killfetzer, an Dich nochmal:
So wie es aussieht ist das Teleoprtscript also ein aus einem lokalen Script gestartetes global laufendes (auch "targeted" bezeichnetes) Script. D.h. es läuft global weiter.
Darum vollzieh das nach: Die Position-Anweisung muss ans Ende des Scripts bzw. hinter der Position-Anweisung muss das Script mit return verlassen werden. Ansonsten wird dem Programm dummerweise egal sein in welcher Zelle sich der PC befindet und die erste, obere if-Bedingung wird nach dem Teleport ausgeführt, auch wenn diese Bedingug nicht erfüllt ist. Ein Bug im Interpreter, wie schon erwähnt...
 
also ich gebe reneminer recht und gebe das Problem an Killfetzer weiter ;)
(auch wenn ich nur die hälfte versteh...)

ich hab jetzt mal das so umgeschrieben, wie ihr es wolltet und ein Activator statt Tür gemacht...

Wenn ich den Schreinanklicke wird der Schrein an die Stelle teleportiert, an die der Spieler nach dem Tod oder nach dem Sieg hinteleportiert werden soll und fragt mich ob ich kämpfen will...
weder bei ja, noch bei nein passiert etwas...
(das heißt: vielleicht doch, aber ich seh das nicht mehr...)

nochmal die 4 Scripte:

die Tür:
Code:
begin my_door1_script

if ( OnActivate == 1 )
set my_shrine_active to 0
Activate
endif

end

der Schrein:
Code:
begin my_shrine1_script

short state
short zufall
short button
short count

if ( my_shrine_active == 0 )
return
endif

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

if ( state == 1 )
set button to GetButtonPressed
if ( button == 0 )
MessageBox "Wie schwer soll der Kampf sein?" "Leicht (50 Draken)" "Mittel (100 Draken)" "Schwer (200 Draken)"
set state to 2
set button to -1
endif
if ( button == 1 )
set state to 0
set button to -1
endif
endif

if ( state == 2 )
set button to GetButtonPressed
if ( button == 0 )
set my_grad_aktuell to 1
Player->PositionCell -433 -1680 0 0 "Terra, Monsterfarm"
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_mudcrab" 1 128 0
elseif ( zufall < 66 )
PlaceAtPC "My_rat_water" 1 128 0
else
PlaceAtPC "my_Slaughterfish_Small" 1 128 0
endif
endif
set count to count - 1
endwhile
set state to 0
set button to -1
StartScript my_kontroll_script
endif
if ( button == 1 )
set my_grad_aktuell to 2
Player->PositionCell -433 -1680 0 0 "Terra, Monsterfarm"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_slaughterfish" 1 128 0
elseif ( zufall < 66 )
PlaceAtPC "My_guar_water" 1 128 0
else
PlaceAtPC "my_dreugh" 1 128 0
endif
endif
set count to count - 1
endwhile
set state to 0
set button to -1
StartScript my_kontroll_script
endif
if ( button == 2 )
set my_grad_aktuell to 3
Player->PositionCell -433 -1680 0 0 "Terra, Monsterfarm"
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_kagouti_water" 1 128 0
elseif ( zufall < 66 )
PlaceAtPC "My_Qualle" 1 128 0
else
PlaceAtPC "my_Haizahn" 1 128 0
endif
endif
set count to count - 1
endwhile
set state to 0
set button to -1
StartScript my_kontroll_script
endif
endif

end

Kontrollscript:
Code:
begin my_kontroll_script

short belohnung
short schwierigkeit1
short schwierigkeit2
short schwierigkeit3
short test
if ( GetPCCell "Terra, Monsterfarm" == 1 )
	if ( Player->OnDeath == 1 )
		Player->Resurrect
		PositionCell 152 -2755 5665 0 "Terra, Monsterfarm"
endif
endif

if ( my_monster_anzahl == 0 )
	PositionCell 152 -2755 5665 0 "Terra, Monsterfarm"MessageBox "Ihr habt gewonnen und erhaltet eine Belohnung."
	if ( my_grad_aktuell == 1 )
		set schwierigkeit1 to 1
		Player->AddItem "Gold_001" 50
		messagebox "Belohnung1"
	endif
	if ( my_grad_aktuell == 2 )
		set schwierigkeit2 to 1
		Player->AddItem "Gold_001" 100
		messagebox "Belohnung2"
	endif
		if ( my_grad_aktuell == 3 )
		set schwierigkeit3 to 1
		Player->AddItem "Gold_001" 200
		messagebox "Belohnung3"
	endif
	if ( my_alle_grade == 0 )
		set test to schwierigkeit1
		set test to test + schwierigkeit2
		set test to test + schwierigkeit3
		if ( test == 3 )
			set my_alle_grade to 1
		endif
	endif
StopScript my_kontroll_script
endif

end

monster:
Code:
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

Dialog beim NPC result: set My_Shrine_active to 1
 
So um Rene zufrieden zu stellen, hab ich das Script ein wenig "umsortiert":

begin my_shrine1_script

short state
short zufall
short button
short count

if ( my_shrine_active == 0 )
return
endif

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

if ( state == 1 )
set button to GetButtonPressed
if ( button == 0 )
MessageBox "Wie schwer soll der Kampf sein?" "Leicht (50 Draken)" "Mittel (100 Draken)" "Schwer (200 Draken)"
set state to 2
set button to -1
endif
if ( button == 1 )
set state to 0
set button to -1
endif
endif

if ( state == 2 )
set button to GetButtonPressed

if ( button == 0 )
set my_grad_aktuell to 1
set my_monster_anzahl to Random 3
set my_monster_anzahl to my_monster_anzahl + 1
set count to my_monster_anzahl
set state to 3
set button to -1
StartScript my_kontroll_script
Player->PositionCell -433 -1680 0 0 "Terra, Monsterfarm"
return
endif

if ( button == 1 )
set my_grad_aktuell to 2
set anzahl to Random 3
set my_monster_anzahl to my_monster_anzahl + 1
set count to my_monster_anzahl
set state to 3
set button to -1
StartScript my_kontroll_script
Player->PositionCell -433 -1680 0 0 "Terra, Monsterfarm"
return
endif

if ( button == 2 )
set my_grad_aktuell to 3
Player->PositionCell -433 -1680 0 0 "Terra, Monsterfarm"
set anzahl to Random 3
set my_monster_anzahl to my_monster_anzahl + 1
set count to my_monster_anzahl
set state to 3
set button to -1
StartScript my_kontroll_script
Player->PositionCell -433 -1680 0 0 "Terra, Monsterfarm"
return
endif

endif

if ( state == 3 )

if ( my_grad_aktuell == 1 )
while ( count > 0 )
set zufall to Random 100
if ( zufall < 33 )
PlaceAtPC "my_mudcrab" 1 128 0
elseif ( zufall < 66 )
PlaceAtPC "My_rat_water" 1 128 0
else
PlaceAtPC "my_Slaughterfish_Small" 1 128 0
endif
endif
set count to count - 1
endwhile
endif

if ( my_grad_aktuell == 2 )
while ( count > 0 )
set zufall to Random 100
if ( zufall < 33 )
PlaceAtPC "my_slaughterfish" 1 128 0
elseif ( zufall < 66 )
PlaceAtPC "My_guar_water" 1 128 0
else
PlaceAtPC "my_dreugh" 1 128 0
endif
endif
set count to count - 1
endwhile
endif

if ( my_grad_aktuell == 3 )
while ( count > 0 )
set zufall to Random 100
if ( zufall < 33 )
PlaceAtPC "My_kagouti_water" 1 128 0
elseif ( zufall < 66 )
PlaceAtPC "My_Qualle" 1 128 0
else
PlaceAtPC "my_Haizahn" 1 128 0
endif
endif
set count to count - 1
endwhile
endif

endif

end


Zusätzlich noch diese Änderung:

begin my_kontroll_script

short belohnung
short schwierigkeit1
short schwierigkeit2
short schwierigkeit3
short test

if ( belohnung == 1 )
StopScript my_kontroll_script
endif

if ( GetPCCell "Terra, Monsterfarm" == 1 )
if ( Player->OnDeath == 1 )
Player->Resurrect
Player->PositionCell 152 -2755 5665 0 "Terra, Monsterfarm"
return
endif
endif

if ( my_monster_anzahl == 0 )
MessageBox "Ihr habt gewonnen und erhaltet eine Belohnung."
if ( my_grad_aktuell == 1 )
set schwierigkeit1 to 1
Player->AddItem "Gold_001" 50
messagebox "Belohnung1"
endif
if ( my_grad_aktuell == 2 )
set schwierigkeit2 to 1
Player->AddItem "Gold_001" 100
messagebox "Belohnung2"
endif
if ( my_grad_aktuell == 3 )
set schwierigkeit3 to 1
Player->AddItem "Gold_001" 200
messagebox "Belohnung3"
endif
if ( my_alle_grade == 0 )
set test to schwierigkeit1
set test to test + schwierigkeit2
set test to test + schwierigkeit3
if ( test == 3 )
set my_alle_grade to 1
endif
endif
set belohnung to 1
Player->
PositionCell 152 -2755 5665 0 "Terra, Monsterfarm"
endif

end


WICHTIG:
- Wenn du Teleportanweisungen gibst, musst du acuh angeben, wer teleportiert werden soll ("NPC_ID->").
- Nun wird im Kontrollscript die Variable belohnung doch wieder benötigt. Dafür weiß ich jetzt auch wieder warum ich die eingebaut habe: Rene hatte doch einen Einfluss auf mich ;)
 
Zuletzt bearbeitet:
Killfetzer schrieb:
So um Rene zufrieden zu stellen, hab ich das Script ein wenig "umsortiert":
Du sollst mich nicht zufrieden stellen sondern funktionierende Scripts schreiben damit die Spieler nachher keine Krise kriegen :D
Und dazu ist es wichtig das man die Eigenwilligkeiten vom TES-CS kennt und berücksichtigt. Und weil sie nicht jeder kennen kann der nicht schon ein paar mal über solche Merkwürdigkeiten gestolpert ist haben wir hier solche Threads in denen jeder schreiben kann was er zur Materie weiss oder meint oder meint zu wissen :lol:

Ich hätte da noch einige "komische" Eigenheiten, die jetzt alle hier aufzuzählen würde aber den Fragenden (Sword) sicher vollends verwirren. Deswegen finde ich es wichtig das man nicht fertige Scripte liefert sondern dem Fragesteller das Denken und Nachvollziehen selbst überlässt. Schliesslich lernt man dabei mehr als beim Copy&Paste einiger ellenlanger Scripts. Ausserdem gibt es ja meist mehrere Wege ein Problem zu lösen und man soll dem noch übenden Programmierer die Übung nicht völlig abnehmen: Schliesslich steigt dessen Erfahrung nur durch eigene Erkenntnisse und nur mit Hilfe dieser Kenntnisse wird man später in der Lage sein, eigene, funktionierende Scripts zu schreiben.

Entschuldigt diese Ausführungen- back to Topic: nächste Scriptfrage bitte :)
 
also das funktioniert jetzt... beinahe...

man kann nur einmal Kämpfen.
danach, unabhängig davon, welche Kampfstärke man genommen hat, bleibt der Schrein inaktiv. also er ist inaktiv, wenn man ihn nochmal anspricht und wenn man das topic beim NPC anspricht...

übrigens:
ich hab eigentlich einen Container genommen und ihn an die gewünschte Stelle getan, um an die gewünschte Stelle teleportiert zu werden.
tja...
das sollte eigentlich ganz oben im Raum sein genauer auf der z-coordinate 0...
also auf der Wasseroberfläche.

aber man kommt ziemlich weit darunter hin, genauer am Boden im raum... und genau da kommen auch die ganzen Monster hin...
direkt neben den Spieler...
der kleine Schlachterfisch ist zum beispiel halb im Boden steckengeblieben...

dann hab ich noch ein paar creaturen neu gemacht... My_mudcrab funktioniert ganz gut, schwimmt sehr schön...
aber my_rat_water läuft nur am Boden lang... dabei habe ich swim eingestellt! sind die vielleicht zu schwer?
 
Das mit dem Walk, Fly+ Swim darfst Du nicht so wörtlich nehmen. Ob nun die Ratte an Land oder im Wasser ist wird ihre Fortbewegungs-Animation trotzdem nur die bereits bekannte, vorhandene bleiben. Es macht nur den Unterschied:
Swim: säuft nicht ab und benutzt im Wasser Schwimm-Animationen falls vorhanden, ansonsten wird die Walk bzw. Run-Animation genommen, ähnlich auch bei Fly
Fly: stürzt nicht ab bzw. braucht keinen Boden unter den Füssen und macht keine Schritt-Geräusche beim walken

Walk: default
 
Deswegen finde ich es wichtig das man nicht fertige Scripte liefert sondern dem Fragesteller das Denken und Nachvollziehen selbst überlässt. Schliesslich lernt man dabei mehr als beim Copy&Paste einiger ellenlanger Scripts. Ausserdem gibt es ja meist mehrere Wege ein Problem zu lösen und man soll dem noch übenden Programmierer die Übung nicht völlig abnehmen: Schliesslich steigt dessen Erfahrung nur durch eigene Erkenntnisse und nur mit Hilfe dieser Kenntnisse wird man später in der Lage sein, eigene, funktionierende Scripts zu schreiben.

Das sehe ich genauso. Deswegen versuche ich ja auch immer kurz zu erklären, wie genau mein Script funktioniert und warum. Und deshalb liefere ich ja auch nur immer Schemata (damit man wenigstens noch an der passenden Stele die eigene ID einsetzen muss).
Und dass mit den mehreren Lösungen hat Sword ja schon verwirrt, als Lichtkrieger und ich hier gleichzeitig zwei verschiedene Lösungswege entwickelt haben ;)


man kann nur einmal Kämpfen.
danach, unabhängig davon, welche Kampfstärke man genommen hat, bleibt der Schrein inaktiv. also er ist inaktiv, wenn man ihn nochmal anspricht und wenn man das topic beim NPC anspricht...

Ja, ich habe einen einzigen kurzen Befehl vergessen wieder einzufügen beim Umsortieren.
Deshalb wird der Schrein nach der Benutzung nicht mehr auf seine Grundstellung zurückgesetzt.

Da ReneMiner meint, man müsste das Scripen auch verstehen lernen:
Du musst nur an der richtigen Stelle eine der Scriptvariablen wieder auf den Startwert setzten. Überleg mal wo das sein muss.

Wenn du es doch schnell haben willst:
füge am Ende des if ( state == 3 ) - Blocks noch diese Zeile ein (zwischen den beiden letzten endifs):
set state to 0