PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : NPC einen Schalter betätigen lassen



Shatra
24.03.2009, 18:47
Wie befähige ich einen NPC dazu einen Schalter um 7 Uhr Morgens auszuschalten und um 7 Abends einzuschalten?

SirTroy
24.03.2009, 19:36
Du musst bei AI ein Find package machen und als Ziel den Schalter.
Und bei Condition die bedingung das GameHour 7AM oder 7PM ist.
(Ich glaub das war GetGameHour)

SilberWolf
06.04.2009, 22:47
(Ich glaub das war GetGameHour)

GetCurrentTime (http://cs.elderscrolls.com/constwiki/index.php/GetCurrentTime)
oder
GameHour (http://geck.bethsoft.com/index.php/List_of_Global_Variables)

Hier (http://cs.elderscrolls.com/constwiki/index.php/Category:Time_Functions)auch sehr interressant zu lesen.

EMOD
07.04.2009, 15:22
GetCurrent Time hab ich irgendwie nie hinbekommen, ich habe dann if Abfragen gemacht mit direkter Uhrzeit

if Gamehour >6.9 && Gamehour < 7.1

SilberWolf
07.04.2009, 17:13
GetCurrent Time hab ich irgendwie nie hinbekommen, ich habe dann if Abfragen gemacht mit direkter Uhrzeit

if Gamehour >6.9 && Gamehour < 7.1

Man besteht darauf das GameHour in einem Float gespeichert wird, immer dran denken ;D

EMOD
08.04.2009, 02:03
Meinst du den Timer in der float, da scheiterte es zu Beginn mal bei meinen ersten Versuchen.

Die GameHour wird in meinem Beispiel nur ausgelesen, wie Getxxx ;)

SilberWolf
08.04.2009, 09:29
Hier mal nen Script aus meiner Mod, das funktioniert:



scn SilberModAssassinSpawn01

Begin onTriggerEnter player

Short PlayersLuck
Float WhatTime
Set WhatTime to GetCurrentTime
Set PlayersLuck to player.GetActorValue Luck

if WhatTime >22
if PlayersLuck >=7
SilberModWhitePhexSpawn1.enable
else
SilberModWhitePhexSpawn2.enable
endif
endif
End


aus vollkommen mir unerklärlichen Gründen funktioniert folgendes Skript aber nicht:



scn SilberModAssassinSpawn01

Begin onTriggerEnter player

Short PlayersLuck
Float WhatTime
Set WhatTime to GetCurrentTime
Set PlayersLuck to player.GetActorValue Luck

if WhatTime >22
if WhatTime <5
if PlayersLuck >=7
SilberModWhitePhexSpawn1.enable
else
SilberModWhitePhexSpawn2.enable
endif
endif
endif
End


Auch nicht mit "&&"

EMOD
08.04.2009, 15:09
Ich bin nicht so der Programmierer und die ifs funzen bei mir auch nicht immer wie ich es will, deshalb vereinfache ich sowas immer:

Begin onTriggerEnter Player

if GameHour > 22 && GameHour < 5 && GetPlayerAV Luck >= 7
set xxxxxx
endif

END


Eventuell muss das dann in den GameMode und der Trigger mit short doonce =1 ausgeschaltet werden. Weis nicht ob GetPlayerAV geht, GetActorValue ist das Original. Es gibt auch noch GetBaseAV, falls Luck durch etwas modifiziert wurde und man nur den richtigen Wert gelten lassen will.

Stygs
09.04.2009, 02:40
aus vollkommen mir unerklärlichen Gründen funktioniert folgendes Skript aber nicht:



scn SilberModAssassinSpawn01

Begin onTriggerEnter player

Short PlayersLuck
Float WhatTime
Set WhatTime to GetCurrentTime
Set PlayersLuck to player.GetActorValue Luck

if WhatTime >22
if WhatTime <5
if PlayersLuck >=7
SilberModWhitePhexSpawn1.enable
else
SilberModWhitePhexSpawn2.enable
endif
endif
endif
End


Auch nicht mit "&&"

Ich würde mir erlich gesagt mehr Sorgen machen wenn es so klappen würde ;)

Warum? Darum:

if WhatTime >22
if WhatTime <5

Jetzt nenn mir doch mal ne Zahl die größer als 22 aber kleiner als 5 ist und du wirst merken warum diese Abfrage SO nicht klappen kann ;)

Wenn du mit Urzeiten arbeiten willst musst du das definitv anders regeln, zb mit ner Abfrage ala "der Wert muss entweder zwischen 22 und 24 oder zwischen 0 und 5 liegen"-Abfrage.

Anstelle extra WhatTime zu definieren, kannst du außerdem direkt GetCurrentTime oder Gamehour benutzen.

SilberWolf
09.04.2009, 06:32
auf 22 folgt 23, 24, 0, 1, 2, 3, 4, 5

Ich will die Uhrzeit zwischen 22 und 5 Uhr anpeilen.
Ich hab nur leider keinen Plan, wie man hier "inBetween" definiert.
Ich kanns in 4 Programmier/Skriptsprachen, aber mitm Gecke fehlen mir irgendwie die mittel. Das ist wie Kochen mit verbundenen Händen.

Stygs
09.04.2009, 10:03
nein, auf 22 folgen 23, 24, 25, 26 usw...

Für dich ist das ganze ja eine Uhrzeit, aber für das Spiel nicht. Das Spiel liest die Uhrzeit in diesem Moment einfach als normalen Zahlenwert aus und vergleicht ihn mit 5 und 22 - das das ne Urzeit ist und wie ne Uhr funktioniert wird von dem Spiel in dem Moment gar nicht beachtet.
Und da eine normale Zahl ja nicht gleichzeitig größer als 22 und kleiner als 5 sein kann, gehts nicht. Glücklicherweise brauchst du hier aber auch kein inBetween, sondern es geht bedeutend einfacher:

EMOD hat da schon FAST recht mit seinem Vorschlag, es müsst so lauten:

if GameHour > 22 || GameHour < 5

Damit würde die Abfrage aktiv wenn die Uhrzeit größer als 22 oder kleiner als 5 ist - und da die Uhrzeit ja nur zwischen 0 und 23 liegen kann, haben wir somit alle relevanten Möglichkeiten abgedeckt ... :p

Stygs
09.04.2009, 10:33
Bei dir ist es logich das es funktioniert, weil bei dir ja alle Zahlen zwischen 2.1 und 3.9 die Bedingung erfüllen.
Nur liegt die Zahl von SilberWolf nicht zwischen 5 und 22 (dann hättest du absolut recht), sondern zwischen 22 und 5. Und diese Bedingung erfüllt keine normale Zahl. Daher ist diese Abfrage etwas anders.

Guck mal ob dein Script noch gehen würde, wenn du

gameHour >= 3.9 && gameHour <= 2.1

benutzt, so wäre das nämlich vom Aufbau her wie bei SilberWolf.



Ein ODER dürfte nicht funktionieren, da z.b. 7 Uhr größer als 22 ist, wenn er weiterzählt 22, 23, 24, 1, 2, 3, 4, 5, 6, 7... einfach mal testen mit einer showmessage.

Ich werds mal testen - aber eigentlich vergleicht das Ding NUR die reinen Zahlenwerte - und da ist 7 kleiner als 22, egal in welchem Zusammenhang.
EDIT: Bei mir klappt das ODER fehlerfrei....



Und wenn ihr mir nicht glaubt, guckt einfach im Actor Effect PerkNightPerson nach.
Da ist genau diese "Oder" Abfrage drin die ich die ganze Zeit meine:

http://s283.photobucket.com/albums/kk288/Stygs123/th_NightPerson.jpg (http://i283.photobucket.com/albums/kk288/Stygs123/NightPerson.jpg)
(Thx @ Golan für den Tipp mit dem Perk)

EMOD
09.04.2009, 15:55
Ich habe es bei all meinen Abfragen vermieden zwischen 23:00 und 1:00 oder 30ten und 1ten zu kommen. :D :D :D

Die GameHour wird die eigentlich als 0.00 oder 24.00 akzeptiert ?

SilberWolf
09.04.2009, 16:03
Ich werds mal testen - aber eigentlich vergleicht das Ding NUR die reinen Zahlenwerte - und da ist 7 kleiner als 22, egal in welchem Zusammenhang.
EDIT: Bei mir klappt das ODER fehlerfrei....

Klasse.. jetzt funktionierts endlich einwandfrei bei mir. Danke dafür.
Is übrigens ne gute idee, sich die Perks der Profis einfach mal anzusehen, auf die Idee kam ich bisher nichtmal :D

Und ja, von der reinen Technik her isses logisch das 22 nicht kleiner wird als 5, aber ich ging davon aus, dass in der Engine schon so gedacht wurde, das auf 23 die 0 folgt und dann wieder die 1. Aber nu funktierts ja endlich.


Die GameHour wird die eigentlich als 0.00 oder 24.00 akzeptiert ?

24 Uhr ist 0
aber 23 Uhr ist nicht 11 sondern 23 :D