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

Project1

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

[RMVX发布] 『FSL』天赋 技能树

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
416 小时
注册时间
2006-10-21
帖子
1245
跳转到指定楼层
发表于 2010-9-12 14:39:58 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式

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

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

x
本帖最后由 wangswz 于 2011-4-23 13:29 编辑

脏写的东西 不支持转职
发现BUG请短消息告知..

天赋计数的窗口仍在美工
预计下次更新使用WOW大灾变天赋专精系统
按X键(默认A键加点)

本脚本只是做出框架 具体技能效果请结合其他技能扩张脚本 被动技能脚本使用
技能的排版请在配置模块自行设置

请将该文件放于System中
范例下载 天赋模拟器.rar (1.01 MB, 下载次数: 10002)

  1. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  2. #_/    ◆ 简易天赋树脚本 - FSL_ST ◆ VX ◆
  3. #_/
  4. #_/    ◇ 许可协议 :FSL       ◇
  5. #_/    ◇ 项目分类 : 角色辅助  ◇
  6. #_/    ◇ 项目版本 : 1.8.0423   ◇
  7. #_/    ◇ 建立日期 : 2010/9/05 ◇
  8. #_/    ◇ 最后更新 : 2011/4/23 ◇
  9. #_/----------------------------------------------------------------------------
  10. #_/  作者:wangswz
  11. #_/============================================================================
  12. #_/ 【基本机能】复杂化游戏系统。
  13. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  14. #===============================================================================
  15. #-------------------------------------------------------------------------------
  16. # ▼ 通用配置模块
  17. #-------------------------------------------------------------------------------
  18. module FSL
  19.   module ST
  20.     #职业对应天赋树初始化
  21.     St_class_id = []
  22.     #详细设置
  23.     #    每个职业只能设置3个不同的天赋树
  24.     St_class_id[1] = [1,2,3]#包含St_detailed[1]St_detailed[2]St_detailed[3]
  25.     St_class_id[2] = [4,5,6]
  26.    
  27.     #等级天赋点
  28.     #每级增加的天赋点数
  29.     St_up = 1
  30.    
  31.     #深度等级基数 每下降一级深度就需要在该天赋树上多投入多少点
  32.     St_lv = 5
  33.    
  34.     #天赋树
  35.     St_detailed = []
  36.     #基本信息详细设置  默认0            不可出现重复
  37.     #st_detailed[1] = [基本点数, 天赋名,包含的天赋技能]
  38.     St_detailed[1] =  [       0,"神圣",1,2,3,4,5,6]
  39.     St_detailed[2] =  [       0,"统御",7,8,9,10,11,12]
  40.     St_detailed[3] =  [       0,"惩戒",13,14,15,16,17,18]
  41.     St_detailed[4] =  [       0,"武器",2,3,5]
  42.     St_detailed[5] =  [       0,"狂暴",1,3,5]
  43.     St_detailed[6] =  [       0,"防护",3,4,6]
  44.    
  45.     #将天赋树分为5×6格
  46.     # 0 1 2 3 4 5 列
  47.     #0
  48.     #1
  49.     #2
  50.     #3
  51.     #4
  52.     #5
  53.     #深
  54.    
  55.     St_skill = []
  56.     #天赋技能设置   进阶定义                            默认0
  57.     #st_skill[1] = [列,深度,技能id          ,前置技能ID,点数存储]
  58.    
  59.     #神圣
  60.     St_skill[1] =  [ 1,   0,[ 1, 2, 3, 4, 5],       [0],       0]#神圣智慧
  61.     St_skill[2] =  [ 1,   1,[ 6, 7, 8]      ,       [1],       0]#神恩
  62.     St_skill[3] =  [ 2,   2,[ 9, 10]        ,       [0],       0]#不灭信仰
  63.     St_skill[4] =  [ 4,   5,[11]            ,     [3,5],       0]#圣光道标
  64.     St_skill[5] =  [ 3,   0,[12,13,14,15,16],       [0],       0]#光之烙铁
  65.     St_skill[6] =  [ 2,   1,[17,18,19]      ,       [1],       0]#冥想
  66.     #统御
  67.     St_skill[7] =  [ 1,   0,[31,32,33,34,35],       [8],       0]
  68.     St_skill[8] =  [ 3,   0,[22,23,24,25,26],        [],       0]
  69.     St_skill[9] =  [ 2,   1,[36,37,38]      ,        [],       0]
  70.     St_skill[10] = [ 1,   2,[20,21]         ,        [],       0]
  71.     St_skill[11] = [ 2,   4,[30]            ,        [],       0]
  72.     St_skill[12] = [ 3,   5,[27,28,29]      ,        [],       0]
  73.     #惩戒
  74.     St_skill[13] = [ 3,   3,[57]            ,        [],       0]
  75.     St_skill[14] = [ 2,   0,[39,40,41,42,43],        [],       0]
  76.     St_skill[15] = [ 3,   1,[45,46,47,48,49],        [],       0]
  77.     St_skill[16] = [ 1,   1,[50,51,52]      ,        [],       0]
  78.     St_skill[17] = [ 2,   2,[53,54,55,56]   ,        [],       0]
  79.     St_skill[18] = [ 1,   3,[44]            ,        [],       0]
  80.    
  81. #-----------------------------进阶定义-----------------------------
  82.     #天赋树列数
  83.     St_Base_x = 5
  84.     #天赋树深度
  85.     St_Base_y = 6
  86.   end
  87. end
  88. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  89.     #角色存放值
  90.     #    为每个能够加入队伍的角色建立存储区
  91.     $St_actor = {} if $St_actor == nil
  92.     $St_actor[1] = [[],[],[]] if $St_actor[1] == nil
  93.     $St_actor[2] = [[],[],[]] if $St_actor[2] == nil
  94.     $St_actor[6] = [[],[],[]] if $St_actor[6] == nil
  95. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  96. $fscript = {} if $fscript == nil
  97.                 $fscript["FSL_ST"] = [ 1, 7, 912]
  98. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

  99. #==============================================================================
  100. # ■ Scene_Skill_Tree
  101. #------------------------------------------------------------------------------
  102. #  天赋技能类
  103. #==============================================================================

  104. class Scene_Skill_Tree < Scene_Base
  105.   #--------------------------------------------------------------------------
  106.   # ● 初始化对像
  107.   #     index : 天赋树
  108.   #--------------------------------------------------------------------------
  109.   def initialize(actor_index = 0)
  110.     @actor = actor_index
  111.   end
  112.   #--------------------------------------------------------------------------
  113.   # ● 开始处理
  114.   #--------------------------------------------------------------------------
  115.   def start
  116.     super
  117.     create_menu_background
  118.     start_command
  119.     @skill_tree_window = Window_Skill_Tree.new(272, 0, 272, 328, $game_party.members[@actor])
  120.     @skill_tree_window.active = false
  121.     @skill_tree_window.visible = false
  122.     @skill_tree_window.index = 2 #??
  123.     @base_window = Window_Base.new(272, 0, 272, 328)
  124.     @skill_status_window = Window_skill_status.new
  125.     @skill_status_window.visible = false
  126.     @base_window2 = Window_Base.new(0, 328, 544, 88)
  127.     @skill_actor_window = Window_actor_Tree.new($game_party.members[@actor])
  128.     @skill_actor_window.active = true
  129.     @skill_data = Window_skill_data.new($game_party.members[@actor].id)
  130.   end
  131.   #--------------------------------------------------------------------------
  132.   # ● 开始处理
  133.   #--------------------------------------------------------------------------
  134.   def start_command
  135.     s1 = FSL::ST::St_detailed[FSL::ST::St_class_id[$game_party.members[@actor].class_id][0]][1]
  136.     s2 = FSL::ST::St_detailed[FSL::ST::St_class_id[$game_party.members[@actor].class_id][1]][1]
  137.     s3 = FSL::ST::St_detailed[FSL::ST::St_class_id[$game_party.members[@actor].class_id][2]][1]
  138.     @command_window = Window_Command.new(272, [s1, s2, s3], 3)
  139.     @command_window.y = 88
  140.     @command_window.active = true
  141.   end
  142.   #--------------------------------------------------------------------------
  143.   # ● 结束处理
  144.   #--------------------------------------------------------------------------
  145.   def terminate
  146.     super
  147.     @skill_tree_window.dispose
  148.     @base_window.dispose
  149.     @base_window2.dispose
  150.     @skill_data.dispose
  151.     @skill_status_window.dispose
  152.     @skill_actor_window.dispose
  153.     @command_window.dispose
  154.   end
  155.   #--------------------------------------------------------------------------
  156.   # ● 更新画面
  157.   #--------------------------------------------------------------------------
  158.   def update
  159.     super
  160.     @skill_tree_window.update
  161.     @skill_actor_window.update
  162.     @skill_status_window.update
  163.     @base_window.update
  164.     @base_window2.update
  165.     @skill_data.update
  166.     @command_window.update
  167.    
  168.     if @skill_actor_window.active
  169.       if @skill_tree_window.visible == false
  170.         if Input.trigger?(Input::R)
  171.           Sound.play_cursor
  172.           @actor += 1
  173.           @actor %= $game_party.members.size
  174.           $scene = Scene_Skill_Tree.new(@actor)
  175.           @skill_tree_window.ST_actor_data($game_party.members[@actor].id)
  176.         elsif Input.trigger?(Input::L)
  177.           Sound.play_cursor
  178.           @actor += $game_party.members.size - 1
  179.           @actor %= $game_party.members.size
  180.           $scene = Scene_Skill_Tree.new(@actor)
  181.           @skill_tree_window.ST_actor_data($game_party.members[@actor].id)
  182.         end
  183.       end
  184.     end

  185.     if @command_window.active
  186.       update_command_selection
  187.     elsif @skill_tree_window.active
  188.       update_skill_tree_selection
  189.     end
  190.   end
  191.   #--------------------------------------------------------------------------
  192.   # ● 更新命令窗口
  193.   #--------------------------------------------------------------------------
  194.   def update_command_selection
  195.     if Input.trigger?(Input::B)
  196.       Sound.play_cancel
  197.       $scene = Scene_Map.new
  198.     elsif Input.trigger?(Input::C)
  199.       case @command_window.index
  200.       when 0  # 第一天赋
  201.         Sound.play_decision
  202.         @command_window.active = false
  203.         @base_window.visible = false
  204.         @base_window2.visible = false
  205.         @skill_actor_window.active = false
  206.         @skill_tree_window.active = true
  207.         @skill_tree_window.visible = true
  208.         @skill_tree_window.index = FSL::ST::St_class_id[$game_party.members[@actor].class_id][0]
  209.         @skill_tree_window.ST_actor_data($game_party.members[@actor].id)
  210.         @skill_status_window.visible = true
  211.         @skill_status_window.skill = @skill_tree_window.STK
  212.       when 1  # 第二天赋
  213.         Sound.play_decision
  214.         @command_window.active = false
  215.         @base_window.visible = false
  216.         @base_window2.visible = false
  217.         @skill_actor_window.active = false
  218.         @skill_tree_window.active = true
  219.         @skill_tree_window.visible = true
  220.         @skill_tree_window.index = FSL::ST::St_class_id[$game_party.members[@actor].class_id][1]
  221.         @skill_tree_window.ST_actor_data($game_party.members[@actor].id)
  222.         @skill_status_window.visible = true
  223.         @skill_status_window.skill = @skill_tree_window.STK
  224.       when 2  # 第三天赋
  225.         Sound.play_decision
  226.         @command_window.active = false
  227.         @base_window.visible = false
  228.         @base_window2.visible = false
  229.         @skill_actor_window.active = false
  230.         @skill_tree_window.active = true
  231.         @skill_tree_window.visible = true
  232.         @skill_tree_window.index = FSL::ST::St_class_id[$game_party.members[@actor].class_id][2]
  233.         @skill_tree_window.ST_actor_data($game_party.members[@actor].id)
  234.         @skill_status_window.visible = true
  235.         @skill_status_window.skill = @skill_tree_window.STK
  236.       end
  237.     end
  238.   end
  239.   #--------------------------------------------------------------------------
  240.   # ● 更新天赋窗口
  241.   #--------------------------------------------------------------------------
  242.   def update_skill_tree_selection
  243.     if Input.trigger?(Input::B)
  244.       Sound.play_cancel
  245.       @command_window.active = true
  246.       @base_window.visible = true
  247.       @base_window2.visible = true
  248.       @skill_actor_window.active = true
  249.       @skill_tree_window.active = false
  250.       @skill_tree_window.visible = false
  251.       @skill_status_window.visible = false
  252.       @skill_tree_window.ST_actor_data2
  253.     end

  254.       if Input.trigger?(Input::LEFT) || Input.trigger?(Input::RIGHT) || Input.trigger?(Input::UP) || Input.trigger?(Input::DOWN) || Input.trigger?(Input::X)
  255.         @skill_status_window.skill = @skill_tree_window.STK
  256.         @skill_tree_window.ST_actor_data3
  257.         @skill_data.refresh
  258.       end
  259.   end
  260. end
  261. #==============================================================================
  262. # ■ Window_Skill_Tree
  263. #------------------------------------------------------------------------------
  264. #  天赋技能
  265. #==============================================================================
  266. class Window_Skill_Tree < Window_Selectable
  267.   #--------------------------------------------------------------------------
  268.   # ● 初始化对像
  269.   #     x      : 窗口 X 座标
  270.   #     y      : 窗口 Y 座标
  271.   #--------------------------------------------------------------------------
  272.   def initialize(x, y, width, height, actortree)
  273.     @ST_id = actortree.id
  274.     @ST_index = FSL::ST::St_class_id[actortree.class_id][0]
  275.     super(x, y, width, height)
  276.     @ST_x_current = 0
  277.     @ST_y_current = 0
  278.     @ST_width = 48
  279.     @ST_height = 48
  280.     refresh
  281.   end
  282.   #--------------------------------------------------------------------------
  283.   # ● 刷新
  284.   #--------------------------------------------------------------------------
  285.   def refresh
  286.     self.contents.clear
  287.    
  288.     @ST_array = Array.new(FSL::ST::St_Base_x){Array.new(FSL::ST::St_Base_y,0)}
  289.     for i in 2...FSL::ST::St_detailed[@ST_index].size
  290.       x = FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][0]
  291.       y = FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][1]
  292.       @ST_array[x][y] = 1
  293.     end
  294.     for j in 0...FSL::ST::St_Base_y
  295.       for i in 0...FSL::ST::St_Base_x
  296.         if @ST_array[i][j] == 1
  297.           self.cursor_rect = Rect.new((i * @ST_width) - 12,(j * @ST_height) - 12, 48, 48)
  298.           p = 1
  299.           @ST_x_current = i
  300.           @ST_y_current = j
  301.           break
  302.         end
  303.       end
  304.       break if p == 1
  305.     end
  306.     for i in 2...FSL::ST::St_detailed[@ST_index].size
  307.       bx = FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][0]
  308.       by = FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][1]
  309.       x = FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][0] * @ST_width + 12
  310.       y = FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][1] * @ST_height + 12
  311.       if FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][4] == FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][2].size
  312.         m =  FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][2][FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][2].size - 1]
  313.       else
  314.         m =  FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][2][FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][4]]
  315.       end
  316.       n = FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][4]
  317.       l = FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][2].size
  318.       
  319.       
  320.       
  321.       t = true
  322.       #技能总深度是否达到
  323.       if statistics < FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][1] * FSL::ST::St_lv
  324.         t = false
  325.       end#技能总深度是否达到
  326.       
  327.         #技能前置是否满修
  328.         for h in 0...FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][3].size
  329.         if FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][3][h] > 0
  330.           ax = FSL::ST::St_skill[FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][3][h]][0]
  331.           ay = FSL::ST::St_skill[FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][3][h]][1]
  332.           x2 = ax * @ST_width + 12
  333.           y2 = ay * @ST_height + 12
  334.           if FSL::ST::St_skill[FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][3][h]][4] != FSL::ST::St_skill[FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][3][h]][2].size
  335.             t = false
  336.           end
  337.       
  338.           bitmap = Cache.load_bitmap("Graphics/System/", "xy")
  339.           if ay == by
  340.             if ax > bx
  341.               rect = Rect.new(48, 48, 48, 48)
  342.               self.contents.blt(x2 - 12, y2 - 12, bitmap, rect, t ? 255 : 128)
  343.               rect = Rect.new(48, 0, 48, 48)
  344.               self.contents.blt(x - 12, y - 12, bitmap, rect, t ? 255 : 128)
  345.               rect = Rect.new(192, 48, 48, 48)
  346.               for r in (bx + 1)...ax
  347.                 self.contents.blt(r * @ST_width, y2 - 12, bitmap, rect, t ? 255 : 128)
  348.               end
  349.             elsif bx > ax
  350.               rect = Rect.new(96, 48, 48, 48)
  351.               self.contents.blt(x2 - 12, y2 - 12, bitmap, rect, t ? 255 : 128)
  352.               rect = Rect.new(96, 0, 48, 48)
  353.               self.contents.blt(x - 12, y - 12, bitmap, rect, t ? 255 : 128)
  354.               rect = Rect.new(192, 48, 48, 48)
  355.               for r in (ax + 1)...bx
  356.                 self.contents.blt(r * @ST_width, y2 - 12, bitmap, rect, t ? 255 : 128)
  357.               end
  358.             end
  359.           elsif by > ay
  360.             if ax > bx
  361.               rect = Rect.new(48, 48, 48, 48)
  362.               self.contents.blt(x2 - 12, y2 - 12, bitmap, rect, t ? 255 : 128)
  363.               rect = Rect.new(144, 48, 48, 48)
  364.               self.contents.blt(x - 12, y2 - 12, bitmap, rect, t ? 255 : 128)
  365.               rect = Rect.new(192, 48, 48, 48)
  366.               for r in (bx + 1)...ax
  367.                 self.contents.blt(r * @ST_width, y2 - 12, bitmap, rect, t ? 255 : 128)
  368.               end
  369.             elsif bx > ax
  370.               rect = Rect.new(96, 48, 48, 48)
  371.               self.contents.blt(x2 - 12, y2 - 12, bitmap, rect, t ? 255 : 128)
  372.               rect = Rect.new(144, 0, 48, 48)
  373.               self.contents.blt(x - 12, y2 - 12, bitmap, rect, t ? 255 : 128)
  374.               rect = Rect.new(192, 48, 48, 48)
  375.               for r in (ax + 1)...bx
  376.                 self.contents.blt(r * @ST_width, y2 - 12, bitmap, rect, t ? 255 : 128)
  377.               end
  378.             else
  379.               rect = Rect.new(0, 48, 48, 48)
  380.               self.contents.blt(x2 - 12, y2 - 12, bitmap, rect, t ? 255 : 128)
  381.             end
  382.             rect = Rect.new(0, 0, 48, 48)
  383.             self.contents.blt(x - 12, y - 12, bitmap, rect, t ? 255 : 128)
  384.             rect = Rect.new(192, 0, 48, 48)
  385.             for r in (ay + 1)...by
  386.                 self.contents.blt(x - 12, r * @ST_height, bitmap, rect, t ? 255 : 128)
  387.             end
  388.           end
  389.         
  390.         end
  391.         end#技能前置是否满修
  392.       
  393.       draw_icon($data_skills[m].icon_index, x, y, t)
  394.       self.contents.font.color = normal_color
  395.       self.contents.draw_text(x - 8, y + 16, 48, WLH, n, 0)
  396.       self.contents.font.color = system_color
  397.       self.contents.draw_text(x - 12, y + 16, 44, WLH, l, 2)
  398.       self.contents.font.color = normal_color

  399.       
  400.     end
  401.   end
  402.   #--------------------------------------------------------------------------
  403.   # ● 统计
  404.   #--------------------------------------------------------------------------
  405.   def statistics
  406.       k = 0
  407.       for i in 2...FSL::ST::St_detailed[@ST_index].size
  408.         k += FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][4]
  409.       end
  410.       return k
  411.   end
  412.   #--------------------------------------------------------------------------
  413.   # ● 更新
  414.   #--------------------------------------------------------------------------
  415.   def update
  416.     super
  417.    
  418.     if self.active == true #窗口活动则判断输入
  419.    
  420.       if Input.trigger?(Input::LEFT)
  421.         Sound.play_cursor
  422.         loop do
  423.           if @ST_x_current == 0
  424.             @ST_x_current = (FSL::ST::St_Base_x - 1)
  425.           else
  426.             Sound.play_cursor
  427.             @ST_x_current -= 1
  428.           end
  429.           if @ST_array[@ST_x_current][@ST_y_current] == 1
  430.             break
  431.           end
  432.         end
  433.         update_cursor
  434.         return
  435.       end
  436.       
  437.       if Input.trigger?(Input::RIGHT)
  438.         Sound.play_cursor
  439.         loop do
  440.           if @ST_x_current == (FSL::ST::St_Base_x - 1)
  441.             @ST_x_current = 0
  442.           else
  443.             @ST_x_current += 1
  444.           end
  445.           if @ST_array[@ST_x_current][@ST_y_current] == 1
  446.             break
  447.           end
  448.         end
  449.         update_cursor
  450.         return
  451.       end
  452.       
  453.       if Input.trigger?(Input::UP)
  454.         Sound.play_cursor
  455.         i = @ST_x_current - 1
  456.         j = @ST_y_current
  457.         loop do
  458.           if i == -1
  459.             i = FSL::ST::St_Base_x - 1
  460.             j -= 1
  461.           end
  462.           j = FSL::ST::St_Base_y - 1 if j == -1
  463.           if @ST_array[i][j] == 1
  464.             @ST_x_current = i
  465.             @ST_y_current = j
  466.             break
  467.           end
  468.           i -= 1
  469.         end
  470.         update_cursor
  471.         return
  472.       end
  473.       
  474.       if Input.trigger?(Input::DOWN)
  475.         Sound.play_cursor
  476.         i = @ST_x_current + 1
  477.         j = @ST_y_current
  478.         loop do
  479.           if i == FSL::ST::St_Base_x
  480.             i = 0
  481.             j += 1
  482.           end
  483.           j = 0 if j == FSL::ST::St_Base_y
  484.           if @ST_array[i][j] == 1
  485.             @ST_x_current = i
  486.             @ST_y_current = j
  487.             break
  488.           end
  489.           i += 1
  490.         end
  491.         update_cursor
  492.         return
  493.       end
  494.       
  495.       if Input.trigger?(Input::X)
  496.         if @st_data == 0
  497.           Sound.play_buzzer
  498.         else
  499.         for i in 2...FSL::ST::St_detailed[@ST_index].size
  500.           xx = FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][0]
  501.           yy = FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][1]
  502.           t = true
  503.           #技能总深度是否达到
  504.           if statistics < FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][1] * FSL::ST::St_lv
  505.             t = false
  506.           end#技能总深度是否达到
  507.          
  508.           for h in 0...FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][3].size
  509.           if FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][3][h] > 0
  510.             if FSL::ST::St_skill[FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][3][h]][4] != FSL::ST::St_skill[FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][3][h]][2].size
  511.               t = false
  512.             end
  513.           end
  514.           end
  515.         
  516.           if @ST_x_current == xx && @ST_y_current == yy
  517.             if FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][4] == FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][2].size
  518.               Sound.play_buzzer
  519.             else
  520.               if t == true
  521.                 if FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][4] > 0
  522.                   $game_actors[@ST_id].forget_skill(FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][2][FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][4] - 1])
  523.                 end
  524.                 $game_actors[@ST_id].learn_skill(FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][2][FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][4]])
  525.                 FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][4] += 1
  526.                 @st_data -= 1
  527.                
  528.                 Sound.play_cursor
  529.               else
  530.                 Sound.play_buzzer
  531.               end
  532.             end
  533.           end
  534.         end
  535.         
  536.         self.contents.clear
  537.         for i in 2...FSL::ST::St_detailed[@ST_index].size
  538.           bx = FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][0]
  539.           by = FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][1]
  540.           x = FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][0] * @ST_width + 12
  541.           y = FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][1] * @ST_height + 12
  542.           if FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][4] == FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][2].size
  543.             m =  FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][2][FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][2].size - 1]
  544.           else
  545.             m =  FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][2][FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][4]]
  546.           end
  547.           n = FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][4]
  548.           l = FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][2].size
  549.         
  550.           t = true
  551.           #技能总深度是否达到
  552.           if statistics < FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][1] * FSL::ST::St_lv
  553.             t = false
  554.           end#技能总深度是否达到
  555.          
  556.           #技能前置是否满修
  557.           for h in 0...FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][3].size
  558.           if FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][3][h] > 0
  559.             ax = FSL::ST::St_skill[FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][3][h]][0]
  560.             ay = FSL::ST::St_skill[FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][3][h]][1]
  561.             x2 = ax * @ST_width + 12
  562.             y2 = ay * @ST_height + 12
  563.             if FSL::ST::St_skill[FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][3][h]][4] != FSL::ST::St_skill[FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][3][h]][2].size
  564.               t = false
  565.             end

  566.             bitmap = Cache.load_bitmap("Graphics/System/", "xy")
  567.             if ay == by
  568.               if ax > bx
  569.                 rect = Rect.new(48, 48, 48, 48)
  570.                 self.contents.blt(x2 - 12, y2 - 12, bitmap, rect, t ? 255 : 128)
  571.                 rect = Rect.new(48, 0, 48, 48)
  572.                 self.contents.blt(x - 12, y - 12, bitmap, rect, t ? 255 : 128)
  573.                 rect = Rect.new(192, 48, 48, 48)
  574.                 for r in (bx + 1)...ax
  575.                   self.contents.blt(r * @ST_width, y2 - 12, bitmap, rect, t ? 255 : 128)
  576.                 end
  577.               elsif bx > ax
  578.                 rect = Rect.new(96, 48, 48, 48)
  579.                 self.contents.blt(x2 - 12, y2 - 12, bitmap, rect, t ? 255 : 128)
  580.                 rect = Rect.new(96, 0, 48, 48)
  581.                 self.contents.blt(x - 12, y - 12, bitmap, rect, t ? 255 : 128)
  582.                 rect = Rect.new(192, 48, 48, 48)
  583.                 for r in (ax + 1)...bx
  584.                   self.contents.blt(r * @ST_width, y2 - 12, bitmap, rect, t ? 255 : 128)
  585.                 end
  586.               end
  587.             elsif by > ay
  588.               if ax > bx
  589.                 rect = Rect.new(48, 48, 48, 48)
  590.                 self.contents.blt(x2 - 12, y2 - 12, bitmap, rect, t ? 255 : 128)
  591.                 rect = Rect.new(144, 48, 48, 48)
  592.                 self.contents.blt(x - 12, y2 - 12, bitmap, rect, t ? 255 : 128)
  593.                 rect = Rect.new(192, 48, 48, 48)
  594.                 for r in (bx + 1)...ax
  595.                   self.contents.blt(r * @ST_width, y2 - 12, bitmap, rect, t ? 255 : 128)
  596.                 end
  597.               elsif bx > ax
  598.                 rect = Rect.new(96, 48, 48, 48)
  599.                 self.contents.blt(x2 - 12, y2 - 12, bitmap, rect, t ? 255 : 128)
  600.                 rect = Rect.new(144, 0, 48, 48)
  601.                 self.contents.blt(x - 12, y2 - 12, bitmap, rect, t ? 255 : 128)
  602.                 rect = Rect.new(192, 48, 48, 48)
  603.                 for r in (ax + 1)...bx
  604.                   self.contents.blt(r * @ST_width, y2 - 12, bitmap, rect, t ? 255 : 128)
  605.                 end
  606.               else
  607.                 rect = Rect.new(0, 48, 48, 48)
  608.                 self.contents.blt(x2 - 12, y2 - 12, bitmap, rect, t ? 255 : 128)
  609.               end
  610.               rect = Rect.new(0, 0, 48, 48)
  611.               self.contents.blt(x - 12, y - 12, bitmap, rect, t ? 255 : 128)
  612.               rect = Rect.new(192, 0, 48, 48)
  613.               for r in (ay + 1)...by
  614.                 self.contents.blt(x - 12, r * @ST_height, bitmap, rect, t ? 255 : 128)
  615.               end
  616.             end
  617.          
  618.           end
  619.           end#技能前置是否满修
  620.         
  621.           draw_icon($data_skills[m].icon_index, x, y, t)
  622.           self.contents.font.color = normal_color
  623.           self.contents.draw_text(x - 8, y + 16, 48, WLH, n, 0)
  624.           self.contents.font.color = system_color
  625.           self.contents.draw_text(x - 12, y + 16, 44, WLH, l, 2)
  626.           self.contents.font.color = normal_color
  627.         
  628.         end
  629.       end#@st_data
  630.       end#(Input::X)
  631.   
  632.     end #窗口活动则判断输入
  633.   end
  634.   #--------------------------------------------------------------------------
  635.   # ● 更新光标
  636.   #--------------------------------------------------------------------------
  637.   def update_cursor
  638.     if @ST_x_current < 0 || @ST_y_current < 0       # 当光标位置小于0
  639.       self.cursor_rect.empty                        # 隐藏光标
  640.     else
  641.       x = @ST_x_current * @ST_width
  642.       y = @ST_y_current * @ST_height
  643.       rect = Rect.new(x, y, 48 , 48)
  644.       self.cursor_rect = rect                       # 更新光标矩形
  645.     end
  646.   end
  647.   #--------------------------------------------------------------------------
  648.   # ● 设置天赋
  649.   #     index : 天赋
  650.   #--------------------------------------------------------------------------
  651.   def index=(index)
  652.     if @ST_index != index
  653.       @ST_index = index
  654.     end
  655.   end
  656.   #--------------------------------------------------------------------------
  657.   # ● 获取技能
  658.   #--------------------------------------------------------------------------
  659.   def STK
  660.     for i in 2...FSL::ST::St_detailed[@ST_index].size
  661.       x = FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][0]
  662.       y = FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][1]
  663.       if @ST_x_current == x && @ST_y_current == y
  664.         if FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][4] == FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][2].size
  665.           return FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][2][FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][2].size - 1]
  666.         else
  667.           return FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][2][FSL::ST::St_skill[FSL::ST::St_detailed[@ST_index][i]][4]]
  668.         end
  669.       end
  670.     end
  671.   end
  672.   #--------------------------------------------------------------------------
  673.   # ● 读取角色具体天赋数值
  674.   #--------------------------------------------------------------------------
  675.   def ST_actor_data(ac)
  676.     @st_actor_data = ac
  677.     @st_data = $game_actors[@st_actor_data].level * FSL::ST::St_up
  678.     for j in 0..2
  679.       m = 2
  680.       if $St_actor[@st_actor_data][j] != nil
  681.         s = FSL::ST::St_class_id[$game_actors[@st_actor_data].class_id][j]
  682.         for i in $St_actor[@st_actor_data][j]
  683.           @st_data -= i
  684.           FSL::ST::St_skill[FSL::ST::St_detailed[s][m]][4] = i
  685.           m += 1
  686.         end
  687.       end
  688.     end
  689.     refresh
  690.   end
  691.   #--------------------------------------------------------------------------
  692.   # ● 存储角色具体天赋数值
  693.   #--------------------------------------------------------------------------
  694.   def ST_actor_data2
  695.     for j in 0..2
  696.       $St_actor[@st_actor_data][j].clear
  697.       p = FSL::ST::St_class_id[$game_actors[@st_actor_data].class_id][j]
  698.       for i in 2...FSL::ST::St_detailed[p].size
  699.         $St_actor[@st_actor_data][j].push(FSL::ST::St_skill[FSL::ST::St_detailed[p][i]][4])
  700.         FSL::ST::St_skill[FSL::ST::St_detailed[p][i]][4] = 0
  701.       end
  702.     end
  703.   end
  704.   #--------------------------------------------------------------------------
  705.   # ● 更新角色具体天赋数值
  706.   #--------------------------------------------------------------------------
  707.   def ST_actor_data3
  708.     for j in 0..2
  709.       $St_actor[@st_actor_data][j].clear
  710.       p = FSL::ST::St_class_id[$game_actors[@st_actor_data].class_id][j]
  711.       for i in 2...FSL::ST::St_detailed[p].size
  712.         $St_actor[@st_actor_data][j].push(FSL::ST::St_skill[FSL::ST::St_detailed[p][i]][4])
  713.       end
  714.     end
  715.   end
  716. end
  717. #==============================================================================
  718. # ■ Window_actor_Tree
  719. #------------------------------------------------------------------------------
  720. #  天赋
  721. #==============================================================================

  722. class Window_actor_Tree < Window_Base
  723.   #--------------------------------------------------------------------------
  724.   # ● 初始化对像
  725.   #     actor : 角色
  726.   #--------------------------------------------------------------------------
  727.   def initialize(actor)
  728.     super(0, 0, 272, 88)
  729.     @actor = actor
  730.     refresh
  731.   end
  732.   #--------------------------------------------------------------------------
  733.   # ● 刷新
  734.   #--------------------------------------------------------------------------
  735.   def refresh
  736.     self.contents.clear
  737.     draw_actor_name(@actor, 0, 0)
  738.     draw_actor_class(@actor, 0, 32)
  739.     draw_STface(@actor.face_name, @actor.face_index, 128, 0)
  740.   end
  741.   #--------------------------------------------------------------------------
  742.   # ● 设置角色
  743.   #     actor : 角色
  744.   #--------------------------------------------------------------------------
  745.   def actor=(actor)
  746.     if @actor != actor
  747.       @actor = actor
  748.       refresh
  749.     end
  750.   end
  751.   #--------------------------------------------------------------------------
  752.   # ● 绘制头像部分图
  753.   #     face_name  : 头像文件名
  754.   #     face_index : 头像号码
  755.   #     x     : 描画目标 X 坐标
  756.   #     y     : 描画目标 Y 坐标
  757.   #     size       : 显示大小
  758.   #--------------------------------------------------------------------------
  759.   def draw_STface(face_name, face_index, x, y, size = 96)
  760.     bitmap = Cache.face(face_name)
  761.     rect = Rect.new(0, 0, 0, 0)
  762.     rect.x = face_index % 4 * 96 + (96 - size) / 2
  763.     rect.y = face_index / 4 * 96 + (96 - size) / 2 + 16
  764.     rect.width = size
  765.     rect.height = 64
  766.     self.contents.blt(x, y, bitmap, rect)
  767.     bitmap.dispose
  768.   end
  769. end
  770. #==============================================================================
  771. # ■ Window_skill_status
  772. #------------------------------------------------------------------------------
  773. #  技能
  774. #==============================================================================
  775. class Window_skill_status < Window_Base
  776.   #--------------------------------------------------------------------------
  777.   # ● 初始化对像
  778.   #--------------------------------------------------------------------------
  779.   def initialize(skill = -1)
  780.     super(0, 328, 544, 88)
  781.     @skill = skill
  782.     refresh
  783.   end
  784.   #--------------------------------------------------------------------------
  785.   # ● 刷新
  786.   #--------------------------------------------------------------------------
  787.   def refresh
  788.     if @skill != -1
  789.       self.contents.clear
  790.       self.contents.draw_text(24, 0, 544, WLH, $data_skills[@skill].name)
  791.       draw_icon($data_skills[@skill].icon_index, 0, 0)
  792.       self.contents.draw_text(0, 32, 544, WLH, $data_skills[@skill].description)
  793.     end
  794.   end
  795.   #--------------------------------------------------------------------------
  796.   # ● 设置技能
  797.   #--------------------------------------------------------------------------
  798.   def skill=(skill)
  799.     if @skill != skill
  800.       @skill = skill
  801.       refresh
  802.     end
  803.   end
  804. end
  805. #==============================================================================
  806. # ■ Window_skill_data
  807. #------------------------------------------------------------------------------
  808. #  数值
  809. #==============================================================================
  810. class Window_skill_data < Window_Base
  811.   #--------------------------------------------------------------------------
  812.   # ● 初始化对像
  813.   #     actor : 角色id
  814.   #--------------------------------------------------------------------------
  815.   def initialize(actor)
  816.     super(0, 144, 272, 184)
  817.     @actor = actor
  818.     refresh
  819.   end
  820.   #--------------------------------------------------------------------------
  821.   # ● 刷新
  822.   #--------------------------------------------------------------------------
  823.   def refresh
  824.     self.contents.clear
  825.     @st_data = $game_actors[@actor].level * FSL::ST::St_up
  826.     for i in 0..2
  827.       p = 0
  828.       if $St_actor[@actor][i] != nil
  829.         for j in $St_actor[@actor][i]
  830.           p += j
  831.         end
  832.       end
  833.       self.contents.draw_text(i * (272/3), 0, 272, WLH, p)
  834.       @st_data -= p
  835.     end
  836.     self.contents.draw_text(0, WLH, 272, WLH, @st_data)
  837.   end
  838. end
  839. #==============================================================================
  840. # ■ Scene_File
  841. #------------------------------------------------------------------------------
  842. #  存档画面及读档画面的类。
  843. #==============================================================================

  844. class Scene_File < Scene_Base
  845.   #--------------------------------------------------------------------------
  846.   # ● 写入存档数据
  847.   #     file : 写入存档对象(已开启)
  848.   #--------------------------------------------------------------------------
  849.   def write_save_data(file)
  850.     characters = []
  851.     for actor in $game_party.members
  852.       characters.push([actor.character_name, actor.character_index])
  853.     end
  854.     $game_system.save_count += 1
  855.     $game_system.version_id = $data_system.version_id
  856.     @last_bgm = RPG::BGM::last
  857.     @last_bgs = RPG::BGS::last
  858.     Marshal.dump(characters,           file)
  859.     Marshal.dump(Graphics.frame_count, file)
  860.     Marshal.dump(@last_bgm,            file)
  861.     Marshal.dump(@last_bgs,            file)
  862.     Marshal.dump($game_system,         file)
  863.     Marshal.dump($game_message,        file)
  864.     Marshal.dump($game_switches,       file)
  865.     Marshal.dump($game_variables,      file)
  866.     Marshal.dump($game_self_switches,  file)
  867.     Marshal.dump($game_actors,         file)
  868.     Marshal.dump($game_party,          file)
  869.     Marshal.dump($game_troop,          file)
  870.     Marshal.dump($game_map,            file)
  871.     Marshal.dump($game_player,         file)
  872.     Marshal.dump($St_actor,            file)
  873.   end
  874.   #--------------------------------------------------------------------------
  875.   # ● 读出存档数据
  876.   #     file : 读出存档对象(已开启)
  877.   #--------------------------------------------------------------------------
  878.   def read_save_data(file)
  879.     characters           = Marshal.load(file)
  880.     Graphics.frame_count = Marshal.load(file)
  881.     @last_bgm            = Marshal.load(file)
  882.     @last_bgs            = Marshal.load(file)
  883.     $game_system         = Marshal.load(file)
  884.     $game_message        = Marshal.load(file)
  885.     $game_switches       = Marshal.load(file)
  886.     $game_variables      = Marshal.load(file)
  887.     $game_self_switches  = Marshal.load(file)
  888.     $game_actors         = Marshal.load(file)
  889.     $game_party          = Marshal.load(file)
  890.     $game_troop          = Marshal.load(file)
  891.     $game_map            = Marshal.load(file)
  892.     $game_player         = Marshal.load(file)
  893.     $St_actor            = Marshal.load(file)
  894.     if $game_system.version_id != $data_system.version_id
  895.       $game_map.setup($game_map.map_id)
  896.       $game_player.center($game_player.x, $game_player.y)
  897.     end
  898.   end
  899. end
复制代码

点评

天赋深度到达时才能学习 不灭信仰是第3层就需要先投入15点天赋点(天赋深度系数为5时)  发表于 2011-4-23 13:33
有bug啊,画图的时候不会按照脚本写的来,比如 神圣 中 圣光道标(4) ,并不是3和5学习后学会的(3,5),不灭信仰 也不是 一开始(0)学会的。  发表于 2011-2-3 11:28

评分

参与人数 4星屑 +4 +4 收起 理由
574656549 + 2 我是伸手党,O(∩_∩)O哈哈~赞
shinliwei + 2 我也喜欢……
小幽的马甲 + 2
DeathKing + 2 鼓励长期更新、维护。并且收录。 ...

查看全部评分

Lv1.梦旅人

梦石
0
星屑
50
在线时间
16 小时
注册时间
2013-7-13
帖子
5
16
发表于 2013-7-18 21:43:22 | 只看该作者
好像很不错的样子
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
55 小时
注册时间
2012-6-26
帖子
5
15
发表于 2013-6-23 17:43:11 | 只看该作者
其实我有个问题                为毛按A加点后 退出再进    点就神奇地消失了?!
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
115
在线时间
1 小时
注册时间
2013-2-27
帖子
1
14
发表于 2013-3-16 21:16:15 | 只看该作者
哈哈,非常不错啊
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
6 小时
注册时间
2011-7-15
帖子
5
13
发表于 2011-8-9 22:55:40 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
375
在线时间
10 小时
注册时间
2011-6-26
帖子
3
12
发表于 2011-7-8 14:51:43 | 只看该作者
我囧!
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
116 小时
注册时间
2008-5-12
帖子
264
11
发表于 2010-12-6 16:58:21 | 只看该作者
本帖最后由 shinliwei 于 2010-12-10 13:43 编辑

(首先感谢下楼主。
接下来我要提问请教
如何切换人物,给队伍中的其他人物加点。)


抱歉 已解决
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
230
在线时间
0 小时
注册时间
2010-10-19
帖子
1
10
发表于 2010-10-19 22:14:21 | 只看该作者
顶你  下下来研究:lol
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
533 小时
注册时间
2007-2-2
帖子
859
9
发表于 2010-9-18 14:46:37 | 只看该作者
好东西
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
3 小时
注册时间
2010-7-28
帖子
307
8
发表于 2010-9-16 16:40:21 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1170
在线时间
1564 小时
注册时间
2008-7-30
帖子
4418

贵宾

7
发表于 2010-9-15 23:30:53 | 只看该作者
See DiabloII,存在最大值可能会造成干扰。
当技能等级达到最大值的时候可以考虑用新的颜色描绘Text?

点评

好主意!  发表于 2010-9-16 08:19

See FScript Here:https://github.com/DeathKing/fscript
潜心编写URG3中。
所有对URG3的疑问和勘误或者建议,请移步至发布页面。
欢迎萌妹纸催更
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-11 19:04

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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