| 赞 | 0 |
| VIP | |
| 好人卡 | |
| 积分 | 1 |
| 经验 | |
| 最后登录 | 2014-5-20 |
| 在线时间 | 92 小时 |
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 92 小时
- 注册时间
- 2013-2-23
- 回帖
- 127
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有账号?注册会员
×
本帖最后由 sh0016 于 2014-2-21 03:47 编辑
下面这脚本是一个非常简单的角色制作编辑脚本。差不多就是DQ9,世界树迷宫等RPG中的创造角色系统那样的感觉。
呼出脚本要用这段:
[pre lang="ruby" line="1"]$act_id = 0
$act_class = 0
$act_name = 0
$act_ini = 5
SceneManager.call(Scene_RecMenu)
Window_RecCommand::init_command_position
Fiber.yield[/pre]
[pre lang="ruby" line="1"]#==============================================================================
# NewClass: Window_RecCommand = 主指令表
#==============================================================================
class Window_RecCommand < Window_MenuCommand
#--------------------------------------------------------------------------
# 生成指令列表
#--------------------------------------------------------------------------
def make_command_list
add_main_commands
end
#--------------------------------------------------------------------------
# 添加指令
#--------------------------------------------------------------------------
def add_main_commands
add_command("种族", :type_imp)
add_command("形象", :face_imp)#, type_ok?)
add_command("职业", :class_imp)#, type_ok?)
add_command("名字", :name_imp)#, type_ok?)
add_command("完成", :ok_imp)#, all_ok?)
end
#--------------------------------------------------------------------------
# 获取指令的有效状态
#--------------------------------------------------------------------------
def type_ok?
return false if $act_id == 0
return true
end
#--------------------------------------------------------------------------
# 获取“完成”指令的有效状态
#--------------------------------------------------------------------------
def all_ok?
return false if $act_id == 0
return false if $act_class == 0
return false if $act_name == 0
return true
end
#--------------------------------------------------------------------------
# 按下取消键时的处理
#--------------------------------------------------------------------------
def process_cancel
$game_actors[6].setup(6)
$game_actors[7].setup(7)
#~ $game_actors[8].setup(8)
#~ $game_actors[9].setup(9)
Sound.play_cancel
Input.update
deactivate
call_cancel_handler
end
end
#==============================================================================
# ■ NewClass: Window_NewActor = 生成角色的状态
#==============================================================================
class Window_NewActor < Window_Base
#--------------------------------------------------------------------------
# 初始化对象
#--------------------------------------------------------------------------
def initialize
super(0, 0, window_width, fitting_height(10))
self.opacity = 0
@actor = nil
refresh
end
#--------------------------------------------------------------------------
# 获取窗口的宽度
#--------------------------------------------------------------------------
def window_width
return 160
end
#--------------------------------------------------------------------------
# 设置角色
#--------------------------------------------------------------------------
def actor=(actor)
return if @actor == actor
@actor = actor
refresh
end
#--------------------------------------------------------------------------
# 刷新
#--------------------------------------------------------------------------
def refresh
contents.clear
return unless @actor
draw_item
end
#--------------------------------------------------------------------------
# 绘制项目
#--------------------------------------------------------------------------
def draw_item
lh = line_height
dw = window_width-28
dh = fitting_height(10)
#--
colour = Color.new(0, 0, 0, translucent_alpha)
rect = Rect.new(0, 0, dw, dh)
contents.fill_rect(rect, colour)
#--
change_color(system_color)
draw_text(4, lh*5, dw, line_height, "Name")
draw_text(4, lh*6, dw, line_height, "Class")
change_color(normal_color)
draw_actor_face(@actor, (dw-96)/2, 12)
draw_actor_name(@actor, 4+dw/2, lh*5, dw)
draw_actor_class(@actor, 4+dw/2, lh*6, dw)
#--
text1 = ""
text2 = ""
text3 = ""
text4 = ""
case @actor.class_id
when 11
text1 = ""
when 12
text1 = ""
when 13
text1 = ""
end
#--
draw_text(12, lh*7, dw, lh*4, text1)
draw_text(12, lh*8, dw, lh*4, text2)
draw_text(12, lh*9, dw, lh*4, text3)
draw_text(12, lh*10, dw, lh*4, text4)
end
end
#==============================================================================
# ■ NewClass: Window_TypeCommand = 种族选项
#==============================================================================
class Window_TypeCommand < Window_MenuCommand
#--------------------------------------------------------------------------
# 生成指令列表
#--------------------------------------------------------------------------
def make_command_list
add_original_commands
end
#--------------------------------------------------------------------------
# 独自添加指令用
#--------------------------------------------------------------------------
def add_original_commands
add_command("人类/男", :male)
add_command("人类/女", :female)
#~ add_command("精灵", :spirit)
#~ add_command("魔物", :monster)
end
end
#==============================================================================
# ■ NewClass: Window_FaceCommand = 形象选项
#==============================================================================
class Window_FaceCommand < Window_MenuCommand
#--------------------------------------------------------------------------
# 生成指令列表
#--------------------------------------------------------------------------
def make_command_list
add_original_commands
end
#--------------------------------------------------------------------------
# 独自添加指令用
#--------------------------------------------------------------------------
def add_original_commands
add_command("形象1", :face1)
add_command("形象2", :face2)
add_command("形象3", :face3)
add_command("形象4", :face4)
add_command("形象5", :face5)
add_command("形象6", :face6)
add_command("形象7", :face7)
add_command("形象8", :face8)
end
end
#==============================================================================
# ■ NewClass: Window_ClassCommand = 职业选项
#==============================================================================
class Window_ClassCommand < Window_MenuCommand
#--------------------------------------------------------------------------
# 生成指令列表
#--------------------------------------------------------------------------
def make_command_list
add_original_commands
end
#--------------------------------------------------------------------------
# 独自添加指令用
#--------------------------------------------------------------------------
def add_original_commands
add_command("职业1", :class1)
add_command("职业2", :class2)
add_command("职业3", :class3)
add_command("职业4", :class4)
end
end
#==============================================================================
# ■ NewClass: Scene_RecMenu
#==============================================================================
class Scene_RecMenu < Scene_Menu
#--------------------------------------------------------------------------
# 开始处理
#--------------------------------------------------------------------------
def start
super
@actor = $game_actors[$act_ini]
create_new_window
create_type_command_window
create_face_command_window
create_class_command_window
@type_command_window.hide
@face_command_window.hide
@class_command_window.hide
@new_window.actor = @actor
@new_window.refresh
end
#--------------------------------------------------------------------------
# 生成指令窗口
#--------------------------------------------------------------------------
def create_command_window
@command_window = Window_RecCommand.new
@command_window.set_handler(:type_imp, method(:command_type_imp))
@command_window.set_handler(:face_imp, method(:command_face_imp))
@command_window.set_handler(:class_imp, method(:command_class_imp))
@command_window.set_handler(:name_imp, method(:command_name_imp))
@command_window.set_handler(:ok_imp, method(:command_ok_imp))
@command_window.set_handler(:cancel, method(:return_scene))
@command_window.x = Graphics.width/2 - 60
@command_window.y = (Graphics.height - @command_window.height) / 2
end
#--------------------------------------------------------------------------
# 生成状态窗口
#--------------------------------------------------------------------------
def create_new_window
@new_window = Window_NewActor.new
@new_window.actor = @actor
@new_window.x = 60
@new_window.y = (Graphics.height - @new_window.height) / 2
end
#--------------------------------------------------------------------------
# 生成选择窗口
#--------------------------------------------------------------------------
def create_type_command_window
@type_command_window = Window_TypeCommand.new
@type_command_window.x = @command_window.width + @command_window.x
@type_command_window.y = @command_window.y
end
#--------------------------------------------------------------------------
# 生成选择窗口
#--------------------------------------------------------------------------
def create_face_command_window
@face_command_window = Window_FaceCommand.new
@face_command_window.x = @command_window.width + @command_window.x
@face_command_window.y = @command_window.y
end
#--------------------------------------------------------------------------
# 生成选择窗口
#--------------------------------------------------------------------------
def create_class_command_window
@class_command_window = Window_ClassCommand.new
@class_command_window.x = @command_window.width + @command_window.x
@class_command_window.y = @command_window.y
end
#--------------------------------------------------------------------------
# 指令
#--------------------------------------------------------------------------
def command_type_imp
@type_command_window.show
@type_command_window.select(0)
@type_command_window.activate
@type_command_window.set_handler(:ok, method(:on_type_ok))
@type_command_window.set_handler(:cancel, method(:on_imp_cancel))
end
#--------------------------------------------------------------------------
# 指令
#--------------------------------------------------------------------------
def command_face_imp
@face_command_window.show
@face_command_window.select(0)
@face_command_window.activate
@face_command_window.set_handler(:ok, method(:on_face_ok))
@face_command_window.set_handler(:cancel, method(:on_imp_cancel))
end
#--------------------------------------------------------------------------
# 指令
#--------------------------------------------------------------------------
def command_class_imp
@class_command_window.show
@class_command_window.select(0)
@class_command_window.activate
@class_command_window.set_handler(:ok, method(:on_class_ok))
@class_command_window.set_handler(:cancel, method(:on_imp_cancel))
end
#--------------------------------------------------------------------------
# 指令
#--------------------------------------------------------------------------
def command_name_imp
$act_ini = @actor.actor_id
$act_name = 1
@command_window.refresh
SceneManager.call(Scene_Name)
SceneManager.scene.prepare(@actor.actor_id, 6)
end
#--------------------------------------------------------------------------
# 指令“确定”
#--------------------------------------------------------------------------
def on_type_ok
case @type_command_window.current_symbol
when :male
@actor = $game_actors[6]
when :female
@actor = $game_actors[7]
#~ when :spirit
#~ @actor = $game_actors[8]
#~ when :monster
#~ @actor = $game_actors[9]
end
$act_id = 1
@new_window.actor = @actor
@new_window.refresh
@type_command_window.unselect
@type_command_window.hide
@command_window.activate
@command_window.refresh
end
#--------------------------------------------------------------------------
# 指令“确定”
#--------------------------------------------------------------------------
def on_face_ok
#--
case @face_command_window.current_symbol
when :face1
f = 1
when :face2
f = 2
when :face3
f = 3
when :face4
f = 4
when :face5
f = 5
when :face6
f = 6
when :face7
f = 7
when :face8
f = 8
end
#--
f += @actor.actor_id * 10
case f
# 男性
when 61
n = "Actor4"
i = 4
when 62
n = "Actor4"
i = 0
when 63
n = "Actor4"
i = 2
when 64
n = "Actor4"
i = 6
when 65
n = "Actor5"
i = 0
when 66
n = "Actor5"
i = 2
when 67
n = "Actor5"
i = 4
when 68
n = "Actor5"
i = 6
# 女性
when 71
n = "Actor4"
i = 5
when 72
n = "Actor4"
i = 1
when 73
n = "Actor4"
i = 3
when 74
n = "Actor4"
i = 7
when 75
n = "Actor5"
i = 1
when 76
n = "Actor5"
i = 3
when 77
n = "Actor5"
i = 5
when 78
n = "Actor5"
i = 7
end
#--
#~ @actor = @new_window.actor
@new_window.actor = @actor
@actor.set_graphic(n, i, n, i)
@new_window.refresh
@face_command_window.unselect
@face_command_window.hide
@command_window.activate
end
#--------------------------------------------------------------------------
# 指令“确定”
#--------------------------------------------------------------------------
def on_class_ok
case @class_command_window.current_symbol
when :class1
c = 10
when :class2
c = 11
when :class3
c = 12
when :class4
c = 13
when :class5
c = 14
when :class6
c = 15
when :class7
c = 16
when :class8
c = 17
end
#~ c += 10 if @actor.actor_id == 7
@actor.change_class(c)
#--
$act_class = 1
@new_window.refresh
@class_command_window.unselect
@class_command_window.hide
@command_window.activate
@command_window.refresh
end
#--------------------------------------------------------------------------
# 指令“取消”
#--------------------------------------------------------------------------
def on_imp_cancel
@type_command_window.unselect
@type_command_window.hide
@face_command_window.unselect
@face_command_window.hide
@class_command_window.unselect
@class_command_window.hide
@command_window.activate
end
#--------------------------------------------------------------------------
# 输入指令
#--------------------------------------------------------------------------
def command_ok_imp
for i in 12...40
c = i
break if $game_switches != true
end
#--
$game_switches[c] = true
actor = $game_actors[c]
actor.set_graphic(@actor.character_name, @actor.character_index,
@actor.face_name, @actor.face_index)
actor.name = @actor.name
actor.change_class(@actor.class_id)
$game_party.add_actor(actor.actor_id) #if $game_party.members.size < 4
#--
$game_actors[6].setup(6)
$game_actors[7].setup(7)
#~ $game_actors[8].setup(8)
#~ $game_actors[9].setup(9)
return_scene
end
end
[/pre]
基本上是先拿几个当作基础模型的角色,通过选项改名字、头像与职业,再把这写数据写入到一个新的空白角色上,最后让这新角色入队,模型角色则会被初始化。效果大致如下(不包括背景):
脚本中(自己)是用6~9号角色当作基础模型,分别只有头像跟行走图显示,目前当作性别的选择处理用。会编辑这4位角色,然后再把编辑资料导入到新空白的角色上(先在数据库里放一个完全空白的ACTOR),空白的判断方式是ID相应的开关是否开启(开=非空白)。完成后会把4位模型角色初始化到原本状态,这样不会留下这次的编辑到下一次制作上。处理方式差不多就是这样。
选项有【种族】【形象】【职业】跟【名字】,最后是【完成】。
【种族】是用来换基础模型用的。
【形象】是选择头像跟行走图。
【职业】顾名思义就是职业。
【名字】会呼出Scene_Name(取名字画面)。
【完成】就是编辑完毕让新角色入队。
问题就是主菜单那里(RecCommand)如果没有选择第一个选项【种族】,其他选项就无法起效,完全不懂为什么。。。。
像这样其他选项可以打开选择窗口,但这些窗口中的选项无法确认,只能听到确认键的声效,毫无反应。。。。(可以cancel)
本来应该是更改选项(更新左边的窗口中的脸图或职业显示),然后关闭(隐藏)。。。。
只有先选择第一个选项的【种族】,然后回到主菜单里(无论是ok还是cancel),其他的选项就有正常反应了。。。。。
有试过用选项限制,只有先选择【种族】后才会开放下面的选项,差不多是这个样子:
这样要先选择【种族】才能继续编辑其他,可以回避这个问题。。。。但从取名字的Scene_Name回来之后,会让这问题重新跳出来。。。。
真心求解决办法m(_ _)m。
此外,还有个问题是没办法在Command里面用@actor,会变成nilclass,同样原因不明。。。。(←自己再试试好了
最后请允许我奢求select_last的用法与写法m(_ _)m
如果有哪里写的不清楚请喷出来。 |
|