OACバグ修正//クラスチェンジ

ちょっと不格好だけどpopupInfoの仕様上こうする他なさそう。
ただしSDKを解読したのではなく既存のコードを参考にした結果の判断なので、もしかしたらもっといい方法があるかも知れない。

SPELL_はCIV4SpellInfos.xml、req~applyはCvSpellInterface.pyに上書き。なおSPELL_はRemovePromotionsを削除しただけ。
reqには変更点がないけれどせっかくなのでセットで。enabledYsEventBuyWeapon()の簡素化した物もおまけで。

ちょっと不格好だけどpopupInfoの仕様上こうする他なさそう。
ただしSDKを解読したのではなく既存のコードを参考にした結果の判断なので、もしかしたらもっといい方法があるかも知れない。

SPELL_はCIV4SpellInfos.xml、req~applyはCvSpellInterface.pyに上書き。なおSPELL_はRemovePromotionsを削除しただけ。
reqには変更点がないけれどせっかくなのでセットで。enabledYsEventBuyWeapon()の簡素化した物もおまけで。

<SpellInfo>
<Type>SPELL_CCADOL</Type>
<Description>TXT_KEY_SPELL_CCADOL</Description>
<Civilopedia>TXT_KEY_SPELL_PLACEHOLDER_PEDIA</Civilopedia>
<Help>TXT_KEY_SPELL_CCADOL_HELP</Help>
<Pronunciation>TXT_KEY_SPELL_CCADOL_PRONUNCIATION</Pronunciation>
<PromotionPrereq1>PROMOTION_COMBAT5</PromotionPrereq1>
<bInCityOnly>1</bInCityOnly>
<bIgnoreHasCasted>1</bIgnoreHasCasted>
<bHasCasted>0</bHasCasted>
<bAbility>1</bAbility>
<bBuffCasterOnly>1</bBuffCasterOnly>
<PyResult>spellCCAdol</PyResult>
<PyRequirement>reqCCAdol</PyRequirement>
<bAllowAI>1</bAllowAI>
<iAIWeight>300</iAIWeight>
<PrereqOrUnits>
<UnitType>UNIT_ADOL1</UnitType>
<UnitType>UNIT_ADOL2</UnitType>
</PrereqOrUnits>
<bDisplayWhenDisabled>1</bDisplayWhenDisabled>
<Effect>EFFECT_SPELL1</Effect>
<Sound>AS3D_SPELL_HASTE</Sound>
<bGraphicalOnly>1</bGraphicalOnly>
<Button>Art_Kaijin/REAH/adol.dds</Button>
</SpellInfo>
/////////////
def reqCCAdol(argsList):
pCaster = argsList[0]
pPlot = argsList[1]
eSpell = argsList[2]
iexp = pCaster.getExperience()
if iexp > 99:
return True
return False
def spellCCAdol(argsList):
pCaster = argsList[0]
pBestPlot = argsList[1]
eSpell = argsList[2]
iPlayer = pCaster.getOwner()
iCasterID = pCaster.getID()
pPlayer = gc.getPlayer(iPlayer)
if pPlayer.isHuman():
popupInfo = CyPopupInfo()
popupInfo.setButtonPopupType(ButtonPopupTypes.BUTTONPOPUP_PYTHON)
popupInfo.setText(CyTranslator().getText("TXT_KEY_POPUP_CCADOL",()))
popupInfo.setData1(iPlayer)
popupInfo.setData2(iCasterID)
popupInfo.setPythonModule("CvSpellInterface")
popupInfo.setOnClickedPythonCallback("selectCCAdol")
popupInfo.addPythonButton(CyTranslator().getText("TXT_KEY_POPUP_YES", ()), "")
popupInfo.addPythonButton(CyTranslator().getText("TXT_KEY_POPUP_NO", ()), "")
popupInfo.addPopup(iPlayer)
else:
applyCCAdol(iPlayer, iCasterID)
def selectCCAdol(argsList):
iButton = argsList[0]
iPlayer = argsList[1]
iCasterID = argsList[2]
if iButton == 0:
applyCCAdol(iPlayer, iCasterID)
def applyCCAdol(iPlayer, iCasterID):
iCombat1 = gc.getInfoTypeForString('PROMOTION_COMBAT1')
iCombat2 = gc.getInfoTypeForString('PROMOTION_COMBAT2')
iCombat3 = gc.getInfoTypeForString('PROMOTION_COMBAT3')
iCombat4 = gc.getInfoTypeForString('PROMOTION_COMBAT4')
iCombat5 = gc.getInfoTypeForString('PROMOTION_COMBAT5')
pPlayer = gc.getPlayer(iPlayer)
pCaster = pPlayer.getUnit(iCasterID)
pPlot = pCaster.plot()
if pCaster.getUnitType() == gc.getInfoTypeForString('UNIT_ADOL1'):
iCha = gc.getInfoTypeForString('PROMOTION_CHANNELING1')
iUnit = gc.getInfoTypeForString('UNIT_ADOL2')
elif pCaster.getUnitType() == gc.getInfoTypeForString('UNIT_ADOL2'):
iCha = gc.getInfoTypeForString('PROMOTION_CHANNELING2')
iUnit = gc.getInfoTypeForString('UNIT_ADOL3')
CyInterface().addMessage(pCaster.getOwner(),True,25,CyTranslator().getText("TXT_KEY_MESSAGE_ADOL", ()),'AS2D_REVOLTEND',1,'Art_Kaijin/REAH/adol.dds',ColorTypes(8),pCaster.getX(),pCaster.getY(),True,True)
if pPlot.isVisibleToWatchingHuman():
CyEngine().triggerEffect(gc.getInfoTypeForString('EFFECT_PILLAR_OF_FIRE'),pPlot.getPoint())
pNewUnit = pPlayer.initUnit(iUnit, pCaster.getX(), pCaster.getY(), UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_SOUTH)
pNewUnit.convert(pCaster)
pNewUnit.setHasPromotion(iCha, True)
pNewUnit.setHasPromotion(iCombat1, False)
pNewUnit.setHasPromotion(iCombat2, False)
pNewUnit.setHasPromotion(iCombat3, False)
pNewUnit.setHasPromotion(iCombat4, False)
pNewUnit.setHasPromotion(iCombat5, False)
pNewUnit.setLevel(1)
pNewUnit.setExperience(0, -1)
def enabledYsEventBuyWeapon(argsList):
pCaster = argsList[0]
pPlot = argsList[1]
eSpell = argsList[2]
pPlayer = gc.getPlayer(pCaster.getOwner())
rate = (100 + pPlayer.calculateInflationRate()) / 100
iGoldLow = 50 * rate
iGoldMid = 200 * rate
iGoldHigh = 1600 * rate
iGoldNeckless = 100 * rate
iGoldPlayer = pPlayer.getGold()
if not pCaster.isHuman():
if iGoldPlayer >= iGoldLow:
if not pCaster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_YSSWORD3')):
if pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_COPPER')) > 0:
if iGoldPlayer >= iGoldHigh:
return True
if iGoldPlayer >= iGoldMid and not pCaster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_YSSWORD2')):
return True
if (not pCaster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_YSSWORD2'))
and not pCaster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_YSSWORD1')) ):
return True
if not pCaster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_YSARMOR3')):
if pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_MARBLE')) > 0:
if iGoldPlayer >= iGoldHigh:
return True
if iGoldPlayer >= iGoldMid and not pCaster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_YSARMOR2')):
return True
if (not pCaster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_YSARMOR2'))
and not pCaster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_YSARMOR1')) ):
return True
if not pCaster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_YSSHIELD3')):
if pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_GOLD')) > 0:
if iGoldPlayer >= iGoldHigh:
return True
if iGoldPlayer >= iGoldMid and not pCaster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_YSSHIELD2')):
return True
if (not pCaster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_YSSHIELD2'))
and not pCaster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_YSSHIELD1')) ):
return True
if (not pCaster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_YSNECKLESS'))
and pPlayer.getNumAvailableBonuses(gc.getInfoTypeForString('BONUS_GEMS')) > 0
and iGoldPlayer >= iGoldNeckless ):
return True
return False
return True
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX