From: <lyn...@us...> - 2009-01-28 18:41:49
|
Revision: 5560 http://gemrb.svn.sourceforge.net/gemrb/?rev=5560&view=rev Author: lynxlupodian Date: 2009-01-28 18:41:28 +0000 (Wed, 28 Jan 2009) Log Message: ----------- bg2: moved IsDualClassed for use by GetActorClassTitle fixed GetActorClassTitle (fallback) for dual- and multiclassed actors Modified Paths: -------------- gemrb/trunk/gemrb/GUIScripts/bg2/GUICommonWindows.py gemrb/trunk/gemrb/GUIScripts/bg2/GUIREC.py Modified: gemrb/trunk/gemrb/GUIScripts/bg2/GUICommonWindows.py =================================================================== --- gemrb/trunk/gemrb/GUIScripts/bg2/GUICommonWindows.py 2009-01-28 16:33:18 UTC (rev 5559) +++ gemrb/trunk/gemrb/GUIScripts/bg2/GUICommonWindows.py 2009-01-28 18:41:28 UTC (rev 5560) @@ -477,17 +477,33 @@ def GetActorClassTitle (actor): ClassTitle = GemRB.GetPlayerStat (actor, IE_TITLE1) - Class = GemRB.GetPlayerStat (actor, IE_CLASS) - ClassTable = GemRB.LoadTable ("classes") - Class = GemRB.FindTableValue ( ClassTable, 5, Class ) - KitTable = GemRB.LoadTable ("kitlist") - KitIndex = GetKitIndex (actor) - if ClassTitle == 0: - if KitIndex == 0: - ClassTitle=GemRB.GetTableValue (ClassTable, Class, 2) + Class = GemRB.GetPlayerStat (actor, IE_CLASS) + ClassTable = GemRB.LoadTable ("classes") + ClassIndex = GemRB.FindTableValue ( ClassTable, 5, Class ) + KitTable = GemRB.LoadTable ("kitlist") + KitIndex = GetKitIndex (actor) + Multi = GemRB.GetTableValue (ClassTable, ClassIndex, 4) + Dual = IsDualClassed (actor, 1) + + if Multi and Dual[0] == 0: # true multi class + ClassTitle = GemRB.GetTableValue (ClassTable, ClassIndex, 2) + ClassTitle = GemRB.GetString (ClassTitle) else: - ClassTitle=GemRB.GetTableValue (KitTable, KitIndex, 2) + if Dual[0]: # dual class + # first (previous) kit or class of the dual class + if Dual[0] == 1: + ClassTitle = GemRB.GetTableValue (KitTable, Dual[1], 2) + elif Dual[0] == 2: + ClassTitle = GemRB.GetTableValue (ClassTable, Dual[1], 2) + ClassTitle = GemRB.GetString (ClassTitle) + " / " + ClassTitle += GemRB.GetString (GemRB.GetTableValue (ClassTable, Dual[2], 2)) + else: # ordinary class or kit + if KitIndex: + ClassTitle = GemRB.GetTableValue (KitTable, KitIndex, 2) + else: + ClassTitle = GemRB.GetTableValue (ClassTable, ClassIndex, 2) + ClassTitle = GemRB.GetString (ClassTitle) if ClassTitle == "*": return 0 @@ -806,3 +822,46 @@ except: GemRB.SetVisible (DiscWindow, 1) +# returns an array: first field is 0 - not dual classed; 1 - kit/class; 2 - class/class +# the second and third field hold the kit/class index for each class +# if invoked with verbose==0 only returns 0 or 1 (is or is not dual classed) +def IsDualClassed(actor, verbose): + Dual = GemRB.GetPlayerStat (actor, IE_MC_FLAGS) + Dual = Dual & ~(MC_EXPORTABLE|MC_PLOT_CRITICAL|MC_BEENINPARTY|MC_HIDDEN) + + if verbose: + Class = GemRB.GetPlayerStat (actor, IE_CLASS) + ClassTable = GemRB.LoadTable ("classes") + ClassIndex = GemRB.FindTableValue (ClassTable, 5, Class) + Multi = GemRB.GetTableValue (ClassTable, ClassIndex, 4) + DualInfo = [] + KitIndex = GetKitIndex (actor) + + if (Dual & MC_WAS_ANY_CLASS) > 0: # first (previous) class of the dual class + if KitIndex: + DualInfo.append (1) + DualInfo.append (KitIndex) + else: + DualInfo.append (2) + DualInfo.append (GemRB.FindTableValue (ClassTable, 15, Dual & MC_WAS_ANY_CLASS)) + + # use the first class of the multiclass bunch that isn't the same as the first class + FirstClassIndex = ClassIndex + Mask = 1 + for i in range (16): + if Multi & Mask: + ClassIndex = GemRB.FindTableValue (ClassTable, 5, i+1) + if ClassIndex == FirstClassIndex: + Mask += Mask + continue + DualInfo.append (ClassIndex) + break + Mask += Mask + return DualInfo + else: + return (0,-1,-1) + else: + if (Dual & MC_WAS_ANY_CLASS) > 0: + return (1,-1,-1) + else: + return (0,-1,-1) Modified: gemrb/trunk/gemrb/GUIScripts/bg2/GUIREC.py =================================================================== --- gemrb/trunk/gemrb/GUIScripts/bg2/GUIREC.py 2009-01-28 16:33:18 UTC (rev 5559) +++ gemrb/trunk/gemrb/GUIScripts/bg2/GUIREC.py 2009-01-28 18:41:28 UTC (rev 5560) @@ -41,6 +41,7 @@ OldOptionsWindow = None ExportWindow = None KitInfoWindow = None +LevelUpWindow = None ExportDoneButton = None ExportFileName = "" @@ -90,7 +91,7 @@ # levelup Button = GemRB.GetControl (Window, 37) GemRB.SetText (Window, Button, 7175) - GemRB.SetEvent (Window, Button, IE_GUI_BUTTON_ON_PRESS, "LevelupWindow") + GemRB.SetEvent (Window, Button, IE_GUI_BUTTON_ON_PRESS, "LevelUpWindow") # information Button = GemRB.GetControl (Window, 1) @@ -286,7 +287,7 @@ # Next Level: <NEXTLEVEL> #collecting tokens for stat overview - ClassTitle = GemRB.GetString (GetActorClassTitle (pc) ) + ClassTitle = GetActorClassTitle (pc) GemRB.SetToken("CLASS", ClassTitle) Class = GemRB.GetPlayerStat (pc, IE_CLASS) ClassTable = GemRB.LoadTable ("classes") @@ -763,50 +764,6 @@ GemRB.SetButtonState(ExportWindow, ExportDoneButton, IE_GUI_BUTTON_ENABLED) return -# returns an array: first field is 0 - not dual classed; 1 - kit/class; 2 - class/class -# the second and third field hold the kit/class index for each class -# if invoked with verbose==0 only returns 0 or 1 (is or is not dual classed) -def IsDualClassed(actor, verbose): - Dual = GemRB.GetPlayerStat (actor, IE_MC_FLAGS) - Dual = Dual & ~(MC_EXPORTABLE|MC_PLOT_CRITICAL|MC_BEENINPARTY|MC_HIDDEN) - - if verbose: - Class = GemRB.GetPlayerStat (actor, IE_CLASS) - ClassTable = GemRB.LoadTable ("classes") - ClassIndex = GemRB.FindTableValue (ClassTable, 5, Class) - Multi = GemRB.GetTableValue (ClassTable, ClassIndex, 4) - DualInfo = [] - KitIndex = GetKitIndex (actor) - - if (Dual & MC_WAS_ANY_CLASS) > 0: # first (previous) class of the dual class - if KitIndex: - DualInfo.append (1) - DualInfo.append (KitIndex) - else: - DualInfo.append (2) - DualInfo.append (GemRB.FindTableValue (ClassTable, 15, Dual & MC_WAS_ANY_CLASS)) - - # use the first class of the multiclass bunch that isn't the same as the first class - FirstClassIndex = ClassIndex - Mask = 1 - for i in range (16): - if Multi & Mask: - ClassIndex = GemRB.FindTableValue (ClassTable, 5, i+1) - if ClassIndex == FirstClassIndex: - Mask += Mask - continue - DualInfo.append (ClassIndex) - break - Mask += Mask - return DualInfo - else: - return (0,-1,-1) - else: - if (Dual & MC_WAS_ANY_CLASS) > 0: - return (1,-1,-1) - else: - return (0,-1,-1) - def CanDualClass(actor): # human if GemRB.GetPlayerStat (actor, IE_RACE) != 1: @@ -917,6 +874,44 @@ GemRB.ShowModal (KitInfoWindow, MODAL_SHADOW_GRAY) return +def LevelUpWindow(): + global LevelUpWindow + + LevelUpWindow = GemRB.LoadWindow (3) + + InfoButton = GemRB.GetControl (LevelUpWindow, 125) + GemRB.SetText (LevelUpWindow, InfoButton, 13707) + GemRB.SetEvent (LevelUpWindow, InfoButton, IE_GUI_BUTTON_ON_PRESS, "LevelUpInfoPress") + + DoneButton = GemRB.GetControl (LevelUpWindow, 0) + GemRB.SetText (LevelUpWindow, DoneButton, 11962) + GemRB.SetEvent (LevelUpWindow, DoneButton, IE_GUI_BUTTON_ON_PRESS, "LevelUpDonePress") + GemRB.SetButtonFlags (LevelUpWindow, DoneButton, IE_GUI_BUTTON_DEFAULT, OP_OR) + + if False: + HLAButton = GemRB.GetControl (LevelUpWindow, 126) + GemRB.SetText (LevelUpWindow, HLAButton, "KUKU") + GemRB.SetEvent (LevelUpWindow, HLAButton, IE_GUI_BUTTON_ON_PRESS, "LevelUpHLAPress") + + ## hide "Character Generation" + GemRB.DeleteControl (LevelUpWindow, 126) + + ## name + Label = GemRB.GetControl (LevelUpWindow, 90) + GemRB.SetText (LevelUpWindow, Label, GemRB.GetPlayerName(pc)) + + ## class + pc = GemRB.GameGetSelectedPCSingle () + Label = GemRB.GetControl (LevelUpWindow, 106) + GemRB.SetText (LevelUpWindow, Label, GetActorClassTitle (pc)) + + GemRB.ShowModal (LevelUpWindow, MODAL_SHADOW_GRAY) + return + +def LevelUpDonePress(): + GemRB.UnloadWindow(LevelUpWindow) + return + def KitDonePress(): GemRB.UnloadWindow(KitInfoWindow) return This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |