Project1
标题:
求助!!如何让角色处于某种状态时改变贴图。
[打印本页]
作者:
Moron
时间:
2025-5-31 13:36
标题:
求助!!如何让角色处于某种状态时改变贴图。
如题,角色贴图是在角色备注里加了バトラーグラフィック = "图片名称",图标是在Graphics/Battlers里,对了那种需要某一个状态才可以开启的技能怎么做(新人勿喷),,如何限制状态持续回合。现在没写星屑,等我富有了可以专门发帖给你
作者:
salt
时间:
2025-6-10 19:20
给你找了个改变贴图的脚本
#==============================================================================
# ■ RGSS3 変装特徴 Ver1.02 by 星潟
#------------------------------------------------------------------------------
# 顔グラフィックや歩行グラフィックを
# 一時的に変更する特徴の作成が可能になります。
#------------------------------------------------------------------------------
# このスクリプトによる設定は、全て装備品のメモ欄で行います。
#------------------------------------------------------------------------------
# ★顔グラフィックの変更
#
# <顔グラ変更:Actor1,0,5>
#
# これで、この装備品を持つアクターの変更後の顔グラフィックとして
# ファイルネーム「Actor1」の
# インデックス0(上段の最も左)を優先度5で指定します。
#------------------------------------------------------------------------------
# ★歩行グラフィックの変更
#
# <ホコグラ変更:Actor2,5,6>
#
# これで、この装備品を持つアクターの変更後の歩行グラフィックとして
# ファイルネーム「Actor2」の
# インデックス5(下段の左から2番目)を優先度6で指定します。
#------------------------------------------------------------------------------
# ★共通
#
# 他の装備でもグラフィックの変更が設定されている場合は
# 最も優先度が高い物の中で、最初に選択された物が選択されます。
#------------------------------------------------------------------------------
# 以下 XPスタイルバトル併用時のみ有効な設定です。
#------------------------------------------------------------------------------
# ★状況に応じた顔グラフィックの変更
#
# HPとステートに応じて、顔グラフィックが指定された物に変更されます。
#------------------------------------------------------------------------------
# Ver1.01 XPスタイルバトル用の機能を更に追加しました。
# Ver1.02 歩行グラフィック変更機能無効化時にエラーになる不具合を解消しました。
#==============================================================================
module DISGUISE_FEATURE
#顔グラフィック変更機能を有効にするか否か。(trueで有効、falseで無効)
FACE = true
#顔グラフィック設定用のキーワードを指定します。
WORD1 = "顔グラ変更"
#歩行グラフィック変更機能を有効にするか否か。(trueで有効、falseで無効)
CHARA = true
#歩行グラフィック設定用のキーワードを指定します。
WORD2 = "ホコグラ変更"
#XPスタイルバトル導入時、ステートや現在HPに応じて
#顔グラフィックを変更する機能を有効にするか?
XPSC = true
#XPスタイルバトル導入時の変更設定が有効な場合
#現在ステートに応じた顔グラフィックを指定します。
#[ステートID,優先度,追加文字]で1セットとなります。
#複数セット指定する場合は「,」で区切ってください。
#ステートIDは対象となるステートID。
#優先度は、その変更の優先度。(有効な物の中で最も優先度の高い物が選択されます)
#追加文字は、元の顔グラフィックの後につく文字です。
#例えば、[2,50,"▲"]で、これのみを満たしている場合
#アクターの顔グラフィックファイル名がActor4であれば
#Actor4▲という顔グラフィックファイルから読み込みます。
STATE_F = [
[2,50,"▲"]
]
#XPスタイルバトル導入時の変更設定が有効な場合
#現在HP割合に応じた顔グラフィックを指定します。
#[HP割合,優先度,追加文字]で
#1セットとなります。
#複数セット指定する場合は「,」で区切ってください。
#HP割合は対象となるHP割合。
#優先度は、その変更の優先度。(有効な物の中で最も優先度の高い物が選択されます)
#追加文字は、元の顔グラフィックの後につく文字です。
#例えば、[60,1,"☆"]で、これのみを満たしている場合
#アクターの顔グラフィックファイル名がActor4であれば
#Actor4☆という顔グラフィックファイルから読み込みます。
HPRATE_F = [
[60,1,"☆"],
[30,2,"★"]
]
#優先度はステートとHP両方共通ですので
#両方で最も高い優先度の物が選択されます。
#同じ値である場合、先に処理が行われた方が優先されます。
end
class Game_Temp
attr_accessor :disguise_flag
#--------------------------------------------------------------------------
# XPスタイルバトル導入フラグ
#--------------------------------------------------------------------------
def xps_flag
#キャッシュが存在する場合はキャッシュを返す。
return @xps_flag if @xps_flag != nil
#XPスタイルバトル導入フラグの取得。
@xps_flag = $lnx_include != nil && $lnx_include[:lnx11a] != nil
#キャッシュを返す。
@xps_flag
end
end
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# 顔グラフィック変更機能が有効な時
#--------------------------------------------------------------------------
if DISGUISE_FEATURE::FACE
#--------------------------------------------------------------------------
# 顔グラフィックの名称
#--------------------------------------------------------------------------
def face_name
#変更用の顔グラフィックのファイル名を取得する。
#存在しない場合は本来の顔グラフィックのファイル名を返す。
data = ex_face.empty? ? @face_name : ex_face_best[0]
#XPスタイルバトル導入時のみ処理を分岐。
if $game_temp.xps_flag
#キャッシュが存在しない場合はキャッシュを生成。
@l_face_name = data if @l_face_name == nil
#キャッシュと一致しない場合に限り、バトラーグラフィック更新フラグを立てる。
if @l_face_name != data
self.refresh_battler_graphic = true
@l_face_name = data
end
end
data
end
#--------------------------------------------------------------------------
# 顔グラフィックのインデックスを取得
#--------------------------------------------------------------------------
def face_index
#変更用の顔グラフィックインデックスを取得する。
#存在しない場合は本来の顔グラフィックインデックスを返す。
data = ex_face.empty? ? @face_index : ex_face_best[1]
#XPスタイルバトル導入時のみ処理を分岐。
if $game_temp.xps_flag
#キャッシュが存在しない場合はキャッシュを生成。
@l_face_index = data if @l_face_index == nil
if @l_face_index != data
self.refresh_battler_graphic = true
@l_face_index = data
end
end
data
end
#--------------------------------------------------------------------------
# 顔グラフィックの一覧を取得
#--------------------------------------------------------------------------
def ex_face
data = []
feature_objects.each {|f| data.push(f.ex_face) if f && f.ex_face}
data
end
#--------------------------------------------------------------------------
# 最も優先度の高い顔グラフィックを取得
#--------------------------------------------------------------------------
def ex_face_best
f_data = ["",0,0]
ex_face.each {|f| f_data = f if f_data[2] < f[2]}
f_data
end
end
#--------------------------------------------------------------------------
# 歩行グラフィック変更機能が有効な時
#--------------------------------------------------------------------------
if DISGUISE_FEATURE::CHARA
#--------------------------------------------------------------------------
# 歩行グラフィックの名称
#--------------------------------------------------------------------------
def character_name
#変更用の歩行グラフィックのファイル名を取得する。
#存在しない場合は本来の歩行グラフィックのファイル名を返す。
data = ex_character.empty? ? @character_name : ex_character_best[0]
#XPスタイルバトル導入時のみ処理を分岐。
if $game_temp.xps_flag
#キャッシュが存在しない場合はキャッシュを生成。
@l_character_name = data if @l_character_name == nil
if @l_character_name != data
self.refresh_battler_graphic = true
@l_character_name = data
end
end
data
end
#--------------------------------------------------------------------------
# 歩行グラフィックのインデックスを取得
#--------------------------------------------------------------------------
def character_index
#変更用の歩行グラフィックインデックスを取得する。
#存在しない場合は本来の歩行グラフィックインデックスを返す。
data = ex_character.empty? ? @character_index : ex_character_best[1]
#XPスタイルバトル導入時のみ処理を分岐。
if $game_temp.xps_flag
#キャッシュが存在しない場合はキャッシュを生成。
@l_character_index = data if @l_character_index == nil
if @l_character_index != data
self.refresh_battler_graphic = true
@l_character_index = data
end
end
data
end
#--------------------------------------------------------------------------
# 歩行グラフィックの一覧を取得
#--------------------------------------------------------------------------
def ex_character
data = []
feature_objects.each {|f| data.push(f.ex_character) if f && f.ex_character}
data
end
#--------------------------------------------------------------------------
# 最も優先度の高い歩行グラフィックを取得
#--------------------------------------------------------------------------
def ex_character_best
c_data = ["",0,0]
ex_character.each {|c| c_data = c if c_data[2] < c[2]}
c_data
end
end
#--------------------------------------------------------------------------
# リフレッシュ
#--------------------------------------------------------------------------
alias refresh_disguise refresh
def refresh
#本来の処理を実行。
refresh_disguise
#スタック回避フラグが立っていない場合に限り、特殊リフレッシュを実行。
$game_player.disguise_refresh(self) if !$game_temp.disguise_flag
end
end
if DISGUISE_FEATURE::CHARA
class Game_Player < Game_Character
#--------------------------------------------------------------------------
# 特殊リフレッシュ
#--------------------------------------------------------------------------
def disguise_refresh(d_actor)
#スタック回避フラグを立てる。
$game_temp.disguise_flag = true
#先頭アクターと特殊リフレッシュ対象が同一の場合は
#先頭アクターに特殊リフレッシュを実行する。
#そうでない場合は、フォロワーに対し特殊リフレッシュを実行する。
if actor == d_actor
@character_name = actor ? actor.character_name : ""
@character_index = actor ? actor.character_index : 0
else
@followers.disguise_refresh(d_actor)
end
#スタック回避フラグを消す。
$game_temp.disguise_flag = nil
end
end
class Game_Followers
#--------------------------------------------------------------------------
# 特殊リフレッシュ
#--------------------------------------------------------------------------
def disguise_refresh(d_actor)
#フォロワーが存在しない場合は処理を終了する。
return if @data.empty?
#フォロワー内に特殊リフレッシュ対象が存在する時
#そのフォロワーのみに特殊リフレッシュを実行。
@data.each do |d|
return d.refresh if d.actor == d_actor
end
end
end
end
class RPG::BaseItem
if DISGUISE_FEATURE::FACE
#--------------------------------------------------------------------------
# 顔グラフィック変更情報
#--------------------------------------------------------------------------
def ex_face
#キャッシュがある場合はキャッシュを返す。
return @ex_face if @ex_face != nil
#メモ欄からデータを取得。
@ex_face = false
memo = self.note.scan(/<#{DISGUISE_FEATURE::WORD1}[::](\S+),(\d+),(\d+)>/).flatten
#正常なデータを取得出来無かった場合は空の配列とする。
if memo != nil && !memo.empty? && memo[1].to_i < 8 && memo[2].to_i > 0
@ex_face = [memo[0], memo[1].to_i, memo[2].to_i]
end
#データを返す。
@ex_face
end
end
if DISGUISE_FEATURE::CHARA
#--------------------------------------------------------------------------
# 歩行グラフィック変更情報
#--------------------------------------------------------------------------
def ex_character
#キャッシュがある場合はキャッシュを返す。
return @ex_character if @ex_character != nil
#メモ欄からデータを取得。
@ex_character = false
memo = self.note.scan(/<#{DISGUISE_FEATURE::WORD2}[::](\S+),(\d+),(\d+)>/).flatten
#正常なデータを取得出来無かった場合は空の配列とする。
if memo != nil && !memo.empty? && memo[1].to_i < 8 && memo[2].to_i > 0
@ex_character = [memo[0], memo[1].to_i, memo[2].to_i]
end
#データを返す。
@ex_character
end
end
end
if $lnx_include != nil && $lnx_include[:lnx11a] != nil
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# グラフィック設定の配列内データを変更する。
#--------------------------------------------------------------------------
def graphic_name_index
#@を抜き、参照対象をGame_Actor内変数からGame_Actorで定義された物にする。
case LNX11::DEFAULT_BATTLER_GRAPHIC
when 0 ; [face_name, face_index]
when 1 ; [character_name, character_index]
end
end
#--------------------------------------------------------------------------
# デフォルトバトラーグラフィック設定を変更する。
#--------------------------------------------------------------------------
def default_battler_graphic
#@を抜き、参照対象をGame_Actor内変数からGame_Actorで定義された物にする。
case LNX11::DEFAULT_BATTLER_GRAPHIC
when 0 # 顔グラフィック
self.facebattler = draw_face(face_name, face_index)
when 1 # 歩行グラフィック
self.facebattler = draw_character(character_name, character_index)
end
end
#以下はステートやHPに応じた表情変化が有効な場合のみ処理を行う。
if DISGUISE_FEATURE::XPSC
#--------------------------------------------------------------------------
# 顔グラフィックの名称
#--------------------------------------------------------------------------
alias face_name_hp_rate_state face_name
def face_name
#本来の処理でのデータを取得する。
data = face_name_hp_rate_state
#顔グラフィックの追加名称を付与。
data = data + hp_rate_face_text
#データを返す。
data
end
#--------------------------------------------------------------------------
# 顔グラフィックの追加名称
#--------------------------------------------------------------------------
def hp_rate_face_text
#HP割合を取得。
data = self.hp_rate * 100
#初期優先度を設定。
pr = 0
#初期追加文字を設定。
text = ""
#各ステート指定に依存した処理を実行。
DISGUISE_FEATURE::STATE_F.each do |a|
if a[1] > pr
next unless state?(a[0])
pr = a[1]
text = a[2]
end
end
#各HP指定に依存した処理を実行。
DISGUISE_FEATURE::HPRATE_F.each do |a|
if a[1] > pr
next unless a[0] >= data
pr = a[1]
text = a[2]
end
end
text
end
#--------------------------------------------------------------------------
# リフレッシュ
#--------------------------------------------------------------------------
alias refresh_hp_rate_state refresh
def refresh
#本来の処理を実行。
refresh_hp_rate_state
#グラフィック更新フラグをtrueにする。
@refresh_battler_graphic = true
end
end
end
end
复制代码
作者:
Moron
时间:
2025-6-14 10:59
salt 发表于 2025-6-10 19:20
给你找了个改变贴图的脚本
谢谢啦,虽然我已经自己学会了
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1