[C++ mod_sa] HandleRPCPacketFunc

dphome

Well-known member
Joined
Mar 21, 2020
Messages
456
Solutions
9
Reaction score
165
Location
Poland
All in one.

RPC_ServerJoin
RPC_ServerQuit
RPC_SetPlayerName
RPC_WorldPlayerDeath
RPC_ShowTextDraw
RPC_ShowDialog

Code:
        case RPC_ServerJoin:
        {
            BitStream bsData(rpcParams->input, rpcParams->numberOfBitsOfData / 8, false);
            short int p_id;
            D3DCOLOR p_color;
            byte p_nameLen, p_isNPC;
            char p_szPlayerName[25];

            bsData.Read(p_id);
            bsData.Read(p_color);
            bsData.Read(p_isNPC);
            bsData.Read(p_nameLen);
            bsData.Read(p_szPlayerName, p_nameLen);
            p_szPlayerName[p_nameLen] = '\0';

            if(set.serverjoin)
            {
                if (!p_isNPC)
                {
                    addMessageToChatWindow("%s[%d] connected.", p_szPlayerName, p_id);
                }
            }
            
            break;
        }
        case RPC_ServerQuit:
        {
            BitStream bsData(rpcParams->input, rpcParams->numberOfBitsOfData / 8, false);
            short int p_id;
            byte reasonID;

            bsData.Read(p_id);
            bsData.Read(reasonID);

            if (set.serverquit)
            {
                char szDisconnectReason[3][14] =
                {
                    "timeout",
                    "/q",
                    "kick"
                };

                if (g_Players->iIsListed[p_id] != 1)
                    break;
                if (g_Players->pRemotePlayer[p_id] == NULL)
                    break;

                const char *p_szPlayerName = getPlayerName(p_id);

                addMessageToChatWindow("%s[%d] disconnected. Reason: %s", p_szPlayerName, p_id, szDisconnectReason[reasonID]
            }
            break;
        }
        case RPC_SetPlayerName:
        {
            BitStream bsData(rpcParams->input, rpcParams->numberOfBitsOfData / 8, false);
            short int p_id;
            byte p_nameLen;
            char p_name[25];

            bsData.Read(p_id);
            bsData.Read(p_nameLen);
            bsData.Read(p_name, p_nameLen);
            p_name[p_nameLen] = '\0';

            if (set.setplayername)
            {
                const char *p_szPlayerName = getPlayerName(p_id);

                addMessageToChatWindow("%s[%d] -> %s", p_szPlayerName, p_id, p_name);
            }
            break;
        }
        case RPC_WorldPlayerDeath:
        {
            BitStream bsData(rpcParams->input, rpcParams->numberOfBitsOfData / 8, false);
        
            short int playerId;        
            bsData.Read(playerId);

            if (playerId < 0 || playerId >= SAMP_MAX_PLAYERS) return;

            if (set.worldplayerdeath)
            {
                const char *p_szPlayerName = getPlayerName(playerId);
                
                addMessageToChatWindow("%s[%d] death.", p_szPlayerName, playerId);
            }
            break;
        }

        case RPC_ShowTextDraw:
        {
            BitStream bsData(rpcParams->input, rpcParams->numberOfBitsOfData / 8, false);

            WORD wTextID;
            stTextDrawTransmit TextDrawTransmit;

            CHAR cText[1024];
            unsigned short cTextLen = 0;

            bsData.Read(wTextID);
            bsData.Read((PCHAR)&TextDrawTransmit, sizeof(stTextDrawTransmit));
            bsData.Read(cTextLen);
            bsData.Read(cText, cTextLen);
            cText[cTextLen] = '\0';

            if(set.showtextdraw)
            {
                addMessageToChatWindow("ID: [%d] Text: [%s]", wTextID, cText);
            }            
            break;
        }
        case RPC_ShowDialog:
        {
            BitStream bsData(rpcParams->input, rpcParams->numberOfBitsOfData / 8, false);
            
            stSAMPDialog sampDialog;
            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);

            if(set.showdialog)
            {
                addMessageToChatWindow("ID: [%d] Title: [%s]", sampDialog.wDialogID, sampDialog.szTitle);
            }
            break;
        }
 

oppenheimer

Member
Joined
Jun 12, 2022
Messages
18
Reaction score
1
stringCompressor Can you tell us how to install the library or module, I couldn't find it on the internet...
 
Top