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

Project1

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

[已经过期] 关于任务系统的正确使用

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
47 小时
注册时间
2014-7-19
帖子
25
跳转到指定楼层
1
发表于 2014-11-1 16:41:43 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

x
本帖最后由 yuziming 于 2014-11-1 17:58 编辑

这个任务系统看起来很好,但是交付任务时为什么提示对象最后一个脚本出错,请各位好心人大大帮帮忙!!! 脚本原地址是https://rpg.blue/thread-226030-1-1.html
脚本是
  1. #==============================================================================
  2. # ■ 任务系统 By SkyZH
  3. #    Version 2
  4. #    bbs.66RPG.com
  5. #------------------------------------------------------------------------------
  6. #  任务系统使用方法:
  7. =begin

  8. 地图提示篇:
  9.   在事件里插入脚本 如下
  10.   ---Script Begin---
  11.     $game_maphint.clear
  12.     str="地图提示功能"
  13.     $game_maphint.setText(0,str)
  14.     str="测试"
  15.     $game_maphint.setText(1,str)
  16.     str="第三行了"
  17.     $game_maphint.setText(2,str)
  18.     str="这是最后一行"
  19.     $game_maphint.setText(3,str)
  20.   ----Script End----
  21.   
  22.   脚本功能:
  23.   $game_maphint.clear
  24.   ——清除之前地图提示的文字。
  25.   $game_maphint.setText(<行号>,<文字>)
  26.   ——设定指定行号上的文字。
  27.   
  28.   
  29.   
  30. 任务篇:
  31.   在事件里插入脚本(添加任务) 如下
  32.   ---Script Begin---
  33.     @p=$game_missions.getNoMission
  34.     str="搞定这个游戏"
  35.     $game_missions.mission(@p).setTitle(str)
  36.     str="慢慢享受游戏的乐趣吧~~"
  37.     $game_missions.mission(@p).setText(0,str)
  38.     str="不是人干的。。。"
  39.     $game_missions.mission(@p).setText(1,str)
  40.     str="奖励:游戏结束"
  41.     $game_missions.mission(@p).setImText(str)
  42.     s1="游戏系统";s2="最终结界";
  43.     $game_missions.mission(@p).setNPC(s1,s2)
  44.     $game_missions.mission(@p).setStatus(true)
  45.   ----Script End----
  46.   
  47.   在事件里插入脚本(交付任务) 如下
  48.   ---Script Begin---
  49.     @p=$game_missions.serMission("搞定这个游戏")
  50.     $game_missions.mission(@p).clear
  51.     $game_missions.mission(@p).setStatus(false)
  52.   ----Script End----
  53.   
  54.   脚本功能:
  55.   * @p指用$game_missions.getNoMission获取的任务代码。、
  56.   
  57.   
  58.   $game_missions.mission(@p).clear
  59.   ——清除之前任务的文字。
  60.   
  61.   $game_missions.mission(@p).setText(<行号>,<文字>)
  62.   ——设定指定行号上的任务介绍。
  63.   
  64.   $game_missions.mission(@p).setImText(<文字>)
  65.   ——设定任务重要信息/奖励。
  66.   
  67.   $game_missions.mission(@p).setNPC(<NPC1>,<NPC2>)
  68.   ——设定任务接任务NPC,交付任务NPC。
  69.   
  70.   $game_missions.mission(@p).setStatus(<状态>)  
  71.   ——设定任务状态(True/False)。
  72.   
  73.   $game_missions.getNoMission
  74.   ——找到一个可用的任务代码。
  75.   
  76.   $game_missions.serMission(<任务标题>)
  77.   ——找到对应任务编码。
  78.   * $game_missions.serMission(<任务标题>)的返回值为-1时说明任务不存在,否则返回此任
  79.   务编码。
  80.   * 在条件分歧中插入脚本$game_missions.serMission(<任务标题>)!=-1可判断任务是否正在
  81.   进行。
  82.   
  83.   
  84.   

  85. =end
  86. #==============================================================================


  87. #==============================================================================
  88. # ■ Game_MapHint
  89. #------------------------------------------------------------------------------
  90. #  地图提示信息显示。
  91. #==============================================================================
  92. class Game_MapHint
  93.   
  94.   def initialize
  95.     @texts = []
  96.   end
  97.   
  98.   def visible_line
  99.     @texts.size
  100.   end
  101.   
  102.   def text(line)
  103.     @texts[line]
  104.   end
  105.   
  106.   def setText(line , text)
  107.     @texts[line]=text
  108.   end
  109.   
  110.   def clear
  111.     for i in [email protected]
  112.       @texts.delete_at(i)
  113.     end
  114.   end
  115.   
  116. end

  117. #==============================================================================
  118. # ■ Game_Mission
  119. #------------------------------------------------------------------------------
  120. #  任务信息显示。
  121. #==============================================================================
  122. class Game_Mission
  123.   
  124.   def initialize
  125.     @texts = Array.new
  126.     @texts[0] = ""
  127.     @titletext = ""
  128.     @imtext = ""
  129.     @NPC1 = ""
  130.     @NPC2 = ""
  131.     @bool_mission = false
  132.   end
  133.   
  134.   def setText(line, text)
  135.     @texts[line]=text
  136.   end
  137.   
  138.   def setTitle(text)
  139.     @tetlitext=text
  140.   end
  141.   
  142.   def setImText(text)
  143.     @imtext=text
  144.   end
  145.   
  146.   def setNPC(t1, t2)
  147.     @NPC1=t1
  148.     @NPC2=t2
  149.   end

  150.   def setStatus(b)
  151.     @bool_mission=b
  152.   end

  153.   def getText(line)
  154.     @texts[line]
  155.   end
  156.   
  157.   def visible_line
  158.     @texts.size
  159.   end

  160.   def getTitle
  161.     @tetlitext
  162.   end
  163.   
  164.   def getImText
  165.     @imtext
  166.   end
  167.   
  168.   def getNPC1
  169.     @NPC1
  170.   end
  171.   
  172.   def getNPC2
  173.     @NPC2
  174.   end

  175.   def getStatus
  176.     @bool_mission
  177.   end

  178.   
  179.   
  180.   def clear
  181.     for i in [email protected]
  182.       @texts.delete_at(i)
  183.     end
  184.    
  185.     @titletext = ""
  186.     @imtext = ""
  187.     @NPC1 = ""
  188.     @NPC2 = ""
  189.     @bool_mission = false
  190.   end
  191.   
  192. end


  193. #==============================================================================
  194. # ■ Game_Missions
  195. #------------------------------------------------------------------------------
  196. #  任务信息包装。
  197. #==============================================================================
  198. class Game_Missions
  199.   
  200.   def initialize
  201.     @mission_array=Array.new
  202.     for i in 0...100
  203.       @mission_array[i]=Game_Mission.new
  204.     end
  205.   end
  206.   
  207.   def mission(t)
  208.     return @mission_array[t]
  209.   end
  210.   
  211.   def getNoMission
  212.     for i in 0...100
  213.       if @mission_array[i].getStatus==false
  214.         return i
  215.       end
  216.     end
  217.    
  218.   end
  219.   
  220.   def clear
  221.     for i in 0...100
  222.       @mission_array[i].clear
  223.     end   
  224.   end
  225.   
  226.   def serMission(titletext)
  227.     for i in 0...100
  228.       if @mission_array[i].getTitle==titletext && @mission_array[i].getStatus==true then
  229.         return i
  230.       end
  231.     end
  232.     return -1
  233.       
  234.   end
  235.   
  236.   def getMissionNum
  237.     @r=0
  238.     for i in 99..0
  239.       if @mission_array[i].getStatus==true
  240.         @r=@r+1
  241.       end
  242.     end
  243.     return @r
  244.   end
  245. end


  246. #==============================================================================
  247. # ■ Window_MapHint
  248. #------------------------------------------------------------------------------
  249. #  显示地图信息。 By SkyZH
  250. #==============================================================================

  251. class Window_MapHint < Window_Base
  252.   #--------------------------------------------------------------------------
  253.   # ● 初始化对像
  254.   #--------------------------------------------------------------------------
  255.   def initialize(x, y)
  256.     super(x, y, window_width, Graphics.height)
  257.     self.openness = 0
  258.     open
  259.     refresh
  260.   end
  261.   #--------------------------------------------------------------------------
  262.   # ● 获取窗口的宽度
  263.   #--------------------------------------------------------------------------
  264.   def window_width
  265.     return Graphics.width - 256
  266.   end
  267.   
  268.   def draw_title   
  269.     self.contents.font.color=system_color
  270.     self.contents.font.size=48
  271.     if $game_map.display_name.empty?
  272.       draw_text(4, 0, window_width-40, self.contents.font.size,"提示",1)
  273.     else
  274.       draw_text(4, 0, window_width-40, self.contents.font.size,"提示 - " + $game_map.display_name,1)
  275.     end
  276.    
  277.     self.contents.font.color=normal_color
  278.     self.contents.font.size=Font.default_size
  279.   end
  280.   #--------------------------------------------------------------------------
  281.   # ● 刷新
  282.   #--------------------------------------------------------------------------
  283.   def refresh
  284.     draw_title
  285.     for i in 0...$game_maphint.visible_line
  286.       @tempn=$game_maphint.text(i)
  287.       draw_text(4, line_height*(i)+48, window_width-40, self.contents.font.size ,@tempn,1)
  288.     end
  289.   end
  290. end


  291. #==============================================================================
  292. # ■ Window_MissionShow
  293. #------------------------------------------------------------------------------
  294. #  显示任务信息。 By SkyZH
  295. #==============================================================================

  296. class Window_MissionShow < Window_Selectable
  297.   #--------------------------------------------------------------------------
  298.   # ● 初始化对像
  299.   #--------------------------------------------------------------------------
  300.   def initialize(x, y)
  301.     super(x, y, window_width, Graphics.height)
  302.     self.openness = 0
  303.     open
  304.   end
  305.   
  306.   def setNumber(numbers)
  307.     @Mnumber=numbers
  308.     refresh
  309.   end
  310.   
  311.   #--------------------------------------------------------------------------
  312.   # ● 获取窗口的宽度
  313.   #--------------------------------------------------------------------------
  314.   def window_width
  315.     return Graphics.width
  316.   end
  317.   
  318.   def draw_title(text, line, size ,dwhere ,color)
  319.     self.contents.font.color=color
  320.     self.contents.font.size=size
  321.    
  322.     draw_text(4, line*line_height , window_width-40, size, text ,dwhere)
  323.     self.contents.font.color=normal_color
  324.     self.contents.font.size=Font.default_size
  325.   end  
  326.   #--------------------------------------------------------------------------
  327.   # ● 刷新
  328.   #--------------------------------------------------------------------------
  329.   def refresh
  330.     contents.clear
  331.     @texts= $game_missions.mission(@Mnumber).getTitle
  332.     @vl= $game_missions.mission(@Mnumber).visible_line
  333.     draw_title(@texts,0,48,1,Color.new(255,100,100))
  334.     draw_title("任务介绍",2,22,0,Color.new(100,255,255))
  335.     for i in 0...@vl
  336.       draw_title($game_missions.mission(@Mnumber).getText(i),3+i,18,0,Color.new(255,255,255))
  337.     end
  338.     draw_title("任务奖励/重要信息",4 + @vl,22,0,Color.new(100,255,255))
  339.     draw_title($game_missions.mission(@Mnumber).getImText,5 + @vl,18,0,Color.new(255,255,255))
  340.     draw_title("领取任务NPC",7 + @vl,22,0,Color.new(100,255,255))
  341.     draw_title($game_missions.mission(@Mnumber).getNPC1,8 + @vl,18,0,Color.new(255,255,255))
  342.     draw_title("交接任务NPC",10 + @vl,22,0,Color.new(100,255,255))
  343.     draw_title($game_missions.mission(@Mnumber).getNPC2,11 + @vl,18,0,Color.new(255,255,255))
  344.    
  345.   end
  346.   
  347. end


  348. #==============================================================================
  349. # ■ Window_MenuCommand
  350. #------------------------------------------------------------------------------
  351. #  任务画面中显示指令的窗口 By SkyZH
  352. #==============================================================================

  353. class Window_MissionCommand < Window_Command
  354.   #--------------------------------------------------------------------------
  355.   # ● 初始化对象
  356.   #--------------------------------------------------------------------------
  357.   def initialize
  358.     super(0, 0)
  359.   end
  360.   #--------------------------------------------------------------------------
  361.   # ● 获取窗口的宽度
  362.   #--------------------------------------------------------------------------
  363.   def window_width
  364.     return 256
  365.   end
  366.   #--------------------------------------------------------------------------
  367.   # ● 获取显示行数
  368.   #--------------------------------------------------------------------------
  369.   def visible_line_number
  370.     (Graphics.height-standard_padding*2)/line_height
  371.   end
  372.   #--------------------------------------------------------------------------
  373.   # ● 生成指令列表
  374.   #--------------------------------------------------------------------------
  375.   def make_command_list
  376.     add_original_commands
  377.     add_return_command
  378.   end
  379.   #--------------------------------------------------------------------------
  380.   # ● 独自添加指令用
  381.   #--------------------------------------------------------------------------
  382.   def add_original_commands
  383.     for i in 0...100
  384.       @r=i+1
  385.       @t="mission" + i.to_s
  386.       if $game_missions.mission(i).getStatus==true
  387.         add_command($game_missions.mission(i).getTitle, @t.to_sym)
  388.       end
  389.     end
  390.   end
  391.   #--------------------------------------------------------------------------
  392.   # ● 结束指令用
  393.   #--------------------------------------------------------------------------
  394.   def add_return_command
  395.     add_command("返回", :returnsc)
  396.   end
  397.   #--------------------------------------------------------------------------
  398.   # ● 按下确定键时的处理
  399.   #--------------------------------------------------------------------------
  400.   def process_ok
  401.     super
  402.   end
  403.   
  404.   def call_handler(symbol)
  405.     @handler[symbol].call(symbol.id2name[7,symbol.id2name.size-7].to_i) if handle?(symbol)
  406.   end
  407. end


  408. #encoding:utf-8
  409. #==============================================================================
  410. # ■ Scene_Mission
  411. #------------------------------------------------------------------------------
  412. #  任务
  413. #==============================================================================

  414. class Scene_Mission < Scene_MenuBase
  415.   #--------------------------------------------------------------------------
  416.   # ● 开始处理
  417.   #--------------------------------------------------------------------------
  418.   def start
  419.     super
  420.     create_command_window
  421.   end
  422.   #--------------------------------------------------------------------------
  423.   # ● 生成指令窗口
  424.   #--------------------------------------------------------------------------
  425.   def create_command_window
  426.     @maphint_window= Window_MapHint.new(256,0)
  427.     @command_window = Window_MissionCommand.new
  428.     @window_missionShow=Window_MissionShow.new(0,0)
  429.     @window_missionShow.hide
  430.     @command_window.set_handler(:returnsc,    method(:scenereturns))
  431.     @command_window.set_handler(:cancel,      method(:scenereturns))
  432.     @window_missionShow.set_handler(:cancel,  method(:missionHide))
  433.     @window_missionShow.set_handler(:ok,      method(:missionHide))
  434.     for i in 0...100
  435.       @r=i
  436.       @t="mission" + i.to_s
  437.       @command_window.set_handler(@t.to_sym, method(:missionShow))
  438.     end
  439.    
  440.   end
  441.   
  442.   def scenereturns( t)
  443.     SceneManager.return
  444.   end

  445.   def missionShow( t)
  446.     @window_missionShow.setNumber(t)
  447.     @command_window.deactivate
  448.     @window_missionShow.activate
  449.     @window_missionShow.openness=0
  450.     @window_missionShow.show
  451.     @window_missionShow.open
  452.   end
  453.   
  454.   def missionHide
  455.     @command_window.activate
  456.     @window_missionShow.deactivate
  457.     @window_missionShow.close
  458.     update until @window_missionShow.close?
  459.     @window_missionShow.hide
  460.   end

  461. end




  462. #==============================================================================
  463. # ■ DataManager
  464. #------------------------------------------------------------------------------
  465. #  数据库和游戏实例的管理器。所有在游戏中使用的全局变量都在这里初始化。
  466. #==============================================================================

  467. module DataManager
  468.   #--------------------------------------------------------------------------
  469.   # ● 生成各种游戏对象
  470.   #--------------------------------------------------------------------------
  471.   def self.create_game_objects
  472.     $game_temp          = Game_Temp.new
  473.     $game_system        = Game_System.new
  474.     $game_timer         = Game_Timer.new
  475.     $game_message       = Game_Message.new
  476.     $game_switches      = Game_Switches.new
  477.     $game_variables     = Game_Variables.new
  478.     $game_self_switches = Game_SelfSwitches.new
  479.     $game_actors        = Game_Actors.new
  480.     $game_party         = Game_Party.new
  481.     $game_troop         = Game_Troop.new
  482.     $game_map           = Game_Map.new
  483.     $game_player        = Game_Player.new
  484.     $game_maphint       = Game_MapHint.new
  485.     $game_missions      = Game_Missions.new
  486.   end
  487.   #--------------------------------------------------------------------------
  488.   # ● 生成存档内容
  489.   #--------------------------------------------------------------------------
  490.   def self.make_save_contents
  491.     contents = {}
  492.     contents[:system]        = $game_system
  493.     contents[:timer]         = $game_timer
  494.     contents[:message]       = $game_message
  495.     contents[:switches]      = $game_switches
  496.     contents[:variables]     = $game_variables
  497.     contents[:self_switches] = $game_self_switches
  498.     contents[:actors]        = $game_actors
  499.     contents[:party]         = $game_party
  500.     contents[:troop]         = $game_troop
  501.     contents[:map]           = $game_map
  502.     contents[:player]        = $game_player
  503.     contents[:maphint]       = $game_maphint
  504.     contents[:missions]      = $game_missions
  505.     contents
  506.   end
  507.   #--------------------------------------------------------------------------
  508.   # ● 展开存档内容
  509.   #--------------------------------------------------------------------------
  510.   def self.extract_save_contents(contents)
  511.     $game_system        = contents[:system]
  512.     $game_timer         = contents[:timer]
  513.     $game_message       = contents[:message]
  514.     $game_switches      = contents[:switches]
  515.     $game_variables     = contents[:variables]
  516.     $game_self_switches = contents[:self_switches]
  517.     $game_actors        = contents[:actors]
  518.     $game_party         = contents[:party]
  519.     $game_troop         = contents[:troop]
  520.     $game_map           = contents[:map]
  521.     $game_player        = contents[:player]
  522.     $game_maphint       = contents[:maphint]
  523.     $game_missions      = contents[:missions]
  524.   end
  525. end


  526. #==============================================================================
  527. # ■ Window_MenuCommand
  528. #------------------------------------------------------------------------------
  529. #  菜单画面中显示指令的窗口
  530. #==============================================================================

  531. class Window_MenuCommand < Window_Command
  532.   #--------------------------------------------------------------------------
  533.   # ● 独自添加指令用
  534.   #--------------------------------------------------------------------------
  535.   def add_original_commands
  536.     add_command("地图提示", :maphint)
  537.   end
  538. end



  539. #==============================================================================
  540. # ■ Scene_Menu
  541. #------------------------------------------------------------------------------
  542. #  菜单画面
  543. #==============================================================================

  544. class Scene_Menu < Scene_MenuBase
  545.   #--------------------------------------------------------------------------
  546.   # ● 生成指令窗口
  547.   #--------------------------------------------------------------------------
  548.   def create_command_window
  549.     @command_window = Window_MenuCommand.new
  550.     @command_window.set_handler(:item,      method(:command_item))
  551.     @command_window.set_handler(:skill,     method(:command_personal))
  552.     @command_window.set_handler(:equip,     method(:command_personal))
  553.     @command_window.set_handler(:status,    method(:command_personal))
  554.     @command_window.set_handler(:formation, method(:command_formation))
  555.     @command_window.set_handler(:save,      method(:command_save))
  556.     @command_window.set_handler(:game_end,  method(:command_game_end))
  557.     @command_window.set_handler(:cancel,    method(:return_scene))
  558.    
  559.     @command_window.set_handler(:maphint,   method(:command_maphint))
  560.   end
  561.   
  562.   #--------------------------------------------------------------------------
  563.   # ● 指令“地图提示”
  564.   #--------------------------------------------------------------------------
  565.   def command_maphint
  566.     SceneManager.call(Scene_Mission)
  567.   end
  568.   
  569. end
复制代码
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

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

GMT+8, 2024-12-1 07:49

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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