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)); }
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)); } }
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 )); }
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); }
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)); } }
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)); }
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)); }
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)); } }
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; }
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)); } }
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; }