Advertisement
Guest User

Untitled

a guest
Apr 2nd, 2015
195
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.49 KB | None | 0 0
  1. #include <SFML\Network.hpp>
  2. #include <SFML\Window.hpp>
  3. #include <sampgdk\a_samp.h>
  4. #include "SDK\amx\amx.h"
  5. #include "SDK\plugincommon.h"
  6. #include <sampgdk\core.h>
  7. #include <map>
  8.  
  9. struct Player
  10. {
  11.     Player(std::string ip, int port) : ip(ip), port(port) {}
  12.     sf::Packet packet;
  13.     sf::UdpSocket socket;
  14.     sf::IpAddress ip;
  15.     unsigned short port;
  16. };
  17.  
  18. std::map<int, Player*> player_map;
  19.  
  20. #define AMX_DECLARE_NATIVE(native) \
  21.     cell AMX_NATIVE_CALL native(AMX* amx, cell* params)
  22.  
  23. // native IsVirtualKeyPressed(playerid, Key:key);
  24.  
  25. AMX_DECLARE_NATIVE(IsVirtualKeyPressed_)
  26. {
  27.     int playerid = params[1];
  28.  
  29.     player_map[playerid]->packet << "isKeyPressed" << params[2];
  30.     player_map[playerid]->socket.send(player_map[playerid]->packet, player_map[playerid]->ip, player_map[playerid]->port);
  31.     player_map[playerid]->packet.clear();
  32.  
  33.     sf::IpAddress tmpip;
  34.     unsigned short tmpport;
  35.     player_map[playerid]->socket.receive(player_map[playerid]->packet, tmpip, tmpport);
  36.  
  37.     bool pressed(false);
  38.     player_map[playerid]->packet >> pressed;
  39.     player_map[playerid]->packet.clear();
  40.  
  41.     return pressed;
  42. }
  43.  
  44. // native GetMousePos(playerid, &x, &y);
  45.  
  46. AMX_DECLARE_NATIVE(GetMousePos_)
  47. {
  48.     int playerid = params[1];
  49.  
  50.     player_map[playerid]->packet << "getMousePos";
  51.     player_map[playerid]->socket.send(player_map[playerid]->packet, player_map[playerid]->ip, player_map[playerid]->port);
  52.     player_map[playerid]->packet.clear();
  53.  
  54.     sf::IpAddress tmpip;
  55.     unsigned short tmpport;
  56.     player_map[playerid]->socket.receive(player_map[playerid]->packet, tmpip, tmpport);
  57.  
  58.     cell *x(nullptr), *y(nullptr);
  59.     amx_GetAddr(amx, params[2], &x);
  60.     amx_GetAddr(amx, params[3], &y);
  61.     player_map[playerid]->packet >> *x >> *y;
  62.     player_map[playerid]->packet.clear();
  63.  
  64.     return true;
  65. }
  66.  
  67. // native IsMouseButtonPressed(playerid, Button:button);
  68.  
  69. AMX_DECLARE_NATIVE(IsMouseButtonPressed_)
  70. {
  71.     int playerid = params[1];
  72.  
  73.     player_map[playerid]->packet << "isMouseButtonPressed" << params[2];
  74.     player_map[playerid]->socket.send(player_map[playerid]->packet, player_map[playerid]->ip, player_map[playerid]->port);
  75.     player_map[playerid]->packet.clear();
  76.  
  77.     sf::IpAddress tmpip;
  78.     unsigned short tmpport;
  79.     player_map[playerid]->socket.receive(player_map[playerid]->packet, tmpip, tmpport);
  80.  
  81.     bool pressed(false);
  82.     player_map[playerid]->packet >> pressed;
  83.     player_map[playerid]->packet.clear();
  84.  
  85.     return pressed;
  86. }
  87.  
  88. // callbacks
  89.  
  90. PLUGIN_EXPORT bool PLUGIN_CALL OnIncomingConnection(int playerid, const char *ip_address, int port)
  91. {
  92.     player_map[playerid] = new Player(ip_address, port);
  93.     player_map[playerid]->socket.receive(player_map[playerid]->packet, player_map[playerid]->ip, player_map[playerid]->port);
  94.     std::string message;
  95.     player_map[playerid]->packet >> message;
  96.     player_map[playerid]->packet.clear();
  97.     if (message == "Connexion")
  98.     {
  99.         player_map[playerid]->packet << "Acceptée";
  100.         player_map[playerid]->socket.send(player_map[playerid]->packet, player_map[playerid]->ip, player_map[playerid]->port);
  101.         player_map[playerid]->packet.clear();
  102.     }
  103.     return true;
  104. }
  105.  
  106. PLUGIN_EXPORT bool PLUGIN_CALL OnPlayerDisconnect(int playerid, int reason)
  107. {
  108.     player_map[playerid]->packet << "disconnect";
  109.     player_map[playerid]->socket.send(player_map[playerid]->packet, player_map[playerid]->ip, player_map[playerid]->port);
  110.     player_map[playerid]->packet.clear();
  111.     player_map[playerid]->socket.receive(player_map[playerid]->packet, player_map[playerid]->ip, player_map[playerid]->port);
  112.     std::string message;
  113.     player_map[playerid]->packet >> message;
  114.     if (message == "okay")
  115.     {
  116.         delete player_map[playerid];
  117.         return true;
  118.     }
  119.     return false;
  120. }
  121.  
  122. // amx stuff
  123.  
  124. AMX_NATIVE_INFO natives[] =
  125. {
  126.     { "IsVirtualKeyPressed", IsVirtualKeyPressed_ },
  127.     { "GetMousePos", GetMousePos_ },
  128.     { "IsMouseButtonPressed", IsMouseButtonPressed_ },
  129.     { NULL, NULL }
  130. };
  131.  
  132. PLUGIN_EXPORT unsigned int PLUGIN_CALL Supports()
  133. {
  134.     return sampgdk::Supports() | SUPPORTS_PROCESS_TICK | SUPPORTS_AMX_NATIVES | SUPPORTS_VERSION;
  135. }
  136.  
  137. PLUGIN_EXPORT bool PLUGIN_CALL Load(void **ppData)
  138. {
  139.     sampgdk::logprintf("\t>> AllKeys plugin [ALPHA] loaded (build : 2.4.15)");
  140.     return sampgdk::Load(ppData);
  141. }
  142.  
  143. PLUGIN_EXPORT void PLUGIN_CALL Unload()
  144. {
  145.     sampgdk::logprintf("\tAllKeys plugin [ALPHA] unloaded !");
  146.     sampgdk::Unload();
  147. }
  148.  
  149. PLUGIN_EXPORT void PLUGIN_CALL ProcessTick()
  150. {
  151.     sampgdk::ProcessTick();
  152. }
  153.  
  154. PLUGIN_EXPORT int PLUGIN_CALL AmxLoad(AMX *amx)
  155. {
  156.     return amx_Register(amx, natives, -1);
  157. }
  158.  
  159. PLUGIN_EXPORT int PLUGIN_CALL AmxUnload(AMX *amx)
  160. {
  161.     return AMX_ERR_NONE;
  162. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement