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

Project1

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

[有事请教] 请问这个任务系统如何显示图片呢谢谢啦

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1188
在线时间
170 小时
注册时间
2020-9-19
帖子
23
跳转到指定楼层
1
发表于 2024-5-5 22:36:33 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

x


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

Lv3.寻梦者

梦石
0
星屑
1188
在线时间
170 小时
注册时间
2020-9-19
帖子
23
22
 楼主| 发表于 2024-5-31 22:25:06 | 只看该作者
终于没问题了 太感谢了
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
765
在线时间
158 小时
注册时间
2024-4-1
帖子
30
21
发表于 2024-5-31 14:20:29 | 只看该作者
另外 任务$game_system.missionSwitch["对话01"] = true 设置的是任务类型里的名字  不是任务自身名字

评分

参与人数 1+1 收起 理由
195874 + 1 认可答案

查看全部评分

BUG修复 插件兼容 代码优化
QQ 961794255
回复 支持 反对

使用道具 举报

Lv2.观梦者

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

评分

参与人数 1+1 收起 理由
195874 + 1 认可答案

查看全部评分

BUG修复 插件兼容 代码优化
QQ 961794255
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1188
在线时间
170 小时
注册时间
2020-9-19
帖子
23
19
 楼主| 发表于 2024-5-31 12:29:56 | 只看该作者
还是报错 . . .

11111.rar

247.36 KB, 下载次数: 1

回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
765
在线时间
158 小时
注册时间
2024-4-1
帖子
30
18
发表于 2024-5-31 11:50:52 | 只看该作者
195874 发表于 2024-5-31 01:32
好像不行
Mission.startMission(*mission[0:6]) if mission[0] == name这句报错

切片用法搞差了  Mission.startMission(*mission[0,6]) if mission[0] == name
BUG修复 插件兼容 代码优化
QQ 961794255
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
491
在线时间
56 小时
注册时间
2024-4-30
帖子
27
17
发表于 2024-5-31 03:17:51 | 只看该作者
66666666666666
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1188
在线时间
170 小时
注册时间
2020-9-19
帖子
23
16
 楼主| 发表于 2024-5-31 01:32:21 | 只看该作者
好像不行
Mission.startMission(*mission[0:6]) if mission[0] == name这句报错
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
765
在线时间
158 小时
注册时间
2024-4-1
帖子
30
15
发表于 2024-5-30 06:06:47 | 只看该作者
本帖最后由 earlybird 于 2024-5-30 06:10 编辑

本质是数组多了一个参数      搜索  Mission.startMission(*mission) if mission[0] == name 改成      Mission.startMission(*mission[0:6]) if mission[0] == name 前面就都不用改
BUG修复 插件兼容 代码优化
QQ 961794255
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
765
在线时间
158 小时
注册时间
2024-4-1
帖子
30
14
发表于 2024-5-30 06:00:21 | 只看该作者
  搜索    $game_system.missions[name] = GetMission.new(
         level,kind,description,rewards,rewards_des) 一样加个参数   $game_system.missions[name] = GetMission.new(
         level,kind,description,rewards,rewards_des,mission_pic)
BUG修复 插件兼容 代码优化
QQ 961794255
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-9-29 23:10

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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