View Full Version : [PYTHON] Top Civ Score Board
Zebra 9 May 16, 2007, 10:21 AM Top Civ Score Board MOD COMP v0.1
Type: PYTHON MOD COMP
Version: 0.1
Langages Used: Python, XML
By: Zebra 9
Multiplayer Compatible: Shouldn't affect MP games
File DB: Download Here (http://forums.civfanatics.com/downloads.php?do=file&id=4989)
Description:
Only displays the top five scoring civs on the main interface. Now this would be great for any MOD that allows playing with more then 24 civs because you can limit the number of civs displayed on the score board.:goodjob:
For MODers:
The Number Of Civs That Are Displayed Is Controled By The Global Define MAX_CIV_SCORES, which if set to 0 (or anything less) turns this MOD COMP off.
Thanks to cotdamn for the idea.:goodjob::cool::king:
Installation:
1) Unzip into "My Documents\My Games\Warlords\MODS".
2) Load the game.
3) Click on "Advanced"-->"Load A MOD"-->"Top Scores"-->"OK", the Game will restart.
4) Now you can play as normal
Enjoy! :goodjob:
woodelf May 16, 2007, 10:42 AM That was fast! Nice work. :goodjob:
Zebra 9 May 16, 2007, 11:00 AM That was easy. :lol:
Jeckel May 21, 2007, 01:25 PM Nice comp Zebra 9, its great that some of the smallest changes can be the most useful.
But I do have one request, could you put notes with the name of the mod or your name around the code you change, its a pain to have to winmerge it with the vanilla file to see what you change.
Other then that, keep up the great pythoning. :)
Zebra 9 May 22, 2007, 11:03 AM Oops. Sorry about that. I'll get a commented version up.
Gaius Octavius May 20, 2008, 04:42 PM Oops. Sorry about that. I'll get a commented version up.
Been a year now, don't you really think you should get that version up? :D ;)
Oh and a BtS update would also be very helpful. :)
Thomas SG May 21, 2008, 07:04 AM I've done something similar for CCV. You can find it in 2.05e alpha 1 (or higher), release in 12 hours from now. Follow the link in my signature. There are only changes in CvMainInterface.py - search for "# CCV Anzeigenkorrektur der Punkte rechts auf dem Screen fuer viele (bekannte) Civs im Spiel". My version displays 21 civs, for higher resolutions you can use more. It's easy to change, (german) hints are in the file.
€: It's online. Download. (http://www.file-upload.net/download-866753/Community_Civ_V__Version_2.05e_Alpha1.exe.html)
Caution: The link leads to an early alpha. If you like to play CCV check here (http://www.civforum.de/showpost.php?p=2057037&postcount=1) for bugfixes or new versions!
Zebra 9 May 23, 2008, 06:44 PM Oh gosh!!!! I had completely forgotten about this MOD COMP!!! :blush: I will see what I can do.
Shiggs713 May 28, 2008, 07:01 AM here's an easy fix, pretty sure you can make that "20" just about any number you want, but if it goes higher than 24, you may have graphical oddities.
Yeah I've had problems with that before, so I found a quick fix which makes the scoreboard the "Top 20" instead. See bolded code below.
CvMainInterface.py:
# Will update the scores
def updateScoreStrings( self ):
screen = CyGInterfaceScreen( "MainInterface", CvScreenEnums.MAIN_INTERFACE )
xResolution = screen.getXResolution()
yResolution = screen.getYResolution()
screen.hide( "ScoreBackground" )
for i in range( gc.getMAX_PLAYERS() ):
szName = "ScoreText" + str(i)
screen.hide( szName )
iWidth = 0
iCount = 0
iBtnHeight = 22
if ((CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_HIDE_ALL and CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_MINIMAP_ONLY)):
if (CyInterface().isScoresVisible() and not CyInterface().isCityScreenUp() and CyEngine().isGlobeviewUp() == false):
##### Make scoreboard TOP 20
i = 20
##### i = gc.getMAX_CIV_TEAMS() - 1
johny smith May 28, 2008, 12:00 PM Well I did this in the WoC for up to 24
def updateScoreStrings( self ):
screen = CyGInterfaceScreen( "MainInterface", CvScreenEnums.MAIN_INTERFACE )
xResolution = screen.getXResolution()
yResolution = screen.getYResolution()
screen.hide( "ScoreBackground" )
for i in range( gc.getMAX_PLAYERS() ):
szName = "ScoreText" + str(i)
screen.hide( szName )
iWidth = 0
iCount = 0
iBtnHeight = 22
if ((CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_HIDE_ALL and CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_MINIMAP_ONLY)):
if (CyInterface().isScoresVisible() and not CyInterface().isCityScreenUp() and CyEngine().isGlobeviewUp() == false):
# Cap Scoreboard at 24 players 4/8/08 JOHNY SMITH
if (gc.getMAX_CIV_TEAMS() - 1) > 18:
i = 23
else:
i = gc.getMAX_CIV_TEAMS() - 1
#END 4/8/08 JOHNY SMITH
while (i > -1):
eTeam = gc.getGame().getRankTeam(i)
if (gc.getTeam(gc.getGame().getActiveTeam()).isHasMet (eTeam) or gc.getTeam(eTeam).isHuman() or gc.getGame().isDebugMode()):
j = gc.getMAX_CIV_PLAYERS() - 1
while (j > -1):
ePlayer = gc.getGame().getRankPlayer(j)
if (not CyInterface().isScoresMinimized() or gc.getGame().getActivePlayer() == ePlayer):
if (gc.getPlayer(ePlayer).isAlive() and not gc.getPlayer(ePlayer).isMinorCiv()):
if (gc.getPlayer(ePlayer).getTeam() == eTeam):
szBuffer = u"<font=2>"
if (gc.getGame().isGameMultiPlayer()):
if (not (gc.getPlayer(ePlayer).isTurnActive())):
szBuffer = szBuffer + "*"
if (not CyInterface().isFlashingPlayer(ePlayer) or CyInterface().shouldFlash(ePlayer)):
if (ePlayer == gc.getGame().getActivePlayer()):
szTempBuffer = u"%d: [<color=%d,%d,%d,%d>%s</color>]" %(gc.getGame().getPlayerScore(ePlayer), gc.getPlayer(ePlayer).getPlayerTextColorR(), gc.getPlayer(ePlayer).getPlayerTextColorG(), gc.getPlayer(ePlayer).getPlayerTextColorB(), gc.getPlayer(ePlayer).getPlayerTextColorA(), gc.getPlayer(ePlayer).getName())
else:
szTempBuffer = u"%d: <color=%d,%d,%d,%d>%s</color>" %(gc.getGame().getPlayerScore(ePlayer), gc.getPlayer(ePlayer).getPlayerTextColorR(), gc.getPlayer(ePlayer).getPlayerTextColorG(), gc.getPlayer(ePlayer).getPlayerTextColorB(), gc.getPlayer(ePlayer).getPlayerTextColorA(), gc.getPlayer(ePlayer).getName())
else:
szTempBuffer = u"%d: %s" %(gc.getGame().getPlayerScore(ePlayer), gc.getPlayer(ePlayer).getName())
szBuffer = szBuffer + szTempBuffer
if (gc.getTeam(eTeam).isAlive()):
if ( not (gc.getTeam(gc.getGame().getActiveTeam()).isHasMet (eTeam)) ):
szBuffer = szBuffer + (" ?")
if (gc.getTeam(eTeam).isAtWar(gc.getGame().getActiveT eam())):
szBuffer = szBuffer + "(" + localText.getColorText("TXT_KEY_CONCEPT_WAR", (), gc.getInfoTypeForString("COLOR_RED")).upper() + ")"
if (gc.getPlayer(ePlayer).canTradeNetworkWith(gc.getG ame().getActivePlayer()) and (ePlayer != gc.getGame().getActivePlayer())):
szTempBuffer = u"%c" %(CyGame().getSymbolID(FontSymbols.TRADE_CHAR))
szBuffer = szBuffer + szTempBuffer
if (gc.getTeam(eTeam).isOpenBorders(gc.getGame().getA ctiveTeam())):
szTempBuffer = u"%c" %(CyGame().getSymbolID(FontSymbols.OPEN_BORDERS_CH AR))
szBuffer = szBuffer + szTempBuffer
if (gc.getTeam(eTeam).isDefensivePact(gc.getGame().ge tActiveTeam())):
szTempBuffer = u"%c" %(CyGame().getSymbolID(FontSymbols.DEFENSIVE_PACT_ CHAR))
szBuffer = szBuffer + szTempBuffer
if (gc.getPlayer(ePlayer).getStateReligion() != -1):
if (gc.getPlayer(ePlayer).hasHolyCity(gc.getPlayer(eP layer).getStateReligion())):
szTempBuffer = u"%c" %(gc.getReligionInfo(gc.getPlayer(ePlayer).getStat eReligion()).getHolyCityChar())
szBuffer = szBuffer + szTempBuffer
else:
szTempBuffer = u"%c" %(gc.getReligionInfo(gc.getPlayer(ePlayer).getStat eReligion()).getChar())
szBuffer = szBuffer + szTempBuffer
if (gc.getTeam(eTeam).getEspionagePointsAgainstTeam(g c.getGame().getActiveTeam()) < gc.getTeam(gc.getGame().getActiveTeam()).getEspion agePointsAgainstTeam(eTeam)):
szTempBuffer = u"%c" %(gc.getCommerceInfo(CommerceTypes.COMMERCE_ESPION AGE).getChar())
szBuffer = szBuffer + szTempBuffer
bEspionageCanSeeResearch = false
for iMissionLoop in range(gc.getNumEspionageMissionInfos()):
if (gc.getEspionageMissionInfo(iMissionLoop).isSeeRes earch()):
bEspionageCanSeeResearch = gc.getPlayer(gc.getGame().getActivePlayer()).canDo EspionageMission(iMissionLoop, ePlayer, None, -1)
break
if (((gc.getPlayer(ePlayer).getTeam() == gc.getGame().getActiveTeam()) and (gc.getTeam(gc.getGame().getActiveTeam()).getNumMe mbers() > 1)) or (gc.getTeam(gc.getPlayer(ePlayer).getTeam()).isVas sal(gc.getGame().getActiveTeam())) or gc.getGame().isDebugMode() or bEspionageCanSeeResearch):
if (gc.getPlayer(ePlayer).getCurrentResearch() != -1):
szTempBuffer = u"-%s (%d)" %(gc.getTechInfo(gc.getPlayer(ePlayer).getCurrentR esearch()).getDescription(), gc.getPlayer(ePlayer).getResearchTurnsLeft(gc.getP layer(ePlayer).getCurrentResearch(), True))
szBuffer = szBuffer + szTempBuffer
if (CyGame().isNetworkMultiPlayer()):
szBuffer = szBuffer + CyGameTextMgr().getNetStats(ePlayer)
if (gc.getPlayer(ePlayer).isHuman() and CyInterface().isOOSVisible()):
szTempBuffer = u" <color=255,0,0>* %s *</color>" %(CyGameTextMgr().getOOSSeeds(ePlayer))
szBuffer = szBuffer + szTempBuffer
szBuffer = szBuffer + "</font>"
if ( CyInterface().determineWidth( szBuffer ) > iWidth ):
iWidth = CyInterface().determineWidth( szBuffer )
szName = "ScoreText" + str(ePlayer)
if ( CyInterface().getShowInterface() == InterfaceVisibility.INTERFACE_SHOW or CyInterface().isInAdvancedStart()):
yCoord = yResolution - 206
else:
yCoord = yResolution - 88
screen.setText( szName, "Background", szBuffer, CvUtil.FONT_RIGHT_JUSTIFY, xResolution - 12, yCoord - (iCount * iBtnHeight), -0.3, FontTypes.SMALL_FONT, WidgetTypes.WIDGET_CONTACT_CIV, ePlayer, -1 )
screen.show( szName )
CyInterface().checkFlashReset(ePlayer)
iCount = iCount + 1
j = j - 1
i = i - 1
if ( CyInterface().getShowInterface() == InterfaceVisibility.INTERFACE_SHOW or CyInterface().isInAdvancedStart()):
yCoord = yResolution - 186
else:
yCoord = yResolution - 68
screen.setPanelSize( "ScoreBackground", xResolution - 21 - iWidth, yCoord - (iBtnHeight * iCount) - 4, iWidth + 12, (iBtnHeight * iCount) + 8 )
screen.show( "ScoreBackground" )
or since we can swap screens. Did this to show up to 36.
def updateScoreStrings( self ):
screen = CyGInterfaceScreen( "MainInterface", CvScreenEnums.MAIN_INTERFACE )
xResolution = screen.getXResolution()
yResolution = screen.getYResolution()
screen.hide( "ScoreBackground" )
for i in range( gc.getMAX_PLAYERS() ):
szName = "ScoreText" + str(i)
screen.hide( szName )
iWidth = 0
iCount = 0
# Shrinks the text for 36 players 4/8/08 JOHNY SMITH
iBtnHeight = 16
#END 4/8/08 JOHNY SMITH
if ((CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_HIDE_ALL and CyInterface().getShowInterface() != InterfaceVisibility.INTERFACE_MINIMAP_ONLY)):
if (CyInterface().isScoresVisible() and not CyInterface().isCityScreenUp() and CyEngine().isGlobeviewUp() == false):
# Cap Scoreboard at 36 players 4/8/08 JOHNY SMITH
if (gc.getMAX_CIV_TEAMS() - 1) > 18:
i = 35
else:
i = gc.getMAX_CIV_TEAMS() - 1
#END 4/8/08 JOHNY SMITH
while (i > -1):
eTeam = gc.getGame().getRankTeam(i)
if (gc.getTeam(gc.getGame().getActiveTeam()).isHasMet (eTeam) or gc.getTeam(eTeam).isHuman() or gc.getGame().isDebugMode()):
j = gc.getMAX_CIV_PLAYERS() - 1
while (j > -1):
ePlayer = gc.getGame().getRankPlayer(j)
if (not CyInterface().isScoresMinimized() or gc.getGame().getActivePlayer() == ePlayer):
if (gc.getPlayer(ePlayer).isAlive() and not gc.getPlayer(ePlayer).isMinorCiv()):
if (gc.getPlayer(ePlayer).getTeam() == eTeam):
szBuffer = u"<font=2>"
if (gc.getGame().isGameMultiPlayer()):
if (not (gc.getPlayer(ePlayer).isTurnActive())):
szBuffer = szBuffer + "*"
if (not CyInterface().isFlashingPlayer(ePlayer) or CyInterface().shouldFlash(ePlayer)):
if (ePlayer == gc.getGame().getActivePlayer()):
szTempBuffer = u"%d: [<color=%d,%d,%d,%d>%s</color>]" %(gc.getGame().getPlayerScore(ePlayer), gc.getPlayer(ePlayer).getPlayerTextColorR(), gc.getPlayer(ePlayer).getPlayerTextColorG(), gc.getPlayer(ePlayer).getPlayerTextColorB(), gc.getPlayer(ePlayer).getPlayerTextColorA(), gc.getPlayer(ePlayer).getName())
else:
szTempBuffer = u"%d: <color=%d,%d,%d,%d>%s</color>" %(gc.getGame().getPlayerScore(ePlayer), gc.getPlayer(ePlayer).getPlayerTextColorR(), gc.getPlayer(ePlayer).getPlayerTextColorG(), gc.getPlayer(ePlayer).getPlayerTextColorB(), gc.getPlayer(ePlayer).getPlayerTextColorA(), gc.getPlayer(ePlayer).getName())
else:
szTempBuffer = u"%d: %s" %(gc.getGame().getPlayerScore(ePlayer), gc.getPlayer(ePlayer).getName())
szBuffer = szBuffer + szTempBuffer
if (gc.getTeam(eTeam).isAlive()):
if ( not (gc.getTeam(gc.getGame().getActiveTeam()).isHasMet (eTeam)) ):
szBuffer = szBuffer + (" ?")
if (gc.getTeam(eTeam).isAtWar(gc.getGame().getActiveT eam())):
szBuffer = szBuffer + "(" + localText.getColorText("TXT_KEY_CONCEPT_WAR", (), gc.getInfoTypeForString("COLOR_RED")).upper() + ")"
if (gc.getPlayer(ePlayer).canTradeNetworkWith(gc.getG ame().getActivePlayer()) and (ePlayer != gc.getGame().getActivePlayer())):
szTempBuffer = u"%c" %(CyGame().getSymbolID(FontSymbols.TRADE_CHAR))
szBuffer = szBuffer + szTempBuffer
if (gc.getTeam(eTeam).isOpenBorders(gc.getGame().getA ctiveTeam())):
szTempBuffer = u"%c" %(CyGame().getSymbolID(FontSymbols.OPEN_BORDERS_CH AR))
szBuffer = szBuffer + szTempBuffer
if (gc.getTeam(eTeam).isDefensivePact(gc.getGame().ge tActiveTeam())):
szTempBuffer = u"%c" %(CyGame().getSymbolID(FontSymbols.DEFENSIVE_PACT_ CHAR))
szBuffer = szBuffer + szTempBuffer
if (gc.getPlayer(ePlayer).getStateReligion() != -1):
if (gc.getPlayer(ePlayer).hasHolyCity(gc.getPlayer(eP layer).getStateReligion())):
szTempBuffer = u"%c" %(gc.getReligionInfo(gc.getPlayer(ePlayer).getStat eReligion()).getHolyCityChar())
szBuffer = szBuffer + szTempBuffer
else:
szTempBuffer = u"%c" %(gc.getReligionInfo(gc.getPlayer(ePlayer).getStat eReligion()).getChar())
szBuffer = szBuffer + szTempBuffer
if (gc.getTeam(eTeam).getEspionagePointsAgainstTeam(g c.getGame().getActiveTeam()) < gc.getTeam(gc.getGame().getActiveTeam()).getEspion agePointsAgainstTeam(eTeam)):
szTempBuffer = u"%c" %(gc.getCommerceInfo(CommerceTypes.COMMERCE_ESPION AGE).getChar())
szBuffer = szBuffer + szTempBuffer
bEspionageCanSeeResearch = false
for iMissionLoop in range(gc.getNumEspionageMissionInfos()):
if (gc.getEspionageMissionInfo(iMissionLoop).isSeeRes earch()):
bEspionageCanSeeResearch = gc.getPlayer(gc.getGame().getActivePlayer()).canDo EspionageMission(iMissionLoop, ePlayer, None, -1)
break
if (((gc.getPlayer(ePlayer).getTeam() == gc.getGame().getActiveTeam()) and (gc.getTeam(gc.getGame().getActiveTeam()).getNumMe mbers() > 1)) or (gc.getTeam(gc.getPlayer(ePlayer).getTeam()).isVas sal(gc.getGame().getActiveTeam())) or gc.getGame().isDebugMode() or bEspionageCanSeeResearch):
if (gc.getPlayer(ePlayer).getCurrentResearch() != -1):
szTempBuffer = u"-%s (%d)" %(gc.getTechInfo(gc.getPlayer(ePlayer).getCurrentR esearch()).getDescription(), gc.getPlayer(ePlayer).getResearchTurnsLeft(gc.getP layer(ePlayer).getCurrentResearch(), True))
szBuffer = szBuffer + szTempBuffer
if (CyGame().isNetworkMultiPlayer()):
szBuffer = szBuffer + CyGameTextMgr().getNetStats(ePlayer)
if (gc.getPlayer(ePlayer).isHuman() and CyInterface().isOOSVisible()):
szTempBuffer = u" <color=255,0,0>* %s *</color>" %(CyGameTextMgr().getOOSSeeds(ePlayer))
szBuffer = szBuffer + szTempBuffer
szBuffer = szBuffer + "</font>"
if ( CyInterface().determineWidth( szBuffer ) > iWidth ):
iWidth = CyInterface().determineWidth( szBuffer )
szName = "ScoreText" + str(ePlayer)
if ( CyInterface().getShowInterface() == InterfaceVisibility.INTERFACE_SHOW or CyInterface().isInAdvancedStart()):
yCoord = yResolution - 206
else:
yCoord = yResolution - 88
#Adjust the scoreboard area for 36 players 4/8/08 JOHNY SMITH
screen.setText( szName, "Background", szBuffer, CvUtil.FONT_RIGHT_JUSTIFY, xResolution - 12, yCoord - (iCount * iBtnHeight) + 48, -0.3, FontTypes.SMALL_FONT, WidgetTypes.WIDGET_CONTACT_CIV, ePlayer, -1 )
#END 4/8/08 JOHNY SMITH
screen.show( szName )
CyInterface().checkFlashReset(ePlayer)
iCount = iCount + 1
j = j - 1
i = i - 1
if ( CyInterface().getShowInterface() == InterfaceVisibility.INTERFACE_SHOW or CyInterface().isInAdvancedStart()):
yCoord = yResolution - 186
else:
yCoord = yResolution - 68
#Adjust the scoreboard area for 36 players 4/8/08 JOHNY SMITH
screen.setPanelSize( "ScoreBackground", xResolution - 21 - iWidth, yCoord - (iBtnHeight * iCount) + 36, iWidth + 12, (iBtnHeight * iCount) + 8 )
#END 4/8/08 JOHNY SMITH
screen.show( "ScoreBackground" )
The extra number comes from counting yourself I thought. And this helps if someone is using a dll with less civs.
I don't know if anyone has found a better way or not. I would like a scroll bar, or something dynamic.
Shiggs713 May 29, 2008, 08:23 PM a scroll bar would be ideal, but yea, python isn't my thing, but I can cut and paste other peoples stuff together and make it work. ;)
if anyone would make a scroll bar for the scoreboard, I'd be very grateful. I'm in need of that for a renaissance europe scenario I'm building, with 35 civs (only 30 are playable).
Shiggs
Zebra 9 May 30, 2008, 05:44 PM Never added a scroll bar to anything, I'll see what I can do.
Thomas SG Jun 20, 2008, 07:26 PM You can stop working on this. It's done. :D Release with the first version of CCV for BTS 3.17. If there is not too much trouble with new versions and bugfixes I think it will be available for you all in two or three weeks. But if you want you can have a look at the first screens! Here (http://www.civforum.de/showpost.php?p=2378021&postcount=33).
Jeckel Jun 20, 2008, 07:53 PM Never added a scroll bar to anything, I'll see what I can do.
I don't remember ever accually adding a scrollbar to anything in Civ4. Panel widgets have an argument that tells if it is scrollable or not.
VOID addPanel(STRING szName, STRING title, STRING helpText, BOOL bVerticalLayout, BOOL bScrollable, INT iX, INT iY, INT iWidth, INT iHeight, PanelStyle eStyle)
There is also this method.
VOID addScrollPanel(STRING szName, STRING title, INT iX, INT iY, INT iWidth, INT iHeight, PanelStyle eStyle)
Thomas SG Jun 20, 2008, 08:03 PM I don't remember ever accually adding a scrollbar to anything in Civ4. Panel widgets have an argument that tells if it is scrollable or not.
VOID addPanel(STRING szName, STRING title, STRING helpText, BOOL bVerticalLayout, BOOL bScrollable, INT iX, INT iY, INT iWidth, INT iHeight, PanelStyle eStyle)
There is also this method.
VOID addScrollPanel(STRING szName, STRING title, INT iX, INT iY, INT iWidth, INT iHeight, PanelStyle eStyle)
I'm sorry but nothing of the stuff you posted was needed to do it. ;)
johny smith Jun 21, 2008, 03:16 PM Looks nice. Does the scroll bar you made require SDK changes or only python?
Thomas SG Jun 22, 2008, 05:53 PM Looks nice. Does the scroll bar you made require SDK changes or only python?
Just python. I only made changes in CvMainInterface.py.
Shiggs713 Jun 22, 2008, 10:12 PM well that looks pretty fancy. Nice job.
Jeckel Jun 23, 2008, 01:45 AM I'm sorry but nothing of the stuff you posted was needed to do it. ;)
Well then I'm interested to see how you do it.
After taking a glance at the CvMainInterface.py file, the line that creates the ScoreBackground panel.
screen.addPanel( "ScoreBackground", u"", u"", True, False, 0, 0, 0, 0, PanelStyles.PANEL_STYLE_HUD_HELP )
You should be able to change the fifth argument, the one I put in bold, from False to True and that should make the panel vertically scrollable.
If you did it some other way the by all means share the knowledge. :)
|
|