Project1

标题: 转生脚本条件改为需要物品和金钱,不掉级和等级条件 [打印本页]

作者: 金芒芒    时间: 2016-3-22 09:46
标题: 转生脚本条件改为需要物品和金钱,不掉级和等级条件
RUBY 代码复制
  1. #==============================================================================
  2. # ★ 【角色转生系统】★
  3. #------------------------------------------------------------------------------
  4. # ☆  by 芯☆淡茹水  
  5. #==============================================================================
  6. #◆ 使用方法:
  7. #        复制该脚本,插入到 Main 前。
  8. #        召唤转生系统的方法:事件 → 脚本  写入  $scene = Scene_Lx.new
  9. #===============================================================================
  10. #◆ 说明:
  11. #        和一些网游的转生类似。角色随着转生次数的增加,各种属性(hp,sp,力量,
  12. #      灵巧,,,等)的初始值会越来越高,而每升一级增加的属性也会越来越多。
  13. #      (注意:数据库各角色的初始等级都设置为 1 级。)
  14. #
  15. #       由于手动设置的项目较多,在使用前,请先仔细阅读并设置下面的设置项。
  16. #
  17. #==============================================================================
  18. #◆ 设置:
  19. #================]
  20. #------------------------------------------------------------------------------
  21. LX_LEVEL = 1       #达到转生要求的最低等级。
  22. #------------------------------------------------------------------------------
  23. LX_VARIABLE = 200   #储存各角色转生次数的起始变量。比如:设置为 200 ,那么1号角
  24. #                    色转生次数储存在 201 号变量,2号角色储存在 202 号变量,,,
  25. #------------------------------------------------------------------------------
  26. LX_N = 10           #转生前,角色的各属性除以设定的这个值,再乘以转生次数,加入
  27. #                    到转生后的属性中。这个设定的值越高,加入转生后的属性就越
  28. #                    少,反之就越多。
  29. #------------------------------------------------------------------------------
  30. LX_DX = false        #转生次数限制,限制写 true       不限制写  false
  31. #------------------------------------------------------------------------------
  32. LX_DX_N = 10        #转生最高次数限制,上面的限制设置写 true  该项才有效。
  33. #------------------------------------------------------------------------------
  34. LX_CLASS = false      #转生后是否改变角色职业,是 写入 true    否 写入 false
  35. #------------------------------------------------------------------------------
  36. LX_CLASS_ID = 1      #转生后,角色的职业ID。上面是否改变职业设置写 true
  37. #                     该设置才有效。
  38. #                     比如转生后,全部转为 1 号职业,从“新手”做起。
  39. #------------------------------------------------------------------------------
  40. LX_EVENT_ID = 1      #转生成功后激活的公共事件ID。公共事件里可设置一些转生成功后
  41. #                    播放动画,以及一些提示等。
  42. #------------------------------------------------------------------------------
  43. LEVEL_UP = false     #推荐配合使用升级加点系统。如果工程里有升级加点系统
  44. #                    请写 true    没有则写 false
  45. #==============================================================================
  46. ##转生后角色各属性增加度设置:
  47. #------------------------------------------------------------------------------
  48. #(角色每升一级增加的属性 = 数据库设置的基本值 + 下面设置的增加度 乘以 转生次数)
  49. #(比如设置HP为 10  ,转生 0 次 角色每升一级,角色的HP多增加 0 点;
  50. #  转生 1 次 多增加 10 点;转生 2 次 多增加 20 点,,,,;以此类推。)
  51. #------------------------------------------------------------------------------
  52. LX_EXP = 1.5           # EXP曲线基础值和增加度。(一般设为 1 — 10)
  53. #------------------------------------------------------------------------------
  54. LX_HP = 10           # HP
  55. #------------------------------------------------------------------------------
  56. LX_SP = 8            # SP
  57. #------------------------------------------------------------------------------
  58. LX_STATE = 8         # 四项属性(力量,灵巧,速度,魔力)
  59. #==============================================================================
  60. ###############################################################################
  61. #==============================================================================
  62. #★ 重新定义角色各属性
  63. #==============================================================================
  64. class Game_Actor < Game_Battler
  65.   #--------------------------------------------------------------------------
  66.   # ● 计算 EXP
  67.   #--------------------------------------------------------------------------
  68.   def make_exp_list
  69.     actor = $data_actors[@actor_id]
  70.     lx = ($game_variables[@actor_id + LX_VARIABLE] + 1) * LX_EXP
  71.     actor.exp_inflation += lx
  72.     actor.exp_basis += lx
  73.     @exp_list[1] = 0
  74.     pow_i = 2.4 + actor.exp_inflation / 100.0
  75.     for i in 2..100
  76.       if i > actor.final_level
  77.         @exp_list[i] = 0
  78.       else
  79.         n = actor.exp_basis * ((i + 3) ** pow_i) / (5 ** pow_i)
  80.         @exp_list[i] = @exp_list[i-1] + Integer(n)
  81.       end
  82.     end
  83.   end
  84.   #--------------------------------------------------------------------------
  85.   # ● 获取基本 MaxHP
  86.   #--------------------------------------------------------------------------
  87.   def base_maxhp
  88.     lx = $game_variables[@actor_id + LX_VARIABLE] * @level
  89.     return $data_actors[@actor_id].parameters[0, @level] + lx * LX_HP
  90.   end
  91.   #--------------------------------------------------------------------------
  92.   # ● 获取基本 MaxSP
  93.   #--------------------------------------------------------------------------
  94.   def base_maxsp
  95.     lx = $game_variables[@actor_id + LX_VARIABLE] * @level
  96.     return $data_actors[@actor_id].parameters[1, @level] + lx * LX_SP
  97.   end
  98.   #--------------------------------------------------------------------------
  99.   # ● 获取基本力量
  100.   #--------------------------------------------------------------------------
  101.   def base_str
  102.     lx = $game_variables[@actor_id + LX_VARIABLE] * @level
  103.     n = $data_actors[@actor_id].parameters[2, @level] + lx * LX_STATE
  104.     weapon = $data_weapons[@weapon_id]
  105.     armor1 = $data_armors[@armor1_id]
  106.     armor2 = $data_armors[@armor2_id]
  107.     armor3 = $data_armors[@armor3_id]
  108.     armor4 = $data_armors[@armor4_id]
  109.     n += weapon != nil ? weapon.str_plus : 0
  110.     n += armor1 != nil ? armor1.str_plus : 0
  111.     n += armor2 != nil ? armor2.str_plus : 0
  112.     n += armor3 != nil ? armor3.str_plus : 0
  113.     n += armor4 != nil ? armor4.str_plus : 0
  114.     return [[n, 1].max, 999].min
  115.   end
  116.   #--------------------------------------------------------------------------
  117.   # ● 获取基本灵巧
  118.   #--------------------------------------------------------------------------
  119.   def base_dex
  120.     lx = $game_variables[@actor_id + LX_VARIABLE] * @level
  121.     n = $data_actors[@actor_id].parameters[3, @level] + lx * LX_STATE
  122.     weapon = $data_weapons[@weapon_id]
  123.     armor1 = $data_armors[@armor1_id]
  124.     armor2 = $data_armors[@armor2_id]
  125.     armor3 = $data_armors[@armor3_id]
  126.     armor4 = $data_armors[@armor4_id]
  127.     n += weapon != nil ? weapon.dex_plus : 0
  128.     n += armor1 != nil ? armor1.dex_plus : 0
  129.     n += armor2 != nil ? armor2.dex_plus : 0
  130.     n += armor3 != nil ? armor3.dex_plus : 0
  131.     n += armor4 != nil ? armor4.dex_plus : 0
  132.     return [[n, 1].max, 999].min
  133.   end
  134.   #--------------------------------------------------------------------------
  135.   # ● 获取基本速度
  136.   #--------------------------------------------------------------------------
  137.   def base_agi
  138.     lx = $game_variables[@actor_id + LX_VARIABLE] * @level
  139.     n = $data_actors[@actor_id].parameters[4, @level] + lx * LX_STATE
  140.     weapon = $data_weapons[@weapon_id]
  141.     armor1 = $data_armors[@armor1_id]
  142.     armor2 = $data_armors[@armor2_id]
  143.     armor3 = $data_armors[@armor3_id]
  144.     armor4 = $data_armors[@armor4_id]
  145.     n += weapon != nil ? weapon.agi_plus : 0
  146.     n += armor1 != nil ? armor1.agi_plus : 0
  147.     n += armor2 != nil ? armor2.agi_plus : 0
  148.     n += armor3 != nil ? armor3.agi_plus : 0
  149.     n += armor4 != nil ? armor4.agi_plus : 0
  150.     return [[n, 1].max, 999].min
  151.   end
  152.   #--------------------------------------------------------------------------
  153.   # ● 获取基本魔力
  154.   #--------------------------------------------------------------------------
  155.   def base_int
  156.     lx = $game_variables[@actor_id + LX_VARIABLE] * @level
  157.     n = $data_actors[@actor_id].parameters[5, @level] + lx * LX_STATE
  158.     weapon = $data_weapons[@weapon_id]
  159.     armor1 = $data_armors[@armor1_id]
  160.     armor2 = $data_armors[@armor2_id]
  161.     armor3 = $data_armors[@armor3_id]
  162.     armor4 = $data_armors[@armor4_id]
  163.     n += weapon != nil ? weapon.int_plus : 0
  164.     n += armor1 != nil ? armor1.int_plus : 0
  165.     n += armor2 != nil ? armor2.int_plus : 0
  166.     n += armor3 != nil ? armor3.int_plus : 0
  167.     n += armor4 != nil ? armor4.int_plus : 0
  168.     return [[n, 1].max, 999].min
  169.   end
  170. end
  171. ###############################################################################
  172. #==============================================================================
  173. #★ 转生场景
  174. #==============================================================================
  175. class Scene_Lx
  176.   def main
  177.         @sxyb = Sprite.new
  178.     @sxyc = Sprite.new
  179.     @szcz = Sprite.new
  180.     @csxy = Sprite.new
  181.     @hcjj = Sprite.new
  182.     @zrsc = Sprite.new
  183.     @fmns = Sprite.new
  184.     @sxyb.bitmap = RPG::Cache.icon("菜单合阶")
  185.     @sxyc.bitmap = RPG::Cache.icon("属性养成")
  186.     @szcz.bitmap = RPG::Cache.icon("上阵出战")
  187.     @csxy.bitmap = RPG::Cache.icon("出仕下野")
  188.     @hcjj.bitmap = RPG::Cache.icon("合成进阶")
  189.     @zrsc.bitmap = RPG::Cache.icon("载入史册")
  190.     @fmns.bitmap = RPG::Cache.icon("放马南山")
  191.     @sxyb.x = 122
  192.     @sxyb.y = 40
  193.     @sxyb.z = 20   
  194.  
  195.     @sxyc.x = 62+150
  196.     @sxyc.y = 80+5
  197.     @sxyc.z = 91
  198.     @szcz.x = 128+150
  199.     @szcz.y = 80+5
  200.     @szcz.z = 91
  201.     @csxy.x = 194+150
  202.     @csxy.y = 80+5
  203.     @csxy.z = 91
  204.     @hcjj.x = 260+150
  205.     @hcjj.y = 80+5
  206.     @hcjj.z = 91
  207.     @zrsc.x = 327+150
  208.     @zrsc.y = 80+5
  209.     @zrsc.z = 91
  210.     @fmns.x = 392+150
  211.     @fmns.y = 80+5
  212.     @fmns.z = 91
  213.     #选择窗口
  214.     @command_window = Window_LxCommand.new
  215.     @command_window.visible = false
  216.     #帮助窗口
  217.     @help_window = Window_LxHelp.new
  218.     #状态窗口
  219.     @status_window = Window_Character1.new#Window_LxStatus.new
  220.     #背景窗口
  221.     @lxa_window = Window_LxBack.new
  222.     @lxa_window.y = 64
  223.     @lxb_window = Window_LxBack.new
  224.     @lxb_window.y = 168
  225.     @lxc_window = Window_LxBack.new
  226.     @lxc_window.y = 272
  227.     @lxd_window = Window_LxBack.new
  228.     @lxd_window.y = 376
  229.     #过渡
  230.     Graphics.transition
  231.     #循环
  232.     loop do
  233.       Graphics.update
  234.       Input.update
  235.       update
  236.       if $scene != self
  237.         break
  238.       end
  239.     end
  240.     Graphics.freeze
  241.     #释放窗口
  242.     @sxyb.dispose
  243.     @sxyc.dispose
  244.     @szcz.dispose
  245.     @csxy.dispose
  246.     @hcjj.dispose
  247.     @zrsc.dispose
  248.     @fmns.dispose
  249.     @command_window.dispose
  250.     @help_window.dispose
  251.     @status_window.dispose
  252.     @lxa_window.dispose
  253.     @lxb_window.dispose
  254.     @lxc_window.dispose
  255.     @lxd_window.dispose
  256.   end
  257.   #刷新
  258.   def update
  259.     @command_window.update
  260.     @status_window.update
  261.     @help_window.update
  262.     if Input.repeat?(Input::UP) or  Input.repeat?(Input::DOWN)
  263.       @status_window.active = true
  264.       return
  265.     end
  266.     if @status_window.active
  267.       update_status
  268.       return
  269.     end
  270.     if @command_window.active
  271.       update_command
  272.       return
  273.     end
  274.   end
  275.   #刷新(状态窗口)
  276.   def update_status
  277.     @help_window.refresh     
  278.     if Input.trigger?(Input::B)
  279.       $game_system.se_play($data_system.cancel_se)
  280.       $scene = Scene_Menu.new(3)
  281.       return
  282.     end
  283.     if Input.trigger?(Input::C)
  284.       level = $game_party.actors[@status_window.index].level
  285.       #限制
  286.       if level >= LX_LEVEL
  287.         if LX_DX == true
  288.           i = $game_party.actors[@status_window.index].id
  289.           if $game_variables[i + LX_VARIABLE] < LX_DX_N
  290.             $game_system.se_play($data_system.decision_se)
  291.             @status_window.active = false
  292.             @command_window.visible = true
  293.             @command_window.active = true
  294.             @command_window.index = 0
  295.           else
  296.             $game_system.se_play($data_system.buzzer_se)
  297.             text =  "已达转生次数上限!"
  298.             @help_window.contents.clear
  299.             @help_window.contents.draw_text(170,0, 246, 32, text)
  300.             @status_window.active = false
  301.           end
  302.         else
  303.           $game_system.se_play($data_system.decision_se)
  304.           @status_window.active = false
  305.           @command_window.visible = true
  306.           @command_window.active = true
  307.           @command_window.index = 0
  308.         end
  309.       else
  310.         $game_system.se_play($data_system.buzzer_se)
  311.         text = LX_LEVEL.to_s
  312.         text +=  "级后才能转生!"
  313.         @help_window.contents.clear
  314.         @help_window.contents.draw_text(190,0, 186, 32, text)
  315.         @status_window.active = false
  316.       end
  317.       return
  318.     end
  319.   end
  320.   #刷新(选择窗口)
  321.   def update_command
  322.     if Input.trigger?(Input::B)
  323.       $game_system.se_play($data_system.cancel_se)
  324.       @status_window.active = true
  325.       @command_window.visible = false
  326.       @command_window.active = false
  327.       @command_window.index = -1
  328.       return
  329.     end
  330.     if Input.trigger?(Input::C)
  331.       case @command_window.index
  332.       when 0
  333.         $game_system.se_play($data_system.decision_se)
  334.         update_xdrs_lx
  335.       when 1
  336.         $game_system.se_play($data_system.cancel_se)
  337.         @status_window.active = true
  338.         @command_window.visible = false
  339.         @command_window.active = false
  340.         @command_window.index = -1
  341.       end
  342.       return
  343.     end
  344.   end
  345.   #刷新(转生)
  346.   def update_xdrs_lx
  347.     #获取角色。
  348.     actor = $game_party.actors[@status_window.index]
  349.     i = actor.id
  350.     #获取储存角色转生次数的变量ID.
  351.     v = LX_VARIABLE + i
  352.     #代入角色转生前的各数据,并计算最终增加的属性。
  353.     n = $game_variables[v] + 1
  354.     hp = actor.maxhp/LX_N * n
  355.     sp = actor.maxsp/LX_N * n
  356.     str = actor.str/LX_N * n
  357.     dex = actor.dex/LX_N * n
  358.     agi = actor.agi/LX_N * n
  359.     int = actor.int/LX_N * n
  360.     #角色初始化。
  361.     $game_actors[i].setup(i)
  362.     #确认转生后是否改变职业,是则变为设置的职业ID。
  363.     if LX_CLASS == true
  364.       actor.class_id = LX_CLASS_ID
  365.     end
  366.     #加入角色转生后增加的各种属性。
  367.     actor.maxhp += hp
  368.     actor.maxsp += sp
  369.     actor.str += str
  370.     actor.dex += dex
  371.     actor.agi += agi
  372.     actor.int += int
  373.     #角色转生次数变量加 1 。
  374.     $game_variables[v] += 1
  375.     #回复。
  376.     actor.recover_all
  377.     #确认升级加点系统,转生后,如果有剩余点数未加,将变为 0 。
  378.     #如果没有升级加点系统,跳过。
  379.     if LEVEL_UP == true
  380.       va = LEVEL_UP_VARIABLE + i
  381.       $game_variables[va] = 0
  382.     end
  383.     #激活公共事件。
  384.     $game_temp.common_event_id = LX_EVENT_ID
  385.     #切换到地图场景。
  386.     $scene = Scene_Menu.new(3)
  387.   end
  388. end
  389. ###############################################################################
  390. #==============================================================================
  391. #★ 增加描绘转生次数的定义
  392. #==============================================================================
  393. class Window_Base < Window
  394.   def draw_actor_xdrs_lx(actor, x, y)
  395.     self.contents.font.color = text_color(6)
  396.     self.contents.draw_text(x+56, y - 44, 120, 32, "+")
  397.     i =  actor.id + LX_VARIABLE
  398.     self.contents.font.color = text_color(6)
  399.     self.contents.draw_text(x + 65, y - 44, 80, 32, $game_variables[i].to_s)
  400.   end
  401. end
  402. #===============================================================================
  403. #★ 帮助窗口
  404. #===============================================================================
  405. class Window_LxHelp < Window_Base
  406.   def initialize
  407.     super(0, 0, 640, 64)
  408.     self.contents = Bitmap.new(width - 32, height - 32)
  409.     refresh
  410.   end
  411.   def refresh
  412.     self.contents.clear
  413.     self.contents.draw_text(170, 0, 246, 32, "★请选择要转生的角色★")
  414.   end
  415. end
  416. #===============================================================================
  417. #★ 选择窗口
  418. #===============================================================================
  419. class Window_LxCommand < Window_Selectable
  420.   def initialize
  421.     super(600, 400, 160, 124)
  422.     self.contents = Bitmap.new(width - 32, height - 32)
  423.     @item_max = 2
  424.     @commands = ["是", "否"]
  425.     refresh
  426.     self.z = 999
  427.     self.active = false
  428.     self.index = -1
  429.   end
  430.   def refresh
  431.     self.contents.clear
  432.     for i in 0...@item_max
  433.       draw_item(i)
  434.     end
  435.   end
  436.   def draw_item(index)
  437.     self.contents.font.color = system_color
  438.     self.contents.draw_text(0, 0, 148, 32, "是否确定转生?")
  439.     y = 30 + index * 32
  440.     self.contents.font.color = normal_color
  441.     self.contents.draw_text(0, y, 126, 32, @commands[index])
  442.   end
  443.   def update_cursor_rect
  444.     self.cursor_rect.set(-5, 30 + index * 32, 134, 32)
  445.   end
  446. end
  447. #===============================================================================
  448. #★ 角色状态 + 选择角色窗口
  449. #===============================================================================
  450. class Window_LxStatus < Window_Selectable
  451.   def initialize
  452.     super(0, 64, 640, 446)
  453.     self.contents = Bitmap.new(width - 32, height - 32)
  454.     self.opacity = 0
  455.     refresh
  456.     self.index = 0
  457.   end
  458.   def refresh
  459.     self.contents.clear
  460.     @item_max = $game_party.actors.size
  461.     for i in 0...$game_party.actors.size
  462.       x = 5
  463.       y = i * 104 - 3
  464.       actor = $game_party.actors[i]
  465.       draw_actor_xdrs_lx(actor, x + 130, y + 56)
  466.       draw_actor_graphic(actor, x + 35, y + 80)
  467.       draw_actor_name(actor, x, y)
  468.       draw_actor_class(actor, x + 134, y + 28)
  469.       draw_actor_level(actor, x + 134, y)
  470.       draw_actor_exp(actor, x + 300, y + 56)
  471.       draw_actor_hp(actor, x + 300, y )
  472.       draw_actor_sp(actor, x + 300, y + 26)
  473.     end
  474.   end
  475.   def update_cursor_rect
  476.     self.cursor_rect.set(- 12, @index * 104 - 12 , self.width - 4 , 96)
  477.   end
  478. end
  479. #===============================================================================
  480. #★ 状态窗口背景
  481. #===============================================================================
  482. class Window_LxBack < Window_Base
  483.   def initialize
  484.     super(0, 0, 640, 104)
  485.     self.contents = Bitmap.new(width - 32, height - 32)
  486.   end
  487. end
  488. #===============================================================================
  489. #★ 重新描绘其它状态窗口,增加描绘转生次数。
  490. #===============================================================================
  491. class Window_Status < Window_Base
  492.   def refresh
  493.     self.contents.clear
  494.     draw_actor_graphic(@actor, 40, 112)
  495.     draw_actor_name(@actor, 4, 0)
  496.     draw_actor_class(@actor, 4 + 144, 0)
  497.     draw_actor_level(@actor, 96, 32)
  498.     draw_actor_state(@actor, 96, 64)
  499.     draw_actor_hp(@actor, 96, 112, 172)
  500.     draw_actor_sp(@actor, 96, 144, 172)
  501.     draw_actor_parameter(@actor, 96, 192, 0)
  502.     draw_actor_parameter(@actor, 96, 224, 1)
  503.     draw_actor_parameter(@actor, 96, 256, 2)
  504.     draw_actor_parameter(@actor, 96, 304, 3)
  505.     draw_actor_parameter(@actor, 96, 336, 4)
  506.     draw_actor_parameter(@actor, 96, 368, 5)
  507.     draw_actor_parameter(@actor, 96, 400, 6)
  508.     draw_actor_xdrs_lx(@actor, 315, 0)
  509.     self.contents.font.color = system_color
  510.     self.contents.draw_text(320, 48, 80, 32, "EXP")
  511.     self.contents.draw_text(320, 80, 80, 32, "NEXT")
  512.     self.contents.font.color = normal_color
  513.     self.contents.draw_text(320 + 80, 48, 84, 32, @actor.exp_s, 2)
  514.     self.contents.draw_text(320 + 80, 80, 84, 32, @actor.next_rest_exp_s, 2)
  515.     self.contents.font.color = system_color
  516.     self.contents.draw_text(320, 160, 96, 32, "装备")
  517.     draw_item_name($data_weapons[@actor.weapon_id], 320 + 16, 208)
  518.     draw_item_name($data_armors[@actor.armor1_id], 320 + 16, 256)
  519.     draw_item_name($data_armors[@actor.armor2_id], 320 + 16, 304)
  520.     draw_item_name($data_armors[@actor.armor3_id], 320 + 16, 352)
  521.     draw_item_name($data_armors[@actor.armor4_id], 320 + 16, 400)
  522.   end
  523.   def dummy
  524.     self.contents.font.color = system_color
  525.     self.contents.draw_text(320, 112, 96, 32, $data_system.words.weapon)
  526.     self.contents.draw_text(320, 176, 96, 32, $data_system.words.armor1)
  527.     self.contents.draw_text(320, 240, 96, 32, $data_system.words.armor2)
  528.     self.contents.draw_text(320, 304, 96, 32, $data_system.words.armor3)
  529.     self.contents.draw_text(320, 368, 96, 32, $data_system.words.armor4)
  530.     draw_item_name($data_weapons[@actor.weapon_id], 320 + 24, 144)
  531.     draw_item_name($data_armors[@actor.armor1_id], 320 + 24, 208)
  532.     draw_item_name($data_armors[@actor.armor2_id], 320 + 24, 272)
  533.     draw_item_name($data_armors[@actor.armor3_id], 320 + 24, 336)
  534.     draw_item_name($data_armors[@actor.armor4_id], 320 + 24, 400)
  535.   end
  536. end
  537. #
  538. #==============================================================================
  539. ############################################################





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