📄 net_face.cpp
字号:
#include <dplay.h>
#include "cbmap.h"
#include "Assert.h"
#include "Net_Face.h"
#include "cbrun.h"
#include "cbdraw.h"
#include "ddcompo.h"
#include "cbgame.h"
#include "cbshadow.h"
#include "cbmouse.h"
#include "cbother.h"
#include "cbprompt.h"
#include "cbdata.h"
#include "cbmini.h"
#include "L_SCAN.h"
#include "ddmenu.h"
#include "cbeyes.h" // getrandom
/////////////////////Liugang///////////////////////
extern void GAME_SetAlly( int nPlayer1, int nPlayer2, BOOL bSet);
extern int CTRL_nTaskHeader[GAME_PLAYER_MAX];
extern BOOL GAME_bNetPlayerOK[GAME_PLAYER_MAX];// 确认连接完成
extern int CTRL_nTaskTail[GAME_PLAYER_MAX];
extern int CTRL_nTaskHead[GAME_PLAYER_MAX];
/////////////////////Liugang///////////////////////
///////////////////////初始化游戏时用///////////////////////////
extern void MAP_InitGUR();
extern void SHADOW_Clear();
extern void MOUSE_SetState( int nState, BOOL bForce );
extern void OTHER_InitOther();
extern void TY_EmprerorAIPosClear();
extern void FACE_ShowCommandUnit(int UnitID, DWORD Flag);
extern struct CTRL_TASK_SAVE_CMDUNIT CTRL_TASK_saveCmdUnit;
extern void CTRL_TASK_ClearAssembleSrc( BOOL bForce );
extern void CTRL_TASK_ClearAssembleDest();
extern BOOL DATA_ReloadDATAFile( HWND hwnd );
extern BOOL MINI_Load();
extern void MINI_DrawAll(BOOL bDraw);
extern BOOL GAME_bBegin;
extern struct GAME_TIME_STRUCT GAME_Time;
extern CDDMenu Menu_NetWork_SetNet;
extern CDDMenu * CurrentMenu;
extern void FACE_DeleteAllBitmap() ;
extern void FACE_DeleteAllCheckBox(void);
extern void FACE_InitAllStrings() ;
extern void FACE_DeleteAllText() ;
///////////////////////初始化游戏时用///////////////////////////
//---------LHJ----------
#include "marco.h"
#include "interfac.h"
#include "interfa2.h"
//---------LHJ----------
#ifdef _DEBUG
#define OUTTIME 20000
#else
#define OUTTIME 10000
#endif
extern int DP_IsHost;//用于标示本进程在游戏中是否为主机,留着可能扩充使用
extern BOOL GAME_bNetwork;
extern int DP_NetworkInterface(int Action, HWND MainWndHandle);
extern int DP_ReceiveGameMessages( void );
extern int DP_SendGameMessages(/*DWORD to*/);
extern BOOL CTRL_TASK_LIST_SendEx( int nPlayer, CONST struct CTRL_TASK_STRUCT *pTask, int nIndex ,int nTail);
extern int DH_ComputerTaskNum[CTRL_TASK_LIST_MAX+CTRL_TASK_LIST_MAX];
extern int CB_Counter;//在进入战场之前,应该只置0。
int Games_Status[MAX_PLAYERS+1];//初始化时,应该置为-1。
extern BYTE DP_SendMessageBuff[BUFFER_MAX_BYTE];//用于存储玩家要发送的消息
extern BYTE DP_ReadMessage[BUFFER_MAX_BYTE];//用于将消息队列中的消息读出并传给调用者
extern int DP_ProviderNO;//用于返回玩家对网络服务的选择
extern int DP_SessionNO;//用于返回玩家对已经创建的游戏Session的选择
extern LPSTR DP_FullName;//玩家给Session起的名字
extern LPSTR DP_NickName;//玩家给本人起的在游戏中的名字
extern PlayerInfo DP_PlayerInformation[MAX_PLAYERS];
struct CTRL_TASK_STRUCT Bak_Game_Message;
extern struct CTRL_TASK_STRUCT CTRL_TaskList[GAME_PLAYER_MAX][CTRL_TASK_LIST_MAX+CTRL_TASK_LIST_MAX];
short DH_TaskAnswer[GAME_PLAYER_MAX][CTRL_TASK_LIST_MAX+CTRL_TASK_LIST_MAX];
int DH_AnswerStatus;
int DH_ReceiveAnswer=-1;
extern struct DP_NetworkInfor DP_NetPlayerInfor[5];
int DH_JoinPlayer[5];
int Game_Return_Status[5];
int Game_Ctrl_Status;
int DH_GoNextLevel;
int DH_CurrentCtrlPlayer;
int NW_BeginTime;
int IF_GoBackMain;
#define ALREADY_GO_BAK 0
#define NO_GO_BAK -1
void DH_WriteLogFile();
int DH_ReceiveMessage();
BOOL GAME_ReadNetworkBTLFile( HWND hwnd, LPCTSTR filename, LPCTSTR path );
int Send_Destroy_Other(int PlayerNum);
int Send_Destroy_Me(void);
int DH_ReceiveMessage()
{
int MessageType=0;
int Game_Boy_Num=0;
int Game_Boy_Syn_Num=0;
struct CTRL_TASK_STRUCT Game_Boy_Message;
// static i=0;
// int j;
int Other_Counter;
DP_ReceiveGameMessages();
if(DP_ReadMessage[0]!='\0')
{
// char test32[255];
// wsprintf(test32,"%s\n",(char *)DP_ReadMessage);
// WriteLogFile("Test_message.log",(char *)test32);
}
else{return(-1);}
sscanf((char *)DP_ReadMessage,"%d %d ",&MessageType,&Game_Boy_Num);
switch(MessageType)
{
case DP_MESSAGE:
{
{ //char test32[255];
//wsprintf(test32,"%s\n",(char *)DP_ReadMessage);
//WriteLogFile("Test_message.log",(char *)test32);
}
if(Bak_Game_Message.nID!=0)
{
Game_Boy_Message.bDone =Bak_Game_Message.bDone;
Game_Boy_Message.nID =Bak_Game_Message.nID;
Game_Boy_Message.nLevel =Bak_Game_Message.nLevel;
Game_Boy_Message.bIRQ =Bak_Game_Message.bIRQ;
Game_Boy_Message.nTaskID =Bak_Game_Message.nTaskID;
Game_Boy_Message.nTaskIDEx =Bak_Game_Message.nTaskIDEx;
Game_Boy_Message.nTaskIDEx2=Bak_Game_Message.nTaskIDEx2;
Game_Boy_Message.nParam1 =Bak_Game_Message.nParam1;
Game_Boy_Message.nParam2 =Bak_Game_Message.nParam2;
Game_Boy_Message.nParam3 =Bak_Game_Message.nParam3;
Game_Boy_Message.nParam4 =Bak_Game_Message.nParam4;
//////////////////////////////////////////
Bak_Game_Message.bDone =0;
Bak_Game_Message.nID =0;
Bak_Game_Message.nLevel =0;
Bak_Game_Message.bIRQ =0;
Bak_Game_Message.nTaskID =QUXIAO;
Bak_Game_Message.nTaskIDEx =0;
Bak_Game_Message.nTaskIDEx2=0;
Bak_Game_Message.nParam1 =0;
Bak_Game_Message.nParam2 =0;
Bak_Game_Message.nParam3 =0;
Bak_Game_Message.nParam4 =0;
//////////////////////////////////////////
/* if(CTRL_TASK_LIST_SendExEx(Game_Boy_Num,(CONST struct CTRL_TASK_STRUCT *)&Game_Boy_Message)!=TRUE)
{
#ifdef NETWORK
MessageBox(NULL,"Send Message to the task queue error!!!"," Error",MB_OK);
#endif
}*/
Game_Boy_Message.bDone =0;
Game_Boy_Message.nID =0;
Game_Boy_Message.nLevel =0;
Game_Boy_Message.bIRQ =0;
Game_Boy_Message.nTaskID =QUXIAO;
Game_Boy_Message.nTaskIDEx =0;
Game_Boy_Message.nTaskIDEx2=0;
Game_Boy_Message.nParam1 =0;
Game_Boy_Message.nParam2 =0;
Game_Boy_Message.nParam3 =0;
Game_Boy_Message.nParam4 =0;
}
int TaskSerialNum,TaskTail;
sscanf((char *)DP_ReadMessage,"%d %d %d %d %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld %ld %d",&MessageType,&Game_Boy_Num,&Other_Counter,&TaskSerialNum,&Game_Boy_Message.bDone,&Game_Boy_Message.nID,&Game_Boy_Message.nLevel,&Game_Boy_Message.bIRQ,&Game_Boy_Message.nTaskID,&Game_Boy_Message.nTaskIDEx,&Game_Boy_Message.nTaskIDEx2,&Game_Boy_Message.nParam1,&Game_Boy_Message.nParam2,&Game_Boy_Message.nParam3,&Game_Boy_Message.nParam4,&TaskTail);
if(Other_Counter==CB_Counter+1)
{
if(Bak_Game_Message.nID!=0)
{MessageBox(NULL,"Receive the message is error!!!"," Error",MB_OK);}
else{
Bak_Game_Message.bDone =Game_Boy_Message.bDone;
Bak_Game_Message.nID =Game_Boy_Message.nID;
Bak_Game_Message.nLevel =Game_Boy_Message.nLevel;
Bak_Game_Message.bIRQ =Game_Boy_Message.bIRQ;
Bak_Game_Message.nTaskID =Game_Boy_Message.nTaskID;
Bak_Game_Message.nTaskIDEx =Game_Boy_Message.nTaskIDEx;
Bak_Game_Message.nTaskIDEx2=Game_Boy_Message.nTaskIDEx2;
Bak_Game_Message.nParam1 =Game_Boy_Message.nParam1;
Bak_Game_Message.nParam2 =Game_Boy_Message.nParam2;
Bak_Game_Message.nParam3 =Game_Boy_Message.nParam3;
Bak_Game_Message.nParam4 =Game_Boy_Message.nParam4;
//////////////////////
Game_Boy_Message.bDone =0;
Game_Boy_Message.nID =0;
Game_Boy_Message.nLevel =0;
Game_Boy_Message.bIRQ =0;
Game_Boy_Message.nTaskID =QUXIAO;
Game_Boy_Message.nTaskIDEx =0;
Game_Boy_Message.nTaskIDEx2=0;
Game_Boy_Message.nParam1 =0;
Game_Boy_Message.nParam2 =0;
Game_Boy_Message.nParam3 =0;
Game_Boy_Message.nParam4 =0;
////////////////////////////
Games_Status[Game_Boy_Num]=0;
return(OK);
}
}
////////////////////应答的信号的格式为(应答信号的标志,发出应答信号的玩家的号,发出消息的玩家的号,此消息的序号)
memset(DP_SendMessageBuff,0,sizeof(DP_SendMessageBuff));
wsprintf((char *)DP_SendMessageBuff,"%d %d %d %d",DP_MESSAGE_ANSWER,GAME.nMe,Game_Boy_Num,TaskSerialNum);
if(DP_NetworkInterface(DP_SEND_MESSAGE,NULL)!=OK)
{
#ifdef NETWORK
MessageBox(NULL,"Send Counter message error!!!","Error",MB_OK);
#endif
}
if(CTRL_TASK_LIST_SendEx(Game_Boy_Num,(CONST struct CTRL_TASK_STRUCT *)&Game_Boy_Message,TaskSerialNum,TaskTail)!=TRUE)
{
#ifdef NETWORK
MessageBox(NULL,"Send Message to the task queue error!!!"," Error",MB_OK);
#endif
}}
break;
case DP_MESSAGE_SYN:
sscanf((char *)DP_ReadMessage,"%d %d %d",&MessageType,&Game_Boy_Num,&Game_Boy_Syn_Num);
// memset(DP_SendMessageBuff,0,BUFFER_MAX_BYTE-1);
/* wsprintf((char *)DP_SendMessageBuff,"%d %d %d ",DP_SYN_ANSWER,GAME.nMe,Game_Boy_Syn_Num);
if(DP_NetworkInterface(DP_SEND_MESSAGE,NULL)!=OK)
{
#ifdef NETWORK
MessageBox(NULL,"Send Counter message error!!!","Error",MB_OK);
#endif
}*/
if(Game_Boy_Syn_Num==CB_Counter)
{
//////////////////////////////////
if(Bak_Game_Message.nID!=0)
{
Game_Boy_Message.bDone =Bak_Game_Message.bDone;
Game_Boy_Message.nID =Bak_Game_Message.nID;
Game_Boy_Message.nLevel =Bak_Game_Message.nLevel;
Game_Boy_Message.bIRQ =Bak_Game_Message.bIRQ;
Game_Boy_Message.nTaskID =Bak_Game_Message.nTaskID;
Game_Boy_Message.nTaskIDEx =Bak_Game_Message.nTaskIDEx;
Game_Boy_Message.nTaskIDEx2=Bak_Game_Message.nTaskIDEx2;
Game_Boy_Message.nParam1 =Bak_Game_Message.nParam1;
Game_Boy_Message.nParam2 =Bak_Game_Message.nParam2;
Game_Boy_Message.nParam3 =Bak_Game_Message.nParam3;
Game_Boy_Message.nParam4 =Bak_Game_Message.nParam4;
//////////////////////////////////////////
Bak_Game_Message.bDone =0;
Bak_Game_Message.nID =0;
Bak_Game_Message.nLevel =0;
Bak_Game_Message.bIRQ =0;
Bak_Game_Message.nTaskID =QUXIAO;
Bak_Game_Message.nTaskIDEx =0;
Bak_Game_Message.nTaskIDEx2=0;
Bak_Game_Message.nParam1 =0;
Bak_Game_Message.nParam2 =0;
Bak_Game_Message.nParam3 =0;
Bak_Game_Message.nParam4 =0;
//////////////////////////////////////////
/* if(CTRL_TASK_LIST_SendEx(Game_Boy_Num,(CONST struct CTRL_TASK_STRUCT *)&Game_Boy_Message)!=TRUE)
{
#ifdef NETWORK
MessageBox(NULL,"Send Message to the task queue error!!!"," Error",MB_OK);
#endif
}*/
Game_Boy_Message.bDone =0;
Game_Boy_Message.nID =0;
Game_Boy_Message.nLevel =0;
Game_Boy_Message.bIRQ =0;
Game_Boy_Message.nTaskID =QUXIAO;
Game_Boy_Message.nTaskIDEx =0;
Game_Boy_Message.nTaskIDEx2=0;
Game_Boy_Message.nParam1 =0;
Game_Boy_Message.nParam2 =0;
Game_Boy_Message.nParam3 =0;
Game_Boy_Message.nParam4 =0;
}
//////////////////////////////////
Games_Status[Game_Boy_Num]=0;
}
else{
if((Game_Boy_Syn_Num==CB_Counter+1)&&(Bak_Game_Message.nID==0))
{
Games_Status[Game_Boy_Num]=0;
// DH_WriteLogFile();
{
::RUN_RunUnits();
::DRAW_DrawMaps();
DDC_DisplayFrameRate();
}
CB_Counter++;
DH_SendCounterMessage(CB_Counter);
//应该强制的执行一轮::RUN_RunUnits();::DRAW_DrawMaps();DDC_DisplayFrameRate();
// char test2[255];
#ifdef NETWORK
MessageBox(NULL,"Have a Counter > My Counter!!!"," Error",MB_OK);
#endif
}
}
break;
case DP_MESSAGE_ANSWER:
{int SendTaskBoyNum,TaskSerialNum;
sscanf((char *)DP_ReadMessage,"%d %d %d %d",&MessageType,&Game_Boy_Num,&SendTaskBoyNum,&TaskSerialNum);
if(SendTaskBoyNum==GAME.nMe)
{
DH_TaskAnswer[Game_Boy_Num][TaskSerialNum]=0;
DH_ReceiveAnswer=0;
}}
break;
case DP_TALK:
{
char PlayerName[100],TalkMessage[100];
memset(PlayerName,0x00,sizeof(PlayerName)-1);
memset(TalkMessage,0x00,sizeof(TalkMessage)-1);
sscanf((char *)DP_ReadMessage,"%d %s %s",&MessageType,PlayerName,TalkMessage);
int Long=0;
Long=3+1+strlen(PlayerName)+1;
BYTE * pp=DP_ReadMessage;
pp+=Long;
strcpy(TalkMessage,(char *)pp);
FACE_SetNetworkMessage(PlayerName,TalkMessage);
}
break;
case DP_INIT_GAME:
//君主号忘记赋值到GAME结构中
{sscanf((char *)DP_ReadMessage,"%d %d",&MessageType,&Game_Boy_Num);
int j;
j=Game_Boy_Num;
char Temp_Name[100];
int Temp_Ally[5],Temp_Master;
int Diff_Ally_NO;
int Diff_Ally_Status;
int Ally_Use;
Diff_Ally_NO=0;
Diff_Ally_Status=0;
sscanf((char *)DP_ReadMessage,"%d %d %s %d %d %d %d %d %d",&MessageType,&Game_Boy_Num,Temp_Name,
&Temp_Master,&Temp_Ally[0],
&Temp_Ally[1],&Temp_Ally[2],
&Temp_Ally[3],&Temp_Ally[4]);
for(Ally_Use=0;Ally_Use<GAME_PLAYER_MAX;Ally_Use++)
{
GAME_SetAlly(Game_Boy_Num,Ally_Use,Temp_Ally[Ally_Use]);
/* if(DP_NetPlayerInfor[j].Ally_Infor[Ally_Use]!=Temp_Ally[Ally_Use])
{
Diff_Ally_NO=Ally_Use;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -