Пример #1
0
void DGRecvPetItemInfo(LPSDHP_REQUEST_PETITEM_INFO lpMsg,int aIndex)
{
	char szAccountID[MAX_IDSTRING+1]={0};
	memcpy(szAccountID, lpMsg->AccountID, MAX_IDSTRING);
	int lOfs1 = sizeof(SDHP_REQUEST_PETITEM_INFO);
	int lOfs2 = sizeof(SDHP_RECV_PETITEM_INFO);
	char cBUFFER[1000]={0};
	SDHP_RECV_PETITEM_INFO * pRecvPetInfoCount = (SDHP_RECV_PETITEM_INFO *)(cBUFFER);
	Request_PetItem_Info * pRequestPetInfo;
	Recv_PetItem_Info * pRecvPetInfo;

	for(int i = 0; i < lpMsg->nCount; i++)
	{
		pRequestPetInfo = (Request_PetItem_Info *)((LPBYTE)lpMsg + lOfs1);
		pRecvPetInfo = (Recv_PetItem_Info *)((LPBYTE)cBUFFER + lOfs2);

		pRecvPetInfo->nPos = pRequestPetInfo->nPos;
		pRecvPetInfo->nSerial = pRequestPetInfo->nSerial;

		GetPetInfo(pRecvPetInfo);

		pRecvPetInfoCount->nCount++;

		lOfs1+=sizeof(Request_PetItem_Info);
		lOfs2+=sizeof(Recv_PetItem_Info);
	}

	PHeadSetW((LPBYTE)pRecvPetInfoCount, 0x56, sizeof(SDHP_RECV_PETITEM_INFO) + pRecvPetInfoCount->nCount * sizeof(Recv_PetItem_Info));
	pRecvPetInfoCount->InvenType = lpMsg->InvenType;
	pRecvPetInfoCount->Number = lpMsg->Number;
	memcpy(pRecvPetInfoCount->AccountID, szAccountID, 10);

	DataSend(aIndex, (LPBYTE)cBUFFER, sizeof(SDHP_RECV_PETITEM_INFO) + pRecvPetInfoCount->nCount * sizeof(Recv_PetItem_Info));

}
Пример #2
0
void GDGetPlayerCustomQuests(cExtraServer * sManager, int aIndex, SDHP_GETPLAYEREXTRAINFO * lpMsg)
{
	char Name[11] = {0};
	char AccountID[11] = {0};
	memcpy(Name, lpMsg->Name, 10);

	if((SQLSyntexCheck(Name) == TRUE)	&&
	   (SpaceSyntexCheck(Name) == TRUE))
	{
		SDHP_GETPLAYERCUSTOMQUESTS_SAVE pResult = {0};

		PHeadSetW((LPBYTE)&pResult, SCFExDB_GSRecv_GetPlayerCustomQuestsInfo, sizeof(pResult));
		memcpy(pResult.Name, Name, 10);	
		pResult.aIndex = lpMsg->aIndex;

		char szTemp[256];
		BYTE btTemp[CUSTOMQUEST_BINARY_SIZE]={0xFF};

		wsprintf(szTemp, "SELECT SCFCustomQuest FROM %s.dbo.Character where Name = '%s'",sManager->m_DBName, Name);
		if ( sManager->db.GetAsBinary(szTemp, btTemp) == -1 )
			memset(btTemp, -1, sizeof(btTemp));
		memcpy(pResult.CustomQuest, btTemp, sizeof(pResult.CustomQuest));
		sManager->db.Close();

		sManager->DataSend(aIndex, (LPBYTE)&pResult, sizeof(pResult));
	}	
}
Пример #3
0
void DGGetWarehouseList(LPSDHP_GETWAREHOUSEDB lpMsg,int aIndex)
{
	char szAccountID[MAX_IDSTRING+1] = {0};
	memcpy(szAccountID,lpMsg->AccountID,MAX_IDSTRING);

	SDHP_GETWAREHOUSEDB_SAVE pResult;

	PHeadSetW((LPBYTE)&pResult, 0x08, sizeof(pResult));
	memcpy(pResult.AccountID, szAccountID, MAX_IDSTRING);
	pResult.aIndex = lpMsg->aIndex;

	if( GetWarehouseData(szAccountID,&pResult) == FALSE )
	{
		CreateWarehouseData(szAccountID);

		SDHP_GETWAREHOUSEDB_RESULT pMsg;

		PHeadSetB((LPBYTE)&pMsg, 0x10, sizeof(pMsg));
		pMsg.aIndex = lpMsg->aIndex;
		memcpy(pMsg.AccountID, szAccountID, 10);

		DataSend(aIndex, (LPBYTE)&pMsg, pMsg.h.size);
		return;
	}

	DataSend(aIndex,(LPBYTE)&pResult,sizeof( pResult ));
}
Пример #4
0
void JGPGetCharList(LPSDHP_GETCHARLIST lpMsg,int aIndex)
{
	char cBUFFER[10000]={0};

	LPSDHP_CHARLISTCOUNT pCount = (LPSDHP_CHARLISTCOUNT)(cBUFFER);
	LPSDHP_CHARLIST pCL = (LPSDHP_CHARLIST)(cBUFFER + sizeof(SDHP_CHARLISTCOUNT));

	char szAccountID[MAX_IDSTRING+1];
	memcpy(szAccountID,lpMsg->Id,MAX_IDSTRING);
	szAccountID[MAX_IDSTRING] = 0;

	PMSG_ANS_SUMMONER_CREATE pMsg;
	PHeadSetB((LPBYTE)&pMsg,0x72,sizeof(pMsg));

	memcpy(pMsg.szAccount,szAccountID,MAX_IDSTRING);
	pMsg.Number = lpMsg->Number;
	pMsg.Result = GetSummonerCreate(&pMsg,szAccountID);

	DataSend(aIndex,(LPBYTE)&pMsg,sizeof(pMsg));

	pCount->Number = lpMsg->Number;
	lstrcpy(pCount->AccountId,szAccountID);

	pCount->Count = GetCharList(szAccountID,pCount,pCL);

	PHeadSetW((LPBYTE)pCount, 0x01, sizeof(SDHP_CHARLISTCOUNT) + sizeof(SDHP_CHARLIST) * pCount->Count);

	DataSend(aIndex,(LPBYTE)&cBUFFER,sizeof(SDHP_CHARLISTCOUNT) + sizeof(SDHP_CHARLIST) * pCount->Count);
}
Пример #5
0
void JGGetCharacterInfo(LPSDHP_DBCHARINFOREQUEST lpMsg,int aIndex)
{
	SDHP_DBCHAR_INFORESULT pResult;

	PHeadSetW((LPBYTE)&pResult, 0x06, sizeof(pResult));

	char szAccountID[MAX_IDSTRING+1]={0};
	char szName[MAX_IDSTRING+1]={0};
	BuxConvert(lpMsg->Name, 10);

	memcpy(szAccountID, lpMsg->AccountID, MAX_IDSTRING);
	memcpy(szName, lpMsg->Name, MAX_IDSTRING);

	memcpy(pResult.AccountID, szAccountID, MAX_IDSTRING);
	memcpy(pResult.Name, szName, MAX_IDSTRING);

	pResult.Number = lpMsg->Number;

	pResult.result = GetCharacterInfo(szAccountID,szName,&pResult);

	if( pResult.result )
	{
		PartyMatchUpdateServerInfo(gSObj[aIndex].ServerCode, szName);
		
		UpdateGameIDC(szAccountID, szName);
	}

	DataSend(aIndex,(LPBYTE)&pResult,sizeof(pResult));

	if(pResult.result == TRUE)
	{
		SDHP_SKILLKEYDATA_SEND pSkillData = {0};

		pSkillData.h.c = PMHC_BYTE;
		pSkillData.h.size = sizeof( pSkillData );
		pSkillData.h.headcode = 0x60;

		memcpy(pSkillData.Name, szName, MAX_IDSTRING);
		pSkillData.aIndex = lpMsg->Number;

		GetOptionData(szName,&pSkillData);

		DataSend(aIndex,(LPBYTE)&pSkillData,pSkillData.h.size);

		MUBOT_SETTINGS_SEND pMuBot = {0};
		pMuBot.h.c = PMHC_WORD;
		pMuBot.h.sizeH = SET_NUMBERH(sizeof(pMuBot));
		pMuBot.h.sizeL = SET_NUMBERL(sizeof(pMuBot));
		pMuBot.h.headcode = 0x61;

		strcpy(pMuBot.szName,szName);
		pMuBot.aIndex = lpMsg->Number;
		GetMuBotData(szName,&pMuBot);
		DataSend(aIndex,(LPBYTE)&pMuBot,sizeof(pMuBot));
	}
}
Пример #6
0
void MuItemShopGetList(cExtraServer * sManager, int aIndex, SDHP_GETACCOUNTEXTRAINFO * aRecv)
{
	char AccountID[11] = {0};
	memcpy(AccountID, aRecv->AccountID, 10);

	SDHP_MUSHOPLISTSAVE pResult = {0};
	PHeadSetW((LPBYTE)&pResult, SCFExDB_GSRecv_CShopDataListRecv, sizeof(pResult));
	memcpy(pResult.AccountID, AccountID, 10);
	pResult.aIndex = aRecv->aIndex;
	
	char szTemp2[10000];
	BYTE btTemp2[MUSHOPLIST_SIZE]={0};
	BYTE btTemp3[MUSHOPLIST_MSG_SIZE]={0};

	wsprintf(szTemp2, "SELECT MuItemShopList FROM %s.dbo.MEMB_INFO where memb___id = '%s'",sManager->m_DBName2, AccountID);
	if ( sManager->db.GetAsBinary(szTemp2, btTemp2) == -1 )
		memset(btTemp2, 0, sizeof(btTemp2));
	
	memcpy(pResult.List, btTemp2, sizeof(pResult.List));
	sManager->db.Close();
	
	memset(btTemp2, 0, sizeof(btTemp2));

	wsprintf(szTemp2, "SELECT MuItemShopGiftList FROM %s.dbo.MEMB_INFO where memb___id = '%s'",sManager->m_DBName2, AccountID);
	if ( sManager->db.GetAsBinary(szTemp2, btTemp2) == -1 )
		memset(btTemp2, 0, sizeof(btTemp2));
	
	memcpy(pResult.GiftList, btTemp2, sizeof(pResult.GiftList));
	sManager->db.Close();
	

	wsprintf(szTemp2, "SELECT MuItemShopGiftMsg FROM %s.dbo.MEMB_INFO where memb___id = '%s'",sManager->m_DBName2, AccountID);
	if ( sManager->db.GetAsBinary(szTemp2, btTemp3) == -1 )
		memset(btTemp3, 0, sizeof(btTemp3));
	
	memcpy(pResult.GiftMsg, btTemp3, sizeof(pResult.GiftList));
	sManager->db.Close();


	sManager->db.ExecQuery("SELECT WCoin,WCoinP,GoblinCoin FROM %s.dbo.MEMB_INFO where memb___id= '%s'",
		sManager->m_DBName2,AccountID);
	if ( sManager->db.Fetch() != SQL_NO_DATA ) 
	{
		pResult.WCoin		= sManager->db.GetAsInteger("WCoin"); 
		pResult.WCoinP		= sManager->db.GetAsInteger("WCoinP"); 
		pResult.GoblinCoin	= sManager->db.GetAsInteger("GoblinCoin"); 
	}
	sManager->db.Close();


	sManager->DataSend(aIndex, (LPBYTE)&pResult, sizeof(pResult));
}
Пример #7
0
void OnlineBoard::RequestOnline(LPOBJ lpUser, ONLINE_REQ_DATA * Request)
{
	if (lpUser->Connected != PLAYER_PLAYING)
	{
		return;
	}
	// ----
	ONLINE_DATA pAnswer = { 0 };
	PHeadSetW((LPBYTE)&pAnswer, 0xFF, sizeof(ONLINE_DATA));
	for (int i = 0; i < 1000; i++)
	{
		pAnswer.m_data[i] = this->m_data[i];
	}
	DataSend(lpUser->m_Index, (LPBYTE)&pAnswer, sizeof(ONLINE_DATA));

}
Пример #8
0
void GDGetPlayerOfficialHelper(cExtraServer * sManager, int aIndex, SDHP_GETPLAYEREXTRAINFO * lpMsg)
{
	char Name[11] = {0};
	char AccountID[11] = {0};
	memcpy(Name, lpMsg->Name, 10);
	memcpy(AccountID, lpMsg->AccountID, 10);

	if((SQLSyntexCheck(Name) == TRUE)	&&
	   (SpaceSyntexCheck(Name) == TRUE))
	{
		SDHP_GETPLAYEROFFICIALHELPER_SAVE pResultOfficialHelper = {0};
		PHeadSetW((LPBYTE)&pResultOfficialHelper, SCFExDB_GSRecv_GetOfficialHelperData, sizeof(pResultOfficialHelper));
		char szTemp3[256];
		BYTE btTemp3[257]={0};

		memcpy(pResultOfficialHelper.AccountID, AccountID, 10);
		memcpy(pResultOfficialHelper.Name, Name, 10);	
		pResultOfficialHelper.aIndex = lpMsg->aIndex;

		BOOL bRet = sManager->db.ExecQuery("SELECT Name FROM %s.dbo.OfficialHelper WHERE Name = '%s'",sManager->m_DBName, Name);
		if ( sManager->db.Fetch() == SQL_NO_DATA || bRet == FALSE )
		{
			memset(btTemp3, 0, sizeof(btTemp3));
			btTemp3[1] = 1;
			btTemp3[2] = 0x11;
			btTemp3[23] = 0x51;
			btTemp3[24] = 0x15;
			btTemp3[26] = 0x20;
		}else
		{
			sManager->db.Close();
			wsprintf(szTemp3, "SELECT Data FROM %s.dbo.OfficialHelper where Name = '%s'",sManager->m_DBName, Name);
			if ( sManager->db.GetAsBinary(szTemp3, btTemp3) == -1 )
				memset(btTemp3, 0, sizeof(btTemp3));
		}
		memcpy(pResultOfficialHelper.Data, btTemp3, sizeof(pResultOfficialHelper.Data));
		sManager->db.Close();
		sManager->DataSend(aIndex, (LPBYTE)&pResultOfficialHelper, sizeof(pResultOfficialHelper));
	}
}
Пример #9
0
void ServerManager::MakeList()
{
	this->ListSize = 0;
	BYTE cBUFFER[10000]={0};
	PMSG_SERVERLISTPROTOCOL * pResult = (PMSG_SERVERLISTPROTOCOL *)(cBUFFER);
	PMSG_SERVERLIST * list = (PMSG_SERVERLIST *)(cBUFFER + sizeof(PMSG_SERVERLISTPROTOCOL));
	int lOfs=sizeof(PMSG_SERVERLISTPROTOCOL);
	int Counter=0;
	for(int i=0;i<=MAXSERVERINDEX;i++)
	{
		for(int j=0;j<=MAXSERVERSUBINDEX;j++)
		{
			if(this->Server[i][j].Show == 1)
			{
				//if(this->ShowAllServers == 1 || (this->ShowAllServers == 0 && CheckPortTCP(this->Server[i][j].Port,this->Server[i][j].IpAddress)))
				//{
				if(this->Server[i][j].State == 1)
				{
					list = (PMSG_SERVERLIST *)(cBUFFER + lOfs);
					WORD ServerNum = j+(i*MAXSERVERINDEX);
					list->Index = LOBYTE(ServerNum);
					list->SubIndex = HIBYTE(ServerNum);
					list->unk1 = this->Server[i][j].UserCount;
					list->unk2 = 0x00; //0xCC
					lOfs+=sizeof(PMSG_SERVERLIST);
					Counter++;
				}
				//}
			}
		}
	}
	pResult->subcode = 0x06;
	pResult->unk1 = 0;
	pResult->Count = Counter;
	this->ListSize = (sizeof(PMSG_SERVERLISTPROTOCOL) + sizeof(PMSG_SERVERLIST) * Counter);
	PHeadSetW((LPBYTE)pResult, 0xF4,this->ListSize );

	List = cBUFFER;
}
Пример #10
0
void GDGetPlayerS5Quests(cExtraServer * sManager, int aIndex, SDHP_GETPLAYEREXTRAINFO * lpMsg)
{
	char Name[11] = {0};
	char AccountID[11] = {0};
	memcpy(Name, lpMsg->Name, 10);
	memcpy(AccountID, lpMsg->AccountID, 10);

	if((SQLSyntexCheck(Name) == TRUE)	&&
	   (SpaceSyntexCheck(Name) == TRUE))
	{
		SDHP_GETPLAYERS5QUEST_SAVE pResultS5Q = {0};
		PHeadSetW((LPBYTE)&pResultS5Q, SCFExDB_GSRecv_GetPlayerS5QuestInfo, sizeof(pResultS5Q));

		char szTemp2[10000];
		BYTE btTemp2[(sizeof(S5QUEST)*MAX_QUEST_COUNT)]={0};

		memcpy(pResultS5Q.AccountID, AccountID, 10);
		memcpy(pResultS5Q.Name, Name, 10);	
		pResultS5Q.aIndex = lpMsg->aIndex;

		BOOL bRet = sManager->db.ExecQuery("SELECT Name FROM %s.dbo.SCFS5Quest WHERE Name = '%s' and AccountID = '%s'",sManager->m_DBName, Name, AccountID);
		if ( sManager->db.Fetch() == SQL_NO_DATA || bRet == FALSE )
		{
			memset(btTemp2, 0, sizeof(btTemp2));
		} else 
		{
			sManager->db.Close();
			wsprintf(szTemp2, "SELECT SCFS5Quest FROM %s.dbo.SCFS5Quest where Name = '%s' and AccountID = '%s'",sManager->m_DBName, Name, AccountID);
			if ( sManager->db.GetAsBinary(szTemp2, btTemp2) == -1 )
				memset(btTemp2, 0, sizeof(btTemp2));
		}
		memcpy(pResultS5Q.S5Quest, btTemp2, sizeof(pResultS5Q.S5Quest));
		sManager->db.Close();
		sManager->DataSend(aIndex, (LPBYTE)&pResultS5Q, sizeof(pResultS5Q));
	}
}
Пример #11
0
bool CShop::BuyShopItemAndDelete(int Pos, int aIndex,CShop *Shop)
{
	LPOBJ lpObj = &gObj[aIndex];
	if ( Shop->m_item[Pos].IsItem() == TRUE )
	{
		PMSG_BUYRESULT pResult;

		PHeadSetB((LPBYTE)&pResult, 0x32, sizeof(pResult));
		pResult.Result = -1;

		int iStoreTaxMoney = Shop->m_item[Pos].m_BuyMoney + (int)((__int64)Shop->m_item[Pos].m_BuyMoney * (__int64)g_CastleSiegeSync.GetTaxRateStore(lpObj->m_Index) / (__int64)100);

		if ( iStoreTaxMoney < 0 )
			iStoreTaxMoney  = 0;

		int iStoreTaxMoney2 = (int)((__int64)Shop->m_item[Pos].m_BuyMoney * (__int64)g_CastleSiegeSync.GetTaxRateStore(lpObj->m_Index) / (__int64)100);

		if ( iStoreTaxMoney2 < 0 )
			iStoreTaxMoney2  = 0;

		if ( lpObj->Money < iStoreTaxMoney )
			pResult.Result = -1;
		else
		{
			BOOL bNoItem = TRUE;

			if ( (Shop->m_item[Pos].m_Type >= ITEMGET(14,0) && Shop->m_item[Pos].m_Type <= ITEMGET(14,8)) ||
				(Shop->m_item[Pos].m_Type >= ITEMGET(14,35) && Shop->m_item[Pos].m_Type <= ITEMGET(14,40)))
			{
				int dur = (int)Shop->m_item[Pos].m_Durability;

				if ( dur == 0 )
					dur = 1;

				if ( ::gObjSearchItem(lpObj, Shop->m_item[Pos].m_Type,dur, Shop->m_item[Pos].m_Level) == TRUE )
				{
					bNoItem = FALSE;
					lpObj->Money -= iStoreTaxMoney;
					::g_CastleSiegeSync.AddTributeMoney(iStoreTaxMoney2);

					if ( lpObj->Money < 0 )
						lpObj->Money = 0;


					::GCMoneySend(lpObj->m_Index, lpObj->Money);
				}
			}

			if ( bNoItem != FALSE )
			{
				pResult.Result = gObjShopBuyInventoryInsertItem(lpObj->m_Index, Shop->m_item[Pos]);

				if ( pResult.Result != 0xFF )
				{
					ItemByteConvert((LPBYTE)&pResult.ItemInfo, Shop->m_item[Pos]);
					int lc64 = Shop->m_item[Pos].m_BuyMoney;
					lpObj->Money -= iStoreTaxMoney;
					::g_CastleSiegeSync.AddTributeMoney(iStoreTaxMoney2);

					if ( lpObj->Money < 0 )
						lpObj->Money = 0;

					GCMoneySend(lpObj->m_Index, lpObj->Money);
					int iTaxRate = g_CastleSiegeSync.GetTaxRateStore(lpObj->m_Index);

					for (int i = 0; i < Type.size(); i++)
					{
						int type = ITEMGET(Type[i],Index[i]); 
						if ( type == Shop->m_item[Pos].m_Type && Dur[i] == Shop->m_item[Pos].m_Durability && Level[i] == Shop->m_item[Pos].m_Level && 
							Opt1[i] == Shop->m_item[Pos].m_Option1 && Opt2[i] == Shop->m_item[Pos].m_Option2 && Opt3[i] == Shop->m_item[Pos].m_Option3 )
						{
							Type[i] = -1;
							Index[i] = -1;
							Dur[i] = -1;
							Level[i] = -1;
							Opt1[i] = -1;
							Opt2[i] = -1;
							Opt3[i] = -1;
							break;
						}
					}

					Shop->m_item[Pos].Clear();

					Shop->SendItemDataLen -= 8;
					Shop->ItemCount -- ;
					Shop->RefreshShopItems();
					DataSend(lpObj->m_Index, (LPBYTE)&pResult, pResult.h.size);


					LogAdd("[%s][%s] (%d) Shop buy [%d][%d][%d][%s] LEV:%d, DUR:%d, OP:[%d][%d][%d]",
						lpObj->AccountID, lpObj->Name, 14, lc64, iTaxRate, lc64+iStoreTaxMoney2, Shop->m_item[Pos].GetName(),
						Shop->m_item[Pos].m_Level, Shop->m_item[Pos].m_Durability,
						Shop->m_item[Pos].m_Option1, Shop->m_item[Pos].m_Option2,
						Shop->m_item[Pos].m_Option3);


					if ( Shop->ItemCount < 1 )
					{
						PMSG_TALKRESULT pResult;
						lpObj->TargetShopNumber = -1;
						lpObj->m_IfState.use = 0;
						lpObj->m_IfState.type = 0;
						lpObj->m_ShopTime = 0;
						pResult.h.c = 0xC3;
						pResult.h.headcode = 0x30;
						pResult.h.size = sizeof(pResult);
						pResult.result = -1;
						DataSend(lpObj->m_Index, (LPBYTE)&pResult, pResult.h.size);

						/*if ( Random(0,1) != 0 )
							ChatTargetSend(&gObj[DealerNumber], lMsg.Get(MSGGET(4, 119)), aIndex);//#info - ChatTargetSend - может что то интересненькое
						else
							ChatTargetSend(&gObj[DealerNumber], lMsg.Get(MSGGET(4, 120)), aIndex);*/

						return true;
					}
					else
					{
						lpObj->TargetShopNumber = 14;
						lpObj->m_IfState.use = 1;
						lpObj->m_IfState.type = 3;
						lpObj->m_ShopTime = 0;

						

						PMSG_SHOPITEMCOUNT pShopItemCount;
						BYTE SendByte[1024];
						int lOfs = 0;

						lOfs += sizeof(pShopItemCount );

						int size = lOfs + Shop->SendItemDataLen;
						PHeadSetW((LPBYTE)&pShopItemCount, 0x31, size);
						pShopItemCount.Type = 0;
						pShopItemCount.count = Shop->ItemCount;
						memcpy(SendByte, &pShopItemCount, sizeof(pShopItemCount));
						memcpy(&SendByte[lOfs], Shop->SendItemData, Shop->SendItemDataLen);

						DataSend(lpObj->m_Index, SendByte, size);
						GCAnsCsMapSvrTaxInfo(lpObj->m_Index,2,  ::g_CastleSiegeSync.GetTaxRateStore(lpObj->m_Index));

						return true;
					}

				}
			}
		}
	}

	return false;
}