mirror of
https://github.com/BeamMP/BeamMP-Server.git
synced 2025-07-01 23:35:41 +00:00
Added lua GetIdentifiers
This commit is contained in:
parent
7410e31230
commit
f0abfcc0ef
@ -28,34 +28,36 @@ public:
|
|||||||
TVehicleDataLockPair GetAllCars();
|
TVehicleDataLockPair GetAllCars();
|
||||||
void SetName(const std::string& Name) { mName = Name; }
|
void SetName(const std::string& Name) { mName = Name; }
|
||||||
void SetRoles(const std::string& Role) { mRole = Role; }
|
void SetRoles(const std::string& Role) { mRole = Role; }
|
||||||
|
void AddIdentifier(const std::string& ID) { mIdentifiers.insert(ID); };
|
||||||
std::string GetCarData(int Ident);
|
std::string GetCarData(int Ident);
|
||||||
void SetUDPAddr(sockaddr_in Addr) { mUDPAddress = Addr; }
|
void SetUDPAddr(sockaddr_in Addr) { mUDPAddress = Addr; }
|
||||||
void SetDownSock(SOCKET CSock) { mSocket[1] = CSock; }
|
void SetDownSock(SOCKET CSock) { mSocket[1] = CSock; }
|
||||||
void SetTCPSock(SOCKET CSock) { mSocket[0] = CSock; }
|
void SetTCPSock(SOCKET CSock) { mSocket[0] = CSock; }
|
||||||
void SetStatus(int Status) { mStatus = Status; }
|
void SetStatus(int Status) { mStatus = Status; }
|
||||||
void DeleteCar(int Ident);
|
void DeleteCar(int Ident);
|
||||||
sockaddr_in GetUDPAddr() const { return mUDPAddress; }
|
[[nodiscard]] std::set<std::string> GetIdentifiers() const { return mIdentifiers; }
|
||||||
std::string GetRoles() const { return mRole; }
|
[[nodiscard]] sockaddr_in GetUDPAddr() const { return mUDPAddress; }
|
||||||
std::string GetName() const { return mName; }
|
[[nodiscard]] SOCKET GetDownSock() const { return mSocket[1]; }
|
||||||
SOCKET GetDownSock() const { return mSocket[1]; }
|
[[nodiscard]] SOCKET GetTCPSock() const { return mSocket[0]; }
|
||||||
SOCKET GetTCPSock() const { return mSocket[0]; }
|
[[nodiscard]] std::string GetRoles() const { return mRole; }
|
||||||
|
[[nodiscard]] std::string GetName() const { return mName; }
|
||||||
void SetID(int ID) { mID = ID; }
|
void SetID(int ID) { mID = ID; }
|
||||||
int GetOpenCarID() const;
|
[[nodiscard]] int GetOpenCarID() const;
|
||||||
int GetCarCount() const;
|
[[nodiscard]] int GetCarCount() const;
|
||||||
void ClearCars();
|
void ClearCars();
|
||||||
int GetStatus() const { return mStatus; }
|
[[nodiscard]] int GetStatus() const { return mStatus; }
|
||||||
int GetID() const { return mID; }
|
[[nodiscard]] int GetID() const { return mID; }
|
||||||
bool IsConnected() const { return mIsConnected; }
|
[[nodiscard]] bool IsConnected() const { return mIsConnected; }
|
||||||
bool IsSynced() const { return mIsSynced; }
|
[[nodiscard]] bool IsSynced() const { return mIsSynced; }
|
||||||
bool IsSyncing() const { return mIsSyncing; }
|
[[nodiscard]] bool IsSyncing() const { return mIsSyncing; }
|
||||||
bool IsGuest() const { return mIsGuest; }
|
[[nodiscard]] bool IsGuest() const { return mIsGuest; }
|
||||||
void SetIsGuest(bool NewIsGuest) { mIsGuest = NewIsGuest; }
|
void SetIsGuest(bool NewIsGuest) { mIsGuest = NewIsGuest; }
|
||||||
void SetIsSynced(bool NewIsSynced) { mIsSynced = NewIsSynced; }
|
void SetIsSynced(bool NewIsSynced) { mIsSynced = NewIsSynced; }
|
||||||
void SetIsSyncing(bool NewIsSyncing) { mIsSyncing = NewIsSyncing; }
|
void SetIsSyncing(bool NewIsSyncing) { mIsSyncing = NewIsSyncing; }
|
||||||
void EnqueueMissedPacketDuringSyncing(const std::string& Packet) { mMissedPacketsDuringSyncing.push(Packet); }
|
void EnqueueMissedPacketDuringSyncing(const std::string& Packet) { mMissedPacketsDuringSyncing.push(Packet); }
|
||||||
size_t MissedPacketQueueSize() const { return mMissedPacketsDuringSyncing.size(); }
|
[[nodiscard]] size_t MissedPacketQueueSize() const { return mMissedPacketsDuringSyncing.size(); }
|
||||||
void SetIsConnected(bool NewIsConnected) { mIsConnected = NewIsConnected; }
|
void SetIsConnected(bool NewIsConnected) { mIsConnected = NewIsConnected; }
|
||||||
TServer& Server() const;
|
[[nodiscard]] TServer& Server() const;
|
||||||
void UpdatePingTime();
|
void UpdatePingTime();
|
||||||
int SecondsSinceLastPing();
|
int SecondsSinceLastPing();
|
||||||
|
|
||||||
@ -65,6 +67,7 @@ private:
|
|||||||
bool mIsSynced = false;
|
bool mIsSynced = false;
|
||||||
bool mIsSyncing = false;
|
bool mIsSyncing = false;
|
||||||
std::queue<std::string> mMissedPacketsDuringSyncing;
|
std::queue<std::string> mMissedPacketsDuringSyncing;
|
||||||
|
std::set<std::string> mIdentifiers;
|
||||||
bool mIsGuest = false;
|
bool mIsGuest = false;
|
||||||
std::mutex mVehicleDataMutex;
|
std::mutex mVehicleDataMutex;
|
||||||
TSetOfVehicleData mVehicleData;
|
TSetOfVehicleData mVehicleData;
|
||||||
|
@ -60,9 +60,11 @@ void TClient::SetCarData(int Ident, const std::string& Data) {
|
|||||||
}
|
}
|
||||||
DeleteCar(Ident);
|
DeleteCar(Ident);
|
||||||
}
|
}
|
||||||
|
|
||||||
int TClient::GetCarCount() const {
|
int TClient::GetCarCount() const {
|
||||||
return int(mVehicleData.size());
|
return int(mVehicleData.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
TServer& TClient::Server() const {
|
TServer& TClient::Server() const {
|
||||||
return mServer;
|
return mServer;
|
||||||
}
|
}
|
||||||
|
@ -321,9 +321,30 @@ int lua_GetAllPlayers(lua_State* L) {
|
|||||||
return 0;
|
return 0;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
int lua_GetIdentifiers(lua_State* L){
|
||||||
|
if(lua_isnumber(L,1)){
|
||||||
|
auto MaybeClient = GetClient(Engine().Server(), int(lua_tonumber(L, 1)));
|
||||||
|
if (MaybeClient && !MaybeClient.value().expired()) {
|
||||||
|
auto IDs = MaybeClient.value().lock()->GetIdentifiers();
|
||||||
|
if(IDs.empty())
|
||||||
|
return 0;
|
||||||
|
lua_newtable(L);
|
||||||
|
for(const std::string& ID : IDs){
|
||||||
|
lua_pushstring(L, ID.substr(0,ID.find(':')).c_str());
|
||||||
|
lua_pushstring(L, ID.c_str());
|
||||||
|
lua_settable(L, -3);
|
||||||
|
}
|
||||||
|
}else
|
||||||
|
return 0;
|
||||||
|
}else{
|
||||||
|
SendError(Engine(), L, "lua_GetIdentifiers wrong arguments");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
int lua_GetCars(lua_State* L) {
|
int lua_GetCars(lua_State* L) {
|
||||||
int Args = lua_gettop(L);
|
if (lua_isnumber(L, 1)) {
|
||||||
if (Args > 0 && lua_isnumber(L, 1)) {
|
|
||||||
int ID = int(lua_tonumber(L, 1));
|
int ID = int(lua_tonumber(L, 1));
|
||||||
auto MaybeClient = GetClient(Engine().Server(), ID);
|
auto MaybeClient = GetClient(Engine().Server(), ID);
|
||||||
if (MaybeClient && !MaybeClient.value().expired()) {
|
if (MaybeClient && !MaybeClient.value().expired()) {
|
||||||
@ -344,7 +365,7 @@ int lua_GetCars(lua_State* L) {
|
|||||||
} else
|
} else
|
||||||
return 0;
|
return 0;
|
||||||
} else {
|
} else {
|
||||||
SendError(Engine(), L, ("GetPlayerVehicles not enough arguments"));
|
SendError(Engine(), L, ("GetPlayerVehicles wrong arguments"));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
@ -638,9 +659,11 @@ std::any CallFunction(TLuaFile* lua, const std::string& FuncName, std::shared_pt
|
|||||||
ClearStack(luaState);
|
ClearStack(luaState);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TLuaFile::SetPluginName(const std::string& Name) {
|
void TLuaFile::SetPluginName(const std::string& Name) {
|
||||||
mPluginName = Name;
|
mPluginName = Name;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TLuaFile::SetFileName(const std::string& Name) {
|
void TLuaFile::SetFileName(const std::string& Name) {
|
||||||
mFileName = Name;
|
mFileName = Name;
|
||||||
}
|
}
|
||||||
@ -648,6 +671,7 @@ void TLuaFile::SetFileName(const std::string& Name) {
|
|||||||
void TLuaFile::Load() {
|
void TLuaFile::Load() {
|
||||||
Assert(mLuaState);
|
Assert(mLuaState);
|
||||||
luaL_openlibs(mLuaState);
|
luaL_openlibs(mLuaState);
|
||||||
|
lua_register(mLuaState, "GetPlayerIdentifiers", lua_GetIdentifiers);
|
||||||
lua_register(mLuaState, "TriggerGlobalEvent", lua_TriggerEventG);
|
lua_register(mLuaState, "TriggerGlobalEvent", lua_TriggerEventG);
|
||||||
lua_register(mLuaState, "TriggerLocalEvent", lua_TriggerEventL);
|
lua_register(mLuaState, "TriggerLocalEvent", lua_TriggerEventL);
|
||||||
lua_register(mLuaState, "TriggerClientEvent", lua_RemoteEvent);
|
lua_register(mLuaState, "TriggerClientEvent", lua_RemoteEvent);
|
||||||
|
@ -8,10 +8,14 @@
|
|||||||
#include <any>
|
#include <any>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
|
||||||
|
#undef GetObject //Fixes Windows
|
||||||
|
|
||||||
#include "rapidjson/document.h"
|
#include "rapidjson/document.h"
|
||||||
#include "rapidjson/stringbuffer.h"
|
#include "rapidjson/stringbuffer.h"
|
||||||
#include "rapidjson/writer.h"
|
#include "rapidjson/writer.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
namespace json = rapidjson;
|
namespace json = rapidjson;
|
||||||
|
|
||||||
TServer::TServer(int argc, char** argv) {
|
TServer::TServer(int argc, char** argv) {
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
#include <Http.h>
|
#include <Http.h>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
|
||||||
|
#undef GetObject //Fixes Windows
|
||||||
|
|
||||||
#include "rapidjson/document.h"
|
#include "rapidjson/document.h"
|
||||||
#include "rapidjson/stringbuffer.h"
|
#include "rapidjson/stringbuffer.h"
|
||||||
#include "rapidjson/writer.h"
|
#include "rapidjson/writer.h"
|
||||||
@ -102,10 +104,15 @@ void TTCPServer::Authentication(SOCKET TCPSock) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (AuthResponse["username"].IsString() && AuthResponse["roles"].IsString() && AuthResponse["guest"].IsBool()) {
|
if (AuthResponse["username"].IsString() && AuthResponse["roles"].IsString()
|
||||||
|
&& AuthResponse["guest"].IsBool() && AuthResponse["identifiers"].IsArray()) {
|
||||||
|
|
||||||
Client->SetName(AuthResponse["username"].GetString());
|
Client->SetName(AuthResponse["username"].GetString());
|
||||||
Client->SetRoles(AuthResponse["roles"].GetString());
|
Client->SetRoles(AuthResponse["roles"].GetString());
|
||||||
Client->SetIsGuest(AuthResponse["guest"].GetBool());
|
Client->SetIsGuest(AuthResponse["guest"].GetBool());
|
||||||
|
for(const auto& ID : AuthResponse["identifiers"].GetArray()){
|
||||||
|
Client->AddIdentifier(ID.GetString());
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
ClientKick(*Client, "Invalid authentication data!");
|
ClientKick(*Client, "Invalid authentication data!");
|
||||||
return;
|
return;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user