📄 cbctrl.cpp
字号:
Assert( pUnit );
Assert( EYE_IfUnitIsBuild( pUnit ) );
Assert( (pUnit->Status.bIRQ == TRUE && pUnit->Status.bDone == FALSE )
|| (pUnit->Status.bDone == TRUE && pUnit->Status.bIRQ == FALSE) );
if( pUnit->Status.nTaskID == JIANZAOZHONG )
{
// 防止极少出现的一种情况,即任务刚刚完成,但尚未来得及更新命令
if( pUnit->Status.bDone == FALSE )
{
CTRL_hitDest.nTaskID = QXJIANZAO;
CTRL_hitDest.nTaskIDEx = pUnit->Status.nTaskIDEx;
CTRL_hitDest.bIRQ = TRUE; // 强行中断
CTRL_hitDest.bDone = TRUE; // 结束了
}
}
else if( pUnit->Status.nTaskID == SHENGCHAN )
{
// 防止极少出现的一种情况,即任务刚刚完成,但尚未来得及更新命令
if( pUnit->Status.bDone == FALSE )
{
CTRL_hitDest.nTaskID = QXSHENGCHAN;
CTRL_hitDest.nTaskIDEx = pUnit->Status.nTaskIDEx;
CTRL_hitDest.bIRQ = TRUE; // 强行中断
CTRL_hitDest.bDone = TRUE; // 结束了
}
}
else if( pUnit->Status.nTaskID == TISHENG )
{
// 防止极少出现的一种情况,即任务刚刚完成,但尚未来得及更新命令
if( pUnit->Status.bDone == FALSE )
{
CTRL_hitDest.nTaskID = QXTISHENG;
CTRL_hitDest.nTaskIDEx = pUnit->Status.nTaskIDEx;
CTRL_hitDest.bIRQ = TRUE; // 强行中断
CTRL_hitDest.bDone = TRUE; // 结束了
}
}
}
}
// 主帅帐16030-16036
else if( dwMessage >= BUTTON_MAIN_PEASANT
&& dwMessage <= BUTTON_LIU_MAIN_UPGRADE3 )
{
if( dwMessage == BUTTON_MAIN_PEASANT )
{
CTRL_hitDest.nTaskID = SHENGCHAN;
CTRL_hitDest.nTaskIDEx = 30; // 生产工人, 文件号
CTRL_hitDest.bDone = TRUE; // 结束了
}
else
{
CTRL_hitDest.nTaskID = TISHENG; // 升级
CTRL_hitDest.nTaskIDEx = dwMessage - BUTTON_CHAO_MAIN_UPGRADE1;
// -GAME.Players[GAME.nMe].nBuildType*3;
Assert( CTRL_hitDest.nTaskIDEx < 6 );
if( CTRL_hitDest.nTaskIDEx >= 3 )
CTRL_hitDest.nTaskIDEx -= 3;
CTRL_hitDest.nTaskIDEx2 = dwMessage; // 保存该消息
Assert( CTRL_hitDest.nTaskIDEx < 3 );
// 看是否有钱提升
if( RUN_UPGRADE_IfEnoughMoney( GAME.nMe, CTRL_hitDest.nTaskIDEx ) )
CTRL_hitDest.bDone = TRUE; // 结束了
}
}
// 木材场16040-16042
else if( dwMessage >= BUTTON_LUMBER_UPGRADEBOW1
&& dwMessage <= BUTTON_LUMBER_UPGRADEBOW3 )
{
CTRL_hitDest.nTaskID = TISHENG; // 提升弓箭
CTRL_hitDest.nTaskIDEx = dwMessage - BUTTON_LUMBER_UPGRADEBOW1 + 3;
CTRL_hitDest.nTaskIDEx2 = dwMessage; // 保存该消息
// 看是否有钱提升
if( RUN_UPGRADE_IfEnoughMoney( GAME.nMe, CTRL_hitDest.nTaskIDEx ) )
CTRL_hitDest.bDone = TRUE; // 结束了
}
// 武器场16050-16055
else if( dwMessage >= BUTTON_WEAPONFACTORY_UPGRADEWEAPON1
&& dwMessage <= BUTTON_WEAPONFACTORY_UPGRADEARMOR3 )
{
CTRL_hitDest.nTaskID = TISHENG; // 提升武器攻击力和防御力
CTRL_hitDest.nTaskIDEx = dwMessage - BUTTON_WEAPONFACTORY_UPGRADEWEAPON1 + 6;
CTRL_hitDest.nTaskIDEx2 = dwMessage; // 保存该消息
// 看是否有钱提升
if( RUN_UPGRADE_IfEnoughMoney( GAME.nMe, CTRL_hitDest.nTaskIDEx ) )
CTRL_hitDest.bDone = TRUE; // 结束了
}
// 钱庄16060-16065
else if( dwMessage >= BUTTON_SHOP_SALE100WOOD
&& dwMessage <= BUTTON_SHOP_SALE1000IRON )
{
CTRL_hitDest.nTaskID = TISHENG; // 卖资源换钱
CTRL_hitDest.nTaskIDEx = dwMessage - BUTTON_SHOP_SALE100WOOD + 12;
CTRL_hitDest.nTaskIDEx2 = dwMessage; // 保存该消息
// 看是否有钱提升
if( RUN_UPGRADE_IfEnoughMoney( GAME.nMe, CTRL_hitDest.nTaskIDEx ) )
CTRL_hitDest.bDone = TRUE; // 结束了
}
// 步兵所16070-16081
else if( dwMessage >= BUTTON_FOOTMANSCHOOL_100
&& dwMessage <= BUTTON_FOOTMANSCHOOL_1000 )
{
CTRL_hitDest.nTaskID = SHENGCHAN;
// 生产步兵
CTRL_hitDest.nTaskIDEx = dwMessage - BUTTON_FOOTMANSCHOOL_100 + 32;
CTRL_hitDest.bDone = TRUE; // 结束了
}
// 骑兵所16090-16093
else if( dwMessage >= BUTTON_KNIGHTSCHOOL_100
&& dwMessage <= BUTTON_KNIGHTSCHOOL_500 )
{
CTRL_hitDest.nTaskID = SHENGCHAN;
// 生产骑兵
CTRL_hitDest.nTaskIDEx = dwMessage - BUTTON_KNIGHTSCHOOL_100 + 36;
CTRL_hitDest.bDone = TRUE; // 结束了
}
// 弓兵所16101-16108
else if( dwMessage >= BUTTON_BOWMANSCHOOL_200
&& dwMessage <= BUTTON_BOWMANSCHOOL_100 )
{
CTRL_hitDest.nTaskID = SHENGCHAN;
// 生产弓兵
CTRL_hitDest.nTaskIDEx = dwMessage - BUTTON_BOWMANSCHOOL_200 + 39;
CTRL_hitDest.bDone = TRUE; // 结束了
}
// 车兵所16110-16112
else if( dwMessage >= BUTTON_VEHICLEMANSCHOOL_VEHICLEMAN
&& dwMessage <= BUTTON_VEHICLEMANSCHOOL_UPGRADE2 )
{
if( dwMessage == BUTTON_VEHICLEMANSCHOOL_VEHICLEMAN )
{
CTRL_hitDest.nTaskID = SHENGCHAN;
CTRL_hitDest.nTaskIDEx = 34; // 生产车兵
CTRL_hitDest.bDone = TRUE; // 结束了
}
else
{
CTRL_hitDest.nTaskID = TISHENG; // 提升车
CTRL_hitDest.nTaskIDEx = dwMessage - BUTTON_VEHICLEMANSCHOOL_UPGRADE1 + 18;
CTRL_hitDest.nTaskIDEx2 = dwMessage; // 保存该消息
// 看是否有钱提升
if( RUN_UPGRADE_IfEnoughMoney( GAME.nMe, CTRL_hitDest.nTaskIDEx ) )
CTRL_hitDest.bDone = TRUE; // 结束了
}
}
// 造船厂16120-16126
else if( dwMessage >= BUTTON_SHIPYARD_DESTROYER
&& dwMessage <= BUTTON_SHIPYARD_UPGRADESHIPARMOR )
{
if( dwMessage >= BUTTON_SHIPYARD_DESTROYER &&
dwMessage <= BUTTON_SHIPYARD_GROUPSHIP )
{
CTRL_hitDest.nTaskID = SHENGCHAN;
// 生产船
CTRL_hitDest.nTaskIDEx = dwMessage - BUTTON_SHIPYARD_DESTROYER + 46;
CTRL_hitDest.bDone = TRUE; // 结束了
}
else
{
CTRL_hitDest.nTaskID = TISHENG; // 提升船
CTRL_hitDest.nTaskIDEx = dwMessage - BUTTON_SHIPYARD_UPGRADEDESTROYER + 20;
CTRL_hitDest.nTaskIDEx2 = dwMessage; // 保存该消息
// 看是否有钱提升
if( RUN_UPGRADE_IfEnoughMoney( GAME.nMe, CTRL_hitDest.nTaskIDEx ) )
CTRL_hitDest.bDone = TRUE; // 结束了
}
}
// 单元命令集16130-16145
else if( dwMessage >= BUTTON_MOVE
&& dwMessage <= BUTTON_BACK )
{
// set command
// 设置临时制造命令组
// OutputDebugString( "CTRL_TASK : Command received: " );
// OutputString( dwMessage, "\n" );
switch( dwMessage )
{
case BUTTON_MOVE: // 移动
CTRL_hitDest.nTaskID = YIDONG;
break;
case BUTTON_ATTACK: // 攻击
CTRL_hitDest.nTaskID = GONGJI;
//设置鼠标光标形状
MOUSE_SetState( MOUSE_STATE_GONGJI );
break;
case BUTTON_GUARD: // 防御
CTRL_hitDest.nTaskID = FANGYU;
CTRL_hitDest.bDone = TRUE; // 结束了
break;
case BUTTON_LINEUP: // 阵型
{
DWORD EX, EXX;
CTRL_TASK_LineUpCommand( &EX, &EXX );
FACE_ShowCommandUnit( COMMANDUNIT_LINEUP_PAGEONE, EX );
}
break;
case BUTTON_REST: // 休息
CTRL_hitDest.nTaskID = XIUXI;
CTRL_hitDest.bDone = TRUE; // 结束了
break;
case BUTTON_STRATAGEM: // 计谋
{
DWORD EX, EXX;
CTRL_TASK_StrategemCommand( &EX, &EXX );
if( EX == 0 )
{
//级别不够,还没有可以使用的计谋
FACE_ShowPromptInfor( 20 ) ;
}
else
FACE_ShowCommandUnit( COMMANDUNIT_STRATAGEM, EX );
}
break;
case BUTTON_DISMISS: // 解散
CTRL_hitDest.nTaskID = JIESAN;
CTRL_hitDest.bDone = TRUE; // 结束了
break;
case BUTTON_SINGLE: // 单挑
if( GAME_bNetwork == FALSE ) // 网络版无单挑
{
struct UNIT_STRUCT *pUnit = MAP_GetUnit( CTRL_hitSrc[0].nID );
Assert( pUnit );
Assert( EYE_IfUnitIsGen( pUnit ) );
if( pUnit->Draw.nFile == 52 )
{
//水军将领不能单挑
FACE_ShowPromptInfor( 21 ) ;
break; // 水军将领,不能单挑
}
if( GAME.bFightEnabled == TRUE ) // Enable fight single
CTRL_hitDest.nTaskID = DANTIAO;
else
{
//单挑开关关闭了,不能单挑
FACE_ShowPromptInfor( 23 ) ;
}
}
break;
case BUTTON_TRANSPORT: // 运送
CTRL_hitDest.nTaskID = YUNSONG;
//设置鼠标光标形状
MOUSE_SetState( MOUSE_STATE_YUNSONG );
break;
case BUTTON_CHAO_BUILD: // 曹操方建造
{
DWORD EX, EXX;
CTRL_TASK_WorkerCommand( &EX, &EXX );
FACE_ShowCommandUnit( COMMANDUNIT_CHAO_BUILD_PAGEONE, EX );
}
break;
case BUTTON_LIU_BUILD: // 刘备方建造
{
DWORD EX, EXX;
CTRL_TASK_WorkerCommand( &EX, &EXX );
FACE_ShowCommandUnit( COMMANDUNIT_LIU_BUILD_PAGEONE, EX );
}
break;
case BUTTON_REPAIR: // 修理
CTRL_hitDest.nTaskID = XIULI;
break;
case BUTTON_SHIP: // 运载
CTRL_hitDest.nTaskID = YUNZAI;
break;
case BUTTON_UNSHIP: // 卸载
CTRL_hitDest.nTaskID = XIEZAI;
// 如果在岸边则直接卸载,不移动
{
struct UNIT_STRUCT *pUnit = MAP_GetUnit( CTRL_hitSrc[0].nID );
Assert( pUnit );
Assert( CTRL_nHitCounter == 1 );
Assert( EYE_IfUnitIsTransport( pUnit ) );
if( EYE_IfNearBank( pUnit->Draw.nLayer, pUnit->Draw.nX,
pUnit->Draw.nY, pUnit->Draw.nLocationSize ) )
{
CTRL_hitDest.nTaskIDEx2 = 1;
CTRL_hitDest.bDone = TRUE;
}
}
break;
/*
case BUTTON_ESTABLISH: // 组建
CTRL_hitDest.nTaskID = ZUJIAN;
CTRL_hitDest.nTaskIDEx = 1; // 骑兵
CTRL_hitDest.nParam1 = lParam;
CTRL_hitDest.bDone = TRUE; // 结束了
break;
*/
case BUTTON_JOIN: // 加入
CTRL_hitDest.nTaskID = JIARU;
//设置鼠标光标形状
MOUSE_SetState( MOUSE_STATE_JIARU );
break;
case BUTTON_BACK:
{
struct UNIT_STRUCT *pU = MAP_GetUnit( CTRL_hitSrc[0].nID );
Assert( pU );
Assert( EYE_IfUnitIsWorker( pU ) );
Assert( pU->Soldier.nResType != QXZIYUAN
&& pU->Soldier.nResource > 0 );
Assert( CTRL_nHitCounter == 1 );
CTRL_hitDest.nParam1 = TY_FindNearHome(GAME.nMe,pU->Draw.nX,pU->Draw.nY,pU->Soldier.nResType);
if( CTRL_hitDest.nParam1 == MAP_DATA_NONE )
break;// 没找到家
CTRL_hitDest.nTaskID = HUISONG;
CTRL_hitDest.nTaskIDEx = 2; // MOUSE_HITRESULT_UNIT
CTRL_hitDest.nTaskIDEx2 = pU->Soldier.nResType; // 保存资源类型,目的地类型舍去了
if( pU->Soldier.nResType == 0
|| pU->Soldier.nResType == 1 )
{ // 地形类型资源
CTRL_hitDest.nParam2 = pU->Draw.nLayer;
CTRL_hitDest.nParam3 = pU->Draw.nX;
CTRL_hitDest.nParam4 = pU->Draw.nY;
}
else
{ // 建筑类型资源
CTRL_hitDest.nParam4 = MAP_DATA_NONE;
}
CTRL_hitDest.bDone = TRUE;
}
break;
/*
//case BUTTON_
case 16070:// 生产1
CTRL_hitDest.nTaskID = SHENGCHAN;
CTRL_hitDest.nTaskIDEx = MAP_Lib.Unit[36].nItems[0];
break;
case 16071:// 生产2
CTRL_hitDest.nTaskID = SHENGCHAN;
CTRL_hitDest.nTaskIDEx = MAP_Lib.Unit[42].nItems[0];
break;
case 16053:// 删除
CTRL_hitDest.nTaskID = SHANCHU;
CTRL_hitDest.bDone = TRUE;
break;
*/
}
}
// 建造命令集16150-16177
else if( dwMessage >= BUTTON_CHAO_BUILD_MAIN
&& dwMessage <= BUTTON_LIU_BUILD_FLAG )
{
CTRL_hitDest.nTaskID = JIANZAO;
CTRL_hitDest.nTaskIDEx = MOUSE_HITRESULT_GROUND;
CTRL_hitDest.nTaskIDEx2 = dwMessage - BUTTON_CHAO_BUILD_MAIN;
DWORD codeU = MAP_Lib.Unit[CTRL_hitDest.nTaskIDEx2].nItems[0];
if( RUN_CREATE_IfEnoughMoney( GAME.nMe, CTRL_hitDest.nTaskIDEx2 ) )
{
// 隐藏鼠标
// class CDDCursor *pCursor = CURSOR_Get();
// Assert( pCursor );
// pCursor->Show( FALSE );
// set build item
extern RECT DRAW_rcClient;
BUILD_Set( codeU );
BUILD_Enable( TRUE );
// reset command unit array
FACE_ShowCommandUnit( COMMANDUNIT_CANCEL, 0xFFFF );
}
else
{
// 重新设置命令组
CTRL_TASK_ClearAssembleDest();
FACE_ShowCommandUnit( CTRL_TASK_saveCmdUnit.Cmd, CTRL_TASK_saveCmdUnit.Ex ); // clear command sets
}
}
// 阵型命令集16190-16199
else if( dwMessage >= BUTTON_LINEUP_ONE
&& dwMessage <= BUTTON_LINEUP_TEN )
{
CTRL_hitDest.nTaskID = ZHENXING;
CTRL_hitDest.nTaskIDEx = dwMessage - BUTTON_LINEUP_ONE+1;
CTRL_hitDest.bDone = TRUE; // 命令结束
}
// 计谋命令集16210-16219
else if( dwMessage >= BUTTON_STRATAGEM_ENCOURAGE
&& dwMessage <= BUTTON_STRATAGEM_FIRE )
{
CTRL_hitDest.nTaskID = JIMOU;
CTRL_hitDest.nTaskIDEx2 = dwMess
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -