자 어제에 이어 계속...
말줄임표에 들어간 내용들에 대한 고찰을 해야겠지. 물론 가능하다면 긍정적인 방향의 개조도...
이런 부분의 수정이 좋은 점이 있다면, 인간 플레이어와 AI에게 공평하게 적용된다는 것이지 않을까 싶다.
왜냐하면...보통의 수정은 매우 신경을 써주지 않는 한은, 결국 인간 플레이어 전용이나 마찬가지거든.
특히 주문 수정 같은 경우...주문을 사용하는 경우에 대한 인공지능을 따로 편집해 주지 않는다면, 자신만 쓰는 것이나 마찬가지다.
그에 반해, 이런 구문...즉 뭔가에 대한 반응을 처리하는 구문은 누구에게나 공평한거라서...
반대로 더 강화해 주기도 편하고.

if (unit.isAlive() and unit.isImmortal() == False):
iX = unit.getX()
iY = unit.getY()
iSoulForge = gc.getInfoTypeForString('BUILDING_SOUL_FORGE')
for iiX in range(iX-1, iX+2, 1):
for iiY in range(iY-1, iY+2, 1):
pPlot2 = CyMap().plot(iiX,iiY)
if pPlot2.isCity():
pCity = pPlot2.getPlotCity()
if pCity.getNumRealBuilding(iSoulForge) > 0:
pCity.changeProduction(unit.getExperience() + 10)
CyInterface().addMessage(pCity.getOwner(),True,25,CyTranslator().getText("TXT_KEY_MESSAGE_SOUL_FORGE",()),'AS2D_DISCOVERBONUS',1,'Art/Interface/Buttons/Buildings/Soulforge.dds',ColorTypes(7),pCity.getX(),pCity.getY(),True,True)
pPlot = CyMap().plot(iX,iY)
if pPlot.isCity():
pCity = pPlot.getPlotCity()
if pCity.getNumRealBuilding(gc.getInfoTypeForString('BUILDING_MOKKAS_CAULDRON')) > 0:
if pCity.getOwner() == unit.getOwner():
iUnit = cf.getUnholyVersion(unit)
if iUnit != -1:
newUnit = pPlayer.initUnit(iUnit, pCity.getX(), pCity.getY(), UnitAITypes.NO_UNITAI, DirectionTypes.DIRECTION_SOUTH)
newUnit.setHasPromotion(gc.getInfoTypeForString('PROMOTION_DEMON'), True)
newUnit.setDamage(50, PlayerTypes.NO_PLAYER)
newUnit.finishMoves()
szBuffer = gc.getUnitInfo(newUnit.getUnitType()).getDescription()
CyInterface().addMessage(unit.getOwner(),True,25,CyTranslator().getText("TXT_KEY_MESSAGE_MOKKAS_CAULDRON",((szBuffer, ))),'AS2D_DISCOVERBONUS',1,'Art/Interface/Buttons/Buildings/Mokkas Cauldron.dds',ColorTypes(7),pCity.getX(),pCity.getY(),True,True)

if (unit.getReligion() == gc.getInfoTypeForString('RELIGION_COUNCIL_OF_ESUS') or unit.getReligion() == gc.getInfoTypeForString('RELIGION_THE_ASHEN_VEIL') or unit.getReligion() == gc.getInfoTypeForString('RELIGION_OCTOPUS_OVERLORDS') or unit.isHasPromotion(gc.getInfoTypeForString('PROMOTION_DEATH1')) or unit.isHasPromotion(gc.getInfoTypeForString('PROMOTION_ENTROPY1'))):
cf.giftUnit(gc.getInfoTypeForString('UNIT_MANES'), gc.getInfoTypeForString('CIVILIZATION_INFERNAL'), 0, unit.plot(), unit.getOwner())
cf.giftUnit(gc.getInfoTypeForString('UNIT_MANES'), gc.getInfoTypeForString('CIVILIZATION_INFERNAL'), 0, unit.plot(), unit.getOwner())

if (unit.getReligion() == gc.getInfoTypeForString('RELIGION_THE_EMPYREAN') or unit.getReligion() == gc.getInfoTypeForString('RELIGION_THE_ORDER') or unit.getReligion() == gc.getInfoTypeForString('RELIGION_RUNES_OF_KILMORPH') or (unit.getUnitCombatType() != gc.getInfoTypeForString('UNITCOMBAT_ANIMAL') and pPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_MERCURIANS'))):
cf.giftUnit(gc.getInfoTypeForString('UNIT_ANGEL'), gc.getInfoTypeForString('CIVILIZATION_MERCURIANS'), unit.getExperience(), unit.plot(), unit.getOwner())

if unit.isHasPromotion(gc.getInfoTypeForString('PROMOTION_SPIRIT_GUIDE')):
if unit.getExperience() > 0:
py = PyPlayer(iPlayer)
lUnits = []
for pLoopUnit in py.getUnitList():
if pLoopUnit.isAlive():
if not pLoopUnit.isOnlyDefensive():
if not pLoopUnit.isDelayedDeath():
lUnits.append(pLoopUnit)
if len(lUnits) > 0:
pUnit = lUnits[CyGame().getSorenRandNum(len(lUnits), "Spirit Guide")-1]
iXP = unit.getExperience() / 2
pUnit.changeExperience(iXP, -1, false, false, false)
unit.changeExperience(iXP * -1, -1, false, false, false)
CyInterface().addMessage(unit.getOwner(),True,25,CyTranslator().getText("TXT_KEY_MESSAGE_SPIRIT_GUIDE",()),'AS2D_DISCOVERBONUS',1,'Art/Interface/Buttons/Promotions/SpiritGuide.dds',ColorTypes(7),pUnit.getX(),pUnit.getY(),True,True)

따로 자를만하게 길지? --; 색이 들어간 것은 당연히 설명...주석을 위해서지...그런거 안쓰여 있다...
①영혼의 대장간 관련 구문
 해당 불가사의가 건설된 도시의 반경1 이내에서 죽은 유닛의 경험치+10만큼을 해당 도시에 망치로...
 죽은 유닛의 수준(=티어)와 관계 없이 더한다는 점에서 불공평함을 느낄 지도 모르겠다.
②모카의 가마솥 관련 구문
 해당 불가사의가 건설된 도시에서 죽은 유닛이 악마로 되살아나는거...
 그저께 개조한 것과 관련이 있지. 나오는 유닛을 여기서 바꿔줄 수도 있어. iUnit = cf.getUnholyVersion(unit) 부분이 중요하겠지?
③사악한 유닛이 죽었을 때 인페르날에 마네 추가 구문...
④선량한 유닛이 죽었을 때 머큐리안에 천사 추가 구문...
 둘 다 뭐 뻔하니까...
⑤승급 스피릿 가이드 처리 관련 구문
 XML만 봐서는...스피릿 가이드는 하는 일이 없는 승급처럼 보이지만, 실제로는 그렇지 않은데,
 바로 여기서 처리하는 거지. iXP = unit.getExperience() / 2 에서 2로 나누는 부분을 없애면...경험치를 반만 넘겨주는 게 아니라 전부 넘겨줄 수도 있겠지.

자...다른 것도 고칠 수 있겠지만, 역시 ②구문을 중심으로 보자.
다음과 같이 고친다고 해보자. 너무 기니까 멀쩡한 부분을 파란 색으로 놓고 삽입할 부분을 붉은 색으로 표시하겠다. 적절히 삽입해야겠지...
iUnit = cf.getUnholyVersion(unit)
if pPlayer.getCivilizationType() == gc.getInfoTypeForString('CIVILIZATION_MERCURIANS'))):
iUnit = gc.getInfoTypeForString('UNIT_ANGEL')
if iUnit != -1:

아래위 생략했다는 소리고...자 붉은 색만 첨가하면 어떻게 되겠어?
머큐리안 한정으로, 죽는 유닛의 병종/수준과 관계 없이 항상 천사를 주겠지.
사실 머큐리안은 천사의 군세인데...유닛이 죽어서 악마가 나오는 것이 이상하지 않은가? --;
아예 모카의 가마솥을 얻지 못하게 만들어 둔다면 모를까...얻을 수 있잖아. 근데 죽으면 악마가 나온다니...
뭐 따로 HolyVersion을 만드는 방법도 있지만, 유닛 선정하기 귀찮아서--;
 
인페르날도 따로 해 줄 수는 있겠지. 마네 두마리를 주는 식으로...
근데, 원래 인페르날은 모카의 가마솥 효과를 보기가 매우 힘들어. 유닛이 기본으로 악마인지라...살아있는 유닛이 없거든. 그래서 구지 넣지 않은거...
다만, 인페르날 최대의 고민은 마네를 임의로 얻지 못한다는 것이므로, 일부러 얻어야 할 필요가 있긴 있지. 꼭 유닛 죽을때만 얻을 필요는 없어서 여기다는 안하지만.

어떻게, 다르게 응용할 방법이 더 있을까?
 
죠니 사사키가 작성한 글입니다.
,