• Our friends from AlphaCentauri2.info are in need of technical assistance. If you have experience with the LAMP stack and some hours to spare, please help them out and post here.

Scrolling Civics screen help

you want to make something taller, so search for a variable with "height" in the name and make it MUCH larger, see if that changes what you want to be bigger. If not, put it vack and find another, try again. Once you find the one you want, adjust it till it is big enough to fit your longest civic.

OK, here are ALL the height ones:

self.BOTTOM_LINE_HEIGHT = 60

self.PANEL_HEIGHT = 165

Code:
self.HEADINGS_HEIGHT = (((40 + self.BUTTON_SIZE + self.TEXT_MARGIN) * l/self.CIVICCATEGORIES)/5 * 2) + 30

self.BOTTOM_LINE_HEIGHT = 70

Code:
self.HELP_BOTTOM = self.H_SCREEN - self.PANEL_HEIGHT - self.BOTTOM_LINE_HEIGHT - 10

		self.BOTTOM_LINE_TOP = self.H_SCREEN - self.BOTTOM_LINE_HEIGHT
		self.X_EXIT = self.W_SCREEN - 30

Code:
screen.addScrollPanel( self.QUICKVIEW_ADD, u"", 0, 0, self.W_SCREEN, self.PANEL_HEIGHT-20, PanelStyles.PANEL_STYLE_EXTERNAL )

Code:
# Make the scrollable area for the civics list...
		screen.addScrollPanel( "CivicList", u"", self.PANEL_WIDTH, self.PANEL_HEIGHT - 10, self.W_SCREEN, self.HELP_BOTTOM, PanelStyles.PANEL_STYLE_EXTERNAL )

Code:
screen.setImageButtonAt(szHelpImageID, "CivicList", gc.getCivicInfo(iCivic).getButton(), fX - self.PANEL_WIDTH + self.INITIAL_SPACING/17 * 2, fY + self.HEADINGS_HEIGHT/2 - self.BIG_BUTTON_SIZE/2, self.BIG_BUTTON_SIZE, self.BIG_BUTTON_SIZE, WidgetTypes.WIDGET_PEDIA_JUMP_TO_CIVIC, iCivic, 1)
		screen.setImageButtonAt(szHelpImageID+self.QUICKVIEW_ADD, self.QUICKVIEW_ADD, gc.getCivicInfo(iCivic).getButton(), ffX, self.QUICKVIEW_TOP, self.BIG_BUTTON_SIZE, self.BIG_BUTTON_SIZE, WidgetTypes.WIDGET_PEDIA_JUMP_TO_CIVIC, iCivic, 1)

So what does anyone have for ideas here then??:crazyeye:
 
Play with them.

Set one of them to 20000, go into the game and see how the screen changed. That big of a change you WILL see, then you know what the value does without needing to wait in a response :)

Just remeber to only do one at a time, and if sometging unexpected happens, look at the code and find something which you think you understand, see if you can change how it works. If you can start to predict what changing some numbers will cause, then you are understanding the program
 
Can't be, the second last lines of code, you've mentioned, set the size, and there's self.PANEL_HEIGHT mentioned.
What values did you try?

1. self.PANEL_HEIGHT = 2000
2. self.BOTTOM_LINE_HEIGHT = 600
3. self.BOTTOM_LINE_HEIGHT = 700
4. self.HELP_BOTTOM = self.H_SCREEN - self.PANEL_HEIGHT -
self.BOTTOM_LINE_HEIGHT - 1000
5. self.PANEL_HEIGHT - 15 (but see second screen also)
 
Okay, i've found it.

PHP:
		for l in range(gc.getNumCivicInfos()):
			self.HEADINGS_HEIGHT = (((40 + self.BUTTON_SIZE + self.TEXT_MARGIN) * l/self.CIVICCATEGORIES)/5 * 2) + 30

Change the 30 at the end to a value, which fits.

OK i changed it all the way to 70, but i really think it's with the words??, this column needs to go UP higher??
 
You have the exact same information being displayed twice there. Remove the extra case and it should work

No offense but i know nothing about python, and have no idea what a case is, or how to remove it, sorry.:crazyeye:
 
Remove the if() test and the indented line below it. You removed the first line's indentation, so it's hard to see if that's all that must go. Repost with a few lines above and below and include the first line's indentation.

Code:
                [s]if activePlayer.isCivic(CvUtil.findInfoTypeNum(gc.getCivicInfo,gc.getNumCivicInfos(),'CIVIC_REPUBLIC')):[/s]
                    [s]cf.resetRepublicTraits(activePlayer)[/s]
BTW, what does "cf" get set to? Look for this line:

Code:
cf = ...
Also, that previous block of code I had you replace, try this:

Code:
        szHelpText = CyGameTextMgr().parseCivicInfo(iCivic, False, True, True)
        HelpList = szHelpText.splitlines()
        i = 0
So from the original code you would just have removed Requires from the function name parseCivicInfoRequires(). That will put the text back.


Undo this. In my DLL there is a seperate text request to get the requirements for a civic from that to get all information for the civic. You don't have that, so you want to remove all reference to szHelpText from your code.
 
Undo this. In my DLL there is a seperate text request to get the requirements for a civic from that to get all information for the civic. You don't have that, so you want to remove all reference to szHelpText from your code.

I think i erased too much??

Traceback (most recent call last):

File "CvScreensInterface", line 84, in showCivicsScreen

File "CvCivicsScreen", line 168, in interfaceScreen

File "CvCivicsScreen", line 179, in drawContents

File "CvCivicsScreen", line 379, in drawAllHelpText

File "CvCivicsScreen", line 349, in drawHelpText

NameError: global name 'HelpList' is not defined
ERR: Python function showCivicsScreen failed, module CvScreensInterface


Traceback (most recent call last):

File "CvScreensInterface", line 657, in handleInput

File "CvCivicsScreen", line 463, in handleInput

File "CvCivicsScreen", line 310, in CivicsButton

File "CvCivicsScreen", line 349, in drawHelpText

NameError: global name 'HelpList' is not defined
ERR: Python function handleInput failed, module CvScreensInterface
 
I think i erased too much?? (Compare to this one: http://forums.civfanatics.com/showpost.php?p=8404095&postcount=17)

Traceback (most recent call last):

File "CvScreensInterface", line 84, in showCivicsScreen

File "CvCivicsScreen", line 168, in interfaceScreen

File "CvCivicsScreen", line 179, in drawContents

File "CvCivicsScreen", line 379, in drawAllHelpText

File "CvCivicsScreen", line 349, in drawHelpText

NameError: global name 'HelpList' is not defined
ERR: Python function showCivicsScreen failed, module CvScreensInterface


Traceback (most recent call last):

File "CvScreensInterface", line 657, in handleInput

File "CvCivicsScreen", line 463, in handleInput

File "CvCivicsScreen", line 310, in CivicsButton

File "CvCivicsScreen", line 349, in drawHelpText

NameError: global name 'HelpList' is not defined
ERR: Python function handleInput failed, module CvScreensInterface

Spoiler :
Code:
## Sid Meier's Civilization 4
## Copyright Firaxis Games 2005
from CvPythonExtensions import *
import CvUtil
import ScreenInput
import CvScreenEnums
import string
import CvScreensInterface

# globals
gc = CyGlobalContext()
ArtFileMgr = CyArtFileMgr()
localText = CyTranslator()

import PyHelpers
PyPlayer = PyHelpers.PyPlayer

class CvCivicsScreen:
    "Civics Screen"

    def __init__(self):
        self.SCREEN_NAME = "CivicsScreen"
        self.CANCEL_NAME = "CivicsCancel"
        self.EXIT_NAME = "CivicsExit"
        self.TITLE_NAME = "CivicsTitleHeader"
        self.TITLE_TOP_PANEL = "CivicsTopPanel"
        self.TITLE_BOTTOM_PANEL = "CivicsBottomPanel"
        self.BUTTON_NAME = "CivicsScreenButton"
        self.TEXT_NAME = "CivicsScreenText"
        self.AREA_NAME = "CivicsScreenArea"
        self.HELP_AREA_NAME = "CivicsScreenHelpArea"
        self.HELP_IMAGE_NAME = "CivicsScreenCivicOptionImage"
        self.DEBUG_DROPDOWN_ID =  "CivicsDropdownWidget"
        self.BACKGROUND_ID = "CivicsBackground"
        self.HELP_HEADER_NAME = "CivicsScreenHeaderName"
        self.QUICKVIEW_ADD = "QuickView"

        self.CivicsScreenInputMap = {
            self.BUTTON_NAME    : self.CivicsButton,
            self.TEXT_NAME        : self.CivicsButton,
            self.EXIT_NAME        : self.Revolution,
            self.CANCEL_NAME    : self.Cancel}

        self.iActivePlayer = -1

        self.m_paeCurrentCivics = []
        self.m_paeDisplayCivics = []
        self.m_paeOriginalCivics = []

        self.HEADINGS_TOP = 0
        self.HEADINGS_BOTTOM = 220
        self.HEADINGS_LEFT = 0
        self.HEADINGS_RIGHT = 260
        self.HELP_TOP = 20
        self.HELP_BOTTOM = 610
        self.HELP_LEFT = 290
        self.HELP_RIGHT = 950
        self.BUTTON_SIZE = 24
        self.BIG_BUTTON_SIZE = 64
        self.BOTTOM_LINE_TOP = 630
        self.BOTTOM_LINE_HEIGHT = 60
        self.Y_EXIT = 726
        self.Y_CANCEL = 726
        self.Y_SCREEN = 396
        self.H_SCREEN = 768
        self.Z_SCREEN = -6.1
        self.Y_TITLE = 8
        self.Z_TEXT = self.Z_SCREEN - 0.2
        self.TEXT_MARGIN = 13            # original = 15



    def setValues(self):
        screen = CyGInterfaceScreen("MainInterface", CvScreenEnums.MAIN_INTERFACE)
        resolutionWidth = 1024
        resolutionHeigth = 768


        self.H_SCREEN = resolutionHeigth
        self.W_SCREEN = resolutionWidth

        self.X_CANCEL = 20
        self.X_POSITION = 0
        self.Y_POSITION = 0
        self.PANEL_HEIGHT = 165
        self.QUICKVIEW_WIDTH = 150
        self.QUICKVIEW_TOP = 25
        self.PANEL_WIDTH = 0
        self.INITIAL_SPACING = 30
        self.HEADINGS_WIDTH = 340
        for k in range(gc.getNumCivicOptionInfos()):
            self.CIVICCATEGORIES = k
        for l in range(gc.getNumCivicInfos()):
            self.HEADINGS_HEIGHT = (((40 + self.BUTTON_SIZE + self.TEXT_MARGIN) * l/self.CIVICCATEGORIES)/5 * 2) + 60
        self.RIGHT_LINE_WIDTH = 0
        self.SCROLL_BAR_SPACING = 40
        self.BOTTOM_LINE_TEXT_SPACING = 150
        self.BOTTOM_LINE_WIDTH = self.W_SCREEN
        self.BOTTOM_LINE_HEIGHT = 70

        self.X_SCREEN = self.W_SCREEN / 2
        self.Y_CANCEL = self.H_SCREEN - 40
        self.Y_EXIT = self.H_SCREEN - 40
        self.HELP_BOTTOM = self.H_SCREEN - self.PANEL_HEIGHT - self.BOTTOM_LINE_HEIGHT - 10

        self.BOTTOM_LINE_TOP = self.H_SCREEN - self.BOTTOM_LINE_HEIGHT
        self.X_EXIT = self.W_SCREEN - 30

    def getScreen(self):
        return CyGInterfaceScreen(self.SCREEN_NAME, CvScreenEnums.CIVICS_SCREEN)

    def setActivePlayer(self, iPlayer):

        self.iActivePlayer = iPlayer
        activePlayer = gc.getPlayer(iPlayer)

        self.m_paeCurrentCivics = []
        self.m_paeDisplayCivics = []
        self.m_paeOriginalCivics = []
        for i in range (gc.getNumCivicOptionInfos()):
            self.m_paeCurrentCivics.append(activePlayer.getCivics(i))
            self.m_paeDisplayCivics.append(activePlayer.getCivics(i))
            self.m_paeOriginalCivics.append(activePlayer.getCivics(i))



    def interfaceScreen (self):
        self.setValues()
        screen = self.getScreen()
        if screen.isActive():
            return
        screen.setRenderInterfaceOnly(True);
        screen.showScreen( PopupStates.POPUPSTATE_IMMEDIATE, False)
        screen.setDimensions(self.X_POSITION, self.Y_POSITION, self.W_SCREEN, self.H_SCREEN * 2)
        screen.addDDSGFC(self.BACKGROUND_ID, ArtFileMgr.getInterfaceArtInfo("SCREEN_BG_OPAQUE").getPath(), 0, 0, self.W_SCREEN, self.H_SCREEN, WidgetTypes.WIDGET_GENERAL, -1, -1 )

        # Panels on the Top(name of screen) and bottom(Cancel, Exit, Revolution buttons)
        screen.addPanel( self.TITLE_TOP_PANEL, u"", u"", True, False, 0, 0, self.W_SCREEN, self.PANEL_HEIGHT, PanelStyles.PANEL_STYLE_TOPBAR )
        screen.addPanel( self.TITLE_BOTTOM_PANEL, u"", u"", True, False, 0, self.BOTTOM_LINE_TOP, self.W_SCREEN * 2, self.H_SCREEN - self.BOTTOM_LINE_TOP, PanelStyles.PANEL_STYLE_BOTTOMBAR )
        screen.addScrollPanel( self.QUICKVIEW_ADD, u"", 0, 0, self.W_SCREEN, self.PANEL_HEIGHT-20, PanelStyles.PANEL_STYLE_EXTERNAL )
        screen.setActivation( self.QUICKVIEW_ADD, ActivationTypes.ACTIVATE_NORMAL )
        screen.showWindowBackground(False)

        # Set the background and exit button, and show the screen
        screen.setDimensions(screen.centerX(0), screen.centerY(0), self.W_SCREEN, self.H_SCREEN)

        # set the standard "exit" text, other text "cancel, revolution" are handled at the bottom in this python file
        screen.setText(self.CANCEL_NAME, "Background", u"<font=4>" + localText.getText("TXT_KEY_SCREEN_CANCEL", ()).upper() + u"</font>", CvUtil.FONT_LEFT_JUSTIFY, self.X_CANCEL, self.Y_CANCEL, self.Z_TEXT, FontTypes.TITLE_FONT, WidgetTypes.WIDGET_GENERAL, 1, 0)

    # Header...
        screen.setText(self.TITLE_NAME, "Background", u"<font=4b>" + localText.getText("TXT_KEY_CIVICS_SCREEN_TITLE", ()).upper() + u"</font>", CvUtil.FONT_CENTER_JUSTIFY, self.X_SCREEN, self.Y_TITLE, self.Z_TEXT, FontTypes.TITLE_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1)

        self.setActivePlayer(gc.getGame().getActivePlayer())

        if (CyGame().isDebugMode()):
            self.szDropdownName = self.DEBUG_DROPDOWN_ID
            screen.addDropDownBoxGFC(self.szDropdownName, 22, 12, 300, WidgetTypes.WIDGET_GENERAL, -1, -1, FontTypes.GAME_FONT)
            for j in range(gc.getMAX_PLAYERS()):
                if (gc.getPlayer(j).isAlive()):
                    screen.addPullDownString(self.szDropdownName, gc.getPlayer(j).getName(), j, j, False )

        # Make the scrollable area for the civics list...
        screen.addScrollPanel( "CivicList", u"", self.PANEL_WIDTH, self.PANEL_HEIGHT - 15, self.W_SCREEN, self.HELP_BOTTOM, PanelStyles.PANEL_STYLE_EXTERNAL )
        screen.setActivation( "CivicList", ActivationTypes.ACTIVATE_NORMAL )


        # Draw Contents
        self.drawContents()

        return 0

    # Draw the contents...
    def drawContents(self):

        # Draw the radio buttons
        self.drawAllButtons()

        # Draw Help Text
        self.drawAllHelpText()

        # Update Maintenance/anarchy/etc.
        self.updateAnarchy()

    def drawCivicOptionButtons(self, iCivicOption):

        activePlayer = gc.getPlayer(self.iActivePlayer)
        screen = self.getScreen()

        for j in range(gc.getNumCivicInfos()):

            if (gc.getCivicInfo(j).getCivicOptionType() == iCivicOption):
                screen.setState(self.getCivicsButtonName(j), self.m_paeCurrentCivics[iCivicOption] == j)
                screen.setState(self.getCivicsButtonName(j)+self.QUICKVIEW_ADD, self.m_paeCurrentCivics[iCivicOption] == j)

                if (self.m_paeDisplayCivics[iCivicOption] == j):
                    screen.setState(self.getCivicsButtonName(j), True)
                    screen.setState(self.getCivicsButtonName(j)+self.QUICKVIEW_ADD, True)
                    screen.show(self.getCivicsButtonName(j))
                    screen.show(self.getCivicsButtonName(j)+self.QUICKVIEW_ADD)
                elif (activePlayer.canDoCivics(j)):
                    #screen.setState(self.getCivicsButtonName(j), False)
                    screen.show(self.getCivicsButtonName(j))
                    screen.show(self.getCivicsButtonName(j)+self.QUICKVIEW_ADD)
                else:
                    screen.hide(self.getCivicsButtonName(j))
                    screen.hide(self.getCivicsButtonName(j)+self.QUICKVIEW_ADD)

    # Will draw the radio buttons (and revolution)
    def drawAllButtons(self):

        for i in range(gc.getNumCivicOptionInfos()):

            screen = self.getScreen()

            fY = self.HEADINGS_HEIGHT * i
            fX = self.HEADINGS_LEFT

            ffX = 3 + self.QUICKVIEW_WIDTH * i
            ffY = self.QUICKVIEW_TOP + self.BIG_BUTTON_SIZE

            # draw the Top Screen panels for the civics
            szAreaID = self.AREA_NAME + str(i)
            screen.attachPanelAt( "CivicList", szAreaID, u"", u"", True, True, PanelStyles.PANEL_STYLE_MAIN, fX, fY + self.HEADINGS_TOP, self.HEADINGS_RIGHT - self.HEADINGS_LEFT, self.HEADINGS_HEIGHT, WidgetTypes.WIDGET_GENERAL, i, -1 )


            # draw the civic category(government, labor, ...)

            szCivicID = "CivicID" + str(i)
            screen.setTextAt( szCivicID, "CivicList", u"<font=4>" + gc.getCivicOptionInfo(i).getDescription() + u"</font>", CvUtil.FONT_CENTER_JUSTIFY, fX + self.HEADINGS_WIDTH / 6, fY + 6, 0, FontTypes.SMALL_FONT, WidgetTypes.WIDGET_GENERAL, i, -1 )
            screen.setActivation( szCivicID, ActivationTypes.ACTIVATE_MIMICPARENTFOCUS)
            fY += 3 * self.TEXT_MARGIN

            iCount = 0
            for j in range(gc.getNumCivicInfos()):
                if gc.getCivicInfo(j).getCivicOptionType() == i:

                    iCount += 1
                    #Clone these to get the smaller checkboxes.  But you need to set up the clicking behavior manually, as well as enabling Mouseover Help information displays.
                    screen.addCheckBoxGFCAt("CivicList", self.getCivicsButtonName(j), gc.getCivicInfo(j).getButton(), ArtFileMgr.getInterfaceArtInfo("BUTTON_HILITE_SQUARE").getPath(), fX + 12, fY, self.BUTTON_SIZE, self.BUTTON_SIZE, WidgetTypes.WIDGET_GENERAL, j, 1, ButtonStyles.BUTTON_STYLE_LABEL, False)
                    screen.setActivation( self.getCivicsButtonName(j), ActivationTypes.ACTIVATE_NORMAL )
                    screen.hide (self.getCivicsButtonName(j) )

                    screen.addCheckBoxGFCAt(self.QUICKVIEW_ADD, self.getCivicsButtonName(j)+self.QUICKVIEW_ADD, gc.getCivicInfo(j).getButton(), ArtFileMgr.getInterfaceArtInfo("BUTTON_HILITE_SQUARE").getPath(), ffX, ffY, self.BUTTON_SIZE, self.BUTTON_SIZE, WidgetTypes.WIDGET_GENERAL, j, 1, ButtonStyles.BUTTON_STYLE_LABEL, False)
                    screen.setActivation( self.getCivicsButtonName(j)+self.QUICKVIEW_ADD, ActivationTypes.ACTIVATE_NORMAL )
                    screen.hide (self.getCivicsButtonName(j)+self.QUICKVIEW_ADD)

                    # draw the civic names
                    screen.setTextAt( self.getCivicsTextName(j), "CivicList", u"<font=3>   -   " + gc.getCivicInfo(j).getDescription() + u"</font>", CvUtil.FONT_LEFT_JUSTIFY, fX + 12 + self.BUTTON_SIZE + 10 , fY, 0, FontTypes.SMALL_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1 )

                    # make sure the next line is put down under the previous
                    fY += 2 * self.TEXT_MARGIN + 1
                    ffX += 3 + self.BUTTON_SIZE
                    if(iCount%5==0):
                        ffX -= 5 * (3 + self.BUTTON_SIZE)
                        ffY += 3 + self.BUTTON_SIZE

            self.drawCivicOptionButtons(i)


    def highlight(self, iCivic):
        iCivicOption = gc.getCivicInfo(iCivic).getCivicOptionType()
        if self.m_paeDisplayCivics[iCivicOption] != iCivic:
            self.m_paeDisplayCivics[iCivicOption] = iCivic
            self.drawCivicOptionButtons(iCivicOption)
            return True
        return False

    def unHighlight(self, iCivic):
        iCivicOption = gc.getCivicInfo(iCivic).getCivicOptionType()
        if self.m_paeDisplayCivics[iCivicOption] != self.m_paeCurrentCivics[iCivicOption]:
            self.m_paeDisplayCivics[iCivicOption] = self.m_paeCurrentCivics[iCivicOption]
            self.drawCivicOptionButtons(iCivicOption)
            return True
        return False

    def select(self, iCivic):
        activePlayer = gc.getPlayer(self.iActivePlayer)
        if (not activePlayer.canDoCivics(iCivic)):
            # If you can't even do this, get out....
            return 0

        iCivicOption = gc.getCivicInfo(iCivic).getCivicOptionType()

        # Set the previous widget
        iCivicPrev = self.m_paeCurrentCivics[iCivicOption]

        # Switch the widgets
        self.m_paeCurrentCivics[iCivicOption] = iCivic

        # Unighlight the previous widget
        self.unHighlight(iCivicPrev)
        self.getScreen().setState(self.getCivicsButtonName(iCivicPrev), False)
        self.getScreen().setState(self.getCivicsButtonName(iCivicPrev)+self.QUICKVIEW_ADD, False)

        # highlight the new widget
        self.highlight(iCivic)
        self.getScreen().setState(self.getCivicsButtonName(iCivic), True)
        self.getScreen().setState(self.getCivicsButtonName(iCivic)+self.QUICKVIEW_ADD, True)

        return 0

    def CivicsButton(self, inputClass):

        if (inputClass.getNotifyCode() == NotifyCode.NOTIFY_CLICKED) :
            if (inputClass.getFlags() & MouseFlags.MOUSE_RBUTTONUP):
                CvScreensInterface.pediaJumpToCivic((inputClass.getID(), ))
            else:
                # Select button
                self.select(inputClass.getID())
                self.drawHelpText(gc.getCivicInfo(inputClass.getID()).getCivicOptionType())
                self.updateAnarchy()
        elif (inputClass.getNotifyCode() == NotifyCode.NOTIFY_CURSOR_MOVE_ON) :
            # Highlight this button
            if self.highlight(inputClass.getID()):
                self.drawHelpText(gc.getCivicInfo(inputClass.getID()).getCivicOptionType())
                self.updateAnarchy()
        elif (inputClass.getNotifyCode() == NotifyCode.NOTIFY_CURSOR_MOVE_OFF) :
            if self.unHighlight(inputClass.getID()):
                self.drawHelpText(gc.getCivicInfo(inputClass.getID()).getCivicOptionType())
                self.updateAnarchy()

        return 0

    def drawHelpText(self, iCivicOption):

        activePlayer = gc.getPlayer(self.iActivePlayer)
        iCivic = self.m_paeDisplayCivics[iCivicOption]

        screen = self.getScreen()

        # spacing for the blue background help panel
        fY = self.HEADINGS_HEIGHT * iCivicOption
        fX = self.INITIAL_SPACING + self.HELP_LEFT - self.PANEL_WIDTH + 2 * self.TEXT_MARGIN

        # draw the blue panels
        szHelpAreaID = self.HELP_AREA_NAME + str(iCivicOption)
        screen.attachPanelAt( "CivicList", szHelpAreaID, u"", u"", True, True, PanelStyles.PANEL_STYLE_MAIN, self.HELP_LEFT - self.PANEL_WIDTH + self.INITIAL_SPACING, fY, self.HELP_RIGHT - self.HELP_LEFT, self.HEADINGS_HEIGHT, WidgetTypes.WIDGET_GENERAL, -1, -1 )

        # spacing for the help strings
        fY = self.HELP_TOP + self.HEADINGS_HEIGHT * iCivicOption
        fX = self.HELP_LEFT + self.HEADINGS_WIDTH/2 - 100

        #upkeep
        szPaneIDUpkeep = "Upkeep" + str(iCivicOption)
        if ((gc.getCivicInfo(iCivic).getUpkeep() != -1) and not activePlayer.isNoCivicUpkeep(iCivicOption)):
            fY += 1.2 * self.TEXT_MARGIN
        else:
            fY += 1.2 * self.TEXT_MARGIN
[COLOR=Red]         for item in HelpList:

            szPanelIDReqItem = "CivicListReq"+str(iCivicOption)+str(i)
            screen.setTextAt( szPanelIDReqItem, "CivicList", u"<font=2>" + item + u"</font>", CvUtil.FONT_LEFT_JUSTIFY, fX + self.HEADINGS_WIDTH / 4 + 150, fY - self.TEXT_MARGIN / 2, 0, FontTypes.GAME_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1 )
            fY += self.TEXT_MARGIN
            i += 1

        for item in HelpList:
            szPanelIDHelpItem = "CivicListHelp"+str(iCivicOption)+str(i)
            screen.setTextAt( szPanelIDHelpItem, "CivicList", u"<font=3>" + item + u"</font>", CvUtil.FONT_LEFT_JUSTIFY, fX , fY + 6, 0, FontTypes.GAME_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1 )
            fY += 1.5 * self.TEXT_MARGIN
            i += 1


[/COLOR]            # johny smith ScreenTweaks LINE:
        fY = self.HEADINGS_HEIGHT * iCivicOption
        fX = self.INITIAL_SPACING + self.HELP_LEFT - self.BIG_BUTTON_SIZE
        ffX = (self.QUICKVIEW_WIDTH) * iCivicOption + (self.QUICKVIEW_WIDTH-self.BIG_BUTTON_SIZE)/2

        szHelpImageID = self.HELP_IMAGE_NAME + str(iCivicOption)
        screen.setImageButtonAt(szHelpImageID, "CivicList", gc.getCivicInfo(iCivic).getButton(), fX - self.PANEL_WIDTH + self.INITIAL_SPACING/17 * 2, fY + self.HEADINGS_HEIGHT/2 - self.BIG_BUTTON_SIZE/2, self.BIG_BUTTON_SIZE, self.BIG_BUTTON_SIZE, WidgetTypes.WIDGET_PEDIA_JUMP_TO_CIVIC, iCivic, 1)
        screen.setImageButtonAt(szHelpImageID+self.QUICKVIEW_ADD, self.QUICKVIEW_ADD, gc.getCivicInfo(iCivic).getButton(), ffX, self.QUICKVIEW_TOP, self.BIG_BUTTON_SIZE, self.BIG_BUTTON_SIZE, WidgetTypes.WIDGET_PEDIA_JUMP_TO_CIVIC, iCivic, 1)

    # Will draw the help text
    def drawAllHelpText(self):
        for i in range (gc.getNumCivicOptionInfos()):


            screen = self.getScreen()

            self.drawHelpText(i)


    # Will Update the maintenance/anarchy/etc
    def updateAnarchy(self):

        screen = self.getScreen()

        activePlayer = gc.getPlayer(self.iActivePlayer)

        bChange = False
        i = 0
        while (i  < gc.getNumCivicOptionInfos() and not bChange):
            if (self.m_paeCurrentCivics[i] != self.m_paeOriginalCivics[i]):
                bChange = True
            i += 1

        # Make the revolution button
        screen.deleteWidget(self.EXIT_NAME)
        if (activePlayer.canRevolution(0) and bChange):
            screen.setText(self.EXIT_NAME, "Background", u"<font=4>" + localText.getText("TXT_KEY_CONCEPT_REVOLUTION", ( )).upper() + u"</font>", CvUtil.FONT_RIGHT_JUSTIFY, self.X_EXIT, self.Y_EXIT, self.Z_TEXT, FontTypes.TITLE_FONT, WidgetTypes.WIDGET_REVOLUTION, 1, 0)
            screen.show(self.CANCEL_NAME)
            screen.moveToFront(self.CANCEL_NAME)
        else:
            screen.setText(self.EXIT_NAME, "Background", u"<font=4>" + localText.getText("TXT_KEY_PEDIA_SCREEN_EXIT", ( )).upper() + u"</font>", CvUtil.FONT_RIGHT_JUSTIFY, self.X_EXIT, self.Y_EXIT, self.Z_TEXT, FontTypes.TITLE_FONT, WidgetTypes.WIDGET_GENERAL, 1, -1)
            screen.hide(self.CANCEL_NAME)

        # Anarchy
        iTurns = activePlayer.getCivicAnarchyLength(self.m_paeDisplayCivics);

        if (activePlayer.canRevolution(0)):
            szText = localText.getText("TXT_KEY_ANARCHY_TURNS", (iTurns, ))
        else:
            szText = CyGameTextMgr().setRevolutionHelp(self.iActivePlayer)

        screen.setLabel("CivicsRevText", "Background", u"<font=3>" + szText + u"</font>", CvUtil.FONT_CENTER_JUSTIFY, self.X_SCREEN + self.BOTTOM_LINE_TEXT_SPACING, self.Y_EXIT + 2, 0, FontTypes.GAME_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1)

        # Maintenance
        szText = localText.getText("TXT_KEY_CIVIC_SCREEN_UPKEEP", (activePlayer.getCivicUpkeep(self.m_paeDisplayCivics, True), ))
        screen.setLabel("CivicsUpkeepText", "Background", u"<font=3>" + szText + u"</font>", CvUtil.FONT_CENTER_JUSTIFY, self.X_SCREEN / 2 + self.BOTTOM_LINE_TEXT_SPACING * 1 / 4, self.Y_CANCEL + 1, 0, FontTypes.GAME_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1)

    # Revolution!!!
    def Revolution(self, inputClass):

        activePlayer = gc.getPlayer(self.iActivePlayer)

        if (inputClass.getNotifyCode() == NotifyCode.NOTIFY_CLICKED) :
            if (activePlayer.canRevolution(0)):
                messageControl = CyMessageControl()
                messageControl.sendUpdateCivics(self.m_paeDisplayCivics)
            screen = self.getScreen()
            screen.hideScreen()


    def Cancel(self, inputClass):
        screen = self.getScreen()
        if (inputClass.getNotifyCode() == NotifyCode.NOTIFY_CLICKED) :
            for i in range (gc.getNumCivicOptionInfos()):
                self.m_paeCurrentCivics[i] = self.m_paeOriginalCivics[i]
                self.m_paeDisplayCivics[i] = self.m_paeOriginalCivics[i]

            self.drawContents()

    def getCivicsButtonName(self, iCivic):
        szName = self.BUTTON_NAME + str(iCivic)
        return szName

    def getCivicsTextName(self, iCivic):
        szName = self.TEXT_NAME + str(iCivic)
        return szName

    # Will handle the input for this screen...
    def handleInput(self, inputClass):
        if (inputClass.getNotifyCode() == NotifyCode.NOTIFY_LISTBOX_ITEM_SELECTED):
            screen = self.getScreen()
            iIndex = screen.getSelectedPullDownID(self.DEBUG_DROPDOWN_ID)
            self.setActivePlayer(screen.getPullDownData(self.DEBUG_DROPDOWN_ID, iIndex))
            self.drawContents()
            return 1
        elif (self.CivicsScreenInputMap.has_key(inputClass.getFunctionName())):
            'Calls function mapped in CvCivicsScreen'
            # only get from the map if it has the key

            # get bound function from map and call it
            self.CivicsScreenInputMap.get(inputClass.getFunctionName())(inputClass)
            return 1
        return 0

    def update(self, fDelta):
        return
Remove the bits in red. Should work then
 
In the "not messed up" code (na, isn't really not messed up, is it?), take out the first or the second 5 lines, which Xienwolf has marked with red.

Holy Smokes, i think WE finally got it:goodjob::p
 
The text could maybe a bit bigger. Try to set font= to 4.

OK is this better?? I tried to put another look here with smaller print on left and bigger on the right but CFC will not let me put the same type of pic attached.
 
Now on a COMPLETELY different note: I just dont want to make another thread is all, so bear with me ok?

I get these TWO errors when playing?

Traceback (most recent call last):(I have NO idea what this is, i dont even have a WB thing in my python??)

File "CvWBInterface", line 18, in writeDesc

File "CvWBDesc", line 1533, in write

File "CvWBDesc", line 470, in write

RuntimeError: unidentifiable C++ exception
ERR: Python function writeDesc failed, module CvWBInterface



Traceback (most recent call last):

File "CvEventInterface", line 25, in onEvent

File "CvCustomEventManager", line 143, in handleEvent

Spoiler :
Code:
def handleEvent(self, argsList):
        """Handles events by calling all installed handlers."""
        self.origArgsList = argsList
        flagsIndex = len(argsList) - 6
        self.bDbg, self.bMultiPlayer, self.bAlt, self.bCtrl, self.bShift, self.bAllowCheats = argsList[flagsIndex:]
        eventType = argsList[0]
        [B]return {[/B]
            "kbdEvent": self._handleConsumableEvent,
            "mouseEvent": self._handleConsumableEvent,
            "OnSave": self._handleOnSaveEvent,
            "OnLoad": self._handleOnLoadEvent
        }.get(eventType, self._handleDefaultEvent)(eventType, argsList[1:])

File "CvCustomEventManager", line 154, in _handleDefaultEvent

Spoiler :
Code:
def _handleDefaultEvent(self, eventType, argsList):
        if self.EventHandlerMap.has_key(eventType):
            for eventHandler in self.EventHandlerMap[eventType]:
                # the last 6 arguments are for internal use by handleEvent
                [B]eventHandler(argsList[:len(argsList) - 6])[/B]

File "CvEventManager", line 848, in onUnitBuilt

Spoiler :
Code:
if (CurrentUnit == gc.getInfoTypeForString("UNIT_MONK")):
                        NumReligion = []
                        NumReligion.append('JEWISH')
                        NumReligion.append('CHRISTIAN')
                        NumReligion.append('ISLAMIC')
                        NumReligion.append('HINDU')
                        NumReligion.append('BUDDHIST')
                        NumReligion.append('CONFUCIAN')
                        NumReligion.append('TAOIST')
                        iPlayer = city.getOwner()
                        pPlayer = gc.getPlayer(iPlayer)
        		iReligion = pPlayer.getStateReligion()
        		        		
        		[B]MonasteryName = "BUILDING_"+NumReligion[iReligion]+"_MONASTERY"[/B]
        		bMonastery = gc.getInfoTypeForString(MonasteryName)
        		if (city.getNumRealBuilding(bMonastery)==True) :
                            unit.changeExperience(2,100,False,False,False)

IndexError: list index out of range
ERR: Python function onEvent failed, module CvEventInterface
 
What does "pPlayer.getStateReligion()" return if they have no state religion?

I think it is "-1" (ReligionTypes.NO_RELIGION). The list has no index of -1, it starts at 0 for "JEWISH". You should prefix the last 4 lines with a check for state religion not being -1, something like this:
Code:
        		if (iReligion != -1) :        		
        			MonasteryName = "BUILDING_"+NumReligion[iReligion]+"_MONASTERY"
        			bMonastery = gc.getInfoTypeForString(MonasteryName)
        			if (city.getNumRealBuilding(bMonastery)==True) :
        				unit.changeExperience(2,100,False,False,False)

If you want to remember why you check for -1, you could use the defined value ReligionTypes.NO_RELIGION instead.

You may need to extend the block (increase the indentation level) for lines after that if they are part of the same general thing.

By the way, the lines in your code all use tabs for indentation except the last one. That one uses spaces. Mixing them is a bad plan. (I changed it to tabs in my version above.)

Edit: Oops. I have to modify that - it looks like the first lines I copied above use a mix of tabs and spaces. The earlier lines use spaces just like the last line did, except for the blank line (which doesnt' matter) and the line before it both of which seem to have some tabs and spaces. This is still a bad idea. Very bad. The level of indentation is important, and mixing the two can make it look like they are indented the same amount when they are not (it is the number of characters, not the visual appearance, which matters).
 
Back
Top Bottom