📄 tgeneral.cpp
字号:
/* [ 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 + -