幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1419|回复: 2

[分享]物品仓库

[复制链接]

3

主题

232

帖子

583

积分

⑤进阶

哇咔咔~传说中的称号.

积分
583
发表于 2006-11-24 00:15:24 | 显示全部楼层 |阅读模式
[s:7] 就是物品仓库`-__________________-||
附带一个比较RP的帮助窗口[s:7]

使用方法$scene = Ck.new
  1. module IM
  2.   #不能储存的属性ID
  3.   NO_ELEM = 17
  4. end
  5. class Scene_Title
  6.   #--------------------------------------------------------------------------
  7.   # ● 命令 : 新游戏
  8.   #--------------------------------------------------------------------------
  9.   def command_new_game
  10.     # 演奏确定 SE
  11.     $game_system.se_play($data_system.decision_se)
  12.     # 停止 BGM
  13.     Audio.bgm_stop
  14.     # 重置测量游戏时间用的画面计数器
  15.     Graphics.frame_count = 0
  16.     # 生成各种游戏对像
  17.     $game_temp          = Game_Temp.new
  18.     $game_system        = Game_System.new
  19.     $game_switches      = Game_Switches.new
  20.     $game_variables     = Game_Variables.new
  21.     $game_self_switches = Game_SelfSwitches.new
  22.     $game_screen        = Game_Screen.new
  23.     $game_actors        = Game_Actors.new
  24.     $game_party         = Game_Party.new
  25.     $game_troop         = Game_Troop.new
  26.     $game_map           = Game_Map.new
  27.     $game_player        = Game_Player.new
  28.     $game_ck            = Game_Ck.new
  29.     # 设置初期同伴位置
  30.     $game_party.setup_starting_members
  31.     # 设置初期位置的地图
  32.     $game_map.setup($data_system.start_map_id)
  33.     # 主角向初期位置移动
  34.     $game_player.moveto($data_system.start_x, $data_system.start_y)
  35.     # 刷新主角
  36.     $game_player.refresh
  37.     # 执行地图设置的 BGM 与 BGS 的自动切换
  38.     $game_map.autoplay
  39.     # 刷新地图 (执行并行事件)
  40.     $game_map.update
  41.     # 切换地图画面
  42.     $scene = Scene_Map.new
  43.   end
  44. end
  45. class Scene_Save
  46.   alias wr write_save_data
  47.   def write_save_data(file)
  48.     wr(file)
  49.     Marshal.dump($game_ck, file)
  50.   end
  51. end
  52. class Scene_Load
  53.   alias re read_save_data
  54.   def read_save_data(file)
  55.     re(file)
  56.     $game_ck            = Marshal.load(file)
  57.   end
  58. end
  59. #==============================================================================
  60. # ■ Window_Help
  61. #------------------------------------------------------------------------------
  62. #  特技及物品的说明、角色的状态显示的窗口。
  63. #==============================================================================
  64. class Window_CkHelp < Window_Base
  65.   #--------------------------------------------------------------------------
  66.   # ● 初始化对像
  67.   #--------------------------------------------------------------------------
  68.   def initialize
  69.     super(70, 120, 640, 64)
  70.     self.contents = Bitmap.new(width - 32, height - 32)
  71.     self.z+=10
  72.     @array = []
  73.   end
  74.   #--------------------------------------------------------------------------
  75.   # ● 设置文本
  76.   #     text  : 窗口显示的字符串
  77.   #     align : 对齐方式 (0..左对齐、1..中间对齐、2..右对齐)
  78.   #--------------------------------------------------------------------------
  79.   def set_text(text, align = 0)
  80.     # 如果文本和对齐方式的至少一方与上次的不同
  81.     if text != @text or align != @align
  82.       # 再描绘文本
  83.       self.contents.clear
  84.       self.contents.font.color = normal_color
  85.       self.contents.draw_text(4, 0, self.width - 40, 32, text, align)
  86.       @text = text
  87.       @align = align
  88.       @actor = nil
  89.     end
  90.     self.visible = true
  91.   end
  92.   def set_item(item)
  93.     if item == nil
  94.       self.visible=false
  95.       return
  96.     else
  97.       self.visible=true
  98.     end
  99.     if @item == item
  100.       return
  101.     end
  102.     h=w=0
  103.     h+=3
  104.     h+=1 if item.scope > 0
  105.     h+=1 if item.price > 0
  106.     h+=1 if item.parameter_type > 0
  107.     h+=1 if item.recover_hp_rate > 0
  108.     h+=1 if item.recover_hp > 0
  109.     h+=1 if item.recover_sp_rate > 0
  110.     h+=1 if item.recover_sp > 0
  111.     h+=1+item.element_set.size if item.element_set.size > 0
  112.     h -= 2 if item.element_set.include?(IM::NO_ELEM)
  113.     h+=1+item.plus_state_set.size if item.plus_state_set.size > 0
  114.     h+=1+item.minus_state_set.size if item.minus_state_set.size > 0  
  115.     size = item.description.split(/\\/).size
  116.     line = item.description.split(/\\/)
  117.     for l in 0...size
  118.     cx = self.contents.text_size(line[l].to_s).width
  119.     w = cx if cx > w
  120.     end
  121.     @array.push(w*0.8)
  122.     case item.scope
  123.     when 1
  124.       item_scope = "使用范围 : 敌单体"
  125.     when 2
  126.       item_scope = "使用范围 : 敌全体"
  127.     when 3
  128.       item_scope = "使用范围 : 己方单体"
  129.     when 4
  130.       item_scope = "使用范围 : 己方全体"
  131.     when 5
  132.       item_scope = "使用范围 : 战斗不能"
  133.     when 7
  134.       item_scope = "使用范围 : 使用者"
  135.     else
  136.       item_scope = ""
  137.     end
  138.     @array.push(self.contents.text_size(item_scope).width*0.8)
  139.     case item.parameter_type
  140.     when 1
  141.       item_parameter_type = "MaxHP上升 : #{item.parameter_points }"
  142.     when 2
  143.       item_parameter_type = "MaxSP上升 : #{item.parameter_points }"
  144.     when 3
  145.       item_parameter_type = "力量上升  : #{item.parameter_points }"
  146.     when 4
  147.       item_parameter_type = "灵巧上升  : #{item.parameter_points }"
  148.     when 5
  149.       item_parameter_type = "速度上升  : #{item.parameter_points }"
  150.     when 6
  151.       item_parameter_type = "魔力上升  : #{item.parameter_points }"
  152.     else
  153.       item_parameter_type = "  "
  154.     end
  155.     @array.push(self.contents.text_size(item_parameter_type).width*0.8)
  156.     w=@array.max
  157.     line = line = item.description.split(/\\/).size
  158.     h+=line-1
  159.     self.height = (h*16)+32
  160.     self.width = w+32
  161.     self.contents = Bitmap.new(self.width - 32, self.height-32)
  162.     self.contents.clear
  163.     self.contents.font.size = 16
  164.     g = 0
  165.     self.contents.draw_text(0,g,self.contents.text_size(item.name).width,16,item.name)
  166.     g+=16
  167.     x=y=0
  168.     text = item.description
  169.     text = text.split(//)
  170.     for ar in text
  171.       if ar == "\\"
  172.         x=0;y+=1
  173.         next
  174.       end
  175.       self.contents.draw_text(x,g+16*y,self.contents.text_size(ar).width,16,ar)
  176.       x+=self.contents.text_size(ar).width
  177.     end
  178.     g+=(line)*16
  179.     if item.price > 0 then g+=16 ; self.contents.draw_text(0,g,self.contents.text_size("价格 : "+item.price.to_s).width,16,"价格 : "+item.price.to_s) end
  180.     if item.scope > 0 then g+=16 ; self.contents.draw_text(0,g,self.contents.text_size(item_scope).width,16,item_scope) end
  181.     if item.parameter_type > 0 then g+=16 ; self.contents.draw_text(0,g,self.contents.text_size(item_parameter_type).width,16,item_parameter_type) end
  182.     if item.recover_hp > 0 then g+=16 ; item_recover_hp = "HP恢复量 : #{item.recover_hp}" ; self.contents.draw_text(0,g,self.contents.text_size(item_recover_hp).width,16,item_recover_hp) end  
  183.     if item.recover_hp_rate > 0 then g+=16 ; item_recover_hp_rate = "HP恢复率 : #{item.recover_hp_rate}%" ; self.contents.draw_text(0,g,self.contents.text_size(item_recover_hp_rate).width,16,item_recover_hp_rate) end
  184.     if item.recover_sp > 0 then g+=16 ; item_recover_sp = "SP恢复量 : #{item.recover_sp}" ; self.contents.draw_text(0,g,self.contents.text_size(item_recover_sp).width,16,item_recover_sp) end   
  185.     if item.recover_sp_rate > 0 then g+=16 ; item_recover_sp_rate = "SP恢复率 : #{item.recover_sp_rate}%" ; self.contents.draw_text(0,g,self.contents.text_size(item_recover_sp_rate).width,16,item_recover_sp_rate) end
  186.     if item.element_set.size > 0 then g+=16 ; item_element_set = "属性 : " ; self.contents.draw_text(0,g,self.contents.text_size(item_element_set).width,16,item_element_set) end  
  187.     for set in item.element_set
  188.     next if set == IM::NO_ELEM
  189.     if item.element_set.size > 0 then g+=16 ; item_element_set = "#{$data_system.elements[set]}" ; self.contents.draw_text(48,g,self.contents.text_size(item_element_set).width,16,item_element_set) end  
  190.     end
  191.     if item.plus_state_set.size > 0 then g+=16 ; item_plus_state_set = "附加状态 : " ; self.contents.draw_text(0,g,self.contents.text_size(item_plus_state_set).width,16,item_plus_state_set) end  
  192.     for set in item.plus_state_set
  193.     if item.plus_state_set.size > 0 then g+=16 ; item_plus_state_set = "#{$data_states[set].name}" ; self.contents.draw_text(80,g,self.contents.text_size(item_plus_state_set).width,16,item_plus_state_set) end  
  194.     end
  195.     if item.minus_state_set.size > 0 then g+=16 ; item_minus_state_set = "解除状态 : " ; self.contents.draw_text(0,g,self.contents.text_size(item_minus_state_set).width,16,item_minus_state_set) end  
  196.     for set in item.minus_state_set
  197.     if item.minus_state_set.size > 0 then g+=16 ; item_minus_state_set = "#{$data_states[set].name}" ; self.contents.draw_text(80,g,self.contents.text_size(item_minus_state_set).width,16,item_minus_state_set) end  
  198.     end
  199.     @item = item
  200.   end  
  201.   def set_weapon(weapon)
  202.     if weapon == nil
  203.       self.visible=false
  204.       return
  205.     else
  206.       self.visible=true
  207.     end
  208.     if @item == weapon
  209.       return
  210.     end
  211.     h=w=0
  212.     h+=4
  213.     h+=1 if weapon.atk > 0
  214.     h+=1 if weapon.pdef > 0
  215.     h+=1 if weapon.mdef > 0
  216.     h+=1 if weapon.str_plus > 0
  217.     h+=1 if weapon.dex_plus > 0
  218.     h+=1 if weapon.agi_plus > 0
  219.     h+=1 if weapon.int_plus > 0
  220.     h+=1+weapon.element_set.size if weapon.element_set.size > 0
  221.     h -= 2 if weapon.element_set.include?(IM::NO_ELEM)
  222.     h+=1+weapon.plus_state_set.size if weapon.plus_state_set.size > 0
  223.     h+=1+weapon.minus_state_set.size if weapon.minus_state_set.size > 0  
  224.     size = weapon.description.split(/\\/).size
  225.     line = weapon.description.split(/\\/)
  226.     for l in 0...size
  227.     cx = self.contents.text_size(line[l].to_s).width
  228.     w = cx if cx > w
  229.     end
  230.     line = weapon.description.split(/\\/).size
  231.     h+=line-1
  232.     self.height = (h*16)+32
  233.     self.width = cx+33
  234.     self.contents = Bitmap.new(self.width - 32, self.height-32)
  235.     self.contents.clear
  236.     g = 0
  237.     self.contents.font.size = 16
  238.     self.contents.draw_text(0,g,self.contents.text_size(weapon.name).width,16,weapon.name)
  239.     g+=16
  240.     #self.contents.draw_text(0,g,self.contents.text_size(weapon.description).width,16,weapon.description)
  241.     x=y=0
  242.     text = weapon.description
  243.     text = text.split(//)
  244.     for ar in text
  245.       if ar == "\\"
  246.         x=0;y+=1
  247.         next
  248.       end
  249.       self.contents.draw_text(x,g+16*y,self.contents.text_size(ar).width,16,ar)
  250.       x+=self.contents.text_size(ar).width
  251.     end
  252.     g+=(line)*16
  253.     if weapon.price > 0 then g+=16 ; self.contents.draw_text(0,g,self.contents.text_size("价格 : "+weapon.price.to_s).width,16,"价格 : "+weapon.price.to_s) end
  254.     atk  = "攻击力 : #{weapon.atk}"
  255.     pdef = "防御力 : #{weapon.pdef}"
  256.     mdef = "魔御力 : #{weapon.mdef}"
  257.     str  = "力量 : #{weapon.str_plus}"
  258.     dex  = "灵巧 : #{weapon.dex_plus}"
  259.     agi  = "速度 : #{weapon.agi_plus}"
  260.     int  = "魔力 : #{weapon.int_plus}"
  261.     if weapon.atk > 0 then g+=16 ; self.contents.draw_text(0,g,self.contents.text_size(atk).width,16,atk) end
  262.     if weapon.pdef > 0 then g+=16 ; self.contents.draw_text(0,g,self.contents.text_size(pdef).width,16,pdef) end
  263.     if weapon.mdef > 0 then g+=16 ; self.contents.draw_text(0,g,self.contents.text_size(mdef).width,16,mdef) end
  264.     if weapon.str_plus > 0 then g+=16 ; self.contents.draw_text(0,g,self.contents.text_size(str).width,16,str) end
  265.     if weapon.dex_plus > 0 then g+=16 ; self.contents.draw_text(0,g,self.contents.text_size(dex).width,16,dex) end
  266.     if weapon.agi_plus > 0 then g+=16 ; self.contents.draw_text(0,g,self.contents.text_size(agi).width,16,agi) end
  267.     if weapon.int_plus> 0 then g+=16 ; self.contents.draw_text(0,g,self.contents.text_size(int).width,16,int) end        
  268.     if weapon.element_set.size > 0 then g+=16 ; weapon_element_set = "属性 : " ; self.contents.draw_text(0,g,self.contents.text_size(weapon_element_set).width,16,weapon_element_set) end  
  269.     for set in weapon.element_set
  270.     next if set == IM::NO_ELEM
  271.     if weapon.element_set.size > 0 then g+=16 ; weapon_element_set = "#{$data_system.elements[set]}" ; self.contents.draw_text(48,g,self.contents.text_size(weapon_element_set).width,16,weapon_element_set) end  
  272.     end
  273.     if weapon.plus_state_set.size > 0 then g+=16 ; weapon_plus_state_set = "附加状态 : " ; self.contents.draw_text(0,g,self.contents.text_size(weapon_plus_state_set).width,16,weapon_plus_state_set) end  
  274.     for set in weapon.plus_state_set
  275.     if weapon.plus_state_set.size > 0 then g+=16 ; weapon_plus_state_set = "#{$data_states[set].name}" ; self.contents.draw_text(80,g,self.contents.text_size(weapon_plus_state_set).width,16,weapon_plus_state_set) end  
  276.     end
  277.     if weapon.minus_state_set.size > 0 then g+=16 ; weapon_minus_state_set = "解除状态 : " ; self.contents.draw_text(0,g,self.contents.text_size(weapon_minus_state_set).width,16,weapon_minus_state_set) end  
  278.     for set in weapon.minus_state_set
  279.     if weapon.minus_state_set.size > 0 then g+=16 ; weapon_minus_state_set = "#{$data_states[set].name}" ; self.contents.draw_text(80,g,self.contents.text_size(weapon_minus_state_set).width,16,weapon_minus_state_set) end  
  280.     end
  281.     @item = weapon
  282.   end
  283.   def set_armor(armor)
  284.     if armor == nil
  285.       self.visible=false
  286.       return
  287.     else
  288.       self.visible=true
  289.     end
  290.     if @item == armor
  291.       return
  292.     end
  293.     h=w=0
  294.     h+=4
  295.     h+=1 if armor.pdef > 0
  296.     h+=1 if armor.mdef > 0
  297.     h+=1 if armor.str_plus > 0
  298.     h+=1 if armor.dex_plus > 0
  299.     h+=1 if armor.agi_plus > 0
  300.     h+=1 if armor.int_plus > 0
  301.     h+=1 if armor.eva > 0
  302.     h+=1 if armor.auto_state_id > 0
  303.     h+=1+armor.guard_element_set.size if armor.guard_element_set.size > 0
  304.     h -= 2 if armor.guard_element_set.include?(IM::NO_ELEM)
  305.     h+=1+armor.guard_element_set.size if armor.guard_state_set.size > 0
  306.     h+=1+armor.guard_state_set.size if armor.guard_state_set.size > 0  
  307.     size = armor.description.split(/\\/).size
  308.     line = armor.description.split(/\\/)
  309.     for l in 0...size
  310.     cx = self.contents.text_size(line[l].to_s).width
  311.     w = cx if cx > w
  312.     end
  313.     line = armor.description.split(/\\/).size
  314.     h+=line-1
  315.     self.height = (h*16)+32
  316.     self.width = w+33
  317.     self.contents = Bitmap.new(self.width - 32, self.height-32)
  318.     self.contents.clear
  319.     g = 0
  320.     self.contents.font.size = 16
  321.     self.contents.draw_text(0,g,self.contents.text_size(armor.name).width,16,armor.name)
  322.     g+=16
  323.     #self.contents.draw_text(0,g,self.contents.text_size(armor.description).width,16,armor.description)
  324.     x=y=0
  325.     text = armor.description
  326.     text = text.split(//)
  327.     for ar in text
  328.       if ar == "\\"
  329.         x=0;y+=1
  330.         next
  331.       end
  332.       self.contents.draw_text(x,g+16*y,self.contents.text_size(ar).width,16,ar)
  333.       x+=self.contents.text_size(ar).width
  334.     end
  335.     g+=(line)*16
  336.     if armor.price > 0 then g+=16 ; self.contents.draw_text(0,g,self.contents.text_size("价格 : "+armor.price.to_s).width,16,"价格 : "+armor.price.to_s) end
  337.     pdef = "防御力 : #{armor.pdef}"
  338.     mdef = "魔御力 : #{armor.mdef}"
  339.     str  = "力量 : #{armor.str_plus}"
  340.     dex  = "灵巧 : #{armor.dex_plus}"
  341.     agi  = "速度 : #{armor.agi_plus}"
  342.     int  = "魔力 : #{armor.int_plus}"
  343.     eva  = "回避 : #{armor.eva}"
  344.     stat = "附加状态 : #{$data_states[armor.auto_state_id].name}" if armor.auto_state_id > 0
  345.     if armor.pdef > 0 then g+=16 ; self.contents.draw_text(0,g,self.contents.text_size(pdef).width,16,pdef) end
  346.     if armor.mdef > 0 then g+=16 ; self.contents.draw_text(0,g,self.contents.text_size(mdef).width,16,mdef) end
  347.     if armor.str_plus > 0 then g+=16 ; self.contents.draw_text(0,g,self.contents.text_size(str).width,16,str) end
  348.     if armor.dex_plus > 0 then g+=16 ; self.contents.draw_text(0,g,self.contents.text_size(dex).width,16,dex) end
  349.     if armor.agi_plus > 0 then g+=16 ; self.contents.draw_text(0,g,self.contents.text_size(agi).width,16,agi) end
  350.     if armor.int_plus> 0 then g+=16 ; self.contents.draw_text(0,g,self.contents.text_size(int).width,16,int) end  
  351.     if armor.eva > 0 then g+=16 ; self.contents.draw_text(0,g,self.contents.text_size(eva).width,16,eva) end
  352.     if armor.auto_state_id > 0 then g+=16 ; self.contents.draw_text(0,g,self.contents.text_size(stat).width,16,stat) end
  353.     if armor.guard_element_set.size > 0 then g+=16 ; armor_guard_element_set = "防御属性 : " ; self.contents.draw_text(0,g,self.contents.text_size(armor_guard_element_set).width,16,armor_guard_element_set) end  
  354.     for set in armor.guard_element_set
  355.     next if set == IM::NO_ELEM
  356.     if armor.guard_element_set.size > 0 then g+=16 ; armor_guard_element_set = "#{$data_system.elements[set]}" ; self.contents.draw_text(80,g,self.contents.text_size(armor_guard_element_set).width,16,armor_guard_element_set) end  
  357.     end
  358.     if armor.guard_state_set.size > 0 then g+=16 ; armor_guard_state_set = "抵御状态 : " ; self.contents.draw_text(0,g,self.contents.text_size(armor_guard_state_set).width,16,armor_guard_state_set) end  
  359.     for set in armor.guard_state_set
  360.     if armor.guard_state_set.size > 0 then g+=16 ; armor_guard_state_set = "#{$data_states[set].name}" ; self.contents.draw_text(80,g,self.contents.text_size(armor_guard_state_set).width,16,armor_guard_state_set) end  
  361.     end
  362.     @item = armor
  363.   end
  364.   #--------------------------------------------------------------------------
  365.   # ● 设置角色
  366.   #     actor : 要显示状态的角色
  367.   #--------------------------------------------------------------------------
  368.   def set_actor(actor)
  369.     if actor != @actor
  370.       self.contents.clear
  371.       draw_actor_name(actor, 4, 0)
  372.       draw_actor_state(actor, 140, 0)
  373.       draw_actor_hp(actor, 284, 0)
  374.       draw_actor_sp(actor, 460, 0)
  375.       @actor = actor
  376.       @text = nil
  377.       self.visible = true
  378.     end
  379.   end
  380.   #--------------------------------------------------------------------------
  381.   # ● 设置敌人
  382.   #     enemy : 要显示名字和状态的敌人
  383.   #--------------------------------------------------------------------------
  384.   def set_enemy(enemy)
  385.     text = enemy.name
  386.     state_text = make_battler_state_text(enemy, 112, false)
  387.     if state_text != ""
  388.       text += "  " + state_text
  389.     end
  390.     set_text(text, 1)
  391.   end
  392. end
  393. #==============================================================================
  394. # ■ Window_Item
  395. #------------------------------------------------------------------------------
  396. #  物品画面、战斗画面、显示浏览物品的窗口。
  397. #==============================================================================
  398. class Window_CkItem < Window_Selectable
  399.   #--------------------------------------------------------------------------
  400.   # ● 初始化对像
  401.   #--------------------------------------------------------------------------
  402.   def initialize
  403.     super(0, 64, 320, 480-64)
  404.     @column_max = 4
  405.     refresh
  406.     self.index = 0
  407.     # 战斗中的情况下将窗口移至中央并将其半透明化
  408.     if $game_temp.in_battle
  409.       self.y = 64
  410.       self.height = 256
  411.       self.back_opacity = 160
  412.     end
  413.   end
  414.   #--------------------------------------------------------------------------
  415.   # ● 获取物品
  416.   #--------------------------------------------------------------------------
  417.   def item
  418.     return @data[self.index]
  419.   end
  420.   #--------------------------------------------------------------------------
  421.   # ● 刷新
  422.   #--------------------------------------------------------------------------
  423.   def refresh
  424.     if self.contents != nil
  425.       self.contents.dispose
  426.       self.contents = nil
  427.     end
  428.     @data = []
  429.     # 添加报务
  430.     for i in 1...$data_items.size
  431.       if $game_party.item_number(i) > 0
  432.         @data.push($data_items[i])
  433.       end
  434.     end
  435.     # 在战斗中以外添加武器、防具
  436.     unless $game_temp.in_battle
  437.       for i in 1...$data_weapons.size
  438.         if $game_party.weapon_number(i) > 0
  439.           @data.push($data_weapons[i])
  440.         end
  441.       end
  442.       for i in 1...$data_armors.size
  443.         if $game_party.armor_number(i) > 0
  444.           @data.push($data_armors[i])
  445.         end
  446.       end
  447.     end
  448.     # 如果项目数不是 0 就生成位图、重新描绘全部项目
  449.     @item_max = @data.size
  450.     if @item_max > 0
  451.       self.contents = Bitmap.new(width - 32, row_max * 56)
  452.       for i in 0...@item_max
  453.         draw_item(i)
  454.       end
  455.     end
  456.   end
  457.   #--------------------------------------------------------------------------
  458.   # ● 描绘项目
  459.   #     index : 项目编号
  460.   #--------------------------------------------------------------------------
  461.   def draw_item(index)
  462.     item = @data[index]
  463.     case item
  464.     when RPG::Item
  465.       number = $game_party.item_number(item.id)
  466.     when RPG::Weapon
  467.       number = $game_party.weapon_number(item.id)
  468.     when RPG::Armor
  469.       number = $game_party.armor_number(item.id)
  470.     end
  471.     self.contents.font.color = normal_color
  472.     self.contents.font.size = 13
  473.     x = index % @column_max * 70#(288 + 32)
  474.     y = index / @column_max * 56#32
  475.     rect = Rect.new(x, y, self.width / @column_max - 32, 32)
  476.     self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  477.     bitmap = RPG::Cache.icon(item.icon_name)
  478.     opacity = self.contents.font.color == normal_color ? 255 : 128
  479.     self.contents.blt(x+4, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  480.     self.contents.draw_text(x-71, y+24, 212, 32, item.name, 1)
  481.     self.contents.draw_text(x+28, y, 16, 32, "x", 1)
  482.     self.contents.draw_text(x+28, y, 24, 32, number.to_s, 2)
  483.   end
  484.   #--------------------------------------------------------------------------
  485.   # ● 刷新帮助文本
  486.   #--------------------------------------------------------------------------
  487.   def update_help
  488.     @help_window.x = (self.index % @column_max * 70)+70+self.x
  489.     @help_window.y = (self.index / @column_max * 56)+56+64 - self.oy
  490.     @help_window.x = 640-@help_window.width if @help_window.x > 640-@help_window.width
  491.     @help_window.y = 480-@help_window.height if @help_window.y > 480-@help_window.height
  492.     case self.item
  493.     when RPG::Item
  494.       @help_window.set_item(self.item)
  495.     when RPG::Weapon
  496.       @help_window.set_weapon(self.item)
  497.     when RPG::Armor
  498.       @help_window.set_armor(self.item)
  499.       else
  500.       @help_window.set_armor(nil)
  501.     end
  502.   end
  503.   #--------------------------------------------------------------------------
  504.   # ● 更新光标举行
  505.   #--------------------------------------------------------------------------
  506.   def update_cursor_rect
  507.     # 光标位置不满 0 的情况下
  508.     if @index < 0
  509.       self.cursor_rect.empty
  510.       return
  511.     end
  512.     # 获取当前的行
  513.     row = @index / @column_max
  514.     # 当前行被显示开头行前面的情况下
  515.     if row < self.top_row
  516.       # 从当前行向开头行滚动
  517.       self.top_row = row
  518.     end
  519.     # 当前行被显示末尾行之后的情况下
  520.     if row > self.top_row + (self.page_row_max - 1)
  521.       # 从当前行向末尾滚动
  522.       self.top_row = row - (self.page_row_max - 1)
  523.     end
  524.     # 计算光标的宽
  525.     cursor_width = self.width / @column_max - 70#32
  526.     # 计算光标坐标
  527.     x = @index % @column_max * 70#(cursor_width + 32)
  528.     y = @index / @column_max * 56 - self.oy
  529.     # 更新国标矩形
  530.     self.cursor_rect.set(x, y, 70, 56)
  531.   end
  532.   #--------------------------------------------------------------------------
  533.   # ● 获取开头行
  534.   #--------------------------------------------------------------------------
  535.   def top_row
  536.     # 将窗口内容的传送源 Y 坐标、1 行的高 32 等分
  537.     return self.oy / 56
  538.   end
  539.   #--------------------------------------------------------------------------
  540.   # ● 设置开头行
  541.   #     row : 显示开头的行
  542.   #--------------------------------------------------------------------------
  543.   def top_row=(row)
  544.     # row 未满 0 的场合更正为 0
  545.     if row < 0
  546.       row = 0
  547.     end
  548.     # row 超过 row_max - 1 的情况下更正为 row_max - 1
  549.     if row > row_max - 1
  550.       row = row_max - 1
  551.     end
  552.     # row 1 行高的 32 倍、窗口内容的传送源 Y 坐标
  553.     self.oy = row * 56
  554.   end
  555.   #--------------------------------------------------------------------------
  556.   # ● 获取 1 页可以显示的行数
  557.   #--------------------------------------------------------------------------
  558.   def page_row_max
  559.     # 窗口的高度,设置画面的高度减去 32 ,除以 1 行的高度 32
  560.     return (self.height - 32) / 56
  561.   end
  562. end
  563. #==============================================================================
  564. # ■ Window_Item
  565. #------------------------------------------------------------------------------
  566. #  物品画面、战斗画面、显示浏览物品的窗口。
  567. #==============================================================================
  568. class Window_Ck2Item < Window_Selectable
  569.   #--------------------------------------------------------------------------
  570.   # ● 初始化对像
  571.   #--------------------------------------------------------------------------
  572.   def initialize
  573.     super(320, 64, 320, 480-64)
  574.     @column_max = 4
  575.     refresh
  576.     self.index = -1
  577.     self.active=false
  578.     # 战斗中的情况下将窗口移至中央并将其半透明化
  579.     if $game_temp.in_battle
  580.       self.y = 64
  581.       self.height = 256
  582.       self.back_opacity = 156
  583.     end
  584.   end
  585.   #--------------------------------------------------------------------------
  586.   # ● 获取物品
  587.   #--------------------------------------------------------------------------
  588.   def item
  589.     return @data[self.index]
  590.   end
  591.   #--------------------------------------------------------------------------
  592.   # ● 刷新
  593.   #--------------------------------------------------------------------------
  594.   def refresh
  595.     if self.contents != nil
  596.       self.contents.dispose
  597.       self.contents = nil
  598.     end
  599.     @data = []
  600.     # 添加报务
  601.     for i in 1...$data_items.size
  602.       if $game_ck.item_number(i) > 0
  603.         @data.push($data_items[i])
  604.       end
  605.     end
  606.       for i in 1...$data_weapons.size
  607.         if $game_ck.weapon_number(i) > 0
  608.           @data.push($data_weapons[i])
  609.         end
  610.       end
  611.       for i in 1...$data_armors.size
  612.         if $game_ck.armor_number(i) > 0
  613.           @data.push($data_armors[i])
  614.         end
  615.       end
  616.     # 如果项目数不是 0 就生成位图、重新描绘全部项目
  617.     @item_max = @data.size
  618.     if @item_max > 0
  619.       self.contents = Bitmap.new(width - 32, row_max * 56)
  620.       for i in 0...@item_max
  621.         draw_item(i)
  622.       end
  623.     end
  624.   end
  625.   #--------------------------------------------------------------------------
  626.   # ● 描绘项目
  627.   #     index : 项目编号
  628.   #--------------------------------------------------------------------------
  629.   def draw_item(index)
  630.     item = @data[index]
  631.     case item
  632.     when RPG::Item
  633.       number = $game_ck.item_number(item.id)
  634.     when RPG::Weapon
  635.       number = $game_ck.weapon_number(item.id)
  636.     when RPG::Armor
  637.       number = $game_ck.armor_number(item.id)
  638.     end
  639.     self.contents.font.size = 13
  640.     self.contents.font.color = normal_color
  641.     x = index % @column_max * 70#(288 + 32)
  642.     y = index / @column_max * 56#32
  643.     rect = Rect.new(x, y, self.width / @column_max - 32, 32)
  644.     self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  645.     bitmap = RPG::Cache.icon(item.icon_name)
  646.     opacity = self.contents.font.color == normal_color ? 255 : 128
  647.     self.contents.blt(x+4, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  648.     self.contents.draw_text(x-71, y+24, 212, 32, item.name, 1)
  649.     self.contents.draw_text(x+28, y, 16, 32, "x", 1)
  650.     self.contents.draw_text(x+28, y, 24, 32, number.to_s, 2)
  651.   end
  652.   #--------------------------------------------------------------------------
  653.   # ● 刷新帮助文本
  654.   #--------------------------------------------------------------------------
  655.   def update_help
  656.     @help_window.x = (self.index % @column_max * 70)+70+self.x
  657.     @help_window.y = (self.index / @column_max * 56)+56+64 - self.oy
  658.     @help_window.x = 640-@help_window.width if @help_window.x > 640-@help_window.width
  659.     @help_window.y = 480-@help_window.height if @help_window.y > 480-@help_window.height
  660.     case self.item
  661.     when RPG::Item
  662.       @help_window.set_item(self.item)
  663.     when RPG::Weapon
  664.       @help_window.set_weapon(self.item)
  665.     when RPG::Armor
  666.       @help_window.set_armor(self.item)
  667.       else
  668.       @help_window.set_armor(nil)
  669.     end
  670.   end
  671.   #--------------------------------------------------------------------------
  672.   # ● 更新光标举行
  673.   #--------------------------------------------------------------------------
  674.   def update_cursor_rect
  675.     # 光标位置不满 0 的情况下
  676.     if @index < 0
  677.       self.cursor_rect.empty
  678.       return
  679.     end
  680.     # 获取当前的行
  681.     row = @index / @column_max
  682.     # 当前行被显示开头行前面的情况下
  683.     if row < self.top_row
  684.       # 从当前行向开头行滚动
  685.       self.top_row = row
  686.     end
  687.     # 当前行被显示末尾行之后的情况下
  688.     if row > self.top_row + (self.page_row_max - 1)
  689.       # 从当前行向末尾滚动
  690.       self.top_row = row - (self.page_row_max - 1)
  691.     end
  692.     # 计算光标的宽
  693.     cursor_width = self.width / @column_max - 70#32
  694.     # 计算光标坐标
  695.     x = @index % @column_max * 70#(cursor_width + 32)
  696.     y = @index / @column_max * 56 - self.oy
  697.     # 更新国标矩形
  698.     self.cursor_rect.set(x, y, 70, 56)
  699.   end
  700.   #--------------------------------------------------------------------------
  701.   # ● 获取开头行
  702.   #--------------------------------------------------------------------------
  703.   def top_row
  704.     # 将窗口内容的传送源 Y 坐标、1 行的高 32 等分
  705.     return self.oy / 56
  706.   end
  707.   #--------------------------------------------------------------------------
  708.   # ● 设置开头行
  709.   #     row : 显示开头的行
  710.   #--------------------------------------------------------------------------
  711.   def top_row=(row)
  712.     # row 未满 0 的场合更正为 0
  713.     if row < 0
  714.       row = 0
  715.     end
  716.     # row 超过 row_max - 1 的情况下更正为 row_max - 1
  717.     if row > row_max - 1
  718.       row = row_max - 1
  719.     end
  720.     # row 1 行高的 32 倍、窗口内容的传送源 Y 坐标
  721.     self.oy = row * 56
  722.   end
  723.   #--------------------------------------------------------------------------
  724.   # ● 获取 1 页可以显示的行数
  725.   #--------------------------------------------------------------------------
  726.   def page_row_max
  727.     # 窗口的高度,设置画面的高度减去 32 ,除以 1 行的高度 32
  728.     return (self.height - 32) / 56
  729.   end
  730. end
  731. class Game_Ck
  732.   attr_accessor :gold
  733.   def initialize
  734.     @gold = 0
  735.     @items = {}
  736.     @weapons = {}
  737.     @armors = {}
  738.   end
  739.   def gain_gold(n)
  740.     @gold = [[@gold + n, 0].max, 9999999].min
  741.   end
  742.   def lose_gold(n)
  743.     gain_gold(-n)
  744.   end
  745.   def item_number(item_id)
  746.     return @items.include?(item_id) ? @items[item_id] : 0
  747.   end
  748.   def weapon_number(weapon_id)
  749.     return @weapons.include?(weapon_id) ? @weapons[weapon_id] : 0
  750.   end
  751.   def armor_number(armor_id)
  752.     return @armors.include?(armor_id) ? @armors[armor_id] : 0
  753.   end
  754.   def gain_item(item_id, n)
  755.     if item_id > 0
  756.       @items[item_id] = [[item_number(item_id) + n, 0].max, 99].min
  757.     end
  758.   end
  759.   def gain_weapon(weapon_id, n)
  760.     if weapon_id > 0
  761.       @weapons[weapon_id] = [[weapon_number(weapon_id) + n, 0].max, 99].min
  762.     end
  763.   end
  764.   def gain_armor(armor_id, n)
  765.     if armor_id > 0
  766.       @armors[armor_id] = [[armor_number(armor_id) + n, 0].max, 99].min
  767.     end
  768.   end
  769.   def lose_item(item_id, n)
  770.     gain_item(item_id, -n)
  771.   end
  772.   def lose_weapon(weapon_id, n)
  773.     gain_weapon(weapon_id, -n)
  774.   end
  775.   def lose_armor(armor_id, n)
  776.     gain_armor(armor_id, -n)
  777.   end
  778. end
  779. class Ck
  780.     def main
  781.     @number=0
  782.     # 生成命令窗口
  783.     @help_window = Window_CkHelp.new
  784.     @help_window.z = 200
  785.     @help_window.x = 70
  786.     @help_window.y = 120
  787.     @item_window = Window_CkItem.new
  788.     @item_window.help_window = @help_window
  789.     @item_window2 = Window_Ck2Item.new
  790.     @item_window2.help_window = @help_window
  791.     @base = Window_Base.new(0,0,640,64)
  792.     @base.contents = Bitmap.new(@base.width - 32, @base.height - 32)
  793.     @base.contents = Bitmap.new(@base.width - 32, @base.height - 32)
  794.     @base.contents.font.size = 16
  795.     @base.contents.draw_text(100,0,128,16,"携带物品")
  796.     @base.contents.draw_text(320+100,0,128,16,"仓库物品")
  797.     @base.contents.draw_text(220,16,256,16,"按X、Y键切换仓库与物品")
  798.    
  799.    
  800.    
  801.    
  802.     @item_window.update
  803.     @item_window2.update
  804.     @help_window.update
  805.     # 执行过渡
  806.     Graphics.transition
  807.     # 主循环
  808.     loop do
  809.       # 刷新游戏画面
  810.       Graphics.update
  811.       # 刷新输入情报
  812.       Input.update
  813.       # 刷新画面
  814.       update
  815.       # 如果画面切换的话就中断循环
  816.       if $scene != self
  817.         break
  818.       end
  819.     end
  820.     # 准备过渡
  821.     Graphics.freeze
  822.     # 释放窗口
  823.     @base.dispose
  824.     @item_window.dispose
  825.     @item_window2.dispose
  826.     @help_window.dispose
  827.     # 如果在标题画面切换中的情况下
  828.   end
  829.   def update
  830.     #if Input.trigger?(2) or Input.trigger?(4) or Input.trigger?(6) or
  831.     #  Input.trigger?(8)
  832.     @item_window.update
  833.     @item_window2.update
  834.     @help_window.update
  835.     @input_number_window.update if @input_number_window != nil
  836.    #end
  837.     if @item_window.active
  838.       up_1
  839.       return
  840.     end
  841.     if @item_window2.active
  842.       up_2
  843.       return
  844.     end
  845.     if @input_number_window != nil
  846.       up_n
  847.       return
  848.     end
  849.   end
  850.   def up_n
  851.     if Input.trigger?(Input::B)
  852.       $game_system.se_play($data_system.cancel_se)
  853.       @input_number_window.dispose
  854.       @input_number_window = nil
  855.       if @item_window.index >= 0
  856.        @item_window.active=true
  857.        return
  858.      end
  859.      if @item_window2.index >= 0
  860.        @item_window2.active=true
  861.       return
  862.     end
  863.       return
  864.     end
  865.     if Input.repeat?(Input::C)
  866.       if @item_window.index >= 0
  867.       item = @item_window.item
  868.       @number = @input_number_window.number
  869.       if @number > $game_party.item_number(item.id)
  870.       @number = $game_party.item_number(item.id)
  871.       @input_number_window.number = @number
  872.       end
  873.       gain(item,@number)
  874.       @input_number_window.dispose
  875.       @input_number_window = nil
  876.       if @item_window.index >= 0
  877.        @item_window.active=true
  878.        return
  879.      end
  880.      if @item_window2.index >= 0
  881.        @item_window2.active=true
  882.       return
  883.     end
  884.       return
  885.       end
  886.       
  887.       if @item_window2.index >= 0
  888.       item = @item_window2.item
  889.       @number = @input_number_window.number
  890.       if @number > $game_ck.item_number(item.id)
  891.       @number = $game_ck.item_number(item.id)
  892.       @input_number_window.number = @number
  893.       end
  894.       lose(item,@number)
  895.       @input_number_window.dispose
  896.       @input_number_window = nil
  897.       if @item_window.index >= 0
  898.        @item_window.active=true
  899.        return
  900.      end
  901.      if @item_window2.index >= 0
  902.        @item_window2.active=true
  903.       return
  904.     end
  905.       return
  906.       end  
  907.    
  908.       return
  909.     end
  910.   end
  911.   def up_1
  912.     if Input.trigger?(Input::B)
  913.       $game_system.se_play($data_system.cancel_se)
  914.       $scene = Scene_Map.new
  915.       return
  916.     end
  917.     if Input.repeat?(Input::C)
  918.       @input_number_window = Window_InputNumber.new(2)
  919.       @input_number_window.x = 320-@input_number_window.width/2
  920.       @input_number_window.y = 240-@input_number_window.height/2
  921.       @input_number_window.opacity=255
  922.       @item_window.active=false
  923.       @input_number_window.active=true
  924.       @input_number_window.visible=true
  925.       return
  926.     end
  927.     if Input.repeat?(Input::Y)
  928.       @index1 = @item_window.index
  929.       @item_window.active=false
  930.       @item_window.index = -1
  931.       @item_window2.active=true
  932.       @item_window2.index = 0
  933.       return
  934.     end
  935.   end
  936.   def up_2
  937.     if Input.trigger?(Input::B)
  938.       $game_system.se_play($data_system.cancel_se)
  939.       $scene = Scene_Map.new
  940.       return
  941.     end
  942.     if Input.repeat?(Input::C)
  943.       @input_number_window = Window_InputNumber.new(2)
  944.       @input_number_window.x = 320-@input_number_window.width/2
  945.       @input_number_window.y = 240-@input_number_window.height/2
  946.       @input_number_window.opacity=255
  947.       @item_window2.active=false
  948.       @input_number_window.active=true
  949.       @input_number_window.visible=true
  950.       return
  951.     end
  952.     if Input.repeat?(Input::X)
  953.       @item_window.active=true
  954.       @item_window.index = @index1
  955.       @item_window2.active=false
  956.       @item_window2.index = -1
  957.       return
  958.     end
  959.   end
  960.   def gain(item,n)
  961.     case item
  962.       when RPG::Item
  963.         if !item.element_set.include?(IM::NO_ELEM)
  964.         $game_party.lose_item(item.id,n)
  965.         $game_ck.gain_item(item.id,n)
  966.         @item_window.refresh
  967.         @item_window2.refresh
  968.       end
  969.       when RPG::Weapon
  970.         if !item.element_set.include?(IM::NO_ELEM)
  971.         $game_party.lose_weapon(item.id,n)
  972.         $game_ck.gain_weapon(item.id,n)
  973.         @item_window.refresh
  974.         @item_window2.refresh
  975.         end
  976.       when RPG::Armor
  977.         if !item.guard_element_set.include?(IM::NO_ELEM)
  978.         $game_party.lose_armor(item.id,n)
  979.         $game_ck.gain_armor(item.id,n)
  980.         @item_window.refresh
  981.         @item_window2.refresh
  982.         end
  983.       end
  984.    end
  985.   def lose(item,n)
  986.     case item
  987.       when RPG::Item
  988.         if !item.element_set.include?(IM::NO_ELEM)
  989.         $game_party.gain_item(item.id,n)
  990.         $game_ck.lose_item(item.id,n)
  991.         @item_window.refresh
  992.         @item_window2.refresh
  993.       end
  994.       when RPG::Weapon
  995.         if !item.element_set.include?(IM::NO_ELEM)
  996.         $game_party.gain_weapon(item.id,n)
  997.         $game_ck.lose_weapon(item.id,n)
  998.         @item_window.refresh
  999.         @item_window2.refresh
  1000.         end
  1001.       when RPG::Armor
  1002.         if !item.guard_element_set.include?(IM::NO_ELEM)
  1003.         $game_party.gain_armor(item.id,n)
  1004.         $game_ck.lose_armor(item.id,n)
  1005.         @item_window.refresh
  1006.         @item_window2.refresh
  1007.         end
  1008.       end
  1009.    end
  1010. end
复制代码
RP时的产物品````` [s:7] 另````物品过多的时候会卡的说~~`` [s:7] ``` [s:5]  



如图


[s:7] 多谢风神```优化了一下速度``
回复

使用道具 举报

38

主题

3468

帖子

1

积分

超级版主

传说中的Bunny火神~!

Rank: 8Rank: 8

积分
1
发表于 2006-11-24 02:51:22 | 显示全部楼层
我把这个做成范例收集起来行么? [s:4]
我突然发现,我是一个很幸运的好人。老婆真好~ 点我进入JQ(激情)教程范例收集!
回复 支持 反对

使用道具 举报

3

主题

232

帖子

583

积分

⑤进阶

哇咔咔~传说中的称号.

积分
583
 楼主| 发表于 2006-11-25 08:16:27 | 显示全部楼层
[s:7] 随便`~~~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2025-6-27 21:06 , Processed in 0.012279 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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