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

📄 skill_lsw.cpp

📁 国内著名网络游戏dragon的服务端完整源码 内附完整数据库结构
💻 CPP
📖 第 1 页 / 共 5 页
字号:
						iIsCracked = 1;//MyLog(0,"诀臂 坷扁绰 吭绰单 钧蹲茄芭 酒捞袍父 哗狙绊 昏力..");	
					}
				}
				
				if(t->GetRbutton() ==DIVIDE_ITEM)
				{
					if(	DIVIDE_ITEM_UPGRDEABLE_MIN > i->attr[IATTR_DURATION]
					||	DIVIDE_ITEM_UPGRDEABLE_MAX < i->attr[IATTR_DURATION])
					{
						iIsCracked = 1;
					}
					max += i->attr[IATTR_DURATION];
				}
				else
				{
					GetItemDuration( *i, nowtemp, maxtemp);
					now += nowtemp;
					max += maxtemp;
				}
				resourcelimit[iSourceItemMuch]	= i->attr[IATTR_LIMIT]	;
				iSourceItemMuch++;
			}
			for(int addcount = 0;addcount <4;addcount++)
			{
				if(AddItem[addcount])//酒捞袍 逞滚啊 乐栏搁
				{
					if( AddItem[addcount]  == i->item_no )
					{
						if(!a[addcount])
						{
							a[addcount] = i->item_no;
							al[addcount]= i->attr[IATTR_LIMIT];
							HaveResource[addcount] = 1;
						}
					}
				}
				else// AddItem	//夸备 酒捞袍捞 绝扁 锭巩俊 府家胶 乐绰吧肺 眉农
				{
					HaveResource[addcount] = 1;
				}
			}
			::SendItemEventLog( i, cn, 0, SILT_RESOURCE_BY_SKILL, 1);	 //YGI acer
			::DeleteItem( i );//酒捞袍捞 乐菌扁 锭巩俊 瘤款促
		}
	}	

	if(iIsCracked){why |= 0x0001;}
	if(!iSourceItemMuch ){why |= 0x0002;}
	if(	!HaveResource[0]	||	!HaveResource[1]
	||	!HaveResource[2]	||	!HaveResource[3])
	{
		why |= 0x0004;
	}//夸备 窍绰 酒捞袍捞 绝促 (AddItem 捞 0 捞搁 磊悼栏肺 1眉农 窍聪鳖 || 甫 敬促

	
	if(!ItemGrade[TempSokSung.grade+1].iAble)
	{//弥措肺 诀弊饭捞靛 啊瓷茄 殿鞭牢啊?
		why |= 0x0008;//诀臂 阂啊
	}
	else
	{//殿鞭 诀弊饭捞靛啊 啊瓷
		//酒捞袍 逞滚客 俺荐甫 啊瘤绊
		const int iItemKind = t->GetItemKind();
		if (MAX_ITEM_MUTANT_KIND < iItemKind )
		{
			why |= 0x1000;//酒捞袍 墨牢靛 抛捞喉 坷滚 曼炼
		}
		
		int iKind = ItemMutantKind[iItemKind].upgrade_type ;
		if( !iKind ) 
		{
			iKind = 1;//快急 皋葛府 坷滚 曼炼 救窍霸 窍扁 困秦辑 1肺 霖促
			why |= 0x0100;
		}//诀弊饭捞靛 救登绰 酒捞袍 墨牢靛促
		
		const int PerpectMuch = ItemGrade[TempSokSung.grade+1].ResourceAmount[iKind-1];//1 老锭父 啊瓷 窍聪鳖 1阑 哗搁 0阑 牢郸胶肺 镜 荐 乐促

		if( PerpectMuch  <= 0) 
		{//夸备 肮荐啊 绝促..
			why |= 0x0010;
		}

		if( PerpectMuch )
		{//己傍伏阑 惶绰促
			iSuccessRate = float(iSourceItemMuch)/float(PerpectMuch);
			iSuccessRate	*=	100;

			if(iSuccessRate >= 100)
			{
				iSuccessRate = 100;
			}
			else
			{
				iSuccessRate /= 2;//肮荐啊 葛磊扼搁 1/5 肺 临咯 滚赴促
			}
		}
	}

	//菩哦 焊尘 霖厚
	t_packet packet;
	packet.h.header.type = CMD_SKILL_RARE_UPGRADE_RESULT;
	packet.h.header.size = sizeof( t_SkillRareUpgradeResult);
	ZeroMemory(&packet.u.SkillRareUpgradeResult,sizeof( t_SkillRareUpgradeResult));//皋葛府 檬扁拳 登菌澜

	const int iNowSuccess = (rand()%100);
	
	packet.u.SkillRareUpgradeResult.iSuccess = iNowSuccess;

	if( iSuccessRate > iNowSuccess)
	{	//己傍沁栏搁 甸绢哎 贸府		
		if (!why)//角菩 捞蜡啊 悸泼 登瘤 臼酒具 临 荐 乐促
		{
			if ( DIVIDE_ITEM == t->GetRbutton()) 
			{
				resultdur = (float)max/(float)iSourceItemMuch * (float)(1.100);
			}
			else
			{
				now = (float)now/(float)iSourceItemMuch * (float)(1.100);
				max = (float)max/(float)iSourceItemMuch * (float)(1.100);
				if(!now) {now = 1;}//捞凡 版快啊 乐衬??
				if(!max) {max = 1;}
				resultdur = MAKELONG( now, max);
			}

			if( ItemMgr.MakeRareAttr(iResultSok ,TempSokSung.grade+1,TempSokSung.soksung1,0,0,0,bIsDynamicRare))
			{
				SourceItem.attr[IATTR_RARE_MAIN]	=	iResultSok;
				SourceItem.attr[IATTR_DURATION]		=	resultdur;	
			}
			else
			{
				why |= 0x2000;//饭绢 炼扒捞 粱 捞惑茄啊焊促
			}

			packet.u.SkillRareUpgradeResult.iSuccess			=	100			;
			packet.u.SkillRareUpgradeResult.SourceItem			=	SourceItem	;
				
			if(!resultdur )
			{//郴备档啊 绝绢??
				why |= 0x0040;
			}

			int a,b,c;
			if(!why)// 茄锅歹 巩力 绝捞 吭促搁 
			{
				if( ::SearchInv( ch->inv, a, b, c ))//某腐磐 牢亥配府俊 酒捞袍阑 持绢霖促
				{
					POS pos;
					::SetItemPos( INV, a, b, c, &pos );
					ch->inv[a][b][c] = SourceItem;
					::SendServerEachItem( &pos , &SourceItem , ch->GetServerID());
					
					t_packet bbspacket;
					
					//傈眉 傍瘤
					bbspacket.h.header.type = CMD_RARE_UPGRADE_BBS_MAP_TO_MAP;

					::memcpy( bbspacket.u.RareUpgradeBBSMapToMap.name, ch->Name,20);
					bbspacket.h.header.size = sizeof(t_RareUpgradeBBSMapToMap );
					bbspacket.u.RareUpgradeBBSMapToMap.Item = SourceItem ;
					::SendNationPacket( &bbspacket, ch->name_status.nation );
					bbspacket.h.header.type = CMD_RARE_UPGRADE_BBS;
					g_pUserManager->SendPacket(&bbspacket); // CSD-CN-031213
				}
				else
				{
					why |= 0x0080;//磊府啊 绝窜促.. 富捞 登唱..
				}
			}
		}
	}
	else
	{
		why |=0x0020;//己傍伏 锭巩俊 角菩
	}

	Send_RareItemMakeLog( cn,SourceItem.item_no,0, 
		TempSokSung.grade+1,TempSokSung.soksung1,TempSokSung.soksung2,TempSokSung.soksung3,a[0],al[0],a[1],al[1],SourceItem.attr[IATTR_LIMIT],now,max,why,2002,
		resourcelimit[0],resourcelimit[1],resourcelimit[2],
		resourcelimit[3],resourcelimit[4],resourcelimit[5]);//搬苞 扁废

	::QueuePacket(connections, cn, &packet, 1);
	return;
}

void RecvCMD_SKILL_MASTER_MULTI_RARE_MAKE(const int cn, t_packet *p)
{
	t_SkillMasterMultiRareMake *pSMMRM = &p->u.Hwoa.rang.SMMultiRareMake;

	LPCHARLIST ch = ::CheckServerId(cn);
	if(!ch){return;}

	const int iSkillNo = pSMMRM->iSkillNo;
	const int iNowSkillNo = GMMgr.IsSkillMaster(ch);
	if(!iNowSkillNo){return;}//扁己 酒聪促//罐疽绰单 促福芭唱 窍促

	if (!ch->IsPayedUser())
	{
		return;
	}
	
	//酒捞袍 眉农
	ITEMATTR RecvSrcItem[2]; //罐篮芭
	RecvSrcItem[0]=	pSMMRM->MRS.SrcData[0].attr;
	RecvSrcItem[1]=	pSMMRM->MRS.SrcData[1].attr;

	ITEMATTR NowSrcItem[2];
	NowSrcItem[0] =	*GetItemByPOS(ch,pSMMRM->MRS.SrcData[0].pos);
	NowSrcItem[1] =	*GetItemByPOS(ch,pSMMRM->MRS.SrcData[1].pos);

	if(memcmp(RecvSrcItem,NowSrcItem,sizeof(ItemAttr))){return;}//辑滚客 努扼捞攫飘啊 促辅聪促.
	if(RecvSrcItem[0].item_no != RecvSrcItem[0].item_no){return;}//酒捞袍 锅龋啊 促福搁 钦磨 荐 绝嚼聪促.
	const int iResultItemNo = pSMMRM->MRS.SrcData[0].attr.item_no;
	CItem *	t = ItemUnit( iResultItemNo);
	if( !t ){return;}

	if(DIVIDE_ITEM == t->GetRbutton())
	{
		const int iPriCt = NowSrcItem[0].attr[IATTR_MUCH];
		const int iSecCt = NowSrcItem[1].attr[IATTR_MUCH];
		if(	DIVIDE_ITEM_UPGRDEABLE_MIN > iPriCt
		||	DIVIDE_ITEM_UPGRDEABLE_MAX < iPriCt
		||	DIVIDE_ITEM_UPGRDEABLE_MIN > iSecCt
		||	DIVIDE_ITEM_UPGRDEABLE_MAX < iSecCt )
		{
			::OutMessage(cn,2,266);//021120 lsw
			return;
		}
	}

	RareMain RecvRare1 = *(RareMain*)&NowSrcItem[0].attr[IATTR_RARE_MAIN];
	RareMain RecvRare2 = *(RareMain*)&NowSrcItem[1].attr[IATTR_RARE_MAIN];
	
	if(RecvRare1.soksung2 ||RecvRare1.soksung3
	|| RecvRare2.soksung2 ||RecvRare2.soksung3)
	{
		::OutMessage(cn,2,511);//021120 lsw
		return;
	}
	if(RecvRare1.soksung1 == RecvRare2.soksung1)
	{
		::OutMessage(cn,2,890);//021120 lsw
		return;
	}

	const int iGrade = (RecvRare1.grade+RecvRare2.grade)/2;//乞闭

	if( 5 < iGrade )
	{
		::OutMessage(cn,2,881);//021212 lsw
		return;
	}

	DWORD	resultdur =0;
	if( DIVIDE_ITEM == t->GetRbutton()) 
	{
		resultdur = (RecvSrcItem[0].attr[IATTR_MUCH]+RecvSrcItem[1].attr[IATTR_MUCH])*(float)(1.100)/2;
	}
	else
	{
		WORD	max1= 0, now1= 0;
		WORD	max2= 0, now2= 0;
		::GetItemDuration( RecvSrcItem[0], now1,max1);
		::GetItemDuration( RecvSrcItem[1], now2,max2);

		WORD now = (float)(now1+now2)*(float)(1.100)/2;
		WORD max = (float)(max1+max2)*(float)(1.100)/2;

		if(!now) {now = 1;}//捞凡 版快啊 乐衬??
		if(!max) {max = 1;}
		resultdur = MAKELONG( now, max);
	}
	ItemAttr ResultItem = ItemMgr.GenerateItem(iResultItemNo);//瘤鞭瞪 酒捞袍 悸泼
	ResultItem.attr[IATTR_MUCH] = resultdur;//郴备档 悸泼
	ItemMgr.MakeRareAttr(ResultItem.attr[IATTR_RARE_MAIN],iGrade,RecvRare1.soksung1,RecvRare2.soksung1,0,0,0);//钢萍 饭绢 父甸菌促

	bool iIsHaveResource = true;
	const ITEMMULTIRARE IMR = RareEM.GetIMR(iGrade);
{//犁丰狼 肮荐 眉农
	for(int xx= 0;MAX_IMR_FIELD_CT>xx;xx++)
	{//犁丰 眉农 茄促
		int iNationAddCt = 0;
		switch(ch->name_status.nation)
		{
		case NW_BY:{if(xx ==0){iNationAddCt = IMR.iAddCt;}}break;
		case NW_ZY:{if(xx ==1){iNationAddCt = IMR.iAddCt;}}break;
		case NW_YL:{if(xx ==2){iNationAddCt = IMR.iAddCt;}}break;
		}
		const int iNeedItemNo = IMR.aItemNo[xx];
		const int iNeedItemCt = IMR.aItemCt[xx] + iNationAddCt;
		if(iNeedItemNo && iNeedItemCt)
		{
			CItem *t = ::ItemUnit( iNeedItemNo );
			if(!t){continue;}
			const int iNowCt = ::CheckInventory(ch, iNeedItemNo, iNeedItemCt);//郴啊 盔茄 蔼俊辑 泅犁 搬苞甫 林聪鳖 -蔼捞 唱棵 荐 乐促
			if(0 > iNowCt)//肮荐 葛磊扼匙 ぱぱ;.
			{
				iIsHaveResource = false;
			}
		}
	}
}
	if(!iIsHaveResource)
	{
		::MyLog(1,"RecvCMD_SKILL_MASTER_MULTI_RARE_MAKE ,iIsHaveResource Check Error");
		return;
	}//犁丰 葛磊扼 摹况扼
{//犁丰甫 昏力

	POS &pos1 = pSMMRM->MRS.SrcData[0].pos;
	ItemAttr *pItem1 = GetItemByPOS(ch,pos1);
	
	::SendItemEventLog( pItem1, ch->GetServerID(), 0, SILT_MAKE_MULTI_RARE_RESOURCE, 1 ); //021209 lsw
	::DeleteItem(pItem1);
	::SendServerEachItem( &pos1, pItem1,ch->GetServerID());//焊郴扁

	POS &pos2 = pSMMRM->MRS.SrcData[1].pos;
	ItemAttr *pItem2 = GetItemByPOS(ch,pos2);
	
	::SendItemEventLog( pItem2, ch->GetServerID(), 0, SILT_MAKE_MULTI_RARE_RESOURCE, 1 ); //021209 lsw
	::DeleteItem(pItem2);
	::SendServerEachItem( &pos2, pItem2,ch->GetServerID());//焊郴扁

	for(int xx= 0;MAX_IMR_FIELD_CT>xx;xx++)//犁丰 猾促
	{	
		int iNationAddCt = 0;
		switch(ch->name_status.nation)
		{
		case NW_BY:{if(xx ==0){iNationAddCt = IMR.iAddCt;}}break;
		case NW_ZY:{if(xx ==1){iNationAddCt = IMR.iAddCt;}}break;
		case NW_YL:{if(xx ==2){iNationAddCt = IMR.iAddCt;}}break;
		}
		const int iNeedItemNo = IMR.aItemNo[xx];
		const int iNeedItemCt = IMR.aItemCt[xx] + iNationAddCt;
		if(iNeedItemNo && iNeedItemCt)
		{
			CItem *t = ItemUnit( iNeedItemNo );
			if(!t){continue;}
			const int iNowCt = ::CheckInventory(ch,iNeedItemNo,iNeedItemCt);//郴啊 盔茄 蔼俊辑 泅犁 搬苞甫 林聪鳖 -蔼捞 唱棵 荐 乐促
			if(0 <=iNowCt)//肮荐啊 嘎栏搁 瘤况扼
			{
				::SendDeleteItemQuantity( ch, iNeedItemNo, iNeedItemCt );		// 漂沥 酒捞袍阑 漂沥 肮荐父怒 昏力 茄促.
			}
		}
	}
}
	int a=0,b=0,c=0;
	if(::SearchInv(ch->inv,a,b,c))
	{
		const int iNow = rand()%100;
		if(45 > iNow)
		{
			POS pos;
			SetItemPos(INV,a,b,c,&pos);//pos悸泼 
			ITEMATTR *pItem = ::GetItemByPOS(ch,pos);//酒捞袍 林家 罐绊
			(*pItem) = ResultItem;
			::SendItemEventLog( pItem, ch->GetServerID(), 0, SILT_MAKE_MULTI_RARE_RESULT, 1 ); //021209 lsw
			::SendServerEachItem( &pos, pItem,ch->GetServerID());//焊郴扁
			::OutMessage(cn,2,901);//021120 lsw
		}
		else
		{//皋技瘤 焊辰促
			::OutMessage(cn,2,900);//021120 lsw
		}
	}
	else
	{//捞访 版快绰 绝绢夸
		
	}
	
/*
	Send_RareItemMakeLog( cn,SourceItem.item_no,0, 
		TempSokSung.grade+1,TempSokSung.soksung1,TempSokSung.soksung2,TempSokSung.soksung3,a[0],al[0],a[1],al[1],SourceItem.attr[IATTR_LIMIT],now,max,why,2002,
		resourcelimit[0],resourcelimit[1],resourcelimit[2],
		resourcelimit[3],resourcelimit[4],resourcelimit[5]);//搬苞 扁废
*/
//	::QueuePacket(connections, cn, &packet, 1);
	
	return;
}

//<! BBD 040308		单阁栏肺何磐狼 捞亥飘酒捞袍 瘤鞭 览翠矫 妮登绰 窃荐
void RecvCMD_EVENTRAREITEM_RES(const int cn, t_packet &p)
{
	const int MAX_EVENT_USER_FILED = 10;
	int nUserCn = p.u.Event_Item_List.nCn;
	
	CHARLIST *ch = CheckServerId(nUserCn);
	if(!ch)	// 某腐磐啊 蜡瓤茄啊?
	{
		// 酒捞袍捞 朝扼艾促. 肺弊 巢扁磊
		for(int i = 0; i < MAX_EVENT_USER_FILED; i++)
		{
			if(p.u.Event_Item_List.nIndex[i])
			{
				//i+1牢 牢郸胶狼 酒捞袍捞 朝酒艾促
				g_pLogManager->SaveEventItemLostLog(EILT_INVALID_CONNECTION, p.u.Event_Item_List.szChrName, i+1);
			}
		}
		return;
	}

	if(strcmp(p.u.Event_Item_List.szChrName, ch->Name))//捞抚捞 撇妨	
	{
		// 酒捞袍捞 朝扼艾促. 肺弊 巢扁磊.
		for(int i = 0; i < MAX_EVENT_USER_FILED; i++)
		{
			if(p.u.Event_Item_List.nIndex[i])
			{
				//i+1牢 牢郸胶狼 酒捞袍捞 朝酒艾促

⌨️ 快捷键说明

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