
 Zitat von 
Eddman
					 
				 
				I know, Ich hatte den Code sehr simpel gehalten, da es mir erstmal nur darum geht zu verstehen wie ich überhaupt vorgehen muss und ich ein schnelles Beispiel bräuchte. Danach kümmere ich mich um die Performance 

 
	 
 Quellcode gleich ordentlich zu schreiben ist meist einfacher als diesen später umstrukturieren/umschreiben zu müssen. Vor allem weil man dann wieder Sachen übersieht/vergisst.
	
		
			
			
				
					
 Zitat von 
Eddman
					 
				 
				Ich denke ich würde einen Timer verwenden der jede Sekunde ausgeführt wird, aber was soll der Auslöser vom Timer sein? GM:PlayerSpawn() vielleicht?
			
		 
	 
 Ich erklär es dir am besten mit einem beispiel:
	PHP-Code:
	
local checkPlayers = {} // Tabelle in der Spieler eingetragen werden bei denen die Position genau überprüft werden soll
// grobe positionsbestimmung
timer.Create('checkPlayerPos1', 1000, 0, function() // timer der alle 1000 ms (also jede sekunde) ausgeführt wird
    for index, ply in pairs(player.GetAll()) do // alle spieler die am server sind durchgehen
        local plyPos = ply:GetPos() // auslesen der position des spielers
        if plyPos > Vector(100, 100, 100) and plyPos < Vector(200, 200, 200) then // befindet sich er spieler in der nähe des gewünschten punktes?
            checkPlayers[ply:SteamID64()] = ply // spieler in die tabelle eintragen
        elseif checkPlayers[ply:SteamID64()] ~= nil // spieler ist in der tabelle eingetragen, befindet sicher aber nicht mehr in der nähe des gewünschten punktes
            table.remove(checkPlayers, index) // spieler aus tabelle löschen
        end
    end
end)
local counter = 0
local playersInPos = {}
// genaue positionsbestimmung
timer.Create('checkPlayerPos2', 100, 0, function() // genauere positionsbestimmung, timer der öfter läuft, 100 ms sollten für diesen zweck ausreichen, think ist eigentlich sowieso nicht nötig da die position sicher nicht so genau bestimmt werden muss
    for index, ply in pairs(checkPlayers) do // tabelle checkPlayers durchlaufen
        local plyPos = ply:GetPos() // auslesen der position des spielers
        if plyPos > Vector(125, 125, 125) and plyPos < Vector(175, 175, 175) and playersInPos[ply:SteamID64()] ~= true then // befindet sich der spieler im vorgesehenen bereich?
            counter = counter + 1 // variable um 1 inkrementieren
            playersInPos[ply:SteamID64()] = true // zwischenspeichern das variable bei nächstem schleifendurchlauf nicht wieder inkrementiert wird
        else
            playersInPos[ply:SteamID64()] = false // spieler befindet sich nicht (mehr) im gewünschten bereich, zwischenspeicher löschen das variable erhöht wird wenn spieler den bereich wieder betritt
        end
    end
end) 
 Enthaltet vermutlich ein paar Fehler der Code da ich ihn nicht getestet habe.