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

📄 ltssupport.cpp

📁 国内著名网络游戏dragon的服务端完整源码 内附完整数据库结构
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	{
		//笛促 傈里俊 曼咯沁促.
		tempLevel = pTarget->GetLevel() - pCaster->GetLevel(); // CSD-030806
		tempIndex=(int)tempLevel/10;
		if (tempLevel>0)	//规绢磊狼 饭骇捞 臭促 // 傍拜磊狼 痢荐裙垫
		{
			switch (pCaster->name_status.nation)	// 惫啊痢荐甫 备茄促.
			{
			case NW_BY : NationPoint[0]+=PointTBL[tempIndex]; break;
			case NW_ZY : NationPoint[1]+=PointTBL[tempIndex]; break;
			case NW_YL : NationPoint[2]+=PointTBL[tempIndex]; break;
			}
			if (tempIndex>0) 
			{
				IncGainedFame(pCaster,3);
				IncGainedFame(pTarget,-3);
			}
			else
			{
				if (tempIndex==0)
				{
					IncGainedFame(pCaster,2);
					IncGainedFame(pTarget,-2);
				}
			}
			
		}
		else				//傍拜磊狼 饭骇捞 臭促	// 规绢磊狼 痢荐 
		{
			if (tempIndex<-1) 
			{
				IncGainedFame(pCaster,0);
				IncGainedFame(pTarget,0);
			}
			else
			{
				if (tempIndex==0)
				{
					IncGainedFame(pCaster,1);
					IncGainedFame(pTarget,-1);
				}
			}
		}
	}
/*	else							// 020130 LTS
	{
		if (pCaster->JoinLocalWar)
		{
			//傍拜磊啊 傈里曼咯
			IncGainedFame(pCaster,-2);	//傈里葛靛啊 酒囱荤恩阑 磷捞搁 -2疙己摹皑家
			switch (pCaster->name_status.nation)	// 惫啊痢荐甫 备茄促.
			{
			case NW_BY : NationPoint[0]-=5; break;
			case NW_ZY : NationPoint[1]-=5; break;
			case NW_YL : NationPoint[2]-=5; break;
			}
		}
		else
		{
			//规绢磊啊 傈里曼咯
			switch (pCaster->name_status.nation)	// 惫啊痢荐甫 备茄促.
			{
			case NW_BY : NationPoint[0]-=5; break;
			case NW_ZY : NationPoint[1]-=5; break;
			case NW_YL : NationPoint[2]-=5; break;
			}
		}
	}*/

	//MyLog(0,"Send Nation Point 1 : %d, 2 : %d, 3 : %d",NationPoint[0],NationPoint[1],Nationpoint[2]);
	packet.h.header.type=CMD_LOCALWAR_NATION_POINT_CHANGED;
	packet.u.LocalWar.NationPointChanged.NationPoint[0]=NationPoint[0];
	packet.u.LocalWar.NationPointChanged.NationPoint[1]=NationPoint[1];
	packet.u.LocalWar.NationPointChanged.NationPoint[2]=NationPoint[2];
	packet.h.header.size=sizeof(t_NationPointChanged);

	SendPacket2NWManager(&packet);
}

cLocalWarfield::cLocalWarfield()
{
	m_tLocalWarfieldInfo.Index=0;
	m_tLocalWarfieldInfo.Port=0;
	m_tLocalWarfieldInfo.Phase=0;
	ClearManCount();
	ClearSealStonePtr();							// LTS NEW LOCALWAR
//	ClearPoint();
}

void cLocalWarfield::ClearSealStonePtr()			// LTS NEW LOCALWAR
{
	for (int i=0;i<NW_NATION_COUNT;i++)
	{
		for (int j=0;j<LOCALWAR_SEALSTONE_MAX;j++)
		{
			m_SealStonePtr[i][j]=NULL;
		}
	}
}

int	cLocalWarfield::ConvertNation2Index(int Nation) 
{
	switch (Nation) 
	{
	case NW_BY :	return 0; 
	case NW_ZY :	return 1;
	case NW_YL :	return 2;
	}
	return 0;
}

void cLocalWarfield::ClearManCount()
{
	m_ManCount[0]=0;					// LOOP UNROLL
	m_ManCount[1]=0;
	m_ManCount[2]=0;
}

/*void cLocalWarfield::ClearPoint()
{
	m_LocalWarPoint[0]=0;				// LOOP UNROLL
	m_LocalWarPoint[1]=0;
	m_LocalWarPoint[2]=0;
}*/

void cLocalWarfield::SetLocalWarfieldInfo(LocalWarfield_Info LF)		// LTS NEW LOCALWAR
{
	m_tLocalWarfieldInfo.Index=LF.Index;
	m_tLocalWarfieldInfo.Phase=LF.Phase;
	m_tLocalWarfieldInfo.Port=LF.Port;
	strcpy(m_tLocalWarfieldInfo.MapName,LF.MapName);
	for (int i=0;i<NW_NATION_COUNT;i++)
	{
		for (int j=0;j<LOCALWAR_SEALSTONE_MAX;j++)
		{
			m_SealStoneNo[i][j]=LF.SealNo[i][j];
		}
	}
}

int cLocalWarfield::CheckAllSealStonebroked(int NationIndex)				// LTS NEW LOCALWAR
{
	for (int i=0;i<LOCALWAR_SEALSTONE_MAX;i++)								// NPCList[]俊辑 瘤况柳促搁... 救等促.
	{																		// 惫瘤傈狼 搬拌籍篮 Remove登瘤 臼绰促. 犬牢秦焊磊	
		if (m_SealStonePtr[NationIndex][i])
		{
			if (!m_SealStonePtr[NationIndex][i]->IsDead())
			{
				return FALSE;
			}
		}
	}

/*	t_packet packet;
	packet.h.header.type=CMD_SEALSTONE_ALL_BROKED;
	packet.u.LocalWar.CommonDataC.Data=TRUE;
	packet.h.header.size=sizeof(t_CommonDataC);
	SendPacket2Map(&packet,NATION_MANAGE_SERVER);*/


	return TRUE;
}

extern int GetNationIndex(int Nation);						// LTS NEW LOCALWAR


void cLocalWarfield::CheckSealStonePtr(CHARLIST* ch)			// LTS NEW LOCALWAR BUG
{
	int NationIndex;

	switch(ch->SprNo)
	{
	case 98 : NationIndex=0; break;						// BY
	case 99 : NationIndex=1; break;						// ZY
	case 91 : NationIndex=2; break;						// YL
	}
		
	for (int i=0;i<LOCALWAR_SEALSTONE_MAX;i++)
	{
		if (ch->eventno==m_SealStoneNo[NationIndex][i])				// 0篮 磊悼栏肺 NULL捞等促.
		{
			if (m_SealStonePtr[NationIndex][i]==NULL)
			{
				m_SealStonePtr[NationIndex][i]=ch;
				MyLog(0,"SEALSTONE WAS POINTED!! EventNo : %d, NationIndex:%d, Locate:%d",ch->eventno,NationIndex,i);
				return;
			}
		}
		
	}
}

CHARLIST* cLocalWarfield::GetSealStonePtr( const int nNation, const int nStoneNum )
{// 030506 kyo
	if( 0 <= nNation && nNation <= NW_NATION_COUNT && 0<= nStoneNum && nStoneNum <= LOCALWAR_SEALSTONE_MAX )
	{
		return m_SealStonePtr[nNation][nStoneNum];
	}
	else
		return NULL;
}


void cLocalWarfield::RecoveryAllSealStone()
{// 030520 kyo //葛电 搬拌籍狼 HP甫 HPMAX肺 盲款促. 
	CHARLIST *ch;
	for (int i=0;i<NW_NATION_COUNT;i++)
	{
		for (int j=0;j<LOCALWAR_SEALSTONE_MAX;j++)
		{
			ch = GetSealStonePtr( i, j );
			if( !ch) 
			{
				continue;
			}
			ch->Hp = ch->HpMax;
		}
	}
}

void GiveSealStonePoint(CHARLIST* ach,CHARLIST* dch)
{
	switch (dch->SprNo)
	{
	case 91 : 
		MyLog(0,"Gained Fame 函版 , 捞抚 : %s, Old : %d, New : %d",ach->Name,ach->GainedFame,ach->GainedFame+3);
		if (ach->name_status.nation!=NW_YL) ach->GainedFame+=3; 
		break;
	case 98 : 
		MyLog(0,"Gained Fame 函版 , 捞抚 : %s, Old : %d, New : %d",ach->Name,ach->GainedFame,ach->GainedFame+3);
		if (ach->name_status.nation!=NW_BY) ach->GainedFame+=3; 
		break;
	case 99 : 
		MyLog(0,"Gained Fame 函版 , 捞抚 : %s, Old : %d, New : %d",ach->Name,ach->GainedFame,ach->GainedFame+3);
		if (ach->name_status.nation!=NW_ZY) ach->GainedFame+=3; 
		break;
	}
}

void SendCMD_LOCALWAR_STARTUP_STATUS(CHARLIST* ch)	//盖贸澜 肺变矫 焊辰促.
{
	t_packet packet;

	packet.h.header.type=CMD_LOCALWAR_STARTUP_STATUS;
	packet.u.LocalWar.CommonDataC.Data=g_LocalWarBegin;
	packet.h.header.size=sizeof(t_CommonDataC);

	QueuePacket(connections,ch->GetServerID(),&packet,1);
}

void SendCMD_ANSWER_LOCAL_DELIVERY(int UserID,int MapServerPort,t_packet* p)
{
	t_packet DeliveryPacket;

	DeliveryPacket.h.header.type=CMD_ANSWER_LOCAL_DELIVERY;
	DeliveryPacket.u.LocalWar.Delivery_A.UserID=UserID;
	DeliveryPacket.u.LocalWar.Delivery_A.Size=sizeof(t_header)+p->h.header.size;
	//memcpy(DeliveryPacket.u.LocalWar.Delivery_A.Data,(char*)p,DeliveryPacket.u.LocalWar.Delivery_A.Size);
	DeliveryPacket.u.LocalWar.Delivery_A.nType = p->h.header.type; // 030518 kyo	
	memcpy(DeliveryPacket.u.LocalWar.Delivery_A.Data,(char*)(p->u.data),DeliveryPacket.u.LocalWar.Delivery_A.Size); // 030518 kyo单捞鸥父 汗荤
	DeliveryPacket.h.header.size=sizeof(t_Delivery_A)-100+DeliveryPacket.u.LocalWar.Delivery_A.Size;
	g_pServerTable->SendRajaPacketToOtherMapServer(MapServerPort, (char *)&DeliveryPacket, DeliveryPacket.h.header.size+sizeof(t_header) );
}

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

	packet.h.header.type=CMD_REQUEST_LOCAL_DELIVERY;
	packet.u.LocalWar.Delivery_R.Port=g_wMapServerPort;
	packet.u.LocalWar.Delivery_R.UserID=cn;
	packet.u.LocalWar.Delivery_R.Size=sizeof(t_header)+p->h.header.size;
	memcpy(packet.u.LocalWar.Delivery_R.Data,(char*)p,packet.u.LocalWar.Delivery_R.Size);
	packet.h.header.size=sizeof(t_Delivery_R)-MAX_STRING_PK+packet.u.LocalWar.Delivery_R.Size;  //100篮 滚欺狼 荐捞促. MAX_STRING_PK (NetWork4.h)//020903 lsw
	g_pServerTable->SendRajaPacketToOtherMapServer( NATION_MANAGE_SERVER, (char *)&packet, packet.h.header.size+sizeof(t_header) );
}

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

	packet.h.header.type=CMD_REQUEST_LOCAL_DELIVERY;
	packet.u.LocalWar.Delivery_R.Port=g_wMapServerPort;
	packet.u.LocalWar.Delivery_R.UserID=cn;
	packet.u.LocalWar.Delivery_R.Size=sizeof(t_header)+p->h.header.size;
	memcpy(packet.u.LocalWar.Delivery_R.Data,(char*)p,packet.u.LocalWar.Delivery_R.Size);
	packet.h.header.size=sizeof(t_Delivery_R)-MAX_STRING_PK+packet.u.LocalWar.Delivery_R.Size;  //100篮 滚欺狼 荐捞促. MAX_STRING_PK (NetWork4.h)//020903 lsw
	g_pServerTable->SendRajaPacketToOtherMapServer( Port, (char *)&packet, packet.h.header.size+sizeof(t_header) );
}


void ProcessCMD_LOCALWAR_STATUS(t_packet *ReturnPacket,t_packet* ReceivePacket)
{
	ReturnPacket->h.header.type=CMD_LOCALWAR_STATUS;
	ReturnPacket->u.LocalWar.CommonDataC.Data=g_pNation->GetLocalWarStatus();
	ReturnPacket->h.header.size=sizeof(t_CommonDataC);
}

void ProcessCMD_REQUEST_LOCALWAR_INFO(t_packet *ReturnPacket,t_packet* ReceivePacket)		// LTS NEW LOCALWAR
{
	const char EventNo[3][9]={	{ 1, 2, 6, 7, 8,24,25,26,27},   // NW_BY 
								{ 8, 9,18,19,20,24,25,26,27},	// NW_ZY
								{ 9,10,13,14,15,25,26,27,28} };	// NW_YL
	ReturnPacket->h.header.type=CMD_ANSWER_LOCALWAR_INFO;
	ReturnPacket->h.header.size=sizeof(t_LocalWarInfo);

	for (int i=0;i<7;i++)
	{
		ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo1[i].Index=i;
		ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo1[i].ManCount[0]=g_pNation->GetLocalWarfieldManCount(i,0);
		ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo1[i].ManCount[1]=g_pNation->GetLocalWarfieldManCount(i,1);
		ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo1[i].ManCount[2]=g_pNation->GetLocalWarfieldManCount(i,2);
	}


	ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarPointChanged.RemainTime=g_pNation->GetLocalWarRemainTime()-g_curr_time;
	ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarPointChanged.Point[0]=g_pNation->GetLocalWarPoint(0);
	ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarPointChanged.Point[1]=g_pNation->GetLocalWarPoint(1);
	ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarPointChanged.Point[2]=g_pNation->GetLocalWarPoint(2);


	ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo2.SealStoneInfo[0][0]=SealStone[NW_BY].status[EventNo[0][0]];		// LOOP UNROLL
	ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo2.SealStoneInfo[0][1]=SealStone[NW_BY].status[EventNo[0][1]];
	ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo2.SealStoneInfo[0][2]=SealStone[NW_BY].status[EventNo[0][2]];
	ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo2.SealStoneInfo[0][3]=SealStone[NW_BY].status[EventNo[0][3]];
	ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo2.SealStoneInfo[0][4]=SealStone[NW_BY].status[EventNo[0][4]];
	ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo2.SealStoneInfo[0][5]=SealStone[NW_BY].status[EventNo[0][5]];
	ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo2.SealStoneInfo[0][6]=SealStone[NW_BY].status[EventNo[0][6]];
	ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo2.SealStoneInfo[0][7]=SealStone[NW_BY].status[EventNo[0][7]];
	ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo2.SealStoneInfo[0][8]=SealStone[NW_BY].status[EventNo[0][8]];

	ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo2.SealStoneInfo[1][0]=SealStone[NW_ZY].status[EventNo[1][0]];		// LOOP UNROLL
	ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo2.SealStoneInfo[1][1]=SealStone[NW_ZY].status[EventNo[1][1]];
	ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo2.SealStoneInfo[1][2]=SealStone[NW_ZY].status[EventNo[1][2]];
	ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo2.SealStoneInfo[1][3]=SealStone[NW_ZY].status[EventNo[1][3]];
	ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo2.SealStoneInfo[1][4]=SealStone[NW_ZY].status[EventNo[1][4]];
	ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo2.SealStoneInfo[1][5]=SealStone[NW_ZY].status[EventNo[1][5]];
	ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo2.SealStoneInfo[1][6]=SealStone[NW_ZY].status[EventNo[1][6]];
	ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo2.SealStoneInfo[1][7]=SealStone[NW_ZY].status[EventNo[1][7]];
	ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo2.SealStoneInfo[1][8]=SealStone[NW_ZY].status[EventNo[1][8]];

	ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo2.SealStoneInfo[2][0]=SealStone[NW_YL].status[EventNo[2][0]];		// LOOP UNROLL
	ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo2.SealStoneInfo[2][1]=SealStone[NW_YL].status[EventNo[2][1]];
	ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo2.SealStoneInfo[2][2]=SealStone[NW_YL].status[EventNo[2][2]];
	ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo2.SealStoneInfo[2][3]=SealStone[NW_YL].status[EventNo[2][3]];
	ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo2.SealStoneInfo[2][4]=SealStone[NW_YL].status[EventNo[2][4]];
	ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo2.SealStoneInfo[2][5]=SealStone[NW_YL].status[EventNo[2][5]];
	ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo2.SealStoneInfo[2][6]=SealStone[NW_YL].status[EventNo[2][6]];
	ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo2.SealStoneInfo[2][7]=SealStone[NW_YL].status[EventNo[2][7]];
	ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarInfo2.SealStoneInfo[2][8]=SealStone[NW_YL].status[EventNo[2][8]];

	ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarDefencePoint[0]=g_pNation->GetLocalWarDefencePoint(0);		// LTS NEW LOCALWAR
	ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarDefencePoint[1]=g_pNation->GetLocalWarDefencePoint(1);		// LTS NEW LOCALWAR
	ReturnPacket->u.LocalWar.LocalWarInfo.LocalWarDefencePoint[2]=g_pNation->GetLocalWarDefencePoint(2);		// LTS NEW LOCALWAR
}


void ProcessCMD_EVENT_LOCALWAR_JOIN(t_packet *ReturnPacket,t_packet* ReceivePacket)
{
	int Level=ReceivePacket->u.LocalWar.EventJoin.Level;
	int Nation=ReceivePacket->u.LocalWar.EventJoin.Nation;
	if (!g_isEventLocalWarServer) return;

	if (!g_pEventLocalWarfield->CheckLevel(Level))						// 饭骇狼 裹困啊 撇府促搁
	{
		ReturnPacket->h.header.type=CMD_EVENT_LOCALWAR_JOIN_RESULT;
		ReturnPacket->u.LocalWar.CommonDataC.Data=2;					// 0 : 角菩 1 : 己傍 2 : 饭骇角菩 3 : 牢盔角菩
		ReturnPacket->h.header.size=sizeof(t_CommonDataC);
		return;
	}

	if (!g_pEventLocalWarfield->IncManCount(Nation))					// 牢盔力茄俊 吧啡促搁 
	{
		ReturnPacket->h.header.type=CMD_EVENT_LOCALWAR_JOIN_RESULT;
		ReturnPacket->u.LocalWar.CommonDataC.Data=3;					// 0 : 角菩 1 : 己傍 2 : 饭骇角菩 3 : 牢盔角菩
		ReturnPacket->h.header.size=sizeof(t_CommonDataC);
		return;
	}

	ReturnPacket->h.header.type=CMD_EVENT_LOCALWAR_JOIN_RESULT;			// 捞惑绝促搁 	
	ReturnPacket->u.LocalWar.CommonDataC.Data=1;						// 0 : 角菩 1 : 己傍 2 : 饭骇角菩 3 : 牢盔角菩
	ReturnPacket->h.header.size=sizeof(t_CommonDataC);
}

void RecvCMD_REQUEST_LOCAL_DELIVERY(t_packet *p, t_connection c[], int cn)
{
	t_packet	tempPacket;
	t_packet	SendPacket;

	WORD	MapServerPort;
	DWORD	UserID;

	MapServerPort=p->u.LocalWar.Delivery_R.Port;
	UserID=p->u.LocalWar.Delivery_R.UserID;

	memcpy((char*)&tempPacket,p->u.LocalWar.Delivery_R.Data,p->u.LocalWar.Delivery_R.Size);

	switch (tempPacket.h.header.type)
	{

⌨️ 快捷键说明

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