이 스크립트는 RPG Maker MV에서 특정 이벤트 ID를 가진 이벤트가 어느 맵에 존재하는지 검색 하는 코드입니다.
주로 전역 변수 나 공통 이벤트 안에서 사용되며, 변수 53번에 저장된 이벤트 ID를 기준으로 $dataIntel001 (또는 다른 $dataXXX 맵 데이터) 안을 순차 탐색해서 해당 ID를 가진 이벤트를 찾는 로직입니다.
var Scene = "Intel001"; // 검색 대상 맵 데이터 이름 (여기서는 Intel001)
var FileName = window["$data" + Scene]; // $dataIntel001 을 동적으로 가져옴
var Event = $gameVariables._data[53] // 변수 53번에 저장된 이벤트 ID를 가져옴→ 검색 대상 맵 데이터와 찾고자 하는 이벤트 ID 준비
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번에 저장한다.”
→ 정보 수집·퀘스트·히든 이벤트 탐색 시스템에서 자주 쓰이는 패턴입니다.
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번)를 사용해 해당 이벤트의 이름 과 텍스트 를 추출해서 대화창 으로 출력하는 후속 처리입니다.
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 맵의 해당 이벤트 데이터를 읽음
if (FileName[Id].event) { // 만약 이벤트에 .event 속성이 있으면
Mode = 1; // 배경 모드를 1 (특수 모드, 예: 어두운 배경 등)로 변경
}→ .event 속성이 존재하면 배경 모드를 변경 (커스텀 설정으로 보임)
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');
}
}
}→ 텍스트가 "終了"가 아니면 → 대화창에 이름 + 대사 표시
// 텍스트가 "終了"였을 경우
else {
$gameSwitches._data[15] = true; // 스위치 15번 ON (종료 플래그)
}→ 텍스트가 "終了"이면 → 스위치 15번을 켜서 종료 처리
“변수 54번에 저장된 이벤트 ID를 $dataIntel001 맵에서 찾아, 그 이벤트의 이름과 텍스트를 읽어와 메시지창에 표시한다. 텍스트가 '終了'이면 스위치 15번을 켜고 종료한다.”
→ 정보 수집·도감·히든 이벤트·NPC 대화 로그 시스템에서 자주 쓰이는 패턴
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 + " 데이터 없음");
}이 버전이 더 안전하고 한국어 호환됩니다.
필요하시면
//
終了 텍스트가 없어서 끝까지 조회하면서 터지는 오류임
해당 스크립트를 종료로 바꾸거나,
그냥 종료로 번역된 텍스트를 終了 미번으로 바꾸면 해결됨
아래 파일은 미번으로 바꿈
https://kone.gg/s/somisoft/cVQJ5N-KbsU3X7vcagZ5Sb
aHR0cHM6Ly9raW8uYWMvYy9haF9JNWg1UVdKR1RUN3ZWbVIzalNi
\data\text
편지 오브젝트 조회시 문제생기는 사람들은 이거 덮어씌워
aHR0cHM6Ly9raW8uYWMvYy9jeDBKdXc2UHNUUlViNzczUzczalNi
찾아보니까 더 있어서 일괄 변경했음
폴더를
\data
여기에 넣으면 됨
