Advertisement
Guest User

Rust Rcon Chat Controller

a guest
Oct 22nd, 2018
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 4.90 KB | None | 0 0
  1. procedure TfrmMain.wsClientRconMessage(Connection: TsgcWSConnection; const Text: string);
  2. var
  3.   jdata, jchat, jplayers, jplayer: TdJSON;
  4.   LItem: TListViewItem;
  5.   I: Integer;
  6. begin
  7.   lvConsole.BeginUpdate;
  8.   if not Text.IsEmpty then
  9.   begin
  10.     jdata := TdJSON.Parse(Text);
  11.     try
  12.       if jdata['Identifier'].AsInteger = 10 then
  13.       begin
  14.         lvPlayers.BeginUpdate;
  15.         lvPlayers.Items.Clear;
  16.         lvPlayers.EndUpdate;
  17.  
  18.         jplayers := TdJSON.Parse(jdata['Message'].AsString);
  19.         try
  20.           I := 0;
  21.  
  22.           for jplayer in jplayers do
  23.           begin
  24.             Inc(I);
  25.           end;
  26.  
  27.           SetLength(Players, I);
  28.  
  29.           I := 0;
  30.           for jplayer in jplayers do
  31.           begin
  32.             Players[I].SteamID := jplayer['SteamID'].AsString;
  33.             Players[I].OwnerSteamID := jplayer['OwnerSteamID'].AsString;
  34.             Players[I].DisplayName := jplayer['DisplayName'].AsString;
  35.             Players[I].Ping := jplayer['Ping'].AsInteger;
  36.             Players[I].Address := jplayer['Address'].AsString;
  37.             Players[I].ConnectedSeconds := jplayer['ConnectedSeconds'].AsInteger;
  38.             Players[I].VoiationLevel := jplayer['VoiationLevel'].AsString;
  39.             Players[I].CurrentLevel := jplayer['CurrentLevel'].AsString;
  40.             Players[I].UnspentXP := jplayer['UnspentXp'].AsString;
  41.             Players[I].Health := jplayer['Health'].AsString;
  42.  
  43.             LItem := lvPlayers.Items.Add;
  44.             LItem.Text := Players[I].DisplayName + '  (' + Players[I].SteamID + ')';
  45.             LItem.Data[TMultiDetailAppearanceNames.Detail1] := 'IP: ' + Players[I].Address;
  46.             LItem.Data[TMultiDetailAppearanceNames.Detail2] := 'Ping: ' + Players[I].Ping.ToString + 'ms';
  47.             LItem.Data[TMultiDetailAppearanceNames.Detail3] := 'Connected for ' + SecsToTimeStr(Players[I].ConnectedSeconds, True);
  48.  
  49.             Inc(I);
  50.           end;
  51.         finally
  52.           jplayers.Free;
  53.         end;
  54.         tbtmPlayers.Text := 'Players [' + PlayerManager.GetPlayerCount.ToString + ']';
  55.       end
  56.       else if jdata['Identifier'].AsInteger = 11 then
  57.       begin
  58.         lvBans.BeginUpdate;
  59.         lvBans.Items.Clear;
  60.         lvBans.EndUpdate;
  61.  
  62.         jplayers := TdJSON.Parse(jdata['Message'].AsString);
  63.         try
  64.           for jplayer in jplayers do
  65.           begin
  66.             LItem := lvBans.Items.Add;
  67.             LItem.Text := jplayer['username'].AsString;
  68.             LItem.Data[TMultiDetailAppearanceNames.Detail1] := 'SteamID: ' + jplayer['steamid'].AsString;
  69.             LItem.Data[TMultiDetailAppearanceNames.Detail2] := 'Group: ' + jplayer['group'].AsString;
  70.             LItem.Data[TMultiDetailAppearanceNames.Detail3] := 'Notes: ' + jplayer['notes'].AsString;
  71.           end;
  72.         finally
  73.           jplayers.Free;
  74.         end;
  75.  
  76.         tbtmBans.Text := 'Bans: [' + lvBans.Items.Count.ToString + ']';
  77.       end
  78.       else
  79.       begin
  80.         if jdata['Type'].AsString <> 'Chat' then
  81.         begin
  82.           if not jdata['Message'].AsString.Trim.IsEmpty then
  83.           begin
  84.             LItem := lvConsole.Items.Add;
  85.             LItem.Text := '[' + DateTimeToStr(Now) + '] ' + jdata['Message'].AsString;
  86.  
  87.             lvConsole.ItemIndex := LItem.Index;
  88.           end;
  89.           tbtmAll.Text := 'All [' + lvConsole.Items.Count.ToString + ']';
  90.         end;
  91.  
  92.         if jdata['Type'].AsString = 'Chat' then
  93.         begin
  94.           jchat := TdJSON.Parse(jdata['Message'].AsString);
  95.           try
  96.             LItem := lvRconChat.Items.Add;
  97.             LItem.Text := '[' + DateTimeToStr(Now) + '] ' + jchat['Username'].AsString + ': ' + jchat['Message'].AsString;
  98.  
  99.             lvRconChat.ItemIndex := LItem.Index;
  100.             // Chat Monitor
  101.             if switchEnableChatMonitor.IsChecked then
  102.             begin
  103.               for I := 0 to lvListeningWords.Items.Count - 1 do
  104.               begin
  105.                 if chkChatMonitorCaseSensitive.IsChecked then
  106.                 begin
  107.                   if AnsiContainsStr(UpperCase(jchat['Message'].AsString), UpperCase(lvListeningWords.Items[I].Text)) then
  108.                   begin
  109.                     LItem := lvChatMonitor.Items.Add;
  110.                     LItem.Text := jchat['Username'].AsString;
  111.                     LItem.Data[TMultiDetailAppearanceNames.Detail1] := 'SteamID: ' + Players[PlayerManager.IndexOfDisplayName(jchat['Username'].AsString)].SteamID;
  112.                     LItem.Data[TMultiDetailAppearanceNames.Detail2] := 'Time: ' + DateTimeToStr(Now);
  113.                     LItem.Data[TMultiDetailAppearanceNames.Detail3] := jchat['Message'].AsString;
  114.                   end;
  115.                 end;
  116.               end;
  117.             end;
  118.           finally
  119.             jchat.Free;
  120.           end;
  121.           tbtmChat.Text := 'Chat [' + lvRconChat.Items.Count.ToString + ']';
  122.         end;
  123.       end;
  124.     finally
  125.       jdata.Free;
  126.     end;
  127.   end;
  128.   lvConsole.EndUpdate;
  129. end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement