Advertisement
Guest User

KeyDetection

a guest
Dec 13th, 2015
428
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 4.21 KB | None | 0 0
  1. //SA:MP KeyDetection created by Luka Plivelic aka pliva
  2.  
  3. #include <a_samp>
  4. #include <socket>
  5.  
  6. #define PORT 7777
  7.  
  8. #define F11 1
  9. #define F12 2
  10. #define BACK 3
  11.  
  12. enum KEYS{KEY_NAME[12],KEY_VALUE};
  13.  
  14. static const Keys[][KEYS] =//Define your keys.
  15. {
  16.     {"F11", 1},
  17.     {"F12", 2},
  18.     {"Back", 3}
  19. };
  20.  
  21. forward OnPlayerPressKey(client_id, pKey);//public that calls every time when player press defined key.
  22.  
  23. new Socket:g_Socket;
  24.  
  25. enum
  26. SOCKET
  27. {
  28.     PlayerID,//Save PlayerID that match with SocketIP
  29.     SocketIP[19],// Store ClientIP when client connect.
  30. };
  31.  
  32. new _Socket[MAX_PLAYERS][SOCKET];
  33. new Player_Socket_ID[MAX_PLAYERS]={-1,...};//Save ClientID for every player.
  34.  
  35.  
  36. public OnFilterScriptInit()
  37. {
  38.     g_Socket = socket_create(TCP);
  39.     if(is_socket_valid(g_Socket)) {
  40.         printf("[KEY DETECTION] Socket server is successfully started.");
  41.         socket_set_max_connections(g_Socket, MAX_PLAYERS);
  42.         socket_listen(g_Socket, PORT); //Set PORT
  43.     }
  44.  
  45.     return 1;
  46. }
  47.  
  48. public OnFilterScriptExit()
  49. {
  50.     if(is_socket_valid(g_Socket))
  51.         socket_destroy(g_Socket);
  52. }
  53.  
  54. public onSocketRemoteConnect(Socket:id, remote_client[], remote_clientid)
  55. {
  56.     new IP[16];
  57.     printf("[KEY_DETECTION]Connectio to Socket Server. | ClientID: [%d] | ClientIP: [%s] ",remote_clientid,remote_client);
  58.     format(_Socket[remote_clientid][SocketIP],16,remote_client);
  59.     /*Omogućava igraču da naknadno upali aplikaciju tako
  60.     da provjeri da li se koja IP adresa igraca koji je na serveru poklapa s adresom klijenta*/
  61.     for(new n=0;n<MAX_PLAYERS;n++)
  62.     {
  63.         GetPlayerIp(n, IP, sizeof(IP));
  64.         if(!strcmp(remote_client,IP,false,strlen(IP)))// Uspoređivanje IP spremnjenog prilikom konekcije aplikacije i IP igraca koji se trenutno prijavljuje
  65.         {
  66.             _Socket[remote_clientid][PlayerID]=n;
  67.             Player_Socket_ID[n]= remote_clientid;
  68.             SendClientMessage(n, -1,"[KEY_DETECTION] You're turn on yours Key Detection client.");
  69.             return 1;
  70.         }
  71.     }
  72.     return 1;
  73. }
  74.  
  75. public onSocketRemoteDisconnect(Socket:id, remote_clientid)
  76. {
  77.     printf("[KEY_DETECTION]Leaves Socket Server | ClientID: [%d] | PlayerID: [%d] ",remote_clientid,_Socket[remote_clientid][PlayerID]);
  78.     if(IsPlayerConnected(_Socket[remote_clientid][PlayerID]))
  79.     {
  80.         SendClientMessage(_Socket[remote_clientid][PlayerID], -1,"[KEY_DETECTION] You're turn off yours Key Detection client.");
  81.         Player_Socket_ID[_Socket[remote_clientid][PlayerID]] = -1;
  82.         _Socket[remote_clientid][PlayerID] = -1;
  83.         format(_Socket[remote_clientid][SocketIP],16,"-1");
  84.     }
  85.     return 1;
  86. }
  87.  
  88. public onSocketReceiveData(Socket:id, remote_clientid, data[], data_len)
  89. {
  90.     OnPlayerPressKey(_Socket[remote_clientid][PlayerID],GetKey(data));
  91.     return 1;
  92. }
  93.  
  94. public OnPlayerConnect(playerid)
  95. {
  96.     new IP[16];
  97.     GetPlayerIp(playerid, IP, sizeof(IP));
  98.     for(new n=0;n<MAX_PLAYERS;n++)
  99.     {
  100.         if(!strcmp(IP,_Socket[n][SocketIP],false,strlen(IP)))// Uspoređivanje IP spremnjenog prilikom konekcije aplikacije i IP igraca koji se trenutno prijavljuje
  101.         {
  102.             _Socket[n][PlayerID]=playerid;
  103.             Player_Socket_ID[playerid]= n;
  104.  
  105.             printf("[KEY_DETECTION]Player ID: [%d] is connected with his client, ClientID: [%d].",playerid,Player_Socket_ID[playerid]);
  106.             break;
  107.         }
  108.     }
  109.     return 1;
  110. }
  111.  
  112. public OnPlayerDisconnect(playerid, reason)
  113. {
  114.     printf("[KEY_DETECTION] Player ID [%d] leaves the server. TurnOff his ClientID: [%d]",playerid,Player_Socket_ID[playerid]);
  115.     socket_sendto_remote_client(g_Socket, Player_Socket_ID[playerid], "DISCONNECT");
  116.     socket_close_remote_client(g_Socket,Player_Socket_ID[playerid]);
  117.     _Socket[Player_Socket_ID[playerid]][PlayerID] = -1;
  118.     format(_Socket[Player_Socket_ID[playerid]][SocketIP],16,"-1");
  119.     Player_Socket_ID[playerid] = -1;
  120.     return 1;
  121. }
  122.  
  123. public OnPlayerPressKey(client_id, pKey)
  124. {
  125.     switch(pKey)
  126.     {
  127.      case F11:
  128.         {
  129.             SendClientMessage(Player_Socket_ID[client_id], -1,"[KEY_DETECTION]You pressed F11!");
  130.          }
  131.      case F12:
  132.         {
  133.             SendClientMessage(Player_Socket_ID[client_id], -1,"[KEY_DETECTION]You pressed F12!");
  134.          }
  135.      case BACK:
  136.         {
  137.             SendClientMessage(Player_Socket_ID[client_id], -1,"[KEY_DETECTION]You pressed BACK!");
  138.          }
  139.     }
  140. }
  141.  
  142. stock GetKey( data[])
  143. {
  144. for(new i=0;i<sizeof(Keys);i++)
  145.             {
  146.         if(!strcmp(data,Keys[i][KEY_NAME],true,3))
  147.         {
  148.         return Keys[i][KEY_VALUE];
  149.         }
  150.      }
  151. return 0;
  152. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement