设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1578|回复: 7
打印 上一主题 下一主题

[已经解决] 请问一下,有人能帮忙把这两个冲突的脚本修改一下么

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
20 小时
注册时间
2015-5-21
帖子
9
跳转到指定楼层
1
发表于 2015-6-17 18:47:55 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

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

Lv3.寻梦者

梦石
0
星屑
3298
在线时间
1120 小时
注册时间
2009-4-15
帖子
815
2
发表于 2015-6-18 12:13:23 | 只看该作者
你这个显示立绘的脚本所用图片是放在Graphics/Pictures
而我写的宠物系统脚本宠物立绘是放在Graphics\Menus\status下的,路径不一致,你首先要去改路径,在Graphics/Pictures下也要放相关立绘,其次再改脚本:
在你那个菜单立绘脚本里搜索:@m_picture = "Actor#{actor_id}",在这一句的下一行加上:@m_picture = "Pet_" + get_pet_id.to_s if is_pet?
以上,未测试

评分

参与人数 1梦石 +1 收起 理由
taroxd + 1 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
20 小时
注册时间
2015-5-21
帖子
9
3
 楼主| 发表于 2015-6-18 22:43:18 | 只看该作者
tan12345 发表于 2015-6-18 12:13
你这个显示立绘的脚本所用图片是放在Graphics/Pictures
而我写的宠物系统脚本宠物立绘是放在Graphics\Menus ...

感谢大神的售后服务,不过还是有一个问题,这么修改确实使立绘显示了,但是所有的立绘全都堆在最左边了

点评

我的改动并未涉及坐标变化,所以你看看是哪里的设置更改了坐标导致这个情况,或者你试试正常状态下的显示立绘脚本,立绘是显示在哪的  发表于 2015-6-19 09:09
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
20 小时
注册时间
2015-5-21
帖子
9
4
 楼主| 发表于 2015-6-19 12:49:15 | 只看该作者
tan12345 发表于 2015-6-18 12:13
你这个显示立绘的脚本所用图片是放在Graphics/Pictures
而我写的宠物系统脚本宠物立绘是放在Graphics\Menus ...

凡是以Acitor id识别的角色立绘可以正常显示,但是pet id识别的角色都会默认堆在第一个人物的格子里

点评

确定是你那个立绘显示脚本的问题了,你不用宠物入队什么的,只要你队伍人数大于1人(不管人物还是宠物)都会显示错误。  发表于 2015-6-19 15:24
测试了一下,你那个显示立绘的脚本有问题,你随便弄个事件,事件内容是人物入队,注意,是人物入队,不是宠物入队,然后看看效果吧  发表于 2015-6-19 15:15
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
20 小时
注册时间
2015-5-21
帖子
9
5
 楼主| 发表于 2015-6-19 16:54:39 | 只看该作者
本帖最后由 cyqhxcy 于 2015-6-19 17:02 编辑
tan12345 发表于 2015-6-18 12:13
你这个显示立绘的脚本所用图片是放在Graphics/Pictures
而我写的宠物系统脚本宠物立绘是放在Graphics\Menus ...


那个,我试过了,人物入队也可以的。只要提前把人物对应的ACTOR id的图片放进去就好了,这里是工程链接   链接: http://pan.baidu.com/s/1kTL4td9 密码: pwqm

QQ图片20150619165639.png (159.82 KB, 下载次数: 29)

QQ图片20150619165639.png

点评

你把图片换一下,把人物图片换成宠物图片,简单点说,不要使用我那张素材图片,把娜塔莉弄成人物,用娜塔莉的图片,娜塔莉人物入队  发表于 2015-6-19 23:12
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
20 小时
注册时间
2015-5-21
帖子
9
6
 楼主| 发表于 2015-6-20 00:10:50 | 只看该作者
tan12345 发表于 2015-6-18 12:13
你这个显示立绘的脚本所用图片是放在Graphics/Pictures
而我写的宠物系统脚本宠物立绘是放在Graphics\Menus ...

但是这样的话宠物系统就没用了啊,把宠物改成人物就没法实现无限复制一个宠物的效果了

点评

你试试4号人物用娜塔莉这张图片,然后4号人物入队,去菜单看看,就知道结果了  发表于 2015-6-20 10:29
2个脚本没有冲突,显示立绘那个脚本有问题,当人物立绘图片宽度过宽就会有BUG,而我的素材图片宽度没超标,你用的娜塔莉那些图片都是超标的  发表于 2015-6-20 10:28
你还是不理解我的意思,我的意思是,你给人物换张图片,不要用我的那张素材图片,比如你上传的那个工程,人物4用娜塔莉的图片试试  发表于 2015-6-20 10:27
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
20 小时
注册时间
2015-5-21
帖子
9
7
 楼主| 发表于 2015-6-20 00:35:49 | 只看该作者
本帖最后由 cyqhxcy 于 2015-6-20 00:55 编辑
tan12345 发表于 2015-6-18 12:13
你这个显示立绘的脚本所用图片是放在Graphics/Pictures
而我写的宠物系统脚本宠物立绘是放在Graphics\Menus ...


好吧,大概会用了,只能直接把宠物设计成Actor,然后配合初始化入队,可以实现无限洗属性。。。。。。。。。。
虽然不能无限建副本实在蛋疼,不过蛮强能用吧
感谢大大
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
20 小时
注册时间
2015-5-21
帖子
9
8
 楼主| 发表于 2015-6-20 17:15:14 | 只看该作者
tan12345 发表于 2015-6-18 12:13
你这个显示立绘的脚本所用图片是放在Graphics/Pictures
而我写的宠物系统脚本宠物立绘是放在Graphics\Menus ...

好了,我明白了,谢谢大神
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-16 09:55

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表