Jump to content

Requesting NV Scripting Help - Script Crashes to Desktop.


Recommended Posts

At that point, you could even workaround in a charming way: activate the pipboy replacer via MCM.

 

That does sound intriguing. I have not used MCM yet, so I don't know how it works. Can it swap it automatically when the pipboy is called or did you mean it as a one time swap?

 

It only crashed in console mode if the item had no screen or buttons, probably another NV issue with the slot. I can equip the pipboy and the alternate from the console, but not via script. 

 

Or you can emulate console push by tapping console button via script

 TapKey 41

 

How would that look in code? Just put TapKey 41 on the line before player.equipItem WristbandPC 1 1 ?

Link to comment
Guest tomm434

I use it for another purpose - I too have a code which CTDs game if done in gamemode

begin gamemode

if stage ==0
 let stage :=1 ; go to stage 1 on quest start

elseif stage == 1
  tapkey 41 ; bring console, set quest delay yo 0.05 in GECK

elseif stage == 2 ; (set by console script after console code is done)
stopquest ThisQuest
endif

end

begin menumode ; That code executes when console is up. note that I made "if stage == 1" check on purpose so code executes exactly when YOU make player go to console

if stage == 1
  let stage :=2
  {YourCodeHere}
  Print "Wait 3 seconds and press ~ button"
endif

end

So what hapens ingame - player loads mod and then after half a second he is console mode, your code is done and he sees message "Wait 3 seconds and press ~ button". He waits, press console button and bam - pipboy is up.

now, I think you can make timer for console so it quits automaticly - I don't know how timer works in menumode.

I don't do timer because in my mod game CTDs for minority of players (1%?) and there are only 3 scenes when they'll have to wait 3 seconds in console.

Link to comment

What you want that the MCM does is entirely your decision, the difference is that the script will run in menumode instead than gamemode - You won't even have to change the script too much. Of course you still will need a GameMode block to handle the light and all, but this is not so much important.

 

I'm going to upload a small mod today, after that if you want I can write your MCM, you just need to send me the ESP (keep always a backup), it shouldn't take me a lot, like 1-2 hours to do and test

Link to comment

now, I think you can make timer for console so it quits automaticly - I don't know how timer works in menumode.

 

You can do the same you would do on a gamemode, but on a conditioned menumode. After 3 seconds, CloseAllMenu. Can people do mess in console these 3 seconds? You know, Murphy's law :P

 

However, very personal opinion, that seems very good for debug, and smart, but on a released mod do you see it as a charming solution? I suspect it could warn people without reasons.

(I also don't know what could cause to those using achievements, do I remember well? there's that silly rule where if you open console you stop the achievements? I don't know since I never hunted them)

Link to comment
Guest tomm434

 

now, I think you can make timer for console so it quits automaticly - I don't know how timer works in menumode.

 

You can do the same you would do on a gamemode, but on a conditioned menumode. After 3 seconds, CloseAllMenu. Can people do mess in console these 3 seconds? You know, Murphy's law :P

 

However, very personal opinion, that seems very good for debug, and smart, but on a released mod do you see it as a charming solution? I suspect it could warn people without reasons.

(I also don't know what could cause to those using achievements, do I remember well? there's that silly rule where if you open console you stop the achievements? I don't know since I never hunted them)

 

Right. I can always disable ~ key. Those users need someone to look after them mischief-makers.

 

From Fallout wiki:

First and foremost, using the console on the PC version for any reason will disable achievements for that play session. This includes non-controversial commands such as save. Simply opening the console will not disable achievements; a command must be entered and run via the console.
Link to comment
Guest tomm434

And it looks even funnier with timer. (won't be any black screens since all blackscreens waitings are from my code that initiates the cutsscene)

 

http://www.dailymotion.com/video/k2s6GXJiNiVxVeb8d6o

begin menumode



if stage == 1




if MenuModeStage == 1
let MenuModeTimer -= GetSecondsPassed
Print "WAIT " + $MenuModeTimer + " more seconds"

	if MenuModeTimer
                let stage :=2
		EnableKey 41 ; enable console key
		con_CloseAllMenus
	endif


elseif MenuModeStage == 0
     DisableKey 41 ; disable console key

     {your code}
     set MenuModeStage to 1
     set MenuModeTimer to 5 ;seconds
endif



endif

end

but yeah do MCM menu.

I hate readius and pipboy replacers because the don't ask for being activated.

Also make "Deactivate" button in MCM menu - very important. Player don't need to enter console commands to delete the custom pipboy.

 

Link to comment

What you want that the MCM does is entirely your decision, the difference is that the script will run in menumode instead than gamemode - You won't even have to change the script too much. Of course you still will need a GameMode block to handle the light and all, but this is not so much important.

 

I'm going to upload a small mod today, after that if you want I can write your MCM, you just need to send me the ESP (keep always a backup), it shouldn't take me a lot, like 1-2 hours to do and test

 

If you or anyone else would like to take a look at it what I have so far, I have uploaded a copy to this post.

NVHoloPipBoy WIP 1.0.zip

Link to comment

Oh well I just opened it and made a modify. You could try the ESP attached here.

 

Thanks! It made some progress. It successfully swapped the wristband in without crashing, I assume that Con_closeallmenus command allowed it?

 

It is not there yet however. It now crashes on attemping to callup the pipboy. I am reviewing the code now. Perhaps it needs another of those commands in the call up function.

 

EDIT: Okay I tried adding that command you added to the first section to the points that did the same thing, but it still crashed on call up. Now sure what it is doing, but here is the code as I edited it:

scn BIDEpipRemoverSCRIPT

short Phase

short InitMod
short ModKey
short ModKeyState

short PipKeyState
float PipSpamTimer
ref EquippedItem
ref EquippedCondition

short ModMenuActive
short ModMenuButton
short RemapKeyFlag
short KeyRemapBuffer

float KeyTimer

short UninstallFlag

int NVSEcheck

begin Gamemode
	;Check to ensure NVSE is present before the initial removal occurs.
	;Loops continually until NVSE is found or the mod is uninstalled, in case
	;some unreasonable player decides to save after it doesn't work.
	if (NVSECheck == 0)
	;if GetNVSEVersion < 4
		set NVSECheck to GetNVSEVersion 
		return
	endif

	;If the mod has not been initialized, and the player is finished with the Doc.
	if (UninstallFlag == 0 && InitMod == 0 && getStage VMQ01 > 0)
		if (Phase == 0)
			set ModKey to 48
			player.unEquipItem Pipboy 1 1
			player.removeItem PipboyGlove 1 1
			player.additem PipboywristPC 1 1
			set EquippedItem to player.getEquippedObject 2
			if (EquippedItem != 0)
				set EquippedCondition to (player.getEquippedCurrentHealth 2 / getHealth EquippedItem && getPlayerControlsDisabled 0 1 == 0)
				player.removeItem EquippedItem 1 1
				set Phase to 1
			else
				set InitMod to 1
				set Phase to 0
			endif
		elseif (Phase == 1)
			player.addItemHealthPercent EquippedItem 1 EquippedCondition 1
			player.ShowRepairMenu
			player.equipItem EquippedItem 0 1
			player.EquipItem PipboywristPC 1 1
			con_closeallmenus
			set InitMod to 1
			set Phase to 0
		endif
	endif

	;Mod menu functions.
	if (ModMenuActive == 1)
		set ModMenuButton to getButtonPressed
			if (ModMenuButton == 0)
				set ModMenuActive to 2
				set RemapKeyFlag to 1
				showMessage BIDEpipRemapKey
			elseif (ModMenuButton == 1)
				set UninstallFlag to 1
				set EquippedItem to player.getEquippedObject 2
				if (EquippedItem != 0)
					player.unEquipItem EquippedItem
				endif
				player.removePerk BIDEpipLightPerk
				player.removeItem PipboywristPC 1 1
				player.equipItem Pipboy 1 1
				resetPipboyManager
				showMessage BIDEpipUninstall
				set ModMenuActive to 0
				stopQuest BIDEpipRemover
			elseif (ModMenuButton == 2)
				set ModMenuActive to 0
			endif
	elseif (ModMenuActive == 2)
		set RemapKeyFlag to 0
		set ModMenuActive to 0

	;Normal functionality
	elseif (UninstallFlag == 0 && player.getItemCount Pipboy != 0)
		if (PipSpamTimer > 0)
			set PipSpamTimer to PipSpamTimer - getSecondsPassed
		endif

		;Pip-Boy callup hook
		if (isControlPressed 14 == 1 && PipKeyState == 0 && PipSpamTimer <= 0)
			set pipKeyState to 1

		elseif (PipKeyState == 1)
			if (Phase == 0)
				set PipKeyState to 1
				player.unEquipItem PipboywristPC 1 1
				player.EquipItem Pipboy 1 1
				resetPipboyManager
				set Phase to 2
			elseif (Phase == 3)
				player.unEquipItem Pipboy 1 1
				player.EquipItem PipboyWristPC 1 1
				con_closeallmenus
				set EquippedItem to player.getEquippedObject 2
				if (EquippedItem != 0)
					set EquippedCondition to (player.getEquippedCurrentHealth 2 / getHealth EquippedItem)
					player.removeItem EquippedItem 1 1
					set Phase to 4
				else
					set Phase to 0
					set PipKeyState to 0
				endif
			elseif (Phase == 4)
				player.addItemHealthPercent EquippedItem 1 EquippedCondition 1
				player.equipItem EquippedItem 0 1
				player.EquipItem PipboywristPC 1 1
				con_closeallmenus
				set Phase to 0
				set PipKeyState to 0
			endif
		endif
	
		;Pip-Boy light and options menu callup functionality
		if (isKeyPressed ModKey == 1 && KeyTimer < 3)
			set KeyTimer to KeyTimer + getSecondsPassed
			set ModKeyState to 1
		elseif (KeyTimer >= 3)
			showMessage BIDEpipOptions
			set ModMenuActive to 1
			set KeyTimer to 0
			set ModKeyState to 0
		elseif (isKeyPressed ModKey == 0 && KeyTimer < 3 && ModKeyState == 1)
			if (player.hasPerk BIDEpipLightPerk == 0)
				player.addPerk BIDEpipLightPerk
				playSound UIPipBoyLightOn
			else
				player.removePerk BIDEpipLightPerk
				playSound UIPipBoyLightOff
			endif
			set ModKeyState to 0
			set KeyTimer to 0
		elseif (isKeyPressed ModKey == 0 && ModKeyState == 0 && KeyTimer > 0)
			set KeyTimer to 0
		endif

	;If the player loses the Pip-Boy, remove the light, if it had been on.
	elseif (UninstallFlag == 0 && player.getItemCount Pipboy == 0 && player.hasPerk BIDEpipLightPerk == 1)
		player.removePerk BIDEpipLightPerk
	endif
end

;Key remapping functionality.
begin Menumode 1001
	if (RemapKeyFlag == 1)
		set KeyRemapBuffer to getKeyPress 0
		if (KeyRemapBuffer > 0 && KeyRemapBuffer < 256)
			set ModKey to KeyRemapBuffer
		endif
	endif
end

begin Menumode
	if (Phase == 2 && Menumode == 1)
		set Phase to 3
		set PipSpamTimer to 0.3
	endif
end
Link to comment

I was opening the pipboy just fine, without crashing. However I tested not much, the package I used for install was a bit messed. It was replacing vanilla, messing the textures of common pipboys, so I didn't make a lot of experiments. Do you have by chance a "cleaner" installation, without unuseful files, so I can re-work the script in a better way?

Link to comment

I was opening the pipboy just fine, without crashing. However I tested not much, the package I used for install was a bit messed. It was replacing vanilla, messing the textures of common pipboys, so I didn't make a lot of experiments. Do you have by chance a "cleaner" installation, without unuseful files, so I can re-work the script in a better way?

 

Prepping it now. What gender character where you using? I realize that would affect what model was loaded. I was testing with a female character and thus was messing with that model. The male just had a copy of the default pipboy.

 

Edit: Tried it with Male character no change. You mentioned MCM earlier. Is the command you are using made to work by that? Mine is the only mod I have loaded besides DLC.

 

Edit: Here is the mod with only bare essential files. The esp is the one with your current edits. The wristband models are only the standard replacer with the holograph shell removed so you can tell when its loaded.

NVHoloPipBoy WIP 1.1.zip

Link to comment

 


I was testing with a female character

Me too

 

 


You mentioned MCM earlier. Is the command you are using made to work by that?

The MCM should be done from scratch. It's an alternative that could be a nice idea in my opinion - instead that giving you the pipboy automatically when you start the game, you flag a check on the MCM menu. Same to uninstall it, you unflag the check.

 

 


Here is the mod with only bare essential files.

thank you, I'll take a look at the whole script from scratch

 

Link to comment

Ok the problem is around line 94, the whole part called "Pip-Boy callup hook" (about 20 lines). When you press TAB it's supposed to switch your pipboy with the "original" pipboy, so you have the CTD for the same reason you CTD at start. I ripped that part, it doesn't CTD anymore, however I did it because I don't see why you would want to re-switch the pipboy everytime you open it, it makes no sense in my opinion, but if you know the reason please tell me and we'll find an alternative.

 

(PS the fact I wasn't crashing was because I placed a Return in the middle of the code, so that I was able to test only the first part of the script, and then I forgot about it)

 

Also, Rickerhk is right, that variable must be declared as float and not ref.

A couple of things I noticed:

- Looking at the code it seems you are using a special hotkey for that, am I right? does it work properly?

- That small black screen floating over the pipboy mesh... is it necessary?

 

I attach you the modified script.

023 - 0RD-009 Hologram Pip-Boy 3000 Enriched NV.esp

Link to comment

Ok the problem is around line 94, the whole part called "Pip-Boy callup hook" (about 20 lines). When you press TAB it's supposed to switch your pipboy with the "original" pipboy, so you have the CTD for the same reason you CTD at start. I ripped that part, it doesn't CTD anymore, however I did it because I don't see why you would want to re-switch the pipboy everytime you open it, it makes no sense in my opinion, but if you know the reason please tell me and we'll find an alternative.

 

(PS the fact I wasn't crashing was because I placed a Return in the middle of the code, so that I was able to test only the first part of the script, and then I forgot about it)

 

Also, Rickerhk is right, that variable must be declared as float and not ref.

A couple of things I noticed:

- Looking at the code it seems you are using a special hotkey for that, am I right? does it work properly?

- That small black screen floating over the pipboy mesh... is it necessary?

 

I attach you the modified script.

 

The switch during call up is supposed to be intentional. In the original F03 mod, it is supposed to replace the pipboy with the plain wristband at the start. Then when you call it up it switches to the replacer to create the illusion of a "holographic" interface being generated, and back to the wristband when put away for the illusion of "deactivating" the holographic interface. Works great in F03 but the swap can occur there in game mode.

 

You can see the pictures in my original mod: http://www.nexusmods.com/fallout3/mods/21133/?

 

As far I know regarding special hotkeys, I was using one for the pipboy light, as I think pressing the call up initiated the pipboy swap so it was unusable to hold as a light button. Though it may just be left over from the pipboy light mod I integrated.

 

The black screen is there for now even if swapping in menu mode, the game crashes if the pipboy model does not have at least screen and the 3 buttons. At least I think it does. The original F03 Model was just the plain wrist band, but that model crashed when I loaded it. So I restarted with the full holomodel and stripped components until it crashed. It crashed when I removed the screen or buttons. For the model I uploaded to you I started with a full holomodel and removed only the outer holoshell so you could tell which model was loaded. 

 

So unless there is way around it, I need a model with screen and buttons left over. My plan was that, if we can get the swap working I would blender the wristband to hide the screen and buttons.

 

EDIT: Mentioning the hotkey gave me an Idea. I would prefer it to happen automatically, but perhaps it might easier right now to create a hot key that swaps it after it was called up. So you would call it up (activate menu mode) and press an "on" button to activate the hologram (make the swap). Press the button again to turn "off" the hologram (swap it back). This might have the added advantage of allowing the user to keep the hologram activated if they prefer, and only allowing the swap in menu mode. Perhaps restore the pipboy light button and use that hotkey.

Link to comment

Oh now I understood why you need to re-equip it and why you retextured it blue.

Tomorrow I'll modify the script so that it won't CTD when you re-equip.

But concerning the light, the best deal is still using a hotkey.

Avoiding it and sticking with vanilla method (keeping tab pressed) would be possible but not super easy.

However, talking about the small black floating screen, how will you solve that issue in the future?

Link to comment

Oh now I understood why you need to re-equip it and why you retextured it blue.

Tomorrow I'll modify the script so that it won't CTD when you re-equip.

But concerning the light, the best deal is still using a hotkey.

Avoiding it and sticking with vanilla method (keeping tab pressed) would be possible but not super easy.

However, talking about the small black floating screen, how will you solve that issue in the future?

 

 

Yes I agree to stick with the hot key for the light. I have gotten used to it.

 

As for the black screen, it is annoying but unless I find a way for New Vegas to be happy with a model with no screen or buttons (it crashes if loaded in pipboy slot without a screen or buttons), I shall just have to blender the model to move the screen and buttons within the arm to hide them.

Link to comment
  • 3 weeks later...

you're right, I forgot about it, sorry.

 

To avoid CTD, the "original" NV mod used a workaround.

This is more or less what it does:

ShowRepairMenu
... <rest of the code, like un/equip equip pipboy>
con_closeallmenus

Since in NV it crashes if you equip pipboy in gamemode, it first calls a menumode (in this case showrepairmenu), then it equips the pipboy, then in the same exact frame it closes the menumode with con_closeallmenus - as consequence, you won't see anything strange in your monitor, no strange windows.

 

But here the strange part: since it's running in the same frame it shouldn't have the effect we want (=avoid the CTD), because we're not still in menumode... but still, it has that effect, it works. I can't explain why, I guess the "real answer" is in something hardcoded, and it's in that ShowRepairMenu. If you use another kind of menumode, it won't work (tested with 2-3 different kinds, like barter menu).

 

EDIT: I forgot. Your ESP had all the DLCs as requirement, maybe you don't want it. In case you need to clean them, you just need to open the ESP via FNVEdit and right-click >>> Clean Masters. It will seem that it doesnt' do anything, but when you click to quit FNVEdit it will ask to save the changes, it has removed them masters.

Link to comment
  • 3 weeks later...

you're right, I forgot about it, sorry.

 

To avoid CTD, the "original" NV mod used a workaround.

This is more or less what it does:

ShowRepairMenu
... <rest of the code, like un/equip equip pipboy>
con_closeallmenus

Since in NV it crashes if you equip pipboy in gamemode, it first calls a menumode (in this case showrepairmenu), then it equips the pipboy, then in the same exact frame it closes the menumode with con_closeallmenus - as consequence, you won't see anything strange in your monitor, no strange windows.

 

But here the strange part: since it's running in the same frame it shouldn't have the effect we want (=avoid the CTD), because we're not still in menumode... but still, it has that effect, it works. I can't explain why, I guess the "real answer" is in something hardcoded, and it's in that ShowRepairMenu. If you use another kind of menumode, it won't work (tested with 2-3 different kinds, like barter menu).

 

EDIT: I forgot. Your ESP had all the DLCs as requirement, maybe you don't want it. In case you need to clean them, you just need to open the ESP via FNVEdit and right-click >>> Clean Masters. It will seem that it doesnt' do anything, but when you click to quit FNVEdit it will ask to save the changes, it has removed them masters.

 

Yes the masters will be cleaned up after, I just leave them in now to avoid having to uncheck them each time I open the Geck.

 

So I enter your code and progress is made it no longer crashes upon call up. However I know I have the close all menus in the wrong place as it does not actually open the pipboy menu. I figure I have too many close menus but I can't figure which one to move to get it to work.

 

Here is the code now.

scn BIDEpipRemoverSCRIPT

short Phase

short InitMod
short ModKey
short ModKeyState

short PipKeyState
float PipSpamTimer
ref EquippedItem
ref EquippedCondition

short ModMenuActive
short ModMenuButton
short RemapKeyFlag
short KeyRemapBuffer

float KeyTimer

short UninstallFlag

int NVSEcheck

begin Gamemode
	;Check to ensure NVSE is present before the initial removal occurs.
	;Loops continually until NVSE is found or the mod is uninstalled, in case
	;some unreasonable player decides to save after it doesn't work.
	if (NVSECheck == 0)
	;if GetNVSEVersion < 4
		set NVSECheck to GetNVSEVersion 
		return
	endif

	;If the mod has not been initialized, and the player is finished with the Doc.
	if (UninstallFlag == 0 && InitMod == 0 && getStage VMQ01 > 0)
		if (Phase == 0)
			set ModKey to 48
			player.unEquipItem Pipboy 1 1
			player.removeItem PipboyGlove 1 1
			player.additem PipboywristPC 1 1
			set EquippedItem to player.getEquippedObject 2
			if (EquippedItem != 0)
				set EquippedCondition to (player.getEquippedCurrentHealth 2 / getHealth EquippedItem && getPlayerControlsDisabled 0 1 == 0)
				player.removeItem EquippedItem 1 1
				set Phase to 1
			else
				set InitMod to 1
				set Phase to 0
			endif
		elseif (Phase == 1)
			player.addItemHealthPercent EquippedItem 1 EquippedCondition 1
			player.ShowRepairMenu
			player.equipItem EquippedItem 0 1
			player.EquipItem PipboywristPC 1 1
			con_closeallmenus
			set InitMod to 1
			set Phase to 0
		endif
	endif

	;Mod menu functions.
	if (ModMenuActive == 1)
		set ModMenuButton to getButtonPressed
			if (ModMenuButton == 0)
				set ModMenuActive to 2
				set RemapKeyFlag to 1
				showMessage BIDEpipRemapKey
			elseif (ModMenuButton == 1)
				set UninstallFlag to 1
				set EquippedItem to player.getEquippedObject 2
				if (EquippedItem != 0)
					player.unEquipItem EquippedItem
				endif
				player.removePerk BIDEpipLightPerk
				player.removeItem PipboywristPC 1 1
				player.ShowRepairMenu
				player.equipItem Pipboy 1 1
				con_closeallmenus
				resetPipboyManager
				showMessage BIDEpipUninstall
				set ModMenuActive to 0
				stopQuest BIDEpipRemover
			elseif (ModMenuButton == 2)
				set ModMenuActive to 0
			endif
	elseif (ModMenuActive == 2)
		set RemapKeyFlag to 0
		set ModMenuActive to 0

	;Normal functionality
	elseif (UninstallFlag == 0 && player.getItemCount Pipboy != 0)
		if (PipSpamTimer > 0)
			set PipSpamTimer to PipSpamTimer - getSecondsPassed
		endif

		;Pip-Boy callup hook
		if (isControlPressed 14 == 1 && PipKeyState == 0 && PipSpamTimer <= 0)
			set pipKeyState to 1

		elseif (PipKeyState == 1)
			if (Phase == 0)
				set PipKeyState to 1
				player.unEquipItem PipboywristPC 1 1
				player.ShowRepairMenu
				player.EquipItem Pipboy 1 1
				con_closeallmenus
				resetPipboyManager
				set Phase to 2
			elseif (Phase == 3)
				player.unEquipItem Pipboy 1 1
				player.ShowRepairMenu
				player.EquipItem PipboyWristPC 1 1
				con_closeallmenus
				set EquippedItem to player.getEquippedObject 2
				if (EquippedItem != 0)
					set EquippedCondition to (player.getEquippedCurrentHealth 2 / getHealth EquippedItem)
					player.removeItem EquippedItem 1 1
					set Phase to 4
				else
					set Phase to 0
					set PipKeyState to 0
				endif
			elseif (Phase == 4)
				player.addItemHealthPercent EquippedItem 1 EquippedCondition 1
				player.equipItem EquippedItem 0 1
				player.ShowRepairMenu
				player.EquipItem PipboywristPC 1 1
				con_closeallmenus
				set Phase to 0
				set PipKeyState to 0
			endif
		endif
	
		;Pip-Boy light and options menu callup functionality
		if (isKeyPressed ModKey == 1 && KeyTimer < 3)
			set KeyTimer to KeyTimer + getSecondsPassed
			set ModKeyState to 1
		elseif (KeyTimer >= 3)
			showMessage BIDEpipOptions
			set ModMenuActive to 1
			set KeyTimer to 0
			set ModKeyState to 0
		elseif (isKeyPressed ModKey == 0 && KeyTimer < 3 && ModKeyState == 1)
			if (player.hasPerk BIDEpipLightPerk == 0)
				player.addPerk BIDEpipLightPerk
				playSound UIPipBoyLightOn
			else
				player.removePerk BIDEpipLightPerk
				playSound UIPipBoyLightOff
			endif
			set ModKeyState to 0
			set KeyTimer to 0
		elseif (isKeyPressed ModKey == 0 && ModKeyState == 0 && KeyTimer > 0)
			set KeyTimer to 0
		endif

	;If the player loses the Pip-Boy, remove the light, if it had been on.
	elseif (UninstallFlag == 0 && player.getItemCount Pipboy == 0 && player.hasPerk BIDEpipLightPerk == 1)
		player.removePerk BIDEpipLightPerk
	endif
end

;Key remapping functionality.
begin Menumode 1001
	if (RemapKeyFlag == 1)
		set KeyRemapBuffer to getKeyPress 0
		if (KeyRemapBuffer > 0 && KeyRemapBuffer < 256)
			set ModKey to KeyRemapBuffer
		endif
	endif
end

begin Menumode
	if (Phase == 2 && Menumode == 1)
		set Phase to 3
		set PipSpamTimer to 0.3
	endif
end
Link to comment

 


I just leave them in now to avoid having to uncheck them each time I open the Geck.

To stop that annoyance, you should delete the <name of dlc>.NAM files from the Data folder. Those NAM files have no other purpose than check the DLCs when you load a mod in the GECK, which is VEEEEERY annoying :P

Link to comment

 

I just leave them in now to avoid having to uncheck them each time I open the Geck.

To stop that annoyance, you should delete the <name of dlc>.NAM files from the Data folder. Those NAM files have no other purpose than check the DLCs when you load a mod in the GECK, which is VEEEEERY annoying :P

 

 

Thanks! that is a very useful tip! Masters have been cleaned. Now to solve where to put your code suggestions so it doesn't crash but still lets you use the pipboy. I have tried several permutations removing the closeall menus, but then the repair menu just comes up. If you close it you still don't get the pipboy menu. Not sure why it falls to call it up.

023 - 0RD-009 Hologram Pip-Boy 3000 Enriched NV.esp

Link to comment

you're right, I forgot about it, sorry.

 

To avoid CTD, the "original" NV mod used a workaround.

This is more or less what it does:

ShowRepairMenu
... <rest of the code, like un/equip equip pipboy>
con_closeallmenus

Since in NV it crashes if you equip pipboy in gamemode, it first calls a menumode (in this case showrepairmenu), then it equips the pipboy, then in the same exact frame it closes the menumode with con_closeallmenus - as consequence, you won't see anything strange in your monitor, no strange windows.

 

But here the strange part: since it's running in the same frame it shouldn't have the effect we want (=avoid the CTD), because we're not still in menumode... but still, it has that effect, it works. I can't explain why, I guess the "real answer" is in something hardcoded, and it's in that ShowRepairMenu. If you use another kind of menumode, it won't work (tested with 2-3 different kinds, like barter menu).

 

EDIT: I forgot. Your ESP had all the DLCs as requirement, maybe you don't want it. In case you need to clean them, you just need to open the ESP via FNVEdit and right-click >>> Clean Masters. It will seem that it doesnt' do anything, but when you click to quit FNVEdit it will ask to save the changes, it has removed them masters.

 

Success!!! I finally got it to work properly! Thank you so much for your help.

 

I got it to work by moving the needed pipboy swap under the menumode space and leaving the inital gamemode swaps with your initial fix. Here is the working code (it could use some clean up but all functions seem to work):

scn BIDEpipRemoverSCRIPT

short Phase

short InitMod
short ModKey
short ModKeyState

short PipKeyState
float PipSpamTimer
ref EquippedItem
ref EquippedCondition

short ModMenuActive
short ModMenuButton
short RemapKeyFlag
short KeyRemapBuffer

float KeyTimer

short UninstallFlag

int NVSEcheck

begin Gamemode
	;Check to ensure NVSE is present before the initial removal occurs.
	;Loops continually until NVSE is found or the mod is uninstalled, in case
	;some unreasonable player decides to save after it doesn't work.
	if (NVSECheck == 0)
	;if GetNVSEVersion < 4
		set NVSECheck to GetNVSEVersion 
		return
	endif

	;If the mod has not been initialized, and the player is finished with the Doc.
	if (UninstallFlag == 0 && InitMod == 0 && getStage VMQ01 > 0)
		if (Phase == 0)
			set ModKey to 48
			player.unEquipItem Pipboy 1 1
			player.removeItem PipboyGlove 1 1
			player.additem PipboywristPC 1 1
			player.ShowRepairMenu
			player.EquipItem PipboywristPC 1 1
			con_closeallmenus
			set InitMod to 1
			set Phase to 1
			;set EquippedItem to player.getEquippedObject 2
			;if (EquippedItem != 0)
				;set EquippedCondition to (player.getEquippedCurrentHealth 2 / getHealth EquippedItem && getPlayerControlsDisabled 0 1 == 0)
				;player.removeItem EquippedItem 1 1
				;set Phase to 1
			;else
				;set InitMod to 1
				;set Phase to 0
			;endif
		elseif (Phase == 1)
			;player.addItemHealthPercent EquippedItem 1 EquippedCondition 1
			player.unEquipItem Pipboy 1 1
			player.ShowRepairMenu
			player.EquipItem PipboywristPC 1 1
			con_closeallmenus
			set InitMod to 1
			set Phase to 0
			;endif
		;elseif (Phase == 2)
			;player.unEquipItem Pipboy 1 1
			;player.ShowRepairMenu
			;player.EquipItem PipboywristPC 1 1
			;con_closeallmenus
			;set InitMod to 1
			;set Phase to 0
		endif
	endif

	;Mod menu functions.
	if (ModMenuActive == 1)
		set ModMenuButton to getButtonPressed
			if (ModMenuButton == 0)
				set ModMenuActive to 2
				set RemapKeyFlag to 1
				showMessage BIDEpipRemapKey
			elseif (ModMenuButton == 1)
				set UninstallFlag to 1
				set EquippedItem to player.getEquippedObject 2
				if (EquippedItem != 0)
					player.unEquipItem EquippedItem
				endif
				player.removePerk BIDEpipLightPerk
				player.removeItem PipboywristPC 1 1
				player.ShowRepairMenu
				player.equipItem Pipboy 1 1
				con_closeallmenus
				resetPipboyManager
				showMessage BIDEpipUninstall
				set ModMenuActive to 0
				stopQuest BIDEpipRemover
			elseif (ModMenuButton == 2)
				set ModMenuActive to 0
			endif
	elseif (ModMenuActive == 2)
		set RemapKeyFlag to 0
		set ModMenuActive to 0

	;Normal functionality
	elseif (UninstallFlag == 0 && player.getItemCount Pipboy != 0)
		if (PipSpamTimer > 0)
			set PipSpamTimer to PipSpamTimer - getSecondsPassed
		endif

		if (isControlPressed 14 == 1 && PipKeyState == 0 && PipSpamTimer <= 0)
			set pipKeyState to 1
		endif
	
		;Pip-Boy light and options menu callup functionality
		if (isKeyPressed ModKey == 1 && KeyTimer < 3)
			set KeyTimer to KeyTimer + getSecondsPassed
			set ModKeyState to 1
		elseif (KeyTimer >= 3)
			showMessage BIDEpipOptions
			set ModMenuActive to 1
			set KeyTimer to 0
			set ModKeyState to 0
		elseif (isKeyPressed ModKey == 0 && KeyTimer < 3 && ModKeyState == 1)
			if (player.hasPerk BIDEpipLightPerk == 0)
				player.addPerk BIDEpipLightPerk
				playSound UIPipBoyLightOn
			else
				player.removePerk BIDEpipLightPerk
				playSound UIPipBoyLightOff
			endif
			set ModKeyState to 0
			set KeyTimer to 0
		elseif (isKeyPressed ModKey == 0 && ModKeyState == 0 && KeyTimer > 0)
			set KeyTimer to 0
		endif

	;If the player loses the Pip-Boy, remove the light, if it had been on.
	elseif (UninstallFlag == 0 && player.getItemCount Pipboy == 0 && player.hasPerk BIDEpipLightPerk == 1)
		player.removePerk BIDEpipLightPerk
	endif
end

;Key remapping functionality.
begin Menumode 1001
	if (RemapKeyFlag == 1)
		set KeyRemapBuffer to getKeyPress 0
		if (KeyRemapBuffer > 0 && KeyRemapBuffer < 256)
			set ModKey to KeyRemapBuffer
		endif
	endif
end

begin Menumode 1
	player.unEquipItem PipboywristPC 1 1
	player.EquipItem Pipboy 1 1
	resetPipboyManager
	set InitMod to 0
	set Phase to 1
end
Link to comment

 

Success!!! I finally got it to work properly! Thank you so much for your help.

 

Wonderful! Drop a link when you'll upload it :)

Sorry but these last days I didn't have anymore time to test that script -_-

Link to comment

 

 

Success!!! I finally got it to work properly! Thank you so much for your help.

 

Wonderful! Drop a link when you'll upload it :)

Sorry but these last days I didn't have anymore time to test that script -_-

 

 

I also managed to fix the screen and button requirement by removing the nodes but leaving the items on the .nif, I was afraid it would still ne visible on the plain body but I have noticed it yet. 

 

New mod files attached.

NVHoloPipBoy V1.2.zip

Link to comment

Archived

This topic is now archived and is closed to further replies.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. For more information, see our Privacy Policy & Terms of Use