- 注册时间
- 2006-8-2
- 最后登录
- 2018-3-26
⑤进阶
哇咔咔~传说中的称号.
- 积分
- 583
|
[s:7] 就是物品仓库`-__________________-||
附带一个比较RP的帮助窗口[s:7]
使用方法$scene = Ck.new- module IM
- #不能储存的属性ID
- NO_ELEM = 17
- end
- class Scene_Title
- #--------------------------------------------------------------------------
- # ● 命令 : 新游戏
- #--------------------------------------------------------------------------
- def command_new_game
- # 演奏确定 SE
- $game_system.se_play($data_system.decision_se)
- # 停止 BGM
- Audio.bgm_stop
- # 重置测量游戏时间用的画面计数器
- Graphics.frame_count = 0
- # 生成各种游戏对像
- $game_temp = Game_Temp.new
- $game_system = Game_System.new
- $game_switches = Game_Switches.new
- $game_variables = Game_Variables.new
- $game_self_switches = Game_SelfSwitches.new
- $game_screen = Game_Screen.new
- $game_actors = Game_Actors.new
- $game_party = Game_Party.new
- $game_troop = Game_Troop.new
- $game_map = Game_Map.new
- $game_player = Game_Player.new
- $game_ck = Game_Ck.new
- # 设置初期同伴位置
- $game_party.setup_starting_members
- # 设置初期位置的地图
- $game_map.setup($data_system.start_map_id)
- # 主角向初期位置移动
- $game_player.moveto($data_system.start_x, $data_system.start_y)
- # 刷新主角
- $game_player.refresh
- # 执行地图设置的 BGM 与 BGS 的自动切换
- $game_map.autoplay
- # 刷新地图 (执行并行事件)
- $game_map.update
- # 切换地图画面
- $scene = Scene_Map.new
- end
- end
- class Scene_Save
- alias wr write_save_data
- def write_save_data(file)
- wr(file)
- Marshal.dump($game_ck, file)
- end
- end
- class Scene_Load
- alias re read_save_data
- def read_save_data(file)
- re(file)
- $game_ck = Marshal.load(file)
- end
- end
- #==============================================================================
- # ■ Window_Help
- #------------------------------------------------------------------------------
- # 特技及物品的说明、角色的状态显示的窗口。
- #==============================================================================
- class Window_CkHelp < Window_Base
- #--------------------------------------------------------------------------
- # ● 初始化对像
- #--------------------------------------------------------------------------
- def initialize
- super(70, 120, 640, 64)
- self.contents = Bitmap.new(width - 32, height - 32)
- self.z+=10
- @array = []
- end
- #--------------------------------------------------------------------------
- # ● 设置文本
- # text : 窗口显示的字符串
- # align : 对齐方式 (0..左对齐、1..中间对齐、2..右对齐)
- #--------------------------------------------------------------------------
- def set_text(text, align = 0)
- # 如果文本和对齐方式的至少一方与上次的不同
- if text != @text or align != @align
- # 再描绘文本
- self.contents.clear
- self.contents.font.color = normal_color
- self.contents.draw_text(4, 0, self.width - 40, 32, text, align)
- @text = text
- @align = align
- @actor = nil
- end
- self.visible = true
- end
- def set_item(item)
- if item == nil
- self.visible=false
- return
- else
- self.visible=true
- end
- if @item == item
- return
- end
- h=w=0
- h+=3
- h+=1 if item.scope > 0
- h+=1 if item.price > 0
- h+=1 if item.parameter_type > 0
- h+=1 if item.recover_hp_rate > 0
- h+=1 if item.recover_hp > 0
- h+=1 if item.recover_sp_rate > 0
- h+=1 if item.recover_sp > 0
- h+=1+item.element_set.size if item.element_set.size > 0
- h -= 2 if item.element_set.include?(IM::NO_ELEM)
- h+=1+item.plus_state_set.size if item.plus_state_set.size > 0
- h+=1+item.minus_state_set.size if item.minus_state_set.size > 0
- size = item.description.split(/\\/).size
- line = item.description.split(/\\/)
- for l in 0...size
- cx = self.contents.text_size(line[l].to_s).width
- w = cx if cx > w
- end
- @array.push(w*0.8)
- case item.scope
- when 1
- item_scope = "使用范围 : 敌单体"
- when 2
- item_scope = "使用范围 : 敌全体"
- when 3
- item_scope = "使用范围 : 己方单体"
- when 4
- item_scope = "使用范围 : 己方全体"
- when 5
- item_scope = "使用范围 : 战斗不能"
- when 7
- item_scope = "使用范围 : 使用者"
- else
- item_scope = ""
- end
- @array.push(self.contents.text_size(item_scope).width*0.8)
- case item.parameter_type
- when 1
- item_parameter_type = "MaxHP上升 : #{item.parameter_points }"
- when 2
- item_parameter_type = "MaxSP上升 : #{item.parameter_points }"
- when 3
- item_parameter_type = "力量上升 : #{item.parameter_points }"
- when 4
- item_parameter_type = "灵巧上升 : #{item.parameter_points }"
- when 5
- item_parameter_type = "速度上升 : #{item.parameter_points }"
- when 6
- item_parameter_type = "魔力上升 : #{item.parameter_points }"
- else
- item_parameter_type = " "
- end
- @array.push(self.contents.text_size(item_parameter_type).width*0.8)
- w=@array.max
- line = line = item.description.split(/\\/).size
- h+=line-1
- self.height = (h*16)+32
- self.width = w+32
- self.contents = Bitmap.new(self.width - 32, self.height-32)
- self.contents.clear
- self.contents.font.size = 16
- g = 0
- self.contents.draw_text(0,g,self.contents.text_size(item.name).width,16,item.name)
- g+=16
- x=y=0
- text = item.description
- text = text.split(//)
- for ar in text
- if ar == "\\"
- x=0;y+=1
- next
- end
- self.contents.draw_text(x,g+16*y,self.contents.text_size(ar).width,16,ar)
- x+=self.contents.text_size(ar).width
- end
- g+=(line)*16
- 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
- if item.scope > 0 then g+=16 ; self.contents.draw_text(0,g,self.contents.text_size(item_scope).width,16,item_scope) end
- 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
- 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
- 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
- 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
- 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
- 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
- for set in item.element_set
- next if set == IM::NO_ELEM
- 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
- end
- 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
- for set in item.plus_state_set
- 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
- end
- 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
- for set in item.minus_state_set
- 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
- end
- @item = item
- end
- def set_weapon(weapon)
- if weapon == nil
- self.visible=false
- return
- else
- self.visible=true
- end
- if @item == weapon
- return
- end
- h=w=0
- h+=4
- h+=1 if weapon.atk > 0
- h+=1 if weapon.pdef > 0
- h+=1 if weapon.mdef > 0
- h+=1 if weapon.str_plus > 0
- h+=1 if weapon.dex_plus > 0
- h+=1 if weapon.agi_plus > 0
- h+=1 if weapon.int_plus > 0
- h+=1+weapon.element_set.size if weapon.element_set.size > 0
- h -= 2 if weapon.element_set.include?(IM::NO_ELEM)
- h+=1+weapon.plus_state_set.size if weapon.plus_state_set.size > 0
- h+=1+weapon.minus_state_set.size if weapon.minus_state_set.size > 0
- size = weapon.description.split(/\\/).size
- line = weapon.description.split(/\\/)
- for l in 0...size
- cx = self.contents.text_size(line[l].to_s).width
- w = cx if cx > w
- end
- line = weapon.description.split(/\\/).size
- h+=line-1
- self.height = (h*16)+32
- self.width = cx+33
- self.contents = Bitmap.new(self.width - 32, self.height-32)
- self.contents.clear
- g = 0
- self.contents.font.size = 16
- self.contents.draw_text(0,g,self.contents.text_size(weapon.name).width,16,weapon.name)
- g+=16
- #self.contents.draw_text(0,g,self.contents.text_size(weapon.description).width,16,weapon.description)
- x=y=0
- text = weapon.description
- text = text.split(//)
- for ar in text
- if ar == "\\"
- x=0;y+=1
- next
- end
- self.contents.draw_text(x,g+16*y,self.contents.text_size(ar).width,16,ar)
- x+=self.contents.text_size(ar).width
- end
- g+=(line)*16
- 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
- atk = "攻击力 : #{weapon.atk}"
- pdef = "防御力 : #{weapon.pdef}"
- mdef = "魔御力 : #{weapon.mdef}"
- str = "力量 : #{weapon.str_plus}"
- dex = "灵巧 : #{weapon.dex_plus}"
- agi = "速度 : #{weapon.agi_plus}"
- int = "魔力 : #{weapon.int_plus}"
- if weapon.atk > 0 then g+=16 ; self.contents.draw_text(0,g,self.contents.text_size(atk).width,16,atk) end
- if weapon.pdef > 0 then g+=16 ; self.contents.draw_text(0,g,self.contents.text_size(pdef).width,16,pdef) end
- if weapon.mdef > 0 then g+=16 ; self.contents.draw_text(0,g,self.contents.text_size(mdef).width,16,mdef) end
- if weapon.str_plus > 0 then g+=16 ; self.contents.draw_text(0,g,self.contents.text_size(str).width,16,str) end
- if weapon.dex_plus > 0 then g+=16 ; self.contents.draw_text(0,g,self.contents.text_size(dex).width,16,dex) end
- if weapon.agi_plus > 0 then g+=16 ; self.contents.draw_text(0,g,self.contents.text_size(agi).width,16,agi) end
- if weapon.int_plus> 0 then g+=16 ; self.contents.draw_text(0,g,self.contents.text_size(int).width,16,int) end
- 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
- for set in weapon.element_set
- next if set == IM::NO_ELEM
- 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
- end
- 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
- for set in weapon.plus_state_set
- 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
- end
- 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
- for set in weapon.minus_state_set
- 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
- end
- @item = weapon
- end
- def set_armor(armor)
- if armor == nil
- self.visible=false
- return
- else
- self.visible=true
- end
- if @item == armor
- return
- end
- h=w=0
- h+=4
- h+=1 if armor.pdef > 0
- h+=1 if armor.mdef > 0
- h+=1 if armor.str_plus > 0
- h+=1 if armor.dex_plus > 0
- h+=1 if armor.agi_plus > 0
- h+=1 if armor.int_plus > 0
- h+=1 if armor.eva > 0
- h+=1 if armor.auto_state_id > 0
- h+=1+armor.guard_element_set.size if armor.guard_element_set.size > 0
- h -= 2 if armor.guard_element_set.include?(IM::NO_ELEM)
- h+=1+armor.guard_element_set.size if armor.guard_state_set.size > 0
- h+=1+armor.guard_state_set.size if armor.guard_state_set.size > 0
- size = armor.description.split(/\\/).size
- line = armor.description.split(/\\/)
- for l in 0...size
- cx = self.contents.text_size(line[l].to_s).width
- w = cx if cx > w
- end
- line = armor.description.split(/\\/).size
- h+=line-1
- self.height = (h*16)+32
- self.width = w+33
- self.contents = Bitmap.new(self.width - 32, self.height-32)
- self.contents.clear
- g = 0
- self.contents.font.size = 16
- self.contents.draw_text(0,g,self.contents.text_size(armor.name).width,16,armor.name)
- g+=16
- #self.contents.draw_text(0,g,self.contents.text_size(armor.description).width,16,armor.description)
- x=y=0
- text = armor.description
- text = text.split(//)
- for ar in text
- if ar == "\\"
- x=0;y+=1
- next
- end
- self.contents.draw_text(x,g+16*y,self.contents.text_size(ar).width,16,ar)
- x+=self.contents.text_size(ar).width
- end
- g+=(line)*16
- 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
- pdef = "防御力 : #{armor.pdef}"
- mdef = "魔御力 : #{armor.mdef}"
- str = "力量 : #{armor.str_plus}"
- dex = "灵巧 : #{armor.dex_plus}"
- agi = "速度 : #{armor.agi_plus}"
- int = "魔力 : #{armor.int_plus}"
- eva = "回避 : #{armor.eva}"
- stat = "附加状态 : #{$data_states[armor.auto_state_id].name}" if armor.auto_state_id > 0
- if armor.pdef > 0 then g+=16 ; self.contents.draw_text(0,g,self.contents.text_size(pdef).width,16,pdef) end
- if armor.mdef > 0 then g+=16 ; self.contents.draw_text(0,g,self.contents.text_size(mdef).width,16,mdef) end
- if armor.str_plus > 0 then g+=16 ; self.contents.draw_text(0,g,self.contents.text_size(str).width,16,str) end
- if armor.dex_plus > 0 then g+=16 ; self.contents.draw_text(0,g,self.contents.text_size(dex).width,16,dex) end
- if armor.agi_plus > 0 then g+=16 ; self.contents.draw_text(0,g,self.contents.text_size(agi).width,16,agi) end
- if armor.int_plus> 0 then g+=16 ; self.contents.draw_text(0,g,self.contents.text_size(int).width,16,int) end
- if armor.eva > 0 then g+=16 ; self.contents.draw_text(0,g,self.contents.text_size(eva).width,16,eva) end
- if armor.auto_state_id > 0 then g+=16 ; self.contents.draw_text(0,g,self.contents.text_size(stat).width,16,stat) end
- 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
- for set in armor.guard_element_set
- next if set == IM::NO_ELEM
- 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
- end
- 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
- for set in armor.guard_state_set
- 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
- end
- @item = armor
- end
- #--------------------------------------------------------------------------
- # ● 设置角色
- # actor : 要显示状态的角色
- #--------------------------------------------------------------------------
- def set_actor(actor)
- if actor != @actor
- self.contents.clear
- draw_actor_name(actor, 4, 0)
- draw_actor_state(actor, 140, 0)
- draw_actor_hp(actor, 284, 0)
- draw_actor_sp(actor, 460, 0)
- @actor = actor
- @text = nil
- self.visible = true
- end
- end
- #--------------------------------------------------------------------------
- # ● 设置敌人
- # enemy : 要显示名字和状态的敌人
- #--------------------------------------------------------------------------
- def set_enemy(enemy)
- text = enemy.name
- state_text = make_battler_state_text(enemy, 112, false)
- if state_text != ""
- text += " " + state_text
- end
- set_text(text, 1)
- end
- end
- #==============================================================================
- # ■ Window_Item
- #------------------------------------------------------------------------------
- # 物品画面、战斗画面、显示浏览物品的窗口。
- #==============================================================================
- class Window_CkItem < Window_Selectable
- #--------------------------------------------------------------------------
- # ● 初始化对像
- #--------------------------------------------------------------------------
- def initialize
- super(0, 64, 320, 480-64)
- @column_max = 4
- refresh
- self.index = 0
- # 战斗中的情况下将窗口移至中央并将其半透明化
- if $game_temp.in_battle
- self.y = 64
- self.height = 256
- self.back_opacity = 160
- end
- end
- #--------------------------------------------------------------------------
- # ● 获取物品
- #--------------------------------------------------------------------------
- def item
- return @data[self.index]
- end
- #--------------------------------------------------------------------------
- # ● 刷新
- #--------------------------------------------------------------------------
- def refresh
- if self.contents != nil
- self.contents.dispose
- self.contents = nil
- end
- @data = []
- # 添加报务
- for i in 1...$data_items.size
- if $game_party.item_number(i) > 0
- @data.push($data_items[i])
- end
- end
- # 在战斗中以外添加武器、防具
- unless $game_temp.in_battle
- for i in 1...$data_weapons.size
- if $game_party.weapon_number(i) > 0
- @data.push($data_weapons[i])
- end
- end
- for i in 1...$data_armors.size
- if $game_party.armor_number(i) > 0
- @data.push($data_armors[i])
- end
- end
- end
- # 如果项目数不是 0 就生成位图、重新描绘全部项目
- @item_max = @data.size
- if @item_max > 0
- self.contents = Bitmap.new(width - 32, row_max * 56)
- for i in 0...@item_max
- draw_item(i)
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● 描绘项目
- # index : 项目编号
- #--------------------------------------------------------------------------
- def draw_item(index)
- item = @data[index]
- case item
- when RPG::Item
- number = $game_party.item_number(item.id)
- when RPG::Weapon
- number = $game_party.weapon_number(item.id)
- when RPG::Armor
- number = $game_party.armor_number(item.id)
- end
- self.contents.font.color = normal_color
- self.contents.font.size = 13
- x = index % @column_max * 70#(288 + 32)
- y = index / @column_max * 56#32
- rect = Rect.new(x, y, self.width / @column_max - 32, 32)
- self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
- bitmap = RPG::Cache.icon(item.icon_name)
- opacity = self.contents.font.color == normal_color ? 255 : 128
- self.contents.blt(x+4, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
- self.contents.draw_text(x-71, y+24, 212, 32, item.name, 1)
- self.contents.draw_text(x+28, y, 16, 32, "x", 1)
- self.contents.draw_text(x+28, y, 24, 32, number.to_s, 2)
- end
- #--------------------------------------------------------------------------
- # ● 刷新帮助文本
- #--------------------------------------------------------------------------
- def update_help
- @help_window.x = (self.index % @column_max * 70)+70+self.x
- @help_window.y = (self.index / @column_max * 56)+56+64 - self.oy
- @help_window.x = 640-@help_window.width if @help_window.x > 640-@help_window.width
- @help_window.y = 480-@help_window.height if @help_window.y > 480-@help_window.height
- case self.item
- when RPG::Item
- @help_window.set_item(self.item)
- when RPG::Weapon
- @help_window.set_weapon(self.item)
- when RPG::Armor
- @help_window.set_armor(self.item)
- else
- @help_window.set_armor(nil)
- end
- end
- #--------------------------------------------------------------------------
- # ● 更新光标举行
- #--------------------------------------------------------------------------
- def update_cursor_rect
- # 光标位置不满 0 的情况下
- if @index < 0
- self.cursor_rect.empty
- return
- end
- # 获取当前的行
- row = @index / @column_max
- # 当前行被显示开头行前面的情况下
- if row < self.top_row
- # 从当前行向开头行滚动
- self.top_row = row
- end
- # 当前行被显示末尾行之后的情况下
- if row > self.top_row + (self.page_row_max - 1)
- # 从当前行向末尾滚动
- self.top_row = row - (self.page_row_max - 1)
- end
- # 计算光标的宽
- cursor_width = self.width / @column_max - 70#32
- # 计算光标坐标
- x = @index % @column_max * 70#(cursor_width + 32)
- y = @index / @column_max * 56 - self.oy
- # 更新国标矩形
- self.cursor_rect.set(x, y, 70, 56)
- end
- #--------------------------------------------------------------------------
- # ● 获取开头行
- #--------------------------------------------------------------------------
- def top_row
- # 将窗口内容的传送源 Y 坐标、1 行的高 32 等分
- return self.oy / 56
- end
- #--------------------------------------------------------------------------
- # ● 设置开头行
- # row : 显示开头的行
- #--------------------------------------------------------------------------
- def top_row=(row)
- # row 未满 0 的场合更正为 0
- if row < 0
- row = 0
- end
- # row 超过 row_max - 1 的情况下更正为 row_max - 1
- if row > row_max - 1
- row = row_max - 1
- end
- # row 1 行高的 32 倍、窗口内容的传送源 Y 坐标
- self.oy = row * 56
- end
- #--------------------------------------------------------------------------
- # ● 获取 1 页可以显示的行数
- #--------------------------------------------------------------------------
- def page_row_max
- # 窗口的高度,设置画面的高度减去 32 ,除以 1 行的高度 32
- return (self.height - 32) / 56
- end
- end
- #==============================================================================
- # ■ Window_Item
- #------------------------------------------------------------------------------
- # 物品画面、战斗画面、显示浏览物品的窗口。
- #==============================================================================
- class Window_Ck2Item < Window_Selectable
- #--------------------------------------------------------------------------
- # ● 初始化对像
- #--------------------------------------------------------------------------
- def initialize
- super(320, 64, 320, 480-64)
- @column_max = 4
- refresh
- self.index = -1
- self.active=false
- # 战斗中的情况下将窗口移至中央并将其半透明化
- if $game_temp.in_battle
- self.y = 64
- self.height = 256
- self.back_opacity = 156
- end
- end
- #--------------------------------------------------------------------------
- # ● 获取物品
- #--------------------------------------------------------------------------
- def item
- return @data[self.index]
- end
- #--------------------------------------------------------------------------
- # ● 刷新
- #--------------------------------------------------------------------------
- def refresh
- if self.contents != nil
- self.contents.dispose
- self.contents = nil
- end
- @data = []
- # 添加报务
- for i in 1...$data_items.size
- if $game_ck.item_number(i) > 0
- @data.push($data_items[i])
- end
- end
- for i in 1...$data_weapons.size
- if $game_ck.weapon_number(i) > 0
- @data.push($data_weapons[i])
- end
- end
- for i in 1...$data_armors.size
- if $game_ck.armor_number(i) > 0
- @data.push($data_armors[i])
- end
- end
- # 如果项目数不是 0 就生成位图、重新描绘全部项目
- @item_max = @data.size
- if @item_max > 0
- self.contents = Bitmap.new(width - 32, row_max * 56)
- for i in 0...@item_max
- draw_item(i)
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● 描绘项目
- # index : 项目编号
- #--------------------------------------------------------------------------
- def draw_item(index)
- item = @data[index]
- case item
- when RPG::Item
- number = $game_ck.item_number(item.id)
- when RPG::Weapon
- number = $game_ck.weapon_number(item.id)
- when RPG::Armor
- number = $game_ck.armor_number(item.id)
- end
- self.contents.font.size = 13
- self.contents.font.color = normal_color
- x = index % @column_max * 70#(288 + 32)
- y = index / @column_max * 56#32
- rect = Rect.new(x, y, self.width / @column_max - 32, 32)
- self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
- bitmap = RPG::Cache.icon(item.icon_name)
- opacity = self.contents.font.color == normal_color ? 255 : 128
- self.contents.blt(x+4, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
- self.contents.draw_text(x-71, y+24, 212, 32, item.name, 1)
- self.contents.draw_text(x+28, y, 16, 32, "x", 1)
- self.contents.draw_text(x+28, y, 24, 32, number.to_s, 2)
- end
- #--------------------------------------------------------------------------
- # ● 刷新帮助文本
- #--------------------------------------------------------------------------
- def update_help
- @help_window.x = (self.index % @column_max * 70)+70+self.x
- @help_window.y = (self.index / @column_max * 56)+56+64 - self.oy
- @help_window.x = 640-@help_window.width if @help_window.x > 640-@help_window.width
- @help_window.y = 480-@help_window.height if @help_window.y > 480-@help_window.height
- case self.item
- when RPG::Item
- @help_window.set_item(self.item)
- when RPG::Weapon
- @help_window.set_weapon(self.item)
- when RPG::Armor
- @help_window.set_armor(self.item)
- else
- @help_window.set_armor(nil)
- end
- end
- #--------------------------------------------------------------------------
- # ● 更新光标举行
- #--------------------------------------------------------------------------
- def update_cursor_rect
- # 光标位置不满 0 的情况下
- if @index < 0
- self.cursor_rect.empty
- return
- end
- # 获取当前的行
- row = @index / @column_max
- # 当前行被显示开头行前面的情况下
- if row < self.top_row
- # 从当前行向开头行滚动
- self.top_row = row
- end
- # 当前行被显示末尾行之后的情况下
- if row > self.top_row + (self.page_row_max - 1)
- # 从当前行向末尾滚动
- self.top_row = row - (self.page_row_max - 1)
- end
- # 计算光标的宽
- cursor_width = self.width / @column_max - 70#32
- # 计算光标坐标
- x = @index % @column_max * 70#(cursor_width + 32)
- y = @index / @column_max * 56 - self.oy
- # 更新国标矩形
- self.cursor_rect.set(x, y, 70, 56)
- end
- #--------------------------------------------------------------------------
- # ● 获取开头行
- #--------------------------------------------------------------------------
- def top_row
- # 将窗口内容的传送源 Y 坐标、1 行的高 32 等分
- return self.oy / 56
- end
- #--------------------------------------------------------------------------
- # ● 设置开头行
- # row : 显示开头的行
- #--------------------------------------------------------------------------
- def top_row=(row)
- # row 未满 0 的场合更正为 0
- if row < 0
- row = 0
- end
- # row 超过 row_max - 1 的情况下更正为 row_max - 1
- if row > row_max - 1
- row = row_max - 1
- end
- # row 1 行高的 32 倍、窗口内容的传送源 Y 坐标
- self.oy = row * 56
- end
- #--------------------------------------------------------------------------
- # ● 获取 1 页可以显示的行数
- #--------------------------------------------------------------------------
- def page_row_max
- # 窗口的高度,设置画面的高度减去 32 ,除以 1 行的高度 32
- return (self.height - 32) / 56
- end
- end
- class Game_Ck
- attr_accessor :gold
- def initialize
- @gold = 0
- @items = {}
- @weapons = {}
- @armors = {}
- end
- def gain_gold(n)
- @gold = [[@gold + n, 0].max, 9999999].min
- end
- def lose_gold(n)
- gain_gold(-n)
- end
- def item_number(item_id)
- return @items.include?(item_id) ? @items[item_id] : 0
- end
- def weapon_number(weapon_id)
- return @weapons.include?(weapon_id) ? @weapons[weapon_id] : 0
- end
- def armor_number(armor_id)
- return @armors.include?(armor_id) ? @armors[armor_id] : 0
- end
- def gain_item(item_id, n)
- if item_id > 0
- @items[item_id] = [[item_number(item_id) + n, 0].max, 99].min
- end
- end
- def gain_weapon(weapon_id, n)
- if weapon_id > 0
- @weapons[weapon_id] = [[weapon_number(weapon_id) + n, 0].max, 99].min
- end
- end
- def gain_armor(armor_id, n)
- if armor_id > 0
- @armors[armor_id] = [[armor_number(armor_id) + n, 0].max, 99].min
- end
- end
- def lose_item(item_id, n)
- gain_item(item_id, -n)
- end
- def lose_weapon(weapon_id, n)
- gain_weapon(weapon_id, -n)
- end
- def lose_armor(armor_id, n)
- gain_armor(armor_id, -n)
- end
- end
- class Ck
- def main
- @number=0
- # 生成命令窗口
- @help_window = Window_CkHelp.new
- @help_window.z = 200
- @help_window.x = 70
- @help_window.y = 120
- @item_window = Window_CkItem.new
- @item_window.help_window = @help_window
- @item_window2 = Window_Ck2Item.new
- @item_window2.help_window = @help_window
- @base = Window_Base.new(0,0,640,64)
- @base.contents = Bitmap.new(@base.width - 32, @base.height - 32)
- @base.contents = Bitmap.new(@base.width - 32, @base.height - 32)
- @base.contents.font.size = 16
- @base.contents.draw_text(100,0,128,16,"携带物品")
- @base.contents.draw_text(320+100,0,128,16,"仓库物品")
- @base.contents.draw_text(220,16,256,16,"按X、Y键切换仓库与物品")
-
-
-
-
- @item_window.update
- @item_window2.update
- @help_window.update
- # 执行过渡
- Graphics.transition
- # 主循环
- loop do
- # 刷新游戏画面
- Graphics.update
- # 刷新输入情报
- Input.update
- # 刷新画面
- update
- # 如果画面切换的话就中断循环
- if $scene != self
- break
- end
- end
- # 准备过渡
- Graphics.freeze
- # 释放窗口
- @base.dispose
- @item_window.dispose
- @item_window2.dispose
- @help_window.dispose
- # 如果在标题画面切换中的情况下
- end
- def update
- #if Input.trigger?(2) or Input.trigger?(4) or Input.trigger?(6) or
- # Input.trigger?(8)
- @item_window.update
- @item_window2.update
- @help_window.update
- @input_number_window.update if @input_number_window != nil
- #end
- if @item_window.active
- up_1
- return
- end
- if @item_window2.active
- up_2
- return
- end
- if @input_number_window != nil
- up_n
- return
- end
- end
- def up_n
- if Input.trigger?(Input::B)
- $game_system.se_play($data_system.cancel_se)
- @input_number_window.dispose
- @input_number_window = nil
- if @item_window.index >= 0
- @item_window.active=true
- return
- end
- if @item_window2.index >= 0
- @item_window2.active=true
- return
- end
- return
- end
- if Input.repeat?(Input::C)
- if @item_window.index >= 0
- item = @item_window.item
- @number = @input_number_window.number
- if @number > $game_party.item_number(item.id)
- @number = $game_party.item_number(item.id)
- @input_number_window.number = @number
- end
- gain(item,@number)
- @input_number_window.dispose
- @input_number_window = nil
- if @item_window.index >= 0
- @item_window.active=true
- return
- end
- if @item_window2.index >= 0
- @item_window2.active=true
- return
- end
- return
- end
-
- if @item_window2.index >= 0
- item = @item_window2.item
- @number = @input_number_window.number
- if @number > $game_ck.item_number(item.id)
- @number = $game_ck.item_number(item.id)
- @input_number_window.number = @number
- end
- lose(item,@number)
- @input_number_window.dispose
- @input_number_window = nil
- if @item_window.index >= 0
- @item_window.active=true
- return
- end
- if @item_window2.index >= 0
- @item_window2.active=true
- return
- end
- return
- end
-
- return
- end
- end
- def up_1
- if Input.trigger?(Input::B)
- $game_system.se_play($data_system.cancel_se)
- $scene = Scene_Map.new
- return
- end
- if Input.repeat?(Input::C)
- @input_number_window = Window_InputNumber.new(2)
- @input_number_window.x = 320-@input_number_window.width/2
- @input_number_window.y = 240-@input_number_window.height/2
- @input_number_window.opacity=255
- @item_window.active=false
- @input_number_window.active=true
- @input_number_window.visible=true
- return
- end
- if Input.repeat?(Input::Y)
- @index1 = @item_window.index
- @item_window.active=false
- @item_window.index = -1
- @item_window2.active=true
- @item_window2.index = 0
- return
- end
- end
- def up_2
- if Input.trigger?(Input::B)
- $game_system.se_play($data_system.cancel_se)
- $scene = Scene_Map.new
- return
- end
- if Input.repeat?(Input::C)
- @input_number_window = Window_InputNumber.new(2)
- @input_number_window.x = 320-@input_number_window.width/2
- @input_number_window.y = 240-@input_number_window.height/2
- @input_number_window.opacity=255
- @item_window2.active=false
- @input_number_window.active=true
- @input_number_window.visible=true
- return
- end
- if Input.repeat?(Input::X)
- @item_window.active=true
- @item_window.index = @index1
- @item_window2.active=false
- @item_window2.index = -1
- return
- end
- end
- def gain(item,n)
- case item
- when RPG::Item
- if !item.element_set.include?(IM::NO_ELEM)
- $game_party.lose_item(item.id,n)
- $game_ck.gain_item(item.id,n)
- @item_window.refresh
- @item_window2.refresh
- end
- when RPG::Weapon
- if !item.element_set.include?(IM::NO_ELEM)
- $game_party.lose_weapon(item.id,n)
- $game_ck.gain_weapon(item.id,n)
- @item_window.refresh
- @item_window2.refresh
- end
- when RPG::Armor
- if !item.guard_element_set.include?(IM::NO_ELEM)
- $game_party.lose_armor(item.id,n)
- $game_ck.gain_armor(item.id,n)
- @item_window.refresh
- @item_window2.refresh
- end
- end
- end
- def lose(item,n)
- case item
- when RPG::Item
- if !item.element_set.include?(IM::NO_ELEM)
- $game_party.gain_item(item.id,n)
- $game_ck.lose_item(item.id,n)
- @item_window.refresh
- @item_window2.refresh
- end
- when RPG::Weapon
- if !item.element_set.include?(IM::NO_ELEM)
- $game_party.gain_weapon(item.id,n)
- $game_ck.lose_weapon(item.id,n)
- @item_window.refresh
- @item_window2.refresh
- end
- when RPG::Armor
- if !item.guard_element_set.include?(IM::NO_ELEM)
- $game_party.gain_armor(item.id,n)
- $game_ck.lose_armor(item.id,n)
- @item_window.refresh
- @item_window2.refresh
- end
- end
- end
- end
复制代码 RP时的产物品````` [s:7] 另````物品过多的时候会卡的说~~`` [s:7] ``` [s:5]
如图

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