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

📄 ltssupport.cpp

📁 国内著名网络游戏dragon的服务端完整源码 内附完整数据库结构
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	case CMD_LOCALWAR_STATUS :  
			ProcessCMD_LOCALWAR_STATUS(&SendPacket,&tempPacket);
			SendCMD_ANSWER_LOCAL_DELIVERY(UserID,MapServerPort,&SendPacket);
			break;
	case CMD_REQUEST_LOCALWAR_INFO :
			ProcessCMD_REQUEST_LOCALWAR_INFO(&SendPacket,&tempPacket);
			SendCMD_ANSWER_LOCAL_DELIVERY(UserID,MapServerPort,&SendPacket);
			break;
	case CMD_EVENT_LOCALWAR_JOIN :
			ProcessCMD_EVENT_LOCALWAR_JOIN(&SendPacket,&tempPacket);
			SendCMD_ANSWER_LOCAL_DELIVERY(UserID,MapServerPort,&SendPacket);
			break;
	}
}

void SetEventLocalWarJoinResult(int UserID,int Result)
{
	switch(Result)
	{
	case 0 :
	case 2 :
	case 3 : connections[UserID].chrlst.EventLocalWarJoin=0;	break;
	case 1 : connections[UserID].chrlst.EventLocalWarJoin=1;	break;
	}

}

void RecvCMD_ANSWER_LOCAL_DELIVERY(t_packet *p, t_connection c[], int cn)
{
	DWORD		UserID;
	t_packet	tempPacket;

	UserID=p->u.LocalWar.Delivery_A.UserID;
	tempPacket.h.header.size=p->u.LocalWar.Delivery_A.Size;// 030518 kyo
	tempPacket.h.header.type=p->u.LocalWar.Delivery_A.nType; // 030518 kyo
	//memcpy((char*)&tempPacket,p->u.LocalWar.Delivery_A.Data,p->u.LocalWar.Delivery_A.Size);
	memcpy((char*)&(tempPacket.u),(p->u.LocalWar.Delivery_A.Data),p->u.LocalWar.Delivery_A.Size); // 030518 kyo
	switch (tempPacket.h.header.type)
	{
	case CMD_EVENT_LOCALWAR_JOIN_RESULT : SetEventLocalWarJoinResult(UserID,tempPacket.u.LocalWar.CommonDataC.Data); break;
	}
	QueuePacket(c,UserID,&tempPacket,1);
}

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

	if (isNationManageServer())
	{
		ProcessCMD_LOCALWAR_STATUS(&packet,p);
		QueuePacket(c,cn,&packet,1);
	}
	else SendCMD_REQUEST_LOCAL_DELIVERY(p,c,cn);
}

void RecvCMD_REQUEST_LOCALWAR_INFO(t_packet *p, t_connection c[], int cn )
{
	t_packet packet;
	if (isNationManageServer())
	{
		ProcessCMD_REQUEST_LOCALWAR_INFO(&packet,p);
		QueuePacket(c,cn,&packet,1);
	}
	else SendCMD_REQUEST_LOCAL_DELIVERY(p,c,cn);
}

void IncLocalWarfieldMemberCount(int cn)
{
	if (g_isLocalWarServer)
	{
		if (connections[cn].chrlst.JoinLocalWar)
		{
			t_packet packet;
			g_pLocalWarfield->IncManCount(g_pLocalWarfield->ConvertNation2Index(connections[cn].chrlst.name_status.nation));
			packet.h.header.type=CMD_INC_USER_LOCALWARFIELD;
			packet.u.LocalWar.LocalWarUserAdd.Index=g_pLocalWarfield->GetLocalWarfieldIndex();
			packet.u.LocalWar.LocalWarUserAdd.Nation=connections[cn].chrlst.name_status.nation;
			packet.h.header.size=sizeof(t_LocalWarUserAdd);
			SendPacket2NWManager(&packet);
		}
	}
}

void DecLocalWarfieldMemberCount(int cn)
{
	t_packet packet;

	if (g_isLocalWarServer)
	{
		if (connections[cn].chrlst.JoinLocalWar)
		{
			g_pLocalWarfield->DecManCount(g_pLocalWarfield->ConvertNation2Index(connections[cn].chrlst.name_status.nation));
			packet.h.header.type=CMD_DEC_USER_LOCALWARFIELD;
			packet.u.LocalWar.LocalWarUserAdd.Index=g_pLocalWarfield->GetLocalWarfieldIndex();
			packet.u.LocalWar.LocalWarUserAdd.Nation=connections[cn].chrlst.name_status.nation;
			packet.h.header.size=sizeof(t_LocalWarUserAdd);
			SendPacket2NWManager(&packet);
		}
	}

}

void RecvCMD_LOCALWAR_JOIN(t_packet *p, t_connection c[], int cn )
{
	LPCHARLIST ch = ::CheckServerId(cn);
	if(!ch){return;}

	t_packet packet, packet2;
	if (!ch->JoinLocalWar)
	{
		if (ch->name_status.nation!=MapInfo[MapNumber].nation)
		{	// 惫利捞 促弗 甘俊辑绰 曼咯且荐 绝促.
			packet.h.header.type=CMD_LOCALWAR_JOIN_RESULT;
			packet.u.LocalWar.CommonDataC.Data=FALSE;
			packet.h.header.size=sizeof(t_CommonDataC);
			QueuePacket(c,cn,&packet,1);
			return;
		}
		ch->JoinLocalWar=TRUE;
		packet.h.header.type=CMD_LOCALWAR_JOIN_RESULT;
		packet.u.LocalWar.CommonDataC.Data=TRUE;
		packet.h.header.size=sizeof(t_CommonDataC);
		QueuePacket(c,cn,&packet,1);
		g_pLogManager->SaveLocalWarInfo(ch); // CSD-040407

		packet2.h.header.type=CMD_USER_JOIN_LOCALWAR;			//蜡历啊 惫瘤傈俊 炼牢 沁促绊 舅妨霖促.
		packet2.u.LocalWar.UserJoinLocalWar.ServerID=cn;
		packet2.h.header.size=sizeof(t_UserJoinLocalWar);
		CastMe2Other( cn, &packet2);

		IncLocalWarfieldMemberCount(cn);

	}
}


void RecvCMD_REQUEST_COMPARE_PHASE(t_packet *p, t_connection c[], int cn )
{
	int NewPhase;

	if (!connections[cn].chrlst.JoinLocalWar) return;

	if (g_isLocalWarServer)
	{
		if (connections[cn].chrlst.name_status.nation!=MapInfo[MapNumber].nation)
		{
			NewPhase=g_pLocalWarfield->GetLocalWarfieldPhase();
			switch (connections[cn].chrlst.CurrentPhase)
			{
			case 0 : 
				switch(NewPhase)
				{
				case 1 : connections[cn].chrlst.CurrentPhase=1; break;
				case 2 : connections[cn].chrlst.CurrentPhase=2; break;
				}
				break;
			case 1 : 
				switch(NewPhase)
				{
				case 2 : connections[cn].chrlst.CurrentPhase=2; break;
				}
				break;
			default : connections[cn].chrlst.CurrentPhase=NewPhase; 
			}
		}

		IncLocalWarfieldMemberCount(cn);
	}
	else
	{
		if (connections[cn].chrlst.JoinLocalWar) connections[cn].chrlst.CurrentPhase=0;
	}
}

void RecvCMD_INC_USER_LOCALWARFIELD(t_packet *p, t_connection c[], int cn )
{
	int Index=p->u.LocalWar.LocalWarUserAdd.Index;
	int NationIndex=g_pNation->ConvertNation2Index(p->u.LocalWar.LocalWarUserAdd.Nation);
	int Nation=p->u.LocalWar.LocalWarUserAdd.Nation;

	g_pNation->IncLocalWarfieldManCount(Index,NationIndex);
	MyLog(0,"曼咯牢盔 函悼 __ 锅龋 : %d, 惫利 : %d , 牢盔 : %d",Index,Nation,g_pNation->GetLocalWarfieldManCount(Index,NationIndex));
}

void RecvCMD_DEC_USER_LOCALWARFIELD(t_packet *p, t_connection c[], int cn )
{
	int Index=p->u.LocalWar.LocalWarUserAdd.Index;
	int NationIndex=g_pNation->ConvertNation2Index(p->u.LocalWar.LocalWarUserAdd.Nation);
	int Nation=p->u.LocalWar.LocalWarUserAdd.Nation;

	g_pNation->DecLocalWarfieldManCount(Index,NationIndex);
	MyLog(0,"曼咯牢盔 函悼 __ 锅龋 : %d, 惫利 : %d , 牢盔 : %d",Index,Nation,g_pNation->GetLocalWarfieldManCount(Index,NationIndex));
}

void SendCMD_LOCALWAR_BEGIN2Client()
{	//< CSD-CN-031213
	t_packet p;
	p.h.header.type = CMD_LOCALWAR_BEGIN;
	p.h.header.size = 0;
	g_pUserManager->SendPacket(&p);
}	//> CSD-CN-031213

void SendCMD_LOCALWAR_FAME_EXP(CHARLIST* ch,int Fame,int Exp)
{
	t_packet packet;

	packet.h.header.type=CMD_LOCALWAR_FAME_EXP;
	packet.u.LocalWar.FameExpChange.GainedFame=Fame;
	packet.u.LocalWar.FameExpChange.GainedExp=Exp;
	packet.h.header.size=sizeof(t_FameExpChange);

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

void CalcGainedFame(CHARLIST* ch)// LTS DUAL FAME
{
	short OldFame = ch->fame;
	if (ch->GainedFame>=9) 
	{//掂倔其烙捞 9捞惑捞搁 其烙篮 12, 掂倔其烙篮 8刘啊
		SaveChangeFame(ch,ch->fame,ch->fame+12,LF_LOCALWAR);// 020909 LTS
		ch->fame+=12;// 胶颇捞 霸烙阑 困茄 蔼阑 刘啊矫挪促.
		MyLog(0,"Fame Changed , Name:[%s], Nation:[%d], OldFame:[%d], NewFame:[%d], Differ:[%d]",ch->Name,ch->name_status.nation,OldFame,ch->fame,ch->fame-OldFame);	
		const int iOldDF = var[ch->GetServerID()][DUAL_FAME_FIELD];
		const int iNewDF = iOldDF+8;
		var[ch->GetServerID()][DUAL_FAME_FIELD] = iNewDF;
		
		::SaveChangeDualFame( ch, iOldDF, iNewDF, LDF_LOCALWAR);
		::MyLog(0,"Increase User Spy Game Point, User : %s, OldPoint %d, NewPoint %d",ch->Name,iOldDF,iNewDF);
	}
	else 
	{
		if (ch->GainedFame>0)
		{
			SaveChangeFame(ch,ch->fame,ch->fame+ch->GainedFame,LF_LOCALWAR);		// 020909 LTS
			ch->fame+=ch->GainedFame;		
			MyLog(0,"Fame Changed , Name:[%s], Nation:[%d], OldFame:[%d], NewFame:[%d], Differ:[%d]",ch->Name,ch->name_status.nation,OldFame,ch->fame,ch->fame-OldFame);		
		}
		
		int tempValue=2+ch->GainedFame;
		if (tempValue>=8)
		{
			const int iOldDF = var[ch->GetServerID()][DUAL_FAME_FIELD];
			const int iNewDF = iOldDF+8;
			var[ch->GetServerID()][DUAL_FAME_FIELD] = iNewDF;
			
			::SaveChangeDualFame( ch, iOldDF, iNewDF, LDF_LOCALWAR);
			::MyLog(0,"Increase User Spy Game Point, User : %s, OldPoint %d, NewPoint %d",ch->Name,iOldDF,iNewDF);
		}
		else
		{
			if (tempValue>1)	// 钦捞 剧牢 荤恩俊霸 
			{
				const int iOldDF = var[ch->GetServerID()][DUAL_FAME_FIELD];
				const int iNewDF = iOldDF+tempValue;
				var[ch->GetServerID()][DUAL_FAME_FIELD] = iNewDF;
				
				::SaveChangeDualFame( ch, iOldDF, iNewDF, LDF_LOCALWAR);
				::MyLog(0,"Increase User Spy Game Point, User : %s, OldPoint %d, NewPoint %d",ch->Name,iOldDF,iNewDF);
			}
			else				// 钦捞 澜牢 荤恩俊霸
			{
				const int iOldDF = var[ch->GetServerID()][DUAL_FAME_FIELD];
				const int iNewDF = iOldDF+2;
				var[ch->GetServerID()][DUAL_FAME_FIELD] = iNewDF;
				
				::SaveChangeDualFame( ch, iOldDF, iNewDF, LDF_LOCALWAR);
				::MyLog(0,"Increase User Spy Game Point, User : %s, OldPoint %d, NewPoint %d",ch->Name,iOldDF,iNewDF);
			}
		}
	}

	int tempFame=ch->fame-OldFame;
	
	if (tempFame>=5&&tempFame<=9) 
	{
		int tempExp_Grade = ch->GetLevel() - 4; // CSD-030806

		if (tempExp_Grade>110) {tempExp_Grade=110;}

		if (ch->ChangeUpAddExpBonus(g_pNationWar_Exp[tempExp_Grade]))
		{	//< CSD-TW-030624
			::isLevelUp(ch);
			SendCMD_LOCALWAR_FAME_EXP(ch,tempFame,g_pNationWar_Exp[tempExp_Grade]);
		}	//> CSD-TW-030624
		else
		{
		  SendCMD_LOCALWAR_FAME_EXP(ch,tempFame,0);
		}
	}
	else if (tempFame>=10&&tempFame<=11)
	{
		int tempExp_Grade = ch->GetLevel() - 2; // CSD-030806
		if (tempExp_Grade>110){ tempExp_Grade=110;}
				
		if (ch->ChangeUpAddExpBonus(g_pNationWar_Exp[tempExp_Grade]))
		{	//< CSD-TW-030624
			::isLevelUp(ch);
			SendCMD_LOCALWAR_FAME_EXP(ch,tempFame,g_pNationWar_Exp[tempExp_Grade]);
		}	//> CSD-TW-030624
		else
		{
		  SendCMD_LOCALWAR_FAME_EXP(ch,tempFame,0);
		}
	}
	else if (tempFame==12)
	{
		int tempExp_Grade = ch->GetLevel(); // CSD-030806

		if (tempExp_Grade>110){tempExp_Grade=110;}
		
		if (ch->ChangeUpAddExpBonus(g_pNationWar_Exp[tempExp_Grade]))
		{	//< CSD-TW-030624
			::isLevelUp(ch);
			SendCMD_LOCALWAR_FAME_EXP(ch,tempFame,g_pNationWar_Exp[tempExp_Grade]);
		}	//> CSD-TW-030624
		else
		{
		  SendCMD_LOCALWAR_FAME_EXP(ch,tempFame,0);
		}
	}
	else 
	{
		SendCMD_LOCALWAR_FAME_EXP(ch,tempFame,0);
	}
}

//020828 lsw
void CalcMapUsersGainedFame(int Nation)
{	//< CSD-HK-030829
	for (int i = DRAGON_CONNECTIONS_START; i < DRAGON_MAX_CONNECTIONS; ++i)
	{
		CHARLIST* pUser = CheckServerId(i);
		
		if (pUser != NULL)
		{
			if (pUser->JoinLocalWar && pUser->name_status.nation == Nation) 
			{
				CalcGainedFame(pUser);
			}
			else					// 胶颇捞 霸烙阑 困茄 蔼阑 诀单捞飘 茄促.
			{
				if (pUser->JoinLocalWar)
				{
					int tempValue = pUser->GainedFame + 2;
					
					if (tempValue >= 8)
					{
						const int iOldDF = var[i][DUAL_FAME_FIELD];
						const int iNewDF = iOldDF + 8;
						var[pUser->GetServerID()][DUAL_FAME_FIELD] = iNewDF;
						
						::SaveChangeDualFame(pUser, iOldDF, iNewDF, LDF_LOCALWAR);
						::MyLog(0,"Increase User Spy Game Point, User : %s, OldPoint %d, NewPoint %d", pUser->Name, iOldDF, iNewDF);
					}
					else
					{
						if (tempValue>1)		// 0焊促 奴荤恩俊霸.... 掘篮 蔼阑 
						{
							const int iOldDF = var[i][DUAL_FAME_FIELD];
							const int iNewDF = iOldDF + tempValue;
							var[i][DUAL_FAME_FIELD] = iNewDF;
							
							::SaveChangeDualFame(pUser, iOldDF, iNewDF, LDF_LOCALWAR);
							::MyLog(0,"Increase User Spy Game Point, User : %s, OldPoint %d, NewPoint %d", pUser->Name, iOldDF, iNewDF);
						}
						else					// 0焊促 累篮 荤恩篮.. 公炼扒2
						{
							const int iOldDF = var[i][DUAL_FAME_FIELD];
							const int iNewDF = iOldDF + 2;
							var[i][DUAL_FAME_FIELD] = iNewDF;
							
							::SaveChangeDualFame(pUser, iOldDF, iNewDF, LDF_LOCALWAR);
							::MyLog(0,"Increase User Spy Game Point, User : %s, OldPoint %d, NewPoint %d", pUser->Name, iOldDF, iNewDF);
						}
					}
				}
			}
		}
	}
}	//> CSD-HK-030829

void SendCMD_LOCALWAR_END2Client(t_packet* p)
{	//< CSD-CN-031213 : 泅犁 甘狼 惫瘤傈俊 曼啊茄 葛电 蜡历狼 曼啊甫 秒家茄促. 
	g_pUserManager->SendPacket(p);

	CUserManager::HASH_USER user = g_pUserManager->GetUserSet();

	for (CUserManager::ITOR_USER i = user.begin(); i != user.end(); ++i)
	{
		CHARLIST* pUser = CheckServerId(i->second);
		
		if (pUser != NULL && pUser->JoinLocalWar)
		{
			CheckAndSendChangeEquip(pUser, 1);
			//pUser->JoinLocalWar = 0; // 030520 kyo 
		}
	}
}	//> CSD-CN-031213

⌨️ 快捷键说明

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