Construction Set Skriptthread zum Construction Set

@DarkRuler: Für die Erhöhung einer Variable um 1 würde ich einen onDeath-Block auf der Kreatur verwenden. Sonst wird die Variable in jedem Frame, in dem die Kreatur tot ist, erhöht.

:huh: Jetzt bin ich echt verwirrt. Ich zitiere mal das, was keris aus dem Ei-der-Zeit-Forum zu mir gesagt hat.

keris schrieb:
...
Das Ondeath kann man als beliebte Fehlerquelle bezeichnen.
zwink_gr.gif
(ähnlich wie das Onhit).
...

Also soll ich jetzt OnDeath benutzen, oder doch nicht.:huh:
 
benutz ondeath is denk ich besser.sonst musst du für jede kreatur ne reference-ID erstellen und in den script schreiben...wenn du

begin ondeath
set <quest-ID>.variable to <quest-ID>.variable + 1
end

nimmst ises sehr viel kürzer^^wenn ich das so richtig verstanden hab,dass du eine quest-variable erhöhen willst
 
Ich denke, das bezieht sich auf die falsche Anwendung vor allem in Bezug auf den Parameter. Bei "onDeath" bezeichnet der Parameter, die Referenz, die den Actor tötet und nicht, wie es oftmals falsch gemacht wird, die Referenz, die stirbt. Das gleiche gilt für "onHit". Der Parameter gilt für die Referenz, die den Schlag ausführt, nicht die, welche geschlagen wird.
Natürlich kannst du auch einen "GameMode"-Block benutzen (würde ich wahrscheinlich auch machen, wenn ich mir dadurch ein zusätzliches Skript ersparen kann...). Allerdings brauchst du dann noch eine zusätzliche Variable, die verhindert, dass die Variable mehr als einmal erhöht wird.

Edit: Hab jetzt mal einen genaueren Blick auf das Skript geworfen... Du solltest bei Timer-Abfragen immer mit Bereichsangaben arbeiten, da es sehr unwahrscheinlich ist, dass der Timer irgendwann genau auf 0 steht. Also (allgemein gehalten):
Code:
float timer

Begin GameMode

if timer > 0
 set timer to (timer - getSecondsPassed)
else
 ;Aktion
endif

end
 
Zuletzt bearbeitet:
ähm..ist es nicht genau umgekehrt?!

begin ondeath zählt für die sache die stirbt und begin onhit für den der geschlagen wird?also bei mir IST DAS DEFINITIV so!
 
Im CS-Wiki:
Wäre aber schön, wenn es so wäre, wie du es beschreibst. Dann könnte man abfragen, ob der Spieler getroffen wird...

Edit: Es sei denn, du redest jetzt nicht von den Parametern, sondern von dem Objekt, auf dem das Skript liegt...
 
ich bin verwirrt xD ich sag einfach nichts mehr dazu,ich weiß welche sachen bei mir welche sachen bewirken udn das reicht ja xDDD glaube aber dass wir etwas aneinander vorbeireden udn beide mit dem recht haben was wir jeweils meinen^^
 
@ Raven 666:

Mach es mal so:

Code:
ScriptName aaRavenGodaiequip

float fQuestDelayTime

Short Step

Begin GameMode

set fQuestDelayTime to 0.1

    if ( GetContainer != Player )
        Return
    endif
    if (Player.GetEquipped 00vegabondkatana == 1 && Player.IsWeaponOut == 1 && Step == 0)
        message " "
        message " "
        set Step to 1
            if (Player.GetItemCount 00vegabondkatana == 0) &&  (Step == 1)
                message " "
                message " "
                Player.AddItem 00vegabondkatana 1
                Player.EquipItem 00vegabondkatana
            endif

            if (Player.GetEquipped 00vegabondkatana == 1) && (Step == 1)
                Player.UnequipItem 00vegabondkatana
                set Step to 2
            endif
            If (Step == 2 && Player.GetItemCount 00Godai == 0)
            message " "
            message " "
            Player.AddItem 00Godai 1

           ElseIf (Step == 2 && Player.GetItemCount 00Godai == 1)
           Message " "
           Message " "
           Player.EquipItem 00Godai
           set Step to 3
      if (Player.GetEquipped 00Godai == 1 && Player.IsWeaponOut == 0 && Step == 3)
            message " "
            message " "
            Player.UnEquipItem 00Godai 1
            set Step to 4
        endif
        if (Player.GetEquipped 00Godai == 0 && Step == 4)
            message " "
            message " "
            Player.EquipItem 00vegabondkatana 1
            set Step to 5
        endif
    endif

  If (Step == 5)
            set Step to 0

    Endif


End
mfg
Kahmul

Nein leider, geht nicht, außerdem hast du ein endif vergessen, aber das ist schnell ausgebessert. So folgendes hab ich mal ausprobiert, und es hat einmal geklappt, nach aussteigen aus dem Spiel und wieder einsteigen, allerdings nicht mehr... :? Sehts euch selbst an:

Script von der 1-H Waffe:

Code:
ScriptName aaaRavenGodaiequip


Begin GameMode

      if (Player.GetEquipped aaaGodai == 1 && Player.IsWeaponOut == 0)
        message " "
        message " "
            if (Player.GetEquipped aaaGodai == 1)
                Player.UnequipItem aaaGodai
            endif
            if (Player.GetItemCount aaavegabondkatana == 0)
                message " "
                message " "
                Player.AddItem aaavegabondkatana 1
            endif
            message " "
            message " "
            Player.EquipItem aaavegabondkatana
    elseif (Player.GetEquipped aaavegabondkatana == 1 && Player.IsWeaponOut == 1)
        if (Player.GetItemCount aaaGodai > 0)
            message " "
            message " "
            Player.EquipItem aaaGodai 1
        endif
        if (Player.GetItemCount aaavegabondkatana > 0)
            message " "
            message " "
            Player.RemoveItem aaavegabondkatana 1
        endif
    endif
End

Script vom Claymore:

Code:
Scriptname aaaRavenGodaiClaymore


begin GameMode

if (Player.GetEquipped aaavegabondkatana == 1)

    message " "
    message " "
    Player.UnequipItem aaaGodai

elseif ((Player.GetEquipped aaaGodai == 1 || Player.GetEquipped aaavegabondkatana == 1) && Player.IsWeaponOut == 0)

    message " "
    message " "
    Player.UnequipItem aaaGodai
    
    if (Player.GetItemCount aaavegabondkatana == 0)
        message " "
        message " "
        Player.AddItem aaavegabondkatana 1
    endif

    message " "
    message " "
    Player.EquipItem aaavegabondkatana

endif

end

Das gibts doch nicht, das ich das nicht hinkriege...

mfg
Raven
 
Ich hab' grad ein Problem, welches sich mir nicht erschließen will ...
Warum löst dieser Script eine Endlosabfolge der MessageBox aus?

Ich poste mal den betreffenden Auszug. Die Variable doonce wird davor auf 1 gesetzt.
Code:
If doonce == 1
    If AAAyleidensphaereFokussteinUrimael.getDead == 1

        AAAyleidensphaereFokussteinKollision01.disable
        AAAyleidensphaereFokussteinKollision02.disable

        AAAyleidensphaereFokussteinKampf02Licht.enable
        AAAyleidensphaereFokussteinKampf02Flammen.enable
        AAAyleidensphaereFokussteinKampf02Licht02.enable
        AAAyleidensphaereFokussteinKampf02Flammen02.enable

        player.addspell AANexArStabUrimaelZauber
        messagebox "Als Urimael sein unheiliges Leben aushaucht, könnt Ihr spüren, wie etwas von seiner Macht in Euch eindringt ..."

        set doonce to 2
    Endif
Endif
 
Das war nur ein Teilausschnitt des Skripts. ;)
Aber würde mich mal interessieren, obs jetzt funktioniert?

mfg
Kahmul
 
Ich habe mir mit einer kleinen Zusatzsicherung geholfen, da das Verschieben der Stelle nicht geklappt hat.

@Meister von Cyrodiil
Habe kein Problem damit, es öffentlich zu posten.
Kannst hier mal gucken ;)

Code:
scn AAAyleidensphaereFokussteinScript

float timer01
float timer02
float timer03
float timer04
float timer05
float timer06
float timer07
float timer08

short timer01start 
short timer02start 
short timer03start 
short timer04start 
short timer05start 
short timer06start 
short timer07start 
short timer08start 

short doonce
short zaubersicherung
short todescounter


;################
;Urimael enablen
;################

Begin GameMode

If AAAyleidensphaereFokusstein01.getDisabled == 1
    If AAAyleidensphaereFokusstein02.getDisabled == 1

        AAAyleidensphaereFokussteinUrimael.enable

        set doonce to 1

    Endif
Endif

;#####################################################
;Weiteren Weg sichtbar machen - Urimael-Zauber hinzufügen
;#####################################################

If doonce == 1
    If AAAyleidensphaereFokussteinUrimael.getDead == 1

        AAAyleidensphaereFokussteinKollision01.disable
        AAAyleidensphaereFokussteinKollision02.disable

        AAAyleidensphaereFokussteinKampf02Licht.enable
        AAAyleidensphaereFokussteinKampf02Flammen.enable
        AAAyleidensphaereFokussteinKampf02Licht02.enable
        AAAyleidensphaereFokussteinKampf02Flammen02.enable

        set doonce to 2
        
        If (zaubersicherung == 0)
        
            set zaubersicherung to 1

            player.addspell AANexArStabUrimaelZauber
            messagebox "Als Urimael sein unheiliges Leben aushaucht, könnt Ihr spüren, wie Arvains Seelenfänger anfängt zu zittern. Ihr habt etwas von Urimaels Macht darin gefangen."
        
        Endif
    Endif
Endif

;#####################################
;Normale Wiederbelebung der Geister
;#####################################

;###############
;Geist Nummer 1
;###############
If AAAyleidensphaereFokusstein01Wache01.getDead == 1

      if timer01start == 0

                    set timer01start to 1
                    set timer01 to 5 

       endif

        if timer01start == 1
                 if timer01 <= 0
                        set timer01start to 0 ; es kann nun einen neue Abfolge geben.

            AAAyleidensphaereFokusstein01Wache01.resurrect 1
            set todescounter to todescounter + 1

                 else
                       set timer01 to timer01 - getsecondspassed
               endif 
    Endif
Endif

;###############
;Geist Nummer 2
;###############
If AAAyleidensphaereFokusstein01Wache02.getDead == 1

      if timer02start == 0

                    set timer02start to 1
                    set timer02 to 5 

       endif

        if timer02start == 1
                 if timer02 <= 0
                        set timer02start to 0 ; es kann nun einen neue Abfolge geben.

            AAAyleidensphaereFokusstein01Wache02.resurrect 1
            set todescounter to (todescounter + 1)

                 else
                       set timer02 to timer02 - getsecondspassed
               endif 
    Endif
Endif

;###############
;Geist Nummer 3
;###############
If AAAyleidensphaereFokusstein01Wache03.getDead == 1

      if timer03start == 0

                    set timer03start to 1
                    set timer03 to 5 

       endif

        if timer03start == 1
                 if timer03 <= 0
                        set timer03start to 0 ; es kann nun einen neue Abfolge geben.

            AAAyleidensphaereFokusstein01Wache03.resurrect 1
            set todescounter to (todescounter + 1)

                 else
                       set timer03 to timer03 - getsecondspassed
               endif 
    Endif
Endif

;###############
;Geist Nummer 4
;###############
If AAAyleidensphaereFokusstein01Wache04.getDead == 1

      if timer04start == 0

                    set timer04start to 1
                    set timer04 to 5 

       endif

        if timer04start == 1
                 if timer04 <= 0
                        set timer04start to 0 ; es kann nun einen neue Abfolge geben.

            AAAyleidensphaereFokusstein01Wache04.resurrect 1
            set todescounter to (todescounter + 1)

                 else
                       set timer04 to timer04 - getsecondspassed
               endif 
    Endif
Endif

;###############
;Geist Nummer 5
;###############
If AAAyleidensphaereFokusstein02Wache01.getDead == 1

      if timer05start == 0

                    set timer05start to 1
                    set timer05 to 5 

       endif

        if timer05start == 1
                 if timer05 <= 0
                        set timer05start to 0 ; es kann nun einen neue Abfolge geben.

            AAAyleidensphaereFokusstein02Wache01.resurrect 1
            set todescounter to (todescounter + 1)

                 else
                       set timer05 to timer05 - getsecondspassed
               endif 
    Endif
Endif

;###############
;Geist Nummer 6
;###############
If AAAyleidensphaereFokusstein02Wache02.getDead == 1

      if timer06start == 0

                    set timer06start to 1
                    set timer06 to 5 

       endif

        if timer06start == 1
                 if timer06 <= 0
                        set timer06start to 0 ; es kann nun einen neue Abfolge geben.

            AAAyleidensphaereFokusstein02Wache02.resurrect 1
            set todescounter to (todescounter + 1)

                 else
                       set timer06 to timer06 - getsecondspassed
               endif 
    Endif
Endif

;###############
;Geist Nummer 7
;###############
If AAAyleidensphaereFokusstein02Wache03.getDead == 1

      if timer07start == 0

                    set timer07start to 1
                    set timer07 to 5 

       endif

        if timer07start == 1
                 if timer07 <= 0
                        set timer07start to 0 ; es kann nun einen neue Abfolge geben.

            AAAyleidensphaereFokusstein02Wache03.resurrect 1
            set todescounter to (todescounter + 1)

                 else
                       set timer07 to timer07 - getsecondspassed
               endif 
    Endif
Endif

;###############
;Geist Nummer 8
;###############
If AAAyleidensphaereFokusstein02Wache04.getDead == 1

      if timer08start == 0

                    set timer08start to 1
                    set timer08 to 5 

       endif

        if timer08start == 1
                 if timer08 <= 0
                        set timer08start to 0 ; es kann nun einen neue Abfolge geben.

            AAAyleidensphaereFokusstein02Wache04.resurrect 1
            set todescounter to (todescounter + 1)

                 else
                       set timer08 to timer08 - getsecondspassed
               endif 
    Endif
Endif




;#############################
;Ayleidensphäre-Questscript
;#############################

;TO DO
End

;#####################################
;Tod aller Geister beim Entfernen des Steins
;#####################################

Begin onActivate

disable
messagebox "Sobald Eure Finger den Stein berühren, löst sich dieser in Nichts auf ... zusammen mit einem Aufheulen einiger Geister ..."

If AAAyleidensphaereFokusstein01.getDisabled == 1
AAAyleidensphaereFokusstein01Wache01.disable
AAAyleidensphaereFokusstein01Wache02.disable
AAAyleidensphaereFokusstein01Wache03.disable
AAAyleidensphaereFokusstein01Wache04.disable
Endif

If AAAyleidensphaereFokusstein02.getDisabled == 1

AAAyleidensphaereFokusstein02Wache01.disable
AAAyleidensphaereFokusstein02Wache02.disable
AAAyleidensphaereFokusstein02Wache03.disable
AAAyleidensphaereFokusstein02Wache04.disable

Endif
end
 
Wie kann ich eine .getdisabled-Abfrage auf ein Objekt legen, was nicht per Reference ID explizit genannt wird? Die Abfrage soll auf das Objekt gehen, welches einen Script YYY auf sich legen hat.

Weiß da jemand etwas?

:bye:

EDIT:
Vielleicht hilft es ja, wenn ich den Script dazuschreibe, den ich schon habe ;)
Es soll jetzt nur noch gewährleistet werden, dass die Variable 'disabled' auf 1 gesetzt wird, sobald das Objekt disabled ist.
Code:
scn 00FalleKristallBlutsteinSCRIPT

float timer
short ready
short disabled
short SpellRank 

begin gameMode

    if SpellRank == 0 && disabled == 0

        if getDistance player < 1500 && timer <= 0
            playgroup forward 0
            set ready to 1
            set timer to 8
        
;###########################################
;Festlegung der Zauber je nach Stufe des Spielers
;###########################################

            if player.GetLevel <= 5
                set SpellRank to 1
            elseif ( player.GetLevel >= 6 ) && ( player.GetLevel <= 10 )
                set SpellRank to 2
            elseif ( player.GetLevel >= 11 ) && ( player.GetLevel <= 15 )
                set SpellRank to 3
            elseif ( player.GetLevel >= 16 ) && (player.GetLevel <= 20)
                set SpellRank to 4
            elseif ( player.GetLevel >= 21 )
                set SpellRank to 5
            endif
        endif
    endif

    if (timer <= 4) && (ready == 1) && (SpellRank > 0)

;#######################################
;Überprüft die Reichweite zum Spieler erneut
;#######################################

        if getDistance player < 1500

            if SpellRank == 1
                cast 0FallenzauberDaemonenweltSTUFE01 player
            elseif SpellRank == 2
                cast 0FallenzauberDaemonenweltSTUFE02 player
            elseif SpellRank == 3
                cast 0FallenzauberDaemonenweltSTUFE03 player
            elseif SpellRank == 4
                cast 0FallenzauberDaemonenweltSTUFE04 player
            elseif SpellRank == 5
                cast 0FallenzauberDaemonenweltSTUFE05 player
            endif
            set ready to 0
            set spellrank to 0

        endif
    
    endif

    if timer > 0
        set timer to timer - getSecondsPassed
    endif
    
end

begin onReset

    reset3DState
    set SpellRank to 0

end
 
Zuletzt bearbeitet:
Mach doch einfach ganz am Anfang des "GameMode"-Blocks eine Abfrage:
Code:
if getDisabled == 1
 return
endif
Wenn du keine Referenz angibst, wird immer die genommen, auf der das Skript liegt...
 
  • Like
Reaktionen: TheDarkRuler