#include "StarUniverseServerLuaBindings.hpp" #include "StarJsonExtra.hpp" #include "StarLuaGameConverters.hpp" #include "StarUniverseServer.hpp" namespace Star { LuaCallbacks LuaBindings::makeUniverseServerCallbacks(UniverseServer* universe) { LuaCallbacks callbacks; callbacks.registerCallbackWithSignature>("clientIds", bind(UniverseServerCallbacks::clientIds, universe)); callbacks.registerCallbackWithSignature("numberOfClients", bind(UniverseServerCallbacks::numberOfClients, universe)); callbacks.registerCallbackWithSignature("isConnectedClient", bind(UniverseServerCallbacks::isConnectedClient, universe, _1)); callbacks.registerCallbackWithSignature("clientNick", bind(UniverseServerCallbacks::clientNick, universe, _1)); callbacks.registerCallbackWithSignature, String>("findNick", bind(UniverseServerCallbacks::findNick, universe, _1)); callbacks.registerCallbackWithSignature("adminBroadcast", bind(UniverseServerCallbacks::adminBroadcast, universe, _1)); callbacks.registerCallbackWithSignature("adminWhisper", bind(UniverseServerCallbacks::adminWhisper, universe, _1, _2)); callbacks.registerCallbackWithSignature("isAdmin", bind(UniverseServerCallbacks::isAdmin, universe, _1)); callbacks.registerCallbackWithSignature("isPvp", bind(UniverseServerCallbacks::isPvp, universe, _1)); callbacks.registerCallbackWithSignature("setPvp", bind(UniverseServerCallbacks::setPvp, universe, _1, _2)); callbacks.registerCallbackWithSignature("isWorldActive", bind(UniverseServerCallbacks::isWorldActive, universe, _1)); callbacks.registerCallbackWithSignature("activeWorlds", bind(UniverseServerCallbacks::activeWorlds, universe)); callbacks.registerCallbackWithSignature, String, String, LuaVariadic>("sendWorldMessage", bind(UniverseServerCallbacks::sendWorldMessage, universe, _1, _2, _3)); callbacks.registerCallbackWithSignature("sendPacket", bind(UniverseServerCallbacks::sendPacket, universe, _1, _2, _3)); return callbacks; } // Gets a list of client ids // // @return A list of numerical client IDs. List LuaBindings::UniverseServerCallbacks::clientIds(UniverseServer* universe) { return universe->clientIds(); } // Gets the number of logged in clients // // @return An integer containing the number of logged in clients size_t LuaBindings::UniverseServerCallbacks::numberOfClients(UniverseServer* universe) { return universe->numberOfClients(); } // Returns whether or not the provided client ID is currently connected // // @param clientId the client ID in question // @return A bool that is true if the client is connected and false otherwise bool LuaBindings::UniverseServerCallbacks::isConnectedClient(UniverseServer* universe, ConnectionId arg1) { return universe->isConnectedClient(arg1); } // Returns the nickname for the given client ID // // @param clientId the client ID in question // @return A string containing the nickname of the given client String LuaBindings::UniverseServerCallbacks::clientNick(UniverseServer* universe, ConnectionId arg1) { return universe->clientNick(arg1); } // Returns the client ID for the given nick // // @param nick the nickname of the client to search for // @return An integer containing the clientID of the nick in question Maybe LuaBindings::UniverseServerCallbacks::findNick(UniverseServer* universe, String const& arg1) { return universe->findNick(arg1); } // Sends a message to all logged in clients // // @param message the message to broadcast // @return nil void LuaBindings::UniverseServerCallbacks::adminBroadcast(UniverseServer* universe, String const& arg1) { universe->adminBroadcast(arg1); } // Sends a message to a specific client // // @param clientId the client id to whisper // @param message the message to whisper // @return nil void LuaBindings::UniverseServerCallbacks::adminWhisper(UniverseServer* universe, ConnectionId arg1, String const& arg2) { ConnectionId client = arg1; String message = arg2; universe->adminWhisper(client, message); } // Returns whether or not a specific client is flagged as an admin // // @param clientId the client id to check // @return a boolean containing true if the client is an admin, false otherwise bool LuaBindings::UniverseServerCallbacks::isAdmin(UniverseServer* universe, ConnectionId arg1) { return universe->isAdmin(arg1); } // Returns whether or not a specific client is flagged as pvp // // @param clientId the client id to check // @return a boolean containing true if the client is flagged as pvp, false // otherwise bool LuaBindings::UniverseServerCallbacks::isPvp(UniverseServer* universe, ConnectionId arg1) { return universe->isPvp(arg1); } // Set (or unset) the pvp status of a specific user // // @param clientId the client id to check // @param setPvp set pvp status to this bool, defaults to true // @return nil void LuaBindings::UniverseServerCallbacks::setPvp(UniverseServer* universe, ConnectionId arg1, Maybe arg2) { ConnectionId client = arg1; bool setPvpTo = arg2.value(true); universe->setPvp(client, setPvpTo); } bool LuaBindings::UniverseServerCallbacks::isWorldActive(UniverseServer* universe, String const& worldId) { return universe->isWorldActive(parseWorldId(worldId)); } StringList LuaBindings::UniverseServerCallbacks::activeWorlds(UniverseServer* universe) { StringList worlds; for (WorldId& world : universe->activeWorlds()) worlds.append(printWorldId(world)); return worlds; } RpcThreadPromise LuaBindings::UniverseServerCallbacks::sendWorldMessage(UniverseServer* universe, String const& worldId, String const& message, LuaVariadic args) { return universe->sendWorldMessage(parseWorldId(worldId), message, JsonArray::from(std::move(args))); } void LuaBindings::UniverseServerCallbacks::sendPacket(UniverseServer* universe, ConnectionId clientId, String const& packetTypeName, Json const& args) { auto packetType = PacketTypeNames.getLeft(packetTypeName); auto packet = createPacket(packetType, args); universe->sendPacket(clientId, packet); } }