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

📄 nationsys.cpp

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

	t_packet packet;
	if (iWarNo != ch->NWCharacter.WarNo)		
	{																				// 傈里锅龋啊 撇府促搁 
		::memset(&ch->NWCharacter,0,sizeof(NW_Character));				// 傈里阑 檬扁拳 秦扼.
		ch->NWCharacter.WarNo=iWarNo;
		packet.h.header.type=CMD_CLEAR_WAR_CHARACTER_DATA;
		packet.u.NationWar.CommonDataC.Data=iWarNo;
		packet.h.header.size=sizeof(t_CommonDataC);
		::QueuePacket(connections,iUserCn,&packet,1);
	}
	else
	{
		if ((g_pWarfieldStatus[0].Status<2)&&
			(g_pWarfieldStatus[1].Status<2)&&
			(g_pWarfieldStatus[2].Status<2))
		{
			::memset(&ch->NWCharacter,0,sizeof(NW_Character));				// 傈里阑 檬扁拳 秦扼.
			ch->NWCharacter.WarNo=iWarNo;
			packet.h.header.type=CMD_CLEAR_WAR_CHARACTER_DATA;
			packet.u.NationWar.CommonDataC.Data=iWarNo;
			packet.h.header.size=sizeof(t_CommonDataC);
			::QueuePacket(connections,iUserCn,&packet,1);
		}
	}
}

void SendCMD_CLEAR_SQUAD_DATA(t_connection c[],const int cn)								// NWCharacter 甫 檬扁拳 窍扼绊 皋矫瘤甫 焊辰促.
{
	// 傈里捞 场车阑锭.
	t_packet packet;
	packet.h.header.type=CMD_CLEAR_SQUAD_DATA;
	packet.h.header.size=0;
	QueuePacket(c,cn,&packet,1);
}

void SendCMD_CLEAR_SQUAD_DATA(const int Nation)		// 0: ALL 3,4 : WarfieldNo
{
	t_packet packet;

	packet.h.header.type=CMD_CLEAR_SQUAD_DATA;
	packet.h.header.size=0;

	if (0==Nation)
	{
		SendPacket2Maps(&packet); //傈里 饶 
	}
	else 
	{
		SendPacket2NationMaps(Nation,&packet); 
	}

}

void SendWarBeginEndMessage2Client(const int type)
{
	t_packet p;

	if (type) 
	{
		p.h.header.type=CMD_WAR_BEGIN;
	}
	else 
	{
		p.h.header.type=CMD_WAR_END;
	}

	p.h.header.size=0;
	g_pUserManager->SendPacket(&p); // CSD-CN-031213

	if (!type)				//傈里捞 场车栏搁.. 渴阑 哎酒涝绢扼...
	{
		for( int i = DRAGON_CONNECTIONS_START; i<DRAGON_MAX_CONNECTIONS; i++ )
		{
			CHARLIST* ch=CheckServerId(i);
			if(ch)	
			{
				CheckAndSendChangeEquip(ch,1);
			}
		}
	}
}


void SendWarBeginEndMessage2Client(const int type,t_connection c[],const int cn)
{
	t_packet p;

	if (type) p.h.header.type=CMD_WAR_BEGIN;
	else p.h.header.type=CMD_WAR_END;
	p.h.header.size=0;
	QueuePacket(c,cn,&p,1);
}



void RecvCMD_CHECK_WARFIELD_STATUS(t_packet *p,t_connection c[],const int cn)
{
	if (isNationManageServer()) 
	{
		g_pNation->CheckWarFieldStatus(p->u.NationWar.WarfieldStatusChange.WarfieldNo,p->u.NationWar.WarfieldStatusChange.Status);
	}
}

void RecvCMD_CHECK_WARFIELD_STATUS_RESULT(t_packet *p,t_connection c[],const int cn)
{
	if (isNationWarfieldServer())
	{
		g_pWarfield->ChangeWarfieldStatus(p->u.NationWar.CommonDataC.Data);
	}
}

void RecvCMD_WARFIELD_STATUS(t_packet *p,t_connection c[],const int cn)
{
	if (isNationManageServer())
	{
		int temp=p->u.NationWar.WarfieldStatusChange.WarfieldNo-BASE_WARFIELD_PORT;
		g_pNation->SetWarFieldStatus(temp,p->u.NationWar.WarfieldStatusChange.Status);
		if (p->u.NationWar.WarfieldStatusChange.Status==NW_VOTE) g_pNation->InitVoteData(temp); //傈里曼咯 捧钎单捞磐甫 檬扁拳茄促.
	}
}

void RecvCMD_WARBBS(t_packet *p)
{
	switch (p->u.NationWar.WarBBS.BBSType)
	{
	case BBS_COMMANDER_ELECT : 
		{
			char tempCommander[80];
			char* tempChar;
			memcpy(tempCommander,p->u.NationWar.WarBBS.Arg,p->u.NationWar.WarBBS.Size);
			tempChar=tempCommander;
			*(tempChar+p->u.NationWar.WarBBS.Size)='\0';
			FindCommander(tempCommander);	break;
		}
	}
	
	g_pUserManager->SendPacket(p); // CSD-CN-031213
}

void RecvCMD_REQUEST_WARFIELD_STATUS(t_packet *p, t_connection c[], const int cn)
{
	t_packet packet;
	if (isNationManageServer())  //包府辑滚捞骨肺 溜矫 努扼捞攫飘俊 秦寸 菩哦阑 焊辰促.
	{
		ProcessCMD_REQUEST_WARFIELD_STATUS(&packet,p);
		QueuePacket(c,cn,&packet,1);
	}
	else 
	{
		SendCMD_REQUEST_DELIVERY(NATION_MANAGE_SERVER,p,c,cn);	//包府辑滚啊 酒聪骨肺 Map侩菩哦栏肺 官操绊 傈价茄促.
	}
}

void SendCMD_WARFIELD_WAR_DATA1(t_packet* p)
{
	if (!isNationWarfieldServer()) return;

	int i,GuardStoneCount=0,CastleGateWayCount=0;
	int tempIndex;
	int count=0;
	const int GuardSize	=	g_pWarfield->GetGuardStoneCount(); 
	const int CastleSize=	g_pWarfield->GetCastleDoorCount();
	if(0 >= GuardSize || 0 >= CastleSize)
	{
		return;
	}

	char* GuardStoneStatus		=new char[GuardSize];
	char* CastleGateWayStatus	=new char[CastleSize];

	for (i=0;i<NW_MAX_NPC;i++)
	{
		tempIndex=g_pWarfield->GetWeaponIndex(i);
		if (tempIndex==63)		//荐龋籍 //焊胶绰 磷栏搁 场捞促 公炼扒 混酒乐促绊!!
		{			
			GuardStoneStatus[GuardStoneCount]=g_pWarfield->GetWeaponStatus(i);
			GuardStoneCount++;
		}
		if (tempIndex>=65&&tempIndex<=67)
		{
			CastleGateWayStatus[CastleGateWayCount]=g_pWarfield->GetWeaponStatus(i);
			CastleGateWayCount++;
		}
	}

	if (GuardStoneCount!=GuardSize) 
	{
		MyLog(0,"GuardStoneCount Check Error!!");
	}
	if (CastleGateWayCount!=CastleSize) 
	{
		MyLog(0,"CastleGateWayCount Check Error");
	}
	p->h.header.type=CMD_WARFIELD_WAR_DATA1;
	(char)p->u.data[count]=GuardSize;
	for (i=0;i<GuardSize;i++)
	{
		count++;
		(char)p->u.data[count]=GuardStoneStatus[i];
	}
	count++;
	(char)p->u.data[count]=CastleGateWayCount;
	for (i=0;i<CastleSize;i++)
	{
		count++;
		(char)p->u.data[count]=CastleGateWayStatus[i];
	}
	p->h.header.size=1+1+GuardSize+CastleSize;

	SAFE_DELETE(GuardStoneStatus);
	SAFE_DELETE(CastleGateWayStatus);
}

void SendCMD_WARFIELD_WAR_DATA2(t_packet* p)
{
	if (!isNationWarfieldServer()) return;

	p->h.header.type=CMD_WARFIELD_WAR_DATA2;
	p->u.NationWar.WarfieldData2.RemainTime=g_pWarfield->GetLoopTime()-g_WarTime;
	p->u.NationWar.WarfieldData2.AttackerCount=g_pWarfield->GetAllSquadCurrentMemberCount(NW_ATTACKER);
	p->u.NationWar.WarfieldData2.DefencerCount=g_pWarfield->GetAllSquadCurrentMemberCount(NW_DEFENCER);
	p->u.NationWar.WarfieldData2.ReinforceCount=g_pWarfield->GetAllSquadCurrentMemberCount(NW_DEFENCER);

	p->h.header.size=sizeof(t_WarfieldData2);
}

void SendCMD_WARFIELD_WAR_DATA3(t_packet* p,int WarfieldNo,int Nation)			// 惫利捞 鞘夸窍促.
{
	if (!isNationWarfieldServer()) 
	{
		return;
	}

	p->h.header.type=CMD_WARFIELD_WAR_DATA3;
	
	if (isAttacker(WarfieldNo,Nation)) 
	{
		p->u.NationWar.WarfieldData3.Type=NW_ATTACKER;
	}
	else 
	{
		p->u.NationWar.WarfieldData3.Type=NW_DEFENCER;
	}

	p->u.NationWar.WarfieldData3.MemberCount[0]=g_pWarfield->GetSquadCurrentMemberCount(p->u.NationWar.WarfieldData3.Type,0);		// LOOP UNROLL	//NW_SQUAD
	p->u.NationWar.WarfieldData3.MemberCount[1]=g_pWarfield->GetSquadCurrentMemberCount(p->u.NationWar.WarfieldData3.Type,1);
	p->u.NationWar.WarfieldData3.MemberCount[2]=g_pWarfield->GetSquadCurrentMemberCount(p->u.NationWar.WarfieldData3.Type,2);
	p->u.NationWar.WarfieldData3.MemberCount[3]=g_pWarfield->GetSquadCurrentMemberCount(p->u.NationWar.WarfieldData3.Type,3);
	p->u.NationWar.WarfieldData3.MemberCount[4]=g_pWarfield->GetSquadCurrentMemberCount(p->u.NationWar.WarfieldData3.Type,4);
	p->h.header.size=sizeof(t_WarfieldData3);
}

void SendCMD_UPDATE_WARTIME(const int WarfieldNo,const int Status,const DWORD RemainTime)
{
	t_packet packet;
	packet.h.header.type=CMD_SET_REMAIN_TIME;
	packet.u.NationWar.RemainTime.WarfieldNo=WarfieldNo;
	packet.u.NationWar.RemainTime.Status=Status;
	packet.u.NationWar.RemainTime.RemainTime=RemainTime;
	packet.h.header.size=sizeof (t_RemainTime);
	SendPacket2NWManager(&packet);
}

bool CheckCharSquadLeaderCondition(t_connection c[], const int cn )		// 011016 LTS
{	//< CSD-030806
	if ((c[cn].chrlst.GetLevel()>=NW_SQUADLEADER_LEVEL_MIN) &&
		(c[cn].chrlst.LadderScore>=NW_SQUADLEADER_LADDER_MIN)) 
	{
		return true;
	}

	return false;
}	//> CSD-030806

bool CheckJoinSquadCondition(const int SquadNo,const int MemberCount)			// 011028 LTS
{	//< CSD-030806
	switch (SquadNo)		//傍拜磊客 规绢磊狼 备己捞 鞍促.
	{
	case 1:
		{
			if (MemberCount <= NW_SQUAD1_MAN_MAX)
			{
				return true;
			}

			break;
		}
	case 2:
		{
			if (MemberCount <= NW_SQUAD2_MAN_MAX)
			{
				return true;
			}

			break;
		}
	case 3:
		{
			if (MemberCount <= NW_SQUAD3_MAN_MAX)
			{
				return true;
			}

			break;
		}
	case 4:
		{
			if (MemberCount <= NW_SQUAD4_MAN_MAX)
			{
				return true;
			}
		
			break;
		}
	}

	return false;
}	//> CSD-030806

bool CheckJoinLevel(const int SquadNo,t_connection c[],const int cn)	// 011016 LTS
{	//< CSD-030806
	CHARLIST* pApplicant = &c[cn].chrlst;

	switch (SquadNo)
	{
	case 1:
		{
			if (pApplicant->GetLevel() >= NW_SQUAD1_LEVEL_MIN && pApplicant->GetLevel() <= NW_SQUAD1_LEVEL_MAX) 
			{
				return true;
			}

			break;
		}
	case 2:
		{
			if (pApplicant->GetLevel() >= NW_SQUAD2_LEVEL_MIN && pApplicant->GetLevel() <= NW_SQUAD2_LEVEL_MAX)
			{
				return true;
			}
			
			break;
		}
	case 3:
		{
			if (pApplicant->GetLevel() >= NW_SQUAD3_LEVEL_MIN && pApplicant->GetLevel() <= NW_SQUAD3_LEVEL_MAX)
			{
				return true;
			}

			break;
		}
	case 4:
		{
			if (pApplicant->GetLevel() >= NW_SQUAD4_LEVEL_MIN && pApplicant->GetLevel() <= NW_SQUAD4_LEVEL_MAX)
			{
				return true;
			}

			break;
		}
	}
	
	return false;
}	//> CSD-030806

// Where : Call From DragonServer.cpp HandleCommand()
// Usage : Packet Process

void ProcessCMD_REQUEST_WARFIELD_STATUS(t_packet *ReturnPacket,t_packet* ReceivePacket)		// 傈里磐惑怕
{
	ReturnPacket->h.header.type=CMD_ANSWER_WARFIELD_STATUS;
	ReturnPacket->u.NationWar.WarfieldStatus.PacketStatus=ReceivePacket->u.NationWar.WarfieldStatus.PacketStatus;
	ReturnPacket->u.NationWar.WarfieldStatus.Status[0]=g_pNation->GetWarfieldStatus(0);
	ReturnPacket->u.NationWar.WarfieldStatus.Status[1]=g_pNation->GetWarfieldStatus(1);
	ReturnPacket->u.NationWar.WarfieldStatus.Status[2]=g_pNation->GetWarfieldStatus(2);
	ReturnPacket->h.header.size=sizeof(t_WarfieldStatus);
}

void ProcessCMD_REQUEST_VOTE_DATA(t_packet *ReturnPacket,t_packet* ReceivePacket)			// 傈里磐曼咯
{
	ReturnPacket->h.header.type=CMD_ANSWER_VOTE_DATA;
	ReturnPacket->u.NationWar.VoteData.WarfieldNo=ReceivePacket->u.NationWar.CommonDataC.Data;
	ReturnPacket->u.NationWar.VoteData.VoteCount=g_pNation->GetVoteData(ReceivePacket->u.NationWar.CommonDataC.Data);
	ReturnPacket->h.header.size=sizeof(t_VoteData);
}

void ProcessCMD_REQUEST_SQUAD_INFO(t_packet *ReturnPacket,t_packet* ReceivePacket)			// 何措沥焊
{
	const int Nation=ReceivePacket->u.NationWar.RequestSquadInfo.Nation;
	const int WarfieldNo=ReceivePacket->u.NationWar.RequestSquadInfo.WarfieldNo;
	const int SquadNo=ReceivePacket->u.NationWar.RequestSquadInfo.SquadNo;

	t_SquadInformation* tempSquadInfo;
	tempSquadInfo=g_pNation->GetSquadInfo(Nation,WarfieldNo,SquadNo); 

	ReturnPacket->h.header.type=CMD_ANSWER_SQU

⌨️ 快捷键说明

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