Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. bool YEncIsCritical(char c)
  2. {
  3.     return !c || c == 0x3D || c == 0xA || c == 0xD || c == 0x7F || c == 0x5C || c == 0x25 || c == 0x92 || c == 0x22 || c == 0x3B;
  4. }
  5.  
  6. int Com_EncodeYEnc(char *indata, int inlen, char *outdata, int outlen)
  7. {
  8.     int len = 0;
  9.     for (int in = 0; in < inlen; ++in)
  10.     {
  11.         char c = indata[in] + 0x2A;
  12.         if (YEncIsCritical(c))
  13.         {
  14.             c += 0x40;
  15.             if (len + 1 == outlen)
  16.             {
  17.                 *outdata = 0;
  18.                 return 0;
  19.             }
  20.             outdata[len++] = 0x3D;
  21.         }
  22.         if (len + 1 == outlen)
  23.         {
  24.             *outdata = 0;
  25.             return 0;
  26.         }
  27.         outdata[len++] = c;
  28.     }
  29.     outdata[len] = 0;
  30.     return len;
  31. }
  32.  
  33. int Com_DecodeYEnc(const char *indata, char *outdata, int outlen)
  34. {
  35.     bool escape = false;
  36.     int len = 0;
  37.     while (*indata)
  38.     {
  39.         char c = *indata;
  40.         if (escape || c != 0x3D)
  41.         {
  42.             if (len == outlen)
  43.                 return 0;
  44.             if (escape)
  45.             {
  46.                 c -= 0x40;
  47.                 escape = false;
  48.             }
  49.             outdata[len++] = c - 0x2A;
  50.         }
  51.         else
  52.             escape = true;
  53.         ++indata;
  54.     }
  55.     return len;
  56. }
  57.  
  58. void SetClientStats(int clientNum, bool statsModified, char *statData)
  59. {
  60.     char encodedData[0x400];
  61.     encodedBuffer[0] = 0x79;
  62.     Com_EncodeYEnc(statData, 0x400, &encodedData[1], 0x400);
  63.     SV_GameSendServerCommand(clientNum, 1, va("e %d %s", statsModified, encodedData));
  64. }