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

Project1

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

[RMVA发布] 任務「佈告欄」系統

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
78 小时
注册时间
2011-6-29
帖子
16
跳转到指定楼层
1
发表于 2012-11-23 19:23:23 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 feizhaodan 于 2012-11-23 22:31 编辑

本系統並非一般的觀看當前任務的系統
而是類似魔物獵人的接取任務的系統
是我接觸RGSS之後第一個作品
保證有BUG
應該用了很多很矬很土法煉鋼的方法
需要改進的部份也很多,麻煩各位前輩多多指教

使用方法請參考系統內註解








RUBY 代码复制
  1. #==============================================================================
  2. # ■ Quests
  3. #------------------------------------------------------------------------------
  4. #  用於設定任務內容的模組。
  5. #==============================================================================
  6.  
  7. =begin
  8. 使用說明:
  9. 在本模組下設定好所有遊戲中的任務的資料,
  10. 將下方兩個#---之間的腳本複製一份就能創造新任務,
  11. @name = 任務名稱
  12. @info = 任務的簡介,可使用一般對話的指令,前面多加一個\。
  13. [url=home.php?mod=space&uid=13302]@exp[/url] = 顯示的經驗值
  14. [url=home.php?mod=space&uid=236945]@gold[/url] = 顯示的報酬金
  15. @loop_b = 任務可否重覆執行(true or false)
  16. @comev_id = 對應的公用事件編號
  17.  
  18. 本系統只處理任務佈告欄的部份,
  19. 接受任務之後會對應到公用事件,請用公用事件設定接下來的行動。
  20.  
  21. 腳本功能:
  22. 在事件中使用自訂腳本寫入以下語法:
  23.  
  24. 設定任務可用 - $game_party.get_quest("任務名稱")
  25. 設定任務禁用 - $game_party.lost_quest("任務名稱")
  26. 設定任務完成 - $game_party.finish_quest("任務名稱")
  27.  
  28. 本系統任務是以名稱當做標籤,而非常見的編號
  29. 一開始使用可能會覺得不習慣
  30. 不過遊戲內容一但變得龐大之後應該會感到方便。
  31.  
  32. 另外在任務列表下按shift可以選擇顯示任務的類別。
  33. 在任務數量增加之後應該會變得方便(對玩家而言)。
  34. =end
  35.  
  36. module Quests
  37.   Quest_list = Array.new
  38.   $game_quest = nil
  39.  
  40.     def create_quest
  41.       h = {'name' => @name,
  42.               'info' => @info,
  43.               'exp' => @exp,
  44.               'gold' => @gold,
  45.               'loop' => @loop_b,
  46.               'usability' => false,
  47.               'finished' => false,
  48.               'ev_id' => @comev_id}  
  49.       Quest_list.push h
  50.     end  
  51.     module_function :create_quest
  52.  
  53. #---
  54.   @name = "今晚吃香菇濃湯"
  55.   @info = "委託人:忙碌的村婦
  56. 今天晚上想要煮好喝的香菇濃湯
  57. 給心愛的老公,可是香菇居然用
  58. 完了,請幫我摘一些吧。
  59.  
  60. PS: 煮好會分你一份"
  61.   @exp = 5
  62.   @gold = 10
  63.   @loop_b = false
  64.   @comev_id = 1
  65.  
  66. create_quest
  67. #---
  68.   @name = "盜賊出沒"
  69.   @info = "委託人:村長
  70. 村子西邊的山上居然出現了\\c[2]盜賊\\c[0]
  71. !!不管是誰都好,請\\c[2]討伐\\c[0]他們
  72. 吧!"
  73.   @exp = 20
  74.   @gold = 50
  75.   @loop_b = true
  76.   @comev_id = 2
  77.  
  78.   create_quest
  79.  
  80. #---
  81.   @name = "戀人的遺願"
  82.   @info = "委託人:道具店老闆希莎
  83. 我的未婚夫在一次冒險中喪生了
  84. ,希望你能幫我將他的屍體帶回
  85. 來,讓我能好好安葬他。他曾經
  86. 用過劍就讓你使用,將他的意志
  87. 傳承下去吧。
  88. 特殊獎勵:\\i[387]絕世好劍
  89.   "
  90.   @exp = 40
  91.   @gold = 0
  92.   @loop_b = false
  93.   @comev_id = 3
  94.  
  95.   create_quest   
  96.  
  97. #---
  98.   @name = "快來抓我!"
  99.   @info = "委託人:小女孩茉莉
  100. 我可是鎮上的捉迷藏高手呢!如
  101. 果你有辦法在時間內抓到我的話
  102. ,就給你糖果!
  103. "
  104.   @exp = 3
  105.   @gold = 10
  106.   @loop_b = true
  107.   @comev_id = 4
  108.  
  109.   create_quest   
  110.  
  111.  
  112. end


RUBY 代码复制
  1. #==============================================================================
  2. # ■ Window_QuestType
  3. #------------------------------------------------------------------------------
  4. #  任務列表顯示方式的選擇視窗。
  5. #==============================================================================
  6.  
  7. class Window_QuestType < Window_Command
  8.   #--------------------------------------------------------------------------
  9.   # ● 物件初始化
  10.   #--------------------------------------------------------------------------
  11.   def initialize
  12.     super(36, 150)
  13.     deactivate
  14.     self.openness = 0
  15.   end
  16.   #--------------------------------------------------------------------------
  17.   # ● 項目的作成
  18.   #--------------------------------------------------------------------------
  19.   def make_command_list
  20.     add_command("全部",  :all_quests)
  21.     add_command("未完成", :unfinished_quests)
  22.     add_command("循環", :loop_quests)
  23.     add_command("取消", :cancel)
  24.   end
  25. end


RUBY 代码复制
  1. #==============================================================================
  2. # ■ Window_QuestList
  3. #------------------------------------------------------------------------------
  4. #  任務列表選擇視窗。
  5. #==============================================================================
  6.  
  7.  
  8. class Window_QuestList < Window_Selectable
  9.   attr_accessor :type
  10.   attr_reader :quest_list
  11.   #--------------------------------------------------------------------------
  12.   # ● 物件初始化
  13.   #--------------------------------------------------------------------------
  14.   def initialize
  15.     super(12,48,160, 300)
  16.     create_contents
  17.     @type = 0
  18.     @index = 0
  19.     activate
  20.   end
  21.   #--------------------------------------------------------------------------
  22.   # ● 顯示類型的設定
  23.   #--------------------------------------------------------------------------
  24.   def set_type(n)
  25.     @type = n
  26.     set_item_max
  27.   end
  28.   #--------------------------------------------------------------------------
  29.   # ● 項目數的取得
  30.   #--------------------------------------------------------------------------
  31.   def item_max
  32.     return @item_max != nil ? @item_max : 0
  33.   end
  34.   #--------------------------------------------------------------------------
  35.   # ● 項目數的計算
  36.   #--------------------------------------------------------------------------
  37.   def set_item_max
  38.     @quest_list = []
  39.     case @type
  40.     when 0  #所有任務
  41.       p = []
  42.       q = []
  43.       Quests::Quest_list.each { |h|
  44.         if h['usability']
  45. #~           @quest_list.unshift h if h['finished'] == false || h['loop']
  46. #~           @quest_list.push h if h['finished'] && h['loop'] == false
  47.           p.push h if h['finished'] == false || h['loop']
  48.           q.push h if h['finished'] && h['loop'] == false
  49.         end
  50.       }
  51.       @quest_list = p + q
  52.     when 1 #未完成任務
  53.       Quests::Quest_list.each { |h|
  54.         if h['usability'] && h['finished'] == false
  55.           @quest_list.push h
  56.         end
  57.       }
  58.     when 2 #循環任務
  59.         Quests::Quest_list.each { |h|
  60.         if h['usability'] && h['loop']
  61.           @quest_list.push h
  62.         end
  63.       }
  64.     end
  65.     @item_max = @quest_list.size
  66.   end
  67.   #--------------------------------------------------------------------------
  68.   # ● 刷新
  69.   #--------------------------------------------------------------------------
  70.   def refresh
  71.     set_item_max
  72.     super
  73.   end
  74.   #--------------------------------------------------------------------------
  75.   # ● 項目的描畫
  76.   #--------------------------------------------------------------------------
  77.   def draw_item(index)
  78.     text = ""
  79.     if @quest_list[index] != nil
  80.       text = @quest_list[index]['name']
  81.     end
  82.     if @quest_list[index]['loop']
  83.       change_color(system_color)
  84.     elsif @quest_list[index]['finished']
  85.       change_color(gauge_back_color)
  86.     else
  87.       change_color(normal_color)
  88.     end
  89.     draw_text(item_rect_for_text(index), text)
  90.   end
  91.   #--------------------------------------------------------------------------
  92.   # ● 獲取項目的繪制矩形(內容用)
  93.   #--------------------------------------------------------------------------
  94.   def item_rect_for_text(index)
  95.     rect = item_rect(index)
  96.     rect.x += 4
  97.     rect.width = 160
  98.     rect
  99.   end
  100. end


RUBY 代码复制
  1. #==============================================================================
  2. # ■ Window_QuestInfo
  3. #------------------------------------------------------------------------------
  4. #  任務列表顯示內容的視窗。
  5. #==============================================================================
  6.  
  7. class Window_QuestInfo < Window_Base
  8. #~   attr_accessor :list_index
  9.   attr_accessor :list_window
  10.   #--------------------------------------------------------------------------
  11.   # ● 物件初始化
  12.   #--------------------------------------------------------------------------
  13.   def initialize
  14.     super(184,24,Graphics.width - 184,Graphics.height - 48)
  15.     create_contents
  16.     @list_index = 0
  17. #~     refresh
  18.     deactivate
  19.   end
  20.   #--------------------------------------------------------------------------
  21.   # ● 刷新
  22.   #--------------------------------------------------------------------------
  23.   def refresh
  24.     contents.clear
  25.     draw_desc
  26.   end
  27.   #--------------------------------------------------------------------------
  28.   # ● 描畫內容
  29.   #--------------------------------------------------------------------------
  30.   def draw_desc
  31.     quest = @list_window.quest_list[@list_window.index]
  32.      if quest != nil
  33.        draw_text_ex( 0, 0, quest['info'])
  34.        draw_text_ex( 0, 202, "經驗值:" + quest['exp'].to_s)
  35.        draw_text_ex( 0, 226, "報酬金:" + quest['gold'].to_s)
  36.        draw_text_ex( 0, 250, "\\c[20]已完成") if quest['finished']
  37.        draw_text_ex( 0, 274, "\\c[16]可重覆進行") if quest['loop']
  38.        draw_text_ex( 0, self.height - 48, "\\c[18]確定要接受這個任務嗎?") if self.active
  39.      else
  40.        draw_text_ex( 60, 160, "目前沒有可接受任務。")
  41.      end
  42.    end
  43. end


RUBY 代码复制
  1. #==============================================================================
  2. # ■ Game_Party
  3. #------------------------------------------------------------------------------
  4. #  パーティを扱うクラスです。所持金やアイテムなどの情報が含まれます。このクラ
  5. # スのインスタンスは $game_party で参照されます。
  6. #==============================================================================
  7.  
  8. class Game_Party < Game_Unit
  9.   #--------------------------------------------------------------------------
  10.   # ● 以自訂腳本啟用任務的方法
  11.   #--------------------------------------------------------------------------
  12.   def get_quest(name)   
  13.     Quests::Quest_list.each do |h|
  14.       if h['name'] == name
  15.         h['usability'] = true
  16.         break
  17.       end
  18.     end
  19.   end
  20.   #--------------------------------------------------------------------------
  21.   # ● 以自訂腳本停用任務的方法
  22.   #--------------------------------------------------------------------------
  23.     def lost_quest(name)
  24.     Quests::Quest_list.each do |h|
  25.       if h['name'] == name
  26.         h['usability'] = false
  27.         break
  28.       end
  29.     end
  30.   end
  31.   #--------------------------------------------------------------------------
  32.   # ● 以自訂腳本完成任務的方法
  33.   #--------------------------------------------------------------------------
  34.     def finish_quest(name)
  35.     Quests::Quest_list.each do |h|
  36.       if h['name'] == name
  37.         h['finished'] = true
  38.         break
  39.       end
  40.     end
  41.   end
  42. end


RUBY 代码复制
  1. #==============================================================================
  2. # ■ Scene_Quest
  3. #------------------------------------------------------------------------------
  4. #  處理任務場景的類。
  5. #==============================================================================
  6.  
  7. class Scene_Quest < Scene_Base
  8.   #--------------------------------------------------------------------------
  9.   # ● 開始處理
  10.   #--------------------------------------------------------------------------
  11.   def start
  12.     super
  13.     create_list_window
  14.     create_info_window
  15.     create_type_window
  16.     create_background
  17.     create_check_window if $game_quest != nil
  18.   end
  19.   #--------------------------------------------------------------------------
  20.   # ● 刷新
  21.   #--------------------------------------------------------------------------
  22.   def update
  23.     super
  24.     if @info_window.active
  25.       action = 1
  26.     elsif @list_window.active
  27.       action = 2
  28.     elsif @type_window.active
  29.       action = 3
  30.     elsif @check_window.active
  31.       action = 4
  32.     end
  33.  
  34.     case action
  35.     when 1 #任務確認狀態
  36.       if Input.trigger?(:C) #按下確定的情形
  37.         Sound.play_ok
  38.         $game_quest = @list_window.quest_list[@list_window.index]
  39.         $game_temp.reserve_common_event($game_quest['ev_id'])
  40.         Audio.me_play("Audio/ME/Item")
  41.         return_scene
  42.       end     
  43.       if Input.trigger?(:B) #按下取消的情形
  44.         Sound.play_cancel
  45.         @list_window.activate
  46.         @info_window.deactivate
  47.         @info_window.refresh
  48.       end
  49.     when 2
  50.       if Input.trigger?(:A)
  51.         show_type_window
  52.       end
  53.       if Input.trigger?(:UP) || Input.trigger?(:DOWN)
  54.         @info_window.refresh
  55.       end
  56.       if Input.trigger?(:B)
  57.         return_scene
  58.       end
  59.       if Input.trigger?(:C)
  60.         if @list_window.quest_list.empty?
  61.           Sound.play_cancel
  62.           return_scene
  63.         elsif crack_quest_state
  64.           Sound.play_ok
  65.           @list_window.deactivate
  66.           @info_window.activate
  67.           @info_window.refresh
  68.         else
  69.           Sound.play_buzzer
  70.         end
  71.       end
  72.     when 3
  73.       if Input.trigger?(:B)
  74.         hide_type_window
  75.       end
  76.     when 4
  77.       if Input.trigger?(:C)
  78.         Audio.se_play("Audio/SE/Save")
  79.         $game_quest = nil
  80.         hide_check_window
  81.       end
  82.       if Input.trigger?(:B)
  83.         Sound.play_cancel
  84.         return_scene
  85.       end
  86.     end
  87.   end
  88.   #--------------------------------------------------------------------------
  89.   # ● 終了処理
  90.   #--------------------------------------------------------------------------
  91.   def terminate
  92.     super
  93.     dispose_background
  94.   end
  95.   #--------------------------------------------------------------------------
  96.   # ● 任務類型視窗的生成
  97.   #--------------------------------------------------------------------------
  98.   def create_type_window
  99.     @type_window = Window_QuestType.new
  100.     @type_window.set_handler(:all_quests, method(:view_all_quests))
  101.     @type_window.set_handler(:unfinished_quests,method(:view_unfinished_quests))
  102.     @type_window.set_handler(:loop_quests,method(:view_loop_quests))
  103.     @type_window.set_handler(:cancel,method(:hide_type_window))
  104.   end
  105.   #--------------------------------------------------------------------------
  106.   # ● 任務清單視窗的生成
  107.   #--------------------------------------------------------------------------
  108.   def create_list_window
  109.     @list_window = Window_QuestList.new
  110. #~     @list_window.set_finish(false)
  111.     @list_window.refresh
  112.   end
  113.   #--------------------------------------------------------------------------
  114.   # ● 任務內容視窗的生成
  115.   #--------------------------------------------------------------------------
  116.   def create_info_window
  117.     @info_window = Window_QuestInfo.new
  118.     @info_window.list_window=(@list_window)
  119.     @info_window.refresh
  120.   end
  121.   #--------------------------------------------------------------------------
  122.   # ● 取消任務視窗的生成
  123.   #--------------------------------------------------------------------------
  124.   def create_check_window
  125.     @check_window = Window_Base.new(128, 184, 288, 48)
  126.     @check_window.draw_text_ex( 0, 0, "已接受任務,要取消嗎?")
  127.     @check_window.openness = 0
  128.     @list_window.deactivate
  129.     @list_window.opacity = 128
  130.     @info_window.opacity = 128
  131.     @check_window.activate
  132.     @check_window.open
  133.   end
  134.   #--------------------------------------------------------------------------
  135.   # ● 切換顯示所有任務
  136.   #--------------------------------------------------------------------------
  137.   def view_all_quests
  138.     @list_window.type=(0)
  139.     @list_window.index = 0
  140.     hide_type_window
  141.   end
  142.   #--------------------------------------------------------------------------
  143.   # ● 切換顯示未完成任務
  144.   #--------------------------------------------------------------------------
  145.   def view_unfinished_quests
  146.         @list_window.type=(1)
  147.         @list_window.index = 0
  148.         hide_type_window
  149.   end
  150.   #--------------------------------------------------------------------------
  151.   # ● 切換顯示循環任務
  152.   #--------------------------------------------------------------------------
  153.   def view_loop_quests
  154.         @list_window.type=(2)
  155.         @list_window.index = 0
  156.         hide_type_window
  157.   end
  158.   #--------------------------------------------------------------------------
  159.   # ● 隱藏任務類型視窗
  160.   #--------------------------------------------------------------------------
  161.   def hide_type_window
  162.     @list_window.refresh
  163.     @list_window.activate
  164.     @list_window.opacity = 255
  165.     @info_window.opacity = 255
  166.     @info_window.refresh
  167.     @type_window.deactivate
  168.     @type_window.close
  169. #~     @type_window.hide
  170. end
  171.   #--------------------------------------------------------------------------
  172.   # ● 隱藏任務取消視窗
  173.   #--------------------------------------------------------------------------
  174.   def hide_check_window
  175.     @list_window.activate
  176.     @list_window.opacity = 255
  177.     @info_window.opacity = 255
  178.     @check_window.deactivate
  179.     @check_window.close
  180.   end
  181.   #--------------------------------------------------------------------------
  182.   # ● 顯示任務類型視窗
  183.   #--------------------------------------------------------------------------
  184.   def show_type_window
  185.     @list_window.deactivate
  186.     @list_window.opacity = 128
  187.     @info_window.opacity = 128
  188. #~     @type_window.show
  189.     @type_window.open
  190.     @type_window.activate
  191.     @type_window.index = @list_window.type
  192.   end
  193.   #--------------------------------------------------------------------------
  194.   # ● 背景の作成
  195.   #--------------------------------------------------------------------------
  196.   def create_background
  197.     @background_sprite = Sprite.new
  198.     @background_sprite.bitmap = SceneManager.background_bitmap
  199.     @background_sprite.color.set(16, 16, 16, 128)
  200.   end
  201.   #--------------------------------------------------------------------------
  202.   # ● 背景の解放
  203.   #--------------------------------------------------------------------------
  204.   def dispose_background
  205.     @background_sprite.dispose
  206.   end
  207.   #--------------------------------------------------------------------------
  208.   # ● 確認當前任務狀態
  209.   #--------------------------------------------------------------------------
  210.   def crack_quest_state
  211.     q = @list_window.quest_list[@list_window.index]
  212.     if q['finished'] == true && q['loop'] != true
  213.       return false
  214.     else
  215.       return true
  216.     end
  217.   end
  218. end


Questsystem.part1.rar (999 KB, 下载次数: 230)
Questsystem.part2.rar (456.81 KB, 下载次数: 210)   

评分

参与人数 3星屑 +397 收起 理由
swbxhlh + 12 塞糖
Mic_洛洛 + 45 VA党,追加奖赏
feizhaodan + 340 奖赏条例

查看全部评分

Lv1.梦旅人

梦石
0
星屑
50
在线时间
164 小时
注册时间
2011-8-15
帖子
238
2
发表于 2012-11-23 22:13:51 | 只看该作者
或许如果LZ直接在菜单上把可重复任务和不可重复任务分开来会更好。

点评

還是看使用者想怎麼呈現吧,要修改也只要改改幾行而已  发表于 2012-11-23 23:09
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
206 小时
注册时间
2012-9-27
帖子
8
3
发表于 2012-11-24 14:35:26 | 只看该作者
请问下,
怎么样才能使接取任务后
不重复跳出"已接受任务,要取消吗?"
直接将create_check_window if $game_quest != nil覆盖么?

点评

對 把這句刪掉就好了  发表于 2012-11-24 16:52
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9280
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

4
发表于 2012-12-1 13:07:36 | 只看该作者
1L附带的2个压缩包下完放到一起吗还是怎么回事···
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
46 小时
注册时间
2013-12-6
帖子
22
5
发表于 2014-1-28 17:27:37 | 只看该作者
装上脚本后,没有bug,但游戏卡了,卡得很慢很慢,求解决

点评

跟哪個腳本衝突到了吧,只能請你自己檢查看看  发表于 2014-2-2 03:48
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-21 10:33

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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