Gothic Online Forums
[PL] Anty ping system czyli kicker pingu - Printable Version

+- Gothic Online Forums (https://archive.gothic-online.com)
+-- Forum: Community (https://archive.gothic-online.com/forum-18.html)
+--- Forum: Polish (Polski) (https://archive.gothic-online.com/forum-19.html)
+---- Forum: Skrypty (https://archive.gothic-online.com/forum-47.html)
+---- Thread: [PL] Anty ping system czyli kicker pingu (/thread-72.html)



[PL] Anty ping system czyli kicker pingu - Dejv - 19.10.2015

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.


RE: Anty ping system czyli kicker pingu - Kimior - 19.10.2015

No cóż... dziwnie wygląda ten pingwarn.


RE: Anty ping system czyli kicker pingu - Bimbol - 19.10.2015

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.


RE: Anty ping system czyli kicker pingu - Nubzior - 19.10.2015

Spoko, tylko umieść skrypt w tagu [.code=squirrel][./code] bez kropek na początku.


RE: Anty ping system czyli kicker pingu - Dejv - 19.10.2015

@up nie ma sprawy, dodane.


RE: Anty ping system czyli kicker pingu - Nubzior - 19.10.2015

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. }





RE: [PL] Anty ping system czyli kicker pingu - Dejv - 20.10.2015

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