Then I'm not sure exactly what's going on in your case. I had tested it quite a bit myself, and then it's been part of FOOK2 for almost a year (up to the current v1.1 which uses JO's method), and for all that time in the wild so to speak, I'm not aware of any reports that would indicate either false positives or negatives.
Could you send me the test scripts you used which indicated false positives for you? Maybe I can see exactly why that was happening. You should also try JustinOther's method. If for some reason you really need to utilize a FOSE check at the first instant the game engine starts, you should probably instead use a system similar to this one, which I mention in the tutorial. It encapsulates the check within a quest stage result script, which you then call (almost like a function) each time right before you need the check value.
Whatever the case, thinking about all this again has been good because I think I may have thought of the best solution yet, that is if it will actually work and the FOSE guys are game ">
That's the last thing I just said above. If you're intentionally trying to use the FOSE.isPresent value before the first FOSE check runs, of course you can't guarantee it will be correct in either case. You have to use some awareness when designing your other scripted features so they allow time for at least the first FOSE check to run after the game is started.
If you're running with FOSE, yes it does, and that is in fact the whole point, and why it works. Since scripts don't run simultaneously (as far as I'm aware), you can't query the value of the FOSE.isPresent variable between the two commands in FOSEDetectionScript. So if FOSE is present, anytime you check the value it will be 1 (unless you check before the first iteration). If FOSE is not present, the script runs once and dies on the GetFOSEVersion command, leaving the value at 0.
Since those are FOSE functions, any scripts calling them while not running with FOSE will also fail.
I assume the false positives you mention were with your modified code, not with the FOSE Detect code as given. It's been tested extensively and doesn't give false positives* because of the behavior described above.
* unless you're checking the FOSE.isPresent value before the first iteration of the quest script. This is why I recommended changing that quest delay to 0.5 rather than the default of 5 as stated earlier in this thread and in the tutorial.
In any case, this may all be mostly academic, as I believe a better solution is JustinOther's Chicken and the Egg method. His implementation is better for a few reasons I won't try to explain here or now. I want to exhaustively test it myself before fully endorsing it as the recommended standard for FOSE detection - I've been meaning to do so for a while, but just haven't gotten around to it ">. However, just from examining the code, I'd say I'm about 95% sure it works as flawlessly as this one.
That is, every 5 seconds, it toggles the value back to 0, then back to 1.
Its still a good place to start though.
As for rechecking everytime the game is loaded, try:
GetGameLoaded
Description: returns 1 after a game is loaded on a per-script basis. For each script that calls GetGameLoaded, the command will return true exactly once each time the game is loaded and false thereafter.
GetGameRestarted
Description: returns 1 when the game is restarted on a per-script basis. For each script that calls GetGameRestarted, the commands returns true exactly once per game session. Useful for situations in which a script must set certain object properties or settings each time the game is started.
I had to use two seperate quests and scripts and extra messages due to getting false positives:
QUESTONE
scn checkfose Begin Gamemode
if fosewarning.ispresent != 1 set fosewarning.ispresent to getfoseversion endif
END ------------- QUESTTWO scn fosewarning
short fixtimer short checknow short ispresent short checkctr
begin GameMode if fixtimer < 1 && checknow < 1 set ispresent to 0 set fixtimer to 3 set checkctr to 0 endif
if fixtimer > 1 && checknow < 1 set fixtimer to (fixtimer - getsecondspassed) setquestdelay fosewarning 0.1 setquestdelay checkfose 0.1 elseif fixtimer <= 1 && checknow < 1 set checknow to 1 set fixtimer to 1 endif
if checknow == 1 setquestdelay fosewarning 0 setquestdelay checkfose 0 if ispresent == 1 showmessage aaaRTSrvwFoseTestok set checknow to 2 elseif ispresent == 0 if checkctr < 4 showmessage checkfosemsg set checkctr to checkctr + 1 else showmessage aaaRTSrvwFoseTestbad2 endif endif endif
You would be better served to create a new topic in the Fallout Mod Troubleshooting subforum.
When you create your new topic, add the following information, as you didn't give enough information to help us help you:
-does your game play normally when you load without FOSE? -what FOSE Version are you using? -what is your game patch version? -what FOSE dependent mods are you using?
i have i question has eney body ifer had this prob
everything is fine on load then i take about 5 6 steps then my walking sound for power armor goes away and all my key commands shut off none of them will work and after trying a key about 5 times my game will crash i cant seme to fix this eny help welcome i just reinstaled to try to fix this but no go
17 comments
Could you send me the test scripts you used which indicated false positives for you? Maybe I can see exactly why that was happening. You should also try JustinOther's method. If for some reason you really need to utilize a FOSE check at the first instant the game engine starts, you should probably instead use a system similar to this one, which I mention in the tutorial. It encapsulates the check within a quest stage result script, which you then call (almost like a function) each time right before you need the check value.
Whatever the case, thinking about all this again has been good because I think I may have thought of the best solution yet, that is if it will actually work and the FOSE guys are game ">
It's running randomly, sometimes one goes first, sometimes the other.
That's why I put in the 3 second timer, but that isn't foolproof either. I still get false negatives.
It's not a problem with the script logic itself that is causing the false negatives, its a problem with how the FO3 engine runs the scripts.
That's the last thing I just said above. If you're intentionally trying to use the FOSE.isPresent value before the first FOSE check runs, of course you can't guarantee it will be correct in either case. You have to use some awareness when designing your other scripted features so they allow time for at least the first FOSE check to run after the game is started.
I used a simple showmessage, with the base code, and just loaded and reloaded multiple times.
if fose.ispresent == 1
showmessage foseOk
elseif fose.ispresent == 0
showmessage foseBad
endif
Even with questdelay of 0.1
EDIT: And yes, I am talking about that very first second when the game loads up. Which I guess is only important if it triggers a one-time script.
If you're running with FOSE, yes it does, and that is in fact the whole point, and why it works. Since scripts don't run simultaneously (as far as I'm aware), you can't query the value of the FOSE.isPresent variable between the two commands in FOSEDetectionScript. So if FOSE is present, anytime you check the value it will be 1 (unless you check before the first iteration). If FOSE is not present, the script runs once and dies on the GetFOSEVersion command, leaving the value at 0.
This is all explained in the tutorial thread: http://www.fookunity.com/forum/showthread.php?t=622
Since those are FOSE functions, any scripts calling them while not running with FOSE will also fail.
I assume the false positives you mention were with your modified code, not with the FOSE Detect code as given. It's been tested extensively and doesn't give false positives* because of the behavior described above.
* unless you're checking the FOSE.isPresent value before the first iteration of the quest script. This is why I recommended changing that quest delay to 0.5 rather than the default of 5 as stated earlier in this thread and in the tutorial.
In any case, this may all be mostly academic, as I believe a better solution is JustinOther's Chicken and the Egg method. His implementation is better for a few reasons I won't try to explain here or now. I want to exhaustively test it myself before fully endorsing it as the recommended standard for FOSE detection - I've been meaning to do so for a while, but just haven't gotten around to it ">. However, just from examining the code, I'd say I'm about 95% sure it works as flawlessly as this one.
That is, every 5 seconds, it toggles the value back to 0, then back to 1.
Its still a good place to start though.
As for rechecking everytime the game is loaded, try:
GetGameLoaded
Description: returns 1 after a game is loaded on a per-script basis. For each script that calls GetGameLoaded, the command will return true exactly once each time the game is loaded and false thereafter.
GetGameRestarted
Description: returns 1 when the game is restarted on a per-script basis. For each script that calls GetGameRestarted, the commands returns true exactly once per game session. Useful for situations in which a script must set certain object properties or settings each time the game is started.
I had to use two seperate quests and scripts and extra messages due to getting false positives:
QUESTONE
scn checkfose
Begin Gamemode
if fosewarning.ispresent != 1
set fosewarning.ispresent to getfoseversion
endif
END
-------------
QUESTTWO
scn fosewarning
short fixtimer
short checknow
short ispresent
short checkctr
begin GameMode
if fixtimer < 1 && checknow < 1
set ispresent to 0
set fixtimer to 3
set checkctr to 0
endif
if fixtimer > 1 && checknow < 1
set fixtimer to (fixtimer - getsecondspassed)
setquestdelay fosewarning 0.1
setquestdelay checkfose 0.1
elseif fixtimer <= 1 && checknow < 1
set checknow to 1
set fixtimer to 1
endif
if checknow == 1
setquestdelay fosewarning 0
setquestdelay checkfose 0
if ispresent == 1
showmessage aaaRTSrvwFoseTestok
set checknow to 2
elseif ispresent == 0
if checkctr < 4
showmessage checkfosemsg
set checkctr to checkctr + 1
else
showmessage aaaRTSrvwFoseTestbad2
endif
endif
endif
END
You would be better served to create a new topic in the Fallout Mod Troubleshooting subforum.
When you create your new topic, add the following information, as you didn't give enough information to help us help you:
-does your game play normally when you load without FOSE?
-what FOSE Version are you using?
-what is your game patch version?
-what FOSE dependent mods are you using?
Have you thoroughly read and understood the FOSE documentation?
Do you know how to post your load order?
Remember, do not reply to this message, create a new topic as directed above. -myrmaad
everything is fine on load then i take about 5 6 steps then my walking sound for power armor goes away and all my key commands shut off none of them will work and after trying a key about 5 times my game will crash i cant seme to fix this eny help welcome i just reinstaled to try to fix this but no go
No problem at all. Thanks for the endorsement and note of credit ">
Feel free to go into detail about any thoughts you may have about modifying this method or coming up with a better one in the discussion thread.
BTW - a while back I was almost ready to start on an offline Achievements mod, until someone pointed out you had already done it ">