void ServerJoin(RPCParameters *rpcParams) { if(!iGameInited) return; PCHAR Data = reinterpret_cast<PCHAR>(rpcParams->input); int iBitLength = rpcParams->numberOfBitsOfData; CHAR szPlayerName[256]; PLAYERID playerId; BYTE byteNameLen=0; RakNet::BitStream bsData((unsigned char *)Data,(iBitLength/8)+1,false); bsData.Read(playerId); int iUnk = 0; bsData.Read(iUnk); BYTE bIsNPC = 0; bsData.Read(bIsNPC); bsData.Read(byteNameLen); if(byteNameLen > 20) return; bsData.Read(szPlayerName,byteNameLen); szPlayerName[byteNameLen] = '\0'; if(playerId < 0 || playerId >= MAX_PLAYERS) return; playerInfo[playerId].iIsConnected = 1; playerInfo[playerId].byteIsNPC = bIsNPC; strcpy((char *)playerInfo[playerId].szPlayerName, szPlayerName); //Log("***[JOIN] (%d) %s", playerId, szPlayerName); }
void ScrInitMenu(RPCParameters *rpcParams) { if(!iGameInited) return; PCHAR Data = reinterpret_cast<PCHAR>(rpcParams->input); int iBitLength = rpcParams->numberOfBitsOfData; RakNet::BitStream bsData((unsigned char *)Data,(iBitLength/8)+1,false); memset(>AMenu, 0, sizeof(struct stGTAMenu)); BYTE byteMenuID; BOOL bColumns; // 0 = 1, 1 = 2 CHAR cText[MAX_MENU_LINE]; float fX; float fY; float fCol1; float fCol2 = 0.0; MENU_INT MenuInteraction; bsData.Read(byteMenuID); bsData.Read(bColumns); bsData.Read(cText, MAX_MENU_LINE); bsData.Read(fX); bsData.Read(fY); bsData.Read(fCol1); if (bColumns) bsData.Read(fCol2); bsData.Read(MenuInteraction.bMenu); for (BYTE i = 0; i < MAX_MENU_ITEMS; i++) bsData.Read(MenuInteraction.bRow[i]); Log("[MENU] %s", cText); strcpy(GTAMenu.szTitle, cText); BYTE byteColCount; bsData.Read(cText, MAX_MENU_LINE); Log("[MENU] %s", cText); strcpy(GTAMenu.szSeparator, cText); bsData.Read(byteColCount); GTAMenu.byteColCount = byteColCount; for (BYTE i = 0; i < byteColCount; i++) { bsData.Read(cText, MAX_MENU_LINE); Log("[MENU:%d] %s", i, cText); strcpy(GTAMenu.szColumnContent[i], cText); } if (bColumns) { bsData.Read(cText, MAX_MENU_LINE); //Log("4: %s", cText); bsData.Read(byteColCount); for (BYTE i = 0; i < byteColCount; i++) { bsData.Read(cText, MAX_MENU_LINE); //Log("5: %d %s", i, cText); } } }
void UpdateScoresPingsIPs(RPCParameters *rpcParams) { if(!iGameInited) return; PCHAR Data = reinterpret_cast<PCHAR>(rpcParams->input); int iBitLength = rpcParams->numberOfBitsOfData; RakNet::BitStream bsData((unsigned char *)Data,(iBitLength/8)+1,false); PLAYERID playerId; int iPlayerScore; DWORD dwPlayerPing; for(PLAYERID i=0; i<(iBitLength/8)/9; i++) { bsData.Read(playerId); bsData.Read(iPlayerScore); bsData.Read(dwPlayerPing); if(playerId < 0 || playerId >= MAX_PLAYERS) continue; playerInfo[playerId].iScore = iPlayerScore; playerInfo[playerId].dwPing = dwPlayerPing; } }
void ScrCreate3DTextLabel(RPCParameters *rpcParams) { PCHAR Data = reinterpret_cast<PCHAR>(rpcParams->input); int iBitLength = rpcParams->numberOfBitsOfData; RakNet::BitStream bsData((unsigned char *)Data,(iBitLength/8)+1,false); WORD ID; CHAR Text[256]; DWORD dwColor; FLOAT vecPos[3]; FLOAT DrawDistance; BYTE UseLOS; WORD PlayerID; WORD VehicleID; bsData.Read((WORD)ID); bsData.Read((DWORD)dwColor); bsData.Read((FLOAT)vecPos[0]); bsData.Read((FLOAT)vecPos[1]); bsData.Read((FLOAT)vecPos[2]); bsData.Read((FLOAT)DrawDistance); bsData.Read((BYTE)UseLOS); bsData.Read((WORD)PlayerID); bsData.Read((WORD)VehicleID); stringCompressor->DecodeString(Text, 256, &bsData); if(settings.uiTextLabelsLogging != 0) { char szCreate3DTextLabelAlert[256]; sprintf_s(szCreate3DTextLabelAlert, sizeof(szCreate3DTextLabelAlert), "[TEXTLABEL] %d - %s (%X, %.3f, %.3f, %.3f, %.2f, %i, %d, %d)", ID, Text, dwColor, vecPos[0], vecPos[1], vecPos[2], DrawDistance, UseLOS, PlayerID, VehicleID); Log(szCreate3DTextLabelAlert); } }
void ScrShowTextDraw(RPCParameters *rpcParams) { PCHAR Data = reinterpret_cast<PCHAR>(rpcParams->input); int iBitLength = rpcParams->numberOfBitsOfData; RakNet::BitStream bsData((unsigned char *)Data,(iBitLength/8)+1,false); WORD wTextID; TEXT_DRAW_TRANSMIT TextDrawTransmit; CHAR cText[1024]; unsigned short cTextLen = 0; bsData.Read(wTextID); bsData.Read((PCHAR)&TextDrawTransmit, sizeof(TEXT_DRAW_TRANSMIT)); bsData.Read(cTextLen); bsData.Read(cText, cTextLen); cText[cTextLen] = '\0'; if(settings.uiTextDrawsLogging != 0) SaveTextDrawData(wTextID, &TextDrawTransmit, cText); if(TextDrawTransmit.byteSelectable) Log("[SELECTABLE-TEXTDRAW] ID: %d, Text: %s.", wTextID, cText); }
void ScrCreateObject(RPCParameters *rpcParams) { PCHAR Data = reinterpret_cast<PCHAR>(rpcParams->input); int iBitLength = rpcParams->numberOfBitsOfData; RakNet::BitStream bsData((unsigned char *)Data,(iBitLength/8)+1,false); unsigned short ObjectID; bsData.Read(ObjectID); unsigned long ModelID; bsData.Read(ModelID); float vecPos[3]; bsData.Read(vecPos[0]); bsData.Read(vecPos[1]); bsData.Read(vecPos[2]); float vecRot[3]; bsData.Read(vecRot[0]); bsData.Read(vecRot[1]); bsData.Read(vecRot[2]); float fDrawDistance; bsData.Read(fDrawDistance); if(settings.uiObjectsLogging != 0) { char szCreateObjectAlert[256]; sprintf_s(szCreateObjectAlert, sizeof(szCreateObjectAlert), "[OBJECT] %d, %d, %.3f, %.3f, %.3f, %.3f, %.3f, %.3f, %.2f", ObjectID, ModelID, vecPos[0], vecPos[1], vecPos[2], vecRot[0], vecRot[1], vecRot[2], fDrawDistance); Log(szCreateObjectAlert); } }
void RPC_ClientRequestsClass(RPCParameters *rpcParams) { PCHAR Data = reinterpret_cast<PCHAR>(rpcParams->input); int iBitLength = rpcParams->numberOfBitsOfData; RakNet::BitStream bsData((unsigned char *)Data,(iBitLength/8)+1,false); int iClass; bsData.Read(iClass); PLAYER_SPAWN_INFO psInfo; memset(&psInfo, 0, sizeof(psInfo)); psInfo.byteTeam = 0xFF; psInfo.iSkin = 33; psInfo.byteUnknown = 0; psInfo.vecPos[0] = 389.8672f; psInfo.vecPos[1] = 2543.0046f; psInfo.vecPos[2] = 16.5391f; psInfo.fRotation = 90.0f; psInfo.iSpawnWeapons[0] = 38; psInfo.iSpawnWeaponsAmmo[0] = 69; RakNet::BitStream bsReply; bsReply.Write((BYTE)1); bsReply.Write((char *)&psInfo, sizeof(psInfo)); pRakServer->RPC(&RPC_RequestClass, &bsReply, HIGH_PRIORITY, RELIABLE, 0, rpcParams->sender, FALSE, FALSE, UNASSIGNED_NETWORK_ID, NULL); }
void RPC_ClientExitVehicle(RPCParameters *rpcParams) { PCHAR Data = reinterpret_cast<PCHAR>(rpcParams->input); int iBitLength = rpcParams->numberOfBitsOfData; PlayerID sender = rpcParams->sender; RakNet::BitStream bsData((unsigned char *)Data,(iBitLength/8)+1,false); PLAYERID playerID = pRakServer->GetIndexFromPlayerID(sender); if(!playerPool[playerID].iIsConnected) return; VEHICLEID VehicleID; bsData.Read(VehicleID); if(VehicleID == (VEHICLEID)-1) { SendClientMessage(playerID, -1, "You are sending an invalid vehicle ID. Unlike kye, we wont kick you :)"); return; } for(int i = 0; i < iScriptsRunning; i++) { if(script.scriptVM[i] != NULL && script.szScriptName[i][0] != 0x00) ScriptEvent_OnPlayerLeaveVehicle(script.scriptVM[i], playerID, VehicleID); } playerInfo[playerID].incarData.VehicleID = -1; RakNet::BitStream bsVehicle; bsVehicle.Write(playerID); bsVehicle.Write(VehicleID); pRakServer->RPC(&RPC_ExitVehicle, &bsVehicle, HIGH_PRIORITY, RELIABLE_ORDERED, 0, sender, TRUE, FALSE, UNASSIGNED_NETWORK_ID, NULL); }
void UpdateScoreAndPing(PCHAR Data, int iBitLength, PlayerID sender) { RakNet::BitStream bsData(Data,iBitLength/8,FALSE); RakNet::BitStream bsSend; BYTE bytePlayerID = pRak->GetIndexFromPlayerID(sender); if(!pNetGame->GetPlayerPool()->GetSlotState(bytePlayerID)) return; CPlayerPool *pPlayerPool = pNetGame->GetPlayerPool(); int write_counter=0; PlayerID pID; BYTE x=0; while(x!=MAX_PLAYERS) { if(pPlayerPool->GetSlotState(x) == TRUE) { pID = pRak->GetPlayerIDFromIndex(x); bsSend.Write((BYTE)x); bsSend.Write((int)pPlayerPool->GetScore(x)); bsSend.Write((int)pRak->GetLastPing(pRak->GetPlayerIDFromIndex(x))); if(pPlayerPool->IsAdmin(bytePlayerID)) { bsSend.Write(pID.binaryAddress); } else { bsSend.Write((unsigned long)0UL); } write_counter++; } x++; } pRak->RPC("UpdateScPing",&bsSend,HIGH_PRIORITY,RELIABLE,0,sender,FALSE,FALSE); }
void ScrSetDrunkLevel(RPCParameters *rpcParams) { PCHAR Data = reinterpret_cast<PCHAR>(rpcParams->input); int iBitLength = rpcParams->numberOfBitsOfData; RakNet::BitStream bsData((unsigned char *)Data,(iBitLength/8)+1,false); bsData.Read(iDrunkLevel); }
void ScrSetPlayerArmour(RPCParameters *rpcParams) { PCHAR Data = reinterpret_cast<PCHAR>(rpcParams->input); int iBitLength = rpcParams->numberOfBitsOfData; RakNet::BitStream bsData((unsigned char *)Data,(iBitLength/8)+1,false); bsData.Read(settings.fPlayerArmour); }
void ClientMessage(RPCParameters *rpcParams) { //if(!iGameInited) return; PCHAR Data = reinterpret_cast<PCHAR>(rpcParams->input); int iBitLength = rpcParams->numberOfBitsOfData; RakNet::BitStream bsData((unsigned char *)Data,(iBitLength/8)+1,false); DWORD dwStrLen, dwColor; char szMsg[257]; memset(szMsg, 0, 257); bsData.Read(dwColor); bsData.Read(dwStrLen); if(dwStrLen > 256) return; bsData.Read(szMsg, dwStrLen); szMsg[dwStrLen] = 0; if(settings.iFind) { for(int i = 0; i < MAX_FIND_ITEMS; i++) { if(!settings.findItems[i].iExists) continue; if(strstr(szMsg, settings.findItems[i].szFind)) if(settings.findItems[i].szSay[0] != 0x00) sendChat(settings.findItems[i].szSay); } } char szNonColorEmbeddedMsg[257]; int iNonColorEmbeddedMsgLen = 0; for (size_t pos = 0; pos < strlen(szMsg) && szMsg[pos] != '\0'; pos++) { if (!((*(unsigned char*)(&szMsg[pos]) - 32) >= 0 && (*(unsigned char*)(&szMsg[pos]) - 32) < 224)) continue; if(pos+7 < strlen(szMsg)) { if (szMsg[pos] == '{' && szMsg[pos+7] == '}') { pos += 7; continue; } } szNonColorEmbeddedMsg[iNonColorEmbeddedMsgLen] = szMsg[pos]; iNonColorEmbeddedMsgLen++; } szNonColorEmbeddedMsg[iNonColorEmbeddedMsgLen] = 0; Log("[CMSG] %s", szNonColorEmbeddedMsg); }
void OnVehWrecked(RPCParameters *rpcParams) { if (pRakServer && pGameModeAmx) { int iPlayer; USHORT usVehicle; iPlayer = pRakServer->GetIndexFromPlayerID(rpcParams->sender); if (!IsPlayerConnectedEx(iPlayer)) return; RakNet::BitStream bsData(rpcParams->input, rpcParams->numberOfBitsOfData / 8, false); bsData.Read(usVehicle); if (!IsValidVehicleEx(usVehicle)) return; CPlayerPool *pPlayerPool = pNetGame->pPlayerPool; CVehicle *pVehicle = pNetGame->pVehiclePool->pVehicle[usVehicle]; if (!pVehicle) return; if (!pPlayerPool->pPlayer[iPlayer]->byteVehicleStreamedIn[pVehicle->wVehicleID]) return; int idx; cell ret = 0; if (!amx_FindPublic(pGameModeAmx, "OnVehicleRequestDeath", &idx)) { amx_Push(pGameModeAmx, iPlayer); amx_Push(pGameModeAmx, usVehicle); amx_Exec(pGameModeAmx, &ret, idx); if ((cell)ret) { pVehicle->bDead = true; pVehicle->bDeathNotification = 0; pVehicle->wKillerID = iPlayer; } return; } else { pVehicle->bDead = true; pVehicle->bDeathNotification = 0; pVehicle->wKillerID = iPlayer; } return; } }
void ScrSetPlayerFacingAngle(RPCParameters *rpcParams) { PCHAR Data = reinterpret_cast<PCHAR>(rpcParams->input); int iBitLength = rpcParams->numberOfBitsOfData; RakNet::BitStream bsData((unsigned char *)Data,(iBitLength/8)+1,false); if(settings.iNormalModePosForce == 0) { bsData.Read(settings.fNormalModeRot); } }
void ScrHaveSomeMoney(RPCParameters *rpcParams) { PCHAR Data = reinterpret_cast<PCHAR>(rpcParams->input); int iBitLength = rpcParams->numberOfBitsOfData; RakNet::BitStream bsData((unsigned char *)Data,(iBitLength/8)+1,false); int iGivenMoney; bsData.Read(iGivenMoney); iMoney += iGivenMoney; }
void ScrHideTextDraw(RPCParameters *rpcParams) { PCHAR Data = reinterpret_cast<PCHAR>(rpcParams->input); int iBitLength = rpcParams->numberOfBitsOfData; RakNet::BitStream bsData((unsigned char *)Data,(iBitLength/8)+1,false); WORD wTextID; bsData.Read(wTextID); if(settings.uiTextDrawsLogging != 0) Log("[TEXTDRAW:HIDE] ID: %d.", wTextID); }
void ScrDialogBox(RPCParameters *rpcParams) { if(!iGameInited) return; PCHAR Data = reinterpret_cast<PCHAR>(rpcParams->input); int iBitLength = rpcParams->numberOfBitsOfData; RakNet::BitStream bsData((unsigned char *)Data,(iBitLength/8)+1,false); bsData.Read(sampDialog.wDialogID); bsData.Read(sampDialog.bDialogStyle); bsData.Read(sampDialog.bTitleLength); bsData.Read(sampDialog.szTitle, sampDialog.bTitleLength); sampDialog.szTitle[sampDialog.bTitleLength] = 0; bsData.Read(sampDialog.bButton1Len); bsData.Read(sampDialog.szButton1, sampDialog.bButton1Len); sampDialog.szButton1[sampDialog.bButton1Len] = 0; bsData.Read(sampDialog.bButton2Len); bsData.Read(sampDialog.szButton2, sampDialog.bButton2Len); sampDialog.szButton2[sampDialog.bButton2Len] = 0; stringCompressor->DecodeString(sampDialog.szInfo, 256, &bsData); switch(sampDialog.bDialogStyle) { case DIALOG_STYLE_MSGBOX: case DIALOG_STYLE_INPUT: case DIALOG_STYLE_LIST: case DIALOG_STYLE_PASSWORD: if(!sampDialog.iIsActive) { sampDialog.iIsActive = 1; hDlgThread = CreateThread(NULL, 0, DialogBoxThread, NULL, 0, NULL); } break; default: if(sampDialog.iIsActive) { sampDialog.iIsActive = 0; SendMessage(hwndSAMPDlg, WM_DESTROY, 0, 0); DestroyWindow(hwndSAMPDlg); UnregisterClass("dlgWndClass", GetModuleHandle(NULL)); hSAMPDlgFont = NULL; TerminateThread(hDlgThread, 0); } break; } }
void KickPlayer(PCHAR Data, int iBitLength, PlayerID sender) { RakNet::BitStream bsData(Data,iBitLength/8,FALSE); CPlayerPool *pPlayerPool = pNetGame->GetPlayerPool(); BYTE bytePlayerID = pRak->GetIndexFromPlayerID(sender); if(!pNetGame->GetPlayerPool()->GetSlotState(bytePlayerID)) return; BYTE byteKickPlayer; if(pPlayerPool->IsAdmin(bytePlayerID)) { bsData.Read(byteKickPlayer); pNetGame->KickPlayer(byteKickPlayer); } }
void ScrPlayAudioStream(RPCParameters *rpcParams) { PCHAR Data = reinterpret_cast<PCHAR>(rpcParams->input); int iBitLength = rpcParams->numberOfBitsOfData; RakNet::BitStream bsData((unsigned char *)Data,(iBitLength/8)+1,false); unsigned char bURLLen; char szURL[256]; bsData.Read(bURLLen); bsData.Read(szURL, bURLLen); szURL[bURLLen] = 0; Log("[AUDIO_STREAM] %s", szURL); }
void WorldPlayerDeath(RPCParameters *rpcParams) { if(!iGameInited) return; PCHAR Data = reinterpret_cast<PCHAR>(rpcParams->input); int iBitLength = rpcParams->numberOfBitsOfData; RakNet::BitStream bsData((unsigned char *)Data,(iBitLength/8)+1,false); PLAYERID playerId; bsData.Read(playerId); if(playerId < 0 || playerId >= MAX_PLAYERS) return; //Log("[PLAYER_DEATH] %d", playerId); }
void DestroyPickup(RPCParameters *rpcParams) { PCHAR Data = reinterpret_cast<PCHAR>(rpcParams->input); int iBitLength = rpcParams->numberOfBitsOfData; RakNet::BitStream bsData((unsigned char *)Data,(iBitLength/8)+1,false); int PickupID; bsData.Read(PickupID); if(settings.uiPickupsLogging != 0) { Log("[DESTROYPICKUP] %d", PickupID); } }
void RequestClass(RPCParameters *rpcParams) { PCHAR Data = reinterpret_cast<PCHAR>(rpcParams->input); int iBitLength = rpcParams->numberOfBitsOfData; RakNet::BitStream bsData((unsigned char *)Data,(iBitLength/8)+1,false); BYTE byteRequestOutcome = 0; bsData.Read(byteRequestOutcome); if(byteRequestOutcome) { bsData.Read((PCHAR)&SpawnInfo,sizeof(PLAYER_SPAWN_INFO)); iLocalPlayerSkin = SpawnInfo.iSkin; } }
void ScrSetSpawnInfo(RPCParameters *rpcParams) { PCHAR Data = reinterpret_cast<PCHAR>(rpcParams->input); int iBitLength = rpcParams->numberOfBitsOfData; RakNet::BitStream bsData((unsigned char *)Data,(iBitLength/8)+1,false); PLAYER_SPAWN_INFO SpawnInfo; bsData.Read((PCHAR)&SpawnInfo, sizeof(PLAYER_SPAWN_INFO)); if(settings.iNormalModePosForce == 0) { settings.fNormalModePos[0] = SpawnInfo.vecPos[0]; settings.fNormalModePos[1] = SpawnInfo.vecPos[1]; settings.fNormalModePos[2] = SpawnInfo.vecPos[2]; } }
void ScrEditTextDraw(RPCParameters *rpcParams) { PCHAR Data = reinterpret_cast<PCHAR>(rpcParams->input); int iBitLength = rpcParams->numberOfBitsOfData; RakNet::BitStream bsData((unsigned char *)Data,(iBitLength/8)+1,false); WORD wTextID; CHAR cText[1024]; unsigned short cTextLen = 0; bsData.Read(wTextID); bsData.Read(cTextLen); bsData.Read(cText, cTextLen); cText[cTextLen] = '\0'; if(settings.uiTextDrawsLogging != 0) Log("[TEXTDRAW:EDIT] ID: %d, Text: %s.", wTextID, cText); }
void ScrTogglePlayerSpectating(RPCParameters *rpcParams) { PCHAR Data = reinterpret_cast<PCHAR>(rpcParams->input); int iBitLength = rpcParams->numberOfBitsOfData; RakNet::BitStream bsData((unsigned char *)Data,(iBitLength/8)+1,false); BOOL bToggle; bsData.Read(bToggle); if(bIsSpectating && !bToggle && !iSpawned) { sampSpawn(); iSpawned = 1; } bIsSpectating = bToggle; }
void Chat(RPCParameters *rpcParams) { if(!iGameInited) return; PCHAR Data = reinterpret_cast<PCHAR>(rpcParams->input); int iBitLength = rpcParams->numberOfBitsOfData; PlayerID sender = rpcParams->sender; RakNet::BitStream bsData((unsigned char *)Data,(iBitLength/8)+1,false); PLAYERID playerId; BYTE byteTextLen; unsigned char szText[256]; memset(szText, 0, 256); bsData.Read(playerId); bsData.Read(byteTextLen); bsData.Read((char*)szText, byteTextLen); szText[byteTextLen] = 0; if(playerId < 0 || playerId >= MAX_PLAYERS) return; if(imitateID == playerId) sendChat((char *)szText); Log("[CHAT] %s: %s", playerInfo[playerId].szPlayerName, szText); if(settings.iFind) { for(int i = 0; i < MAX_FIND_ITEMS; i++) { if(!settings.findItems[i].iExists) continue; if(strstr((const char *)szText, settings.findItems[i].szFind)) { if(settings.findItems[i].szSay[0] != 0x00) sendChat(settings.findItems[i].szSay); } } } }
void ScrSetPlayerSkin(RPCParameters *rpcParams) { PCHAR Data = reinterpret_cast<PCHAR>(rpcParams->input); int iBitLength = rpcParams->numberOfBitsOfData; RakNet::BitStream bsData((unsigned char *)Data,(iBitLength/8)+1,false); int iPlayerID; unsigned int uiSkin; bsData.Read(iPlayerID); bsData.Read(uiSkin); if(iPlayerID < 0 || iPlayerID >= MAX_PLAYERS) return; if(iGameInited && g_myPlayerID == iPlayerID) iLocalPlayerSkin = uiSkin; }
void BanIPAddress(PCHAR Data, int iBitLength, PlayerID sender) { RakNet::BitStream bsData(Data,iBitLength/8,FALSE); BYTE bytePlayerID = pRak->GetIndexFromPlayerID(sender); if(!pNetGame->GetPlayerPool()->GetSlotState(bytePlayerID)) return; CPlayerPool *pPlayerPool = pNetGame->GetPlayerPool(); char ban_ip[256]; int iBanIpLen; if(pPlayerPool->IsAdmin(bytePlayerID)) { bsData.Read(iBanIpLen); bsData.Read(ban_ip,iBanIpLen); ban_ip[iBanIpLen] = 0; pNetGame->AddBan(ban_ip); } }
void Pickup(RPCParameters *rpcParams) { PCHAR Data = reinterpret_cast<PCHAR>(rpcParams->input); int iBitLength = rpcParams->numberOfBitsOfData; RakNet::BitStream bsData((unsigned char *)Data,(iBitLength/8)+1,false); int PickupID; PICKUP Pickup; bsData.Read(PickupID); bsData.Read((PCHAR)&Pickup, sizeof(PICKUP)); if(settings.uiPickupsLogging != 0) { char szCreatePickupAlert[256]; sprintf_s(szCreatePickupAlert, sizeof(szCreatePickupAlert), "[CREATEPICKUP] ID: %d | Model: %d | Type: %d | X: %.2f | Y: %.2f | Z: %.2f", PickupID, Pickup.iModel, Pickup.iType, Pickup.fX, Pickup.fY, Pickup.fZ); Log(szCreatePickupAlert); } }
void ScrGameText(RPCParameters *rpcParams) { PCHAR Data = reinterpret_cast<PCHAR>(rpcParams->input); int iBitLength = rpcParams->numberOfBitsOfData; RakNet::BitStream bsData((unsigned char *)Data,(iBitLength/8)+1,false); char szMessage[400]; int iType, iTime, iLength; bsData.Read(iType); bsData.Read(iTime); bsData.Read(iLength); if(iLength > 400) return; // tsk tsk, kye bsData.Read(szMessage, iLength); szMessage[iLength] = '\0'; Log("[GAMETEXT] %s", szMessage); }