Construction Set Skriptthread zum Construction Set

du ersetzt den player durch eine ref-Variable und bestimmste diese am Anfang des Scripts. Wenn du willst das authomatisch die Person geheilt wird die es braucht, fürchte ich, dass du obse brauchst. Dann kannst du mit getfirstref und getnextref arbeiten. (also die Personen der Umgebung "durchsuchen".)

edit: und du wolltest doch noch die Faction überprüfen:

if NPCref.getinfaction FactionID
 
  • Like
Reaktionen: Eydis
@Gildur&Kahmul:

Danke für die schnellen Antworten ihr beiden! :)

@all:

Noch zwei Skriptfragen:

1. Wäre es möglich, per Skript zu verhindern, dass der Spieler sein Inventar öffnet, und dass stattdessen eine Message erscheint? (Beim Öffnen des Inventars werden nämlich alle Sounds deaktiviert. Und das würde in meiner Mod alles versauen)

2. Brauche ich einen Script, der beim Aktivieren eines Activators X eine Message X anzeigt, Sound X abspielt und Item X hinzufügt. :)

LG,

peecee
 
zu 2:
Code:
scn name
short once

begin onactivate
if once==0
messagebox "Ihr kriegt etwas!"
playsound SOUND-ID
player.additem ITEM-ID 1
set once to 1
endif
end
Alles was zwischen "if" und "endif" steht,wird nru einmal ausgeführt. Wenn du z.B. die Messagebox immer haben willst, verschiebe den Teil einfach über das "if";)
 
  • Like
Reaktionen: peecee
zu 1:

Begin Menumode 1002

MessageBox "..."

End


Dies lässt eine MessageBox aufkommen wenn man das Inventar aufmacht.
Bleibt nur noch die Frage wie man das Inventar schließt^^
 
1. Wäre es möglich, per Skript zu verhindern, dass der Spieler sein Inventar öffnet, und dass stattdessen eine Message erscheint? (Beim Öffnen des Inventars werden nämlich alle Sounds deaktiviert. Und das würde in meiner Mod alles versauen)

Könnte man so machen, benötigt aber OBSE:

(Quest-Skript)

Code:
SCN ...

Float fQuestDelayTime

Begin MenuMode 1002

if(fquestdelaytime)
      set fquestdelaytime to 0.001
endif

tapkey 15

end
Weis' jetzt nicht genau, ob man fquestdelaytime braucht. Testen ist angesagt! :D

EDIT: Und das Skript funktioniert nur, wenn das Inventar-Öffnen auf "Tab" (Standart) liegt.
 
du ersetzt den player durch eine ref-Variable und bestimmste diese am Anfang des Scripts. Wenn du willst das authomatisch die Person geheilt wird die es braucht, fürchte ich, dass du obse brauchst. Dann kannst du mit getfirstref und getnextref arbeiten. (also die Personen der Umgebung "durchsuchen".)

edit: und du wolltest doch noch die Faction überprüfen:

if NPCref.getinfaction FactionID

OBSE habe ich, das ist kein Problem. Nur wie würde das Skript als Ganzes aussehen? :oops:

Liebe Grüße,
Eydis
 
zu 1:

Begin Menumode 1002

MessageBox "..."

End


Dies lässt eine MessageBox aufkommen wenn man das Inventar aufmacht.
Bleibt nur noch die Frage wie man das Inventar schließt^^

Könnte man so machen, benötigt aber OBSE:

(Quest-Skript)

Code:
SCN ...

Float fQuestDelayTime

Begin MenuMode 1002

if(fquestdelaytime)
      set fquestdelaytime to 0.001
endif

tapkey 15

end
Weis' jetzt nicht genau, ob man fquestdelaytime braucht. Testen ist angesagt! :D

EDIT: Und das Skript funktioniert nur, wenn das Inventar-Öffnen auf "Tab" (Standart) liegt.

Brauchen beide Skripts von euch OBSE?

LG,

peecee
 
OBSE habe ich, das ist kein Problem. Nur wie würde das Skript als Ganzes aussehen? :oops:

Mach' es so:

Code:
SCN ...

Ref Actor

Float HP
Float BHP
Float temp2


Begin GameMode

set actor to getfirstref 69

while(actor)
    if(actor.getinfaction <faction>)
      let hp := actor.getav health
      let BHP := actor.getbaseav health

      let temp2 := (BHP * 0.75)
   if(HP <= temp2)
          cast AAAHeilzauber1b actor
   endif
  endif
     let actor := getnextref
loop

End
Brauchen beide Skripts von euch OBSE?

Nur meines.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Eydis
einen Block der sich pro Frame/etc. wiederholt
z.B.: GameMode, MenuMode, ScriptEffectUpdate, etc.

das ist ja eine der Besonderheiten der Oblivion-Scriptsprache!
 
@ Schmelz:
Durch GetFirstRef und GetNextRef wird der Ref-variable die Referenz eines Actors zugewiesen. Und "while (actor)" wird so lange ausgeführt, bis actor 0 bzw. NULL ist. Das heißt, wenn GetNextRef keinen Actor mehr in der Zelle findet, der in diesem Frame nicht schon zurückgegeben wurde, gibt GetNextRef eben 0 oder NULL zurück. Somit wird die while-Schleife beendet. Im nächsten Frame des GameMode Blocks geht das gleiche wieder von vorne los.

Ich hoffe ich konnte dir damit irgendwie helfen.
 
Also streckt das den Frame in die länge?
kommt auf die Wiederholungsrate der Schleife an. Aber eine einzelne Schleife wie die oben genannte ist nciht wirklich performancelastig und wirkt sich nicht stark auf die FPS auf.
-> also ist die Schleife von obse und nur für einzelne Befehle?
kA was du damit meinst. While und loop sind von OBSE und Schleifen. Allerdings nicht nur für bestimmte Befehle. Ganz simpel gesagt, und auch etwas falsch, aber damit es besser verständlich ist: While-schleifen sind wie if-abfragen, nur werden sie eben immer wieder wiederholt, bis die Bedingung falsch ist. Beispiel:

Code:
Begin GameMode
While (1=1)
    ;tue irgendwas
loop
End

Das würde dein Spiel zum crashen bringen, da im gleichen Frame die Schleife unendlich mal oft ausgeführt werden würde, der Frame also nie verlassen wird.

Code:
Begin GameMode

short i;

While (i < 10)
    ;tue irgendwas
    set i to i +1
loop

set i to 0

End

Diese Schleife wird genau 10 mal pro Frame ausgeführt. Würde man i nicht wieder auf 0 setzen, würde nur in 1 Frame die Schleife ausgeführt, danach nie wieder. Ich hoffe die Beispiele waren verständlich. ;)