CBR_evRecos = null; DataManager._databaseFiles.push({ name: "CBR_evRecos", src: "CBR_eventList.json" }); (function () { Scene_Menu.prototype.commandEv_rec = function () { SceneManager.push(Scene_Ev_rec); }; function Scene_Ev_rec() { this.initialize(...arguments); } Scene_Ev_rec.prototype = Object.create(Scene_MenuBase.prototype); Scene_Ev_rec.prototype.constructor = Scene_Ev_rec; Scene_Ev_rec.prototype.initialize = function () { Scene_MenuBase.prototype.initialize.call(this); }; Scene_Ev_rec.prototype.create = function () { Scene_MenuBase.prototype.create.call(this); DataManager.loadAllSavefileImages(); this.createHelpWindow(); this.createListWindow(); this.createCategoryWindow(); //this._helpWindow.setText(this.helpWindowText()); }; Scene_Ev_rec.prototype.createBackground = function () { this._backgroundSprite = new Sprite(); this._backgroundSprite.bitmap = ImageManager.loadSystem("menu_evrec_back"); this.addChild(this._backgroundSprite); this._backgroundTextSprite = new Sprite(new Bitmap(Graphics.width, Graphics.height)); var b = this._backgroundTextSprite.bitmap; b.fontFace = "serif"; b.fontSize = 32; b.textColor = "#000000"; b.drawTextM("Event Records", 22, 20, 200, 22, "center"); this.addChild(this._backgroundTextSprite); }; Scene_Ev_rec.prototype.createHelpWindow = function () { const rect = this.helpWindowRect(); this._helpWindow = new Window_TravelHelp(rect); this.addWindow(this._helpWindow); }; Scene_Ev_rec.prototype.helpWindowRect = function () { const wx = 732; const wy = 80; const ww = Graphics.boxWidth - wx + 50; const wh = 630; return new Rectangle(wx, wy, ww, wh); }; // もうヘルプウィンドウの更新は全部 EventListでやる、カテゴリはリストに渡すだけ Scene_Ev_rec.prototype.createListWindow = function () { const rect = this.listWindowRect(); this._listWindow = new Window_EventList(rect); //this._listWindow.setHandler("ok", this.onItemOk.bind(this)); this._listWindow.setHandler("cancel", this.popScene.bind(this)); //this._listWindow.setMode(this.mode(), this.needsAutosave()); this._listWindow.setHelpWindow(this._helpWindow); //this._listWindow.selectSavefile(this.firstSavefileId()); this._listWindow.refresh(); this.addWindow(this._listWindow); }; Scene_Ev_rec.prototype.createCategoryWindow = function () { const rect = this.categoryWindowRect(); this._categoryWindow = new Window_EvCategory(rect); //this._categoryWindow.setHelpWindow(this._helpWindow); this._categoryWindow.setItemWindow(this._listWindow); //this._categoryWindow.setHelpWindow(this._helpWindow); //this._categoryWindow.setHandler("ok", this.onCategoryOk.bind(this)); //this._categoryWindow.setHandler("cancel", this.popScene.bind(this)); this.addWindow(this._categoryWindow); }; Scene_Ev_rec.prototype.listWindowRect = function () { const wx = 120; const wy = 80; const ww = Graphics.boxWidth - this._helpWindow.width - wx; const wh = 596; return new Rectangle(wx, wy, ww, wh); }; Scene_Ev_rec.prototype.helpWindowText = function () { return ""; }; Scene_Ev_rec.prototype.helpWindowText = function () { return TextManager.saveMessage; }; // //コモンイベントを実行 // Scene_Ev_rec.prototype.onItemOk = function () { // $gameVariables.setValue(10, this._listWindow._list[this._listWindow.index()]); // $gameTemp.reserveCommonEvent(23); // SceneManager.goto(Scene_Map); // }; // #################################################### // ################# アイテムの種類 #################### // #################################################### // カテゴリーウィンドウ function Window_EvCategory() { this.initialize(...arguments); } Window_EvCategory.prototype = Object.create(Window_HorzCommand.prototype); Window_EvCategory.prototype.constructor = Window_EvCategory; Scene_Ev_rec.prototype.categoryWindowRect = function () { const wx = 270; const wy = -6; const ww = 600; const wh = 58 + 8; return new Rectangle(wx, wy, ww, wh); }; Window_EvCategory.prototype.initialize = function (rect) { Window_HorzCommand.prototype.initialize.call(this, rect); this._padding = 0; }; //カテゴリーはアイテムと大事な物だけにする Window_EvCategory.prototype.makeCommandList = function () { this.addCommand("Active", "active"); this.addCommand("In Progress", "doing"); this.addCommand("Complete", "complete"); // this.addCommand("未発生", "notyet"); }; Window_EvCategory.prototype.setItemWindow = function (itemWindow) { this._itemWindow = itemWindow; }; // 変更があったらカテゴリーを更新する Window_EvCategory.prototype.update = function () { Window_HorzCommand.prototype.update.call(this); if (this._itemWindow) { this._itemWindow.setCategory(this.currentSymbol()); } }; Window_EvCategory.prototype._refreshAllParts = function () { this._padding = 0; //this._refreshBack(); //this._refreshFrame(); this._refreshCursor(); this._refreshArrows(); this._refreshPauseSign(); }; //カーソルの変更 Window_EvCategory.prototype.loadWindowskin = function () { this.windowskin = ImageManager.loadSystem("Window"); this.menu_item_skin = ImageManager.loadSystem("menu_item_categoly_select"); this.menu_cursor_skin = ImageManager.loadSystem("menu_item_categoly_cursor"); if (!this.menu_item_skin.isReady()) { this.menu_item_skin.addLoadListener(() => { this.refresh(); // 画像がロードされたら再描画 }); return; } }; Window_EvCategory.prototype.lineHeight = function () { return 58; }; Window_EvCategory.prototype._refreshCursor = function () { const drect = this._cursorRect.clone(); const srect = { x: 0, y: 0, width: 126, height: 58 }; const m = 0; for (const child of this._cursorSprite.children) { child.bitmap = this.menu_cursor_skin; } this._setRectPartsGeometry(this._cursorSprite, srect, drect, m); }; //カーソルを微調整、あとカーソルを常に不透明に Window_EvCategory.prototype._updateCursor = function () { this._cursorSprite.alpha = 255; this._cursorSprite.visible = this.isOpen() && this.cursorVisible; this._cursorSprite.x = this._cursorRect.x; this._cursorSprite.y = this._cursorRect.y - 4; }; //未選択コマンドの背景を画像に Window_EvCategory.prototype.drawItemBackground = function (index) { const rect = this.itemRect(index); if (this.menu_item_skin.isReady()) { const bitmap = this.menu_item_skin; const dx = rect.x; const dy = rect.y; const dw = rect.width; const dh = rect.height; this.contentsBack.blt(bitmap, 0, 0, 126, 58, dx, dy - 4, dw, dh); } }; //カーソルが来た時、アイテムの文字名の色を変更する Window_EvCategory.prototype.drawItem = function (index) { const rect = this.itemLineRect(index); const align = this.itemTextAlign(); this.resetTextColor(); if (index == this._index) { this.changeTextColor("#000000"); } this.changePaintOpacity(this.isCommandEnabled(index)); //文字をちょっと下にする this.drawTextS(this.commandName(index), rect.x, rect.y + 8, rect.width, align); }; //セレクトするたびに背景をリフレッシュ Window_EvCategory.prototype.select = function (index) { this._index = index; this.contents.clear(); this.contentsBack.clear(); this.drawAllItems(); this.refreshCursor(); this.callUpdateHelp(); }; //↑のセレクトでの不具合を出ないようにする Window_EvCategory.prototype.drawAllItems = function () { this.contents.fontFace = "serif"; const topIndex = this.topIndex(); for (let i = 0; i < this.maxVisibleItems(); i++) { const index = topIndex + i; if (this._list && index < this.maxItems()) { //選択ちゅうだけ背景なくす if (i != this._index) { this.drawItemBackground(index); } this.drawItem(index); } } }; Window_EvCategory.prototype.playOkSound = function () { // SoundManager.playOk(); }; // ######################################################## // ################### 一覧ウィンドウ ###################### // ######################################################## function Window_EventList() { this.initialize(...arguments); } Window_EventList.prototype = Object.create(Window_Selectable.prototype); Window_EventList.prototype.constructor = Window_EventList; Window_EventList.prototype.initialize = function (rect) { Window_Selectable.prototype.initialize.call(this, rect); //最初に0番目って指定、commandではデフォでやってるけど // デフォではアクティブに this._category = "active"; this.makeList(); this.select(0); this.activate(); }; Window_EventList.prototype.makeList = function () { //1発生 , 2完了 , 3進行中 , null 0未発生 var data_list = $gameVariables.value(114) || []; this._list = []; var flag = 0; if (this._category == "active") { //this._list = [1, 3, 5, 7, 8, 9, 10, 11, 12]; flag = 1; } else if (this._category == "doing") { //this._list = [4, 13, 14, 15, 16, 17]; flag = 3; } else if (this._category == "complete") { //this._list = [2, 3, 21, 27, 28, 29, 30, 31, 32, 42, 43, 51, 57, 58, 59, 70, 71, 72]; flag = 2; } else if (this._category == "notyet") { //this._list = [2, 3, 21, 27, 28, 29, 30, 31, 32, 42, 43, 51, 57, 58, 59, 70, 71, 72]; flag = 0; } data_list.forEach((e, i) => { if (e == flag) { this._list.push(i); } }); }; Window_EventList.prototype.maxItems = function () { return this._list.length || 0; }; Window_EventList.prototype.setCategory = function (category) { if (this._category !== category) { this._category = category; this.makeList(); this.callUpdateHelp(); this.refresh(); // 毎回一番上に戻す this.select(0); this.scrollTo(0, 0); } }; Window_EventList.prototype.numVisibleRows = function () { return 15; }; //右のウィンドウにデータを渡す Window_EventList.prototype.callUpdateHelp = function () { if (this.active && this._helpWindow) { this.updateHelp(); } }; Window_EventList.prototype.updateHelp = function () { this._helpWindow.setItem(CBR_evRecos[this._list[this.index()]], this._category); }; Window_EventList.prototype.drawItem = function (index) { var data_index = this._list[index]; const info = CBR_evRecos[data_index]; const rect = this.itemRectWithPadding(index); this.resetTextColor(); //this.changePaintOpacity(this.isEnabled(savefileId)); //this.drawTitle(savefileId, rect.x, rect.y + 4); if (info) { this.drawContents(info, rect); } }; Window_EventList.prototype.drawContents = function (info, rect) { const bottom = rect.y + rect.height; this.contents.fontFace = "serif"; this.contents.fontSize = 22; this.changeTextColor("#000000"); this.drawTextM(info.title, 84, rect.y + 2, 450, "left"); // const lineHeight = this.lineHeight(); // const y2 = bottom - lineHeight - 4; // if (y2 >= lineHeight) { // this.drawPlaytime(info, rect.x, y2, rect.width); // } }; // ################# カーソルの変更 ################## Window_EventList.prototype.loadWindowskin = function () { this.windowskin = ImageManager.loadSystem("Window"); this.menu_cursor_skin = ImageManager.loadSystem("menu_item_selected"); this.menu_item_skin = ImageManager.loadSystem("menu_item_selected_2"); if (!this.menu_item_skin.isReady()) { this.menu_item_skin.addLoadListener(() => { this.refresh(); // 画像がロードされたら再描画 }); return; } }; //56×200にする Window_EventList.prototype._refreshCursor = function () { const drect = this._cursorRect.clone(); const srect = { x: 0, y: 40, width: 588, height: 40 }; const m = 0; for (const child of this._cursorSprite.children) { child.bitmap = this.menu_item_skin; } this._setRectPartsGeometry(this._cursorSprite, srect, drect, m); }; //未選択コマンドの背景を画像に Window_EventList.prototype.drawItemBackground = function (index) { const rect = this.itemRect(index); if (this.menu_item_skin) { const bitmap = this.menu_item_skin; const dx = rect.x; const dy = rect.y; const dw = rect.width; const dh = rect.height; this.contentsBack.blt(bitmap, 0, 0, 588, 40, dx, dy, dw, dh); } }; Window_EventList.prototype._refreshAllParts = function () { //this._refreshBack(); //this._refreshFrame(); this._refreshCursor(); this._refreshArrows(); this._refreshPauseSign(); }; // ########################################################### // ##################### 移動先ウィンドウ ##################### // ########################################################### function Window_TravelHelp() { this.initialize(...arguments); } Window_TravelHelp.prototype = Object.create(Window_Help.prototype); Window_TravelHelp.prototype.constructor = Window_TravelHelp; Window_TravelHelp.prototype.setItem = function (item, category) { if (item) { //this.setText(item ? item.name : ""); this._CBR_evrec_data = item; this._CBR_evrec_category = category; this.refresh(); } }; Window_TravelHelp.prototype.setText = function (text) { if (this._text !== text) { this._text = text; this.refresh(); } }; Window_TravelHelp.prototype.refresh = function () { const rect = this.baseTextRect(); this.contents.clear(); var data = this._CBR_evrec_data; if (data) { this.contents.fontFace = "serif"; this.contents.fontSize = 20; this.contents.fontSize = 26; const text_w = this.contents.measureTextWidth(data.title); if (450 < text_w) { this.contents.fontSize = Math.floor((26 * 450) / text_w); } this.changeTextColor("#000000"); this.drawTextM(data.title, -26, 30, rect.width, "center"); this.contents.fontSize = 16; this.drawTextM("Progress", -24, 78, 140, "center"); this.drawTextM("Event Steps", -24, 110, 140, "center"); this.drawTextM("Description", -24, 260, 140, "center"); this.changeTextColor("#FFFFFF"); var type_text = "Active"; if (this._CBR_evrec_category == "doing") { type_text = "In Progress"; } else if (this._CBR_evrec_category == "complete") { type_text = "Complete"; } else if (this._CBR_evrec_category == "notyet") { type_text = "Not Yet Occurred"; } this.drawTextS(type_text, 120, 78, 100, "left"); this.drawTextExS(data.process, 120, 118, rect.width, "left"); this.drawTextExS(data.text, 120, 267, rect.width, "left"); } }; Window_TravelHelp.prototype._refreshAllParts = function () { //this._refreshBack(); //this._refreshFrame(); this._refreshCursor(); this._refreshArrows(); this._refreshPauseSign(); }; })(); //発生→1 完了→2 進行中→3 未発生→0 var CBR_evReco_add = function (id, val) { var data_ary = $gameVariables.value(114) || []; data_ary[id] = val; $gameVariables.setValue(114, data_ary); };