Construction Set Der Scriptthread

Dieses Thema im Forum "[MW] Plugins und Mods" wurde erstellt von The Nici, 25. April 2006.

  1. Sword

    Sword Neuankömmling

    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: 16. August 2006
  2. ReneMiner

    ReneMiner Bürger

    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...
     
  3. Lichtkrieger

    Lichtkrieger Abenteurer

    Ich weis nicht ob es den Befehl GetCount gibt. Ich glaube nicht.
    Da du gesagt hast:
    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.
    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.
     
  4. Sword

    Sword Neuankömmling

    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...
     
  5. Lichtkrieger

    Lichtkrieger Abenteurer

    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: 16. August 2006
  6. Killfetzer

    Killfetzer Super-Moderator Mitarbeiter

    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: 17. August 2006
  7. Lichtkrieger

    Lichtkrieger Abenteurer

    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.
     
  8. Sword

    Sword Neuankömmling

    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 ;)
     
  9. Lichtkrieger

    Lichtkrieger Abenteurer

    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
     
  10. Killfetzer

    Killfetzer Super-Moderator Mitarbeiter

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

    Ähhm??? Hab mir das Script erst anders überlegt und dann scheinbar nicht mehr gelöscht.

    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: 17. August 2006
  11. ReneMiner

    ReneMiner Bürger

    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
     
  12. Sword

    Sword Neuankömmling

    also der schrein ist typ door...
    Was ist der unterschied?
     
  13. Killfetzer

    Killfetzer Super-Moderator Mitarbeiter

    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.
     
  14. ReneMiner

    ReneMiner Bürger

    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...
     
  15. Sword

    Sword Neuankömmling

    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
     
  16. Killfetzer

    Killfetzer Super-Moderator Mitarbeiter

    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: 18. August 2006
  17. ReneMiner

    ReneMiner Bürger

    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 :)
     
  18. Sword

    Sword Neuankömmling

    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?
     
  19. ReneMiner

    ReneMiner Bürger

    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
     
  20. Killfetzer

    Killfetzer Super-Moderator Mitarbeiter

    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 ;)


    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
     
  21. Werbung (Nur für Gäste)
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden