Zu deinem hauptsächlichen Problem:
Sinn macht es, entweder über eine Datenbank oder per File zu lösen. Ich hatte es damals per File gelöst, da es zu diesem Zeitpunkt die sinnvollere und einfachere Methode für mich und meinen Kollegen Dentafa war, als es per Datenbank zu lösen.
Dabei sind wir es so angegangen, dass wir einen Ordner unter scriptfiles erstellt haben (Derby), in welchem all unsere .derby Datein enthalten waren. Zusätzlich gab es noch eine maplist.derby, in welche alle Derbydatein per Namen enthalten waren (da es ja ohne Plugin nicht möglich ist herrauszufinden, welche Datein innerhalb eines Verzeichnisses liegen). Hier könnte man auch auf eine statische Methode zurückgreifen wie z.B. ein Array im Skript mit den Namen, wir haben uns aber dadurch die Möglichkeit gegeben, während des Spielbetriebes neue Mapdatein hinzufügen zu können (was auch immer ganz nützlich war, auch beispielsweise wenn eine Map fehlerhaft war).
Innerhalb dieser Map wurden dann folgende Informationen gespeichert: Name der Map, Author, niedrigste Z - Koordinate (wobei später es glaube ich automatisiert abläufte), Spawns und Objekte. Dabei enthielt Zeile 1 immer die ersten drei Informationen, Zeile 2 - 21 die 20 Spawnpositionen und die restlichen Zeilen die Objektkoordinaten. Diese dann einfach per fread & while Schleife auslesen, und dann je nach Zeile den Zeilensatz anders splitten und die Informationen anders zuweisen.
Hoffe das war soweit verständlich, sollten noch Fragen bestehen mich einfach nochmal markieren.
Gruß