#============================================================================== # ▽ オートディスクリプション - Plm_AutoDescription 6/27 #------------------------------------------------------------------------------ #  アイテムの詳細を指定した書式で説明文に追加します。 #============================================================================== =begin 使い方 下の方にあるリストから好きな項目番号を選んで入れていってください 例=> ITEM = ["[道具] ",34,14,1,"\n",0] と打ち込むと、実際には、 [道具] / 消耗品 / HP回復量:500 / 効果範囲:味方単体 HPを500ポイント回復する。 こんな感じになります。(ポーションの例) リスト番号0がデータベースに打ち込んだもともとの説明なので、 ITEM = [0] とするとデフォルトと同様になります。 アイテム、スキル、武器、防具ごとにそれぞれの表示項目を設定可能です =end module PLM_AD #-------------------------------------------------------------------------- # □ かすたまいづぽいんと #-------------------------------------------------------------------------- DIV1 = " / " # 項目と項目の間にはさむもの DIV2 = ":" # 参照値の前の記号 # 書式設定部分 "\n"で改行 三行以上にも対応 # 文字入力も可能 ""でくくった部分が文字列とみなされます ITEM = ["[道具] ",34,14,1,"\n",0] SKILL = ["[技能] ",31,14,1,"\n",36,0] WEAPON = ["[武器] ",31,4,"\n",5,0] ARMOR = ["[防具] ",31,4,"\n",5,0] V_TOPC = true # 表記文を表示する(falseにした場合、参照値のみ描写) X_ZERO = true # 参照値が0の場合、描写しない RESIZE = true # ヘルプの文章がはみ出したとき文字幅のリサイズを許可する R_RATE = 60 # 縮小する幅の限界倍率(%) 60でデフォルト仕様と同程度 #注:再描画処理は時間がかかるためVXAceのヘルプによると推奨されていません ADELEM = true # 属性表示改造を使う?(色付け等、設定項目はずっと↓) ADSTAT = true # ステート表示改造を使う? ADCONV = true # 参照値変換機能を使う? (例:火属性90%→火属性軽減) end #============================================================================== # ■ Window_Help #============================================================================== class Window_Help < Window_Base include PLM_AD #-------------------------------------------------------------------------- # ● 自動描写機能&項目リスト #-------------------------------------------------------------------------- # 以下の項目から入れたい番号を選んで上の設定部分に好きな順番で並べておくれ # リスト内容も編集可能 [表記文, 参照値, 値の単位(省略可)]の形式 # リスト内は,あたりで改行できるので見づらかったら適宜使ってたも # 色をつけたい場合は\\c\[2\]必中\\c\[0\]こんな感じでできぬこともない #-------------------------------------------------------------------------- # 参照値変換メソッド # ad_cv("type", value, unit) # 数値を指定タイプの形式に従って変換する命令 ADCONVの値がtrueだと変換実行 # type : 変換形式の型を文字で指定 耐性型,変動型など 設定箇所で追加可能 # value: 変換する値(数値のみ可、文字の場合そのまま) # unit : 無変換型につける値の単位(変換時%などが不要になるためここで設定) #******************************ここからリスト****************************** def auto_description(item) description = "" #-------------------------------------------------------------------------- # □ 全共通項目 #-------------------------------------------------------------------------- common_list = { 0 => [item.description], # もともとのアイテムの説明文 "\n" => ["\n"], # 改行 -1 => ["ID", item.id], # アイテムID -2 => [item.name], # アイテムの名前 -3 => ["アイコン番号",item.icon_index],# アイコン番号 -4 => [item.note], # アイテムのメモ欄 } if item.is_a?(RPG::Item); array = ITEM #-------------------------------------------------------------------------- # □ アイテムのみ追加できる項目 #-------------------------------------------------------------------------- add_list = { 31 => [["通常","大事なもの"][item.itype_id]], #アイテムタイプ 32 => ["価格",item.price, $data_system.currency_unit],#価格 33 => ["消耗", item.consumable ? "する":"しない"], #消耗 34 => [nil, item.consumable ? "消耗品":"永久品"], #消耗 別ver } end if item.is_a?(RPG::Skill); array = SKILL #-------------------------------------------------------------------------- # □ スキルのみ追加できる項目 #-------------------------------------------------------------------------- add_list = { 31 => [$data_system.skill_types[item.stype_id]], #スキルタイプ 32 => ["消費" + $data_system.terms.basic[5], item.mp_cost],#消費MP 33 => ["消費" + $data_system.terms.basic[7], item.tp_cost],#消費TP 34 => [item.message1], #使用時メッセージ1 35 => [item.message2], #使用時メッセージ2 36 => ["必要武器タイプ", $data_system.weapon_types[item.required_wtype_id1] + $data_system.weapon_types[item.required_wtype_id2] ], } end if item.is_a?(RPG::Item) || item.is_a?(RPG::Skill) #-------------------------------------------------------------------------- # □ アイテムとスキルで共通設定できる項目 #-------------------------------------------------------------------------- list = { 1 => ["効果範囲", ["なし","敵単体","敵全体","敵1体ランダム", "敵2体ランダム","敵3体ランダム","敵4体ランダム","味方単体", "味方全体","味方単体 (戦闘不能) ","味方全体 (戦闘不能)","使用者"][item.scope]], 2 => ["使用可能時", ["常時","バトルのみ","メニューのみ","使用不可"][item.occasion]], 3 => ["速度補正", item.speed], 4 => ["成功率" , item.success_rate, "%"], 5 => ["連続回数", item.repeats, "回"], 6 => ["取得 TP" , item.tp_gain], 7 => ["命中タイプ", ["必中","物理攻撃","魔法攻撃"][item.hit_type]], 8 => ["アニメ", item.animation_id==0 ? "なし" : $data_animations[item.animation_id].name], 9 => ["ダメージタイプ", ["なし","HPダメージ","MPダメージ", "HP回復","MP回復","HP吸収","MP吸収"][item.damage.type]], 10 => ["属性", ad_elem(item.damage.element_id)], 11 => ["計算式", item.damage.formula], 12 => ["分散度", item.damage.variance, "%"], 13 => ["会心", item.damage.critical ? "あり": "なし"], 132 => [nil, item.damage.critical ? "会心" : nil], #別ver # --- 使用効果 --- # ↓に含めたい番号を入れて、この番号を指定すれば一括可能 14 => [[17,18,19,20,21,22,23,24,25,26,27,28,29]], 15 => [[27,22,23,24,25,20,21,26,28]], #改造サンプル # メソッド ad_ef(item, code) # アイテムの使用効果欄から指定コードの項目のデータ名と値を返す命令 # item : 参照するアイテムデータ # code : 特徴コード # %などの単位は参照値変換メソッド(def ad_cv)で指定推奨 16 => ["使用効果", ad_ef(item, 0)], #種類のみの一括簡易表示版 17 => ["HP回復", ad_ef(item, 11)], 18 => ["MP回復", ad_ef(item, 12)], 19 => ["TP増加", ad_ef(item, 13)], 20 => ["ステート付加", ad_ef(item, 21)], 21 => ["ステート解除", ad_ef(item, 22)], 22 => ["能力強化", ad_ef(item, 31)], 23 => ["能力弱体", ad_ef(item, 32)], 24 => ["能力強化の解除", ad_ef(item, 33)], 25 => ["能力弱体の解除", ad_ef(item, 34)], 26 => ["特殊効果", ad_ef(item, 41)], 27 => ["成長", ad_ef(item, 42)], 28 => ["スキル習得", ad_ef(item, 43)], 29 => ["コモンイベント", ad_ef(item, 44)], } end if item.is_a?(RPG::Weapon); array = WEAPON #-------------------------------------------------------------------------- # □ 武器のみ追加できる項目 #-------------------------------------------------------------------------- add_list = { 31 => [$data_system.weapon_types[item.wtype_id]], #武器タイプ 32 => ["装備性能",item.performance], #攻撃力+魔法力+全能力値の合計 33 => ["アニメ", item.animation_id==0 ? "なし" : $data_animations[item.animation_id].name], #アニメーション名 } end if item.is_a?(RPG::Armor); array = ARMOR #-------------------------------------------------------------------------- # □ 防具のみ追加できる項目 #-------------------------------------------------------------------------- add_list = { 31 => [$data_system.armor_types[item.atype_id]], #防具タイプ 32 => ["装備性能",item.performance], #防御力+魔法防御+全能力値の合計 } end if item.is_a?(RPG::Weapon) || item.is_a?(RPG::Armor) #-------------------------------------------------------------------------- # □ 武器と防具で共通設定できる項目 #-------------------------------------------------------------------------- list = { 1 => [$data_system.terms.etypes[item.etype_id]], #装備タイプ 2 => ["価格", item.price, $data_system.currency_unit], # --- 特徴 --- # ↓に含めたい番号を入れて、この番号を指定すれば一括可能 3 => [[6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29]], # 二段用に分割してみたり 4 => [[10,11,12,6,7,8,9,13,14,15,16]], 5 => [[17,18,19,20,21,22,23,24,25,26,27,28,29]], # メソッド ad_ft(item, code) # アイテムの特徴欄から指定コードの項目のデータ名と値を返す命令 # item : 参照するアイテムデータ # code : 特徴コード # %などの単位は参照値変換メソッド(def ad_cv)で指定推奨 6 => ["属性有効度", ad_ft(item, 11)], 7 => ["弱体有効度", ad_ft(item, 12)], 8 => ["ステート有効度", ad_ft(item, 13)], 9 => ["ステート無効化", ad_ft(item, 14)], 10 => ["通常能力値", ad_ft(item, 21)], 11 => ["追加能力値", ad_ft(item, 22)], 12 => ["特殊能力値", ad_ft(item, 23)], 13 => ["攻撃時属性", ad_ft(item, 31)], 14 => ["攻撃時ステート", ad_ft(item, 32)], 15 => ["攻撃速度補正", ad_ft(item, 33)], 16 => ["攻撃追加回数", ad_ft(item, 34)], 17 => ["スキルタイプ追加", ad_ft(item, 41)], 18 => ["スキルタイプ封印", ad_ft(item, 42)], 19 => ["スキル追加", ad_ft(item, 43)], 20 => ["スキル封印", ad_ft(item, 44)], 21 => ["武器タイプ許可", ad_ft(item, 51)], 22 => ["防具タイプ許可", ad_ft(item, 52)], 23 => ["装備固定", ad_ft(item, 53)], 24 => ["装備封印", ad_ft(item, 54)], 25 => ["スロットタイプ", ad_ft(item, 55)], 26 => ["行動回数増加", ad_ft(item, 61)], 27 => ["特殊フラグ", ad_ft(item, 62)], 28 => ["消滅エフェクト", ad_ft(item, 63)], 29 => ["パーティ能力", ad_ft(item, 64)], # --- 能力値変化量 --- # ↓に含めたい番号を入れて、この番号を指定すれば一括可能 41 => [[42,43,44,45,46,47,48,49]], 42 => [$data_system.terms.params[0], item.params[0]],#最大HP 43 => [$data_system.terms.params[1], item.params[1]],#最大MP 44 => [$data_system.terms.params[2], item.params[2]],#攻撃力 45 => [$data_system.terms.params[3], item.params[3]],#防御力 46 => [$data_system.terms.params[4], item.params[4]],#魔法力 47 => [$data_system.terms.params[5], item.params[5]],#魔法防御 48 => [$data_system.terms.params[6], item.params[6]],#敏捷性 49 => [$data_system.terms.params[7], item.params[7]],#運 } end #******************************ここまでリスト****************************** # 説明文章生成処理 add_list.keys.each{|k|list[k] = add_list[k] } common_list.keys.each{|k|list[k] = common_list[k] } div = false for i in array if list[i] == nil description += i if i.is_a?(String) #文字の場合 next end if list[i][0].is_a?(Array) #配列の場合展開 for j in 0...list[i][0].size x = array.index(i) array.insert x+j+1, list[i][0][j] end array[x] = nil next end next if list[i][1] == "" #値が""の時、描写しない next if list[i][1].to_s == "0" && X_ZERO #値が"0"の時、描写しない description += DIV1 if div && i != "\n" description += list[i][0].to_s if list[i][0] != nil && V_TOPC description += DIV2 if list[i][0] != nil && list[i][1] != nil && V_TOPC description += list[i][1].to_s if list[i][1] != nil description += list[i][2].to_s if list[i][2] != nil div = i == "\n" ? false : true end return description end #-------------------------------------------------------------------------- # ● 使用効果 コード別書式 #-------------------------------------------------------------------------- # data_id : 使用効果の種類に応じたデータ (ステート、能力値など) の ID # value2 : 使用効果の種類に応じた設定値 1 # value1 : 使用効果の種類に応じた設定値 2 #-------------------------------------------------------------------------- def ad_ef(item, code) s = ""; m = true for i in item.effects next if i.code != code && code != 0 s += " " if s != "" && m # 同一項目が複数あるとき間に,をつける m = true case code when 0 # 使用効果種類のみの簡易表示(効果は説明に書く場合など) t = ["HP回復","MP回復","TP増加","ステート付加","ステート解除", nil,nil,"強化","弱体","強化解除","弱体解除","逃げる", "成長","スキル習得","イベント"][(i.code/10*3.7+i.code%10-5).round] s.include?(t) ? m = false : s += t when 11 # HP回復率+HP回復量 s += (ad_cv "無変換",i.value1*100,"%") if i.value1 != 0 || !X_ZERO s += "+" if s != "" && i.value2 != 0 || !X_ZERO s += (ad_cv "無変換",i.value2) if i.value2 != 0 || !X_ZERO when 12 # MP回復率+MP回復量 s += (ad_cv "無変換",i.value1*100,"%") if i.value1 != 0 || !X_ZERO s += "+" if s != "" && i.value2 != 0 || !X_ZERO s += (ad_cv "無変換",i.value2) if i.value2 != 0 || !X_ZERO when 13 # TP増加率 s += (ad_cv "無変換",i.value1) when 21 # ステート付加 s += ad_stat(i.data_id) + (ad_cv "確率型",i.value1*100,"%") when 22 # ステート解除 s += ad_stat(i.data_id) + (ad_cv "確率型",i.value1*100,"%") when 31 # 能力強化 ターン s += $data_system.terms.params[i.data_id] + (ad_cv "無変換",i.value1) when 32 # 能力弱体 ターン s += $data_system.terms.params[i.data_id] + (ad_cv "無変換",i.value1) when 33 # 能力強化の解除 s += $data_system.terms.params[i.data_id] when 34 # 能力弱体の解除 s += $data_system.terms.params[i.data_id] when 41 # 特殊効果 s += "逃げる" when 42 # 成長 s += $data_system.terms.params[i.data_id] + "+" + (ad_cv "無変換",i.value1) when 43 # スキル習得 s += $data_skills[i.data_id].name when 44 # コモンイベント s += $data_common_events[i.data_id].name end end return s end #-------------------------------------------------------------------------- # ● 特徴 コード別書式 #-------------------------------------------------------------------------- # data_id : 特徴の種類に応じたデータ (属性、ステートなど) の ID # value : 特徴の種類に応じた設定値 #-------------------------------------------------------------------------- def ad_ft(item, code) s = "" for i in item.features next if i.code != code s += "," if s != "" # 同一項目が複数あるとき間に,をつける case code when 11 # 属性有効度 s += ad_elem(i.data_id) + (ad_cv "耐性型",i.value*100,"%") when 12 # 弱体有効度 s += $data_system.terms.params[i.data_id] + (ad_cv "耐性型",i.value*100,"%") when 13 # ステート有効度 s += ad_stat(i.data_id) + (ad_cv "耐性型",i.value*100,"%") when 14 # ステート無効化 s += ad_stat(i.data_id) when 21 # 通常能力値 変動率 s += $data_system.terms.params[i.data_id] + (ad_cv "変動型",i.value*100,"%") when 22 # 追加能力値 加減値 next if i.value == 0 && X_ZERO s += ["命中率","回避率","会心率","会心回避率","魔法回避率", "魔法反射率","反撃率","HP再生率","MP再生率","TP再生率"][i.data_id] + (i.value < 0 ? "" : "+") + (ad_cv "無変換",i.value*100) when 23 # 特殊能力値 変動率 next if i.value == 0 && X_ZERO s += ["狙われ率","防御効果率","回復効果率","薬の知識", "MP消費率","TPチャージ率","物理ダメージ率","魔法ダメージ率", "床ダメージ率","経験値獲得率"][i.data_id] + (ad_cv "変動型",i.value*100,"%") when 31 # 攻撃時属性 s += ad_elem(i.data_id) when 32 # 攻撃時ステート s += ad_stat(i.data_id) + (ad_cv "確率型",i.value*100,"%") when 33 # 攻撃速度補正 s += i.value == 999 ? "ターン内先制" : i.value.truncate.to_s when 34 # 攻撃回数 s += "+" + (ad_cv "無変換",i.value,"回") when 41 # スキルタイプ追加 s += $data_system.skill_types[i.data_id] when 42 # スキルタイプ封印 s += $data_system.skill_types[i.data_id] when 43 # スキル追加 s += $data_skills[i.data_id].name when 44 # スキル封印 s += $data_skills[i.data_id].name when 51 # 武器タイプ装備 s += $data_system.weapon_types[i.data_id] when 52 # 防具タイプ装備 s += $data_system.armor_types[i.data_id] when 53 # 装備固定 s += $data_system.terms.etypes[i.data_id] when 54 # 装備封印 s += $data_system.terms.etypes[i.data_id] when 55 # 二刀流 s += "二刀流" when 61 # 行動回数増加確率 s += (ad_cv "確率型",i.value,"%") when 62 # 特殊フラグ s += ["自動戦闘","防御","身代わり","TP持ち越し"][i.data_id] when 63 # 消滅エフェクト s += ["ボス","瞬間消滅","消えない"][i.data_id] when 64 # パーティ能力 s += ["エンカウント半減","エンカウント無効","不意打ち無効", "先制攻撃率アップ","獲得金額二倍","アイテム入手率二倍"][i.data_id] end end return s end #-------------------------------------------------------------------------- # ● 属性の表示形式 #-------------------------------------------------------------------------- # 色付き属性表示を行う場合ここを編集してください #-------------------------------------------------------------------------- def ad_elem(id) if ADELEM return ["", # データベース:用語 の番号に対応しているので0番目はなし "\\c\[0\]", # 物理 "\\c\[27\]",# 吸収 "\\c\[10\]",# 炎 "\\c\[9\]", # 氷 "\\c\[14\]",# 雷 "\\c\[23\]",# 水 "\\c\[20\]",# 大地 "\\c\[11\]",# 風 "\\c\[6\]", # 神聖 "\\c\[31\]",# 暗黒 ][id] + $data_system.elements[id] + "\\c\[0\]属性" else return $data_system.elements[id] + "属性" end end #-------------------------------------------------------------------------- # ● ステートの表示形式 #-------------------------------------------------------------------------- # 色付きステート表示を行う場合ここを編集してください #-------------------------------------------------------------------------- def ad_stat(id) if ADSTAT return [ "\\c\[25\]",# 通常攻撃(武器ステートを引き継ぐステート) "\\c\[7\]", # 戦闘不能 "\\c\[13\]",# 毒 "\\c\[13\]",# 暗闇 "\\c\[13\]",# 沈黙 "\\c\[13\]",# 混乱 "\\c\[13\]",# 睡眠 "\\c\[13\]",# 麻痺 "\\c\[13\]",# スタン "\\c\[21\]",# 防御 "\\c\[32\]",# 不死身 "\\c\[21\]",# かばう "\\c\[21\]",# 挑発 "\\c\[21\]",# 隠れる "\\c\[29\]",# HP再生 "\\c\[29\]",# MP再生 "\\c\[29\]",# TP再生 "\\c\[20\]",# 鉄壁 "\\c\[20\]",# 反撃 "\\c\[22\]",# 魔法回避 "\\c\[22\]",# 魔法反射 "\\c\[10\]",# 炎の力 "\\c\[9\]", # 水の力 "\\c\[14\]",# 雷の力 "\\c\[16\]",# 異常防止 "\\c\[24\]",# 消費MP減 ][id] + (id==0? "武器依存":$data_states[id].name) + "\\c\[0\]" else return $data_states[id].name end end #-------------------------------------------------------------------------- # ● 参照値変換(コンバートヴァリュー) #-------------------------------------------------------------------------- # 値を評価して指定タイプの形式に従って文字列に変換できます # 例.. h = { 0=>"無効",1=>"減少",100=>"通常",101=>"増加" } # と書いた場合 0:無効 1〜99:減少 100:通常 101〜:増加 となります # \\c\[2\] などで色もつけれます #-------------------------------------------------------------------------- def ad_cv(type=0, value="", unit="") return value if value.is_a?(String) type = 0 if !ADCONV c = "" # ----- 数値で色変えの一括指定も可能 ----- c = "\\c\[0\]" if value > 100 # 100超 c = "\\c\[0\]" if value < 100 # 100未満 # -------------- ここまで ---------------- case type when "効果量型" ; h = { 1 => "微", 10 => "小", 30 => "中", 70 => "大", 100 => "全回復", } when "耐性型" ; h = { 0 => "無効", 1 => "激減", 50 => "半減", 51 => "軽減", 100 => "等倍",101 => "弱化", 200 => "致命化", } when "変動型" ; h = { 0 => "喪失", 1 => "大低下", 50 => "低下", 101 => "上昇", 150 => "大上昇", 200 => "倍化", 201 => "限界突破", } when "確率型" ; h = { 1 => "稀", 20 => "低確率", 40 => "時々", 60 => "高確率", 80 => "頻繁", 100 => "確実", } when "耐性型英字式" ; h = { 0 => "SS", 1 => "S", 25 => "A", 50 => "B", 75 => "C", 101 => "D", 150 => "E", 200 => "F", } when "耐性型記号式" ; h = { 0 => "☆", 1 => "◎", 25 => "○", 50 => "●", 75 => "△", 101 => "▽", 150 => "▼", 200 => "×", } when "耐性型数値式" # 150%なら-5 80%なら+2 return c + (value<100 ? "+":"") + (-value/10+10).round.to_s else # 無変換型 数値に単位をつけて、そのまま文字にして返す return value.truncate.to_s + unit end for i in h.keys.reverse return c + h[i] + "\\c\[0\]" if value >= i end return "???" # 範囲外の数値だった場合 end #-------------------------------------------------------------------------- # ● set_item 再定義 #-------------------------------------------------------------------------- def set_item(item) set_text(item ? auto_description(item) : "") end end module PLM_AD # 効果範囲 短縮系サンプル # SCOPE = ["","単敵","全敵","乱1","乱2","乱3","乱4", # "単味","全味","単不 ","全不","自身"] end #-------------------------------------------------------------------------- # ■ 文字描画幅リサイザー ※Window_Help内のみ有効 #-------------------------------------------------------------------------- if PLM_AD::RESIZE class Window_Help < Window_Base alias refresh_p refresh def refresh @ts = convert_escape_characters(@text).split(/\n/).collect{|s|text_size(s.gsub(/\ec\[\d+\]/){""}).width}.max refresh_p end end class Window_Base < Window alias process_normal_character_p process_normal_character def process_normal_character(c, pos) @ts ||= 0 if self.is_a?(Window_Help) && @ts > contents.width rate = [contents.width * 100 / @ts, PLM_AD::R_RATE].max text_width = text_size(c).width * rate / 100 draw_text(pos[:x], pos[:y], text_width+2, pos[:height], c) # 縮小補正値 +2 pos[:x] += text_width # * 90 / 100 # 文字間のスペース else process_normal_character_p(c, pos) end end end end