赞 | 0 |
VIP | 385 |
好人卡 | 115 |
积分 | 1 |
经验 | 96276 |
最后登录 | 2017-6-4 |
在线时间 | 2188 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 2188 小时
- 注册时间
- 2011-6-23
- 帖子
- 1044
|
本帖最后由 lsu666666 于 2012-5-4 08:16 编辑
直接套用這個腳本就會有魔法回復數值的效果...可以參考
腳本來源:魔劍腳本鋪
腳本說明:魔劍腳本鋪
範例圖片:
設置方法
顯示傷害數值 | 追加精靈.damage(數值或字符串) 追加精靈.damage(數值或字符串, 是否會心一擊) 追加精靈.damage(數值或字符串, 是否會心一擊, 顏色編號) 追加精靈.damage(數值或字符串, 顏色編號)
★以下為範例,1行分別為不同的範例☆
追加精靈.damage(3500) # 跳出3500數值(數值為正數則表示扣血顏色)
追加精靈.damage('Miss') # 跳出Miss的字樣
追加精靈.damage(-1200) # 跳出1200數值(數值為負數則表示回血顏色)
追加精靈.damage(500, true) # 跳出500數值,並上面添加Sword56_Critical設定的字樣
追加精靈.damage(120, 2) # 跳出120數值,顏色採用Sword56_Damage第2號的設置
追加精靈.damage(125, true, 2) # 跳出125數值,顯示會心一擊內容、採用2號設置的顏色 | 顯示傷害數值,傷害數值和XP預設的傷害數值效果相同
追加精靈:代入了XP的「RPG::Sprite」類或是VX的「Sprite_Base」類的變量
簡單說這個傷害效果就是「RPG::Sprite(Sprite_Base)」的函數就是了...
數值或字符串:傷害可以指定顯示數值外,也可以顯示文字內容,XP顯示的Miss就是字符串...
指定數值(設定阿拉伯數字),則就會顯示那個數值座標傷害
通常不會顯示負數符號,而是依照Sword56_Damage設置顯示不同顏色
指定字串(被單或雙引號包圍住的內容),則就顯示該字串的內容
是否會心一擊:設true表示是;設false表示不是,是會心一擊的時候
會在傷害數值(或文字)上面添加個小字,顯示Sword56_Critical設置的內容
如果不設定這個參數,基本上都視為不是會心一擊
顏色編號:設定要採用的顏色,顏色通常都設定在Sword56_Damage設置中
可以依據不同場合指定不同種顏色的傷害數值(例如HP傷害或SP傷害這樣...)
如果不設定這個參數,基本上都視為指定了1號(文字顏色則不受影響)
變更傷害的移動類型 UP! | 追加精靈.damage_about = 移動編號 | 傷害直直的往上彈出來在往下掉的效果有些單調,有時你想要讓傷害移動的方式更多樣化
這時可以使用這個設置來變更傷害移動的方式,移動方式請在Sword56_Move設置中設定
預設的移動編號和Sword56_MoveX設置的數值相同
判斷是否在顯示傷害 | 追加精靈.damage? | 確認指定的追加精靈中是否還有在顯示傷害
《返回值》還有傷害在顯示返回真(true);如果已經沒有傷害在顯示了就返回偽(false)
釋放傷害顯示 UP! | 追加精靈.dispose_damage 追加精靈.dispose_damage(第幾個傷害) | 使用設置法1的話,會釋放正在顯示的所有傷害,要中途讓傷害快速的消失可以使用該腳本
通常情況下,基本上傷害跳完後,就會自動呼叫這個函數,所以基本上平時因該不會用上才是
不過此腳本處理自動釋放傷害的時候,都是使用設置法2,以免將不必要的傷害提早消失掉
第幾個傷害:指定第幾個跳出來的傷害,就將那個傷害給釋放就好,如果該傷害已釋放則啥都不做
從0開始為第1個傷害,此外假設假設有3個傷害在顯示,釋放第2個傷害
如果再次產生傷害的話,就算第1或第3個傷害未消失,還是可能取代第2個傷害的位置
不過原則上這個設定主要還是腳本自動釋放傷害之用,所以不建議使用... |
使用者自定設置說明
Sword56_Font = ['字體名稱', 字體大小]
其實在XP中的傷害顯示其實是靠文字來描繪的,這就是其中的一部分
這個設置會影響傷害數值或是字串還有會心一擊的文字都會影響
字體名稱:設定傷害想採用的字體,但有該字體不支援的字可能會有無法顯示的情況
字體大小:設定字體有多大,數值越大當然字就越大
Sword56_Revise = 5
傷害顯示的Y座標設定,希望傷口從身上、頭部、頭上、腳本...顯示的話都可在此進行修改
指定正數的話傷害會在比較下面的地方顯示,負數的話則是上面...
Sword56_MoveX = 1 UP!
設定一開始所採用的移動編號是多少,和上方設置方法中的變更傷害的移動類型相同
這個設置只是一開始指定之用,之後原則上就沒有用處了...
Sword56_Shadow = Color.new(紅, 綠, 藍)
設定傷害顯示中內容邊緣的顏色
紅、綠、藍:
指定三原色,可以設定0~255的數值,數值越大則該顏色的含量就越大(越亮)
三種顏色可以互相組合成各種不同的顏色,可以參考小畫面的編輯色彩做設定
【VX】Sword56_Rreveal =true
是否要在預設的戰鬥中顯示傷害的效果,true為要;false為不要
要的話就會像XP一樣,技能動畫結束後敵人身上跳出傷害數值
不要的話則什麼事情都不會發生,而但會稍微降低一些腳本上的衝突率
由於VX只有敵人才有戰鬥圖像,所以只有敵人才會跳出傷害數值喔~
【1】Sword56_Critical = ['顯示內容', Color.new(紅, 綠, 藍)] UP!
【2】Sword56_Critical = ['圖片檔案名稱']
設定成功會心一擊時,在傷害上面顯示的內容
使用設置法1為用Sword56_Font設置的字體還有顏色進行描繪
使用設置法2為採用圖片來顯示,指定Pictures資料夾中的圖片名稱來表示
圖片的大小基本上不受限制,不過還是建議依照原本會心一擊字樣的大小做為圖片大小
以免會心一擊的圖片還蓋到傷害會是無法顯示完全的問題
【1】Sword56_Damage['識別內容'] = 類型 UP!
【2】Sword56_Damage[顏色編號] = [正數類型, 負數類型]
【3】Sword56_Damage[顏色編號] = [正數類型, 負數類型, 暴擊時傷害編號]
設定數值傷害或是文字傷害的描繪方式,設置法1用於文字傷害,如:Miss的字樣
而設置法2主要是用於傷害數值,當傷害的數值為正數時會採用 正數顏色或字串(扣血時)
如果傷害的數值為負數,則慘用 負數顏色或字串,基本上設置方式和Sword56_Critical有些類似
識別內容:當文字傷害的內容和此設定一樣時,就採用這個設置的內容
類型、正數類型、負數類型:
如果想要用字體描繪傷害(或字串內容,以下只稱傷害)的話
就將此設為『Color.new(紅, 綠, 藍)』來指定傷害顏色的並用字體描繪傷害
如果是想要用圖片來顯示傷害的話,就設為『'圖片檔案名稱'』
就可以指定Pictures資料夾的圖片來顯示傷害(顯示方式可參考素材規格說明)
素材大小沒有規定,只不過建議大小和預設的傷害大小一樣為佳
圖片依寬度分成10份,從0開始,所以圖片請以這個順序來畫:0123456789
《範例圖片》
暴擊時傷害編號:當此傷害為暴擊傷害之時,則就切換使用別的傷害編號
也就是說當HP傷害採用1號,此設定為3好了,假設發生傷害
如果沒有暴擊,就繼續採用這個傷害類型,如果發生暴擊,就切換3號的傷害類型
這個只會判斷一次而已,也就是說切換傷害編號之後的Sword56_Damage
還是一樣有此設定的情況(設置法3),則將會忽略此設定不再連續採用
【1】Sword56_Move[移動編號].push [X座標增減, Y座標增減] NEW
【2】Sword56_Move[移動編號].push [X座標增減, Y座標增減, 重複次數]
設定傷害數值顯示的移動方式,這個設定有點類似於資料庫的動畫設定方式
每幀時間傷害數值顯示的位置移動多少距離,製造傷害彈出的效果出來
移動編號 為1的移動方式和預設腳本的相同,不過要更改也是可以
可以自行添加指定多個Sword56_Move設置
此外相同的 移動編號 的Sword56_Move設置可以重複設定來增加傷害顯示的時間
X座標增減、Y座標增減:
設定傷害顯示每幀時間所移動的座標距離,可以指定負數
重複次數:如果說移動的座標距離連續都是相同的時候,放太多設置法1的方式
很容易佔據不少行數並看起來難以查找,可以設定設置法2的此設定
將會自動視為設定了多少個設置法1的方式,看起來更為方便 | Sword56_Move[5].push [3, -2]
Sword56_Move[5].push [3, -2]
Sword56_Move[5].push [3, -2]
Sword56_Move[5].push [3, -2] # 使用設置法2,就可以簡寫成這樣,就有相同的效果了
Sword56_Move[5].push [3, -2, 4] |
XP顯示SP傷害的方法
由於XP本身沒有SP傷害的寫法,所以必須將SP傷害給改出來才行,以下為改法
腳本「Game_Battler 1」第20行附近發現以下腳本: | attr_accessor :damage # 傷害值
★下方插入以下腳本☆
attr_accessor :sp_damage |
腳本「Game_Battler 1」第46行附近發現以下腳本: | @damage = nil
★下方插入以下腳本☆
@sp_damage = nil
|
腳本「Game_Battler 3」第259行附近發現以下腳本: | self.damage = -recover_hp
★下方插入以下腳本☆
self.sp_damage = -recover_sp if recover_sp != 0
|
腳本「Game_Battler 3」第314行附近發現以下腳本: | self.damage = nil
★下方插入以下腳本☆
self.sp_damage = nil
|
腳本「Sprite_Battler」第110行附近發現以下腳本: | damage(@battler.damage, @battler.critical)
★修改成以下腳本☆
if @battler.damage and @battler.sp_damage # HP和SP傷害都有的場合
damage(@battler.damage, @battler.critical) # ★1
間隔時間.times{super ; Graphics.update} # 間隔時間
damage(@battler.sp_damage, @battler.critical, 2) # ★2
elsif @battler.sp_damage # 只有SP的場合
damage(@battler.sp_damage, @battler.critical, 2)
else ; damage(@battler.damage, @battler.critical) # 只有HP的場合
end
@battler.sp_damage = nil | 間隔時間:當HP和SP同時都有時,會先跳出HP傷害後再跳出SP傷害
(如果想要SP傷害先跳出來再跳出HP傷害的話...
就把有標記★1和★2的那行腳本互換即可,以下內容已HP先跳出來為準)
此設定就是HP跳出後,過多久才會跳出SP傷害(不然會同時顯示,傷害就會重疊)
每設定40相當於現實中的1秒
腳本中有兩個『2』被我標記為紅色,表示那是採用Sword56_Damage設置的中
顏色編號為2的資料做為SP傷害顯示方式(圖片或顏色),可依自己喜好作更改 |
腳本「Scene_Battle 4」第430行附近發現以下腳本: | if target.damage != nil
★修改成以下腳本☆
if target.damage != nil or target.sp_damage
|
- module Sword
- #=======================================
- #★魔劍工舖 - 傷害顯示強化 2.01 (XP)
- # http://blog.yam.com/a870053jjkj/
- #=======================================
- Sword56_Damage, Sword56_Move = {}, {} ; Sword56_Move = Hash.new{|h, k| h[k] = []}
- #=======================================
- =begin
- ● 設置方法(追加精靈 為 RPG::Sprite類)
- 顯示傷害:【1】追加精靈.damage(數值或字串)
- 【2】追加精靈.damage(數值或字串, 是否會心)
- 【3】追加精靈.damage(數值或字串, 是否會心, 傷害編號)
- 【4】追加精靈.damage(數值或字串, 傷害編號)
- 變更傷害移動類型:追加精靈.damage_about = 移動編號
- 判斷是否顯示傷害:追加精靈.damage?
- 釋放傷害:追加精靈.dispose_damage(第幾個傷害&)
- =end
- #=======================================
- #● 使用這自定設置
- Sword56_Font = ['Arial Black', 32] # 設定傷害顯示的 ['字體名稱', 大小]
- Sword56_Revise = 5 # 顯示傷害數值的Y座標修正,可指定負數
- Sword56_MoveX = 1 # 設定顯示傷害時,設定一開始所採用的 移動編號 是何者
- Sword56_Shadow = Color.new(0, 0, 0) # 設定傷害的陰影顏色
- Sword56_Critical = ['CRITICAL', Color.new(255, 255, 255)] # 設定暴擊的 ['內容', 顏色&]
- # 設定顏色表示腳本描繪,不設定顏色則將內容當檔名讀取讀取圖片之用
- #--------------------------------------------------------------
- #○ 傷害數值的顏色或圖片表示表
- #【1】Sword56_Damage['識別內容'] = 類型
- #【2】Sword56_Damage[傷害編號] = [正數類型, 負數類型]
- #【3】Sword56_Damage[傷害編號] = [正數類型, 負數類型, 暴擊時傷害編號]
- # 類型、正數類型、負數類型:
- # 使用腳本描繪傷害數值或文字內容,可設定『Color.new(紅, 綠, 藍)』
- # 使用圖片描繪傷害數值或文字內容,可設定『'圖片檔案名稱'』
- # 圖片你遊戲資料夾中的 Pictures 資料夾裡的圖片
- # 識別內容:為當傷害是字串時,如果和識別內容相同就採用(沒設定為白色顏色)
- # 通常顯示傷害腳本沒指定傷害編號的情況下,都會採用編號1號的顏色為標準
- # 暴擊的情況有設定 暴擊時傷害編號,暴擊時將切換至該設定的傷害編號
- Sword56_Damage[1] = [Color.new(255, 255, 255), Color.new(176, 255, 144)]
- Sword56_Damage[2] = [Color.new(0, 0, 100), Color.new(103, 238, 255)]
- #--------------------------------------------------------------
- #○ 傷害移動規則表
- #【1】Sword56_Move[移動編號].push [X座標增減, Y座標增減]
- #【2】Sword56_Move[移動編號].push [X座標增減, Y座標增減, 重複次數]
- Sword56_Move[1].push [0, -4, 2]
- Sword56_Move[1].push [0, -2, 2]
- Sword56_Move[1].push [0, 2, 2]
- Sword56_Move[1].push [0, 4, 6]
- Sword56_Move[1].push [0, 0, 28]
- Sword56_Move[2].push [2, -3, 10]
- Sword56_Move[2].push [2, -2, 5]
- Sword56_Move[2].push [2, 0, 5]
- Sword56_Move[2].push [2, 1, 5]
- Sword56_Move[2].push [2, 2, 5]
- Sword56_Move[2].push [2, 3, 5]
- Sword56_Move[2].push [2, 5, 25]
- #=======================================
- $Sword ? $Sword[56] = true : $Sword = {56=>true} # 腳本使用標誌
- $Sword_F12_Error = {} unless $Sword_F12_Error # F12除錯標誌
- Sword56_Revise += Sword56_Revise > 0 ? -Sword56_Revise * 2 : Sword56_Revise.abs
- Sword56_Move.each do |key, value| move = Sword56_Move[key] ; Sword56_Move[key] = []
- value.each{|item| (item[2] ? item[2] : 1).times{Sword56_Move[key].push item[0..1]}}
- end
- end
- # -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
- #□ RPGXP 數據結構
- module RPG
- #======================================
- #■ 追加了 RPGXP 使用的各種效果處理的精靈的類
- class Sprite < ::Sprite
- include Sword # 連接自定設置
- attr_writer :damage_about # 每幀傷害左右移動距離
- #-------------------------------------------------------------
- #● 初始化物件(視口)
- alias sword56_initialize initialize unless $Sword_F12_Error[56]
- def initialize(viewport = nil)
- sword56_initialize(viewport)
- @damage_sprite56, @_damage_about = [], [] # 顯示傷害精靈, 該左右移動方向
- @damage_duration56, @damage_about = [], Sword56_MoveX # 剩餘時間, 左右移
- end
- #-------------------------------------------------------------
- #● 顯示傷害(傷害數值或字串, 會心一擊標誌, 傷害編號)
- def damage(value, critical = false, color = 1)
- return if value.is_a?(Array)
-
- color = Sword56_Damage[color][2] if Sword56_Damage[color][2] if (
- Sword56_Damage[color].is_a?(Array) and critical == true) # 暴擊時切換傷害編號
-
- (color = critical ; critical = false) if critical.is_a?(Color) or critical.is_a?(Integer) # 另指定
- color = color.is_a?(Color) ? color : Sword56_Damage[color] # 獲取顏色
- i = 0 ; loop{break unless @damage_sprite56[i] ; i += 1}
- damage = value.is_a?(Numeric) ? value.abs.to_s : value
- bitmap = Bitmap.new(160, 48) # 產生位圖
- bitmap.font.name, bitmap.font.size = Sword56_Font[0], Sword56_Font[1]
- bitmap.font.color = Sword56_Shadow # 設定陰影顏色
- if value.is_a?(Numeric) # 傷害數值的場合
- str_color = value >= 0 ? color[0] : color[1]
- if str_color.is_a?(String) # 傷害數值圖片傷害描繪
- bitmap1 = RPG::Cache.picture(str_color)
- rect = [bitmap1.width / 10, bitmap1.height]
- damage1 = value.to_s.scan(/\d/) # 分解為傷害數組
- damage1.each_index do |ii|
- bitmap.blt((160 - damage1.size * rect[0]) / 2 + rect[0] * ii,
- 16, bitmap1, Rect.new(rect[0] * damage1[ii].to_i, 0, rect[0], rect[1]))
- end
- else # 傷害數值顏色描繪
- bitmap.draw_text(-1, 12 - 1, 160, 36, damage, 1)
- bitmap.draw_text(+1, 12 - 1, 160, 36, damage, 1)
- bitmap.draw_text(-1, 12 + 1, 160, 36, damage, 1)
- bitmap.draw_text(+1, 12 + 1, 160, 36, damage, 1)
- bitmap.font.color = value >= 0 ? color[0] : color[1]
- bitmap.draw_text(0, 12, 160, 36, damage, 1)
- end
- else # 文字傷害的場合
- if Sword56_Damage[damage].is_a?(String) # 文字傷害圖片傷害描繪
- bitmap1 = RPG::Cache.picture(Sword56_Damage[damage])
- rect = Rect.new(0, 0, bitmap1.width, bitmap1.height)
- bitmap.blt((160 - rect.width) / 2, 12, bitmap1, rect)
- else # 文字傷害顏色描繪
- bitmap.draw_text(-1, 12 - 1, 160, 36, damage, 1)
- bitmap.draw_text(+1, 12 - 1, 160, 36, damage, 1)
- bitmap.draw_text(-1, 12 + 1, 160, 36, damage, 1)
- bitmap.draw_text(+1, 12 + 1, 160, 36, damage, 1)
- bitmap.font.color = Sword56_Damage[damage].is_a?(Color) ? # 文字顏色
- Sword56_Damage[damage] : Color.new(255, 255, 255)
- bitmap.draw_text(0, 12, 160, 36, damage, 1)
- end
- end
- if critical ; unless Sword56_Critical[1] # 會心一擊的場合 ; 圖片描繪會心一擊
- bitmap1 = RPG::Cache.picture(Sword56_Critical[0])
- rect = Rect.new(0, 0, bitmap1.width, bitmap1.height)
- bitmap.blt((160 - rect.width) / 2, 0, bitmap1, rect)
- else # 描繪會心一擊內容
- bitmap.font.size = 20 ; bitmap.font.color = Sword56_Shadow
- bitmap.draw_text(-1, -1, 160, 20, Sword56_Critical[0], 1)
- bitmap.draw_text(+1, -1, 160, 20, Sword56_Critical[0], 1)
- bitmap.draw_text(-1, +1, 160, 20, Sword56_Critical[0], 1)
- bitmap.draw_text(+1, +1, 160, 20, Sword56_Critical[0], 1)
- bitmap.font.color = Sword56_Critical[1]
- bitmap.draw_text(0, 0, 160, 20, Sword56_Critical[0], 1)
- end ; end
- @damage_sprite56[i] = ::Sprite.new(self.viewport)
- @damage_sprite56[i].bitmap = bitmap
- @damage_sprite56[i].ox, @damage_sprite56[i].oy = 80, 45 + Sword56_Revise
- @damage_sprite56[i].x, @damage_sprite56[i].y = self.x, self.y - self.oy / 2
- @damage_sprite56[i].z = 3000
- @_damage_about[i] = Sword56_Move[@damage_about] # 代入傷害移動類型
- @damage_duration56[i] = Sword56_Move[@damage_about].size # 代入傷害移動時間
- end
- #-------------------------------------------------------------
- #● 釋放傷害數值(第幾個傷害)
- def dispose_damage(i = false)
- (@damage_sprite56.each{|damage_sprite| damage_sprite.dispose if damage_sprite}
- @damage_sprite56 = [] ; return) unless i # 釋放所有傷害的場合
- return unless @damage_sprite56[i] # 無需釋放就中斷
- @damage_sprite56[i].bitmap.dispose ; @damage_sprite56[i].dispose
- @damage_sprite56[i], @damage_duration56[i] = nil, 0
- end
- #-------------------------------------------------------------
- #● 更新畫面
- alias sword56_update update unless $Sword_F12_Error[56]
- def update
- sword56_update
- @damage_sprite56.each_index do |i| if @damage_duration56[i] > 0
- @damage_duration56[i] -= 1
-
- xy = @_damage_about[i][-@damage_duration56[i]]
- @damage_sprite56[i].x += xy[0] ; @damage_sprite56[i].y += xy[1]
-
- @damage_sprite56[i].opacity = 256 - (12 - @damage_duration56[i]) * 32
- dispose_damage(i) if @damage_duration56[i] == 0
- end ; end
- end
- end
- #-------------------------------------------------------------
- #● 判斷是否有傷害正在顯示
- def damage? ; @damage_sprite56.size > 0 ; end
- end
- $Sword_F12_Error[56] = true # 腳本讀取完畢,打開F12除錯標誌功能
复制代码
|
|