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

Project1

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

鉴定系统 v1.0

 关闭 [复制链接]

Lv1.梦旅人

粉蜘蛛秀秀

梦石
0
星屑
76
在线时间
39 小时
注册时间
2007-6-4
帖子
384

贵宾第1届Title华丽大赛新人奖

跳转到指定楼层
1
发表于 2008-6-27 08:33:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
似乎看到提问区需要这个东西 但是还没有解决
所以就写了一个...
话说。。现在写脚本要写这里没发过的真的挺有难度的 = =
可能有bug,不过我还没测试出来 有bug请通知我哦~

鉴定系统 v1.0

作者:秀秀

说明:某种物品如果鉴定过了 以后获得就不需要在鉴定了 为什么要这么做呢。。。
       因为默认同种物品都放在一起的,比如99个恢复药 不可能单独某个拿出来鉴定
       如果希望鉴定出来获得随机效果,请使用随机获得物品或装备
       而这些装备都需要鉴定 当然也是可以使用技能来鉴定
       具体设置鉴定 见使用方法

使用方法: 在数据库物品武器防具的名称后面加上 #0 或者#1
            #0 表示需要鉴定 #1 表示不需要鉴定
            数据库设置一个专门鉴定的物品 在物品数据库脚本里插入公共事件
            公共事件中插入脚本
            $scene = Scene_Indentify.new
            用技能鉴定方法一样....
            当然也可以直接呼叫场所作为鉴定所 无限鉴定~

# ------------ 下 载 地 址 -------------------------------------------------
http://rpg.blue/upload_program/f ... ��v0.1_94955603.rar
# --------------------------------------------------------------------------

附上设置截图:           








脚本如下

module RPG
  class Item
    def name
      return @name.split(/#/)[0]
    end
    def indentify
      return @name.split(/#/)[1]
    end  
   end

  class Weapon
    def name
      return @name.split(/#/)[0]
    end
    def indentify
      return @name.split(/#/)[1]
    end  
   end
   
  class Armor
    def name
      return @name.split(/#/)[0]
    end
    def indentify
      return @name.split(/#/)[1]
    end  
   end
end

module OPTION
  CALL_WINDOW = Proc.new{$Scene.call_window }
end  

class Game_System
  #--------------------------------------------------------------------------
  # ● 定义实例变量
  #--------------------------------------------------------------------------
  attr_accessor :item_indentify_table             # 物品鉴定表
  attr_accessor :weapon_indentify_table            # 武器鉴定表
  attr_accessor :armor_indentify_table             # 防具鉴定表
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #--------------------------------------------------------------------------
  alias ori_initialize initialize
  def initialize
    ori_initialize
    @item_indentify_table = IT.new.set_item
    @weapon_indentify_table = IT.new.set_weapon
    @armor_indentify_table = IT.new.set_armor
  end
end

#--------------------------------------------------------------------------
# ● 存储数据表的IT类
#--------------------------------------------------------------------------
class IT
  def initialize
    @items = $data_items
    @weapons = $data_weapons
    @armors = $data_armors
  end
  
  def set_item
    hash = {}
    for i in [email protected]
     hash[@items.name] = @items.indentify
    end
    return hash
  end  
  def set_weapon
    hash = {}
    for i in [email protected]
     hash[@weapons.name] = @weapons.indentify
    end
    return hash
  end
  def set_armor
    hash = {}
    for i in [email protected]
     hash[@armors.name] = @armors.indentify
    end
    return hash
  end  

end  


#==============================================================================
# ■ Window_Item
#------------------------------------------------------------------------------
#  物品画面、战斗画面、显示浏览物品的窗口。
#==============================================================================

class Window_Item < Window_Selectable
  
  #--------------------------------------------------------------------------
  # ● 描绘项目
  #     index : 项目编号
  #--------------------------------------------------------------------------
  def draw_item(index)
    item = @data[index]
    case item
    when RPG::Item
      number = $game_party.item_number(item.id)
      # 添加判断(物品)
      indentify = $game_system.item_indentify_table[item.name]
    when RPG::Weapon
      number = $game_party.weapon_number(item.id)
      # 添加判断(武器)
      indentify = $game_system.weapon_indentify_table[item.name]
    when RPG::Armor
      # 添加判断(防具)
      number = $game_party.armor_number(item.id)
      indentify = $game_system.armor_indentify_table[item.name]
    end
    if item.is_a?(RPG::Item) and
       $game_party.item_can_use?(item.id)
      self.contents.font.color = normal_color
    else
      self.contents.font.color = disabled_color
    end
    x = 4 + index % 2 * (288 + 32)
    y = index / 2 * 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, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
   
    if indentify == "0"
      self.contents.draw_text(x + 28, y, 212, 32,"未鉴定", 0)
    else  
      self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
    end
   
    self.contents.draw_text(x + 240, y, 16, 32, ":", 1)
    self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2)
  end

end

#==============================================================================
# ■ Scene_Item
#------------------------------------------------------------------------------
#  处理物品画面的类。
#==============================================================================

class Scene_Item

  #--------------------------------------------------------------------------
  # ● 刷新画面 (目标窗口被激活的情况下)
  #--------------------------------------------------------------------------
  def update_target
    # 按下 B 键的情况下
    if Input.trigger?(Input::B)
      # 演奏取消 SE
      $game_system.se_play($data_system.cancel_se)
      # 由于物品用完而不能使用的场合
      unless $game_party.item_can_use?(@item.id)
        # 再次生成物品窗口的内容
        @item_window.refresh
      end
      # 删除目标窗口
      @item_window.active = true
      @target_window.visible = false
      @target_window.active = false
      return
    end
    # 按下 C 键的情况下
    if Input.trigger?(Input::C)
      # 如果物品用完的情况下
      if $game_party.item_number(@item.id) == 0
        # 演奏冻结 SE
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      
      p $game_system.item_indentify_table[@item.name]
      # 判断是否为未鉴定物品
      if $game_system.item_indentify_table[@item.name] == "0"
        # 演奏冻结 SE
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # --------------------
      
      # 目标是全体的情况下
      if @target_window.index == -1
        # 对同伴全体应用物品使用效果
        used = false
        for i in $game_party.actors
          used |= i.item_effect(@item)
        end
      end
      # 目标是单体的情况下
      if @target_window.index >= 0
        # 对目标角色应用物品的使用效果
        target = $game_party.actors[@target_window.index]
        used = target.item_effect(@item)
      end
      # 使用物品的情况下
      if used
        # 演奏物品使用时的 SE
        $game_system.se_play(@item.menu_se)
        # 消耗品的情况下
        if @item.consumable
          # 使用的物品数减 1
          $game_party.lose_item(@item.id, 1)
          # 再描绘物品窗口的项目
          @item_window.draw_item(@item_window.index)
        end
        # 再生成目标窗口的内容
        @target_window.refresh
        # 全灭的情况下
        if $game_party.all_dead?
          # 切换到游戏结束画面
          $scene = Scene_Gameover.new
          return
        end
        # 公共事件 ID 有效的情况下
        if @item.common_event_id > 0
          # 预约调用公共事件
          $game_temp.common_event_id = @item.common_event_id
          # 切换到地图画面
          $scene = Scene_Map.new
          return
        end
      end
      # 无法使用物品的情况下
      unless used
        # 演奏冻结 SE
        $game_system.se_play($data_system.buzzer_se)
      end
      return
    end
  end
end

#==============================================================================
# ■ Window_EquipItem
#------------------------------------------------------------------------------
#  装备画面、显示浏览变更装备的候补物品的窗口。
#==============================================================================

class Window_EquipItem < Window_Selectable

  #--------------------------------------------------------------------------
  # ● 项目的描绘
  #     index : 项目符号
  #--------------------------------------------------------------------------
  def draw_item(index)
    item = @data[index]
    x = 4 + index % 2 * (288 + 32)
    y = index / 2 * 32
    case item
    when RPG::Weapon
      number = $game_party.weapon_number(item.id)
      # 添加判断(武器)
      indentify = $game_system.weapon_indentify_table[item.name]
    when RPG::Armor
      number = $game_party.armor_number(item.id)
      # 添加判断(防具)
      indentify = $game_system.armor_indentify_table[item.name]
    end
    bitmap = RPG::Cache.icon(item.icon_name)
    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24))
    self.contents.font.color = normal_color
   
    if indentify == "0"
      self.contents.draw_text(x + 28, y, 212, 32,"未鉴定", 0)
    else
      self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
    end
   
    self.contents.draw_text(x + 240, y, 16, 32, ":", 1)
    self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2)
  end


end


#==============================================================================
# ■ Scene_Equip
#------------------------------------------------------------------------------
#  处理装备画面的类。
#==============================================================================

class Scene_Equip

  #--------------------------------------------------------------------------
  # ● 刷新画面 (物品窗口被激活的情况下)
  #--------------------------------------------------------------------------
  def update_item
    # 按下 B 键的情况下
    if Input.trigger?(Input::B)
      # 演奏取消 SE
      $game_system.se_play($data_system.cancel_se)
      # 激活右侧窗口
      @right_window.active = true
      @item_window.active = false
      @item_window.index = -1
      return
    end
   
   
    # 按下 C 键的情况下
    if Input.trigger?(Input::C)

      case @item_window.item
        when RPG::Weapon
          # 添加判断(武器)
          indentify = $game_system.weapon_indentify_table[@item_window.item.name]
        when RPG::Armor
          # 添加判断(防具)
          indentify = $game_system.armor_indentify_table[@item_window.item.name]
       end
      
      if @item_window.item != nil
        if indentify == "0"  
          return
        end
      end
      
      # 演奏装备 SE
      $game_system.se_play($data_system.equip_se)
      # 获取物品窗口现在选择的装备数据
      item = @item_window.item
      # 变更装备
      @actor.equip(@right_window.index, item == nil ? 0 : item.id)
      # 激活右侧窗口
      @right_window.active = true
      @item_window.active = false
      @item_window.index = -1
      # 再生成右侧窗口、物品窗口的内容
      @right_window.refresh
      @item_window.refresh
      return
    end
  end
end

class Game_Party
  attr_reader   :items     
  attr_reader   :weapons
  attr_reader   :armors
end

class Window_Item_Indentify < Window_Selectable
  def initialize
    super(160,80,320,320)
    self.contents = Bitmap.new(width - 32, height - 32)
    @column_max = 1
    @item_max = items[0].size + weapons[0].size + armors[0].size - 1
    @data = []
    refresh
    self.index = 0
  end
  
  def items
    hash = {}
    item_names = []
    item_ids = []
    items = $game_party.items
    items.each_key{|key|item_names.push($data_items[key].name)}
    items.each_key{|key|item_ids.push(key)}
    return [item_names,item_ids]
  end
  
  def weapons
    hash = {}
    weapon_names = []
    weapon_ids = []
    weapons = $game_party.weapons
    weapons.each_key{|key|weapon_names.push($data_weapons[key].name)}
    weapons.each_key{|key|weapon_ids.push(key)}
    return [weapon_names,weapon_ids]
  end
  
  def armors
    hash = {}
    armor_names = []
    armor_ids = []
    armors = $game_party.armors
    armors.each_key{|key|armor_names.push($data_armors[key].name)}
    armors.each_key{|key|armor_ids.push(key)}
    return [armor_names,armor_ids]
  end  
  
  def all
    all = []
    items[1].each{|id| all.push($data_items[id])}
    weapons[1].each{|id| all.push($data_weapons[id])}
    armors[1].each{|id| all.push($data_armors[id])}
    return all
  end  
  
  def refresh
    self.contents.clear
    for i in 0...all.size
      case all
        when RPG::Item
          indentify = $game_system.item_indentify_table[all.name]
        when RPG::Weapon
          indentify = $game_system.weapon_indentify_table[all.name]
        when RPG::Armor
          indentify = $game_system.armor_indentify_table[all.name]
      end

      bitmap = RPG::Cache.icon(all.icon_name)
      self.contents.blt(0,i*32,bitmap,Rect.new(0, 0, 24, 24))
      
      if indentify == "0"  
        self.contents.draw_text(64,i*32,200,32,"未鉴定")
      else
        self.contents.draw_text(64,i*32,200,32,all.name)
      end
    end
  end  
end  

class Scene_Indentify
  def main
    @spriteset = Spriteset_Map.new
    @window = Window_Item_Indentify.new
    @help_window = Window_Help.new
    @help_window.active = false
    @help_window.y = 0
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end  
    Graphics.freeze
    @help_window.dispose
    @window.dispose
    @spriteset.dispose
  end
  
  def update
    @help_window.update
    if @window.active
      window_update
    end  
   
    if @help_window.active
      help_window_update
    end  
  end  
  
  def window_update
    @window.update
    if Input.trigger?(Input::C)
      data = @window.all[@window.index]
      case @window.all[@window.index]
        when RPG::Item
          indentify = $game_system.item_indentify_table[data.name]
          if indentify == "0"
            indentify = $game_system.item_indentify_table[data.name] = 1
            @window.active = false
            @help_window.active = true
            @help_window.set_text("鉴定结果"+ data.name )
          end  
        when RPG::Weapon
          indentify = $game_system.weapon_indentify_table[data.name]
          if indentify == "0"
            indentify = $game_system.weapon_indentify_table[data.name] = 1
            @window.active = false
            @help_window.active = true
            @help_window.set_text("鉴定结果"+ data.name )
          end  
        when RPG::Armor
          indentify = $game_system.armor_indentify_table[data.name]
          if indentify == "0"
            indentify = $game_system.armor_indentify_table[data.name] = 1
            @window.active = false
            @help_window.active = true
            @help_window.set_text("鉴定结果"+ data.name )
          end  
        end
    end  
      
    if Input.trigger?(Input::B)   
      $game_system.se_play($data_system.cancel_se)
      $scene = Scene_Map.new
    end  

  end
  
  def help_window_update
    if Input.press?(Input::C)   
      $game_system.se_play($data_system.decision_se)
      for i in 0..30
        Graphics.update
      end  
      $scene = Scene_Map.new
    end  
  end
  
end  


http://rpg.blue/upload_program/files/hide_xiu_96911465.png
头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-5-24
帖子
335
2
发表于 2008-6-27 12:50:15 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
3
星屑
6420
在线时间
1131 小时
注册时间
2007-12-26
帖子
2402
3
发表于 2008-6-27 16:21:09 | 只看该作者
最好鉴定之前就是铜剑铁剑什么的,鉴定之后属性有所添加,并且名称加个前后缀
囡囚囨囚囨図囨囧
回复 支持 反对

使用道具 举报

Lv2.观梦者

傻♂逼

梦石
0
星屑
374
在线时间
1606 小时
注册时间
2007-3-13
帖子
6562

烫烫烫开拓者

4
发表于 2008-6-27 17:08:42 | 只看该作者
http://rpg.blue/viewthread.php?tid=91181&ntime=2008%2D6%2D27+9%3A07%3A33
http://rpg.blue/viewthread.php?tid=90918&ntime=2008%2D6%2D27+9%3A07%3A33
http://rpg.blue/viewthread.php?tid=90917&ntime=2008%2D6%2D27+9%3A07%3A33
都属于预发布

等拿到权限后就发
哎呀,蛋疼什么的最有爱了
回复 支持 反对

使用道具 举报

Lv1.梦旅人

粉蜘蛛秀秀

梦石
0
星屑
76
在线时间
39 小时
注册时间
2007-6-4
帖子
384

贵宾第1届Title华丽大赛新人奖

5
 楼主| 发表于 2008-6-27 17:26:39 | 只看该作者
最好鉴定之前就是铜剑铁剑什么的,鉴定之后属性有所添加,并且名称加个前后缀

好像站上有个叶子的随机物品,配合这个脚本不就能实现了?
http://rpg.blue/upload_program/files/hide_xiu_96911465.png
回复 支持 反对

使用道具 举报

Lv1.梦旅人

粉蜘蛛秀秀

梦石
0
星屑
76
在线时间
39 小时
注册时间
2007-6-4
帖子
384

贵宾第1届Title华丽大赛新人奖

6
 楼主| 发表于 2008-6-27 17:28:03 | 只看该作者
http://rpg.blue/viewthread.php?tid=91181&ntime=2008%2D6%2D27+9%3A07%3A33
http://rpg.blue/viewthread.php?tid=90918&ntime=2008%2D6%2D27+9%3A07%3A33
http://rpg.blue/viewthread.php?tid=90917&ntime=2008%2D6%2D27+9%3A07%3A33
都属于预发布

等拿到权限后就发


{/gg}那个教程啊,大工程啊,呵呵 可能会分好几批来完成他了 不过我一定会把它磨完的
http://rpg.blue/upload_program/files/hide_xiu_96911465.png
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
39016
在线时间
5717 小时
注册时间
2006-11-10
帖子
6619
7
发表于 2008-6-28 06:38:45 | 只看该作者
不错的东西,有个想法制作不可思议迷宫类型的游戏,可以使用。
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-6-3
帖子
31
8
发表于 2008-6-29 04:49:45 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-16 14:25

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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