Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //SA:MP KeyDetection created by Luka Plivelic aka pliva
- #include <a_samp>
- #include <socket>
- #define PORT 7777
- #define F11 1
- #define F12 2
- #define BACK 3
- enum KEYS{KEY_NAME[12],KEY_VALUE};
- static const Keys[][KEYS] =//Define your keys.
- {
- {"F11", 1},
- {"F12", 2},
- {"Back", 3}
- };
- forward OnPlayerPressKey(client_id, pKey);//public that calls every time when player press defined key.
- new Socket:g_Socket;
- enum
- SOCKET
- {
- PlayerID,//Save PlayerID that match with SocketIP
- SocketIP[19],// Store ClientIP when client connect.
- };
- new _Socket[MAX_PLAYERS][SOCKET];
- new Player_Socket_ID[MAX_PLAYERS]={-1,...};//Save ClientID for every player.
- public OnFilterScriptInit()
- {
- g_Socket = socket_create(TCP);
- if(is_socket_valid(g_Socket)) {
- printf("[KEY DETECTION] Socket server is successfully started.");
- socket_set_max_connections(g_Socket, MAX_PLAYERS);
- socket_listen(g_Socket, PORT); //Set PORT
- }
- return 1;
- }
- public OnFilterScriptExit()
- {
- if(is_socket_valid(g_Socket))
- socket_destroy(g_Socket);
- }
- public onSocketRemoteConnect(Socket:id, remote_client[], remote_clientid)
- {
- new IP[16];
- printf("[KEY_DETECTION]Connectio to Socket Server. | ClientID: [%d] | ClientIP: [%s] ",remote_clientid,remote_client);
- format(_Socket[remote_clientid][SocketIP],16,remote_client);
- /*Omogućava igraču da naknadno upali aplikaciju tako
- da provjeri da li se koja IP adresa igraca koji je na serveru poklapa s adresom klijenta*/
- for(new n=0;n<MAX_PLAYERS;n++)
- {
- GetPlayerIp(n, IP, sizeof(IP));
- if(!strcmp(remote_client,IP,false,strlen(IP)))// Uspoređivanje IP spremnjenog prilikom konekcije aplikacije i IP igraca koji se trenutno prijavljuje
- {
- _Socket[remote_clientid][PlayerID]=n;
- Player_Socket_ID[n]= remote_clientid;
- SendClientMessage(n, -1,"[KEY_DETECTION] You're turn on yours Key Detection client.");
- return 1;
- }
- }
- return 1;
- }
- public onSocketRemoteDisconnect(Socket:id, remote_clientid)
- {
- printf("[KEY_DETECTION]Leaves Socket Server | ClientID: [%d] | PlayerID: [%d] ",remote_clientid,_Socket[remote_clientid][PlayerID]);
- if(IsPlayerConnected(_Socket[remote_clientid][PlayerID]))
- {
- SendClientMessage(_Socket[remote_clientid][PlayerID], -1,"[KEY_DETECTION] You're turn off yours Key Detection client.");
- Player_Socket_ID[_Socket[remote_clientid][PlayerID]] = -1;
- _Socket[remote_clientid][PlayerID] = -1;
- format(_Socket[remote_clientid][SocketIP],16,"-1");
- }
- return 1;
- }
- public onSocketReceiveData(Socket:id, remote_clientid, data[], data_len)
- {
- OnPlayerPressKey(_Socket[remote_clientid][PlayerID],GetKey(data));
- return 1;
- }
- public OnPlayerConnect(playerid)
- {
- new IP[16];
- GetPlayerIp(playerid, IP, sizeof(IP));
- for(new n=0;n<MAX_PLAYERS;n++)
- {
- if(!strcmp(IP,_Socket[n][SocketIP],false,strlen(IP)))// Uspoređivanje IP spremnjenog prilikom konekcije aplikacije i IP igraca koji se trenutno prijavljuje
- {
- _Socket[n][PlayerID]=playerid;
- Player_Socket_ID[playerid]= n;
- printf("[KEY_DETECTION]Player ID: [%d] is connected with his client, ClientID: [%d].",playerid,Player_Socket_ID[playerid]);
- break;
- }
- }
- return 1;
- }
- public OnPlayerDisconnect(playerid, reason)
- {
- printf("[KEY_DETECTION] Player ID [%d] leaves the server. TurnOff his ClientID: [%d]",playerid,Player_Socket_ID[playerid]);
- socket_sendto_remote_client(g_Socket, Player_Socket_ID[playerid], "DISCONNECT");
- socket_close_remote_client(g_Socket,Player_Socket_ID[playerid]);
- _Socket[Player_Socket_ID[playerid]][PlayerID] = -1;
- format(_Socket[Player_Socket_ID[playerid]][SocketIP],16,"-1");
- Player_Socket_ID[playerid] = -1;
- return 1;
- }
- public OnPlayerPressKey(client_id, pKey)
- {
- switch(pKey)
- {
- case F11:
- {
- SendClientMessage(Player_Socket_ID[client_id], -1,"[KEY_DETECTION]You pressed F11!");
- }
- case F12:
- {
- SendClientMessage(Player_Socket_ID[client_id], -1,"[KEY_DETECTION]You pressed F12!");
- }
- case BACK:
- {
- SendClientMessage(Player_Socket_ID[client_id], -1,"[KEY_DETECTION]You pressed BACK!");
- }
- }
- }
- stock GetKey( data[])
- {
- for(new i=0;i<sizeof(Keys);i++)
- {
- if(!strcmp(data,Keys[i][KEY_NAME],true,3))
- {
- return Keys[i][KEY_VALUE];
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement