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

Project1

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

[已经解决] 技能命名

 关闭 [复制链接]
头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
1 小时
注册时间
2008-8-23
帖子
68
跳转到指定楼层
1
发表于 2009-8-3 23:57:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽

Lv1.梦旅人

梦石
0
星屑
60
在线时间
5 小时
注册时间
2007-7-19
帖子
159
2
发表于 2009-8-4 08:25:53 | 只看该作者
不错的想法,类似金庸群侠3那里主角领悟一个绝招后可以自己命名,我试了一下,成功了,脚本编辑器找到Scene_Name,在@actor = $game_actors[$game_temp.name_actor_id]这句话下面加上
@skill = $data_skills[i],这里的i就是你要改名的技能在数据库的编号,然后找到@actor.name = @edit_window.name,在下面加上@skill.name = @edit_window.name就解决了,接着在事件里选择名称输入处理,更改名字的角色为你不用的角色,但角色名一定要有字,不能为空,比如为???,输入完后再学习第i号特技,这里你会发现这个特技名就是你取的。
这里注意一下几点:
1.默认名称输入中全是日文,所以你要在Window_NameInput把他们换成中文
2.如果不想改角色名可以用开关处理比如Scene_Name里写成
if $game_switches[1] == true
@skill.name = @edit_window.name
else
@actor.name = @edit_window.name
end
就是说1号开关打开了,输入后就改技能名,否则,改角色名
3.如果你只想让玩家选你提供的几个名字,就不用改脚本了,直接在事件里使用显示选择项,在对应的选项下面加上脚本$data_skills[i].name = ""
i是技能的编号,“”里面的是对应的名字
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
1 小时
注册时间
2008-8-23
帖子
68
3
 楼主| 发表于 2009-8-4 15:29:54 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

B

梦石
0
星屑
50
在线时间
26 小时
注册时间
2007-8-26
帖子
3693
4
发表于 2009-8-4 18:46:50 | 只看该作者
class Scene_Name
  def initialize(skill_index)
    @skill_index = skill_index
  end
end

加以上脚本。

调用方法:
$scene = Scene_Name(技能ID)
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
1 小时
注册时间
2008-8-23
帖子
68
5
 楼主| 发表于 2009-8-4 19:37:40 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv3.寻梦者

小柯的徒弟

梦石
0
星屑
1535
在线时间
1157 小时
注册时间
2008-5-24
帖子
3085

贵宾

6
发表于 2009-8-5 02:16:20 | 只看该作者
本帖最后由 「旅」 于 2009-8-5 23:37 编辑

写出个不成形状的= =b
  1. class Game_Actor < Game_Battler
  2.   #——需要令名的技能
  3.   Need_NewName = [1,31]
  4.   #——我是分割线
  5.   
  6.   alias old_learn_skill learn_skill
  7.   def learn_skill(id2)
  8.     old_learn_skill(id2)
  9.     if Need_NewName.include?(id2)
  10.     $game_system.push_new_skill(id2)
  11.     $game_system.push_actor_id(@actor_id)
  12.     end
  13.   end
  14. end
  15. class Game_System
  16.   attr_reader   :new_skill
  17.   attr_reader   :actor_id
  18.   alias old_initialize initialize
  19.   def initialize
  20.     @new_skill = []
  21.     @skill_name = []
  22.     @actor_id = []
  23.     old_initialize
  24.   end
  25.   def delete_new_skill
  26.     @new_skill.delete_at(0)
  27.   end
  28.   def push_new_skill(id)
  29.     @new_skill.push(id)
  30.   end
  31.   def delete_actor_id
  32.     @actor_id.delete_at(0)
  33.   end
  34.   def push_actor_id(id)
  35.     @actor_id.push(id)
  36.   end
  37.   def skill_name(id)
  38.     return @skill_name[id]
  39.   end
  40.   def push_skill_name(id, value)
  41.     @skill_name[id] = value
  42.   end
  43.   
  44. end
  45. #==============================================================================
  46. # ■ Scene_Name
  47. #------------------------------------------------------------------------------
  48. #  处理名称输入画面的类。
  49. #==============================================================================
  50. class Scene_Name2
  51.   #--------------------------------------------------------------------------
  52.   # ● 主处理
  53.   #--------------------------------------------------------------------------
  54.   def main
  55.     @id = $game_system.new_skill[0]
  56.     # 获取角色
  57.     @actor = $game_actors[$game_system.actor_id[0]]
  58.     # 生成窗口
  59.     a = 8 #——长度限制
  60.     @edit_window = Window_NameEdit2.new(@actor, a,@id)
  61.     @input_window = Window_NameInput2.new
  62.     # 执行过渡
  63.     Graphics.transition
  64.     # 主循环
  65.     loop do
  66.       # 刷新游戏画面
  67.       Graphics.update
  68.       # 刷新输入信息
  69.       Input.update
  70.       # 刷新信息
  71.       update
  72.       # 如果画面切换就中断循环
  73.       if $scene != self
  74.         break
  75.       end
  76.     end
  77.     $game_system.delete_new_skill
  78.     $game_system.delete_actor_id
  79.     # 准备过渡
  80.     Graphics.freeze
  81.     # 释放窗口
  82.     @edit_window.dispose
  83.     @input_window.dispose
  84.   end
  85.   #--------------------------------------------------------------------------
  86.   # ● 刷新画面
  87.   #--------------------------------------------------------------------------
  88.   def update
  89.     # 刷新窗口
  90.     @edit_window.update
  91.     @input_window.update
  92.     # 按下 B 键的情况下
  93.     if Input.repeat?(Input::B)
  94.       # 光标位置为 0 的情况下
  95.       if @edit_window.index == 0
  96.         return
  97.       end
  98.       # 演奏取消 SE
  99.       $game_system.se_play($data_system.cancel_se)
  100.       # 删除文字
  101.       @edit_window.back
  102.       return
  103.     end
  104.     # 按下 C 键的情况下
  105.     if Input.trigger?(Input::C)
  106.       # 光标位置为 [确定] 的情况下
  107.       if @input_window.character == nil
  108.         # 名称为空的情况下
  109.         if @edit_window.name == ""
  110.           # 还原为默认名称
  111.           @edit_window.restore_default
  112.           # 名称为空的情况下
  113.           if @edit_window.name == ""
  114.             # 演奏冻结 SE
  115.             $game_system.se_play($data_system.buzzer_se)
  116.             return
  117.           end
  118.           # 演奏确定 SE
  119.           $game_system.se_play($data_system.decision_se)
  120.           return
  121.         end
  122.         # 更改角色名称
  123.         $game_system.push_skill_name(@id,@edit_window.name)
  124.         # 演奏确定 SE
  125.         $game_system.se_play($data_system.decision_se)
  126.         # 切换到地图画面
  127.         $scene = Scene_Map.new
  128.         return
  129.       end
  130.       # 光标位置为最大的情况下
  131.      # if @edit_window.index == $game_temp.name_max_char
  132.      #   # 演奏冻结 SE
  133.      #   $game_system.se_play($data_system.buzzer_se)
  134.      #   return
  135.      # end
  136.       # 文字为空的情况下
  137.       if @input_window.character == ""
  138.         # 演奏冻结 SE
  139.         $game_system.se_play($data_system.buzzer_se)
  140.         return
  141.       end
  142.       # 演奏确定 SE
  143.       $game_system.se_play($data_system.decision_se)
  144.       # 添加文字
  145.       @edit_window.add(@input_window.character)
  146.       return
  147.     end
  148.   end
  149. end

  150. class Window_NameEdit2 < Window_Base
  151.   #--------------------------------------------------------------------------
  152.   # ● 定义实例变量
  153.   #--------------------------------------------------------------------------
  154.   attr_reader   :name                     # 名称
  155.   attr_reader   :index                    # 光标位置
  156.   #--------------------------------------------------------------------------
  157.   # ● 初始化对像
  158.   #     actor    : 角色
  159.   #     max_char : 最大字数
  160.   #--------------------------------------------------------------------------
  161.   def initialize(actor, max_char,skill_id)
  162.     super(0, 0, 640, 160)
  163.     self.contents = Bitmap.new(width - 32, height - 32)
  164.     @actor = actor
  165.     @name = $data_skills[skill_id].name
  166.     @max_char = max_char
  167.     @skill_id = skill_id
  168.     # 控制名字在最大字数以内
  169.     name_array = @name.split(//)[0...@max_char]
  170.     @name = ""
  171.     for i in 0...name_array.size
  172.       @name += name_array[i]
  173.     end
  174.     @default_name = @name
  175.     @index = name_array.size
  176.     refresh
  177.     update_cursor_rect
  178.   end
  179.   #--------------------------------------------------------------------------
  180.   # ● 还原为默认的名称
  181.   #--------------------------------------------------------------------------
  182.   def restore_default
  183.     @name = @default_name
  184.     @index = @name.split(//).size
  185.     refresh
  186.     update_cursor_rect
  187.   end
  188.   #--------------------------------------------------------------------------
  189.   # ● 添加文字
  190.   #     character : 要添加的文字
  191.   #--------------------------------------------------------------------------
  192.   def add(character)
  193.     if @index < @max_char and character != ""
  194.       @name += character
  195.       @index += 1
  196.       refresh
  197.       update_cursor_rect
  198.     end
  199.   end
  200.   #--------------------------------------------------------------------------
  201.   # ● 删除文字
  202.   #--------------------------------------------------------------------------
  203.   def back
  204.     if @index > 0
  205.       # 删除一个字
  206.       name_array = @name.split(//)
  207.       @name = ""
  208.       for i in 0...name_array.size-1
  209.         @name += name_array[i]
  210.       end
  211.       @index -= 1
  212.       refresh
  213.       update_cursor_rect
  214.     end
  215.   end
  216.   #--------------------------------------------------------------------------
  217.   # ● 刷新
  218.   #--------------------------------------------------------------------------
  219.   def refresh
  220.     self.contents.clear
  221.     # 描绘名称
  222.     name_array = @name.split(//)
  223.     for i in 0...@max_char
  224.       c = name_array[i]
  225.       if c == nil
  226.         c = "_"
  227.       end
  228.       x = 320 - @max_char * 14 + i * 28
  229.       self.contents.draw_text(x, 32, 28, 32, c, 1)
  230.     end
  231.     self.contents.draw_text(32,90,500,32,"新技能:"+$data_skills[@skill_id].description)
  232.     # 描绘图形
  233.     draw_actor_graphic(@actor, 320 - @max_char * 14 - 40, 80)
  234.   end
  235.   #--------------------------------------------------------------------------
  236.   # ● 刷新光标矩形
  237.   #--------------------------------------------------------------------------
  238.   def update_cursor_rect
  239.     x = 320 - @max_char * 14 + @index * 28
  240.     self.cursor_rect.set(x, 32, 28, 32)
  241.   end
  242.   #--------------------------------------------------------------------------
  243.   # ● 刷新画面
  244.   #--------------------------------------------------------------------------
  245.   def update
  246.     super
  247.     update_cursor_rect
  248.   end
  249. end


  250. #==============================================================================
  251. # ■ Window_NameInput
  252. #------------------------------------------------------------------------------
  253. #  输入名称的画面、文字选择窗口。
  254. #==============================================================================
  255. class Window_NameInput2 < Window_Base
  256.   CHARACTER_TABLE =
  257.   [
  258.     "天","い","う","え","お",
  259.     "か","き","く","け","こ",
  260.     "さ","し","す","せ","そ",
  261.     "た","ち","つ","て","と",
  262.     "な","に","ぬ","ね","の",
  263.     "は","ひ","ふ","へ","ほ",
  264.     "ま","み","む","め","も",
  265.     "や", "" ,"ゆ", "" ,"よ",
  266.     "ら","り","る","れ","ろ",
  267.     "わ", "" ,"を", "" ,"ん",
  268.     "が","ぎ","ぐ","げ","ご",
  269.     "ざ","じ","ず","ぜ","ぞ",
  270.     "だ","ぢ","づ","で","ど",
  271.     "ば","び","ぶ","べ","ぼ",
  272.     "ぱ","ぴ","ぷ","ぺ","ぽ",
  273.     "ゃ","ゅ","ょ","っ","ゎ",
  274.     "ぁ","ぃ","ぅ","ぇ","ぉ",
  275.     "ー","・", "" , "" , "" ,
  276.     "ア","イ","ウ","エ","オ",
  277.     "カ","キ","ク","ケ","コ",
  278.     "サ","シ","ス","セ","ソ",
  279.     "タ","チ","ツ","テ","ト",
  280.     "ナ","ニ","ヌ","ネ","ノ",
  281.     "ハ","ヒ","フ","ヘ","ホ",
  282.     "マ","ミ","ム","メ","モ",
  283.     "ヤ", "" ,"ユ", "" ,"ヨ",
  284.     "ラ","リ","ル","レ","ロ",
  285.     "ワ", "" ,"ヲ", "" ,"ン",
  286.     "ガ","ギ","グ","ゲ","ゴ",
  287.     "ザ","ジ","ズ","ゼ","ゾ",
  288.     "ダ","ヂ","ヅ","デ","ド",
  289.     "バ","ビ","ブ","ベ","ボ",
  290.     "パ","ピ","プ","ペ","ポ",
  291.     "ャ","ュ","ョ","ッ","ヮ",
  292.     "ァ","ィ","ゥ","ェ","ォ",
  293.     "ー","・","ヴ", "" , "" ,
  294.   ]
  295.   #--------------------------------------------------------------------------
  296.   # ● 初始化对像
  297.   #--------------------------------------------------------------------------
  298.   def initialize
  299.     super(0, 160, 640, 320)
  300.     self.contents = Bitmap.new(width - 32, height - 32)
  301.     @index = 0
  302.     refresh
  303.     update_cursor_rect
  304.   end
  305.   #--------------------------------------------------------------------------
  306.   # ● 获取文字
  307.   #--------------------------------------------------------------------------
  308.   def character
  309.     return CHARACTER_TABLE[@index]
  310.   end
  311.   #--------------------------------------------------------------------------
  312.   # ● 刷新
  313.   #--------------------------------------------------------------------------
  314.   def refresh
  315.     self.contents.clear
  316.     for i in 0..179
  317.       x = 4 + i / 5 / 9 * 152 + i % 5 * 24
  318.       y = i / 5 % 9 * 28
  319.       self.contents.draw_text(x, y, 28, 32, CHARACTER_TABLE[i], 1)
  320.     end
  321.     self.contents.draw_text(544, 8 * 32, 64, 32, "确定", 1)
  322.   end
  323.   #--------------------------------------------------------------------------
  324.   # ● 刷新光标矩形
  325.   #--------------------------------------------------------------------------
  326.   def update_cursor_rect
  327.     # 光标位置在 [确定] 的情况下
  328.     if @index >= 180
  329.       self.cursor_rect.set(544, 8 * 32, 64, 32)
  330.     # 光标位置在 [确定] 以外的情况下
  331.     else
  332.       x = 4 + @index / 5 / 9 * 152 + @index % 5 * 24
  333.       y = @index / 5 % 9 * 28
  334.       self.cursor_rect.set(x, y, 28, 32)
  335.     end
  336.   end
  337.   #--------------------------------------------------------------------------
  338.   # ● 刷新画面
  339.   #--------------------------------------------------------------------------
  340.   def update
  341.     super
  342.     # 光标位置在 [确定] 的情况下
  343.     if @index >= 180
  344.       # 光标下
  345.       if Input.trigger?(Input::DOWN)
  346.         $game_system.se_play($data_system.cursor_se)
  347.         @index -= 180
  348.       end
  349.       # 光标上
  350.       if Input.repeat?(Input::UP)
  351.         $game_system.se_play($data_system.cursor_se)
  352.         @index -= 180 - 40
  353.       end
  354.     # 光标位置在 [确定] 以外的情况下
  355.     else
  356.       # 按下方向键右的情况下
  357.       if Input.repeat?(Input::RIGHT)
  358.         # 按下状态不是重复的情况下、
  359.         # 光标位置不在右端的情况下
  360.         if Input.trigger?(Input::RIGHT) or
  361.            @index / 45 < 3 or @index % 5 < 4
  362.           # 光标向右移动
  363.           $game_system.se_play($data_system.cursor_se)
  364.           if @index % 5 < 4
  365.             @index += 1
  366.           else
  367.             @index += 45 - 4
  368.           end
  369.           if @index >= 180
  370.             @index -= 180
  371.           end
  372.         end
  373.       end
  374.       # 按下方向键左的情况下
  375.       if Input.repeat?(Input::LEFT)
  376.         # 按下状态不是重复的情况下、
  377.         # 光标位置不在左端的情况下
  378.         if Input.trigger?(Input::LEFT) or
  379.            @index / 45 > 0 or @index % 5 > 0
  380.           # 光标向右移动
  381.           $game_system.se_play($data_system.cursor_se)
  382.           if @index % 5 > 0
  383.             @index -= 1
  384.           else
  385.             @index -= 45 - 4
  386.           end
  387.           if @index < 0
  388.             @index += 180
  389.           end
  390.         end
  391.       end
  392.       # 按下方向键下的情况下
  393.       if Input.repeat?(Input::DOWN)
  394.         # 光标向下移动
  395.         $game_system.se_play($data_system.cursor_se)
  396.         if @index % 45 < 40
  397.           @index += 5
  398.         else
  399.           @index += 180 - 40
  400.         end
  401.       end
  402.       # 按下方向键上的情况下
  403.       if Input.repeat?(Input::UP)
  404.         # 按下状态不是重复的情况下、
  405.         # 光标位置不在上端的情况下
  406.         if Input.trigger?(Input::UP) or @index % 45 >= 5
  407.           # 光标向上移动
  408.           $game_system.se_play($data_system.cursor_se)
  409.           if @index % 45 >= 5
  410.             @index -= 5
  411.           else
  412.             @index += 180
  413.           end
  414.         end
  415.       end
  416.       # L 键与 R 键被按下的情况下
  417.       if Input.repeat?(Input::L) or Input.repeat?(Input::R)
  418.         # 平假名 / 片假名 之间移动
  419.         $game_system.se_play($data_system.cursor_se)
  420.         if @index / 45 < 2
  421.           @index += 90
  422.         else
  423.           @index -= 90
  424.         end
  425.       end
  426.     end
  427.     update_cursor_rect
  428.   end
  429. end

  430. module RPG
  431.   class Skill
  432.     def name
  433.       if $game_system.skill_name(@id) != nil
  434.         return $game_system.skill_name(@id)
  435.       else
  436.         return @name
  437.       end
  438.     end
  439.   end
  440. end
复制代码
脚本Scene_Map的49行下方,加上
$scene = Scene_Name2.new if $game_system.new_skill != []
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
1 小时
注册时间
2008-8-23
帖子
68
7
 楼主| 发表于 2009-8-5 02:48:28 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
5 小时
注册时间
2007-7-19
帖子
159
8
发表于 2009-8-5 08:55:51 | 只看该作者
那个啥,你就不晓得用个变量,多加几个分歧吗?一个游戏不可能所有技能都自己命名,我只觉得自创绝招之类自己命名有必要
回复 支持 反对

使用道具 举报

Lv3.寻梦者

小柯的徒弟

梦石
0
星屑
1535
在线时间
1157 小时
注册时间
2008-5-24
帖子
3085

贵宾

9
发表于 2009-8-5 13:36:10 | 只看该作者
LS的脚本..改完名子退出会发生错误.......把名字退完重新改改不了...第一次改完后确定..名字会回到原名...
错误..一堆-_-!!!
无心来过 发表于 2009-8-5 02:48

我囧了……你试一下放入默认工程,没出错的话请把你的工程发上来。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

孤独守望

梦石
0
星屑
3137
在线时间
1535 小时
注册时间
2006-10-16
帖子
4321

开拓者贵宾

10
发表于 2009-8-5 13:39:56 | 只看该作者
本帖最后由 IamI 于 2009-8-5 13:42 编辑
我囧了……你试一下放入默认工程,没出错的话请把你的工程发上来。
「旅」 发表于 2009-8-5 13:36

尽量用一些alias避免冲突吧= =这年代多的是脚本冲突少的是避免冲突
PS:旅最近好活跃= =另外那个800*630不要用白底用XP snap to bitmap试试看
菩提本非树,明镜本非台。回头自望路漫漫。不求姻缘,但求再见。
本来无一物,何处惹尘埃。风打浪吹雨不来。荒庭遍野,扶摇难接。
不知道多久更新一次的博客
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-27 03:54

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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