赤い四角の部分は、Window_ItemListのクラスのようです。
maker-b様の仰っているdrawBackgroundRectメソッドがある
Window_Selectableクラスの子クラスにあたります。
Window_ItemList側には、同名のメソッドが無いため、親クラス側のメソッドが
呼ばれているのですね。
Window_Selectableは、その名の通り、項目の選択が必要なウィンドウでは、
ほぼ、親クラスとして使われていると思うので、
そのままdrawBackgroundRectメソッドを改変すると、
全ての選択が必要なウィンドウで項目背景色が変わってしまいます。
なので、あちこち色が変わってしまったものと思われます。
これを回避するには、Window_ItemListに新たにdrawBackgroundRectメソッドを定義
するのが順当な気がします。そちらに条件式を書いて分岐させるのが良いかと思います。
色も、ColorManagerに追加した方が良さそうですね。
アイテム単位で、背景色を変更したいとの事ですが、丁度、Window_ItemListには、
itemAt(index)というメソッドがあり、項目番号を入れれば、アイテムを取得出来るようです。
なので、drawBackgroundRectを呼んでいる、drawItemBackgroundも一緒に新規定義して、
indexを参照出来る形にした方が良さそうです。分かりにくいので、
コードにすると、こんな感じでしょうか?
コード: 全て選択
// 新しいアイテム背景色の定義です。必要なだけ定義します。
ColorManager.itemBackColor3 = function() {
return "rgba(0, 0, 255, 1)";
};
ColorManager.itemBackColor4 = function() {
return "rgba(0, 0, 255, 1)";
};
// drawItemBackgroundの定義です。
Window_ItemList.prototype.drawItemBackground = function(index) {
const rect = this.itemRect(index); // 項目矩形範囲
this.drawBackgroundRect(rect, index); // 項目矩形範囲に項目背景色を描画 引数indexで項目番号を取れるようにしています。
};
// drawBackgroundRectの定義です。
Window_ItemList.prototype.drawBackgroundRect = function(rect, index) {
const c1 = this.itemBackColor1(index); // 項目背景カラー1 ここでindexを参照
const c2 = this.itemBackColor2(index); // 項目背景カラー2 ここでindexを参照
const x = rect.x;
const y = rect.y;
const w = rect.width;
const h = rect.height;
this.contentsBack.gradientFillRect(x, y, w, h, c1, c2, true); // コンテンツ背景に縦グラデーションで塗りつぶし
this.contentsBack.strokeRect(x, y, w, h, c1); // コンテンツ背景にカラー1で矩形の描画
};
Window_ItemList.prototype.itemBackColor1 = function(index) {
const item = this.itemAt(index) // indexからアイテム取得
if (index == 0 && DataManager.isItem(item) && item.itypeId === 1) { // 色1の条件分岐
return ColorManager.itemBackColor3(); // 項目背景カラー3
} else {
return ColorManager.itemBackColor1(); // 項目背景カラー1
};
};
Window_ItemList.prototype.itemBackColor2 = function(index) {
const item = this.itemAt(index)
if (index == 0 && DataManager.isItem(item) && item.itypeId === 1) { // 色2の条件分岐
return ColorManager.itemBackColor4(); // 項目背景カラー4
} else {
return ColorManager.itemBackColor2(); // 項目背景カラー2
};
};
この場合だと、項目番号0番、つまり、アイテムリストウィンドウの一番左上の
項目を表示アイテムがアイテムクラスかつ、通常アイテムの場合に、
背景色を青くするという感じになっています。
注意したいのが、Window_ItemListも、通常のアイテムのリストの他、
装備品の選択画面の武器や防具のリスト、大事な物リスト等で使われていて、
自身が持つincludesメソッドで表示するべきかを分岐している点です。
上記コードの色の条件分岐の
DataManager.isItem(item) && item.itypeId === 1
は、このincludesメソッドを参考に通常アイテムの場合という分岐を作成し、
アイテム選択画面でしか背景色が青くならないようにしています。
この変数itemには、$dataItemsのアイテムが入っているので、データベース情報を
参照出来ると思います。この辺りの条件分岐を書き換えれば
maker-b様が望むような事が出来るのではないかと思います。
ついでにプラグイン化した物を貼っておきます。質問に答える形で作ったものですし、
改変ありきなので、利用規約は、特にありません。ご自由にどうぞ。