
     `A/                        S SK r S SKrS SKJr  S SKJrJrJr   S SKJr  \R                  S:  a  \
" S5      e\R                  S:X  a  \R                  S:  a  \
" S5      e S
\S\\   4S jr S\\\ R,                  4   4S jr SS jr SS jr SS jr SS jr " S S\R8                  5      r\" 5       q\S:X  a  \ R@                  " S[<        RB                   S35        \R                   H  r"\"RB                  [<        RB                  :X  d  M#  \"RF                  (       a  \"RI                  5         \R                  RK                  \"5        \ R@                  " S[<        RB                   S35        \"RL                  RN                  [<        RL                  l'          O   \RP                  " [<        5        g! \\
\4 a4  rS SKrSr\" \\
\45      (       a  \S	-  r\R$                  " \5        \eSrCff = f)    N)ModMenu)DictTupleList)UserFeedback   z4UserFeedback version is too old, need at least v1.5!   zBhttps://apple1417.github.io/bl2/didntread/?m=Skill%20Saver&uf=v1.5z&updateCharacterClassreturnc                 4    / nU S:X  a  S/nU$ U S:X  a  / SQnU$ )NMechromancer   Psycho)   %   &    )r
   skillIndexBlacklists     ^Z:\mnt\Skyabridged\SteamLibrary\steamapps\common\Borderlands 2\sdk_mods\SkillSaver\__init__.pyGetSkillIndexBlackListr      s8     '!d  
8	#*    c                     [         R                  " 5       R                  S   R                  n Su  pU R                  b>  U R
                  b1  U R
                  R                  nU R                  R                  5       nOSU R                  5       bB  U R                  5       R                  R                  5       nU R                  5       R                  nUb  Uc  gUS:X  a  SnOUS:X  a  SnUR                  SS	5      nX!4$ )
Nr   )NN) NCharClass_LilacPlayerClassr   charclass_doppelgangerDoppelganger
CharClass_r   )	unrealsdk	GetEngineGamePlayersActorr
   PlayerSkillTreeSkillsGetNameGetCachedSaveGamePlayerClassDefinition	SkillDatareplace)PCcurrentBuildcharacterClasss      r   GetCharClassAndSkillTreer,   +   s    					*	*1	-	3	3B#- L	$););)G))00**224					+--/EEMMO++-77~555!	3	3'#++L"=N))r   c                      [         R                  " S5        S[        SS 4S jn [        R                  " SSS9nXl        UR                  5         g )Nz![SkillSaver] Saving skill tree...Messager   c           	         U R                  5       (       d  U S:X  a  g [        5       u  pUS:X  d  Uc  g [        U5      nSnSnU H%  nXS;  a  U[        UR                  5      -  nUS-  nM'     [
        R                  " SU SU SU  S35        [        R                  R                  U   R                  X05        [        R                  R                  [        5        g )	NNoner   r   r   z[SkillSaver] Saving tree () for z with build name "")isspacer,   r   strGrader   LoginstanceSkillMapCurrentValueupdater   SettingsManagerSaveModSettings)r.   r
   SkillTreeDatar   build
skillIndexskills          r   
_GetResult!SaveSkillTree.<locals>._GetResultH   s    ??6 1 )A(B%R=#84^D 
"E4U[[))!OJ # 	25'?OOabiajjklm 	&&~6==w>NO 	//9r   zEnter Skill Tree Name:T)
PausesGame)r   r6   r4   r   TextInputBoxOnSubmitShow)rA   inputBoxs     r   SaveSkillTreerH   E   sF    MM56:C :D :< (()AdSH"MMOr   c                    ^^^^ [         R                  " 5       R                  S   R                  m[	        5       u  mmTS:X  d  Tc  g [
        R                  " TR                  5       [        R                  R                  S-  -  5      mTR                  R                  S:X  a  Sm S[        R                  SS 4UUUU4S jjn / n[        R                  R                  T    H  nU[        R                  " US9/-  nM     [        R                   " SS	T S
3US9nXl        UR%                  5         UR'                  5         g )Nr   r   d   buttonr   c           	        > [         R                  R                  T   U R                     n[        R
                  " SU R                   SU ST S35        [        T5      nT	R                  =R                  T	R                  SS5      -  sl        [        U5      nSnT
 Ha  nUR                  U;  aI  [        X5R                  U-
     5      n[        U5       H  nT	R                  UR                  5        M      M\  US-  nMc     TT	R                  R!                  S5      ::  a'  TS:  a   T	R                  R#                  SS	T-  5        g g g )
Nz![SkillSaver] Restoring skills to 
 (Build = z	) (Cost: )TFr   r   )r7   r8   r9   Namer   r6   r   PlayerReplicationInfoGeneralSkillPointsResetSkillTreelistIndexintrangeServerUpgradeSkill
DefinitionGetCurrencyOnHandAddCurrencyOnHand)rK   selectedBuildr   specListremovedIndexesr@   
skillGradexr
   r)   	SkillTree
respecCosts           r   _OnSelectSkillTree,RestoreSkillTree.<locals>._OnSelectSkillTree   s2    ))66~Fv{{S9&++jQ^P__hishttuvw4^D 	  33r7H7Hu7UU3 &E{{"55 ++*F!GH
z*A))%*:*:; + !#  11CCAFF:XY>$$66q"z/J LZFr   rP   zSkill Tree SelectionzSelect a skill tree for the z to restore toTitleCaptionButtons)r   r   r    r!   r,   mathfloorGetSkillTreeResetCostr7   
RespecCostr9   rQ   rR   r   OptionBoxButtonr8   	OptionBoxOnPressUpdaterF   )rc   buttons	skillTree	optionBoxr
   r)   ra   rb   s       @@@@r   RestoreSkillTreeru   n   s1    
				*	*1	-	3	3B 8 :NI y0 B446(:M:M:Z:Z]`:`abJ 
22a7
JK<#?#? KD K K: G&&33NC	L00i@AA D &&$.~.>nMI +NNr   c                  n  ^ [        5       u  mn TS:X  d  U c  g  S[        R                  SS 4U4S jjn/ n[        R                  R
                  T    H#  nUS:X  a  M  U[        R                  " US9/-  nM%     [        R                  " SSUS	9nXl        UR                  5         UR                  5         g )
Nr   rK   r   c                 
  > [         R                  R                  T   R                  U R                  5      n[
        R                  " SU R                   SU ST 35        [        R                  R                  [         5        g )Nz[SkillSaver] Deleting rM   r1   )
r7   r8   r9   poprP   r   r6   r   r;   r<   )rK   
buildValuer
   s     r   _DeleteSavedTree*DeleteSkillTrees.<locals>._DeleteSavedTree   sc    &&33NCGGT
.v{{m:j\QWXfWghi//9r   r0   re   zSkill Tree DeletionzSelect a skill tree to deleterf   )
r,   r   rn   r7   r8   r9   ro   rp   rq   rF   )ra   rz   rr   rs   rt   r
   s        @r   DeleteSkillTreesr|      s     8 :NIy0b:!=!= :$ : G&&33NC	L00i@AA D &&#-LV]I )NNr   c            
      X  ^ [         R                  " S5        [        [        [        S.m S[
        R                  SS 4U4S jjn [
        R                  " SST Vs/ s H  n[
        R                  " U5      PM     snS9nXl        UR                  5         UR                  5         g s  snf )	Nz![SkillSaver] Managing Skill Trees)zRestore Skill TreezSave Skill TreezDelete Skill TreerK   r   c                 .   > TU R                      " 5         g )Nre   )rK   	ActionMaps    r   _OnSelectOption)ManageSkillTrees.<locals>._OnSelectOption   s    &++ r   zManage Skill Treesz!Select the action you want to do!rf   )r   r6   ru   rH   r|   r   rn   ro   rp   rq   rF   )r   r`   rt   r   s      @r   ManageSkillTreesr      s    MM56 /(-I H! < < ! !
 &&"3:CD)Q--a0)DI (NN Es    B'c                      \ rS rSr% Sr\\S'   Sr\\S'   Sr\\S'   Sr	\\S	'   \
R                  R                  \
R                  R                  -  r\
R                  \S
'   \
R                  R                   \
R                  R"                  -  r\
R                  \S'   \
R&                  R(                  r\
R&                  \S'   \
R,                  " SS\S9/rSS jrSrg)
SkillSaver   zSkill SaverrP   FromDarkHellAuthorz\Allows you to be able to save your current skill spec with ease and then restore back to it!Descriptionz1.0.0VersionSupportedGamesTypesSaveEnabledStatezManage Skill LayoutsF3)rp   Nc                    [         R                  R                  SSSSSS5      U l        0 n/ SQ/ SQ4[	        [         R
                  R                  5       [         R
                  R                  :H  5         nU H  nUR                  USS	005        M     [         R                  R                  S
US9U l
        U R                  U R                  /U l        g )NzSkill Respec CostzeChanges the cost of changing skill specs (Percentage of respec cost)<br>0% = Free // 100% = Full Costr   rJ   r	   )	PrototypeEnforcer	Gladiator
LawbringerBaronessr   )	MercenarySoldierAssassinSirenr   r   r0   (0000000000000000000000000000000000000000r8   )StartingValue)r   OptionsSliderrm   rV   Game
GetCurrentBL2r:   Hiddenr8   )selfr   
Characters	Characters       r   __init__SkillSaver.__init__   s    !//00s
  ]S
 gll%%'7<<+;+;;
<>

 $I  )fh-?!@A $
 LS??KaKam Lb L

 7r   )r   rm   r8   r   N)__name__
__module____qualname____firstlineno__rP   r4   __annotations__r   r   r   r   r   r   TPSr   ModTypesUtilityGameplayr   EnabledSaveTypeLoadWithSettingsr   Keybindr   Keybindsr   __static_attributes__r   r   r   r   r      s    D# FC uKuGS#*<<#3#3gll6F6F#FNGLLF%..669I9I9R9RRE7R070G0G0X0Xg--X 6FVWXH8r   r   __main__[z] Manually loadedz] Removed last instancer   ))r   rj   Modsr   typingr   r   r   r   VersionMajorRuntimeErrorVersionMinorImportError	NameErrorex
webbrowserurl
isinstanceopenr4   rV   r   UObjectr,   rH   ru   r|   r   SDKModr   r7   r   r6   rP   mod	IsEnabledDisableremove	__class__r   RegisterModr   r   r   <module>r      s      $ $!  1$QRR  A%,*C*Ca*GQRR3 49  J*%Y->->(>"? *. B#L ]?D 6B P8*8 *8Z < zMMAhmm_$567||88x}}$}}LL$MMAhmm_,CDE -0MM,D,DH)    H E	 	\9- 
NC"|Y/00yOOC
Hs   AF5 5	G2>/G--G2