Thread Rating:
  • 1 Vote(s) - 5 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[PL] Anty ping system czyli kicker pingu
#1
Witam serdecznie.

Chcę zaprezentować prosty skrypt na sprawdzanie pingu gracza - jeśli przekroczy dopuszczalny ping to go z serwera wyrzuci.

Jeśli wystąpiły jakieś problemy to proszę mnie poprawić, wcześniej programowałem/programuje w innych językach i mogłem się pomylić.

Code:
function sendMessageClient( player, hexRGB, text ) // Funkcja dzięki której sobie zrobimy do textu kolor hex.
{
local rgb = hexToRGB(hexRGB);

sendMessage(player, rgb.r, rgb.g, rgb.b, text);
}

function sendMessageClientAll( hexRGB, text ) // Funkcja dzięki której sobie zrobimy do textu kolor hex.
{
local rgb = hexToRGB(hexRGB);

sendMessageToAll(rgb.r, rgb.g, rgb.b, text);
}

function playerUpdate( )
{
local pingWarn = 0;

for(local i = 0; i < getMaxSlots(); i = i + 1)
{
 if ( isConnected ( i ) )
 {
  local ping = getPlayerPing(i);//Pobieramy ping gracza
 
  if( ping >= 700 )//Ustawimy sobie na 700 mingu.
  {
   pingWarn ++;
   switch( pingWarn )
   {
    case 1..3: sendMessageClient( i, "FF0000", "Masz zbyt wysoki ping. Aby grać na naszym serwerze, zmniejsz ping! ("+ ping +"/700) " );
    case 4:
    {
     sendMessageClientAll( "FF0000", ""+ getPlayerName(i) +" został(a) wyrzucony z serwera z powodu zbyt dużego pingu. ("+ ping +"/700) " );
   
     kick(i);
    }
   }
  }
  else pingWarn = 0;
 }
}
}

function onInit()
{
setServerWorld("NEWWORLD\\NEWWORLD.ZEN"); // ustawiamy graczu khorinis

setTimer(playerUpdate, 1000, true);//TWORZYMY TIMERA

print("Anty ping by Dejv został załadowany.");
}

Miłego korzystania.
Reply
#2
No cóż... dziwnie wygląda ten pingwarn.
Reply
#3
Dodam, że GO ma wbudowany system do kontroli pingu. Jeśli ping gracza przekroczy 500 ms, to jego klient zostaje jakby zapauzowany, jednak odnosi się to tylko do jego bohatera, reszta porusza się normalnie. Tak czy inaczej skrypt się może komuś przydać. Prawdopodobnie napisałeś go w ramach nauki.
Reply
#4
Spoko, tylko umieść skrypt w tagu [.code=squirrel][./code] bez kropek na początku.
Reply
#5
@up nie ma sprawy, dodane.
Reply
#6
Testowałeś to przy większej ilości graczy? Powinieneś zrobić ze zmiennej pingWarn tablicę z indeksem id gracza ponieważ, skrypt będzie dawał ostrzeżenia globalnie dla każdego. Tutaj masz taki przykład, nie testowałem ale idee zrozumiesz.

Squirrel Script
  1. local Player = {};
  2.  
  3. function initPlayerStructures()
  4. {
  5. for(local i = 0; i < getMaxSlots(); ++i)
  6. {
  7. Player[i] <- {};
  8. Player[i].pingWarn = 0;
  9. }
  10. }
  11.  
  12. function clearPlayerStructure(pid)
  13. {
  14. Player[pid].pingWarn = 0;
  15. }
  16.  
  17. function onInit()
  18. {
  19. initPlayerStructures();
  20.  
  21. setServerWorld("NEWWORLD\\NEWWORLD.ZEN"); // ustawiamy graczu khorinis
  22. setTimer(playerUpdate, 1000, true); //TWORZYMY TIMERA
  23. print("Anty ping by Dejv został załadowany.");
  24. }
  25.  
  26. function onDisconnect(pid, reason)
  27. {
  28. clearPlayerStructure(pid);
  29. }
  30.  
  31. function playerUpdate( )
  32. {
  33. for(local i = 0; i < getMaxSlots(); i++)
  34. {
  35. if (isConnected (i))
  36. {
  37. local ping = getPlayerPing(i); //Pobieramy ping gracza
  38. if(ping >= 700) //Ustawimy sobie na 700 mingu.
  39. {
  40. Player[i].pingWarn++;
  41. switch(Player[i].pingWarn)
  42. {
  43. case 1:
  44. case 2:
  45. case 3:
  46. sendMessageClient( i, "FF0000", "Masz zbyt wysoki ping. Aby grać na naszym serwerze, zmniejsz ping! ("+ ping +"/700) " );
  47. break;
  48. case 4:
  49. sendMessageClientAll( "FF0000", ""+ getPlayerName(i) +" został(a) wyrzucony z serwera z powodu zbyt dużego pingu. ("+ ping +"/700) " );
  50. kick(i);
  51. break;
  52. }
  53. }
  54. else
  55. Player[i].pingWarn = 0;
  56. }
  57. }
  58. }


Reply
#7
Niestety nie korzystałem na większej ilości graczy, fakt faktem zapomniałem o tej tablicy, dziekuje.
Reply


Forum Jump:


Users browsing this thread: