"""Current identity decoder only; no OS reads on import."""
class CharacterMemoryReader:
    @staticmethod
    def _value(reader,pointer,klass,shape):
        if reader.u64(pointer)!=klass:raise ValueError('현재 캐릭터 정보 객체가 변경되었습니다.')
        fields={field['name']:field['offset'] for field in shape['fields']}
        ident=reader.u64(pointer+fields['characterId'])
        name_pointer=reader.u64(pointer+fields['name'])
        name=reader.string(name_pointer)
        realm=reader.u32(pointer+fields['realmId'])
        if not ident or not isinstance(name,str) or not 1<=len(name)<=48 or any(ord(c)<32 for c in name):
            raise ValueError('현재 조작 캐릭터의 ID/이름이 아직 준비되지 않았습니다.')
        if reader.u64(pointer)!=klass or reader.u64(pointer+fields['characterId'])!=ident or reader.u64(pointer+fields['name'])!=name_pointer:
            raise ValueError('확인 중 캐릭터 정보가 변경되었습니다.')
        return dict(character_id=str(ident),name=name,realm_id=realm,source='client_memory',character_id_encoding='uint64_decimal')
