幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1643|回复: 6

[已解决] 我要一个XP的任务系统,仿网游的。

[复制链接]

4

主题

19

帖子

160

积分

③业余

积分
160
QQ
发表于 2010-1-8 18:28:23 | 显示全部楼层 |阅读模式
  本人目前的DNF是用事件弄任务的...我需要一个仿网游的任务脚本,求求大家了...
  哥的DNF需要优化啊!
回复

使用道具 举报

550

主题

9116

帖子

214748万

积分

超级版主

如同神一般的存在,腿神!拖后腿的神~~

Rank: 8Rank: 8

积分
2147483647
发表于 2010-1-8 18:57:25 | 显示全部楼层
PM 这个人

酆城浪子

他有。
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
回复 支持 反对

使用道具 举报

15

主题

271

帖子

2198

积分

⑥精研

我要疯狂积累活跃度!

积分
2198
QQ
发表于 2010-1-9 13:37:44 | 显示全部楼层
  1. #---------------------------------------------------------------------------
  2. # 仿网游多任务系统v0.1 by秀秀
  3. #---------------------------------------------------------------------------
  4. =begin
  5.    
  6.   作者:秀秀
  7.   版本:v1.0
  8.   
  9.   [使用方法]
  10.   
  11.     在脚本开始的地方的设置常量Missions
  12.     设置好之后 调用 $scene = SceneMission.new 即可
  13.    
  14.   [Mission数据结构]  
  15.   
  16.     Mission 是一个用来存放任务的数组
  17.    
  18.     格式: Mission[任务1,任务2,任务3,任务n], 可无限设置
  19.     而Mission数组里的每个元素 又是一个数组 大小为固定size = 5
  20.    
  21.     分别为: 1.任务名称 (字符串)
  22.          
  23.             2.任务等级 (整数)
  24.             
  25.             3.任务类型和条件(数组)
  26.             
  27.                第一个元素为类型
  28.                
  29.                类型: 0 为触发式
  30.                      1 为持有物品
  31.                      2 为杀敌数一定
  32.                
  33.                第二个元素为条件
  34.                    当第一个元素为0时候
  35.                      设置为字符串(即开关名)
  36.                    当第二个元素为1时候
  37.                      设置为 hash(即某物品或者武器和数量
  38.                                  键为类型,0:物品,1:武器,2:防具)
  39.                      如{0=>[[1,3],[2,4]],1=>[[5,10]],2=>[10,12]}
  40.                      表示 物品id为1 数量3
  41.                           物品id为2 数量为4
  42.                           武器id为5,数量为10
  43.                           防具id为10,数量为12
  44.                    当第二个元素为1时候(即杀敌数量)
  45.                      设置为 hash(敌人id和数量)
  46.                      如{14=>5,6=>12,7=>8}
  47.                      表示需要干掉
  48.                         id为14敌人5次
  49.                         id为6的敌人12次
  50.                         id为7的敌人8次
  51.                         
  52.             4.任务描述(字符串)
  53.             
  54.             5.报酬(数组)
  55.               
  56.               第一个元素为金钱(整数)
  57.             
  58.               第二个元素为物品,武器,防具
  59.                 设置为 hash(即某物品或者武器和数量
  60.                             键为类型,0:物品,1:武器,2:防具)
  61.                 如:{0=>[[1,10],[2,6]],1=>[[6,8]]}
  62.                    表示 物品id为1 数量10
  63.                         物品id为2 数量为6
  64.                         武器id为6,数量为8
  65.                           
  66.             6.其他描述(字符串)
  67.                如:如此任务达成 我会帮你打开XX门
  68.                配合事件里插入脚本
  69.                $game_system.finishNameSort.include?(name)
  70.                name是任务名称
  71.                可以检测是否已经完成改任务 来判断是否打开XX门
  72.     [其他功能]
  73.            接受一个任务
  74.              MissionList.Start(name)
  75.            判断一个任务是否执行中
  76.              Mission.mission_run?(name)
  77.            提交一个任务  
  78.              Mission.checkMission(name)
  79.            判断某个任务是否完成
  80.              $game_system.finishNameSort.include?(name)
  81.             
  82.            还有一些功能就不单独描述了 具体看脚本核心部分
  83.               
  84. =end
  85. #-----------------------------------------------------------------------------
  86. # 设置任务部分
  87. #------------------------------------------------------------------------------
  88. module MissionList
  89.   Missions = [
  90.     ["对话",1,
  91.     [0,"对话01"],"去找阿尔西斯对话",[100,
  92.     {0=>[[1,5]],}],"可能就在附近,仔细找找吧"+"这信息是刷屏幕,主要测试自动换行功能"*10],
  93.     ["寻找密斯里尔剑",2,
  94.     [1,{1=>[[4,1]]}],
  95.     "也许在地图的某个角落",[0,{1=>[[1,1]],2=>[[1,1]]}],"也许在地图的某个角落"],   
  96.     ["幽灵",3,[2,{1=>5}],
  97.     "干掉5个幽灵"+"测试自动换行功能"*10,[1000,{}],""],
  98.    
  99.     ["幽灵+蜥蜴",4,[2,{1=>5,2=>5}],
  100.     "干掉5个幽灵和5个蜥蜴",[2000,
  101.     {0=>[[1,3],[2,1],[3,1]],1=>[[2,1],[3,1],[7,1]],2=>[[1,1],[2,1]]}],"丰厚的奖品哦"],
  102.     ["重复幽灵任务1",1,[2,{1=>5}],
  103.     "干掉5个幽灵",[0,{1=>[[3,5]]}],""],
  104.    
  105.     ["重复幽灵任务2",2,[2,{1=>5}],
  106.     "干掉5个幽灵",[0,{1=>[[3,5]]}],""],
  107.     ["重复幽灵任务3",3,[2,{1=>5}],
  108.     "干掉5个幽灵",[0,{1=>[[3,5]]}],""],
  109.     ["重复幽灵任务4",4,[2,{1=>5}],
  110.     "干掉5个幽灵",[0,{1=>[[3,5]]}],""],
  111.    
  112.     ["重复幽灵任务5",5,[2,{1=>5}],
  113.     "干掉5个幽灵",[0,{1=>[[3,5]]}],""],   
  114.    
  115.     ["重复幽灵任务6",6,[2,{1=>5}],
  116.     "干掉5个幽灵",[0,{1=>[[3,5]]}],""],
  117.    
  118.     ["重复幽灵任务7",7,[2,{1=>5}],
  119.     "干掉5个幽灵",[0,{1=>[[3,5]]}],""],
  120.    
  121.     ["重复幽灵任务8",8,[2,{1=>5}],
  122.     "干掉5个幽灵",[0,{1=>[[3,5]]}],""],
  123.    
  124.     ["重复幽灵任务9",9,[2,{1=>5}],
  125.     "干掉5个幽灵",[0,{1=>[[3,5]]}],""],
  126.    
  127.     ["重复幽灵任务10",10,[2,{1=>5}],
  128.     "干掉5个幽灵",[0,{1=>[[3,5]]}],""],   
  129.    
  130.     ["寻找圣剑材料",10,
  131.     [1,{0=>[[32,5],[33,8],[34,11]]}],
  132.     "寻找圣剑所需的三个材料,圣剑材料1,圣剑材料2,圣剑材料3",
  133.     [0,{1=>[[33,1]]}],"找到这些可以做圣剑"],   
  134.     ]  
  135.   module_function  
  136.   def self.Start(name)
  137.     Missions.each do |mission|
  138.       Mission.startMission(*mission) if mission[0] == name
  139.     end
  140.   end  
  141.   def canMissionList
  142.     if Missions.empty? or Missions.nil?
  143.       raise "任务没有设置好,请检查"
  144.     end  
  145.     temp = []
  146.     Missions.each do |mission|
  147.       # if $game_system.missions[mission[0]].nil?
  148.         #添加到任务列表 并设置不需要在列表里的任务
  149.         temp << mission[0] if mission[0] != "寻找圣剑材料"
  150.       # end
  151.     end  
  152.     return temp
  153.   end  
  154. end  
  155. #------------------------------------------------------------------------------
  156. # 内部类定义部分
  157. #------------------------------------------------------------------------------
  158. class Hash < Object
  159.   def soft
  160.     @temp = []
  161.     self.each_pair{|key, value| @temp << [key,value] }
  162.     return @temp
  163.   end  
  164. end  
  165. class Integer
  166.   def rStar
  167.     return "★"*self
  168.   end
  169. end  
  170. class Bitmap
  171.   def auto_line_draw_text(x,y,text,limit,height,align)
  172.     lines = text.getLines(limit)
  173.     @limit = limit
  174.     @n = 0
  175.     for i in 0...lines
  176.       @t1 = []
  177.       if lines == 1
  178.         @t1 << text
  179.       end  
  180.       if lines > 1
  181.         @t= text.split(//)
  182.         while @t1.join.size < @limit
  183.           break if @t[@n].nil?
  184.           @t1.push(@t[@n])
  185.           @n += 1
  186.         end
  187.       end  
  188.       draw_text(x,y+i*height,500,height,@t1.join,align)
  189.     end
  190.   end  
  191. end  
  192. class String
  193.   def getLines(limit)
  194.     lines = (self.length/limit).to_i
  195.     lines += 1 if self.length%limit != 0
  196.     return lines
  197.   end  
  198. end  
  199. #------------------------------------------------------------------------------
  200. # 系统重定义部分
  201. #------------------------------------------------------------------------------
  202. class Game_Battler
  203.   def dead?
  204.     if (@hp == 0 and not @immortal)
  205.      @temp_a = 0 if @temp_a == nil
  206.      if self.is_a?(Game_Enemy) and @temp_a == 0
  207.        id = self.instance_variable_get :@enemy_id
  208.        now_mission = $game_system.missionEnemyIds  #[name][id]
  209.        goal_mission = $game_system.missions        # [name].kind[1][id]
  210.        # 检索是否存在于列表中
  211.        $game_system.missionEnemyIds.keys.each do |name|
  212.          # return true if $game_system.missionEnemyIds[name] == nil
  213.          if now_mission[name][id] != nil and goal_mission[name] != nil and
  214.             now_mission[name][id] < goal_mission[name].kind[1][id]
  215.             # $game_system.missions[name].stutas == 0
  216.             $game_system.missionEnemyIds[name][id] += 1
  217.             break
  218.          end  
  219.        end
  220.        @temp_a = 1
  221.      end
  222.      return true
  223.     end
  224.   end
  225. end
  226. class Game_System
  227.   attr_accessor  :missions
  228.   #attr_accessor  :finishMissionTimes
  229.   attr_accessor  :finishMissionList
  230.   attr_accessor  :missionSwitch  
  231.   attr_accessor  :missionEnemyIds
  232.   attr_accessor  :missionNameSort
  233.   attr_accessor  :finishNameSort
  234.   alias ori_initialize initialize
  235.   def initialize
  236.     ori_initialize
  237.     @missions = {}
  238.     #@finishMissionTimes = {}
  239.     @finishMissionList = {}
  240.     @missionSwitch = {}
  241.     @missionEnemyIds = {}
  242.     @missionNameSort = []
  243.     @finishNameSort = []
  244.     @missionHouseList = []
  245.   end  
  246. end  
  247. class GetMission
  248.   attr_reader    :level
  249.   attr_reader    :kind
  250.   attr_reader    :description
  251.   attr_reader    :money
  252.   attr_reader    :items
  253.   attr_reader    :reswards_des
  254.   # attr_accessor  :stutas
  255.   def initialize(level,kind,description,rewards,rewards_des)
  256.     @level = level
  257.     @kind = kind
  258.     @description = description
  259.     @money = rewards[0]
  260.     @items = rewards[1]
  261.     @reswards_des = rewards_des
  262.   end
  263. end  
  264. class FinishMission < GetMission
  265.   attr_accessor   :times
  266.   def initialize(times,*args)
  267.     new_args = [args[0],args[1],args[2],[args[3],args[4]],args[5]]
  268.     super(*new_args)
  269.     @times = times
  270.   end  
  271. end  
  272. #----------------------------------------------------------------------------
  273. # 任务核心部分
  274. #----------------------------------------------------------------------------
  275. module Mission
  276.   module_function
  277.   def startMission(name,level,kind,description,rewards,rewards_des)
  278.     unless $game_system.missions.has_key?(name)
  279.       # 检查参数合法性
  280.       self.getError(name,level,kind,description,rewards,rewards_des)
  281.       $game_system.missions[name] = GetMission.new(
  282.          level,kind,description,rewards,rewards_des)
  283.       $game_system.missionNameSort << name unless $game_system.missionNameSort.include?(name)  
  284.       case kind[0]
  285.       when 0
  286.       # 设置开关初始状态
  287.       $game_system.missionSwitch[kind[1]] = false
  288.       when 1
  289.       # 开启了一个获得物品的任务
  290.       when 2  
  291.       # 开启了一个杀敌数的任务并设置列表
  292.       # {name1=>{id1=number,id2=number},name2={id1=number,id2=number}}
  293.       $game_system.missionEnemyIds[name] = {}
  294.       enemies = kind[1].sort
  295.       enemies.each{|id| $game_system.missionEnemyIds[name][id[0]] = 0}
  296.       end
  297.     end
  298.     return
  299.   end
  300.   
  301.   # 开启一个组合任务
  302.   #(- -,好像没必要了 可以直接接受2个或者多个无报酬任务
  303.   # 全部完成后再给报酬)
  304.   def startComboMission;end  
  305.   def getError(name,level,kind,description,rewards,rewards_des)
  306.     raise sprintf("任务:%s的参数 level 不是一个 Integer",name) unless level.kind_of?(Integer)
  307.     raise sprintf("任务:%s的参数 kind[0] 不是一个 Integer",name) unless kind[0].kind_of?(Integer)
  308.     case kind[0]
  309.       when 0
  310.       raise sprintf("任务:%s的参数 kind[1] 不是一个 String",name) unless kind[1].kind_of?(String)
  311.       when 1..2
  312.       unless (kind[1].kind_of?(Hash))
  313.         raise sprintf("任务:%s的参数 kind[1] 不是一个 Hash",name)
  314.       end   
  315.     end
  316.     raise sprintf("任务:%s的参数 description 不是一个 String",name) unless description.kind_of?(String)
  317.     raise sprintf("任务:%s的参数 rewards[0] 不是一个 Integer",name) unless rewards[0].kind_of?(Integer)
  318.     raise sprintf("任务:%s的参数 rewards[1] 不是一个 Hash",name) unless rewards[1].kind_of?(Hash)
  319.     raise sprintf("任务:%s的参数 rewards_des 不是一个 String",name) unless rewards_des.kind_of?(String)
  320.   end  
  321.   
  322.   # 接受一个或多个任务添加到任务所
  323.   def addMissionHouse(*missions)
  324.     missions.each{|a|$game_system.missionHouseList << a}
  325.   end
  326.   
  327.   # 任务所删除一个或多个任务
  328.   def deleteMissionHouse(*missions)
  329.     missions.each{|a|$game_system.missionHouseList.delete(a)}
  330.   end
  331.   
  332.   # 放弃任务 可多个  
  333.   def stopMission(*name)
  334.     name.each do |aname|
  335.       $game_system.missions.delete(aname) if $game_system.missions.include?(aname)
  336.     end
  337.   end
  338.   
  339.   # 检索任务
  340.   def checkMission(name)
  341.     # 检索是否已接了任务
  342.     if $game_system.missions[name] != nil
  343.       kind = $game_system.missions[name].kind
  344.     else
  345.       return self.missionReslut(2,name,self.message(4)){|msg|self.putsMessage(msg);return}
  346.     end  
  347.    
  348.     # 类型
  349.     case kind[0]
  350.     # 条件触发式
  351.     when 0
  352.       switch_name = $game_system.missions[name].kind[1]
  353.       if $game_system.missionSwitch[switch_name] == true
  354.         $game_system.missionSwitch.delete(name)
  355.         # 返回成功结果
  356.         return self.missionReslut(0,name,self.message(0)){|msg|self.putsMessage(msg);return}
  357.       else
  358.         # 返回未完成结果
  359.         self.missionReslut(1,name,self.message(1)){|msg|self.putsMessage(msg);return}
  360.       end  
  361.     # 持有物品
  362.     when 1
  363.       # 转化为 item格式的数组
  364.       # 如 [[1,10],[5,15]] 道具1数量10 道具5数量15
  365.         items = kind[1].select{|akind,array| akind == 0}[0][1] if kind[1][0] != nil
  366.         weapons = kind[1].select{|bkind,array| bkind == 1}[0][1] if kind[1][1] != nil
  367.         armors = kind[1].select{|ckind,array| ckind == 2}[0][1] if kind[1][2] != nil
  368.       unless items.nil?
  369.         unless self.check(name,0,items)
  370.           # 道具数量不合格
  371.           return self.missionReslut(1,name,self.message(2)){|msg|self.putsMessage(msg);return}
  372.         end  
  373.       end
  374.       unless weapons.nil?
  375.         unless self.check(name,1,weapons)
  376.           # 武器数量不合格
  377.           return self.missionReslut(1,name,self.message(2)){|msg|self.putsMessage(msg);return}
  378.         end
  379.       end
  380.       unless armors.nil?
  381.         unless self.check(name,2,armors)
  382.           # 防具数量不合格
  383.           return self.missionReslut(1,name,self.message(2)){|msg|self.putsMessage(msg);return}
  384.         end
  385.       end
  386.       # 返回成功结果
  387.       return self.missionReslut(0,name,self.message(0)){|msg|self.putsMessage(msg);return}
  388.     # 杀敌数一定  
  389.     when 2  
  390.       enemies = kind[1].soft
  391.       enemies.each do |id,number|  
  392.         if $game_system.missionEnemyIds[name][id] < number
  393.           return self.missionReslut(1,name,self.message(3)){|msg|self.putsMessage(msg);return}
  394.         end  
  395.       end
  396.       # 清空敌人id列表
  397.       $game_system.missionEnemyIds.delete(name)
  398.       # 返回成功结果
  399.       return self.missionReslut(0,name,self.message(0)){|msg|self.putsMessage(msg);return}
  400.     end  
  401.       
  402.   end  
  403.   
  404.   def message(kind)
  405.     if kind == 0
  406.       return "恭喜你任务完成,请查收奖品"
  407.     elsif kind == 1
  408.       return "似乎还未达到要求"
  409.     elsif kind == 2
  410.       return "请检查是否获得了任务所需物品和数量"
  411.     elsif kind == 3
  412.       return "任务所需杀敌数还不够"
  413.     elsif kind == 4
  414.       return "未开启的任务类型"
  415.     else
  416.       return
  417.     end  
  418.   end  
  419.   
  420.   def putsMessage(msg)
  421.     if $scene.is_a?(SceneMission)
  422.       $scene.message = msg
  423.     end
  424.     return
  425.   end  
  426.   
  427.   def check(name,kind,*args)
  428.     if kind == 0
  429.       # 任务所需物品array
  430.       items = args
  431.       # 获取现在物品
  432.       now_items = $game_party.instance_variable_get :@items
  433.       # 检查是否包含物品
  434.       ids01 = []
  435.       items[0].each{|item| ids01 << item[0]}
  436.       now_ids = now_items.keys
  437.       unless now_ids|ids01 == now_ids
  438.         return false
  439.       end
  440.       # 检查数量是否合格
  441.       items[0].each do |item|
  442.        return false if now_items[item[0]] < item[1]
  443.       end  
  444.     elsif kind == 1  
  445.       # 任务所需武器array
  446.       weapons = args
  447.       # 获取现在物品
  448.       now_weapons = $game_party.instance_variable_get :@weapons
  449.       # 检查是否包含物品
  450.       ids02 = []
  451.       weapons[0].each{|weapon| ids02 << weapon[0]}
  452.       now_ids = now_weapons.keys
  453.       unless now_ids|ids02 == now_ids
  454.         return false
  455.       end
  456.       # 检查数量是否合格
  457.       weapons[0].each do |weapon|
  458.        return false if now_weapons[weapon[0]] < weapon[1]
  459.       end  
  460.     elsif kind == 2
  461.       # 任务所需物品array
  462.       armors = args
  463.       # 获取现在物品
  464.       now_armors = $game_party.instance_variable_get :@armors
  465.       # 检查是否包含物品
  466.       ids03 = []
  467.       armors[0].each{|armor| ids03 << armor[0][0]}
  468.       now_ids = now_armors.keys
  469.       unless now_ids|ids03 == now_ids
  470.         return false
  471.       end
  472.       # 检查数量是否合格
  473.       armors[0].each do |armor|
  474.        return false if now_armors[armor[0]] < armor[1]
  475.       end  
  476.     else
  477.       
  478.     end  
  479.     # 检查通过
  480.     return true
  481.   end
  482.   #返回一种任务结果
  483.   def missionReslut(result,name,message)
  484.     case result
  485.     when 0
  486.       # 将任务转移到完成列表
  487.       self.missionMove(name)
  488.       # 获得报酬
  489.       self.getRewards(name)
  490.       # 清空任务
  491.       $game_system.missionNameSort.delete(name)
  492.       $game_system.missions.delete(name)
  493.       # 抛出任务成功信息
  494.       yield message
  495.     when 1
  496.       # 抛出未完成信息
  497.       yield message
  498.       #任务还未完成
  499.       return false
  500.     when 2  
  501.       # 抛出未完成信息
  502.       yield message
  503.       #无此任务
  504.       return false
  505.     end
  506.     return
  507.   end  
  508.   
  509.   # 转移到任务完成列表
  510.   def missionMove(name)
  511.     @mission = $game_system.missions[name]
  512.     # 保存全部实例变量
  513.     @include = ["@level","@kind","@description","@money","@items","@reswards_des"]
  514.     @include_value = []
  515.     temp = []
  516.     @include.each do |a|
  517.       if a == "@monney"
  518.         temp << a
  519.         next
  520.       end
  521.       if a == "@tiems"
  522.         temp << a
  523.         a = temp
  524.       end  
  525.       @include_value.push @mission.instance_variable_get eval(":"+a)
  526.     end  
  527.     if $game_system.finishMissionList.include? name
  528.       # 任务名称=>完成次数
  529.       # 如果包含 完成次数+1
  530.       $game_system.finishMissionList[name].times += 1
  531.     else
  532.       # 如果不包含 建立一个完成任务的列表
  533.       $game_system.finishNameSort.push(name) unless $game_system.finishNameSort.include?(name)
  534.       $game_system.finishMissionList[name] = FinishMission.new(1,*@include_value)
  535.     end
  536.     return
  537.   end
  538.   
  539.   # 获取报酬
  540.   def getRewards(name)
  541.      return if $game_system.missions[name] == nil
  542.      # [金钱,{种类1=>[[ID1,数量],[ID2,数量]],种类2=>[[ID1,数量],[ID2,数量]]}]
  543.      money = $game_system.missions[name].money
  544.      items = $game_system.missions[name].items
  545.      # 获取赏金
  546.      self.get_money(money) if money != 0
  547.      # 获得物品
  548.      if items[0] != nil
  549.        items[0].each{|id,number|
  550.        $game_party.send :gain_item,id,number
  551.        }
  552.      end  
  553.      # 获得武器
  554.      if items[1] != nil
  555.        items[1].each{|id,number|
  556.        $game_party.send :gain_weapon,id,number
  557.        }
  558.      end  
  559.      # 获得防具
  560.      if items[2] != nil
  561.        items[2].each{|id,number|
  562.        $game_party.send :gain_armor,id,number
  563.        }
  564.      end  
  565.      return
  566.   end  
  567.   
  568.   def get_money(n)
  569.     $game_party.send :gain_gold,n
  570.   end  
  571.   
  572.   # *mission 可接收多个任务名称作为参数
  573.   def mission_finished?(*missions)
  574.     # return $game_system.finishMissionList.keys | missions
  575.     missions.each do |mission|
  576.       return false unless $game_system.finishMissionList.has_key?(mission)
  577.     end  
  578.     return true
  579.   end
  580.   
  581.   # 检查mission是否正在执行
  582.   def mission_run?(*missions)
  583.     #p missions
  584.     #p $game_system.missions
  585.     missions.each do |mission|
  586.       return false unless $game_system.missions.has_key?(mission)
  587.     end  
  588.     return true
  589.     # p $game_system.missions.keys | missions
  590.     # return $game_system.missions.keys | missions
  591.   end  
  592.   
  593.   # 获取当前任务数量
  594.   def mission_counts
  595.     return $game_system.missions.length
  596.   end  
  597.   
  598. end  
  599. #-----------------------------------------------------------------------------
  600. # 菜单部分
  601. #-----------------------------------------------------------------------------
  602. # 任务所主菜单
  603. class WindowMissionMain < Window_Selectable
  604.   def initialize
  605.     super(240,100,160,160)
  606.     self.contents = Bitmap.new(width - 32, height - 32)
  607.     @item_max = 4
  608.     @column_max = 1
  609.     self.opacity = 255
  610.     refresh
  611.     self.index = 0
  612.   end
  613.   #--------------------------------------------------------------------------
  614.   # ● 刷新
  615.   #--------------------------------------------------------------------------
  616.   def refresh
  617.     self.contents.clear
  618.     self.contents.draw_text(0,0,200,32,"接受任务",0)
  619.     self.contents.draw_text(0,32,200,32,"提交任务",0)
  620.     self.contents.draw_text(0,32*2,200,32,"查看任务",0)
  621.     self.contents.draw_text(0,32*3,200,32,"完成列表",0)
  622.   end
  623. end
  624. # 可接受任务的列表
  625. class WindowCanAcceptList < Window_Selectable
  626.   def initialize
  627.     super(70,60,500,360)
  628.     @width = width
  629.     @column_max = 1
  630.     self.opacity = 255
  631.     self.visible = false
  632.     self.index = 0
  633.   end
  634.   #--------------------------------------------------------------------------
  635.   # ● 刷新
  636.   #--------------------------------------------------------------------------
  637.   def refresh(*list)
  638.     self.contents.clear if self.contents != nil
  639.     self.contents = Bitmap.new(@width - 32, list.size * 32+32)
  640.     @item_max = list.size
  641.     for i in list
  642.       MissionList::Missions.each do |mission|
  643.         if  mission[0] == i
  644.           @level = mission[1]
  645.           @name = i
  646.           break
  647.         end
  648.       end
  649.       pos = list.index(i)
  650.       if $game_system.missions[@name] != nil
  651.         self.contents.font.color = disabled_color
  652.       else
  653.         self.contents.font.color = normal_color
  654.       end
  655.       self.contents.draw_text(0,pos*32,200,32,i,0)
  656.       self.contents.draw_text(220,pos*32,200,32,@level.rStar,0)
  657.     end
  658.   end
  659. end
  660. # 任务中的列表
  661. class WindowAccetpedList < Window_Selectable
  662.   def initialize
  663.     super(70,60,500,360)
  664.     @width = width
  665.     @column_max = 1
  666.     self.opacity = 255
  667.     self.visible = false
  668.     self.index = 0
  669.   end
  670.   #--------------------------------------------------------------------------
  671.   # ● 刷新
  672.   #--------------------------------------------------------------------------
  673.   def refresh(*list)
  674.     return if list.empty?
  675.     self.contents.clear if self.contents != nil
  676.     self.contents = Bitmap.new(@width - 32, list.size * 32)
  677.     @item_max = list.size
  678.     for i in list
  679.       levels = $game_system.missions[i].level.rStar
  680.       pos = list.index(i)
  681.       self.contents.draw_text(0,pos*32,200,32,i,0)
  682.       self.contents.draw_text(220,pos*32,200,32,levels,0)
  683.     end
  684.   end
  685. end
  686. # 任务完成的列表
  687. class WindowFinishList < Window_Selectable
  688.   def initialize
  689.     super(70,60,500,360)
  690.     @width = width
  691.     @column_max = 1
  692.     self.visible = false
  693.     self.opacity = 255
  694.     self.index = 0
  695.   end
  696.   #--------------------------------------------------------------------------
  697.   # ● 刷新
  698.   #--------------------------------------------------------------------------
  699.   def refresh(*list)
  700.     return if list.empty?
  701.     self.contents.clear if self.contents != nil
  702.     self.contents = Bitmap.new(@width - 32,list.size * 32)
  703.     @item_max = list.size
  704.     for i in list
  705.       level = $game_system.finishMissionList[i].level.rStar
  706.       pos = list.index(i)
  707.       self.contents.draw_text(0,pos*32,200,32,i,0)
  708.       self.contents.draw_text(220,pos*32,200,32,level,0)
  709.     end
  710.   end
  711. end  
  712. # 任务描述窗口
  713. class WindowMissionDes < Window_Base
  714.   TEXT = ["[任务等级]","[任务条件]","[任务描述]","[任务报酬]","[其他]"]
  715.   TEXT2 = "接受任务请按确定键,返回上级菜单按取消键"
  716.   def initialize
  717.     super(70,40,500,400)
  718.     @viewport = Viewport.new(70,40+64,500,400-64)
  719.     @viewport.z = self.z + 1
  720.     self.visible = false
  721.     self.contents = Bitmap.new(width-32,64)
  722.   end
  723.   
  724.   def update
  725.     super
  726.     if self.active
  727.       if @text != nil
  728.         @text.x > - 300 ? @text.x -= 2 : @text.x = 650
  729.       end  
  730.       case Input.dir4
  731.       when 2
  732.         move_block(0)
  733.         move_bar(1)
  734.       when 8
  735.         move_block(1)
  736.         move_bar(0)
  737.       end
  738.     end   
  739.   end  
  740.   
  741.   def nVisible
  742.     if self.visible == true
  743.       @sprite.visible = true if @sprite != nil
  744.       @bar.visible = true if @bar != nil
  745.       #@text.visible = true if @text != nil
  746.     end
  747.     if self.visible == false
  748.       @sprite.visible = false if @sprite != nil
  749.       @bar.visible = false if @bar != nil
  750.       @text.visible = false if @text != nil
  751.     end  
  752.   end  
  753.    
  754.   def dispose
  755.     super
  756.     @sprite.dispose if @sprite != nil
  757.     @bar.dispose if @bar != nil
  758.     @text.dispose if @text != nil
  759.   end  
  760.   
  761.   def move_block(kind)
  762.     if kind == 0
  763.       @sprite.y -= 4
  764.     end
  765.     if kind == 1
  766.       @sprite.y += 4
  767.     end  
  768.   end
  769.   
  770.   def move_bar(kind)
  771.     if kind == 0
  772.       @bar.y -= (4/@rate).to_f if @bar.y > 112
  773.     end
  774.     if kind == 1
  775.       @bar.y += (4/@rate).to_f if @bar.y < 400 - @bar.bitmap.height
  776.     end   
  777.   end  
  778.   
  779.   def getColor(n)
  780.     if n == 0
  781.       return Color.new(255,255,255,255)
  782.     elsif n == 1
  783.       return Color.new(255,255,0,255)
  784.     elsif n == 2
  785.       return Color.new(255,0,0,255)
  786.     elsif n == 3
  787.       return Color.new(128,128,128,255)
  788.     else
  789.       
  790.     end
  791.   end  
  792.   
  793.   def refresh(name,listKind)
  794.     raise "listKind参数设置不正确" unless [0,1,2].include? listKind
  795.     self.contents.clear
  796.     # bitmap.clear if bitmap != nil
  797.     @sprite.dispose if @sprite != nil
  798.     @bar.dispose if @bar != nil
  799.     @name = name
  800.     # 可接受列表
  801.     if listKind == 0   
  802.       MissionList::Missions.each do |mission|
  803.         if mission[0] == @name
  804.           @mission = mission
  805.           break
  806.         end  
  807.       end  
  808.       
  809.       #mission_name                        = @mission[0]
  810.       level                               = @mission[1]
  811.       kind                                = @mission[2][0]
  812.       condition                           = @mission[2][1]
  813.       description                         = @mission[3]
  814.       money                               = @mission[4][0]
  815.       @mission[4][1][0] != nil ? item     = @mission[4][1][0] : item = "无"
  816.       @mission[4][1][1] != nil ? weapon   = @mission[4][1][1] : weapon = "无"
  817.       @mission[4][1][2] != nil ? armor    = @mission[4][1][2] : armor = "无"
  818.       reward_des                          = @mission[5]
  819.     end
  820.    
  821.    
  822.     # 任务中列表
  823.     if listKind == 1
  824.       $game_system.missionNameSort.each do |mission|
  825.         if mission == @name
  826.           @mission = $game_system.missions[@name]
  827.           break
  828.         end  
  829.       end  
  830.       #mission_name                        = @mission.name
  831.       level                               = @mission.level
  832.       kind                                = @mission.kind[0]
  833.       condition                           = @mission.kind[1]
  834.       description                         = @mission.description
  835.       money                               = @mission.money
  836.       @mission.items[0] != nil ? item     = @mission.items[0] : item = "无"
  837.       @mission.items[1] != nil ? weapon   = @mission.items[1] : weapon = "无"
  838.       @mission.items[2] != nil ? armor    = @mission.items[2] : armor = "无"
  839.       reward_des                          = @mission.reswards_des
  840.     end  
  841.    
  842.    
  843.     # 完成列表
  844.     if listKind == 2
  845.       $game_system.finishNameSort.each do |mission|
  846.         if mission == @name
  847.           @mission = $game_system.finishMissionList[@name]
  848.           break
  849.         end  
  850.       end  
  851.       #mission_name                       = @mission.name
  852.       finish_times                        = @mission.times
  853.       level                               = @mission.level
  854.       kind                                = @mission.kind[0]
  855.       condition                           = @mission.kind[1]
  856.       description                         = @mission.description
  857.       money                               = @mission.money
  858.       @mission.items[0] != nil ? item     = @mission.items[0] : item = "无"
  859.       @mission.items[1] != nil ? weapon   = @mission.items[1] : weapon = "无"
  860.       @mission.items[2] != nil ? armor    = @mission.items[2] : armor = "无"
  861.       reward_des                          = @mission.reswards_des
  862.     end  
  863.       
  864.       self.contents.font.color = getColor(2)
  865.       self.contents.draw_text(0,0,450-32,32,"【"+name+"】",1)
  866.       if listKind == 2
  867.         self.contents.font.color = getColor(1)
  868.         self.contents.draw_text(0,20,450-32,32,"完成次数:#{finish_times}",1)
  869.       end
  870.       self.contents.fill_rect(16,48,450,2,getColor(0))
  871.       
  872.       # 开始计算Bitmap的height
  873.       @height = 11
  874.       
  875.       case kind
  876.       when 0
  877.         # 40个字节一行计算
  878.         condition == "" ? @height += 1 : @height += condition.getLines(40)
  879.       when 1
  880.         @height += condition[0].size if condition[0] != nil
  881.         @height += condition[1].size if condition[1] != nil
  882.         @height += condition[2].size if condition[2] != nil
  883.       when 2
  884.         @height += condition.size
  885.       end  
  886.       description == "" ? @height += 1 : @height += description.getLines(40) + 1
  887.       
  888.       if listKind == 0
  889.         # 计算若无报酬的情况
  890.         @mission[4][1][0] == nil ? @height += 1 : @height += @mission[4][1][0].size
  891.         @mission[4][1][1] == nil ? @height += 1 : @height += @mission[4][1][1].size
  892.         @mission[4][1][2] == nil ? @height += 1 : @height += @mission[4][1][2].size
  893.       end
  894.       
  895.       if listKind == 1
  896.         item == "无" ? @height += 1 : @height += item.size
  897.         weapon == "无" ? @height += 1 : @height += weapon.size
  898.         armor == "无" ? @height += 1 : @height += armor.size
  899.       end
  900.       if listKind == 2
  901.       end
  902.       
  903.       reward_des == "" ? @height += 1 : @height += reward_des.getLines(40)
  904.       # 设置滚动字幕
  905.       if listKind == 0
  906.         @text = Sprite.new
  907.         @text.bitmap = Bitmap.new(640,32)
  908.         @text.bitmap.draw_text(0,0,640,32,TEXT2,0)
  909.         @text.x,@text.y,@text.ox,@text.oy = 650,0,0,0
  910.       end
  911.         
  912.       # 计算滚动条
  913.       barHeight = 100
  914.       @rate = 2
  915.       #@rate = ((@height * 32) / barHeight).to_f
  916.       #if @rate >= 1
  917.       #  barHeight = (barHeight/@rate).to_f
  918.       #end
  919.       bitmapBar = Bitmap.new(12,barHeight)
  920.       bitmapBar.fill_rect(0,0,bitmapBar.width,bitmapBar.height,getColor(0))
  921.       @bar = Sprite.new
  922.       @bar.bitmap = bitmapBar
  923.       @bar.x,@bar.y,@bar.z,@bar.ox,@bar.oy = 490,112,self.z+2,0,0
  924.       
  925.       # 设置显示内容矩形
  926.       bitmap = Bitmap.new(500-32,@height*32)
  927.       
  928.       @sprite = Sprite.new(@viewport)
  929.       @sprite.x,@sprite.y,@sprite.ox,@sprite.oy = 40,0,0,0
  930.       @sprite.bitmap = bitmap
  931.       
  932.       @sprite.bitmap.font.color = getColor(1)
  933.       @sprite.bitmap.draw_text(0,0,468,32,TEXT[0],0)
  934.       @sprite.bitmap.font.color = getColor(0)
  935.       @sprite.bitmap.draw_text(0,32,468,32,level.rStar,0)
  936.       @sprite.bitmap.font.color = getColor(1)
  937.       @sprite.bitmap.draw_text(0,32*2,468,32,TEXT[1],0)
  938.       @sprite.bitmap.font.color = getColor(0)
  939.       # 完成事件的情况
  940.       if kind == 0
  941.         @sprite.bitmap.auto_line_draw_text(0,32*3,"无",40,32,0)
  942.         if condition.getLines(40) == 0
  943.           next_line = 32*4
  944.         else  
  945.           next_line = 32*(3+condition.getLines(40))
  946.         end
  947.       end  
  948.       
  949.       # 取得物品的情况
  950.       if kind == 1
  951.         tem01 = 0
  952.         pos = 0
  953.         if condition[0] != nil
  954.           condition[0].each do |id,number|
  955.             pos = condition[0].index([id,number])
  956.             name = $data_items[id].name
  957.             icon_name = $data_items[id].icon_name
  958.             
  959.             # blt(x, y, src_bitmap, src_rect[, opacity])
  960.             bt = RPG::Cache.icon(icon_name)
  961.             rect1 = Rect.new(0,32*3+pos*32,24,24)
  962.             rect2 = Rect.new(0,0,bt.width,bt.height)
  963.             @sprite.bitmap.stretch_blt(rect1,bt,rect2)
  964.             
  965.             @sprite.bitmap.draw_text(64,32*3+pos*32,400,32,name,0)
  966.             case listKind
  967.             when 0,2
  968.               @sprite.bitmap.draw_text(300,32*3+pos*32,100,32,"x"+number.to_s,0)
  969.             when 1
  970.               now_items = $game_party.instance_variable_get :@items
  971.               now_number = (now_items[id].nil? ? 0 : now_items[id])
  972.               @sprite.bitmap.draw_text(250,32*3+pos*32,100,32,now_number.to_s+"/"+number.to_s,0)
  973.             when 2
  974.             end
  975.             
  976.           end  
  977.           tem01 += condition[0].size
  978.         end  
  979.         if condition[1] != nil
  980.           condition[1].each do |id,number|
  981.             pos = condition[1].index([id,number]) + tem01
  982.             name = $data_weapons[id].name
  983.             icon_name = $data_weapons[id].icon_name
  984.             
  985.             bt = RPG::Cache.icon(icon_name)
  986.             rect1 = Rect.new(0,32*3+pos*32,24,24)
  987.             rect2 = Rect.new(0,0,bt.width,bt.height)
  988.             @sprite.bitmap.stretch_blt(rect1,bt,rect2)
  989.             
  990.             case listKind
  991.             when 0,2
  992.               @sprite.bitmap.draw_text(64,32*3+pos*32,400,32,name,0)
  993.               @sprite.bitmap.draw_text(300,32*3+pos*32,100,32,"x"+number.to_s,0)
  994.             when 1
  995.               now_weapons = $game_party.instance_variable_get :@weapons
  996.               now_number = (now_weapons[id].nil? ? 0 : now_weapons[id])
  997.               @sprite.bitmap.draw_text(300,32*3+pos*32,100,32,now_number.to_s+"/"+number.to_s,0)
  998.             when 2
  999.             end
  1000.           end  
  1001.           tem01 += condition[1].size
  1002.         end  
  1003.         if condition[2] != nil
  1004.           p condition[2]
  1005.           condition[2].each do |id,number|
  1006.             pos = condition[2].index([id,number]) + tem01
  1007.             name = $data_armors[id].name
  1008.             icon_name = $data_armors[id].icon_name
  1009.             
  1010.             bt = RPG::Cache.icon(icon_name)
  1011.             rect1 = Rect.new(0,32*3+pos*32,24,24)
  1012.             rect2 = Rect.new(0,0,bt.width,bt.height)
  1013.             @sprite.bitmap.stretch_blt(rect1,bt,rect2)
  1014.             
  1015.            case listKind
  1016.             when 0,2
  1017.               @sprite.bitmap.draw_text(64,32*3+pos*32,400,32,name,0)
  1018.               @sprite.bitmap.draw_text(300,32*3+pos*32,100,32,"x"+number.to_s,0)
  1019.             when 1
  1020.               now_armors = $game_party.instance_variable_get :@armors
  1021.               now_number = (now_armors[id].nil? ? 0 : now_armors[id])
  1022.               @sprite.bitmap.draw_text(300,32*3+pos*32,100,32,now_number.to_s+"/"+number.to_s,0)
  1023.             when 2
  1024.             end
  1025.           end  
  1026.           tem01 += condition[2].size
  1027.         end  
  1028.           next_line = 32*(3+tem01)
  1029.       end
  1030.         
  1031.       # 杀敌的情况
  1032.       if kind == 2
  1033.         pos01 = 0
  1034.         condition.sort.each do |id,number|
  1035.           pos01 = condition.sort.index([id,number])
  1036.           name = $data_enemies[id].name
  1037.           @sprite.bitmap.draw_text(0,32*3+pos01*32,400,32,name,0)
  1038.          case listKind
  1039.           when 0,2
  1040.             @sprite.bitmap.draw_text(300,32*3+pos01*32,100,32,"x"+number.to_s,0)
  1041.           when 1
  1042.             if $game_system.missionEnemyIds[@name][id] == nil
  1043.               now_number = 0
  1044.             else
  1045.               now_number = $game_system.missionEnemyIds[@name][id]
  1046.             end
  1047.             @sprite.bitmap.draw_text(300,32*3+pos01*32,100,32,now_number.to_s+"/"+number.to_s,0)
  1048.           end  
  1049.         end  
  1050.         next_line = 32*(3+condition.sort.size)
  1051.       end  
  1052.       @sprite.bitmap.font.color = getColor(1)
  1053.       @sprite.bitmap.draw_text(0,next_line,400,32,TEXT[2],0)
  1054.       
  1055.       @sprite.bitmap.font.color = getColor(0)
  1056.       @sprite.bitmap.auto_line_draw_text(0,next_line+32,description,40,32,0)
  1057.       
  1058.       if description.getLines(40) == 0
  1059.         next_line = next_line+32*2
  1060.       else  
  1061.         next_line = (next_line+32)+32*description.getLines(40)
  1062.       end
  1063.       
  1064.       @sprite.bitmap.font.color = getColor(1)
  1065.       @sprite.bitmap.draw_text(0,next_line,400,32,TEXT[3],0)
  1066.       
  1067.       # 分割线
  1068.       @sprite.bitmap.fill_rect(0,next_line+48,250,1,getColor(0))
  1069.       @sprite.bitmap.font.color = getColor(0)
  1070.       
  1071.       @sprite.bitmap.draw_text(0,next_line+32*2,400,32,"[金钱]",0)
  1072.       @sprite.bitmap.draw_text(0,next_line+32*3,150,32,money.to_s+"G",0)
  1073.       
  1074.       @sprite.bitmap.draw_text(0,next_line+32*4,400,32,"[道具]",0)
  1075.       next_line = next_line+32*5
  1076.       
  1077.       
  1078.       tem02 = 0
  1079.       if item == "无"
  1080.         @sprite.bitmap.draw_text(0,next_line,400,32,item,0)
  1081.         tem02 += 1
  1082.       else
  1083.         item.each do |id,number|
  1084.           name = $data_items[id].name
  1085.           pos02 = item.index([id,number])
  1086.           icon_name = $data_items[id].icon_name
  1087.             
  1088.           bt = RPG::Cache.icon(icon_name)
  1089.           rect1 = Rect.new(0,next_line+pos02*32,24,24)
  1090.           rect2 = Rect.new(0,0,bt.width,bt.height)
  1091.           @sprite.bitmap.stretch_blt(rect1,bt,rect2)
  1092.           @sprite.bitmap.draw_text(64,next_line+pos02*32,400,32,name,0)
  1093.           @sprite.bitmap.draw_text(300,next_line+pos02*32,100,32,"x"+number.to_s,0)
  1094.         end  
  1095.         tem02 += item.size
  1096.       end  
  1097.       next_line += tem02*32
  1098.       
  1099.       @sprite.bitmap.draw_text(0,next_line,400,32,"[武器]",0)
  1100.       next_line += 32
  1101.       
  1102.       tem03 = 0
  1103.       if weapon == "无"
  1104.         @sprite.bitmap.draw_text(0,next_line,400,32,weapon,0)
  1105.         tem03 += 1
  1106.       else
  1107.         weapon.each do |id,number|
  1108.           name = $data_weapons[id].name
  1109.           pos03 = weapon.index([id,number])
  1110.           icon_name = $data_weapons[id].icon_name
  1111.             
  1112.           bt = RPG::Cache.icon(icon_name)
  1113.           rect1 = Rect.new(0,next_line+pos03*32,24,24)
  1114.           rect2 = Rect.new(0,0,bt.width,bt.height)
  1115.           @sprite.bitmap.stretch_blt(rect1,bt,rect2)
  1116.           @sprite.bitmap.draw_text(64,next_line+pos03*32,400,32,name,0)
  1117.           @sprite.bitmap.draw_text(300,next_line+pos03*32,100,32,"x"+number.to_s,0)
  1118.         end  
  1119.         tem03 += weapon.size
  1120.       end
  1121.       next_line += tem03*32
  1122.       
  1123.       @sprite.bitmap.draw_text(0,next_line,400,32,"[防具]",0)
  1124.       next_line += 32
  1125.       
  1126.       tem04 = 0
  1127.       if armor == "无"
  1128.         @sprite.bitmap.draw_text(0,next_line,400,32,armor,0)
  1129.         tem04 += 1
  1130.       else
  1131.         armor.each do |id,number|
  1132.           name = $data_armors[id].name
  1133.           pos04 = armor.index([id,number])
  1134.           icon_name = $data_armors[id].icon_name
  1135.          
  1136.           bt = RPG::Cache.icon(icon_name)
  1137.           rect1 = Rect.new(0,next_line+pos04*32,24,24)
  1138.           rect2 = Rect.new(0,0,bt.width,bt.height)
  1139.           @sprite.bitmap.stretch_blt(rect1,bt,rect2)
  1140.          
  1141.           @sprite.bitmap.draw_text(64,next_line+pos04*32,400,32,name,0)
  1142.           @sprite.bitmap.draw_text(300,next_line+pos04*32,100,32,"x"+number.to_s,0)
  1143.         end  
  1144.         tem04 += armor.size
  1145.       end
  1146.       next_line += tem04*32
  1147.       
  1148.       @sprite.bitmap.font.color = getColor(1)
  1149.       @sprite.bitmap.draw_text(0,next_line,400,32,TEXT[4],0)
  1150.       @sprite.bitmap.font.color = getColor(0)
  1151.       next_line += 32
  1152.       
  1153.       @sprite.bitmap.auto_line_draw_text(0,next_line,reward_des,40,32,0)
  1154.   end  
  1155. end   
  1156. #-----------------------------------------------------------------------------
  1157. # 场景部分
  1158. #-----------------------------------------------------------------------------
  1159. class SceneMission
  1160.   attr_accessor     :message
  1161.   attr_accessor     :reward_list
  1162.   def main
  1163.     # 外部接口
  1164.     @message = ""
  1165.     @reward_list = {}
  1166.     @spriteset = Spriteset_Map.new
  1167.     @main_window = WindowMissionMain.new
  1168.     @main_window.active = true
  1169.     @can_accept = WindowCanAcceptList.new
  1170.     @can_accept.active = false
  1171.     @accepted = WindowAccetpedList.new
  1172.     @accepted.active = false
  1173.     @finished = WindowFinishList.new
  1174.     @finished.active = false
  1175.     @window_des = WindowMissionDes.new
  1176.     @window_des.active = false
  1177.     @result = Window_Help.new
  1178.     @result.active = false
  1179.     @result.visible = false
  1180.     @result.x,@result.y,@result.z = 0,200,@window_des.z+100
  1181.     # @yes_or_no = WindowYesOrNo.new
  1182.     Graphics.transition
  1183.     loop do
  1184.       Graphics.update
  1185.       Input.update
  1186.       update
  1187.       if $scene != self
  1188.         break
  1189.       end
  1190.     end
  1191.     Graphics.freeze
  1192.     @main_window.dispose
  1193.     @can_accept.dispose
  1194.     @accepted.dispose
  1195.     @finished.dispose
  1196.     @window_des.dispose
  1197.     @result.dispose
  1198.     @spriteset.dispose
  1199.   end
  1200.   
  1201.   def update
  1202.     return update_main if @main_window.active
  1203.     return update_can_accept if @can_accept.active
  1204.     return update_accepted if @accepted.active
  1205.     return update_finished if @finished.active
  1206.     return update_window_des if @window_des.active
  1207.     return update_result if @result.active
  1208.   end  
  1209.   def update_main
  1210.     @main_window.update
  1211.     if Input.trigger?(Input::B)
  1212.       $game_system.se_play($data_system.cancel_se)
  1213.       $scene = Scene_Map.new
  1214.       return
  1215.     end  
  1216.     if Input.trigger?(Input::C)
  1217.       $game_system.se_play($data_system.decision_se)
  1218.       @main_window.visible = false
  1219.       @main_window.active = false
  1220.       case @main_window.index
  1221.       when 0 # 接受
  1222.         @can_accept.active = true
  1223.         @can_accept.visible = true
  1224.         @can_accept.refresh(*MissionList.canMissionList)
  1225.         @can_accept.index = 0
  1226.         return
  1227.       when 1 # 提交
  1228.         @accepted.active = true
  1229.         @accepted.visible = true
  1230.         @accepted.refresh(*$game_system.missionNameSort)
  1231.         @accepted.index = 0
  1232.         return
  1233.       when 2 # 查看
  1234.         @accepted.active = true
  1235.         @accepted.visible = true
  1236.         @accepted.refresh(*$game_system.missionNameSort)
  1237.         @accepted.index = 0
  1238.         return
  1239.       when 3 # 完成
  1240.         @finished.active = true
  1241.         @finished.visible = true
  1242.         @finished.refresh(*$game_system.finishNameSort)
  1243.         @finished.index = 0
  1244.         return
  1245.       end
  1246.     end
  1247.   end
  1248.   def update_can_accept
  1249.     @can_accept.update
  1250.     if Input.trigger?(Input::B)
  1251.       $game_system.se_play($data_system.cancel_se)
  1252.       @can_accept.active = false
  1253.       @can_accept.visible = false
  1254.       
  1255.       @main_window.visible = true
  1256.       @main_window.active = true
  1257.       # @main_window.index = 0
  1258.       return
  1259.     end  
  1260.     if Input.trigger?(Input::C)
  1261.       $game_system.se_play($data_system.decision_se)
  1262.       name = MissionList.canMissionList[@can_accept.index]
  1263.       return if $game_system.missions[name] != nil
  1264.       
  1265.       @can_accept.active = false
  1266.       @can_accept.visible = false
  1267.       
  1268.       @window_des.visible = true
  1269.       @window_des.refresh(MissionList.canMissionList[@can_accept.index],0)
  1270.       @window_des.active = true
  1271.       return
  1272.     end
  1273.   end  
  1274.   # 接受了的列表
  1275.   def update_accepted
  1276.     @accepted.update
  1277.     if Input.trigger?(Input::B)
  1278.       $game_system.se_play($data_system.cancel_se)
  1279.       @accepted.active = false
  1280.       @accepted.visible = false
  1281.       
  1282.       @main_window.visible = true
  1283.       @main_window.active = true
  1284.       # @main_window.index = 0
  1285.     end  
  1286.    
  1287.     if Input.trigger?(Input::C)
  1288.       $game_system.se_play($data_system.decision_se)
  1289.       
  1290.       case @main_window.index
  1291.       when 1 #提交 检索任务
  1292.         return if $game_system.missionNameSort[@accepted.index].nil?
  1293.         Mission.checkMission($game_system.missionNameSort[@accepted.index])
  1294.         @accepted.active = false
  1295.         @result.set_text(@message,1)
  1296.         @result.active = true
  1297.         @result.visible = true
  1298.         
  1299.       when 2
  1300.         if $game_system.missionNameSort[@accepted.index].nil?
  1301.           return
  1302.         end  
  1303.         @accepted.active = false
  1304.         @accepted.visible = false
  1305.         
  1306.         @window_des.active = true
  1307.         @window_des.visible = true
  1308.         
  1309.         @window_des.refresh($game_system.missionNameSort[@accepted.index],1)
  1310.       when 3
  1311.       end
  1312.     end
  1313.   end  
  1314.   
  1315.   # 完成了的列表
  1316.   def update_finished
  1317.     @finished.update
  1318.     if Input.trigger?(Input::C)
  1319.       return if $game_system.finishNameSort[@finished.index].nil?
  1320.       $game_system.se_play($data_system.decision_se)
  1321.       @finished.active = false
  1322.       @finished.visible = false
  1323.         
  1324.       @window_des.active = true
  1325.       @window_des.visible = true
  1326.         
  1327.       @window_des.refresh($game_system.finishNameSort[@finished.index],2)
  1328.       return
  1329.     end
  1330.     if Input.trigger?(Input::B)
  1331.       $game_system.se_play($data_system.cancel_se)
  1332.       @finished.active = false
  1333.       @finished.visible = false
  1334.       
  1335.       @main_window.visible = true
  1336.       @main_window.active = true
  1337.       # @main_window.index = 0
  1338.       return
  1339.     end
  1340.   end
  1341.   
  1342.   def update_window_des
  1343.     @window_des.update
  1344.     if Input.trigger?(Input::C)
  1345.       case @main_window.index
  1346.       when 0
  1347.         $game_system.se_play($data_system.decision_se)
  1348.         @window_des.active = false
  1349.         @result.active = true
  1350.         name = MissionList.canMissionList[@can_accept.index]
  1351.         MissionList.Start(name)
  1352.         @result.set_text("接受了任务" + name,1)
  1353.       when 1 # 提交任务
  1354.       when 2 # 查看任务
  1355.       when 3 # 完成列表
  1356.       end
  1357.       return
  1358.     end
  1359.     if Input.trigger?(Input::B)
  1360.       $game_system.se_play($data_system.cancel_se)
  1361.       @window_des.visible = false
  1362.       @window_des.active = false
  1363.       @window_des.nVisible
  1364.       case @main_window.index
  1365.       # 接受
  1366.       when 0
  1367.         @can_accept.active = true
  1368.         @can_accept.visible = true
  1369.         return
  1370.       # 提交  
  1371.       when 2
  1372.         @accepted.active = true
  1373.         @accepted.visible = true
  1374.         return
  1375.       when 3
  1376.         @finished.active = true
  1377.         @finished.visible = true
  1378.       end  
  1379.     end
  1380.   end  
  1381.   def update_result
  1382.     if Input.trigger?(Input::C)
  1383.       $game_system.se_play($data_system.decision_se)
  1384.       
  1385.       @result.active = false
  1386.       @result.visible = false
  1387.       
  1388.       @window_des.visible = false
  1389.       @window_des.nVisible
  1390.       @can_accept.visible = false
  1391.       @accepted.visible = false
  1392.       @finished.visible = false
  1393.       
  1394.       @main_window.visible = true
  1395.       @main_window.active = true
  1396.       @main_window.index = 0
  1397.       
  1398.       return
  1399.     end  
  1400.     @result.update
  1401.   end
  1402. end
  1403. #-----------------------------------------------------------------------------
  1404. # 结束
  1405. #-----------------------------------------------------------------------------
复制代码
紫月光流奈河畔, 孤影独行笑苍天。 酆都倒比人间好, 从此慕鬼不羡仙!
回复 支持 反对

使用道具 举报

15

主题

271

帖子

2198

积分

⑥精研

我要疯狂积累活跃度!

积分
2198
QQ
发表于 2010-1-9 13:48:01 | 显示全部楼层
这是脚本,原来的范例被我删掉了,

事件中“脚本:$scene = SceneMission.new”是调用任务菜单。

“脚本:if Mission.mission_run?("对话")
  $game_system.missionSwitch["对话01"] =
true
end”是对话任务的目标人物。

其他任务调用忘记了。这个脚本不推荐没脚本基础的使用。要改的地方非常多,还很麻烦。

可以去下载我分享的那个任务详尽说明+跨地图航海。

好用,看得懂,新老手全都可以上手使用。就是设置比较麻烦。
紫月光流奈河畔, 孤影独行笑苍天。 酆都倒比人间好, 从此慕鬼不羡仙!
回复 支持 反对

使用道具 举报

550

主题

9116

帖子

214748万

积分

超级版主

如同神一般的存在,腿神!拖后腿的神~~

Rank: 8Rank: 8

积分
2147483647
发表于 2010-1-9 17:44:03 | 显示全部楼层
LS。。看看代码应该怎么发。。。。
我就是你们的神,庶民们,追随我吧!跟着我一起拖后腿!
回复 支持 反对

使用道具 举报

15

主题

271

帖子

2198

积分

⑥精研

我要疯狂积累活跃度!

积分
2198
QQ
发表于 2010-1-10 21:50:01 | 显示全部楼层
那个,没看过的说。。。下次注意。。
紫月光流奈河畔, 孤影独行笑苍天。 酆都倒比人间好, 从此慕鬼不羡仙!
回复 支持 反对

使用道具 举报

4

主题

19

帖子

160

积分

③业余

积分
160
QQ
 楼主| 发表于 2010-1-11 12:48:01 | 显示全部楼层
谢谢了!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2024-5-15 17:01 , Processed in 0.025639 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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