?? cbrunot.cpp
字號:
pUnit->Soldier.nResource = RUN_RESOURCE_GET;
// 糧倉特殊,要從該糧倉所屬的君主的糧食中扣除
*pSource -= RUN_RESOURCE_GET;
}
// 如果資源枯竭,刪除該資源
if( *pSource <= 0 )
{
pUnit->Soldier.nResource += *pSource; // 補回多采的資源
pU->nLife = 0;
struct CTRL_TASK_STRUCT task;
CTRL_TASK_Clear( &task );
task.nID = pU->nID;
task.bIRQ = TRUE;
task.nTaskID = SHANCHU;
task.bDone = TRUE;
CTRL_TASK_DeployByComputer( pUnit->Draw.nPlayer, &task );
}
// 修改了一個Bug。原來采集鐵礦時鐵礦的資源顯示不會隨時更新
// 現在改正, July 18, 1997
if( pU->Draw.nFile != 10
&& pU->Draw.nFile != 11
&& EYE_IfFocusOnUnit( pU ) ) // 資源建筑處于焦點狀態
{
// 更新資源(鐵礦)儲量
FACE_UpdateGrade( pU->Build.nResource );
}
return 1; // 成功采集
}
else
return 2; // 該資源已經枯竭了
}
//把采集的資源送回到家中
BOOL RUN_RETURN_Build( struct UNIT_STRUCT *pUnit, struct UNIT_STRUCT *pU )
{
BOOL bSuccess = TRUE;
//added by tian yue
int nJingYanGrade[10]={200,500,1000,1800,3000,5000,8000,12000,18000,27000};
if( EYE_IfUnitIsWorker( pUnit ) )
{
switch( pUnit->Soldier.nResType )
{
case SHULIN: // 樹林
GAME.Players[pUnit->Draw.nPlayer].nWood += pUnit->Soldier.nResource;
break;
// GAME.Players[pUnit->Draw.nPlayer].nFood += pUnit->Soldier.nResource;
// break;
case TIEKUANG: // 鐵礦
GAME.Players[pUnit->Draw.nPlayer].nIron += pUnit->Soldier.nResource;
break;
case MINJU: // 民居
GAME.Players[pUnit->Draw.nPlayer].nGold += pUnit->Soldier.nResource;
break;
case MAITIAN: // 麥田
case LIANGCANG: // 糧倉
GAME.Players[pUnit->Draw.nPlayer].nFood += pUnit->Soldier.nResource;
if( EYE_IfFoodExceeded( pUnit->Draw.nPlayer ) )
{
GAME.Players[pUnit->Draw.nPlayer].nFood -= pUnit->Soldier.nResource;
OutputDebugString( "Food Exceeded!\n" );
if( EYE_IfSheIsMine( pUnit ) )
{
// 糧倉不夠無法屯糧,請多修建糧倉。
FACE_ShowPromptInfor( 10 );
}
bSuccess = FALSE;
}
break;
}
if( bSuccess )
{
pUnit->Soldier.nResType = QXZIYUAN; // 清除資源類型
pUnit->Soldier.nResource = 0;
GFWI_bUpdate = TRUE;
}
else
return FALSE;
}
else
{
Assert( EYE_IfUnitIsWorkerGen( pUnit ) );
DATA_Lib.Gen[pUnit->Gen.nID].nJingYan++; // 經驗增加1
//DATA_Lib.Gen[pUnit->Gen.nID].nJingYan+=50; // 經驗增加1
//added by tian yue.
// 升級
if( DATA_Lib.Gen[pUnit->Gen.nID].nLevel < 9 )
{
if( DATA_Lib.Gen[pUnit->Gen.nID].nJingYan >= nJingYanGrade[DATA_Lib.Gen[pUnit->Gen.nID].nLevel] )
{
DATA_Lib.Gen[pUnit->Gen.nID].nJingYan -= nJingYanGrade[DATA_Lib.Gen[pUnit->Gen.nID].nLevel];
DATA_Lib.Gen[pUnit->Gen.nID].nLevel++;
//我將領戰斗英勇,斬獲甚多,晉升一級。
if( EYE_IfFocusOnUnit( pUnit ) && EYE_IfSheIsMine( pUnit ) )
{
FACE_ShowPromptInfor( 12 );
//---- 肯定音效
// victory.wav
DATA_WAVE_EffectPlay( 106 );
//---- 肯定音效
}
}
}
}
return TRUE;
}
// 修理建筑
BOOL RUN_REPAIR_Build( struct UNIT_STRUCT *pUnit )
{
Assert( pUnit->Status.nParam1 != MAP_DATA_NONE );
struct UNIT_STRUCT *pU = MAP_GetUnit( pUnit->Status.nParam1 );
Assert( pU ); // 被修理的建筑的指針
if( EYE_IfUnitIsDead( pU ) )
{
pUnit->Status.bDone = TRUE;
return TRUE;
}
Assert( EYE_IfUnitIsBuild( pU ) && pU->Draw.nPlayer == pUnit->Draw.nPlayer );
//---- 修理音效
POINT pt;
pt.x = pUnit->Draw.nX, pt.y = pUnit->Draw.nY;
if( PtInRect( &DRAW_rcScreen, pt ) )
{
// repair.wav
DATA_WAVE_EffectPlay( 101 );
}
//---- 修理音效
// int nHit = DATA_Lib.Unit[pUnit->Draw.nFile].nNearAttack
// + GAME.Players[pUnit->Draw.nPlayer].nAddNearAttack;
int nHit = RUN_CREATE_VALUE<<3;
if( GAME.Players[pUnit->Draw.nPlayer].nGold < RUN_CREATE_VALUE
|| GAME.Players[pUnit->Draw.nPlayer].nFood < RUN_CREATE_VALUE
|| GAME.Players[pUnit->Draw.nPlayer].nWood < RUN_CREATE_VALUE
|| GAME.Players[pUnit->Draw.nPlayer].nIron < RUN_CREATE_VALUE )
{ // 沒錢了,結束
pUnit->Status.bDone = TRUE;
return TRUE;
}
pU->nLife += nHit;
GAME.Players[pUnit->Draw.nPlayer].nGold -= RUN_CREATE_VALUE;
GAME.Players[pUnit->Draw.nPlayer].nFood -= RUN_CREATE_VALUE;
GAME.Players[pUnit->Draw.nPlayer].nWood -= RUN_CREATE_VALUE;
GAME.Players[pUnit->Draw.nPlayer].nIron -= RUN_CREATE_VALUE;
GFWI_bUpdate = TRUE;
// 生命滿,結束
if( pU->nLife >= EYE_GetFullLife( pU->Draw.nPlayer, pU->Draw.nFile) )
{
pU->nLife = EYE_GetFullLife( pU->Draw.nPlayer, pU->Draw.nFile);
pUnit->Status.bDone = TRUE;
return TRUE;
}
// 修改火
if( pU->Status.nTaskID != JIANZAOZHONG )
RUN_FIGHT_SetFire( pU );
if( EYE_IfFocusOnUnit( pU ) )
//&& EYE_IfSheIsMine( pU ) )
{
// 更新血格條
FACE_ShowProcessBar( PROCESSBAR_STONE, pU->nLife*100/EYE_GetFullLife( pU->Draw.nPlayer, pU->Draw.nFile) );
}
return FALSE;
}
// 判斷是否有錢升級
BOOL RUN_UPGRADE_IfEnoughMoney( int nPlayer, int nTaskIDEx )
{
BOOL bRet = TRUE;
// 付款
switch( nTaskIDEx )
{
case SHENGJI1:
case SHENGJI2:
case SHENGJI3:
case GONGJIAN1:
case GONGJIAN2:
case GONGJIAN3:
case BINGQI1:
case BINGQI2:
case BINGQI3:
case HUJIA1:
case HUJIA2:
case HUJIA3:
case TOUSHICHE1:
case TOUSHICHE2:
case XIAOCHUAN:
case DACHUAN:
case CHUANTI:
if( GAME.Players[nPlayer].nGold < DATA_Lib.Upgrade[nTaskIDEx].nGold
|| GAME.Players[nPlayer].nWood < DATA_Lib.Upgrade[nTaskIDEx].nWood
|| GAME.Players[nPlayer].nIron < DATA_Lib.Upgrade[nTaskIDEx].nIron )
bRet = FALSE;
break;
case MUCAI1: // 把1000木材換成錢
if( GAME.Players[nPlayer].nWood < DATA_Lib.Upgrade[MUCAI1].nWood )
bRet = FALSE;
break;
case MUCAI2: // 把5000木材換成錢
if( GAME.Players[nPlayer].nWood < DATA_Lib.Upgrade[MUCAI2].nWood )
bRet = FALSE;
break;
case LIANGSHI1: // 把1000糧食換成錢
if( GAME.Players[nPlayer].nFood < DATA_Lib.Upgrade[LIANGSHI1].nFood )
bRet = FALSE;
break;
case LIANGSHI2: // 把5000糧食換成錢
if( GAME.Players[nPlayer].nFood < DATA_Lib.Upgrade[LIANGSHI2].nFood )
bRet = FALSE;
break;
case TIEKUANG1: // 把1000鐵礦石換成錢
if( GAME.Players[nPlayer].nIron < DATA_Lib.Upgrade[TIEKUANG1].nIron )
bRet = FALSE;
break;
case TIEKUANG2: // 把5000鐵礦石換成錢
if( GAME.Players[nPlayer].nIron < DATA_Lib.Upgrade[TIEKUANG2].nIron )
bRet = FALSE;
break;
}
if( bRet == FALSE && GAME.nMe == nPlayer )
{
//------------提示
//軍費不夠,無法建造
FACE_ShowPromptInfor( 7 );
//------------提示
//---- 否定音效
// noselect.wav
DATA_WAVE_EffectPlay( 99 );
//---- 否定音效
}
return bRet;
}
// 升級預付款
BOOL RUN_UPGRADE_Pay( int nPlayer, int nTaskIDEx )
{
if( !RUN_UPGRADE_IfEnoughMoney( nPlayer, nTaskIDEx ) )
return FALSE;
// 付款
switch( nTaskIDEx )
{
case SHENGJI1:
case SHENGJI2:
case SHENGJI3:
case GONGJIAN1:
case GONGJIAN2:
case GONGJIAN3:
case BINGQI1:
case BINGQI2:
case BINGQI3:
case HUJIA1:
case HUJIA2:
case HUJIA3:
case TOUSHICHE1:
case TOUSHICHE2:
case XIAOCHUAN:
case DACHUAN:
case CHUANTI:
GAME.Players[nPlayer].nGold -= DATA_Lib.Upgrade[nTaskIDEx].nGold;
GAME.Players[nPlayer].nWood -= DATA_Lib.Upgrade[nTaskIDEx].nWood;
GAME.Players[nPlayer].nIron -= DATA_Lib.Upgrade[nTaskIDEx].nIron;
break;
case MUCAI1: // 把1000木材換成錢
GAME.Players[nPlayer].nWood -= DATA_Lib.Upgrade[MUCAI1].nWood;
break;
case MUCAI2: // 把5000木材換成錢
GAME.Players[nPlayer].nWood -= DATA_Lib.Upgrade[MUCAI2].nWood;
break;
case LIANGSHI1: // 把1000糧食換成錢
GAME.Players[nPlayer].nFood -= DATA_Lib.Upgrade[LIANGSHI1].nFood;
break;
case LIANGSHI2: // 把5000糧食換成錢
GAME.Players[nPlayer].nFood -= DATA_Lib.Upgrade[LIANGSHI2].nFood;
break;
case TIEKUANG1: // 把1000鐵礦石換成錢
GAME.Players[nPlayer].nIron -= DATA_Lib.Upgrade[TIEKUANG1].nIron;
break;
case TIEKUANG2: // 把5000鐵礦石換成錢
GAME.Players[nPlayer].nIron -= DATA_Lib.Upgrade[TIEKUANG2].nIron;
break;
}
GFWI_bUpdate = TRUE;
return TRUE;
}
// 升級后提貨
//void RUN_UPGRADE_Get( int nPlayer, int nTaskIDEx )
void RUN_UPGRADE_Get( struct UNIT_STRUCT *pUnit )
{
// int nFile = -1;
Assert( EYE_IfUnitIsBuild( pUnit ) );
int nPlayer = pUnit->Draw.nPlayer;
int nTaskIDEx = pUnit->Status.nTaskIDEx;
// 提貨
switch( nTaskIDEx )
{
case SHENGJI1:
GAME.Players[nPlayer].dwLifeUp = DATA_Lib.Upgrade[SHENGJI1].dwParam1;
GAME.Players[nPlayer].nGrade[PLAYER_GRADE_MAIN] = 1;
{
for( int i=0; i<PLAYER_UNIT_MAX; i++ )
{ // 是建筑但不是箭樓
struct UNIT_STRUCT *pU = &GAME.Players[nPlayer].Unit[i];
if( EYE_IfUnitIsBuild( pU )
&& !EYE_IfUnitIsTower( pU ) )
{
pU->nLife += DATA_Lib.Upgrade[SHENGJI1].dwParam1;
}
}
}
pUnit->Build.dwUpgrade[0]=1;
break;
case SHENGJI2:
GAME.Players[nPlayer].dwLifeUp = DATA_Lib.Upgrade[SHENGJI2].dwParam1;
GAME.Players[nPlayer].nGrade[PLAYER_GRADE_MAIN] = 2;
{
for( int i=0; i<PLAYER_UNIT_MAX; i++ )
{ // 是建筑但不是箭樓
struct UNIT_STRUCT *pU = &GAME.Players[nPlayer].Unit[i];
if( EYE_IfUnitIsBuild( pU )
&& !EYE_IfUnitIsTower( pU ) )
{
pU->nLife += DATA_Lib.Upgrade[SHENGJI1].dwParam1;
}
}
}
pUnit->Build.dwUpgrade[0]=2;
break;
case SHENGJI3:
GAME.Players[nPlayer].dwLifeUp = DATA_Lib.Upgrade[SHENGJI3].dwParam1;
GAME.Players[nPlayer].nGrade[PLAYER_GRADE_MAIN] = 3;
{
for( int i=0; i<PLAYER_UNIT_MAX; i++ )
{ // 是建筑但不是箭樓
struct UNIT_STRUCT *pU = &GAME.Players[nPlayer].Unit[i];
if( EYE_IfUnitIsBuild( pU )
&& !EYE_IfUnitIsTower( pU ) )
{
pU->nLife += DATA_Lib.Upgrade[SHENGJI1].dwParam1;
}
}
}
pUnit->Build.dwUpgrade[0]=3;
break;
case GONGJIAN1:
case GONGJIAN2:
case GONGJIAN3:
// 遠程攻擊力增加
GAME.Players[nPlayer].nAddFarAttack[0] = (char)DATA_Lib.Upgrade[nTaskIDEx].dwParam1;
GAME.Players[nPlayer].nAddFarAttack[1] = (char)DATA_Lib.Upgrade[nTaskIDEx].dwParam2;
GAME.Players[nPlayer].nAddFarAttack[2] = (char)DATA_Lib.Upgrade[nTaskIDEx].dwParam3;
GAME.Players[nPlayer].nAddFarAttack[3] = (char)DATA_Lib.Upgrade[nTaskIDEx].dwParam4;
GAME.Players[nPlayer].nGrade[PLAYER_GRADE_GONGJIAN] = nTaskIDEx - GONGJIAN1 + 1;
pUnit->Build.dwUpgrade[0] = nTaskIDEx - GONGJIAN1+1;
// nFile = 4; // 木材場
break;
case BINGQI1:
case BINGQI2:
case BINGQI3:
// 近程攻擊力增加
GAME.Players[nPlayer].nAddNearAttack[0] = (char)DATA_Lib.Upgrade[nTaskIDEx].dwParam1;
GAME.Players[nPlayer].nAddNearAttack[1] = (char)DATA_Lib.Upgrade[nTaskIDEx].dwParam2;
GAME.Players[nPlayer].nAddNearAttack[2] = (char)DATA_Lib.Upgrade[nTaskIDEx].dwParam3;
GAME.Players[nPlayer].nAddNearAttack[3] = (char)DATA_Lib.Upgrade[nTaskIDEx].dwParam4;
GAME.Players[nPlayer].nGrade[PLAYER_GRADE_BINGQI] = nTaskIDEx - BINGQI1 + 1;
// nFile = 2; // 武器場
pUnit->Build.dwUpgrade[0] = nTaskIDEx - BINGQI1+1;
break;
case HUJIA1:
case HUJIA2:
case HUJIA3:
// 近、遠程防御力增加
GAME.Players[nPlayer].nAddNearDefend[0] = (char)DATA_Lib.Upgrade[nTaskIDEx].dwParam1;
GAME.Players[nPlayer].nAddNearDefend[1] = (char)DATA_Lib.Upgrade[nTaskIDEx].dwParam2;
GAME.Players[nPlayer].nAddNearDefend[2] = (char)DATA_Lib.Upgrade[nTaskIDEx].dwParam3;
GAME.Players[nPlayer].nAddNearDefend[3] = (char)DATA_Lib.Upgrade[nTaskIDEx].dwParam4;
GAME.Players[nPlayer].nAddFarDefend[0] = (char)DATA_Lib.Upgrade[nTaskIDEx].dwParam1;
GAME.Players[nPlayer].nAddFarDefend[1] = (char)DATA_Lib.Upgrade[nTaskIDEx].dwParam2;
GAME.Players[nPlayer].nAddFarDefend[2] = (char)DATA_Lib.Upgrade[nTaskIDEx].dwParam3;
GAME.Players[nPlayer].nAddFarDefend[3] = (char)DATA_Lib.Upgrade[nTaskIDEx].dwParam4;
GAME.Players[nPlayer].nGrade[PLAYER_GRADE_HUJIA] = nTaskIDEx - HUJIA1 + 1;
// nFile = 2; // 武器場
pUnit->Build.dwUpgrade[1] = nTaskIDEx - HUJIA1+1;
break;
case TOUSHICHE1:
case TOUSHICHE2: // 投石車攻擊力變化
GAME.Players[nPlayer].nAddSFarAttack = (char)DATA_Lib.Upgrade[nTaskIDEx].dwParam1;
GAME.Players[nPlayer].nGrade[PLAYER_GRADE_TOUSHICHE] = nTaskIDEx - TOUSHICHE1 + 1;
// nFile = 8; // 車兵所
pUnit->Build.dwUpgrade[0] = nTaskIDEx - TOUSHICHE1+1;
break;
case XIAOCHUAN: // 小戰船攻擊力變化
GAME.Players[nPlayer].nAddWaterAttack[0] = (char)DATA_Lib.Upgrade[nTaskIDEx].dwParam1;
GAME.Players[nPlayer].nGrade[PLAYER_GRADE_CHUAN1] = 1;
// nFile = 20; // 船塢
pUnit->Build.dwUpgrade[0] = 1;
break;
case DACHUAN: // 大戰船攻擊力變化
GAME.Players[nPlayer].nAddWaterAttack[1] = (char)DATA_Lib.Upgrade[nTaskIDEx].dwParam1;
GAME.Players[nPlayer].nGrade[PLAYER_GRADE_CHUAN2] = 1;
// nFile = 20; // 船塢
pUnit->Build.dwUpgrade[1] = 1;
break;
case CHUANTI: // 戰船防御力變化
GAME.Players[nPlayer].nAddWaterDefend[0] = (char)DATA_Lib.Upgrade[nTaskIDEx].dwParam1;
GAME.Players[nPlayer].nAddWaterDefend[1] = (char)DATA_Lib.Upgrade[nTaskIDEx].dwParam2;
GAME.Players[nPlayer].nGrade[PLAYER_GRADE_CHUAN3] = 1;
// nFile = 20; // 船塢
pUnit->Build.dwUpgrade[2] = 1;
break;
case MUCAI1: // 把1000木材換成錢
GAME.Players[nPlayer].nGold += DATA_Lib.Upgrade[MUCAI1].nGold;
// nFile = 23; // 錢莊
break;
case MUCAI2: // 把5000木材換成錢
GAME.Players[nPlayer].nGold += DATA_Lib.Upgrade[MUCAI2].nGold;
// nFile = 23; // 錢莊
break;
case LIANGSHI1: // 把1000糧食換成錢
GAME.Players[nPlayer].nGold += DATA_Lib.Upgrade[LIANGSHI1].nGold;
// nFile = 23; // 錢莊
break;
case LIANGSHI2: // 把5000糧食換成錢
GAME.Players[nPlayer].nGold += DATA_Lib.Upgrade[LIANGSHI2].nGold;
// nFile = 23; // 錢莊
break;
case TIEKUANG1: // 把1000鐵礦石換成錢
GAME.Players[nPlayer].nGold += DATA_Lib.Upgrade[TIEKUANG1].nGold;
// nFile = 23; // 錢莊
break;
case TIEKUANG2: // 把5000鐵礦石換成錢
GAME.Players[nPlayer].nGold += DATA_Lib.Upgrade[TIEKUANG2].nGold;
// nFile = 23; // 錢莊
break;
}
GFWI_bUpdate = TRUE;
}
// 升級取消后找錢
// nTaskIDEx : 升級的類型
void RUN_UPGRADE_PayBack( int nPlayer, int nTaskIDEx )
{
switch( nTaskIDEx )
{
case SHENGJI1:
case SHENGJI2:
case SHENGJI3:
case GONGJIAN1:
case GONGJIAN2:
case GONGJIAN3:
case BINGQI1:
case BINGQI2:
case BINGQI3:
case HUJIA1:
case HUJIA2:
case HUJIA3:
case TOUSHICHE1:
case TOUSHICHE2:
case XIAOCHUAN:
case DACHUAN:
case CHUANTI:
GAME.Players[nPlayer].nGold += DATA_Lib.Upgrade[nTaskIDEx].nGold*RUN_CREATE_PAYBACK/100;
GAME.Players[nPlayer].nWood += DATA_Lib.Upgrade[nTaskIDEx].nWood*RUN_CREATE_PAYBACK/100;
GAME.Players[nPlayer].nIron += DATA_Lib.Upgrade[nTaskIDEx].nIron*RUN_CREATE_PAYBACK/100;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -