Construction Set Der Scriptthread

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

  1. Killfetzer

    Killfetzer Super-Moderator Mitarbeiter

    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.
     
  2. The Nici

    The Nici Gebannter Benutzer

    bei mir gehts. weil ich auch das nicht benutzt hab. :D
     
  3. ReneMiner

    ReneMiner Bürger

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

    Lichtkrieger Abenteurer

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

    Killfetzer Super-Moderator Mitarbeiter

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

    Lichtkrieger Abenteurer

    ohh Danke,
    das script liegt auf alle drei Arbeiter(NPC's)
    wie soll ich sicher gehen das das nur einmal durch laufen wird.
     
  7. Killfetzer

    Killfetzer Super-Moderator Mitarbeiter

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

    Lichtkrieger Abenteurer

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

    Killfetzer Super-Moderator Mitarbeiter

    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 :)
     
  10. Lichtkrieger

    Lichtkrieger Abenteurer

    Ok was du sagst ist Gesetz :lol:
     
  11. Sword

    Sword Neuankömmling

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

    Lichtkrieger Abenteurer

    Hallo,
    1.
    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.
     
  13. Killfetzer

    Killfetzer Super-Moderator Mitarbeiter

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

    Sword Neuankömmling

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

    Killfetzer Super-Moderator Mitarbeiter

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

    Sword Neuankömmling

    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!
     
  17. Lichtkrieger

    Lichtkrieger Abenteurer

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

    Killfetzer Super-Moderator Mitarbeiter

    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, ...)
     
  19. Sword

    Sword Neuankömmling

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

    Killfetzer Super-Moderator Mitarbeiter

    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: 16. August 2006
    Sword gefällt das.
  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