Construction Set Skriptthread zum Construction Set

Mein Script sieht jetzt so aus:
Code:
[SIZE=2]
scn Name
 
float Jetzt 
float Zeitpunkt 
short Wiederholung 
Long Random
 
Begin ScriptEffectUpdate 
      set Jetzt to ( GameDaysPassed + GameHour / 24 )
   if Zeitpunkt >= Jetzt 
      set Wiederholung to ( Wiederholung + 1 ) 
      set Zeitpunkt to ( Jetzt + Wiederholung )
   elseif Wiederholung == 0 
      set Wiederholung to 1 
      set Zeitpunkt to ( Jetzt + Wiederholung )
      Set Random to GetRandomPercent
         If Random >= 0 && Random < 24
            MessageBox "text"
         Elseif Random >= 25 && Random < 48
            MessageBox "text"
         Elseif Random >= 49 && Random < 74
            MessageBox "text"
         Elseif Random >= 74 && Random < 99
            MessageBox "text"
         Elseif Random == 99
            MessageBox "text"
         Endif
   endif
End
[/SIZE]
Das ganze funktioniert ganz gut, allerdings wiederholt es sich nicht, d.h. es läuft nur einmal durch und nicht jeden tag. kann mir jemand sagen, was da falsch ist:?
Dankeschön :)
lg
Dacri
 
Dauert der Script-Effect denn auch lange genug?

Ansonst fällt mir nur auf, dass "Wiederholung" nirgens auf 0 zurückgesetzt wird, und somit wird das elseif kein zweites Mal ausgelöst.
 
  • Like
Reaktionen: Dacri
Redest du von der Refernz der Steine?
Die trägst du lediglich als Parent beim Trigger ein.

Nebenbei ist es "getparentref" und nicht nur "parent".
 
Also. ich habe jetzt bei den Steinen als persistant reference "fmodr" stehen, das Häkchen drin, und beim Trigger unter "enable parents" unter cell die betreffende Zelle, und unter reference CtrapIn01, "fmodr", aber bei dem script

Code:
scn 01minetriggerdoor

Begin OnTriggerActor && IsActorRef Player

GetparentRef.activate
      
End
bekomme ich die Meldung, dass in zeile 5 ein Syntax-Fehler ist, dass "getparentref" ungültig ist und nur Objekt-Referenzen und Referenz-Variablen in diesem Zusammenhang gültig sind...
 
versuchs mal so:
PHP:
scn 01minetriggerdoor  

ref tempRef

Begin OnTrigger player

set tempRef to getParentRef

tempRef.activate        

End
Die Steine müssen fallen können und der Trigger muss für den Spieler erreichbar ein; oder was wolltest du hören?
 
Also, ich hab jetzt zwei versionen des Scripts ausprobiert, und keine der beiden funktioniert richtig. Bei der Vorgabe, von Diarrhoe erscheinen die MessageBoxen dann pausenlos...Es soll ja nur Alle 24 Stunden passieren. Und bei der Version, von mir (Ich hab nur die beiden bedingungen ungedreht...keine ahnung warum :D) passiert das ganze nur einmal, es soll aber jeden Tag wieder passieren. Hab auch versucht Wiederholung wieder auf 0 zu setzen...Aber es hat ned gewirkt.(Hat bei keiner Version was geändert)
Code:
[SIZE=2]scn Name[/SIZE]
 
[SIZE=2]float Jetzt [/SIZE]
[SIZE=2]float Zeitpunkt [/SIZE]
[SIZE=2]short Wiederholung [/SIZE]
[SIZE=2]Long Random[/SIZE]
 
[SIZE=2]Begin ScriptEffectUpdate [/SIZE]
[SIZE=2]  set Jetzt to ( GameDaysPassed + GameHour / 24 )[/SIZE]
[SIZE=2]  if Zeitpunkt >= Jetzt [/SIZE]
[SIZE=2]    set Wiederholung to ( Wiederholung + 1 ) [/SIZE]
[SIZE=2]    set Zeitpunkt to ( Jetzt + Wiederholung )[/SIZE]
[SIZE=2]  elseif Wiederholung == 0 [/SIZE]
[SIZE=2]    set Wiederholung to 1 [/SIZE]
[SIZE=2]    set Zeitpunkt to ( Jetzt + Wiederholung )[/SIZE]
[SIZE=2]    Set Random to GetRandomPercent[/SIZE]
[SIZE=2]    If Random >= 0 && Random < 24[/SIZE]
[SIZE=2]      MessageBox "text"[/SIZE]
[SIZE=2]    Elseif Random >= 25 && Random < 48[/SIZE]
[SIZE=2]      MessageBox "text"[/SIZE]
[SIZE=2]    Elseif Random >= 49 && Random < 74[/SIZE]
[SIZE=2]      MessageBox "text"[/SIZE]
[SIZE=2]    Elseif Random >= 74 && Random < 99[/SIZE]
[SIZE=2]      MessageBox "text"[/SIZE]
[SIZE=2]    Elseif Random == 99[/SIZE]
[SIZE=2]      MessageBox "text"[/SIZE]
[SIZE=2]    Endif[/SIZE]
[SIZE=2]  endif[/SIZE]
[SIZE=2]End[/SIZE]
Code:
[SIZE=2]scn Name[/SIZE]
 
[SIZE=2]float Jetzt [/SIZE]
[SIZE=2]float Zeitpunkt [/SIZE]
[SIZE=2]short Wiederholung [/SIZE]
[SIZE=2]Long Random[/SIZE]
 
[SIZE=2]Begin ScriptEffectUpdate [/SIZE]
[SIZE=2]  set Jetzt to ( GameDaysPassed + GameHour / 24 )[/SIZE]
[SIZE=2]  if Zeitpunkt >= Jetzt [/SIZE]
[SIZE=2]    set Wiederholung to ( Wiederholung + 1 ) [/SIZE]
[SIZE=2]    set Zeitpunkt to ( Jetzt + Wiederholung )[/SIZE]
[SIZE=2]  elseif Wiederholung == 0 [/SIZE]
[SIZE=2]    set Wiederholung to 1 [/SIZE]
[SIZE=2]    set Zeitpunkt to ( Jetzt + Wiederholung )[/SIZE]
[SIZE=2]    Set Random to GetRandomPercent[/SIZE]
[SIZE=2]  If Random >= 0 && Random < 24[/SIZE]
[SIZE=2]      MessageBox "text"[/SIZE]
[SIZE=2]    Elseif Random >= 25 && Random < 48[/SIZE]
[SIZE=2]      MessageBox "text"[/SIZE]
[SIZE=2]    Elseif Random >= 49 && Random < 74[/SIZE]
[SIZE=2]      MessageBox "text"[/SIZE]
[SIZE=2]    Elseif Random >= 74 && Random < 99[/SIZE]
[SIZE=2]      MessageBox "text"[/SIZE]
[SIZE=2]    Elseif Random == 99[/SIZE]
[SIZE=2]      MessageBox "text"[/SIZE]
[SIZE=2]    Endif[/SIZE]
[SIZE=2]  endif[/SIZE]
[SIZE=2]End[/SIZE]
Ich bin für den Script leider eindeutig zu blöd, weil ich keine Ahnung habe, was da Eigentlich bewirkt wird mit dem Timer. :cry:
Noch paar Infos zu den Umständen, vl hilft das noch... Der spieler betätigt einen Activator, bekommt eine Krankheit mit einigen Eigenschaften und diesem Script. Alle 24 Stunden soll der Skript dann eben eine MessageBox senden ( zufällig) und noch entsprechende Eigenschaftebn ändern. Das ganze immer wieder, alle 24 Stunden, solange, bis man die Krankheit nicht mehr hat.
Und könnte mir bitte jemand den script so abändern, dass da jetzt alle 24 Stunden was passiert? weil ich brings selber einfach ned zam...:?
danke!
lg
Dacri
 
Zuletzt bearbeitet:
@Schmelz & FreshTheFallen:
Warum das Rad neu erfinden?
Es gibt doch schon von BethSoft her perfekte Skripte für diese Situation.
Der Skripte TrigZonePLAYER01SCRIPT bietet alles, was du brauchst.
Code:
scn TrigZonePLAYER01SCRIPT

; Activates linked Parent object once

short triggered
ref target
ref mySelf

begin onTrigger player

	if triggered == 0
		set triggered to 1
		set target to getParentRef
		set mySelf to getSelf
		target.activate mySelf 1
	endif

end

begin onReset

	set triggered to 0

end
 
kleine Frage:

bei "setTexturePath" und "getTexturePath" braucht man ja einen Path^^, aber wo fängt der an? bei "\Textures" passiert bei mir nichts. (Das kann aber auch andere Gründe haben). Muss man vieleicht mit Data oder Oblivion anfangen?
 
Also, ich hab jetzt zwei versionen des Scripts ausprobiert, und keine der beiden funktioniert richtig. Bei der Vorgabe, von Diarrhoe erscheinen die MessageBoxen dann pausenlos...Es soll ja nur Alle 24 Stunden passieren. Und bei der Version, von mir (Ich hab nur die beiden bedingungen ungedreht...keine ahnung warum :D) passiert das ganze nur einmal, es soll aber jeden Tag wieder passieren. Hab auch versucht Wiederholung wieder auf 0 zu setzen...Aber es hat ned gewirkt.(Hat bei keiner Version was geändert)
Code:
[SIZE=2]scn Name[/SIZE]
 
[SIZE=2]float Jetzt [/SIZE]
[SIZE=2]float Zeitpunkt [/SIZE]
[SIZE=2]short Wiederholung [/SIZE]
[SIZE=2]Long Random[/SIZE]
 
[SIZE=2]Begin ScriptEffectUpdate [/SIZE]
[SIZE=2]  set Jetzt to ( GameDaysPassed + GameHour / 24 )[/SIZE]
[SIZE=2]  if Zeitpunkt >= Jetzt [/SIZE]
[SIZE=2]    set Wiederholung to ( Wiederholung + 1 ) [/SIZE]
[SIZE=2]    set Zeitpunkt to ( Jetzt + Wiederholung )[/SIZE]
[SIZE=2]  elseif Wiederholung == 0 [/SIZE]
[SIZE=2]    set Wiederholung to 1 [/SIZE]
[SIZE=2]    set Zeitpunkt to ( Jetzt + Wiederholung )[/SIZE]
[SIZE=2]    Set Random to GetRandomPercent[/SIZE]
[SIZE=2]    If Random >= 0 && Random < 24[/SIZE]
[SIZE=2]      MessageBox "text"[/SIZE]
[SIZE=2]    Elseif Random >= 25 && Random < 48[/SIZE]
[SIZE=2]      MessageBox "text"[/SIZE]
[SIZE=2]    Elseif Random >= 49 && Random < 74[/SIZE]
[SIZE=2]      MessageBox "text"[/SIZE]
[SIZE=2]    Elseif Random >= 74 && Random < 99[/SIZE]
[SIZE=2]      MessageBox "text"[/SIZE]
[SIZE=2]    Elseif Random == 99[/SIZE]
[SIZE=2]      MessageBox "text"[/SIZE]
[SIZE=2]    Endif[/SIZE]
[SIZE=2]  endif[/SIZE]
[SIZE=2]End[/SIZE]
Code:
[SIZE=2]scn Name[/SIZE]
 
[SIZE=2]float Jetzt [/SIZE]
[SIZE=2]float Zeitpunkt [/SIZE]
[SIZE=2]short Wiederholung [/SIZE]
[SIZE=2]Long Random[/SIZE]
 
[SIZE=2]Begin ScriptEffectUpdate [/SIZE]
[SIZE=2]  set Jetzt to ( GameDaysPassed + GameHour / 24 )[/SIZE]
[SIZE=2]  if Zeitpunkt >= Jetzt [/SIZE]
[SIZE=2]    set Wiederholung to ( Wiederholung + 1 ) [/SIZE]
[SIZE=2]    set Zeitpunkt to ( Jetzt + Wiederholung )[/SIZE]
[SIZE=2]  elseif Wiederholung == 0 [/SIZE]
[SIZE=2]    set Wiederholung to 1 [/SIZE]
[SIZE=2]    set Zeitpunkt to ( Jetzt + Wiederholung )[/SIZE]
[SIZE=2]    Set Random to GetRandomPercent[/SIZE]
[SIZE=2]  If Random >= 0 && Random < 24[/SIZE]
[SIZE=2]      MessageBox "text"[/SIZE]
[SIZE=2]    Elseif Random >= 25 && Random < 48[/SIZE]
[SIZE=2]      MessageBox "text"[/SIZE]
[SIZE=2]    Elseif Random >= 49 && Random < 74[/SIZE]
[SIZE=2]      MessageBox "text"[/SIZE]
[SIZE=2]    Elseif Random >= 74 && Random < 99[/SIZE]
[SIZE=2]      MessageBox "text"[/SIZE]
[SIZE=2]    Elseif Random == 99[/SIZE]
[SIZE=2]      MessageBox "text"[/SIZE]
[SIZE=2]    Endif[/SIZE]
[SIZE=2]  endif[/SIZE]
[SIZE=2]End[/SIZE]
Ich bin für den Script leider eindeutig zu blöd, weil ich keine Ahnung habe, was da Eigentlich bewirkt wird mit dem Timer. :cry:
Noch paar Infos zu den Umständen, vl hilft das noch... Der spieler betätigt einen Activator, bekommt eine Krankheit mit einigen Eigenschaften und diesem Script. Alle 24 Stunden soll der Skript dann eben eine MessageBox senden ( zufällig) und noch entsprechende Eigenschaftebn ändern. Das ganze immer wieder, alle 24 Stunden, solange, bis man die Krankheit nicht mehr hat.
Und könnte mir bitte jemand den script so abändern, dass da jetzt alle 24 Stunden was passiert? weil ich brings selber einfach ned zam...:?
danke!
lg
Dacri

Moment!
Keines der von dir geposteten Skripte entspricht dem, welches ich geschrieben habe.

Desweiteren hatte ich wohl etwas falsch verstanden. Ich dachte, der Zeitraum soll sich nach jedem Mal um einen Tag verlängern. ALso beim ersten Mal einen Tag, danach zwei Tage und dann drei Tage usw. Um das zu ändern musst du einfach die Stellen bei denen "( Jetzt + Wiederholung )" steht in "( Jetzt + 1 )" ändern. Dann ist der Zeitraum konstant.
 
  • Like
Reaktionen: Dacri
:oops:Dann hab ich wohl auch noch was falsch abgeschrieben...Danke nochmal!
EDIT: Es läuft immer noch ned :cry: Ich hab den Script noch einmal von der letzten seite genommen (das obenw ar nur falsch reinkopiert) und es ist immer noch so, dass die MessageBoxen pausenlos kommen. Und wenn ich die Bedingungen ´vertausche, dann passiert das ganze wieder nur einmal:(
 
Zuletzt bearbeitet:
Ok... hab den Fehler gefunden. Ich hatte einfach nur ein Relationssymbol vertauscht und statt "<" ">=" geschrieben (Zeile 13). Ist jetzt korrigiert.
 
  • Like
Reaktionen: Dacri
Hey Leute...

ich kriegs einfach nicht hin :cry:

Das liegt vermutlich an dem Minuszeichen... Erstell mal eine weitere Variable, deren Wert du auf -1* alte Variable setzt und schreib dann "ModAV2 <NEUE VARIABLE>"

Wie zum Teufel geht das?

Und zwar bei diesem Skript:

Code:
scn name

long health
long magicka
long fatigue

long pHealth
long pMagicka
long pFatigue

long pBaseHealth
long pBaseMagicka
long pBaseFatigue

long tempVar

float fQuestDelayTime


Begin GameMode
    
if fQuestDelayTime
  let fquestdelaytime := 0.001
endif
    

if isKeyPressed3 50
  Message "Ihr übertragt Eure Energie!"

  let pHealth := player.getAV health
  if pHealth > 10
    player.modAV2 health -10
    let health += 10
  elseif pHealth > 1
    let tempVar := ( pHealth - 1 )
   [B] player.modAV2 health -tempVar[/B]
    let health += tempVar
  endif

  let pMagicka := player.getAV Magicka
  if pMagicka > 10
    player.modAV2 magicka -10
    let magicka += 10
  elseif pMagicka > 0
    [B]player.modAV2 magicka -pMagicka[/B]
    let magicka += pMagicka
  endif

  let pFatigue := player.getAV fatigue
  if pFatigue > 10
    player.modAV2 fatigue -10
    let fatigue += 10
  elseif pFatigue > 1
    let tempVar := ( pFatigue - 1 )
   [B] player.modAV2 fatigue -tempVar[/B]
    let fatigue += tempVar
  endif
        
  Message "Im Ring: Lebenspunkte: %.0f / Magicka: %.0f / Ausdauer: %.0f" health, magicka, fatigue
        
elseif isKeyPressed3 49        
  Message "Ihr gewinnt Energie aus dem Ring!"

  let pHealth := player.getAV health
  let pBaseHealth := player.getBaseAV health
  if pHealth <= ( pBaseHealth - 10 )
    player.modAV2 health 10
    let health -= 10
  elseif pHealth < pBaseHealth
    player.modAV2 health 10
    let health -= ( pBaseHealth - pHealth )
  endif

  let pMagicka := player.getAV magicka
  let pBaseMagicka := player.getBaseAV magicka
  if pMagicka <= ( pBaseMagicka - 10 )
    player.modAV2 magicka 10
    let magicka -= 10
  elseif pMagicka < pBaseMagicka
    player.modAV2 magicka 10
    let magicka -= ( pBaseMagicka - pMagicka )
  endif

  let pFatigue := player.getAV fatigue
  let pBaseFatigue := player.getBaseAV fatigue
  if pFatigue <= ( pBaseFatigue - 10 )
    player.modAV2 fatigue 10
    let fatigue -= 10
  elseif pFatigue < pBaseFatigue
    player.modAV2 fatigue 10
    let fatigue -= ( pBaseFatigue - pFatigue )
  endif

  Message "Im Ring: Lebenspunkte: %.0f / Magicka: %.0f / Ausdauer: %.0f" health, magicka, fatigue
        
endif

end

Er gibt mir immernoch in den fettgedruckten Lines diesen Error:

"Unknown Variable "..." for parameter amount."


Ich hoffe auf Hilfe :cry: Ihr seid meine letzte Hoffnung :)