SojournerOne Posted December 30, 2018 Share Posted December 30, 2018 (edited) 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 December 30, 2018 by DarkEra99 Link to comment Share on other sites More sharing options...
SojournerOne Posted December 30, 2018 Author Share Posted December 30, 2018 (edited) 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 December 30, 2018 by DarkEra99 Link to comment Share on other sites More sharing options...
IsharaMeradin Posted December 30, 2018 Share Posted December 30, 2018 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 More sharing options...
SojournerOne Posted December 30, 2018 Author Share Posted December 30, 2018 (edited) 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 December 30, 2018 by DarkEra99 Link to comment Share on other sites More sharing options...
SojournerOne Posted December 30, 2018 Author Share Posted December 30, 2018 (edited) 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 December 30, 2018 by DarkEra99 Link to comment Share on other sites More sharing options...
IsharaMeradin Posted December 30, 2018 Share Posted December 30, 2018 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 More sharing options...
SojournerOne Posted December 30, 2018 Author Share Posted December 30, 2018 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 More sharing options...
SojournerOne Posted January 1, 2019 Author Share Posted January 1, 2019 This doesn't have anything to do with SPeedMult, but out of curiosity, what would the difference be between && (IsInCraftingMenu == false) and && (!UI.IsMenuOpen("CraftingMenu")) ? Link to comment Share on other sites More sharing options...
IsharaMeradin Posted January 1, 2019 Share Posted January 1, 2019 *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 More sharing options...
SojournerOne Posted January 1, 2019 Author Share Posted January 1, 2019 (edited) 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 January 1, 2019 by SojournerOne Link to comment Share on other sites More sharing options...
Recommended Posts