Korrigier mich, wenn ich falsch liege, aber mit "you = ent_next(you);" rufst Du die Entity auf, die in der Liste der Engine steht, unabhängig davon, ob sie im Scanbereich liegt oder nicht, und damit hast Du das Scannen bereits überflüssig gemacht. Dann ist sparender, wenn Du direkt die Liste der Entities durchgehst, und immer, wenn er die Id des Gegners hat (z.B: die Roten haben die Id 1 und die Blauen die Id 2), dann vergleichst Du den Abstand.

Den Vergleich des Abstandes nimmst Du über eine Variable vor, die Du jeweils am Anfang jedes Durchgangs auf einen hohen Wert setzt. Wenn Du dann über ent_next einen Gegner gefunden hast, vergleichst Du seinen Abstand zu dem hohen abstand. Wenn er niedriger ist, wird der Abstand in die Variable kopiert und ist von nun an der Richtwert. Von dem gefundenen Gegner speicherst Du den Handle in einem Skill Deiner Entity.
Dann gehst in der Liste weiter, triffst Du wieder auf einen Gegner, vergleichst Du wieder dessen Abstand mit dem in der Variablen gespeicherten Wert, ist er niedriger, dann ersetzt Du den im Skill gespeicherten Handle durch den Handle dieses Gegners und so weiter.
Das findet in der Schleife "while(you != NULL)" statt.
Wird you == NULL, wird die Schleife verlassen.
Und im Skill ist der Handle des Gegners mit dem geringsten Abstand übrig geblieben,den Du nun über ptr_for_handle "ins Visier nehmen" kannst.