📄 net_face.cpp
字号:
CTRL_TASK_saveCmdUnit.Busy = 0;
CTRL_TASK_ClearAssembleSrc( TRUE );
CTRL_TASK_ClearAssembleDest();
// 清除信息栏
struct PROMPT_BLOCK temp;
temp.PromptBlockId = PROMPT_NONE;
FACE_ShowPromptBlock( temp );
// 初始化战斗记分,Nov.6.1997
memset( &RUN_CountDown, 0, sizeof( RUN_CountDown ) );
// read files
// 读取战场文件
/* if( GAME_bDebugStage == TRUE )
{
FILE *fp = fopen( "stage.set", "rt" );
if( fp )
{
fscanf( fp, "%d", &GAME.nID );
fclose( fp );
}
GAME_bDebugStage = FALSE;
}
else
{
GAME.nID = nGameID;
}*/
GAME.nID = 0;
// 重新读取将领固定数据
DATA_ReloadDATAFile( hwndGame );
/* if( nGameID != 0 && nGameID != 17 ) // 不是第一关则不读原来的将领设置。
{ // 更新将领的改变数据,级别和经验
GAME_GetGenInfo( GAME_nSlot );
}
else
{
GAME_nSlot = 99;
}*/
GAME_nSlot = 99;
///////////////////此上的内容不变/////////////////////
///////////////////还要考虑关上君主AI/////////////////////
// load Game data, must after load shadow surfaces
if( ! GAME_ReadNetworkBTLFile( hwndGame, GAME.strNameBTL, GAME.strPathDAT ) )
{
OutputDebugString( "DRAW_LoadMaps Error(8): Read Battle data file error!\n" );
return FALSE;
}
// load Game data header, must before load minimap surfaces
if( ! ::GAME_ReadMEDHeader( hwndGame, GAME.strNameMED, GAME.strPathMED ) )
{
OutputDebugString( "DRAW_LoadMaps Error(30): Read med file error!\n" );
return FALSE;
}
// Load minimap surfaces, must after read med header, before read med file
// 缩略图要知道战场图的大小,但是在读取MED文件时,要在缩略图上显示数据
OutputDebugString( "MiniMap Load:\n" );
if( !MINI_Load() )
{
OutputDebugString( "DRAW_LoadMaps Error(6): Error when loading minimap surfaces!\n" );
return FALSE;
}
// 读取网络地图
if( ! ::GAME_ReadMEDFileNet( hwndGame, GAME.strNameMED, GAME.strPathMED ) )
{
OutputDebugString( "DRAW_LoadMaps Error(1): Read med file error!\n" );
return FALSE;
}
//////////////////从此以下不变/////////////////////
// 设置屏幕左边部队按钮
for( int i=0; i<PLAYER_GROUP_MAX-1; i++ )
{
if( GAME.Players[GAME.nMe].wGroup[i] != MAP_DATA_NONE )
FACE_SetNumberButtonState( i, BUTTON_UP, FALSE );
else
FACE_SetNumberButtonState( i, BUTTON_DISABLE, FALSE );
}
if( GAME.Players[GAME.nMe].wGroup[i] != MAP_DATA_NONE )
FACE_SetNumberButtonState( i, BUTTON_UP, TRUE );
else
FACE_SetNumberButtonState( i, BUTTON_DISABLE, TRUE );
// draw shadow
// SHADOW_DrawAll();
// draw minimap
MINI_DrawAll();
// 背景音乐
DATA_WAVE_MusicPlay( GAME.nMusicID );
GAME_bBegin = TRUE; // set flag
//palMain.SetPalette();
// get system time
GetSystemTime( &GAME_Time.Start );
// jump screen
DRAW_JumpScreen( GAME.ptStart[GAME.nMe] );
return TRUE;
}
BOOL GAME_ReadNetworkBTLFile( HWND hwnd, LPCTSTR filename, LPCTSTR path )
{
char fname[65];
// FILE * fp;
// int i, j, k;
int k;
// int nNum, nNum2, nNum3, nNum4, nNum5, nNum6;
CScan_read FSCAN;
if( path != 0 )
{
strcpy( fname, path );
strcat( fname, filename );
}
else strcpy( fname, filename );
FSCAN.scan_open (fname);
/*
fp = fopen( fname, "rt" );
if( !fp )
{
ErrorMessage( hwnd, GAME_ERROR_ID+2,"Cannot open Med file: ", fname );
return FALSE;
}
*/
// if( GAME.nMe == 3 ) // 曹操
// nBattle += 17;
// FSCAN.l_scan (sscanf (FSCAN.expand_buf,"%d\n", &nNum ));
//fscanf( fp, "%d\n", &nNum );
// Assert( nBattle < nNum );
// if( nBattle >= nNum )
{
// ErrorMessage( hwnd, GAME_ERROR_ID+4,"battle ID is out of range! ", fname );
// return FALSE;
}
// 预读前面的数据,无用
/* int nTemp;
char strTemp[65];
for( i=0; i<nBattle; i++ )
{
// 读取本关ID和君主数,本关背景音乐ID
FSCAN.l_scan (sscanf (FSCAN.expand_buf,"%d,%d,%d\n", &nNum2, &nNum3, &nTemp ));
//fscanf( fp, "%d,%d,%d\n", &nNum2, &nNum3, &nTemp );
// 读取战场图文件和AVI文件名
FSCAN.l_scan (sscanf (FSCAN.expand_buf,"%s %s\n", &strTemp, strTemp ));
//fscanf( fp, "%s %s\n", &strTemp, strTemp );
for( j=0; j<nNum3; j++ )
{
// 读取君主的ID,战场类型,技术级别
FSCAN.l_scan (sscanf (FSCAN.expand_buf,"%d,", &nNum4 ));
//fscanf( fp, "%d,", &nNum4 );
// nThink: 0为陆战,1为水战,2为无基地
// nTechLvl:
// nBuildType: 0为城内建筑,1为城外建筑
FSCAN.l_scan (sscanf (FSCAN.expand_buf,"%d,%d,%d\n",
&nTemp, &nTemp, &nTemp ));
//fscanf( fp, "%d,%d,%d\n",
// &nTemp, &nTemp, &nTemp );
// 读取初始资源,钱,粮,木,铁
FSCAN.l_scan (sscanf (FSCAN.expand_buf,"%d, %d, %d, %d\n",
&nTemp, &nTemp, &nTemp, &nTemp ));
//fscanf( fp, "%d, %d, %d, %d\n",
// &nTemp, &nTemp, &nTemp, &nTemp );
FSCAN.l_scan (sscanf (FSCAN.expand_buf,"%d, ", &nNum5 ));
//fscanf( fp, "%d, ", &nNum5 );
for( k=0; k<nNum5; k++ )
{
FSCAN.l_scan (sscanf (FSCAN.expand_buf,"%d,", &nNum6 ));
//fscanf( fp, "%d,", &nNum6 );
}
for( k=0; k<nNum5; k++ )
{
FSCAN.l_scan (sscanf (FSCAN.expand_buf,"%d,", &nNum6 ));
//fscanf( fp, "%d,", &nNum6 );
}
}
}*/
// 读取本关ID和君主数,本关背景音乐ID
// FSCAN.l_scan (sscanf (FSCAN.expand_buf,"%d,%d,%d\n", &nNum2, &nNum3, &GAME.nMusicID ));
if( GAME_nDisk == 0 )
{
GAME.nMusicID=getrandom( 0, 10 );//背景音乐ID,可以给随机数
}
else
{
GAME.nMusicID=getrandom( 3, 15 );//背景音乐ID,可以给随机数
}
//fscanf( fp, "%d,%d,%d\n", &nNum2, &nNum3, &GAME.nMusicID );
// Assert( nNum2 == i );
// GAME.nID = nNum2;
// 读取战场图文件和AVI文件名
// char strAVI[_MAX_FNAME];
// Nov.6.1997, Liu Gang
// char strFile[_MAX_FNAME];
// FSCAN.l_scan (sscanf (FSCAN.expand_buf,"%s\n", strFile));
// strcpy( GAME.strNameAVI, GAME_strSetupDirectory );
// strcat( GAME.strNameAVI, "\\avi\\" );
// strcat( GAME.strNameAVI, strAVI );
//fscanf( fp, "%s %s\n", GAME.strNameMED, GAME.strNameAVI );
/* for( j=0; j<4; j++ )
{
// 读取君主的ID,战场类型,技术级别
// FSCAN.l_scan (sscanf (FSCAN.expand_buf,"%d,", &nNum4 ));
//fscanf( fp, "%d,", &nNum4 );
// int nPlayer = 0;
// if(GAME_bNetwork==2)
// {nPlayer = 1;}
// if( j==nPlayer )
// {
// GAME.nMe = nNum4;
// GAME.Players[nNum4].nType = PLAYER_TYPE_HUMAN;
// }
// else
// {
// GAME.Players[nNum4].nType = PLAYER_TYPE_COMPUTER;
// }
// nThink: 0为陆战,1为水战,2为无基地
// nTechLvl:
// nBuildType: 0为城内建筑,1为城外建筑
*/ int Num;
for(Num=1;Num<5;Num++)
{
GAME.Players[Num].nThink =0;
GAME.Players[Num].nTechLvl =4;
GAME.Players[Num].nBuildType =0;
}//}
/*
fscanf( fp, "%d,%d,%d\n",
&GAME.Players[nNum4].nThink,
&GAME.Players[nNum4].nTechLvl,
&GAME.Players[nNum4].nBuildType );
*/
// GAME.Players[nNum4].nID=nNum4;
// 读取初始资源,钱,粮,木,铁
for(Num=1;Num<5;Num++)
{
GAME.Players[Num].nGold=5000;
GAME.Players[Num].nFood=5000;
GAME.Players[Num].nWood=5000;
GAME.Players[Num].nIron=5000;
}
/*
fscanf( fp, "%d, %d, %d, %d\n",
&GAME.Players[nNum4].nGold,
&GAME.Players[nNum4].nFood,
&GAME.Players[nNum4].nWood,
&GAME.Players[nNum4].nIron );
*/
// FSCAN.l_scan (sscanf (FSCAN.expand_buf,"%d, ", &nNum5) );
//fscanf( fp, "%d, ", &nNum5 );
for( k=0; k<DATA_UNIT_GENERAL_MAX; k++ )
{
// if( DATA_Lib.Gen[k].nJunZhu == GAME.nMe )
{
DATA_Lib.Gen[k].bOnBattle = FALSE;
DATA_Lib.Gen[k].nLevel = 9;
}
}
if(DP_IsHost==DP_HOST)
{Game_Ctrl_Status=DH_CTRL;}
if(DP_IsHost!=DP_HOST)
{Game_Ctrl_Status=DH_NO_CTRL;}
/* int nSaveGen[32];
for( k=0; k<nNum5; k++ )
{
FSCAN.l_scan (sscanf (FSCAN.expand_buf,"%d,", &nNum6 ));
//fscanf( fp, "%d,", &nNum6 );
DATA_Lib.Gen[nNum6].bOnBattle = FALSE;
//Assert( DATA_Lib.Gen[nNum6].nJunZhu == nNum4 );
DATA_Lib.Gen[nNum6].nJunZhu = nNum4;
// 初始化一些属性
// DATA_Lib.Gen[nNum6].nID = nNum6;
nSaveGen[k] = nNum6;
}
for( k=0; k<nNum5; k++ )
{
FSCAN.l_scan (sscanf (FSCAN.expand_buf,"%d,", &nNum6 ));
if( nNum6 != 0 )
{
DATA_Lib.Gen[nSaveGen[k]].nLevel = nNum6-1;
}
else if( nSaveGen[k] >= 1 && nSaveGen[k] <= 33
&& DATA_Lib.Gen[nSaveGen[k]].nLevel == 0 )
{
DATA_Lib.Gen[nSaveGen[k]].nLevel = 5; // 孙权的人,初始级别为5
}
}
}*/
// Assert( GAME.Players[GAME.nMe].nType == PLAYER_TYPE_HUMAN );
FSCAN.scan_close ();
//fclose( fp );
return TRUE;
}
//次函数是专为李海军准备的
int Send_Destroy_Me(void)
{
GAME.Players[0].nType = PLAYER_TYPE_NONE;
GAME.Players[1].nType = PLAYER_TYPE_NONE;
GAME.Players[2].nType = PLAYER_TYPE_NONE;
GAME.Players[3].nType = PLAYER_TYPE_NONE;
GAME.Players[4].nType = PLAYER_TYPE_NONE;
GAME_bNetPlayerOK[0]=FALSE;
GAME_bNetPlayerOK[1]=FALSE;
GAME_bNetPlayerOK[2]=FALSE;
GAME_bNetPlayerOK[3]=FALSE;
GAME_bNetPlayerOK[4]=FALSE;
memset(DP_SendMessageBuff,0,sizeof(DP_SendMessageBuff));
wsprintf((char *)DP_SendMessageBuff,"%d %d ",DP_DESTROY_PLAYER,GAME.nMe);
if(DP_NetworkInterface(DP_SEND_MESSAGE,NULL)!=OK)
{
// #ifdef NETWORK
return (-1);
// #endif
}
if(DP_NetworkInterface(DP_DESTROY_GAME,NULL)!=OK)
{
// #ifdef NETWORK
return (-1);
// #endif
}
GAME.nMe=0;
return(0);
}
//次函数是专为李海军准备的
int Send_Destroy_Other(int PlayerNum)
{
int Destroy_Num;
GAME.Players[PlayerNum].nType = PLAYER_TYPE_NONE;
memset(DP_SendMessageBuff,0,sizeof(DP_SendMessageBuff));
wsprintf((char *)DP_SendMessageBuff,"%d %d ",DP_DESTROY_PLAYER,PlayerNum);
if(DP_NetworkInterface(DP_SEND_MESSAGE,NULL)!=OK)
{
// #ifdef NETWORK
return (-1);
// #endif
}
DH_JoinPlayer[PlayerNum]=DH_NOPLAY;
for(Destroy_Num=0;Destroy_Num<GAME_PLAYER_MAX;Destroy_Num++)
{
GAME_SetAlly(Destroy_Num,PlayerNum,DP_NO_ALLY);
}
DP_PlayerInformation[PlayerNum-1].DP_dcoID=0;
for(Destroy_Num=0;Destroy_Num<MAX_NAME_LENGTH;Destroy_Num++)
{
DP_PlayerInformation[PlayerNum-1].DP_NickName[Destroy_Num]='\0';
}
DH_JoinPlayer[PlayerNum]=DH_NOPLAY;
GAME_bNetPlayerOK[PlayerNum]=FALSE;
return(0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -