Construction Set Der Scriptthread

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

  1. UglyBassPlayer

    UglyBassPlayer Fremdländer

    Hallo,
    ich hab ein Problem mit dem folgenden Script:
    Scruffy soll die ganze Zeit still in der Ecke stehen, bis zum Journaleintrag "my_toilet_blocked" == 30.
    Danach soll er durch den Raum gehen, einige Sekunden stehenbleiben (den Timer hab ich noch rausgelassen, will erstmal dass das andere funktioniert...), zurück zu seiner Ausgangsposition gehen und dann den Player ansprechen. Er soll dann wieder wie am Anfang in seiner Ecke stehen.

    Der Fehler ist: er setzt sich gar nicht erst in Bewegung. Ich hab in einem Test-Plugin mal ein ähnliches Script geschrieben, und da hats einwandfrei funktioniert... Hoffe dass mir jemand helfen kann!


    Code:
    begin my_f_scruffy_script
    
    short ControlVar
    short nolore
    short TravelState
    short doOnce
    
    
    if ( ControlVar == 0 )
    	set nolore to 0			;deaktiviert allgemeine Dialogoptionen
    	set ControlVar to 1		;fängt Schleife ab
    	set TravelState to 0					
    endif
    
    if ( MenuMode == 1 )
    	return
    endif
    
    if ( TravelState == 0 )
    	AiWander 0, 0, 0, 75, 5, 0, 5, 5, 0, 0, 5, 5	;Scruffy steht in der Ecke, idle-Bewegungen
    	set TravelState to 1
    endif
    
    if ( TravelState == 1 )
    	if ( GetJournalIndex "my_toilet_blocked" == 30 )
    		set TravelState to 5
    	endif
    ;******************* Scruffy kriegt Eimer und Kelle und startet Richtung Klo
    elseif ( TravelState == 5 )
    	AITravel 1256, -3993, 449, 0,0,3  		;geht Richtung Klo
    	set TravelState to 10
    
    elseif ( TravelState == 10 )
    	if ( GetAIPackageDone == 1 )			;hat Klo erreicht
    		set TravelState to 40	
    	endif
    
    elseif ( TravelState == 40 )
    	AITravel 1236, 4426, 448, 0,0,60		; geht zurück zum Ausgangspunkt in der Ecke
    	set TravelState to 50
    	
    elseif ( TravelState == 50 )
    	if ( GetAIPackageDone == 1 )			;hat die Ecke erreicht
    		set TravelState to 7         
    	endif
    
    elseif ( TravelState == 70 )
    	AiWander 0, 0, 0, 75, 5, 0, 5, 5, 0, 0, 5, 5	;nach dem Reperaturversuch
    	set TravelState to -1
    	set doOnce to 1
    endif
    
    if ( doOnce == 1 )
    	if ( GetDistance Player <= 100 )
    		if ( GetJournalIndex "my_toilet_blocked" == 30 )
    			if ( getLOS Player == 1 )
    				ForceGreeting
    				set doOnce to -1
    			endif
    		endif
    	endif
    endif
    end
     
  2. Dante117

    Dante117 Abenteurer

    hi leute^^

    ich hätte auch mal wieder ein problem und zwar mit einem script das bewirken soll das wenn man ihn aktiviert eine messagebox erscheint, in der eine frage formuliert ist, und man 2 antworten zur wahl hat. wenn man die erste wählt sollen gewisse werte auf einen ebenso bestimmten wert gehoben werden wenn man den 2ten button drückt soll die messagebox geschlossen werden und der gegenstand soll danach wieder bei aktivierung die messagebox öffnen
    Short controlvar
    Short button



    If ( OnActivate == 1 ) ; aktiviert den kelch
    If ( controlvar == 0)

    MessageBox "Wollt ihr aus dem Kelch trinken", "Ja", "Nein",
    Set controlvar to 1
    if ( controlvar == 1 )
    set button to GetButtonPressed
    if ( button == -1 )
    return
    elseif ( button == 0 )
    MessageBox "Ihr Spürt das Blut des Gottes in euren Adern brennen"
    Activate
    set controlvar to 2
    Endif

    if ( controlvar == 2)
    Player -> Setstrength, 100
    endif
    endif
    endif
    endif
    end


    bitte um hilfe^^
    mfg Dante
     
    Zuletzt bearbeitet: 21. November 2008
  3. Mytor

    Mytor Fremdländer

    Probiere das mal.

    Begin god_blood_script

    short questionState
    short button
    short p_strength

    If ( OnActivate == 1)
    Set questionState to 1
    Return
    EndIf

    If ( questionState == 0 )
    Return
    EndIf

    If ( questionState == 1 )
    MessageBox "Wollt Ihr aus dem Kelch trinken?" "Ja" "Nein"
    Set questionState to 2
    Return
    EndIf

    If ( questionState == 2 )
    Set button to GetButtonPressed
    If ( button == 0 ) ; Frage wurde mit Ja beantwortet
    Set p_strength to ( ( Player->GetStrength ) + 100 )
    Player->SetStrength, p_strength
    Messagebox "Ihr spürt das Blut des Gottes in euren Adern brennen"
    Set questionState to 0
    EndIf

    If ( button == 1 )
    Set questionState to 0
    EndIf

    EndIf

    End god_blood_script
     
    Dante117 gefällt das.
  4. Dante117

    Dante117 Abenteurer

    Ganz großes dankefein! Das script funktioniert einwandfrei.Nur das ich den kelch mehrfach aktivieren kann ist etwas imba^^
     
  5. Mytor

    Mytor Fremdländer

    Das könnte man mit einer "DoOnce"-Abfrage regeln, wobei das wahrscheinlich durch den "72 Std. Bug" umgangen werden kann.

    Alternativ könnte man den Kelch danach disablen, wie den Bittercup beim Kriegergildenquest (Bittercup-Script). Zur Not könnte der Kelch mit Script, nach dem Trinken, ja gegen einen Kelch ohne Script ausgetauscht werden. ;)
     
  6. Dante117

    Dante117 Abenteurer

    mhhh das mit dem austauschen find ich da wohl am passendsten mal sehen ob ich irgendwo auch gefüllte kelch-meshes herbekomme
     
  7. Tilon

    Tilon Neuankömmling

    Also da ich an einer Widerstandsgilde arbeite habe ich eine Frage wie kann ich etwas an einem bestimmten Ort erscheinen lassen wenn der Spieler einen bestimmten Tagebuch eintrag bekommen hat/jemand bestimmtes gestorben ist.
    Tagebucheintrag Feuerbuch 800

    Und Erscheinen soll das Item Blutsopfer.7,02


    Sterben soll die Person Seperat.4

    Erscheinen soll das Item Blutopfer.7,1


    /////

    Bitte auch sagen wie ich Dinge verschwinden lassen kann
    __

    Danke
     
  8. Killfetzer

    Killfetzer Super-Moderator Mitarbeiter

    Sachen Erscheinen und Verschwinden lassen kannst du einfach mit dem Enable/Disable-Befehl.

    Um zum Beipiel bei einem bestimmten Tagebucheintrag ein ein Objekt erscheinen zu lassen, reicht folgendes Script

    Code:
    begin my_scriptname
    
    short state
    
    if ( state == 0 )
      Disable
      set state to 1
    endif
    
    if ( state == 1 )
      if ( GetJounalIndex "Tagebuchthema" == Indexwert )
        Enable
        set state to 2
      endif
    endif
    
    end
     
    Tilon gefällt das.
  9. Silbermond

    Silbermond Neuankömmling

    Ich möchte 6 Glocken in einer bestimmten Reihenfolge vom Spieler läuten lassen. Ich weiß, dass es in Bloodmoon an einer Stelle genauso etwas gab, aber leider finde ich das Script dazu nicht. Auf den Glocken liegt immer nur ein Script, dass beim Aktivieren einen bestimmten Ton spielt, aber ich habe nirgendwo ein Script gefunden, das abfragt, ob es in einer bestimmten Reihenfolge gemacht wurde.
    Das Script bei mir funktioniert leider nicht.

    Man muss, bevor man die Melodie spielt, an einem "Traumschrein" einen Schalter betätigen, womit man die globale Variable zz1_glockevar von 0 auf 1 setzt. Das funktioniert auch. Allerdings funktioniert es bei dem Script, das auf meiner ersten zu läutenden Glocke liegt, nicht, die globale Variable zz1_melodievar von 0 auf 1 zu setzen. Eigentlich sollte bei jeder richtig aktivierten Glocke die Variable zz1_melodievar um eins erhöht werden.

    begin zz1_bell4script
    short status
    if ( status == 0 )
    set status to onactivate
    elseif ( status == 1 )

    if ( zz1_melodievar == 0 )
    if ( zz1_glockevar == 0 );wenn die Glocke nur geläutet wird, um den Ton zu hören - bis hierher funktioniert es


    playsound3D "bell4"
    set status to 0


    elseif ( zz1_glockevar == 1 ); wenn die Glocke geläutet wird, um den 1. Ton einer Melodie zu spielen, soll die Globale Variable zz1_melodievar von 0 auf 1 gesetzt werden, das funktioniert leider nicht


    playsound3D "bell4"
    set zz1_melodievar to 1
    set status to 0
    endif

    elseif ( zz1_melodievar >= 1 ) ; wenn die Glocke zu einem anderen Zeitpunkt geläutet wird, als beim 1. Ton der Melodie, soll ein Feuerzauber den Spieler treffen. das funktioniert auch nicht.

    playsound3D "bell4"
    "zz1_dummycaster1"->cast "zz1_firespell" player
    messagebox, "Das war der falsche Ton, du musst von vorne beginnen. Gehe wieder zum Traumschrein."
    set zz1_melodievar to 0
    set zz1_glockevar to 0
    set status to 0
    endif
    endif
    end
     
    Zuletzt bearbeitet: 7. Dezember 2008
  10. £exa

    £exa Freund des Hauses

    Eigentlich ist das gar nicht so schwer.

    Du sagst das Script auf dem Schrein funktioniert und setzt die Variable korrekt auf 1? Gut, dann hier das Glockending, du brauchst sechs davon, X steht für die Glockennummer.

    Code:
    begin zz1_bellscript_X
    IF ( menumode == 1 )
     return
    EndIF
    
    IF ( OnActivate == 0 )
     return
    EndIF
    
    playsound3D "Bell[X]" ;Nummer des Glockentons ergänzen.
    
    IF ( zz1_glockevar == 0 ) ;Testhören
     return
    EndIF
    
    IF ( zz1_melodievar != [Reihenfolgenr.] ) ;Zahl einsetzen
     Cast "zz1_firespell" player
     MessageBox, "Das war der falsche Ton, du musst von vorne beginnen. Gehe wieder zum Traumschrein."
     Set zz1_melodievar to 0
     Set zz1_glockevar to 0
     return
    EndIF
    
    Set zz1_melodievar to ( zz1_melodievar + 1 )
    ;richtige Reihenfolge, nächste Glocke scharf schalten.
    ;bei der letzten kann ein anderer Befehl gesetzt werden.
    
    end
    Dieses universelle Script kann auf alle Glocken gepackt werden, natürlich jeweils modifiziert in Sachen "SoundID" und Glockennummer, die dann halt auf der ersten Glocke mit 0 beginnt. Der Traumschrein muß bei Aktivierung auch die Global zz1_melodievar immer auf 0 setzen, sonst gibt das Chaos... ^^

    Viel Erfolg... :)
     
    Silbermond gefällt das.
  11. Silbermond

    Silbermond Neuankömmling

    Danke für die schnelle Antwort, es funktioniert jetzt, trotzdem würde mich interessieren, wo bei mir der Fehler lag :)
     
  12. Ich brauche mal eure Hilfe bei meinem Script. Und zwar soll folgendes passieren: Der NPC bzw. die Kreatur soll tot sein. Wenn der Spieler dann auf ihn zu geht soll sie wiederauferstehen und kämpfen. Habe hier schon einmal ein Script. Das Problem daran ist, dass der Gegner zwar aufersteht, aber gleich wieder umfällt :(


    short controlvar

    If ( controlvar == 0 )
    If ( GetDistance, Player < 256 )
    SetHealth, 400
    Resurrect
    PlaySound, "_sky01"
    set controlvar to 1
    endif
    endif
     
  13. Pagan

    Pagan Reisender

    Könnte vielleicht daran liegen, dass du das "ressurect" vor das Sethealth setzen musst, damit der NPC nachdem er aufersteht die 400 HP hat, und nicht davor. ^^'

    Pagan

    PS. Also so ungefähr:

    Code:
    short controlvar
    
    If ( controlvar == 0 )
    If ( GetDistance, Player < 256 )
    Resurrect
    SetHealth, 400
    PlaySound, "_sky01"
    set controlvar to 1
    endif
    endif 
     
    1 Person gefällt das.
  14. Oh ja daran lag es wirklich. Habe ich total übersehen danke dir.
     
  15. Mytor

    Mytor Fremdländer

    Beim resurrect bekommt die Kreatur wieder die Grundwerte aus dem CS. Wurde dort bei Health der Wert 0 vorgegeben, wird wahrscheinlich nicht einmal ein Sethealth sie anschließend am Leben erhalten können.
    Die alternative Möglichkeit wäre dann, das Health der Kreatur im CS auf einen passenden Wert zu setzen und sie per Distanzcheck zu töten.
     
  16. Doch es geht so wie es da steht. Nur muss eben das resurrect als erstes vor dem set health stehen
     
  17. Skuzzlebutt

    Skuzzlebutt Abenteurer

    Hallo ich(scriptnoob) bräuche ein Script für meinen EimerMod

    es sollte so funktionieren das ich es auf ein Misc Item legen kann welches bei der aufnahme durch ein anderes ersetzt wird so dass das neue Item im Inventar erscheint und das alte aus dem Spiel entfernt wird :? ist das überhaupt möglich? :huh:

    kann mir wer eins machen? ich werde ihn dann auch in den Credits vermerken :)
     
  18. Pagan

    Pagan Reisender

    Code:
    Begin eimer_script 
    
    if ( OnActivate = 1 ) 
    delete 
    Player-> AddItem "ID des Gegenstandes" 1 
    endif 
    
    End
    Müsste so eigentlich klappen. Wenn nicht, sag bescheid (vergesse manchmal die einfachsten Scriptregeln, daher kann das schon mal passieren). :-D

    Pagan
     
    Skuzzlebutt gefällt das.
  19. Skuzzlebutt

    Skuzzlebutt Abenteurer

    Code:
    Script Error
    
    Script eimer_script
    Script command "delete" not found on line 4.
    delete
    
    
    Script eimer_script
    Miss matched if/else/endif starting on line 3.
    
    hab ich was falsch gemacht :? :(
     
  20. Pagan

    Pagan Reisender

    Ne, du nicht, aber ich, das muss nicht delete heißen, sondern "disable". :-D

    Pagan
     
    Skuzzlebutt 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