赞 | 2 |
VIP | 0 |
好人卡 | 0 |
积分 | 64 |
经验 | 18218 |
最后登录 | 2024-6-19 |
在线时间 | 989 小时 |
Lv4.逐梦者
- 梦石
- 0
- 星屑
- 6388
- 在线时间
- 989 小时
- 注册时间
- 2010-12-3
- 帖子
- 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
|
|