Project1

标题: 悲剧了- -!别沉!悬赏解决! [打印本页]

作者: jyx520520    时间: 2010-7-26 16:47
标题: 悲剧了- -!别沉!悬赏解决!
本帖最后由 jyx520520 于 2010-7-28 10:31 编辑

关于仿网游任务系统如何在游戏菜单中打开已接任务= =?

就是怎么在游戏里叫出已接的任务来看??

用公共事件的话俺不知道怎么弄脚本 悲剧


如图 不跟NPC说话,通过使用包裹的物品如任务记录书之类的可以查看任务 已接 和已经完成的

我用公共事件做了一个任务书可以看,但是4个选项都存在- =那不就是到处可以接任务了 汗

把上面2个选项显示 去掉.只显示下面2个选项的部分....= =如果问为什么要去掉的话,显示的话影响游戏乐趣.....

可以分2个脚本显示  1:已完成的任务 【可以用个任务日记】
                   2:进行中的任务【也弄个任务记事】

解决了赠送一下素材包- - S级素材喔!!
全PNG透明格式最新洛奇人物半身图,含表情!共406张~~

作者: jyx520520    时间: 2010-7-26 17:14
汗!- =在线等回答
作者: jyx520520    时间: 2010-7-26 17:25
悲剧了= =.......求好心人
作者: hekonghui    时间: 2010-7-26 17:37
^^直接看不懂的
作者: jyx520520    时间: 2010-7-26 18:15
哎= =说的简单点就是  在菜单里用道具之后显示 已接任务栏...
作者: xiaominging    时间: 2010-7-26 20:27
就是说这个脚本的作用是:跟某NPC对话,能够通过NPC自带的事件接受或者提交该NPC指定的任务?
如果是这样,这两个选项在那里也没关系,我们只要让她们形同虚设就好了。
在你的调出任务列表的公共事件中设定:
如果选择了接受任务,出现对话“在这里没有任务可以接受”,然后回到地图。
如果选择了提交任务,出现对话“在这里没有任务可以提交”,然后回到地图。

如果不是我设想的那样,最好把脚本的使用方法说明一下,方便大家一起想办法。
作者: jyx520520    时间: 2010-7-26 21:25
回复 xiaominging 的帖子
我的意思是在物品打开所接任务的以及完成任务的列表,,这个脚本打不开

   
作者: xiaominging    时间: 2010-7-27 10:52
本帖最后由 xiaominging 于 2010-7-27 10:55 编辑

回复 jyx520520 的帖子

实际上不用连续提醒我三遍,我也可以努力工作的
先把我修改后的脚本放上来,具体用法在说明里有

#---------------------------------------------------------------------------
# 仿网游多任务系统v0.1 by秀秀
#---------------------------------------------------------------------------
=begin
   
  作者:秀秀

  版本:v1.0
  
  注意:注明“←xiaoming”的部分都是我动过的
  都由xiaominging负责,你也可以通过搜索
  “←xiaoming”(好吧,这个是“小明”的拼音)的字样来查看我在哪里动了手脚。
  对于未经秀秀许可而作的修改我表示抱歉,因为我没有找到原帖。
  以下是近乎脚本渣的我画蛇添足的功能
    #当变量$xiaoming为0时显示本来的四个选项
    【查看任务】
    【完成列表】
    【接受任务】
    【提交任务】
    当变量$xiaoming为1时显示前面的两个选项
    【查看任务】
    【完成列表】   
    #也就是说如果想要两个选项的效果
    #就在调用任务主窗体之前调用脚本$xiaoming = 1
    #如果想要四个选项的效果
    #就在调用任务窗体之前调用脚本$xiaoming = 0
  
  
  [使用方法]
  
    在脚本开始的地方的设置常量Missions

    设置好之后 调用 $scene = SceneMission.new 即可
   
  [Mission数据结构]  
  
    Mission 是一个用来存放任务的数组
   
    格式: Mission[任务1,任务2,任务3,任务n], 可无限设置

    而Mission数组里的每个元素 又是一个数组 大小为固定size = 5
   
    分别为: 1.任务名称 (字符串)
         
            2.任务等级 (整数)
            
            3.任务类型和条件(数组)
            
               第一个元素为类型
               
               类型: 0 为触发式
                     1 为持有物品
                     2 为杀敌数一定
               
               第二个元素为条件
                   当第一个元素为0时候
                     设置为字符串(即开关名)
                   当第二个元素为1时候
                     设置为 hash(即某物品或者武器和数量
                                 键为类型,0:物品,1:武器,2:防具)
                     如{0=>[[1,3],[2,4]],1=>[[5,10]],2=>[10,12]}
                     表示 物品id为1 数量3
                          物品id为2 数量为4
                          武器id为5,数量为10
                          防具id为10,数量为12
                   当第二个元素为1时候(即杀敌数量)
                     设置为 hash(敌人id和数量)
                     如{14=>5,6=>12,7=>8}
                     表示需要干掉
                        id为14敌人5次
                        id为6的敌人12次
                        id为7的敌人8次
                        
            4.任务描述(字符串)
            
            5.报酬(数组)
              
              第一个元素为金钱(整数)
            
              第二个元素为物品,武器,防具
                设置为 hash(即某物品或者武器和数量
                            键为类型,0:物品,1:武器,2:防具)
                如:{0=>[[1,10],[2,6]],1=>[[6,8]]}
                   表示 物品id为1 数量10
                        物品id为2 数量为6
                        武器id为6,数量为8
                          
            6.其他描述(字符串)
               如:如此任务达成 我会帮你打开XX门
               配合事件里插入脚本
               $game_system.finishNameSort.include?(name)
               name是任务名称
               可以检测是否已经完成改任务 来判断是否打开XX门
    [其他功能]
           接受一个任务
             MissionList.Start(name)
           判断一个任务是否执行中
             Mission.mission_run?(name)
           提交一个任务  
             Mission.checkMission(name)
           判断某个任务是否完成
             $game_system.finishNameSort.include?(name)
            
           还有一些功能就不单独描述了 具体看脚本核心部分
              
=end

#-----------------------------------------------------------------------------
# 设置任务部分
#------------------------------------------------------------------------------
module MissionList
  Missions = [
    ["对话",1,
    [0,"对话01"],"去找阿尔西斯对话",[100,
    {0=>[[1,5]],}],"可能就在附近,仔细找找吧"+"这信息是刷屏幕,主要测试自动换行功能"*10],

    ["寻找密斯里尔剑",2,
    [1,{1=>[[4,1]]}],
    "也许在地图的某个角落",[0,{1=>[[1,1]],2=>[[1,1]]}],"也许在地图的某个角落"],   

    ["灰狼",9,[2,{2=>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  
#------------------------------------------------------------------------------
# 内部类定义部分
#------------------------------------------------------------------------------
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
    if $xiaoming == 1#←xiaoming
      y = 100
      m = 2

    else
      y = 160
      m = 4

    end
    #原脚本没有这个判断
   
   
    #注意当变量$xiaoming为1时只显示【查看任务】和【完成列表】
    #当变量$xiaoming为0时显示本来的四个选项
    #也就是说如果想要两个选项的效果
    #就在调用任务主窗体之前调用脚本$xiaoming = 1
    #如果想要四个选项的效果
    #就在调用任务窗体之前调用脚本$xiaoming = 0
   
   
    super(240,100,160,y)  #←xiaoming
    #  super(240,100,160,160)
    self.contents = Bitmap.new(width - 32, height - 32)
    @item_max = m
    # @item_max = 4
    @column_max = 1
    self.opacity = 255
    refresh
    self.index = 0
  end
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh      
    self.contents.clear

      if $xiaoming == 1#←xiaoming
        c = ""
        d = ""
      else
        c = "接受任务"
        d = "提交任务"
      end
      #原脚本没有这个判断

    self.contents.draw_text(0,0,200,32,"查看任务",0)#←xiaoming
    self.contents.draw_text(0,32,200,32,"完成列表",0)
    self.contents.draw_text(0,32*2,200,32,c,0)
    self.contents.draw_text(0,32*3,200,32,d,0)
    #  self.contents.draw_text(0,0,200,32,"接受任务",0)
    #  self.contents.draw_text(0,32,200,32,"提交任务",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.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.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 2 # 接受←xiaoming
        #   when  0
        @can_accept.active = true
        @can_accept.visible = true
        @can_accept.refresh(*MissionList.canMissionList)
        @can_accept.index = 0
        return
      when 3 # 提交
        #   when 1
        @accepted.active = true
        @accepted.visible = true
        @accepted.refresh(*$game_system.missionNameSort)
        @accepted.index = 0
        return
      when 0 # 查看
        #   when 2
        @accepted.active = true
        @accepted.visible = true
        @accepted.refresh(*$game_system.missionNameSort)
        @accepted.index = 0
        return
      when 1 # 完成
        #   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 2   #←xiaoming
        #  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 3 # 提交任务
        #  when 1
      when 0 # 查看任务
        #  when 2
      when 1 # 完成列表
        #  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

#-----------------------------------------------------------------------------
# 结束
#-----------------------------------------------------------------------------


然后是你想要的通过物品调用任务窗体的方法

作者: 520520    时间: 2010-7-27 14:04
提示: 作者被禁止或删除 内容自动屏蔽
作者: jyx520520    时间: 2010-7-27 15:26
不是提醒了3次- =是昨天点了3次没刷出来....结果出了3个帖子*-*W我试试看看  作为回报 我今天弄到一个资源包 不错-W- 一会发你地址
作者: jyx520520    时间: 2010-7-27 15:39
下午晚点传网盘- =老婆在网游哈哈
作者: jyx520520    时间: 2010-7-27 16:00

回复 xiaominging 的帖子
喔这样改是真不错了,这样就不至于做任务会穿帮了= -
但是还是出现了问题

接受任务 再查看任务会出错- =
作者: jyx520520    时间: 2010-7-27 16:07
本帖最后由 jyx520520 于 2010-7-27 16:14 编辑

说真的我非常喜欢这个脚本....比详细的任务界面那个好多了
编任务的效率高,但是不知道怎么整合进菜单,
用脚本$scene = SceneMission.new 调出来就变成随时可以接任务交任务,,,
比如脚本里的圣剑任务接之后完成,如果$scene = SceneMission.new 调出菜单就直接交了...后面如果想加剧情就连不上了- =

但是我是脚本废人- -....


刚才用小明明修改的脚本763行的错误不知道为什么

接过任务之后不能查看已接任务 一看就崩
附件
【修改前】仿网游多任务系统v1.0.rar (200.87 KB, 下载次数: 56)

[修改过] 仿网游多任务系统v1.0.rar (201.59 KB, 下载次数: 55)





作者: xiaominging    时间: 2010-7-27 17:22
本帖最后由 IamI 于 2010-7-28 12:01 编辑

我开始后悔用xiaoming这个朴素的名字了,让你叫的我一个肉麻……

都怪我没有测试,而且改动的范围也有点大。

再扔脚本,使用方法同前,就是偷懒了一点,直接覆盖之。

  1. #---------------------------------------------------------------------------
  2. # 仿网游多任务系统v0.1 by秀秀
  3. #---------------------------------------------------------------------------

  4. #-----------------------------------------------------------------------------
  5. # 设置任务部分
  6. #------------------------------------------------------------------------------
  7. module MissionList
  8.   Missions = [
  9.     ["对话",1,
  10.     [0,"对话01"],"去找阿尔西斯对话",[100,
  11.     {0=>[[1,5]],}],"可能就在附近,仔细找找吧"+"这信息是刷屏幕,主要测试自动换行功能"*10],

  12.     ["寻找密斯里尔剑",2,
  13.     [1,{1=>[[4,1]]}],
  14.     "也许在地图的某个角落",[0,{1=>[[1,1]],2=>[[1,1]]}],"也许在地图的某个角落"],   

  15.     ["幽灵",3,[2,{1=>5}],
  16.     "干掉5个幽灵"+"测试自动换行功能"*10,[1000,{}],""],
  17.    
  18.     ["幽灵+蜥蜴",4,[2,{1=>5,2=>5}],
  19.     "干掉5个幽灵和5个蜥蜴",[2000,
  20.     {0=>[[1,3],[2,1],[3,1]],1=>[[2,1],[3,1],[7,1]],2=>[[1,1],[2,1]]}],"丰厚的奖品哦"],

  21.     ["重复幽灵任务1",1,[2,{1=>5}],
  22.     "干掉5个幽灵",[0,{1=>[[3,5]]}],""],
  23.    
  24.     ["重复幽灵任务2",2,[2,{1=>5}],
  25.     "干掉5个幽灵",[0,{1=>[[3,5]]}],""],

  26.     ["重复幽灵任务3",3,[2,{1=>5}],
  27.     "干掉5个幽灵",[0,{1=>[[3,5]]}],""],

  28.     ["重复幽灵任务4",4,[2,{1=>5}],
  29.     "干掉5个幽灵",[0,{1=>[[3,5]]}],""],
  30.    
  31.     ["重复幽灵任务5",5,[2,{1=>5}],
  32.     "干掉5个幽灵",[0,{1=>[[3,5]]}],""],   
  33.    
  34.     ["重复幽灵任务6",6,[2,{1=>5}],
  35.     "干掉5个幽灵",[0,{1=>[[3,5]]}],""],
  36.    
  37.     ["重复幽灵任务7",7,[2,{1=>5}],
  38.     "干掉5个幽灵",[0,{1=>[[3,5]]}],""],
  39.    
  40.     ["重复幽灵任务8",8,[2,{1=>5}],
  41.     "干掉5个幽灵",[0,{1=>[[3,5]]}],""],
  42.    
  43.     ["重复幽灵任务9",9,[2,{1=>5}],
  44.     "干掉5个幽灵",[0,{1=>[[3,5]]}],""],
  45.    
  46.     ["重复幽灵任务10",10,[2,{1=>5}],
  47.     "干掉5个幽灵",[0,{1=>[[3,5]]}],""],   
  48.    
  49.     ["寻找圣剑材料",10,
  50.     [1,{0=>[[32,5],[33,8],[34,11]]}],
  51.     "寻找圣剑所需的三个材料,圣剑材料1,圣剑材料2,圣剑材料3",
  52.     [0,{1=>[[33,1]]}],"找到这些可以做圣剑"],   
  53.     ]  
  54.   module_function  
  55.   def self.Start(name)
  56.     Missions.each do |mission|
  57.       Mission.startMission(*mission) if mission[0] == name
  58.     end
  59.   end  

  60.   def canMissionList
  61.     if Missions.empty? or Missions.nil?
  62.       raise "任务没有设置好,请检查"
  63.     end  
  64.     temp = []
  65.     Missions.each do |mission|
  66.       # if $game_system.missions[mission[0]].nil?
  67.         #添加到任务列表 并设置不需要在列表里的任务
  68.         temp << mission[0] if mission[0] != "寻找圣剑材料"
  69.       # end
  70.     end  
  71.     return temp
  72.   end  
  73. end  
复制代码

  1. #------------------------------------------------------------------------------
  2. # 内部类定义部分
  3. #------------------------------------------------------------------------------
  4. class Hash < Object
  5.   def soft
  6.     @temp = []
  7.     self.each_pair{|key, value| @temp << [key,value] }
  8.     return @temp
  9.   end  
  10. end  

  11. class Integer
  12.   def rStar
  13.     return "★"*self
  14.   end
  15. end  

  16. class Bitmap
  17.   def auto_line_draw_text(x,y,text,limit,height,align)
  18.     lines = text.getLines(limit)
  19.     @limit = limit
  20.     @n = 0
  21.     for i in 0...lines
  22.       @t1 = []
  23.       if lines == 1
  24.         @t1 << text
  25.       end  
  26.       if lines > 1
  27.         @t= text.split(//)
  28.         while @t1.join.size < @limit
  29.           break if @t[@n].nil?
  30.           @t1.push(@t[@n])
  31.           @n += 1
  32.         end
  33.       end  
  34.       draw_text(x,y+i*height,500,height,@t1.join,align)
  35.     end
  36.   end  
  37. end  

  38. class String
  39.   def getLines(limit)
  40.     lines = (self.length/limit).to_i
  41.     lines += 1 if self.length%limit != 0
  42.     return lines
  43.   end  
  44. end  

  45. #------------------------------------------------------------------------------
  46. # 系统重定义部分
  47. #------------------------------------------------------------------------------
  48. class Game_Battler
  49.   def dead?
  50.     if (@hp == 0 and not @immortal)
  51.      @temp_a = 0 if @temp_a == nil
  52.      if self.is_a?(Game_Enemy) and @temp_a == 0
  53.        id = self.instance_variable_get :@enemy_id
  54.        now_mission = $game_system.missionEnemyIds  #[name][id]
  55.        goal_mission = $game_system.missions        # [name].kind[1][id]
  56.        # 检索是否存在于列表中
  57.        $game_system.missionEnemyIds.keys.each do |name|
  58.          # return true if $game_system.missionEnemyIds[name] == nil
  59.          if now_mission[name][id] != nil and goal_mission[name] != nil and
  60.             now_mission[name][id] < goal_mission[name].kind[1][id]
  61.             # $game_system.missions[name].stutas == 0
  62.             $game_system.missionEnemyIds[name][id] += 1
  63.             break
  64.          end  
  65.        end
  66.        @temp_a = 1
  67.      end
  68.      return true
  69.     end
  70.   end
  71. end

  72. class Game_System
  73.   attr_accessor  :missions
  74.   #attr_accessor  :finishMissionTimes
  75.   attr_accessor  :finishMissionList
  76.   attr_accessor  :missionSwitch  
  77.   attr_accessor  :missionEnemyIds
  78.   attr_accessor  :missionNameSort
  79.   attr_accessor  :finishNameSort
  80.   alias ori_initialize initialize
  81.   def initialize
  82.     ori_initialize
  83.     @missions = {}
  84.     #@finishMissionTimes = {}
  85.     @finishMissionList = {}
  86.     @missionSwitch = {}
  87.     @missionEnemyIds = {}
  88.     @missionNameSort = []
  89.     @finishNameSort = []
  90.     @missionHouseList = []
  91.   end  
  92. end  

  93. class GetMission
  94.   attr_reader    :level
  95.   attr_reader    :kind
  96.   attr_reader    :description
  97.   attr_reader    :money
  98.   attr_reader    :items
  99.   attr_reader    :reswards_des
  100.   # attr_accessor  :stutas
  101.   def initialize(level,kind,description,rewards,rewards_des)
  102.     @level = level
  103.     @kind = kind
  104.     @description = description
  105.     @money = rewards[0]
  106.     @items = rewards[1]
  107.     @reswards_des = rewards_des
  108.   end
  109. end  

  110. class FinishMission < GetMission
  111.   attr_accessor   :times
  112.   def initialize(times,*args)
  113.     new_args = [args[0],args[1],args[2],[args[3],args[4]],args[5]]
  114.     super(*new_args)
  115.     @times = times
  116.   end  
  117. end  

  118. #----------------------------------------------------------------------------
  119. # 任务核心部分
  120. #----------------------------------------------------------------------------
  121. module Mission
  122.   module_function
  123.   def startMission(name,level,kind,description,rewards,rewards_des)
  124.     unless $game_system.missions.has_key?(name)
  125.       # 检查参数合法性
  126.       self.getError(name,level,kind,description,rewards,rewards_des)
  127.       $game_system.missions[name] = GetMission.new(
  128.          level,kind,description,rewards,rewards_des)
  129.       $game_system.missionNameSort << name unless $game_system.missionNameSort.include?(name)  
  130.       case kind[0]
  131.       when 0
  132.       # 设置开关初始状态
  133.       $game_system.missionSwitch[kind[1]] = false
  134.       when 1
  135.       # 开启了一个获得物品的任务
  136.       when 2  
  137.       # 开启了一个杀敌数的任务并设置列表
  138.       # {name1=>{id1=number,id2=number},name2={id1=number,id2=number}}
  139.       $game_system.missionEnemyIds[name] = {}
  140.       enemies = kind[1].sort
  141.       enemies.each{|id| $game_system.missionEnemyIds[name][id[0]] = 0}
  142.       end
  143.     end
  144.     return
  145.   end
  146.   
  147.   # 开启一个组合任务
  148.   #(- -,好像没必要了 可以直接接受2个或者多个无报酬任务
  149.   # 全部完成后再给报酬)
  150.   def startComboMission;end  

  151.   def getError(name,level,kind,description,rewards,rewards_des)
  152.     raise sprintf("任务:%s的参数 level 不是一个 Integer",name) unless level.kind_of?(Integer)
  153.     raise sprintf("任务:%s的参数 kind[0] 不是一个 Integer",name) unless kind[0].kind_of?(Integer)
  154.     case kind[0]
  155.       when 0
  156.       raise sprintf("任务:%s的参数 kind[1] 不是一个 String",name) unless kind[1].kind_of?(String)
  157.       when 1..2
  158.       unless (kind[1].kind_of?(Hash))
  159.         raise sprintf("任务:%s的参数 kind[1] 不是一个 Hash",name)
  160.       end   
  161.     end
  162.     raise sprintf("任务:%s的参数 description 不是一个 String",name) unless description.kind_of?(String)
  163.     raise sprintf("任务:%s的参数 rewards[0] 不是一个 Integer",name) unless rewards[0].kind_of?(Integer)
  164.     raise sprintf("任务:%s的参数 rewards[1] 不是一个 Hash",name) unless rewards[1].kind_of?(Hash)
  165.     raise sprintf("任务:%s的参数 rewards_des 不是一个 String",name) unless rewards_des.kind_of?(String)
  166.   end  
  167.   
  168.   # 接受一个或多个任务添加到任务所
  169.   def addMissionHouse(*missions)
  170.     missions.each{|a|$game_system.missionHouseList << a}
  171.   end
  172.   
  173.   # 任务所删除一个或多个任务
  174.   def deleteMissionHouse(*missions)
  175.     missions.each{|a|$game_system.missionHouseList.delete(a)}
  176.   end
  177.   
  178.   # 放弃任务 可多个  
  179.   def stopMission(*name)
  180.     name.each do |aname|
  181.       $game_system.missions.delete(aname) if $game_system.missions.include?(aname)
  182.     end
  183.   end
  184.   
  185.   # 检索任务
  186.   def checkMission(name)
  187.     # 检索是否已接了任务
  188.     if $game_system.missions[name] != nil
  189.       kind = $game_system.missions[name].kind
  190.     else
  191.       return self.missionReslut(2,name,self.message(4)){|msg|self.putsMessage(msg);return}
  192.     end  
  193.    
  194.     # 类型
  195.     case kind[0]
  196.     # 条件触发式
  197.     when 0
  198.       switch_name = $game_system.missions[name].kind[1]
  199.       if $game_system.missionSwitch[switch_name] == true
  200.         $game_system.missionSwitch.delete(name)
  201.         # 返回成功结果
  202.         return self.missionReslut(0,name,self.message(0)){|msg|self.putsMessage(msg);return}
  203.       else
  204.         # 返回未完成结果
  205.         self.missionReslut(1,name,self.message(1)){|msg|self.putsMessage(msg);return}
  206.       end  
  207.     # 持有物品
  208.     when 1
  209.       # 转化为 item格式的数组
  210.       # 如 [[1,10],[5,15]] 道具1数量10 道具5数量15
  211.         items = kind[1].select{|akind,array| akind == 0}[0][1] if kind[1][0] != nil
  212.         weapons = kind[1].select{|bkind,array| bkind == 1}[0][1] if kind[1][1] != nil
  213.         armors = kind[1].select{|ckind,array| ckind == 2}[0][1] if kind[1][2] != nil
  214.       unless items.nil?
  215.         unless self.check(name,0,items)
  216.           # 道具数量不合格
  217.           return self.missionReslut(1,name,self.message(2)){|msg|self.putsMessage(msg);return}
  218.         end  
  219.       end
  220.       unless weapons.nil?
  221.         unless self.check(name,1,weapons)
  222.           # 武器数量不合格
  223.           return self.missionReslut(1,name,self.message(2)){|msg|self.putsMessage(msg);return}
  224.         end
  225.       end
  226.       unless armors.nil?
  227.         unless self.check(name,2,armors)
  228.           # 防具数量不合格
  229.           return self.missionReslut(1,name,self.message(2)){|msg|self.putsMessage(msg);return}
  230.         end
  231.       end
  232.       # 返回成功结果
  233.       return self.missionReslut(0,name,self.message(0)){|msg|self.putsMessage(msg);return}
  234.     # 杀敌数一定  
  235.     when 2  
  236.       enemies = kind[1].soft
  237.       enemies.each do |id,number|  
  238.         if $game_system.missionEnemyIds[name][id] < number
  239.           return self.missionReslut(1,name,self.message(3)){|msg|self.putsMessage(msg);return}
  240.         end  
  241.       end
  242.       # 清空敌人id列表
  243.       $game_system.missionEnemyIds.delete(name)
  244.       # 返回成功结果
  245.       return self.missionReslut(0,name,self.message(0)){|msg|self.putsMessage(msg);return}
  246.     end  
  247.       
  248.   end  
  249.   
  250.   def message(kind)
  251.     if kind == 0
  252.       return "恭喜你任务完成,请查收奖品"
  253.     elsif kind == 1
  254.       return "似乎还未达到要求"
  255.     elsif kind == 2
  256.       return "请检查是否获得了任务所需物品和数量"
  257.     elsif kind == 3
  258.       return "任务所需杀敌数还不够"
  259.     elsif kind == 4
  260.       return "未开启的任务类型"
  261.     else
  262.       return
  263.     end  
  264.   end  
  265.   
  266.   def putsMessage(msg)
  267.     if $scene.is_a?(SceneMission)
  268.       $scene.message = msg
  269.     end
  270.     return
  271.   end  
  272.   
  273.   def check(name,kind,*args)
  274.     if kind == 0
  275.       # 任务所需物品array
  276.       items = args
  277.       # 获取现在物品
  278.       now_items = $game_party.instance_variable_get :@items
  279.       # 检查是否包含物品
  280.       ids01 = []
  281.       items[0].each{|item| ids01 << item[0]}
  282.       now_ids = now_items.keys
  283.       unless now_ids|ids01 == now_ids
  284.         return false
  285.       end
  286.       # 检查数量是否合格
  287.       items[0].each do |item|
  288.        return false if now_items[item[0]] < item[1]
  289.       end  
  290.     elsif kind == 1  
  291.       # 任务所需武器array
  292.       weapons = args
  293.       # 获取现在物品
  294.       now_weapons = $game_party.instance_variable_get :@weapons
  295.       # 检查是否包含物品
  296.       ids02 = []
  297.       weapons[0].each{|weapon| ids02 << weapon[0]}
  298.       now_ids = now_weapons.keys
  299.       unless now_ids|ids02 == now_ids
  300.         return false
  301.       end
  302.       # 检查数量是否合格
  303.       weapons[0].each do |weapon|
  304.        return false if now_weapons[weapon[0]] < weapon[1]
  305.       end  
  306.     elsif kind == 2
  307.       # 任务所需物品array
  308.       armors = args
  309.       # 获取现在物品
  310.       now_armors = $game_party.instance_variable_get :@armors
  311.       # 检查是否包含物品
  312.       ids03 = []
  313.       armors[0].each{|armor| ids03 << armor[0][0]}
  314.       now_ids = now_armors.keys
  315.       unless now_ids|ids03 == now_ids
  316.         return false
  317.       end
  318.       # 检查数量是否合格
  319.       armors[0].each do |armor|
  320.        return false if now_armors[armor[0]] < armor[1]
  321.       end  
  322.     else
  323.       
  324.     end  
  325.     # 检查通过
  326.     return true
  327.   end

  328.   #返回一种任务结果
  329.   def missionReslut(result,name,message)
  330.     case result
  331.     when 0
  332.       # 将任务转移到完成列表
  333.       self.missionMove(name)
  334.       # 获得报酬
  335.       self.getRewards(name)
  336.       # 清空任务
  337.       $game_system.missionNameSort.delete(name)
  338.       $game_system.missions.delete(name)
  339.       # 抛出任务成功信息
  340.       yield message
  341.     when 1
  342.       # 抛出未完成信息
  343.       yield message
  344.       #任务还未完成
  345.       return false
  346.     when 2  
  347.       # 抛出未完成信息
  348.       yield message
  349.       #无此任务
  350.       return false
  351.     end
  352.     return
  353.   end  
  354.   
  355.   # 转移到任务完成列表
  356.   def missionMove(name)
  357.     @mission = $game_system.missions[name]
  358.     # 保存全部实例变量
  359.     @include = ["@level","@kind","@description","@money","@items","@reswards_des"]
  360.     @include_value = []
  361.     temp = []
  362.     @include.each do |a|
  363.       if a == "@monney"
  364.         temp << a
  365.         next
  366.       end
  367.       if a == "@tiems"
  368.         temp << a
  369.         a = temp
  370.       end  
  371.       @include_value.push @mission.instance_variable_get eval(":"+a)
  372.     end  

  373.     if $game_system.finishMissionList.include? name
  374.       # 任务名称=>完成次数
  375.       # 如果包含 完成次数+1
  376.       $game_system.finishMissionList[name].times += 1
  377.     else
  378.       # 如果不包含 建立一个完成任务的列表
  379.       $game_system.finishNameSort.push(name) unless $game_system.finishNameSort.include?(name)
  380.       $game_system.finishMissionList[name] = FinishMission.new(1,*@include_value)
  381.     end
  382.     return
  383.   end
  384.   
  385.   # 获取报酬
  386.   def getRewards(name)
  387.      return if $game_system.missions[name] == nil
  388.      # [金钱,{种类1=>[[ID1,数量],[ID2,数量]],种类2=>[[ID1,数量],[ID2,数量]]}]
  389.      money = $game_system.missions[name].money
  390.      items = $game_system.missions[name].items
  391.      # 获取赏金
  392.      self.get_money(money) if money != 0
  393.      # 获得物品
  394.      if items[0] != nil
  395.        items[0].each{|id,number|
  396.        $game_party.send :gain_item,id,number
  397.        }
  398.      end  
  399.      # 获得武器
  400.      if items[1] != nil
  401.        items[1].each{|id,number|
  402.        $game_party.send :gain_weapon,id,number
  403.        }
  404.      end  
  405.      # 获得防具
  406.      if items[2] != nil
  407.        items[2].each{|id,number|
  408.        $game_party.send :gain_armor,id,number
  409.        }
  410.      end  
  411.      return
  412.   end  
  413.   
  414.   def get_money(n)
  415.     $game_party.send :gain_gold,n
  416.   end  
  417.   
  418.   # *mission 可接收多个任务名称作为参数
  419.   def mission_finished?(*missions)
  420.     # return $game_system.finishMissionList.keys | missions
  421.     missions.each do |mission|
  422.       return false unless $game_system.finishMissionList.has_key?(mission)
  423.     end  
  424.     return true
  425.   end
  426.   
  427.   # 检查mission是否正在执行
  428.   def mission_run?(*missions)
  429.     #p missions
  430.     #p $game_system.missions
  431.     missions.each do |mission|
  432.       return false unless $game_system.missions.has_key?(mission)
  433.     end  
  434.     return true
  435.     # p $game_system.missions.keys | missions
  436.     # return $game_system.missions.keys | missions
  437.   end  
  438.   
  439.   # 获取当前任务数量
  440.   def mission_counts
  441.     return $game_system.missions.length
  442.   end  
  443.   
  444. end  

  445. #-----------------------------------------------------------------------------
  446. # 菜单部分
  447. #-----------------------------------------------------------------------------
  448. # 任务所主菜单
  449. class WindowMissionMain < Window_Selectable
  450.   def initialize
  451.     super(240,100,160,160)
  452.     self.contents = Bitmap.new(width - 32, height - 32)
  453.     @item_max = 4
  454.     @column_max = 1
  455.     self.opacity = 255
  456.     refresh
  457.     self.index = 0
  458.   end
  459.   #--------------------------------------------------------------------------
  460.   # ● 刷新
  461.   #--------------------------------------------------------------------------
  462.   def refresh
  463.     self.contents.clear
  464.     if $xiaoming == 1#←xiaoming比上一个偷懒了
  465.       a ="--------"
  466.       b ="--------"
  467.     else
  468.       a ="接受任务"
  469.       b ="提交任务"
  470.     end
  471.    
  472.     self.contents.draw_text(0,0,200,32,a,0)
  473.     self.contents.draw_text(0,32,200,32,b,0)
  474.     self.contents.draw_text(0,32*2,200,32,"查看任务",0)
  475.     self.contents.draw_text(0,32*3,200,32,"完成列表",0)
  476.   end
  477. end


  478. # 可接受任务的列表
  479. class WindowCanAcceptList < Window_Selectable
  480.   def initialize
  481.     super(70,60,500,360)
  482.     @width = width
  483.     @column_max = 1
  484.     self.opacity = 255
  485.     self.visible = false
  486.     self.index = 0
  487.   end
  488.   #--------------------------------------------------------------------------
  489.   # ● 刷新
  490.   #--------------------------------------------------------------------------
  491.   def refresh(*list)
  492.     self.contents.clear if self.contents != nil
  493.     self.contents = Bitmap.new(@width - 32, list.size * 32+32)
  494.     @item_max = list.size
  495.     for i in list
  496.       MissionList::Missions.each do |mission|
  497.         if  mission[0] == i
  498.           @level = mission[1]
  499.           @name = i
  500.           break
  501.         end
  502.       end
  503.       pos = list.index(i)
  504.       if $game_system.missions[@name] != nil
  505.         self.contents.font.color = disabled_color
  506.       else
  507.         self.contents.font.color = normal_color
  508.       end
  509.       self.contents.draw_text(0,pos*32,200,32,i,0)
  510.       self.contents.draw_text(220,pos*32,200,32,@level.rStar,0)
  511.     end
  512.   end
  513. end



  514. # 任务中的列表
  515. class WindowAccetpedList < Window_Selectable
  516.   def initialize
  517.     super(70,60,500,360)
  518.     @width = width
  519.     @column_max = 1
  520.     self.opacity = 255
  521.     self.visible = false
  522.     self.index = 0
  523.   end
  524.   #--------------------------------------------------------------------------
  525.   # ● 刷新
  526.   #--------------------------------------------------------------------------
  527.   def refresh(*list)
  528.     return if list.empty?
  529.     self.contents.clear if self.contents != nil
  530.     self.contents = Bitmap.new(@width - 32, list.size * 32)
  531.     @item_max = list.size
  532.     for i in list
  533.       levels = $game_system.missions[i].level.rStar
  534.       pos = list.index(i)
  535.       self.contents.draw_text(0,pos*32,200,32,i,0)
  536.       self.contents.draw_text(220,pos*32,200,32,levels,0)
  537.     end
  538.   end
  539. end


  540. # 任务完成的列表
  541. class WindowFinishList < Window_Selectable
  542.   def initialize
  543.     super(70,60,500,360)
  544.     @width = width
  545.     @column_max = 1
  546.     self.visible = false
  547.     self.opacity = 255
  548.     self.index = 0
  549.   end
  550.   #--------------------------------------------------------------------------
  551.   # ● 刷新
  552.   #--------------------------------------------------------------------------
  553.   def refresh(*list)
  554.     return if list.empty?
  555.     self.contents.clear if self.contents != nil
  556.     self.contents = Bitmap.new(@width - 32,list.size * 32)
  557.     @item_max = list.size
  558.     for i in list
  559.       level = $game_system.finishMissionList[i].level.rStar
  560.       pos = list.index(i)
  561.       self.contents.draw_text(0,pos*32,200,32,i,0)
  562.       self.contents.draw_text(220,pos*32,200,32,level,0)
  563.     end
  564.   end
  565. end  


  566. # 任务描述窗口
  567. class WindowMissionDes < Window_Base
  568.   TEXT = ["[任务等级]","[任务条件]","[任务描述]","[任务报酬]","[其他]"]
  569.   TEXT2 = "接受任务请按确定键,返回上级菜单按取消键"
  570.   def initialize
  571.     super(70,40,500,400)
  572.     @viewport = Viewport.new(70,40+64,500,400-64)
  573.     @viewport.z = self.z + 1
  574.     self.visible = false
  575.     self.contents = Bitmap.new(width-32,64)
  576.   end
  577.   
  578.   def update
  579.     super
  580.     if self.active
  581.       if @text != nil
  582.         @text.x > - 300 ? @text.x -= 2 : @text.x = 650
  583.       end  
  584.       case Input.dir4
  585.       when 2
  586.         move_block(0)
  587.         move_bar(1)
  588.       when 8
  589.         move_block(1)
  590.         move_bar(0)
  591.       end
  592.     end   
  593.   end  
  594.   
  595.   def nVisible
  596.     if self.visible == true
  597.       @sprite.visible = true if @sprite != nil
  598.       @bar.visible = true if @bar != nil
  599.       #@text.visible = true if @text != nil
  600.     end
  601.     if self.visible == false
  602.       @sprite.visible = false if @sprite != nil
  603.       @bar.visible = false if @bar != nil
  604.       @text.visible = false if @text != nil
  605.     end  
  606.   end  
  607.    
  608.   def dispose
  609.     super
  610.     @sprite.dispose if @sprite != nil
  611.     @bar.dispose if @bar != nil
  612.     @text.dispose if @text != nil
  613.   end  
  614.   
  615.   def move_block(kind)
  616.     if kind == 0
  617.       @sprite.y -= 4
  618.     end
  619.     if kind == 1
  620.       @sprite.y += 4
  621.     end  
  622.   end
  623.   
  624.   def move_bar(kind)
  625.     if kind == 0
  626.       @bar.y -= (4/@rate).to_f if @bar.y > 112
  627.     end
  628.     if kind == 1
  629.       @bar.y += (4/@rate).to_f if @bar.y < 400 - @bar.bitmap.height
  630.     end   
  631.   end  
  632.   
  633.   def getColor(n)
  634.     if n == 0
  635.       return Color.new(255,255,255,255)
  636.     elsif n == 1
  637.       return Color.new(255,255,0,255)
  638.     elsif n == 2
  639.       return Color.new(255,0,0,255)
  640.     elsif n == 3
  641.       return Color.new(128,128,128,255)
  642.     else
  643.       
  644.     end
  645.   end  
  646.   
  647.   def refresh(name,listKind)
  648.     raise "listKind参数设置不正确" unless [0,1,2].include? listKind
  649.     self.contents.clear
  650.     # bitmap.clear if bitmap != nil
  651.     @sprite.dispose if @sprite != nil
  652.     @bar.dispose if @bar != nil
  653.     @name = name
  654.     # 可接受列表
  655.     if listKind == 0   
  656.       MissionList::Missions.each do |mission|
  657.         if mission[0] == @name
  658.           @mission = mission
  659.           break
  660.         end  
  661.       end  
  662.       
  663.       #mission_name                        = @mission[0]
  664.       level                               = @mission[1]
  665.       kind                                = @mission[2][0]
  666.       condition                           = @mission[2][1]
  667.       description                         = @mission[3]
  668.       money                               = @mission[4][0]
  669.       @mission[4][1][0] != nil ? item     = @mission[4][1][0] : item = "无"
  670.       @mission[4][1][1] != nil ? weapon   = @mission[4][1][1] : weapon = "无"
  671.       @mission[4][1][2] != nil ? armor    = @mission[4][1][2] : armor = "无"
  672.       reward_des                          = @mission[5]
  673.     end
  674.    
  675.    
  676.     # 任务中列表
  677.     if listKind == 1
  678.       $game_system.missionNameSort.each do |mission|
  679.         if mission == @name
  680.           @mission = $game_system.missions[@name]
  681.           break
  682.         end  
  683.       end  

  684.       #mission_name                        = @mission.name
  685.       level                               = @mission.level
  686.       kind                                = @mission.kind[0]
  687.       condition                           = @mission.kind[1]
  688.       description                         = @mission.description
  689.       money                               = @mission.money
  690.       @mission.items[0] != nil ? item     = @mission.items[0] : item = "无"
  691.       @mission.items[1] != nil ? weapon   = @mission.items[1] : weapon = "无"
  692.       @mission.items[2] != nil ? armor    = @mission.items[2] : armor = "无"
  693.       reward_des                          = @mission.reswards_des
  694.     end  
  695.    
  696.    
  697.     # 完成列表
  698.     if listKind == 2
  699.       $game_system.finishNameSort.each do |mission|
  700.         if mission == @name
  701.           @mission = $game_system.finishMissionList[@name]
  702.           break
  703.         end  
  704.       end  
  705.       #mission_name                       = @mission.name
  706.       finish_times                        = @mission.times
  707.       level                               = @mission.level
  708.       kind                                = @mission.kind[0]
  709.       condition                           = @mission.kind[1]
  710.       description                         = @mission.description
  711.       money                               = @mission.money
  712.       @mission.items[0] != nil ? item     = @mission.items[0] : item = "无"
  713.       @mission.items[1] != nil ? weapon   = @mission.items[1] : weapon = "无"
  714.       @mission.items[2] != nil ? armor    = @mission.items[2] : armor = "无"
  715.       reward_des                          = @mission.reswards_des
  716.     end  
  717.       
  718.       self.contents.font.color = getColor(2)
  719.       self.contents.draw_text(0,0,450-32,32,"【"+name+"】",1)
  720.       if listKind == 2
  721.         self.contents.font.color = getColor(1)
  722.         self.contents.draw_text(0,20,450-32,32,"完成次数:#{finish_times}",1)
  723.       end
  724.       self.contents.fill_rect(16,48,450,2,getColor(0))
  725.       
  726.       # 开始计算Bitmap的height
  727.       @height = 11
  728.       
  729.       case kind
  730.       when 0
  731.         # 40个字节一行计算
  732.         condition == "" ? @height += 1 : @height += condition.getLines(40)
  733.       when 1
  734.         @height += condition[0].size if condition[0] != nil
  735.         @height += condition[1].size if condition[1] != nil
  736.         @height += condition[2].size if condition[2] != nil
  737.       when 2
  738.         @height += condition.size
  739.       end  
  740.       description == "" ? @height += 1 : @height += description.getLines(40) + 1
  741.       
  742.       if listKind == 0
  743.         # 计算若无报酬的情况
  744.         @mission[4][1][0] == nil ? @height += 1 : @height += @mission[4][1][0].size
  745.         @mission[4][1][1] == nil ? @height += 1 : @height += @mission[4][1][1].size
  746.         @mission[4][1][2] == nil ? @height += 1 : @height += @mission[4][1][2].size
  747.       end
  748.       
  749.       if listKind == 1
  750.         item == "无" ? @height += 1 : @height += item.size
  751.         weapon == "无" ? @height += 1 : @height += weapon.size
  752.         armor == "无" ? @height += 1 : @height += armor.size
  753.       end
  754.       if listKind == 2

  755.       end
  756.       
  757.       reward_des == "" ? @height += 1 : @height += reward_des.getLines(40)

  758.       # 设置滚动字幕
  759.       if listKind == 0
  760.         @text = Sprite.new
  761.         @text.bitmap = Bitmap.new(640,32)
  762.         @text.bitmap.draw_text(0,0,640,32,TEXT2,0)
  763.         @text.x,@text.y,@text.ox,@text.oy = 650,0,0,0
  764.       end
  765.         
  766.       # 计算滚动条
  767.       barHeight = 100
  768.       @rate = 2
  769.       #@rate = ((@height * 32) / barHeight).to_f
  770.       #if @rate >= 1
  771.       #  barHeight = (barHeight/@rate).to_f
  772.       #end
  773.       bitmapBar = Bitmap.new(12,barHeight)
  774.       bitmapBar.fill_rect(0,0,bitmapBar.width,bitmapBar.height,getColor(0))
  775.       @bar = Sprite.new
  776.       @bar.bitmap = bitmapBar
  777.       @bar.x,@bar.y,@bar.z,@bar.ox,@bar.oy = 490,112,self.z+2,0,0
  778.       
  779.       # 设置显示内容矩形
  780.       bitmap = Bitmap.new(500-32,@height*32)
  781.       
  782.       @sprite = Sprite.new(@viewport)
  783.       @sprite.x,@sprite.y,@sprite.ox,@sprite.oy = 40,0,0,0
  784.       @sprite.bitmap = bitmap
  785.       
  786.       @sprite.bitmap.font.color = getColor(1)
  787.       @sprite.bitmap.draw_text(0,0,468,32,TEXT[0],0)
  788.       @sprite.bitmap.font.color = getColor(0)
  789.       @sprite.bitmap.draw_text(0,32,468,32,level.rStar,0)
  790.       @sprite.bitmap.font.color = getColor(1)
  791.       @sprite.bitmap.draw_text(0,32*2,468,32,TEXT[1],0)
  792.       @sprite.bitmap.font.color = getColor(0)
  793.       # 完成事件的情况
  794.       if kind == 0
  795.         @sprite.bitmap.auto_line_draw_text(0,32*3,"无",40,32,0)
  796.         if condition.getLines(40) == 0
  797.           next_line = 32*4
  798.         else  
  799.           next_line = 32*(3+condition.getLines(40))
  800.         end
  801.       end  
  802.       
  803.       # 取得物品的情况
  804.       if kind == 1
  805.         tem01 = 0
  806.         pos = 0
  807.         if condition[0] != nil
  808.           condition[0].each do |id,number|
  809.             pos = condition[0].index([id,number])
  810.             name = $data_items[id].name
  811.             icon_name = $data_items[id].icon_name
  812.             
  813.             # blt(x, y, src_bitmap, src_rect[, opacity])
  814.             bt = RPG::Cache.icon(icon_name)
  815.             rect1 = Rect.new(0,32*3+pos*32,24,24)
  816.             rect2 = Rect.new(0,0,bt.width,bt.height)
  817.             @sprite.bitmap.stretch_blt(rect1,bt,rect2)
  818.             
  819.             @sprite.bitmap.draw_text(64,32*3+pos*32,400,32,name,0)
  820.             case listKind
  821.             when 0,2
  822.               @sprite.bitmap.draw_text(300,32*3+pos*32,100,32,"x"+number.to_s,0)
  823.             when 1
  824.               now_items = $game_party.instance_variable_get :@items
  825.               now_number = (now_items[id].nil? ? 0 : now_items[id])
  826.               @sprite.bitmap.draw_text(250,32*3+pos*32,100,32,now_number.to_s+"/"+number.to_s,0)
  827.             when 2
  828.             end
  829.             
  830.           end  
  831.           tem01 += condition[0].size
  832.         end  
  833.         if condition[1] != nil
  834.           condition[1].each do |id,number|
  835.             pos = condition[1].index([id,number]) + tem01
  836.             name = $data_weapons[id].name
  837.             icon_name = $data_weapons[id].icon_name
  838.             
  839.             bt = RPG::Cache.icon(icon_name)
  840.             rect1 = Rect.new(0,32*3+pos*32,24,24)
  841.             rect2 = Rect.new(0,0,bt.width,bt.height)
  842.             @sprite.bitmap.stretch_blt(rect1,bt,rect2)
  843.             
  844.             case listKind
  845.             when 0,2
  846.               @sprite.bitmap.draw_text(64,32*3+pos*32,400,32,name,0)
  847.               @sprite.bitmap.draw_text(300,32*3+pos*32,100,32,"x"+number.to_s,0)
  848.             when 1
  849.               now_weapons = $game_party.instance_variable_get :@weapons
  850.               now_number = (now_weapons[id].nil? ? 0 : now_weapons[id])
  851.               @sprite.bitmap.draw_text(300,32*3+pos*32,100,32,now_number.to_s+"/"+number.to_s,0)
  852.             when 2
  853.             end

  854.           end  
  855.           tem01 += condition[1].size
  856.         end  
  857.         if condition[2] != nil
  858.           p condition[2]
  859.           condition[2].each do |id,number|
  860.             pos = condition[2].index([id,number]) + tem01
  861.             name = $data_armors[id].name
  862.             icon_name = $data_armors[id].icon_name
  863.             
  864.             bt = RPG::Cache.icon(icon_name)
  865.             rect1 = Rect.new(0,32*3+pos*32,24,24)
  866.             rect2 = Rect.new(0,0,bt.width,bt.height)
  867.             @sprite.bitmap.stretch_blt(rect1,bt,rect2)

  868.             
  869.            case listKind
  870.             when 0,2
  871.               @sprite.bitmap.draw_text(64,32*3+pos*32,400,32,name,0)
  872.               @sprite.bitmap.draw_text(300,32*3+pos*32,100,32,"x"+number.to_s,0)
  873.             when 1
  874.               now_armors = $game_party.instance_variable_get :@armors
  875.               now_number = (now_armors[id].nil? ? 0 : now_armors[id])
  876.               @sprite.bitmap.draw_text(300,32*3+pos*32,100,32,now_number.to_s+"/"+number.to_s,0)
  877.             when 2
  878.             end
  879.           end  
  880.           tem01 += condition[2].size
  881.         end  
  882.           next_line = 32*(3+tem01)
  883.       end
  884.         
  885.       # 杀敌的情况
  886.       if kind == 2
  887.         pos01 = 0
  888.         condition.sort.each do |id,number|
  889.           pos01 = condition.sort.index([id,number])
  890.           name = $data_enemies[id].name
  891.           @sprite.bitmap.draw_text(0,32*3+pos01*32,400,32,name,0)
  892.          case listKind
  893.           when 0,2
  894.             @sprite.bitmap.draw_text(300,32*3+pos01*32,100,32,"x"+number.to_s,0)
  895.           when 1
  896.             if $game_system.missionEnemyIds[@name][id] == nil
  897.               now_number = 0
  898.             else
  899.               now_number = $game_system.missionEnemyIds[@name][id]
  900.             end
  901.             @sprite.bitmap.draw_text(300,32*3+pos01*32,100,32,now_number.to_s+"/"+number.to_s,0)
  902.           end  
  903.         end  
  904.         next_line = 32*(3+condition.sort.size)
  905.       end  
  906.       @sprite.bitmap.font.color = getColor(1)
  907.       @sprite.bitmap.draw_text(0,next_line,400,32,TEXT[2],0)
  908.       
  909.       @sprite.bitmap.font.color = getColor(0)
  910.       @sprite.bitmap.auto_line_draw_text(0,next_line+32,description,40,32,0)
  911.       
  912.       if description.getLines(40) == 0
  913.         next_line = next_line+32*2
  914.       else  
  915.         next_line = (next_line+32)+32*description.getLines(40)
  916.       end
  917.       
  918.       @sprite.bitmap.font.color = getColor(1)
  919.       @sprite.bitmap.draw_text(0,next_line,400,32,TEXT[3],0)
  920.       
  921.       # 分割线
  922.       @sprite.bitmap.fill_rect(0,next_line+48,250,1,getColor(0))
  923.       @sprite.bitmap.font.color = getColor(0)
  924.       
  925.       @sprite.bitmap.draw_text(0,next_line+32*2,400,32,"[金钱]",0)
  926.       @sprite.bitmap.draw_text(0,next_line+32*3,150,32,money.to_s+"G",0)
  927.       
  928.       @sprite.bitmap.draw_text(0,next_line+32*4,400,32,"[道具]",0)
  929.       next_line = next_line+32*5
  930.       
  931.       
  932.       tem02 = 0
  933.       if item == "无"
  934.         @sprite.bitmap.draw_text(0,next_line,400,32,item,0)
  935.         tem02 += 1
  936.       else
  937.         item.each do |id,number|
  938.           name = $data_items[id].name
  939.           pos02 = item.index([id,number])
  940.           icon_name = $data_items[id].icon_name
  941.             
  942.           bt = RPG::Cache.icon(icon_name)
  943.           rect1 = Rect.new(0,next_line+pos02*32,24,24)
  944.           rect2 = Rect.new(0,0,bt.width,bt.height)
  945.           @sprite.bitmap.stretch_blt(rect1,bt,rect2)

  946.           @sprite.bitmap.draw_text(64,next_line+pos02*32,400,32,name,0)
  947.           @sprite.bitmap.draw_text(300,next_line+pos02*32,100,32,"x"+number.to_s,0)
  948.         end  
  949.         tem02 += item.size
  950.       end  
  951.       next_line += tem02*32
  952.       
  953.       @sprite.bitmap.draw_text(0,next_line,400,32,"[武器]",0)
  954.       next_line += 32
  955.       
  956.       tem03 = 0
  957.       if weapon == "无"
  958.         @sprite.bitmap.draw_text(0,next_line,400,32,weapon,0)
  959.         tem03 += 1
  960.       else
  961.         weapon.each do |id,number|
  962.           name = $data_weapons[id].name
  963.           pos03 = weapon.index([id,number])
  964.           icon_name = $data_weapons[id].icon_name
  965.             
  966.           bt = RPG::Cache.icon(icon_name)
  967.           rect1 = Rect.new(0,next_line+pos03*32,24,24)
  968.           rect2 = Rect.new(0,0,bt.width,bt.height)
  969.           @sprite.bitmap.stretch_blt(rect1,bt,rect2)

  970.           @sprite.bitmap.draw_text(64,next_line+pos03*32,400,32,name,0)
  971.           @sprite.bitmap.draw_text(300,next_line+pos03*32,100,32,"x"+number.to_s,0)
  972.         end  
  973.         tem03 += weapon.size
  974.       end
  975.       next_line += tem03*32
  976.       
  977.       @sprite.bitmap.draw_text(0,next_line,400,32,"[防具]",0)
  978.       next_line += 32
  979.       
  980.       tem04 = 0
  981.       if armor == "无"
  982.         @sprite.bitmap.draw_text(0,next_line,400,32,armor,0)
  983.         tem04 += 1
  984.       else
  985.         armor.each do |id,number|
  986.           name = $data_armors[id].name
  987.           pos04 = armor.index([id,number])
  988.           icon_name = $data_armors[id].icon_name
  989.          
  990.           bt = RPG::Cache.icon(icon_name)
  991.           rect1 = Rect.new(0,next_line+pos04*32,24,24)
  992.           rect2 = Rect.new(0,0,bt.width,bt.height)
  993.           @sprite.bitmap.stretch_blt(rect1,bt,rect2)
  994.          
  995.           @sprite.bitmap.draw_text(64,next_line+pos04*32,400,32,name,0)
  996.           @sprite.bitmap.draw_text(300,next_line+pos04*32,100,32,"x"+number.to_s,0)
  997.         end  
  998.         tem04 += armor.size
  999.       end
  1000.       next_line += tem04*32
  1001.       
  1002.       @sprite.bitmap.font.color = getColor(1)
  1003.       @sprite.bitmap.draw_text(0,next_line,400,32,TEXT[4],0)
  1004.       @sprite.bitmap.font.color = getColor(0)
  1005.       next_line += 32
  1006.       
  1007.       @sprite.bitmap.auto_line_draw_text(0,next_line,reward_des,40,32,0)


  1008.   end  

  1009. end   
  1010. #-----------------------------------------------------------------------------
  1011. # 场景部分
  1012. #-----------------------------------------------------------------------------
  1013. class SceneMission
  1014.   attr_accessor     :message
  1015.   attr_accessor     :reward_list
  1016.   def main
  1017.     # 外部接口
  1018.     @message = ""
  1019.     @reward_list = {}
  1020.     @spriteset = Spriteset_Map.new
  1021.     @main_window = WindowMissionMain.new
  1022.     @main_window.active = true
  1023.     @can_accept = WindowCanAcceptList.new
  1024.     @can_accept.active = false
  1025.     @accepted = WindowAccetpedList.new
  1026.     @accepted.active = false
  1027.     @finished = WindowFinishList.new
  1028.     @finished.active = false
  1029.     @window_des = WindowMissionDes.new
  1030.     @window_des.active = false
  1031.     @result = Window_Help.new
  1032.     @result.active = false
  1033.     @result.visible = false
  1034.     @result.x,@result.y,@result.z = 0,200,@window_des.z+100
  1035.     # @yes_or_no = WindowYesOrNo.new
  1036.     Graphics.transition
  1037.     loop do
  1038.       Graphics.update
  1039.       Input.update
  1040.       update
  1041.       if $scene != self
  1042.         break
  1043.       end
  1044.     end
  1045.     Graphics.freeze
  1046.     @main_window.dispose
  1047.     @can_accept.dispose
  1048.     @accepted.dispose
  1049.     @finished.dispose
  1050.     @window_des.dispose
  1051.     @result.dispose
  1052.     @spriteset.dispose
  1053.   end
  1054.   
  1055.   def update
  1056.     return update_main if @main_window.active
  1057.     return update_can_accept if @can_accept.active
  1058.     return update_accepted if @accepted.active
  1059.     return update_finished if @finished.active
  1060.     return update_window_des if @window_des.active
  1061.     return update_result if @result.active
  1062.   end  
  1063.   def update_main
  1064.     @main_window.update
  1065.     if Input.trigger?(Input::B)
  1066.       $game_system.se_play($data_system.cancel_se)
  1067.       $scene = Scene_Map.new
  1068.       return
  1069.     end  
  1070.     if Input.trigger?(Input::C)
  1071.       $game_system.se_play($data_system.decision_se)
  1072.       @main_window.visible = false
  1073.       @main_window.active = false
  1074.       case @main_window.index
  1075.       when 0 # 接受←xiaoming自己对比吧,我啥也不说了
  1076.         if $xiaoming == 1
  1077.         $scene =  SceneMission.new
  1078.         else
  1079.          
  1080.         @can_accept.active = true
  1081.         @can_accept.visible = true
  1082.         @can_accept.refresh(*MissionList.canMissionList)
  1083.         @can_accept.index = 0
  1084.       end
  1085.       
  1086.         return
  1087.       when 1 # 提交
  1088.         if $xiaoming == 1
  1089.         $scene = SceneMission.new
  1090.         else
  1091.          
  1092.         @accepted.active = true
  1093.         @accepted.visible = true
  1094.         @accepted.refresh(*$game_system.missionNameSort)
  1095.         @accepted.index = 0
  1096.         end
  1097.         return
  1098.       when 2 # 查看
  1099.         @accepted.active = true
  1100.         @accepted.visible = true
  1101.         @accepted.refresh(*$game_system.missionNameSort)
  1102.         @accepted.index = 0
  1103.         return
  1104.       when 3 # 完成
  1105.         @finished.active = true
  1106.         @finished.visible = true
  1107.         @finished.refresh(*$game_system.finishNameSort)
  1108.         @finished.index = 0
  1109.         return
  1110.       end
  1111.     end
  1112.   end
  1113.   def update_can_accept
  1114.     @can_accept.update
  1115.     if Input.trigger?(Input::B)
  1116.       $game_system.se_play($data_system.cancel_se)
  1117.       @can_accept.active = false
  1118.       @can_accept.visible = false
  1119.       
  1120.       @main_window.visible = true
  1121.       @main_window.active = true
  1122.       # @main_window.index = 0
  1123.       return
  1124.     end  
  1125.     if Input.trigger?(Input::C)
  1126.       $game_system.se_play($data_system.decision_se)
  1127.       name = MissionList.canMissionList[@can_accept.index]

  1128.       return if $game_system.missions[name] != nil
  1129.       
  1130.       @can_accept.active = false
  1131.       @can_accept.visible = false
  1132.       
  1133.       @window_des.visible = true
  1134.       @window_des.refresh(MissionList.canMissionList[@can_accept.index],0)
  1135.       @window_des.active = true
  1136.       return
  1137.     end
  1138.   end  

  1139.   # 接受了的列表
  1140.   def update_accepted
  1141.     @accepted.update
  1142.     if Input.trigger?(Input::B)
  1143.       $game_system.se_play($data_system.cancel_se)
  1144.       @accepted.active = false
  1145.       @accepted.visible = false
  1146.       
  1147.       @main_window.visible = true
  1148.       @main_window.active = true
  1149.       # @main_window.index = 0
  1150.     end  
  1151.    
  1152.     if Input.trigger?(Input::C)
  1153.       $game_system.se_play($data_system.decision_se)
  1154.       
  1155.       case @main_window.index
  1156.       when 1 #提交 检索任务
  1157.         return if $game_system.missionNameSort[@accepted.index].nil?
  1158.         Mission.checkMission($game_system.missionNameSort[@accepted.index])
  1159.         @accepted.active = false
  1160.         @result.set_text(@message,1)
  1161.         @result.active = true
  1162.         @result.visible = true
  1163.         
  1164.       when 2
  1165.         if $game_system.missionNameSort[@accepted.index].nil?
  1166.           return
  1167.         end  
  1168.         @accepted.active = false
  1169.         @accepted.visible = false
  1170.         
  1171.         @window_des.active = true
  1172.         @window_des.visible = true
  1173.         
  1174.         @window_des.refresh($game_system.missionNameSort[@accepted.index],1)
  1175.       when 3
  1176.       end
  1177.     end
  1178.   end  
  1179.   
  1180.   # 完成了的列表
  1181.   def update_finished
  1182.     @finished.update
  1183.     if Input.trigger?(Input::C)
  1184.       return if $game_system.finishNameSort[@finished.index].nil?
  1185.       $game_system.se_play($data_system.decision_se)

  1186.       @finished.active = false
  1187.       @finished.visible = false
  1188.         
  1189.       @window_des.active = true
  1190.       @window_des.visible = true
  1191.         
  1192.       @window_des.refresh($game_system.finishNameSort[@finished.index],2)
  1193.       return
  1194.     end
  1195.     if Input.trigger?(Input::B)
  1196.       $game_system.se_play($data_system.cancel_se)
  1197.       @finished.active = false
  1198.       @finished.visible = false
  1199.       
  1200.       @main_window.visible = true
  1201.       @main_window.active = true
  1202.       # @main_window.index = 0
  1203.       return
  1204.     end
  1205.   end
  1206.   

  1207.   def update_window_des
  1208.     @window_des.update
  1209.     if Input.trigger?(Input::C)
  1210.       case @main_window.index
  1211.       when 0
  1212.         $game_system.se_play($data_system.decision_se)
  1213.         @window_des.active = false
  1214.         @result.active = true
  1215.         name = MissionList.canMissionList[@can_accept.index]
  1216.         MissionList.Start(name)
  1217.         @result.set_text("接受了任务" + name,1)
  1218.       when 1 # 提交任务
  1219.       when 2 # 查看任务
  1220.       when 3 # 完成列表
  1221.       end
  1222.       return
  1223.     end
  1224.     if Input.trigger?(Input::B)
  1225.       $game_system.se_play($data_system.cancel_se)
  1226.       @window_des.visible = false
  1227.       @window_des.active = false
  1228.       @window_des.nVisible
  1229.       case @main_window.index
  1230.       # 接受
  1231.       when 0
  1232.         @can_accept.active = true
  1233.         @can_accept.visible = true
  1234.         return
  1235.       # 提交  
  1236.       when 2
  1237.         @accepted.active = true
  1238.         @accepted.visible = true
  1239.         return
  1240.       when 3
  1241.         @finished.active = true
  1242.         @finished.visible = true
  1243.       end  
  1244.     end
  1245.   end  

  1246.   def update_result
  1247.     if Input.trigger?(Input::C)
  1248.       $game_system.se_play($data_system.decision_se)
  1249.       
  1250.       @result.active = false
  1251.       @result.visible = false
  1252.       
  1253.       @window_des.visible = false
  1254.       @window_des.nVisible
  1255.       @can_accept.visible = false
  1256.       @accepted.visible = false
  1257.       @finished.visible = false
  1258.       
  1259.       @main_window.visible = true
  1260.       @main_window.active = true
  1261.       @main_window.index = 0
  1262.       
  1263.       return
  1264.     end  
  1265.     @result.update
  1266.   end

  1267. end

  1268. #-----------------------------------------------------------------------------
  1269. # 结束
  1270. #-----------------------------------------------------------------------------
复制代码
至此结束,关于查看任务的其它bug都是原脚本的问题了,
反正我已知的至少一个,咱也是脚本渣,人家那么庞大的东西也改不动……

另外仔细看我任务卷轴的设定,
有个细节我没有框出来,话说我没框出来你就不看的啊!
作者: jyx520520    时间: 2010-7-27 18:25
本帖最后由 jyx520520 于 2010-7-27 18:26 编辑

晕了  还是BUG......

还是继续报错 - =悲剧了
对了 那个素材收到了么?

[修改过更新] 仿网游多任务系统v1.0.rar

201.48 KB, 下载次数: 51


作者: jyx520520    时间: 2010-7-27 18:28
可以换个思路么?比如跳过选单直接看选单下内容?然后再游戏里用2个道具表示就好了
作者: jyx520520    时间: 2010-7-28 10:32
顶起来好了- -悲剧了
作者: zhangbanxian    时间: 2010-7-28 11:37
晕了  还是BUG......

还是继续报错 - =悲剧了
对了 那个素材收到了么?
jyx520520 发表于 2010-7-27 18:25

杯具的是dz不是你的小明明
  1. levels = $game_system.missions.level.rStar
复制代码
改成
  1. levels = $game_system.missions[i].level.rStar
复制代码

就是字体开始倾斜的地方,囧...


作者: 逸豫    时间: 2010-7-28 12:13
咱表示咱是个程序……再好的素材也只能用来欣赏……
我不是来抢饭碗的……相信我……(右击-目标另存为下载)
作者: xiaominging    时间: 2010-7-28 12:23
杯具的是dz不是你的小明明
把改成吧
就是字体开始倾斜的地方,囧...
zhangbanxian 发表于 2010-7-28 11:37



嗯嗯,没错没错,不是咱的问题!
lz把代码像张半仙这样该就好了,话说不准把“小明明”这样恶心的昵称发扬光大啊。

另外,赋值用一个等号,判断才用两个等号啊,你都在任务卷轴的公共事件里干了什么啊!
关于跳过选单的要调用任务列表窗体,咱还不会。




关于素材咱收到了,3Q~洛奇,果然够精品……
作者: xiaominging    时间: 2010-7-28 13:01
回复 逸豫 的帖子


    授之以鱼不如授之以渔,
你这样就没办法让人家思考了嘛…………
还有,重申一遍,不,不准再把咱的丢人事迹提出来!

作者: jyx520520    时间: 2010-7-28 13:29
其实我个是美工出身啊- -完全不懂任何语言程序.....脚本纯粹靠蒙  哈哈

那个素材是我解包出来 非常好的-W-




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1