RPGXP [스크립트] KGC 몬스터도감
2006.05.24 10:12
모모모껄 사용하다가 문득 KGC껄 보니 욕심이 나더라고요
이곳에 개시되어있는 KGC도감은 안되는걸로 확인이 되었고
나름대로 KGC 사이트에서 노가다 뛰면서 알아낸결과입니다
kgc 에서는 자체적으로 글씨폰트? 어쨋든 shadow 문자라는것을 사용하는데
그렇기 때문에 kgc에서 제작된 스크립트에는 거의다 shadow 문자를 사용하게되있습니다
에러가 나는이유가 사용자가 shadow를 사용하지 않거나, 해당 스크립트가 없어서입니다.
자, 그럼 지금부터 shadow 문자 사용 스크립트, 등을 나열하겠습니다
총 3개의 스크립트를 추가하니, 무턱대고 전부 드래그해서 붙여넣으면 안됩니다.
중간중간에 빨간색 글씨의 설명까지만 끊어서 복사하시길바랍니다
(아참, 설명부분은 복사하는거 아님다-,-;;)
<여기서부터 Scene_Debug의 바로밑에 넣어주십시오 이름은 알아서 설정 ^^;
$game_special_elements = {}
$imported = {}
$data_states = load_data("Data/States.rxdata")
$data_system = load_data("Data/System.rxdata")
여기까지입니다>
<자 그다음엔 위엣것과 Main 사이에 추가합니다.
그림자 문자 묘화 스크립트입니다.
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#_/ ◆인연 잡음·그림자 문자 묘화 - KGC_FrameShadowText◆
#_/----------------------------------------------------------------------------
#_/ draw_text 를 강화해, 인연 잡음이나 그림자 문자의 묘화 기능을 추가합니다.
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
# 도입 이 끝난 상태 플래그를 온
$imported["FrameShadowText"] = true
#==============================================================================
# ■ Bitmap
#-------------------------------------------------------------------- ----------
# Bitmap 클래스 메소드 추가
#==============================================================================
class Bitmap
#--------------------------------------------------------------------------
# ● 테두리 문자 묘화
#------------------------------------------------------------------------- -
def draw_frame_text(x, y, width, height, string, align = 0,
frame_color = Color.new(0, 0, 0))
# 원래의 색을 보존해 둔다
origin_color = font.color.dup
# 인연 잡음
font.color = frame_color
draw_text(x - 1, y - 1, width, height, string, align)
draw_text(x - 1, y + 1, width, height, string, align)
draw_text(x + 1, y - 1, width, height, string, align)
draw_text(x + 1, y + 1, width, height, string, align)
# 원래의 색으로 돌려 묘화
font.color = origin_color
draw_text(x, y, width, height, string, align)
end
#------------------------------------------------------ --------------------
# ● 테두리 문자 묘화(Rect판)
#--------------------------------------------------------------------------
def draw_frame_text_r(rect, string, align = 0, frame_color = Color.new(0, 0, 0))
# draw_frame_text 를 호출한다
draw_frame_text(rect.x, rect.y, rect.width, rect.height, string, align, frame_color)
end
#--------------------------------------------------------------------------
# ● 그림자 문자 묘화
#--------------------------------------------------------------------------
def draw_shadow_text(x, y, width, height, string, align = 0,
shadow_color = Color.new(0 , 0, 0))
# 원래의 색을 보존해 둔다
origin_color = font.color.dup
# 그림자 묘화
font.color = shadow_color
draw_text(x + 2, y + 2, width, height, string, align)
# 원래의 색으로 돌려 묘화
font.color = origin_color
draw_text(x, y, width, height, string, align)
end
#--------------------------- -----------------------------------------------
# ● 그림자 문자 묘화(Rect판)
#--------------------------------------------------------------------------
def draw_shadow_text_r(rect, string, align = 0, frame_color = Color.new(0, 0, 0))
# draw_shadow_text 를 호출한다
draw_shadow_text(rect.x, rect.y, rect.width, rect.height, string, align, frame_color)
end
end
여기까지가 그림자문자 스크립트입니다>
<자 마지막으로 몬스터 도감입니다. 2번째것(그림자묘화)과 Main 사이에 끼워넣으시기 바랍니다.
더이상 설명이나 추가할 스크립트 부분이 없으니 여기서부터는 맨 밑부분까지 드래그하셔도 됩니다 ;
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#_/ ◆モンスター図鑑 - KGC_MonsterGuide◆
#_/----------------------------------------------------------------------------
#_/ モンスター図鑑を作成します。
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
# 導入済みフラグをオン
$imported["MonsterGuide"] = true
#==============================================================================
# ★ カスタマイズ項目 ★
#==============================================================================
# ◆図鑑から隠すモンスター
# 非表示にしたい敵のIDを配列に格納
$hide_enemies = [16]
class Window_MonsterGuideRight < Window_Base
# ◆属性耐性を調べる範囲(属性ID)
ELEMENT_RANGE = 1..8
# ◆弱点属性文字色
WEEK_COLOR = Color.new(255, 128, 128)
# ◆耐性属性文字色
RESIST_COLOR = Color.new(128, 128, 255)
end
class Scene_MonsterGuide
# ◆カーソル移動で表示内容更新
# false にすると、C ボタンを押すまで再描画しない
# (重く感じない場合は true のままでOK)
MOVE_REFRESH = true
end
class Scene_Battle
# ◆変身前の敵も撃破
# false にすると、変身前の敵は撃破したと見なされない
MG_ORIGINAL_DEFEAT = true
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#--------------------------------------------------------------------------
# ● モンスター図鑑呼び出し
#--------------------------------------------------------------------------
def call_monster_guide
# プレイヤーの姿勢を矯正
$game_player.straighten
# モンスター図鑑画面に切り替え
$scene = Scene_MonsterGuide.new
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Game_System
#------------------------------------------------------------------------------
# システム周りのデータを扱うクラスです。BGM などの管理も行います。このクラス
# のインスタンスは $game_system で参照されます。
#==============================================================================
class Game_System
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_accessor :enemy_encountered # 遭遇済みフラグ
attr_accessor :enemy_defeated # 撃破済みフラグ
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
alias initialize_KGC_MonsterGuide initialize
def initialize
# 元の処理を実行
initialize_KGC_MonsterGuide
@enemy_encountered = []
@enemy_defeated = []
end
#--------------------------------------------------------------------------
# ● エネミー存在チェック
#--------------------------------------------------------------------------
def enemy_exist?(enemy_id)
return $data_enemies[enemy_id] != nil && $data_enemies[enemy_id].name != ""
end
#--------------------------------------------------------------------------
# ● 存在する敵の種類数取得
#--------------------------------------------------------------------------
def all_enemies_count
n = 0
# 存在する敵の種類数を取得
for i in 1...$data_enemies.size
next if !enemy_exist?(i) || $hide_enemies.include?(i)
n += 1
end
return n
end
#--------------------------------------------------------------------------
# ● 撃破した敵の種類数取得
#--------------------------------------------------------------------------
def defeated_enemies_count
n = 0
# 撃破した敵の種類数を取得
for i in 1...$data_enemies.size
next if !enemy_exist?(i) || !@enemy_encountered[i] ||
!@enemy_defeated[i] || $hide_enemies.include?(i)
n += 1
end
return n
end
#--------------------------------------------------------------------------
# ● モンスター図鑑完成度の取得
#--------------------------------------------------------------------------
def monster_guide_completion
return defeated_enemies_count * 100 / all_enemies_count
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Game_Enemy
#------------------------------------------------------------------------------
# エネミーを扱うクラスです。このクラスは Game_Troop クラス ($game_troop) の
# 内部で使用されます。
#==============================================================================
class Game_Enemy < Game_Battler
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_reader :original_id # 変身前のID
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# troop_id : トループ ID
# member_index : トループメンバーのインデックス
#--------------------------------------------------------------------------
alias initialize_KGC_MonsterGuide initialize
def initialize(troop_id, member_index)
# 元の処理を実行
initialize_KGC_MonsterGuide(troop_id, member_index)
@original_id = []
# 遭遇済みフラグをオン
unless @hidden
$game_system.enemy_encountered[@enemy_id] = true
end
end
#--------------------------------------------------------------------------
# ● 変身
# enemy_id : 変身先のエネミー ID
#--------------------------------------------------------------------------
alias transform_KGC_MonsterGuide transform
def transform(enemy_id)
# 変身前のIDを保存
@original_id.push(@enemy_id)
# 元の処理を実行
transform_KGC_MonsterGuide(enemy_id)
# 変身後の敵も遭遇済みにする
$game_system.enemy_encountered[@enemy_id] = true
end
#--------------------------------------------------------------------------
# ● 隠れ状態設定
#--------------------------------------------------------------------------
def hidden=(value)
@hidden = value
# 出現した場合は遭遇済みフラグをオン
unless @hidden
$game_system.enemy_encountered[@enemy_id] = true
end
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Window_MonsterGuideTop
#------------------------------------------------------------------------------
# モンスター図鑑画面で、完成度を表示するウィンドウです。
#==============================================================================
class Window_MonsterGuideTop < Window_Base
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
super(0, 0, 240, 96)
self.contents = Bitmap.new(width - 32, height - 32)
self.back_opacity = 160
refresh
end
#--------------------------------------------------------------------------
# ● 회복(refresh)
#--------------------------------------------------------------------------
def refresh
self.contents.clear
text = "퇴치 값:#{$game_system.defeated_enemies_count}/#{$game_system.all_enemies_count}"
self.contents.draw_shadow_text(0, 0, width - 32, 32, text)
text = "완성도:#{$game_system.monster_guide_completion}%"
self.contents.draw_shadow_text(0, 32, width - 32, 32, text)
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Window_MonsterGuideLeft
#------------------------------------------------------------------------------
# モンスター図鑑画面で、モンスター一覧を表示するウィンドウです。
#==============================================================================
class Window_MonsterGuideLeft < Window_Selectable
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
super(0, 96, 240, 384)
self.index = 0
self.back_opacity = 160
refresh
end
#--------------------------------------------------------------------------
# ● 選択モンスターの取得
#--------------------------------------------------------------------------
def item
return @data[self.index]
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
if self.contents != nil
self.contents.dispose
self.contents = nil
end
@data = []
# 存在するエネミーを取得
for i in 1...$data_enemies.size
next if !$game_system.enemy_exist?(i) || $hide_enemies.include?(i)
@data.push($data_enemies[i])
end
# 項目数が 0 でなければビットマップを作成し、全項目を描画
@item_max = @data.size
if @item_max > 0
self.contents = Bitmap.new(width - 32, row_max * 32)
for i in 0...@item_max
draw_item(i)
end
end
end
#--------------------------------------------------------------------------
# ● 項目の描画
# index : 項目番号
#--------------------------------------------------------------------------
def draw_item(index)
enemy = @data[index]
# 撃破していれば通常文字色に、そうでなければ無効文字色に設定
if $game_system.enemy_defeated[enemy.id]
self.contents.font.color = normal_color
else
self.contents.font.color = disabled_color
end
x = 4
y = index * 32
rect = Rect.new(x, y, self.width - 40, 32)
self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
# 遭遇していれば名前、遭遇していなければ?を描画
if $game_system.enemy_encountered[enemy.id]
self.contents.draw_text(x, y, self.width - 40, 32, enemy.name)
else
self.contents.draw_text(x, y, self.width - 40, 32, "? ? ? ? ? ? ? ?", 1)
end
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Window_MonsterGuideRight
#------------------------------------------------------------------------------
# モンスター図鑑画面で、ステータスを表示するウィンドウです。
#==============================================================================
class Window_MonsterGuideRight < Window_Base
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
super(240, 0, 400, 480)
self.contents = Bitmap.new(width - 32, height - 32)
self.back_opacity = 160
end
#--------------------------------------------------------------------------
# ● リフレッシュ
# enemy : エネミー
# show_status : ステータス表示
#--------------------------------------------------------------------------
def refresh(enemy, show_status = true)
self.contents.clear
# 遭遇していない場合はNo data
unless $game_system.enemy_encountered[enemy.id]
self.contents.font.color = disabled_color
self.contents.draw_text(0, 208, 368, 32, "- No Data -", 1)
return
end
# バトラー画像を描画
bitmap = RPG::Cache.battler(enemy.battler_name, enemy.battler_hue)
cw = bitmap.width; ch = bitmap.height
src_rect = Rect.new(0, 0, cw, ch)
self.contents.blt(184 - cw / 2, 0, bitmap, src_rect)
# ステータス非表示の場合は戻る
return unless show_status
# 撃破済みの場合、詳細情報も描画
if $game_system.enemy_defeated[enemy.id]
# ステータスを描画
self.contents.font.color = system_color
self.contents.draw_shadow_text(0, 224, 64, 32, $data_system.words.hp)
self.contents.draw_shadow_text(122, 224, 64, 32, $data_system.words.sp)
self.contents.draw_shadow_text(244, 224, 64, 32, $data_system.words.str)
self.contents.draw_shadow_text(0, 256, 64, 32, $data_system.words.dex)
self.contents.draw_shadow_text(122, 256, 64, 32, $data_system.words.agi)
self.contents.draw_shadow_text(244, 256, 64, 32, $data_system.words.int)
self.contents.draw_shadow_text(0, 288, 64, 32, $data_system.words.atk)
self.contents.draw_shadow_text(122, 288, 64, 32, $data_system.words.pdef)
self.contents.draw_shadow_text(244, 288, 64, 32, $data_system.words.mdef)
self.contents.draw_shadow_text(0, 320, 96, 32, "弱点属性")
self.contents.draw_shadow_text(0, 352, 96, 32, "耐性属性")
self.contents.draw_shadow_text(0, 384, 96, 32, "経験値")
self.contents.draw_shadow_text(184, 384, 384, 32, $data_system.words.gold)
self.contents.draw_shadow_text(0, 416, 64, 32, $data_system.words.item)
# 値を描画
self.contents.font.color = normal_color
hp = enemy.maxhp; sp = enemy.maxsp
str = enemy.str; dex = enemy.dex; agi = enemy.agi; int = enemy.int
atk = enemy.atk; pdef = enemy.pdef; mdef = enemy.mdef
exp = enemy.exp; gold = enemy.gold
if $imported["LimitBreak"]
hp *= $maxhp_correct
sp *= $maxsp_correct
end
if $imported["BattleDifficulty"]
hp *= get_difficulty[1]
sp *= get_difficulty[2]
correct = get_difficulty[3]
str *= correct; dex *= correct; agi *= correct; int *= correct
atk *= correct; pdef *= correct; mdef *= correct
exp *= get_difficulty[4]; gold *= get_difficulty[5]
end
self.contents.draw_shadow_text(48, 224, 64, 32, Integer(hp).to_s, 2)
self.contents.draw_shadow_text(170, 224, 64, 32, Integer(sp).to_s, 2)
self.contents.draw_shadow_text(292, 224, 64, 32, Integer(str).to_s, 2)
self.contents.draw_shadow_text(48, 256, 64, 32, Integer(dex).to_s, 2)
self.contents.draw_shadow_text(170, 256, 64, 32, Integer(agi).to_s, 2)
self.contents.draw_shadow_text(292, 256, 64, 32, Integer(int).to_s, 2)
self.contents.draw_shadow_text(48, 288, 64, 32, Integer(atk).to_s, 2)
self.contents.draw_shadow_text(170, 288, 64, 32, Integer(pdef).to_s, 2)
self.contents.draw_shadow_text(292, 288, 64, 32, Integer(mdef).to_s, 2)
self.contents.draw_shadow_text(0, 384, 144, 32, Integer(exp).to_s, 2)
self.contents.draw_shadow_text(184, 384, 144, 32, Integer(gold).to_s, 2)
# 弱点属性描画
text = ""
for i in ELEMENT_RANGE
# 有効度が3未満(A,B)ならば弱点
if enemy.element_ranks[i] < 3
# 属性名を追加
text += "/" if text != ""
text += $data_system.elements[i]
end
end
self.contents.font.color = WEEK_COLOR.dup
self.contents.draw_text(104, 320, 264, 32, text)
# 耐性属性描画
text = ""
for i in ELEMENT_RANGE
# 有効度が3より大きい(D,E,F)ならば耐性
if enemy.element_ranks[i] > 3
# 属性名を追加
text += "/" if text != ""
text += $data_system.elements[i]
end
end
self.contents.font.color = RESIST_COLOR.dup
self.contents.draw_text(104, 352, 264, 32, text)
self.contents.font.color = normal_color
# アイテム描画
n = enemy.treasure_prob
n *= get_difficulty[6] if $imported["BattleDifficulty"]
prob = "#{Integer(n)}%"
if enemy.item_id > 0
icon = RPG::Cache.icon($data_items[enemy.item_id].icon_name)
text = $data_items[enemy.item_id].name
elsif enemy.weapon_id > 0
icon = RPG::Cache.icon($data_weapons[enemy.weapon_id].icon_name)
text = $data_weapons[enemy.weapon_id].name
elsif enemy.armor_id > 0
icon = RPG::Cache.icon($data_armors[enemy.armor_id].icon_name)
text = $data_armors[enemy.armor_id].name
else
icon = Bitmap.new(24, 24)
text = "No Item."
prob = ""
end
self.contents.blt(70, 420, icon, Rect.new(0, 0, 24, 24))
self.contents.draw_shadow_text(92 , 416, 204, 32, text)
self.contents.draw_shadow_text(300, 416, 64, 32, prob)
# 撃破していない場合
else
self.contents.font.color = disabled_color
self.contents.draw_shadow_text(0, 280, 368, 32, "- Not Defeated -", 1)
end
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Scene_MonsterGuide
#------------------------------------------------------------------------------
# モンスター図鑑画面の処理を行うクラスです。
#==============================================================================
class Scene_MonsterGuide
#--------------------------------------------------------------------------
# ● メイン処理
#--------------------------------------------------------------------------
def main
# スプライトセット作成
@spriteset = Spriteset_Map.new
# 図鑑ウィンドウを作成
@guide_top_window = Window_MonsterGuideTop.new
@guide_left_window = Window_MonsterGuideLeft.new
@guide_right_window = Window_MonsterGuideRight.new
# ステータス表示
@show_status = true
# エネミーオブジェクトを指定
enemy = @guide_left_window.item
# 情報描画
@guide_right_window.refresh(enemy, @show_status)
# トランジション実行
Graphics.transition
# メインループ
loop do
# ゲーム画面を更新
Graphics.update
# 入力情報を更新
Input.update
# フレーム更新
update
# 画面が切り替わったらループを中断
if $scene != self
break
end
end
# トランジション準備
Graphics.freeze
# ウィンドウを解放
@spriteset.dispose
@guide_top_window.dispose
@guide_left_window.dispose
@guide_right_window.dispose
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
# ウィンドウを更新
@guide_top_window.update
@guide_left_window.update
@guide_right_window.update
# B ボタンが押された場合
if Input.trigger?(Input::B)
# キャンセル SE を演奏
$game_system.se_play($data_system.cancel_se)
# マップ画面に切り替え
$scene = Scene_Map.new
return
end
# A ボタンが押された場合
if Input.trigger?(Input::A)
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
# ステータス表示を切り替え
@show_status = !@show_status
# エネミーオブジェクトを指定
enemy = @guide_left_window.item
# 情報描画
@guide_right_window.refresh(enemy, @show_status)
return
end
# C ボタンが押された場合
if Input.trigger?(Input::C)
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
# エネミーオブジェクトを指定
enemy = @guide_left_window.item
# 情報描画
@guide_right_window.refresh(enemy, @show_status)
return
end
if MOVE_REFRESH
# カーソルが移動した場合
if @last_index != @guide_left_window.index
# インデックス保存
@last_index = @guide_left_window.index
# エネミーオブジェクトを指定
enemy = @guide_left_window.item
# 情報描画
@guide_right_window.refresh(enemy, @show_status)
return
end
end
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Scene_Battle (分割定義 2)
#------------------------------------------------------------------------------
# バトル画面の処理を行うクラスです。
#==============================================================================
class Scene_Battle
#--------------------------------------------------------------------------
# ● アフターバトルフェーズ開始
#--------------------------------------------------------------------------
alias start_phase5_KGC_MonsterGuide start_phase5
def start_phase5
# トループ全体をループ
for enemy in $game_troop.enemies
# エネミーが隠れ状態の場合は次へ
next if enemy.hidden
# 撃破済みフラグをオン
$game_system.enemy_defeated[enemy.id] = true
# 変身前の敵も撃破済みにする
if MG_ORIGINAL_DEFEAT
enemy.original_id.each do |id|
next if id == nil
$game_system.enemy_defeated[id] = true
end
end
end
# 元の処理を実行
start_phase5_KGC_MonsterGuide
end
end
댓글 4
-
さくらざき せつな
2006.09.18 06:48
큭... 복사가 안되요..|+rp2+|31|+rp3+|manual -
쉐도우君
2006.10.10 03:07
복사가 안되는...왜지;|+rp2+|38|+rp3+|manual -
토비카케
2007.01.03 14:21
이거 불러내는 이벤트 스크립트가 무엇인지 궁급합니다..|+rp2+|69|+rp3+|manual -
아뚫훓맇낄
2008.08.22 19:21
103번에 오류나는데 해결방법좀..ㅠㅠ|+rp2+|130|+rp3+|manual