it's been a minute since i've touched odin, but if i recall they use a global map and counter for field objects in maplemap. the reason the characterids start at 30000 is because in odin, your characterid was your oid. since maplemap gets objects by oid, you could potentially have a characterid value thats the same value as an object like npc/mob/etc within the map. if that were to happen, then only 1 oid of that value can exist and would mess things up.
nexon splits these in to pools - npc pool, mob pool, reactor pool, etc. each pool contains a map with their oid so if any oid is the same across pools it wouldn't matter cause it'll only ever be checked from a specific map. this is the same as the client as well. nexon does not make your characterid your oid, a character class extends the creature class which constructs its own oid.
eventually maplemap's counter got set to a specific value i think? or characterids werent oids? i forget. but it was just an implementation issue with having an object counter mixed with characterid's loaded from the database stored in the same map.