Project1

标题: VA的转生系统 [打印本页]

作者: 300英雄    时间: 2017-8-9 10:43
标题: VA的转生系统
本人知道XP有一个转生系统,想问问有没有VA版本的转生系统。
作者: j296196585    时间: 2017-8-9 20:09
本帖最后由 j296196585 于 2017-8-9 20:15 编辑

转生系统VA版
转生设定
状态画面+菜单主界面
转生界面WINDOW
转生界面SCENE
转生核心







#===========================================
RUBY 代码复制
  1. LX_LEVEL = 50       #达到转生要求的最低等级。
  2. #------------------------------------------------------------------------------
  3. LX_VARIABLE = 200   #储存各角色转生次数的起始变量。比如:设置为 200 ,那么1号角
  4. #                    色转生次数储存在 201 号变量,2号角色储存在 202 号变量,,,
  5. #------------------------------------------------------------------------------
  6. LX_N = 10           #转生前,角色的各属性除以设定的这个值,再乘以转生次数,加入
  7. #                    到转生后的属性中。这个设定的值越高,加入转生后的属性就越
  8. #                    少,反之就越多。
  9. #------------------------------------------------------------------------------
  10. LX_DX = false        #转生次数限制,限制写 true       不限制写  false
  11. #------------------------------------------------------------------------------
  12. LX_DX_N = 5         #转生最高次数限制,上面的限制设置写 true  该项才有效。
  13. #------------------------------------------------------------------------------
  14. LX_CLASS = false      #转生后是否改变角色职业,是 写入 true    否 写入 false
  15. #------------------------------------------------------------------------------
  16. LX_CLASS_ID = 1      #转生后,角色的职业ID。上面是否改变职业设置写 true
  17. #                     该设置才有效。
  18. #                     比如转生后,全部转为 1 号职业,从“新手”做起。
  19. #------------------------------------------------------------------------------
  20. LX_EVENT_ID = 1      #转生成功后激活的公共事件ID。公共事件里可设置一些转生成功后
  21. #                    播放动画,以及一些提示等。
  22. #------------------------------------------------------------------------------
  23. #~ LEVEL_UP = false     #推荐配合使用升级加点系统。如果工程里有升级加点系统
  24. #                    请写 true    没有则写 false
  25. #==============================================================================
  26. ##转生后角色各属性增加度设置:
  27. #------------------------------------------------------------------------------
  28. #(角色每升一级增加的属性 = 数据库设置的基本值 + 下面设置的增加度 乘以 转生次数)
  29. #(比如设置HP为 10  ,转生 0 次 角色每升一级,角色的HP多增加 0 点;
  30. #  转生 1 次 多增加 10 点;转生 2 次 多增加 20 点,,,,;以此类推。)
  31. #------------------------------------------------------------------------------
  32. LX_EXP = 2           # EXP曲线基础值和增加度。(一般设为 1 — 10)
  33. #------------------------------------------------------------------------------
  34. LX_HP = 10           # HP
  35. #------------------------------------------------------------------------------
  36. LX_SP = 8            # MP
  37. #------------------------------------------------------------------------------
  38. LX_STATE = 1         # 六项基础能力
===================================
# ★ 【角色转生系统】★
#------------------------------------------------------------------------------
# ☆  原作者 by 芯☆淡茹水  
# ☆  VA版移植 by 魔法丶小肉包
#==============================================================================
#◆ 使用方法:
#        复制该脚本,插入到 Main 前。
#        召唤转生系统的方法:事件 → 脚本  写入  SceneManager.call(Scene_Lx)
#===============================================================================
#◆ 说明:
#        和一些网游的转生类似。角色随着转生次数的增加,各种属性(hp,sp,力量,
#      灵巧,,,等)的初始值会越来越高,而每升一级增加的属性也会越来越多。
#      (注意:数据库各角色的初始等级都设置为 1 级。)
#
#       由于手动设置的项目较多,在使用前,请先仔细阅读并设置下面的设置项。
#
#===============================================================================
#VA版说明补充:
#1.适用于加点系统的LEVEL_UP功能取消(懒...)当然需要的话可以加上去
作者: j296196585    时间: 2017-8-9 20:11
RUBY 代码复制
  1. class Window_Base < Window
  2.   def draw_actor_xdrs_lx(actor, x, y)
  3.     self.contents.font.color = text_color(3)
  4.     draw_text(x + 4, y, 120, 32, "轮回次数:")
  5.     i =  actor.id + LX_VARIABLE
  6.     self.contents.font.color = text_color(6)
  7.     draw_text(x + 126, y, 80, 32, $game_variables[i].to_s)
  8.   end
  9. end
  10. class Window_MenuStatus < Window_Selectable
  11.   def draw_item(index)
  12.     actor = $game_party.members[index]
  13.     enabled = $game_party.battle_members.include?(actor)
  14.     rect = item_rect(index)
  15.     draw_item_background(index)
  16.     draw_actor_face(actor, rect.x + 1, rect.y + 1, enabled)
  17.     draw_actor_simple_status(actor, rect.x + 108, rect.y + line_height / 2)
  18.     draw_actor_xdrs_lx(actor, rect.x + 98, rect.y+60)
  19.   end
  20. end
  21. class Window_Status < Window_Selectable
  22.   def draw_block1(y)
  23.     draw_actor_name(@actor, 4, y)
  24.     draw_actor_class(@actor, 128, y)
  25.     draw_actor_nickname(@actor, 268, y)
  26.     draw_actor_xdrs_lx(@actor, 380, y)
  27.   end
  28. end
  29. #encoding:utf-8
  30. #==============================================================================
  31. # ■ Window_Help1
  32. #------------------------------------------------------------------------------
  33. #  显示特技和物品等的说明、以及角色状态的窗口
  34. #==============================================================================
  35.  
  36. class Window_Help1 < Window_Base
  37.   #--------------------------------------------------------------------------
  38.   # ● 初始化对象
  39.   #--------------------------------------------------------------------------
  40.   def initialize(line_number = 2)
  41.     super(0, 0, Graphics.width, fitting_height(line_number))
  42.   end
  43.   #--------------------------------------------------------------------------
  44.   # ● 设置内容
  45.   #--------------------------------------------------------------------------
  46.   def set_text(text)
  47.     if text != @text
  48.       @text = text
  49.       refresh
  50.     end
  51.   end
  52.   #--------------------------------------------------------------------------
  53.   # ● 清除
  54.   #--------------------------------------------------------------------------
  55.   def clear
  56.     set_text("")
  57.   end
  58.   #--------------------------------------------------------------------------
  59.   # ● 设置物品
  60.   #     item : 技能、物品等
  61.   #--------------------------------------------------------------------------
  62.   def set_item(item)
  63.     set_text(item ? item.description : "")
  64.   end
  65.   #--------------------------------------------------------------------------
  66.   # ● 刷新
  67.   #--------------------------------------------------------------------------
  68.   def refresh
  69.     contents.clear
  70.     draw_text_ex(4, 0, @text)
  71.   end
  72. end

作者: j296196585    时间: 2017-8-9 20:12
RUBY 代码复制
  1. class Window_LxStatus < Window_Base
  2.   attr_reader   :selected
  3.   def initialize(height, i)
  4.     super(0, i * height, Graphics.width, height)
  5.     @index = i
  6.     refresh
  7.     @selected = false
  8.   end
  9.   def refresh
  10.     contents.clear
  11.     change_color(normal_color)
  12.     actor = $game_party.members[@index]
  13.     draw_actor_xdrs_lx(actor, x + 130, 56)
  14.       draw_actor_graphic(actor, x + 35, 80)
  15.       draw_actor_name(actor, x, 0)
  16.       draw_actor_class(actor, x + 134, 28)
  17.       draw_actor_level(actor, x + 134, 0)
  18.       draw_actor_hp(actor, x + 300, 0 )
  19.       draw_actor_mp(actor, x + 300, 26)
  20.   end
  21.   def draw_current_and_max_values(x, y, width, current, max, color1, color2)
  22.     change_color(color1)
  23.     xr = x + width
  24.     if width < 96
  25.       draw_text(xr - 40, y, 42, line_height, current, 2)
  26.     else
  27.       draw_text(xr - 92, y, 42, line_height, current, 2)
  28.       change_color(color2)
  29.       draw_text(xr - 52, y, 12, line_height, "/", 2)
  30.       draw_text(xr - 42, y, 42, line_height, max, 2)
  31.     end
  32.   end
  33.   def selected=(selected)
  34.     @selected = selected
  35.     update_cursor
  36.   end
  37.   def update_cursor
  38.     if @selected
  39.       cursor_rect.set(0, 0, Graphics.width, height)
  40.     else
  41.       cursor_rect.empty
  42.     end
  43.   end
  44. end
  45. class Window_xz < Window_Command
  46.   def make_command_list
  47.     add_command("是",   :ok)
  48.     add_command("否",   :cancel)
  49.   end
  50. end

作者: j296196585    时间: 2017-8-9 20:12
RUBY 代码复制
  1. class Scene_Lx < Scene_MenuBase
  2.   def start
  3.     super
  4.     create_help_window
  5.     create_lx_viewport
  6.     create_lx_windows
  7.     init_selection
  8.   end
  9.   def terminate
  10.     super
  11.     @lx_viewport.dispose
  12.     @lx_windows.each {|window| window.dispose }
  13.   end
  14.   def update
  15.     super
  16.     @lx_windows.each {|window| window.update }
  17.     update_lx_selection
  18.   end
  19.   def create_help_window
  20.     @help_window = Window_Help1.new(1)
  21.     @help_window.set_text("★请选择要轮回的角色★")
  22.   end
  23.   def create_lx_viewport
  24.     @lx_viewport = Viewport.new
  25.     @lx_viewport.rect.y = @help_window.height
  26.     @lx_viewport.rect.height -= @help_window.height
  27.   end
  28.   def create_lx_windows
  29.     @lx_windows = Array.new(item_max) do |i|
  30.       Window_LxStatus.new(lx_height, i)
  31.     end
  32.     @lx_windows.each {|window| window.viewport = @lx_viewport }
  33.   end
  34.   def init_selection
  35.     @index = first_lx_index
  36.     @lx_windows[@index].selected = true
  37.     self.top_index = @index - visible_max / 2
  38.     ensure_cursor_visible
  39.   end
  40.   def item_max
  41.     $game_party.all_members.size
  42.   end
  43.   def visible_max
  44.     return 4
  45.   end
  46.   def lx_height
  47.     @lx_viewport.rect.height / visible_max
  48.   end
  49.   def first_lx_index
  50.     return 0
  51.   end
  52.   def index
  53.     @index
  54.   end
  55.   def top_index
  56.     @lx_viewport.oy / lx_height
  57.   end
  58.   def top_index=(index)
  59.     index = 0 if index < 0
  60.     index = item_max - visible_max if index > item_max - visible_max
  61.     @lx_viewport.oy = index * lx_height
  62.   end
  63.   def bottom_index
  64.     top_index + visible_max - 1
  65.   end
  66.   def bottom_index=(index)
  67.     self.top_index = index - (visible_max - 1)
  68.   end
  69.   def update_lx_selection
  70.     return on_lx_ok     if Input.trigger?(:C)
  71.     return on_lx_cancel if Input.trigger?(:B)
  72.     update_cursor
  73.   end
  74.   def on_lx_ok
  75.     level = $game_party.members[index].level
  76.     if level >= LX_LEVEL
  77.       if LX_DX == true
  78.         i = $game_party.members[index].id
  79.         if $game_variables[i + LX_VARIABLE] < LX_DX_N
  80.           @xz = Window_xz.new(100,200)
  81.           @xz.x = 100
  82.           @xz.y = 400
  83.           @xz.set_handler(:ok,      method(:c_ok))
  84.           @xz.set_handler(:cancel,      method(:c_cancel))
  85.         else
  86.           @help_window.set_text("已达轮回次数上限!")
  87.         end
  88.       else
  89.         @xz = Window_xz.new(100,200)
  90.           @xz.x = 100
  91.           @xz.y = 200
  92.           @xz.set_handler(:ok,      method(:c_ok))
  93.           @xz.set_handler(:cancel,      method(:c_cancel))
  94.       end
  95.     else
  96.         text = LX_LEVEL.to_s
  97.         text +=  "级后才能轮回!"
  98.         @help_window.set_text(text)
  99.     end
  100.     return
  101.   end
  102.   def on_lx_cancel
  103.     Sound.play_cancel
  104.     return_scene
  105.   end
  106.   def c_ok
  107.     actor = $game_party.members[index]
  108.     i = actor.id
  109.     v = LX_VARIABLE + i
  110.     n = $game_variables[v] + 1
  111.     hp = actor.mhp/LX_N * n
  112.     sp = actor.mmp/LX_N * n
  113.     atk = actor.atk/LX_N * n
  114.     de = actor.def/LX_N * n
  115.     mat = actor.mat/LX_N * n
  116.     mdf = actor.mdf/LX_N * n
  117.     agi = actor.agi/LX_N * n
  118.     luk = actor.luk/LX_N * n
  119.     $game_actors[i].setup(i)
  120.     if LX_CLASS == true
  121.       actor.class_id = LX_CLASS_ID
  122.     end
  123.     actor.add_param(0,hp)
  124.     actor.add_param(1,sp)
  125.     actor.add_param(2,atk)
  126.     actor.add_param(3,de)
  127.     actor.add_param(4,mat)
  128.     actor.add_param(5,mdf)
  129.     actor.add_param(6,agi)
  130.     actor.add_param(7,luk)
  131.     $game_variables[v] += 1
  132.     actor.recover_all
  133.     $data_common_events[LX_EVENT_ID]
  134.     return_scene
  135.   end
  136.   def c_cancel
  137.     @xz.hide
  138.   end
  139.   def update_cursor
  140.     last_index = @index
  141.     cursor_down (Input.trigger?(:DOWN))  if Input.repeat?(:DOWN)
  142.     cursor_up   (Input.trigger?(:UP))    if Input.repeat?(:UP)
  143.     cursor_pagedown   if Input.trigger?(:R)
  144.     cursor_pageup     if Input.trigger?(:L)
  145.     if @index != last_index
  146.       Sound.play_cursor
  147.       @lx_windows[last_index].selected = false
  148.       @lx_windows[@index].selected = true
  149.     end
  150.   end
  151.   def cursor_down(wrap)
  152.     @index = (@index + 1) % item_max if @index < item_max - 1 || wrap
  153.     ensure_cursor_visible
  154.   end
  155.   def cursor_up(wrap)
  156.     @index = (@index - 1 + item_max) % item_max if @index > 0 || wrap
  157.     ensure_cursor_visible
  158.   end
  159.   def cursor_pagedown
  160.     if top_index + visible_max < item_max
  161.       self.top_index += visible_max
  162.       @index = [@index + visible_max, item_max - 1].min
  163.     end
  164.   end
  165.   def cursor_pageup
  166.     if top_index > 0
  167.       self.top_index -= visible_max
  168.       @index = [@index - visible_max, 0].max
  169.     end
  170.   end
  171.   def ensure_cursor_visible
  172.     self.top_index = index if index < top_index
  173.     self.bottom_index = index if index > bottom_index
  174.   end
  175. end

作者: j296196585    时间: 2017-8-9 20:12
  1. class RPG::Class < RPG::BaseItem
  2.   def initialize
  3.     super
  4.     @exp_params = [30,20,30,30]
  5.     @params = Table.new(8,100)
  6.     (1..99).each do |i|
  7.       @params[0,i] = 400+i*50#+LX_HP * $game_variables[LX_VARIABLE+id]
  8.       @params[1,i] = 80+i*10
  9.       (2..5).each {|j| @params[j,i] = 15+i*5/4 }
  10.       (6..7).each {|j| @params[j,i] = 30+i*5/2 }
  11.     end
  12.     @learnings = []
  13.     @features.push(RPG::BaseItem::Feature.new(23, 0, 1))
  14.     @features.push(RPG::BaseItem::Feature.new(22, 0, 0.95))
  15.     @features.push(RPG::BaseItem::Feature.new(22, 1, 0.05))
  16.     @features.push(RPG::BaseItem::Feature.new(22, 2, 0.04))
  17.     @features.push(RPG::BaseItem::Feature.new(41, 1))
  18.     @features.push(RPG::BaseItem::Feature.new(51, 1))
  19.     @features.push(RPG::BaseItem::Feature.new(52, 1))
  20.   end
  21.   def exp_for_level(level)
  22.     lv = level.to_f
  23.     lx = LX_EXP * $game_variables[LX_VARIABLE+id]
  24.     basis = @exp_params[0].to_f+lx
  25.     extra = @exp_params[1].to_f+lx
  26.     acc_a = @exp_params[2].to_f+lx
  27.     acc_b = @exp_params[3].to_f+lx
  28.     return (basis*((lv-1)**(0.9+acc_a/250))*lv*(lv+1)/
  29.       (6+lv**2/50/acc_b)+(lv-1)*extra).round.to_i
  30.   end
  31.   attr_accessor :exp_params
  32.   attr_accessor :params
  33.   attr_accessor :learnings
  34. end
复制代码

作者: 300英雄    时间: 2017-8-9 20:15
先说声多谢,但是身上没有好人卡。(抱歉了)
作者: j296196585    时间: 2017-8-9 20:22
复制的时候已经知道怕你出错  已经一楼 一个顺序 排列好了

360截图20170809202331464.jpg (101.44 KB, 下载次数: 2)

360截图20170809202331464.jpg





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1