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

Project1

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

[已经解决] 【脚本问题】角色制作编辑脚本出了点问题,求解

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
92 小时
注册时间
2013-2-23
帖子
130
跳转到指定楼层
1
发表于 2014-2-19 04:48:25 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 sh0016 于 2014-2-21 03:47 编辑

下面这脚本是一个非常简单的角色制作编辑脚本。差不多就是DQ9,世界树迷宫等RPG中的创造角色系统那样的感觉。

呼出脚本要用这段:
RUBY 代码复制
  1. $act_id = 0
  2. $act_class = 0
  3. $act_name = 0
  4. $act_ini = 5
  5. SceneManager.call(Scene_RecMenu)
  6. Window_RecCommand::init_command_position
  7. Fiber.yield


RUBY 代码复制
  1. #==============================================================================
  2. # NewClass: Window_RecCommand = 主指令表
  3. #==============================================================================
  4.  
  5. class Window_RecCommand < Window_MenuCommand
  6.   #--------------------------------------------------------------------------
  7.   # 生成指令列表
  8.   #--------------------------------------------------------------------------
  9.   def make_command_list
  10.     add_main_commands
  11.   end
  12.   #--------------------------------------------------------------------------
  13.   # 添加指令
  14.   #--------------------------------------------------------------------------
  15.   def add_main_commands
  16.     add_command("种族",  :type_imp)
  17.     add_command("形象",  :face_imp)#, type_ok?)
  18.     add_command("职业", :class_imp)#, type_ok?)
  19.     add_command("名字",  :name_imp)#, type_ok?)
  20.     add_command("完成",    :ok_imp)#,  all_ok?)
  21.   end
  22.   #--------------------------------------------------------------------------
  23.   # 获取指令的有效状态
  24.   #--------------------------------------------------------------------------
  25.   def type_ok?
  26.     return false if $act_id == 0
  27.     return true
  28.   end
  29.   #--------------------------------------------------------------------------
  30.   # 获取“完成”指令的有效状态
  31.   #--------------------------------------------------------------------------
  32.   def all_ok?
  33.     return false if $act_id == 0
  34.     return false if $act_class == 0
  35.     return false if $act_name == 0
  36.     return true
  37.   end
  38.   #--------------------------------------------------------------------------
  39.   # 按下取消键时的处理
  40.   #--------------------------------------------------------------------------
  41.   def process_cancel
  42.     $game_actors[6].setup(6)
  43.     $game_actors[7].setup(7)
  44. #~     $game_actors[8].setup(8)
  45. #~     $game_actors[9].setup(9)
  46.     Sound.play_cancel
  47.     Input.update
  48.     deactivate
  49.     call_cancel_handler
  50.   end
  51. end
  52.  
  53. #==============================================================================
  54. # ■ NewClass: Window_NewActor = 生成角色的状态
  55. #==============================================================================
  56.  
  57. class Window_NewActor < Window_Base
  58.   #--------------------------------------------------------------------------
  59.   # 初始化对象
  60.   #--------------------------------------------------------------------------
  61.   def initialize
  62.     super(0, 0, window_width, fitting_height(10))
  63.     self.opacity = 0
  64.     [url=home.php?mod=space&uid=95897]@actor[/url] = nil
  65.     refresh
  66.   end
  67.   #--------------------------------------------------------------------------
  68.   # 获取窗口的宽度
  69.   #--------------------------------------------------------------------------
  70.   def window_width
  71.     return 160
  72.   end
  73.   #--------------------------------------------------------------------------
  74.   # 设置角色
  75.   #--------------------------------------------------------------------------
  76.   def actor=(actor)
  77.     return if [url=home.php?mod=space&uid=95897]@actor[/url] == actor
  78.     [url=home.php?mod=space&uid=95897]@actor[/url] = actor
  79.     refresh
  80.   end
  81.   #--------------------------------------------------------------------------
  82.   # 刷新
  83.   #--------------------------------------------------------------------------
  84.   def refresh
  85.     contents.clear
  86.     return unless @actor
  87.     draw_item
  88.   end
  89.   #--------------------------------------------------------------------------
  90.   # 绘制项目
  91.   #--------------------------------------------------------------------------
  92.   def draw_item
  93.     lh = line_height
  94.     dw = window_width-28
  95.     dh = fitting_height(10)
  96.     #--
  97.     colour = Color.new(0, 0, 0, translucent_alpha)
  98.     rect = Rect.new(0, 0, dw, dh)
  99.     contents.fill_rect(rect, colour)
  100.     #--
  101.     change_color(system_color)
  102.     draw_text(4, lh*5, dw, line_height, "Name")
  103.     draw_text(4, lh*6, dw, line_height, "Class")
  104.     change_color(normal_color)
  105.     draw_actor_face(@actor, (dw-96)/2, 12)
  106.     draw_actor_name(@actor, 4+dw/2, lh*5, dw)
  107.     draw_actor_class(@actor, 4+dw/2, lh*6, dw)
  108.     #--
  109.     text1 = ""
  110.     text2 = ""
  111.     text3 = ""
  112.     text4 = ""
  113.     case @actor.class_id
  114.       when 11
  115.         text1 = ""
  116.       when 12
  117.         text1 = ""
  118.       when 13
  119.         text1 = ""
  120.     end
  121.     #--
  122.     draw_text(12, lh*7, dw, lh*4, text1)
  123.     draw_text(12, lh*8, dw, lh*4, text2)
  124.     draw_text(12, lh*9, dw, lh*4, text3)
  125.     draw_text(12, lh*10, dw, lh*4, text4)
  126.   end
  127. end
  128.  
  129. #==============================================================================
  130. # ■ NewClass: Window_TypeCommand = 种族选项
  131. #==============================================================================
  132.  
  133. class Window_TypeCommand < Window_MenuCommand
  134.   #--------------------------------------------------------------------------
  135.   # 生成指令列表
  136.   #--------------------------------------------------------------------------
  137.   def make_command_list
  138.     add_original_commands
  139.   end
  140.   #--------------------------------------------------------------------------
  141.   # 独自添加指令用
  142.   #--------------------------------------------------------------------------
  143.   def add_original_commands
  144.     add_command("人类/男",   :male)
  145.     add_command("人类/女", :female)
  146. #~     add_command("精灵",    :spirit)
  147. #~     add_command("魔物",   :monster)
  148.   end
  149. end
  150.  
  151. #==============================================================================
  152. # ■ NewClass: Window_FaceCommand = 形象选项
  153. #==============================================================================
  154.  
  155. class Window_FaceCommand < Window_MenuCommand
  156.   #--------------------------------------------------------------------------
  157.   # 生成指令列表
  158.   #--------------------------------------------------------------------------
  159.   def make_command_list
  160.     add_original_commands
  161.   end
  162.   #--------------------------------------------------------------------------
  163.   # 独自添加指令用
  164.   #--------------------------------------------------------------------------
  165.   def add_original_commands
  166.     add_command("形象1",  :face1)
  167.     add_command("形象2",  :face2)
  168.     add_command("形象3",  :face3)
  169.     add_command("形象4",  :face4)
  170.     add_command("形象5",  :face5)
  171.     add_command("形象6",  :face6)
  172.     add_command("形象7",  :face7)
  173.     add_command("形象8",  :face8)
  174.   end
  175. end
  176.  
  177. #==============================================================================
  178. # ■ NewClass: Window_ClassCommand = 职业选项
  179. #==============================================================================
  180.  
  181. class Window_ClassCommand < Window_MenuCommand
  182.   #--------------------------------------------------------------------------
  183.   # 生成指令列表
  184.   #--------------------------------------------------------------------------
  185.   def make_command_list
  186.     add_original_commands
  187.   end
  188.   #--------------------------------------------------------------------------
  189.   # 独自添加指令用
  190.   #--------------------------------------------------------------------------
  191.   def add_original_commands
  192.     add_command("职业1",  :class1)
  193.     add_command("职业2",  :class2)
  194.     add_command("职业3",  :class3)
  195.     add_command("职业4",  :class4)
  196.   end
  197. end
  198.  
  199. #==============================================================================
  200. # ■ NewClass: Scene_RecMenu
  201. #==============================================================================
  202.  
  203. class Scene_RecMenu < Scene_Menu
  204.   #--------------------------------------------------------------------------
  205.   # 开始处理
  206.   #--------------------------------------------------------------------------
  207.   def start
  208.     super
  209.     [url=home.php?mod=space&uid=95897]@actor[/url] = $game_actors[$act_ini]
  210.     create_new_window
  211.     create_type_command_window
  212.     create_face_command_window
  213.     create_class_command_window
  214.     @type_command_window.hide
  215.     @face_command_window.hide
  216.     @class_command_window.hide
  217.     @new_window.actor = @actor
  218.     @new_window.refresh
  219.   end
  220.   #--------------------------------------------------------------------------
  221.   # 生成指令窗口
  222.   #--------------------------------------------------------------------------
  223.   def create_command_window
  224.     @command_window = Window_RecCommand.new
  225.     @command_window.set_handler(:type_imp,   method(:command_type_imp))
  226.     @command_window.set_handler(:face_imp,   method(:command_face_imp))
  227.     @command_window.set_handler(:class_imp,  method(:command_class_imp))
  228.     @command_window.set_handler(:name_imp,   method(:command_name_imp))
  229.     @command_window.set_handler(:ok_imp,     method(:command_ok_imp))
  230.     @command_window.set_handler(:cancel,     method(:return_scene))
  231.     @command_window.x = Graphics.width/2 - 60
  232.     @command_window.y = (Graphics.height - @command_window.height) / 2
  233.   end
  234.   #--------------------------------------------------------------------------
  235.   # 生成状态窗口
  236.   #--------------------------------------------------------------------------
  237.   def create_new_window
  238.     @new_window = Window_NewActor.new
  239.     @new_window.actor = @actor
  240.     @new_window.x = 60
  241.     @new_window.y = (Graphics.height - @new_window.height) / 2
  242.   end
  243.   #--------------------------------------------------------------------------
  244.   # 生成选择窗口
  245.   #--------------------------------------------------------------------------
  246.   def create_type_command_window
  247.     @type_command_window = Window_TypeCommand.new
  248.     @type_command_window.x = @command_window.width + @command_window.x
  249.     @type_command_window.y = @command_window.y
  250.   end
  251.   #--------------------------------------------------------------------------
  252.   # 生成选择窗口
  253.   #--------------------------------------------------------------------------
  254.   def create_face_command_window
  255.     @face_command_window = Window_FaceCommand.new
  256.     @face_command_window.x = @command_window.width + @command_window.x
  257.     @face_command_window.y = @command_window.y
  258.   end
  259.   #--------------------------------------------------------------------------
  260.   # 生成选择窗口
  261.   #--------------------------------------------------------------------------
  262.   def create_class_command_window
  263.     @class_command_window = Window_ClassCommand.new
  264.     @class_command_window.x = @command_window.width + @command_window.x
  265.     @class_command_window.y = @command_window.y
  266.   end
  267.   #--------------------------------------------------------------------------
  268.   # 指令
  269.   #--------------------------------------------------------------------------
  270.   def command_type_imp
  271.     @type_command_window.show
  272.     @type_command_window.select(0)
  273.     @type_command_window.activate
  274.     @type_command_window.set_handler(:ok,     method(:on_type_ok))
  275.     @type_command_window.set_handler(:cancel, method(:on_imp_cancel))
  276.   end
  277.   #--------------------------------------------------------------------------
  278.   # 指令
  279.   #--------------------------------------------------------------------------
  280.   def command_face_imp
  281.     @face_command_window.show
  282.     @face_command_window.select(0)
  283.     @face_command_window.activate
  284.     @face_command_window.set_handler(:ok,     method(:on_face_ok))
  285.     @face_command_window.set_handler(:cancel, method(:on_imp_cancel))
  286.   end
  287.   #--------------------------------------------------------------------------
  288.   # 指令
  289.   #--------------------------------------------------------------------------
  290.   def command_class_imp
  291.     @class_command_window.show
  292.     @class_command_window.select(0)
  293.     @class_command_window.activate
  294.     @class_command_window.set_handler(:ok,     method(:on_class_ok))
  295.     @class_command_window.set_handler(:cancel, method(:on_imp_cancel))
  296.   end
  297.   #--------------------------------------------------------------------------
  298.   # 指令
  299.   #--------------------------------------------------------------------------
  300.   def command_name_imp
  301.     $act_ini = @actor.actor_id
  302.     $act_name = 1
  303.     @command_window.refresh
  304.     SceneManager.call(Scene_Name)
  305.     SceneManager.scene.prepare(@actor.actor_id, 6)
  306.   end
  307.   #--------------------------------------------------------------------------
  308.   # 指令“确定”
  309.   #--------------------------------------------------------------------------
  310.   def on_type_ok
  311.     case @type_command_window.current_symbol
  312.       when :male
  313.         [url=home.php?mod=space&uid=95897]@actor[/url] = $game_actors[6]
  314.       when :female
  315.         @actor = $game_actors[7]
  316. #~       when :spirit
  317. #~         @actor = $game_actors[8]
  318. #~       when :monster
  319. #~         @actor = $game_actors[9]
  320.     end
  321.     $act_id = 1
  322.     @new_window.actor = @actor
  323.     @new_window.refresh
  324.     @type_command_window.unselect
  325.     @type_command_window.hide
  326.     @command_window.activate
  327.     @command_window.refresh
  328.   end
  329.   #--------------------------------------------------------------------------
  330.   # 指令“确定”
  331.   #--------------------------------------------------------------------------
  332.   def on_face_ok
  333.     #--
  334.     case @face_command_window.current_symbol
  335.       when :face1
  336.         f = 1
  337.       when :face2
  338.         f = 2
  339.       when :face3
  340.         f = 3
  341.       when :face4
  342.       f = 4
  343.       when :face5
  344.         f = 5
  345.       when :face6
  346.         f = 6
  347.       when :face7
  348.         f = 7
  349.       when :face8
  350.         f = 8
  351.     end
  352.     #--
  353.     f += @actor.actor_id * 10
  354.     case f
  355.     # 男性
  356.       when 61
  357.         n = "Actor4"
  358.         i = 4
  359.       when 62
  360.         n = "Actor4"
  361.         i = 0
  362.       when 63
  363.         n = "Actor4"
  364.         i = 2
  365.       when 64
  366.         n = "Actor4"
  367.         i = 6
  368.       when 65
  369.         n = "Actor5"
  370.         i = 0
  371.       when 66
  372.         n = "Actor5"
  373.         i = 2
  374.       when 67
  375.         n = "Actor5"
  376.         i = 4
  377.       when 68
  378.         n = "Actor5"
  379.         i = 6
  380.       # 女性
  381.       when 71
  382.         n = "Actor4"
  383.         i = 5
  384.       when 72
  385.         n = "Actor4"
  386.         i = 1
  387.       when 73
  388.         n = "Actor4"
  389.         i = 3
  390.       when 74
  391.         n = "Actor4"
  392.         i = 7
  393.       when 75
  394.         n = "Actor5"
  395.         i = 1
  396.       when 76
  397.         n = "Actor5"
  398.         i = 3
  399.       when 77
  400.         n = "Actor5"
  401.         i = 5
  402.       when 78
  403.         n = "Actor5"
  404.         i = 7
  405.     end
  406.     #--
  407. #~     @actor = @new_window.actor
  408.     @new_window.actor = @actor
  409.     @actor.set_graphic(n, i, n, i)
  410.     @new_window.refresh
  411.     @face_command_window.unselect
  412.     @face_command_window.hide
  413.     @command_window.activate
  414.   end
  415.   #--------------------------------------------------------------------------
  416.   # 指令“确定”
  417.   #--------------------------------------------------------------------------
  418.   def on_class_ok
  419.     case @class_command_window.current_symbol
  420.       when :class1
  421.         c = 10
  422.       when :class2
  423.         c = 11
  424.       when :class3
  425.         c = 12
  426.       when :class4
  427.         c = 13
  428.       when :class5
  429.         c = 14
  430.       when :class6
  431.         c = 15
  432.       when :class7
  433.         c = 16
  434.       when :class8
  435.         c = 17
  436.     end
  437. #~     c += 10 if @actor.actor_id == 7
  438.     @actor.change_class(c)
  439.     #--
  440.     $act_class = 1
  441.     @new_window.refresh
  442.     @class_command_window.unselect
  443.     @class_command_window.hide
  444.     @command_window.activate
  445.     @command_window.refresh
  446.   end
  447.   #--------------------------------------------------------------------------
  448.   # 指令“取消”
  449.   #--------------------------------------------------------------------------
  450.   def on_imp_cancel
  451.     @type_command_window.unselect
  452.     @type_command_window.hide
  453.     @face_command_window.unselect
  454.     @face_command_window.hide
  455.     @class_command_window.unselect
  456.     @class_command_window.hide
  457.     @command_window.activate
  458.   end
  459.   #--------------------------------------------------------------------------
  460.   # 输入指令
  461.   #--------------------------------------------------------------------------
  462.   def command_ok_imp
  463.     for i in 12...40
  464.       c = i
  465.       break if $game_switches[i] != true
  466.     end
  467.     #--
  468.     $game_switches[c] = true
  469.     actor = $game_actors[c]
  470.     actor.set_graphic(@actor.character_name, @actor.character_index,
  471.       @actor.face_name, @actor.face_index)
  472.     actor.name = @actor.name
  473.     actor.change_class(@actor.class_id)
  474.     $game_party.add_actor(actor.actor_id) #if $game_party.members.size < 4
  475.     #--
  476.     $game_actors[6].setup(6)
  477.     $game_actors[7].setup(7)
  478. #~     $game_actors[8].setup(8)
  479. #~     $game_actors[9].setup(9)
  480.     return_scene
  481.   end
  482. end


基本上是先拿几个当作基础模型的角色,通过选项改名字、头像与职业,再把这写数据写入到一个新的空白角色上,最后让这新角色入队,模型角色则会被初始化。效果大致如下(不包括背景):


脚本中(自己)是用6~9号角色当作基础模型,分别只有头像跟行走图显示,目前当作性别的选择处理用。会编辑这4位角色,然后再把编辑资料导入到新空白的角色上(先在数据库里放一个完全空白的ACTOR),空白的判断方式是ID相应的开关是否开启(开=非空白)。完成后会把4位模型角色初始化到原本状态,这样不会留下这次的编辑到下一次制作上。处理方式差不多就是这样。

选项有【种族】【形象】【职业】跟【名字】,最后是【完成】。

【种族】是用来换基础模型用的。
【形象】是选择头像跟行走图。
【职业】顾名思义就是职业。
【名字】会呼出Scene_Name(取名字画面)。
【完成】就是编辑完毕让新角色入队。

问题就是主菜单那里(RecCommand)如果没有选择第一个选项【种族】,其他选项就无法起效,完全不懂为什么。。。。

像这样其他选项可以打开选择窗口,但这些窗口中的选项无法确认,只能听到确认键的声效,毫无反应。。。。(可以cancel)
本来应该是更改选项(更新左边的窗口中的脸图或职业显示),然后关闭(隐藏)。。。。

只有先选择第一个选项的【种族】,然后回到主菜单里(无论是ok还是cancel),其他的选项就有正常反应了。。。。。
有试过用选项限制,只有先选择【种族】后才会开放下面的选项,差不多是这个样子:
这样要先选择【种族】才能继续编辑其他,可以回避这个问题。。。。但从取名字的Scene_Name回来之后,会让这问题重新跳出来。。。。

真心求解决办法m(_ _)m。

此外,还有个问题是没办法在Command里面用@actor,会变成nilclass,同样原因不明。。。。(←自己再试试好了
最后请允许我奢求select_last的用法与写法m(_ _)m  


如果有哪里写的不清楚请喷出来。   

点评

用事件做不就得了,而且简单!  发表于 2014-2-19 21:37
梦想是成为触手的新手DE☆SU(<ゝω·)绮罗星 ~☆

Lv1.梦旅人

梦石
0
星屑
50
在线时间
92 小时
注册时间
2013-2-23
帖子
130
2
 楼主| 发表于 2014-2-19 21:47:39 | 只看该作者
@345912390  用事件很不美观,而且各种内部处理比较麻烦(←全力作死中
梦想是成为触手的新手DE☆SU(<ゝω·)绮罗星 ~☆
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3258
在线时间
1120 小时
注册时间
2009-4-15
帖子
815
3
发表于 2014-2-19 22:06:06 | 只看该作者
第一个问题没看明白,所以不说话
第二个问题,你想在Command里用@actor可以,在Scene里初始化Command的时候将Scene的@actor传递给Command就可以了啊

点评

也是。。。。去重写下  发表于 2014-2-19 22:22
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
465
在线时间
915 小时
注册时间
2011-5-11
帖子
438
4
发表于 2014-2-20 11:32:34 | 只看该作者
其实你可以把【种族】做成一个卡片式的List。选择某一项后就可以下一步【形象】》》【职业】》》【名字】》》【完成】。
这就像普通的“傻瓜式”程序安装一样,下一步>>下一步>>下一步>>直到完成不就得了!
这样做可以做到【种族】【形象】【职业】都可以做成卡片式的List,这样玩家可以清楚的明白每个页面每个选项是不是自己所需要的!
如果只是你上图那样的话,还不如用事件做,简单!

点评

1)卡片式选项可以做参考 2)已经说过了内部处理很麻烦,如果你粗略看下应该就你明白我指什么了。 3)这是脚本练习,用事件有意义?  发表于 2014-2-20 22:00
http://rpg.blue/static/image/smiley/yct/A059.gif中国字认识都不到一半,哪的心情学英语呀!
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
92 小时
注册时间
2013-2-23
帖子
130
5
 楼主| 发表于 2014-2-21 03:46:46 | 只看该作者
此问题以解决,感谢大家的回复(→ →)
梦想是成为触手的新手DE☆SU(<ゝω·)绮罗星 ~☆
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-6-26 21:41

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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