1.pdf
(20.5 KB, 下载次数: 28)
| class Game_Party |
| #-------------------------------------------------------------------------- |
| # ● 設置任務資料 |
| #-------------------------------------------------------------------------- |
| def get_tasks_info |
| @tasks_info = [] |
| |
| |
| name = "\\c[9]帮助" |
| intro = "狂版RTAB ver 0.24PF |
| \\c[9]操作说明: |
| A(Shift):决定使用回声 |
| (注:回声就是右下角的星星,攒足一定的攻击数可以攻击力翻倍) |
| B(X):取消 |
| C(C):确定 |
| X(A):攻击的快捷键 |
| Y(S):技能快捷键 |
| Z(D):防御快捷键 |
| L(Q):物品快捷键 |
| R(W):逃跑快捷键 |
| (具体看F1设定) |
| 请进入菜单,调整角色设置. |
| 注:回声只对物理技能有效 |
| |
| " |
| @tasks_info[2] = Game_Task.new(name, intro) |
| |
| |
| name = "\\c[9]连携技能演示" |
| intro = "冰刃+寒冰斩=落霜剑 |
| 落雷术+奔雷斩=天雷破 |
| 爆发术+V型斩=幻胧术 |
| " |
| @tasks_info[1] = Game_Task.new(name, intro) |
| end |
| end |
| |
| #============================================================================== |
| # ■ Interpreter |
| #------------------------------------------------------------------------------ |
| # 执行事件命令的解释器。本类在 Game_System 类 |
| # 与 Game_Event 类的内部使用。 |
| #============================================================================== |
| class Game_Interpreter |
| #-------------------------------------------------------------------------- |
| # ● 接受任务 |
| #-------------------------------------------------------------------------- |
| def get_task(id) |
| task = $game_party.tasks_info[id] |
| return true if (task.nil? or $game_party.current_tasks.include?(task.id)) |
| $game_party.current_tasks.unshift(task.id) |
| return true |
| end |
| #-------------------------------------------------------------------------- |
| # ● 获得全部任务 |
| #-------------------------------------------------------------------------- |
| def get_all_task |
| # 清空当前任务 |
| $game_party.current_tasks.clear |
| for task in $game_party.tasks_info |
| next if task.nil? |
| $game_party.current_tasks.unshift(task.id) |
| end |
| return true |
| end |
| #-------------------------------------------------------------------------- |
| # ● 完成/放弃任务 |
| #-------------------------------------------------------------------------- |
| def finish_task(id) |
| task = $game_party.tasks_info[id] |
| return true if task.nil? |
| $game_party.current_tasks.delete(task.id) |
| return true |
| end |
| #-------------------------------------------------------------------------- |
| # ● 删除全部任务 |
| #-------------------------------------------------------------------------- |
| def finish_all_task |
| $game_party.current_tasks.clear |
| return true |
| end |
| end |
| #============================================================================== |
| # ■ Game_Party |
| #------------------------------------------------------------------------------ |
| # 处理队伍的类。包含金钱以及物品的信息。 |
| # 这个类的实例请参考 $game_party 。 |
| #============================================================================== |
| class Game_Party |
| #-------------------------------------------------------------------------- |
| # ● 定义实例变量 |
| #-------------------------------------------------------------------------- |
| attr_writer :latest_task # 上次查看任务 |
| #-------------------------------------------------------------------------- |
| # ● 取得任务资料 |
| #-------------------------------------------------------------------------- |
| def tasks_info |
| if @tasks_info.nil? |
| get_tasks_info |
| end |
| return @tasks_info |
| end |
| #-------------------------------------------------------------------------- |
| # ● 取得当前任务 |
| #-------------------------------------------------------------------------- |
| def current_tasks |
| if @current_tasks.nil? |
| @current_tasks = [] |
| end |
| return @current_tasks |
| end |
| #-------------------------------------------------------------------------- |
| # ● 上次查看任务 |
| #-------------------------------------------------------------------------- |
| def latest_task |
| if !current_tasks.include?(@latest_task) |
| @latest_task = current_tasks[0] |
| end |
| return @latest_task |
| end |
| end |
| #============================================================================== |
| # ■ Game_Task |
| #------------------------------------------------------------------------------ |
| # 处理任务的类。包含任务信息。 |
| #============================================================================== |
| class Game_Task |
| attr_accessor :name # 名称 |
| attr_accessor :briefing # 简介 |
| def initialize(name, briefing) |
| @name = name |
| @briefing = briefing |
| end |
| def height |
| text = @briefing.clone |
| x = 0 |
| y = 64 |
| min_y = 0 |
| # 限制文字处理 |
| begin |
| last_text = text.clone |
| text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] } |
| end until text == last_text |
| text.gsub!(/\\[Nn]\[([0-9]+)\]/) do |
| $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : "" |
| end |
| # 為了方便、將 "\\\\" 變換為 "\000" |
| text.gsub!(/\\\\/) { "\000" } |
| # "\C" 變為 "\001" |
| text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" } |
| # "\I" 變為 "\002" |
| text.gsub!(/\\[Ii]/) { "\002" } |
| # "\P" 變為 "\003" |
| text.gsub!(/\\[Pp]/) { "\003" } |
| # c 獲取 1 個字 (如果不能取得文字就循環) |
| while ((c = text.slice!(/./m)) != nil) |
| # \\ 的情況下 |
| if c == "\000" |
| # 還原為本來的文字 |
| c = "\\" |
| end |
| # \C[n] 的情況下 |
| if c == "\001" |
| # 更改文字色 |
| text.sub!(/\[([0-9]+)\]/, "") |
| # 下面的文字 |
| next |
| end |
| # 圖標的情況下 |
| if c == "\002" |
| icon_name = '' |
| while ((cha = text.slice!(/./m)) != ']') |
| next if cha == '[' |
| icon_name += cha |
| end |
| if x + 24 > 368 |
| x = 0 |
| y += [24, min_y].max |
| min_y = 0 |
| end |
| x += 28 |
| next |
| end |
| # 圖片的情況下 |
| if c == "\003" |
| pic_name = '' |
| while ((cha = text.slice!(/./m)) != ']') |
| next if cha == '[' |
| pic_name += cha |
| end |
| pic = Cache.picture(pic_name) |
| if x + pic.width > 368 |
| x = 0 |
| y += [32, min_y].max |
| min_y = 0 |
| end |
| x += pic.width |
| min_y = [pic.height, 32].max |
| next |
| end |
| # 另起一行文字的情況下 |
| if c == " " |
| y += [24, min_y].max |
| min_y = 0 |
| x = 0 |
| # 下面的文字 |
| next |
| end |
| # 自動換行處理 |
| if x + 22 > 368 |
| y += [24, min_y].max |
| min_y = 0 |
| x = 0 |
| end |
| # x 為要描繪文字的加法運算 |
| x += 22 |
| end |
| return (y + [24, min_y].max) |
| end |
| def id |
| return $game_party.tasks_info.index(self) |
| end |
| end |
| #============================================================================== |
| # ■ Window_Task_Name |
| #------------------------------------------------------------------------------ |
| # 任務名稱顯示窗口。 |
| #============================================================================== |
| class Window_Task_Name < Window_Selectable |
| #-------------------------------------------------------------------------- |
| # ● 初始化對像 |
| #-------------------------------------------------------------------------- |
| def initialize(tasks) |
| super(0, 0, 192, 416) |
| @tasks = [] |
| for id in tasks |
| @tasks.push($game_party.tasks_info[id]) |
| end |
| @item_max = tasks.size |
| self.contents = Bitmap.new( |
| self.width - 32, @item_max == 0 ? 32 : @item_max * 32) |
| refresh |
| self.index = 0 |
| end |
| #-------------------------------------------------------------------------- |
| # ● 刷新 |
| #-------------------------------------------------------------------------- |
| def refresh |
| self.contents.clear |
| if @tasks != [] |
| for task in @tasks |
| draw_item(task) |
| end |
| else |
| draw_blank |
| end |
| end |
| |
| |
| #-------------------------------------------------------------------------- |
| # ● 描繪空行 |
| #-------------------------------------------------------------------------- |
| def draw_blank |
| self.contents.font.color = disabled_color |
| rect = Rect.new(4, 0, self.contents.width - 8, 32) |
| self.contents.fill_rect(rect, Color.new(0, 0, 0, 0)) |
| self.contents.draw_text(rect, '没有任务') |
| end |
| |
| #-------------------------------------------------------------------------- |
| # ● 描繪項目 |
| #-------------------------------------------------------------------------- |
| def draw_item(task) |
| text = task.name.clone |
| x = 0 |
| y = @tasks.index(task) * WLH |
| # 限制文字處理 |
| begin |
| last_text = text.clone |
| text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] } |
| end until text == last_text |
| text.gsub!(/\\[Nn]\[([0-9]+)\]/) do |
| $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : "" |
| end |
| # 為了方便、將 "\\\\" 變換為 "\000" |
| text.gsub!(/\\\\/) { "\000" } |
| # "\\C" 變為 "\001" |
| text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" } |
| # "\I" 變為 "\002" |
| text.gsub!(/\\[Ii]/) { "\002" } |
| # "\P" 變為 "\003" |
| text.gsub!(/\\[Pp]/) { "\003" } |
| # c 獲取 1 個字 (如果不能取得文字就循環) |
| while ((c = text.slice!(/./m)) != nil) |
| # \\ 的情況下 |
| if c == "\000" |
| # 還原為本來的文字 |
| c = "\\" |
| end |
| # \C[n] 的情況下 |
| if c == "\001" |
| # 更改文字色 |
| text.sub!(/\[([0-9a-zA-Z]+)\]/, "") |
| # 如果是设定RGB颜色 |
| if $1[0,1]=="H" |
| # 先拷贝一下文字 |
| c=$1.dup |
| # 分3段分别取出R,G,B颜色 |
| c.sub!(/H([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})/, "") |
| # 设定文字颜色 |
| self.contents.font.color = Color.new($1.to_i(16), $2.to_i(16), $3.to_i(16)) |
| next |
| else |
| color = $1.to_i |
| if color >= 0 and color <= 7 |
| self.contents.font.color = text_color(color) |
| elsif color == 8 |
| self.contents.font.color = disabled_color |
| elsif color == 9 |
| self.contents.font.color = system_color |
| end |
| end |
| # 下面的文字 |
| next |
| end |
| # 圖標的情況下 |
| if c == "\002" |
| icon_name = '' |
| while ((cha = text.slice!(/./m)) != ']') |
| next if cha == '[' |
| icon_name += cha |
| end |
| if x + 24 > self.contents.width |
| x = 0 |
| y += [WLH, min_y].max |
| min_y = 0 |
| end |
| draw_icon(icon_name.to_i, x+24, y+18, true) |
| x += 28 |
| next |
| end |
| # 圖片的情況下 |
| if c == "\003" |
| pic_name = '' |
| while ((cha = text.slice!(/./m)) != ']') |
| next if cha == '[' |
| pic_name += cha |
| end |
| pic = Cache.picture(pic_name) |
| if x + pic.width > self.contents.width |
| x = 0 |
| y += [WLH, min_y].max |
| min_y = 0 |
| end |
| self.contents.blt(x + 4, y, pic, Rect.new(0, 0, pic.width, pic.height)) |
| x += pic.width |
| next |
| end |
| # 描繪文字 |
| self.contents.draw_text(4 + x, y, 40, WLH, c) |
| # x 為要描繪文字的加法運算 |
| x += self.contents.text_size(c).width |
| end |
| end |
| #-------------------------------------------------------------------------- |
| # ● 獲取任務 |
| #-------------------------------------------------------------------------- |
| def task |
| return @tasks[self.index] |
| end |
| end |
| |
| #============================================================================== |
| # ■ Window_Task |
| #------------------------------------------------------------------------------ |
| # 任務內容顯示窗口。 |
| #============================================================================== |
| class Window_Task < Window_Base |
| #-------------------------------------------------------------------------- |
| # ● 初始化對像 |
| #-------------------------------------------------------------------------- |
| def initialize(task_id) |
| super(192, 0, 352, 416) |
| refresh(task_id) |
| end |
| #-------------------------------------------------------------------------- |
| # ● 刷新內容 |
| #-------------------------------------------------------------------------- |
| def refresh(task_id) |
| self.oy = 0 |
| self.visible = true |
| return if task_id.nil? |
| task = $game_party.tasks_info[task_id] |
| if !task.nil? |
| if task.height < 128 |
| self.contents = Bitmap.new(self.width - 32, self.height - 32) |
| else |
| self.contents = Bitmap.new(self.width - 32, task.height - 128) |
| end |
| else |
| self.contents = Bitmap.new(self.width - 32, self.height - 64) |
| return |
| end |
| self.contents.font.color = normal_color |
| # 描繪任務內容 |
| draw_task_info(task) |
| end |
| |
| #-------------------------------------------------------------------------- |
| # ● 描繪任務內容 |
| #-------------------------------------------------------------------------- |
| def draw_task_info(task) |
| # 記錄文字x坐標 |
| x = 0 |
| # 記錄文字y坐標 |
| y = 0 |
| # 記錄換行時y坐標最小加值 |
| min_y = 0 |
| self.contents.font.color = normal_color |
| # 描繪任務簡介 |
| text = task.briefing.clone |
| # 限制文字處理 |
| begin |
| last_text = text.clone |
| text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] } |
| end until text == last_text |
| text.gsub!(/\\[Nn]\[([0-9]+)\]/) do |
| $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : "" |
| end |
| # 為了方便、將 "\\\\" 變換為 "\000" |
| text.gsub!(/\\\\/) { "\000" } |
| # "\C" 變為 "\001" |
| text.gsub!(/\\[Cc]\[([0-9a-zA-Z]+)\]/) { "\001[#{$1}]" } |
| #text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" } |
| # "\I" 變為 "\002" |
| text.gsub!(/\\[Ii]/) { "\002" } |
| # "\P" 變為 "\003" |
| text.gsub!(/\\[Pp]/) { "\003" } |
| # c 獲取 1 個字 (如果不能取得文字就循環) |
| while ((c = text.slice!(/./m)) != nil) |
| # \\ 的情況下 |
| if c == "\000" |
| # 還原為本來的文字 |
| c = "\\" |
| end |
| # \C[n] 的情況下 |
| if c == "\001" |
| # 更改文字色 |
| text.sub!(/\[([0-9a-zA-Z]+)\]/, "") |
| # 如果是设定RGB颜色 |
| if $1[0,1]=="H" |
| # 先拷贝一下文字 |
| c=$1.dup |
| # 分3段分别取出R,G,B颜色 |
| c.sub!(/H([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})/, "") |
| # 设定文字颜色 |
| self.contents.font.color = Color.new($1.to_i(16), $2.to_i(16), $3.to_i(16)) |
| else |
| color = $1.to_i |
| if color >= 0 and color <= 7 |
| self.contents.font.color = text_color(color) |
| elsif color == 8 |
| self.contents.font.color = disabled_color |
| elsif color == 9 |
| self.contents.font.color = system_color |
| end |
| end |
| # 下面的文字 |
| next |
| end |
| |
| # 圖標的情況下 |
| if c == "\002" |
| icon_name = '' |
| while ((cha = text.slice!(/./m)) != ']') |
| next if cha == '[' |
| icon_name += cha |
| end |
| if x + 24 > self.contents.width |
| x = 0 |
| y += [WLH, min_y].max |
| min_y = 0 |
| end |
| draw_icon(icon_name.to_i, x+24, y+18, true) |
| x += 28 |
| next |
| end |
| |
| # 圖片的情況下 |
| if c == "\003" |
| pic_name = '' |
| while ((cha = text.slice!(/./m)) != ']') |
| next if cha == '[' |
| pic_name += cha |
| end |
| pic = Cache.picture(pic_name) |
| if x + pic.width > self.contents.width |
| x = 0 |
| y += [WLH, min_y].max |
| min_y = 0 |
| end |
| self.contents.blt(x + 20, y +18, pic, Rect.new(0, 0, pic.width, pic.height)) |
| x += pic.width |
| min_y = [pic.height, WLH].max |
| next |
| end |
| # 另起一行文字的情況下 |
| if c == " " |
| y += [WLH, min_y].max |
| min_y = 0 |
| x = 0 |
| # 下面的文字 |
| next |
| end |
| # 自動換行處理 |
| if x + self.contents.text_size(c).width + 20 > self.contents.width |
| y += [WLH, min_y].max |
| min_y = 0 |
| x = 0 |
| end |
| # 描繪文字 |
| #self.contents.draw_text(4 + x, y, 40, 32, c) |
| self.contents.draw_text(x + 20, y + 18, 40, WLH, c) |
| # x 為要描繪文字的加法運算 |
| x += self.contents.text_size(c).width |
| end |
| end |
| end |
| class Window_Base < Window |
| def disabled_color |
| return Color.new(255, 255, 255, 128) |
| end |
| end |
| #============================================================================== |
| # ■ Scene_Task |
| #------------------------------------------------------------------------------ |
| # 處理任務畫面的類。 |
| #============================================================================== |
| class Scene_Task < Scene_Base |
| # 這裡設置任務內容翻頁音效 |
| CHANGE_PAGE_SE = "Audio/SE/Book.ogg" |
| |
| #-------------------------------------------------------------------------- |
| # ● 主處理 |
| #-------------------------------------------------------------------------- |
| def start |
| # 刷新任務資料 |
| $game_party.get_tasks_info |
| # 生成任務名稱窗口 |
| @task_names_window = Window_Task_Name.new($game_party.current_tasks) |
| @task_names_window.z = 200 |
| |
| if $game_party.current_tasks != [] |
| @task_names_window.index = $game_party.current_tasks.index($game_party.latest_task) |
| end |
| |
| # 生成任務內容窗口 |
| @task_info_window = Window_Task.new($game_party.latest_task) |
| @task_info_window.active = true |
| @task_info_window.update |
| end |
| |
| def terminate |
| # 釋放窗口 |
| @task_names_window.dispose |
| @task_info_window.dispose |
| end |
| #-------------------------------------------------------------------------- |
| # ● 刷新畫面 |
| #-------------------------------------------------------------------------- |
| def update |
| # 刷新窗口 |
| @task_names_window.update |
| @task_info_window.update |
| |
| if @task_names_window.active |
| update_task_names_window |
| else |
| update_task_infos_window |
| end |
| |
| end |
| #-------------------------------------------------------------------------- |
| # ● 刷新任務名稱窗口 |
| #-------------------------------------------------------------------------- |
| def update_task_names_window |
| # 按下 B 鍵的情況下 |
| if Input.trigger?(Input::B) |
| # 演奏取消 SE |
| Sound.play_cancel |
| # 這裡設置返回的場景,返回地圖是Scene_Map.new,菜單是Scene_Menu.new(任務界面index) |
| $scene = Scene_Map.new |
| return |
| end |
| # 按下 C 鍵的情況下 |
| if Input.trigger?(Input::C) |
| # 無任務可顯示的話 |
| if @task_names_window.task == nil |
| # 演奏凍結 SE |
| Sound.play_buzzer |
| return |
| end |
| @task_info_window.refresh(@task_names_window.task.id) |
| $game_party.latest_task = @task_names_window.task.id |
| # 演奏確定 SE |
| Sound.play_decision |
| |
| #@task_names_window.visible = false |
| @task_names_window.active = false |
| |
| #@task_info_window.visible = true |
| @task_info_window.update |
| end |
| end |
| |
| def update_task_infos_window |
| # 按下 B 鍵的情況下 |
| if Input.trigger?(Input::B) |
| # 演奏取消 SE |
| Sound.play_cancel |
| |
| #@task_names_window.visible = true |
| @task_names_window.active = true |
| #@task_info_window.visible = false |
| @task_info_window.update |
| |
| return |
| end |
| # 按下 C 鍵的情況下 |
| if Input.trigger?(Input::C) |
| # 如果光標沒有移動的話,翻頁 |
| #if @task_info_window.oy + @task_info_window.height - 64 > @task_info_window.contents.height |
| if @task_info_window.oy + @task_info_window.height > @task_info_window.contents.height |
| @task_info_window.oy = 0 |
| else |
| @task_info_window.oy += 416 - 64 |
| end |
| if @task_info_window.contents.height > @task_info_window.height - 64 |
| # 演奏翻頁 SE |
| Audio.se_play(CHANGE_PAGE_SE) |
| end |
| end |
| end |
| end |
| 欢迎光临 Project1 (https://rpg.blue/) | Powered by Discuz! X3.1 |