赞 | 0 |
VIP | 0 |
好人卡 | 0 |
积分 | 1 |
经验 | 1475 |
最后登录 | 2015-9-19 |
在线时间 | 20 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 20 小时
- 注册时间
- 2015-5-21
- 帖子
- 9
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
→_→冲突的是两个脚本,一个本论坛的宠物脚本,原理是在资料库设定一个角色当原版,然后游戏内获得宠物的时候会以原版为基础复制出一个新人物并加在人物数据库的末尾。
通过备注pet id=1来找到对应的图片作为立绘。
另一个显示立绘的菜单脚本可以讲菜单处的头像直接变为半身立绘,原理是读取该角色在数据库中的位置,得到actor id来寻找对应图片。。。。。
于是乎问题来了。宠物获得之后是直接在最后一个位置新建一个角色,所以无法直接用actor id来指定立绘。
谁能帮忙将菜单脚本的actor id识别方式也改成pet id?
#==============================================================================
# ■ VXAce-RGSS3-42 メニュー画面-改2 [Ver.1.1.0] by Claimh
#------------------------------------------------------------------------------
# メニュー画面の表示を変更します
#------------------------------------------------------------------------------
# 立ち絵は Graphics/Pictures 以下の
# Actor{アクターID} を表示します(アクター1 : Actor1.png)
#------------------------------------------------------------------------------
# ●立ち絵の変更
# $game_actors[アクターID].m_picture = "ファイル名"
#==============================================================================
#==============================================================================
# ■ Window_Base
#==============================================================================
class Window_Base < Window
#--------------------------------------------------------------------------
# ● ステートおよび强化/弱体のアイコンを描画
#--------------------------------------------------------------------------
def draw_actor_icons_r(actor, x, y, width = 96)
icons = (actor.state_icons + actor.buff_icons)[0, width / 24]
x += width - 24 * icons.size
icons.each_with_index {|n, i| draw_icon(n, x + 24 * i, y) }
end
#--------------------------------------------------------------------------
# ● アクターの立ち絵描画
#--------------------------------------------------------------------------
def draw_actor_menu_picture(actor, x, y, width, height, enabled = true)
bitmap = Cache.picture(actor.m_picture)
xx = (bitmap.width > width) ? ((bitmap.width - width) / 2) : 0
ww = (bitmap.width > width) ? width : bitmap.width
yy = (bitmap.height > height) ? ((bitmap.height - height) / 2) : 0
hh = (bitmap.height > height) ? height : bitmap.height
rect = Rect.new(xx, yy, ww, hh)
xx = (bitmap.width < width) ? ((width - bitmap.width) / 2) : x
yy = (bitmap.height < height) ? ((height - bitmap.height) / 2) : y
contents.blt(xx, yy, bitmap, rect, enabled ? 255 : translucent_alpha)
bitmap.dispose
end
end
#==============================================================================
# ■ Game_Actor
#==============================================================================
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# ● 公开インスタンス変数
#--------------------------------------------------------------------------
attr_accessor :m_picture # menu立ち絵
#--------------------------------------------------------------------------
# ● セットアップ
#--------------------------------------------------------------------------
alias setup_menu_picture setup
def setup(actor_id)
setup_menu_picture(actor_id)
@m_picture = "Actor#{actor_id}"
end
end
#==============================================================================
# ■ Window_MenuCommand
#==============================================================================
class Window_MenuCommand < Window_Command
#--------------------------------------------------------------------------
# ● 桁数の取得
#--------------------------------------------------------------------------
def col_max
4
end
#--------------------------------------------------------------------------
# ● ウィンドウ幅の取得
#--------------------------------------------------------------------------
def window_width
Graphics.width
end
#--------------------------------------------------------------------------
# ● 表示行数の取得
#--------------------------------------------------------------------------
def visible_line_number
2 #item_max
end
end
#==============================================================================
# ■ Window_HorzMenuStatus
#==============================================================================
class Window_HorzMenuStatus < Window_HorzCommand
WIN = false # ウィンドウ表示あり
#--------------------------------------------------------------------------
# ● 公开インスタンス変数
#--------------------------------------------------------------------------
attr_reader :pending_index # 保留位置(并び替え用)
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize(x, y)
@pending_index = -1
@top_y = y
WIN ? super(x, y) : super(x-standard_padding, y-standard_padding)
self.opacity = 0 unless WIN
unselect
deactivate
end
#--------------------------------------------------------------------------
# ● 先头の桁の设定 ※Window_HorzCommandバグ回避
#--------------------------------------------------------------------------
def top_col=(col)
col = 0 if col < 0
col = (item_max / visible_line_number) - 1 if col > (item_max / visible_line_number) - 1
self.ox = col * (item_width + spacing)
end
#--------------------------------------------------------------------------
# ● 项目数の取得
#--------------------------------------------------------------------------
def item_max
$game_party.members.size
end
#--------------------------------------------------------------------------
# ● 桁数の取得
#--------------------------------------------------------------------------
def col_max
4
end
#--------------------------------------------------------------------------
# ● 表示行数の取得
#--------------------------------------------------------------------------
def visible_line_number
1
end
#--------------------------------------------------------------------------
# ● 横に项目が并ぶときの空白の幅を取得
#--------------------------------------------------------------------------
def spacing
return 0
end
#--------------------------------------------------------------------------
# ● ウィンドウ幅の取得
#--------------------------------------------------------------------------
def window_width
Graphics.width + (WIN ? 0 : standard_padding * 2)
end
#--------------------------------------------------------------------------
# ● ウィンドウ高さの取得
#--------------------------------------------------------------------------
def window_height
Graphics.height - @top_y - fitting_height(1) + (WIN ? 0 : standard_padding * 2)
end
#--------------------------------------------------------------------------
# ● 项目の高さを取得
#--------------------------------------------------------------------------
def item_height
height - standard_padding * 2
end
#--------------------------------------------------------------------------
# ● 选択项目の有効状态を取得
#--------------------------------------------------------------------------
def current_item_enabled?
true
end
#--------------------------------------------------------------------------
# ● 项目の描画
#--------------------------------------------------------------------------
def draw_item(index)
actor = $game_party.members[index]
enabled = $game_party.battle_members.include?(actor)
rect = item_rect_for_text(index)
draw_item_background(index)
draw_actor_status(actor, rect.x, rect.y, rect.width, rect.height-2)
end
#--------------------------------------------------------------------------
# ● 背景色の取得
#--------------------------------------------------------------------------
def back_color
Color.new(0, 0, 0)
end
#--------------------------------------------------------------------------
# ● ステータス背景描画
#--------------------------------------------------------------------------
def draw_status_back(rect)
b = Bitmap.new(rect.width, rect.height)
r = Rect.new(0, 0, rect.width, rect.height)
b.fill_rect(r, back_color)
contents.blt(rect.x, rect.y, b, r, 128)
b.dispose
end
#--------------------------------------------------------------------------
# ● アクターステータス描画
#--------------------------------------------------------------------------
def draw_actor_status(actor, x, y, width, height)
draw_actor_menu_picture(actor, x, y + line_height / 2, width, height - (y + line_height / 2))
draw_status_back(Rect.new(x, y + 4, width, line_height))
draw_actor_name( actor, x, y + 4, width)
draw_actor_icons_r(actor, x, y + 4 + line_height * 1, width)
y = height - line_height * 4 - 4
draw_status_back(Rect.new(x, y, width, line_height * 4 + 4))
draw_actor_class(actor, x, y + line_height * 0, width)
draw_actor_level(actor, x+width-60, y + line_height * 1)
draw_actor_hp( actor, x+4, y + line_height * 2, width - 8)
draw_actor_mp( actor, x+4, y + line_height * 3, width - 8)
end
#--------------------------------------------------------------------------
# ● 项目の背景を描画
#--------------------------------------------------------------------------
def draw_item_background(index)
if index == @pending_index
contents.fill_rect(item_rect(index), pending_color)
end
end
#--------------------------------------------------------------------------
# ● 决定ボタンが押されたときの処理
#--------------------------------------------------------------------------
def process_ok
super
$game_party.menu_actor = $game_party.members[index]
end
#--------------------------------------------------------------------------
# ● 前回の选択位置を复帰
#--------------------------------------------------------------------------
def select_last
select($game_party.menu_actor.index || 0)
end
#--------------------------------------------------------------------------
# ● 保留位置(并び替え用)の设定
#--------------------------------------------------------------------------
def pending_index=(index)
last_pending_index = @pending_index
@pending_index = index
redraw_item(@pending_index)
redraw_item(last_pending_index)
end
end
#==============================================================================
# ■ Window_MenuMap
#==============================================================================
class Window_MenuMap < Window_Base
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize(x, y)
super(x, y, Graphics.width - 160, fitting_height(1))
refresh
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
contents.clear
draw_text(4, 0, contents_width, line_height, $game_map.display_name)
end
end
class Sprite_MenuBack < Sprite
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize(viewport, x, y, h)
super(viewport)
self.x = x
self.y = y
self.bitmap = Bitmap.new(Graphics.width, h)
self.bitmap.fill_rect(0, 0, Graphics.width, h, Color.new(0,0,0,128))
end
end
#==============================================================================
# ■ Scene_Menu
#==============================================================================
class Scene_Menu < Scene_MenuBase
#--------------------------------------------------------------------------
# ● ゴールドウィンドウの作成
#--------------------------------------------------------------------------
def create_gold_window
@gold_window = Window_Gold.new
@gold_window.x = Graphics.width - @gold_window.width
@gold_window.y = Graphics.height - @gold_window.height
@map_window = Window_MenuMap.new(0, @gold_window.y)
end
#--------------------------------------------------------------------------
# ● ステータスウィンドウの作成
#--------------------------------------------------------------------------
def create_status_window
@status_window = Window_HorzMenuStatus.new(0, @command_window.height)
end
end
上面这个是修改窗口的脚本
下面这个是宠物脚本里面的一部分,虽然我没看懂,不过大概意思好像是actorid 向pet id 的一个转化。
# ● 宠物入队时
#--------------------------------------------------------------------------
alias tan_pet_pic_add_actor add_actor
def add_actor(actor_id)
tan_pet_pic_add_actor(actor_id)
tan_set_pet_pic($game_actors[actor_id].get_pet_id,2) if $game_actors[actor_id].is_pet?
end
end
class Game_Enemy < Game_Battler
def tan_pet_pic_game_enemy_init
n = enemy.note =~ /<pet = (\d+?)>/i ? $1.to_i : nil
$game_party.tan_set_pet_pic(n,1) if n
end |
|