def store(): global g_values, g_iTurn g_iTurn = gc.getGame().getGameTurn() g_values = getCurrentValuesByTeam() data = {SD_VERSION_ID: STORAGE_VERSION, SD_TURN_ID: g_iTurn, SD_VALUES_ID: g_values} BugData.getTable(SD_MOD_ID).setData(data) BugUtil.debug("SpyUtil - stored: %s", data)
def store(): global g_values, g_iTurn g_iTurn = gc.getGame().getGameTurn() g_values = getCurrentValuesByTeam() data = { SD_VERSION_ID: STORAGE_VERSION, SD_TURN_ID: g_iTurn, SD_VALUES_ID: g_values } BugData.getTable(SD_MOD_ID).setData(data) BugUtil.debug("SpyUtil - stored: %s", data)
def sdObjectExists(ModID, object): if isinstance(object, CyGame): if BugData.hasTable(ModID, 'Game'): return True else: cyTable = sdLoad(object) if ModID in cyTable: return True return False
def sdObjectInit(ModID, object, VarDictionary): if isinstance(object, CyGame): if not BugData.hasTable(ModID, 'Game'): sdEntityInit(ModID, 'Game', VarDictionary) return 1 else: cyTable = sdLoad(object) if ModID not in cyTable: cyTable[ModID] = VarDictionary object.setScriptData(cPickle.dumps(cyTable)) return 1
def load(): global g_values, g_iTurn clear() data = BugData.getTable(SD_MOD_ID).data BugUtil.debug("SpyUtil - loaded: %s", data) if SD_VERSION_ID in data: if data[SD_VERSION_ID] == 1: g_iTurn = data[SD_TURN_ID] if g_iTurn != gc.getGame().getGameTurn() - 1: BugUtil.warn("SpyUtil - incorrect previous game turn found, ignoring") else: g_values = data[SD_VALUES_ID] elif data[SD_VERSION_ID] > 1: BugUtil.warn("SpyUtil - newer format version detected, ignoring") else: BugUtil.debug("SpyUtil - no data found")
def sdObjectUpdateVal(ModID, object, var, val): if isinstance(object, CyGame): table = BugData.findTable(ModID, 'Game') if table and var in table: table[var] = delta return True return False cyTable = sdLoad(object) if ModID in cyTable: mTable = cyTable[ModID] if var in mTable: mTable[var] = val object.setScriptData(cPickle.dumps(cyTable)) return True return False
def load(): global g_values, g_iTurn clear() data = BugData.getTable(SD_MOD_ID).data BugUtil.debug("SpyUtil - loaded: %s", data) if SD_VERSION_ID in data: if data[SD_VERSION_ID] == 1: g_iTurn = data[SD_TURN_ID] if g_iTurn != gc.getGame().getGameTurn() - 1: BugUtil.warn( "SpyUtil - incorrect previous game turn found, ignoring") else: g_values = data[SD_VALUES_ID] elif data[SD_VERSION_ID] > 1: BugUtil.warn("SpyUtil - newer format version detected, ignoring") else: BugUtil.debug("SpyUtil - no data found")
def sdObjectChangeVal(ModID, object, var, delta): if isinstance(object, CyGame): table = BugData.findTable(ModID, 'Game') if table and var in table: table[var] += delta return True return False cyTable = sdLoad(object) if ModID in cyTable: mTable = cyTable[ModID] prevVal = sdObjectGetVal(ModID, object, var) if not prevVal == None and var in mTable: mTable[var] = prevVal + delta object.setScriptData(cPickle.dumps(cyTable)) return True return False
def sdSetVal( ModID, entity, var, val ): table = BugData.findTable(ModID, entity) if table: table[var] = val return True return False
def _handleOnPreSaveEvent(self, eventType, argsList): """Tells BugData to save all script data after other handlers have been called. This won't work as a normal handler because it must be done after other handlers. """ self._handleDefaultEvent(eventType, argsList) BugData.save()
def getUnitName(self, sUnitNameConv, pUnit, pCity, bIncrementCounter): iPlayer = pUnit.getOwner() pPlayer = gc.getPlayer(iPlayer) zsCiv = pPlayer.getCivilizationAdjective(0) zsLeader = pPlayer.getName() zsUnitCombat = self.getUnitCombat(pUnit) zsUnitDomain = BugUtil.getPlainText("TXT_KEY_BUG_UNIT_NAMING_" + gc.getDomainInfo(pUnit.getDomainType()).getType()) zsUnit = PyInfo.UnitInfo(pUnit.getUnitType()).getDescription() zsCity = pCity.getName() #BUGPrint("Civ(%s)" % (zsCiv)) #BUGPrint("Leader(%s)" % (zsLeader)) #BUGPrint("Combat(%s)" % (zsUnitCombat)) #BUGPrint("Domain(%s)" % (zsUnitDomain)) #BUGPrint("Unit(%s)" % (zsUnit)) #BUGPrint("City(%s)" % (zsCity)) zsName = sUnitNameConv #if zsName == "": #zsName = "^ut^ ^cnt[r]^ Div ^tt1[s][5:7]^ : ^ct^ ^tt2[o][101]^" #BUGPrint("UnitNameEM-A [" + zsName + "]") ## - ^civ4^ - no naming convention, uses standard civ4 # check if Civ4 naming convention is required if not (zsName.find("^civ4^") == -1): return "" ## - ^rd^ - random name # check if random naming convention is required if not (zsName.find("^rd^") == -1): zsRandomName = RandomNameUtils.getRandomName() zsName = zsName.replace("^rd^", zsRandomName) #BUGPrint("UnitNameEM-B") ## - ^rc^ - random civ related name # check if random civ related naming convention is required if not (zsName.find("^rc^") == -1): zsRandomName = RandomNameUtils.getRandomCivilizationName(pPlayer.getCivilizationType()) zsName = zsName.replace("^rc^", zsRandomName) #BUGPrint("UnitNameEM-C [" + zsName + "]") ## - ^ct^ - City ## - ^cv^ - Civilization ## - ^ut^ - unit (eg Archer) ## - ^cb^ - combat type (Melee) ## - ^dm^ - domain (Water) ## - ^ld^ - leader # replace the fixed items in the naming conv zsName = zsName.replace("^ct^", zsCity) zsName = zsName.replace("^cv^", zsCiv) zsName = zsName.replace("^ut^", zsUnit) zsName = zsName.replace("^cb^", zsUnitCombat) zsName = zsName.replace("^dm^", zsUnitDomain) zsName = zsName.replace("^ld^", zsLeader) #BUGPrint("UnitNameEM-D [" + zsName + "]") # check if there are any more codes to swap out, return if not counters = BugData.getGameData().getTable(SD_MOD_ID) while zsName.find("^cnt") != -1: # determine what I am counting across zsSDKey = self.getCounter(zsName) if zsSDKey == "UNIT": zsSDKey = zsSDKey + zsUnit elif zsSDKey == "COMBAT": zsSDKey = zsSDKey + zsUnitCombat elif zsSDKey == "CITY": zsSDKey = zsSDKey + zsCity elif zsSDKey == "UNITCITY": zsSDKey = zsSDKey + zsUnit + zsCity elif zsSDKey == "DOMAIN": zsSDKey = zsSDKey + zsUnitDomain #BUGPrint("UnitNameEM-E [" + zsSDKey + "]") # see if we have already started this counter if (not counters.hasTable(zsSDKey)): #Since no record create entries ziCnt = 0 ziTT1 = self.getTotal1(zsName) ziTT2 = self.getTotal2(zsName) counter = counters.getTable(zsSDKey) else: # get the count values counter = counters.getTable(zsSDKey) ziCnt = counter["cnt"] ziTT1 = counter["tt1"] ziTT2 = counter["tt2"] #BUGPrint("UnitNameEM-F [" + str(ziCnt) + "] [" + str(ziTT1) + "] [" + str(ziTT2) + "]") # increment count, adjust totals if required if bIncrementCounter: ziCnt = ziCnt + 1 if (ziCnt > ziTT1 and ziTT1 > 0): ziCnt = 1 ziTT1 = self.getTotal1(zsName) ziTT2 = ziTT2 + 1 # store the new values counter["cnt"] = ziCnt counter["tt1"] = ziTT1 counter["tt2"] = ziTT2 # swap out the count code items for count value zsName = self.swapCountCode(zsName, "^cnt", ziCnt) zsName = self.swapCountCode(zsName, "^tt1", ziTT1) zsName = self.swapCountCode(zsName, "^tt2", ziTT2) return zsName
def sdEntityWipe( ModID, entity ): return BugData.deleteTable(ModID)
def sdModSave( ModID, mTable ): table = BugData.getTable(ModID) table.setData(mTable) return 0
def sdDelGlobal( ModID, var ): table = BugData.findTable(ModID, GLOBALS_KEY) if table and var in table: del table[var] return True return False
def sdGetGlobal( ModID, var ): table = BugData.findTable(ModID, GLOBALS_KEY) if table and var in table: return table[var] return None
def sdGetVal( ModID, entity, var ): return BugData.getTable(ModID, entity)[var]
def handleInput(self, inputClass): screen = CyGInterfaceScreen("WBStoredDataScreen", CvScreenEnums.WB_STOREDDATA) global iChange global iSelectedCiv global bRemove global iSelectedMode global scriptDict global lBools global lInts global lLists global iSelectedList global iWarList if inputClass.getFunctionName() == "CurrentPage": iIndex = screen.getPullDownData( "CurrentPage", screen.getSelectedPullDownID("CurrentPage")) if iIndex == 8: WBReligionScreen.WBReligionScreen().interfaceScreen( self.top.m_iCurrentPlayer) elif iIndex == 9: WBCorporationScreen.WBCorporationScreen().interfaceScreen( self.top.m_iCurrentPlayer) elif iIndex == 10: WBGameDataScreen.WBGameDataScreen(self.top).interfaceScreen() elif iIndex == 11: WBInfoScreen.WBInfoScreen().interfaceScreen( self.top.m_iCurrentPlayer) elif inputClass.getFunctionName() == "ChangeBy": if bRemove: iChange = -screen.getPullDownData( "ChangeBy", screen.getSelectedPullDownID("ChangeBy")) else: iChange = screen.getPullDownData( "ChangeBy", screen.getSelectedPullDownID("ChangeBy")) elif inputClass.getFunctionName() == "ChangeType": bRemove = not bRemove iChange = -iChange elif inputClass.getFunctionName() == "SelectMode": iSelectedMode = screen.getPullDownData( "SelectMode", screen.getSelectedPullDownID("SelectMode")) iSelectedList = 0 self.loadData() elif inputClass.getFunctionName() == "SelectCiv": iSelectedCiv = screen.getPullDownData( "SelectCiv", screen.getSelectedPullDownID("SelectCiv")) self.placeCivButton() if iSelectedMode == 1: self.loadData() elif inputClass.getFunctionName() == "WBDataTable": if inputClass.getData1() == 22007: item = lBools[inputClass.getData2()] if iSelectedMode == 0: data.__dict__[item] = not data.__dict__[item] else: data.players[iSelectedCiv].__dict__[ item] = not data.players[iSelectedCiv].__dict__[item] elif inputClass.getData1() == 22008: item = lInts[inputClass.getData2()] if iSelectedMode == 0: iValue = data.__dict__[item] else: iValue = data.players[iSelectedCiv].__dict__[item] iValue += iChange if item == "iStabilityLevel": iValue = max(iStabilityCollapsing, min(iValue, iStabilitySolid)) elif item == "iFirstNewWorldColony": iValue = iSelectedCiv if iSelectedMode == 0: data.__dict__[item] = iValue else: data.players[iSelectedCiv].__dict__[item] = iValue if iSelectedMode == 0: for iPlayer in range(iNumPlayers): if not gc.getPlayer(iPlayer).isAlive(): continue dc.checkName(iPlayer) else: dc.checkName(iSelectedCiv) self.placeDataTable() elif inputClass.getFunctionName() == "WBListTable": iSelectedList = inputClass.getData2() self.placeListTables() elif inputClass.getFunctionName() == "WBListTableTwo": iItem = inputClass.getData2() sList = lLists[iSelectedList] if sList == "lWarTrend": iWarList = iItem elif isinstance(scriptDict[sList][iItem], bool): if iSelectedMode == 0: data.__dict__[sList][ iItem] = not data.__dict__[sList][iItem] else: data.players[iSelectedCiv].__dict__[sList][ iItem] = not data.players[iSelectedCiv].__dict__[ sList][iItem] elif isinstance(scriptDict[sList][iItem], int): bCiv = sList in [ "lFirstDiscovered", "lWonderBuilder", "lReligionFounder", "lFirstEntered", "lFirstGreatPeople" ] if bCiv: data.__dict__[sList][iItem] = iSelectedCiv else: if sList in ["lGoals", "lEconomyTrend"]: iValue = data.players[iSelectedCiv].__dict__[sList][ iItem] + abs(iChange) / iChange iValue = max(-1, min(iValue, 1)) data.players[iSelectedCiv].__dict__[sList][ iItem] = iValue elif sList == "lHappinessTrend": if bRemove: iValue = -1 else: iValue = 1 data.players[iSelectedCiv].__dict__[sList][ iItem] = iValue else: popup = Popup.PyPopup( 7777, EventContextTypes.EVENTCONTEXT_ALL) if iSelectedMode == 0: sText = str(data.__dict__[sList][iItem]) else: sText = str( data.players[iSelectedCiv].__dict__[sList] [iItem]) popup.setUserData((iItem, -1)) popup.createEditBox(sText) popup.launch() return 1 if iSelectedMode == 0: for iPlayer in range(iNumPlayers): if not gc.getPlayer(iPlayer).isAlive(): continue dc.checkName(iPlayer) else: dc.checkName(iSelectedCiv) self.placeListTables() elif inputClass.getFunctionName() == "WBListTableThree": iItem = inputClass.getData2() data.players[iSelectedCiv].__dict__["lWarTrend"][iWarList][ iItem] += iChange self.placeListTables() elif inputClass.getFunctionName() == "RestoreBackup": BugData.onGameLoad(-1) self.loadData() elif inputClass.getFunctionName() == "CreateBackup": BugData.save() return 1
def sdSetGlobal(ModID, var, val): BugData.getTable(ModID, 'Global')[var] = val
def sdGetVal(ModID, entity, var): table = BugData.findTable(ModID, entity) if table: if var in table: return table[var] return None
def sdDelVal( ModID, entity, var ): table = BugData.findTable(ModID, entity) if table and var in table: del table[var] return True return False
def sdSetGlobal( ModID, var, val ): BugData.getTable(ModID, GLOBALS_KEY)[var] = val
def sdModLoad( ModID ): return BugData.getTable(ModID).data
def sdEntityInit( ModID, entity, eTable ): table = BugData.getTable(ModID, entity) table.setData(eTable) return 0
def sdEntityExists( ModID, entity ): return BugData.hasTable(ModID, entity)
def getUnitName(self, sUnitNameConv, pUnit, pCity, bIncrementCounter): iPlayer = pUnit.getOwner() pPlayer = gc.getPlayer(iPlayer) zsCiv = pPlayer.getCivilizationAdjective(0) zsLeader = pPlayer.getName() zsUnitCombat = self.getUnitCombat(pUnit) zsUnitDomain = BugUtil.getPlainText("TXT_KEY_BUG_UNIT_NAMING_" + gc.getDomainInfo(pUnit.getDomainType()).getType()) zsUnit = gc.getUnitInfo(pUnit.getUnitType()).getDescription() zsCity = pCity.getName() #BUGPrint("Civ(%s)" % (zsCiv)) #BUGPrint("Leader(%s)" % (zsLeader)) #BUGPrint("Combat(%s)" % (zsUnitCombat)) #BUGPrint("Domain(%s)" % (zsUnitDomain)) #BUGPrint("Unit(%s)" % (zsUnit)) #BUGPrint("City(%s)" % (zsCity)) zsName = sUnitNameConv #if zsName == "": #zsName = "^ut^ ^cnt[r]^ Div ^tt1[s][5:7]^ : ^ct^ ^tt2[o][101]^" #BUGPrint("UnitNameEM-A [" + zsName + "]") ## - ^civ4^ - no naming convention, uses standard civ4 # check if Civ4 naming convention is required if not (zsName.find("^civ4^") == -1): return "" ## - ^rd^ - random name # check if random naming convention is required if not (zsName.find("^rd^") == -1): zsRandomName = RandomNameUtils.getRandomName() zsName = zsName.replace("^rd^", zsRandomName) #BUGPrint("UnitNameEM-B") ## - ^rc^ - random civ related name # check if random civ related naming convention is required if not (zsName.find("^rc^") == -1): zsRandomName = RandomNameUtils.getRandomCivilizationName(pPlayer.getCivilizationType()) zsName = zsName.replace("^rc^", zsRandomName) #BUGPrint("UnitNameEM-C [" + zsName + "]") ## - ^ct^ - City ## - ^cv^ - Civilization ## - ^ut^ - unit (eg Archer) ## - ^cb^ - combat type (Melee) ## - ^dm^ - domain (Water) ## - ^ld^ - leader # replace the fixed items in the naming conv zsName = zsName.replace("^ct^", zsCity) zsName = zsName.replace("^cv^", zsCiv) zsName = zsName.replace("^ut^", zsUnit) zsName = zsName.replace("^cb^", zsUnitCombat) zsName = zsName.replace("^dm^", zsUnitDomain) zsName = zsName.replace("^ld^", zsLeader) #BUGPrint("UnitNameEM-D [" + zsName + "]") # check if there are any more codes to swap out, return if not counters = BugData.getGameData().getTable(SD_MOD_ID) while zsName.find("^cnt") != -1: # determine what I am counting across zsSDKey = self.getCounter(zsName) if zsSDKey == "UNIT": zsSDKey = zsSDKey + zsUnit elif zsSDKey == "COMBAT": zsSDKey = zsSDKey + zsUnitCombat elif zsSDKey == "CITY": zsSDKey = zsSDKey + zsCity elif zsSDKey == "UNITCITY": zsSDKey = zsSDKey + zsUnit + zsCity elif zsSDKey == "DOMAIN": zsSDKey = zsSDKey + zsUnitDomain #BUGPrint("UnitNameEM-E [" + zsSDKey + "]") # see if we have already started this counter if (not counters.hasTable(zsSDKey)): #Since no record create entries ziCnt = 0 ziTT1 = self.getTotal1(zsName) ziTT2 = self.getTotal2(zsName) counter = counters.getTable(zsSDKey) else: # get the count values counter = counters.getTable(zsSDKey) ziCnt = counter["cnt"] ziTT1 = counter["tt1"] ziTT2 = counter["tt2"] #BUGPrint("UnitNameEM-F [" + str(ziCnt) + "] [" + str(ziTT1) + "] [" + str(ziTT2) + "]") # increment count, adjust totals if required if bIncrementCounter: ziCnt = ziCnt + 1 if (ziCnt > ziTT1 and ziTT1 > 0): ziCnt = 1 ziTT1 = self.getTotal1(zsName) ziTT2 = ziTT2 + 1 # store the new values counter["cnt"] = ziCnt counter["tt1"] = ziTT1 counter["tt2"] = ziTT2 # swap out the count code items for count value zsName = self.swapCountCode(zsName, "^cnt", ziCnt) zsName = self.swapCountCode(zsName, "^tt1", ziTT1) zsName = self.swapCountCode(zsName, "^tt2", ziTT2) return zsName
def handleInput(self, inputClass): screen = CyGInterfaceScreen("WBStoredDataScreen", CvScreenEnums.WB_STOREDDATA) global iChange global iSelectedCiv global bRemove global iSelectedMode global scriptDict global lBools global lInts global lLists global iSelectedList global iWarList if inputClass.getFunctionName() == "CurrentPage": iIndex = screen.getPullDownData("CurrentPage", screen.getSelectedPullDownID("CurrentPage")) if iIndex == 8: WBReligionScreen.WBReligionScreen().interfaceScreen(self.top.m_iCurrentPlayer) elif iIndex == 9: WBCorporationScreen.WBCorporationScreen().interfaceScreen(self.top.m_iCurrentPlayer) elif iIndex == 10: WBGameDataScreen.WBGameDataScreen(self.top).interfaceScreen() elif iIndex == 11: WBInfoScreen.WBInfoScreen().interfaceScreen(self.top.m_iCurrentPlayer) elif inputClass.getFunctionName() == "ChangeBy": if bRemove: iChange = -screen.getPullDownData("ChangeBy", screen.getSelectedPullDownID("ChangeBy")) else: iChange = screen.getPullDownData("ChangeBy", screen.getSelectedPullDownID("ChangeBy")) elif inputClass.getFunctionName() == "ChangeType": bRemove = not bRemove iChange = -iChange elif inputClass.getFunctionName() == "SelectMode": iSelectedMode = screen.getPullDownData("SelectMode", screen.getSelectedPullDownID("SelectMode")) iSelectedList = 0 self.loadData() elif inputClass.getFunctionName() == "SelectCiv": iSelectedCiv = screen.getPullDownData("SelectCiv", screen.getSelectedPullDownID("SelectCiv")) self.placeCivButton() if iSelectedMode == 1: self.loadData() elif inputClass.getFunctionName() == "WBDataTable": if inputClass.getData1() == 22007: item = lBools[inputClass.getData2()] if iSelectedMode == 0: data.__dict__[item] = not data.__dict__[item] else: data.players[iSelectedCiv].__dict__[item] = not data.players[iSelectedCiv].__dict__[item] elif inputClass.getData1() == 22008: item = lInts[inputClass.getData2()] if iSelectedMode == 0: iValue = data.__dict__[item] else: iValue = data.players[iSelectedCiv].__dict__[item] iValue += iChange if item == "iStabilityLevel": iValue = max(iStabilityCollapsing, min(iValue, iStabilitySolid)) if iSelectedMode == 0: data.__dict__[item] = iValue else: data.players[iSelectedCiv].__dict__[item] = iValue self.placeDataTable() elif inputClass.getFunctionName() == "WBListTable": iSelectedList = inputClass.getData2() self.placeListTables() elif inputClass.getFunctionName() == "WBListTableTwo": iItem = inputClass.getData2() sList = lLists[iSelectedList] if sList == "lWarTrend": iWarList = iItem elif isinstance(scriptDict[sList][iItem], bool): if iSelectedMode == 0: data.__dict__[sList][iItem] = not data.__dict__[sList][iItem] else: data.players[iSelectedCiv].__dict__[sList][iItem] = not data.players[iSelectedCiv].__dict__[sList][iItem] elif isinstance(scriptDict[sList][iItem], int): bCiv = sList in ["lFirstDiscovered", "lWonderBuilder", "lReligionFounder", "lFirstEntered"] if bCiv: data.__dict__[sList][iItem] = iSelectedCiv else: if sList in ["lGoals", "lEconomyTrend"]: iValue = data.players[iSelectedCiv].__dict__[sList][iItem] + abs(iChange) / iChange iValue = max(-1, min(iValue, 1)) data.players[iSelectedCiv].__dict__[sList][iItem] = iValue elif sList == "lHappinessTrend": if bRemove: iValue = -1 else: iValue = 1 data.players[iSelectedCiv].__dict__[sList][iItem] = iValue else: popup = Popup.PyPopup(7777, EventContextTypes.EVENTCONTEXT_ALL) if iSelectedMode == 0: sText = str(data.__dict__[sList][iItem]) else: sText = str(data.players[iSelectedCiv].__dict__[sList][iItem]) popup.setUserData((iItem, -1)) popup.createEditBox(sText) popup.launch() return 1 self.placeListTables() elif inputClass.getFunctionName() == "WBListTableThree": iItem = inputClass.getData2() data.players[iSelectedCiv].__dict__["lWarTrend"][iWarList][iItem] += iChange self.placeListTables() elif inputClass.getFunctionName() == "RestoreBackup": BugData.onGameLoad(-1) self.loadData() elif inputClass.getFunctionName() == "CreateBackup": BugData.save() return 1