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

Project1

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

[已经解决] 魔法商店这个脚本怎么使用?

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
105
在线时间
393 小时
注册时间
2008-11-7
帖子
353
跳转到指定楼层
1
发表于 2009-10-3 21:58:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
#==============================================================================

# 本脚本来自http://rpg.blue/web/,使用和转载请保留此信息

#==============================================================================



#呼叫魔法商店的时候,在事件中使用脚本:$scene = Scene_MShop.new([魔法编号1,2])

#在数据库的说明里,在说明文字后面加上@50 表示这个魔法价格为 50



#==============================================================================



#——以下是一些自定义的内容



$mShop_use_1 = "技能点"    #——这项是购买魔法特技的货币的名称,如“灵魄”、“金钱”



$mShop_use_2 = "点"  #——这项是购买魔法特技的货币单位,如“点”、“¥”



$mShop_use_variable = 20   #——这项是购买魔法特技时消耗的变量编号,如果=0 则是消耗金钱



$mShop_Window_Opacity = 200  #——这项是窗口透明度



#==============================================================================

# ■ Window_MGold

#------------------------------------------------------------------------------

#  显示金钱的窗口。

#==============================================================================

class Window_MGold < Window_Base

  #--------------------------------------------------------------------------

  # ● 初始化窗口

  #--------------------------------------------------------------------------

  def initialize

    super(0, 0, 272, 64)

    self.contents = Bitmap.new(width - 32, height - 32)

    refresh

  end

  #--------------------------------------------------------------------------

  # ● 刷新

  #--------------------------------------------------------------------------

  def refresh

    self.contents.clear

    self.contents.font.color = system_color

    self.contents.draw_text(0, 0 , 240,32 ,$mShop_use_1)

    self.contents.font.color = normal_color

    self.contents.draw_text(0, 0, 240-contents.text_size($mShop_use_2).width-6, 32, $mShop_gold.to_s, 2)

    self.contents.font.color = system_color

    self.contents.draw_text(0, 0, 240, 32, $mShop_use_2, 2)

  end

end

#==============================================================================

# ■ Scene_MShop

#------------------------------------------------------------------------------

#  处理特技商店画面的类。

#==============================================================================

class Scene_MShop

  #--------------------------------------------------------------------------

  # ● 初始化

  #--------------------------------------------------------------------------

  def initialize(id)

    @id = id

  end  

  #--------------------------------------------------------------------------

  # ● 主处理

  #--------------------------------------------------------------------------

  def main

    screen = Spriteset_Map.new

    if $mShop_use_variable == 0

      $mShop_gold = $game_party.gold

    else

      $mShop_gold = $game_variables[$mShop_use_variable]

    end

    # 生成帮助窗口

    @help_window = Window_Help.new

    @help_window.opacity = $mShop_Window_Opacity

    @help_window.z = 10000

    # 生成金钱窗口

    @gold_window = Window_MGold.new

    @gold_window.x = 368

    @gold_window.y = 416

    @gold_window.opacity = $mShop_Window_Opacity

    @gold_window.z = 10000

    # 生成购买窗口

    @buy_window = Window_MShopBuy.new(@id)

    @buy_window.active = true

    @buy_window.visible = true

    @buy_window.help_window = @help_window

    @buy_window.opacity = $mShop_Window_Opacity

    @buy_window.z = 10000

    # 生成状态窗口

    @status_window = Window_MShopStatus.new

    @status_window.visible = true

    @status_window.active = false

    @status_window.opacity = $mShop_Window_Opacity

    @status_window.z = 10000

    # 执行过渡

    Graphics.transition

    # 主循环

    loop do

      # 刷新游戏画面

      Graphics.update

      # 刷新输入信息

      Input.update

      # 刷新画面

      update

      # 如果画面切换的话就中断循环

      if $scene != self

        break

      end

    end

    # 准备过渡

    Graphics.freeze

    # 释放窗口

    @help_window.dispose

    #@mhelp_window.dispose

    @gold_window.dispose

    @buy_window.dispose

    @status_window.dispose

    screen.dispose

  end

  #--------------------------------------------------------------------------

  # ● 刷新画面

  #--------------------------------------------------------------------------

  def update

    # 刷新窗口

    @help_window.update

    #@mhelp_window.update

    @gold_window.update

    @buy_window.update

    @status_window.update

    # 购买窗口激活的情况下: 调用 update_buy

    if @buy_window.active

      update_buy

      return

    end

    if @status_window.active

      update_status

      return

    end

  end

  #--------------------------------------------------------------------------

  # ● 刷新画面 (购买窗口激活的情况下)

  #--------------------------------------------------------------------------

  def update_buy

    @status_window.skill = @buy_window.skill

    if Input.trigger?(Input::B)

      $game_system.se_play($data_system.cancel_se)

      $scene = Scene_Map.new

      return

    end

    if Input.trigger?(Input::C)

      @skill = @buy_window.skill

      if @skill == nil or @skill.price > $mShop_gold

        $game_system.se_play($data_system.buzzer_se)

        return

      end

      $game_system.se_play($data_system.decision_se)

      @buy_window.active = false

      @status_window.index = 0

      @status_window.active = true

    end

  end

  #--------------------------------------------------------------------------

  # ● 刷新画面 (状态窗口激活的情况下)

  #--------------------------------------------------------------------------

  def update_status

    if Input.trigger?(Input::B)

      $game_system.se_play($data_system.cancel_se)

      @status_window.active = false

      @status_window.index = -1

      @buy_window.active = true

    end

    if Input.trigger?(Input::C)

      if $game_party.actors[@status_window.index].skill_learn?(@skill.id)

        $game_system.se_play($data_system.cancel_se)

        return

      else

        $game_system.se_play($data_system.decision_se)

        if $mShop_use_variable == 0

          $game_party.gain_gold([email protected])

          $mShop_gold -= @skill.price

        else

          $game_variables[$mShop_use_variable] -= @skill.price

          $mShop_gold -= @skill.price

        end

        $game_party.actors[@status_window.index].learn_skill(@skill.id)

        @gold_window.refresh

        @buy_window.refresh

        @status_window.refresh

        @status_window.active = false

        @status_window.index = -1

        @buy_window.active = true

      end      

    end   

  end

end

#==============================================================================

# ■ Window_MShopStatus

#------------------------------------------------------------------------------

#  特技商店画面、显示物品所持数与角色装备的窗口。

#==============================================================================

class Window_MShopStatus < Window_Selectable

  #--------------------------------------------------------------------------

  # ● 初始化对像

  #--------------------------------------------------------------------------

  def initialize

    super(368, 64, 272, 352)

    self.contents = Bitmap.new(width - 32, height - 32)

    self.contents.font.size = 18

    @skill = nil

    refresh

  end

  #--------------------------------------------------------------------------

  # ● 刷新

  #--------------------------------------------------------------------------

  def refresh

    self.contents.clear

    for i in 0...$game_party.actors.size

      actor = $game_party.actors[i]

      draw_actor_graphic(actor,22,80*i+68)

      self.contents.font.color = system_color

      self.contents.draw_text(44, 80*i, 240, 32, actor.name)

      self.contents.draw_text(0, 80*i , 200,32,"Lv",2)

      self.contents.font.color = normal_color

      self.contents.draw_text(0, 80*i, 230, 32, actor.level.to_s , 2)

      self.contents.font.color = system_color

      self.contents.draw_text(44, 80*i+22, 45, 32, $data_system.words.hp)

      self.contents.font.color = normal_color

      self.contents.draw_text(44, 80*i+22, 80, 32, actor.maxhp.to_s,2)

      self.contents.font.color = system_color

      self.contents.draw_text(150, 80*i+22, 45, 32, $data_system.words.sp)

      self.contents.font.color = normal_color

      self.contents.draw_text(150, 80*i+22, 80, 32, actor.maxsp.to_s,2)      

      if actor.skill_learn?(@skill.id)

        self.contents.font.color = Color.new(255,255,255,128)

        self.contents.draw_text(44, 80*i+44, 196, 32, "已经学习",2)        

      else

        self.contents.font.color = Color.new(255,255,0,255)

        self.contents.draw_text(44, 80*i+44, 240, 32, "没有学习")

      end

    end

    @item_max = 4#$game_party.actors.size

  end

  #--------------------------------------------------------------------------

  # ● 设置物品

  #     item : 新的物品

  #--------------------------------------------------------------------------

  def skill=(skill)

    if @skill != skill

      @skill = skill

      refresh

    end

  end

  #--------------------------------------------------------------------------

  # ● 刷新光标矩形

  #--------------------------------------------------------------------------

  def update_cursor_rect

    if @index < 0

      self.cursor_rect.empty

    else

      self.cursor_rect.set(0, @index * 80, self.width - 32, 80)

    end

  end

end

#==============================================================================

# ■ Window_MShopBuy

#------------------------------------------------------------------------------

#  特技商店画面、浏览显示可以购买的商品的窗口。

#==============================================================================

class Window_MShopBuy < Window_Selectable

  #--------------------------------------------------------------------------

  # ● 初始化对像

  #     shop_goods : 商品

  #--------------------------------------------------------------------------

  def initialize(id)

    super(0, 64, 368, 416)

    @id = id

    refresh

    self.index = 0

  end

  #--------------------------------------------------------------------------

  # ● 获取物品

  #--------------------------------------------------------------------------

  def skill

    return @data[self.index]

  end

  #--------------------------------------------------------------------------

  # ● 刷新

  #--------------------------------------------------------------------------

  def refresh

    if self.contents != nil

      self.contents.dispose

      self.contents = nil

    end

    @data = []

    for skill_id in @id

      skill = $data_skills[skill_id]

      if skill != nil

        @data.push(skill)

      end

    end

    @item_max = @data.size

    if @item_max > 0

      self.contents = Bitmap.new(width - 32, row_max * 32)

      for i in 0...@item_max

        draw_item(i)

      end

    end

  end

  #--------------------------------------------------------------------------

  # ● 描绘羡慕

  #     index : 项目编号

  #--------------------------------------------------------------------------

  def draw_item(index)

    skill = @data[index]

    # 除此之外的情况设置为无效文字色

    if skill.price <= $mShop_gold

      self.contents.font.color = normal_color

    else

      self.contents.font.color = disabled_color

    end

    x = 4

    y = index * 32

    rect = Rect.new(x, y, self.width - 32, 32)

    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))

    bitmap = RPG::Cache.icon(skill.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)

    self.contents.draw_text(x + 28, y, 212, 32, skill.name, 0)

    self.contents.draw_text(x + 240, y, 88, 32, skill.price.to_s, 2)

  end

  #--------------------------------------------------------------------------

  # ● 刷新帮助文本

  #--------------------------------------------------------------------------

  def update_help

    @help_window.set_text(self.skill == nil ? "" : self.skill.description)

  end

end

#==============================================================================

# ■ RPG原装定义

#==============================================================================

module RPG

  class Skill

    def description

      description = @description.split(/@/)[0]

      return description != nil ? description : ''

    end

    def price

      price = @description.split(/@/)[1]

      return price != nil ? price.to_i : 0

    end

  end

end







#==============================================================================

# 本脚本来自http://rpg.blue/web/,使用和转载请保留此信息

#==============================================================================

Lv1.梦旅人

梦石
0
星屑
50
在线时间
1 小时
注册时间
2007-8-18
帖子
701
2
发表于 2009-10-3 22:00:44 | 只看该作者
#呼叫魔法商店的时候,在事件中使用脚本:$scene = Scene_MShop.new([魔法编号1,2])

#在数据库的说明里,在说明文字后面加上@50 表示这个魔法价格为 50


你想问什么呢?
笑天下谁是敌手,问千年谁主沉浮
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-4 18:42

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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