Zuerst Generell:
In Gmod gibt es 3 Lua States
- Menu
- Client
- Server
Je nachdem in welchem State sich ein Script befindet hat es verschiedene Funktionen ( https://wiki.garrysmod.com farblich gekenzeichnet)
z.b.
gui.ShowConsole() | Menu heißt kann nur im Menu State ausgeführt werden
ents.Create( string class ) | Server nur der Server kann diese funktion benutzen
cam.Start( table dataTbl ) | Client nur der client kann sie benutzen
Nun zum suchen aller Spieler hol ich mir erst eine liste aller Server, die geht mit der funktion serverlist.Query diese ist jedoch nur Menu Side
also liegt es nah diese Script Menu Side zu schreiben. Dies hat sogar noch den Vorteil das ich sie in einer menu side Datei einfach includieren kann und sie dadurch geladen wird da Menu side nicht Spieler und ähnliches abrufen kann ist es dadurch möglich dies überall in gmod zu machen ohne C++ oder Bypasser.
Also auf gehts als nächstes kann ich mir nun die Spieler von einem Server holen mit serverlist.PlayerList und dort habe ich die Möglichkeit jedenNamen der verbundenen Spielern zu sehn. Nun muss ich nur noch überprüfen ob der Name der ist den suche und die Server IP ausgeben.
Diese methode funktioniert sogar bei Privaten Profilen!
concommand.Add( "Find_Player" , function( ply , cmd , args , str )
local name = str:lower( )
local ply = {}
if( name:len( ) < 1 ) then
print( "No name Pls Check" )
return
end
print( "searching for " .. str )
local query = {
GameDir = "garrysmod",
Type = "internet",
AppID = 4000,
Callback= function( _ping , server_name , desc , map , player , maxplayer , botplayer , pass , lastplayed , _ip , gm , workshopid )
if ( player > 0 ) then
serverlist.PlayerList( _ip , function( player )
for index , v in next, player do
if ( string.find( tostring( v.name ):lower( ), name) ) then
ply[#ply+1] = { ["ServerIp:"] = _ip , ["Name"] = v.name , ["ServerName"] = server_name }
end
end
end )
end
end,
Finished = function( )
print("----------------------" )
print( "Found:" )
PrintTable( ply )
print("----------------------" )
end,
}
serverlist.Query( query )
end )
Alles anzeigen
Installation:
- speichert den code in einer .txt
- bennent die txt in find_ply.lua um
- verschiebt sie nach steamapps\common\GarrysMod\garrysmod\lua\menu
- Öffnet menu.lua ( steamapps\common\GarrysMod\garrysmod\lua\menu\menu.lua ) und schriebt ans ende include( "find_ply.lua" )
- Speicher die Änderung
Use:
Find_Player *name*
BSP: Find_Player K03