Project1

标题: 一个任务系统想要修改一下、 [打印本页]

作者: シスコン    时间: 2012-5-27 12:58
标题: 一个任务系统想要修改一下、
本帖最后由 シスコン 于 2012-5-27 12:58 编辑
  1. #==============================================================================#
  2. #           任务系统v0.3 by EngShun                                            #
  3. #                                                                              #
  4. #    设置方法请参考范例                                                        #
  5. #                                                                              #
  6. #    效果说明:                                                                #
  7. #    支持普通对话框效果                                                        #
  8. #    \a[号码]     :更改对齐方式(0,1,2)。                                     #
  9. #    \itm[物品id] :物品数量                                                    #
  10. #    \wpn[武器id] :武器数量                                                    #
  11. #    \amr[防具id] :防具数量                                                    #
  12. #    \eval{脚本}  :运行脚本                                                    #
  13. #    \bold        :字体加粗,插入多一次关闭                                    #
  14. #    \italic      :字体打斜,插入多一次关闭                                    #
  15. #    \f[字体名称] :更改字体                                                    #
  16. #    \s[号码]     :更改字体大小                                                #
  17. #    \p[名称]     :插入图片                                                    #
  18. #    \icon[名称]  :插入图标                                                    #
  19. #                                                                              #
  20. #==============================================================================#

  21. class Game_Mission
  22.   attr_reader :doned
  23.   attr_reader :failed
  24.   def initialize
  25.     @mission = []
  26.     @info = []
  27.     @doned = []
  28.     @failed = []
  29.   end
  30.   def none?
  31.     return @mission == []
  32.   end
  33.   def mission
  34.     if @mission == []
  35.       return ["没有记录"]
  36.     end
  37.     return @mission
  38.   end
  39.   def info
  40.     if @info == []
  41.       return ["\\a[1]\\c[2]\\s[50]\\f[楷体]没有任何的记录"]
  42.     end
  43.     return @info
  44.   end
  45.   def get(mission,info)
  46.     unless @mission.include?(mission)
  47.       @mission.push(mission)
  48.       @info.push(info)
  49.     end
  50.   end
  51.   def done(done_mission)
  52.     for i in [email protected]
  53.       if @mission[i] == done_mission and [email protected]?(i)
  54.         @doned.delete(i) if @doned.include?(i)
  55.         @doned.push(i)
  56.       end
  57.     end
  58.   end
  59.   def delete(delete_mission)
  60.     for i in [email protected]
  61.       if @mission[i] == delete_mission
  62.         @mission.delete(delete_mission)
  63.         delete_info = @info[i]
  64.         @info.delete(delete_info)
  65.         @doned.delete(i) if @doned.include?(i)
  66.       end
  67.     end
  68.   end
  69.   def fail(mission)
  70.     for i in [email protected]
  71.       if @mission[i] == mission and [email protected]?(i)
  72.         @failed.delete(i) if @failed.include?(i)
  73.         @failed.push(i)
  74.       end
  75.     end
  76.   end
  77.   def resume(mission)
  78.     for i in [email protected]
  79.       if @mission[i] == mission and
  80.         @failed.delete(i)
  81.       end
  82.     end
  83.   end
  84.   def done_all
  85.     for i in [email protected]
  86.       @doned.delete(i) if @doned.include?(i)
  87.       @doned.push(i)
  88.     end
  89.   end
  90.   def delete_all
  91.     @mission = []
  92.     @info = []
  93.     @doned = []
  94.     @failed = []
  95.   end
  96.   def resume_all
  97.     @failed = []
  98.   end
  99. end

  100. class Window_Mission < Window_Selectable
  101.   def initialize
  102.     super(0, 64, 200, 416)
  103.     self.index = 0
  104.     @item_max = $game_party.mission.mission.size
  105.     if self.contents != nil
  106.       self.contents.dispose
  107.       self.contents = nil
  108.     end
  109.     self.contents = Bitmap.new(width - 32, @item_max * 32)
  110.     for i in 0...$game_party.mission.mission.size
  111.       t = ($game_party.mission.doned.include?(i) or $game_party.mission.failed.include?(i))
  112.       self.contents.font.color = t ? disabled_color : normal_color
  113.       text = $game_party.mission.mission[i]
  114.       self.contents.draw_text(4, i * 32, 160, 32, text.to_s)
  115.       self.contents.font.color = system_color
  116.       self.contents.draw_text(self.contents.width-32, i * 32, 32, 32, "□",1) unless $game_party.mission.none?
  117.       if $game_party.mission.doned.include?(i)
  118.         self.contents.font.color = crisis_color
  119.         self.contents.draw_text(self.contents.width-32, i * 32, 32, 32, "√",1)
  120.       elsif $game_party.mission.failed.include?(i)
  121.         self.contents.font.color = knockout_color
  122.         self.contents.draw_text(self.contents.width-32, i * 32, 32, 32, "×",1)
  123.       end
  124.     end
  125.   end
  126. end
  127. class Window_Info < Window_Base
  128.   def initialize
  129.     super(200,64,440,416)
  130.     self.contents =  Bitmap.new(408, 384)
  131.   end
  132.   def refresh(str)
  133.     self.contents = Bitmap.new(408, 384) if self.contents == nil
  134.     self.contents.clear
  135.     y = 0
  136.     align = 0
  137.     begin
  138.       last_text = str.clone
  139.       str.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
  140.       str.gsub!(/\\[Gg]/) { $game_party.gold.to_s }
  141.       str.gsub!(/\\[Ii][Tt][Mm]\[(\d+)\]/) { $game_party.item_number($1.to_i) }
  142.       str.gsub!(/\\[Ww][Pp][Nn]\[(\d+)\]/) { $game_party.weapon_number($1.to_i) }
  143.       str.gsub!(/\\[Aa][Mm][Rr]\[(\d+)\]/) { $game_party.armor_number($1.to_i) }
  144.       str.gsub!(/\\[Ee][Vv][Aa][Ll]{([.,\r,\n]+)}/) { eval($1) }
  145.     end until str == last_text
  146.       str.gsub!(/\\[Nn]\[([0-9]+)\]/) do
  147.       $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
  148.     end
  149.     lines = str.split("\n")
  150.     for line in lines
  151.       bitmap,align = bitmap_line(line,align)
  152.       w = bitmap.width
  153.       h = bitmap.height
  154.       case align
  155.       when 0
  156.         x = 4
  157.       when 1
  158.         x = 204 - w / 2
  159.       when 2
  160.         x = 404 - w
  161.       end
  162.       self.contents.blt(x,y,bitmap,Rect.new(0,0,w,h))
  163.       y += h
  164.     end
  165.   end
  166.   def bitmap_line(str,old_align)
  167.     w,h = get_wh(str.clone)
  168.     w = 1 if w == 0
  169.     bitmap = Bitmap.new(w,h)
  170.     text = str
  171.     align = old_align
  172.     x = 0
  173.     text.gsub!(/\\\\/) { "\000" }
  174.     text.gsub!(/\\[Aa]\[(\d+)\]/){
  175.       align = $1.to_i
  176.       ""
  177.     }
  178.     text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
  179.     text.gsub!(/\\[Bb][Oo][Ll][Dd]/) { "\002" }
  180.     text.gsub!(/\\[Ii][Tt][Aa][Ll][Ii][Cc]/) { "\003" }
  181.     text.gsub!(/\\[Ff]\[(\w+)\]/) { "\004[#{$1}]" }
  182.     text.gsub!(/\\[Bb][Dd]\[(\w+)\]/) { "\005[#{$1}]" }
  183.     text.gsub!(/\\[Ss]\[(\d+)\]/) { "\006[#{$1}]" }
  184.     text.gsub!(/\\[Pp]\[([\w,-]+)\]/) { "\007[#{$1}]" }
  185.     text.gsub!(/\\[Ii][Cc][Oo][Nn]\[([\w,-]+)\]/){ "\201[#{$1}]" }
  186.     while ((c = text.slice!(/./m)) != nil)
  187.       if c == "\000"
  188.         c = "\\"
  189.       end
  190.       if c == "\001"
  191.         text.sub!(/\[([0-9]+)\]/, "")
  192.         color = $1.to_i
  193.         if color >= 0 and color <= 9
  194.           bitmap.font.color = text_color(color)
  195.         elsif color == 8
  196.           bitmap.font.color = disabled_color
  197.         elsif color == 9
  198.           bitmap.font.color = system_color
  199.         end
  200.         next
  201.       end
  202.       if c == "\002"
  203.         bitmap.font.bold = bitmap.font.bold ? false : true
  204.         next
  205.       end
  206.       if c == "\003"
  207.         bitmap.font.italic = bitmap.font.italic ? false : true
  208.         next
  209.       end
  210.       if c == "\004"
  211.         text.sub!(/\[(\w+)\]/,"")
  212.         bitmap.font.name = $1
  213.         next
  214.       end
  215.       if c == "\005"
  216.         text.sub!(/\[(\w+)\]/,"")
  217.         color = bitmap.font.color.clone
  218.         w = bitmap.text_size($1).width
  219.         bitmap.font.color = Color.new(0,0,0,255)
  220.         bitmap.draw_text((4 + x)-1, y-1, w, 32, $1)
  221.         bitmap.draw_text((4 + x)-1, y+1, w, 32, $1)
  222.         bitmap.draw_text((4 + x)+1, y-1, w, 32, $1)
  223.         bitmap.draw_text((4 + x)+1, y+1, w, 32, $1)
  224.         bitmap.font.color = color
  225.         bitmap.draw_text(4 + x, y, w, 32, $1)
  226.         x += bitmap.text_size($1).width
  227.         next
  228.       end
  229.       if c == "\006"
  230.         text.sub!(/\[(\d+)\]/,"")
  231.         bitmap.font.size = $1.to_i
  232.         next
  233.       end
  234.       if c == "\007"
  235.         text.sub!(/\[([\w,-]+)\]/,"")
  236.         pic = RPG::Cache.picture($1)
  237.         r = Rect.new(0,0,pic.width,pic.height)
  238.         y = h / 2 - pic.height / 2
  239.         bitmap.blt(x+2,y,pic,r)
  240.         x += pic.width + 4
  241.         next
  242.       end
  243.       if c == "\201"
  244.         text.sub!(/\[([\w,-]+)\]/,"")
  245.         pic = RPG::Cache.icon($1)
  246.         r = Rect.new(0,0,pic.width,pic.height)
  247.         y = h / 2 - pic.height / 2
  248.         bitmap.blt(x+2,y,pic,r)
  249.         x += pic.width + 4
  250.         next
  251.       end
  252.       bitmap.draw_text(x,0,w,h,c)
  253.       x += bitmap.text_size(c).width
  254.     end
  255.     return bitmap.clone,align
  256.   end
  257.   def get_wh(str)
  258.     bitmap = Bitmap.new(160,160)
  259.     w = 0
  260.     h = 32
  261.     text = str
  262.     text.gsub!(/\\\\/) { "\000" }
  263.     text.gsub!(/\\[Aa]\[(\d+)\]/) { "" }
  264.     text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "" }
  265.     text.gsub!(/\\[Bb][Oo][Ll][Dd]/) { "" }
  266.     text.gsub!(/\\[Ii][Tt][Aa][Ll][Ii][Cc]/) { "" }
  267.     text.gsub!(/\\[Ff]\[(\w+)\]/) { "\001[#{$1}]" }
  268.     text.gsub!(/\\[Bb][Dd]\[(\w+)\]/) { $1 }
  269.     text.gsub!(/\\[Ss]\[(\d+)\]/) { "\002[#{$1}]" }
  270.     text.gsub!(/\\[Pp]\[([\w,-]+)\]/) { "\003[#{$1}]" }
  271.     text.gsub!(/\\[Ii][Cc][Oo][Nn]\[(\w,[A-Za-z0-9_-]+)\]/) { "\004[#{$1}]" }
  272.     while ((c = text.slice!(/./m)) != nil)
  273.       if c == "\000"
  274.         c = "\\"
  275.       end
  276.       if c == "\001"
  277.         text.sub!(/\[(\w+)]/,"")
  278.         bitmap.font.name = $1
  279.         next
  280.       end
  281.       if c == "\002"
  282.         text.sub!(/\[(\d+)]/,"")
  283.         bitmap.font.size = $1.to_i
  284.         next
  285.       end
  286.       if c == "\003"
  287.         text.sub!(/\[([\w,-]+)\]/,"")
  288.         w += RPG::Cache.picture($1).width+4
  289.         h = RPG::Cache.picture($1).height if RPG::Cache.picture($1).height > 32 and RPG::Cache.picture($1).height > h
  290.         next
  291.       end
  292.       if c == "\004"
  293.         text.sub!(/\[([\w,-]+)\]/,"")
  294.         w += RPG::Cache.icon($1).width+4
  295.         h = RPG::Cache.icon($1).height if RPG::Cache.icon($1).height > 32 and RPG::Cache.icon($1).height > h
  296.         next
  297.       end
  298.       w += bitmap.text_size(c).width
  299.       h = bitmap.text_size(c).height if bitmap.text_size(c).height > 32 and bitmap.text_size(c).height > h
  300.     end
  301.     return w,h
  302.   end
  303. end
  304. class Scene_Mission
  305.   def main
  306.     @window1 = Window_Base.new(0,0,200,64)
  307.     @window1.contents = Bitmap.new(168,32)
  308.     @window1.contents.draw_text(0,0,168,32,"任务",1)
  309.     @window2 = Window_Base.new(200,0,440,64)
  310.     @window2.contents = Bitmap.new(408,32)
  311.     @window2.contents.draw_text(0,0,408,32,"任务说明",1)
  312.     @mission_window = Window_Mission.new
  313.     @mission_window.index = $game_party.mission.mission.size - 1
  314.     @info_window = Window_Info.new
  315.     info = $game_party.mission.info[@mission_window.index].clone
  316.     @info_window.refresh(info)
  317.     Graphics.transition
  318.     loop do
  319.       Graphics.update
  320.       Input.update
  321.       update
  322.       if $scene != self
  323.         break
  324.       end
  325.     end
  326.     Graphics.freeze
  327.     @window1.dispose
  328.     @window2.dispose
  329.     @mission_window.dispose
  330.     @info_window.dispose
  331.   end
  332.   def update
  333.     @mission_window.update
  334.     @info_window.update
  335.     if Input.trigger?(Input::B)
  336.       $game_system.se_play($data_system.cancel_se)
  337.       $scene = Scene_Map.new
  338.       return
  339.     end
  340.     if Input.repeat?(Input::UP) or
  341.        Input.repeat?(Input::DOWN)
  342.       info = $game_party.mission.info[@mission_window.index].clone
  343.       @info_window.refresh(info)
  344.     end
  345.   end
  346. end
  347. class Game_Party
  348.   attr_accessor :mission
  349.   alias orig_init initialize
  350.   def initialize
  351.     @mission = Game_Mission.new
  352.     orig_init
  353.   end
  354. end
  355. class Interpreter
  356.   alias orig_ec execute_command
  357.   def execute_command
  358.     if @index >= @list.size - 1
  359.       command_end
  360.       return true
  361.     end
  362.     @parameters = @list[@index].parameters
  363.     return command_108 if @list[@index].code == 108
  364.     return orig_ec
  365.   end
  366.   def command_108
  367.     text = @list[@index].parameters[0]
  368.     if text.sub!(/删除任务\[(\w+)\]/,"") != nil
  369.       $game_party.mission.delete($1)
  370.       return true
  371.     elsif text.sub!(/完成任务\[(\w+)\]/,"") != nil
  372.       $game_party.mission.done($1)
  373.       return true
  374.     elsif text.sub!(/删除所有任务/,"") != nil
  375.       $game_party.mission.delete_all
  376.       return true
  377.     elsif text.sub!(/完成所有任务/,"") != nil
  378.       $game_party.mission.done_all
  379.       return true
  380.     elsif text.sub!(/放弃任务\[(\w+)\]/,"") != nil
  381.       $game_party.mission.fail($1)
  382.       return true
  383.     elsif text.sub!(/恢复任务\[(\w+)\]/,"") != nil
  384.       $game_party.mission.resume($1)
  385.       return true
  386.     elsif text.sub!(/恢复所有任务/,"") != nil
  387.       $game_party.mission.resume_all
  388.       return true
  389.     end
  390.     loop do
  391.       if @list[@index+1].code == 108 or @list[@index+1].code == 408
  392.         text += "\n" + @list[@index+1].parameters[0]
  393.       else
  394.         break
  395.       end
  396.       @index += 1
  397.     end
  398.     split = text.split("\n")
  399.     if split[0] == "任务设置" and split.size >= 3
  400.       info , name = split[2] , split[1]
  401.       if split.size >= 4
  402.         for i in 3...split.size
  403.           info += "\n" + split[i]
  404.         end
  405.       end
  406.       $game_party.mission.get(name,info)
  407.     end
  408.     return true
  409.   end
  410. end
复制代码
脚本原帖:http://rpg.blue/thread-167490-2-1.html

本人希望这个任务脚本添加这个功能:任务进程、

也就是说、例如:
任务
任务名称:寻找小猫
任务线索: XX公园 XX商业街 XX游乐园
任务进程:(括号里面是说明‘进程’是什么意思:因为线索有三个地方、所以玩家可以自由挑选自己先想去调查的场所、因此玩家先去哪里后去哪里进程就会改变、举例:玩家1先去公园再去商业街最后去游乐园、所以任务进程记录是按照公园→商业街→游乐园的顺序的、但是玩家2先去游乐园再去公园最后去商业街、那么任务进程就应该是游乐园→公园友商业街、)

所以本人想要的进程效果就是 调查场所之后 注释只要添加好‘进程’就可以按照调查的顺利写、

以上、如有不懂本人可以说的再详细一点、 由于这个‘进程’要求对本人游戏很重要、所以就过来询问了…………、

原帖作者我也PM过、但是貌似没回应…………、dsu_plus_rewardpost_czw
作者: chd114    时间: 2012-5-27 16:21
自己在任务内容添加
作者: 54酱    时间: 2012-5-27 16:23
chd114 发表于 2012-5-27 16:21
自己在任务内容添加

这货十分占地方= =b
话说你的经验全都不见了
作者: シスコン    时间: 2012-5-27 16:44
chd114 发表于 2012-5-27 16:21
自己在任务内容添加

添加什么?、
作者: chd114    时间: 2012-5-27 17:56
54酱 发表于 2012-5-27 16:23
这货十分占地方= =b
话说你的经验全都不见了

我知道,提问题用完了······




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