Jump to content

SpeedMult AV Conflict Between Scrolling Speed Continued & Armor Enchantments


SojournerOne

Recommended Posts

I am having some issues with Scrolling Speed Continued changing the SpeedMult AV and overruling some enchantments that I have applied to Bandolier and Campfire backpack Armor-type objects.

 

Here is an example of the enchantment effects on a book holder.

 

Here is a screenshot of one of the enchantments in the Creation Kit.

 

I have applied effects like this to the backpacks from Campfire as well as all of the bags and pouches from bandolier. When I have a full complement of the highest tier gear from these mods equipped (1 backpack, 1 bandolier, and up to 6 box pouches), my SpeedMult AV drops to 86.50.

 

However, when ScrollingSpeed.pex does this:

 

 

 

Event OnKeyDown(Int KeyCode)
if Utility.IsInMenuMode() == False && UI.IsMenuOpen("Dialogue Menu") == False && UI.IsMenuOpen("Crafting Menu") == False
if KeyCode == key_slower
if modifier == False && speed > 1
If !PlayerRef.IsSprinting()
speed -=1
;==========================================================\\\\\\\\\\\\\\\\\\\\
If !mode2
if speed <= 1
PlayerRef.ForceActorValue("Speedmult", speed_1)
speed = 1
elseif speed == 2
PlayerRef.ForceActorValue("Speedmult", speed_2)
elseif speed == 3
PlayerRef.ForceActorValue("Speedmult", speed_3)
elseif speed == 4
PlayerRef.ForceActorValue("Speedmult", speed_4)
endif
else
if speed <= 1
PlayerRef.ForceActorValue("Speedmult", speed_1)
speed = 1
elseif speed == 2
PlayerRef.ForceActorValue("Speedmult", speed_2)
EndIf
EndIf
PlayerRef.ModActorValue("InventoryWeight", 1)
PlayerRef.ModActorValue("InventoryWeight", -1)
if horses == True
Game.GetPlayersLastRiddenHorse().ForceActorValue("Speedmult", PlayerRef.GetActorValue("Speedmult"))
Game.GetPlayersLastRiddenHorse().ModActorValue("InventoryWeight", 1)
Game.GetPlayersLastRiddenHorse().ModActorValue("InventoryWeight", -1)
if PlayerRef.IsOnMount() == 0
Game.GetPlayersLastRiddenHorse().ForceActorValue("Speedmult", 100)
Game.GetPlayersLastRiddenHorse().ModActorValue("InventoryWeight", 1)
Game.GetPlayersLastRiddenHorse().ModActorValue("InventoryWeight", -1)
endif
endif

it wipes out all of the enchantments from the Campfire and Bandolier gear.
I tried adding a condition to each enchantment effect, if WornHasKeyword: 1Dr_BAN_Large (or normal, or medium, or small) == 1, but then the effects did not activate at all.
Can I change the ForceActorValue in ScrollingSpeed.pex to ModActorValue or something like that?
Edited by DarkEra99
Link to comment
Share on other sites

I think I'm on the right track, but I don't know exactly how to make it so that Scrolling Speed's modifies the player's current SpeedMult by the difference between SpeedMult = 100 and the slider values.

 

Any Papyrus wizards, take a look:

 

 

 

Scriptname ScrollingSpeed extends SKI_ConfigBase
;code written in Notepad++
Actor Property PlayerRef Auto
Spell Property _ScrollingSpeedIsSprintingSPL Auto
Spell Property _ScrollingSpeedIsFirstPVSPL Auto
Bool Property IsFirstPV Auto
Bool Property IsSprinting Auto
Int Property Current_Speed Auto
Int Property Speed Auto
Int Property key_slower Auto
;=================================================
;States
;=================================================
;OID
int toggle_B
int horses_B
int RestoreSpeed_B
int toggleSpeed_B
int key_faster_K
int key_slower_K
int key_modifier_K
int inv_modifier_B
int CameraFix_B
int mode2_B
int speed_1_S
int speed_2_S
int speed_3_S
int speed_4_S
;State
bool toggle = False
bool horses = False
bool RestoreSpeed = False
bool toggleSpeed = False
bool CameraFix = False
bool mode2 = False
int key_faster = 264 ;Scroll UP
int key_slower = 265 ;Scroll DOWN
int key_modifier = 42 ;Scroll DOWN
bool modifier = False
bool inv_modifier = False
float speed_1 = 25.0
float speed_2 = 50.0
float speed_3 = 75.0
float speed_4 = 100.0
Int Speed = 5
Int Current_Speed = 5
Int Previous_Speed_down = 5
Int Previous_Speed_up = 5
Float CameraIncrement
Float CameraSpeed
;=================================================
;MCM
;=================================================
Event OnPageReset(string page)
	SetCursorFillMode(TOP_TO_BOTTOM)
	SetCursorPosition(0)
	AddHeaderOption("Mod Functionality")
	toggle_B = AddToggleOption("Activate Scrolling Speed", toggle)
	horses_B = AddToggleOption("Affect horses", horses)
	RestoreSpeed_B = AddToggleOption("Restore speed after sprinting", RestoreSpeed)
	toggleSpeed_B = AddToggleOption("Toggle mode", toggleSpeed)
	AddHeaderOption("Bindings")
	key_faster_K = AddKeyMapOption("Increase speed", key_faster)
	key_slower_K = AddKeyMapOption("Decrease speed", key_slower)
	key_modifier_K = AddKeyMapOption("Modifier", key_modifier)
	inv_modifier_B = AddToggleOption("Invert modifier", inv_modifier)
	AddHeaderOption("Fix")
	CameraFix_B = AddToggleOption("Slow or Laggy Zoom Workaround", CameraFix)
	SetCursorPosition(1)
	AddHeaderOption("Custom speeds")
	mode2_B = AddToggleOption("Restrict to 2 Steps", mode2)
	speed_1_S = AddSliderOption("Step 1 (Slowest) ", speed_1, "{0}")
	speed_2_S = AddSliderOption("Step 2 ", speed_2, "{0}")
	speed_3_S = AddSliderOption("Step 3 ", speed_3, "{0}")
	speed_4_S = AddSliderOption("Step 4 (Fastest) ", speed_4, "{0}")
EndEvent
;=============
Event OnOptionSelect(int option)
	if (option == toggle_B)
		toggle = !toggle
		SetToggleOptionValue(toggle_B, toggle)

		if (toggle == True)
			PlayerRef.AddSpell(_ScrollingSpeedIsFirstPVSPL,false)
			RegisterForKey(key_faster) ;Scroll UP
			RegisterForKey(key_slower) ;Scroll DOWN
			RegisterForKey(key_modifier) ;Shift
		else
			PlayerRef.ForceActorValue("Speedmult", 100)
			PlayerRef.RemoveSpell(_ScrollingSpeedIsFirstPVSPL)
			Game.GetPlayersLastRiddenHorse().ForceActorValue("Speedmult", 100)
			UnregisterForKey(key_faster) ;Scroll UP
			UnregisterForKey(key_slower) ;Scroll DOWN
			UnregisterForKey(key_modifier) ;Shift
			PlayerRef.ModActorValue("InventoryWeight", 1)
			PlayerRef.ModActorValue("InventoryWeight", -1)
			Game.GetPlayersLastRiddenHorse().ModActorValue("InventoryWeight", 1)
			Game.GetPlayersLastRiddenHorse().ModActorValue("InventoryWeight", -1)
			UnregisterForAllControls()
		endif
	elseif (option == horses_B)
		horses = !horses
		SetToggleOptionValue(horses_B, horses)

		if horses == False
			Game.GetPlayersLastRiddenHorse().ForceActorValue("Speedmult", 100)
			Game.GetPlayersLastRiddenHorse().ModActorValue("InventoryWeight", 1)
			Game.GetPlayersLastRiddenHorse().ModActorValue("InventoryWeight", -1)
		endif
	elseif (option == RestoreSpeed_B)
			RestoreSpeed = !RestoreSpeed
			SetToggleOptionValue(RestoreSpeed_B, RestoreSpeed)
			if RestoreSpeed == True
				RegisterForControl("Sprint")
				PlayerRef.AddSpell(_ScrollingSpeedIsSprintingSPL,false)
			Else
				UnregisterForControl("Sprint")
				PlayerRef.RemoveSpell(_ScrollingSpeedIsSprintingSPL)
			EndIf
		elseif (option == toggleSpeed_B)
			toggleSpeed = !toggleSpeed
			SetToggleOptionValue(toggleSpeed_B, toggleSpeed)
			if toggleSpeed == True
				RegisterForControl("Run")
			Else
				UnregisterForControl("Run")
			EndIf
	elseif (option == inv_modifier_B)
			inv_modifier = !inv_modifier
			SetToggleOptionValue(inv_modifier_B, inv_modifier)

			if inv_modifier == True
				modifier = True
			else
				modifier = False
			endif
	elseif (option == mode2_B)
			mode2 = !mode2
			SetToggleOptionValue(mode2_B, mode2)
	elseif (option == CameraFix_B)
			CameraFix =!CameraFix
			SetToggleOptionValue(CameraFix_B, CameraFix)
	endif
EndEvent
Event OnOptionSliderAccept(int option, float value)
	if (option == speed_1_S)
		speed_1 = value
		SetSliderOptionValue(speed_1_S, speed_1, "{0}")
		if toggle == True
			if speed <= 1
				PlayerRef.ForceActorValue("Speedmult", speed_1)
				PlayerRef.ModActorValue("InventoryWeight", 1)
				PlayerRef.ModActorValue("InventoryWeight", -1)
			endif
		endif
	elseif (option == speed_2_S)
		speed_2 = value
		SetSliderOptionValue(speed_2_S, speed_2, "{0}")
		if toggle == True
			if speed == 2
				PlayerRef.ForceActorValue("Speedmult", speed_2)
				PlayerRef.ModActorValue("InventoryWeight", 1)
				PlayerRef.ModActorValue("InventoryWeight", -1)
			endif
		endif
	elseif (option == speed_3_S)
		speed_3 = value
		SetSliderOptionValue(speed_3_S, speed_3, "{0}")
		if toggle == True
			if speed == 3
			PlayerRef.ForceActorValue("Speedmult", speed_3)
			PlayerRef.ModActorValue("InventoryWeight", 1)
			PlayerRef.ModActorValue("InventoryWeight", -1)
			endif
		endif
elseif (option == speed_4_S)
		speed_4 = value
		SetSliderOptionValue(speed_4_S, speed_4, "{0}")
		if toggle == True
			if speed == 4
			PlayerRef.ForceActorValue("Speedmult", speed_4)
			PlayerRef.ModActorValue("InventoryWeight", 1)
			PlayerRef.ModActorValue("InventoryWeight", -1)
			endif
		endif
endif

if toggle == True
	if horses == True
		Game.GetPlayersLastRiddenHorse().ForceActorValue("Speedmult", PlayerRef.GetActorValue("Speedmult"))
		Game.GetPlayersLastRiddenHorse().ModActorValue("InventoryWeight", 1)
		Game.GetPlayersLastRiddenHorse().ModActorValue("InventoryWeight", -1)
		if PlayerRef.IsOnMount() == 0
			Game.GetPlayersLastRiddenHorse().ForceActorValue("Speedmult", 100)
			Game.GetPlayersLastRiddenHorse().ModActorValue("InventoryWeight", 1)
			Game.GetPlayersLastRiddenHorse().ModActorValue("InventoryWeight", -1)
		endif
	endif
endif
EndEvent
Event OnOptionSliderOpen(int option)
if (option == speed_1_S)
		SetSliderDialogStartValue(speed_1)
		SetSliderDialogDefaultValue(25.0)
		SetSliderDialogRange(20.0, 160.0)
		SetSliderDialogInterval(5.0)
elseif (option == speed_2_S)
		SetSliderDialogStartValue(speed_2)
		SetSliderDialogDefaultValue(50.0)
		SetSliderDialogRange(20.0, 160.0)
		SetSliderDialogInterval(5.0)
elseif (option == speed_3_S)
		SetSliderDialogStartValue(speed_3)
		SetSliderDialogDefaultValue(75.0)
		SetSliderDialogRange(20.0, 160.0)
		SetSliderDialogInterval(5.0)
elseif (option == speed_4_S)
		SetSliderDialogStartValue(speed_4)
		SetSliderDialogDefaultValue(100.0)
		SetSliderDialogRange(20.0, 160.0)
		SetSliderDialogInterval(5.0)
endif
EndEvent
;=============
Event OnOptionKeyMapChange(int option, int keyCode, string conflictControl, string conflictName)
if (option == key_faster_K)
		key_faster = keyCode
		UnregisterForKey(key_faster)
		SetKeymapOptionValue(key_faster_K, key_faster)
		RegisterForKey(key_faster)
elseif (option == key_slower_K)
		key_slower = keyCode
		UnregisterForKey(key_slower)
		SetKeymapOptionValue(key_slower_K, key_slower)
		RegisterForKey(key_slower)
elseif (option == key_modifier_K)
		key_modifier = keyCode
		UnregisterForKey(key_modifier)
		SetKeymapOptionValue(key_modifier_K, key_modifier)
		RegisterForKey(key_modifier)
		if inv_modifier == True
		modifier = True
		else
		modifier = False
		endif
endif
EndEvent
;=============
Event OnOptionHighlight(int option)
if (option == toggle_B)
		SetInfoText("Toggles mod functionality.\nDisable before uninstalling.")
elseif (option == horses_B)
		SetInfoText("Changing speed affects horses if enabled.")
elseif (option == RestoreSpeed_B)
		SetInfoText("Slow down character to your intial speed after sprinting \nDefault Disabled")
elseif (option == toggleSpeed_B)
		SetInfoText("Memorize your previous speed when you press run / walk key and restore it when you release it \nAct like a secondary speed steps \nDefault Disabled")
elseif (option == key_faster_K)
		SetInfoText("The key to press to increase speed.\nHold Modifier and this key to Zoom In.\nDefault: Mouse Wheel Up.")
elseif (option == key_slower_K)
		SetInfoText("The key to press to decrease speed.\nHold Modifier and this key to Zoom Out.\nDefault: Mouse Wheel Down.")
elseif (option == key_modifier_K)
		SetInfoText("Hold this key and press one of the others to change Zoom.")
elseif (option == inv_modifier_B)
		SetInfoText("Change Speed instead of Zoom while holding Modifier.")
elseif (option == CameraFix_B)
		SetInfoText("Enable it if you face the slow and / or laggy zoom bug induced by camera mod, like Customizable Camera or 3PCO \nDefault : Disabled")
elseif (option == mode2_B)
		SetInfoText("Reduce step number to 2. \nOnly the first two values will be used, set them accordingly ex: 35 / 70 / 100 / 140")
elseif (option == speed_1_S)
		SetInfoText("Default: 25.")
elseif (option == speed_2_S)
		SetInfoText("Default: 50.")
elseif (option == speed_3_S)
		SetInfoText("Default: 75.")
elseif (option == speed_4_S)
		SetInfoText("Default: 100.")
endif
EndEvent

;=================================================
;EVENTS
;=================================================
Event OnControlDown(string control)
	If control == "Sprint"
		If !IsSprinting
			Current_Speed = Speed
		EndIf
		if !mode2
		    while speed < 8
            Utility.Wait(0.1)
			Input.TapKey(key_faster)
			endWhile
		Else
			while speed < 4
            Utility.Wait(0.1)
			Input.TapKey(key_faster)
        	endWhile
		EndIf
	EndIf
	If control == "run"
		Previous_Speed_down = Speed
		If Previous_Speed_up > Speed
			while Speed < Previous_Speed_up
            	Utility.Wait(0.1)
				Input.TapKey(key_faster)
        	endWhile
		Else
			While Speed > Previous_Speed_up
        		Utility.Wait(0.1)
    			Input.TapKey(key_slower)
			endWhile
		EndIf
	EndIf
EndEvent

Event OnControlUp(string control, float HoldTime)
	If control == "run"
		Previous_Speed_up = Speed
		If Previous_Speed_down > Speed
			while Speed < Previous_Speed_down
            	Utility.Wait(0.1)
				Input.TapKey(key_faster)
        	endWhile
		Else
			While Speed > Previous_Speed_down
        		Utility.Wait(0.1)
    			Input.TapKey(key_slower)
			endWhile
		EndIf
	EndIf
EndEvent


Event OnKeyDown(Int KeyCode)
if Utility.IsInMenuMode() == False && UI.IsMenuOpen("Dialogue Menu") == False && UI.IsMenuOpen("Crafting Menu") == False
	if KeyCode == key_slower
		if modifier == False && speed > 1
			If !PlayerRef.IsSprinting()
						speed -=1
						;==========================================================\\\\\\\\\\\\\\\\\\\\
						If !mode2
							if 	speed <= 1
									PlayerRef.ModActorValue("Speedmult", (speed_2 - speed_1))
									speed = 1
							elseif 	speed == 2
									PlayerRef.ModActorValue("Speedmult", speed_2)
							elseif 	speed == 3
									PlayerRef.ModActorValue("Speedmult", speed_3)
							elseif 	speed == 4
									PlayerRef.ModActorValue("Speedmult", speed_4)
							endif
						else
							if 	speed <= 1
									PlayerRef.ModActorValue("Speedmult", speed_1)
									speed = 1
							elseif 	speed == 2
									PlayerRef.ModActorValue("Speedmult", speed_2)
							EndIf			
						EndIf
							PlayerRef.ModActorValue("InventoryWeight", 1)
							PlayerRef.ModActorValue("InventoryWeight", -1)
								if horses == True
								Game.GetPlayersLastRiddenHorse().ForceActorValue("Speedmult", PlayerRef.GetActorValue("Speedmult"))
								Game.GetPlayersLastRiddenHorse().ModActorValue("InventoryWeight", 1)
								Game.GetPlayersLastRiddenHorse().ModActorValue("InventoryWeight", -1)
									if PlayerRef.IsOnMount() == 0
									Game.GetPlayersLastRiddenHorse().ForceActorValue("Speedmult", 100)
									Game.GetPlayersLastRiddenHorse().ModActorValue("InventoryWeight", 1)
									Game.GetPlayersLastRiddenHorse().ModActorValue("InventoryWeight", -1)
									endif
								endif
						;==========================================================////////////////////
			EndIf
		elseif modifier == True
			if CameraFix
				CameraIncrement = Utility.GetINIFloat("fMouseWheelZoomIncrement:Camera") as float
				CameraSpeed = Utility.GetINIFloat("fMouseWheelZoomIncrement:Camera") as float
				Utility.SetINIFloat("fMouseWheelZoomSpeed:Camera", 3.0)
				Utility.SetINIFloat("fMouseWheelZoomIncrement:Camera", 0.402)
			EndIf
			Input.TapKey(209) ;PgDown
			If CameraFix
				Utility.SetINIFloat("fMouseWheelZoomIncrement:Camera", CameraSpeed)
				Utility.SetINIFloat("fMouseWheelZoomIncrement:Camera", CameraIncrement)
			EndIf
		endif
	elseif KeyCode == key_faster
		if modifier == False && speed < 8
						speed +=1
						;==========================================================\\\\\\\\\\\\\\\\\\\\
						if !mode2
							if 		speed <= 1
										PlayerRef.ForceActorValue("Speedmult", speed_1)
										speed = 1
							elseif 	speed == 2
										PlayerRef.ForceActorValue("Speedmult", speed_2)
							elseif 	speed == 3
										PlayerRef.ForceActorValue("Speedmult", speed_3)
							elseif 	speed == 4
										PlayerRef.ForceActorValue("Speedmult", speed_4)
							endif
						Else
							if 		speed <= 1
										PlayerRef.ForceActorValue("Speedmult", speed_1)
										speed = 1
							elseif 	speed == 2
										PlayerRef.ForceActorValue("Speedmult", speed_2)					
							EndIf
						EndIf
							PlayerRef.ModActorValue("InventoryWeight", 1)
							PlayerRef.ModActorValue("InventoryWeight", -1)
								if horses == True
								Game.GetPlayersLastRiddenHorse().ForceActorValue("Speedmult", PlayerRef.GetActorValue("Speedmult"))
								Game.GetPlayersLastRiddenHorse().ModActorValue("InventoryWeight", 1)
								Game.GetPlayersLastRiddenHorse().ModActorValue("InventoryWeight", -1)
									if PlayerRef.IsOnMount() == 0
									Game.GetPlayersLastRiddenHorse().ForceActorValue("Speedmult", 100)
									Game.GetPlayersLastRiddenHorse().ModActorValue("InventoryWeight", 1)
									Game.GetPlayersLastRiddenHorse().ModActorValue("InventoryWeight", -1)
									endif
								endif
						;==========================================================////////////////////
		elseif modifier == True
			if !IsFirstPV
				If CameraFix
					CameraIncrement = Utility.GetINIFloat("fMouseWheelZoomIncrement:Camera") as float
					CameraSpeed = Utility.GetINIFloat("fMouseWheelZoomIncrement:Camera") as float
					Utility.SetINIFloat("fMouseWheelZoomSpeed:Camera", 3.0)
					Utility.SetINIFloat("fMouseWheelZoomIncrement:Camera", 0.402)
				EndIf
				Input.TapKey(201) ;PgUp
				If CameraFix
					Utility.SetINIFloat("fMouseWheelZoomIncrement:Camera", CameraSpeed)
					Utility.SetINIFloat("fMouseWheelZoomIncrement:Camera", CameraIncrement)
				EndIf
			EndIf
		endif
	elseif KeyCode == key_modifier
		if inv_modifier == False
		modifier = True
		else
		modifier = False
		endif
	endif
endif
EndEvent
;===
Event OnKeyUp(Int KeyCode, Float HoldTime)
if KeyCode == key_modifier
	if inv_modifier == False
	modifier = False
	else
	modifier = True
	endif
endif
EndEvent 

 

 

Edited by DarkEra99
Link to comment
Share on other sites

Float SSM = PlayerRef.GetActorValue("SpeedMult")
SpeedDiff = SSM - speed_1
PlayerRef.ModActorValue("SpeedMult",-SpeedDiff)

The above stores the player's current speed multiplier then subtracts the desired speed multiplier value from the player's current value and finally the speed multiplier is modified negatively by the difference so that it ends up at the desired value.

Link to comment
Share on other sites

Jeez, I never woulda guessed that, I was gonna try

PlayerRef.ModActorValue("SpeedMult", PlayerRef.GetActorValue("SpeedMult") - (Speed_X - Speed_Y))

...or something, I don't even know if that was going to work.

 

I can't seem to find any references anywhere to the "SSM" function, other than this topic, do you know where I can read up on it? Is it an SKSE function? OID, no idea what I was talking about...

 

Thanks for the help BTW, I'll give this a shot...

Edited by DarkEra99
Link to comment
Share on other sites

OID's are a shorthand so you avoid re-typing lengthy formulas over and over, I get it! Yikes, hope I don't end up on GMAD for this, LOL.

 

What would you suggest for Lines 78 - 108 that have ForceActorValue, 145 - 186, and 414 to 420. These parts seem to be there to reset the SpeedMult when options are enabled or disabled, but I'm not completely sure. Either way they will also cause problems... Don't know to make it reset the AV to whatever the AV is prior to Scrolling Speed's changes.

Edited by DarkEra99
Link to comment
Share on other sites

I copy pasted that posted code earlier from my Controller Walk Run Toggle mod (just changed one variable to show how it could fit into your project). You can take a look at my mod's source script to see how the speed multiplier is set and reset.

 

I cannot give good advice on the script above as I'm having trouble reading it. The alternating highlighted numbered lines are difficult for me to read.

Link to comment
Share on other sites

I cannot give good advice on the script above as I'm having trouble reading it. The alternating highlighted numbered lines are difficult for me to read.

 

Fixed. That was weird.

 

 

I copy pasted that posted code earlier from my Controller Walk Run Toggle mod (just changed one variable to show how it could fit into your project). You can take a look at my mod's source script to see how the speed multiplier is set and reset.

 

Will take a look, thanks again. Now that I've slept, I realize it's probably as simple as subtracting current AV from 100 and adding the result back to the current AV.

Link to comment
Share on other sites

*digs out script for reference ... waits for Mod Organizer to load*

 

The second is a check to see if the menu is currently open at that moment. The first is a bool that is toggled when the menu is opened and closed. By themselves they both do the same thing, only allow action when false. However, it appears that I needed a little extra leeway after the menu is closed thus the bool toggle was added. The other is included because the "safe process" function was carried over from one of my other mods and modified as needed for the walk run toggle mod.

Link to comment
Share on other sites

Noob question, you define your functions after they are referenced in previous events, is this normal, or can the definitions be placed anywhere?

 

Apparently they only need to be at the beginning if they are defining variables in functions and events, according to this article.

Edited by SojournerOne
Link to comment
Share on other sites

  • Recently Browsing   0 members

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