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

📄 ltssupport.cpp

📁 国内著名网络游戏dragon的服务端完整源码 内附完整数据库结构
💻 CPP
📖 第 1 页 / 共 5 页
字号:

void RecvCMD_LOCALWAR_BEGIN( t_packet *p, t_connection c[], int cn )
{
	SendCMD_LOCALWAR_BEGIN2Client();

	g_LocalWarBegin=1;
//	MyLog(0,"Local War Status : %d",g_LocalWarBegin);

	if (g_isLocalWarServer)
	{
		g_pLocalWarfield->SetLocalWarStatus(1);
		g_pLocalWarfield->RecoveryAllSealStone(); // 030520 kyo //葛电 搬拌籍狼 HP甫 雀汗
	}
}

void GiveLife2SealStone()
{
	for (int i=0;i<MAX_NATION;i++)
		for (int j=0;j<MAX_SEALSTONE_NATION_;j++)
		{
			SealStone[i].status[j]=1;	// Alive;
		}
}

void SendCMD_SEALSTONE_BROKED(SealStoneStatus* tp)
{
	t_packet packet;

	packet.h.header.type=CMD_SEALSTONE_BROKED;
	switch (tp->SprNo)
	{
	case 98 : packet.u.LocalWar.SealStoneBroked.Nation=NW_BY; break;
	case 99 : packet.u.LocalWar.SealStoneBroked.Nation=NW_ZY; break;
	case 91 : packet.u.LocalWar.SealStoneBroked.Nation=NW_YL; break;
	}
	packet.u.LocalWar.SealStoneBroked.MapNumber=tp->MapNumber;
	packet.u.LocalWar.SealStoneBroked.LocateX=tp->X;
	packet.u.LocalWar.SealStoneBroked.LocateY=tp->Y;
	packet.h.header.size=sizeof(t_SealStoneBroked);

	g_pUserManager->SendPacket(&packet); // CSD-CN-031213
	SendPacket2Maps(&packet);
}

void RecvCMD_SEALSTONE_BROKED( t_packet *p, t_connection c[], int cn )
{
	if (MapInfo[MapNumber].nation==p->u.LocalWar.SealStoneBroked.Nation) 
	{	//< CSD-CN-031213
		g_pUserManager->SendPacket(p);
		return;
	}	//> CSD-CN-031213

	if (MapInfo[MapNumber].nation==0)
	{
		SendPacket2NationClients(p->u.LocalWar.SealStoneBroked.Nation,p);
	}
}

void SendCMD_SEALSTONE_ATTACKED(SealStoneStatus* tp)
{
	t_packet packet;

	packet.h.header.type=CMD_SEALSTONE_ATTACKED;
	packet.u.LocalWar.SealStoneAttacked.MapNumber=tp->MapNumber;
	packet.u.LocalWar.SealStoneAttacked.LocateX=tp->X;
	packet.u.LocalWar.SealStoneAttacked.LocateY=tp->Y;
	packet.h.header.size=sizeof(t_SealStoneAttacked);
	g_pUserManager->SendPacket(&packet); // CSD-CN-031213

	switch (tp->SprNo)
	{
	case 98 :	SendPacket2Maps(&packet);	break;
	case 99 :	SendPacket2Maps(&packet);	break;
	case 91 :	SendPacket2Maps(&packet);	break;
	}
}

void RecvCMD_SEALSTONE_ATTACKED( t_packet *p, t_connection c[], int cn )
{
	if (MapInfo[MapNumber].nation==p->u.LocalWar.SealStoneAttacked.Nation) 
	{	//< CSD-CN-031213
		g_pUserManager->SendPacket(p);
		return; 
	}	//> CSD-CN-031213

	if (MapInfo[MapNumber].nation == 0)
	{
		SendPacket2NationClients(p->u.LocalWar.SealStoneAttacked.Nation,p);
	}
}

void SendCMD_LOCALWAR_POINT_CHANGED()
{
	t_packet packet;

	packet.h.header.type=CMD_LOCALWAR_POINT_CHANGED;
	packet.u.LocalWar.LocalWarPointChanged.RemainTime=g_pNation->GetLocalWarRemainTime()-g_curr_time;
	packet.u.LocalWar.LocalWarPointChanged.Point[0]=g_pNation->GetLocalWarPoint(0);
	packet.u.LocalWar.LocalWarPointChanged.Point[1]=g_pNation->GetLocalWarPoint(1);
	packet.u.LocalWar.LocalWarPointChanged.Point[2]=g_pNation->GetLocalWarPoint(2);
	packet.h.header.size=sizeof(t_LocalWarPointChanged);

	SendPacket2Maps(&packet);
	g_pUserManager->SendPacket(&packet); // CSD-CN-031213
}

int LocalWarPointMAXIndex()						// LTS NEW LOCALWAR
{
	if (!isNationManageServer()) return 0;

	short Point[3], MAXPointIndex=0;
	Point[0]=g_pNation->GetLocalWarPoint(0);
	Point[1]=g_pNation->GetLocalWarPoint(1);
	Point[2]=g_pNation->GetLocalWarPoint(2);

	if (Point[MAXPointIndex]<Point[1]) MAXPointIndex=1;
	if (Point[MAXPointIndex]<Point[2]) MAXPointIndex=2;

	return MAXPointIndex;
}

int CheckMaxPoint(int nPoint1, int nPoint2) 
{	// 030506 kyo
	if (nPoint1 > nPoint2)
	{
		return 3;	// LTH-040308-KO 惑困 窃荐客 备盒窿扁困秦. 3:nPoint1>nPoint2, 4:nPoint1<nPoint2, 5:nPoint1=nPoint2
	}
	else if (nPoint1 < nPoint2)
	{
		return 4;	// LTH-040308-KO 惑困 窃荐客 备盒窿扁困秦
	}
	else
	{
		return 5;	// LTH-040308-KO 惑困 窃荐客 备盒窿扁困秦
	}
}

//< LTH-040308-KO 惑困 窃荐狼 箭磊客 备盒窿扁 困秦 馆券窍绰 荐甫 官操绊 老胶档 力措肺 厚背窍霸 父惦
// 6:nIndex1>nIndex2, 7:nIndex1<nIndex2, 8:nIndex1=nIndex2
int CheckMaxArrayPoint(int nIndex1, int nIndex2, unsigned short Array_1[3] ,unsigned short Array_2[3], unsigned short Array_3[3])
{//3硅凯狼 nIndex1苞 nIndex2吝俊 奴 蔼阑 府畔 0: nIndex1, 1:nIndex2, 2:滴 蔼捞 悼老
	int rt = CheckMaxPoint(Array_1[nIndex1], Array_1[nIndex2]);

	switch (rt)
	{
	case 5:
		{
			rt = CheckMaxPoint(Array_2[nIndex1], Array_2[nIndex2]);

			switch (rt)
			{
			case 5:
				{
					rt = CheckMaxPoint( Array_3[nIndex1], Array_3[nIndex2] );

					switch (rt)
					{
					case 5: return 9;
					case 3: return 7;
					case 4: return 8;
					}

					break;
				}
			case 3: return 7;
			case 4: return 8;
			}

			break;
		}
	case 3: return 7;
	case 4: return 8;
	}

	return -1;
}
//> LTH-040308-KO


void SendCMD_LOCALWAR_END_WIN( const int nWinNation)
{// 030518 kyo
	t_packet packet;
	packet.h.header.type=CMD_LOCALWAR_END;
	packet.u.LocalWar.CommonDataC.Data=nWinNation;	
	packet.h.header.size=sizeof(t_CommonDataC);
	SendPacket2Maps(&packet);//葛电 甘俊 焊郴辑 其烙拌魂	
}

void SendCMD_LOCALWAR_END()						// LTS NEW LOCALWAR  // 惫瘤傈 辆丰 
{	//const NationTBL[3]={ 3,4,6 };
	const int NationTBL[NW_COMMANDER]={ NW_BY,NW_ZY,NW_YL}; // 03518 kyo
	const char NationTBLStr[NW_COMMANDER][8]={"NW_BY","NW_ZY","NW_YL"}; // 030515 kyo

	//t_packet packet;
	_ASSERTE(g_pNation);// 030518 kyo

	//int MAXPointIndex=g_pNation->CheckWinNation();
	int nWinNation=g_pNation->CheckWinNation();	
	
	// 葛电 惑炔捞 鞍促搁 葛电 惫啊啊 铰府窍霸 茄促. 
	// 0:官捞辑胶 1:磊捞戚 2:老胶 3:(磊捞戚=老胶)>官捞辑胶 4:(官捞辑胶=老胶)>磊捞戚 5:(磊捞戚=官捞辑胶)>老胶 6: 葛滴悼老
	// 咯矾惫啊狼 悼矫 铰府老 版快 惫啊锅龋狼 +蔼栏肺 拌魂 
	// ex) 3,4,6 : 茄惫啊(NationTBL[nWinNation])  7(官+磊),9(磊+老),10(官+老),13(促)
	switch( nWinNation )
	{
	case 0:
	case 1:
	case 2:
		{
			//packet.u.LocalWar.CommonDataC.Data = NationTBL[nWinNation];
			SendCMD_LOCALWAR_END_WIN(NationTBL[nWinNation]);// 030518 kyo
			MyLog(0, "LocalWar End:: Win Team %s", NationTBLStr[nWinNation] );// 030515 kyo
			break;
		}
	case 3:
		{
			//packet.u.LocalWar.CommonDataC.Data = NationTBL[1]+NationTBL[2];
			SendCMD_LOCALWAR_END_WIN(NationTBL[1]);// 030518 kyo 
			SendCMD_LOCALWAR_END_WIN(NationTBL[2]);// 030518 kyo 
			MyLog(0, "LocalWar End:: Win Team=%s && Win Team=%s", NationTBLStr[1], NationTBLStr[2] );// 030515 kyo
			break;
		}
	case 4:
		{
			//packet.u.LocalWar.CommonDataC.Data = NationTBL[0]+NationTBL[2];
			SendCMD_LOCALWAR_END_WIN(NationTBL[0]);// 030518 kyo 
			SendCMD_LOCALWAR_END_WIN(NationTBL[2]);// 030518 kyo 
			MyLog(0, "LocalWar End:: Win Team=%s && Win Team=%s", NationTBLStr[0], NationTBLStr[2] );// 030515 kyo
			break;
		}
	case 5:
		{
			//packet.u.LocalWar.CommonDataC.Data = NationTBL[0]+NationTBL[1];
			SendCMD_LOCALWAR_END_WIN(NationTBL[0]);// 030518 kyo 
			SendCMD_LOCALWAR_END_WIN(NationTBL[1]);// 030518 kyo 
			MyLog(0, "LocalWar End:: Win Team=%s && Win Team=%s", NationTBLStr[0], NationTBLStr[1] );// 030515 kyo
			break;
		}
	case 6:
		{
			//packet.u.LocalWar.CommonDataC.Data = NationTBL[0]+NationTBL[1]+NationTBL[2];			
			//MyLog(0, "LocalWar End:: Win Team=%s && Win Team=%s && Win Team=%s", NationTBLStr[0], NationTBLStr[1], NationTBLStr[2] );// 03515 kyo
			SendCMD_LOCALWAR_END_WIN(0);// 030518 kyo 			
			MyLog(0, "LocalWar End:: All Lose ~~~~~ ");
			break;
		}
	default:
		{
		//_ASSERT(NULL);
		break;
		}
	
	}
	/*
	packet.h.header.type=CMD_LOCALWAR_END;
	//packet.u.LocalWar.CommonDataC.Data=NationTBL[MAXPointIndex];
	packet.u.LocalWar.CommonDataC.Data=NationTBL[nWinNation];	
	packet.h.header.size=sizeof(t_CommonDataC);
	//if (MAXPointIndex>=0) CalcMapUsersGainedFame(NationTBL[MAXPointIndex]);
	//CalcMapUsersGainedFame(NationTBL[nWinNation]); //RecvCMD_LOCALWAR_END()俊辑 其烙拌魂茄促. 吝汗拌魂错促.
	//SendCMD_LOCALWAR_END2Client(&packet);// 泅犁 甘狼 惫瘤傈俊 曼啊茄 葛电 蜡历狼 曼啊甫 秒家茄促. 吝汗凳
	SendPacket2Maps(&packet);//葛电 甘俊 焊郴辑 其烙拌魂
	*/	
}

void ReturnLocalwarHome()
{	//< CSD-CN-031213
	CUserManager::HASH_USER user = g_pUserManager->GetUserSet();

	for (CUserManager::ITOR_USER i = user.begin(); i != user.end(); ++i)
	{
		const int idUser = i->second;
		CHARLIST* pUser = CheckServerId(idUser);
		
		if (pUser != NULL && pUser->JoinLocalWar)
		{
			pUser->JoinLocalWar = 0;
			CheckAndSendChangeEquip(pUser, 1);
			
			LPMAPINFO pMapInfo = GetMapInfoByMapPort(g_MapPort);
	
			if (!pMapInfo)
			{
				continue;
			}

			if (pMapInfo->nation == 0 || pMapInfo->nation == pUser->name_status.nation)
			{
				continue;
			}
			// 利惫牢 版快父 磊扁狼 惫啊肺 捞悼
			switch (pUser->name_status.nation)
			{
			case NW_BY:	
				{
					MapMove(idUser, "MA-IN", 245, 115);
					break;
				}
			case NW_ZY:	
				{
					MapMove(idUser, "RENES_C", 210, 175); 
					break;
				}
			case NW_YL:	
				{
					MapMove(idUser, "BARANTAN", 325, 98); 
					break;
				}
			}
		}
	}
}	//> CSD-CN-031213

void RecvCMD_LOCALWAR_END(t_packet *p, t_connection c[], int cn )
{	//< CSD-031007
	g_LocalWarBegin=0;
	//	MyLog(0,"Local War Status : %d",g_LocalWarBegin);
	::CalcMapUsersGainedFame(p->u.LocalWar.CommonDataC.Data);
	::SendCMD_LOCALWAR_END2Client(p);

	if (g_isLocalWarServer)
	{
		g_pLocalWarfield->ClearManCount();
		g_pLocalWarfield->SetLocalWarStatus(0);
	}

	::ReturnLocalwarHome();// 030518 kyo	
}	//> CSD-031007

void RecvCMD_LOCALWAR_NATION_POINT_CHANGED(t_packet *p, t_connection c[], int cn )
{
	t_packet packet;

	g_pNation->IncLocalWarPoint(0,p->u.LocalWar.NationPointChanged.NationPoint[0]);
	g_pNation->IncLocalWarPoint(1,p->u.LocalWar.NationPointChanged.NationPoint[1]);
	g_pNation->IncLocalWarPoint(2,p->u.LocalWar.NationPointChanged.NationPoint[2]);

	packet.h.header.type=CMD_LOCALWAR_POINT_BBS;
	packet.u.LocalWar.LocalWarPointChanged.RemainTime=g_pNation->GetLocalWarRemainTime()-g_curr_time;
	packet.u.LocalWar.LocalWarPointChanged.Point[0]=g_pNation->GetLocalWarPoint(0);
	packet.u.LocalWar.LocalWarPointChanged.Point[1]=g_pNation->GetLocalWarPoint(1);
	packet.u.LocalWar.LocalWarPointChanged.Point[2]=g_pNation->GetLocalWarPoint(2);
	packet.h.header.size=sizeof(t_LocalWarPointChanged);

	SendPacket2LocalWarJoinClients(&packet);
	SendPacket2Maps(&packet);
}

void RecvCMD_LOCALWAR_POINT_BBS(t_packet *p, t_connection c[], int cn )
{
	SendPacket2LocalWarJoinClients(p);
}

void RecvCMD_ACTION_STATUS(t_packet *p, t_connection c[], int cn )
{
	connections[cn].chrlst.nCurrentAction=p->u.LocalWar.ActionStatus.nCurrentAction;
	p->u.LocalWar.ActionStatus.ServerID=cn;
	CastMe2Other(cn,p);
}

void RecvCMD_SITDOWN_DIRECTION_CHANGED(t_packet *p, t_connection c[], int cn )
{
	connections[cn].chrlst.Direction=(DIRECTION)p->u.LocalWar.SDChanged.Direction;
	p->u.LocalWar.SDChanged.ServerID=cn;
	CastMe2Other(cn,p);
}

// 020428 YGI acer
void RecvCMD_HERO_ACTION_CHANGED(t_packet *p, t_connection c[], int cn )
{ 
	CHARLIST* ch=&connections[cn].chrlst;

	if (p->u.LocalWar.CommonDataC.Data==ACTION_SITDOWN)
	{
		MoveEmptyInv( &ch->equip[ WT_SHOES], ch );
		POS pos;
		SetItemPos( EQUIP, WT_SHOES, &pos );
		// 020428 YGI acer
		SendDeleteItem( &ch->equip[ WT_SHOES], &pos, ch );
		CheckAndSendChangeEquip( ch, 1 );
	}
}

// Event LocalWar System _____________________________________________________________________________

bool LoadStartUpPoint()
{
	// 030919 HK YGI
//	char	NetworkDir[MAX_PATH];
//	char	MapServerConfigFileName[MAX_PATH];
	int		i;
	char	tempString[MAX_PATH];

	/*
	if (GetPrivateProfileString("Network","path","",NetworkDir,MAX_PATH, MAP_SERVER_INI_)<=0)
	{
		MyLog(0,"Mapserver.ini狼  Path汲沥捞 肋给登绢乐嚼聪促.");
		return false;
	}

⌨️ 快捷键说明

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