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

📄 tgeneral.cpp

📁 赤壁之战(游戏原码)
💻 CPP
📖 第 1 页 / 共 5 页
字号:
/*	      [ GENERAL.C ]
 *    GENERAL.C FOR INSTINCE MODULE .
 *    Chbi Fight emperor interface module.
 *    Programmed By Y.Tian. No#Eye. WayAhead. Co. 1997.
 *    Data 3/18/1997.
 */

#include "stdafx.h"
#include "temperor.h"
#include "tgeneral.h"
#include "Assert.h"
#include "CBRDelay.h"

#define TY_JIMOU 

OBEYP ObeyP[5][4];

WORD JiMouIfOk(UNIT_STRUCT * Pobject,CTRL_JIMOU Jimou)
{
	switch (Jimou)
	{
			//激励
		case JILI:
			break;

			//加速
		case JIASU:
			break;

			//减速
		case JIANSU:
			break;

			//远视
		case YUANSHI:
			break;

			//混乱
		case HUNLUAN:
			break;

			//滚木
		case GUNMU:
			break;

			//埋伏
		case MAIFU:
			break;

			//恢复
		case HUIFU:
			break;

			//火攻
		case HUOGONG:
			break;
	}
	return (1);
}

BOOL GeneralJiMou(UNIT_STRUCT * Pobject,CTRL_JIMOU Jimou)
{
	struct CTRL_TASK_STRUCT Task;

	Assert(Pobject->nType == MAP_UNIT_TYPE_GEN
		||Pobject->nType == MAP_UNIT_TYPE_WGEN
		||Pobject->nType == MAP_UNIT_TYPE_SGEN);

	//if (JiMouIfOk(Pobject,Jimou) == 0)
	if (EYE_IfJiMou(Pobject->Gen.nID, Jimou) == 0)
		return (FALSE);

	if (RUN_MOULUE_IfEnough(Pobject,Jimou))
	{
		CTRL_TASK_Clear( &Task );
		Task.bDone=1;
		Task.nID=Pobject->nID;
		Task.nTaskID=JIMOU;
		Task.nTaskIDEx2=Jimou;

		switch (Jimou)
		{
			//激励
		case JILI:
			Task.nTaskIDEx=2;
			Task.nParam1=Pobject->nID; 
			break;

			//加速
		case JIASU:
			Task.nTaskIDEx=2;
			Task.nParam1=Pobject->nID; 
			break;

			//减速
		case JIANSU:
			Task.nTaskIDEx=2;
			Task.nParam1=Pobject->nIDAttackMe; 
			break;

			//远视
		case YUANSHI:
			Task.nTaskIDEx=2;
			Task.nParam1=Pobject->nID; 
			break;

			//混乱
		case HUNLUAN:
			Task.nTaskIDEx=2;
			Task.nParam1=Pobject->nIDAttackMe; 
			break;

			//滚木
		case GUNMU:
			break;

			//埋伏
		case MAIFU:
			Task.nTaskIDEx=2;
			break;

			//恢复
		case HUIFU:
			Task.nTaskIDEx=2;
			Task.nParam1=Pobject->nID; 
			break;

			//火攻
		case HUOGONG:
			Task.nTaskIDEx=1;
			Task.nParam1=0;
			break;
		}
	
		//WriteLogFile("JIMOU.TY","JIMOU\n");
		CTRL_TASK_DeployByComputer(Pobject->Draw.nPlayer,&Task);
		return (TRUE);
	}
	return (FALSE);
}

void IronGeneralProcess(WORD player)
{  WORD i;
   UNIT_STRUCT * Pobject;
   UNIT_STRUCT * Pobject1;
   struct CTRL_TASK_STRUCT Task;

   if (Ironworker[player].GeneralID == CBNULL )
     return;
   if (ObeyP[player][0].AttackPos == CBNULL)
   {  Pobject=MAP_GetUnit(Ironworker[player].GeneralID);

      //以防万一
	   if (Pobject->nType == MAP_UNIT_TYPE_BUILDING
		   ||Pobject->nType == MAP_UNIT_TYPE_NONE
		  ||Pobject->nType == MAP_UNIT_TYPE_RESOURCE
		  ||Pobject->nType == MAP_UNIT_TYPE_SPECIAL
		  ||Pobject->nType == MAP_UNIT_TYPE_FLAG
		  ||Pobject->nType == MAP_UNIT_TYPE_SHIPYARD
		  ||Pobject->nType == MAP_UNIT_TYPE_LADDER)
		   return;

      if (Pobject->nIDAttackMe != MAP_DATA_NONE)
      {  
         Pobject1=MAP_GetUnit(Pobject->nIDAttackMe);
		 //以防万一
	   if (Pobject1->nType == MAP_UNIT_TYPE_BUILDING
		   ||Pobject1->nType == MAP_UNIT_TYPE_NONE
		  ||Pobject1->nType == MAP_UNIT_TYPE_RESOURCE
		  ||Pobject1->nType == MAP_UNIT_TYPE_SPECIAL
		  ||Pobject1->nType == MAP_UNIT_TYPE_FLAG
		  ||Pobject1->nType == MAP_UNIT_TYPE_SHIPYARD
		  ||Pobject1->nType == MAP_UNIT_TYPE_LADDER)
		   return;

		 if (EYE_IfUnitIsDead(Pobject1) != TRUE)
		 {
			 /*

#ifdef TY_JIMOU 

			 switch(getrandom( 0,1 ))
			 {
			 case 0:
				 GeneralJiMou(Pobject,HUNLUAN);
				 break;
			 case 1:
				 GeneralJiMou(Pobject,JIANSU);
				 break;
			 }
#endif

			*/

			 CTRL_TASK_Clear( &Task );
			 if (Defancesoldier[player][0].GeneralID == CBNULL)
			 {
				 if (Defancesoldier[player][0].WorkerNum != 0)
				 {
					 for (i=0;i<=Defancesoldier[player][0].WorkerNum;i++)
					 {
						 if (Defancesoldier[player][0].WorkerArrays[i] != CBNULL)
						 {
							 Pobject1=MAP_GetUnit(Defancesoldier[player][0].WorkerArrays[i]);
							 //以防万一
						   if (Pobject1->nType == MAP_UNIT_TYPE_BUILDING
							   ||Pobject1->nType == MAP_UNIT_TYPE_NONE
							  ||Pobject1->nType == MAP_UNIT_TYPE_RESOURCE
							  ||Pobject1->nType == MAP_UNIT_TYPE_SPECIAL
							  ||Pobject1->nType == MAP_UNIT_TYPE_FLAG
							  ||Pobject1->nType == MAP_UNIT_TYPE_SHIPYARD
							  ||Pobject1->nType == MAP_UNIT_TYPE_LADDER)
							   return;
							 if (EYE_IfUnitIsDead(Pobject1) != TRUE)
							 {
								 Task.bDone=1;
							     Task.nID=Defancesoldier[player][0].WorkerArrays[i];
								 Task.nTaskID=GONGJI;
								 Task.nTaskIDEx=2;
								 Task.nParam1=Pobject->nIDAttackMe;
								 CTRL_TASK_DeployByComputer(player,&Task);
							 }
							 else
							 {
								 continue;
							 }
						 }
					 }

				 }
				 return ;
			 }
			 else
			 {    Task.bDone=1;
				  Task.nID=Defancesoldier[player][0].GeneralID;
				  Task.nTaskID=GONGJI;
				  Task.nTaskIDEx=2;
				  Task.nParam1=Pobject->nIDAttackMe;
				  CTRL_TASK_DeployByComputer(player,&Task);
			 }
		 }
      }
      else   //Send obey.
      {  for (i=1;i<Ironworker[player].WorkerNum+1;i++)
		 {  //CTRL_TASK_Clear( &Task );
			if (Ironworker[player].WorkerArrays[i] != CBNULL)
			{  Pobject=MAP_GetUnit(Ironworker[player].WorkerArrays[i]);

					//以防万一
			   if (Pobject->nType == MAP_UNIT_TYPE_BUILDING
				   ||Pobject->nType == MAP_UNIT_TYPE_NONE
					  ||Pobject->nType == MAP_UNIT_TYPE_RESOURCE
					  ||Pobject->nType == MAP_UNIT_TYPE_SPECIAL
					  ||Pobject->nType == MAP_UNIT_TYPE_FLAG
					  ||Pobject->nType == MAP_UNIT_TYPE_SHIPYARD
					  ||Pobject->nType == MAP_UNIT_TYPE_LADDER)
				   return;

			   if (EYE_IfUnitIsDead(Pobject) == TRUE)
			   {  Ironworker[player].WorkerNum--;
				  if (Ironworker[player].WorkerNum <= WORKER_BASE)
				  {  Ironworker[player].WorkerArrays[0]=CBFALSE;
					 Ironworker[player].WorkerArrays[i]=CBNULL;
					 if (BuildPoint[player][MAINBATTALION].hPos != CBTRUE)
			             continue;
					 AccedeForIron[player].ID=Ironworker[player].GeneralID;
					 Ironworker[player].Env=1;
					 continue;
				  }
			   }

			   if (Pobject->Task.nTaskID == YUNSONG)
			      Assert(Pobject->Task.nTaskIDEx != 1); 
			   Assert (Pobject->nType == 10);
			   if (EYE_IfUnitIsDead(Pobject) == TRUE)
				   continue;
			   if (Pobject->Status.nTaskID == DUSE
				   &&Pobject->Task.nTaskID == YUNSONG)
			   {
				   CTRL_TASK_Clear( &Task );
				   Task.nID=Pobject->nID;
				   Task.nTaskID=YUNSONG;
				   Task.nTaskIDEx=2;
				   Task.nTaskIDEx2=TIEKUANG;

				   if (BuildPoint[player][MAINBATTALION].hPos != CBTRUE)
					   continue;
				   Task.nParam1=TY_FindNearObject(0,
												  22,
												  BuildPoint[player][MAINBATTALION].BPoint->Draw.nX,
												  BuildPoint[player][MAINBATTALION].BPoint->Draw.nY);
				   if (Task.nParam1 == MAP_DATA_NONE)
					   return;
				   //Tsource[Player].Ironsource=Task.nParam1;
				   Pobject=MAP_GetUnit(Tsource[player].Ironsource);

				   Task.nParam4=TY_FindNearHome(player,Pobject->Draw.nX,Pobject->Draw.nY,2);
				   if (Task.nParam4 == MAP_DATA_NONE)
					   return;
				   Pobject=MAP_GetUnit(Task.nParam1);

				   /*
				   if (Pobject->Draw.nPlayer == GAME.nMe
					   ||Pobject->Draw.nPlayer != player)
					   WriteErrorFile("player.err",Pobject->Draw.nPlayer);
				   */
				   Task.bDone=1;
				   Assert(Task.nTaskIDEx == 2 );
				   CTRL_TASK_DeployByComputer(player,&Task);
				   continue;

			   }
			   else
			   {
				   if (Pobject->Status.nTaskID == DUSE
				   &&Pobject->Task.nTaskID == HUISONG)
				   {
					   CTRL_TASK_Clear( &Task );
					   Task.nID=Pobject->nID;
					   Task.nTaskID=HUISONG;
					   Task.nTaskIDEx=2;
					   Task.nTaskIDEx2=TIEKUANG;

					   if (BuildPoint[player][MAINBATTALION].hPos != CBTRUE)
					     continue;
					   Task.nParam4=TY_FindNearObject(0,
													  22,
													  BuildPoint[player][MAINBATTALION].BPoint->Draw.nX,
													  BuildPoint[player][MAINBATTALION].BPoint->Draw.nY);
					   if (Task.nParam4 == MAP_DATA_NONE)
						   return;
					   //Tsource[Player].Ironsource=Task.nParam1;
					   Pobject=MAP_GetUnit(Tsource[player].Ironsource);
					   Task.nParam1=TY_FindNearHome(player,Pobject->Draw.nX,Pobject->Draw.nY,2);
					   Pobject=MAP_GetUnit(Task.nParam1);
					   /*
					   if (Pobject->Draw.nPlayer == GAME.nMe
						   ||Pobject->Draw.nPlayer != player)
						   WriteErrorFile("player.err",Pobject->Draw.nPlayer);
*/
					   if (Task.nParam1 == MAP_DATA_NONE)
						   return;
					   
					   Task.bDone=1;
					   CTRL_TASK_DeployByComputer(player,&Task);
					   continue;
				   }
			   }

			   Pobject1=MAP_GetUnit(Ironworker[player].GeneralID);

			   //以防万一
			   if (Pobject1->nType == MAP_UNIT_TYPE_BUILDING
				   ||Pobject1->nType == MAP_UNIT_TYPE_NONE
					  ||Pobject1->nType == MAP_UNIT_TYPE_RESOURCE
					  ||Pobject1->nType == MAP_UNIT_TYPE_SPECIAL
					  ||Pobject1->nType == MAP_UNIT_TYPE_FLAG
					  ||Pobject1->nType == MAP_UNIT_TYPE_SHIPYARD
					  ||Pobject1->nType == MAP_UNIT_TYPE_LADDER)
				   return;
			   
			   if (Pobject->Task.nTaskID == YUNSONG)
			   {
				   if (Pobject1->Task.nTaskID == YUNSONG)
				   {
					   if (Pobject->Task.nParam4 != Pobject1->Task.nParam4)
					   {
						     Pobject->Task.nParam4=Pobject1->Task.nParam4;
					   }

				   }
				   if (Pobject1->Task.nTaskID == HUISONG)
				   {
					   if (Pobject->Task.nParam4 != Pobject1->Task.nParam1)
					   {
						     Pobject->Task.nParam4=Pobject1->Task.nParam1;
					   }

				   }
			   }

			   if (Pobject->Task.nTaskID != HUISONG
				 &&Pobject->Task.nTaskID != YUNSONG
				 &&Pobject->nIDAttackMe == MAP_DATA_NONE)
				   if  (Tsource[player].Ironsource != CBNULL)
				   {  if (Pobject->Soldier.nResource != 0)
					  {  CTRL_TASK_Clear( &Task );   
						 Task.bDone=1;
						 Task.nID=Ironworker[player].WorkerArrays[i];
						 Task.nTaskID=HUISONG;
						 Task.nTaskIDEx=2;
						 Task.nTaskIDEx2=TIEKUANG;
						 Task.nParam1=Pro[player][0].HomeID;

						 Pobject1=MAP_GetUnit(Task.nParam1);
						 /*
						 if (Pobject1->Draw.nPlayer == GAME.nMe)
							 WriteLogFile("Player.ty","error1\n");
*/
						 Task.nParam4=Tsource[player].Ironsource;
						 if (Pro[player][0].HomeID == CBNULL)
							 return;
						 Assert(Task.nTaskIDEx == 2 );
						 CTRL_TASK_DeployByComputer(player,&Task);	
					  }
					  else
					  {   CTRL_TASK_Clear( &Task );
						  Task.bDone=1;
						  Task.nID=Ironworker[player].WorkerArrays[i];
						  Task.nTaskID=YUNSONG;
						  Task.nTaskIDEx=2;
						  Task.nTaskIDEx2=TIEKUANG;
						  Task.nParam1=Tsource[player].Ironsource;
						  Task.nParam4=Pro[player][0].HomeID;

						  Pobject1=MAP_GetUnit(Task.nParam4);
						  /*
						 if (Pobject1->Draw.nPlayer == GAME.nMe)
							 WriteLogFile("Player.ty","error1\n");
							 */

						  if (Pro[player][0].HomeID == CBNULL)
							 return;
						  Assert(Task.nTaskIDEx == 2 );
						  CTRL_TASK_DeployByComputer(player,&Task);	
					  }
				   }
			}
		 }
      }
   }

//General avoid.

}
void LumberGeneralProcess(WORD  player,WORD Level)
{  WORD i,ExCode;
   UNIT_STRUCT * Pobject;
   UNIT_STRUCT * Pobject1;
   struct CTRL_TASK_STRUCT Task;

   if (Lumberworker[player].GeneralID == CBNULL )
     return;

   if (Tsource[player].Lumbersource.X != CBNULL
     &&Tsource[player].Lumbersource.Y != CBNULL)
   {
	   ExCode=EYE_GetGResType(0,Tsource[player].Lumbersource.X,Tsource[player].Lumbersource.Y);

	   if (ExCode == QXZIYUAN)
	   {
		   switch (Level)
		   {
		   case 7:
			   if (player != GAME.nMe)
			   {
				   GetLumberId(20,150,player,
					   Tsource[player].Lumbersource.X,
					   Tsource[player].Lumbersource.Y);
			   }
			   else
			   {
				   GetLumberId(50,50,player,
					   Tsource[player].Lumbersource.X,
					   Tsource[player].Lumbersource.Y);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -