Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <SFML\Network.hpp>
- #include <SFML\Window.hpp>
- #include <sampgdk\a_samp.h>
- #include "SDK\amx\amx.h"
- #include "SDK\plugincommon.h"
- #include <sampgdk\core.h>
- #include <map>
- struct Player
- {
- Player(std::string ip, int port) : ip(ip), port(port) {}
- sf::Packet packet;
- sf::UdpSocket socket;
- sf::IpAddress ip;
- unsigned short port;
- };
- std::map<int, Player*> player_map;
- #define AMX_DECLARE_NATIVE(native) \
- cell AMX_NATIVE_CALL native(AMX* amx, cell* params)
- // native IsVirtualKeyPressed(playerid, Key:key);
- AMX_DECLARE_NATIVE(IsVirtualKeyPressed_)
- {
- int playerid = params[1];
- player_map[playerid]->packet << "isKeyPressed" << params[2];
- player_map[playerid]->socket.send(player_map[playerid]->packet, player_map[playerid]->ip, player_map[playerid]->port);
- player_map[playerid]->packet.clear();
- sf::IpAddress tmpip;
- unsigned short tmpport;
- player_map[playerid]->socket.receive(player_map[playerid]->packet, tmpip, tmpport);
- bool pressed(false);
- player_map[playerid]->packet >> pressed;
- player_map[playerid]->packet.clear();
- return pressed;
- }
- // native GetMousePos(playerid, &x, &y);
- AMX_DECLARE_NATIVE(GetMousePos_)
- {
- int playerid = params[1];
- player_map[playerid]->packet << "getMousePos";
- player_map[playerid]->socket.send(player_map[playerid]->packet, player_map[playerid]->ip, player_map[playerid]->port);
- player_map[playerid]->packet.clear();
- sf::IpAddress tmpip;
- unsigned short tmpport;
- player_map[playerid]->socket.receive(player_map[playerid]->packet, tmpip, tmpport);
- cell *x(nullptr), *y(nullptr);
- amx_GetAddr(amx, params[2], &x);
- amx_GetAddr(amx, params[3], &y);
- player_map[playerid]->packet >> *x >> *y;
- player_map[playerid]->packet.clear();
- return true;
- }
- // native IsMouseButtonPressed(playerid, Button:button);
- AMX_DECLARE_NATIVE(IsMouseButtonPressed_)
- {
- int playerid = params[1];
- player_map[playerid]->packet << "isMouseButtonPressed" << params[2];
- player_map[playerid]->socket.send(player_map[playerid]->packet, player_map[playerid]->ip, player_map[playerid]->port);
- player_map[playerid]->packet.clear();
- sf::IpAddress tmpip;
- unsigned short tmpport;
- player_map[playerid]->socket.receive(player_map[playerid]->packet, tmpip, tmpport);
- bool pressed(false);
- player_map[playerid]->packet >> pressed;
- player_map[playerid]->packet.clear();
- return pressed;
- }
- // callbacks
- PLUGIN_EXPORT bool PLUGIN_CALL OnIncomingConnection(int playerid, const char *ip_address, int port)
- {
- player_map[playerid] = new Player(ip_address, port);
- player_map[playerid]->socket.receive(player_map[playerid]->packet, player_map[playerid]->ip, player_map[playerid]->port);
- std::string message;
- player_map[playerid]->packet >> message;
- player_map[playerid]->packet.clear();
- if (message == "Connexion")
- {
- player_map[playerid]->packet << "Acceptée";
- player_map[playerid]->socket.send(player_map[playerid]->packet, player_map[playerid]->ip, player_map[playerid]->port);
- player_map[playerid]->packet.clear();
- }
- return true;
- }
- PLUGIN_EXPORT bool PLUGIN_CALL OnPlayerDisconnect(int playerid, int reason)
- {
- player_map[playerid]->packet << "disconnect";
- player_map[playerid]->socket.send(player_map[playerid]->packet, player_map[playerid]->ip, player_map[playerid]->port);
- player_map[playerid]->packet.clear();
- player_map[playerid]->socket.receive(player_map[playerid]->packet, player_map[playerid]->ip, player_map[playerid]->port);
- std::string message;
- player_map[playerid]->packet >> message;
- if (message == "okay")
- {
- delete player_map[playerid];
- return true;
- }
- return false;
- }
- // amx stuff
- AMX_NATIVE_INFO natives[] =
- {
- { "IsVirtualKeyPressed", IsVirtualKeyPressed_ },
- { "GetMousePos", GetMousePos_ },
- { "IsMouseButtonPressed", IsMouseButtonPressed_ },
- { NULL, NULL }
- };
- PLUGIN_EXPORT unsigned int PLUGIN_CALL Supports()
- {
- return sampgdk::Supports() | SUPPORTS_PROCESS_TICK | SUPPORTS_AMX_NATIVES | SUPPORTS_VERSION;
- }
- PLUGIN_EXPORT bool PLUGIN_CALL Load(void **ppData)
- {
- sampgdk::logprintf("\t>> AllKeys plugin [ALPHA] loaded (build : 2.4.15)");
- return sampgdk::Load(ppData);
- }
- PLUGIN_EXPORT void PLUGIN_CALL Unload()
- {
- sampgdk::logprintf("\tAllKeys plugin [ALPHA] unloaded !");
- sampgdk::Unload();
- }
- PLUGIN_EXPORT void PLUGIN_CALL ProcessTick()
- {
- sampgdk::ProcessTick();
- }
- PLUGIN_EXPORT int PLUGIN_CALL AmxLoad(AMX *amx)
- {
- return amx_Register(amx, natives, -1);
- }
- PLUGIN_EXPORT int PLUGIN_CALL AmxUnload(AMX *amx)
- {
- return AMX_ERR_NONE;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement