📄 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 + -