kone
sub_icon

소미소프트

추가 변경) Evening Survivor 편지 오브젝트 오류(終了, 종료)

2026-01-20 16:18:11
피드백
조회 21356 · 좋아요 31


이 스크립트는 RPG Maker MV에서 특정 이벤트 ID를 가진 이벤트가 어느 맵에 존재하는지 검색 하는 코드입니다.

주로 전역 변수 공통 이벤트 안에서 사용되며, 변수 53번에 저장된 이벤트 ID를 기준으로 $dataIntel001 (또는 다른 $dataXXX 맵 데이터) 안을 순차 탐색해서 해당 ID를 가진 이벤트를 찾는 로직입니다.

코드 전체 분석 (줄 단위로 쉽게 설명)

JavaScript




var Scene = "Intel001";                     // 검색 대상 맵 데이터 이름 (여기서는 Intel001)
var FileName = window["$data" + Scene];     // $dataIntel001 을 동적으로 가져옴
var Event = $gameVariables._data[53]        // 변수 53번에 저장된 이벤트 ID를 가져옴



→ 검색 대상 맵 데이터와 찾고자 하는 이벤트 ID 준비

JavaScript




for (i = 1; i <= 1000; i++) {               // 이벤트 ID 1번부터 1000번까지 순차 탐색
    if (FileName[i]) {                      // 해당 ID에 이벤트 데이터가 존재하면
        // ID가 존재하므로 이벤트명(또는 실제로는 이벤트 객체)을 비교
        if (FileName[i].event == Event) {   // ★ 핵심 비교: 이벤트의 .event 값이 변수 53번과 같으면
            console.log('이벤트' + Event + '발견!:' + i);
            $gameVariables._data[54] = i;   // 발견한 이벤트가 있는 맵의 이벤트 ID를 변수 54번에 저장
            // $gameVariables._data[54] += 1;   ← 이 줄은 주석 처리되어 있음 (사용 안 함)
            break;                          // 찾았으니 루프 종료
        }
    } else {
        console.log('ID切れ');              // 더 이상 이벤트가 없으면 종료
        break;
    }
}



이 코드가 하는 일 요약 (한 문장)

“변수 53번에 저장된 이벤트 ID를 $dataIntel001 맵 데이터 안에서 찾아서, 그 이벤트가 존재하는 이벤트 번호(ID)를 변수 54번에 저장한다.”

실제 사용 예시 (추정되는 용도)

  1. 변수 53번에 특정 이벤트 ID 를 넣어둠 (예: 15)

  2. 이 스크립트를 실행 → $dataIntel001 맵(인텔리전스 맵? 정보 수집 맵?)에서 이벤트 ID가 15인 이벤트가 몇 번 이벤트인지 찾아서 변수 54번에 저장

  3. 이후 다른 이벤트에서 변수 54번 값을 읽어 그 이벤트로 강제 이동 하거나 그 이벤트를 호출 하거나 특정 처리 를 함

정보 수집·퀘스트·히든 이벤트 탐색 시스템에서 자주 쓰이는 패턴입니다.

주의점 & 개선 포인트

  1. FileName[i].event 비교가 비표준

    • MV에서 이벤트 객체는 .name 이나 .note 를 주로 쓰는데, .event 라는 속성은 기본적으로 없음 → 커스텀으로 추가한 속성일 가능성 높음 (혹은 오타/잘못된 속성일 수 있음 → 실제로는 FileName[i].name === Event 일 가능성도)

  2. for 루프 1~1000 은 비효율적

    • 맵에 이벤트가 1000개 넘을 일 거의 없음 → 500 이하로 줄여도 충분

  3. break 잘 사용했음

    • 찾으면 바로 종료 → 성능상 문제 없음

  4. console.log 는 테스트용

    • 배포 시에는 지우거나 주석 처리하는 게 좋음

더 안전하고 깔끔한 버전 제안 (필요 시 사용)

JavaScript




var targetEventId = $gameVariables.value(53);  // 찾고자 하는 이벤트 ID
var mapData = $dataIntel001;                   // 검색 대상 맵 데이터

for (var i = 1; i < mapData.events.length; i++) {
    var event = mapData.events[i];
    if (event && event.id === targetEventId) {  // .id로 비교 (표준 속성)
        $gameVariables.setValue(54, i);         // 발견된 이벤트 번호 저장
        console.log("이벤트 ID " + targetEventId + " 발견: 이벤트 번호 " + i);
        break;
    }
}



이 버전이 더 안전합니다 (기본 속성 .id 사용).

필요하시면

  • “찾은 이벤트 번호로 그 이벤트가 있는 맵으로 이동하는 코드”

  • “여러 맵에서 동시에 검색하는 버전” 등 확장도 바로 만들어 드릴게요! 😊

//



이 스크립트는 RPG Maker MV에서 특정 맵 데이터($dataIntel001)에서 이벤트 ID를 기반으로 대사(텍스트)를 읽어와 메시지창에 표시 하는 코드입니다.

이전 스크립트(이벤트 검색)에서 찾은 이벤트 ID(변수 54번)를 사용해 해당 이벤트의 이름 텍스트 를 추출해서 대화창 으로 출력하는 후속 처리입니다.

코드 전체 분석 (줄 단위로 쉽게 설명)

JavaScript




var Scene = "Intel001";                          // 검색 대상 맵 데이터 이름 (Intel001)
var Id = $gameVariables._data[54];               // 변수 54번 = 이전 스크립트에서 찾은 이벤트 ID
var FileName = window["$data" + Scene];          // $dataIntel001 데이터를 가져옴
var CharaName = FileName[Id].name;               // 해당 이벤트의 'name' 속성 (캐릭터 이름)
var Text = FileName[Id].text;                    // 해당 이벤트의 'text' 속성 (대사 내용)
var Mode = 0;                                    // 기본 배경 모드 (0 = 일반)



→ 변수 54번에 저장된 ID로 $dataIntel001 맵의 해당 이벤트 데이터를 읽음

JavaScript




if (FileName[Id].event) {                        // 만약 이벤트에 .event 속성이 있으면
    Mode = 1;                                    // 배경 모드를 1 (특수 모드, 예: 어두운 배경 등)로 변경
}



→ .event 속성이 존재하면 배경 모드를 변경 (커스텀 설정으로 보임)

JavaScript




if (Text != "終了") {                            // 텍스트가 "終了" (종료)가 아닐 때
    // 텍스트 내용이 존재하는 경우
    if (Text) {
        if (CharaName) {                         // 캐릭터 이름이 있으면
            $gameMessage.setBackground(Mode);    // 배경 모드 적용
            $gameMessage.setSpeakerName(" " + FileName[Id].name + " "); // 이름 양쪽에 공백 넣어 표시
            $gameMessage.add(Text);              // 대사 추가
            this.setWaitMode('message');         // 메시지 대기 모드 설정 (다음 명령어까지 기다림)
        } else {                                 // 이름이 없으면 이름 없이 대사만
            $gameMessage.setBackground(Mode);
            $gameMessage.add(Text);
            this.setWaitMode('message');
        }
    }
}



→ 텍스트가 "終了"가 아니면 → 대화창에 이름 + 대사 표시

JavaScript




// 텍스트가 "終了"였을 경우
else {
    $gameSwitches._data[15] = true;              // 스위치 15번 ON (종료 플래그)
}



→ 텍스트가 "終了"이면 → 스위치 15번을 켜서 종료 처리

이 코드가 하는 일 요약 (한 문장)

“변수 54번에 저장된 이벤트 ID를 $dataIntel001 맵에서 찾아, 그 이벤트의 이름과 텍스트를 읽어와 메시지창에 표시한다. 텍스트가 '終了'이면 스위치 15번을 켜고 종료한다.”

실제 사용 예시 (추정되는 전체 흐름)

  1. 이전 스크립트 → 변수 53번에 찾고 싶은 이벤트 ID 입력 → 변수 54번에 실제 이벤트 번호 저장

  2. 이 스크립트 실행 → 변수 54번의 이벤트에서 이름과 대사를 읽어 대화창 출력

  3. 대사가 "終了"이면 → 스위치 15 ON → 다음 이벤트로 진행 (예: 정보 수집 종료, 퀘스트 완료 등)

정보 수집·도감·히든 이벤트·NPC 대화 로그 시스템에서 자주 쓰이는 패턴

특징 & 주의점

  • 커스텀 데이터 구조

    • $dataIntel001.events[i].name

    • $dataIntel001.events[i].text

    • $dataIntel001.events[i].event (존재 여부 체크용) → 기본 MV 데이터 구조가 아님 → 데이터베이스나 외부 툴로 미리 만들어야 함

  • 배경 모드(Mode)

    • Mode=1 → $gameMessage.setBackground(1) → 어두운 배경이나 특수 창 (RPG Maker 기본)

  • 이름 표시 시 공백 추가

    • " " + 이름 + " " → 이름 양쪽에 공백 넣어 보기 좋게 함

  • "終了" 문자열

    • 텍스트가 정확히 "終了"이면 종료 처리 → 일본어로 되어 있으니 한국어 프로젝트라면 "종료"로 바꿔야 함

개선 제안 (필요 시 사용)

JavaScript




var targetId = $gameVariables.value(54);
var mapData = $dataIntel001;

if (mapData && mapData.events && mapData.events[targetId]) {
    var eventData = mapData.events[targetId];
    var charaName = eventData.name || "";
    var text = eventData.text || "";

    if (text !== "종료") {  // 한국어로 변경
        $gameMessage.setBackground(eventData.event ? 1 : 0);
        if (charaName) {
            $gameMessage.setSpeakerName(" " + charaName + " ");
        }
        $gameMessage.add(text);
        this.setWaitMode('message');
    } else {
        $gameSwitches.setValue(15, true);
    }
} else {
    console.log("이벤트 ID " + targetId + " 데이터 없음");
}



이 버전이 더 안전하고 한국어 호환됩니다.

필요하시면

  • “텍스트가 여러 줄일 때 처리”

  • “이름이 없을 때 기본 이름 표시”

  • “스위치 15번 ON 후 다음 이벤트 호출” 등 추가 기능도 만들어 드릴 수 있어요. 말씀해주세요! 😊


//


終了 텍스트가 없어서 끝까지 조회하면서 터지는 오류임

해당 스크립트를 종료로 바꾸거나,

그냥 종료로 번역된 텍스트를 終了 미번으로 바꾸면 해결됨


아래 파일은 미번으로 바꿈


https://kone.gg/s/somisoft/cVQJ5N-KbsU3X7vcagZ5Sb


aHR0cHM6Ly9raW8uYWMvYy9haF9JNWg1UVdKR1RUN3ZWbVIzalNi


\data\text


편지 오브젝트 조회시 문제생기는 사람들은 이거 덮어씌워


aHR0cHM6Ly9raW8uYWMvYy9jeDBKdXc2UHNUUlViNzczUzczalNi


찾아보니까 더 있어서 일괄 변경했음


폴더를


\data


여기에 넣으면 됨

31
댓글 9개
댓글 쓰기
이거 말고도 지하주차장 에서 식시귀 처음 조우 이벤트에서도 똑같은 현상 나오더라
01.20
추가했음
01.20
01.20
01.20
고수
01.21
01.23
2026-02-22 00:12:01 이후 번역에 포함
0 / 500
[손번역] 대리 업로드 Desert Stalker v0.20.3.1
번역
두파루파
05.27 4104 39
90일) RJ111049 Prison Fantasia v1.2.7z
복구
ㅇㅇ
05.27 1935 15
[구매보급] [자체번역] RJ01120129 로큰롤라이즈 (스캇/방뇨/료나/하드? ) 스캇은 선택지있음
번역
TSN
05.27 3534 21
[Dokuneko Noil]회사 송년회
동인
ㅇㅇ
05.27 6588 42
[Dokuneko Noil] 소라이 사키에게 나쁜 짓을 하는 이야기 【전편+후편】
동인
ㅇㅇ
05.27 5354 39
N.T.Resort에 오신 것을 환영합니다 게임 시스템 개요 & 스틸 장면 소개
정보
ㅇㅇ
05.27 2774 18
AI) 작가 팬네임 bnlhbmtvc2FraQ== / 캐릭터 이름 모리아 루루카 / 픽시브 140779512
영상
kawineo
05.27 9490 42
[Riboshika] 우리 누나는 세상에서 제일 강하고 멋있어.
동인
ㅇㅇ
05.27 9233 50
[미번] RJ01537503 유혹의 온천 여행 ~이성과 배덕의 1박 2일~ ver.2.0
미번
hdys1020
05.27 3977 26
[그냥복구] RJ146914 魔導士アルル 천재마도사 아루루
복구
meruna00
05.27 4966 32
ai ntr) 키타가와 마린 남친 몰래 코스프레섹스
야짤
ezmood
05.27 4601 38
[Miyahara Ayumu] 동정을 깨우쳐주는 유부녀
동인
1uF
05.27 6962 28
구매 보급 / 버전업 / 자체 번역) 만차율 300% 3 Append 1~3 ver.26.01.24 (공략집 추가)
번역
딸ㄱ기맛
05.27 11247 62
메○가키 스트리머와 오프파코 → 건방진 멘헤라가 내 고기오나홀로 타락할때까지
소리
카치마치
05.27 3200 25
(요청복구) 잠입! 의혹의 세뇌 SEX 컬트 종교 (潜入!疑惑の洗脳SEXカルト宗教) v250122
복구
redive
05.27 6579 29
alpha-라피아 애널자위
동인
k8625
05.27 7081 27
달콤달콤 소악마 3 ~초밀착 0거리 괴롭힘~
소리
카치마치
05.27 2072 23
검은파스타-애널병기
동인
k8625
05.27 6525 19
[구매보급][번역요청] RJ01577390 突然同居した従姉妹はVTuberになるらしい-俺だけが知る秘密の素顔-
미번
duck1028
05.27 4108 32
검은파스타-아나르왕국
동인
k8625
05.27 6163 28
[AI/이미지번역] 내숭쟁이 변태 시스터 아리아와 폭유 H하는 RPG
번역
미식이네
05.27 14798 83
TU1EdHlwZTg3 모음집 업데이트 알림
영상
hannanas
05.27 6602 25
스파이더그웬의 공식 설정 사건
동인
k8625
05.27 7110 16
[구매보급] 전자동 기계 조교 프로그램 Secretary [v1.1 의상 추가]
영상
밤꽃향기 그윽한 어느 여름날..
05.27 8396 59
[후원보급]bmFqYXI 텐카
영상
pangya
05.27 7247 90
[한글자막] 어째선지 같은 반 갸루들한테 열렬한 구애를 계속해서 받고 있는데, 나한텐 이미 좋아하는 애가 있다고!💢 (1편)
영상
실루엣21
05.27 19284 183
너스콜(RJ01557970) 복구 및 만차율3(RJ01347095) 복구
복구
그냥그냥
05.27 7489 38
(스압)Eonsang작가모음
동인
k8625
05.27 14987 109
[구매보급] [자체번역] RJ01117570 에로 검열관(the censor) 26.05.27
번역
gkqisq
05.27 20215 106
[구매보급/최면음성] 안노운 히프노 ~괜찮아, 내 목소리에 맡겨~
소리
rocoa
05.27 3419 31