Nein, in den beiden Funktionen brauchst du iBuilding ansonsten nicht. Also lieber einbauen, sonst wunderst du dich wieder, wenn dem PP mal die Grund- gestrichen wird, dass das immer negativer wird
Ich hab hier in den beiden betroffenen Codeblöcken die Variable dann auch gleich mal umbenannt, damit ist klar, was dort drin steht.
PHP-Code:
# Provinzhauptstadt Statthalter Tribut
if iData1 == 678:
# iData2 = iPlayer, iData3 = CityID, iData4 = Antwort [0,1,2] , iData5 = Tribut
pPlayer = gc.getPlayer(iData2)
pCity = pPlayer.getCity(iData3)
iTribut = iData5
iTribut2 = iData5 / 2
iGold = pPlayer.getGold()
bDoRebellion = False
iAddHappiness = -2
bPaid = False
iRandRebellion = CvUtil.myRandom(100, "iRandRebellion")
if iGold >= iTribut:
if iData4 == 0:
pPlayer.changeGold(-iTribut)
iAddHappiness = 1
bPaid = True
elif iData4 == 1:
pPlayer.changeGold(-iTribut2)
iAddHappiness = 0
bPaid = True
elif iGold >= iTribut2:
if iData4 == 0:
pPlayer.changeGold(-iTribut2)
iAddHappiness = 0
bPaid = True
elif iGold > 0:
if iData4 == 0:
pPlayer.setGold(0)
iAddHappiness = 0
# Happiness setzen (Bug bei CIV, Man muss immer den aktuellen Wert + die Aenderung setzen)
iBuildingClass= gc.getInfoTypeForString("BUILDINGCLASS_PROVINZPALAST")
iBuildingHappiness = pCity.getBuildingHappyChange(iBuildingClass)
pCity.setBuildingHappyChange(iBuildingClass, iBuildingHappiness + iAddHappiness)
# Chance einer Rebellion: Unhappy Faces * Capital Distance
iCityHappiness = pCity.happyLevel() - pCity.unhappyLevel(0)
if iCityHappiness < 0:
# Abstand zur Hauptstadt
if not pPlayer.getCapitalCity().isNone() and pPlayer.getCapitalCity() is not None:
iDistance = plotDistance(pPlayer.getCapitalCity().getX(), pPlayer.getCapitalCity().getY(), pCity.getX(), pCity.getY())
else:
iDistance = 20
iChance = iCityHappiness * (-1) * iDistance
if iChance > iRandRebellion:
bDoRebellion = True
if bDoRebellion:
CyInterface().addMessage(iData2, True, 10, CyTranslator().getText("TXT_KEY_POPUP_PROVINZHAUPTSTADT_REACTION_NEG", (pCity.getName(),)), "AS2D_REVOLTSTART", 2, None, ColorTypes(7), pCity.getX(), pCity.getY(), True, True)
# Dies soll doppelte Popups in PB-Spielen vermeiden.
if iData2 == gc.getGame().getActivePlayer():
popupInfo = CyPopupInfo()
popupInfo.setButtonPopupType(ButtonPopupTypes.BUTTONPOPUP_TEXT)
popupInfo.setText(CyTranslator().getText("TXT_KEY_POPUP_PROVINZHAUPTSTADT_REACTION_NEG", (pCity.getName(), )))
popupInfo.addPopup(iData2)
doProvinceRebellion(pCity)
elif bPaid:
CyInterface().addMessage(iData2, True, 10, CyTranslator().getText("TXT_KEY_POPUP_PROVINZHAUPTSTADT_REACTION_POS", (pCity.getName(),)), "AS2D_BUILD_BANK", 2, None, ColorTypes(8), pCity.getX(), pCity.getY(), True, True)
szBuffer = CyTranslator().getText("TXT_KEY_POPUP_PROVINZHAUPTSTADT_THX_MAIN", (pCity.getName(), ))
iRand = 1 + CvUtil.myRandom(23, "provinz_thx")
szBuffer = szBuffer + CyTranslator().getText("TXT_KEY_POPUP_PROVINZHAUPTSTADT_THX_"+str(iRand), ())
# 1 Unit as gift:
lGift = []
# Auxiliar
lGift.append(gc.getCivilizationInfo(gc.getPlayer(pCity.getOriginalOwner()).getCivilizationType()).getCivilizationUnits(gc.getInfoTypeForString("UNITCLASS_AUXILIAR")))
if pCity.canTrain(gc.getInfoTypeForString("UNIT_AUXILIAR_HORSE"), 0, 0):
lGift.append(gc.getInfoTypeForString("UNIT_AUXILIAR_HORSE"))
# Food
#lGift.append(gc.getInfoTypeForString("UNIT_SUPPLY_FOOD"))
# Slave
if pCity.isHasBuilding(gc.getInfoTypeForString("BUILDING_SKLAVENMARKT")):
lGift.append(gc.getInfoTypeForString("UNIT_SLAVE"))
# Mounted
if pCity.isHasBuilding(gc.getInfoTypeForString("BUILDING_STABLE")):
lGift.append(gc.getInfoTypeForString("UNIT_HORSE"))
if pCity.canTrain(gc.getInfoTypeForString("UNIT_CHARIOT"), 0, 0):
lGift.append(gc.getCivilizationInfo(gc.getPlayer(pCity.getOriginalOwner()).getCivilizationType()).getCivilizationUnits(gc.getInfoTypeForString("UNITCLASS_CHARIOT")))
if pCity.canTrain(gc.getInfoTypeForString("UNIT_HORSE_ARCHER"), 0, 0):
lGift.append(gc.getCivilizationInfo(gc.getPlayer(pCity.getOriginalOwner()).getCivilizationType()).getCivilizationUnits(gc.getInfoTypeForString("UNITCLASS_HORSE_ARCHER")))
if pCity.canTrain(gc.getInfoTypeForString("UNIT_HEAVY_HORSEMAN"), 0, 0):
lGift.append(gc.getInfoTypeForString("UNIT_HEAVY_HORSEMAN"))
# Elefant
if pCity.isHasBuilding(gc.getInfoTypeForString("BUILDING_ELEPHANT_STABLE")):
lGift.append(gc.getInfoTypeForString("UNIT_ELEFANT"))
if pCity.canTrain(gc.getInfoTypeForString("UNIT_WAR_ELEPHANT"), 0, 0):
lGift.append(gc.getInfoTypeForString("UNIT_WAR_ELEPHANT"))
# Kamel
if pCity.isHasBuilding(gc.getInfoTypeForString("BUILDING_CAMEL_STABLE")):
#lGift.append(gc.getInfoTypeForString("UNIT_CARAVAN"))
if pCity.canTrain(gc.getInfoTypeForString("UNIT_ARABIA_CAMELARCHER"), 0, 0):
lGift.append(gc.getInfoTypeForString("UNIT_ARABIA_CAMELARCHER"))
if pCity.canTrain(gc.getInfoTypeForString("UNIT_CAMEL_CATAPHRACT"), 0, 0):
lGift.append(gc.getInfoTypeForString("UNIT_CAMEL_CATAPHRACT"))
# Choose unit
iRand = CvUtil.myRandom(len(lGift), "unitgift")
# Dies soll doppelte Popups in PB-Spielen vermeiden.
if iData2 == gc.getGame().getActivePlayer():
# Auxiliars as gift:
#iAnz = 1 + CvUtil.myRandom(3, "Auxiliars as gift")
#if iAnz == 1: szBuffer = szBuffer + CyTranslator().getText("TXT_KEY_POPUP_PROVINZHAUPTSTADT_THX_MAIN2_SINGULAR",("", ))
#else: szBuffer = szBuffer + CyTranslator().getText("TXT_KEY_POPUP_PROVINZHAUPTSTADT_THX_MAIN2_PLURAL",(iAnz, ))
szBuffer = szBuffer + CyTranslator().getText("TXT_KEY_POPUP_PROVINZHAUPTSTADT_THX_MAIN2", (gc.getUnitInfo(lGift[iRand]).getDescriptionForm(0),))
popupInfo = CyPopupInfo()
popupInfo.setButtonPopupType(ButtonPopupTypes.BUTTONPOPUP_TEXT)
popupInfo.setText(szBuffer)
popupInfo.addPopup(iData2)
pPlayer.initUnit(lGift[iRand], pCity.getX(), pCity.getY(), UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_SOUTH)
PHP-Code:
def provinceTribute(pCity):
iBuildingClass= gc.getInfoTypeForString("BUILDINGCLASS_PROVINZPALAST")
iPlayer = pCity.getOwner()
pPlayer = gc.getPlayer(iPlayer)
bDoRebellion = False
# PAE III
#iCityIntervall = gc.getGame().getGameTurn() - pCity.getGameTurnFounded()
# if iCityIntervall > 0 and iCityIntervall % 30 == 0 and iPlayer != -1:
# PAE IV: 33 (3%), PAE V: 50 (2%)
#if not gc.getTeam(pPlayer.getTeam()).isHasTech(gc.getInfoTypeForString("TECH_POLYARCHY")) and CvUtil.myRandom(50, "provinceTribute") < 1:
# PAE VI: alle 10 Runden, Chance 33%
if not gc.getTeam(pPlayer.getTeam()).isHasTech(gc.getInfoTypeForString("TECH_POLYARCHY")):
if pCity.getGameTurnFounded() % 10 == gc.getGame().getGameTurn() % 10 and CvUtil.myRandom(3, "provinceTribute") == 1:
iGold = pPlayer.getGold()
iTribut = pCity.getPopulation() * 10
iTribut += CvUtil.myRandom(iTribut / 2, "Tribut")
iTribut2 = iTribut / 2
iBuildingHappiness = pCity.getBuildingHappyChange(iBuildingClass)
# Human PopUp
if pPlayer.isHuman():
# Dies soll doppelte Popups in PB-Spielen vermeiden.
if iPlayer == gc.getGame().getActivePlayer():
iRand = CvUtil.myRandom(11, "TXT_KEY_POPUP_PROVINZHAUPTSTADT_DEMAND_")
szText = CyTranslator().getText("TXT_KEY_POPUP_PROVINZHAUPTSTADT_DEMAND_"+str(iRand), (pCity.getName(), iTribut))
szText += CyTranslator().getText("[NEWLINE][NEWLINE]", ()) + CyTranslator().getText("TXT_KEY_POPUP_STATTHALTER_HALTUNG", ())
szText += u": %d " % (abs(iBuildingHappiness))
if iBuildingHappiness < 0:
szText += CyTranslator().getText("[ICON_UNHAPPY]", ())
else:
szText += CyTranslator().getText("[ICON_HAPPY]", ())
popupInfo = CyPopupInfo()
popupInfo.setButtonPopupType(ButtonPopupTypes.BUTTONPOPUP_PYTHON)
popupInfo.setText(szText)
popupInfo.setData1(iPlayer)
popupInfo.setData2(pCity.getID())
popupInfo.setData3(iTribut)
popupInfo.setOnClickedPythonCallback("popupProvinzPayment")
if iGold >= iTribut:
popupInfo.addPythonButton(CyTranslator().getText("TXT_KEY_POPUP_PROVINZHAUPTSTADT_ANSWER_1", (iTribut,)), "")
if iGold >= iTribut2:
popupInfo.addPythonButton(CyTranslator().getText("TXT_KEY_POPUP_PROVINZHAUPTSTADT_ANSWER_2", (iTribut2,)), "")
if iGold > 0 and iGold < iTribut2:
popupInfo.addPythonButton(CyTranslator().getText("TXT_KEY_POPUP_PROVINZHAUPTSTADT_ANSWER_2_1", (iGold,)), "")
iRand = 1 + CvUtil.myRandom(10, "TXT_KEY_POPUP_PROVINZHAUPTSTADT_ANSWER_3_")
popupInfo.addPythonButton(CyTranslator().getText("TXT_KEY_POPUP_PROVINZHAUPTSTADT_ANSWER_3_"+str(iRand), ()), "")
popupInfo.addPopup(iPlayer)
else:
# AI
# Wenn iGold > iTribut * 3: 1 - 20%, 2 - 80%, 3 - 0%
# Wenn iGold > iTribut * 2: 1 - 10%, 2 - 80%, 3 - 10%
# Wenn iGold >= iTribut: 1 - 0%, 2 - 80%, 3 - 20%
# Wenn iGold >= iTribut2: 1 - 0%, 2 - 70%, 3 - 30%
# Wenn iGold > 0: 1 - 0%, 2 - 60%, 3 - 40%
iAddHappiness = -1
iRand = CvUtil.myRandom(10, "provinceTribute2")
iRandRebellion = CvUtil.myRandom(100, "provinceTribute3")
bPaid = False
if iGold > iTribut * 3:
if iRand < 2:
pPlayer.changeGold(-iTribut)
iAddHappiness = 2
else:
pPlayer.changeGold(-iTribut2)
iAddHappiness = 1
bPaid = True
elif iGold > iTribut * 2:
if iRand == 0:
pPlayer.changeGold(-iTribut)
iAddHappiness = 2
elif iRand < 9:
pPlayer.changeGold(-iTribut2)
iAddHappiness = 1
bPaid = True
elif iGold >= iTribut:
if iRand < 8:
pPlayer.changeGold(-iTribut2)
iAddHappiness = 1
bPaid = True
elif iGold >= iTribut2:
if iRand < 7:
pPlayer.changeGold(-iTribut2)
iAddHappiness = 1
bPaid = True
elif iGold >= 0:
if iRand < 6:
pPlayer.setGold(0)
iAddHappiness = 0
# Happiness setzen (Man muss immer den aktuellen Wert + die Aenderung setzen)
pCity.setBuildingHappyChange(iBuildingClass, iBuildingHappiness + iAddHappiness)
# Chance einer Rebellion: Unhappy Faces * Capital Distance
iCityHappiness = pCity.happyLevel() - pCity.unhappyLevel(0)
if iCityHappiness < 0:
# Abstand zur Hauptstadt
pCapital = pPlayer.getCapitalCity()
if pCapital is not None and not pCapital.isNone():
iDistance = plotDistance(pCapital.getX(), pCapital.getY(), pCity.getX(), pCity.getY())
else:
iDistance = 20
iChance = iCityHappiness * (-1) * iDistance
if iChance > iRandRebellion:
bDoRebellion = True
if bDoRebellion:
doProvinceRebellion(pCity)
elif bPaid:
eOrigCiv = gc.getCivilizationInfo(gc.getPlayer(pCity.getOriginalOwner()).getCivilizationType())
# 1 Unit as gift:
lGift = []
lGift.append(eOrigCiv.getCivilizationUnits(gc.getInfoTypeForString("UNITCLASS_AUXILIAR")))
iUnit2 = gc.getInfoTypeForString("UNIT_AUXILIAR_HORSE")
if pCity.canTrain(iUnit2, 0, 0):
lGift.append(iUnit2)
# Food
lGift.append(gc.getInfoTypeForString("UNIT_SUPPLY_FOOD"))
# Slave
if pCity.isHasBuilding(gc.getInfoTypeForString("BUILDING_SKLAVENMARKT")):
lGift.append(gc.getInfoTypeForString("UNIT_SLAVE"))
# Mounted
if pCity.isHasBuilding(gc.getInfoTypeForString("BUILDING_STABLE")):
lGift.append(gc.getInfoTypeForString("UNIT_HORSE"))
lMounted = [
gc.getInfoTypeForString("UNIT_CHARIOT"),
gc.getInfoTypeForString("UNIT_HORSE_ARCHER"),
gc.getInfoTypeForString("UNIT_HEAVY_HORSEMAN")
]
for iUnit in lMounted:
if pCity.canTrain(iUnit, 0, 0):
lGift.append(eOrigCiv.getCivilizationUnits(iUnit))
# Elefant
if pCity.isHasBuilding(gc.getInfoTypeForString("BUILDING_ELEPHANT_STABLE")):
lGift.append(gc.getInfoTypeForString("UNIT_ELEFANT"))
if pCity.canTrain(gc.getInfoTypeForString("UNIT_WAR_ELEPHANT"), 0, 0):
lGift.append(gc.getInfoTypeForString("UNIT_WAR_ELEPHANT"))
iRand = CvUtil.myRandom(len(lGift), "provinceTribute4")
CvUtil.spawnUnit(lGift[iRand], pCity.plot(), pPlayer)
return bDoRebellion
# ***TEST***
#CyInterface().addMessage(gc.getGame().getActivePlayer(), True, 10, CyTranslator().getText("TXT_KEY_MESSAGE_TEST",("Provinz-HS Tribut-PopUp (Zeile 4367)",1)), None, 2, None, ColorTypes(10), 0, 0, False, False)