Ten Days.

Post » Mon Aug 30, 2010 8:14 am

I'm working on a mod which adds a fully reconstructed Vault 101 after Trouble on the Homefront.
Everything is set. People have daily routines, there are vendors and quests...

But there is no enabling the new Vault.

I need a timer. Of ten days. GameDaysPassed didn't work. I waited over 20 years but the vault remains closed.

So.. What could I do? Normal timer seems absurd, since it would require quite big a number to count.
I was thinking of a series of small timers (each running for some time, then triggering the next one) but that seemed too complex and time consuming.
User avatar
Nina Mccormick
 
Posts: 3507
Joined: Mon Sep 18, 2006 5:38 pm

Post » Mon Aug 30, 2010 2:47 pm

I dont see why gamedays wouldn't work. Maybe post your 'enabling' script? And what do you mean by enabling anyway? Are you just trying to use the same vault 101 entrance to enter your vault 101 versus the original? If so, you could do that simply by placing another (disabled) door right ontop of the original and then disabling the original while enabling the new one at the given time.
User avatar
vanuza
 
Posts: 3522
Joined: Fri Sep 22, 2006 11:14 pm

Post » Mon Aug 30, 2010 6:19 am

I'm sorry. The enabling is just disabling the door to Trouble on the Homefront Vault 101 and enabling the mod V101 door.

The enable script is currently as follows:

float Timer

Begin GameMode
if getstage MS16 == 230 && DoOnce == 0
set Timer to 10
set DoOnce to 1
endif

if getstage MS16 == 230 && DoOnce == 1
if timer > 0
set timer to timer - GameDaysPassed
else
showmessage V101RPMSG
V101RPOutpostMasterREF.enable
MS16Vault101CaveDoorExterior.disable
endif
endif
end

V101RPOutpostMaster includes the door which leads to the new Vault 101.
User avatar
Eire Charlotta
 
Posts: 3394
Joined: Thu Nov 09, 2006 6:00 pm

Post » Mon Aug 30, 2010 5:44 pm

You can use a short for GameDaysPassed, no need for a float. GameDaysPassed returns the number of days passed since the game first started, so setting your variable to 10 isn't going to work unless its day 0 when the script runs. Try 'set timer to (GameDaysPassed + 10)' Need something in the else section to prevent it from looping too, like set the stage higher, or set doonce to 3.
User avatar
Jack
 
Posts: 3483
Joined: Sat Oct 20, 2007 8:08 am

Post » Mon Aug 30, 2010 8:57 am

Like b3w4r3 says, try something like this:

Float TimerShort DoOnceBegin GameMode   if getstage MS16 == 230 && DoOnce == 0      set Timer to GameDayspassed + 10      set DoOnce to 1   endif   if getstage MS16 == 230 && DoOnce == 1      if timer <= GameDaysPassed         showmessage V101RPMSG         V101RPOutpostMasterREF.enable         MS16Vault101CaveDoorExterior.disable         Set DoOnce to 2      endif   endifend

User avatar
Fluffer
 
Posts: 3489
Joined: Thu Jul 05, 2007 6:29 am

Post » Mon Aug 30, 2010 2:50 pm

scn QuestSCPTInt bDoOnceInt iGameDayEndBegin GameMode	If (GetStage MS16 >= 230) ; What If (GetStage MS16 == 240) ?		If bDoOnce			If (GameDaysPassed >= iGameDayEnd) ; Fix'd per Cipscis' below post [GameDaysPast is a Float]				ShowMessage V101RPMSG				V101RPOutpostMasterREF.Enable				MS16Vault101CaveDoorExterior.Disable				StopQuest ThisQuest			EndIf		Else			Set iGameDayEnd to (GameDaysPassed + 10)			Set bDoOnce to 1		EndIf	EndIfEnd
...should be 'cheaper' without the Timer.
User avatar
Michelle Chau
 
Posts: 3308
Joined: Sat Aug 26, 2006 4:24 am

Post » Mon Aug 30, 2010 11:58 am

Uhm... That is virtually the same script. Timer = iGameDayEnd
User avatar
butterfly
 
Posts: 3467
Joined: Wed Aug 16, 2006 8:20 pm

Post » Mon Aug 30, 2010 6:32 pm

Uhm... That is virtually the same script. Timer = iGameDayEnd
Virtually, but with one less variable to maintain/check since the game already tends to GameDaysPassed [GLOB:00000039]. :shrug:
User avatar
SiLa
 
Posts: 3447
Joined: Tue Jun 13, 2006 7:52 am

Post » Mon Aug 30, 2010 11:10 am

GameDaysPassed is a floating point value, so you shouldn't use "==" when comparing it.

Cipscis
User avatar
Aliish Sheldonn
 
Posts: 3487
Joined: Fri Feb 16, 2007 3:19 am

Post » Mon Aug 30, 2010 8:04 am

Thanks :goodjob:
User avatar
Haley Cooper
 
Posts: 3490
Joined: Wed Jun 14, 2006 11:30 am

Post » Mon Aug 30, 2010 7:09 pm

Wiki says that 'gamedayspassed' is a short. I don't recall for sure, but , I've done something like what you're describing.

I'd do something like this! Quest script.

scn MyDayCounterScriptshort TotalDaysshort StartDayshort DoOncebegin gamemodeif DoOnce == 0     if MyQuestCompletedSuccessfully          set DoOnce to 1          set StartDay to GameDaysPassed     endifendifif StartDay > 0     if StartDay < GameDaysPassed          set TotalDays to TotalDays + 1     endif     if TotalDays >= 10          Enable Stuff          set StartDay to -1           Maybe Stop This Quest     endifendif


short/float http://cs.elderscrolls.com/constwiki/index.php/Special_variables
User avatar
Emma louise Wendelk
 
Posts: 3385
Joined: Sat Dec 09, 2006 9:31 pm

Post » Mon Aug 30, 2010 12:36 pm

Oblivion's GameDaysPassed is a short, but Cipscis is right and FO3's is a float.

[just checked both in FO3/TES4Edit]
User avatar
Kim Bradley
 
Posts: 3427
Joined: Sat Aug 18, 2007 6:00 am

Post » Mon Aug 30, 2010 2:58 pm

The GECK Wiki's http://geck.gamesas.com/index.php/Special_Variables page correctly lists "GameDaysPassed" as a float. If I remember correctly, "TimeScale" and "GameHour" are also floats in Fallout 3, but I'm not in any position to check at the moment.

Cipscis
User avatar
Alan Whiston
 
Posts: 3358
Joined: Sun May 06, 2007 4:07 pm

Post » Mon Aug 30, 2010 11:16 am

I just looked in FO3Edit and the TimeScale, GameYear, GameMonth, GameDay, and GameHour globals are all shorts. Out of curiosity over GameDaysPassed being a float, I checked and it's altered incrementally from frame to frame which might be handy for checking, say, one and a half days passing or whatever other temporal increment one desires.
User avatar
Donatus Uwasomba
 
Posts: 3361
Joined: Sun May 27, 2007 7:22 pm


Return to Fallout 3