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

📄 general.cpp

📁 空战游戏flacon源码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
				win->AddControl(txt);
				txt->Refresh();

				txt=new C_Text;
				txt->Setup(C_DONT_CARE,C_TYPE_NORMAL);
				txt->SetFlagBitOn(C_BIT_WORDWRAP);
				txt->SetFixedWidth(_tcsclen(evt->eventText));
				txt->SetText(evt->eventText);
				txt->SetFont(win->Font_);
				txt->SetXY(40,y);
				txt->SetW(wrap_w);
				txt->SetFGColor(0xe0e0e0);
				txt->SetUserNumber(_UI95_DELGROUP_SLOT_,_UI95_DELGROUP_ID_);
				win->AddControl(txt);
				y += txt->GetH()+2;
			}
			delete evt->eventText;
			delete evt;
			i++;
			evt=RetrieveEvent(i);
		}
		win->ScanClientAreas();
		win->RefreshClient(0);
	}
}

void RelocateSquadron()
{
	C_Window *win;
	C_Bitmap *bmp;
	C_Text *txt;
	C_Resmgr *res;
	IMAGE_RSC *rsc;
	Objective Obj;
	Squadron sqd;
	_TCHAR buffer[80];
	GridIndex x,y;
	ObjClassDataType *ObjPtr;

	if(!gMainHandler)
		return;

	sqd=(Squadron)FalconLocalSession->GetPlayerSquadron();
	if(!sqd)
		return;

	Obj=(Objective)vuDatabase->Find(sqd->GetUnitAirbaseID());
	if(!Obj)
		return;

	ObjPtr=Obj->GetObjectiveClassData();
	if(!ObjPtr)
		return;

	win=gMainHandler->FindWindow(TRANSFER_WIN);
	if(win)
	{
		res=gImageMgr->GetImageRes(BLUE_TEAM_ICONS_W);

		txt=(C_Text*)win->FindControl(MY_SQUADRON);
		if(txt)
		{
			sqd=(Squadron)FalconLocalSession->GetPlayerSquadron();
			if(sqd)
			{
				sqd->GetName(buffer,38,FALSE);
				txt->Refresh();
				txt->SetText(buffer);
				txt->Refresh();
			}
		}
		txt=(C_Text*)win->FindControl(NEW_BASE);
		if(txt)
		{
			Obj->GetName(buffer,38,TRUE);
			txt->Refresh();
			txt->SetText(buffer);
			txt->Refresh();
		}
		bmp=(C_Bitmap *)win->FindControl(CS_MAP_WIN);
		if(bmp)
		{
			bmp->SetImage(gOccupationMap);
			bmp->Refresh();
		}
		bmp=(C_Bitmap *)win->FindControl(BASE_ICON);
		if(bmp)
		{
			bmp->Refresh();
			Obj->GetLocation(&x,&y); // campaign coords
			y=static_cast<short>(TheCampaign.TheaterSizeY - y);
			if(res)
			{
				bmp->SetXY(x/MAP_RATIO,y/MAP_RATIO);
				bmp->SetFlagBitOn(C_BIT_HCENTER|C_BIT_VCENTER);
				rsc=(IMAGE_RSC*)res->Find(ObjPtr->IconIndex);
				if(rsc)
					bmp->SetImage(rsc);
				bmp->Refresh();
			}
		}
		gMainHandler->EnableWindowGroup(win->GetGroup());
	}
}

// Screen shot HACK stuff
void CloseItCB(long,short hit,C_Base *ctrl)
{
	if(hit != C_TYPE_LMOUSEUP)
		return;

	gMainHandler->HideWindow(ctrl->Parent_);
}

#pragma pack(1)
typedef struct
{
	long First,Second,Third;
	WORD Width;
	WORD Height;
	WORD Last;
} BOGUS_HEADER;
#pragma pack()

BOGUS_HEADER TgaHeader=
{
	0x00020000,
	0x00000000,
	0x00000000,
	800,600, // w,h
	0x0110,
};

extern WORD *gScreenShotBuffer;
void SaveTargaCB(long,short hittype,C_Base *control)
{
	_TCHAR filename[MAX_PATH];
	C_EditBox *ebox;
	FILE *fp;
	long y,i;

	if(hittype != C_TYPE_LMOUSEUP)
		return;

	gMainHandler->HideWindow(control->Parent_);

	ebox=(C_EditBox*)control->Parent_->FindControl(FILE_NAME);
	if(ebox)
	{
	// convert Mem to 555 format
		for(i=0;i<800*600;i++)
			gScreenShotBuffer[i]=UI95_ScreenToTga(gScreenShotBuffer[i]);

	// Write file
		_stprintf(filename,"%s.tga",ebox->GetText());
		fp=fopen(filename,"wb");
		if(fp)
		{
			fwrite(&TgaHeader,sizeof(TgaHeader),1,fp);
			for(y=0;y<600;y++)
				fwrite(&gScreenShotBuffer[(599-y)*800],800*sizeof(WORD),1,fp);
			fclose(fp);
		}
	}
}

void SaveScreenShot()
{
	SetDeleteCallback(DelTGAFileCB);
	SaveAFile(gStringMgr->AddText("Save Screenshot"),"*.tga",NULL,SaveTargaCB,CloseItCB);
}

char MasterXOR[]="Falcon is your Master";

void EncryptBuffer(uchar startkey,uchar *buffer,long length)
{
	long i,xrlen,idx;
	uchar *ptr;
	uchar nextkey;

	if(!buffer || length <= 0)
		return;

	idx=0;
	xrlen=strlen(MasterXOR);

	ptr=buffer;
	for(i=0;i<length;i++)
	{
		*ptr ^= MasterXOR[(idx++)%xrlen];
		*ptr ^= startkey;
		nextkey=*ptr++;
		startkey=nextkey;
	}
}

void DecryptBuffer(uchar startkey,uchar *buffer,long length)
{
	long i,xrlen,idx;
	uchar *ptr;
	uchar nextkey;

	if(!buffer || length <= 0)
		return;

	idx=0;
	xrlen=strlen(MasterXOR);

	ptr=buffer;
	for(i=0;i<length;i++)
	{
		nextkey=*ptr;
		*ptr ^= startkey;
		*ptr++ ^= MasterXOR[(idx++)%xrlen];
		startkey=nextkey;
	}
}

void ScrollTimerCB(long,short,C_Base *base)
{
	C_Window *win;
	if(!base)
		return;

	win=base->Parent_;
	if(win)
	{
		if(win->VY_[base->GetClient()] > base->GetUserNumber(0))
		{
			win->VY_[base->GetClient()]-=2;
			win->RefreshClient(base->GetClient());
		}
	}
}

void LoadPeopleInfo(long client)
{
	C_Window *win=NULL;
	char *filedata=NULL;
	long size=0;
	TitleStr *tit=NULL;
	PersonStr *per=NULL;
	LegalStr *leg=NULL;
	short type=0;
	long offset=0;
	long center=0,y=0;
	long LanguageID=0;
	C_Text *txt=NULL;
	C_TimerHook *drawTimer=NULL;
	C_Resmgr *res=NULL;
	FLAT_RSC *rsc=NULL;

	res=new C_Resmgr;
	if(!res)
		return;

	res->Setup(CREDITS_RES,"art\\resource\\credits",gMainParser->GetTokenHash());
	res->LoadData();

	switch(gLangIDNum)
	{
		case F4LANG_GERMAN:
			LanguageID=GERMAN_CREDITS;
			break;
		case F4LANG_FRENCH:
			LanguageID=FRENCH_CREDITS;
			break;
		case F4LANG_SPANISH:
			LanguageID=SPANISH_CREDITS;
			break;
		case F4LANG_ITALIAN:
			LanguageID=ITALIAN_CREDITS;
			break;
		case F4LANG_PORTUGESE:
			LanguageID=PORTUGUESE_CREDITS;
			break;
		case F4LANG_ENGLISH:
		case F4LANG_UK:
		default:
			LanguageID=ENGLISH_CREDITS;
			break;
	}
	rsc=(FLAT_RSC*)res->Find(LanguageID);
	if(!rsc)
		return;

	filedata=(char*)rsc->GetData();
	size=rsc->Header->size;

	win=gMainHandler->FindWindow(EXIT_WIN);
	if(win)
	{
		center=((win->ClientArea_[client].right - win->ClientArea_[client].left)/2);

		y=win->GetH()/2;
		offset=0;
		while(offset < size)
		{
			type=*((short*)&filedata[offset]);
			offset+=sizeof(short);
			switch(type)
			{
				case _TITLE_:
					tit=(TitleStr*)&filedata[offset];
					DecryptBuffer(0x79,(uchar*)&filedata[offset],sizeof(TitleStr));
					offset+=sizeof(TitleStr);
					txt=new C_Text;
					txt->Setup(C_DONT_CARE,0);
					txt->SetFont(tit->FontID);
					txt->SetFGColor(tit->ColorID);
					txt->SetFlagBitOn(C_BIT_HCENTER);
					txt->SetClient(static_cast<short>(client));
					txt->SetXY(center,y);
					txt->SetText(gStringMgr->GetText(gStringMgr->AddText(tit->Title)));
					win->AddControl(txt);
					y+=gFontList->GetHeight(tit->FontID)+10;
					break;
				case _NAME_:
					per=(PersonStr*)&filedata[offset];
					DecryptBuffer(0x79,(uchar*)&filedata[offset],sizeof(PersonStr));
					offset+=sizeof(PersonStr);
					txt=new C_Text;
					txt->Setup(C_DONT_CARE,0);
					txt->SetFont(per->FontID);
					txt->SetFGColor(per->ColorID);
#if 0
					if(per->Job[0])
					{
						txt->SetFlagBitOn(C_BIT_RIGHT);
						txt->SetXY(center-10,y);
					}
					else
					{
#endif
						txt->SetFlagBitOn(C_BIT_HCENTER);
						txt->SetXY(center,y);
#if 0
					}
#endif
					txt->SetClient(static_cast<short>(client));
					txt->SetText(gStringMgr->GetText(gStringMgr->AddText(per->Name)));
					win->AddControl(txt);
#if 0
					if(per->Job[0])
					{
						txt=new C_Text;
						txt->Setup(C_DONT_CARE,0);
						txt->SetFont(per->FontID);
						txt->SetFGColor(per->ColorID);
						txt->SetFlagBitOn(C_BIT_LEFT);
						txt->SetClient(client);
						txt->SetXY(center+10,y);
						txt->SetText(gStringMgr->GetText(gStringMgr->AddText(per->Job)));
						win->AddControl(txt);
					}
#endif
					y+=gFontList->GetHeight(per->FontID);
					break;
				case _LEGAL_:
					leg=(LegalStr*)&filedata[offset];
					DecryptBuffer(0x79,(uchar*)&filedata[offset],sizeof(LegalStr));
					offset+=sizeof(LegalStr);
					txt=new C_Text;
					txt->Setup(C_DONT_CARE,0);
					txt->SetFont(leg->FontID);
					txt->SetFGColor(leg->ColorID);
					txt->SetFlagBitOn(C_BIT_LEFT);
					txt->SetClient(static_cast<short>(client));
					txt->SetXY(0,y);
					txt->SetText(gStringMgr->GetText(gStringMgr->AddText(leg->Legal)));
					win->AddControl(txt);
					y+=gFontList->GetHeight(leg->FontID);
					break;
				case _BLANK_:
					y+=40;
					break;
			}
		}
		y+=win->GetH()/2;
		txt=new C_Text;
		txt->Setup(C_DONT_CARE,0);
		if(leg)
		{
			txt->SetFont(leg->FontID);
			txt->SetFGColor(leg->ColorID);
		}
		txt->SetFlagBitOn(C_BIT_HCENTER);
		txt->SetClient(static_cast<short>(client));
		txt->SetXY(center,y);
		txt->SetText(gStringMgr->GetText(gStringMgr->AddText("Fini")));
		win->AddControl(txt);
		win->ScanClientAreas();
		y+=win->GetH()/2;
		txt=new C_Text;
		txt->Setup(C_DONT_CARE,0);
		if(leg)
		{
			txt->SetFont(leg->FontID);
			txt->SetFGColor(leg->ColorID);
		}
		txt->SetFlagBitOn(C_BIT_HCENTER);
		txt->SetClient(static_cast<short>(client));
		txt->SetXY(center,y);
		txt->SetText(gStringMgr->GetText(gStringMgr->AddText("")));
		win->AddControl(txt);
		win->ScanClientAreas();

		drawTimer = new C_TimerHook;
		drawTimer->Setup( C_DONT_CARE,C_TYPE_NORMAL );
		drawTimer->SetClient(static_cast<short>(client));
		drawTimer->SetUpdateCallback(ScrollTimerCB);
		drawTimer->SetReady(1);
		drawTimer->SetUserNumber(0,(win->GetH()-5)-y);
		win->AddControl( drawTimer );
	}
	res->Cleanup();
	delete res;
}

// Delete file functions...

BOOL CheckSystemFiles(char *Name,char *Ext)
{
	char filename[MAX_PATH];
	short i;

	strcpy(filename,Name);
	strcat(filename,".");
	strcat(filename,Ext);

	i=0;
	while(DontDeleteList[i])
	{
		if(!stricmp(DontDeleteList[i],filename))
			return(TRUE);
		i++;
	}
	return(FALSE);
}

BOOL DeleteAFile(char *Path,char *Name,char *Ext)
{
	char Filename[MAX_PATH];

	if(!Name)
		return(FALSE);

	Filename[0]=0;

	if(Path)
	{
		strcpy(Filename,Path);
		strcat(Filename,"\\");
	}
	strcat(Filename,Name);
	if(Ext)
	{
		strcat(Filename,".");
		strcat(Filename,Ext);
	}
	if(!CheckSystemFiles(Name,Ext))
	{
		DeleteFile(Filename);
		return(TRUE);
	}
	return(FALSE);
}

void DelSTRFileCB(long,short,C_Base *)
{
	C_TreeList *tree;
	C_Button *btn;
	TREELIST *item;

	tree = (C_TreeList*)gPopupMgr->GetCallingControl();
	if(tree)
	{
		item=tree->GetLastItem();
		if(item)
		{
			btn=(C_Button*)item->Item_;
			if(btn)
			{
				if(DeleteAFile(FalconCampUserSaveDirectory,btn->GetText(0),"str"))
				{
					tree->DeleteItem(item);
					tree->RecalcSize();
					tree->Parent_->RefreshClient(tree->GetClient());
				}
			}
		}
	}
	gPopupMgr->CloseMenu ();
}

void DelDFSFileCB(long,short,C_Base *)
{
	C_TreeList *tree;
	C_Button *btn;
	TREELIST *item;

	tree = (C_TreeList*)gPopupMgr->GetCallingControl();
	if(tree)
	{
		item=tree->GetLastItem();
		if(item)
		{
			btn=(C_Button*)item->Item_;
			if(btn)
			{
				if(DeleteAFile(FalconCampUserSaveDirectory,btn->GetText(0),"dfs"))
				{
					tree->DeleteItem(item);
					tree->RecalcSize();
					tree->Parent_->RefreshClient(tree->GetClient());
				}
			}
		}
	}
	gPopupMgr->CloseMenu ();
}

void DelLSTFileCB(long,short,C_Base *)
{
	C_TreeList *tree;
	C_Button *btn;
	TREELIST *item;

	tree = (C_TreeList*)gPopupMgr->GetCallingControl();
	if(tree)
	{
		item=tree->GetLastItem();
		if(item)
		{
			btn=(C_Button*)item->Item_;
			if(btn)
			{
				if(DeleteAFile(NULL,btn->GetText(0),"lst"))
				{
					tree->DeleteItem(item);
					tree->RecalcSize();
					tree->Parent_->RefreshClient(tree->GetClient());
				}
			}
		}
	}
	gPopupMgr->CloseMenu ();
}

void DelCamFileCB(long,short,C_Base *)
{
	C_TreeList *tree;
	C_Button *btn;
	TREELIST *item;

	tree = (C_TreeList*)gPopupMgr->GetCallingControl();
	if(tree)
	{
		item=tree->GetLastItem();
		if(item)
		{
			btn=(C_Button*)item->Item_;
			if(btn)
			{
				if(DeleteAFile(FalconCampUserSaveDirectory,btn->GetText(0),"cam"))
				{
					tree->DeleteItem(item);
					tree->RecalcSize();
					tree->Parent_->RefreshClient(tree->GetClient());
				}
			}
		}
	}
	gPopupMgr->CloseMenu ();
}

void DelTacFileCB(long,short,C_Base *)
{
	C_TreeList *tree;
	C_Button *btn;
	TREELIST *item;

	tree = (C_TreeList*)gPopupMgr->GetCallingControl();
	if(tree)
	{
		item=tree->GetLastItem();
		if(item)
		{
			btn=(C_Button*)item->Item_;
			if(btn)
			{
				if(DeleteAFile(FalconCampUserSaveDirectory,btn->GetText(0),"tac"))
				{
					tree->DeleteItem(item);
					tree->RecalcSize();
					tree->Parent_->RefreshClient(tree->GetClient());
				}
			}
		}
	}
	gPopupMgr->CloseMenu ();
}

void DelTGAFileCB(long,short,C_Base *)
{
	C_TreeList *tree;
	C_Button *btn;
	TREELIST *item;

	tree = (C_TreeList*)gPopupMgr->GetCallingControl();
	if(tree)
	{
		item=tree->GetLastItem();
		if(item)
		{
			btn=(C_Button*)item->Item_;
			if(btn)
			{
				if(DeleteAFile(NULL,btn->GetText(0),"tga"))
				{
					tree->DeleteItem(item);
					tree->RecalcSize();
					tree->Parent_->RefreshClient(tree->GetClient());
				}
			}
		}
	}
	gPopupMgr->CloseMenu ();
}

void DelVHSFileCB(long,short,C_Base *)
{
	C_TreeList *tree;
	C_Button *btn;
	TREELIST *item;

	tree = (C_TreeList*)gPopupMgr->GetCallingControl();
	if(tree)
	{
		item=tree->GetLastItem();
		if(item)
		{
			btn=(C_Button*)item->Item_;
			if(btn)
			{
				if(DeleteAFile("acmibin",btn->GetText(0),"vhs"))
				{
					tree->DeleteItem(item);
					tree->RecalcSize();
					tree->Parent_->RefreshClient(tree->GetClient());
				}
			}
		}
	}
	gPopupMgr->CloseMenu ();
}

void DelKeyFileCB(long,short,C_Base *)
{
	C_TreeList *tree;
	C_Button *btn;
	TREELIST *item;

	tree = (C_TreeList*)gPopupMgr->GetCallingControl();
	if(tree)
	{
		item=tree->GetLastItem();
		if(item)
		{
			btn=(C_Button*)item->Item_;
			if(btn)
			{
				if(DeleteAFile("config",btn->GetText(0),"key"))
				{
					tree->DeleteItem(item);
					tree->RecalcSize();
					tree->Parent_->RefreshClient(tree->GetClient());
				}
			}
		}
	}
	gPopupMgr->CloseMenu ();
}

⌨️ 快捷键说明

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