Revision: 345
Author: TongShen.Martin
Date: Fri Sep 25 08:21:08 2009
Log: 0.301: 修正:修正英雄战死后状态设为在野的Bug
修正游戏中有两个玩家的势力相同时初始英雄被复制的Bug
修正兵科晋升升满时有时还可以再升一次的Bug
修正攻占信念中心城市时的CTD
修正统帅英雄获取新晋升无效的Bug(若统帅英雄和亲卫队英雄同时可以晋升,则亲
卫队英雄晋升完毕后出现统帅英雄的晋升)
修正升级集团军中的单位时出错的Bug
修正组建军团屏幕中一处可导致多人游戏不兼容的Bug
修正随机地图第一个随机英雄所需经验值与初始英雄数量不符
规则调整:攻占敌方首都时会拯救我方俘虏
去掉西凉骑兵的自带攻城惩罚
取消了人类玩家英雄自动升级
图像:替换“强烈”政体的图标
界面:英雄顾问信息界面会显示我方目前可以看到的英雄
在俘虏屏幕中添加“交易”快捷按钮,并添加帮助文字
修正部分剧情中汉献帝和皇帝行辕的英文
如果军团或集团军无法解散,则军团屏幕中“清空”选项不会出现
0.301: fix: fix a bug when a hero dies in combat his status is set to
unemployed
fix a bug when two players in the game use the same faction, the initial
free hero would get duplicated
fix a bug sometimes when a hero's unit combat levels are maximized he
can still choose that promotion
fix a CTD when capturing central city for a belief
fix a bug that promote leader hero has no effect. (Now if leader hero
and core troop hero both can be promoted, first promote core troop hero,
then leader hero)
fix a bug when upgrading units within an Army
fix a bug in forming legion interface which would result in OOS Error
fix a bug in random maps experience needed for first random hero do not
match current hero number
art: replacd Strong civic's button
rule treak: capture enemy capital will now free our own heroes
removed innate city attack penalty for Qiang Tribal Horsemen
removed human players auto promote heroes
Interface: in info screen of hero advisor play can now see heroes that are
visible to him/her
in prisoner screen of hero advisor add a button to initial hero trade
directly as well as some help text
the 'clear' choice in legion screen will no longer show if the
legion/army cannot be dismissed
http://code.google.com/p/sanguoforciv4/source/detail?r=345
Added:
/trunk/The History of Three Kingdoms/Assets/Art/interface/buttons/Civic
/trunk/The History of Three
Kingdoms/Assets/Art/interface/buttons/Civic/strong.dds
Modified:
/trunk/The History of Three Kingdoms/Assets/Python/BUG/WidgetUtil.py
/trunk/The History of Three Kingdoms/Assets/Python/CvSanguoEventManager.py
/trunk/The History of Three
Kingdoms/Assets/Python/Screens/CvAdvancedLegionScreen.py
/trunk/The History of Three Kingdoms/Assets/Python/Screens/CvHeroAdvisor.py
/trunk/The History of Three
Kingdoms/Assets/Python/Screens/CvLegionScreen.py
/trunk/The History of Three
Kingdoms/Assets/Python/Screens/CvMainInterface.py
/trunk/The History of Three Kingdoms/Assets/XML/GameInfo/CIV4CivicInfos.xml
/trunk/The History of Three
Kingdoms/Assets/XML/Text/CIV4GameText_Sanguo_Changed.xml
/trunk/The History of Three
Kingdoms/Assets/XML/Text/CIV4GameText_Sanguo_Hero.xml
/trunk/The History of Three Kingdoms/Assets/XML/Units/CIV4UnitInfos.xml
/trunk/The History of Three Kingdoms/CvGameCoreDLL/CvGame.cpp
/trunk/The History of Three Kingdoms/CvGameCoreDLL/CvInfos.cpp
/trunk/The History of Three Kingdoms/CvGameCoreDLL/CvInfos.h
/trunk/The History of Three Kingdoms/CvGameCoreDLL/CvPlayer.cpp
/trunk/The History of Three Kingdoms/CvGameCoreDLL/CvPlayer.h
/trunk/The History of Three Kingdoms/CvGameCoreDLL/CvPlayerAI.cpp
/trunk/The History of Three Kingdoms/CvGameCoreDLL/CvUnit.cpp
/trunk/The History of Three Kingdoms/Documents/changelog.txt
/trunk/The History of Three Kingdoms/Documents/changelog_en.txt
/trunk/The History of Three Kingdoms/PublicMaps/HoTK 51_51
196AD.CivBeyondSwordWBSave
/trunk/The History of Three Kingdoms/PublicMaps/HoTK 51_51
no_city.CivBeyondSwordWBSave
/trunk/The History of Three Kingdoms/PublicMaps/HoTK 68_64
194AD.CivBeyondSwordWBSave
/trunk/The History of Three Kingdoms/PublicMaps/HoTK 68_64
196AD.CivBeyondSwordWBSave
/trunk/The History of Three Kingdoms/PublicMaps/HoTK 68_64
no_city.CivBeyondSwordWBSave
/trunk/The History of Three Kingdoms/PublicMaps/HoTK 81_81
no_city.CivBeyondSwordWBSave
/trunk/The History of Three Kingdoms/The History of Three Kingdoms.ini
=======================================
--- /dev/null
+++ /trunk/The History of Three
Kingdoms/Assets/Art/interface/buttons/Civic/strong.dds Fri Sep 25 08:21:08
2009
Binary file, no diff available.
=======================================
--- /trunk/The History of Three Kingdoms/Assets/Python/BUG/WidgetUtil.py
Tue Aug 25 06:46:25 2009
+++ /trunk/The History of Three Kingdoms/Assets/Python/BUG/WidgetUtil.py
Fri Sep 25 08:21:08 2009
@@ -106,6 +106,9 @@
"""
if widget in g_widgetHelp:
BugUtil.warn("WidgetTypes %d help already registered", widget)
+ #### Sanguo Mod dynamic widget help, start, by poyuzhe 09.25.09
+ g_widgetHelp[widget] = func
+ #### Sanguo Mod dynamic widget help, end
else:
BugUtil.debug("WidgetUtil - registering %s hover help for
WidgetTypes %d: %s", type, widget, func)
g_widgetHelp[widget] = func
=======================================
--- /trunk/The History of Three
Kingdoms/Assets/Python/CvSanguoEventManager.py Sat Sep 19 05:22:49 2009
+++ /trunk/The History of Three
Kingdoms/Assets/Python/CvSanguoEventManager.py Fri Sep 25 08:21:08 2009
@@ -645,6 +645,10 @@
bThreePros = True
gc.getGame().createRandomHero(iData2, iData3, iData4, iLeadership,
iMight, iLoyalty, iCombat, iFirstPro, iSecondPro, iThirdPro, bThreePros)
gc.getPlayer(iData2).recalculateGreatGeneralThreshold()
+ # Clear legion member stuff
+ elif iData1 == 12:
+ gc.getGame().clearHeroLegionMember(iData2)
+
def onGameStart(self, argsList):
=======================================
--- /trunk/The History of Three
Kingdoms/Assets/Python/Screens/CvAdvancedLegionScreen.py Sat Sep 19
05:22:49 2009
+++ /trunk/The History of Three
Kingdoms/Assets/Python/Screens/CvAdvancedLegionScreen.py Fri Sep 25
08:21:08 2009
@@ -49,12 +49,12 @@
"UNITCOMBAT_SIEGE" : [],
"UNITCOMBAT_NAVAL" : []}
- self.CombatLevelSign = {0 : '/',
- 1 : 'D',
- 2 : 'C',
- 3 : 'B',
- 4 : 'A',
- 5 : 'S'}
+ self.CombatLevelSign = {0 : '/',
+ 1 : 'D',
+ 2 : 'C',
+ 3 : 'B',
+ 4 : 'A',
+ 5 : 'S'}
self.iHero = -1
self.iUnitID = -1
@@ -119,8 +119,9 @@
screen.addPanel( "LegionMainPanel", u"", u"", True, True, iX, iY,
xPanelWidth, yPanelHeight, PanelStyles.PANEL_STYLE_MAIN )
screen.addPanel( "HeroPortraitPanel", u"", u"", True, False, iX +
self.iIncrement * 3, iY + self.iIncrement * 2, self.iPortraitSize + 2 *
(iMargin - self.iIncrement * 3), self.iPortraitSize + 2 * (iMargin -
self.iIncrement * 2), PanelStyles.PANEL_STYLE_BLUE50 )
- screen.setButtonGFC( "Clear", localText.getText("TXT_KEY_SCREEN_CLEAR",
()), "", iX + xPanelWidth - self.iButtonWidth * 3 - self.iIncrement * 10,
iY + yPanelHeight - self.iButtonHeight - self.iIncrement * 4,
self.iButtonWidth, self.iButtonHeight, WidgetTypes.WIDGET_GENERAL, -1, -1,
ButtonStyles.BUTTON_STYLE_STANDARD )
- screen.setActivation( "Clear", ActivationTypes.ACTIVATE_MIMICPARENTFOCUS
)
+ if len(self.InitNotSamePlotMemberList) == 0 and
len(self.InitHasMovedMemberList) == 0:
+ screen.setButtonGFC( "Clear", localText.getText("TXT_KEY_SCREEN_CLEAR",
()), "", iX + xPanelWidth - self.iButtonWidth * 3 - self.iIncrement * 10,
iY + yPanelHeight - self.iButtonHeight - self.iIncrement * 4,
self.iButtonWidth, self.iButtonHeight, WidgetTypes.WIDGET_GENERAL, -1, -1,
ButtonStyles.BUTTON_STYLE_STANDARD )
+ screen.setActivation( "Clear",
ActivationTypes.ACTIVATE_MIMICPARENTFOCUS )
screen.setButtonGFC( "Cancel",
localText.getText("TXT_KEY_SCREEN_CANCEL", ()), "", iX + xPanelWidth -
self.iButtonWidth * 2 - self.iIncrement * 9, iY + yPanelHeight -
self.iButtonHeight - self.iIncrement * 4, self.iButtonWidth,
self.iButtonHeight, WidgetTypes.WIDGET_CLOSE_SCREEN, -1, -1,
ButtonStyles.BUTTON_STYLE_STANDARD )
screen.setActivation( "Cancel",
ActivationTypes.ACTIVATE_MIMICPARENTFOCUS )
screen.setButtonGFC( "Confirm",
localText.getText("TXT_KEY_SCREEN_CONFIRM", ()), "", iX + xPanelWidth -
self.iButtonWidth - self.iIncrement * 8, iY + yPanelHeight -
self.iButtonHeight - self.iIncrement * 4, self.iButtonWidth,
self.iButtonHeight, WidgetTypes.WIDGET_GENERAL, self.bRegroup, self.iHero,
ButtonStyles.BUTTON_STYLE_STANDARD )
@@ -238,7 +239,7 @@
if (pLoopUnit.getOwner() == gc.getGame().getActivePlayer()
and pLoopUnit.getHeroType() != -1
and pLoopUnit.getLegionHero() != -1
- and ( pLoopUnit.getLeaderHero() ==
self.iHero or pLoopUnit.getLeaderHero() == -1) ):
+ and ( pLoopUnit.getLeaderHero() == self.iHero or
pLoopUnit.getLeaderHero() == -1) ):
UnitList.append(pLoopUnit.getID())
for iUnitID in self.InitNotSamePlotMemberList:
@@ -279,7 +280,7 @@
if len(self.InitLegionMemberList) ==
gc.getGame().getHeroCapacity(self.iHero, False, -1):
screen.enable( control, False )
if pHero.getLeaderHero() != HeroTypes.NO_HERO and (pHero.isHurt() or
pHero.hasMoved()):
- screen.enable( control, False)
+ screen.enable( control, False)
# Normal Troop Check Box --- Hero Button
control = "HeroButton" + str(iID)
@@ -313,18 +314,18 @@
control = "HeroCombatLevel" + str(iID)
szText = "<img=%s size=24></img>" %
(gc.getUnitCombatInfo(pLoopUnit.getUnitCombatType()).getButton()) + ": "
if self.LegionNormalTroopCheck[iID] == 1 and
gc.getGame().getHeroUnitCombatLevel(eLoopHero,
pLoopUnit.getUnitCombatType()) <
gc.getGame().getHeroUnitCombatLevel(self.iHero,
pLoopUnit.getUnitCombatType()):
- szText +=
self.CombatLevelSign[gc.getGame().getHeroUnitCombatLevel(eLoopHero,
pLoopUnit.getUnitCombatType()) + 1]
- else:
- szText +=
self.CombatLevelSign[gc.getGame().getHeroUnitCombatLevel(eLoopHero,
pLoopUnit.getUnitCombatType())]
+ szText +=
self.CombatLevelSign[gc.getGame().getHeroUnitCombatLevel(eLoopHero,
pLoopUnit.getUnitCombatType()) + 1]
+ else:
+ szText +=
self.CombatLevelSign[gc.getGame().getHeroUnitCombatLevel(eLoopHero,
pLoopUnit.getUnitCombatType())]
screen.setTextAt( control, szHeroRow, szText, CvUtil.FONT_LEFT_JUSTIFY,
iIncrement * 4 + iIconSize + iButtonSize + iTextSize, iIncrement, -0.1,
FontTypes.GAME_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1)
screen.setActivation( control,
ActivationTypes.ACTIVATE_MIMICPARENTFOCUS )
control = "HeroCapacity" + str(iID)
if self.LegionNormalTroopCheck[iID] == 1:
- szText =
BugUtil.getPlainText("INTERFACE_PANE_CAPACITY") + ": " + "%d" %
(gc.getGame().getHeroCapacity(eLoopHero, True, self.iHero))
- else:
- szText =
BugUtil.getPlainText("INTERFACE_PANE_CAPACITY") + ": " + "%d" %
(gc.getGame().getHeroCapacity(eLoopHero, True, -1))
- screen.setTextAt( control, szHeroRow, szText,
CvUtil.FONT_LEFT_JUSTIFY, iIncrement * 4 + iIconSize + iButtonSize +
iTextSize, iIncrement + 24, -0.1, FontTypes.GAME_FONT,
WidgetTypes.WIDGET_GENERAL, -1, -1)
+ szText = BugUtil.getPlainText("INTERFACE_PANE_CAPACITY") + ": "
+ "%d" % (gc.getGame().getHeroCapacity(eLoopHero, True, self.iHero))
+ else:
+ szText = BugUtil.getPlainText("INTERFACE_PANE_CAPACITY") + ": "
+ "%d" % (gc.getGame().getHeroCapacity(eLoopHero, True, -1))
+ screen.setTextAt( control, szHeroRow, szText, CvUtil.FONT_LEFT_JUSTIFY,
iIncrement * 4 + iIconSize + iButtonSize + iTextSize, iIncrement + 24,
-0.1, FontTypes.GAME_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1)
screen.setActivation( control,
ActivationTypes.ACTIVATE_MIMICPARENTFOCUS )
# Sub Legion Members
@@ -391,7 +392,7 @@
screen.hide( control )
for iIndex in self.LegionNormalTroopCheck.keys():
- if self.LegionNormalTroopCheck[iIndex] == 1 and
self.LegionLeaderTroopCheck[iIndex] != 1:
+ if self.LegionNormalTroopCheck[iIndex] == 1 and
self.LegionLeaderTroopCheck[iIndex] != 1:
pUnit = gc.getPlayer(self.iPlayer).getUnit(iIndex)
if not pUnit.isNone():
szButton = gc.getHeroInfo(pUnit.getHeroType()).getButton()
@@ -408,60 +409,60 @@
if iUnitID != -1:
pUnit = gc.getPlayer(self.iPlayer).getUnit(iUnitID)
if not pUnit.isNone():
- iIncrement = self.iIncrement
- iTextSize = 64
- iIconSize = 24
- iButtonSize = 48
- iX = (screen.getXResolution() -
self.xPanelWidth) / 2 + self.iMargin * 2 + self.iPortraitSize
- iY = (screen.getYResolution() -
self.yPanelHeight) / 2 + self.iMargin * 2 + 64
- iWidth = self.xPanelWidth - self.iMargin *
3 - self.iPortraitSize + self.iIncrement * 2
- iHeight = self.yPanelHeight - self.iMargin
* 3 - iTextSize - iButtonSize - self.iIncrement * 2
- iRowHeight = 64
-
+ iIncrement = self.iIncrement
+ iTextSize = 64
+ iIconSize = 24
+ iButtonSize = 48
+ iX = (screen.getXResolution() - self.xPanelWidth) / 2 + self.iMargin *
2 + self.iPortraitSize
+ iY = (screen.getYResolution() - self.yPanelHeight) / 2 + self.iMargin
* 2 + 64
+ iWidth = self.xPanelWidth - self.iMargin * 3 - self.iPortraitSize +
self.iIncrement * 2
+ iHeight = self.yPanelHeight - self.iMargin * 3 - iTextSize -
iButtonSize - self.iIncrement * 2
+ iRowHeight = 64
+
eLoopHero = pUnit.getHeroType()
- # Hero Stats: Unit Combat Level and
Capacity
- szHeroRow = "HeroRow" + str(iUnitID)
- control = "HeroCombatLevel" + str(iUnitID)
- szText = "<img=%s size=24></img>" %
(gc.getUnitCombatInfo(pUnit.getUnitCombatType()).getButton()) + ": "
- if self.LegionNormalTroopCheck[iUnitID] ==
1 and gc.getGame().getHeroUnitCombatLevel(eLoopHero,
pUnit.getUnitCombatType()) <
gc.getGame().getHeroUnitCombatLevel(self.iHero, pUnit.getUnitCombatType()):
- szText +=
self.CombatLevelSign[gc.getGame().getHeroUnitCombatLevel(eLoopHero,
pUnit.getUnitCombatType()) + 1]
- else:
- szText +=
self.CombatLevelSign[gc.getGame().getHeroUnitCombatLevel(eLoopHero,
pUnit.getUnitCombatType())]
- screen.setTextAt( control, szHeroRow,
szText, CvUtil.FONT_LEFT_JUSTIFY, iIncrement * 4 + iIconSize + iButtonSize
+ iTextSize, iIncrement, -0.1, FontTypes.GAME_FONT,
WidgetTypes.WIDGET_GENERAL, -1, -1)
- screen.setActivation( control,
ActivationTypes.ACTIVATE_MIMICPARENTFOCUS )
-
- control = "HeroCapacity" + str(iUnitID)
- if self.LegionNormalTroopCheck[iUnitID] ==
1:
- szText =
BugUtil.getPlainText("INTERFACE_PANE_CAPACITY") + ": " + "%d" %
(gc.getGame().getHeroCapacity(eLoopHero, True, self.iHero))
- else:
- szText =
BugUtil.getPlainText("INTERFACE_PANE_CAPACITY") + ": " + "%d" %
(gc.getGame().getHeroCapacity(eLoopHero, True, -1))
- screen.setTextAt( control, szHeroRow,
szText, CvUtil.FONT_LEFT_JUSTIFY, iIncrement * 4 + iIconSize + iButtonSize
+ iTextSize, iIncrement + 24, -0.1, FontTypes.GAME_FONT,
WidgetTypes.WIDGET_GENERAL, -1, -1)
- screen.setActivation( control,
ActivationTypes.ACTIVATE_MIMICPARENTFOCUS )
-
- screen.show(szHeroRow)
-
- bFull = False
- iCount = 0
- for iLoopID in self.LegionNormalTroopCheck.keys():
- if self.LegionNormalTroopCheck[iLoopID] == 1:
- iCount += 1
- if iCount >= gc.getGame().getHeroCapacity(self.iHero,
False, -1):
- bFull = True
+ # Hero Stats: Unit Combat Level and Capacity
+ szHeroRow = "HeroRow" + str(iUnitID)
+ control = "HeroCombatLevel" + str(iUnitID)
+ szText = "<img=%s size=24></img>" %
(gc.getUnitCombatInfo(pUnit.getUnitCombatType()).getButton()) + ": "
+ if self.LegionNormalTroopCheck[iUnitID] == 1 and
gc.getGame().getHeroUnitCombatLevel(eLoopHero, pUnit.getUnitCombatType()) <
gc.getGame().getHeroUnitCombatLevel(self.iHero, pUnit.getUnitCombatType()):
+ szText +=
self.CombatLevelSign[gc.getGame().getHeroUnitCombatLevel(eLoopHero,
pUnit.getUnitCombatType()) + 1]
+ else:
+ szText +=
self.CombatLevelSign[gc.getGame().getHeroUnitCombatLevel(eLoopHero,
pUnit.getUnitCombatType())]
+ screen.setTextAt( control, szHeroRow, szText,
CvUtil.FONT_LEFT_JUSTIFY, iIncrement * 4 + iIconSize + iButtonSize +
iTextSize, iIncrement, -0.1, FontTypes.GAME_FONT,
WidgetTypes.WIDGET_GENERAL, -1, -1)
+ screen.setActivation( control,
ActivationTypes.ACTIVATE_MIMICPARENTFOCUS )
+
+ control = "HeroCapacity" + str(iUnitID)
+ if self.LegionNormalTroopCheck[iUnitID] == 1:
+ szText = BugUtil.getPlainText("INTERFACE_PANE_CAPACITY") + ": "
+ "%d" % (gc.getGame().getHeroCapacity(eLoopHero, True, self.iHero))
+ else:
+ szText = BugUtil.getPlainText("INTERFACE_PANE_CAPACITY") + ": "
+ "%d" % (gc.getGame().getHeroCapacity(eLoopHero, True, -1))
+ screen.setTextAt( control, szHeroRow, szText,
CvUtil.FONT_LEFT_JUSTIFY, iIncrement * 4 + iIconSize + iButtonSize +
iTextSize, iIncrement + 24, -0.1, FontTypes.GAME_FONT,
WidgetTypes.WIDGET_GENERAL, -1, -1)
+ screen.setActivation( control,
ActivationTypes.ACTIVATE_MIMICPARENTFOCUS )
+
+ screen.show(szHeroRow)
+
+ bFull = False
+ iCount = 0
+ for iLoopID in self.LegionNormalTroopCheck.keys():
+ if self.LegionNormalTroopCheck[iLoopID] == 1:
+ iCount += 1
+ if iCount >= gc.getGame().getHeroCapacity(self.iHero, False, -1):
+ bFull = True
if bModify and bFull:
for iLoopID in self.LegionNormalTroopCheck.keys():
- if self.LegionNormalTroopCheck[iLoopID] !=
1:
- control = "HeroButton" +
str(iLoopID)
+ if self.LegionNormalTroopCheck[iLoopID] != 1:
+ control = "HeroButton" + str(iLoopID)
screen.enable ( control, False )
control = "LeaderTroopCheck" + str(iLoopID)
screen.enable ( control, False )
elif not bModify:
for iLoopID in self.LegionNormalTroopCheck.keys():
if (iLoopID not in self.InitHasMovedMemberList) and (iLoopID not in
self.InitNotSamePlotMemberList):
- control = "HeroButton" +
str(iLoopID)
- screen.enable (control, True)
- control = "LeaderTroopCheck" +
str(iLoopID)
- screen.enable (control, True)
+ control = "HeroButton" + str(iLoopID)
+ screen.enable (control, True)
+ control = "LeaderTroopCheck" + str(iLoopID)
+ screen.enable (control, True)
# Will update the legion result panel
@@ -551,12 +552,12 @@
self.updateResult( True, True )
- gc.getGame().clearHeroLegionMember(self.iHero)
+ CyMessageControl().sendModNetMessage(12, self.iHero, -1, -1, -1)
else:
- gc.getGame().clearHeroLegionMember(self.iHero)
+ CyMessageControl().sendModNetMessage(12, self.iHero, -1, -1, -1)
for iUnitID in self.InitLegionMemberList:
- gc.getGame().addHeroLegionMember(self.iHero, iUnitID)
+ CyMessageControl().sendModNetMessage(4, iUnitID, self.iHero, 0, -1)
self.placeUnits()
self.updateResult( True, True )
@@ -585,10 +586,10 @@
return 1
if ( inputClass.getFunctionName() == "Confirm" ):
- iFlag = 0
- if self.bRegroup:
- iFlag = 1
- CyMessageControl().sendModNetMessage(9,
self.iPlayer, self.iHero, iFlag, -1)
+ iFlag = 0
+ if self.bRegroup:
+ iFlag = 1
+ CyMessageControl().sendModNetMessage(9, self.iPlayer, self.iHero,
iFlag, -1)
screen.hideScreen()
return 1
@@ -629,10 +630,10 @@
if gc.getGame().getHeroLegionSize(self.iHero) > 1:
iUnitID = gc.getGame().getHeroLegionMemberAt(self.iHero, 1)
if iUnitID != -1:
-
self.LegionLeaderTroopCheck[iUnitID] = 1
- szName
= "LeaderTroopCheck" + str(iUnitID)
- screen.setState(
szName, True )
- self.updateResult(
True, True )
+ self.LegionLeaderTroopCheck[iUnitID] = 1
+ szName = "LeaderTroopCheck" + str(iUnitID)
+ screen.setState( szName, True )
+ self.updateResult( True, True )
return 1
@@ -670,10 +671,10 @@
if gc.getGame().getHeroLegionSize(self.iHero) > 1:
iUnitID = gc.getGame().getHeroLegionMemberAt(self.iHero, 1)
if iUnitID != -1:
-
self.LegionLeaderTroopCheck[iUnitID] = 1
- szName
= "LeaderTroopCheck" + str(iUnitID)
-
screen.setState( szName, True )
-
self.updateResult( True, True )
+ self.LegionLeaderTroopCheck[iUnitID] = 1
+ szName = "LeaderTroopCheck" + str(iUnitID)
+ screen.setState( szName, True )
+ self.updateResult( True, True )
return 1
=======================================
--- /trunk/The History of Three
Kingdoms/Assets/Python/Screens/CvHeroAdvisor.py Thu Sep 24 10:17:15 2009
+++ /trunk/The History of Three
Kingdoms/Assets/Python/Screens/CvHeroAdvisor.py Fri Sep 25 08:21:08 2009
@@ -9,6 +9,7 @@
import CvScreenEnums
import BugUtil
+import WidgetUtil
# globals
gc = CyGlobalContext()
@@ -21,7 +22,7 @@
"Hero Advisor Screen"
def __init__(self):
- self.iHero = -1
+ self.iHero = -1
self.iScreen = -1
self.nWidgetCount = 0
self.nLineCount = 0
@@ -31,6 +32,9 @@
self.DEBUG_DROPDOWN_ID = "HeroAdvisorDropdownWidget"
self.EXIT_ID = "HeroAdvisorExitWidget"
self.BACKGROUND_ID = "HeroAdvisorBackground"
+ self.PersuadeWidget = WidgetUtil.createWidget("WIDGET_PERSUADE")
+ self.ExecuteWidget = WidgetUtil.createWidget("WIDGET_EXECUTE")
+ self.ReleaseWidget = WidgetUtil.createWidget("WIDGET_RELEASE")
self.X_SCREEN = 500
self.Y_SCREEN = 396
self.W_SCREEN = 960
@@ -150,7 +154,7 @@
self.SCREEN_DICT = {
"RECRUITMENT": 0,
"INFO" : 1,
- "PRISONER" : 2,
+ "PRISONER" : 2,
}
self.REV_SCREEN_DICT = {}
@@ -161,13 +165,13 @@
self.DRAW_DICT = {
"RECRUITMENT": self.drawRecruitment,
"INFO" : self.drawInfo,
- "PRISONER" : self.drawPrisoner,
+ "PRISONER" : self.drawPrisoner,
}
self.TXT_KEY_DICT = {
"RECRUITMENT": "TXT_KEY_HERO_ADVISOR_RECRUITMENT",
"INFO" : "TXT_KEY_HERO_ADVISOR_INFO",
- "PRISONER" : "TXT_KEY_HERO_ADVISOR_PRISONER",
+ "PRISONER" : "TXT_KEY_HERO_ADVISOR_PRISONER",
}
self.ORDER_LIST = ["RECRUITMENT", "INFO", "PRISONER"]
@@ -367,7 +371,7 @@
screen = self.getScreen()
for sWidget in self.WidgetNames:
- screen.deleteWidget(sWidget)
+ screen.deleteWidget(sWidget)
# Some spacing variables to help with the layout
iOutsideGap = 6
@@ -562,7 +566,7 @@
screen = self.getScreen()
for sWidget in self.WidgetNames:
- screen.deleteWidget(sWidget)
+ screen.deleteWidget(sWidget)
# Some spacing variables to help with the layout
iOutsideGap = 6
@@ -631,26 +635,27 @@
# loop through all other heroes and add their rows; show available first
lOurHeroes = []
-## lEmployedHeroes = []
+ lEmployedHeroes = []
for iLoopHero in range(gc.getNumHeroInfos()):
if gc.getGame().getHeroDebutStatus(iLoopHero) ==
gc.getGame().getActivePlayer():
lOurHeroes.append(iLoopHero)
-## elif gc.getGame().getHeroDebutStatus(iLoopHero) >= 0:
-## lEmployedHeroes.append(iLoopHero)
+ elif gc.getGame().getHeroDebutStatus(iLoopHero) >= 0:
+ if gc.getGame().getHeroCapturePlayer(iLoopHero) ==
gc.getGame().getActivePlayer():
+ lEmployedHeroes.append(iLoopHero)
+ else:
+ pLoopHero =
gc.getPlayer(gc.getGame().getHeroDebutStatus(iLoopHero)).getUnit(gc.getGame().getHeroUnitID(iLoopHero))
+ if not pLoopHero.isNone():
+ pPlot = pLoopHero.plot()
+ if pPlot.isActiveVisible(gc.getGame().isDebugMode()):
+ lEmployedHeroes.append(iLoopHero)
iCount = 0
for iLoopHero in lOurHeroes:
self.drawInfoRow(screen, mainPanelName, iLoopHero,
PanelStyles.PANEL_STYLE_STANDARD,
gc.getGame().getHeroDebutStatus(iLoopHero), iCount)
iCount += 1
-
- if gc.getGame().isDebugMode():
- lEmployedHeroes = []
- for iLoopHero in range(gc.getNumHeroInfos()):
- if
gc.getGame().getHeroDebutStatus(iLoopHero) >= 0:
- lEmployedHeroes.append(iLoopHero)
- for iLoopHero in lEmployedHeroes:
- self.drawInfoRow(screen, mainPanelName,
iLoopHero, PanelStyles.PANEL_STYLE_STANDARD,
gc.getGame().getHeroDebutStatus(iLoopHero), iCount)
- iCount += 1
+ for iLoopHero in lEmployedHeroes:
+ self.drawInfoRow(screen, mainPanelName, iLoopHero,
PanelStyles.PANEL_STYLE_STANDARD,
gc.getGame().getHeroDebutStatus(iLoopHero), iCount)
+ iCount += 1
# draws the current hero unit's stats
@@ -730,8 +735,8 @@
itemName = self.getNextWidgetName()
screen.setTextAt(itemName, infoPanelName,
BugUtil.getPlainText("TXT_KEY_PEDIA_HERO_POTENTIAL_NO_BULLET"),
CvUtil.FONT_LEFT_JUSTIFY, iLeft + 42 + iRowHeight + iInsideGap, iInsideGap
+ 10, -0.1, FontTypes.GAME_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1)
elif gc.getGame().getHeroCapturePlayer(iLoopHero) != -1:
- itemName = self.getNextWidgetName()
- screen.setTextAt(itemName, infoPanelName,
BugUtil.getPlainText("TXT_KEY_PEDIA_HERO_IMPRISONED"),
CvUtil.FONT_LEFT_JUSTIFY, iLeft + 42 + iRowHeight + iInsideGap, iInsideGap,
-0.1, FontTypes.GAME_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1)
+ itemName = self.getNextWidgetName()
+ screen.setTextAt(itemName, infoPanelName,
BugUtil.getPlainText("TXT_KEY_PEDIA_HERO_IMPRISONED"),
CvUtil.FONT_LEFT_JUSTIFY, iLeft + 42 + iRowHeight + iInsideGap, iInsideGap,
-0.1, FontTypes.GAME_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1)
iCount = 0
for szUnitCombat in ["MELEE", "MOUNTED", "ARCHER", "SIEGE", "NAVAL"]:
@@ -781,14 +786,14 @@
if iDebutStatus >= 0:
for iIndex in range (gc.getGame().getHeroLegionSize(iLoopHero)):
pMember =
gc.getPlayer(iDebutStatus).getUnit(gc.getGame().getHeroLegionMemberAt(iLoopHero,
iIndex))
- if pMember.getLeaderHero() == iLoopHero:
- szButton =
gc.getHeroInfo(pMember.getHeroType()).getButton()
- widget =
WidgetTypes.WIDGET_PEDIA_JUMP_TO_HERO
- iData1 = pMember.getHeroType()
- else:
- szButton = pMember.getButton()
- widget =
WidgetTypes.WIDGET_PEDIA_JUMP_TO_UNIT
- iData1 = pMember.getUnitType()
+ if pMember.getLeaderHero() == iLoopHero:
+ szButton = gc.getHeroInfo(pMember.getHeroType()).getButton()
+ widget = WidgetTypes.WIDGET_PEDIA_JUMP_TO_HERO
+ iData1 = pMember.getHeroType()
+ else:
+ szButton = pMember.getButton()
+ widget = WidgetTypes.WIDGET_PEDIA_JUMP_TO_UNIT
+ iData1 = pMember.getUnitType()
screen.appendMultiListButton( LegionMembers, szButton, 0, widget,
iData1, -1, False )
screen.show( LegionMembers )
@@ -843,39 +848,39 @@
iIncrement = 1
self.PrisonerHeroes = []
for iHero in range(gc.getNumHeroInfos()):
- if gc.getGame().getHeroCapturePlayer(iHero) ==
self.iActiveLeader:
- self.PrisonerHeroes.append(iHero)
- infoPanelName = "HeroRow" + str(iHero)
- screen.attachPanelAt( szPanel,
infoPanelName, "", "", False, False, PanelStyles.PANEL_STYLE_STANDARD,
iIncrement, iButtonSize * iCount + iIncrement * (iCount + 1),
self.W_HERO_PANE - 35, iButtonSize + iIncrement * 2,
WidgetTypes.WIDGET_GENERAL, -1, -1 )
- screen.setActivation( infoPanelName,
ActivationTypes.ACTIVATE_MIMICPARENTFOCUS)
- screen.hide(infoPanelName)
-
- itemName = "HeroButton" + str(iHero)
- screen.addCheckBoxGFCAt( infoPanelName,
itemName, gc.getHeroInfo(iHero).getButton(),
ArtFileMgr.getInterfaceArtInfo("BUTTON_HILITE_SQUARE").getPath(),
iIncrement, iIncrement, iButtonSize, iButtonSize,
WidgetTypes.WIDGET_GENERAL, iHero, -1, ButtonStyles.BUTTON_STYLE_LABEL,
False )
-
- if iCount == 0:
- self.iHero = iHero
- screen.setState("HeroButton" +
str(iHero), True)
- self.drawPediaContent(iHero)
- self.updateHandleButtons(iHero,
iLeft, iInsideGap, iTop)
-
- iCount += 1
-
- screen.show(infoPanelName)
-
- def updatePrisoners(self, iHero):
- self.PrisonerHeroes.remove(iHero)
- screen = self.getScreen()
- screen.deleteWidget("HeroRow" + str(iHero))
- screen.deleteWidget("HeroButton" + str(iHero))
-
- if len(self.PrisonerHeroes) > 0:
- self.iHero = self.PrisonerHeroes[0]
- screen.setState("HeroButton" + str(self.iHero),
True)
- self.drawPediaContent(self.iHero)
- self.updateHandleButtons(self.iHero, 16, 10, 66)
- else:
- screen.hideScreen()
+ if gc.getGame().getHeroCapturePlayer(iHero) == self.iActiveLeader:
+ self.PrisonerHeroes.append(iHero)
+ infoPanelName = "HeroRow" + str(iHero)
+ screen.attachPanelAt( szPanel, infoPanelName, "", "", False, False,
PanelStyles.PANEL_STYLE_STANDARD, iIncrement, iButtonSize * iCount +
iIncrement * (iCount + 1), self.W_HERO_PANE - 35, iButtonSize + iIncrement
* 2, WidgetTypes.WIDGET_GENERAL, -1, -1 )
+ screen.setActivation( infoPanelName,
ActivationTypes.ACTIVATE_MIMICPARENTFOCUS)
+ screen.hide(infoPanelName)
+
+ itemName = "HeroButton" + str(iHero)
+ screen.addCheckBoxGFCAt( infoPanelName, itemName,
gc.getHeroInfo(iHero).getButton(),
ArtFileMgr.getInterfaceArtInfo("BUTTON_HILITE_SQUARE").getPath(),
iIncrement, iIncrement, iButtonSize, iButtonSize,
WidgetTypes.WIDGET_GENERAL, iHero, -1, ButtonStyles.BUTTON_STYLE_LABEL,
False )
+
+ if iCount == 0:
+ self.iHero = iHero
+ screen.setState("HeroButton" + str(iHero), True)
+ self.drawPediaContent(iHero)
+ self.updateHandleButtons(iHero, iLeft, iInsideGap, iTop)
+
+ iCount += 1
+
+ screen.show(infoPanelName)
+
+ def updatePrisoners(self, iHero):
+ self.PrisonerHeroes.remove(iHero)
+ screen = self.getScreen()
+ screen.deleteWidget("HeroRow" + str(iHero))
+ screen.deleteWidget("HeroButton" + str(iHero))
+
+ if len(self.PrisonerHeroes) > 0:
+ self.iHero = self.PrisonerHeroes[0]
+ screen.setState("HeroButton" + str(self.iHero), True)
+ self.drawPediaContent(self.iHero)
+ self.updateHandleButtons(self.iHero, 16, 10, 66)
+ else:
+ screen.hideScreen()
def drawPediaContent(self, iHero):
screen = self.getScreen()
@@ -899,18 +904,62 @@
self.placeHistory(iHero)
def updateHandleButtons(self, iHero, iLeft, iInsideGap, iTop):
- screen = self.getScreen()
-
- if gc.getGame().willHeroJoinFaction(iHero,
self.iActiveLeader):
- screen.setButtonGFC( "Persuade",
localText.getText("TXT_KEY_SCREEN_PERSUADE", ()), "", iLeft + iInsideGap,
iTop + 2, 76, 30, WidgetTypes.WIDGET_GENERAL, -1, -1,
ButtonStyles.BUTTON_STYLE_STANDARD )
- screen.setActivation( "Persuade",
ActivationTypes.ACTIVATE_MIMICPARENTFOCUS )
- else:
- screen.deleteWidget( "Persuades" )
-
- screen.setButtonGFC( "Execute",
localText.getText("TXT_KEY_SCREEN_EXECUTE", ()), "", iLeft + 76 +
iInsideGap * 2, iTop + 2, 76, 30, WidgetTypes.WIDGET_GENERAL, -1, -1,
ButtonStyles.BUTTON_STYLE_STANDARD )
+ screen = self.getScreen()
+
+ if gc.getGame().willHeroJoinFaction(iHero, self.iActiveLeader):
+ screen.setButtonGFC( "Persuade",
localText.getText("TXT_KEY_SCREEN_PERSUADE", ()), "", iLeft + iInsideGap,
iTop + 2, 76, 30, self.PersuadeWidget, -1, -1,
ButtonStyles.BUTTON_STYLE_STANDARD )
+ screen.setActivation( "Persuade",
ActivationTypes.ACTIVATE_MIMICPARENTFOCUS )
+ else:
+ screen.deleteWidget( "Persuades" )
+
+ screen.setButtonGFC( "Execute",
localText.getText("TXT_KEY_SCREEN_EXECUTE", ()), "", iLeft + 76 +
iInsideGap * 2, iTop + 2, 76, 30, self.ExecuteWidget, -1, -1,
ButtonStyles.BUTTON_STYLE_STANDARD )
screen.setActivation( "Execute",
ActivationTypes.ACTIVATE_MIMICPARENTFOCUS )
- screen.setButtonGFC( "Release",
localText.getText("TXT_KEY_SCREEN_RELEASE", ()), "", iLeft + 76 * 2 +
iInsideGap * 3, iTop + 2, 76, 30, WidgetTypes.WIDGET_GENERAL, -1, -1,
ButtonStyles.BUTTON_STYLE_STANDARD )
+ screen.setButtonGFC( "Release",
localText.getText("TXT_KEY_SCREEN_RELEASE", ()), "", iLeft + 76 * 2 +
iInsideGap * 3, iTop + 2, 76, 30, self.ReleaseWidget, -1, -1,
ButtonStyles.BUTTON_STYLE_STANDARD )
screen.setActivation( "Release",
ActivationTypes.ACTIVATE_MIMICPARENTFOCUS )
+
+ iPlayer = gc.getGame().getHeroDebutStatus(iHero)
+ if gc.getPlayer(self.iActiveLeader).canContact(iPlayer):
+ screen.setButtonGFC( "Trade", localText.getText("TXT_KEY_SCREEN_TRADE",
()), "", iLeft + 76 * 3 + iInsideGap * 4, iTop + 2, 76, 30,
WidgetTypes.WIDGET_CONTACT_CIV, iPlayer, -1,
ButtonStyles.BUTTON_STYLE_STANDARD )
+ screen.setActivation( "Trade",
ActivationTypes.ACTIVATE_MIMICPARENTFOCUS )
+
+ szText = ""
+ iPlayer = gc.getGame().getHeroDebutStatus(iHero)
+ if iPlayer >= 0 and gc.getPlayer(iPlayer).isAlive():
+ WidgetUtil.setWidgetHelpText(self.PersuadeWidget,
localText.getText("TXT_KEY_PERSUADE_HELP_PLAYER",
(gc.getHeroInfo(iHero).getDescription(),
gc.getPlayer(iPlayer).getCivilizationDescription(0))))
+ WidgetUtil.setWidgetHelpText(self.ExecuteWidget,
localText.getText("TXT_KEY_EXECUTE_HELP_PLAYER",
(gc.getHeroInfo(iHero).getDescription(),
gc.getPlayer(iPlayer).getCivilizationDescription(0))))
+ WidgetUtil.setWidgetHelpText(self.ReleaseWidget,
localText.getText("TXT_KEY_RELEASE_HELP_PLAYER",
(gc.getHeroInfo(iHero).getDescription(),
gc.getPlayer(iPlayer).getCivilizationDescription(0))))
+ else:
+ WidgetUtil.setWidgetHelpText(self.PersuadeWidget,
localText.getText("TXT_KEY_PERSUADE_HELP",
(gc.getHeroInfo(iHero).getDescription(),)))
+ WidgetUtil.setWidgetHelpText(self.ExecuteWidget,
localText.getText("TXT_KEY_EXECUTE_HELP",
(gc.getHeroInfo(iHero).getDescription(),)))
+ WidgetUtil.setWidgetHelpText(self.ReleaseWidget,
localText.getText("TXT_KEY_RELEASE_HELP",
(gc.getHeroInfo(iHero).getDescription(),)))
+
+
+ def updateHelpText(self, iData2):
+ screen = self.getScreen()
+
+ szText = ""
+ iPlayer = gc.getGame().getHeroDebutStatus(self.iHero)
+ if iData2 == 10001:
+ if iPlayer >= 0 and gc.getPlayer(iPlayer).isAlive():
+ szText = localText.getText("TXT_KEY_PERSUADE_HELP_PLAYER",
(gc.getHeroInfo(self.iHero).getDescription(),
gc.getPlayer(iPlayer).getCivilizationDescription(0)))
+ else:
+ szText = localText.getText("TXT_KEY_PERSUADE_HELP",
(gc.getHeroInfo(self.iHero).getDescription(),))
+ elif iData2 == 10002:
+ if iPlayer >= 0 and gc.getPlayer(iPlayer).isAlive():
+ szText = localText.getText("TXT_KEY_EXECUTE_HELP_PLAYER",
(gc.getHeroInfo(self.iHero).getDescription(),
gc.getPlayer(iPlayer).getCivilizationDescription(0)))
+ else:
+ szText = localText.getText("TXT_KEY_EXECUTE_HELP",
(gc.getHeroInfo(self.iHero).getDescription(),))
+ elif iData2 == 10003:
+ if iPlayer >= 0 and gc.getPlayer(iPlayer).isAlive():
+ szText = localText.getText("TXT_KEY_RELEASE_HELP_PLAYER",
(gc.getHeroInfo(self.iHero).getDescription(),
gc.getPlayer(iPlayer).getCivilizationDescription(0)))
+ else:
+ szText = localText.getText("TXT_KEY_RELEASE_HELP",
(gc.getHeroInfo(self.iHero).getDescription(),))
+ elif iData2 == 10004:
+ if iPlayer >= 0 and gc.getPlayer(iPlayer).isAlive():
+ szText = localText.getText("TXT_KEY_TRADE_HELP_PLAYER",
(gc.getPlayer(iPlayer).getCivilizationDescription(0),
gc.getHeroInfo(self.iHero).getDescription()))
+
+ CyInterface().addImmediateMessage(str(iData2), '')
+ screen.setTextAt( "Help", "Header", szText, CvUtil.FONT_LEFT_JUSTIFY, 76
* 4 + iInsideGap * 5, 10, 0, FontTypes.GAME_FONT,
WidgetTypes.WIDGET_GENERAL, -1, -1)
def placeCivAndBelief(self, iHero):
screen = self.getScreen()
@@ -1119,26 +1168,32 @@
screen.setState(functionName, True)
return 1
if inputClass.getFunctionName() == "Persuade":
- if self.iHero != -1:
-
CyMessageControl().sendModNetMessage(6, self.iHero, self.iActiveLeader, -1,
-1)
- self.updatePrisoners(self.iHero)
- return 1
- else:
- return 0
- if inputClass.getFunctionName() == "Execute":
- if self.iHero != -1:
-
CyMessageControl().sendModNetMessage(7, self.iHero, self.iActiveLeader, -1,
-1)
- self.updatePrisoners(self.iHero)
- return 1
- else:
- return 0
- if inputClass.getFunctionName() == "Release":
- if self.iHero != -1:
-
CyMessageControl().sendModNetMessage(8, self.iHero, self.iActiveLeader, -1,
-1)
- self.updatePrisoners(self.iHero)
- return 1
- else:
- return 0
+ if self.iHero != -1:
+ CyMessageControl().sendModNetMessage(6, self.iHero,
self.iActiveLeader, -1, -1)
+ self.updatePrisoners(self.iHero)
+ return 1
+ else:
+ return 0
+ if inputClass.getFunctionName() == "Execute":
+ if self.iHero != -1:
+ CyMessageControl().sendModNetMessage(7, self.iHero,
self.iActiveLeader, -1, -1)
+ self.updatePrisoners(self.iHero)
+ return 1
+ else:
+ return 0
+ if inputClass.getFunctionName() == "Release":
+ if self.iHero != -1:
+ CyMessageControl().sendModNetMessage(8, self.iHero,
self.iActiveLeader, -1, -1)
+ self.updatePrisoners(self.iHero)
+ return 1
+ else:
+ return 0
+ if inputClass.getFunctionName() == "Trade":
+ if self.iHero != -1:
+ self.getScreen().hideScreen()
+ return 1
+ else:
+ return 0
elif (inputClass.getNotifyCode() ==
NotifyCode.NOTIFY_LISTBOX_ITEM_SELECTED):
if (inputClass.getFunctionName() + str(inputClass.getID()) ==
self.getWidgetName(self.DEBUG_DROPDOWN_ID)):
print 'debug dropdown event'
=======================================
--- /trunk/The History of Three
Kingdoms/Assets/Python/Screens/CvLegionScreen.py Sat Sep 19 05:22:49 2009
+++ /trunk/The History of Three
Kingdoms/Assets/Python/Screens/CvLegionScreen.py Fri Sep 25 08:21:08 2009
@@ -124,8 +124,9 @@
screen.addPanel( "LegionMainPanel", u"", u"", True, True, iX, iY,
xPanelWidth, yPanelHeight, PanelStyles.PANEL_STYLE_MAIN )
screen.addPanel( "HeroPortraitPanel", u"", u"", True, False, iX +
self.iIncrement * 3, iY + self.iIncrement * 2, self.iPortraitSize + 2 *
(iMargin - self.iIncrement * 3), self.iPortraitSize + 2 * (iMargin -
self.iIncrement * 2), PanelStyles.PANEL_STYLE_BLUE50 )
- screen.setButtonGFC( "Clear", localText.getText("TXT_KEY_SCREEN_CLEAR",
()), "", iX + xPanelWidth - self.iButtonWidth * 3 - self.iIncrement * 10,
iY + yPanelHeight - self.iButtonHeight - self.iIncrement * 4,
self.iButtonWidth, self.iButtonHeight, WidgetTypes.WIDGET_GENERAL, -1, -1,
ButtonStyles.BUTTON_STYLE_STANDARD )
- screen.setActivation( "Clear", ActivationTypes.ACTIVATE_MIMICPARENTFOCUS
)
+ if len(self.InitNotSamePlotMemberList) == 0 and
len(self.InitHasMovedMemberList) == 0:
+ screen.setButtonGFC( "Clear", localText.getText("TXT_KEY_SCREEN_CLEAR",
()), "", iX + xPanelWidth - self.iButtonWidth * 3 - self.iIncrement * 10,
iY + yPanelHeight - self.iButtonHeight - self.iIncrement * 4,
self.iButtonWidth, self.iButtonHeight, WidgetTypes.WIDGET_GENERAL, -1, -1,
ButtonStyles.BUTTON_STYLE_STANDARD )
+ screen.setActivation( "Clear",
ActivationTypes.ACTIVATE_MIMICPARENTFOCUS )
screen.setButtonGFC( "Cancel",
localText.getText("TXT_KEY_SCREEN_CANCEL", ()), "", iX + xPanelWidth -
self.iButtonWidth * 2 - self.iIncrement * 9, iY + yPanelHeight -
self.iButtonHeight - self.iIncrement * 4, self.iButtonWidth,
self.iButtonHeight, WidgetTypes.WIDGET_CLOSE_SCREEN, -1, -1,
ButtonStyles.BUTTON_STYLE_STANDARD )
screen.setActivation( "Cancel",
ActivationTypes.ACTIVATE_MIMICPARENTFOCUS )
screen.setButtonGFC( "Confirm",
localText.getText("TXT_KEY_SCREEN_CONFIRM", ()), "", iX + xPanelWidth -
self.iButtonWidth - self.iIncrement * 8, iY + yPanelHeight -
self.iButtonHeight - self.iIncrement * 4, self.iButtonWidth,
self.iButtonHeight, WidgetTypes.WIDGET_FORM_LEGION, self.bRegroup,
self.iHero, ButtonStyles.BUTTON_STYLE_STANDARD )
@@ -675,12 +676,12 @@
self.updateResult( True, True )
- gc.getGame().clearHeroLegionMember(self.iHero)
+ CyMessageControl().sendModNetMessage(12, self.iHero, -1, -1, -1)
else:
- gc.getGame().clearHeroLegionMember(self.iHero)
+ CyMessageControl().sendModNetMessage(12, self.iHero, -1, -1, -1)
for iUnitID in self.InitLegionMemberList:
- gc.getGame().addHeroLegionMember(self.iHero, iUnitID)
+ CyMessageControl().sendModNetMessage(4, iUnitID, self.iHero, 0, -1)
self.placeUnits()
self.updateResult( True, True )
=======================================
--- /trunk/The History of Three
Kingdoms/Assets/Python/Screens/CvMainInterface.py Sat Sep 19 05:22:49 2009
+++ /trunk/The History of Three
Kingdoms/Assets/Python/Screens/CvMainInterface.py Fri Sep 25 08:21:08 2009
@@ -63,6 +63,10 @@
import ProgressBarUtil
# BUG - Progress Bar - Tick Marks - end
+# Sanguo Mod, widget help, start, by poyuzhe 09.25.09
+import WidgetUtil
+# Sanguo Mod, widget help, end
+
g_NumEmphasizeInfos = 0
g_NumCityTabTypes = 0
g_NumHurryInfos = 0
@@ -399,6 +403,10 @@
self.iField_View_Prev = -1
# BUG - field of view slider - end
+# Sanguo Mod, widget help, start, by poyuzhe 09.25.09
+ self.LegionHeroPortrait = WidgetUtil.createWidget("LegionHeroWidget")
+# Sanguo Mod, widget help, end
+
############## Basic operational functions ###################
@@ -1697,9 +1705,9 @@
if (self.nPLEGrpMode == self.PLE_GRP_LEGIONS):
iLegionHero = pUnit.getLegionHero()
if pUnit.isLeaderTroop():
- iLegionHero = 100000
- elif pUnit.getLeaderHero() !=
HeroTypes.NO_HERO and pUnit.getLegionHero() ==
gc.getPlayer(iPlayer).getUnit(gc.getGame().getHeroCoreTroop(pUnit.getLeaderHero())).getLegionHero():
- iLegionHero = 100000
+ iLegionHero = 100000
+ elif pUnit.getLeaderHero() != HeroTypes.NO_HERO and
pUnit.getLegionHero() ==
gc.getPlayer(iPlayer).getUnit(gc.getGame().getHeroCoreTroop(pUnit.getLeaderHero())).getLegionHero():
+ iLegionHero = 100000
iHeroType = pUnit.getHeroType()
iLeaderHero = pUnit.getLeaderHero()
else:
@@ -2020,10 +2028,10 @@
szLegionName = u"<font=2>" +
localText.getText("INTERFACE_PANE_LEGION_NAME",
(gc.getHeroInfo(pUnit.getLegionHero()).getDescription(), )) + u"</font>"
if (pUnit.getLegionHero() == pUnit.getHeroType()):
szLegionName += u"<font=2>" +
localText.getText("INTERFACE_PANE_CORE_TROOP", ()) + u"</font>"
- if (pUnit.getLeaderHero() != -1):
- szLegionName += u"<font=2>\n" +
localText.getText("INTERFACE_PANE_ARMY_NAME",
(gc.getHeroInfo(pUnit.getLeaderHero()).getDescription(), )) + u"</font>"
- if
(gc.getGame().getHeroCoreTroop(pUnit.getLeaderHero()) == pUnit.getID()):
- szLegionName += u"<font=2>" +
localText.getText("INTERFACE_PANE_LEADER_TROOP", ()) + u"</font>"
+ if (pUnit.getLeaderHero() != -1):
+ szLegionName += u"<font=2>\n" +
localText.getText("INTERFACE_PANE_ARMY_NAME",
(gc.getHeroInfo(pUnit.getLeaderHero()).getDescription(), )) + u"</font>"
+ if (gc.getGame().getHeroCoreTroop(pUnit.getLeaderHero()) ==
pUnit.getID()):
+ szLegionName += u"<font=2>" +
localText.getText("INTERFACE_PANE_LEADER_TROOP", ()) + u"</font>"
szLegionName = u"<font=2>" + localText.changeTextColor(szLegionName,
PleOpt.getUnitNameColor()) + u"</font>\n"
else:
szLegionName = u""
@@ -4174,17 +4182,17 @@
nCol += 1
#### Sanguo Mod Interface, start, added by poyuzhe 08.27.09
elif (self.nPLEGrpMode == self.PLE_GRP_LEGIONS):
- if
(iLastLegionHeroType == -2):
-
nRow = 0
- else:
- if
(iActLegionHeroType != iLastLegionHeroType):
-
nCol
+= 1
-
nRow
= 0
-
else:
-
nRow
+= 1
-
if
(nRow >= self.getMaxRow()):
-
nRow
= 0
-
nCol
+= 1
+ if (iLastLegionHeroType == -2):
+ nRow = 0
+ else:
+ if (iActLegionHeroType != iLastLegionHeroType):
+ nCol += 1
+ nRow = 0
+ else:
+ nRow += 1
+ if (nRow >= self.getMaxRow()):
+ nRow = 0
+ nCol += 1
#### Sanguo Mod Interface, end
elif (self.nPLEGrpMode == self.PLE_GRP_PROMO):
nRow = 0
@@ -4232,17 +4240,17 @@
nRow += 1
#### Sanguo Mod Interface, start, added by poyuzhe 08.27.09
elif (self.nPLEGrpMode == self.PLE_GRP_LEGIONS):
- if
(iLastLegionHeroType == -2):
-
nCol = 0
- else:
- if
(iActLegionHeroType != iLastLegionHeroType):
-
nRow
+= 1
-
nCol
= 0
-
else:
-
nCol
+= 1
-
if
(nCol >= self.getMaxCol()):
-
nCol
= 0
-
nRow
+= 1
+ if (iLastLegionHeroType == -2):
+ nCol = 0
+ else:
+ if (iActLegionHeroType != iLastLegionHeroType):
+ nRow += 1
+ nCol = 0
+ else:
+ nCol += 1
+ if (nCol >= self.getMaxCol()):
+ nCol = 0
+ nRow += 1
#### Sanguo Mod Interface, end
elif (self.nPLEGrpMode == self.PLE_GRP_PROMO):
nCol= 0
@@ -6627,13 +6635,19 @@
screen.setText( "LegionMemberStar", "Background", u"%c" %
CyGame().getSymbolID(FontSymbols.STAR_CHAR), CvUtil.FONT_LEFT_JUSTIFY, 10,
yResolution - 140, -0.1, FontTypes.SMALL_FONT, WidgetTypes.WIDGET_GENERAL,
-1, -1)
else:
screen.setText( "LegionMemberStar", "Background", u"%c" %
CyGame().getSymbolID(FontSymbols.SILVER_STAR_CHAR),
CvUtil.FONT_LEFT_JUSTIFY, 10, yResolution - 140, -0.1,
FontTypes.SMALL_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1)
- szTempBuffer = "<img=%s size=24>
</img>" % (gc.getHeroInfo(pHeadSelectedUnit.getLegionHero()).getButton())
- szBuffer = szTempBuffer
- if
(pHeadSelectedUnit.getLeaderHero() != -1):
- iStarIncrement = 70
- szTempBuffer = "<img=%s
size=24> </img>" %
(gc.getHeroInfo(pHeadSelectedUnit.getLeaderHero()).getButton())
- szBuffer += szTempBuffer
-
screen.setText( "LegionHeroPortrait", "Background", szBuffer,
CvUtil.FONT_LEFT_JUSTIFY, 28, yResolution - 140, -0.1,
FontTypes.SMALL_FONT, WidgetTypes.WIDGET_GENERAL, -1, -1 )
+
+ szTempBuffer = "<img=%s size=24> </img>" %
(gc.getHeroInfo(pHeadSelectedUnit.getLegionHero()).getButton())
+ szBuffer = szTempBuffer
+ if (pHeadSelectedUnit.getLeaderHero() != -1):
+ iStarIncrement = 70
+ szTempBuffer = "<img=%s size=24> </img>" %
(gc.getHeroInfo(pHeadSelectedUnit.getLeaderHero()).getButton())
+ szBuffer += szTempBuffer
+ screen.setText( "LegionHeroPortrait", "Background", szBuffer,
CvUtil.FONT_LEFT_JUSTIFY, 28, yResolution - 140, -0.1,
FontTypes.SMALL_FONT, self.LegionHeroPortrait, -1, -1 )
+
+ szBuffer = localText.getText("TXT_KEY_MAIN_SCREEN_LEGION_HERO_HOVER",
(gc.getHeroInfo(pHeadSelectedUnit.getLegionHero()).getDescription(),
int(gc.getGame().getHeroExperience(pHeadSelectedUnit.getLegionHero())),
gc.getGame().heroExperienceNeeded(pHeadSelectedUnit.getLegionHero())))
+ if iStarIncrement == 70:
+ szBuffer += u"\n" +
localText.getText("TXT_KEY_MAIN_SCREEN_LEADER_HERO_HOVER",
(gc.getHeroInfo(pHeadSelectedUnit.getLeaderHero()).getDescription(),
int(gc.getGame().getHeroExperience(pHeadSelectedUnit.getLeaderHero())),
gc.getGame().heroExperienceNeeded(pHeadSelectedUnit.getLeaderHero())))
+ WidgetUtil.setWidgetHelpText(self.LegionHeroPortrait, szBuffer)
#### Sanguo Mod Hero, end
if (pHeadSelectedUnit.getHotKeyNumber() == -1):
@@ -6729,7 +6743,7 @@
#### Sanguo Mod Hero, start, added by poyuzhe 01.18.09
if (pHeadSelectedUnit.getLegionHero() != -1):
szTempBuffer = " (" + u"%d" %
(gc.getGame().getHeroLevel(pHeadSelectedUnit.getLegionHero())) + ")"
- szRightBuffer += localText.changeTextColor(szTempBuffer,
gc.getInfoTypeForString("COLOR_UNIT_TEXT"))
+ szLeftBuffer += localText.changeTextColor(szTempBuffer,
gc.getInfoTypeForString("COLOR_UNIT_TEXT"))
elif (gc.getUnitInfo(pHeadSelectedUnit.getUnitType()).isHero()):
szTempBuffer =
u"%d" %(gc.getGame().getHeroLevel(pHeadSelectedUnit.getHeroType()))
szRightBuffer = localText.changeTextColor(szTempBuffer,
gc.getInfoTypeForString("COLOR_UNIT_TEXT"))
=======================================
--- /trunk/The History of Three
Kingdoms/Assets/XML/GameInfo/CIV4CivicInfos.xml Thu Mar 12 19:42:26 2009
+++ /trunk/The History of Three
Kingdoms/Assets/XML/GameInfo/CIV4CivicInfos.xml Fri Sep 25 08:21:08 2009
@@ -1995,7 +1995,7 @@
<Description>TXT_KEY_CIVIC_THEOCRACY</Description>
<Civilopedia>TXT_KEY_CIVIC_THEOCRACY_PEDIA</Civilopedia>
<Strategy>TXT_KEY_CIVIC_THEOCRACY_STRATEGY</Strategy>
- <Button>Art/Interface/Buttons/Civic/Zhong_Shi.dds</Button>
+ <Button>Art/Interface/Buttons/Civic/strong.dds</Button>
<TechPrereq>NONE</TechPrereq>
<iAnarchyLength>1</iAnarchyLength>
<Upkeep>UPKEEP_MEDIUM</Upkeep>
=======================================
--- /trunk/The History of Three
Kingdoms/Assets/XML/Text/CIV4GameText_Sanguo_Changed.xml Thu Sep 24
10:17:15 2009
+++ /trunk/The History of Three
Kingdoms/Assets/XML/Text/CIV4GameText_Sanguo_Changed.xml Fri Sep 25
08:21:08 2009
@@ -1716,4 +1716,10 @@
<L1 /><L2 /><L3 /><L4 />
<Chinese>¹«ºî¼¶£¬ÌôÕ½ÄѶȴӴ˿ªÊ¼¼±¾çÔö¼ÓÁË¡£Î¬Ð޷Ѹü¸ßÁË£¬Ñз¢Ò²¸üÂýÁË£¬ÄãµÄÈËÃñÒ²¸üÄÑÈ¡Ôã¬ÄãµÄµçÄÔ¶ÔÊÖÃÇÏÔÈ»¸ü¼Ó´ÏÃ÷ÁË¡£</Chinese>
</TEXT>
+ <TEXT>
+ <Tag>INTERFACE_PANE_LEVEL</Tag>
+ <English>Level</English>
+<L1 /><L2 /><L3 /><L4 />
+ <Chinese>µÈ¼¶</Chinese>
+ </TEXT>
</Civ4GameText>
=======================================
--- /trunk/The History of Three
Kingdoms/Assets/XML/Text/CIV4GameText_Sanguo_Hero.xml Thu Sep 24 10:17:15
2009
+++ /trunk/The History of Three
Kingdoms/Assets/XML/Text/CIV4GameText_Sanguo_Hero.xml Fri Sep 25 08:21:08
2009
Binary file, no diff available.
=======================================
--- /trunk/The History of Three Kingdoms/Assets/XML/Units/CIV4UnitInfos.xml
Thu Sep 24 10:17:15 2009
+++ /trunk/The History of Three Kingdoms/Assets/XML/Units/CIV4UnitInfos.xml
Fri Sep 25 08:21:08 2009
@@ -13543,7 +13543,7 @@
<iCollateralDamage>0</iCollateralDamage>
<iCollateralDamageLimit>0</iCollateralDamageLimit>
<iCollateralDamageMaxUnits>0</iCollateralDamageMaxUnits>
- <iCityAttack>-30</iCityAttack>
+ <iCityAttack>0</iCityAttack>
<iCityDefense>0</iCityDefense>
<iAnimalCombat>0</iAnimalCombat>
<iHillsAttack>0</iHillsAttack>
=======================================
--- /trunk/The History of Three Kingdoms/CvGameCoreDLL/CvGame.cpp Thu Sep
24 10:17:15 2009
+++ /trunk/The History of Three Kingdoms/CvGameCoreDLL/CvGame.cpp Fri Sep
25 08:21:08 2009
@@ -5697,8 +5697,16 @@
{
if (GET_PLAYER((PlayerTypes)iJ).isAlive() &&
GET_PLAYER((PlayerTypes)iJ).getStateReligion() == eIndex)
{
-
GET_PLAYER(pNewValue->getOwnerINLINE()).AI_invalidateAttitudeCache((PlayerTypes)iJ);
-
GET_PLAYER((PlayerTypes)iJ).AI_invalidateAttitudeCache(pNewValue->getOwnerINLINE());
+ if (pOldValue != NULL)
+ {
+
GET_PLAYER(pOldValue->getOwnerINLINE()).AI_invalidateAttitudeCache((PlayerTypes)iJ);
+
GET_PLAYER((PlayerTypes)iJ).AI_invalidateAttitudeCache(pOldValue->getOwnerINLINE());
+ }
+ if (pNewValue != NULL)
+ {
+
GET_PLAYER(pNewValue->getOwnerINLINE()).AI_invalidateAttitudeCache((PlayerTypes)iJ);
+
GET_PLAYER((PlayerTypes)iJ).AI_invalidateAttitudeCache(pNewValue->getOwnerINLINE());
+ }
}
}
}
@@ -9858,6 +9866,7 @@
// Sanguo Mod Hero, start, added by poyuzhe 01.04.09
int CvGame::getHeroDebutStatus(HeroTypes eHero) const
{
+ // a value >= 0 represent employer player id, -1 means undebuted, -2
means debuted but unemployed, -3 means dead
FAssert (eHero > -1 && eHero < GC.getNumHeroInfos());
CvHeroMap::const_iterator iter = m_mapHeroes.find(eHero);
FAssert (iter != m_mapHeroes.end());
@@ -10341,8 +10350,11 @@
{
if (getHeroUnitCombatLevel(eHero, eUnitCombat) <
GC.getHeroInfo(eHero).getPotentialUnitCombatLevel(eUnitCombat))
{
- bAllReached = false;
- }
+ if (GC.getHeroInfo(eHero).getPotentialUnitCombatLevel(eUnitCombat) >
0)
+ {
+ bAllReached = false;
+ }
+ }
}
}
if (bAllReached)
@@ -10442,6 +10454,18 @@
FAssert (eHero > -1 && eHero < GC.getNumHeroInfos());
CvHeroMap::const_iterator iter = m_mapHeroes.find(eHero);
FAssert (iter != m_mapHeroes.end());
+ PlayerTypes ePlayer = (PlayerTypes)getHeroDebutStatus(eHero);
+ if (ePlayer > -1)
+ {
+ CvUnit* pHero = GET_PLAYER(ePlayer).getUnit(getHeroUnitID(eHero));
+ if (pHero != NULL && pHero->getHeroType() != eHero)
+ {
+ if (isHeroPromotionReady(pHero->getHeroType()))
+ {
+ return false;
+ }
+ }
+ }
return (iter->second).m_bPromotionReady;
}
@@ -11776,7 +11800,7 @@
{
PROFILE_FUNC();
- CvLeaderHeadInfo* pNewLeaderHeadInfo = new CvLeaderHeadInfo;
+ CvLeaderHeadInfo *pNewLeaderHeadInfo = new CvLeaderHeadInfo;
FAssert (pNewLeaderHeadInfo != NULL);
FAssert (GET_PLAYER(ePlayer).isAlive());
FAssert (eHero > -1 && eHero < GC.getNumHeroInfos());
@@ -11802,6 +11826,7 @@
pNewLeaderHeadInfo->setLeaderHead(szBuffer);
pNewLeaderHeadInfo->setFavoriteReligion(GC.getHeroInfo(eHero).getBelief());
+
pNewLeaderHeadInfo->setFavoriteCivic(getSorenRandNum(GC.getNumCivicInfos(),"random
civic"));
pNewLeaderHeadInfo->setHasTrait(getSorenRandNum(GC.getNumTraitInfos(), "pick
random trait"), true); // HoTK ToDo
pNewLeaderHeadInfo->setHasTrait(getSorenRandNum(GC.getNumTraitInfos(), "pick
random trait"), true);
@@ -12056,6 +12081,7 @@
if (getHeroUnitID(eHero) != -1)
{
CvUnit* pHeroUnit =
GET_PLAYER(ePlayer).getUnit(getHeroUnitID(eHero));
+ GC.getGameINLINE().setHeroVitality(eHero, 0);
if (pHeroUnit->isCoreTroop())
{
pHeroUnit = pHeroUnit->dismissLegion();
=======================================
--- /trunk/The History of Three Kingdoms/CvGameCoreDLL/CvInfos.cpp Tue Sep
22 03:53:27 2009
+++ /trunk/The History of Three Kingdoms/CvGameCoreDLL/CvInfos.cpp Fri Sep
25 08:21:08 2009
@@ -15399,6 +15399,11 @@
{
m_iFavoriteReligion = i;
}
+
+void CvLeaderHeadInfo::setFavoriteCivic(int i)
+{
+ m_iFavoriteCivic = i;
+}
void CvLeaderHeadInfo::setHasTrait(int i, bool bNewValue)
{
=======================================
--- /trunk/The History of Three Kingdoms/CvGameCoreDLL/CvInfos.h Tue Sep 22
03:53:27 2009
+++ /trunk/The History of Three Kingdoms/CvGameCoreDLL/CvInfos.h Fri Sep 25
08:21:08 2009
@@ -3857,6 +3857,7 @@
void setStrategy(const wchar* szStrategy);
void setLeaderHead(const TCHAR* szLeaderHead);
void setFavoriteReligion(int i);
+ void setFavoriteCivic(int i);
void setHasTrait(int i, bool bNewValue);
// Sanguo Mod random leader, end
=======================================
--- /trunk/The History of Three Kingdoms/CvGameCoreDLL/CvPlayer.cpp Tue Sep
22 03:53:27 2009
+++ /trunk/The History of Three Kingdoms/CvGameCoreDLL/CvPlayer.cpp Fri Sep
25 08:21:08 2009
@@ -1841,7 +1841,7 @@
// Sanguo Mod Hero, start, added by poyuzhe 01.04.09
for (iI = 0; iI < GC.getNumHeroInfos(); iI++)
{
- if (GC.getHeroInfo((HeroTypes)iI).getLeaderType() ==
getLeaderType())
+ if (GC.getHeroInfo((HeroTypes)iI).getLeaderType() ==
getLeaderType() && GC.getGameINLINE().getHeroDebutStatus((HeroTypes)iI) < 0)
{
CvUnit* pHero =
initUnit((UnitTypes)GC.getHeroInfo((HeroTypes)iI).getUnitType(),
m_iStartingX, m_iStartingY);
pHero->setHeroType((HeroTypes)iI);
@@ -1853,6 +1853,7 @@
GC.getGameINLINE().setHeroUnitID((HeroTypes)iI,
pHero->getID());
}
}
+ recalculateGreatGeneralThreshold();
// Sanguo Mod Hero, end
}
}
@@ -2454,6 +2455,25 @@
iDamage = pOldCity->getDefenseDamage();
int iOldCityId = pOldCity->getID();
+ // Sanguo Mod hero, free own heroes, start, by poyuzhe 09.25.09
+ if (bConquest)
+ {
+ if (pOldCity->isCapital())
+ {
+ for (iI = 0; iI < GC.getNumHeroInfos(); iI++)
+ {
+ if (GC.getGameINLINE().getHeroCapturePlayer((HeroTypes)iI) ==
eOldOwner)
+ {
+ if (GC.getGameINLINE().getHeroDebutStatus((HeroTypes)iI) == getID())
+ {
+ GET_PLAYER(eOldOwner).freePlayerHeroes(getID(), (HeroTypes)iI);
+ }
+ }
+ }
+ }
+ }
+ // Sanguo Mod Hero, end
+
for (iI = 0; iI < GC.getNumSpecialistInfos(); ++iI)
{
// Sanguo Mod Emperor, start, by poyuzhe 12.04.08
@@ -4096,6 +4116,45 @@
return;
}
+void CvPlayer::freePlayerHeroes(PlayerTypes ePlayer, HeroTypes eHero)
+{
+ FAssert (GC.getGameINLINE().getHeroCapturePlayer(eHero) == getID())
+ FAssert (GC.getGameINLINE().getHeroDebutStatus(eHero) == ePlayer)
+
+ if (GET_PLAYER(ePlayer).isAlive())
+ {
+ int iX, iY;
+ CvCity* pCapital = GET_PLAYER(ePlayer).getCapitalCity();
+ if (pCapital != NULL)
+ {
+ iX = pCapital->getX_INLINE();
+ iY = pCapital->getY_INLINE();
+ }
+ else
+ {
+ int iLoop;
+ CvUnit* pLoopUnit = GET_PLAYER(ePlayer).firstUnit(&iLoop);
+ FAssert(pLoopUnit!= NULL);
+ iX = pLoopUnit->getX_INLINE();
+ iY = pLoopUnit->getY_INLINE();
+ }
+ CvUnit* pHero =
GET_PLAYER(ePlayer).initUnit((UnitTypes)GC.getHeroInfo(eHero).getUnitType(),
iX, iY);
+ pHero->setHeroType(eHero);
+ GC.getGameINLINE().setHeroUnitID(eHero, pHero->getID());
+ GC.getGameINLINE().setHeroCapturePlayer(eHero, NO_PLAYER);
+ CvWString szBuffer = gDLL->getText("TXT_KEY_HERO_FREED",
GC.getHeroInfo(eHero).getDescription());
+ gDLL->getInterfaceIFace()->addMessage(ePlayer, false,
GC.getEVENT_MESSAGE_TIME(), szBuffer, "AS2D_POSITIVE_DINK",
MESSAGE_TYPE_INFO, pHero->getButton(),
(ColorTypes)GC.getInfoTypeForString("COLOR_GREEN"), iX, iY, true, true);
+ if (isAlive())
+ {
+ gDLL->getInterfaceIFace()->addMessage(getID(), false,
GC.getEVENT_MESSAGE_TIME(), szBuffer, "AS2D_NEGATIVE_DINK",
MESSAGE_TYPE_INFO, pHero->getButton(),
(ColorTypes)GC.getInfoTypeForString("COLOR_RED"), iX, iY, true, true);
+ }
+ }
+ else
+ {
+ GC.getGameINLINE().setHeroDebutStatus(eHero, -2);
+ GC.getGameINLINE().setHeroCapturePlayer(eHero, NO_PLAYER);
+ }
+}
// Sanguo Mod Hero, end
// Sanguo Mod Hero, join legion, start, by poyuzhe 09.14.08
@@ -11702,10 +11761,14 @@
}
else
{
- setCombatExperience(getCombatExperience() - iExperienceThreshold);
- CyArgsList argsList;
- argsList.add(getID());
-
gDLL->getPythonIFace()->callFunction(PYScreensModule, "showCreateChampionScreen",
argsList.makeFunctionArgs());
+ // If the human player is not currently active, do not show create
champion screen, it would be out of sync
+ //if (GC.getGameINLINE().getActivePlayer() == getID())
+ //{
+ setCombatExperience(getCombatExperience() - iExperienceThreshold);
+ CyArgsList argsList;
+ argsList.add(getID());
+
gDLL->getPythonIFace()->callFunction(PYScreensModule, "showCreateChampionScreen",
argsList.makeFunctionArgs());
+ //}
}
// Sanguo Mod Hero, end
}
@@ -11845,21 +11908,13 @@
gDLL->openSlot(getID());
-/*************************************************************************************************/
-/** BETTER_BTS_AI_MOD 09/03/09
poyuzhe & jdog5000 */
-/**
*/
-/**
Efficiency
*/
-/*************************************************************************************************/
- // From Sanguo Mod Performance, ie the CAR Mod
+ // Sanguo Mod Performance, by poyuzhe and jdog5000, 09.03.09
// Attitude cache
- for( int iI = 0; iI < MAX_PLAYERS; iI++ )
+ for( iI = 0; iI < MAX_PLAYERS; iI++ )
{
GET_PLAYER((PlayerTypes)iI).AI_invalidateAttitudeCache(getID());
GET_PLAYER(getID()).AI_invalidateAttitudeCache((PlayerTypes)iI);
}
-/*************************************************************************************************/
-/** BETTER_BTS_AI_MOD
END */
-/*************************************************************************************************/
}
else
{
@@ -11868,6 +11923,24 @@
killCities();
killAllDeals();
+ // Sanguo Mod hero, trade prisoners, start, by poyuzhe 09.25.09
+ for (iI = 0; iI < GC.getNumHeroInfos(); iI++)
+ {
+ if (GC.getGameINLINE().getHeroCapturePlayer((HeroTypes)iI) == getID())
+ {
+ if (GC.getGameINLINE().getHeroDebutStatus((HeroTypes)iI) >= 0)
+ {
+
freePlayerHeroes((PlayerTypes)GC.getGameINLINE().getHeroDebutStatus((HeroTypes)iI),
(HeroTypes)iI);
+ }
+ else
+ {
+ GC.getGameINLINE().setHeroDebutStatus((HeroTypes)iI, -2);
+ GC.getGameINLINE().setHeroCapturePlayer((HeroTypes)iI, NO_PLAYER);
+ }
+ }
+ }
+ // Sanguo Mod Hero, end
+
setTurnActive(false);
gDLL->endMPDiplomacy();
=======================================
--- /trunk/The History of Three Kingdoms/CvGameCoreDLL/CvPlayer.h Mon Sep
14 21:47:19 2009
+++ /trunk/The History of Three Kingdoms/CvGameCoreDLL/CvPlayer.h Fri Sep
25 08:21:08 2009
@@ -1075,6 +1075,7 @@
void persuadeHero(HeroTypes eHero); // Exposed to Python
void executeHero(HeroTypes eHero); // Exposed to Python
void releaseHero(HeroTypes eHero); // Exposed to Python
+ void freePlayerHeroes(PlayerTypes ePlayer, HeroTypes eHero);
// Sanguo Mod Hero, end
// Sanguo Mod Hero, join legion, start, by poyuzhe 09.14.08
=======================================
--- /trunk/The History of Three Kingdoms/CvGameCoreDLL/CvPlayerAI.cpp Tue
Sep 22 03:53:27 2009
+++ /trunk/The History of Three Kingdoms/CvGameCoreDLL/CvPlayerAI.cpp Fri
Sep 25 08:21:08 2009
@@ -20024,11 +20024,6 @@
{
if (GC.getGameINLINE().getHeroDebutStatus((HeroTypes)iI) ==
getID() && GC.getGameINLINE().getHeroCapturePlayer((HeroTypes)iI) ==
NO_PLAYER)
{
- if (GC.getGameINLINE().isHeroPromotionReady((HeroTypes)iI))
- {
- GC.getGameINLINE().AI_promoteHero((HeroTypes)iI);
- }
-
GC.getGameINLINE().testHeroPromotionReady((HeroTypes)iI);
if (!isHuman() &&
GC.getGameINLINE().isHeroPromotionReady((HeroTypes)iI))
=======================================
--- /trunk/The History of Three Kingdoms/CvGameCoreDLL/CvUnit.cpp Thu Sep
24 10:17:15 2009
+++ /trunk/The History of Three Kingdoms/CvGameCoreDLL/CvUnit.cpp Fri Sep
25 08:21:08 2009
@@ -523,6 +523,7 @@
setTempStrengthModifier(pUnit->getTempStrengthModifier());
setHeroType(pUnit->getHeroType());
setLegionHero(pUnit->getLegionHero());
+ setLeaderHero(pUnit->getLeaderHero());
m_iLegionTurn = pUnit->getLegionTurn();
if (pUnit->getLegionHero() != NO_HERO)
{
@@ -537,6 +538,24 @@
GC.getGameINLINE().setHeroUnitID(getLegionHero(), getID());
GC.getGameINLINE().tempRemoveHeroCoreTroop(getLegionHero());
GC.getGameINLINE().addHeroCoreTroop(getLegionHero(), getID());
+
+ // if this unit is in the Army
+ if (pUnit->getLeaderHero() != NO_HERO)
+ {
+ if (pUnit->isLeaderTroop())
+ {
+ GC.getGameINLINE().setHeroUnitID(getLeaderHero(), getID());
+ GC.getGameINLINE().tempRemoveHeroCoreTroop(getLeaderHero());
+ GC.getGameINLINE().addHeroCoreTroop(getLeaderHero(), getID());
+ }
+ else
+ {
+ GC.getGameINLINE().deleteHeroLegionMember(getLeaderHero(),
pUnit->getID());
+ GC.getGameINLINE().addHeroLegionMember(getLeaderHero(), getID());
+ }
+ pUnit->setLeaderHero(NO_HERO);
+ }
+
// Set the old unit's hero type and leader unit to none
pUnit->setHeroType(NO_HERO);
pUnit->setLeaderUnitType(NO_UNIT);
@@ -546,6 +565,7 @@
// If the unit is just a plain member
GC.getGameINLINE().deleteHeroLegionMember(getLegionHero(),
pUnit->getID());
GC.getGameINLINE().addHeroLegionMember(getLegionHero(), getID());
+ pUnit->setLeaderHero(NO_HERO);
}
// Set the old unit's legion hero to none
pUnit->setLegionHero(NO_HERO);
@@ -3348,7 +3368,16 @@
// Sanguo Mod Hero, start, added by poyuzhe 01.17.09
case COMMAND_PROMOTION_HERO:
- GC.getGameINLINE().promoteHero(getHeroType(), (PromotionTypes)iData1);
+ if (getLeaderHero() == NO_HERO ||
GC.getGameINLINE().canPromoteHero(getHeroType(), (PromotionTypes)iData1))
+ {
+ GC.getGameINLINE().promoteHero(getHeroType(), (PromotionTypes)iData1);
+ }
+ else
+ {
+ FAssert (getLeaderHero() != NO_HERO);
+ FAssert (GC.getGameINLINE().canPromoteHero(getLeaderHero(),
(PromotionTypes)iData1));
+ GC.getGameINLINE().promoteHero(getLeaderHero(),
(PromotionTypes)iData1);
+ }
break;
// Sanguo Mod Hero, end
@@ -19486,6 +19515,10 @@
{
return false;
}
+ if (pMember->isHurt())
+ {
+ return false;
+ }
}
return true;
@@ -19501,6 +19534,10 @@
CvUnit* pHero = processAdvancedLegion(true, false);
+ GC.getGameINLINE().setLegionUnitMoved(pHero->getHeroType(), true);
+
+ gDLL->getInterfaceIFace()->setDirty(PlotListButtons_DIRTY_BIT, true);
+
return pHero;
}
=======================================
--- /trunk/The History of Three Kingdoms/Documents/changelog.txt Thu Sep 24
10:17:15 2009
+++ /trunk/The History of Three Kingdoms/Documents/changelog.txt Fri Sep 25
08:21:08 2009
@@ -1051,6 +1051,24 @@
ÐÞÕýAIµ¥Î»³¢ÊÔÔ¶³ÌºäÕ¨ÎÒ·½¸ñ×ÓÉϵÄÉèÊ©Ôì³ÉµÄCTD
»Ö¸´ÁËÔ°æµÄ³Ç±¤Í¼Ïñ
ÐÞÕýÏÔʾGDPµÈÄÚÈÝµÄÆÁÄ»ÖеÄÒ»´¦µ¼ÖÂÎÞ·¨ÏÔʾµÄ´íÎó
+ ÐÞÕýÐÅÏ¢ÆÁĻӢÐÛ¶à´øÒ»±øËùÐè¾ÑéÖµÓÐʱÉÙ1µÄBug
ͼÏñ£ºËæ»úÁìÐäµÄÍ·Ïñ±£³Ö³¤¿í±ÈÀý£¨Yitoo£©
¹æÔòµ÷Õû£ºÎ÷Á¹Æï±ø³õʼ»ñµÃÆï±ø½úÉý
½çÃæ£ºµ±·ý²µÄÓ¢ÐÛÔ¸ÒâͶ½µÊ±²¥ËÍÐÅÏ¢
+
+0.301: ÐÞÕý£ºÐÞÕýÓ¢ÐÛÕ½ËÀºó״̬ÉèΪÔÚÒ°µÄBug
+ ÐÞÕýÓÎÏ·ÖÐÓÐÁ½¸öÍæ¼ÒµÄÊÆÁ¦Ïàͬʱ³õʼӢÐÛ±»¸´ÖƵÄBug
+ ÐÞÕý±ø¿Æ½úÉýÉýÂúʱÓÐʱ»¹¿ÉÒÔÔÙÉýÒ»´ÎµÄBug
+ ÐÞÕý¹¥Õ¼ÐÅÄîÖÐÐijÇÊÐʱµÄCTD
+
ÐÞÕýͳ˧ӢÐÛ»ñȡнúÉýÎÞЧµÄBug£¨Èôͳ˧ӢÐÛºÍÇ×ÎÀ¶ÓÓ¢ÐÛͬʱ¿ÉÒÔ½úÉý£¬ÔòÇ×ÎÀ¶ÓÓ¢ÐÛ½úÉýÍê±Ïºó³öÏÖͳ˧ӢÐ۵ĽúÉý£©
+ ÐÞÕýÉý¼¶¼¯ÍžüÖеĵ¥Î»Ê±³ö´íµÄBug
+ ÐÞÕý×齨¾üÍÅÆÁÄ»ÖÐÒ»´¦¿Éµ¼Ö¶àÈËÓÎÏ·²»¼æÈݵÄBug
+ ÐÞÕýËæ»úµØÍ¼µÚÒ»¸öËæ»úÓ¢ÐÛËùÐè¾ÑéÖµÓë³õʼӢÐÛÊýÁ¿²»·û
+ ¹æÔòµ÷Õû£º¹¥Õ¼µÐ·½Ê×¶¼Ê±»áÕü¾ÈÎÒ·½·ý²
+ È¥µôÎ÷Á¹Æï±øµÄ×Ô´ø¹¥³Ç³Í·£
+ È¡ÏûÁËÈËÀàÍæ¼ÒÓ¢ÐÛ×Ô¶¯Éý¼¶
+ ͼÏñ£ºÌæ»»¡°Ç¿ÁÒ¡±ÕþÌåµÄͼ±ê
+ ½çÃæ£ºÓ¢ÐÛ¹ËÎÊÐÅÏ¢½çÃæ»áÏÔʾÎÒ·½Ä¿Ç°¿ÉÒÔ¿´µ½µÄÓ¢ÐÛ
+ ÔÚ·ý²ÆÁÄ»ÖÐÌí¼Ó¡°½»Òס±¿ì½Ý°´Å¥£¬²¢Ìí¼Ó°ïÖúÎÄ×Ö
+ ÐÞÕý²¿·Ö¾çÇéÖкºÏ׵ۺͻʵÛÐÐÔ¯µÄÓ¢ÎÄ
+ Èç¹û¾üÍÅ»ò¼¯ÍžüÎÞ·¨½âÉ¢£¬Ôò¾üÍÅÆÁÄ»ÖС°Çå¿Õ¡±Ñ¡Ïî²»»á³öÏÖ
=======================================
--- /trunk/The History of Three Kingdoms/Documents/changelog_en.txt Thu Sep
24 10:17:15 2009
+++ /trunk/The History of Three Kingdoms/Documents/changelog_en.txt Fri Sep
25 08:21:08 2009
@@ -1,3 +1,19 @@
+0.301: fix: fix a bug when a hero dies in combat his status is set to
unemployed
+ fix a bug when two players in the game use the same faction, the
initial free hero would get duplicated
+ fix a bug sometimes when a hero's unit combat levels are maximized he
can still choose that promotion
+ fix a CTD when capturing central city for a belief
+ fix a bug that promote leader hero has no effect. (Now if leader hero
and core troop hero both can be promoted, first promote core troop hero,
then leader hero)
+ fix a bug when upgrading units within an Army
+ fix a bug in forming legion interface which would result in OOS Error
+ fix a bug in random maps experience needed for first random hero do not
match current hero number
+ art: replacd Strong civic's button
+ rule treak: capture enemy capital will now free our own heroes
+ removed innate city attack penalty for Qiang Tribal Horsemen
+ removed human players auto promote heroes
+ Interface: in info screen of hero advisor play can now see heroes that
are visible to him/her
+ in prisoner screen of hero advisor add a button to initial hero trade
directly as well as some help text
+ the 'clear' choice in legion screen will no longer show if the
legion/army cannot be dismissed
+
0.300: fix: fix CTD when dismissing Army with only one unit
fix a bug that a 100 loyalty hero surrender to enemy
fix a bug that Army Guardian doesn't receive core troop promotions of
leader hero
=======================================
--- /trunk/The History of Three Kingdoms/PublicMaps/HoTK 51_51
196AD.CivBeyondSwordWBSave Thu Sep 24 10:17:15 2009
+++ /trunk/The History of Three Kingdoms/PublicMaps/HoTK 51_51
196AD.CivBeyondSwordWBSave Fri Sep 25 08:21:08 2009
@@ -12920,7 +12920,6 @@
EndUnit
BeginUnit
UnitType=UNIT_EMPEROR, UnitOwner=19
- UnitName=Emperor XianDi
Damage=0
Level=1, Experience=0
FacingDirection=4
=======================================
--- /trunk/The History of Three Kingdoms/PublicMaps/HoTK 51_51
no_city.CivBeyondSwordWBSave Thu Sep 24 10:17:15 2009
+++ /trunk/The History of Three Kingdoms/PublicMaps/HoTK 51_51
no_city.CivBeyondSwordWBSave Fri Sep 25 08:21:08 2009
@@ -9054,13 +9054,6 @@
FeatureType=FEATURE_FOREST, FeatureVariety=0
TerrainType=TERRAIN_GRASS
PlotType=1
- BeginUnit
- UnitType=UNIT_BAI_BO_ZEI, UnitOwner=32
- Damage=0
- Level=1, Experience=0
- FacingDirection=4
- UnitAIType=UNITAI_CITY_DEFENSE
- EndUnit
EndPlot
BeginPlot
x=27,y=31
@@ -16301,11 +16294,3 @@
TerrainType=TERRAIN_PLAINS
PlotType=0
EndPlot
-
-### Sign Info ###
-BeginSign
- plotX=27
- plotY=30
- playerType=-1
- caption=Emperor's Refuge
-EndSign
=======================================
--- /trunk/The History of Three Kingdoms/PublicMaps/HoTK 68_64
194AD.CivBeyondSwordWBSave Thu Sep 24 10:17:15 2009
+++ /trunk/The History of Three Kingdoms/PublicMaps/HoTK 68_64
194AD.CivBeyondSwordWBSave Fri Sep 25 08:21:08 2009
@@ -8006,7 +8006,6 @@
EndUnit
BeginUnit
UnitType=UNIT_EMPEROR, UnitOwner=16
- UnitName=Emperor XianDi
Damage=0
Level=1, Experience=0
FacingDirection=4
=======================================
--- /trunk/The History of Three Kingdoms/PublicMaps/HoTK 68_64
196AD.CivBeyondSwordWBSave Thu Sep 24 10:17:15 2009
+++ /trunk/The History of Three Kingdoms/PublicMaps/HoTK 68_64
196AD.CivBeyondSwordWBSave Fri Sep 25 08:21:08 2009
@@ -16453,7 +16453,6 @@
EndUnit
BeginUnit
UnitType=UNIT_EMPEROR, UnitOwner=19
- UnitName=Emperor XianDi
Damage=0
Level=1, Experience=0
FacingDirection=4
=======================================
--- /trunk/The History of Three Kingdoms/PublicMaps/HoTK 68_64
no_city.CivBeyondSwordWBSave Thu Sep 24 10:17:15 2009
+++ /trunk/The History of Three Kingdoms/PublicMaps/HoTK 68_64
no_city.CivBeyondSwordWBSave Fri Sep 25 08:21:08 2009
@@ -12414,13 +12414,6 @@
FeatureType=FEATURE_FOREST, FeatureVariety=0
TerrainType=TERRAIN_GRASS
PlotType=1
- BeginUnit
- UnitType=UNIT_BAI_BO_ZEI, UnitOwner=32
- Damage=0
- Level=1, Experience=0
- FacingDirection=4
- UnitAIType=UNITAI_CITY_DEFENSE
- EndUnit
EndPlot
BeginPlot
x=31,y=28
@@ -26191,11 +26184,3 @@
TerrainType=TERRAIN_TUNDRA
PlotType=2
EndPlot
-
-### Sign Info ###
-BeginSign
- plotX=31
- plotY=27
- playerType=-1
- caption=Emperor's Refuge
-EndSign
=======================================
--- /trunk/The History of Three Kingdoms/PublicMaps/HoTK 81_81
no_city.CivBeyondSwordWBSave Thu Sep 24 10:17:15 2009
+++ /trunk/The History of Three Kingdoms/PublicMaps/HoTK 81_81
no_city.CivBeyondSwordWBSave Fri Sep 25 08:21:08 2009
@@ -38266,11 +38266,3 @@
TerrainType=TERRAIN_GRASS
PlotType=2
EndPlot
-
-### Sign Info ###
-BeginSign
- plotX=43
- plotY=51
- playerType=-1
- caption=Emperor's Refuge
-EndSign
=======================================
--- /trunk/The History of Three Kingdoms/The History of Three Kingdoms.ini
Mon Sep 14 21:47:19 2009
+++ /trunk/The History of Three Kingdoms/The History of Three Kingdoms.ini
Fri Sep 25 08:21:08 2009
@@ -5,13 +5,13 @@
ModularLoading = 0
; Skip Main menu
-SkipMainMenu = 0
+SkipMainMenu = 1
; Custom Art from user folder is not loaded
-NoCustomArt = 0
+NoCustomArt = 1
; Custom XML and Python from user folder are not loaded
-NoCustomAssets = 0
+NoCustomAssets = 1
; No Custom Scenario option in main menu
NoCustomScenario = 0