设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2597|回复: 2
打印 上一主题 下一主题

[已经解决] 请问有什么好的烹饪系统?

[复制链接]

Lv1.梦旅人

梦石
0
星屑
76
在线时间
150 小时
注册时间
2012-1-29
帖子
122
跳转到指定楼层
1
发表于 2012-3-10 17:45:27 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
想做个做饭的系统...需要这样的系统,之前找到过一个调和系统,可是有问题,也找不到解决方法,希望有强人来帮我解决(脚本最好,事件也行,但不要太麻烦)
脚本冲突去死去死!!!

Lv1.梦旅人

梦石
0
星屑
137
在线时间
464 小时
注册时间
2012-1-16
帖子
1227
3
发表于 2012-3-11 20:13:24 | 只看该作者
用事件吧!~
只需要在物品栏中多设定一些东西就行了。
比如:
    设定 洋葱、肉和咖喱(物品);弄一个灶炉的事件。




这样简单明了...
好人卡give我吧!~

点评

其实可以用If判断裏的脚本搞定的: $game_party.item_number($data_items[物品1编号]) and $game_party.item_number($data_items[物品2编号]) and ...  发表于 2012-3-19 12:32
↓这一点也不麻烦,不用变量、不用开关,就看你有没有那个食材而已...  发表于 2012-3-12 20:39
我就是因为要做的菜太多了才想不用事件的  发表于 2012-3-12 18:46

评分

参与人数 1星屑 +200 收起 理由
iisnow + 200 认真的回答,额外奖励

查看全部评分

这里什么都没有
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
48
在线时间
2459 小时
注册时间
2011-12-18
帖子
1484
2
发表于 2012-3-11 15:24:15 | 只看该作者
你看这个行不?
  1. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  2. #_/    ◆ アイテム合成 - KGC_ComposeItem ◆ VX ◆
  3. #_/    ◇ Last update : 2008/11/02 ◇
  4. #_/----------------------------------------------------------------------------
  5. #_/  複数のアイテムを合成し、新たなアイテムを作り出す機能を作成します。
  6. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

  7. #==============================================================================
  8. # ★ カスタマイズ項目 - Customize ★
  9. #==============================================================================

  10. module KGC
  11. module ComposeItem
  12.   # ◆ 合成画面呼び出しフラグを表すスイッチ番号
  13.   #  このスイッチを ON にすると、通常のショップの代わりに合成屋が開きます。
  14.   COMPOSE_CALL_SWITCH = 4990

  15.   # ◆ 合成レシピ
  16.   #  [費用, "タイプ:ID,個数", ...]
  17.   #  【 費用 】合成費用
  18.   #  【タイプ】合成素材の種類 (I..アイテム  W..武器  A..防具)
  19.   #  【  ID  】合成素材のID (↑と対応)
  20.   #  【 個数 】合成素材の必要数
  21.   #  "タイプ:ID,個数" はいくつでも指定できます。
  22.   #  個数を省略して "タイプ:ID" と書いた場合、個数は 1 扱いとなります。
  23.   #  個数を 0 にした場合、1 個以上持っていれば何度でも合成できます。
  24.   #  レシピ配列は、添字がアイテム・武器・防具IDに対応しています。
  25.   RECIPE_ITEM   = []  # アイテム
  26.   RECIPE_WEAPON = []  # 武器
  27.   RECIPE_ARMOR  = []  # 防具
  28.   # ここから下に合成レシピを定義。
  29.   #  <設定例>
  30.   #  アイテムID:8 の合成レシピ
  31.   #  アイテムID 2, 4, 7 を 1 個ずつ消費。無料。
  32.   #RECIPE_ITEM[8] = [0, "I:2", "I:4", "I:7"]
  33.   #  武器ID:16 の合成レシピ
  34.   #  武器ID:10 を 1 個、アイテムID:16 を 2 個消費。800 G。
  35.   #RECIPE_WEAPON[16] = [800, "W:10", "I:16,2"]
  36.   #  防具ID:29 の合成レシピ
  37.   #  防具ID:25 を 1 個、アイテムID:8 を 3 個消費。2000 G。
  38.   #RECIPE_ARMOR[29] = [2000, "A:25", "I:8,3"]


  39.   RECIPE_WEAPON[17] = [2000, "W:13,1", "I:45,1"]
  40.   RECIPE_WEAPON[18] = [2000, "W:14,1", "I:45,1"]
  41.   RECIPE_WEAPON[19] = [2000, "W:15,1", "I:45,1"]
  42.   RECIPE_WEAPON[20] = [2000, "W:16,1", "I:45,1"]
  43.   RECIPE_WEAPON[22] = [2000, "W:21,1", "I:45,1"]
  44.   RECIPE_WEAPON[27] = [2000, "W:23,1", "I:45,1"]
  45.   RECIPE_WEAPON[28] = [2000, "W:24,1", "I:45,1"]
  46.   RECIPE_WEAPON[29] = [2000, "W:25,1", "I:45,1"]
  47.   RECIPE_WEAPON[30] = [2000, "W:26,1", "I:45,1"]
  48.   RECIPE_WEAPON[33] = [2000, "W:32,1", "I:45,1"]
  49.   RECIPE_WEAPON[37] = [2000, "I:79,5"]
  50.   RECIPE_WEAPON[39] = [2000, "I:79,5"]
  51.   RECIPE_WEAPON[41] = [2000, "I:81,5"]
  52.   RECIPE_WEAPON[43] = [2000, "I:80,5"]
  53.   RECIPE_WEAPON[45] = [2000, "I:81,5"]
  54.   RECIPE_WEAPON[38] = [3000, "W:37,1", "I:78,1"]
  55.   RECIPE_WEAPON[40] = [3000, "W:39,1", "I:78,1"]
  56.   RECIPE_WEAPON[42] = [3000, "W:41,1", "I:78,1"]
  57.   RECIPE_WEAPON[44] = [3000, "W:43,1", "I:78,1"]
  58.   RECIPE_WEAPON[46] = [3000, "W:45,1", "I:78,1"]
  59.    
  60.           #########防具########
  61.              #####浅海塔域###
  62.   RECIPE_ARMOR[40] = [1500, "I:95,3"]
  63.   RECIPE_ARMOR[41] = [1500, "I:95,3"]
  64.   RECIPE_ARMOR[42] = [1500, "I:95,3"]
  65.   RECIPE_ARMOR[43] = [1500, "I:95,3"]
  66.   RECIPE_ARMOR[44] = [1500, "I:95,3"]
  67.   RECIPE_ARMOR[45] = [1500, "I:95,1","I:93,2"]
  68.   RECIPE_ARMOR[46] = [1500, "I:93,3"]
  69.   RECIPE_ARMOR[47] = [1500, "I:93,3"]
  70.   RECIPE_ARMOR[48] = [1500, "I:93,3"]
  71.   RECIPE_ARMOR[49] = [1500, "I:93,3"]
  72.   RECIPE_ARMOR[50] = [1500, "I:93,3"]
  73.   RECIPE_ARMOR[51] = [1500, "I:93,3"]
  74.   RECIPE_ARMOR[52] = [1500, "I:93,3"]
  75.   RECIPE_ARMOR[53] = [1500, "I:93,3"]
  76.   RECIPE_ARMOR[54] = [1500, "I:93,3"]
  77.   RECIPE_ARMOR[55] = [1500, "I:93,3"]
  78.   RECIPE_ARMOR[56] = [1500, "I:94,3"]
  79.   RECIPE_ARMOR[57] = [1500, "I:94,3"]
  80.   RECIPE_ARMOR[58] = [1500, "I:94,3"]
  81.   RECIPE_ARMOR[59] = [1500, "I:94,3"]
  82.   RECIPE_ARMOR[60] = [1500, "I:94,3"]
  83.   
  84.   RECIPE_ARMOR[61] = [25000, "I:98,5"]
  85.   RECIPE_ARMOR[62] = [25000, "I:97,5"]
  86.   RECIPE_ARMOR[63] = [40000, "I:96,5"]
  87.   
  88.   RECIPE_ARMOR[67] = [2000, "A:40,1", "I:46,1"]
  89.   RECIPE_ARMOR[68] = [2000, "A:41,1", "I:46,1"]
  90.   RECIPE_ARMOR[69] = [2000, "A:42,1", "I:46,1"]
  91.   RECIPE_ARMOR[70] = [2000, "A:43,1", "I:46,1"]
  92.   RECIPE_ARMOR[71] = [2000, "A:44,1", "I:46,1"]
  93.   RECIPE_ARMOR[72] = [2000, "A:45,1", "I:46,1"]
  94.   RECIPE_ARMOR[73] = [2000, "A:46,1", "I:46,1"]
  95.   RECIPE_ARMOR[74] = [2000, "A:47,1", "I:46,1"]
  96.   RECIPE_ARMOR[75] = [2000, "A:48,1", "I:46,1"]
  97.   RECIPE_ARMOR[76] = [2000, "A:49,1", "I:46,1"]
  98.   RECIPE_ARMOR[77] = [2000, "A:50,1", "I:46,1"]
  99.   RECIPE_ARMOR[78] = [2000, "A:51,1", "I:46,1"]
  100.   RECIPE_ARMOR[79] = [2000, "A:52,1", "I:46,1"]
  101.   RECIPE_ARMOR[80] = [2000, "A:53,1", "I:46,1"]
  102.   RECIPE_ARMOR[81] = [2000, "A:54,1", "I:46,1"]
  103.   RECIPE_ARMOR[82] = [2000, "A:55,1", "I:46,1"]
  104.   RECIPE_ARMOR[83] = [2000, "A:56,1", "I:46,1"]
  105.   RECIPE_ARMOR[84] = [2000, "A:57,1", "I:46,1"]
  106.   RECIPE_ARMOR[85] = [2000, "A:58,1", "I:46,1"]
  107.   RECIPE_ARMOR[86] = [2000, "A:59,1", "I:46,1"]
  108.   RECIPE_ARMOR[87] = [2000, "A:60,1", "I:46,1"]
  109.   
  110.   RECIPE_ARMOR[37] = [30000, "I:48,7"]
  111.   RECIPE_ARMOR[38] = [25000, "I:49,5"]
  112.   RECIPE_ARMOR[39] = [25000, "I:48,5"]
  113.   RECIPE_ARMOR[106]= [80000, "I:57,1"]
  114.   RECIPE_ARMOR[64] = [12000, "A:37,1", "I:45,1"]
  115.   RECIPE_ARMOR[65] = [12000, "A:38,1", "I:45,1"]
  116.   RECIPE_ARMOR[66] = [18000, "A:39,1", "I:45,1"]

  117.   RECIPE_ARMOR[88] = [20000, "A:61,1", "I:46,1"]
  118.   RECIPE_ARMOR[89] = [20000, "A:62,1", "I:46,1"]
  119.   RECIPE_ARMOR[90] = [25000, "A:63,1", "I:46,1"]
  120.   RECIPE_ARMOR[91] = [800,  "I:47,6"]
  121.   RECIPE_ARMOR[92] = [1200,  "I:47,8"]
  122.   RECIPE_ARMOR[93] = [800,  "I:47,6"]
  123.   RECIPE_ARMOR[94] = [800,  "I:47,6"]
  124.   RECIPE_ARMOR[95] = [800,  "I:47,6"]
  125.   RECIPE_ARMOR[96] = [2000, "A:91,1", "I:46,1"]
  126.   RECIPE_ARMOR[97] = [2000, "A:92,1", "I:46,1"]
  127.   RECIPE_ARMOR[98] = [2000, "A:93,1", "I:46,1"]
  128.   RECIPE_ARMOR[99] = [2000, "A:94,1", "I:46,1"]
  129.   RECIPE_ARMOR[100] = [2000, "A:95,1", "I:46,1"]
  130.   RECIPE_ARMOR[122] = [4000,  "I:58,1"]
  131.   RECIPE_ARMOR[123] = [4000,  "I:58,1"]
  132.   RECIPE_ARMOR[124] = [4000,  "I:58,1"]
  133.   RECIPE_ARMOR[125] = [4000,  "I:58,1"]
  134.   RECIPE_ARMOR[126] = [4000,  "I:58,1"]
  135.   RECIPE_ARMOR[127] = [4000,  "I:66,1"]
  136.   RECIPE_ARMOR[128] = [4000,  "I:66,1"]
  137.   RECIPE_ARMOR[129] = [4000,  "I:66,1"]
  138.   RECIPE_ARMOR[130] = [4000,  "I:66,1"]
  139.   RECIPE_ARMOR[131] = [4000,  "I:66,1"]
  140.   RECIPE_ARMOR[132] = [4000,  "I:64,1"]
  141.   RECIPE_ARMOR[133] = [4000,  "I:64,1"]
  142.   RECIPE_ARMOR[134] = [4000,  "I:64,1"]
  143.   RECIPE_ARMOR[135] = [4000,  "I:64,1"]
  144.   RECIPE_ARMOR[136] = [4000,  "I:64,1"]
  145.   RECIPE_ARMOR[137] = [4000,  "I:65,1"]
  146.   RECIPE_ARMOR[138] = [4000,  "I:65,1"]
  147.   RECIPE_ARMOR[139] = [4000,  "I:65,1"]
  148.   RECIPE_ARMOR[140] = [4000,  "I:65,1"]
  149.   RECIPE_ARMOR[141] = [4000,  "I:65,1"]
  150.   RECIPE_ARMOR[142] = [4000,  "I:65,1"]
  151.   RECIPE_ARMOR[143] = [4000,  "I:65,1"]
  152.   RECIPE_ARMOR[144] = [4000,  "I:65,1"]
  153.   RECIPE_ARMOR[145] = [4000,  "I:65,1"]
  154.   RECIPE_ARMOR[146] = [4000,  "I:65,1"]
  155.   RECIPE_ARMOR[172] = [4000,  "I:63,1"]
  156.   RECIPE_ARMOR[179] = [4000,  "I:81,2"]
  157.   
  158.   RECIPE_ARMOR[147] = [3000, "A:122,1", "I:78,1"]
  159.   RECIPE_ARMOR[148] = [3000, "A:123,1", "I:78,1"]
  160.   RECIPE_ARMOR[149] = [3000, "A:124,1", "I:78,1"]
  161.   RECIPE_ARMOR[150] = [3000, "A:125,1", "I:78,1"]
  162.   RECIPE_ARMOR[151] = [3000, "A:126,1", "I:78,1"]
  163.   RECIPE_ARMOR[152] = [3000, "A:127,1", "I:78,1"]
  164.   RECIPE_ARMOR[153] = [3000, "A:128,1", "I:78,1"]
  165.   RECIPE_ARMOR[154] = [3000, "A:129,1", "I:78,1"]
  166.   RECIPE_ARMOR[155] = [3000, "A:130,1", "I:78,1"]
  167.   RECIPE_ARMOR[156] = [3000, "A:131,1", "I:78,1"]
  168.   RECIPE_ARMOR[157] = [3000, "A:132,1", "I:78,1"]
  169.   RECIPE_ARMOR[158] = [3000, "A:133,1", "I:78,1"]
  170.   RECIPE_ARMOR[159] = [3000, "A:134,1", "I:78,1"]
  171.   RECIPE_ARMOR[160] = [3000, "A:135,1", "I:78,1"]
  172.   RECIPE_ARMOR[161] = [3000, "A:136,1", "I:78,1"]
  173.   RECIPE_ARMOR[162] = [3000, "A:137,1", "I:78,1"]
  174.   RECIPE_ARMOR[163] = [3000, "A:138,1", "I:78,1"]
  175.   RECIPE_ARMOR[164] = [3000, "A:139,1", "I:78,1"]
  176.   RECIPE_ARMOR[165] = [3000, "A:140,1", "I:78,1"]
  177.   RECIPE_ARMOR[166] = [3000, "A:141,1", "I:78,1"]
  178.   RECIPE_ARMOR[167] = [3000, "A:142,1", "I:78,1"]
  179.   RECIPE_ARMOR[168] = [3000, "A:143,1", "I:78,1"]
  180.   RECIPE_ARMOR[169] = [3000, "A:144,1", "I:78,1"]
  181.   RECIPE_ARMOR[170] = [3000, "A:145,1", "I:78,1"]
  182.   RECIPE_ARMOR[171] = [3000, "A:146,1", "I:78,1"]
  183.   RECIPE_ARMOR[173] = [3000, "A:172,1", "I:78,1"]
  184.   RECIPE_ARMOR[180] = [3000, "A:179,1", "I:78,1"]

  185.   
  186.   #
  187.   
  188. =begin
  189.   RECIPE_ARMOR[1]= [50,"A:10","I:56","I:22"]
  190.   RECIPE_ARMOR[2]= [100,"A:1","I:32","I:74,2"]
  191.   RECIPE_ARMOR[8]  = [50,"I:74,3"]
  192.   RECIPE_ARMOR[9]= [100,"A:8","I:32","I:77"]
  193.   RECIPE_ARMOR[14] = [50,"I:31","I:91"]
  194.   RECIPE_ARMOR[15] = [50,"I:32","I:92"]
  195.   RECIPE_ARMOR[16] = [50,"I:33","I:93"]
  196.   RECIPE_ARMOR[22]= [100,"I:32","I:49,2","I:77"]
  197.   RECIPE_ARMOR[61]  = [200,"I:73","I:92,2","I:117,3","I:49,2","I:86,1","I:06,5"]
  198.   RECIPE_ARMOR[62]  = [250,"I:73","I:92,2","I:32","I:49,2","I:86,1","I:06,5"]
  199. =end  
  200.   
  201.   # ◆ 合成コマンド名
  202.   #  "購入する" コマンドの位置に表示されます。
  203.   #  ※ 他のコマンド名は [Vocab] で変更可能。
  204.   VOCAB_COMPOSE_ITEM = "制作"
  205.   # ◆ 合成アイテム情報切り替えボタン
  206.   #  「素材リスト <--> 能力値変化(装備品のみ)」を切り替えるボタン。
  207.   #  使用しない場合は nil を指定。
  208.   SWITCH_INFO_BUTTON = Input::X

  209.   # ◆ 必要素材リストをコンパクトにする
  210.   #  素材数が多い場合は true にしてください。
  211.   COMPACT_MATERIAL_LIST = true
  212.   # ◆ コマンドウィンドウを表示しない
  213.   #  true  : XP 版と同様のスタイル
  214.   #  false : VX 仕様
  215.   HIDE_COMMAND_WINDOW   = false
  216.   # ◆ 所持金ウィンドウを表示しない
  217.   #  true  : 消える
  218.   #  false : 表示
  219.   #  HIDE_COMMAND_WINDOW が false のときは、常に false 扱いとなります。
  220.   HIDE_GOLD_WINDOW      = false
  221.   # ◆ 合成費用が 0 の場合、費用を表示しない
  222.   #  true  : 表示しない
  223.   #  false : 0 と表示
  224.   HIDE_ZERO_COST        = true

  225.   # ◆ 合成済みのレシピは常に表示する
  226.   #  true  : 一度でも合成したことがあれば常にリストに表示
  227.   #  false : 合成したことがあっても↓の条件に従う
  228.   SHOW_COMPOSED_RECIPE      = false
  229.   # ◆ 合成費用不足のレシピを隠す
  230.   #  true  : 費用不足ならリストに表示しない
  231.   #  false : 費用不足でも表示
  232.   HIDE_SHORTAGE_COST        = false
  233.   # ◆ 合成素材不足のレシピを隠す
  234.   #  true  : 素材不足ならリストに表示しない
  235.   #  false : 素材不足でも表示
  236.   HIDE_SHORTAGE_MATERIAL    = false
  237.   # ◆ 「判明・解禁・存在」機能を使用する
  238.   #  true  : 判明・解禁・存在するまで表示しない
  239.   #  false : 素材さえあれば合成可能
  240.   #  true の場合、仕様上強制的に
  241.   #   HIDE_SHORTAGE_COST     = false
  242.   #   HIDE_SHORTAGE_MATERIAL = false
  243.   #  という扱いになります。
  244.   NEED_RECIPE_EXIST         = false

  245.   # ◆ 合成したことがないレシピのアイテム名を隠す
  246.   MASK_UNKNOWN_RECIPE_NAME     = false
  247.   # ◆ 合成したことがないレシピに表示する名前
  248.   #  1文字だけ指定すると、アイテム名と同じ文字数に拡張されます。
  249.   UNKNOWN_NAME_MASK            = "?"
  250.   # ◆ 合成したことがないレシピのヘルプを隠す
  251.   HIDE_UNKNOWN_RECIPE_HELP     = true
  252.   # ◆ 合成したことがないレシピに表示するヘルプ
  253.   UNKNOWN_RECIPE_HELP          = "开始进行武器开发锻造。"
  254.   # ◆ 判明・解禁していないレシピの素材を隠す
  255.   #  NEED_RECIPE_EXIST = false の場合、常に false 扱いとなります。
  256.   HIDE_UNKNOWN_RECIPE_MATERIAL = false
  257.   # ◆ 素材を隠す場合の表示文字列
  258.   UNKNOWN_RECIPE_MATERIAL      = "????????"
  259. end
  260. end

  261. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  262. $imported = {} if $imported == nil
  263. $imported["ComposeItem"] = true

  264. module KGC::ComposeItem
  265.   unless NEED_RECIPE_EXIST
  266.     HIDE_UNKNOWN_RECIPE_MATERIAL = false
  267.   end

  268.   module Regexp
  269.     # レシピ
  270.     RECIPE = /([IWA])\s*:\s*(\d+)(\s*,\s*\d+)?/i
  271.   end
  272. end

  273. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  274. #==============================================================================
  275. # □ KGC::Commands
  276. #==============================================================================

  277. module KGC
  278. module Commands
  279.   module_function
  280.   #--------------------------------------------------------------------------
  281.   # ○ レシピ判明フラグを設定
  282.   #     type    : レシピのタイプ (0..アイテム  1..武器  2..防具)
  283.   #     id      : アイテムの ID
  284.   #     enabled : true..判明  false..未判明
  285.   #--------------------------------------------------------------------------
  286.   def set_recipe_cleared(type, id, enabled = true)
  287.     item = nil
  288.     case type
  289.     when 0, :item    # アイテム
  290.       item = $data_items[id]
  291.     when 1, :weapon  # 武器
  292.       item = $data_weapons[id]
  293.     when 2, :armor   # 防具
  294.       item = $data_armors[id]
  295.     end

  296.     $game_party.set_recipe_cleared(item, enabled) if item != nil
  297.   end
  298.   #--------------------------------------------------------------------------
  299.   # ○ レシピ解禁フラグを設定
  300.   #     type    : レシピのタイプ (0..アイテム  1..武器  2..防具)
  301.   #     id      : アイテムの ID
  302.   #     enabled : true..解禁  false..未解禁
  303.   #--------------------------------------------------------------------------
  304.   def set_recipe_opened(type, id, enabled = true)
  305.     item = nil
  306.     case type
  307.     when 0, :item    # アイテム
  308.       item = $data_items[id]
  309.     when 1, :weapon  # 武器
  310.       item = $data_weapons[id]
  311.     when 2, :armor   # 防具
  312.       item = $data_armors[id]
  313.     end

  314.     $game_party.set_recipe_opened(item, enabled) if item != nil
  315.   end
  316.   #--------------------------------------------------------------------------
  317.   # ○ レシピ存在フラグを設定
  318.   #     type    : レシピのタイプ (0..アイテム  1..武器  2..防具)
  319.   #     id      : アイテムの ID
  320.   #     enabled : true or false
  321.   #--------------------------------------------------------------------------
  322.   def set_recipe_exist(type, id, enabled = true)
  323.     item = nil
  324.     case type
  325.     when 0, :item    # アイテム
  326.       item = $data_items[id]
  327.     when 1, :weapon  # 武器
  328.       item = $data_weapons[id]
  329.     when 2, :armor   # 防具
  330.       item = $data_armors[id]
  331.     end

  332.     $game_party.set_recipe_exist(item, enabled) if item != nil
  333.   end
  334. end
  335. end

  336. class Game_Interpreter
  337.   include KGC::Commands
  338. end

  339. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  340. #==============================================================================
  341. # ■ Vocab
  342. #==============================================================================

  343. module Vocab
  344.   # 合成画面
  345.   ComposeItem = KGC::ComposeItem::VOCAB_COMPOSE_ITEM
  346. end

  347. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  348. #==============================================================================
  349. # ■ RPG::BaseItem
  350. #==============================================================================

  351. class RPG::BaseItem
  352.   #--------------------------------------------------------------------------
  353.   # ○ クラス変数
  354.   #--------------------------------------------------------------------------
  355.   @@__masked_name =
  356.     KGC::ComposeItem::UNKNOWN_NAME_MASK  # マスク名
  357.   @@__expand_masked_name = false         # マスク名拡張表示フラグ

  358.   if @@__masked_name != nil
  359.     @@__expand_masked_name = (@@__masked_name.scan(/./).size == 1)
  360.   end
  361.   #--------------------------------------------------------------------------
  362.   # ○ アイテム合成のキャッシュ生成
  363.   #--------------------------------------------------------------------------
  364.   def create_compose_item_cache
  365.     @__compose_cost = 0
  366.     @__compose_materials = []

  367.     # レシピ取得
  368.     recipe = nil
  369.     case self
  370.     when RPG::Item    # アイテム
  371.       recipe = KGC::ComposeItem::RECIPE_ITEM[self.id]
  372.     when RPG::Weapon  # 武器
  373.       recipe = KGC::ComposeItem::RECIPE_WEAPON[self.id]
  374.     when RPG::Armor   # 防具
  375.       recipe = KGC::ComposeItem::RECIPE_ARMOR[self.id]
  376.     end
  377.     return if recipe == nil
  378.     recipe = recipe.dup

  379.     @__compose_cost = recipe.shift
  380.     # 素材リストを作成
  381.     recipe.each { |r|
  382.       if r =~ KGC::ComposeItem::Regexp::RECIPE
  383.         material = Game_ComposeMaterial.new
  384.         material.kind = $1.upcase                    # 素材の種類を取得
  385.         material.id = $2.to_i                        # 素材の ID を取得
  386.         if $3 != nil
  387.           material.number = [$3[/\d+/].to_i, 0].max  # 必要数を取得
  388.         end
  389.         @__compose_materials << material
  390.       end
  391.     }
  392.   end
  393.   #--------------------------------------------------------------------------
  394.   # ○ マスク名
  395.   #--------------------------------------------------------------------------
  396.   def masked_name
  397.     if @@__expand_masked_name
  398.       # マスク名を拡張して表示
  399.       return @@__masked_name * self.name.scan(/./).size
  400.     else
  401.       return @@__masked_name
  402.     end
  403.   end
  404.   #--------------------------------------------------------------------------
  405.   # ○ 合成用費用
  406.   #--------------------------------------------------------------------------
  407.   def compose_cost
  408.     create_compose_item_cache if @__compose_cost == nil
  409.     return @__compose_cost
  410.   end
  411.   #--------------------------------------------------------------------------
  412.   # ○ 合成用素材リスト
  413.   #--------------------------------------------------------------------------
  414.   def compose_materials
  415.     create_compose_item_cache if @__compose_materials == nil
  416.     return @__compose_materials
  417.   end
  418.   #--------------------------------------------------------------------------
  419.   # ○ 合成アイテムか
  420.   #--------------------------------------------------------------------------
  421.   def is_compose?
  422.     return !compose_materials.empty?
  423.   end
  424. end

  425. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  426. #==============================================================================
  427. # ■ Game_Party
  428. #==============================================================================

  429. class Game_Party < Game_Unit
  430.   #--------------------------------------------------------------------------
  431.   # ○ 合成済みフラグをクリア
  432.   #--------------------------------------------------------------------------
  433.   def clear_composed_flag
  434.     @item_composed = {}
  435.     @weapon_composed = {}
  436.     @armor_composed = {}
  437.   end
  438.   #--------------------------------------------------------------------------
  439.   # ○ レシピ判明フラグをクリア
  440.   #--------------------------------------------------------------------------
  441.   def clear_recipe_cleared_flag
  442.     @item_recipe_cleared = {}
  443.     @weapon_recipe_cleared = {}
  444.     @armor_recipe_cleared = {}
  445.   end
  446.   #--------------------------------------------------------------------------
  447.   # ○ レシピ解禁フラグをクリア
  448.   #--------------------------------------------------------------------------
  449.   def clear_recipe_opened_flag
  450.     @item_recipe_opened = {}
  451.     @weapon_recipe_opened = {}
  452.     @armor_recipe_opened = {}
  453.   end
  454.   #--------------------------------------------------------------------------
  455.   # ○ レシピ存在フラグをクリア
  456.   #--------------------------------------------------------------------------
  457.   def clear_recipe_exist_flag
  458.     @item_recipe_exist = {}
  459.     @weapon_recipe_exist = {}
  460.     @armor_recipe_exist = {}
  461.   end
  462.   #--------------------------------------------------------------------------
  463.   # ○ アイテムの合成済みフラグを設定
  464.   #     item : アイテム
  465.   #     flag : true..合成済み  false..未合成
  466.   #--------------------------------------------------------------------------
  467.   def set_item_composed(item, flag = true)
  468.     return false unless item.is_a?(RPG::BaseItem)  # アイテム以外
  469.     return false unless item.is_compose?           # 合成アイテム以外

  470.     # 合成済みフラグを格納するハッシュを作成
  471.     clear_composed_flag if @item_composed == nil

  472.     # 合成済みフラグをセット
  473.     case item
  474.     when RPG::Item    # アイテム
  475.       @item_composed[item.id] = flag
  476.     when RPG::Weapon  # 武器
  477.       @weapon_composed[item.id] = flag
  478.     when RPG::Armor   # 防具
  479.       @armor_composed[item.id] = flag
  480.     end
  481.   end
  482.   #--------------------------------------------------------------------------
  483.   # ○ アイテムの合成済み判定
  484.   #     item : アイテム
  485.   #--------------------------------------------------------------------------
  486.   def item_composed?(item)
  487.     return false unless item.is_a?(RPG::BaseItem)  # アイテム以外
  488.     return false unless item.is_compose?           # 合成アイテム以外

  489.     # 合成済みフラグを格納するハッシュを作成
  490.     clear_composed_flag if @item_composed == nil

  491.     # 合成済み判定
  492.     case item
  493.     when RPG::Item    # アイテム
  494.       return @item_composed[item.id]
  495.     when RPG::Weapon  # 武器
  496.       return @weapon_composed[item.id]
  497.     when RPG::Armor   # 防具
  498.       return @armor_composed[item.id]
  499.     end
  500.     return false
  501.   end
  502.   #--------------------------------------------------------------------------
  503.   # ○ アイテムの合成済みフラグを設定
  504.   #     item : アイテム
  505.   #     flag : true..合成済み  false..未合成
  506.   #--------------------------------------------------------------------------
  507.   def set_item_composed(item, flag = true)
  508.     return false unless item.is_a?(RPG::BaseItem)  # アイテム以外
  509.     return false unless item.is_compose?           # 合成アイテム以外

  510.     # 合成済みフラグを格納するハッシュを作成
  511.     clear_composed_flag if @item_composed == nil

  512.     # 合成済みフラグをセット
  513.     case item
  514.     when RPG::Item    # アイテム
  515.       @item_composed[item.id] = flag
  516.     when RPG::Weapon  # 武器
  517.       @weapon_composed[item.id] = flag
  518.     when RPG::Armor   # 防具
  519.       @armor_composed[item.id] = flag
  520.     end
  521.   end
  522.   #--------------------------------------------------------------------------
  523.   # ○ レシピ判明判定
  524.   #     item : アイテム
  525.   #--------------------------------------------------------------------------
  526.   def recipe_cleared?(item)
  527.     return false unless item.is_a?(RPG::BaseItem)  # アイテム以外
  528.     return false unless item.is_compose?           # 合成アイテム以外

  529.     # 判明フラグを格納するハッシュを作成
  530.     clear_recipe_cleared_flag if @item_recipe_cleared == nil

  531.     # 判定
  532.     case item
  533.     when RPG::Item    # アイテム
  534.       return @item_recipe_cleared[item.id]
  535.     when RPG::Weapon  # 武器
  536.       return @weapon_recipe_cleared[item.id]
  537.     when RPG::Armor   # 防具
  538.       return @armor_recipe_cleared[item.id]
  539.     end
  540.     return false
  541.   end
  542.   #--------------------------------------------------------------------------
  543.   # ○ アイテムの判明フラグを設定
  544.   #     item : アイテム
  545.   #     flag : true..判明  false..未判明
  546.   #--------------------------------------------------------------------------
  547.   def set_recipe_cleared(item, flag = true)
  548.     return false unless item.is_a?(RPG::BaseItem)  # アイテム以外
  549.     return false unless item.is_compose?           # 合成アイテム以外

  550.     # 判明フラグを格納するハッシュを作成
  551.     clear_recipe_cleared_flag if @item_recipe_cleared == nil

  552.     # 判明フラグをセット
  553.     case item
  554.     when RPG::Item    # アイテム
  555.       @item_recipe_cleared[item.id] = flag
  556.     when RPG::Weapon  # 武器
  557.       @weapon_recipe_cleared[item.id] = flag
  558.     when RPG::Armor   # 防具
  559.       @armor_recipe_cleared[item.id] = flag
  560.     end
  561.   end
  562.   #--------------------------------------------------------------------------
  563.   # ○ レシピ解禁判定
  564.   #     item : アイテム
  565.   #--------------------------------------------------------------------------
  566.   def recipe_opened?(item)
  567.     return false unless item.is_a?(RPG::BaseItem)  # アイテム以外
  568.     return false unless item.is_compose?           # 合成アイテム以外

  569.     # 解禁フラグを格納するハッシュを作成
  570.     clear_recipe_opened_flag if @item_recipe_opened == nil

  571.     # 判定
  572.     case item
  573.     when RPG::Item    # アイテム
  574.       return @item_recipe_opened[item.id]
  575.     when RPG::Weapon  # 武器
  576.       return @weapon_recipe_opened[item.id]
  577.     when RPG::Armor   # 防具
  578.       return @armor_recipe_opened[item.id]
  579.     end
  580.     return false
  581.   end
  582.   #--------------------------------------------------------------------------
  583.   # ○ アイテムの解禁フラグを設定
  584.   #     item : アイテム
  585.   #     flag : true..解禁  false..未解禁
  586.   #--------------------------------------------------------------------------
  587.   def set_recipe_opened(item, flag = true)
  588.     return false unless item.is_a?(RPG::BaseItem)  # アイテム以外
  589.     return false unless item.is_compose?           # 合成アイテム以外

  590.     # 解禁フラグを格納するハッシュを作成
  591.     clear_recipe_opened_flag if @item_recipe_opened == nil

  592.     # 解禁フラグをセット
  593.     case item
  594.     when RPG::Item    # アイテム
  595.       @item_recipe_opened[item.id] = flag
  596.     when RPG::Weapon  # 武器
  597.       @weapon_recipe_opened[item.id] = flag
  598.     when RPG::Armor   # 防具
  599.       @armor_recipe_opened[item.id] = flag
  600.     end
  601.   end
  602.   #--------------------------------------------------------------------------
  603.   # ○ レシピ存在判定
  604.   #     item : アイテム
  605.   #--------------------------------------------------------------------------
  606.   def recipe_exist?(item)
  607.     return false unless item.is_a?(RPG::BaseItem)  # アイテム以外
  608.     return false unless item.is_compose?           # 合成アイテム以外

  609.     # 存在フラグを格納するハッシュを作成
  610.     clear_recipe_exist_flag if @item_recipe_exist == nil

  611.     # 判定
  612.     case item
  613.     when RPG::Item    # アイテム
  614.       return @item_recipe_exist[item.id]
  615.     when RPG::Weapon  # 武器
  616.       return @weapon_recipe_exist[item.id]
  617.     when RPG::Armor   # 防具
  618.       return @armor_recipe_exist[item.id]
  619.     end
  620.     return false
  621.   end
  622.   #--------------------------------------------------------------------------
  623.   # ○ アイテムの存在フラグを設定
  624.   #     item : アイテム
  625.   #     flag : true..存在  false..存在しない
  626.   #--------------------------------------------------------------------------
  627.   def set_recipe_exist(item, flag = true)
  628.     return false unless item.is_a?(RPG::BaseItem)  # アイテム以外
  629.     return false unless item.is_compose?           # 合成アイテム以外

  630.     # 存在フラグを格納するハッシュを作成
  631.     clear_recipe_exist_flag if @item_recipe_exist == nil

  632.     # 存在フラグをセット
  633.     case item
  634.     when RPG::Item    # アイテム
  635.       @item_recipe_exist[item.id] = flag
  636.     when RPG::Weapon  # 武器
  637.       @weapon_recipe_exist[item.id] = flag
  638.     when RPG::Armor   # 防具
  639.       @armor_recipe_exist[item.id] = flag
  640.     end
  641.   end
  642.   #--------------------------------------------------------------------------
  643.   # ○ アイテム名マスク判定
  644.   #     item : アイテム
  645.   #--------------------------------------------------------------------------
  646.   def item_name_mask?(item)
  647.     return false unless KGC::ComposeItem::MASK_UNKNOWN_RECIPE_NAME
  648.     return false if item_composed?(item)   # 合成済み
  649.     return false if recipe_cleared?(item)  # 判明済み

  650.     return true
  651.   end
  652.   #--------------------------------------------------------------------------
  653.   # ○ 素材非表示判定
  654.   #     item : アイテム
  655.   #--------------------------------------------------------------------------
  656.   def item_compose_material_mask?(item)
  657.     return false unless KGC::ComposeItem::HIDE_UNKNOWN_RECIPE_MATERIAL
  658.     return false if item_composed?(item)   # 合成済み
  659.     return false if recipe_cleared?(item)  # 判明済み
  660.     return false if recipe_opened?(item)   # 解禁済み

  661.     return true
  662.   end
  663.   #--------------------------------------------------------------------------
  664.   # ○ アイテムの合成可能判定
  665.   #     item : アイテム
  666.   #--------------------------------------------------------------------------
  667.   def item_can_compose?(item)
  668.     return false unless item_compose_cost_satisfy?(item)
  669.     return false unless item_compose_material_satisfy?(item)

  670.     return true
  671.   end
  672.   #--------------------------------------------------------------------------
  673.   # ○ 合成アイテムの資金充足判定
  674.   #     item : アイテム
  675.   #--------------------------------------------------------------------------
  676.   def item_compose_cost_satisfy?(item)
  677.     return false unless item.is_a?(RPG::BaseItem)  # アイテム以外
  678.     return false unless item.is_compose?           # 合成アイテム以外

  679.     return (gold >= item.compose_cost)
  680.   end
  681.   #--------------------------------------------------------------------------
  682.   # ○ 合成アイテムの素材充足判定
  683.   #     item : アイテム
  684.   #--------------------------------------------------------------------------
  685.   def item_compose_material_satisfy?(item)
  686.     return false unless item.is_a?(RPG::BaseItem)  # アイテム以外
  687.     return false unless item.is_compose?           # 合成アイテム以外

  688.     item.compose_materials.each { |material|
  689.       num = item_number(material.item)
  690.       return false if num < material.number || num == 0  # 素材不足
  691.     }
  692.     return true
  693.   end
  694.   #--------------------------------------------------------------------------
  695.   # ○ アイテムの合成可能数を取得
  696.   #     item : アイテム
  697.   #--------------------------------------------------------------------------
  698.   def number_of_composable(item)
  699.     return 0 unless item.is_a?(RPG::BaseItem)  # アイテム以外
  700.     return 0 unless item.is_compose?           # 合成アイテム以外

  701.     number = ($imported["LimitBreak"] ? item.number_limit : 99)
  702.     if item.compose_cost > 0
  703.       number = [number, gold / item.compose_cost].min
  704.     end
  705.     # 素材数判定
  706.     item.compose_materials.each { |material|
  707.       next if material.number == 0  # 必要数 0 は無視
  708.       n = item_number(material.item) / material.number
  709.       number = [number, n].min
  710.     }
  711.     return number
  712.   end
  713. end

  714. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  715. #==============================================================================
  716. # □ Game_ComposeMaterial
  717. #------------------------------------------------------------------------------
  718. #   合成素材の情報を格納するクラスです。
  719. #==============================================================================

  720. class Game_ComposeMaterial
  721.   #--------------------------------------------------------------------------
  722.   # ○ 公開インスタンス変数
  723.   #--------------------------------------------------------------------------
  724.   attr_accessor :kind                     # アイテムの種類 (/[IWA]/)
  725.   attr_accessor :id                       # アイテムの ID
  726.   attr_accessor :number                   # 必要数
  727.   #--------------------------------------------------------------------------
  728.   # ○ オブジェクト初期化
  729.   #--------------------------------------------------------------------------
  730.   def initialize
  731.     @kind = "I"
  732.     @id = 0
  733.     @number = 1
  734.   end
  735.   #--------------------------------------------------------------------------
  736.   # ○ アイテム取得
  737.   #--------------------------------------------------------------------------
  738.   def item
  739.     case @kind
  740.     when "I"  # アイテム
  741.       return $data_items[@id]
  742.     when "W"  # 武器
  743.       return $data_weapons[@id]
  744.     when "A"  # 防具
  745.       return $data_armors[@id]
  746.     else
  747.       return nil
  748.     end
  749.   end
  750. end

  751. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  752. #==============================================================================
  753. # ■ Window_Base
  754. #==============================================================================

  755. class Window_Base < Window
  756.   #--------------------------------------------------------------------------
  757.   # ○ マスク済みアイテム名の描画
  758.   #     item    : アイテム (スキル、武器、防具でも可)
  759.   #     x       : 描画先 X 座標
  760.   #     y       : 描画先 Y 座標
  761.   #     enabled : 有効フラグ。false のとき半透明で描画
  762.   #--------------------------------------------------------------------------
  763.   def draw_masked_item_name(item, x, y, enabled = true)
  764.     return if item == nil

  765.     draw_icon(item.icon_index, x, y, enabled)
  766.     self.contents.font.color = normal_color
  767.     self.contents.font.color.alpha = enabled ? 255 : 128
  768.     self.contents.draw_text(x + 24, y, 172, WLH, item.masked_name)
  769.   end
  770. end

  771. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  772. #==============================================================================
  773. # □ Window_ComposeNumber
  774. #------------------------------------------------------------------------------
  775. #   合成画面で、合成するアイテムの個数を入力するウィンドウです。
  776. #==============================================================================

  777. class Window_ComposeNumber < Window_ShopNumber
  778.   #--------------------------------------------------------------------------
  779.   # ○ 公開インスタンス変数
  780.   #--------------------------------------------------------------------------
  781.   attr_accessor :sell_flag                # 売却フラグ
  782.   #--------------------------------------------------------------------------
  783.   # ● オブジェクト初期化
  784.   #     x : ウィンドウの X 座標
  785.   #     y : ウィンドウの Y 座標
  786.   #--------------------------------------------------------------------------
  787.   alias initialize_KGC_ComposeItem initialize unless $@
  788.   def initialize(x, y)
  789.     @sell_flag = false

  790.     initialize_KGC_ComposeItem(x, y)
  791.   end
  792.   #--------------------------------------------------------------------------
  793.   # ● リフレッシュ
  794.   #--------------------------------------------------------------------------
  795.   def refresh
  796.     y = 96
  797.     self.contents.clear
  798.     if @sell_flag || !$game_party.item_name_mask?(@item)
  799.       draw_item_name(@item, 0, y)
  800.     else
  801.       draw_masked_item_name(@item, 0, y)
  802.     end
  803.     self.contents.font.color = normal_color
  804.     self.contents.draw_text(212, y, 20, WLH, "×")
  805.     self.contents.draw_text(248, y, 20, WLH, @number, 2)
  806.     self.cursor_rect.set(244, y, 28, WLH)
  807.     if !KGC::ComposeItem::HIDE_ZERO_COST || @price > 0
  808.       draw_currency_value(@price * @number, 4, y + WLH * 2, 264)
  809.     end
  810.   end
  811. end

  812. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  813. #==============================================================================
  814. # □ Window_ComposeItem
  815. #------------------------------------------------------------------------------
  816. #   合成画面で、合成できる商品の一覧を表示するウィンドウです。
  817. #==============================================================================

  818. class Window_ComposeItem < Window_ShopBuy
  819.   #--------------------------------------------------------------------------
  820.   # ● リフレッシュ
  821.   #--------------------------------------------------------------------------
  822.   def refresh
  823.     @data = []
  824.     for goods_item in @shop_goods
  825.       case goods_item[0]
  826.       when 0
  827.         item = $data_items[goods_item[1]]
  828.       when 1
  829.         item = $data_weapons[goods_item[1]]
  830.       when 2
  831.         item = $data_armors[goods_item[1]]
  832.       end
  833.       # 合成アイテムのみ追加
  834.       @data.push(item) if include?(item)
  835.     end
  836.     @item_max = @data.size
  837.     create_contents
  838.     for i in 0...@item_max
  839.       draw_item(i)
  840.     end
  841.   end
  842.   #--------------------------------------------------------------------------
  843.   # ○ アイテムをリストに含めるかどうか
  844.   #     item : アイテム
  845.   #--------------------------------------------------------------------------
  846.   def include?(item)
  847.     return false if item == nil           # アイテムが nil なら含めない
  848.     return false unless item.is_compose?  # 合成アイテム以外は含めない

  849.     # 合成済みなら表示
  850.     if KGC::ComposeItem::SHOW_COMPOSED_RECIPE
  851.       return true if $game_party.item_composed?(item)
  852.     end
  853.     # 判明 or 解禁 or 存在済みなら表示
  854.     exist_flag = $game_party.recipe_cleared?(item) ||
  855.       $game_party.recipe_opened?(item) || $game_party.recipe_exist?(item)
  856.     if KGC::ComposeItem::NEED_RECIPE_EXIST && exist_flag
  857.       return true
  858.     end
  859.     # 費用不足なら隠す
  860.     if KGC::ComposeItem::HIDE_SHORTAGE_COST
  861.       return false unless $game_party.item_compose_cost_satisfy?(item)
  862.     end
  863.     # 素材不足なら隠す
  864.     if KGC::ComposeItem::HIDE_SHORTAGE_MATERIAL
  865.       return false unless $game_party.item_compose_material_satisfy?(item)
  866.     end

  867.     if KGC::ComposeItem::NEED_RECIPE_EXIST
  868.       # 判明 or 解禁 or 存在していない
  869.       return false unless exist_flag
  870.     end

  871.     return true
  872.   end
  873.   #--------------------------------------------------------------------------
  874.   # ○ アイテムを許可状態で表示するかどうか
  875.   #     item : アイテム
  876.   #--------------------------------------------------------------------------
  877.   def enable?(item)
  878.     return $game_party.item_can_compose?(item)
  879.   end
  880.   #--------------------------------------------------------------------------
  881.   # ● 項目の描画
  882.   #     index : 項目番号
  883.   #--------------------------------------------------------------------------
  884.   def draw_item(index)
  885.     item = @data[index]
  886.     number = $game_party.item_number(item)
  887.     limit = ($imported["LimitBreak"] ? item.number_limit : 99)
  888.     rect = item_rect(index)
  889.     self.contents.clear_rect(rect)
  890.     if $game_party.item_name_mask?(item)
  891.       draw_masked_item_name(item, rect.x, rect.y, enable?(item))
  892.     else
  893.       draw_item_name(item, rect.x, rect.y, enable?(item))
  894.     end
  895.     # 費用を描画
  896.     if !KGC::ComposeItem::HIDE_ZERO_COST || item.compose_cost > 0
  897.       rect.width -= 4
  898.       self.contents.draw_text(rect, item.compose_cost, 2)
  899.     end
  900.   end

  901.   if KGC::ComposeItem::HIDE_UNKNOWN_RECIPE_HELP
  902.   #--------------------------------------------------------------------------
  903.   # ● ヘルプテキスト更新
  904.   #--------------------------------------------------------------------------
  905.   def update_help
  906.     item = (index >= 0 ? @data[index] : nil)
  907.     if item == nil || !$game_party.item_name_mask?(item)
  908.       # アイテムが nil or マスクなしなら [Window_ShopBuy] に任せる
  909.       super
  910.     else
  911.       @help_window.set_text(KGC::ComposeItem::UNKNOWN_RECIPE_HELP)
  912.     end
  913.   end
  914.   end
  915. end

  916. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  917. #==============================================================================
  918. # □ Window_ComposeStatus
  919. #------------------------------------------------------------------------------
  920. #  合成画面で、素材の所持数や必要数を表示するウィンドウです。
  921. #==============================================================================

  922. class Window_ComposeStatus < Window_ShopStatus
  923.   #--------------------------------------------------------------------------
  924.   # ○ 表示モード
  925.   #--------------------------------------------------------------------------
  926.   MODE_MATERIAL = 0  # 素材リスト
  927.   MODE_STATUS   = 1  # パーティのステータス
  928.   #--------------------------------------------------------------------------
  929.   # ● オブジェクト初期化
  930.   #     x : ウィンドウの X 座標
  931.   #     y : ウィンドウの Y 座標
  932.   #--------------------------------------------------------------------------
  933.   def initialize(x, y)
  934.     @mode = MODE_MATERIAL
  935.     super(x, 112)
  936.   end
  937.   #--------------------------------------------------------------------------
  938.   # ○ モード変更
  939.   #--------------------------------------------------------------------------
  940.   def change_mode
  941.     case @mode
  942.     when MODE_MATERIAL
  943.       @mode = MODE_STATUS
  944.     when MODE_STATUS
  945.       @mode = MODE_MATERIAL
  946.     end
  947.     self.oy = 0
  948.     refresh
  949.   end
  950.   #--------------------------------------------------------------------------
  951.   # ● ウィンドウ内容の作成
  952.   #--------------------------------------------------------------------------
  953.   def create_contents
  954.     if @mode == MODE_STATUS
  955.       super
  956.       return
  957.     end

  958.     self.contents.dispose
  959.     ch = height - 32
  960.     if @item != nil
  961.       mag = (KGC::ComposeItem::COMPACT_MATERIAL_LIST ? 1 : 2)
  962.       ch = [ch, WLH * (mag + @item.compose_materials.size * mag)].max
  963.     end
  964.     self.contents = Bitmap.new(width - 32, ch)
  965.   end
  966.   #--------------------------------------------------------------------------
  967.   # ● リフレッシュ
  968.   #--------------------------------------------------------------------------
  969.   def refresh
  970.     create_contents
  971.     self.contents.font.size = Font.default_size
  972.     case @mode
  973.     when MODE_MATERIAL
  974.       draw_material_list
  975.     when MODE_STATUS
  976.       super
  977.     end
  978.   end
  979.   #--------------------------------------------------------------------------
  980.   # ○ 素材リストを描画
  981.   #--------------------------------------------------------------------------
  982.   def draw_material_list
  983.     return if @item == nil

  984.     number = $game_party.item_number(@item)
  985.     self.contents.font.color = system_color
  986.     self.contents.draw_text(4, 0, 200, WLH, Vocab::Possession)
  987.     self.contents.font.color = normal_color
  988.     self.contents.draw_text(4, 0, 200, WLH, number, 2)

  989.     # 不明な素材を隠す
  990.     if $game_party.item_compose_material_mask?(@item)
  991.       self.contents.draw_text(4, WLH * 2, 200, WLH,
  992.         KGC::ComposeItem::UNKNOWN_RECIPE_MATERIAL, 1)
  993.       return
  994.     end

  995.     self.contents.font.size = 16 if KGC::ComposeItem::COMPACT_MATERIAL_LIST
  996.     mag = (KGC::ComposeItem::COMPACT_MATERIAL_LIST ? 1 : 2)
  997.     @item.compose_materials.each_with_index { |material, i|
  998.       y = WLH * (mag + i * mag)
  999.       draw_material_info(0, y, material)
  1000.     }
  1001.   end
  1002.   #--------------------------------------------------------------------------
  1003.   # ○ 素材情報を描画
  1004.   #--------------------------------------------------------------------------
  1005.   def draw_material_info(x, y, material)
  1006.     m_item = material.item
  1007.     return if m_item == nil
  1008.     number = $game_party.item_number(m_item)
  1009.     enabled = (number > 0 && number >= material.number)
  1010.     draw_item_name(m_item, x, y, enabled)
  1011.     if KGC::ComposeItem::COMPACT_MATERIAL_LIST
  1012.       m_number = (material.number == 0 ? "-" : sprintf("%d", material.number))
  1013.       self.contents.draw_text(x, y, width - 32, WLH,
  1014.         sprintf("%s/%d", m_number, number), 2)
  1015.     else
  1016.       m_number = (material.number == 0 ? "-" : sprintf("%2d", material.number))
  1017.       self.contents.draw_text(x, y + WLH, width - 32, WLH,
  1018.         sprintf("%2s/%2d", m_number, number), 2)
  1019.     end
  1020.   end
  1021. end

  1022. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  1023. #==============================================================================
  1024. # ■ Scene_Map
  1025. #==============================================================================

  1026. class Scene_Map < Scene_Base
  1027.   #--------------------------------------------------------------------------
  1028.   # ● ショップ画面への切り替え
  1029.   #--------------------------------------------------------------------------
  1030.   alias call_shop_KGC_ComposeItem call_shop
  1031.   def call_shop
  1032.     # 合成画面を呼び出した場合
  1033.     if $game_switches[KGC::ComposeItem::COMPOSE_CALL_SWITCH]
  1034.       # 合成画面に移行
  1035.       $game_temp.next_scene = nil
  1036.       $game_switches[KGC::ComposeItem::COMPOSE_CALL_SWITCH] = false
  1037.       $scene = Scene_ComposeItem.new
  1038.     else
  1039.       call_shop_KGC_ComposeItem
  1040.     end
  1041.   end
  1042. end

  1043. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  1044. #==============================================================================
  1045. # □ Scene_ComposeItem
  1046. #------------------------------------------------------------------------------
  1047. #  合成画面の処理を行うクラスです。(Scene_Shop を流用)
  1048. #==============================================================================

  1049. class Scene_ComposeItem < Scene_Shop
  1050.   #--------------------------------------------------------------------------
  1051.   # ● 開始処理
  1052.   #--------------------------------------------------------------------------
  1053.   def start
  1054.     super
  1055.     # コマンドウィンドウ非表示
  1056.     if KGC::ComposeItem::HIDE_COMMAND_WINDOW
  1057.       @command_window.visible = false
  1058.       @gold_window.y = 56 #Graphics.height - @gold_window.height
  1059.       @gold_window.z = @status_window.z + 100
  1060.       @gold_window.visible = !KGC::ComposeItem::HIDE_GOLD_WINDOW

  1061.       @dummy_window.y = @command_window.y
  1062.       @dummy_window.height += @command_window.height
  1063.     end

  1064.     # [Scene_Shop] 再利用のため、合成リストに @buy_window を使用
  1065.     @buy_window.dispose
  1066.     @buy_window = Window_ComposeItem.new(56, @dummy_window.y)
  1067.     @buy_window.height = @dummy_window.height
  1068.     @buy_window.active = false
  1069.     @buy_window.y = 112
  1070.     @buy_window.visible = false
  1071.     @buy_window.help_window = @help_window

  1072.     # その他のウィンドウを再構成
  1073.     @number_window.dispose
  1074.     @number_window = Window_ComposeNumber.new(56, @buy_window.y)
  1075.     @number_window.height = @buy_window.height
  1076.     @number_window.create_contents
  1077.     @number_window.active = false
  1078.     @number_window.y = 112
  1079.     @number_window.visible = false

  1080.     @status_window.dispose
  1081.     @status_window = Window_ComposeStatus.new(@buy_window.width, @buy_window.y)
  1082.     @status_window.height = @buy_window.height
  1083.     @status_window.create_contents
  1084.     @status_window.visible = false

  1085.     # コマンドウィンドウ非表示の場合、合成ウィンドウに切り替え
  1086.     if KGC::ComposeItem::HIDE_COMMAND_WINDOW
  1087.       @command_window.active = false
  1088.       @dummy_window.visible = false
  1089.       @buy_window.active = true
  1090.       @buy_window.visible = true
  1091.       @buy_window.update_help
  1092.       @status_window.visible = true
  1093.       @status_window.item = @buy_window.item
  1094.     end
  1095.   end
  1096.   #--------------------------------------------------------------------------
  1097.   # ● コマンドウィンドウの作成
  1098.   #--------------------------------------------------------------------------
  1099.   def create_command_window
  1100.     s1 = Vocab::ComposeItem
  1101. #   s2 = Vocab::ShopSell
  1102.     s3 = Vocab::ShopCancel
  1103.     @command_window = Window_Command.new(304, [s1,s3], 2)
  1104.     @command_window.x = 128
  1105.     @command_window.y = 56
  1106.   #  if $game_temp.shop_purchase_only
  1107.   #    @command_window.draw_item(1, false)
  1108.   #  end
  1109.   end
  1110.   #--------------------------------------------------------------------------
  1111.   # ● フレーム更新
  1112.   #--------------------------------------------------------------------------
  1113.   def update
  1114.     super
  1115.     if KGC::ComposeItem::SWITCH_INFO_BUTTON != nil &&
  1116.         Input.trigger?(KGC::ComposeItem::SWITCH_INFO_BUTTON)
  1117.       Sound.play_cursor
  1118.       @status_window.change_mode
  1119.     end
  1120.   end
  1121.     def update_command_selection
  1122.     if Input.trigger?(Input::B)
  1123.       Sound.play_cancel
  1124.       $scene = Scene_Map.new
  1125.     elsif Input.trigger?(Input::C)
  1126.       case @command_window.index
  1127.       when 0  # 購入する
  1128.         Sound.play_decision
  1129.         @command_window.active = false
  1130.         @buy_window.active = true
  1131.         @buy_window.visible = true
  1132.         @buy_window.refresh
  1133.         @status_window.visible = true
  1134.       when 1  # 退出
  1135.         Sound.play_decision
  1136.         $scene = Scene_Map.new
  1137.       end
  1138.     end
  1139.   end

  1140.   #--------------------------------------------------------------------------
  1141.   # ● 購入アイテム選択の更新
  1142.   #--------------------------------------------------------------------------
  1143.   def update_buy_selection
  1144.     @number_window.sell_flag = false

  1145.     # コマンドウィンドウ非表示で B ボタンが押された場合
  1146.     if KGC::ComposeItem::HIDE_COMMAND_WINDOW && Input.trigger?(Input::B)
  1147.       Sound.play_cancel
  1148.       $scene = Scene_Map.new
  1149.       return
  1150.     end

  1151.     @status_window.item = @buy_window.item
  1152.     if Input.trigger?(Input::C)
  1153.       @item = @buy_window.item
  1154.       # アイテムが無効なら選択不可
  1155.       if @item == nil
  1156.         Sound.play_buzzer
  1157.         return
  1158.       end

  1159.       # 合成不可能 or 限界数まで所持している場合は選択不可
  1160.       number = $game_party.item_number(@item)
  1161.       limit = ($imported["LimitBreak"] ? @item.number_limit : 999)
  1162.       if !$game_party.item_can_compose?(@item) || number == limit
  1163.         Sound.play_buzzer
  1164.         return
  1165.       end

  1166.       # 個数入力に切り替え
  1167.       Sound.play_decision
  1168.       max = $game_party.number_of_composable(@item)
  1169.       max = [max, limit - number].min
  1170.       @buy_window.active = false
  1171.       @buy_window.visible = false
  1172.       @number_window.set(@item, max, @item.compose_cost)
  1173.       @number_window.active = true
  1174.       @number_window.visible = true
  1175.       return
  1176.     end

  1177.     super
  1178.   end
  1179.   #--------------------------------------------------------------------------
  1180.   # ● 売却アイテム選択の更新
  1181.   #--------------------------------------------------------------------------
  1182.   def update_sell_selection
  1183.     @number_window.sell_flag = true
  1184.     super
  1185.   end
  1186.   #--------------------------------------------------------------------------
  1187.   # ● 個数入力の決定
  1188.   #--------------------------------------------------------------------------
  1189.   def decide_number_input
  1190.     if @command_window.index != 0  # 「合成する」以外
  1191.       super
  1192.       return
  1193.     end

  1194.     Sound.play_shop
  1195.     @number_window.active = false
  1196.     @number_window.visible = false
  1197.     # 合成処理
  1198.     operation_compose
  1199.     @gold_window.refresh
  1200.     @buy_window.refresh
  1201.     @status_window.refresh
  1202.     @buy_window.active = true
  1203.     @buy_window.visible = true
  1204.   end
  1205.   #--------------------------------------------------------------------------
  1206.   # ○ 合成の処理
  1207.   #--------------------------------------------------------------------------
  1208.   def operation_compose
  1209.     $game_party.lose_gold(@number_window.number * @item.compose_cost)
  1210.     $game_party.gain_item(@item, @number_window.number)
  1211.     # 素材を減らす
  1212.     @item.compose_materials.each { |material|
  1213.       $game_party.lose_item(material.item,
  1214.         material.number * @number_window.number)
  1215.     }
  1216.     # 合成済みにする
  1217.     $game_party.set_item_composed(@item)
  1218.   end
  1219. end
复制代码
用法如下截图

点评

这里的商店打开的是合成的界面,而不是默认的商店。话说楼主你自己不试一试的吗?  发表于 2012-3-13 18:31
然后为什么是商店处理?  发表于 2012-3-13 17:25
开关可以改,在第16行。我的开关是4990,物品是RECIPE_ITEM[17] = [2000, "I:13,1", "I:45,1"] 意思是合成ID17的物品需要钱2000,ID13,45的物品各一个   发表于 2012-3-12 18:53
请问物品该是在哪里更改?然后开启的开关可以更改吗  发表于 2012-3-12 18:47
所谓烹饪就是用几种食材做出一种食物,阁下把以上的装备换成食物名称,所需的材料改成油盐酱醋就是一种烹饪功能了  发表于 2012-3-11 17:49
这是一个深不见底的坑,这是一个广袤无边的坑,我才刚刚放上了一抔泥土……

《六道·陈国篇》开坑了……↓点我
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-12-23 03:00

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表