EmperorFool
Deity
I have begun working on a BUG Modding tutorial on our wiki. It covers some of the common errors you'll experience working with BUG and gives you the basics of building a mod from scratch using BUG.
I have a mod that uses Assets\Python\CvGameUtils.py. Are there any special instructions for merging that file into BUG?
<mod id="RichMod"
name="RichMod"
author="Draco"
version="1.0"
date="10/30/2008"
url="">
<events module="CvRichModEventManager">
<!--arg type="key" value="Alt Ctrl N"/-->
</events>
<gameutils module="RichModGameUtils" class="RichModGameUtils"/>
</mod>
import CvUtil
from CvPythonExtensions import *
import CvEventInterface
# globals
gc = CyGlobalContext()
class RichModGameUtils:
"Miscellaneous game functions"
def __init__(self):
pass
def getBuildingCostMod(self, argsList):
iPlayer, iCityID, iBuilding = argsList
pPlayer = gc.getPlayer(iPlayer)
pCity = pPlayer.getCity(iCityID)
iCostMod = -1 # Any value > 0 will be used
pBuildingInfo = gc.getBuildingInfo(iBuilding)
iPalace = CvUtil.findInfoTypeNum(gc.getBuildingInfo,gc.getNumBuildingInfos(),'BUILDING_PALACE')
iGreatPalace = CvUtil.findInfoTypeNum(gc.getBuildingInfo,gc.getNumBuildingInfos(),'BUILDING_GREAT_PALACE')
{etc etc etc}
iPaya = CvUtil.findInfoTypeNum(gc.getBuildingInfo,gc.getNumBuildingInfos(),'BUILDING_SHWEDAGON_PAYA')
iMoai = CvUtil.findInfoTypeNum(gc.getBuildingInfo,gc.getNumBuildingInfos(),'BUILDING_MOAI_STATUES')
iPope = CvUtil.findInfoTypeNum(gc.getBuildingInfo,gc.getNumBuildingInfos(),'BUILDING_APOSTOLIC_PALACE')
aiWonderList = [iPalace, iGreatPalace, iVersailles, iHero, iNational, iGlobe, iPark, iHermitage, iOxford, iWallStreet, iIron, iWestPoint, iRushmore, iRed, iPyramids, iStonehenge, iLibrary, iLighthouse, iGarden, iColossus, iOracle, iParthenon, iWat, iHagia, iItza, iSistine, iMinaret, iNotre, iTaj, iKremlin, iEiffel, iLiberty, iBroadway, iGraceland, iHollywood, iGorges, iPentagon, iUN, iSpace, iArtemis, iSankore, iWall, iZeus, iMausoleum, iCristo, iPaya, iMoai, iPope]
pPlayer1 = gc.getPlayer(pCity.plot().getOwner())
bSphinx = gc.getInfoTypeForString("BUILDING_SPHINX")
obsoleteTech = gc.getBuildingInfo(bSphinx).getObsoleteTech()
if ( gc.getTeam(pPlayer1.getTeam()).isHasTech(obsoleteTech) == false or obsoleteTech == -1 ):
for iCity in range(pPlayer1.getNumCities()):
ppCity = pPlayer1.getCity(iCity)
if ppCity.getNumActiveBuilding(bSphinx) == true:
if (iBuilding in aiWonderList):
return 85 # 85% of normal cost
return -1
return iCostMod
<load mod="RichMod"/>
Thanks!01:40:22 DEBUG: BugConfig - loading mod file RichMod
01:40:22 DEBUG: BugInit - loading mod RichMod...
01:40:22 INFO : BugCore - creating uninitialized mod RichMod
01:40:22 DEBUG: BUG: looking up CvRichModEventManager.CvRichModEventManager
load_module CvRichModEventManager
01:40:22 DEBUG: BUG: looking up RichModGameUtils.RichModGameUtils
load_module RichModGameUtils
01:40:22 DEBUG: BugGameUtils - registering RichModGameUtils.RichModGameUtils
01:40:22 DEBUG: BugGameUtils - getBuildingCostMod - adding RichModGameUtils handler
01:40:22 DEBUG: Timer - load mod [RichMod] took 41 ms
BugGameUtils - getBuildingCostMod - adding RichModGameUtils handler
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!-- Movie Mod - Plays new movies for religion and national wonders Author: Lemon Merchant -->
<mod id="MovieMod" module="MovieMod">
<event type="BuildingBuilt" function="onBuildingBuilt"/>
</mod>
# MovieMod -- Play religion and Nat Wonder movies - Author: Lemon Merchant/Phungus420/Firaxis
from CvPythonExtensions import *
gc = CyGlobalContext()
def onBuildingBuilt(argsList): # Took out arg 'self'
'Building Completed'
pCity, iBuildingType = argsList
game = gc.getGame()
# Begin Phungus code
bCoolBuilding = False
if ( (gc.getBuildingInfo(iBuildingType).getMovie()) or (isWorldWonderClass(gc.getBuildingInfo(iBuildingType).getBuildingClassType())) ):
bCoolBuilding = True
if ( (not gc.getGame().isNetworkMultiPlayer()) and (pCity.getOwner() == gc.getGame().getActivePlayer()) and bCoolBuilding ):
# End Phungus code
# If this is a wonder...
popupInfo = CyPopupInfo()
popupInfo.setButtonPopupType(ButtonPopupTypes.BUTTONPOPUP_PYTHON_SCREEN)
popupInfo.setData1(iBuildingType)
popupInfo.setData2(pCity.getID())
popupInfo.setData3(0)
popupInfo.setText(u"showWonderMovie")
popupInfo.addPopup(pCity.getOwner())
CvAdvisorUtils.buildingBuiltFeats(pCity, iBuildingType)
if (not self.__LOG_BUILDING):
return
CvUtil.pyPrint('%s was finished by Player %d Civilization %s'
%(PyInfo.BuildingInfo(iBuildingType).getDescription(), pCity.getOwner(), gc.getPlayer(pCity.getOwner()).getCivilizationDescription(0)))