📄 cbrunot.cpp
字号:
break;
case MUCAI1: // 把1000木材换成钱
GAME.Players[nPlayer].nWood += DATA_Lib.Upgrade[MUCAI1].nWood*RUN_CREATE_PAYBACK/100;
break;
case MUCAI2: // 把5000木材换成钱
GAME.Players[nPlayer].nWood += DATA_Lib.Upgrade[MUCAI2].nWood*RUN_CREATE_PAYBACK/100;
break;
case LIANGSHI1: // 把1000粮食换成钱
GAME.Players[nPlayer].nFood += DATA_Lib.Upgrade[LIANGSHI1].nFood*RUN_CREATE_PAYBACK/100;
break;
case LIANGSHI2: // 把5000粮食换成钱
GAME.Players[nPlayer].nFood += DATA_Lib.Upgrade[LIANGSHI2].nFood*RUN_CREATE_PAYBACK/100;
break;
case TIEKUANG1: // 把1000铁矿石换成钱
GAME.Players[nPlayer].nIron += DATA_Lib.Upgrade[TIEKUANG1].nIron*RUN_CREATE_PAYBACK/100;
break;
case TIEKUANG2: // 把5000铁矿石换成钱
GAME.Players[nPlayer].nIron += DATA_Lib.Upgrade[TIEKUANG2].nIron*RUN_CREATE_PAYBACK/100;
break;
}
GFWI_bUpdate = TRUE;
}
/////////////
/////////////
// 判断如果单元生命小于0,对该单元下达删除命令
// 但只有当动画显示完全后,才真正调用CTRL_UNIT_Detroy()删除它
void RUN_UNIT_ToDie( struct UNIT_STRUCT *pUnit )
{
if( EYE_IfUnitIsDead( pUnit ) )
return;
int nJingYanGrade[10]={200,500,1000,1800,3000,5000,8000,12000,18000,27000};
Assert( EYE_IfUnitIsBuild( pUnit )
|| (pUnit->nHasShadow == TRUE
&& !EYE_IfUnitIsBuild( pUnit ) ) ); //
// 给攻击者提升经验值和士气
// 若没有攻击者,则可能是自己人干的
struct UNIT_STRUCT *pU=NULL;
if( pUnit->nIDAttackMe != MAP_DATA_NONE )
{
pU = MAP_GetUnit( pUnit->nIDAttackMe );
Assert( pU );
// 战斗记分,Nov.6.1997
//-----------
if( EYE_IfUnitIsGen( pUnit ) )
{
RUN_CountDown[pU->Draw.nPlayer].nKilledGenerals ++;
}
else if( EYE_IfUnitIsBuild( pUnit ) )
{
RUN_CountDown[pU->Draw.nPlayer].nKilledBuildings ++;
}
else if( EYE_IfUnitIsSoldier( pUnit ) )
{
RUN_CountDown[pU->Draw.nPlayer].nKilledSoldiers += EYE_GetFullLife( -1, pUnit->Draw.nFile );
}
//-----------
pU = EYE_GetGeneral( pU );
if( pU ) // 攻击者的将领
{
DATA_Lib.Gen[pU->Gen.nID].nJingYan += DATA_Lib.Unit[pUnit->Draw.nFile].nAddExp;
// debug only
// DATA_Lib.Gen[pU->Gen.nID].nJingYan += nJingYanGrade[DATA_Lib.Gen[pU->Gen.nID].nLevel];
// 升级
if( DATA_Lib.Gen[pU->Gen.nID].nLevel < 9 )
{
if( DATA_Lib.Gen[pU->Gen.nID].nJingYan >= nJingYanGrade[DATA_Lib.Gen[pU->Gen.nID].nLevel] )
{
DATA_Lib.Gen[pU->Gen.nID].nJingYan -= nJingYanGrade[DATA_Lib.Gen[pU->Gen.nID].nLevel];
DATA_Lib.Gen[pU->Gen.nID].nLevel++;
//我将领战斗英勇,斩获甚多,晋升一级。
if( EYE_IfFocusOnUnit( pU ) && EYE_IfSheIsMine( pU ) )
{
FACE_ShowPromptInfor( 12 );
//---- 肯定音效
// victory.wav
DATA_WAVE_EffectPlay( 106 );
//---- 肯定音效
}
}
}
pU->Gen.nMorale += DATA_Lib.Unit[pUnit->Draw.nFile].nAddMorale;
if( EYE_IfFocusOnUnit( pU ) )
{
//更新级别名称,经验值,士兵数
char strLvl[32];
EYE_GetLevelName( pU->Gen.nID, strLvl );
FACE_UpdateOffice( strLvl );
FACE_UpdateExperience( DATA_Lib.Gen[pU->Gen.nID].nJingYan );
FACE_UpdateSoliderNumber( CTRL_GetFocusSoldierNumber() );
FACE_ShowProcessBar( PROCESSBAR_POWER, EYE_GetWuLi( pU->Gen.nID )*100/120 );
//// 更新士气
FACE_UpdateMorale( EYE_GetMorale( pU ) ) ;
}
}
}
// 给自己减少士气
pU = EYE_GetGeneral( pUnit );// 自己的将领
if( pU )
{
pU->Gen.nMorale -= DATA_Lib.Unit[pUnit->Draw.nFile].nAddMorale;
if( EYE_IfFocusOnUnit( pU ) )
{ // 更新士气
FACE_UpdateMorale( EYE_GetMorale( pU ) ) ;
}
}
// 如果是大旗,则需要降低自己方所有部队的士气
// Aug 14, 1997
if( pUnit->Draw.nFile == 26 )
{
for( int i=0; i<PLAYER_GROUP_MAX; i++ )
{
WORD wGroup = GAME.Players[pUnit->Draw.nPlayer].wGroup[i];
if( wGroup != MAP_DATA_NONE )
{
pU = MAP_GetUnit( wGroup );
Assert( pU );
Assert( EYE_IfUnitIsGen( pU ) );
pU->Gen.nMorale -= 50;
if( EYE_IfFocusOnUnit( pU ) )
{ // 更新士气
FACE_UpdateMorale( EYE_GetMorale( pU ) ) ;
}
}
}
}
// 下达删除命令
struct CTRL_TASK_STRUCT hitDest;
CTRL_TASK_Clear( &hitDest );
// 设置命令
Assert( pUnit );
Assert( pUnit->nLife <= 0 );
pUnit->nIDAttackMe = MAP_DATA_NONE;
hitDest.bDone = TRUE;
hitDest.bIRQ = TRUE; // 强行中断
hitDest.nID = pUnit->nID;
hitDest.nLevel = 0; // 该命令的级别,0 is the highest, 5 is the lowest
hitDest.nTaskID = SHANCHU; // 任务
hitDest.nTaskIDEx = 0; // 被杀死
// 下达任务到队列中
CTRL_TASK_DeployByComputer( pUnit->Draw.nPlayer, &hitDest );
// 死亡音效
RUN_SOUND_Die( pUnit->Draw.nX, pUnit->Draw.nY, pUnit->Draw.nFile );
// 死亡音效
}
/////////////
/////////////
BOOL RUN_MOULUE_IfEnough( struct UNIT_STRUCT *pUnit, CTRL_JIMOU nJiMou )
{
Assert( EYE_IfUnitIsGen( pUnit ) );
if( DATA_Lib.Gen[pUnit->Gen.nID].nMouLue < RUN_MOULUE_nConsume[nJiMou] )
{
if( EYE_IfSheIsMine( pUnit ) )
{
// 谋略值不够无法使用该计谋
FACE_ShowPromptInfor( 9 );
//---- 否定音效
// noselect.wav
DATA_WAVE_EffectPlay( 99 );
//---- 否定音效
}
return FALSE;
}
return TRUE;
}
/////////////
/////////////
// 攻击音效
// nX, nY : 位置
// nFile : 单元文件号
void RUN_SOUND_Hit( int nX, int nY, int nFile )
{
//---- 音效
POINT pt;
pt.x = nX, pt.y = nY;
if( PtInRect( &DRAW_rcScreen, pt ) )
{
int nID=-1;
switch( nFile )
{
case 31://步将
//fight01.wav
nID = 9;
break;
case 32://步兵100
case 38://步兵200
//fight02.wav
nID = 10;
break;
case 41://步兵500
case 43://步兵1000
//fight03,04.wav
nID = getrandom(11,12);
break;
case 35://骑将
case 36://骑兵100
case 37://骑兵200
case 40://骑兵500
nID = 10;
break;
case 29://文将
case 30://工人
//hitbody4.wav
nID = 16;
break;
};
if( nID != -1 )
{
DATA_WAVE_EffectPlay( nID );
}
}
//---- 音效
}
// 弓箭攻击音效
// nX, nY : 位置
// nFile : 单元文件号
void RUN_SOUND_HitF( int nX, int nY, int nFile )
{
//---- 音效
// 弓箭手100-200人,弓将
POINT pt;
pt.x = nX, pt.y = nY;
if( PtInRect( &DRAW_rcScreen, pt ) )
{
int nID=-1;
switch( nFile )
{
case 18:// 箭楼
case 19:
//arrow07.wav
nID = 6;
break;
case 33://弓将
//arrow01.wav
nID = 0;
break;
case 45://弓兵100
case 39://弓兵200
//arrow02-04.wav
nID = getrandom(1,3);
break;
case 42://弓兵500
case 44://弓兵1000
//arrow05,06.wav
nID = getrandom(4,5);
break;
case 46:// 小战船
//case 47:// 运输船
case 48:// 大战船
case 49:// 连船
nID = getrandom(1,3);
break;
}
if( nID != -1 )
{
DATA_WAVE_EffectPlay( nID );
}
//---- 音效
}
}
// 死亡音效
// nX, nY : 位置
// nFile : 单元文件号
void RUN_SOUND_Die( int nX, int nY, int nFile )
{
//----死亡音效
POINT pt;
pt.x = nX, pt.y = nY;
if( PtInRect( &DRAW_rcScreen, pt ) )
{
int nID = -1;
switch( nFile )
{
case 27:// 女平民
case 28:// 难平民
break;
case 29:// 文将
// break;
case 30:// 工人
break;
case 31:// 步将
// break;
case 32:// 步兵100
case 38:// 步兵200
case 41:// 步兵500
case 43:// 步兵1000
// died1.wav
nID = 93;
break;
case 34:// 车兵
break;
case 35:// 骑将
// break;
case 36:// 骑兵100
case 37:// 骑兵200
case 40:// 骑兵500
// died3.wav
nID = 95;
break;
case 33:// 弓将
// break;
case 45:// 弓兵100
case 39:// 弓兵200
case 42:// 弓兵500
case 44:// 弓兵1000
// died2.wav
nID = 94;
break;
case 52:// 水军将领
// break;
case 46:// 小战船
case 47:// 运输船
case 48:// 大战船
case 49:// 连船
// break;
// boatrune.wav
nID = 90;
break;
case 50:// 短云梯
case 51:// 长云梯
break;
}
if( nID != -1 )
{
DATA_WAVE_EffectPlay( nID );
}
}
//----死亡音效
}
// 受伤音效
// nX, nY : 位置
// nFile : 单元文件号
void RUN_SOUND_Wounded( int nX, int nY, int nFile )
{
//----受伤音效
POINT pt;
pt.x = nX, pt.y = nY;
if( PtInRect( &DRAW_rcScreen, pt ) )
{
int nID = -1;
switch( nFile )
{
case 27:// 女平民
case 28:// 难平民
break;
case 29:// 文将
// break;
case 30:// 工人
break;
case 31:// 步将
// break;
case 32:// 步兵100
case 38:// 步兵200
case 41:// 步兵500
case 43:// 步兵1000
// wounded1.wav
nID = 107;
break;
case 34:// 车兵
break;
case 35:// 骑将
// break;
case 36:// 骑兵100
case 37:// 骑兵200
case 40:// 骑兵500
// wounded3.wav
nID = 109;
break;
case 33:// 弓将
// break;
case 45:// 弓兵100
case 39:// 弓兵200
case 42:// 弓兵500
case 44:// 弓兵1000
// wounded2.wav
nID = 108;
break;
case 52:// 水军将领
// break;
case 46:// 小战船
case 47:// 运输船
case 48:// 大战船
case 49:// 连船
// break;
break;
case 50:// 短云梯
case 51:// 长云梯
break;
}
if( nID != -1 )
{
DATA_WAVE_EffectPlay( nID );
}
}
//----受伤音效
}
// 用于音效,每隔一定时间该开关打开,当屏幕以外的我方单元(部队/建筑)
// 受到攻击时,由画外音提醒游戏者We are under attack!
// 注:要在函数外面判断游戏者
// nX, nY : 被攻击单元位置坐标
// nFile : 被攻击单元文件号
void RUN_SOUND_UnderAttack( int nX, int nY, int nFile )
{
if( RUN_SOUND_bWeAreUnderAttack == FALSE )
return;
POINT pt;
pt.x = nX, pt.y = nY;
if( PtInRect( &DRAW_rcScreen, pt ) )
return; // 在屏幕内不说
RUN_SOUND_bWeAreUnderAttack = FALSE; // 开关关闭
int nID = -1;
if( nFile >= 0 && nFile < 27 )
{ // XRe-XRg.wav
nID = getrandom( 81,83 );
}
else
{
switch( nFile )
{
case 29: //文将
//XG4e-g.wav
nID = getrandom(75,77);
break;
case 31: //步将
//XG1e-g.wav
nID = getrandom(54,56);
break;
case 33: //弓将
//XG2e-g.wav
nID = getrandom(61,63);
break;
case 35: //骑将
//XG3e-g.wav
nID = getrandom(68,70);
break;
case 52: //水将
//XG2e-g.wav
nID = getrandom(61,63);
break;
default: // 其他士兵
nID = getrandom(78,80);
}
}
if( nID != -1 )
{
DATA_WAVE_EffectPlay( nID );
}
}
/////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -