| 
 
| 赞 | 0 |  
| VIP | 6 |  
| 好人卡 | 5 |  
| 积分 | 1 |  
| 经验 | 20519 |  
| 最后登录 | 2018-6-4 |  
| 在线时间 | 197 小时 |  
 Lv1.梦旅人 
	梦石0 星屑59 在线时间197 小时注册时间2010-6-18帖子342 | 
| 本帖最后由 IamI 于 2010-7-28 12:01 编辑 
 我开始后悔用xiaoming这个朴素的名字了,让你叫的我一个肉麻……
 
 都怪我没有测试,而且改动的范围也有点大。
 
 再扔脚本,使用方法同前,就是偷懒了一点,直接覆盖之。
 复制代码
#---------------------------------------------------------------------------
# 仿网游多任务系统v0.1 by秀秀
#---------------------------------------------------------------------------
#-----------------------------------------------------------------------------
# 设置任务部分
#------------------------------------------------------------------------------
module MissionList
  Missions = [
    ["对话",1,
    [0,"对话01"],"去找阿尔西斯对话",[100,
    {0=>[[1,5]],}],"可能就在附近,仔细找找吧"+"这信息是刷屏幕,主要测试自动换行功能"*10],
    ["寻找密斯里尔剑",2,
    [1,{1=>[[4,1]]}],
    "也许在地图的某个角落",[0,{1=>[[1,1]],2=>[[1,1]]}],"也许在地图的某个角落"],   
    ["幽灵",3,[2,{1=>5}],
    "干掉5个幽灵"+"测试自动换行功能"*10,[1000,{}],""],
    
    ["幽灵+蜥蜴",4,[2,{1=>5,2=>5}],
    "干掉5个幽灵和5个蜥蜴",[2000,
    {0=>[[1,3],[2,1],[3,1]],1=>[[2,1],[3,1],[7,1]],2=>[[1,1],[2,1]]}],"丰厚的奖品哦"],
    ["重复幽灵任务1",1,[2,{1=>5}],
    "干掉5个幽灵",[0,{1=>[[3,5]]}],""],
    
    ["重复幽灵任务2",2,[2,{1=>5}],
    "干掉5个幽灵",[0,{1=>[[3,5]]}],""],
    ["重复幽灵任务3",3,[2,{1=>5}],
    "干掉5个幽灵",[0,{1=>[[3,5]]}],""],
    ["重复幽灵任务4",4,[2,{1=>5}],
    "干掉5个幽灵",[0,{1=>[[3,5]]}],""],
    
    ["重复幽灵任务5",5,[2,{1=>5}],
    "干掉5个幽灵",[0,{1=>[[3,5]]}],""],    
    
    ["重复幽灵任务6",6,[2,{1=>5}],
    "干掉5个幽灵",[0,{1=>[[3,5]]}],""],
    
    ["重复幽灵任务7",7,[2,{1=>5}],
    "干掉5个幽灵",[0,{1=>[[3,5]]}],""],
    
    ["重复幽灵任务8",8,[2,{1=>5}],
    "干掉5个幽灵",[0,{1=>[[3,5]]}],""],
    
    ["重复幽灵任务9",9,[2,{1=>5}],
    "干掉5个幽灵",[0,{1=>[[3,5]]}],""],
    
    ["重复幽灵任务10",10,[2,{1=>5}],
    "干掉5个幽灵",[0,{1=>[[3,5]]}],""],    
    
    ["寻找圣剑材料",10,
    [1,{0=>[[32,5],[33,8],[34,11]]}],
    "寻找圣剑所需的三个材料,圣剑材料1,圣剑材料2,圣剑材料3",
    [0,{1=>[[33,1]]}],"找到这些可以做圣剑"],   
    ]  
  module_function  
  def self.Start(name)
    Missions.each do |mission|
      Mission.startMission(*mission) if mission[0] == name
    end
  end  
  def canMissionList
    if Missions.empty? or Missions.nil?
      raise "任务没有设置好,请检查"
    end  
    temp = []
    Missions.each do |mission| 
      # if $game_system.missions[mission[0]].nil?
        #添加到任务列表 并设置不需要在列表里的任务
        temp << mission[0] if mission[0] != "寻找圣剑材料" 
      # end
    end  
    return temp
  end  
end  
至此结束,关于查看任务的其它bug都是原脚本的问题了,复制代码
#------------------------------------------------------------------------------
# 内部类定义部分
#------------------------------------------------------------------------------
class Hash < Object
  def soft
    @temp = []
    self.each_pair{|key, value| @temp << [key,value] } 
    return @temp
  end  
end  
class Integer
  def rStar
    return "★"*self
  end
end  
class Bitmap
  def auto_line_draw_text(x,y,text,limit,height,align)
    lines = text.getLines(limit)
    @limit = limit
    @n = 0
    for i in 0...lines
      @t1 = []
      if lines == 1
        @t1 << text
      end  
      if lines > 1
        @t= text.split(//)
        while @t1.join.size < @limit
          break if @t[@n].nil?
          @t1.push(@t[@n])
          @n += 1
        end
      end  
      draw_text(x,y+i*height,500,height,@t1.join,align)
    end
  end  
end  
class String
  def getLines(limit)
    lines = (self.length/limit).to_i
    lines += 1 if self.length%limit != 0 
    return lines
  end  
end  
#------------------------------------------------------------------------------
# 系统重定义部分
#------------------------------------------------------------------------------
class Game_Battler
  def dead?
    if (@hp == 0 and not @immortal)
     @temp_a = 0 if @temp_a == nil
     if self.is_a?(Game_Enemy) and @temp_a == 0
       id = self.instance_variable_get :@enemy_id
       now_mission = $game_system.missionEnemyIds  #[name][id]
       goal_mission = $game_system.missions        # [name].kind[1][id]
       # 检索是否存在于列表中
       $game_system.missionEnemyIds.keys.each do |name|
         # return true if $game_system.missionEnemyIds[name] == nil
         if now_mission[name][id] != nil and goal_mission[name] != nil and
            now_mission[name][id] < goal_mission[name].kind[1][id]
            # $game_system.missions[name].stutas == 0
            $game_system.missionEnemyIds[name][id] += 1
            break
         end  
       end
       @temp_a = 1
     end
     return true
    end 
  end
end
class Game_System
  attr_accessor  :missions
  #attr_accessor  :finishMissionTimes
  attr_accessor  :finishMissionList
  attr_accessor  :missionSwitch  
  attr_accessor  :missionEnemyIds 
  attr_accessor  :missionNameSort
  attr_accessor  :finishNameSort
  alias ori_initialize initialize
  def initialize
    ori_initialize
    @missions = {}
    #@finishMissionTimes = {}
    @finishMissionList = {}
    @missionSwitch = {}
    @missionEnemyIds = {}
    @missionNameSort = []
    @finishNameSort = []
    @missionHouseList = []
  end  
end  
class GetMission
  attr_reader    :level
  attr_reader    :kind
  attr_reader    :description
  attr_reader    :money
  attr_reader    :items
  attr_reader    :reswards_des
  # attr_accessor  :stutas
  def initialize(level,kind,description,rewards,rewards_des)
    @level = level
    @kind = kind
    @description = description
    @money = rewards[0]
    @items = rewards[1]
    @reswards_des = rewards_des
  end
end  
class FinishMission < GetMission
  attr_accessor   :times
  def initialize(times,*args)
    new_args = [args[0],args[1],args[2],[args[3],args[4]],args[5]]
    super(*new_args) 
    @times = times
  end  
end  
#----------------------------------------------------------------------------
# 任务核心部分
#----------------------------------------------------------------------------
module Mission
  module_function
  def startMission(name,level,kind,description,rewards,rewards_des)
    unless $game_system.missions.has_key?(name)
      # 检查参数合法性
      self.getError(name,level,kind,description,rewards,rewards_des)
      $game_system.missions[name] = GetMission.new(
         level,kind,description,rewards,rewards_des)
      $game_system.missionNameSort << name unless $game_system.missionNameSort.include?(name)  
      case kind[0]
      when 0 
      # 设置开关初始状态
      $game_system.missionSwitch[kind[1]] = false
      when 1
      # 开启了一个获得物品的任务
      when 2  
      # 开启了一个杀敌数的任务并设置列表
      # {name1=>{id1=number,id2=number},name2={id1=number,id2=number}}
      $game_system.missionEnemyIds[name] = {}
      enemies = kind[1].sort
      enemies.each{|id| $game_system.missionEnemyIds[name][id[0]] = 0}
      end
    end 
    return
  end
  
  # 开启一个组合任务
  #(- -,好像没必要了 可以直接接受2个或者多个无报酬任务
  # 全部完成后再给报酬)
  def startComboMission;end  
  def getError(name,level,kind,description,rewards,rewards_des)
    raise sprintf("任务:%s的参数 level 不是一个 Integer",name) unless level.kind_of?(Integer)
    raise sprintf("任务:%s的参数 kind[0] 不是一个 Integer",name) unless kind[0].kind_of?(Integer)
    case kind[0]
      when 0
      raise sprintf("任务:%s的参数 kind[1] 不是一个 String",name) unless kind[1].kind_of?(String)
      when 1..2
      unless (kind[1].kind_of?(Hash))
        raise sprintf("任务:%s的参数 kind[1] 不是一个 Hash",name)
      end   
    end
    raise sprintf("任务:%s的参数 description 不是一个 String",name) unless description.kind_of?(String)
    raise sprintf("任务:%s的参数 rewards[0] 不是一个 Integer",name) unless rewards[0].kind_of?(Integer)
    raise sprintf("任务:%s的参数 rewards[1] 不是一个 Hash",name) unless rewards[1].kind_of?(Hash)
    raise sprintf("任务:%s的参数 rewards_des 不是一个 String",name) unless rewards_des.kind_of?(String)
  end  
  
  # 接受一个或多个任务添加到任务所
  def addMissionHouse(*missions)
    missions.each{|a|$game_system.missionHouseList << a}
  end
  
  # 任务所删除一个或多个任务
  def deleteMissionHouse(*missions)
    missions.each{|a|$game_system.missionHouseList.delete(a)}
  end
  
  # 放弃任务 可多个  
  def stopMission(*name)
    name.each do |aname|
      $game_system.missions.delete(aname) if $game_system.missions.include?(aname)
    end
  end 
  
  # 检索任务
  def checkMission(name)
    # 检索是否已接了任务
    if $game_system.missions[name] != nil
      kind = $game_system.missions[name].kind
    else
      return self.missionReslut(2,name,self.message(4)){|msg|self.putsMessage(msg);return}
    end  
    
    # 类型
    case kind[0]
    # 条件触发式
    when 0
      switch_name = $game_system.missions[name].kind[1]
      if $game_system.missionSwitch[switch_name] == true
        $game_system.missionSwitch.delete(name)
        # 返回成功结果
        return self.missionReslut(0,name,self.message(0)){|msg|self.putsMessage(msg);return}
      else
        # 返回未完成结果
        self.missionReslut(1,name,self.message(1)){|msg|self.putsMessage(msg);return}
      end  
    # 持有物品
    when 1
      # 转化为 item格式的数组
      # 如 [[1,10],[5,15]] 道具1数量10 道具5数量15
        items = kind[1].select{|akind,array| akind == 0}[0][1] if kind[1][0] != nil
        weapons = kind[1].select{|bkind,array| bkind == 1}[0][1] if kind[1][1] != nil
        armors = kind[1].select{|ckind,array| ckind == 2}[0][1] if kind[1][2] != nil
      unless items.nil?
        unless self.check(name,0,items) 
          # 道具数量不合格
          return self.missionReslut(1,name,self.message(2)){|msg|self.putsMessage(msg);return}
        end  
      end
      unless weapons.nil?
        unless self.check(name,1,weapons) 
          # 武器数量不合格
          return self.missionReslut(1,name,self.message(2)){|msg|self.putsMessage(msg);return}
        end
      end
      unless armors.nil?
        unless self.check(name,2,armors) 
          # 防具数量不合格
          return self.missionReslut(1,name,self.message(2)){|msg|self.putsMessage(msg);return}
        end
      end
      # 返回成功结果
      return self.missionReslut(0,name,self.message(0)){|msg|self.putsMessage(msg);return}
    # 杀敌数一定  
    when 2  
      enemies = kind[1].soft
      enemies.each do |id,number|  
        if $game_system.missionEnemyIds[name][id] < number
          return self.missionReslut(1,name,self.message(3)){|msg|self.putsMessage(msg);return}
        end  
      end
      # 清空敌人id列表
      $game_system.missionEnemyIds.delete(name)
      # 返回成功结果
      return self.missionReslut(0,name,self.message(0)){|msg|self.putsMessage(msg);return}
    end  
      
  end  
  
  def message(kind)
    if kind == 0
      return "恭喜你任务完成,请查收奖品"
    elsif kind == 1
      return "似乎还未达到要求"
    elsif kind == 2
      return "请检查是否获得了任务所需物品和数量"
    elsif kind == 3
      return "任务所需杀敌数还不够"
    elsif kind == 4
      return "未开启的任务类型"
    else
      return
    end  
  end  
  
  def putsMessage(msg)
    if $scene.is_a?(SceneMission)
      $scene.message = msg
    end
    return
  end  
  
  def check(name,kind,*args)
    if kind == 0
      # 任务所需物品array
      items = args
      # 获取现在物品
      now_items = $game_party.instance_variable_get :@items
      # 检查是否包含物品
      ids01 = []
      items[0].each{|item| ids01 << item[0]}
      now_ids = now_items.keys
      unless now_ids|ids01 == now_ids
        return false
      end
      # 检查数量是否合格
      items[0].each do |item|
       return false if now_items[item[0]] < item[1]
      end  
    elsif kind == 1  
      # 任务所需武器array
      weapons = args
      # 获取现在物品
      now_weapons = $game_party.instance_variable_get :@weapons
      # 检查是否包含物品
      ids02 = []
      weapons[0].each{|weapon| ids02 << weapon[0]}
      now_ids = now_weapons.keys
      unless now_ids|ids02 == now_ids
        return false
      end
      # 检查数量是否合格
      weapons[0].each do |weapon|
       return false if now_weapons[weapon[0]] < weapon[1]
      end  
    elsif kind == 2
      # 任务所需物品array
      armors = args
      # 获取现在物品
      now_armors = $game_party.instance_variable_get :@armors
      # 检查是否包含物品
      ids03 = []
      armors[0].each{|armor| ids03 << armor[0][0]}
      now_ids = now_armors.keys
      unless now_ids|ids03 == now_ids
        return false
      end
      # 检查数量是否合格
      armors[0].each do |armor|
       return false if now_armors[armor[0]] < armor[1]
      end  
    else
      
    end  
    # 检查通过
    return true
  end
  #返回一种任务结果
  def missionReslut(result,name,message)
    case result
    when 0
      # 将任务转移到完成列表
      self.missionMove(name)
      # 获得报酬
      self.getRewards(name)
      # 清空任务
      $game_system.missionNameSort.delete(name)
      $game_system.missions.delete(name)
      # 抛出任务成功信息
      yield message
    when 1
      # 抛出未完成信息
      yield message
      #任务还未完成
      return false
    when 2  
      # 抛出未完成信息
      yield message
      #无此任务
      return false
    end
    return
  end  
  
  # 转移到任务完成列表 
  def missionMove(name)
    @mission = $game_system.missions[name]
    # 保存全部实例变量
    @include = ["@level","@kind","@description","@money","@items","@reswards_des"]
    @include_value = []
    temp = []
    @include.each do |a| 
      if a == "@monney"
        temp << a
        next
      end 
      if a == "@tiems"
        temp << a
        a = temp
      end  
      @include_value.push @mission.instance_variable_get eval(":"+a)
    end  
    if $game_system.finishMissionList.include? name
      # 任务名称=>完成次数
      # 如果包含 完成次数+1
      $game_system.finishMissionList[name].times += 1
    else
      # 如果不包含 建立一个完成任务的列表
      $game_system.finishNameSort.push(name) unless $game_system.finishNameSort.include?(name)
      $game_system.finishMissionList[name] = FinishMission.new(1,*@include_value)
    end
    return
  end
  
  # 获取报酬
  def getRewards(name)
     return if $game_system.missions[name] == nil
     # [金钱,{种类1=>[[ID1,数量],[ID2,数量]],种类2=>[[ID1,数量],[ID2,数量]]}] 
     money = $game_system.missions[name].money
     items = $game_system.missions[name].items
     # 获取赏金
     self.get_money(money) if money != 0
     # 获得物品
     if items[0] != nil
       items[0].each{|id,number|
       $game_party.send :gain_item,id,number
       }
     end  
     # 获得武器
     if items[1] != nil
       items[1].each{|id,number|
       $game_party.send :gain_weapon,id,number
       }
     end  
     # 获得防具
     if items[2] != nil
       items[2].each{|id,number|
       $game_party.send :gain_armor,id,number
       }
     end  
     return
  end  
  
  def get_money(n)
    $game_party.send :gain_gold,n
  end  
  
  # *mission 可接收多个任务名称作为参数
  def mission_finished?(*missions)
    # return $game_system.finishMissionList.keys | missions
    missions.each do |mission|
      return false unless $game_system.finishMissionList.has_key?(mission) 
    end  
    return true
  end
  
  # 检查mission是否正在执行
  def mission_run?(*missions)
    #p missions
    #p $game_system.missions
    missions.each do |mission|
      return false unless $game_system.missions.has_key?(mission) 
    end  
    return true
    # p $game_system.missions.keys | missions
    # return $game_system.missions.keys | missions
  end  
  
  # 获取当前任务数量
  def mission_counts 
    return $game_system.missions.length
  end  
  
end  
#-----------------------------------------------------------------------------
# 菜单部分
#-----------------------------------------------------------------------------
# 任务所主菜单
class WindowMissionMain < Window_Selectable
  def initialize
    super(240,100,160,160)
    self.contents = Bitmap.new(width - 32, height - 32)
    @item_max = 4
    @column_max = 1
    self.opacity = 255
    refresh
    self.index = 0
  end
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    if $xiaoming == 1#←xiaoming比上一个偷懒了
      a ="--------"
      b ="--------"
    else
      a ="接受任务"
      b ="提交任务"
    end
    
    self.contents.draw_text(0,0,200,32,a,0)
    self.contents.draw_text(0,32,200,32,b,0)
    self.contents.draw_text(0,32*2,200,32,"查看任务",0)
    self.contents.draw_text(0,32*3,200,32,"完成列表",0)
  end
end
# 可接受任务的列表
class WindowCanAcceptList < Window_Selectable
  def initialize
    super(70,60,500,360)
    @width = width
    @column_max = 1
    self.opacity = 255
    self.visible = false
    self.index = 0
  end
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh(*list)
    self.contents.clear if self.contents != nil
    self.contents = Bitmap.new(@width - 32, list.size * 32+32)
    @item_max = list.size
    for i in list
      MissionList::Missions.each do |mission| 
        if  mission[0] == i
          @level = mission[1]
          @name = i
          break
        end 
      end
      pos = list.index(i)
      if $game_system.missions[@name] != nil
        self.contents.font.color = disabled_color
      else
        self.contents.font.color = normal_color
      end
      self.contents.draw_text(0,pos*32,200,32,i,0)
      self.contents.draw_text(220,pos*32,200,32,@level.rStar,0)
    end
  end
end
# 任务中的列表
class WindowAccetpedList < Window_Selectable
  def initialize
    super(70,60,500,360)
    @width = width
    @column_max = 1
    self.opacity = 255
    self.visible = false
    self.index = 0
  end
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh(*list)
    return if list.empty?
    self.contents.clear if self.contents != nil
    self.contents = Bitmap.new(@width - 32, list.size * 32)
    @item_max = list.size
    for i in list
      levels = $game_system.missions[i].level.rStar
      pos = list.index(i)
      self.contents.draw_text(0,pos*32,200,32,i,0)
      self.contents.draw_text(220,pos*32,200,32,levels,0)
    end
  end
end
# 任务完成的列表
class WindowFinishList < Window_Selectable
  def initialize
    super(70,60,500,360)
    @width = width
    @column_max = 1
    self.visible = false
    self.opacity = 255
    self.index = 0
  end
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh(*list)
    return if list.empty?
    self.contents.clear if self.contents != nil
    self.contents = Bitmap.new(@width - 32,list.size * 32)
    @item_max = list.size
    for i in list
      level = $game_system.finishMissionList[i].level.rStar
      pos = list.index(i)
      self.contents.draw_text(0,pos*32,200,32,i,0)
      self.contents.draw_text(220,pos*32,200,32,level,0)
    end
  end
end  
# 任务描述窗口
class WindowMissionDes < Window_Base
  TEXT = ["[任务等级]","[任务条件]","[任务描述]","[任务报酬]","[其他]"]
  TEXT2 = "接受任务请按确定键,返回上级菜单按取消键"
  def initialize
    super(70,40,500,400)
    @viewport = Viewport.new(70,40+64,500,400-64)
    @viewport.z = self.z + 1
    self.visible = false
    self.contents = Bitmap.new(width-32,64)
  end
  
  def update
    super
    if self.active
      if @text != nil
        @text.x > - 300 ? @text.x -= 2 : @text.x = 650
      end  
      case Input.dir4
      when 2
        move_block(0)
        move_bar(1)
      when 8
        move_block(1)
        move_bar(0)
      end
    end    
  end  
  
  def nVisible
    if self.visible == true
      @sprite.visible = true if @sprite != nil
      @bar.visible = true if @bar != nil
      #@text.visible = true if @text != nil
    end
    if self.visible == false
      @sprite.visible = false if @sprite != nil
      @bar.visible = false if @bar != nil
      @text.visible = false if @text != nil
    end  
  end  
    
  def dispose
    super
    @sprite.dispose if @sprite != nil
    @bar.dispose if @bar != nil
    @text.dispose if @text != nil
  end  
  
  def move_block(kind)
    if kind == 0
      @sprite.y -= 4
    end
    if kind == 1
      @sprite.y += 4 
    end  
  end
  
  def move_bar(kind)
    if kind == 0
      @bar.y -= (4/@rate).to_f if @bar.y > 112
    end
    if kind == 1
      @bar.y += (4/@rate).to_f if @bar.y < 400 - @bar.bitmap.height
    end   
  end  
  
  def getColor(n)
    if n == 0
      return Color.new(255,255,255,255)
    elsif n == 1
      return Color.new(255,255,0,255)
    elsif n == 2
      return Color.new(255,0,0,255)
    elsif n == 3
      return Color.new(128,128,128,255)
    else
      
    end
  end  
  
  def refresh(name,listKind)
    raise "listKind参数设置不正确" unless [0,1,2].include? listKind
    self.contents.clear
    # bitmap.clear if bitmap != nil
    @sprite.dispose if @sprite != nil
    @bar.dispose if @bar != nil
    @name = name
    # 可接受列表
    if listKind == 0    
      MissionList::Missions.each do |mission|
        if mission[0] == @name
          @mission = mission
          break
        end  
      end  
      
      #mission_name                        = @mission[0]
      level                               = @mission[1]
      kind                                = @mission[2][0]
      condition                           = @mission[2][1]
      description                         = @mission[3]
      money                               = @mission[4][0]
      @mission[4][1][0] != nil ? item     = @mission[4][1][0] : item = "无"
      @mission[4][1][1] != nil ? weapon   = @mission[4][1][1] : weapon = "无"
      @mission[4][1][2] != nil ? armor    = @mission[4][1][2] : armor = "无" 
      reward_des                          = @mission[5]
    end
    
    
    # 任务中列表
    if listKind == 1
      $game_system.missionNameSort.each do |mission|
        if mission == @name
          @mission = $game_system.missions[@name]
          break
        end  
      end  
      #mission_name                        = @mission.name
      level                               = @mission.level
      kind                                = @mission.kind[0]
      condition                           = @mission.kind[1]
      description                         = @mission.description
      money                               = @mission.money
      @mission.items[0] != nil ? item     = @mission.items[0] : item = "无"
      @mission.items[1] != nil ? weapon   = @mission.items[1] : weapon = "无"
      @mission.items[2] != nil ? armor    = @mission.items[2] : armor = "无" 
      reward_des                          = @mission.reswards_des
    end  
    
    
    # 完成列表
    if listKind == 2
      $game_system.finishNameSort.each do |mission|
        if mission == @name
          @mission = $game_system.finishMissionList[@name]
          break
        end  
      end  
      #mission_name                       = @mission.name
      finish_times                        = @mission.times
      level                               = @mission.level
      kind                                = @mission.kind[0]
      condition                           = @mission.kind[1]
      description                         = @mission.description
      money                               = @mission.money
      @mission.items[0] != nil ? item     = @mission.items[0] : item = "无"
      @mission.items[1] != nil ? weapon   = @mission.items[1] : weapon = "无"
      @mission.items[2] != nil ? armor    = @mission.items[2] : armor = "无" 
      reward_des                          = @mission.reswards_des
    end  
      
      self.contents.font.color = getColor(2)
      self.contents.draw_text(0,0,450-32,32,"【"+name+"】",1)
      if listKind == 2
        self.contents.font.color = getColor(1)
        self.contents.draw_text(0,20,450-32,32,"完成次数:#{finish_times}",1)
      end
      self.contents.fill_rect(16,48,450,2,getColor(0))
      
      # 开始计算Bitmap的height
      @height = 11
      
      case kind
      when 0
        # 40个字节一行计算
        condition == "" ? @height += 1 : @height += condition.getLines(40)
      when 1
        @height += condition[0].size if condition[0] != nil
        @height += condition[1].size if condition[1] != nil
        @height += condition[2].size if condition[2] != nil
      when 2
        @height += condition.size
      end  
      description == "" ? @height += 1 : @height += description.getLines(40) + 1
      
      if listKind == 0
        # 计算若无报酬的情况
        @mission[4][1][0] == nil ? @height += 1 : @height += @mission[4][1][0].size
        @mission[4][1][1] == nil ? @height += 1 : @height += @mission[4][1][1].size
        @mission[4][1][2] == nil ? @height += 1 : @height += @mission[4][1][2].size
      end
      
      if listKind == 1
        item == "无" ? @height += 1 : @height += item.size
        weapon == "无" ? @height += 1 : @height += weapon.size
        armor == "无" ? @height += 1 : @height += armor.size
      end
      if listKind == 2
      end
      
      reward_des == "" ? @height += 1 : @height += reward_des.getLines(40)
      # 设置滚动字幕
      if listKind == 0
        @text = Sprite.new
        @text.bitmap = Bitmap.new(640,32)
        @text.bitmap.draw_text(0,0,640,32,TEXT2,0)
        @text.x,@text.y,@text.ox,@text.oy = 650,0,0,0
      end
        
      # 计算滚动条
      barHeight = 100
      @rate = 2
      #@rate = ((@height * 32) / barHeight).to_f
      #if @rate >= 1
      #  barHeight = (barHeight/@rate).to_f
      #end
      bitmapBar = Bitmap.new(12,barHeight)
      bitmapBar.fill_rect(0,0,bitmapBar.width,bitmapBar.height,getColor(0))
      @bar = Sprite.new
      @bar.bitmap = bitmapBar
      @bar.x,@bar.y,@bar.z,@bar.ox,@bar.oy = 490,112,self.z+2,0,0
      
      # 设置显示内容矩形
      bitmap = Bitmap.new(500-32,@height*32)
      
      @sprite = Sprite.new(@viewport)
      @sprite.x,@sprite.y,@sprite.ox,@sprite.oy = 40,0,0,0
      @sprite.bitmap = bitmap
      
      @sprite.bitmap.font.color = getColor(1)
      @sprite.bitmap.draw_text(0,0,468,32,TEXT[0],0)
      @sprite.bitmap.font.color = getColor(0)
      @sprite.bitmap.draw_text(0,32,468,32,level.rStar,0)
      @sprite.bitmap.font.color = getColor(1)
      @sprite.bitmap.draw_text(0,32*2,468,32,TEXT[1],0)
      @sprite.bitmap.font.color = getColor(0)
      # 完成事件的情况
      if kind == 0
        @sprite.bitmap.auto_line_draw_text(0,32*3,"无",40,32,0)
        if condition.getLines(40) == 0
          next_line = 32*4
        else  
          next_line = 32*(3+condition.getLines(40))
        end
      end  
      
      # 取得物品的情况
      if kind == 1
        tem01 = 0
        pos = 0
        if condition[0] != nil
          condition[0].each do |id,number|
            pos = condition[0].index([id,number])
            name = $data_items[id].name
            icon_name = $data_items[id].icon_name
            
            # blt(x, y, src_bitmap, src_rect[, opacity])
            bt = RPG::Cache.icon(icon_name)
            rect1 = Rect.new(0,32*3+pos*32,24,24)
            rect2 = Rect.new(0,0,bt.width,bt.height)
            @sprite.bitmap.stretch_blt(rect1,bt,rect2) 
            
            @sprite.bitmap.draw_text(64,32*3+pos*32,400,32,name,0)
            case listKind
            when 0,2
              @sprite.bitmap.draw_text(300,32*3+pos*32,100,32,"x"+number.to_s,0)
            when 1
              now_items = $game_party.instance_variable_get :@items
              now_number = (now_items[id].nil? ? 0 : now_items[id])
              @sprite.bitmap.draw_text(250,32*3+pos*32,100,32,now_number.to_s+"/"+number.to_s,0)
            when 2
            end
            
          end  
          tem01 += condition[0].size
        end  
        if condition[1] != nil
          condition[1].each do |id,number|
            pos = condition[1].index([id,number]) + tem01
            name = $data_weapons[id].name
            icon_name = $data_weapons[id].icon_name
            
            bt = RPG::Cache.icon(icon_name)
            rect1 = Rect.new(0,32*3+pos*32,24,24)
            rect2 = Rect.new(0,0,bt.width,bt.height)
            @sprite.bitmap.stretch_blt(rect1,bt,rect2) 
            
            case listKind
            when 0,2
              @sprite.bitmap.draw_text(64,32*3+pos*32,400,32,name,0)
              @sprite.bitmap.draw_text(300,32*3+pos*32,100,32,"x"+number.to_s,0)
            when 1
              now_weapons = $game_party.instance_variable_get :@weapons
              now_number = (now_weapons[id].nil? ? 0 : now_weapons[id])
              @sprite.bitmap.draw_text(300,32*3+pos*32,100,32,now_number.to_s+"/"+number.to_s,0)
            when 2
            end
          end  
          tem01 += condition[1].size
        end  
        if condition[2] != nil
          p condition[2]
          condition[2].each do |id,number|
            pos = condition[2].index([id,number]) + tem01
            name = $data_armors[id].name
            icon_name = $data_armors[id].icon_name
            
            bt = RPG::Cache.icon(icon_name)
            rect1 = Rect.new(0,32*3+pos*32,24,24)
            rect2 = Rect.new(0,0,bt.width,bt.height)
            @sprite.bitmap.stretch_blt(rect1,bt,rect2) 
            
           case listKind
            when 0,2
              @sprite.bitmap.draw_text(64,32*3+pos*32,400,32,name,0)
              @sprite.bitmap.draw_text(300,32*3+pos*32,100,32,"x"+number.to_s,0)
            when 1
              now_armors = $game_party.instance_variable_get :@armors
              now_number = (now_armors[id].nil? ? 0 : now_armors[id])
              @sprite.bitmap.draw_text(300,32*3+pos*32,100,32,now_number.to_s+"/"+number.to_s,0)
            when 2
            end
          end  
          tem01 += condition[2].size
        end  
          next_line = 32*(3+tem01)
      end
        
      # 杀敌的情况
      if kind == 2
        pos01 = 0
        condition.sort.each do |id,number|
          pos01 = condition.sort.index([id,number])
          name = $data_enemies[id].name
          @sprite.bitmap.draw_text(0,32*3+pos01*32,400,32,name,0)
         case listKind
          when 0,2
            @sprite.bitmap.draw_text(300,32*3+pos01*32,100,32,"x"+number.to_s,0)
          when 1
            if $game_system.missionEnemyIds[@name][id] == nil
              now_number = 0
            else
              now_number = $game_system.missionEnemyIds[@name][id]
            end
            @sprite.bitmap.draw_text(300,32*3+pos01*32,100,32,now_number.to_s+"/"+number.to_s,0)
          end  
        end  
        next_line = 32*(3+condition.sort.size)
      end  
      @sprite.bitmap.font.color = getColor(1)
      @sprite.bitmap.draw_text(0,next_line,400,32,TEXT[2],0)
      
      @sprite.bitmap.font.color = getColor(0)
      @sprite.bitmap.auto_line_draw_text(0,next_line+32,description,40,32,0)
      
      if description.getLines(40) == 0
        next_line = next_line+32*2
      else  
        next_line = (next_line+32)+32*description.getLines(40)
      end
      
      @sprite.bitmap.font.color = getColor(1)
      @sprite.bitmap.draw_text(0,next_line,400,32,TEXT[3],0)
      
      # 分割线
      @sprite.bitmap.fill_rect(0,next_line+48,250,1,getColor(0))
      @sprite.bitmap.font.color = getColor(0)
      
      @sprite.bitmap.draw_text(0,next_line+32*2,400,32,"[金钱]",0)
      @sprite.bitmap.draw_text(0,next_line+32*3,150,32,money.to_s+"G",0)
      
      @sprite.bitmap.draw_text(0,next_line+32*4,400,32,"[道具]",0)
      next_line = next_line+32*5
      
      
      tem02 = 0
      if item == "无"
        @sprite.bitmap.draw_text(0,next_line,400,32,item,0)
        tem02 += 1
      else
        item.each do |id,number|
          name = $data_items[id].name
          pos02 = item.index([id,number])
          icon_name = $data_items[id].icon_name
            
          bt = RPG::Cache.icon(icon_name)
          rect1 = Rect.new(0,next_line+pos02*32,24,24)
          rect2 = Rect.new(0,0,bt.width,bt.height)
          @sprite.bitmap.stretch_blt(rect1,bt,rect2) 
          @sprite.bitmap.draw_text(64,next_line+pos02*32,400,32,name,0)
          @sprite.bitmap.draw_text(300,next_line+pos02*32,100,32,"x"+number.to_s,0)
        end  
        tem02 += item.size
      end  
      next_line += tem02*32
      
      @sprite.bitmap.draw_text(0,next_line,400,32,"[武器]",0)
      next_line += 32
      
      tem03 = 0
      if weapon == "无"
        @sprite.bitmap.draw_text(0,next_line,400,32,weapon,0)
        tem03 += 1
      else
        weapon.each do |id,number|
          name = $data_weapons[id].name
          pos03 = weapon.index([id,number])
          icon_name = $data_weapons[id].icon_name
            
          bt = RPG::Cache.icon(icon_name)
          rect1 = Rect.new(0,next_line+pos03*32,24,24)
          rect2 = Rect.new(0,0,bt.width,bt.height)
          @sprite.bitmap.stretch_blt(rect1,bt,rect2) 
          @sprite.bitmap.draw_text(64,next_line+pos03*32,400,32,name,0)
          @sprite.bitmap.draw_text(300,next_line+pos03*32,100,32,"x"+number.to_s,0)
        end  
        tem03 += weapon.size
      end 
      next_line += tem03*32
      
      @sprite.bitmap.draw_text(0,next_line,400,32,"[防具]",0)
      next_line += 32
      
      tem04 = 0
      if armor == "无"
        @sprite.bitmap.draw_text(0,next_line,400,32,armor,0)
        tem04 += 1
      else
        armor.each do |id,number|
          name = $data_armors[id].name
          pos04 = armor.index([id,number])
          icon_name = $data_armors[id].icon_name
         
          bt = RPG::Cache.icon(icon_name)
          rect1 = Rect.new(0,next_line+pos04*32,24,24)
          rect2 = Rect.new(0,0,bt.width,bt.height)
          @sprite.bitmap.stretch_blt(rect1,bt,rect2) 
          
          @sprite.bitmap.draw_text(64,next_line+pos04*32,400,32,name,0)
          @sprite.bitmap.draw_text(300,next_line+pos04*32,100,32,"x"+number.to_s,0)
        end  
        tem04 += armor.size
      end 
      next_line += tem04*32
      
      @sprite.bitmap.font.color = getColor(1)
      @sprite.bitmap.draw_text(0,next_line,400,32,TEXT[4],0)
      @sprite.bitmap.font.color = getColor(0)
      next_line += 32
      
      @sprite.bitmap.auto_line_draw_text(0,next_line,reward_des,40,32,0)
  end  
end    
#-----------------------------------------------------------------------------
# 场景部分
#-----------------------------------------------------------------------------
class SceneMission
  attr_accessor     :message
  attr_accessor     :reward_list
  def main
    # 外部接口
    @message = ""
    @reward_list = {}
    @spriteset = Spriteset_Map.new
    @main_window = WindowMissionMain.new
    @main_window.active = true
    @can_accept = WindowCanAcceptList.new
    @can_accept.active = false
    @accepted = WindowAccetpedList.new
    @accepted.active = false
    @finished = WindowFinishList.new
    @finished.active = false
    @window_des = WindowMissionDes.new
    @window_des.active = false
    @result = Window_Help.new
    @result.active = false
    @result.visible = false
    @result.x,@result.y,@result.z = 0,200,@window_des.z+100
    # @yes_or_no = WindowYesOrNo.new
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
    Graphics.freeze
    @main_window.dispose
    @can_accept.dispose
    @accepted.dispose
    @finished.dispose
    @window_des.dispose
    @result.dispose
    @spriteset.dispose
  end
  
  def update
    return update_main if @main_window.active
    return update_can_accept if @can_accept.active
    return update_accepted if @accepted.active
    return update_finished if @finished.active
    return update_window_des if @window_des.active
    return update_result if @result.active
  end  
  def update_main
    @main_window.update
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      $scene = Scene_Map.new
      return
    end  
    if Input.trigger?(Input::C)
      $game_system.se_play($data_system.decision_se)
      @main_window.visible = false
      @main_window.active = false
      case @main_window.index
      when 0 # 接受←xiaoming自己对比吧,我啥也不说了
        if $xiaoming == 1
        $scene =  SceneMission.new 
        else
          
        @can_accept.active = true
        @can_accept.visible = true
        @can_accept.refresh(*MissionList.canMissionList)
        @can_accept.index = 0
      end
      
        return
      when 1 # 提交
        if $xiaoming == 1
        $scene = SceneMission.new 
        else
          
        @accepted.active = true
        @accepted.visible = true
        @accepted.refresh(*$game_system.missionNameSort)
        @accepted.index = 0
        end
        return
      when 2 # 查看
        @accepted.active = true
        @accepted.visible = true
        @accepted.refresh(*$game_system.missionNameSort)
        @accepted.index = 0
        return
      when 3 # 完成 
        @finished.active = true
        @finished.visible = true
        @finished.refresh(*$game_system.finishNameSort)
        @finished.index = 0
        return
      end
    end
  end
  def update_can_accept
    @can_accept.update
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      @can_accept.active = false
      @can_accept.visible = false
      
      @main_window.visible = true
      @main_window.active = true
      # @main_window.index = 0
      return
    end  
    if Input.trigger?(Input::C)
      $game_system.se_play($data_system.decision_se)
      name = MissionList.canMissionList[@can_accept.index]
      return if $game_system.missions[name] != nil
      
      @can_accept.active = false
      @can_accept.visible = false
      
      @window_des.visible = true
      @window_des.refresh(MissionList.canMissionList[@can_accept.index],0)
      @window_des.active = true
      return
    end
  end  
  # 接受了的列表
  def update_accepted
    @accepted.update
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      @accepted.active = false
      @accepted.visible = false
      
      @main_window.visible = true
      @main_window.active = true
      # @main_window.index = 0
    end  
    
    if Input.trigger?(Input::C)
      $game_system.se_play($data_system.decision_se)
      
      case @main_window.index
      when 1 #提交 检索任务
        return if $game_system.missionNameSort[@accepted.index].nil?
        Mission.checkMission($game_system.missionNameSort[@accepted.index])
        @accepted.active = false
        @result.set_text(@message,1)
        @result.active = true
        @result.visible = true
        
      when 2 
        if $game_system.missionNameSort[@accepted.index].nil?
          return
        end  
        @accepted.active = false
        @accepted.visible = false
        
        @window_des.active = true
        @window_des.visible = true
        
        @window_des.refresh($game_system.missionNameSort[@accepted.index],1)
      when 3
      end
    end
  end  
  
  # 完成了的列表
  def update_finished
    @finished.update
    if Input.trigger?(Input::C)
      return if $game_system.finishNameSort[@finished.index].nil?
      $game_system.se_play($data_system.decision_se)
      @finished.active = false
      @finished.visible = false
        
      @window_des.active = true
      @window_des.visible = true
        
      @window_des.refresh($game_system.finishNameSort[@finished.index],2)
      return
    end
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      @finished.active = false
      @finished.visible = false
      
      @main_window.visible = true
      @main_window.active = true
      # @main_window.index = 0
      return
    end
  end
  
  def update_window_des
    @window_des.update
    if Input.trigger?(Input::C)
      case @main_window.index
      when 0
        $game_system.se_play($data_system.decision_se)
        @window_des.active = false
        @result.active = true
        name = MissionList.canMissionList[@can_accept.index]
        MissionList.Start(name)
        @result.set_text("接受了任务" + name,1)
      when 1 # 提交任务 
      when 2 # 查看任务
      when 3 # 完成列表
      end
      return
    end
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      @window_des.visible = false
      @window_des.active = false
      @window_des.nVisible
      case @main_window.index
      # 接受
      when 0
        @can_accept.active = true
        @can_accept.visible = true
        return
      # 提交  
      when 2
        @accepted.active = true
        @accepted.visible = true
        return
      when 3
        @finished.active = true
        @finished.visible = true
      end  
    end
  end  
  def update_result
    if Input.trigger?(Input::C)
      $game_system.se_play($data_system.decision_se)
      
      @result.active = false
      @result.visible = false
      
      @window_des.visible = false
      @window_des.nVisible
      @can_accept.visible = false
      @accepted.visible = false
      @finished.visible = false
      
      @main_window.visible = true
      @main_window.active = true
      @main_window.index = 0
      
      return
    end  
    @result.update
  end
end
#-----------------------------------------------------------------------------
# 结束
#-----------------------------------------------------------------------------
反正我已知的至少一个,咱也是脚本渣,人家那么庞大的东西也改不动……
 
 另外仔细看我任务卷轴的设定,
 有个细节我没有框出来,话说我没框出来你就不看的啊!
 | 
 评分
查看全部评分
 |