Construction Set Skriptthread zum Construction Set

Dieses Thema im Forum "[Obl] PlugIns und Mods" wurde erstellt von Alexi, 2. April 2007.

  1. Diarrhoe

    Diarrhoe Vertrauter

    Wo wird die Variable "THIS" gesetzt? In welcher Blockart? Ich würde die Variable im Übrigen nicht unbedingt "THIS" nennen, weil "this" ein CS-Befehl mit der gleichen Funktion wie "getSelf" ist; mit dem Unterschied, dass du "this" nicht in einer Variable speichern musst, sondern direkt benutzen kannst...
     
  2. Neurosis404

    Neurosis404 Angehöriger

    Die wird in der ersten Zeile gesetzt *g* Und wie du siehst, setze ich sie auch auf getself =P
    Das Bewegen des Lichts klappt mMn nach zur Hälfte. Die Fackel, die auf dem Boden liegt, hat größere Flammen, aber das Licht selbst fehlt.
    Kann es denn sein, dass es gar nicht möglich ist, ein Licht per moveto wo anders (er)scheinen zu lassen?
     
  3. Diarrhoe

    Diarrhoe Vertrauter

    Hmm... eigentlich müsstest du die Variable in einem Block setzen und nicht einfach so... Was mir sonst noch einfällt wäre, dass du eventuell jeweils einen Frame zwischen "disable", "moveTo" und "enable" vergehen lässt, bzw. warum benutzt du überhaupt "enable" und "disable"?
    Probiers sonst mal so:
    Code:
    scn name
    
    short doonce
    ref mySelf
    
    Begin onAdd
    
    if doonce == 0
     set mySelf to getSelf
     set <Quest-ID>.Fackel to getSelf
     set doonce to 1
    endif
    
    end
    
    
    Begin onDrop
    
    <Licht-Ref>.moveTo mySelf, 0, 0, 5
    mySelf.addFlames
    
    end
    
    
    Begin GameMode
    
    if doonce == 0
     set mySelf to getSelf
     set <Quest-ID>.Fackel to getSelf
     set doonce to 1
    endif
    
    end
    Ich habe jetzt "disable" und "enable" weggelassen. Das kann aber ohne große Umstände eingefügt werden...
     
    Zuletzt bearbeitet: 25. Januar 2010
  4. Anti_Held

    Anti_Held Freund des Hauses

    Ich bins wieder.


    ICh brauch einen Script bei dem die Quest weiter geht wenn man 5Npcs gekillt hat. Wie geht das?
     
  5. Kahmul

    Kahmul Angehöriger

    @ Anti_Held:

    Code:
    scn ...
    
    Short Init
    
    Begin GameMode
    
    If Init == 0
      If <Npc1>.getDead == 1
        If <Npc2>.getDead == 1
          If <Npc3>.getDead == 1
            If <Np4>.getDead == 1
              If <Npc5>.getDead == 1
                setStage <Quest> <Stage>
               set Init to 1
              Endif
            Endif
          Endif
        Endif
      Endif
    Endif
    
    End
    mfg
    Kahmul
     
    Anti_Held gefällt das.
  6. Anti_Held

    Anti_Held Freund des Hauses

    Wo muss ich diesen Skript eintragen ?
     
  7. Kahmul

    Kahmul Angehöriger

    Oh, ich vergaß. :oops:
    Als Quest-Skript.

    mfg
    Kahmul
     
  8. Master of Worlds

    Master of Worlds Vertrauter

    Code:
    scn ...
    
    short once
    
    begin GameMode
    	if NPC1.getdead == 1 && NPC2.getdead == 1 && NPC3.getdead == 1&& NPC4.getdead == 1 && NPC5.getdead == 1 && once == 0
    		SetStage Quest Stage
    		set once to 1
    	endif
    end
    Du ersetzt NPC1-5 mit den jeweiligen Referenzen der NPCs und fügst bei Quest und Stage auch die entsprechenden Sachen ein.

    Edit: Da war wohl jemand schneller. ^^
    Aber wieso soviele "ifs"? :?

    MfG Master of Worlds
     
    Anti_Held gefällt das.
  9. Diarrhoe

    Diarrhoe Vertrauter

    Das ist minimal performancefreundlicher... Ich hab mal wo gelesen, dass wenn man alle Bedingungen in eine Zeile schreibt, Oblivion auch alle durchgeht und guckt, ob die erfüllt sind, egal wie viele tatsächlich erfüllt sind. Wenn man mehrere "if"s verwendet bricht das Skript schon bei der ersten nicht erfüllten Bedingung ab und muss deshaln bestenfalls nur eine statt fünf Bedingungen kontrollieren...
     
    Master of Worlds gefällt das.
  10. Anti_Held

    Anti_Held Freund des Hauses

    begin GameMode heißt doch das der Script die ganze Zeit lang abgefragt wird oder ?
     
  11. Diarrhoe

    Diarrhoe Vertrauter

    Ja, solange sich der Spieler im Spiel befindet und nicht im Menü. Im Questskript aber nur alle fünf Sekunden. Das kannst du ändern indem du die Variable "float fQuestDelayTime" deklarierst und auf das Intervall setzt, indem das Skript ausgeführt werden soll. In diesem Fall sind 5 Sekunden in Ordnung, aber manchmal benötigt man ein Questskript, dass jeden Frame ausgeführt wird. Dann setzt man einfach "fQuestDelayTime" auf 0.001 anstatt des Default-Wertes (5).
     
  12. Unbekannter

    Unbekannter Ehrbarer Bürger

    Hallo, ich habe ein Problem mit folgenden zusammenhängenden Scripts:

    Der erste ist ein Questscript und liegt auf der Quest LiteOverhaulSIUpdateVar:

    Code:
    scn LiteOverhaulSIUpdateVarScript
    
    short Update
    
    begin Gamemode
    
    set Update to 0
    
    end
    Der zweite liegt auf einem MiscItemObject

    Code:
    scn LiteOverhaulUpdateScript
    
    begin onEquip player
    
    messagebox "Wählt nun im Menü den Bernstein oder Wahnsinnsgegenstand aus, der ausgebessert werden soll oder verlasst das Menü, um abzubrechen" "OK"
    Set LiteOverhaulSIUpdateVar.Update to 1
    
    end
    Der dritte liegt auf einem Bernsteinbogen:

    Code:
    scn LiteOverhaulUpdateAmberBowA
    
    short cost
    
    
    begin onequip player
    
    
    if LiteOverhaulSIUpdateVar.Update == 1
    
    	set cost to 100 * LiteOverhaulSIini.Gold
    
    		if player.getitemcount SEAmber >= LiteOverhaulSIini.Material && player getitemcount Gold001 >= cost && player.getlevel >= LiteOverhaulSIini.A
    			player.removeitem SEAmberBowA 1
    			player.additem SEAmberBowB 1
    			player.removeitem Gold001 cost
    			player.removeitem SEAmber LiteOverhaulSIini.Material
    			message "Erfolgreich ausgebessert"
    			set LiteOverhaulSIUpdateVar.Update to 0
    		else
    			message "Ihr benötigt %.0f Stück(e) Bernstein, %.0f Gold und ein Level von mindestens %.0f, um diesen Gegenstand auszubessern" LiteOverhaulSIini.Material, cost, LiteOverhaulSIini.A
    			set LiteOverhaulSIUpdateVar.Update to 0
    		endif
    	else
    	return
    	endif
    	end
    
    
    Wenn der Spieler das Miscitem und danach im Menü sofort den Bernsteinbogen aktivert, soll er unter bestimmten Bedingungen eine Stärkere Variante dieses Bogens erhalten.
    Bei dem Script auf dem MiscItem kommt tatsächlich auch die Meldung, ob die Variabele gesetzt wird weiß ich nicht. Von dem Script auf dem Bogen merke ich allerdings nichts. Jemand eine Idee, woran das liegen könnte?
     
  13. Knochenkeule

    Knochenkeule Hausbruder

    Das du im Questscript die Variable immer wieder auf 0 setzt, dürfte schon mal ein Grund dafür sein. Selbst wenn du sie über das MiscItem auf 1 setzt, wird sie gleich darauf wieder auf 0 gesetzt, kann also für den Bogen gar nicht 1 sein.
     
  14. Unbekannter

    Unbekannter Ehrbarer Bürger

    Wieso denn. Die Variable wird doch nur im Gamemode auf 0 gesetzt. Wenn ich im Menü das Misc-Item und dann den Bogen ausrüste, bleibe ich die ganze Zeit im Menü...Werds trotzdem mal testen
     
  15. Anti_Held

    Anti_Held Freund des Hauses

    scn ZweiteArena

    short once

    begin GameMode
    if Arsan.getdead == 1 && KarGurz.getdead == 1 && Rylil.getdead == 1&& Askash.getdead == 1 && Miranda.getdead == 1 && once == 0
    SetStage 00EineZeiteArena 10
    set once to 20
    endif
    end


    Kann mir einefr sagen warum der Script im Spiel nix auslöst ?
     
  16. Kahmul

    Kahmul Angehöriger

    @ Anti_Held:

    Machs mal so:

    Code:
    scn ZweiteArena
    
    Short Once
    Float fQuestDelaytime
    
    Begin GameMode
    
    Set fQuestDelayTime to 0.001
    
    If Once == 0
            If Arsan.getDead == 1
                  If KarGurz.getDead == 1
                        If Rylil.getDead == 1
                              If Askash.getDead == 1
                                    If Miranda.getDead == 1
                                SetStage 00EineZweiteArena 20
                            Set Once to 1
                        Endif
                    Endif
                Endif
            Endif
        Endif
    Endif
    
    End
    mfg
    Kahmul
     
    Anti_Held gefällt das.
  17. SirTroy

    SirTroy Bürger

    Leute, fangt niemals eine ID im CS mit zahlen an! Im schlimmsten fall erkennt er es nicht an.
     
  18. Eldarie

    Eldarie Hausvetter

    Also ich mach das immer und das gab noch nie ein Problem. ;)
     
  19. Xaephrim

    Xaephrim Abenteurer

    Bei Objekten funktioniert das auch. Bei REFs (Reference Objects) hingegen sollte man das tunichst vermeiden! Dann geht nämlich wirklich nichts mehr.
     
    SirTroy gefällt das.
  20. Unbekannter

    Unbekannter Ehrbarer Bürger

    Hm, mir macht dieser Script Probleme:

    Beim ersten ausrüsten des Gegenstandes kommt die Nachricht test, aber sonst passiert nichts, beim zweiten Mal passiert garnichts

    Code:
    scn LiteOverhaulUpdateAmberBowA
    
    short cost
    short done
    
    begin onequip player
    if LiteOverhaulSIUpdateVar.Update == 1
    
    message "test"
    	set cost to 100*LiteOverhaulSIini.Gold
    
    		if player.getitemcount SEAmber >= LiteOverhaulSIini.Material && player getitemcount Gold001 >= cost && player.getlevel >= LiteOverhaulSIini.A
    			player.removeitem SEAmberBowA 1
    			player.additem SEAmberBowB 1
    			player.removeitem Gold001 cost
    			player.removeitem SEAmber LiteOverhaulSIini.Material
    			message "Erfolgreich ausgebessert"
    
    		else
    			;message "Ihr benötigt %.0f Stück(e) Bernstein, %.0f Gold und ein Level von mindestens %.0f, um diesen Gegenstand auszubessern" LiteOverhaulSIini.Material, cost, LiteOverhaulSIini.A
    			message "A"	
    		endif
    	else
    	return
    	endif
    end
    
    
     
  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