📄 cbctrl.cpp
字号:
CTRL_TASK_saveCmdUnit.Ex = 0x0005;
}
//else if( GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_MAIN] == 2
else if( pUnit->Build.dwUpgrade[0] == 2
&& GAME.Players[GAME.nMe].nTechLvl >= 4
&& GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_BINGQI] >= 2
&& GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_GONGJIAN] >= 2 )
{ // 木材场3级,武器场3级
CTRL_TASK_saveCmdUnit.Ex = 0x0009;
}
//CTRL_TASK_saveCmdUnit.Ex = 0xFFFF;
break;
case 1: // 帅帐2
CTRL_TASK_saveCmdUnit.Cmd = COMMANDUNIT_LIU_MAINBUILDING;
// 基本配置
CTRL_TASK_saveCmdUnit.Ex = 0x0001;
//if( GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_MAIN] == 0
if( pUnit->Build.dwUpgrade[0] == 0
&& GAME.Players[GAME.nMe].nTechLvl >= 2
&& BuildPoint[GAME.nMe][MUCAICHANG].hPos == CBTRUE
&& BuildPoint[GAME.nMe][WUQICHANG].hPos == CBTRUE )
{ // 当前等级是0,最高等级大于1,有木材场,有武器场
CTRL_TASK_saveCmdUnit.Ex = 0x0003; //0011
}
//else if( GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_MAIN] == 1
else if( pUnit->Build.dwUpgrade[0] == 1
&& GAME.Players[GAME.nMe].nTechLvl >= 3
&& BuildPoint[GAME.nMe][QIBINGSUO].hPos == CBTRUE
&& BuildPoint[GAME.nMe][CHEBINGSUO].hPos == CBTRUE )
{ // 当前等级是1,最高等级大于2,有骑兵所,有车兵所
CTRL_TASK_saveCmdUnit.Ex = 0x0005;
}
//else if( GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_MAIN] == 2
else if( pUnit->Build.dwUpgrade[0] == 2
&& GAME.Players[GAME.nMe].nTechLvl >= 4
&& GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_BINGQI] >= 2
&& GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_GONGJIAN] >= 2 )
{ // 木材场3级,武器场3级
CTRL_TASK_saveCmdUnit.Ex = 0x0009;
}
//CTRL_TASK_saveCmdUnit.Ex = 0xFFFF;
break;
case 2: // 武器库1
case 3: // 武器库2
//GAME.Players[GAME.nMe].
CTRL_TASK_saveCmdUnit.Cmd = COMMANDUNIT_WEAPONFACTORY;
// 无作用
CTRL_TASK_saveCmdUnit.Ex = 0x0000;
if( GAME.Players[GAME.nMe].nTechLvl >= 4
&& BuildPoint[GAME.nMe][DOGFACE].hPos == CBTRUE )
{ // 最高等级大于3,武器场3级
if( GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_BINGQI] == 0 )
CTRL_TASK_saveCmdUnit.Ex = 0x0001;
else if( GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_BINGQI] == 1 )
CTRL_TASK_saveCmdUnit.Ex = 0x0002;
else if( GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_BINGQI] == 2 )
CTRL_TASK_saveCmdUnit.Ex = 0x0004;
if( GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_HUJIA] == 0 )
CTRL_TASK_saveCmdUnit.Ex |= 0x0008;
else if( GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_HUJIA] == 1 )
CTRL_TASK_saveCmdUnit.Ex |= 0x0010;
else if( GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_HUJIA] == 2 )
CTRL_TASK_saveCmdUnit.Ex |= 0x0020;
}
else if( GAME.Players[GAME.nMe].nTechLvl >= 3
&& BuildPoint[GAME.nMe][DOGFACE].hPos == CBTRUE )
{ // 最高等级大于2,武器场2级
if( GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_BINGQI] == 0 )
CTRL_TASK_saveCmdUnit.Ex = 0x0001;
else if( GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_BINGQI] == 1 )
CTRL_TASK_saveCmdUnit.Ex = 0x0002;
if( GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_HUJIA] == 0 )
CTRL_TASK_saveCmdUnit.Ex |= 0x0008;
else if( GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_HUJIA] == 1 )
CTRL_TASK_saveCmdUnit.Ex |= 0x0010;
}
else if( GAME.Players[GAME.nMe].nTechLvl >= 2
&& BuildPoint[GAME.nMe][DOGFACE].hPos == CBTRUE )
{ // 最高等级大于1,有步兵所
if( GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_BINGQI] == 0 )
CTRL_TASK_saveCmdUnit.Ex = 0x0001;
if( GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_HUJIA] == 0 )
CTRL_TASK_saveCmdUnit.Ex |= 0x0008;
}
//CTRL_TASK_saveCmdUnit.Ex = 0xFFFF;
break;
case 4: // 木材场1
case 5: // 木材场2
CTRL_TASK_saveCmdUnit.Cmd = COMMANDUNIT_LUMBER;
// 无作用
CTRL_TASK_saveCmdUnit.Ex = 0x0000;
if( GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_GONGJIAN] == 0
&& GAME.Players[GAME.nMe].nTechLvl >= 2
&& BuildPoint[GAME.nMe][BOW].hPos == CBTRUE )
{ // 当前等级是0,最高等级大于1,有弓兵所
CTRL_TASK_saveCmdUnit.Ex = 0x0001;
}
else if( GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_GONGJIAN] == 1
&& GAME.Players[GAME.nMe].nTechLvl >= 3 )
{ // 当前等级是1,最高等级大于2,木材场2级
CTRL_TASK_saveCmdUnit.Ex = 0x0002;
}
else if( GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_GONGJIAN] == 2
&& GAME.Players[GAME.nMe].nTechLvl >= 4 )
{ // 当前等级是2,最高等级大于3,木材场3级
CTRL_TASK_saveCmdUnit.Ex = 0x0004;
}
//CTRL_TASK_saveCmdUnit.Ex = 0xFFFF;
break;
case 6: // 骑兵所1
case 7: // 骑兵所2
CTRL_TASK_saveCmdUnit.Cmd = COMMANDUNIT_KNIGHTSCHOOL;
if( GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_MAIN] == 0 )
{ // 无作用
CTRL_TASK_saveCmdUnit.Ex = 0x0001;
}
else if( GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_MAIN] == 1 )
{ // 主帅帐2级
CTRL_TASK_saveCmdUnit.Ex = 0x0003;
}
else if( GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_MAIN] >= 2 )
{ // 主帅帐3级
CTRL_TASK_saveCmdUnit.Ex = 0x0007;
}
//CTRL_TASK_saveCmdUnit.Ex = 0xFFFF;
break;
case 8: // 车兵所1
case 9: // 车兵所2
CTRL_TASK_saveCmdUnit.Cmd = COMMANDUNIT_VEHICLEMANSCHOOL;
// 主帅帐1级
CTRL_TASK_saveCmdUnit.Ex = 0x0001;
if( GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_MAIN] >= 2 )
{ // 主帅帐3级
if( GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_TOUSHICHE] == 0 )
CTRL_TASK_saveCmdUnit.Ex = 0x0003;
else if( GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_TOUSHICHE] == 1 )
CTRL_TASK_saveCmdUnit.Ex = 0x0005;
}
else if( GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_MAIN] >= 1
&& GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_TOUSHICHE] == 0 )
{ // 主帅帐2级
CTRL_TASK_saveCmdUnit.Ex = 0x0003;
}
//CTRL_TASK_saveCmdUnit.Ex = 0xFFFF;
break;
case 10: // 粮仓1
case 11: // 粮仓1
break;
case 12: // 步兵所1
case 13: // 步兵所2
CTRL_TASK_saveCmdUnit.Cmd = COMMANDUNIT_FOOTMANSCHOOL;
if( GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_MAIN] == 0 )
{ // 无作用
CTRL_TASK_saveCmdUnit.Ex = 0x0001;
}
else if( GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_MAIN] == 1 )
{ // 主帅帐2级
CTRL_TASK_saveCmdUnit.Ex = 0x0003;
}
else if( GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_MAIN] == 2 )
{ // 主帅帐3级
CTRL_TASK_saveCmdUnit.Ex = 0x0007;
}
else if( GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_MAIN] >= 3 )
{ // 主帅帐4级
CTRL_TASK_saveCmdUnit.Ex = 0x000F;
}
//CTRL_TASK_saveCmdUnit.Ex = 0xFFFF;
break;
case 14: // 弓兵所1
case 15: // 弓兵所2
CTRL_TASK_saveCmdUnit.Cmd = COMMANDUNIT_BOWMANSCHOOL;
if( GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_MAIN] == 0 )
{ // 无作用
CTRL_TASK_saveCmdUnit.Ex = 0x0001;
}
else if( GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_MAIN] == 1 )
{ // 主帅帐2级
CTRL_TASK_saveCmdUnit.Ex = 0x0003;
}
else if( GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_MAIN] == 2 )
{ // 主帅帐3级
CTRL_TASK_saveCmdUnit.Ex = 0x0007;
}
else if( GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_MAIN] >= 3 )
{ // 主帅帐4级
CTRL_TASK_saveCmdUnit.Ex = 0x000F;
}
//CTRL_TASK_saveCmdUnit.Ex = 0xFFFF;
break;
case 16: // 城门1
case 17: // 城门2
case 18: // 箭楼1
case 19: // 箭楼2
break;
case 20: // 船坞
CTRL_TASK_saveCmdUnit.Cmd = COMMANDUNIT_SHIPYARD;
// 主帅帐1级
if( GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_MAIN] >= 2 )
CTRL_TASK_saveCmdUnit.Ex = 0x0007;
else if( GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_MAIN] == 1 )
CTRL_TASK_saveCmdUnit.Ex = 0x0003;
else
CTRL_TASK_saveCmdUnit.Ex = 0x0001;
if( GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_MAIN] >= 2
&& GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_GONGJIAN] == 3
&& GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_BINGQI] == 3 )
{ // 主帅帐3级,木材场3级,武器场3级
if( GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_CHUAN1] == 0 )
CTRL_TASK_saveCmdUnit.Ex |= 0x0008;
if( GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_CHUAN2] == 0 )
CTRL_TASK_saveCmdUnit.Ex |= 0x0010;
if( GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_CHUAN3] == 0 )
CTRL_TASK_saveCmdUnit.Ex |= 0x0020;
if( GAME.nID > 17 )
CTRL_TASK_saveCmdUnit.Ex |= 0x0040; // 是曹操,有连船
}
else if( GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_MAIN] >= 2
&& GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_GONGJIAN] >= 2
&& GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_BINGQI] >= 2 )
{ // 主帅帐3级,木材场2级,武器场2级
if( GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_CHUAN1] == 0 )
CTRL_TASK_saveCmdUnit.Ex |= 0x0008;
if( GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_CHUAN3] == 0 )
CTRL_TASK_saveCmdUnit.Ex |= 0x0020;
if( GAME.nID > 17 )
CTRL_TASK_saveCmdUnit.Ex |= 0x0040; // 是曹操,有连船
}
else if( GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_MAIN] >= 1
&& GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_GONGJIAN] >= 1
&& GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_BINGQI] >= 1
&& GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_CHUAN1] >= 0 )
{ // 主帅帐2级,木材场2级,武器场2级
if( GAME.Players[GAME.nMe].nGrade[PLAYER_GRADE_CHUAN1] == 0 )
CTRL_TASK_saveCmdUnit.Ex |= 0x0008;
}
//CTRL_TASK_saveCmdUnit.Ex = 0xFFFF;
break;
case 21: // 特殊
break;
case 22: // 铁矿
break;
case 23: // 钱庄
CTRL_TASK_saveCmdUnit.Cmd = COMMANDUNIT_SHOP;
CTRL_TASK_saveCmdUnit.Ex = 0xFFFF;
break;
case 24: // 大旗
break;
}
}
/*
// 寻找某个单元是否已经在在焦点选中数组中了
BOOL CTRL_AssembleFindDuplicate( WORD nID )
{
for ( int i=0; i<CTRL_nHitCouner; i++ )
{
if( CTRL_hitSrc[i].nID == nID )
return TRUE;
}
return FALSE;
}
*/
// 检测鼠标拖出的框内是否包含单元(命令主体)
// 只设置CTRL_hitSrc的内容nID, nLevel
// 检测步骤:
// 1:是否是自己的部队
// 2:该部队是否还活着
// 3:如果选中将领,则该将领的所有下属士兵都被选中
// 4:如果有未整编的部队,则只有未整编的部队被选中
// 4.1:如果是工人,只有工人被选中
// 4.2:如果是船,则只有船被选中
// 4.3:如果是一般士兵,只有士兵被选中
// 5:如果都是整编的部队,则被选中
// 6:如果是敌人的部队,则被选中
// 7:如果是建筑,则最后一个建筑被选中
// detect if mouse dragging rectangle contains units
// prcHit : rectangle mouse dragging
// wParam : 当响应时,用来查看是否Ctrl或Shift键被按下了
// return value : TRUE if hit something
BOOL CTRL_TASK_AssembleSrc( CONST RECT *prcHit, WORD wParam )
{
int i, j;
WORD codeUEx;
MOUSE_HITRESULT_STRUCT hit;
// 当检测到将领时,此指针有效,保留该将领的指针
struct UNIT_STRUCT *pGen = NULL;
// 当检测到第一个建筑时,保存该建筑
WORD codeBuild = MAP_DATA_NONE;
// 当检测到某个士兵属于某个将领时,保存该将领的ID
WORD codeGen = MAP_DATA_NONE;
// 当检测到某个士兵属于某个将领时,保存该士兵自己的ID
WORD sArrayY[CTRL_TASK_LIST_MAX-1];
// 有归属的士兵计数器
int nYCounter = 0;
// 当检测到某个士兵不属于任何将领时,保存该士兵自己的ID
WORD sArrayN[CTRL_TASK_LIST_MAX-1];
// 无归属的士兵计数器
int nNCounter = 0;
// 当检测到某个工人不属于任何将领时,保存该工人自己的ID
WORD sArrayNW[CTRL_TASK_LIST_MAX-1];
// 无归属的士兵计数器
int nNWCounter = 0;
// 当检测到我方船只时,保存该船只的ID
WORD sArrayNS[CTRL_TASK_LIST_MAX-1];
// 船只计数器
int nNSCounter = 0;
// 当选中敌人的单元时,为真
BOOL bEnemy = FALSE;
// 只能有一方敌人被选中
int nEPlayer = -1;
// 当选中敌人的士兵时,保存该士兵ID
WORD sArrayE[CTRL_TASK_LIST_MAX-1];
// 敌人士兵的计数器
int nECounter = 0;
if( IsRectEmpty( prcHit ) && prcHit->left == 0 )
return FALSE;
// if no rectangle, do it with point
// 检测鼠标点击某一点的效果
if( IsRectEmpty( prcHit ) )
{
POINT pt;
pt.x = prcHit->left;
pt.y = prcHit->top;
if( MOUSE_HitTestU( pt, &hit ) )
{
// set single source object
Assert( hit.nType == MOUSE_HITRESULT_UNIT );
// set source objects
codeUEx = hit.wCode;
Assert( codeUEx != MAP_DATA_NONE );
struct UNIT_STRUCT *pUnit = MAP_GetUnit( codeUEx );
Assert( pUnit );
// 1:是否是自己的单元,只有自己人才能被选中
// 2:单元还活着吗?因为使用了MOUSE_HitTestU(),单元一定活着
// 在MOUSE_HitTestU()中,对此进行了判定
if( !EYE_IfUnitIsBuild( pUnit ) )
{ // 如果是士兵,则记下
if( wParam == 4 && pUnit->Draw.bUpdate == TRUE )
{
// shift键按下,而且重了,do nothing
}
else if( EYE_IfUnitIsGen( pUnit ) )
{ // 记下将领
pGen = pUnit; //break;
}
else //if( EYE_IfUnitIsSoldier( pUnit ) )
{ // 记下士兵
if( EYE_IfSheIsMine( pUnit ) )
bEnemy = FALSE;
else bEnemy = TRUE;
if( bEnemy == FALSE )
{
if( pUnit->Soldier.nGenID != MAP_DATA_NONE )
{
sArrayY[nYCounter] = codeUEx;
nYCounter++;
}
else if( EYE_IfUnitIsWorker( pUnit ) )
{
sArrayNW[nNWCounter] = codeUEx;
nNWCounter++;
}
else if( EYE_IfUnitIsShip( pUnit ) )
{
sArrayNS[nNSCounter] = codeUEx;
nNSCounter++;
}
else
{
sArrayN[nNCounter] = codeUEx;
nNCounter++;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -