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

📄 network6.cpp

📁 国内著名网络游戏dragon的服务端完整源码 内附完整数据库结构
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			fclose(fp);
	
		result = FALSE;
	}

	return result;
}

t_EventItem EventItem[MAX_EVENT_ITEM];

int LoadEventRareItem()
{
	memset(EventItem,sizeof(EVENTITEM)*MAX_EVENT_ITEM,0);//努府绢

	HSTMT		hStmt = NULL;
	RETCODE		retCode;
	SDWORD		cbValue;

	SQLAllocStmt(hDBC, &hStmt);
	retCode = SQLExecDirect(hStmt, (UCHAR *)"Select * from EventRareItem order by IndexNo", SQL_NTS);
	if(retCode == SQL_SUCCESS || retCode == SQL_SUCCESS_WITH_INFO)
	{		
		int i = 0;
		retCode = SQLFetch(hStmt);
		while( retCode == SQL_SUCCESS || retCode == SQL_SUCCESS_WITH_INFO)
		{
			if(i >= MAX_EVENT_ITEM)
			{
				SQLFreeStmt(hStmt, SQL_DROP);
				return 0;
			}

			retCode = SQLGetData(hStmt, 1, SQL_C_LONG,	&EventItem[i].iIndex				, 0, &cbValue);
			retCode = SQLGetData(hStmt, 2, SQL_C_LONG,	&EventItem[i].iEvevntType			, 0, &cbValue);
			retCode = SQLGetData(hStmt, 3, SQL_C_LONG,	&EventItem[i].iItemNo				, 0, &cbValue);
			retCode = SQLGetData(hStmt, 4, SQL_C_LONG,	&EventItem[i].iRareKind1			, 0, &cbValue);
			retCode = SQLGetData(hStmt, 5, SQL_C_LONG,	&EventItem[i].iRareKind2			, 0, &cbValue);
			retCode = SQLGetData(hStmt, 6, SQL_C_LONG,	&EventItem[i].iRareKind3			, 0, &cbValue);
			retCode = SQLGetData(hStmt, 7, SQL_C_LONG,	&EventItem[i].iGrade				, 0, &cbValue);
			retCode = SQLGetData(hStmt, 8, SQL_C_LONG,	&EventItem[i].isDynamic				, 0, &cbValue);
			retCode = SQLGetData(hStmt, 9, SQL_C_LONG,	&EventItem[i].iHighRare				, 0, &cbValue);
			
			i++;

			retCode = SQLFetch(hStmt);
			if(retCode == SQL_SUCCESS || retCode == SQL_SUCCESS_WITH_INFO)
			{
			}
			else if( retCode == SQL_NO_DATA ) 
			{
				break;
			}
			else
			{
				SQLFreeStmt(hStmt, SQL_DROP);
				return 0;
			}
		}	
	}		
	SQLFreeStmt(hStmt, SQL_DROP);		// 0308 YGI
	return(1);
}

bool MakeRareAttr(	unsigned int &attr3 ,const int iNowGrade,
					const int iSokSung1,const int iSokSung2,const int iSokSung3,
					const int iHighLevel,const bool bIsDynamicRare)
{
	attr3  = 0;
	if( iNowGrade	>15			||	iNowGrade	<=	0	)	{ return false;}
	if( iSokSung1	>UCHAR_MAX	||	iSokSung1	<=	0	)	{ return false;}
	if( iSokSung2	>UCHAR_MAX	||	iSokSung2	<	0	)	{ return false;}
	if( iSokSung3	>UCHAR_MAX	||	iSokSung3	<	0	)	{ return false;}
	if(	iHighLevel	>7			||	iHighLevel	<	0	)	{ return false;}

	((LPRareMain)&attr3)->grade			= iNowGrade	;
	((LPRareMain)&attr3)->soksung1		= iSokSung1	;
	((LPRareMain)&attr3)->soksung2		= iSokSung2	;
	((LPRareMain)&attr3)->soksung3		= iSokSung3	;
	((LPRareMain)&attr3)->iHighLevel	= iHighLevel;
	((LPRareMain)&attr3)->IsDynamicRare = bIsDynamicRare;
	return true;
}



int MakeDefaultRareItem( ItemAttr *item, const int iItemNo, const int iSok1, const int iGrade, const int iTryMulti)
{
	int iHighLv = 0;
	bool bIsDynamic = false;

	*item = GenerateItem( iItemNo );
	if( !item->item_no ){ return -1;}		// 酒捞袍 锅龋啊 捞惑窍促.

	CItem *t = ItemUnit( *item );
	if( !t ) {	return -1;	}

	if( iSok1 >= 100 )
	{
		iHighLv = H_LV_HIGH_ITEM;
	}
	else
	{
		if( t->GetRbutton() == USE_ITEM )		// 促捞唱雇 酒捞袍...
		{
			bIsDynamic = true;
		}
	}

	int iSok2=0, iSok3=0;
	if(iSok1)
	{
		switch( iTryMulti )
		{
		case 0 :
		case 1 :
			{
			}break;
		case 2:
			{
				iSok2 = iSok1;
			}break;
		case 3 :
			{
				iSok3 = iSok2 = iSok1;
			}break;
		}

		if( 1 == iHighLv){	iSok3 = iSok2 =0;}

		return (MakeRareAttr( item->attr[IATTR_RARE_MAIN], iGrade, iSok1, iSok2, iSok3, iHighLv, bIsDynamic )?1:0);
	}
	return 1;
}


int SetEventItemEmpty( CHARLIST *ch,  const int iIndex, ItemAttr &GiveItem )		// 后 牢亥配府俊 酒捞袍阑 积己秦辑 笼绢 持绰促. //1215
{
	bool bIsGiveAble = true;//iIndex2 蔼捞 0 捞搁 例措 救邓聪促.
	
	for(int i = 0; MAX_EVENT_ITEM>i;i++)
	{
		if(iIndex == EventItem[i].iIndex )//牢郸胶啊 鞍栏搁
		{
			LPEVENTITEM pEI = &EventItem[i];
			if( !pEI->iItemNo){return 0;}//抛捞喉 磊眉俊 蔼捞 绝匙..
			GiveItem = GenerateItem( pEI->iItemNo );//酒捞袍阑 父甸绢 林绊
			if( !GiveItem.item_no){return 0;}//酒捞袍 逞滚啊 绝匙? ぱぱ;;
			
			if(pEI->iRareKind1)//1锅掳 加己捞 乐绰 巴捞扼搁////饭绢扼搁 饭绢甫 林绊
			{//饭绢甫 积己秦 夯促
			bIsGiveAble = MakeRareAttr(GiveItem.attr[IATTR_RARE_MAIN],
				pEI->iGrade,pEI->iRareKind1,pEI->iRareKind2,pEI->iRareKind3,
				pEI->iHighRare,pEI->isDynamic);
			}

			ItemAttr *item = SearchInv( ch );
			if( bIsGiveAble && item )
			{
				*item  = GiveItem;
				return 1;
			}
			else //后磊府啊 绝促搁
			{
				if(bIsGiveAble)
				{
					MyLog(0,"EventRareItemSetting Fault. ReCheck Plz" );
				}
				if(!item)
				{
					MyLog(0,"EventUser Inventory is Full [%s]",ch->Name );						
				}
				return 0;
			}
			break;
		}
	}
	MyLog(0,"EventRareitem Same IndexNo Not Found : Name:[%s] - index:[%d]", ch->Name, iIndex );
	return 0;
}

//<! BBD 040308	逞绢柯 牢郸胶俊 秦寸登绰 酒捞袍阑 父甸绢 霖促
ItemAttr MakeEventItem(int nIndex)
{
	ItemAttr item;
	memset(&item, 0L, sizeof(ItemAttr));
	
	if(!nIndex)		// 牢郸胶啊 0捞搁 郴侩绝绰 酒捞袍捞 府畔
	{
		return item;
	}

	if(nIndex != EventItem[nIndex-1].iIndex)	// EventRareItem 抛捞喉狼 牢郸胶啊 肋给 沥纺登绢乐促
	{
		// 咯扁辑 抛捞喉捞 肋给登菌促绰 肺弊甫 巢败林磊
		MyLog(0,"EventRareItem Table is WRONG!!! Check plz");						
		return item;		// 开矫 后 酒捞袍 府畔
	}


	LPEVENTITEM pEI = &EventItem[nIndex-1];
	if( !pEI->iItemNo)
	{
		return item;
	}//抛捞喉 磊眉俊 蔼捞 绝匙..
	item = GenerateItem( pEI->iItemNo );//酒捞袍阑 父甸绢 林绊
	if( !item.item_no)
	{
		return item;
	}//酒捞袍 逞滚啊 绝匙? ぱぱ;;
	
	if(pEI->iRareKind1)//1锅掳 加己捞 乐绰 巴捞扼搁////饭绢扼搁 饭绢甫 林绊
	{//饭绢甫 积己秦 夯促
		MakeRareAttr(item.attr[IATTR_RARE_MAIN],pEI->iGrade,pEI->iRareKind1,pEI->iRareKind2,pEI->iRareKind3,
			pEI->iHighRare,pEI->isDynamic);
	}

	// 酒捞袍捞 肯己登菌促
	return item;
}
//> BBD 040308	逞绢柯 牢郸胶俊 秦寸登绰 酒捞袍阑 父甸绢 霖促

int HaveAbilityResetList(char *szName,const bool bIsDayCheck)//020822 lsw
{
	HSTMT		hStmt = NULL;
	RETCODE		retCode;
	SDWORD		cbValue;

	SQLAllocStmt(hDBC, &hStmt);
	char	szQuerry[255] = {0,};
	if(bIsDayCheck)//孽府啊 朝楼 眉农 茄促
	{
		if(LocalMgr.IsAbleNation(KOREA))//021007 lsw
		{
			sprintf(szQuerry, "Select [name] from AbilityResetDate where [name] = '%s'  AND [date] < (getdate()-30)",  szName);//30老 捞傈俊辑 府胶飘啊 乐蠢衬
		}
		else	//茄惫篮 30老 唱赣瘤 惫啊绰 90老 付促 茄锅究
		{
			sprintf(szQuerry, "Select [name] from AbilityResetDate where [name] = '%s'  AND [date] < (getdate()-90)",  szName);//30老 捞傈俊辑 府胶飘啊 乐蠢衬
		}
	}
	else//孽府啊 捞抚父 乐绰瘤 夯促
	{
		sprintf(szQuerry, "Select [name] from AbilityResetDate where [name] = '%s'",  szName);//府胶飘啊 乐蠢衬
	}

	retCode = SQLExecDirect(hStmt, (UCHAR *)szQuerry, SQL_NTS);

	int bIsListed = 0;
	if(retCode == SQL_SUCCESS || retCode == SQL_SUCCESS_WITH_INFO)
	{		
		retCode = SQLFetch(hStmt);
		char szTempName[21] ={0,};
		if( retCode == SQL_SUCCESS || retCode == SQL_SUCCESS_WITH_INFO)
		{
			retCode = SQLGetData(hStmt, 1, SQL_C_CHAR, szTempName, 20, &cbValue);
			if(szTempName[0]){bIsListed = 1;}
		}
	}
	SQLFreeStmt(hStmt, SQL_DROP);
	return bIsListed;
}

int UpdateAbilityResetList(char *szName, const bool bIsUpdate)
{
	HSTMT		hStmt = NULL;
	RETCODE		retCode;

	SQLAllocStmt(hDBC, &hStmt);
	char	szQuerry[255] = {0,};
	if(bIsUpdate)//孽府啊 Update... 绢录绊
	{
		sprintf(szQuerry, "update AbilityResetDate set [date] = getdate() where name = '%s'",szName);
	}
	else//孽府啊 Insert... 绢录绊
	{
		sprintf(szQuerry, "insert into AbilityResetDate ([name]) values ('%s')",szName);
	}
	retCode = SQLExecDirect(hStmt, (UCHAR *)szQuerry, SQL_NTS);
	int bIsSuccess = 0;
	if(retCode == SQL_SUCCESS || retCode == SQL_SUCCESS_WITH_INFO)
	{		
		bIsSuccess = 1;
	}
	SQLFreeStmt(hStmt, SQL_DROP);
	return bIsSuccess;
}

void RecvCMD_COMFORM_RESET_ABILITY(const int cn, t_packet &p)//020821-2 lsw
{
	char szName[21] = {0,};
	memcpy(szName, p.u.ComformResetAbililty.szName,20);
	bool bIsAbility = 0;
	//孽府	//捞 捞抚栏肺 等 仇狼 扁废捞 乐绰啊. (1)
	if(HaveAbilityResetList(szName,false))//乐促搁
	{	//瘤陛何磐 茄崔傈 焊促 苞芭狼 朝楼狼 捞抚栏肺 八祸窍咯 (2)
		if(HaveAbilityResetList(szName,true))
		{//捞锅俊档 扁废 八祸捞 登搁 绢呼府萍 犁盒硅啊 啊瓷窍促.
			if(UpdateAbilityResetList(szName,true))//诀单捞飘啊 己傍 窍搁
			{//犁盒硅 菩哦 焊郴绰 敲贰弊 On
				bIsAbility = 1;
			}
			else
			{
				MyLog(0,"AbilityResetList Update Error");
			}
		}
		else
		{
			MyLog(0,"AbilityResetList Time Too Short");
		}
	}
	else//绝促搁
	{	//Insert 矫虐绊 
		//绢呼府萍 犁盒硅啊 啊瓷窍促.//犁盒硅 菩哦 焊郴绰 敲贰弊 On
		if(UpdateAbilityResetList(szName,false))
		{//犁盒硅 菩哦 焊郴绰 敲贰弊 On
			bIsAbility = 1;
		}
		else
		{
			MyLog(0,"!Warning! Insert AbilityResetList Failed");
		}
	}

	p.u.ComformResetAbililty.iIsAble = bIsAbility;//敲贰弊 历厘 窍绊 
	
	QueuePacket(connections,cn,&p,1);//甘辑滚肺 倒妨焊辰促
}

bool CheckRookieServerAble(const int iLv)
{
	const int iRookieLv = LocalMgr.GetRookieLv();

	if(	iRookieLv 
	&&  iRookieLv < iLv)
	{//汲沥茄 饭骇 焊促 臭扁 锭巩俊 甸绢 哎 荐 绝促.
		return false;
	}
	return true;
}

void RecvCMD_SELECTED_CHAR_RESULT_CLIENT_BOTH_DB_DEMON(t_connection c[], DWORD cn, t_packet &p)
{
	const int iMyLv = p.u.Hwoa.rang.SelectedCharResult.iLv;
	if(!CheckRookieServerAble(iMyLv))
	{//檬焊辑滚 肪 力茄 吧覆.
		p.u.Hwoa.rang.SelectedCharResult.iKey = 0;
	}
	else
	{
		p.u.Hwoa.rang.SelectedCharResult.iKey = 1;
	}

	::QueuePacket(c,cn,&p,1);
}

int HandleCommand2(t_connection c[], DWORD dwIndex, t_packet *packet, DWORD dwUserID, int cn)
{
	const int itype	=	packet->h.header.type;

	switch(itype)
	{
	case CMD_CONFORM_SADONIX:
		{
			RecvCMD_CONFORM_SADONIX(cn,*packet);
		}break;
	case CMD_SADONIX_COUNT_UPDATE://020505 lsw
		{
			 if(!RefreshNowSadonixCount(packet->u.SadonixCountUpdate.nSadTime))
			 {
				 MyLog(0,"----------------------");
				 MyLog(0,"SadonixRefreshFailed!!");
				 MyLog(0,"----------------------");
			 }
		}break;
	case CMD_COMFORM_RESET_ABILILTY://020815-2 lsw
		{
			RecvCMD_COMFORM_RESET_ABILITY(cn,*packet);
		}break;
	case	CMD_MERCHANT_BUY_ITEM_SEARCH_SERVER:
		{
			Auction.RecvCMD_MERCHANT_BUY_LIST_REQUEST(cn,*packet);
		}break;
	case	CMD_MERCHANT_ITEM_BUY_COMFORM://COMFORM 罐疽扁 锭巩俊 is end 眉农甫 秦 林档废
		{//甘栏肺 何磐 罐绰促
			Auction.RecvCMD_MERCHANT_ITEM_BUY_COMFORM(cn,*packet);
		}break;
	case	CMD_MERCHANT_ITEM_BUY_COMFORM_RESULT://涝陛捞 甸绢吭促
		{//捣阑 化疽栏聪 IsEnd甫 肋 眉农 窍磊
			Auction.RecvCMD_MERCHANT_ITEM_BUY_COMFORM_RESULT(cn,*packet);
		}break;
	case	CMD_MERCHANT_SELL_ITEM_REGISTER_COMFORM://殿废 啊瓷 肮荐甫 眉农茄促
		{
			Auction.RecvCMD_MERCHANT_SELL_ITEM_REGISTER_COMFORM(cn,*packet);//殿废 啊瓷 肮荐甫 眉农茄促
		}break;
	case	CMD_MERCHANT_SELL_ITEM_REGISTER_COMFORM_RESULT://殿废 啊瓷 肮荐甫 眉农茄促
		{
			Auction.RecvCMD_MERCHANT_SELL_ITEM_REGISTER_COMFORM_RESULT(cn,*packet);//殿废 啊瓷 肮荐甫 眉农茄促
		}break;
		//昏力 窍扁 
	case CMD_MERCHANT_SELL_ITEM_DELETE_COMFORM://叼厚肺 何磐 魄概秒家 啊瓷茄瘤 罐绰促
		{
			Auction.RecvCMD_MERCHANT_SELL_ITEM_DELETE_COMFORM(cn,*packet);
		}break;
	case CMD_MERCHANT_SELL_ITEM_DELETE_COMFORM_RESULT://叼厚肺 何磐 魄概秒家茄 搬苞甫 罐绰促
		{
			Auction.RecvCMD_MERCHANT_SELL_ITEM_DELETE_COMFORM_RESULT(cn,*packet);
		}break;
	case CMD_MERCHANT_RESULT_LIST_REQUEST:
		{
			Auction.RecvCMD_MERCHANT_RESULT_LIST_REQUEST(cn,*packet);
		}break;
	case CMD_MERCHANT_RESULT_TAKE_COMFORM:
		{
			Auction.RecvCMD_MERCHANT_RESULT_TAKE_COMFORM(cn,*packet);
		}break;
	case CMD_MERCHANT_RESULT_TAKE_COMFORM_RESULT:
		{
			Auction.RecvCMD_MERCHANT_RESULT_TAKE_COMFORM_RESULT(cn,*packet);
		}break;
	//<! BBD 040226 魄概 秒家肺 饭内靛 昏力 夸没
	case CMD_MERCHANT_RECORD_DEL_CANCLE:
		{
			Auction.RecvCMD_MERCHANT_RECORD_DEL_CANCLE(cn, *packet);
		}break;
	//>  BBD 040226 魄概 秒家肺 饭内靛 昏力 夸没
	//<! BBD 040226 芭贰 辆丰肺 饭内靛 昏力 夸没
	case CMD_MERCHANT_RECORD_DEL_COMPLETE:
		{
			Auction.RecvCMD_MERCHANT_RECORD_DEL_COMPLETE(cn, *packet);
		}break;
	//>  BBD 040226 芭贰 辆丰肺 饭内靛 昏力 夸没
	//<!  BBD 040303 赣玫飘 归诀抛捞喉狼 酒捞袍 府胶飘 夸没
	case CMD_MERCHANT_BACKUP_LIST_REQUEST:
		{
			Auction.RecvCMD_MERCHANT_BACKUP_LIST_REQUEST(cn,*packet);
		}break;
	//>  BBD 040303 赣玫飘 归诀抛捞喉狼 酒捞袍 府胶飘 夸没
	//<! BBD 040303	赣玫飘 氦诀抛捞喉狼 酒捞袍 瘤鞭 夸没
	case CMD_MERCHANT_BACKUP_TAKE_REQUEST:
		{
			Auction.RecvCMD_MERCHANT_BACKUP_TAKE_REQUEST(cn, *packet);
		}break;
	//> BBD 040303	赣玫飘 氦诀抛捞喉狼 酒捞袍 瘤鞭 夸没
	//<! BBD 040303	甘辑滚肺何磐 罐篮 赣玫飘 归诀抛捞喉狼 酒捞袍瘤鞭 己傍咯何 
	case CMD_MERCHANT_BACKUP_TAKE_RESPONSE:
		{
			Auction.RecvCMD_MERCHANT_BACKUP_TAKE_RESPONSE(cn, *packet);
		}break;
	//> BBD 040303 甘辑滚肺何磐 罐篮 赣玫飘 归诀抛捞喉狼 酒捞袍瘤鞭 己傍咯何
	//<! BBD 040308	甘栏肺何磐 捞亥飘酒捞袍 瘤鞭犬牢 夸没
	case CMD_EVENTRAREITEM_REQ:
		{
			PutEventItemByMapReq(cn, *packet);			
			break;
		}
	//> BBD 040308	甘栏肺何磐 捞亥飘酒捞袍 瘤鞭犬牢 夸没
	case CMD_MERCHANT_SELL_ITEM_INFO_REQUEST://甘栏肺 何磐 夸没阑 罐绰促
		{
			Auction.RecvCMD_MERCHANT_SELL_LIST_REQUEST(cn,*packet);
		}break;
	case CMD_MERCHANT_DIRECT_EXCHANGE_LIST_REQUSET:
		{
			Auction.RecvCMD_MERCHANT_DIRECT_EXCHANGE_LIST_REQUEST(cn,*packet);
		}break;
	case CMD_SELECTED_CHAR_RESULT_CLIENT_BOTH_DB_DEMON:
		{
			RecvCMD_SELECTED_CHAR_RESULT_CLIENT_BOTH_DB_DEMON(c, cn,*packet);
		}break;
	case CMD_MAIL_REQUEST_LIST://皋老 府胶飘甫 夸没 罐疽促
		{
			g_MailMgr.RecvReqMailList(cn,packet);
		}break;
	case CMD_MAIL_SEND:
		{
			g_MailMgr.Recv(cn,packet);
		}break;
	case CMD_MAIL_DELETE:
		{
			g_MailMgr.RecvDelete(cn,packet); 
		}break;
	case CMD_MAIL_REPAIR:
		{
			g_MailMgr.RecvRepair(cn,packet); 
		}break;
	case CMD_MAIL_REQ_BODY:
		{
			g_MailMgr.RecvRequestBody(cn,packet); 
		}break;
	case CMD_START_GAME_MAIL			:	
		{
			g_MailMgr.IsExistNotRead(cn,packet);
		}break;
	default:
		{
			return 0;
		}break;
	}
	return 1;
}

⌨️ 快捷键说明

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