PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : NPC tagesabläufe



Misantrooper
25.01.2011, 15:28
hio, hab ein kleines problem mit tagesabläufen von npc´s

in einem intereior sind ca 10 npc´s untergebracht, die in einer gemeinschaft leben sollen, mit z.b. zeitgleichen mahlzeiten im selben raum etc.

ich habe also für jeden die packages erstellt.

ich nehme nun mal 1 npc, den techniker als beispiel:

packages:
TNHTechnikerIdle01PACK
(soll im radius eines definierten xmarkers random die idlemarker benutzen)
package-typ:sandbox
mögliche interaktionen: nur idlemarker
shedule:
week, month und day auf "any"
time: 6
duration: 6

TNHTechnikerEatPACK
(soll auf einer definierten vaultdinerbank platznehmen, und das dort befindliche bighornsteak essen)
package-typ:eat
shedule:
week, month und day auf "any"
time: 12
duration: 2

TNHTechnikerIdle02PACK
(soll im radius eines definierten xmarkers random die idlemarker benutzen)
package-typ:sandbox
mögliche interaktionen: nur idlemarker
shedule:
week, month und day auf "any"
time: 14
duration: 8

TNHTechnikerSleepPACK
(soll in einem definiertem Bett schlafen)
package-typ:sleep
mögliche interaktionen: nur nur das verlinkte bett, radius 0
shedule:
week, month und day auf "any"
time: 22
duration: 8


in dieser reihenfolge sind die packages auch beim npc angelegt. die anderen npc´s haben im prinzip den selben tagesablauf, nur mit anderen markern, an anderen positionen im interior. was bei allen identisch ist, ist die essenszeit.

das problem nun ist, das sie ihren tagesablauf nicht abspulen, sondern immer in dem package hängen, welches sie beim begonnen haben, als ich die zelle betrat. also komme ich mittags um 1300 in die zelle, sitzen alle da und essen, aber sie essen auch noch, wenn ich um 220 die zelle wieder verlasse. oder ich komme um 0200 an, liegen alle in ihren zugewiesenen betten, aber auch wieder ewig und 3 tage, wenn ich mich solange in der zelle aufhalte.

was ich bisher ausprobiert habe:

an jedes package ein tnhBELIEBIGERNPCref.evp im on End-block angehängt
keine auswirkung

ein script erstellt das zu den jeweiligen zeit die packages auf den entsprechenden npc evaluieren soll:



scn TNHPackageSwitch

float Time;

begin GameMode;
set Time to GetCurrentTime;
if (Time == 6) || (Time == 12) || (Time == 14) || (Time == 22);
TNHTechnikerREF.evp;
alle.evp;
anderen.evp;
npcs.evp;
endif;
end;


leider auch ohne auswirkung. obwohl ja bei begin gamemode mehrmahl sekündlich die bedingungen geprüft werden, und das script definitiv die zeiten treffen sollte.

so mittlerweile bin ich echt am ende mit meinem latain, und kurz davor die viecher einfach nur resignierend in die ecke zu stellen.

walli
26.01.2011, 06:30
Das mit den Packages ist schon nervig, ich würde versuchen das SandboxPackage komplett ohne Zeitangaben laufen zulassen (die beiden Packages kannste zu einem machen), und die anderen Package's so einzustellen, daß dazwischen immer 1h Platz ist, damit sich nix überschneidet.

Misantrooper
27.01.2011, 18:57
so, hab ne lösung gefunden, und zwar habe ich nun bei allen package wieder die shedule gedroppt, und regel die zuweisung jetzt per script. is zwar keine optimallösung, aber das was ich selber scripte kann ich mich wenigstens drauf verlassen.

also, die npc´s haben nun nurnoch ein package am mann, und ein script mit folgendem aufbau, wieder am beispiel des technikers:



scn TNHTechnikerSCRIPT

short repariert01
short gegessen
short repariert02
short geschlafen
float Time


begin gamemode
set Time to GetCurrentTime
if Time >= 7 && Time < 9.59
if repariert01 == 0
TNHTechnikerREF.RemoveScriptPackage
TNHTechnikerREF.AddScriptPackage TNHTechnikerGeneratorPACK
TNHTechnikerREF.evp
set repariert01 to 1
set geschlafen to 0
endif
elseif Time >= 12 && Time < 13.59
if gegessen == 0
TNHTechnikerREF.RemoveScriptPackage
TNHTechnikerREF.AddScriptPackage TNHTechnikerEatPACK
TNHTechnikerREF.evp
set gegessen to 1
set repariert01 to 0
endif
elseif Time >= 14 && Time < 21.59
if repariert02 == 0
TNHTechnikerREF.RemoveScriptPackage
TNHTechnikerREF.AddScriptPackage TNHTechnikerELSAPACK
TNHTechnikerREF.evp
set repariert02 to 1
set gegessen to 0
endif
elseif Time >= 22 && Time < 6.59
if geschlafen == 0
TNHTechnikerREF.RemoveScriptPackage
TNHTechnikerREF.AddScriptPackage TNHChefkochSleep01PACK
TNHTechnikerREF.evp
set geschlafen to 1
set repariert02 to 0
endif
endif
end


is zwar nicht die sauberste lösung, aber immerhin eine, die zu 99% so funktioniert, wie ich es sehen will. ich denke das kann ich noch ausbauen, in dem ich randomcounter einbaue, so das die tätigkeiten vor und nach dem essen variieren, so das der techniker mal morgens am computer rumbastelt, und nachmittags am generator, oder auch mal die arbeit verweigert, und nur dumm durch die gegend rennt. mal guggen, aber so sieht schon relativ gut aus, wenn ich mich mal 24 stunden ingame hinstelle.