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

Project1

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

[已经解决] 这个任务系统的脚本怎么加到菜单栏

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
21 小时
注册时间
2012-6-5
帖子
15
跳转到指定楼层
1
发表于 2012-6-7 12:23:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
菜单栏没有显示 只能找人打开任务菜单..
  1. #==============================================================================#
  2. #           任务系统v0.2 by EngShun                                            #
  3. #                                                                              #
  4. #    简单说明:                                                                #
  5. #    调用方法:$scene = Scene_Mission.new                                      #
  6. #    用$game_party.mission.get(任务名,说明)得到任务                            #
  7. #    用$game_party.mission.done(任务名)完成任务                                #
  8. #    用$game_party.mission.delete(任务名)删除任务                              #
  9. #    用$game_party.mission.done_all完成所有任务                                #
  10. #    用$game_party.mission.delete_all删除所有任务                              #
  11. #                                                                              #
  12. #    效果说明:                                                                #
  13. #    支持普通对话框效果                                                        #
  14. #    \\a[号码]     :更改对齐方式(0,1,2)。                                    #
  15. #    \\itm[物品id] :物品数量                                                   #
  16. #    \\wpn[武器id] :武器数量                                                   #
  17. #    \\amr[防具id] :防具数量                                                   #
  18. #    \\eval{脚本}  :运行脚本                                                   #
  19. #    \\bold        :字体加粗,插入多一次关闭                                   #
  20. #    \\italic      :字体打斜,插入多一次关闭                                   #
  21. #    \\f[字体名称] :更改字体                                                   #
  22. #    \\s[号码]     :更改字体大小                                               #
  23. #    \\p[名称]     :插入图片                                                   #
  24. #    \\icon[名称]  :插入图标                                                   #
  25. #                                                                              #
  26. #==============================================================================#

  27. class Game_Mission
  28.   attr_accessor :mission
  29.   attr_accessor :info
  30.   attr_accessor :doned
  31.   def initialize
  32.     @mission = ["没有任务"]
  33.     @info = ["\\a[1]\\c[2]\\s[50]\\f[楷体]没有任何的任务"]
  34.     @doned = []
  35.   end
  36.   def get(mission,info)
  37.     unless @mission.include?(mission)
  38.       @mission.push(mission)
  39.       @info.push(info)
  40.       delete("没有任务") if @mission.include?("没有任务")
  41.     end
  42.   end
  43.   def done(done_mission)
  44.     for i in [email protected]
  45.       if @mission[i] == done_mission
  46.         @doned.delete(i) if @doned.include?(i)
  47.         @doned.push(i)
  48.       end
  49.     end
  50.   end
  51.   def delete(delete_mission)
  52.     for i in [email protected]
  53.       if @mission[i] == delete_mission
  54.         @mission.delete(delete_mission)
  55.         delete_info = @info[i]
  56.         @info.delete(delete_info)
  57.         @doned.delete(i) if @doned.include?(i)
  58.       end
  59.     end
  60.     $game_mission = Game_Mission.new if @mission.size == 0
  61.   end
  62.   def done_all
  63.     for i in [email protected]
  64.       @doned.delete(i) if @doned.include?(i)
  65.       @doned.push(i)
  66.     end
  67.   end
  68.   def delete_all
  69.     $game_mission = Game_Mission.new
  70.   end
  71. end

  72. class Window_Mission < Window_Selectable
  73.   def initialize
  74.     super(0, 64, 200, 416)
  75.     self.index = 0
  76.     @item_max = $game_party.mission.mission.size
  77.     if self.contents != nil
  78.       self.contents.dispose
  79.       self.contents = nil
  80.     end
  81.     self.contents = Bitmap.new(width - 32, @item_max * 32)
  82.     for i in 0...$game_party.mission.mission.size
  83.       if $game_party.mission.doned.include?(i)
  84.         self.contents.font.color = disabled_color
  85.         text = $game_party.mission.mission[i] + "(√)"
  86.       else
  87.         self.contents.font.color = normal_color
  88.         text = $game_party.mission.mission[i]
  89.       end
  90.       self.contents.draw_text(4, i * 32, 160, 32, text.to_s)
  91.     end
  92.   end
  93. end
  94. class Window_Info < Window_Base
  95.   def initialize
  96.     super(200,64,440,416)
  97.     self.contents =  Bitmap.new(408, 384)
  98.   end
  99.   def refresh(str)
  100.     self.contents = Bitmap.new(408, 384) if self.contents == nil
  101.     self.contents.clear
  102.     y = 0
  103.     align = 0
  104.     begin
  105.       last_text = str.clone
  106.       str.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
  107.       str.gsub!(/\\[Gg]/) { $game_party.gold.to_s }
  108.       str.gsub!(/\\[Ii][Tt][Mm]\[(\d+)\]/) { $game_party.item_number($1.to_i) }
  109.       str.gsub!(/\\[Ww][Pp][Nn]\[(\d+)\]/) { $game_party.weapon_number($1.to_i) }
  110.       str.gsub!(/\\[Aa][Mm][Rr]\[(\d+)\]/) { $game_party.armor_number($1.to_i) }
  111.       str.gsub!(/\\[Ee][Vv][Aa][Ll]{(.+)}/) { eval($1) }
  112.     end until str == last_text
  113.       str.gsub!(/\\[Nn]\[([0-9]+)\]/) do
  114.       $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
  115.     end
  116.     lines = str.split("\n")
  117.     for line in lines
  118.       bitmap,align = bitmap_line(line,align)
  119.       w = bitmap.width
  120.       h = bitmap.height
  121.       case align
  122.       when 0
  123.         x = 4
  124.       when 1
  125.         x = 204 - w / 2
  126.       when 2
  127.         x = 404 - w
  128.       end
  129.       self.contents.blt(x,y,bitmap,Rect.new(0,0,w,h))
  130.       y += h
  131.     end
  132.   end
  133.   def bitmap_line(str,old_align)
  134.     w,h = get_wh(str.clone)
  135.     w = 1 if w == 0
  136.     bitmap = Bitmap.new(w,h)
  137.     text = str
  138.     align = old_align
  139.     x = 0
  140.     text.gsub!(/\\\\/) { "\000" }
  141.     text.gsub!(/\\[Aa]\[(\d+)\]/){
  142.       align = $1.to_i
  143.       ""
  144.     }
  145.     text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
  146.     text.gsub!(/\\[Bb][Oo][Ll][Dd]/) { "\002" }
  147.     text.gsub!(/\\[Ii][Tt][Aa][Ll][Ii][Cc]/) { "\003" }
  148.     text.gsub!(/\\[Ff]\[(\w+)\]/) { "\004[#{$1}]" }
  149.     text.gsub!(/\\[Bb][Dd]\[(\w+)\]/) { "\005[#{$1}]" }
  150.     text.gsub!(/\\[Ss]\[(\d+)\]/) { "\006[#{$1}]" }
  151.     text.gsub!(/\\[Pp]\[(\w+)\]/) { "\007[#{$1}]" }
  152.     text.gsub!(/\\[Ii][Cc][Oo][Nn]\[(\w+)\]/){ "\201[#{$1}]" }
  153.     while ((c = text.slice!(/./m)) != nil)
  154.       if c == "\000"
  155.         c = "\\"
  156.       end
  157.       if c == "\001"
  158.         text.sub!(/\[([0-9]+)\]/, "")
  159.         color = $1.to_i
  160.         if color >= 0 and color <= 9
  161.           bitmap.font.color = text_color(color)
  162.         elsif color == 8
  163.           bitmap.font.color = disabled_color
  164.         elsif color == 9
  165.           bitmap.font.color = system_color
  166.         end
  167.         next
  168.       end
  169.       if c == "\002"
  170.         bitmap.font.bold = bitmap.font.bold ? false : true
  171.         next
  172.       end
  173.       if c == "\003"
  174.         bitmap.font.italic = bitmap.font.italic ? false : true
  175.         next
  176.       end
  177.       if c == "\004"
  178.         text.sub!(/\[(\w+)\]/,"")
  179.         bitmap.font.name = $1
  180.         next
  181.       end
  182.       if c == "\005"
  183.         text.sub!(/\[(\w+)\]/,"")
  184.         color = bitmap.font.color.clone
  185.         w = bitmap.text_size($1).width
  186.         bitmap.font.color = Color.new(0,0,0,255)
  187.         bitmap.draw_text((4 + x)-1, y-1, w, 32, $1)
  188.         bitmap.draw_text((4 + x)-1, y+1, w, 32, $1)
  189.         bitmap.draw_text((4 + x)+1, y-1, w, 32, $1)
  190.         bitmap.draw_text((4 + x)+1, y+1, w, 32, $1)
  191.         bitmap.font.color = color
  192.         bitmap.draw_text(4 + x, y, w, 32, $1)
  193.         x += bitmap.text_size($1).width
  194.         next
  195.       end
  196.       if c == "\006"
  197.         text.sub!(/\[(\d+)\]/,"")
  198.         bitmap.font.size = $1.to_i
  199.         next
  200.       end
  201.       if c == "\007"
  202.         text.sub!(/\[(\w+)\]/,"")
  203.         pic = RPG::Cache.picture($1)
  204.         r = Rect.new(0,0,pic.width,pic.height)
  205.         y = h / 2 - pic.height / 2
  206.         bitmap.blt(x+2,y,pic,r)
  207.         x += pic.width + 4
  208.         next
  209.       end
  210.       if c == "\201"
  211.         text.sub!(/\[(\w+)\]/,"")
  212.         pic = RPG::Cache.icon($1)
  213.         r = Rect.new(0,0,pic.width,pic.height)
  214.         y = h / 2 - pic.height / 2
  215.         bitmap.blt(x+2,y,pic,r)
  216.         x += pic.width + 4
  217.         next
  218.       end
  219.       bitmap.draw_text(x,0,w,h,c)
  220.       x += bitmap.text_size(c).width
  221.     end
  222.     return bitmap.clone,align
  223.   end
  224.   def get_wh(str)
  225.     bitmap = Bitmap.new(160,160)
  226.     w = 0
  227.     h = 32
  228.     text = str
  229.     text.gsub!(/\\\\/) { "\000" }
  230.     text.gsub!(/\\[Aa]\[(\d+)\]/) { "" }
  231.     text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "" }
  232.     text.gsub!(/\\[Bb][Oo][Ll][Dd]/) { "" }
  233.     text.gsub!(/\\[Ii][Tt][Aa][Ll][Ii][Cc]/) { "" }
  234.     text.gsub!(/\\[Ff]\[(\w+)\]/) { "\001[#{$1}]" }
  235.     text.gsub!(/\\[Bb][Dd]\[(\w+)\]/) { $1 }
  236.     text.gsub!(/\\[Ss]\[(\d+)\]/) { "\002[#{$1}]" }
  237.     text.gsub!(/\\[Pp]\[(\w+)\]/) { "\003[#{$1}]" }
  238.     text.gsub!(/\\[Ii][Cc][Oo][Nn]\[(\w+)\]/) { "\004[#{$1}]" }
  239.     while ((c = text.slice!(/./m)) != nil)
  240.       if c == "\000"
  241.         c = "\\"
  242.       end
  243.       if c == "\001"
  244.         text.sub!(/\[(\w+)]/,"")
  245.         bitmap.font.name = $1
  246.         next
  247.       end
  248.       if c == "\002"
  249.         text.sub!(/\[(\d+)]/,"")
  250.         bitmap.font.size = $1.to_i
  251.         next
  252.       end
  253.       if c == "\003"
  254.         text.sub!(/\[(\w+)\]/,"")
  255.         w += RPG::Cache.picture($1).width+4
  256.         h = RPG::Cache.picture($1).height if RPG::Cache.picture($1).height > 32 and RPG::Cache.picture($1).height > h
  257.         next
  258.       end
  259.       if c == "\004"
  260.         text.sub!(/\[(\w+)\]/,"")
  261.         w += RPG::Cache.icon($1).width+4
  262.         h = RPG::Cache.icon($1).height if RPG::Cache.icon($1).height > 32 and RPG::Cache.icon($1).height > h
  263.         next
  264.       end
  265.       w += bitmap.text_size(c).width
  266.       h = bitmap.text_size(c).height if bitmap.text_size(c).height > 32 and bitmap.text_size(c).height > h
  267.     end
  268.     return w,h
  269.   end
  270. end
  271. class Scene_Mission
  272.   def main
  273.     @window1 = Window_Base.new(0,0,200,64)
  274.     @window1.contents = Bitmap.new(168,32)
  275.     @window1.contents.draw_text(0,0,168,32,"任务",1)
  276.     @window2 = Window_Base.new(200,0,440,64)
  277.     @window2.contents = Bitmap.new(408,32)
  278.     @window2.contents.draw_text(0,0,408,32,"任务说明",1)
  279.     @mission_window = Window_Mission.new
  280.     @mission_window.index = $game_party.mission.mission.size - 1
  281.     @info_window = Window_Info.new
  282.     info = $game_party.mission.info[@mission_window.index].clone
  283.     @info_window.refresh(info)
  284.     Graphics.transition
  285.     loop do
  286.       Graphics.update
  287.       Input.update
  288.       update
  289.       if $scene != self
  290.         break
  291.       end
  292.     end
  293.     Graphics.freeze
  294.     @window1.dispose
  295.     @window2.dispose
  296.     @mission_window.dispose
  297.     @info_window.dispose
  298.   end
  299.   def update
  300.     @mission_window.update
  301.     @info_window.update
  302.     if Input.trigger?(Input::B)
  303.       $game_system.se_play($data_system.cancel_se)
  304.       $scene = Scene_Map.new
  305.       return
  306.     end
  307.     if Input.repeat?(Input::UP) or
  308.        Input.repeat?(Input::DOWN)
  309.       info = $game_party.mission.info[@mission_window.index].clone
  310.       @info_window.refresh(info)
  311.     end
  312.   end
  313. end
  314. class Game_Party
  315.   attr_accessor :mission
  316.   alias orig_init initialize
  317.   def initialize
  318.     @mission = Game_Mission.new
  319.     orig_init
  320.   end
  321. end
复制代码

Lv3.寻梦者

双子人

梦石
0
星屑
3190
在线时间
3618 小时
注册时间
2009-4-4
帖子
4154

开拓者

2
发表于 2012-6-7 12:24:48 | 只看该作者
本帖最后由 hys111111 于 2012-6-7 12:32 编辑

在菜单栏召唤的方法:
$scene = Scene_Mission.new

在菜单栏直接显示任务列表的方法:(直接插入)

  1. class Scene_Menu
  2.   def main
  3.     # 生成命令窗口
  4.     s1 = $data_system.words.item
  5.     s2 = $data_system.words.skill
  6.     s3 = $data_system.words.equip
  7.     s4 = "状态"
  8.     s5 = "存档"
  9.     s6 = "结束游戏"
  10.     @command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6])
  11.     @command_window.index = @menu_index
  12.     # 同伴人数为 0 的情况下
  13.     if $game_party.actors.size == 0
  14.       # 物品、特技、装备、状态无效化
  15.       @command_window.disable_item(0)
  16.       @command_window.disable_item(1)
  17.       @command_window.disable_item(2)
  18.       @command_window.disable_item(3)
  19.     end
  20.     # 禁止存档的情况下
  21.     if $game_system.save_disabled
  22.       # 存档无效
  23.       @command_window.disable_item(4)
  24.     end
  25.     # 生成游戏时间窗口
  26.     @playtime_window = Window_PlayTime.new
  27.     @playtime_window.x = 0
  28.     @playtime_window.y = 224
  29.     # 生成步数窗口
  30.     @steps_window = Window_Steps.new
  31.     @steps_window.x = 0
  32.     @steps_window.y = 320
  33.     # 生成金钱窗口
  34.     @gold_window = Window_Gold.new
  35.     @gold_window.x = 0
  36.     @gold_window.y = 416



  37.     # 生成任务窗口
  38.     @status_window = Window_Mission#MenuStatus.new
  39.     @status_window.x = 160
  40.     @status_window.y = 0




  41.     # 执行过渡
  42.     Graphics.transition
  43.     # 主循环
  44.     loop do
  45.       # 刷新游戏画面
  46.       Graphics.update
  47.       # 刷新输入信息
  48.       Input.update
  49.       # 刷新画面
  50.       update
  51.       # 如果切换画面就中断循环
  52.       if $scene != self
  53.         break
  54.       end
  55.     end
  56.     # 准备过渡
  57.     Graphics.freeze
  58.     # 释放窗口
  59.     @command_window.dispose
  60.     @playtime_window.dispose
  61.     @steps_window.dispose
  62.     @gold_window.dispose
  63.     @status_window.dispose
  64.   end
  65. end
复制代码
在菜单中召唤任务栏的方法:
  1. class Scene_Menu
  2.   def main
  3.     # 生成命令窗口
  4.     s1 = $data_system.words.item
  5.     s2 = $data_system.words.skill
  6.     s3 = $data_system.words.equip
  7.     s4 = "状态"
  8.     s5 = "存档"
  9.     s6 = "任务栏"
  10.     @command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6])
  11.     @command_window.index = @menu_index
  12.     # 同伴人数为 0 的情况下
  13.     if $game_party.actors.size == 0
  14.       # 物品、特技、装备、状态无效化
  15.       @command_window.disable_item(0)
  16.       @command_window.disable_item(1)
  17.       @command_window.disable_item(2)
  18.       @command_window.disable_item(3)
  19.     end
  20.     # 禁止存档的情况下
  21.     if $game_system.save_disabled
  22.       # 存档无效
  23.       @command_window.disable_item(4)
  24.     end
  25.     # 生成游戏时间窗口
  26.     @playtime_window = Window_PlayTime.new
  27.     @playtime_window.x = 0
  28.     @playtime_window.y = 224
  29.     # 生成步数窗口
  30.     @steps_window = Window_Steps.new
  31.     @steps_window.x = 0
  32.     @steps_window.y = 320
  33.     # 生成金钱窗口
  34.     @gold_window = Window_Gold.new
  35.     @gold_window.x = 0
  36.     @gold_window.y = 416
  37.     # 生成状态窗口
  38.     @status_window = Window_MenuStatus.new
  39.     @status_window.x = 160
  40.     @status_window.y = 0
  41.     # 执行过渡
  42.     Graphics.transition
  43.     # 主循环
  44.     loop do
  45.       # 刷新游戏画面
  46.       Graphics.update
  47.       # 刷新输入信息
  48.       Input.update
  49.       # 刷新画面
  50.       update
  51.       # 如果切换画面就中断循环
  52.       if $scene != self
  53.         break
  54.       end
  55.     end
  56.     # 准备过渡
  57.     Graphics.freeze
  58.     # 释放窗口
  59.     @command_window.dispose
  60.     @playtime_window.dispose
  61.     @steps_window.dispose
  62.     @gold_window.dispose
  63.     @status_window.dispose
  64.   end
  65.   def update_command
  66.     # 按下 B 键的情况下
  67.     if Input.trigger?(Input::B)
  68.       # 演奏取消 SE
  69.       $game_system.se_play($data_system.cancel_se)
  70.       # 切换的地图画面
  71.       $scene = Scene_Map.new
  72.       return
  73.     end
  74.     # 按下 C 键的情况下
  75.     if Input.trigger?(Input::C)
  76.       # 同伴人数为 0、存档、游戏结束以外的场合
  77.       if $game_party.actors.size == 0 and @command_window.index < 4
  78.         # 演奏冻结 SE
  79.         $game_system.se_play($data_system.buzzer_se)
  80.         return
  81.       end
  82.       # 命令窗口的光标位置分支
  83.       case @command_window.index
  84.       when 0  # 物品
  85.         # 演奏确定 SE
  86.         $game_system.se_play($data_system.decision_se)
  87.         # 切换到物品画面
  88.         $scene = Scene_Item.new
  89.       when 1  # 特技
  90.         # 演奏确定 SE
  91.         $game_system.se_play($data_system.decision_se)
  92.         # 激活状态窗口
  93.         @command_window.active = false
  94.         @status_window.active = true
  95.         @status_window.index = 0
  96.       when 2  # 装备
  97.         # 演奏确定 SE
  98.         $game_system.se_play($data_system.decision_se)
  99.         # 激活状态窗口
  100.         @command_window.active = false
  101.         @status_window.active = true
  102.         @status_window.index = 0
  103.       when 3  # 状态
  104.         # 演奏确定 SE
  105.         $game_system.se_play($data_system.decision_se)
  106.         # 激活状态窗口
  107.         @command_window.active = false
  108.         @status_window.active = true
  109.         @status_window.index = 0
  110.       when 4  # 存档
  111.         # 禁止存档的情况下
  112.         if $game_system.save_disabled
  113.           # 演奏冻结 SE
  114.           $game_system.se_play($data_system.buzzer_se)
  115.           return
  116.         end
  117.         # 演奏确定 SE
  118.         $game_system.se_play($data_system.decision_se)
  119.         # 切换到存档画面
  120.         $scene = Scene_Save.new
  121.       when 5  # 游戏结束
  122.         # 演奏确定 SE
  123.         $game_system.se_play($data_system.decision_se)
  124.         # 切换到任务画面
  125.         $scene = Scene_Mission.new
  126.       end
  127.       return
  128.     end
  129.   end
  130. end
复制代码

点评

知道了谢谢OTL  发表于 2012-6-7 18:11
插入到哪..  发表于 2012-6-7 18:08
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
47
在线时间
412 小时
注册时间
2012-6-1
帖子
1021
3
发表于 2012-6-7 12:30:53 | 只看该作者
修改一下
做了个范例
看看是不是你要的效果
任务.rar (713.95 KB, 下载次数: 1303)

评分

参与人数 1星屑 +60 收起 理由
春风莉露 + 60 感谢回答

查看全部评分

这里是新人 明特·布兰马修
脚本盲 事件盲 美工盲
还是色盲ORZ
XP\VX略懂VA无助很抱歉
所以问题什么如果答不好就不要提醒我了
短篇7已经放弃,但是坑在继续补上。所以回答和现身次数少之。
有事烧纸或者留言即可。

还有我不是正太啊ORZ
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
52
在线时间
586 小时
注册时间
2012-5-31
帖子
768
4
发表于 2012-6-9 23:27:56 | 只看该作者
可以在S4和S5间加个指令指向$scene = Scene_Mission.new
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-30 02:40

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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