⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cbctrl.cpp

📁 赤壁之战(游戏原码)
💻 CPP
📖 第 1 页 / 共 5 页
字号:
			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 + -