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

Project1

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

[已经过期] 任務系統增加圖片

[复制链接]

Lv4.逐梦者

梦石
0
星屑
6388
在线时间
989 小时
注册时间
2010-12-3
帖子
45
跳转到指定楼层
1
 楼主| 发表于 2013-1-20 19:22:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
我想要在現有的任務系統上插入圖片,最好是可以直接從Battlers的資料夾插入(作為懸賞怪的任務),
請會寫程式的的幫幫忙...謝謝
這是我用的任務系統腳本:



module Sword
  Sword48_Assignment, Sword48_Name, Sword48_Color, OFF, ON = [], [], [], false, true
  Sword48_Statu = []
#=======================================
#★魔劍工舖 - 任務系統 2.00
#轉貼腳本請著名出處:http://blog.yam.com/a870053jjkj/article/24625069
#如果採用在遊戲中,看你高興是否顯示腳本出處,但嚴禁說是自己寫的腳本!!
#=======================================
#● 使用者自定設置
Sword48_Help = ['記事本', 1]  # 設定上方說明窗口文字 [窗口文字, 位置]
# 窗口文字:空的的(需保留 ' 符號)則不顯示說明窗口,位置:0左;1中;2右
Sword48_Width = 180     # 設定左邊任務選項的寬度
Sword48_Center = [ON, ON] # 任務選項的部分文字是否置中 [種類文字, 選項文字]
Sword48_Statu[1] = '任務進行中' # 設定控制碼「\A」顯示任務未完成的內容
Sword48_Statu[2] = '可回報任務' # 設定控制碼「\A」顯示回報任務的內容
Sword48_Statu[3] = '任務失敗' # 設定控制碼「\A」顯示任務失敗的內容
Sword48_Statu[4] = '任務完成' # 設定控制碼「\A」顯示任務完成的內容
Sword48_Color[1] = Color.new(255, 255, 255) # 設定任務未完成的顯示顏色
Sword48_Color[2] = Color.new(255, 150, 100) # 設定回報任務的顯示顏色
Sword48_Color[3] = Color.new(0, 0, 0) # 設定任務失敗的顯示顏色
Sword48_Color[4] = Color.new(255, 255, 0) # 設定任務完成的顯示顏色
Sword48_Time = 2 # 計時器顯示格式,0為總秒數,1為分:秒,2為時:分:秒
Sword48_Menu = 6 # 0為回到地圖,1以上為回到選單畫面並指標在第幾個
Sword48_Permutation = 1 # 任務的排列順序,0依照編號;1新的在後;2新的在前
Sword48_InsistPerm = OFF # 是否只要有變更狀態,一律重新排列順序
Sword48_Acquiesce = ON # 是否打開任務畫面時,選項自動起始在最新的任務上
#--------------------------------------------------------------
#○ 任務種類名稱表(Sword48_Name[種類編號] = '種類名稱')
# 如果不希望在任務列表中顯示種類名稱的話,請移除1號設置即可
Sword48_Name[1] = '--主線任務--'
Sword48_Name[2] = '--支線任務--'
#--------------------------------------------------------------
#○ 任務資料表(Sword48_Assignment[任務編號] = ['任務名稱', 種類編號,'內容')
# 設定任務的名稱與內容,任務內容可以使用控制碼來表示
# 可以自行新增多個Sword48_Assignment[任務編號],第1行通常不顯示
Sword48_Assignment[1] = ['逃離諾輪神殿', 1,'
逃離諾輪神殿(\AC\A\C[0])

查德在年滿18歲的那天,被青梅竹馬兼
監護人緹娜,強迫參加洗禮儀式。
那是一種以預言的方式決定貴族未來的
奇妙儀式...

然而結果卻是被大神官宣判為
「將來會成為破壞世界平衡的因子」
而下令撲殺。
為了活下去,唯有逃離這個地方。

']#設置結束
#--------------------------------------------------------------
Sword48_Assignment[2] = ['傳說的佐證', 2,'
傳說的佐證(\AC\A\C[0])

神秘的吟遊詩人對這個世界所流傳的神話
感到困惑,收集神話相關訊息來了解真相。

']#設置結束
#--------------------------------------------------------------
Sword48_Assignment[3] = ['出外尋找查德', 1,'
出外尋找查德(\AC\A\C[0])

無法接受查德跳崖死亡的結果,緹娜
決定違反父王的命令,出外尋找查德。
在皇兄-奧茲肯的協助下,與侍女蕾妮
2人半夜從皇宮的下水道偷偷離開王城。


']#設置結束
#--------------------------------------------------------------
Sword48_Assignment[4] = ['尋找戒指', 2,'
尋找戒指(\AC\A\C[0])

小女孩弄丟了媽媽的戒指,不敢回家。
到街上去尋找是否遺落在哪裡。


']#設置結束
#--------------------------------------------------------------
Sword48_Assignment[5] = ['潛入賊窩', 1,'
潛入賊窩(\AC\A\C[0])

卡雷尼亞原野上發生了強盜擄人的事件,
緹娜決定潛入到賊窩拯救被抓的民眾。



']#設置結束
#--------------------------------------------------------------
Sword48_Assignment[6] = ['少年維特的煩惱', 2,'
少年維特的煩惱(\AC\A\C[0])

維特對於酒店的富家小姐有好感,
不知如何才能表達他的心意。
去幫他問問看吧...

']#設置結束
#--------------------------------------------------------------
Sword48_Assignment[7] = ['旅商的要求', 2,'
旅商的要求(\AC\A\C[0])

盜賊:\AE[13,10] / 10
土狼:\AE[15,10] / 10
毒蛇:\AE[9,10] / 10

旅行商人對於近來卡雷尼亞原野的安全
感到十分的不安,為了讓接下來的旅程
更加安全,請在卡雷尼亞原野上打倒所
需求的野獸數目。


']#設置結束
#--------------------------------------------------------------
Sword48_Assignment[8] = ['少年維特的商人之路', 2,'
少年維特的商人之路(\AC\A\C[0])

維特立志成為一個配的上富家小姐的有錢人
,決心前往鄰國【艾雷格納】行商。請幫他
收集以下的幾件商品。

回復藥水    :\ai[1,0,10] / 10
超回復藥水  :\ai[2,0,5] / 5
魔力香水    :\ai[4,0,10] / 10
高級魔力香水:\ai[5,0,5] / 5
復活藥      :\ai[9,0,5] / 5
還原劑      :\ai[12,0,10] / 10

']#設置結束
#--------------------------------------------------------------
Sword48_Assignment[9] = ['找尋未歸的孩子', 1,'
找尋未歸的孩子(\AC\A\C[0])

隔壁的大嬸的小孩今早說要去【神護森林】
裡採果實,至今還沒回來,他的父母很擔心
想請我們幫忙找尋一下。

']#設置結束
#--------------------------------------------------------------

Sword48_Assignment[10] = ['與森之主的交涉', 1,'
與森之主的交涉(\AC\A\C[0])

不慎誤闖神護森林的禁地,使村子成為
森之主攻擊的目標。
為了不讓村人受害,只好再一次與祂交戰。



']#設置結束
#--------------------------------------------------------------














=begin
========================================
● 所需腳本
控制碼轉換:http://blog.yam.com/a870053jjkj/article/28082241(非必要)
========================================
● 控制碼
支援使用「控制碼轉換」中的控制碼,但必須裝「控制碼轉換」才可以使用
○ 一般控制碼
\C[數值] : 變更文字的顏色,顏色請在Window_Base類的text_color方法中設置
\C[紅,綠,藍] : 變更文字的顏色,依據三原色指定顏色
\AC : 依照任務狀態決定變更的顏色(顏色為任務狀態的顏色)
\A : 依照任務狀態,顯示你設定的任務狀態內容,可參考使用者自定設置的部分
----------------------------------------------------------------
○ 任務控制碼(自動產生任務,符合任務條件後會自動變更任務狀態)
\AV[變數編號,所需數值] : 開通變數任務,顯示指定編號的數值
\AE[敵人編號,擊殺數] : 開通擊殺任務,顯示該編號的敵人目前的擊殺數量
\AG[所需金錢] : 開通金錢任務,顯示目前的金錢(同 \G)
\AI[道具編號,種類,數量] : 開通物品任務,顯示該編號種類目前的物品數量
             [種類] - 0為物品,1為武器,2為防具
\AT[秒數] : 開通限時任務,顯示倒數計時器(時間到會轉到任務失敗)
========================================
● 呼叫方法
呼叫全部任務:$scene = Sword_Assignment.new
呼叫分類任務:$scene = Sword_Assignment.new(分類編號)
添加任務項目:$game_party.add_assignment(任務編號, 分類編號, '名稱', '內容')
獲取狀態狀態:$game_party.sword_assignment(任務編號)
修改狀態狀態:$game_party.sword_assignment(任務編號, 任務狀態)
重置設置任務:$game_party.again_assignment(任務編號)
----------------------------------------------------------------
○ 任務狀態
0和5以上為隱藏、1為任務未完成、2為回報任務、3為任務失敗、4為任務完成
=======================================
詳細設置說明請參考:http://blog.yam.com/a870053jjkj/article/24625069
=end
  $Sword ? $Sword[48] = true : $Sword = {48=>true} # 腳本使用標誌
  ($Sword_VX = false ; RPG::Weather rescue $Sword_VX = true) if $Sword_VX == nil
  Sword48_Center[0] = Sword48_Center[0] ? 1 : 0
  Sword48_Center[1] = Sword48_Center[1] ? 1 : 0
end
#=======================================
#■ 處理同伴的類別
class Game_Party
  include Sword # 連接自動設置
  attr_reader    :assig_perm # 任務排列表(選項順序用)
  attr_reader    :assig_sort # 任務種類表(只顯示特定種類或分類用)
  attr_reader    :new_assig # 最新任務表(起始選項用)
  attr_accessor :sword_assig # 任務資料表
  #-------------------------------------------------------------
  #● 初始化物件
  alias sword48_initialize initialize
  def initialize
    sword48_initialize ; @new_assig = {true=>nil} # 最新任務
    @sword_assig, @assig_sort, @assig_perm = [], {}, [] # 任務資料,分類表,排列表
    Sword48_Assignment.each_index{|i| next unless item = Sword48_Assignment
    add_assignment(i, item[1], item[0], item[2])} # 生成腳本中的任務
  end
  #-------------------------------------------------------------
  #● 產生任務資料(任務編號, 分類編號, 任務名稱, 任務內容)
  def add_assignment(id, sort_id, name, text)
    @sword_assig[id], text = [0, {'任務數'=>0}, name, text], text.dup
    @assig_sort[id] = sort_id
    text.gsub!(/\\[Vv]\[(\d+)\]/){$game_variables[$1.to_i]} while /\\[Vv]\[(\d+)\]/ === text
    text.gsub!(/\\[Aa][Vv]\[(\d+)[\, ]+(\d+)\]/){"\000[#{$1},#{$2}]"} # \AV
    text.gsub!(/\\[Aa][Ee]\[(\d+)\,(\d+)\]/){"\001[#{$1},#{$2}]"} # \AE
    text.gsub!(/\\[Aa][Gg]\[(\d+)\]/){"\002[#{$1}]"} # \AG
    text.gsub!(/\\[Aa][Ii]\[(\d+)\,(\d+)\,(\d+)\]/){"\003[#{$1},#{$2},#{$3}]"}#\AI
    text.gsub!(/\\[Aa][Tt]\[(\d+)\]/){"\004[#{$1}]"} # \AT
    while ((c = text.slice!(/./m)) != nil) ; case c
    when "\000" ; text =~ /\[(\d+)\,(\d+)/ ; ii = 1 # 產生變數任務
      loop do ; if @sword_assig[id][1]["指定變數#{ii}"] == nil
        @sword_assig[id][1]["指定變數#{ii}"] = $1.to_i # 儲存變數操作的編號
        @sword_assig[id][1]["任務變數#{ii}"] = $2.to_i # 儲存變數所需的數值
        @sword_assig[id][1]['任務數'] += 1 ; break
      end ; ii += 1 ; end
    when "\001" ; text =~ /\[(\d+)\,(\d+)/ ; ii = 1 # 產生擊殺任務
      loop do ; if @sword_assig[id][1]["敵人編號#{ii}"] == nil
        @sword_assig[id][1]["敵人編號#{ii}"] = $1.to_i # 儲存敵人的編號
        @sword_assig[id][1]["目前殺敵數#{ii}"] = 0 # 儲存目前殺敵數
        @sword_assig[id][1]["任務殺敵數#{ii}"] = $2.to_i # 儲存需要擊殺的數量
        @sword_assig[id][1]['任務數'] += 1 ; break
      end ; ii += 1 ; end
    when "\002" ; text =~ /\[(\d+)/ ; ii = 1 # 產生金錢任務
      loop do ; if @sword_assig[id][1]["所需金錢#{ii}"] == nil
        @sword_assig[id][1]["所需金錢#{ii}"] = $1.to_i # 儲存任務所需的金錢
        @sword_assig[id][1]['任務數'] += 1 ; break
      end ; ii += 1 ; end
    when "\003" ; text =~ /\[(\d+)\,(\d+)\,(\d+)/ ; ii = 1 # 產生物品任務
      loop do ; if @sword_assig[id][1]["物品編號#{ii}"] == nil
        @sword_assig[id][1]["物品編號#{ii}"] = $1.to_i # 儲存物品的編號
        @sword_assig[id][1]["物品種類#{ii}"] = $2.to_i # 儲存物品種類(物、武、防)
        @sword_assig[id][1]["物品數量#{ii}"] = $3.to_i # 儲存該編號種類的所需數量
        @sword_assig[id][1]['任務數'] += 1 ; break
      end ; ii += 1 ; end
    when "\004" ; text =~ /\[(\d+)/ ; ii = 1 # 產生計時任務
      loop do ; if @sword_assig[id][1]["開始時間#{ii}"] == nil
        @sword_assig[id][1]["開始時間#{ii}"] = true # 儲存開始的時間(遊戲時間)
        @sword_assig[id][1]["結束時間#{ii}"] = 0 # 儲存結束的時間(遊戲時間)
        @sword_assig[id][1]["計時時間#{ii}"] = $1.to_i # 儲存任務所需的時間
        @sword_assig[id][1]["剩餘時間#{ii}"] = 0 # 設定任務完成時的剩餘時間
        @sword_assig[id][1]["時間選項#{ii}"] = false # 是否更新選項顏色
        @sword_assig[id][1]['任務數'] += 1 ; break
      end ; ii += 1 ; end
    end ; end
  end
  #-------------------------------------------------------------
  #● 變更與獲取任務狀態(編號, 修改標誌)
  def sword_assignment(number, status = nil)
    if status ; (1...@sword_assig[number][1].size).each do |i| # 修改任務的場合
      @sword_assig[number][1]["開始時間#{i}"] = true if
      @sword_assig[number][1]["開始時間#{i}"].is_a?(Integer) and status == 1 # 計時清空
      # 如果有計時器並為任務未完成,則計時器運作開始
      if @sword_assig[number][1]["開始時間#{i}"] == true and status == 1
        @sword_assig[number][1]["開始時間#{i}"] =
        Graphics.frame_count / Graphics.frame_rate
        @sword_assig[number][1]["結束時間#{i}"] = 0
        @sword_assig[number][1]["結束時間#{i}"] =
        @sword_assig[number][1]["開始時間#{i}"] +
        @sword_assig[number][1]["計時時間#{i}"]
        @sword_assig[number][1]["剩餘時間#{i}"] = 0
      elsif status == 4 and @sword_assig[number][1]["開始時間#{i}"] != nil
        @sword_assig[number][1]["剩餘時間#{i}"] =
        @sword_assig[number][1]["結束時間#{i}"] - Graphics.frame_count/Graphics.frame_rate
      end
      @sword_assig[number][1]["目前殺敵數#{i}"] = 0 unless
      @sword_assig[number][1]["目前殺敵數#{i}"] == 0 if status == 1 # 清空擊殺數
      end
      @sword_assig[number][0] = status # 變更任務狀態
      (1..4) === status ? (@assig_perm -= [number] if Sword48_InsistPerm # 更新順序
      (Sword48_Permutation == 1 ? @assig_perm += [number] : @assig_perm.insert(
      0, number)) unless @assig_perm.include?(number)) : @assig_perm -= [number]
      if Sword48_Acquiesce # 記錄最新修改或添加的任務
        @new_assig[@assig_sort[number]] = number ; @new_assig[true] = number
      end
    else ; update_assignment ; return @sword_assig[number][0] # 直接獲取或更新
    end
  end
  #-------------------------------------------------------------
  #● 更新任務控制碼的任務狀態
  def update_assignment
    @comm_up = [] # 選項變更標誌(在任務畫面自動轉換任務狀態時選項更新用)
    (1...@sword_assig.size).each do |i| ; assig, a = @sword_assig[1], 0
      (1...assig.size).each do |ii| ; if @sword_assig[0] == 1 or @sword_assig[0] == 2
        a += 1 if $game_variables[assig["指定變數#{ii}"]] >= assig["任務變數#{ii}"] unless
        assig["指定變數#{ii}"] == nil # 有開通變數任務的場合
        a += 1 if assig["目前殺敵數#{ii}"] >= assig["任務殺敵數#{ii}"] unless
        assig["敵人編號#{ii}"] == nil # 有開通擊殺任務的場合
        a += 1 if $game_party.gold >= assig["所需金錢#{ii}"] unless
        assig["所需金錢#{ii}"] == nil # 有開通金錢任務的場合
        unless assig["物品編號#{ii}"] == nil ; case assig["物品種類#{ii}"] # 物品任務場合
        when 0 # 物品
          number = $Sword_VX ?
          $game_party.item_number($data_items[assig["物品編號#{ii}"]]) :
          $game_party.item_number(assig["物品編號#{ii}"])
          number >= assig["物品數量#{ii}"] ? a += 1 : 0
        when 1 # 武器
          number = $Sword_VX ?
          $game_party.item_number($data_weapons[assig["物品編號#{ii}"]]) :
          $game_party.weapon_number(assig["物品編號#{ii}"])
          number >= assig["物品數量#{ii}"] ? a += 1 : 0
        when 2 # 防具
          number = $Sword_VX ?
          $game_party.item_number($data_armors[assig["物品編號#{ii}"]]) :
          $game_party.armor_number(assig["物品編號#{ii}"])
          number >= assig["物品數量#{ii}"] ? a += 1 : 0
        end ; end
        (@comm_up += if @sword_assig[0] == 1 ; sword_assignment(i, 3)) if
        Graphics.frame_count / Graphics.frame_rate >= assig["結束時間#{ii}"] unless
        assig["開始時間#{ii}"] == nil # 有開通計時任務的場合
      end ; end
      if a == 0 # 當所有任務條件完成時變更任務狀態
      elsif @sword_assig[0] == 1 ; sword_assignment(i, 2) if a >= assig['任務數']
      elsif @sword_assig[0] == 2 ; sword_assignment(i, 1) unless a >= assig['任務數']
      end
    end ; @comm_up # 返回選項變更標誌
  end
  #-------------------------------------------------------------
  #● 重新產生自定設置的任務(任務編號)
  def again_assignment(v)
    a = Sword48_Assignment[v] ; add_assignment(v, a[1], a[0], a[2])
  end
end
#=======================================
#■ 處理隊伍的類別
class Game_Troop
  attr_reader   :enemies if $Sword_VX # 敵人隊伍隊員
end
#=======================================
#■ 任務內容顯示窗口
class WSword_Assignment < Window_Base
  include Sword # 連接自定設置
  #-------------------------------------------------------------
  #● 初始化物件
  def initialize(number)
    if $Sword_VX ; super(Sword48_Width, (Sword48_Help[0].empty? ? 0 : WLH + 32),
      544 - Sword48_Width, (Sword48_Help[0].empty? ? 416 : 416 - (WLH + 32)))
    else ; super(Sword48_Width, (Sword48_Help[0].empty? ? 0 : 64),
      640 - Sword48_Width, (Sword48_Help[0].empty? ? 480 : 416))
    end
    self.contents = Bitmap.new(width - 32, height - 32)
    refresh(number)
  end
  #-------------------------------------------------------------
  #● 更新內容
  def refresh(number = 0)
    return unless number # 無任務的場合
    self.contents.clear ; self.contents.font.color = normal_color ; color = nil
    return if number == 0
    text = $game_party.sword_assig[number][3].dup
    @frequency = [0, 0] # 用來分辨第幾個任務控制碼用
    assig = $game_party.sword_assig[number][1]
    text = text.critical_word if $Sword[46] # 轉換關鍵字(控制碼轉換用)
    text = text.code_explain if $Sword[46] # 轉換控制碼(控制碼轉換用)
    text.gsub!(/\\[Cc]\[(\d+)\]/){"\000[#{$1}]"} # \C
    text.gsub!(/\\[Cc]\[(\d+)[\, ]+(\d+)[\, ]+(\d+)\]/){"\001[#{$1},#{$2},#{$3}]"} # \C
    text.gsub!(/\\[Aa][Cc]/){color = Sword48_Color[$game_party.sword_assig[number][0]]
    "\001[#{color.red.to_i},#{color.green.to_i},#{color.blue.to_i}]"} # \AC
    text.gsub!(/\\[Aa][Vv]\[(\d+)[\, ]+(\d+)\]/){[$game_variables[$1.to_i], $2.to_i].min} # \AV
    text.gsub!(/\\[Aa][Ee]\[[\d]+\,([\d]+)\]/){@frequency[0] += 1
    assig["敵人編號#{@frequency[0]}"] == nil ? 0 :
    [assig["目前殺敵數#{@frequency[0]}"], $1.to_i].min} # \AE
    text.gsub!(/\\[Aa][Tt]\[([\d]+)\]/) do
      @frequency[1] += 1
      assig["開始時間#{@frequency[1]}"] == nil ? 0 :
      a = assig["結束時間#{@frequency[1]}"] - Graphics.frame_count / Graphics.frame_rate
      assig["剩餘時間#{@frequency[1]}"] == 0 ? 0 : a = assig["剩餘時間#{@frequency[1]}"]
      a = [a, 0].max # 秒
      case Sword48_Time
      when 0 ; a # 秒
      when 1 ; sprintf("%02d:%02d", a / 60 % 60, a % 60) # 分、秒
      when 2 ; sprintf("%02d:%02d:%02d", a / 60 / 60, a / 60 % 60, a % 60) # 時、分、秒
      end
    end
    text.gsub!(/\\[Aa][Gg]\[(\d+)\]/){[$game_party.gold, $1.to_i].min} # \AG
    text.gsub!(/\\[Aa][Ii]\[(\d+)[\, ]+(\d+)[\, ]+(\d+)\]/) do
      if $game_party.sword_assig[number][0] == 4 ; $3.to_i
      else ; case $2.to_i # \AI
      when 0 # 物品
        $Sword_VX ? [$game_party.item_number($data_items[$1.to_i]), $3.to_i].min :
        [$game_party.item_number($1.to_i), $3.to_i].min
      when 1 # 武器
        $Sword_VX ? [$game_party.item_number($data_weapons[$1.to_i]), $3.to_i].min :
        [$game_party.weapon_number($1.to_i), $3.to_i].min
      when 2 # 防具
        $Sword_VX ? [$game_party.item_number($data_armors[$1.to_i]), $3.to_i].min :
        [$game_party.armor_number($1.to_i), $3.to_i].min
      end ; end
    end
    text.gsub!(/\\[Aa]/){Sword48_Statu[$game_party.sword_assig[number][0]]} # \AC
    x, y = 0, -32 # 起始文字座標
    while ((c = text.slice!(/./m)) != nil) ; case c
      when "\n" ; x = 0 ; y += 32 # 換行
      when "\000" ; text.sub!(/\[(\d+)\]/, '') # 指定代碼顏色
        self.contents.font.color = text_color($1.to_i)
      when "\001" ; text.sub!(/\[(\d+)\,(\d+)\,(\d+)\]/, '') # 指定三原色
        self.contents.font.color = Color.new($1.to_i, $2.to_i, $3.to_i)
      else ; self.contents.draw_text(x, y, 32, 32, c)
        x += self.contents.text_size(c).width
      end
    end
  end
end
#=======================================
#■ 任務選項窗口
class WSword_AssiCommand < Window_Base
  include Sword # 連接自定設置
  Size = Sword48_Help[0].empty? ? ($Sword_VX ? 12 : 14) : ($Sword_VX ? 10 : 12)
  XPVX = $Sword_VX ? [WLH + 32, 416, 384 - WLH] : [64, 480, 416]
  attr_reader    :index # 選項位置
  #-------------------------------------------------------------
  #● 初始化物件(選項表, 分類表, 編號表)
  def initialize(comm, assig_sort = nil)
    super(0, (Sword48_Help[0].empty? ? 0 : XPVX[0]),
    Sword48_Width, (Sword48_Help[0].empty? ? XPVX[1] : XPVX[2]))
    @sorts = [] ; assig_sort.each{|a, b| (@sorts += [a] unless b.empty?)} if assig_sort
    self.contents = Bitmap.new(width - 32, (comm.size +
    (Sword48_Name[1] ? @sorts.size : 0)) * 32)
    # 選項位置, 選項顏色, 選項文字, 跳過選項表(分類用), 分類表
    @index, @color, @comm, @assig_sort, @sort_index = 0, [], comm, assig_sort, {}
    @i, @sort_true = 0, true
  end
  #-------------------------------------------------------------
  #● 更新內容
  def refresh
    self.contents.clear ; br, sort_v, i, sort_size = 0, 1, 0, @assig_sort.size
    if @assig_sort and Sword48_Name[1]
      loop do ; if @sort_true  # 描繪分類文字
        self.contents.font.color = system_color
        self.contents.draw_text(4, br * 32, Sword48_Width - 40, 32,
        Sword48_Name[sort_v], Sword48_Center[0]) ; br += 1 ; @sort_true = false
      else # 描繪分類中的選項文字
        @assig_sort[sort_v].each{|id| assig = $game_party.sword_assig[id]
        @index = i if $game_party.new_assig[true] == id # 起始游標設定
        self.contents.font.color = Sword48_Color[assig[0]]
        self.contents.draw_text(4, br * 32, Sword48_Width - 40, 32,
        assig[2], Sword48_Center[1]) ; @sort_index = [id, br] ; i += 1 ; br += 1}
        @sort_true = true ; sort_v += 1 ; break if sort_size < sort_v
      end ; end
    else  # 描繪選項文字(無設定分類用)
      @comm.each_index{|i| self.contents.font.color = @color ? @color : normal_color
      self.contents.draw_text(4, i * 32,
      Sword48_Width - 40, 32, @comm, Sword48_Center[1])}
    end
    @off = @sort_index[@index] ; self.contents.clear unless @off if Sword48_Name[1]
    rect_y = Sword48_Name[1] ? (@off ? @sort_index[@index][1] : 0) : @index
    (self.oy = [(rect_y - Size) * 32 + 32, 0].max ; @thend = true) unless @thend
    self.cursor_rect.set(0, (rect_y - top_row) * 32, Sword48_Width - 32, 32)
  end
  #-------------------------------------------------------------
  #● 更新畫面
  def update
    super ; return unless @off if Sword48_Name[1]
    if Input.repeat?(Input::UP)
      @index == 0 ? @index = @comm.size - 1 : @index -= 1
      rect_y = Sword48_Name[1] ? @sort_index[@index][1] : @index
      self.oy = (rect_y - Size + 1) * 32 if @index == @comm.size - 1 # 移至最後
      $Sword_VX ? Sound.play_cursor : $game_system.se_play($data_system.cursor_se)
      self.cursor_rect.set(0, comm_oy(rect_y, 8) * 32, Sword48_Width - 32, 32)
    elsif Input.repeat?(Input::DOWN)
      @index == @comm.size - 1 ? @index = 0 : @index += 1
      self.oy = 0 if @index == 0 # 選項移至第1個
      $Sword_VX ? Sound.play_cursor : $game_system.se_play($data_system.cursor_se)
      rect_y = Sword48_Name[1] ? @sort_index[@index][1] : @index
      self.cursor_rect.set(0, comm_oy(rect_y, 2) * 32, Sword48_Width - 32, 32)
    end
  end
  #-------------------------------------------------------------
  #● 獲取開頭行
  def top_row ; self.oy / 32 ; end
  #-------------------------------------------------------------
  #● 選項位置更新
  def index=(index)
    @index = index ; self.cursor_rect.set(0, @index * 32, Sword48_Width - 32, 32)
  end
  #-------------------------------------------------------------
  #● 變更選項顏色
  def color(id, color) ; @color[id] = color ; end
  #-------------------------------------------------------------
  #● 獲取游標目前指著的編務編號(任務用)
  def assig_id ; @sort_index[@index] ? @sort_index[@index][0] : nil ; end
  #-------------------------------------------------------------
  #● 選項顯示內容位置調整(滾動效果用)
  def comm_oy(v, n)
    if n == 2 ; Size <= v - top_row ? (self.oy = (a = v - Size + 1) * 32 ; v - a) : v - top_row
    else ; self.oy += (v - top_row) * 32 if v - top_row <= -1
      self.oy = [self.oy, 0].max # 防止過度滾動
      self.oy = 0 if top_row == 1 and v == 1 ; v - top_row
    end
  end
end
#=======================================
#■ 處理戰鬥畫面的類別
class Scene_Battle
  include Sword # 連接自定設置
  #-------------------------------------------------------------
  #● 戰鬥結束
  alias sword1_battle_end battle_end
  def battle_end(result)
    # 循環本戰鬥的敵人
    (0...$game_troop.enemies.size).each do |i| (1...$game_party.sword_assig.size).each do |ii|
      assig = $game_party.sword_assig[ii][1]
      if $game_troop.enemies.hp == 0 and $game_troop.enemies.immortal == false
      (1...assig.size).each do |iii| ; if $game_party.sword_assig[ii][0] == 1
        @troop_id = $game_troop.troop.id if $Sword_VX
        assig["敵人編號#{iii}"] == $data_troops[@troop_id].members.enemy_id ?
        $game_party.sword_assig[ii][1]["目前殺敵數#{iii}"] += 1 : 0
      end ; end ; end
    end ; end
    sword1_battle_end(result)
  end
end
#=======================================
#■ 任務系統畫面
class Sword_Assignment
  include Sword # 連接自定設置
  #-------------------------------------------------------------
  #● 初始化物件
  def initialize(id = nil, sort = nil)
    $game_party.update_assignment # 更新任務狀況
    @menu_index = Sword48_Permutation == 0 ? id :
    ($game_party.assig_perm.index(id) if $game_party.assig_perm.index(id)) # 起始選項
    (@menu_index = sort ? $game_party.new_assig[sort] : $game_party.new_assig[true]
    @new_index = true) unless id if Sword48_Acquiesce # 指定最新的任務
    @menu_index = 0 unless @menu_index
    @sort = sort # 指定顯示的任務種類   
    end
  #-------------------------------------------------------------
  #● 主處理
  def main
    @count = Graphics.frame_count / Graphics.frame_rate
    # 獲取要顯示的任務選項
    hmain, @hmain, assig_sort = [], [], Hash.new{|a, b| a = []} # 選項字, 選項號, 分類
    # 產生選項資料
    (Sword48_Permutation == 0 ?
    1...$game_party.sword_assig.size : $game_party.assig_perm).each do |i|
    unless i == nil or $game_party.sword_assig[0] == 0 or
    $game_party.sword_assig[0] > 4
      next if $game_party.assig_sort != @sort if @sort # 種類判定,種類不符就跳過
      assig_sort[$game_party.assig_sort] +=
      hmain.push($game_party.sword_assig[2]) ; @hmain.push(i)
    end ; end
    menu_index = @menu_index
    hmain = [' '] if hmain.empty? ; @hmain = [] if @hmain.empty? # 無任務時
    (menu_index = @hmain.index(@menu_index) ? @hmain.index(@menu_index) : 0) if
    Sword48_Permutation == 0 or @new_index # 任務選項位置計算
    @command_window = WSword_AssiCommand.new(hmain, assig_sort) # 選項窗口
    @command_window.index = menu_index
    # 變更選項顏色
    ii = -1 ; @hmain.each do |i| ; ii += 1 ; case $game_party.sword_assig[0]
    when 1 ; @command_window.color(ii, Sword48_Color[1]) # 任務未完成
    when 2 ; @command_window.color(ii, Sword48_Color[2]) # 回報任務
    when 3 ; @command_window.color(ii, Sword48_Color[3]) # 任務失敗
    when 4 ; @command_window.color(ii, Sword48_Color[4]) # 任務完成
    end ; end
    @command_window.refresh # 產生選項內容
    # 產生其他窗口
    @assignmen_wswordt = WSword_Assignment.new(@hmain[0])
    update_cgty
    (@help_window = Window_Help.new
    @help_window.set_text(Sword48_Help[0], Sword48_Help[1])) unless
    Sword48_Help[0].empty? # 如果有設定說明窗口文字,就產生說明窗口
    Graphics.transition
    loop{Graphics.update ; Input.update ; update ; break if $scene != self}
    Graphics.freeze
    # 釋放窗口
    @command_window.dispose ; @assignmen_wswordt.dispose
    @help_window.dispose if @help_window
  end
  #-------------------------------------------------------------
  #● 更新畫面
  def update
    # 更新窗口
    @command_window.update ; @assignmen_wswordt.update
    # 更新計時器與顯示內容(每秒更新1次)
    unless @count == Graphics.frame_count / Graphics.frame_rate
      comm_up = $game_party.update_assignment
      unless comm_up.empty? # 更新任務
      ii = -1 ; @hmain.each do |i| ; ii += 1 ; case $game_party.sword_assig[0]
      when 1 ; @command_window.color(ii, Sword48_Color[1]) # 任務未完成
      when 2 ; @command_window.color(ii, Sword48_Color[2]) # 回報任務
      when 3 ; @command_window.color(ii, Sword48_Color[3]) # 任務失敗
      when 4 ; @command_window.color(ii, Sword48_Color[4]) # 任務完成
      end ; end ; @command_window.refresh ; end
      update_cgty # 更新窗口
      @count = Graphics.frame_count / Graphics.frame_rate # 更新時間
    end
    # 按下確定鍵或取消鍵時回到指定畫面
    if Input.trigger?(Input::B) or Input.trigger?(Input::C)
      $Sword_VX ? Sound.play_cancel : $game_system.se_play($data_system.cancel_se)
      if Sword48_Menu == 0 ; $scene = Scene_Map.new # 回到地圖畫面的場合
      else ; $scene = Scene_Menu.new(Sword48_Menu - 1) # 回到選單畫面的場合
      end
    elsif Input.repeat?(Input::UP) or Input.repeat?(Input::DOWN) ; update_cgty # 更新內容
    end
  end
  #-------------------------------------------------------------
  #● 用於更新窗口內容的方法
  def update_cgty
    @assignmen_wswordt.refresh(Sword48_Name[1] ? @command_window.assig_id :
    @hmain[@command_window.index])
  end
end




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

本版积分规则

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

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

GMT+8, 2025-1-6 14:07

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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