Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Categories

Neverwinter Nights: Enhanced Edition has been released! Visit nwn.beamdog.com to make an order. NWN:EE FAQ is available.
Soundtracks for BG:EE, SoD, BG2:EE, IWD:EE, PST:EE are now available in the Beamdog store.
Attention, new and old users! Please read the new rules of conduct for the forums, and we hope you enjoy your stay!

[MOD] BG:EE Chargen Abilities Screen - show stored values and simple auto roller.

FaydarkFaydark Member Posts: 276
edited April 2016 in UI Modding
After reading the UI examples in the sticky thread, I decided I'd take a stab at changing something that I've always wanted to change in the character generation screen: Being able to see my stored roll without having to actually use the recall button (thus losing my current roll).

Based on the autoroller UI mod examples from @Freche and @Dee, I made some further changes to incorporate both features (stored roll display and auto roller). It's not beautified or anything, but it gets the job done.

Once you click the autoroll button, it will continue to roll until the button is clicked again. It will store any total roll that is higher than the previously stored roll. Additionally, if it rolls the same number as the previously stored roll, but the exceptional strength roll is higher, it will store the total roll (for races/classes that have exceptional strength). End result: leave it running and you will have the maximum roll the game would let you have. =D

If you simply want only the auto roller and the stored value display and don't use any other UI mods, then you can just unzip the attached file into your override directory and be on your way.

If instead you would like to manually add the changes:

Due to the limited data available to the LUA code, I had to do some creative string interpretations, hence the multiple changes to existing code. Sorry!

All of these changes need to be made in UI.menu.

In menu 'CHARGEN_RACE', add the following to the end of the DONE_BUTTON action (before the end double quote):
; chargen.selectedRace = chargen.races[ currentChargenRace ].id

In menu 'CHARGEN_CLASS', add the following to the end of the DONE_BUTTON action (before the end double quote):
chargen.selectedClass = chargen.class[ currentChargenClass ].id

And finally, replace the all of the menu 'CHARGEN_ABILITIES' code with the following:
BG:EE no SoD:

` --auto-roller version 2016.04.09.0002 raceHasExceptionalStr = { true, -- Human true, -- Elf true, -- Half-Elf true, -- Dwarf false, -- Halfling true, -- Gnome true -- Half-Orc } classHasExceptionalStr = { false, -- Mage true, -- Fighter false, -- Cleric false, -- Thief false, -- Bard true, -- Paladin true, -- Fighter / Mage true, -- Fighter / Cleric true, -- Fighter / Thief true, -- Fighter / Mage / Thief false, -- Druid true, -- Ranger false, -- Mage / Thief false, -- Cleric / Mage false, -- Cleric / Thief true, -- Fighter / Druid true, -- Fighter / Mage / Cleric true, -- Cleric / Ranger false, -- Sorcerer false, -- Monk false -- Shaman } function HasExceptionalStrength( ) return raceHasExceptionalStr[ chargen.selectedRace ] and classHasExceptionalStr[ chargen.selectedClass ] end function ShowExceptionalStrength( ) local strength = tonumber( string.sub( chargen.ability[ 1 ].roll, 1, 2 ) ) local abilityToDec = 2 if strength ~= nil then while ( strength ~= nil ) and ( strength < 18 ) do createCharScreen:OnAbilityPlusMinusButtonClick( abilityToDec, false ) abilityToDec = abilityToDec + 1 if( abilityToDec == 7 ) then abilityToDec = 2 end createCharScreen:OnAbilityPlusMinusButtonClick( 1, true ) strength = tonumber( string.sub( chargen.ability[ 1 ].roll, 1, 2 ) ) end end end RerollFrame = 0 storedTotalRoll = 0 function GetAutoRoll() if rolling == 1 then RerollFrame = RerollFrame + 1 if RerollFrame > 1 then RerollFrame = 0 end if RerollFrame == 0 then createCharScreen:OnAbilityReRollButtonClick() local exceptionalStrength = 0 if( HasExceptionalStrength() ) then ShowExceptionalStrength( ) exceptionalStrength = tonumber( string.sub( chargen.ability[ 1 ].roll, 4 ) ) if exceptionalStrength ~= nil then if exceptionalStrength == 0 then exceptionalStrength = 100 end else exceptionalStrength = 0 end end if ( ( storedTotalRoll == chargen.totalRoll ) and ( chargen.ability[ 1 ].exceptional < exceptionalStrength ) ) or ( storedTotalRoll < chargen.totalRoll ) then storedTotalRoll = chargen.totalRoll chargen.ability[ 1 ].exceptional = exceptionalStrength chargen.ability[ 1 ].storedRoll = chargen.ability[ 1 ].roll chargen.ability[ 2 ].storedRoll = chargen.ability[ 2 ].roll chargen.ability[ 3 ].storedRoll = chargen.ability[ 3 ].roll chargen.ability[ 4 ].storedRoll = chargen.ability[ 4 ].roll chargen.ability[ 5 ].storedRoll = chargen.ability[ 5 ].roll chargen.ability[ 6 ].storedRoll = chargen.ability[ 6 ].roll createCharScreen:OnAbilityStoreButtonClick() end end end return end ` menu { name 'CHARGEN_ABILITIES' align center center ignoreesc onopen "ticksPassed = 0; ticksStarting = 0" label { area 0 0 1024 768 mosaic 'GUICGB' enabled "CurrentlyInGame()" } label { area 0 156 1024 612 mosaic GUISMDB } label { area 20 174 496 48 text "ABILITIES_TITLE" text style "title" } list { column { width 40 label { area 0 0 190 55 text lua "t(chargen.ability[rowNumber].name)" text style "normal" align right center } } column { width 22 label { area 0 0 90 55 text lua "chargen.ability[rowNumber].roll" text style "normal" align center center } } column { width 9 label { area 0 6 45 42 bam GUIOSW frame lua "currentCellCheck(3)" sequence 0 } } column { width 12 label { area 0 6 45 42 bam GUIOSW frame lua "currentCellCheck(4)" sequence 1 } } column { width 22 label { area 0 0 90 55 text lua "chargen.ability[rowNumber].storedRoll" text style "normal" align center center } } action " if ticksStarting < 10 then if cellNumber == 3 then createCharScreen:OnAbilityPlusMinusButtonClick(currentChargenAbility, true) elseif cellNumber == 4 then createCharScreen:OnAbilityPlusMinusButtonClick(currentChargenAbility, false) end end cellNumber = nil ticksPassed = 0 ticksStarting = 0 " actionUpdate " ticksStarting = ticksStarting + 1 if ticksStarting > 10 then ticksPassed = ticksPassed + 1 if ticksPassed > 7 then if cellNumber == 3 then createCharScreen:OnAbilityPlusMinusButtonClick(currentChargenAbility, true) elseif cellNumber == 4 then createCharScreen:OnAbilityPlusMinusButtonClick(currentChargenAbility, false) end ticksPassed = 0 end end " rowheight 54 hidehighlight area 32 254 492 322 table "chargen.ability" var currentChargenAbility } label { area 32 580 186 42 text "TOTAL_ROLL_NORMAL" text style "normal" text align right center } label { area 248 580 50 42 text lua "chargen.totalRoll" text style "normal" text align center center } label { area 334 580 94 42 text lua "chargen.extraAbilityPoints" text style "normal" text align center center } label { area 458 580 50 42 text lua "storedTotalRoll" text style "normal" text align center center } text { area 582 192 404 406 text lua "abilityOrGeneralHelp()" text style "normal" scrollbar 'GUISCRC' } button { area 568 638 142 40 bam GUIOSTSM sequence 0 text "AUTO-REROLL" text style "button" action " if rolling == 1 then rolling = 0 createCharScreen:OnAbilityRecallButtonClick() else chargen.ability[ 1 ].exceptional = tonumber( string.sub( chargen.ability[ 1 ].roll, 4 ) ) if chargen.ability[ 1 ].exceptional ~= nil then if chargen.ability[ 1 ].exceptional == 0 then chargen.ability[ 1 ].exceptional = 100 end else chargen.ability[ 1 ].exceptional = 0 end storedTotalRoll = chargen.totalRoll rolling = 1 end" } button { mosaic lua "GetAutoRoll()" area 1 1 1 1 } button { area 368 628 142 40 bam GUIOSTSM sequence 0 text "REROLL_BUTTON" text style "button" action "createCharScreen:OnAbilityReRollButtonClick()" } button { area 60 628 142 40 bam GUIOSTSM sequence 0 text "STORE_BUTTON" text style "button" action " local exceptionalStrength = tonumber( string.sub( chargen.ability[ 1 ].roll, 4 ) ) if exceptionalStrength ~= nil then if exceptionalStrength == 0 then exceptionalStrength = 100 end else exceptionalStrength = 0 end storedTotalRoll = chargen.totalRoll chargen.ability[ 1 ].exceptional = exceptionalStrength chargen.ability[ 1 ].storedRoll = chargen.ability[ 1 ].roll chargen.ability[ 2 ].storedRoll = chargen.ability[ 2 ].roll chargen.ability[ 3 ].storedRoll = chargen.ability[ 3 ].roll chargen.ability[ 4 ].storedRoll = chargen.ability[ 4 ].roll chargen.ability[ 5 ].storedRoll = chargen.ability[ 5 ].roll chargen.ability[ 6 ].storedRoll = chargen.ability[ 6 ].roll createCharScreen:OnAbilityStoreButtonClick() " } button { area 214 628 142 40 bam GUIOSTSM sequence 0 text "RECALL_BUTTON" text style "button" clickable lua "createCharScreen:IsAbilityRecallButtonClickable()" action "createCharScreen:OnAbilityRecallButtonClick()" } button { on '8' action "createCharScreen:OnCheatyMcCheaterson()" } button { on escape area 194 718 232 44 bam GUIOSTUL text "BACK_BUTTON" text style "button" action "Infinity_PopMenu(); createCharScreen:OnCancelButtonClick()" } button { on return area 438 718 206 44 bam GUIOSTUM text "DONE_BUTTON" text style "button" clickable lua "createCharScreen:IsDoneButtonClickable()" action "Infinity_PopMenu(); createCharScreen:OnDoneButtonClick()" } }

BG:EE with SoD:

` --auto-roller version 2016.04.13.0005 raceHasExceptionalStr = { true, -- Human true, -- Elf true, -- Half-Elf true, -- Dwarf false, -- Halfling true, -- Gnome true -- Half-Orc } classHasExceptionalStr = { false, -- Mage true, -- Fighter false, -- Cleric false, -- Thief false, -- Bard true, -- Paladin true, -- Fighter / Mage true, -- Fighter / Cleric true, -- Fighter / Thief true, -- Fighter / Mage / Thief false, -- Druid true, -- Ranger false, -- Mage / Thief false, -- Cleric / Mage false, -- Cleric / Thief true, -- Fighter / Druid true, -- Fighter / Mage / Cleric true, -- Cleric / Ranger false, -- Sorcerer false, -- Monk false -- Shaman } function HasExceptionalStrength( ) return raceHasExceptionalStr[ chargen.selectedRace ] and classHasExceptionalStr[ chargen.selectedClass ] end function ShowExceptionalStrength( ) local strength = tonumber( string.sub( chargen.ability[ 1 ].roll, 1, 2 ) ) local abilityToDec = 2 if strength ~= nil then while ( strength ~= nil ) and ( strength < 18 ) do createCharScreen:OnAbilityPlusMinusButtonClick( abilityToDec, false ) abilityToDec = abilityToDec + 1 if( abilityToDec == 7 ) then abilityToDec = 2 end createCharScreen:OnAbilityPlusMinusButtonClick( 1, true ) strength = tonumber( string.sub( chargen.ability[ 1 ].roll, 1, 2 ) ) end end end function AutoRoll( ) createCharScreen:OnAbilityReRollButtonClick() local exceptionalStrength = 0 if( HasExceptionalStrength() ) then ShowExceptionalStrength( ) exceptionalStrength = tonumber( string.sub( chargen.ability[ 1 ].roll, 4 ) ) if exceptionalStrength ~= nil then if exceptionalStrength == 0 then exceptionalStrength = 100 end else exceptionalStrength = 0 end end if ( ( storedTotalRoll == chargen.totalRoll ) and ( chargen.ability[ 1 ].exceptional < exceptionalStrength ) ) or ( storedTotalRoll < chargen.totalRoll ) then storedTotalRoll = chargen.totalRoll chargen.ability[ 1 ].exceptional = exceptionalStrength chargen.ability[ 1 ].storedRoll = chargen.ability[ 1 ].roll chargen.ability[ 2 ].storedRoll = chargen.ability[ 2 ].roll chargen.ability[ 3 ].storedRoll = chargen.ability[ 3 ].roll chargen.ability[ 4 ].storedRoll = chargen.ability[ 4 ].roll chargen.ability[ 5 ].storedRoll = chargen.ability[ 5 ].roll chargen.ability[ 6 ].storedRoll = chargen.ability[ 6 ].roll createCharScreen:OnAbilityStoreButtonClick() end end RerollFrame = 0 storedTotalRoll = 0 function UpdateAutoRoll() if rolling == 1 then RerollFrame = RerollFrame + 1 if RerollFrame > 1 then RerollFrame = 0 end if RerollFrame == 0 then local index = 1 for index = 1, 1000, 1 do AutoRoll( ) end end end end ` menu { name 'CHARGEN_ABILITIES' modal align center center ignoreesc onopen "ticksPassed = 0; ticksStarting = 0" label { area 0 0 864 710 mosaic GUICGROL } label { area 220 22 426 44 text "ABILITIES_TITLE" text style "title" } list { column { width 34 label { area 0 0 100 55 text lua "t(chargen.ability[rowNumber].name)" text style "normal" align right center } } column { width 18 label { area 0 0 50 55 text lua "chargen.ability[rowNumber].storedRoll" text style "normal" align center center } } column { width 13 label { area 0 0 50 55 text lua "chargen.ability[rowNumber].roll" text style "normal" align center center } } column { width 22 label { area 36 6 45 42 bam GUIOSW frame lua "currentCellCheck(4)" sequence 0 } } column { width 15 label { area 0 6 45 42 bam GUIOSW frame lua "currentCellCheck(5)" sequence 1 } } action " if ticksStarting < 10 then if cellNumber == 4 then createCharScreen:OnAbilityPlusMinusButtonClick(currentChargenAbility, true) elseif cellNumber == 5 then createCharScreen:OnAbilityPlusMinusButtonClick(currentChargenAbility, false) end end cellNumber = nil ticksPassed = 0 ticksStarting = 0 " actionUpdate " ticksStarting = ticksStarting + 1 if ticksStarting > 10 then ticksPassed = ticksPassed + 1 if ticksPassed > 2 then if cellNumber == 4 then createCharScreen:OnAbilityPlusMinusButtonClick(currentChargenAbility, true) elseif cellNumber == 5 then createCharScreen:OnAbilityPlusMinusButtonClick(currentChargenAbility, false) end ticksPassed = 0 end end " rowheight 54 hidehighlight area 34 85 386 325 table "chargen.ability" var currentChargenAbility } label { area 34 410 100 54 text "TOTAL_ROLL_NORMAL" text style "normal" text align right center } label { area 164 410 50 54 text lua "storedTotalRoll" text style "normal" text align center center } label { area 233 410 50 54 text lua "chargen.totalRoll" text style "normal" text align center center } label { area 322 410 94 54 text lua "chargen.extraAbilityPoints" text style "normal" text align center center } text { area 442 91 394 505 text lua "abilityOrGeneralHelp()" text style "normal" scrollbar 'GUISCRC' } button { area 230 480 200 44 bam GUIBUTNT sequence 0 text "AUTO-REROLL" text style "button" action " if rolling == 1 then rolling = 0 createCharScreen:OnAbilityRecallButtonClick() else chargen.ability[ 1 ].exceptional = tonumber( string.sub( chargen.ability[ 1 ].roll, 4 ) ) if chargen.ability[ 1 ].exceptional ~= nil then if chargen.ability[ 1 ].exceptional == 0 then chargen.ability[ 1 ].exceptional = 100 end else chargen.ability[ 1 ].exceptional = 0 end storedTotalRoll = chargen.totalRoll rolling = 1 end" } button { mosaic lua "UpdateAutoRoll()" area 1 1 1 1 } button { area 26 480 200 44 bam GUIBUTNT sequence 0 text "REROLL_BUTTON" text style "button" action "createCharScreen:OnAbilityReRollButtonClick()" } button { area 26 531 200 44 bam GUIBUTNT sequence 0 text "STORE_BUTTON" text style "button" action " local exceptionalStrength = tonumber( string.sub( chargen.ability[ 1 ].roll, 4 ) ) if exceptionalStrength ~= nil then if exceptionalStrength == 0 then exceptionalStrength = 100 end else exceptionalStrength = 0 end storedTotalRoll = chargen.totalRoll chargen.ability[ 1 ].exceptional = exceptionalStrength chargen.ability[ 1 ].storedRoll = chargen.ability[ 1 ].roll chargen.ability[ 2 ].storedRoll = chargen.ability[ 2 ].roll chargen.ability[ 3 ].storedRoll = chargen.ability[ 3 ].roll chargen.ability[ 4 ].storedRoll = chargen.ability[ 4 ].roll chargen.ability[ 5 ].storedRoll = chargen.ability[ 5 ].roll chargen.ability[ 6 ].storedRoll = chargen.ability[ 6 ].roll createCharScreen:OnAbilityStoreButtonClick() " } button { area 26 582 200 44 bam GUIBUTNT sequence 0 text "RECALL_BUTTON" text style "button" clickable lua "createCharScreen:IsAbilityRecallButtonClickable()" action "createCharScreen:OnAbilityRecallButtonClick()" } button { on '8' action "createCharScreen:OnCheatyMcCheaterson()" } button { on escape area 196 653 230 44 bam GUIBUTMT text "BACK_BUTTON" text style "button" action "Infinity_PopMenu(); createCharScreen:OnCancelButtonClick()" } button { on return area 438 653 230 44 bam GUIBUTMT text "DONE_BUTTON" text style "button" clickable lua "createCharScreen:IsDoneButtonClickable()" action "Infinity_PopMenu(); createCharScreen:OnDoneButtonClick()" } }



Feel free to take it and do as you will with it, and I hope it helps someone else.

Updates:
v0006 - Updated for SoD 2.1.63.2 UI changes.
v0005 - Fixed autoroller script I broke while tinkering. Lowered rerolls to about 15000 per second, was causing music/interactivity loss at higher rate.
v0004 - autoroller now rolls about 150000 rolls per second.

Post edited by Faydark on
Abelmoody_magesmeagolheartsmady3XKalkillerrabbitKerthalArndas
«1

Comments

  • Mr2150Mr2150 Member Posts: 1,170
    edited April 2016
    This is for 2.0 without SoD correct? If so, it works really well. Although I have SoD installed (and ended up with a blended interface between 2.0 and SoD) it still worked fine.

    My only comment would be a more general one - doesn't constant screen updating mean that the rolling process is slower?

  • FaydarkFaydark Member Posts: 276
    edited April 2016
    Yes, it's for 2.0 and I don't have SoD installed (yet). I'll look at getting it installed tomorrow and doing a SoD version. Sorry!

    The rolling process could be made a lot faster by removing the "animation" system and just going with a fast loop that you have to break somehow (perhaps keypress?) but it will "soft lock" BGEE while it's running and following on from @Freche original idea, I decided to stick with the animated version to keep the UI responsive and the autoroller easy to control.

  • Mr2150Mr2150 Member Posts: 1,170
    edited April 2016
    No worries. It still worked - it just looked strange:



    For my own roller I used the faster one from @Freche but added a count function to limit the number of rolls to 100,000 (which takes about 40seconds).

    Post edited by Mr2150 on
  • FaydarkFaydark Member Posts: 276
    Updated original post with SoD version. I probably won't do any further work on the non-SoD version, I don't really have time to be installing/uninstalling the DLC every time it needs changes etc.

    lroumen
  • GrimLefourbeGrimLefourbe Member Posts: 635
    Since the game is no-DRM and all in one folder, you can have 2 installations of the game simultaneously just by having 2 folders, one with the extension and one without.

  • FaydarkFaydark Member Posts: 276
    I'm using the Steam version, so it doesn't quite work like that. And frankly, now that I have SoD I'm really unlikely to un-install it and play vanilla BGEE ever again, so I'm not that keen on doing a BGEE-non-SoD version as patches progress. The LUA is all there in the original post, so someone else is free to develop that version if they want it. =D

    I'm at work atm, but tonight I'll modify the original post with a version that does ~150000 rolls per second. It didn't really speed things up to be honest, still took a while to get a 99 roll for my FMT test case, but getting to 92+ was pretty quick.

  • ThelsThels Member Posts: 1,189
    How does it deal with percentile strength?

  • So_LoWSo_LoW Member Posts: 62
    If you are using steam version you can rename sod-dlc.zip to something else. It will disable it so it would be like using vanilla BGEE. :)

    Faydark
  • smeagolheartsmeagolheart Member Posts: 6,363
    Thels said:

    How does it deal with percentile strength?

    My human guy pulled 18s with no percentiles. And increasing from 17 to 18 also showed no percentiles. Maybe I'm missing something.

  • FaydarkFaydark Member Posts: 276
    The only stat data LUA has access to is the strings displayed on the UI, so I use some string manipulation routines to extract the percentile from the STR string (when the percentile is displayed). Additionally, when the auto-roller is active, it automatically deducts points from non-str stats and adds them to STR until it hits 18 STR so that the percentile is displayed. Search for "exceptional" in UI.menu if you want to look at the code.

    @smeagolheart Can you describe how you're using it and I can see if I can repro it here and fix the bug(s) if there are any. Video would be great if the steps are complex.

  • RuneksRuneks Member Posts: 21
    I can't seem to get it to work :( When I press autoroll it seems to roll once and then nothing more happens, no matter how long I wait?

  • ThelsThels Member Posts: 1,189
    @Faydark: How does it prioritize percentile strength? A 95/100 roll can most definitely be better than a 96/01 roll.
    So_LoW said:

    If you are using steam version you can rename sod-dlc.zip to something else. It will disable it so it would be like using vanilla BGEE. :)

    That's only helpful if you don't install any mods. If you want to install any mods, you first need to run modmerge, which extracts the zip and merges it with the base game.

  • GrimLefourbeGrimLefourbe Member Posts: 635
    @Runeks Same problem here actually, wondering if I missed something in how to mod UI?

  • GrimLefourbeGrimLefourbe Member Posts: 635
    The auto reroll button doesn't seem to call the autoroll function, Am I missing something ?

    button { area 230 480 200 44 bam GUIBUTNT sequence 0 text "AUTO-REROLL" text style "button" action " if rolling == 1 then rolling = 0 createCharScreen:OnAbilityRecallButtonClick() else chargen.ability[ 1 ].exceptional = tonumber( string.sub( chargen.ability[ 1 ].roll, 4 ) ) if chargen.ability[ 1 ].exceptional ~= nil then if chargen.ability[ 1 ].exceptional == 0 then chargen.ability[ 1 ].exceptional = 100 end else chargen.ability[ 1 ].exceptional = 0 end storedTotalRoll = chargen.totalRoll rolling = 1 end" }

  • So_LoWSo_LoW Member Posts: 62
    Thels said:

    @Faydark: How does it prioritize percentile strength? A 95/100 roll can most definitely be better than a 96/01 roll.

    So_LoW said:

    If you are using steam version you can rename sod-dlc.zip to something else. It will disable it so it would be like using vanilla BGEE. :)

    That's only helpful if you don't install any mods. If you want to install any mods, you first need to run modmerge, which extracts the zip and merges it with the base game.
    I believe modmerge creates folder which contains extracted files from zip, so if you move it and restore original chitin.key you still get vanilla BGEE (minus dialog I think, although Im not sure coz I dont have BGEE on my PC right now)

  • FaydarkFaydark Member Posts: 276
    edited April 2016
    @Thels ah right, got you. For the moment, it doesn't prioritise exceptional strength roll over highest total roll at all. If you get a higher total roll, it will store that. I can look into adding some sort of priority system, but when I play I generally aim for 18/anything and the highest roll I can get, because I plan around adding the stat bonuses from the books etc and I'll be at 19 str before the end of BG:EE.

    @Runeks, @GrimLefourbe Oops, looks like I broke something while playing around before uploading. I'll fix is asap.

    The autoroll button doesn't directly call the autoroll function, it sets that rolling var to 1 and then the autorolling function that is updated in the background for animation purposes checks that var every frame and rolls again if it's set to 1.

  • GrimLefourbeGrimLefourbe Member Posts: 635
    I looked around a bit and I didn't understand how the Update function works either though I understood that it seems to be periodically called, I noticed an actionUpdate function in the Chargen_abilities, how does that work? I looked around quickly in Dee's post and didn't find much.

  • FaydarkFaydark Member Posts: 276
    Apologies all, after I had version 0004 working on my PC, I "tidied up" the script and broke it horribly. I've just uploaded version 0005 with the fixes and it's working great now. I did a couple of tests and was able to hit 99 total roll in a few seconds, still haven't broken that magic 100 barrier yet, but one day !! =D

    @GrimLefourbe in version 0005, look at the call to UpdateAutoRoll( ). That call is attached to a dummy "invisible" button. The "mosaic" keyword means "run whatever is attached here periodically", and some clever people in the original UI mod thread figured that out and @Freche used it to write his autoroller script.

  • GrimLefourbeGrimLefourbe Member Posts: 635
    Oh I see, thanks, I was wondering what that mosaic button was too.

  • GrimLefourbeGrimLefourbe Member Posts: 635
    edited April 2016
    Just to confirm, it works much better with the fix on my end :smile:

    (like I got a 103 roll better !)

    Faydark
  • RuneksRuneks Member Posts: 21
    @Faydark Much better, works perfectly now! :-) Thanks for the quick fix!

  • killerrabbitkillerrabbit Member Posts: 400
    This great, thank you! Just rolled a 99. Woot.

  • FaydarkFaydark Member Posts: 276
    Updated for SoD Patch 2.1.63.2 ui changes.

  • OrlonKronsteenOrlonKronsteen Member Posts: 596
    edited May 2016
    I'm rather late to the party (2.1 is no more), but thanks so much for creating and sharing that, @Faydark.

  • StevevdlStevevdl Member Posts: 73
    In case you are interested, I tried your autoroller on a cavalier only and the strength is a guaranteed 18 everytime

  • Mr2150Mr2150 Member Posts: 1,170
    Isn't that to force the calculation of exceptional strength?

  • StevevdlStevevdl Member Posts: 73
    Mr2150 said:

    Isn't that to force the calculation of exceptional strength?

    Maybe, If that is the case they are using the wrong variable because you get nothing but 18/% for strength

  • Mr2150Mr2150 Member Posts: 1,170
    Faydark said:

    Additionally, when the auto-roller is active, it automatically deducts points from non-str stats and adds them to STR until it hits 18 STR so that the percentile is displayed. Search for "exceptional" in UI.menu if you want to look at the code.

    It forces the 18 by reducing other stats accordingly. So the total hasn't changed - it's just forced to 18. If you don't like the guaranteed 18/xx then you can always reduce it after it has rolled the total you want.

  • MelicampMelicamp Member Posts: 231
    N00B question incoming - will this work with IWD:EE as well?

  • smeagolheartsmeagolheart Member Posts: 6,363
    Melicamp said:

    N00B question incoming - will this work with IWD:EE as well?

    it won't

«1
Sign In or Register to comment.