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

Project1

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

[已经解决] 任务系统怎么放到菜单里

[复制链接]

Lv1.梦旅人

梦石
0
星屑
95
在线时间
75 小时
注册时间
2011-8-6
帖子
66
跳转到指定楼层
1
发表于 2012-5-9 17:17:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我试着放到菜单里 可是老出错
就是这个脚本
#============================================================================
# ** 任务系统
#    基本:
#      $scene = Scene_Task.new(返回的场景, 游标初始index)       召唤查看任务场景
#    说明:
#      $game_party.accept_task(id)                                  接受id号任务
#      $game_party.delete_task(Game_Task.new(id))             删除(放弃)id号任务
#      $game_party.completed_task(id)                               完成id号任务
#      $game_party.task_status(id)   获取任务状态,未接受返回nil;未完成返回false;
#                                                                 已完成返回true
#      $game_party.accepted_task?(id)                   判断角色是否接受了id号任务
#      $game_party.completed_task?(id)                判断角色是否完成了id号任务
#    快捷手段:
#      visible_ts(id, kind)
#                   在地图画面上显示id号任务的状态.kind:0为接受任务时显示的信息;
#                               1为完成任务时显示的信息;2为任务失败时显示的信息;
#                           3为放弃任务时显示的信息;4为无法放弃任务时显示的信息;
#                                                           5为已接此任务的提示.
#      accept_task(id, enforcement)
#               接受id号任务并在地图上显示接受任务时显示的信息,enforcement为是否
#                                           强制接受,true为是,可不填,默认为false
#      complete_task(id)          删除id号任务并在地图上显示完成任务时显示的信息
#      fail_task(id)              删除id号任务并在地图上显示任务失败时显示的信息
#      abandonment_task(id)       删除id号任务并在地图上显示放弃任务时显示的信息
#============================================================================
module DOS
#============================================================================
#-------------------------------任务设置-------------------------------------
#============================================================================
  Task_Abandonment_Task_Input = Input::Letters["E"] # 放弃任务按钮........[按键]
  Task_Left_Change_Page = Input::LEFT # 左翻页按键........................[按键]
  Task_Right_Change_Page = Input::RIGHT # 右翻页按键......................[按键]
  Task_Filament_Color = Color.new(0, 0, 0) # 描绘报酬表格时,线条的颜色....[颜色]
  # ▼ 绘制确定放弃任务时疑问的文字色.....................................[颜色]
  Task_Query_Word_Color = Color.new(255, 255, 0)
  Task_Gold_Icon_Index = 205 # 金钱的图标id...............................[数字]
  # 没有接受该任务,又调用该任务的complete_task/fail_task/abandonment_task方法时,
  # 该怎样处理.0为显示一个窗口, 1为无处理.................................[数字]
  Task_No_Accept = 0
  #--任务资料设置(此处省略分类)
  Task = []
  #--痴情的女鬼---------------------------------------------------
  Task[0] = { # 任务id
  "Icon" => 50, # 图标id
  "Name" => "痴情的女鬼",# 任务名称
  "Caption" => "   村子里有一间大屋子,里头住着一个叫高姗姗的女鬼,他一直在等他的哥哥高
文彦.这种痴情的确令人佩服,但她每天晚上都会发出鬼哭的声音,引得附近黑毛
狼咆哮,斯库拉唱歌,厄洛斯射箭,狄安娜砸盾等,严重地影响了附近村民的休息
.你能够帮村民解决这个痴情的女鬼吗?",
  "Reward" => {"Item" => [],           # 完成任务后奖励的物品
               "Weapon" => [],         # 完成任务后奖励的武器
               "Armor" => [],          # 完成任务后奖励的防具
               "Gold" => 0,            # 完成任务后奖励的金钱
               "Level_Plus" => [],     # 完成任务后奖励的等级
               "Exp_Plus" => []        # 完成任务后奖励的经验
               },
  "Can Abandonment?" => false, # 可否放弃此任务
  "Level" => 3  # 任务等级
  }
  #--遗失的手风琴-----------------------------------------------
  Task[1] = { # 任务id
  "Icon" => 100, # 图标id
  "Name" => "遗失的手风琴",# 任务名称
  "Caption" => "   村庄里有一个伟大的音乐家,应邀去参加一个音乐会,但是他的手风琴不见,
你能帮他找找吗?",
  "Reward" => {"Item" => [],           # 完成任务后奖励的物品
               "Weapon" => [],         # 完成任务后奖励的武器
               "Armor" => [],          # 完成任务后奖励的防具
               "Gold" => 0,            # 完成任务后奖励的金钱
               "Level_Plus" => [],     # 完成任务后奖励的等级
               "Exp_Plus" => []        # 完成任务后奖励的经验
               },
  "Can Abandonment?" => true, # 可否放弃此任务
  "Level" => 3  # 任务等级
  }
end
module Vocab
#============================================================================
#---------------------------任务用语设置-------------------------------------
#============================================================================
  Task_Accept = "接受了任务[%s]"
  Task_Complete = "任务[%s]被完成!"
  Task_Fail = "任务[%s]已失败"
  Task_Abandonment = "放弃任务[%s]"
  Task_Can_Not_Abandonment = "无法放弃任务[%s]"
  Task_Adandonment_Query = "你确定要放弃[%s]这个任务吗?"
  Task_Accepted = "已接受任务[%s]"
  Task_No_Accept = "你还没接受任务[%s]!"
  Task_Difficulty = "任务难度:"
  Task_Level_Word = ["简单", "容易", "中等", "困难"]
  Task_Can_Abandonment_Word = ["可放弃", "不可放弃"]
  Task_Change_Page = ["按下右键翻到下一页 >", "< 按下左键翻到上一页"]
end
#============================================================================
# ** Game_Task
#============================================================================
class Game_Task
  #----------------------------------------------------------------------
  # * 初始化
  #----------------------------------------------------------------------
  def initialize(id)
    @id = id
    @task = DOS::Task[id]
  end
  #----------------------------------------------------------------------
  # * 获取任务id
  #----------------------------------------------------------------------
  def id
    return @id
  end
  #----------------------------------------------------------------------
  # * 获取任务图标索引
  #----------------------------------------------------------------------
  def icon_index
    return @task["Icon"]
  end
  #----------------------------------------------------------------------
  # * 获取任务名
  #----------------------------------------------------------------------
  def name
    return @task["Name"]
  end
  #----------------------------------------------------------------------
  # * 获取任务说明
  #----------------------------------------------------------------------
  def caption
    return @task["Caption"]
  end
  #----------------------------------------------------------------------
  # * 获取任务奖赏资料(不包括物品/武器/防具数量)
  #     kind:0为道具;1为武器;2为防具;3为金钱;4为lv;5为exp.
  #----------------------------------------------------------------------
  def reward(kind, index=0)
    case kind
    when 0
      return $data_items[@task["Reward"]["Item"][index][0]]
    when 1
        return $data_weapons[@task["Reward"]["Weapon"][index][0]]
    when 2
        return $data_armors[@task["Reward"]["Armor"][index][0]]
    when 3
      return @task["Reward"]["Gold"]
    when 4
      if @task["Reward"]["Level_Plus"][index] != nil
        return @task["Reward"]["Level_Plus"][index][1]
      else return nil
      end
    when 5
      if @task["Reward"]["Exp_Plus"][index] != nil
        return @task["Reward"]["Exp_Plus"][index][1]
      else return nil
      end
    end
  end
  #----------------------------------------------------------------------
  # * 获取任务奖赏多少种道具
  #     kind:0为道具;1为武器;2为防具.
  #----------------------------------------------------------------------
  def reward_size(kind)
    case kind
    when 0
      return @task["Reward"]["Item"].size
    when 1
      return @task["Reward"]["Weapon"].size
    when 2
      return @task["Reward"]["Armor"].size
    end
  end
  #----------------------------------------------------------------------
  # * 获取任务奖赏等级/经验的受益人(le = level & exp)
  #     kind:0为level;1为exp.
  #----------------------------------------------------------------------
  def reward_le_actor(kind, index)
    case kind
    when 0
      if $game_party.members[@task["Reward"]["Level_Plus"][index][0]] != nil
        return $game_party.members[@task["Reward"]["Level_Plus"][index][0]]
      else return nil
      end
    when 1
      if $game_party.members[@task["Reward"]["Exp_Plus"][index][0]] != nil
        return $game_party.members[@task["Reward"]["Exp_Plus"][index][0]]
      else return nil
      end
    end
  end
  #----------------------------------------------------------------------
  # * 获取任务奖赏等级/经验的受益人总数(le = level & exp)
  #     kind:0为level;1为exp.
  #----------------------------------------------------------------------
  def reward_le_actor_size(kind)
    case kind
    when 0
      return @task["Reward"]["Level_Plus"].size
    when 1
      return @task["Reward"]["Exp_Plus"].size
    end
  end
  #----------------------------------------------------------------------
  # * 获取任务奖赏道具数量
  #     kind:0为道具;1为武器;2为防具.
  #----------------------------------------------------------------------
  def reward_item_amount(kind,index)
    case kind
    when 0
      return @task["Reward"]["Item"][index][1]
    when 1
      return @task["Reward"]["Weapon"][index][1]
    when 2
      return @task["Reward"]["Armor"][index][1]
    end
  end
  #----------------------------------------------------------------------
  # * 获取任务等级
  #----------------------------------------------------------------------
  def level
    return @task["Level"]
  end
  #----------------------------------------------------------------------
  # * 获取描述任务等级用语
  #----------------------------------------------------------------------
  def level_word
    return Vocab::Task_Level_Word[@task["Level"]]
  end
  #----------------------------------------------------------------------
  # * 获取可否放弃标识
  #----------------------------------------------------------------------
  def can_abandonment?
    return @task["Can Abandonment?"]
  end
  #----------------------------------------------------------------------
  # * 获取可否放弃文字
  #----------------------------------------------------------------------
  def can_abandonment_word
    if @task["Can Abandonment?"] == true
      return Vocab::Task_Can_Abandonment_Word[0]
    else return Vocab::Task_Can_Abandonment_Word[1]
    end
  end
end
#==============================================================================
# ** Game_Party
#------------------------------------------------------------------------------
#  這個類用來操控主角隊伍,包含了隊伍所攜資金和物品等資訊。
#  這個類的實例被全域變數 $game_party 所引用。
#==============================================================================
class Game_Party < Game_Unit
  attr_reader  :accepted_task
  def initialize
    super
    @gold = 100
    @steps = 0
    @last_item_id = 0
    @last_actor_index = 0
    @last_target_index = 0
    @actors = []      # 隊員類型 (主角編號)
    @items = {}       # 所攜物品 HASH 表 (物品編號)
    @weapons = {}     # 所攜武器 HASH 表 (武器編號)
    @armors = {}      # 所攜護具 HASH 表 (護具編號)
    @accepted_task = []
    @task_status = []
  end
  def accept_task(id)
    @accepted_task.push(Game_Task.new(id))
    @task_status[id] = false
  end
  def delete_task(task)
    @accepted_task.delete(task)
    @task_status[id] = nil
  end
  def completed_task(id)
    delete_task(Game_Task.new(id))
    for item in [url=mailto:0...@accepted_task[id].reward_size(0]0...@accepted_task[id].reward_size(0[/url])
      gain_item(@accepted_task[id].reward(0, item),@accepted_task[id].reward_item_amount(0,item))
    end
    for item in [url=mailto:0...@accepted_task[id].reward_size(1]0...@accepted_task[id].reward_size(1[/url])
      gain_item(@accepted_task[id].reward(1, item),@accepted_task[id].reward_item_amount(1,item))
    end
    for item in [url=mailto:0...@accepted_task[id].reward_size(2]0...@accepted_task[id].reward_size(2[/url])
      gain_item(@accepted_task[id].reward(2, item),@accepted_task[id].reward_item_amount(2,item))
    end
    for index in [url=mailto:0...@accepted_task[id].reward_le_actor_size(0]0...@accepted_task[id].reward_le_actor_size(0[/url])
      if @accepted_task[id].reward_le_actor(0, index) == nil
        next
      end
      @accepted_task[id].reward_le_actor(0, index).change_level(@accepted_task[id].reward(5, index), true)
    end
    for index in [url=mailto:0...@accepted_task[id].reward_le_actor_size(1]0...@accepted_task[id].reward_le_actor_size(1[/url])
      if @accepted_task[id].reward_le_actor(1, index) == nil
        next
      end
      @accepted_task[id].reward_le_actor(1, index).change_exp(@accepted_task[id].reward(4, index), true)
    end
    gain_gold(@accepted_task[id].reward(3))
    @task_status[id] = true
  end
  def task_status(id)
    return @task_status[id]
  end
  def accepted_task?(id)
    if @task_status[id] == true or @task_status[id] == false
      return true
    else return false
    end
  end
  def completed_task?(id)
    if @task_stutas[id] == true
      return true
    else return false
    end
  end
end
#============================================================================
# ** Window_TaskHelp
#============================================================================
class Window_TaskHelp < Window_Base
  attr_accessor :paga
  def initialize(id, paga=0)
    super(160, 20, 384, 376)
    @paga = paga
    refresh(id)
  end
  def refresh(id)
    dw = self.width - 32
    dh = self.height - 32
    task = Game_Task.new(id)
    self.contents.clear
    if @paga == 0 # 描绘第一页
      draw_icon(task.icon_index, 0, 0)
      self.contents.draw_text(28, 0, dw, 24, task.name)
      self.contents.draw_text(0, 24, dw, 24, Vocab::Task_Difficulty)
      w = self.contents.text_size(Vocab::Task_Difficulty).width
      self.contents.draw_text(w, 24, dw, 24, task.level_word)
      self.contents.draw_text(28, 0, dw-28, 24, task.can_abandonment_word, 2)
      chenge_special_character(task.caption.clone, 0, 48)
    elsif @paga == 1 # 描绘第二页
      #-描绘表格-------------------------------------------------------------
      # 边框
      draw_straight_filament(0, 0, dw, 0, 1, DOS::Task_Filament_Color)
      draw_straight_filament(0, 0, 0, dh, 1, DOS::Task_Filament_Color)
      draw_straight_filament(0, 27, dw, 27, 1, DOS::Task_Filament_Color)
      draw_straight_filament(0, dh-1, dw/2, dh-1, 1, DOS::Task_Filament_Color)
      draw_straight_filament(dw/2+2, dh-5, dw-1, dh-5, 1, DOS::Task_Filament_Color)
      draw_straight_filament(dw-1, 0, dw-1, dh-4, 1, DOS::Task_Filament_Color)
      # 中线
      draw_straight_filament(dw/2-1, 27, dw/2-1, dh, 1, DOS::Task_Filament_Color)
      draw_straight_filament(dw/2+1, 27, dw/2+1, dh-4, 1, DOS::Task_Filament_Color)
      # 队伍成员分割线
      h = (dh-27-1)/4
      draw_straight_filament(0, h*1+27, dw/2-1, h*1+27, 1, DOS::Task_Filament_Color)
      draw_straight_filament(0, h*2+27, dw/2-1, h*2+27, 1, DOS::Task_Filament_Color)
      draw_straight_filament(0, h*3+27, dw/2-1, h*3+27, 1, DOS::Task_Filament_Color)
      draw_straight_filament(0, h*4+27, dw/2-1, h*4+27, 1, DOS::Task_Filament_Color)
      # 头像分割线
      draw_straight_filament(79, 27, 79, dh, 1, DOS::Task_Filament_Color)
      # 描绘成员奖励分割线
      draw_straight_filament(79, (h-h/2)*1+27, dw/2-1, (h-h/2)*1+27, 1, DOS::Task_Filament_Color)
      draw_straight_filament(79, (h-h/2)+h+27, dw/2-1, (h-h/2)+h+27, 1, DOS::Task_Filament_Color)
      draw_straight_filament(79, (h-h/2)+h*2+27, dw/2-1, (h-h/2)+h*2+27, 1, DOS::Task_Filament_Color)
      draw_straight_filament(79, (h-h/2)+h*3+27, dw/2-1, (h-h/2)+h*3+27, 1, DOS::Task_Filament_Color)
      # 描绘奖励分割线
      a = (dw-28)/24
      for i in 0...a
        draw_straight_filament(dw/2+2, 24*i+27, dw-1, 24*i+27, 1, DOS::Task_Filament_Color)
      end
      #-结束描绘-------------------------------------------------------------
      #-描绘内容-------------------------------------------------------------
      # 描绘标题
      self.contents.draw_text(1, 1, dw-1, 24, "奖赏表", 1)
      # 描绘头像等
      for i in 0...$game_party.members.size
        draw_actor_face($game_party.members, 1, h*i+28, h-1)
        self.contents.font.size = 20
        self.contents.draw_text(1, 1+h*i+27, 96, 24, $game_party.members.name)
        self.contents.font.size = 18
        self.contents.draw_text(81,1+h*i+27, dw/2-81, 24,"奖励#{Vocab.level}:")
        self.contents.draw_text(81,1+h*i+27+h/2, dw/2-81, 24,"奖励经验:")
        if task.reward(4, i) != nil
          self.contents.draw_text(81,1+h*i+27+h/4, dw/2-82, 24, task.reward(4, i), 2)
          else self.contents.draw_text(81,1+h*i+27+h/4, dw/2-82, 24, "无", 2)
        end
        if task.reward(5, i) != nil
          self.contents.draw_text(81,1+h*i+27+h/4+h/2, dw/2-82, 24, task.reward(5, i), 2)
          else self.contents.draw_text(81,1+h*i+27+h/4+h/2, dw/2-82, 24, "无", 2)
        end
      end
      self.contents.font.size = 20
      x = dw/2+1
      # 描绘金钱奖励
      draw_icon(DOS::Task_Gold_Icon_Index, x, 26)
      self.contents.draw_text(x+25, 26, dw/2-1, 24,"金币:#{task.reward(3, 0)}#{Vocab.gold}")
      y = 26+24
      # 描绘道具奖励
      for i in 0...task.reward_size(0)
        draw_icon(task.reward(0, i).icon_index, x, y+i*24)
        self.contents.draw_text(x+25, y+i*24, dw/2-1, 24,"#{task.reward(0, i).name}*#{task.reward_item_amount(0, i)}")
      end
      y = 26 + 24 + task.reward_size(0)*24
      # 描绘武器奖励
      for i in 0...task.reward_size(1)
        draw_icon(task.reward(1, i).icon_index, x, y+i*24)
        self.contents.draw_text(x+25, y+i*24, dw/2-1, 24,"#{task.reward(1, i).name}*#{task.reward_item_amount(1, i)}")
      end
      y = 26 + 24 + task.reward_size(0)*24 + task.reward_size(1)*24
      # 描绘防具奖励
      for i in 0...task.reward_size(2)
        draw_icon(task.reward(2, i).icon_index, x, y+i*24)
        self.contents.draw_text(x+25, y+i*24, dw/2-1, 24,"#{task.reward(2, i).name}*#{task.reward_item_amount(2, i)}")
      end
      #-结束描绘-------------------------------------------------------------
    end
  end
end
#=============================================================================
# ** Scene_Task
#=============================================================================
class Scene_Task < Scene_Base
  #---------------------------------------------------------------------------
  # * 初始化变量
  #---------------------------------------------------------------------------
  def initialize(return_scene, index=0)
    @index = index
    @return_scene = return_scene
  end
  #---------------------------------------------------------------------------
  # * 开始处理
  #---------------------------------------------------------------------------
  def start
    create_menu_background
    @th = Window_TaskHelp.new($game_party.accepted_task[0].id)
    @paga = @th.paga
    tn = []
    for i in 0...$game_party.accepted_task.size
      tn = $game_party.accepted_task.name
    end
    @hc = Window_Command.new(160, tn)
    @hc.y = 20
    @hc.height = 376
    @hc.index = @index
    @query = Window_Base.new(40, 152, 464, 56)
    a = sprintf(Vocab::Task_Adandonment_Query, $game_party.accepted_task[0].name)
    @query.contents.font.color = DOS::Task_Query_Word_Color
    @query.contents.draw_text(0, 0, 432, 24, a, 1)
    @query.contents.font.color = Color.new(0, 0, 0)
    @qc = Window_Command.new(160, ["          是", "          否"])
    @qc.x = 192
    @qc.y = 208
    @query.visible = false
    @qc.visible = false
    @qc.active = false
    @sprite = Sprite.new
    @sprite.bitmap = Bitmap.new(384, 24)
    @sprite.bitmap.draw_text(0, 0, 384, 24, Vocab::Task_Change_Page[@paga], 1)
    @sprite.x = 0
    @sprite.y = 416-24
  end
  #--------------------------------------------------------------------------
  # * 结束处理
  #--------------------------------------------------------------------------
  def terminate
    dispose_menu_background
    @hc.dispose
    @th.dispose
    @query.dispose
    @qc.dispose
    @sprite.dispose
  end
  #--------------------------------------------------------------------------
  # * 更新帧
  #--------------------------------------------------------------------------
  def update
    @sprite.update
    @sprite.x + 10 if @sprite.x != 160
    @hc.update
    @th.update
    update_input
    if @hc.index != @index
      @th.refresh($game_party.accepted_task[@hc.index].id)
      @index = @hc.index
    end
    @query.update
    if @query.active == true
      @qc.update
    end
    if @paga != @th.paga
      @sprite.bitmap.clear
      @sprite.bitmap.draw_text(0, 0, 384, 24, Vocab::Task_Change_Page[@th.paga], 1)
      @sprite.x = 0
      @paga = @th.paga
    end
  end
  #--------------------------------------------------------------------------
  # * 刷新按键
  #--------------------------------------------------------------------------
  def update_input
    if Input.trigger?(Input::B)
      if @hc.active == true
        Sound.play_cancel
        $scene = @return_scene
      elsif @query.visible == true
        Sound.play_cancel
        @hc.active = true
        @query.visible = false
        @qc.visible = false
        @qc.active = false
      end
    elsif Input.trigger?(DOS::Task_Abandonment_Task_Input)
      if @hc.active == true
        if $game_party.accepted_task[@hc.index].can_abandonment? == true
          Sound.play_decision
          a = sprintf(Vocab::Task_Adandonment_Query, $game_party.accepted_task[@hc.index].name)
          @query.contents.clear
          @query.contents.font.color = DOS::Task_Query_Word_Color
          @query.contents.draw_text(0, 0, 432, 24, a, 1)
          @query.contents.font.color = Color.new(0, 0, 0)
          @query.visible = true
          @qc.visible = true
          @qc.active = true
          @hc.active = false
        else Sound.play_buzzer
          @query.contents.clear
          a = sprintf(Vocab::Task_Can_Not_Abandonment, $game_party.accepted_task[@hc.index].name)
          @query.contents.font.color = DOS::Task_Query_Word_Color
          @query.contents.draw_text(0, 0, 432, 24, a, 1)
          @query.contents.font.color = Color.new(0, 0, 0)
          @query.visible = true
          @hc.active = false
        end
      end
    elsif Input.trigger?(Input::C)
      if @qc.visible == true
        if @qc.index == 0
          Sound.play_decision
          @query.contents.clear
          a = sprintf(Vocab::Task_Abandonment, $game_party.accepted_task[@hc.index].name)
          @query.contents.font.color = DOS::Task_Query_Word_Color
          @query.contents.draw_text(0, 0, 432, 24, a, 1)
          @query.contents.font.color = Color.new(0, 0, 0)
          @qc.visible = false
          @query.visible = true
          $game_party.delete_task($game_party.accepted_task[@hc.index])
          Graphics.wait(40)
          $scene = Scene_Task.new(@return_scene)
        else @hc.active = true
          Sound.play_cancel
          @query.visible = false
          @qc.visible = false
          @qc.active = false
        end
      end
    elsif Input.trigger?(DOS::Task_Left_Change_Page)
      if @th.paga == 1
        @th.paga = 0
        @th.refresh($game_party.accepted_task[@hc.index].id)
      end
    elsif Input.trigger?(DOS::Task_Right_Change_Page)
      if @th.paga == 0
        @th.paga = 1
        @th.refresh($game_party.accepted_task[@hc.index].id)
      end
    end
  end
end
#==============================================================================
# ** Game_Map
#------------------------------------------------------------------------------
#  這個類用來操控地圖,包含了地圖滾動設置和通行度判定等資訊。
#  這個類的實例被全域變數 $game_map 所引用。
#==============================================================================
class Game_Map
  #--------------------------------------------------------------------------
  # * 宣告執行個體變數
  #--------------------------------------------------------------------------
  attr_accessor :task_id
  attr_reader :ts_visible
  attr_reader :task_word
  alias old_ini initialize
  def initialize
    old_ini
    @task_word = ""
    @ts_visible = false
    @task_id = 0
  end
  def visible_task_status
    if @ts_visible == false
      @ts_visible = true
    else @ts_visible = false
    end
  end
  def set_task_word(kind)
    case kind
    when 0               # 接受了任务
      @task_word = Vocab::Task_Accept
    when 1               # 完成了任务
      @task_word = Vocab::Task_Complete
    when 2               # 任务失败了
      @task_word = Vocab::Task_Fail
    when 3               # 放弃了任务
      @task_word = Vocab::Task_Abandonment
    when 4               # 无法放弃任务
      @task_word = Vocab::Task_Can_Not_Abandonment
    when 5               # 已接受了任务
      @task_word = Vocab::Task_Accepted
    when 6               # 未接受任务
      @task_word = Vocab::Task_No_Accept
    when nil
      @task_word = nil
    end
  end
end
#==============================================================================
# ** Scene_Map
#------------------------------------------------------------------------------
#  這個類用來執行顯示地圖場景畫面的程式。
#==============================================================================
class Scene_Map < Scene_Base
  alias old_sta start
  alias old_upd update
  alias old_ter terminate
  def start
    old_sta
    @ts = Window_Base.new(40, 152, 464, 56)
    @ts.visible = false
  end
  def terminate
    old_ter
    @ts.dispose
  end
  def update
    old_upd
    if $game_map.ts_visible == true
      @ts.contents.clear
      tw = sprintf($game_map.task_word, Game_Task.new($game_map.task_id).name)
      @ts.contents.draw_text(28, 0, 408, 24, tw)
      @ts.draw_icon(Game_Task.new($game_map.task_id).icon_index, 0, 0)
      @ts.visible = true
      Graphics.wait(40)
      $game_map.visible_task_status
      @ts.visible = false
    end
  end
end
#==============================================================================
# ** Game_Interpreter
#------------------------------------------------------------------------------
#  這個類是用來執行事件指令的直譯器。
#  這個類作為 Game_Map、Game_Troop 和 Game_Event 的內部類使用。
#==============================================================================
class Game_Interpreter
  def accept_task(id, enforcement=false)
    if $game_party.accepted_task?(id) == false or enforcement == true
      $game_party.accept_task(id)
      visible_ts(id, 0)
    else
      visible_ts(id, 5)
    end
  end
  def complete_task(id)
    if $game_party.accepted_task?(id) == false
      $game_party.completed_task(id)
      visible_ts(id, 1)
    elsif $game_party.accepted_task?(id) == nil
      visible_ts(id, 6) if DOS::Task_No_Accept == 0
    end
  end
  def fail_task(id)
    if $game_party.accepted_task?(id) == false
      $game_party.delete_task(Game_Task.new(id))
      visible_ts(id, 2)
    elsif $game_party.accepted_task?(id) == nil
      visible_ts(id, 6) if DOS::Task_No_Accept == 0
    end
  end
  def abandonment_task(id)
    if $game_party.accepted_task?(id) == false
      $game_party.delete_task(Game_Task.new(id))
      visible_ts(id, 3)
    elsif $game_party.accepted_task?(id) == nil
      visible_ts(id, 6) if DOS::Task_No_Accept == 0
    end
  end
  def visible_ts(id, kind)
    $game_map.task_id = id
    $game_map.set_task_word(kind)
    $game_map.visible_task_status
  end
end
class Window_Base < Window
  #--------------------------------------------------------------------------
  # * 描绘直线 by 945127391
  # begin_x : 直线开始的x坐标
  # begin_y : 直线开始的y坐标
  # end_x   : 直线结束的x坐标
  # end_y   : 直线结束的y坐标
  # color   : 直线的颜色
  # width   : 直线的宽度(厚度)
  #--------------------------------------------------------------------------
  def draw_straight_filament(begin_x, begin_y, end_x, end_y, width, color)
    if begin_x == end_x
      bitmap = Bitmap.new(width, end_y-begin_y)
    elsif begin_y == end_y
      bitmap = Bitmap.new(end_x-begin_x, width)
    else return
    end
    bitmap.fill_rect(0, 0, bitmap.width, bitmap.height, color)
    rect = Rect.new(0, 0, bitmap.width, bitmap.height)
    self.contents.blt(begin_x, begin_y, bitmap, rect)
    bitmap.dispose
  end
  #--------------------------------------------------------------------------
  # * 描绘自动换行文字 by 叶子
  #                    修改 945127391
  #--------------------------------------------------------------------------
   def chenge_special_character(text, x=0, y=0)
    # 记录换行时y坐标最小加值
    min_y = 0
    while ((c = text.slice!(/./m)) != nil)
      # 另起一行文字的情况下
      if c == "
"
        y += [WLH, min_y].max
        min_y = 0
        x = 0
        # 下面的文字
        next
      end
      # 自动换行处理
      if x + self.contents.text_size(c).width > self.contents.width
        y += [WLH, min_y].max
        min_y = 0
        x = 0
      end
      # 描绘文字
      self.contents.draw_text(4 + x, y, 40, WLH, c)
      # x 为要描绘文字的加法运算
      x += self.contents.text_size(c).width
    end
  end
end



‘‘──296394065于2012-5-9 20:05补充以下内容
  1. ◆变量操作:[0102:地图id]=地图id
  2. ◆条件分期:变量 [0102:地图id] == 25
  3.    ◆文章:—,—,普通,下
  4. :     :此处已被结界封印,不可使用回程卷。

  5. :除此以外的场合
  6. ◆场所移动:[026:破灭城](008,006)

  7. 分歧结束           
复制代码

’’


‘‘──296394065于2012-5-9 20:06补充以下内容
  1. ◆变量操作:[0102:地图id]=地图id
  2. ◆条件分期:变量 [0102:地图id] == 25
  3.    ◆文章:—,—,普通,下
  4. :     :此处已被结界封印,不可使用回程卷。

  5. :除此以外的场合
  6. ◆场所移动:[026:破灭城](008,006)

  7. 分歧结束           
复制代码

’’


‘‘──296394065于2012-5-9 20:07补充以下内容

额,放错了
’’


‘‘──296394065于2012-5-9 20:07补充以下内容

额,放错了
’’


‘‘──296394065于2012-5-9 20:08补充以下内容
  1. #============================================================================
  2. # ** 任务系统
  3. #    基本:
  4. #      $scene = Scene_Task.new(返回的场景, 游标初始index)       召唤查看任务场景
  5. #    说明:
  6. #      $game_party.accept_task(id)                                  接受id号任务
  7. #      $game_party.delete_task(Game_Task.new(id))             删除(放弃)id号任务
  8. #      $game_party.completed_task(id)                               完成id号任务
  9. #      $game_party.task_status(id)   获取任务状态,未接受返回nil;未完成返回false;
  10. #                                                                 已完成返回true
  11. #      $game_party.accepted_task?(id)                   判断角色是否接受了id号任务
  12. #      $game_party.completed_task?(id)                判断角色是否完成了id号任务
  13. #    快捷手段:
  14. #      visible_ts(id, kind)
  15. #                   在地图画面上显示id号任务的状态.kind:0为接受任务时显示的信息;
  16. #                               1为完成任务时显示的信息;2为任务失败时显示的信息;
  17. #                           3为放弃任务时显示的信息;4为无法放弃任务时显示的信息;
  18. #                                                           5为已接此任务的提示.
  19. #      accept_task(id, enforcement)
  20. #               接受id号任务并在地图上显示接受任务时显示的信息,enforcement为是否
  21. #                                           强制接受,true为是,可不填,默认为false
  22. #      complete_task(id)          删除id号任务并在地图上显示完成任务时显示的信息
  23. #      fail_task(id)              删除id号任务并在地图上显示任务失败时显示的信息
  24. #      abandonment_task(id)       删除id号任务并在地图上显示放弃任务时显示的信息
  25. #============================================================================
  26. module DOS
  27. #============================================================================
  28. #-------------------------------任务设置-------------------------------------
  29. #============================================================================
  30.   Task_Abandonment_Task_Input = Input::Letters["E"] # 放弃任务按钮........[按键]
  31.   Task_Left_Change_Page = Input::LEFT # 左翻页按键........................[按键]
  32.   Task_Right_Change_Page = Input::RIGHT # 右翻页按键......................[按键]
  33.   Task_Filament_Color = Color.new(0, 0, 0) # 描绘报酬表格时,线条的颜色....[颜色]
  34.   # ▼ 绘制确定放弃任务时疑问的文字色.....................................[颜色]
  35.   Task_Query_Word_Color = Color.new(255, 255, 0)
  36.   Task_Gold_Icon_Index = 205 # 金钱的图标id...............................[数字]
  37.   # 没有接受该任务,又调用该任务的complete_task/fail_task/abandonment_task方法时,
  38.   # 该怎样处理.0为显示一个窗口, 1为无处理.................................[数字]
  39.   Task_No_Accept = 0
  40.   #--任务资料设置(此处省略分类)
  41.   Task = []
  42.   #--痴情的女鬼---------------------------------------------------
  43.   Task[0] = { # 任务id
  44.   "Icon" => 50, # 图标id
  45.   "Name" => "痴情的女鬼",# 任务名称
  46.   "Caption" => "   村子里有一间大屋子,里头住着一个叫高姗姗的女鬼,他一直在等他的哥哥高
  47. 文彦.这种痴情的确令人佩服,但她每天晚上都会发出鬼哭的声音,引得附近黑毛
  48. 狼咆哮,斯库拉唱歌,厄洛斯射箭,狄安娜砸盾等,严重地影响了附近村民的休息
  49. .你能够帮村民解决这个痴情的女鬼吗?",
  50.   "Reward" => {"Item" => [],           # 完成任务后奖励的物品
  51.                "Weapon" => [],         # 完成任务后奖励的武器
  52.                "Armor" => [],          # 完成任务后奖励的防具
  53.                "Gold" => 0,            # 完成任务后奖励的金钱
  54.                "Level_Plus" => [],     # 完成任务后奖励的等级
  55.                "Exp_Plus" => []        # 完成任务后奖励的经验
  56.                },
  57.   "Can Abandonment?" => false, # 可否放弃此任务
  58.   "Level" => 3  # 任务等级
  59.   }
  60.   #--遗失的手风琴-----------------------------------------------
  61.   Task[1] = { # 任务id
  62.   "Icon" => 100, # 图标id
  63.   "Name" => "遗失的手风琴",# 任务名称
  64.   "Caption" => "   村庄里有一个伟大的音乐家,应邀去参加一个音乐会,但是他的手风琴不见,
  65. 你能帮他找找吗?",
  66.   "Reward" => {"Item" => [],           # 完成任务后奖励的物品
  67.                "Weapon" => [],         # 完成任务后奖励的武器
  68.                "Armor" => [],          # 完成任务后奖励的防具
  69.                "Gold" => 0,            # 完成任务后奖励的金钱
  70.                "Level_Plus" => [],     # 完成任务后奖励的等级
  71.                "Exp_Plus" => []        # 完成任务后奖励的经验
  72.                },
  73.   "Can Abandonment?" => true, # 可否放弃此任务
  74.   "Level" => 3  # 任务等级
  75.   }
  76. end
  77. module Vocab
  78. #============================================================================
  79. #---------------------------任务用语设置-------------------------------------
  80. #============================================================================
  81.   Task_Accept = "接受了任务[%s]"
  82.   Task_Complete = "任务[%s]被完成!"
  83.   Task_Fail = "任务[%s]已失败"
  84.   Task_Abandonment = "放弃任务[%s]"
  85.   Task_Can_Not_Abandonment = "无法放弃任务[%s]"
  86.   Task_Adandonment_Query = "你确定要放弃[%s]这个任务吗?"
  87.   Task_Accepted = "已接受任务[%s]"
  88.   Task_No_Accept = "你还没接受任务[%s]!"
  89.   Task_Difficulty = "任务难度:"
  90.   Task_Level_Word = ["简单", "容易", "中等", "困难"]
  91.   Task_Can_Abandonment_Word = ["可放弃", "不可放弃"]
  92.   Task_Change_Page = ["按下右键翻到下一页 >", "< 按下左键翻到上一页"]
  93. end
  94. #============================================================================
  95. # ** Game_Task
  96. #============================================================================
  97. class Game_Task
  98.   #----------------------------------------------------------------------
  99.   # * 初始化
  100.   #----------------------------------------------------------------------
  101.   def initialize(id)
  102.     @id = id
  103.     @task = DOS::Task[id]
  104.   end
  105.   #----------------------------------------------------------------------
  106.   # * 获取任务id
  107.   #----------------------------------------------------------------------
  108.   def id
  109.     return @id
  110.   end
  111.   #----------------------------------------------------------------------
  112.   # * 获取任务图标索引
  113.   #----------------------------------------------------------------------
  114.   def icon_index
  115.     return @task["Icon"]
  116.   end
  117.   #----------------------------------------------------------------------
  118.   # * 获取任务名
  119.   #----------------------------------------------------------------------
  120.   def name
  121.     return @task["Name"]
  122.   end
  123.   #----------------------------------------------------------------------
  124.   # * 获取任务说明
  125.   #----------------------------------------------------------------------
  126.   def caption
  127.     return @task["Caption"]
  128.   end
  129.   #----------------------------------------------------------------------
  130.   # * 获取任务奖赏资料(不包括物品/武器/防具数量)
  131.   #     kind:0为道具;1为武器;2为防具;3为金钱;4为lv;5为exp.
  132.   #----------------------------------------------------------------------
  133.   def reward(kind, index=0)
  134.     case kind
  135.     when 0
  136.       return $data_items[@task["Reward"]["Item"][index][0]]
  137.     when 1
  138.         return $data_weapons[@task["Reward"]["Weapon"][index][0]]
  139.     when 2
  140.         return $data_armors[@task["Reward"]["Armor"][index][0]]
  141.     when 3
  142.       return @task["Reward"]["Gold"]
  143.     when 4
  144.       if @task["Reward"]["Level_Plus"][index] != nil
  145.         return @task["Reward"]["Level_Plus"][index][1]
  146.       else return nil
  147.       end
  148.     when 5
  149.       if @task["Reward"]["Exp_Plus"][index] != nil
  150.         return @task["Reward"]["Exp_Plus"][index][1]
  151.       else return nil
  152.       end
  153.     end
  154.   end
  155.   #----------------------------------------------------------------------
  156.   # * 获取任务奖赏多少种道具
  157.   #     kind:0为道具;1为武器;2为防具.
  158.   #----------------------------------------------------------------------
  159.   def reward_size(kind)
  160.     case kind
  161.     when 0
  162.       return @task["Reward"]["Item"].size
  163.     when 1
  164.       return @task["Reward"]["Weapon"].size
  165.     when 2
  166.       return @task["Reward"]["Armor"].size
  167.     end
  168.   end
  169.   #----------------------------------------------------------------------
  170.   # * 获取任务奖赏等级/经验的受益人(le = level & exp)
  171.   #     kind:0为level;1为exp.
  172.   #----------------------------------------------------------------------
  173.   def reward_le_actor(kind, index)
  174.     case kind
  175.     when 0
  176.       if $game_party.members[@task["Reward"]["Level_Plus"][index][0]] != nil
  177.         return $game_party.members[@task["Reward"]["Level_Plus"][index][0]]
  178.       else return nil
  179.       end
  180.     when 1
  181.       if $game_party.members[@task["Reward"]["Exp_Plus"][index][0]] != nil
  182.         return $game_party.members[@task["Reward"]["Exp_Plus"][index][0]]
  183.       else return nil
  184.       end
  185.     end
  186.   end
  187.   #----------------------------------------------------------------------
  188.   # * 获取任务奖赏等级/经验的受益人总数(le = level & exp)
  189.   #     kind:0为level;1为exp.
  190.   #----------------------------------------------------------------------
  191.   def reward_le_actor_size(kind)
  192.     case kind
  193.     when 0
  194.       return @task["Reward"]["Level_Plus"].size
  195.     when 1
  196.       return @task["Reward"]["Exp_Plus"].size
  197.     end
  198.   end
  199.   #----------------------------------------------------------------------
  200.   # * 获取任务奖赏道具数量
  201.   #     kind:0为道具;1为武器;2为防具.
  202.   #----------------------------------------------------------------------
  203.   def reward_item_amount(kind,index)
  204.     case kind
  205.     when 0
  206.       return @task["Reward"]["Item"][index][1]
  207.     when 1
  208.       return @task["Reward"]["Weapon"][index][1]
  209.     when 2
  210.       return @task["Reward"]["Armor"][index][1]
  211.     end
  212.   end
  213.   #----------------------------------------------------------------------
  214.   # * 获取任务等级
  215.   #----------------------------------------------------------------------
  216.   def level
  217.     return @task["Level"]
  218.   end
  219.   #----------------------------------------------------------------------
  220.   # * 获取描述任务等级用语
  221.   #----------------------------------------------------------------------
  222.   def level_word
  223.     return Vocab::Task_Level_Word[@task["Level"]]
  224.   end
  225.   #----------------------------------------------------------------------
  226.   # * 获取可否放弃标识
  227.   #----------------------------------------------------------------------
  228.   def can_abandonment?
  229.     return @task["Can Abandonment?"]
  230.   end
  231.   #----------------------------------------------------------------------
  232.   # * 获取可否放弃文字
  233.   #----------------------------------------------------------------------
  234.   def can_abandonment_word
  235.     if @task["Can Abandonment?"] == true
  236.       return Vocab::Task_Can_Abandonment_Word[0]
  237.     else return Vocab::Task_Can_Abandonment_Word[1]
  238.     end
  239.   end
  240. end
  241. #==============================================================================
  242. # ** Game_Party
  243. #------------------------------------------------------------------------------
  244. #  這個類用來操控主角隊伍,包含了隊伍所攜資金和物品等資訊。
  245. #  這個類的實例被全域變數 $game_party 所引用。
  246. #==============================================================================
  247. class Game_Party < Game_Unit
  248.   attr_reader  :accepted_task
  249.   def initialize
  250.     super
  251.     @gold = 100
  252.     @steps = 0
  253.     @last_item_id = 0
  254.     @last_actor_index = 0
  255.     @last_target_index = 0
  256.     @actors = []      # 隊員類型 (主角編號)
  257.     @items = {}       # 所攜物品 HASH 表 (物品編號)
  258.     @weapons = {}     # 所攜武器 HASH 表 (武器編號)
  259.     @armors = {}      # 所攜護具 HASH 表 (護具編號)
  260.     @accepted_task = []
  261.     @task_status = []
  262.   end
  263.   def accept_task(id)
  264.     @accepted_task.push(Game_Task.new(id))
  265.     @task_status[id] = false
  266.   end
  267.   def delete_task(task)
  268.     @accepted_task.delete(task)
  269.     @task_status[id] = nil
  270.   end
  271.   def completed_task(id)
  272.     delete_task(Game_Task.new(id))
  273.     for item in [url=mailto:0...@accepted_task[id].reward_size(0]0...@accepted_task[id].reward_size(0[/url])
  274.       gain_item(@accepted_task[id].reward(0, item),@accepted_task[id].reward_item_amount(0,item))
  275.     end
  276.     for item in [url=mailto:0...@accepted_task[id].reward_size(1]0...@accepted_task[id].reward_size(1[/url])
  277.       gain_item(@accepted_task[id].reward(1, item),@accepted_task[id].reward_item_amount(1,item))
  278.     end
  279.     for item in [url=mailto:0...@accepted_task[id].reward_size(2]0...@accepted_task[id].reward_size(2[/url])
  280.       gain_item(@accepted_task[id].reward(2, item),@accepted_task[id].reward_item_amount(2,item))
  281.     end
  282.     for index in [url=mailto:0...@accepted_task[id].reward_le_actor_size(0]0...@accepted_task[id].reward_le_actor_size(0[/url])
  283.       if @accepted_task[id].reward_le_actor(0, index) == nil
  284.         next
  285.       end
  286.       @accepted_task[id].reward_le_actor(0, index).change_level(@accepted_task[id].reward(5, index), true)
  287.     end
  288.     for index in [url=mailto:0...@accepted_task[id].reward_le_actor_size(1]0...@accepted_task[id].reward_le_actor_size(1[/url])
  289.       if @accepted_task[id].reward_le_actor(1, index) == nil
  290.         next
  291.       end
  292.       @accepted_task[id].reward_le_actor(1, index).change_exp(@accepted_task[id].reward(4, index), true)
  293.     end
  294.     gain_gold(@accepted_task[id].reward(3))
  295.     @task_status[id] = true
  296.   end
  297.   def task_status(id)
  298.     return @task_status[id]
  299.   end
  300.   def accepted_task?(id)
  301.     if @task_status[id] == true or @task_status[id] == false
  302.       return true
  303.     else return false
  304.     end
  305.   end
  306.   def completed_task?(id)
  307.     if @task_stutas[id] == true
  308.       return true
  309.     else return false
  310.     end
  311.   end
  312. end
  313. #============================================================================
  314. # ** Window_TaskHelp
  315. #============================================================================
  316. class Window_TaskHelp < Window_Base
  317.   attr_accessor :paga
  318.   def initialize(id, paga=0)
  319.     super(160, 20, 384, 376)
  320.     @paga = paga
  321.     refresh(id)
  322.   end
  323.   def refresh(id)
  324.     dw = self.width - 32
  325.     dh = self.height - 32
  326.     task = Game_Task.new(id)
  327.     self.contents.clear
  328.     if @paga == 0 # 描绘第一页
  329.       draw_icon(task.icon_index, 0, 0)
  330.       self.contents.draw_text(28, 0, dw, 24, task.name)
  331.       self.contents.draw_text(0, 24, dw, 24, Vocab::Task_Difficulty)
  332.       w = self.contents.text_size(Vocab::Task_Difficulty).width
  333.       self.contents.draw_text(w, 24, dw, 24, task.level_word)
  334.       self.contents.draw_text(28, 0, dw-28, 24, task.can_abandonment_word, 2)
  335.       chenge_special_character(task.caption.clone, 0, 48)
  336.     elsif @paga == 1 # 描绘第二页
  337.       #-描绘表格-------------------------------------------------------------
  338.       # 边框
  339.       draw_straight_filament(0, 0, dw, 0, 1, DOS::Task_Filament_Color)
  340.       draw_straight_filament(0, 0, 0, dh, 1, DOS::Task_Filament_Color)
  341.       draw_straight_filament(0, 27, dw, 27, 1, DOS::Task_Filament_Color)
  342.       draw_straight_filament(0, dh-1, dw/2, dh-1, 1, DOS::Task_Filament_Color)
  343.       draw_straight_filament(dw/2+2, dh-5, dw-1, dh-5, 1, DOS::Task_Filament_Color)
  344.       draw_straight_filament(dw-1, 0, dw-1, dh-4, 1, DOS::Task_Filament_Color)
  345.       # 中线
  346.       draw_straight_filament(dw/2-1, 27, dw/2-1, dh, 1, DOS::Task_Filament_Color)
  347.       draw_straight_filament(dw/2+1, 27, dw/2+1, dh-4, 1, DOS::Task_Filament_Color)
  348.       # 队伍成员分割线
  349.       h = (dh-27-1)/4
  350.       draw_straight_filament(0, h*1+27, dw/2-1, h*1+27, 1, DOS::Task_Filament_Color)
  351.       draw_straight_filament(0, h*2+27, dw/2-1, h*2+27, 1, DOS::Task_Filament_Color)
  352.       draw_straight_filament(0, h*3+27, dw/2-1, h*3+27, 1, DOS::Task_Filament_Color)
  353.       draw_straight_filament(0, h*4+27, dw/2-1, h*4+27, 1, DOS::Task_Filament_Color)
  354.       # 头像分割线
  355.       draw_straight_filament(79, 27, 79, dh, 1, DOS::Task_Filament_Color)
  356.       # 描绘成员奖励分割线
  357.       draw_straight_filament(79, (h-h/2)*1+27, dw/2-1, (h-h/2)*1+27, 1, DOS::Task_Filament_Color)
  358.       draw_straight_filament(79, (h-h/2)+h+27, dw/2-1, (h-h/2)+h+27, 1, DOS::Task_Filament_Color)
  359.       draw_straight_filament(79, (h-h/2)+h*2+27, dw/2-1, (h-h/2)+h*2+27, 1, DOS::Task_Filament_Color)
  360.       draw_straight_filament(79, (h-h/2)+h*3+27, dw/2-1, (h-h/2)+h*3+27, 1, DOS::Task_Filament_Color)
  361.       # 描绘奖励分割线
  362.       a = (dw-28)/24
  363.       for i in 0...a
  364.         draw_straight_filament(dw/2+2, 24*i+27, dw-1, 24*i+27, 1, DOS::Task_Filament_Color)
  365.       end
  366.       #-结束描绘-------------------------------------------------------------
  367.       #-描绘内容-------------------------------------------------------------
  368.       # 描绘标题
  369.       self.contents.draw_text(1, 1, dw-1, 24, "奖赏表", 1)
  370.       # 描绘头像等
  371.       for i in 0...$game_party.members.size
  372.         draw_actor_face($game_party.members, 1, h*i+28, h-1)
  373.         self.contents.font.size = 20
  374.         self.contents.draw_text(1, 1+h*i+27, 96, 24, $game_party.members.name)
  375.         self.contents.font.size = 18
  376.         self.contents.draw_text(81,1+h*i+27, dw/2-81, 24,"奖励#{Vocab.level}:")
  377.         self.contents.draw_text(81,1+h*i+27+h/2, dw/2-81, 24,"奖励经验:")
  378.         if task.reward(4, i) != nil
  379.           self.contents.draw_text(81,1+h*i+27+h/4, dw/2-82, 24, task.reward(4, i), 2)
  380.           else self.contents.draw_text(81,1+h*i+27+h/4, dw/2-82, 24, "无", 2)
  381.         end
  382.         if task.reward(5, i) != nil
  383.           self.contents.draw_text(81,1+h*i+27+h/4+h/2, dw/2-82, 24, task.reward(5, i), 2)
  384.           else self.contents.draw_text(81,1+h*i+27+h/4+h/2, dw/2-82, 24, "无", 2)
  385.         end
  386.       end
  387.       self.contents.font.size = 20
  388.       x = dw/2+1
  389.       # 描绘金钱奖励
  390.       draw_icon(DOS::Task_Gold_Icon_Index, x, 26)
  391.       self.contents.draw_text(x+25, 26, dw/2-1, 24,"金币:#{task.reward(3, 0)}#{Vocab.gold}")
  392.       y = 26+24
  393.       # 描绘道具奖励
  394.       for i in 0...task.reward_size(0)
  395.         draw_icon(task.reward(0, i).icon_index, x, y+i*24)
  396.         self.contents.draw_text(x+25, y+i*24, dw/2-1, 24,"#{task.reward(0, i).name}*#{task.reward_item_amount(0, i)}")
  397.       end
  398.       y = 26 + 24 + task.reward_size(0)*24
  399.       # 描绘武器奖励
  400.       for i in 0...task.reward_size(1)
  401.         draw_icon(task.reward(1, i).icon_index, x, y+i*24)
  402.         self.contents.draw_text(x+25, y+i*24, dw/2-1, 24,"#{task.reward(1, i).name}*#{task.reward_item_amount(1, i)}")
  403.       end
  404.       y = 26 + 24 + task.reward_size(0)*24 + task.reward_size(1)*24
  405.       # 描绘防具奖励
  406.       for i in 0...task.reward_size(2)
  407.         draw_icon(task.reward(2, i).icon_index, x, y+i*24)
  408.         self.contents.draw_text(x+25, y+i*24, dw/2-1, 24,"#{task.reward(2, i).name}*#{task.reward_item_amount(2, i)}")
  409.       end
  410.       #-结束描绘-------------------------------------------------------------
  411.     end
  412.   end
  413. end
  414. #=============================================================================
  415. # ** Scene_Task
  416. #=============================================================================
  417. class Scene_Task < Scene_Base
  418.   #---------------------------------------------------------------------------
  419.   # * 初始化变量
  420.   #---------------------------------------------------------------------------
  421.   def initialize(return_scene, index=0)
  422.     @index = index
  423.     @return_scene = return_scene
  424.   end
  425.   #---------------------------------------------------------------------------
  426.   # * 开始处理
  427.   #---------------------------------------------------------------------------
  428.   def start
  429.     create_menu_background
  430.     @th = Window_TaskHelp.new($game_party.accepted_task[0].id)
  431.     @paga = @th.paga
  432.     tn = []
  433.     for i in 0...$game_party.accepted_task.size
  434.       tn = $game_party.accepted_task.name
  435.     end
  436.     @hc = Window_Command.new(160, tn)
  437.     @hc.y = 20
  438.     @hc.height = 376
  439.     @hc.index = @index
  440.     @query = Window_Base.new(40, 152, 464, 56)
  441.     a = sprintf(Vocab::Task_Adandonment_Query, $game_party.accepted_task[0].name)
  442.     @query.contents.font.color = DOS::Task_Query_Word_Color
  443.     @query.contents.draw_text(0, 0, 432, 24, a, 1)
  444.     @query.contents.font.color = Color.new(0, 0, 0)
  445.     @qc = Window_Command.new(160, ["          是", "          否"])
  446.     @qc.x = 192
  447.     @qc.y = 208
  448.     @query.visible = false
  449.     @qc.visible = false
  450.     @qc.active = false
  451.     @sprite = Sprite.new
  452.     @sprite.bitmap = Bitmap.new(384, 24)
  453.     @sprite.bitmap.draw_text(0, 0, 384, 24, Vocab::Task_Change_Page[@paga], 1)
  454.     @sprite.x = 0
  455.     @sprite.y = 416-24
  456.   end
  457.   #--------------------------------------------------------------------------
  458.   # * 结束处理
  459.   #--------------------------------------------------------------------------
  460.   def terminate
  461.     dispose_menu_background
  462.     @hc.dispose
  463.     @th.dispose
  464.     @query.dispose
  465.     @qc.dispose
  466.     @sprite.dispose
  467.   end
  468.   #--------------------------------------------------------------------------
  469.   # * 更新帧
  470.   #--------------------------------------------------------------------------
  471.   def update
  472.     @sprite.update
  473.     @sprite.x + 10 if @sprite.x != 160
  474.     @hc.update
  475.     @th.update
  476.     update_input
  477.     if @hc.index != @index
  478.       @th.refresh($game_party.accepted_task[@hc.index].id)
  479.       @index = @hc.index
  480.     end
  481.     @query.update
  482.     if @query.active == true
  483.       @qc.update
  484.     end
  485.     if @paga != @th.paga
  486.       @sprite.bitmap.clear
  487.       @sprite.bitmap.draw_text(0, 0, 384, 24, Vocab::Task_Change_Page[@th.paga], 1)
  488.       @sprite.x = 0
  489.       @paga = @th.paga
  490.     end
  491.   end
  492.   #--------------------------------------------------------------------------
  493.   # * 刷新按键
  494.   #--------------------------------------------------------------------------
  495.   def update_input
  496.     if Input.trigger?(Input::B)
  497.       if @hc.active == true
  498.         Sound.play_cancel
  499.         $scene = @return_scene
  500.       elsif @query.visible == true
  501.         Sound.play_cancel
  502.         @hc.active = true
  503.         @query.visible = false
  504.         @qc.visible = false
  505.         @qc.active = false
  506.       end
  507.     elsif Input.trigger?(DOS::Task_Abandonment_Task_Input)
  508.       if @hc.active == true
  509.         if $game_party.accepted_task[@hc.index].can_abandonment? == true
  510.           Sound.play_decision
  511.           a = sprintf(Vocab::Task_Adandonment_Query, $game_party.accepted_task[@hc.index].name)
  512.           @query.contents.clear
  513.           @query.contents.font.color = DOS::Task_Query_Word_Color
  514.           @query.contents.draw_text(0, 0, 432, 24, a, 1)
  515.           @query.contents.font.color = Color.new(0, 0, 0)
  516.           @query.visible = true
  517.           @qc.visible = true
  518.           @qc.active = true
  519.           @hc.active = false
  520.         else Sound.play_buzzer
  521.           @query.contents.clear
  522.           a = sprintf(Vocab::Task_Can_Not_Abandonment, $game_party.accepted_task[@hc.index].name)
  523.           @query.contents.font.color = DOS::Task_Query_Word_Color
  524.           @query.contents.draw_text(0, 0, 432, 24, a, 1)
  525.           @query.contents.font.color = Color.new(0, 0, 0)
  526.           @query.visible = true
  527.           @hc.active = false
  528.         end
  529.       end
  530.     elsif Input.trigger?(Input::C)
  531.       if @qc.visible == true
  532.         if @qc.index == 0
  533.           Sound.play_decision
  534.           @query.contents.clear
  535.           a = sprintf(Vocab::Task_Abandonment, $game_party.accepted_task[@hc.index].name)
  536.           @query.contents.font.color = DOS::Task_Query_Word_Color
  537.           @query.contents.draw_text(0, 0, 432, 24, a, 1)
  538.           @query.contents.font.color = Color.new(0, 0, 0)
  539.           @qc.visible = false
  540.           @query.visible = true
  541.           $game_party.delete_task($game_party.accepted_task[@hc.index])
  542.           Graphics.wait(40)
  543.           $scene = Scene_Task.new(@return_scene)
  544.         else @hc.active = true
  545.           Sound.play_cancel
  546.           @query.visible = false
  547.           @qc.visible = false
  548.           @qc.active = false
  549.         end
  550.       end
  551.     elsif Input.trigger?(DOS::Task_Left_Change_Page)
  552.       if @th.paga == 1
  553.         @th.paga = 0
  554.         @th.refresh($game_party.accepted_task[@hc.index].id)
  555.       end
  556.     elsif Input.trigger?(DOS::Task_Right_Change_Page)
  557.       if @th.paga == 0
  558.         @th.paga = 1
  559.         @th.refresh($game_party.accepted_task[@hc.index].id)
  560.       end
  561.     end
  562.   end
  563. end
  564. #==============================================================================
  565. # ** Game_Map
  566. #------------------------------------------------------------------------------
  567. #  這個類用來操控地圖,包含了地圖滾動設置和通行度判定等資訊。
  568. #  這個類的實例被全域變數 $game_map 所引用。
  569. #==============================================================================
  570. class Game_Map
  571.   #--------------------------------------------------------------------------
  572.   # * 宣告執行個體變數
  573.   #--------------------------------------------------------------------------
  574.   attr_accessor :task_id
  575.   attr_reader :ts_visible
  576.   attr_reader :task_word
  577.   alias old_ini initialize
  578.   def initialize
  579.     old_ini
  580.     @task_word = ""
  581.     @ts_visible = false
  582.     @task_id = 0
  583.   end
  584.   def visible_task_status
  585.     if @ts_visible == false
  586.       @ts_visible = true
  587.     else @ts_visible = false
  588.     end
  589.   end
  590.   def set_task_word(kind)
  591.     case kind
  592.     when 0               # 接受了任务
  593.       @task_word = Vocab::Task_Accept
  594.     when 1               # 完成了任务
  595.       @task_word = Vocab::Task_Complete
  596.     when 2               # 任务失败了
  597.       @task_word = Vocab::Task_Fail
  598.     when 3               # 放弃了任务
  599.       @task_word = Vocab::Task_Abandonment
  600.     when 4               # 无法放弃任务
  601.       @task_word = Vocab::Task_Can_Not_Abandonment
  602.     when 5               # 已接受了任务
  603.       @task_word = Vocab::Task_Accepted
  604.     when 6               # 未接受任务
  605.       @task_word = Vocab::Task_No_Accept
  606.     when nil
  607.       @task_word = nil
  608.     end
  609.   end
  610. end
  611. #==============================================================================
  612. # ** Scene_Map
  613. #------------------------------------------------------------------------------
  614. #  這個類用來執行顯示地圖場景畫面的程式。
  615. #==============================================================================
  616. class Scene_Map < Scene_Base
  617.   alias old_sta start
  618.   alias old_upd update
  619.   alias old_ter terminate
  620.   def start
  621.     old_sta
  622.     @ts = Window_Base.new(40, 152, 464, 56)
  623.     @ts.visible = false
  624.   end
  625.   def terminate
  626.     old_ter
  627.     @ts.dispose
  628.   end
  629.   def update
  630.     old_upd
  631.     if $game_map.ts_visible == true
  632.       @ts.contents.clear
  633.       tw = sprintf($game_map.task_word, Game_Task.new($game_map.task_id).name)
  634.       @ts.contents.draw_text(28, 0, 408, 24, tw)
  635.       @ts.draw_icon(Game_Task.new($game_map.task_id).icon_index, 0, 0)
  636.       @ts.visible = true
  637.       Graphics.wait(40)
  638.       $game_map.visible_task_status
  639.       @ts.visible = false
  640.     end
  641.   end
  642. end
  643. #==============================================================================
  644. # ** Game_Interpreter
  645. #------------------------------------------------------------------------------
  646. #  這個類是用來執行事件指令的直譯器。
  647. #  這個類作為 Game_Map、Game_Troop 和 Game_Event 的內部類使用。
  648. #==============================================================================
  649. class Game_Interpreter
  650.   def accept_task(id, enforcement=false)
  651.     if $game_party.accepted_task?(id) == false or enforcement == true
  652.       $game_party.accept_task(id)
  653.       visible_ts(id, 0)
  654.     else
  655.       visible_ts(id, 5)
  656.     end
  657.   end
  658.   def complete_task(id)
  659.     if $game_party.accepted_task?(id) == false
  660.       $game_party.completed_task(id)
  661.       visible_ts(id, 1)
  662.     elsif $game_party.accepted_task?(id) == nil
  663.       visible_ts(id, 6) if DOS::Task_No_Accept == 0
  664.     end
  665.   end
  666.   def fail_task(id)
  667.     if $game_party.accepted_task?(id) == false
  668.       $game_party.delete_task(Game_Task.new(id))
  669.       visible_ts(id, 2)
  670.     elsif $game_party.accepted_task?(id) == nil
  671.       visible_ts(id, 6) if DOS::Task_No_Accept == 0
  672.     end
  673.   end
  674.   def abandonment_task(id)
  675.     if $game_party.accepted_task?(id) == false
  676.       $game_party.delete_task(Game_Task.new(id))
  677.       visible_ts(id, 3)
  678.     elsif $game_party.accepted_task?(id) == nil
  679.       visible_ts(id, 6) if DOS::Task_No_Accept == 0
  680.     end
  681.   end
  682.   def visible_ts(id, kind)
  683.     $game_map.task_id = id
  684.     $game_map.set_task_word(kind)
  685.     $game_map.visible_task_status
  686.   end
  687. end
  688. class Window_Base < Window
  689.   #--------------------------------------------------------------------------
  690.   # * 描绘直线 by 945127391
  691.   # begin_x : 直线开始的x坐标
  692.   # begin_y : 直线开始的y坐标
  693.   # end_x   : 直线结束的x坐标
  694.   # end_y   : 直线结束的y坐标
  695.   # color   : 直线的颜色
  696.   # width   : 直线的宽度(厚度)
  697.   #--------------------------------------------------------------------------
  698.   def draw_straight_filament(begin_x, begin_y, end_x, end_y, width, color)
  699.     if begin_x == end_x
  700.       bitmap = Bitmap.new(width, end_y-begin_y)
  701.     elsif begin_y == end_y
  702.       bitmap = Bitmap.new(end_x-begin_x, width)
  703.     else return
  704.     end
  705.     bitmap.fill_rect(0, 0, bitmap.width, bitmap.height, color)
  706.     rect = Rect.new(0, 0, bitmap.width, bitmap.height)
  707.     self.contents.blt(begin_x, begin_y, bitmap, rect)
  708.     bitmap.dispose
  709.   end
  710.   #--------------------------------------------------------------------------
  711.   # * 描绘自动换行文字 by 叶子
  712.   #                    修改 945127391
  713.   #--------------------------------------------------------------------------
  714.    def chenge_special_character(text, x=0, y=0)
  715.     # 记录换行时y坐标最小加值
  716.     min_y = 0
  717.     while ((c = text.slice!(/./m)) != nil)
  718.       # 另起一行文字的情况下
  719.       if c == "\n"
  720.         y += [WLH, min_y].max
  721.         min_y = 0
  722.         x = 0
  723.         # 下面的文字
  724.         next
  725.       end
  726.       # 自动换行处理
  727.       if x + self.contents.text_size(c).width > self.contents.width
  728.         y += [WLH, min_y].max
  729.         min_y = 0
  730.         x = 0
  731.       end
  732.       # 描绘文字
  733.       self.contents.draw_text(4 + x, y, 40, WLH, c)
  734.       # x 为要描绘文字的加法运算
  735.       x += self.contents.text_size(c).width
  736.     end
  737.   end
  738. end
复制代码

’’

点评

恩……原帖里已经恢复了你的问题。  发表于 2012-5-19 22:05
图文的时候注意脚本用代码模式放出来。。。就是那个双向箭头的符号。。。  发表于 2012-5-9 18:12

Lv2.观梦者

永遠神剣

梦石
0
星屑
339
在线时间
412 小时
注册时间
2009-8-16
帖子
1797

贵宾

2
发表于 2012-5-16 18:41:53 | 只看该作者
ESC那个MEMU呼出添加选项吗?
如果是的话 首先你在Scene_Menu类里 找到 def create_command_window
下面有s1 s2 s3 等等东西
在s6 下加上一行
  1. s7 = "当前任务"
复制代码
然后这句
  1.     @command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6,s7])
复制代码
后面那里多加个个s7
再在 def update_command_selection 这个模块定义里面的
  1. when 5      # 結束遊戲
  2.         $scene = Scene_End.new
复制代码
这句下面加上2行
  1.       when 6      # 任务
  2.         $scene = Scene_Task.new(Scene_Map.new, 0)
复制代码
就能从默认菜单增加选项 调出任务界面了。

整体脚本
  1. #==============================================================================
  2. # ** Scene_Menu
  3. #------------------------------------------------------------------------------
  4. #  這個類用來執行顯示ESC選單畫面的程式。
  5. #==============================================================================

  6. class Scene_Menu < Scene_Base
  7.   #--------------------------------------------------------------------------
  8.   # * 物件初始化
  9.   #     menu_index : 命令游標的起始位置
  10.   #--------------------------------------------------------------------------
  11.   def initialize(menu_index = 0)
  12.     @menu_index = menu_index
  13.   end
  14.   #--------------------------------------------------------------------------
  15.   # * 程式開始
  16.   #--------------------------------------------------------------------------
  17.   def start
  18.     super
  19.     create_menu_background
  20.     create_command_window
  21.     @gold_window = Window_Gold.new(0, 360)
  22.     @status_window = Window_MenuStatus.new(160, 0)
  23.   end
  24.   #--------------------------------------------------------------------------
  25.   # * 程式中止
  26.   #--------------------------------------------------------------------------
  27.   def terminate
  28.     super
  29.     dispose_menu_background
  30.     @command_window.dispose
  31.     @gold_window.dispose
  32.     @status_window.dispose
  33.   end
  34.   #--------------------------------------------------------------------------
  35.   # * 更新幀
  36.   #--------------------------------------------------------------------------
  37.   def update
  38.     super
  39.     update_menu_background
  40.     @command_window.update
  41.     @gold_window.update
  42.     @status_window.update
  43.     if @command_window.active
  44.       update_command_selection
  45.     elsif @status_window.active
  46.       update_actor_selection
  47.     end
  48.   end
  49.   #--------------------------------------------------------------------------
  50.   # * 創建命令視窗
  51.   #--------------------------------------------------------------------------
  52.   def create_command_window
  53.     s1 = Vocab::item
  54.     s2 = Vocab::skill
  55.     s3 = Vocab::equip
  56.     s4 = Vocab::status
  57.     s5 = Vocab::save
  58.     s6 = Vocab::game_end
  59.     s7 = "当前任务"
  60.     @command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6,s7])
  61.     @command_window.index = @menu_index
  62.     if $game_party.members.size == 0          # 如果無人在隊
  63.       @command_window.draw_item(0, false)     # 禁用[用品]
  64.       @command_window.draw_item(1, false)     # 禁用[技能]
  65.       @command_window.draw_item(2, false)     # 禁用[整備]
  66.       @command_window.draw_item(3, false)     # 禁用[狀態]
  67.     end
  68.     if $game_system.save_disabled             # 如果禁止存檔
  69.       @command_window.draw_item(4, false)     # 禁用[存檔]
  70.     end
  71.   end
  72.   #--------------------------------------------------------------------------
  73.   # * 更新指令選擇輸入資訊
  74.   #--------------------------------------------------------------------------
  75.   def update_command_selection
  76.     if Input.trigger?(Input::B)
  77.       Sound.play_cancel
  78.       $scene = Scene_Map.new
  79.     elsif Input.trigger?(Input::C)
  80.       if $game_party.members.size == 0 and @command_window.index < 4
  81.         Sound.play_buzzer
  82.         return
  83.       elsif $game_system.save_disabled and @command_window.index == 4
  84.         Sound.play_buzzer
  85.         return
  86.       end
  87.       Sound.play_decision
  88.       case @command_window.index
  89.       when 0      # 用品
  90.         $scene = Scene_Item.new
  91.       when 1,2,3  # 技能,整備,狀態
  92.         start_actor_selection
  93.       when 4      # 存檔
  94.         $scene = Scene_File.new(true, false, false)
  95.       when 5      # 結束遊戲
  96.         $scene = Scene_End.new
  97.       when 6      # 任务
  98.         $scene = Scene_Task.new(Scene_Map.new, 0)
  99.       end
  100.     end
  101.   end
  102.   #--------------------------------------------------------------------------
  103.   # * 開始接收主角選擇指令輸入資訊
  104.   #--------------------------------------------------------------------------
  105.   def start_actor_selection
  106.     @command_window.active = false
  107.     @status_window.active = true
  108.     if $game_party.last_actor_index < @status_window.item_max
  109.       @status_window.index = $game_party.last_actor_index
  110.     else
  111.       @status_window.index = 0
  112.     end
  113.   end
  114.   #--------------------------------------------------------------------------
  115.   # * 停止接收主角選擇指令輸入資訊
  116.   #--------------------------------------------------------------------------
  117.   def end_actor_selection
  118.     @command_window.active = true
  119.     @status_window.active = false
  120.     @status_window.index = -1
  121.   end
  122.   #--------------------------------------------------------------------------
  123.   # * 更新主角選擇指令輸入資訊
  124.   #--------------------------------------------------------------------------
  125.   def update_actor_selection
  126.     if Input.trigger?(Input::B)
  127.       Sound.play_cancel
  128.       end_actor_selection
  129.     elsif Input.trigger?(Input::C)
  130.       $game_party.last_actor_index = @status_window.index
  131.       Sound.play_decision
  132.       case @command_window.index
  133.       when 1  # 技能
  134.         $scene = Scene_Skill.new(@status_window.index)
  135.       when 2  # 整備
  136.         $scene = Scene_Equip.new(@status_window.index)
  137.       when 3  # 狀態
  138.         $scene = Scene_Status.new(@status_window.index)
  139.       end
  140.     end
  141.   end
  142. end
复制代码
新的UI 旧的开始
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-26 12:11

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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