Код:
	var Imported = Imported || {};
Imported.DKR_PastMessagesViewer = true;
var DKR = DKR || {};          
DKR.PastMessagesViewer = DKR.PastMessagesViewer || {}; 
DKR.PastMessagesViewer.version = 1.0;
//----------------------------------------------------------------------------
/*:
 * @plugindesc (v.1.0.0) Плагин предназначен для сохранения Сообщений и
 *  последующего их отображения - как отдельными окнами, так и общим текстом.
 * 
 * @target MZ
 * @author DarchanKaen
 *
 * @help
 *   DKR PastMessagesViewer
 * ----------------------------------------------------------------------------
 * ---Общая информация:
 * @help Плагин предназначен для сохранения Сообщений и
 *  последующего их отображения - как отдельными окнами, 
 *  так и общим текстом (для Прокрутки текста).
 *  Для корректной работы доступности Сообщений, используется переменная, 
 *  хранящая список Сообщений (по-умолчанию №8).
 * Для включения / отключения записи - используется соотв-я команда Скрипта!
 * ---Команды(в эвенте команда "Скрипт"):
 * DKR.PastMessagesViewer.saveMessagesToPast(isSave); - включить / выключить запись Сообщений; по-умолчанию отключена!.
 * DKR.PastMessagesViewer.getPastMessagesCount(); - получить кол-во записанных Сообщений.
 * DKR.PastMessagesViewer.setPastMessagesToVar(varId, name);  - записать в указанную переменную текста ВСЕХ Сообщений, или с заданным именем.
 * DKR.PastMessagesViewer.showPastMessage(pastMessageId); - показать окно конкретного Сообщения.
 * DKR.PastMessagesViewer.clear(); - очистить список Сообщений.
 * где:
 * isSave - true (нужно записывать Сообщений) или false (не нужно записывать Сообщения).
 * varId - номер переменной, в которую вывести текста и имя всех сообщений.
 * name - имя говорящего, если интересую Сообщений только одного Персонажа.
 *  Можно не указывать, тогда выводятся все записанные Сообщения.
 * pastMessageId - номер, по-порядку, конкретного сообщения; начинается с 1 и выводится окном.
 * ----------------------------------------------------------------------------
 *
 * @param toSavePastMessagesVarId
 * @type variable
 * @desc Номер переменной для сохранения списка Сообщений
 * @default 8
 *
 * @param nameEndSymbol
 * @type text
 * @desc Символ, следующий после имени
 * @default :
 *
 * @param textEndSymbols
 * @type text
 * @desc Символ, разделающий сообщения
 * @default ~~~
 *
 */
(() => {
	
//--------DATA
	const params = PluginManager.parameters('DKR_PastMessagesViewer');
	const NAME_END_MARK = params['nameEndSymbol'] || ':';
	const TEXT_END_MARK = params['textEndSymbols'] || '~~~';
	const PAST_MESSAGES_LIST_VAR_ID = Number(params['toSavePastMessagesVarId']) || 8;
	
	let isSaveMessagesToPast = false;
	let messageNumber = 0;
	let currentText = '';
	
	
//--------LOGIC
	const setPastMessagesInVar = (varId, targetName = 'NONE') => {
		let messagesUnitedList = $gameVariables.value(PAST_MESSAGES_LIST_VAR_ID) || [];
		let pastMessagesList = messagesUnitedList;
		let messagesStr = '';
		if('NONE' !== targetName){
			if(targetName.length >= 1){
				pastMessagesList = messagesUnitedList.filter( pastMessage => targetName === pastMessage.mParams[4]);
			}else{
				console.log('DKR.PastMessagesViewer_ERROR: pastMessageName length~' + targetName + '~ is less than 1 symbol!');
			}
		}
		for(let n = 0; n < pastMessagesList.length; n++){
			let currentMessageData = pastMessagesList[n];
			let currentMessageName = currentMessageData.mParams[4] + NAME_END_MARK + '\n';
			let currentMessageText = currentMessageData.mText;
			if(currentMessageName.length <= 2){
				currentMessageName = '';
			}
			let currentMessageNamedText = currentMessageName + currentMessageText + TEXT_END_MARK;
			messagesStr += currentMessageNamedText + '\n';
		}
		$gameVariables.setValue(varId, messagesStr);
	}
	
	const showPastMessageByIndex = (pastMessageId) => {
		let messagesUnitedList = $gameVariables.value(PAST_MESSAGES_LIST_VAR_ID) || [];
		pastMessageId -= 1;
		if(pastMessageId < 0){
			console.log('DKR.PastMessagesViewer_ERROR: pastMessageId~' + pastMessageId + '~ is less than zero!');
			return;
		}else if(pastMessageId >= messagesUnitedList.length){
			console.log('DKR.PastMessagesViewer_ERROR: pastMessageId~' + pastMessageId + '~ is greater than past messages count!');
			return;
		}
		let pastMessageData = messagesUnitedList[pastMessageId];
		let pastMessageParams = pastMessageData.mParams;
		let pastMessageText = pastMessageData.mText;
		showMessage(pastMessageParams, pastMessageText);
	}
	
	const showMessage = (params, text) => {
		$gameMessage.setFaceImage(params[0], params[1]);
		$gameMessage.setBackground(params[2]);
		$gameMessage.setPositionType(params[3]);
		$gameMessage.setSpeakerName(params[4]);
		$gameMessage.add(text);
	}
	
	const getPastMessagesLength = () => {
		let messagesUnitedList = $gameVariables.value(PAST_MESSAGES_LIST_VAR_ID) || [];
		return messagesUnitedList.length;
	}
//--------CHANGED CORE (ALIASES)
	DKR_ScrollableMessages_Game_Message_add = Game_Message.prototype.add;
	Game_Message.prototype.add = function(text) {
		DKR_ScrollableMessages_Game_Message_add.call(this, text);
		if(true === isSaveMessagesToPast){
			currentText += text + '\n';
		}
	};
	
	DKR_ScrollableMessages_Game_Interpreter_command101 = Game_Interpreter.prototype.command101;
	Game_Interpreter.prototype.command101 = function(params) {
		DKR_ScrollableMessages_Game_Interpreter_command101.call(this, params);
		if(true === isSaveMessagesToPast){
			let currentMessageData = { mNumber:messageNumber, mParams:params, mText:currentText };
			let messagesUnitedList = $gameVariables.value(PAST_MESSAGES_LIST_VAR_ID) || [];
			messagesUnitedList.push(currentMessageData);
			$gameVariables.setValue(PAST_MESSAGES_LIST_VAR_ID, messagesUnitedList);
			currentText = '';
			messageNumber++;
		}
	}
	
//--------COMMANDS	
	DKR.PastMessagesViewer.saveMessagesToPast = function(isSave){
		isSaveMessagesToPast = isSave;
	}
	
	DKR.PastMessagesViewer.getPastMessagesCount = function(){
		let pastMessagesCount = getPastMessagesLength();
		return pastMessagesCount;
	}
	
	DKR.PastMessagesViewer.setPastMessagesToVar = function(varId, name){
		setPastMessagesInVar(varId, name);
	}
	
	DKR.PastMessagesViewer.showPastMessage = function(pastMessageId){
		showPastMessageByIndex(pastMessageId);
	}
	
	DKR.PastMessagesViewer.clear = function(){
		messagesUnitedList = [];
		$gameVariables.setValue(PAST_MESSAGES_LIST_VAR_ID, messagesUnitedList);
		currentText = '';
		messageNumber = 0;
	}
	
	
})();
 
Социальные закладки