Ejemplo n.º 1
0
void GameShop::RequestStorageItemUse(int aIndex, GAMESHOP_REQ_STORAGEITEMUSE * lpRequest)
{
#if( GAMESHOP_DEBUG == 1 )
	LogAddC(2, "[DEBUG] [%s] [%s] [%s]", __FUNCTION__, &gObj[aIndex].AccountID, &gObj[aIndex].Name);
#endif
	// ----
	LPOBJ lpUser = &gObj[aIndex];
	// ----
	if( !gObjIsConnected(aIndex) || lpUser->Connected != PLAYER_PLAYING )
	{
		return;
	}
	// ----
	GAMESHOP_ANS_STORAGE_ITEM_USE pAnswer;
	PHeadSubSetB((LPBYTE)&pAnswer, 0xD2, cStorageItemUse, sizeof(pAnswer));
	// ----
	GAMESHOP_ITEM_DATA * lpItem = this->GetStorageItem(aIndex, lpRequest->AuthIndex, lpRequest->AuthID);
	// ----
	if( !lpItem || !CheckInventoryEmptySpace(lpUser, lpItem->X, lpItem->Y) )
	{
		pAnswer.Result = true;
		DataSend(aIndex, (LPBYTE)&pAnswer, pAnswer.h.size);
		LogAddC(3, "[GameShop] %d", __LINE__);
		return;
	}
	// ----
	if( !DeleteItemInStorage(aIndex, lpRequest->AuthIndex, lpRequest->AuthID) )
	{
		LogAddC(3, "[GameShop] %d", __LINE__);
		return;
	}
	// ----
	if( g_BuffScript.GetBuffDataFromItemCode(lpItem->ItemID) //-> Buff
		&& !this->IsInventoryBuff(lpItem->ItemID) )	
	{
		g_CashItemPeriodSystem.SearchAndDeleteItemPeriodEffect(lpUser, lpItem->ItemID);	//fix
		g_CashItemPeriodSystem.GDReqPeriodItemInsert(lpUser, lpItem->ItemID, lpItem->Duration);
	}
	else if( lpItem->Duration > 0 )	//-> Period item
	{
		ItemSerialCreateSend(aIndex, 236, 0, 0, lpItem->ItemID, lpItem->Level, lpItem->Durability, 
			lpItem->Skill, lpItem->Luck, lpItem->Option, lpItem->Duration * 60, lpItem->Excellent, 0);
	}
	else	//-> Simply item
	{
		ItemSerialCreateSend(aIndex, 235, 0, 0, lpItem->ItemID, lpItem->Level, lpItem->Durability, 
			lpItem->Skill, lpItem->Luck, lpItem->Option, aIndex, lpItem->Excellent, 0);
	}
	// ----
	pAnswer.Result = false;
	DataSend(aIndex, (LPBYTE)&pAnswer, pAnswer.h.size);
	// ----
	this->GDSaveUserInfo(aIndex);
}
Ejemplo n.º 2
0
// ------------------------------------------------------------
void GenSystem::RankingGen(LPOBJ lpObj,int Type)
{
	SYSTEMTIME time;
	GetLocalTime(&time);
	// ----
	if ( lpObj->GenFamily == 0 )
	{
		BYTE Packet[5] = { 0xC1, 0x05, 0xF8, 0x0A, 0x06 }; // You have not Joined The Gens
		gSendProto.DataSend (lpObj->m_Index, Packet, Packet[1]);
		return;
	}
	else if ( lpObj->GenFamily != Type )
	{
		BYTE Packet[5] = { 0xC1, 0x05 ,0xF8 ,0x0A ,0x05 }; //You are a member of other Gens
		gSendProto.DataSend (lpObj->m_Index, Packet, Packet[1]);
		return;
	}
	else if (time.wDay > 10)
	{
		BYTE Packet[5] = { 0xC1, 0x05 ,0xF8 ,0x0A ,0x01 }; //Ranking rewards are given of first week of each month
		gSendProto.DataSend (lpObj->m_Index ,Packet, Packet[1]);
		return;
	}
	else if (lpObj->GenReward == 1)
	{
		BYTE Packet[5] = { 0xC1, 0x05 ,0xF8 ,0x0A ,0x04 }; //The reward has already been handed out
		gSendProto.DataSend (lpObj->m_Index, Packet, Packet[1]);
		return;
	}
	else if (lpObj->GenLevel > 8)
	{
		BYTE Packet[5] = { 0xC1, 0x05 ,0xF8 ,0x0A ,0x02 }; //You are not eligible for reward. Try harder later
		gSendProto.DataSend (lpObj->m_Index, Packet, Packet[1]);
		return;
	}
	else if (CheckInventoryEmptySpace(lpObj,1,1) == 0)
	{
		BYTE Packet[5] = { 0xC1, 0x05 ,0xF8 ,0x0A ,0x03 }; //You don't have enought space for the item
		gSendProto.DataSend (lpObj->m_Index, Packet, Packet[1]);
		return;
	}
	int ItemIndex=14*512+141;
	BYTE Socket[5];
	Socket[0] = 0xFF;
	Socket[1] = 0xFF;
	Socket[2] = 0xFF;
	Socket[3] = 0xFF;
	Socket[4] = 0xFF;
	// ----
	switch (lpObj->GenLevel)
	{
	case 1:
	case 2:
		ItemSerialCreateSend(lpObj->m_Index,235,0,0,ItemIndex,0,0,0,0,0,lpObj->m_Index,0,0, Socket); // Winning Jewelry Box
		break;
	case 3:
	case 4:
		ItemSerialCreateSend(lpObj->m_Index,235,0,0,ItemIndex+1,0,0,0,0,0,lpObj->m_Index,0,0, Socket); // Sophisticated Jewelry Box
		break;
	case 5:
	case 6:
		ItemSerialCreateSend(lpObj->m_Index,235,0,0,ItemIndex+2,0,0,0,0,0,lpObj->m_Index,0,0, Socket); // Metal Jewelry Box
		break;
	case 7:
	case 8:
		ItemSerialCreateSend(lpObj->m_Index,235,0,0,ItemIndex+3,0,0,0,0,0,lpObj->m_Index,0,0, Socket); // Old Jewelry Box
		break;
	}
	// ----
	lpObj->GenReward = 1;
	BYTE Packet[5] = { 0xC1, 0x05 ,0xF8 ,0x0A ,0x00 }; //Congratulations You has been rewarded
	gSendProto.DataSend (lpObj->m_Index, Packet, Packet[1]);
	return;
}
Ejemplo n.º 3
0
void GameShop::RequestStorageItemUse(int aIndex, GAMESHOP_REQ_STORAGEITEMUSE * lpRequest)
{
#if( GAMESHOP_DEBUG == 1 )
	LogAddC(2, "[DEBUG] [%s] [%s] [%s]", __FUNCTION__, &gObj[aIndex].AccountID, &gObj[aIndex].Name);
#endif
	// ----
	LPOBJ lpUser = &gObj[aIndex];
	// ----
	if( !gObjIsConnected(aIndex) || lpUser->Connected != PLAYER_PLAYING )
	{
		return;
	}

	// ----
	GAMESHOP_ITEM_DATA * lpItem = this->GetStorageItem(aIndex, lpRequest->AuthIndex, lpRequest->AuthID);

	if(lpItem->ItemID == g_Buyvip1ItemCode)
	{
		if(lpUser->Vip != 1 && lpUser->Vip != 0)
		{
			GCServerMsgStringSend("You already vip! You can't buy other vip type now.",lpUser->m_Index, 1);
			return;
		}
	}
	else if (lpItem->ItemID == g_Buyvip2ItemCode)
	{
		if(lpUser->Vip != 2 && lpUser->Vip != 0)
		{
			GCServerMsgStringSend("You already vip! You can't buy other vip type now.",lpUser->m_Index, 1);
			return;
		}
	}
	else if (lpItem->ItemID == g_Buyvip3ItemCode)
	{
		if(lpUser->Vip != 3 && lpUser->Vip != 0)
		{
			GCServerMsgStringSend("You already vip! You can't buy other vip type now.",lpUser->m_Index, 1);
			return;
		}
	}
	else if (lpItem->ItemID == g_Buyvip4ItemCode)
	{
		if(lpUser->Vip != 4 && lpUser->Vip != 0)
		{
			GCServerMsgStringSend("You already vip! You can't buy other vip type now.",lpUser->m_Index, 1);
			return;
		}
	}
	else if (lpItem->ItemID == g_Buyvip5ItemCode)
	{
		if(lpUser->Vip != 5 && lpUser->Vip != 0)
		{
			GCServerMsgStringSend("You already vip! You can't buy other vip type now.",lpUser->m_Index, 1);
			return;
		}
	}
	else if (lpItem->ItemID == g_Buyvip6ItemCode)
	{
		if(lpUser->Vip != 6 && lpUser->Vip != 0)
		{
			GCServerMsgStringSend("You already vip! You can't buy other vip type now.",lpUser->m_Index, 1);
			return;
		}
	}
	// ----
	GAMESHOP_ANS_STORAGE_ITEM_USE pAnswer;
	PHeadSubSetB((LPBYTE)&pAnswer, 0xD2, cStorageItemUse, sizeof(pAnswer));
	// ----

	if( !lpItem || !CheckInventoryEmptySpace(lpUser, lpItem->X, lpItem->Y) )
	{
		pAnswer.Result = true;
		DataSend(aIndex, (LPBYTE)&pAnswer, pAnswer.h.size);
		LogAddC(3, "[GameShop] %d", __LINE__);
		return;
	}
	// ----
	if( !DeleteItemInStorage(aIndex, lpRequest->AuthIndex, lpRequest->AuthID) )
	{
		LogAddC(3, "[GameShop] %d", __LINE__);
		return;
	}
	// ----
	//GOLD CHANNEL VIP SYSTEM
	/*char ms[200];
	wsprintf(ms, "%d / %d", lpItem->ItemID, g_Buyvip1ItemCode);
	GCServerMsgStringSend(ms, lpUser->m_Index, 1);*/
	if(lpItem->ItemID == g_Buyvip1ItemCode || lpItem->ItemID == g_Buyvip2ItemCode || lpItem->ItemID == g_Buyvip3ItemCode || lpItem->ItemID == g_Buyvip4ItemCode || lpItem->ItemID == g_Buyvip5ItemCode || lpItem->ItemID == g_Buyvip6ItemCode)
	{
		UPDATEGOLDCHANNELSTATUS pReq;

		if(lpItem->ItemID == g_Buyvip1ItemCode)
		{
			pReq.vipType = 1;
		}
		else if (lpItem->ItemID == g_Buyvip2ItemCode)
		{
			pReq.vipType = 2;
		}
		else if (lpItem->ItemID == g_Buyvip3ItemCode)
		{
			pReq.vipType = 3;
		}
		else if (lpItem->ItemID == g_Buyvip4ItemCode)
		{
			pReq.vipType = 4;
		}
		else if (lpItem->ItemID == g_Buyvip5ItemCode)
		{
			pReq.vipType = 5;
		}
		else if (lpItem->ItemID == g_Buyvip6ItemCode)
		{
			pReq.vipType = 6;
		}

		//Gold Channel Ticket
		ConMember.InsertUser(lpUser->AccountID);		
		pReq.h.set((LPBYTE)&pReq, 0xD7, 0x01, sizeof(UPDATEGOLDCHANNELSTATUS));
		memcpy(pReq.AccountID, lpUser->AccountID, 10);
		pReq.Duration = lpItem->Duration;
		cDBSMng.Send((char*)&pReq, sizeof(pReq));
	} 
	else if( g_BuffScript.GetBuffDataFromItemCode(lpItem->ItemID) //-> Buff
		&& !this->IsInventoryBuff(lpItem->ItemID) )	
	{
		g_CashItemPeriodSystem.SearchAndDeleteItemPeriodEffect(lpUser, lpItem->ItemID);	//fix
		g_CashItemPeriodSystem.GDReqPeriodItemInsert(lpUser, lpItem->ItemID, lpItem->Duration);
	}
	else if( lpItem->Duration > 0 )	//-> Period item
	{
		ItemSerialCreateSend(aIndex, 236, 0, 0, lpItem->ItemID, lpItem->Level, lpItem->Durability, 
			lpItem->Skill, lpItem->Luck, lpItem->Option, lpItem->Duration * 60, lpItem->Excellent, 0);
	}
	else if(lpItem->ItemID == ITEMGET(14,91))
	{
		GDSummonerStateUpdate(lpUser, lpUser->m_Index);
	}
	else if(lpItem->ItemID == ITEMGET(14, 169))
	{
		GDRageFighterStateUpdate(lpUser, lpUser->m_Index);
	}
	else
	{
		ItemSerialCreateSend(aIndex, 235, 0, 0, lpItem->ItemID, lpItem->Level, lpItem->Durability, 
			lpItem->Skill, lpItem->Luck, lpItem->Option, aIndex, lpItem->Excellent, 0);
	}
	// ----
	pAnswer.Result = false;
	DataSend(aIndex, (LPBYTE)&pAnswer, pAnswer.h.size);
	// ----
	this->GDSaveUserInfo(aIndex);
}