Level Up Point Spend System v2.4 é um script para o RPG Maker XP, desenvolvido por Drago del Fato, que ao ser instalado no game ou projeto desta ferramenta, permite que o jogador distribua pontos que aumentam os status dos heróis, quando eles passam de nível.
Quando um herói passa de level, ao abrir o menu do game, você fica com uma mensagem avisando que ele acabou de upar. Daí ele pergunta se você quer passar de nível. Se sim, você pode distribuir pontos para os seguintes stats/atributos: Força, Agilidade, Destreza, Inteligencia, HP e HP.
Veja a demo, disponível para download nesta publicação, para ter uma ideia melhor.
É de fácil instalação, basta inserir acima do Main, o seguinte script:
#===================================================== # Drago del fato's Level Up Point Spend System # --------------------------------------------- # Written by Drago del Fato # Version 2.4 # Just insert a new script above main and call it whatever you want. #===================================================== #--Res Text PSPEND_LVUPTEXT = "New Level! Do you want to Level up?" PSPEND_SPTEXT = "Special Points Left:" PSPEND_ANSWERS = ["Yes!","No"] PSPEND_HELP_TEXT = ["Change Strength...","Change Agility...", "Change Dexterity...","Change Inteligence...","Change Maximum Health Points...", "Change Maximum Skill Points...","Reset all Values to Normal...","Finnish Editing...."] PSPEND_B1 = "Reset" PSPEND_B2 = "Done!" LVUP_TEXT = "(Lv Up!)" DESC_TEXT = "LEFT - Decrease, RIGHT - Increase,C - Confirm,B - Exit" #-- Other Res SPADD = 6 AGILITY_ADD = 1 DEXTERITY_ADD = 1 INTELIGENCE_ADD = 1 STRENGTH_ADD = 1 HP_ADD = 4 SP_ADD = 3 #-- If you aren't experienced scripter then don't change lines below!!! #--Global Variables $PSPEND_POINTS = [] $PSPEND_ACTORS = [] $PSPEND_ADD = [1,1,1,1,1,1] $PSPEND_ATTR = [1,1,1,1,1,1] $PSPEND_RET = 0 #== Part One - Class for Setting and Getting Attributes from Actors class PSPEND_GET_SET_ACTOR_ATRIBUTTES def initialize(type) if !$BTEST case type when 0 return when 1 get_attributes when 2 set_attributes end end end def get_attributes(actorid) @actor = $game_actors[actorid] $PSPEND_ATTR[1] = @actor.str $PSPEND_ATTR[2] = @actor.agi $PSPEND_ATTR[3] = @actor.dex $PSPEND_ATTR[4] = @actor.int $PSPEND_ATTR[5] = @actor.maxhp $PSPEND_ATTR[6] = @actor.maxsp end def set_attributes(actorid) @actor = $game_actors[actorid] @actor.str = $PSPEND_ATTR[1] @actor.agi = $PSPEND_ATTR[2] @actor.dex = $PSPEND_ATTR[3] @actor.int = $PSPEND_ATTR[4] @actor.maxhp = $PSPEND_ATTR[5] @actor.maxsp = $PSPEND_ATTR[6] end end #-- End of Part One #-- Part Two - Disabling actor attributes so that they have same attributes at the next level! class Game_Actor def exp=(exp) @exp = [[exp, 9999999].min, 0].max while @exp >= @exp_list[@level+1] and @exp_list[@level+1] > 0 $actor_attr.get_attributes(@actor_id) @level += 1 $actor_attr.set_attributes(@actor_id) $PSPEND_POINTS[@actor_id - 1] += SPADD $PSPEND_ACTORS[@actor_id - 1] = true for j in $data_classes[@class_id].learnings if j.level == @level learn_skill(j.skill_id) end end end while @exp < @exp_list[@level] $actor_attr.get_attributes(@actor_id) @level -= 1 $actor_attr.set_attributes(@actor_id) $PSPEND_ACTORS[@actor_id - 1] = false end @hp = [@hp, self.maxhp].min @sp = [@sp, self.maxsp].min end def level=(level) if level < self.level $actor_attr.get_attributes(@actor_id) level = [[level, $data_actors[@actor_id].final_level].min, 1].max $actor_attr.set_attributes(@actor_id) $PSPEND_ACTORS[@actor_id - 1] = false self.exp = @exp_list[level] return end $actor_attr.get_attributes(@actor_id) level = [[level, $data_actors[@actor_id].final_level].min, 1].max $actor_attr.set_attributes(@actor_id) $PSPEND_POINTS[@actor_id - 1] += SPADD $PSPEND_ACTORS[@actor_id - 1] = true self.exp = @exp_list[level] return end end #-- End of Part Two #-- Part Three - Telling Scene Title that it's time to go to shop (just kidding...). # Changing the code so that some other variables will be added... class Scene_Title def command_new_game $game_system.se_play($data_system.decision_se) Audio.bgm_stop Graphics.frame_count = 0 $game_temp = Game_Temp.new $game_system = Game_System.new $game_switches = Game_Switches.new $game_variables = Game_Variables.new $game_self_switches = Game_SelfSwitches.new $game_screen = Game_Screen.new $game_actors = Game_Actors.new $game_party = Game_Party.new $game_troop = Game_Troop.new $game_map = Game_Map.new $game_player = Game_Player.new #edit $actor_attr = PSPEND_GET_SET_ACTOR_ATRIBUTTES.new(0) for i in 0..$data_actors.size - 2 $PSPEND_ACTORS.push(false) $PSPEND_POINTS.push(0) end #end edit $game_party.setup_starting_members $game_map.setup($data_system.start_map_id) $game_player.moveto($data_system.start_x, $data_system.start_y) $game_player.refresh $game_map.autoplay $game_map.update $scene = Scene_Map.new end def battle_test $data_actors = load_data("Data/BT_Actors.rxdata") $data_classes = load_data("Data/BT_Classes.rxdata") $data_skills = load_data("Data/BT_Skills.rxdata") $data_items = load_data("Data/BT_Items.rxdata") $data_weapons = load_data("Data/BT_Weapons.rxdata") $data_armors = load_data("Data/BT_Armors.rxdata") $data_enemies = load_data("Data/BT_Enemies.rxdata") $data_troops = load_data("Data/BT_Troops.rxdata") $data_states = load_data("Data/BT_States.rxdata") $data_animations = load_data("Data/BT_Animations.rxdata") $data_tilesets = load_data("Data/BT_Tilesets.rxdata") $data_common_events = load_data("Data/BT_CommonEvents.rxdata") $data_system = load_data("Data/BT_System.rxdata") Graphics.frame_count = 0 $game_temp = Game_Temp.new $game_system = Game_System.new $game_switches = Game_Switches.new $game_variables = Game_Variables.new $game_self_switches = Game_SelfSwitches.new $game_screen = Game_Screen.new $game_actors = Game_Actors.new $game_party = Game_Party.new $game_troop = Game_Troop.new $game_map = Game_Map.new $game_player = Game_Player.new #edit $actor_attr = PSPEND_GET_SET_ACTOR_ATRIBUTTES.new(0) for i in 0..$data_actors.size - 2 $PSPEND_ACTORS.push(false) $PSPEND_POINTS.push(0) end #end edit $game_party.setup_battle_test_members $game_temp.battle_troop_id = $data_system.test_troop_id $game_temp.battle_can_escape = true $game_map.battleback_name = $data_system.battleback_name $game_system.se_play($data_system.battle_start_se) $game_system.bgm_play($game_system.battle_bgm) $scene = Scene_Battle.new end end #End of Part Three #Mid Part - Adding Draw Actor Battler class Window_Base < Window def draw_actor_battler(actor, x, y) bitmap = RPG::Cache.battler(actor.battler_name, actor.battler_hue) cw =bitmap.width ch = bitmap.height src_rect = Rect.new(0, 0, cw,ch) self.contents.blt(x - cw / 2, y - ch, bitmap, src_rect) end def draw_actor_name(actor, x, y) self.contents.font.color = normal_color self.contents.draw_text(x, y, 120, 32, actor.name) cx = self.contents.text_size(actor.name).width if $PSPEND_ACTORS[actor.id - 1] self.contents.font.color = crisis_color self.contents.draw_text(x + cx, y, 90, 32, " " + LVUP_TEXT) end self.contents.font.color = normal_color end end #End of Mid Part #Part Four - The Hard one! Making Custom Windows class PSPEND_CUSTOM_WINDOW < Window_Selectable def initialize(winactorid) super(0, 64, 640, 480 - 64) commands = [1,2,3,4,5,6,7,8] @item_max = commands.size @commands = commands self.contents = Bitmap.new(width - 32,height - 32) self.contents.font.name = $fontface self.contents.font.size = $fontsize @actor = $game_actors[winactorid + 1] @y = 10 $PSPEND_RET = $PSPEND_POINTS[@actor.id - 1] refresh(true) self.index = 0 end def refresh(ret = false) self.contents.clear @y = 10 if ret $PSPEND_ADD[1] = @actor.str $PSPEND_ADD[2] = @actor.agi $PSPEND_ADD[3] = @actor.dex $PSPEND_ADD[4] = @actor.int $PSPEND_ADD[5] = @actor.maxhp $PSPEND_ADD[6] = @actor.maxsp $PSPEND_POINTS[@actor.id - 1] = $PSPEND_RET ret = false end draw_actor_battler(@actor,20 + 100,@y + 200) draw_actor_name(@actor,20 + 32,@y + 220) cx = self.contents.text_size(PSPEND_SPTEXT + $PSPEND_POINTS[@actor.id - 1].to_s).width self.contents.draw_text(52,@y + 252,cx,32,PSPEND_SPTEXT + $PSPEND_POINTS[@actor.id - 1].to_s) cx = self.contents.text_size(DESC_TEXT).width self.contents.draw_text(52,self.height - 32 - 40,cx,32,DESC_TEXT) @y += 150 @x = 260 for i in 0...@item_max draw_item(i, normal_color) end end def draw_item(index, color) if $PSPEND_POINTS[@actor.id - 1] <= 0 self.contents.font.color = disabled_color else self.contents.font.color = color end rect = Rect.new(@x, 32 * index, self.contents.width - 8, 32) self.contents.fill_rect(rect, Color.new(0, 0, 0, 0)) case index when 0 self.contents.draw_text(rect, $data_system.words.str) cx = self.contents.text_size(@actor.str.to_s + " > " + $PSPEND_ADD[1].to_s).width self.contents.draw_text(self.width - 32 - cx,32 * index,cx ,32 ,@actor.str.to_s + " > " + $PSPEND_ADD[1].to_s) when 1 self.contents.draw_text(rect, $data_system.words.agi ) cx = self.contents.text_size(@actor.agi.to_s + " > " + $PSPEND_ADD[2].to_s).width self.contents.draw_text(self.width - 32 - cx,32 * index,cx ,32 ,@actor.agi.to_s + " > " + $PSPEND_ADD[2].to_s) when 2 self.contents.draw_text(rect, $data_system.words.dex ) cx = self.contents.text_size( @actor.dex.to_s + " > " + $PSPEND_ADD[3].to_s).width self.contents.draw_text(self.width - 32 - cx,32 * index,cx ,32 , @actor.dex.to_s + " > " + $PSPEND_ADD[3].to_s) when 3 self.contents.draw_text(rect, $data_system.words.int ) cx = self.contents.text_size(@actor.int.to_s + " > " + $PSPEND_ADD[4].to_s).width self.contents.draw_text(self.width - 32 - cx,32 * index,cx ,32 ,@actor.int.to_s + " > " + $PSPEND_ADD[4].to_s) when 4 self.contents.draw_text(rect, $data_system.words.hp ) cx = self.contents.text_size( @actor.maxhp.to_s + " > " + $PSPEND_ADD[5].to_s).width self.contents.draw_text(self.width - 32 - cx,32 * index,cx ,32 , @actor.maxhp.to_s + " > " + $PSPEND_ADD[5].to_s) when 5 self.contents.draw_text(rect, $data_system.words.sp ) cx = self.contents.text_size(@actor.maxsp.to_s + " > " + $PSPEND_ADD[6].to_s).width self.contents.draw_text(self.width - 32 - cx,32 * index,cx ,32 ,@actor.maxsp.to_s + " > " + $PSPEND_ADD[6].to_s) when 6 self.contents.font.color = color self.contents.draw_text(rect,PSPEND_B1) when 7 self.contents.font.color = color self.contents.draw_text(rect,PSPEND_B2) end end def disable_item(index) draw_item(index, disabled_color) end def update_cursor_rect if @index < 0 self.cursor_rect.empty return end row = @index / @column_max if row < self.top_row self.top_row = row end if row > self.top_row + (self.page_row_max - 1) self.top_row = row - (self.page_row_max - 1) end cursor_width = self.width / @column_max - 32 x = @index % @column_max * (cursor_width + 32) y = @index / @column_max * 32 - self.oy self.cursor_rect.set(@x - 10, y, self.width - @x - 17, 32) end end #End of Part Four #Part Five - Making Scene_Status to show level up window when character #get's a new level class Scene_Status def initialize(actor_index = 0, equip_index = 0) @actor_index = actor_index end def main @actor = $game_party.actors[@actor_index] $ACTORD = @actor @status_window = Window_Status.new(@actor) Graphics.transition if $PSPEND_ACTORS[@actor.id - 1] @h = Window_Help.new @h.set_text(PSPEND_LVUPTEXT) @h.y = 100 @h.z = 9997 @c = Window_Command.new(140,PSPEND_ANSWERS) @c.y = 170 @c.x = 200 @c.z = 9998 loop do Graphics.update Input.update update_pspend_lvup_win if $scene != self break end end Graphics.freeze @h.z = 0 @c.z = 1 @status_window.z = 2 @status_window.dispose @h.dispose @c.dispose return end loop do Graphics.update Input.update update if $scene != self break end end @status_window.dispose end def update_pspend_lvup_win @c.update if Input.trigger?(Input::B) $game_system.se_play($data_system.cancel_se) $PSPEND_ACTORS[@actor.id - 1] = false $scene = Scene_Menu.new return end if Input.trigger?(Input::C) case @c.index when 0 $game_system.se_play($data_system.decision_se) $scene = Scene_PSPEND_Main_Screen.new(@actor.id - 1) return when 1 $game_system.se_play($data_system.cancel_se) $PSPEND_ACTORS[@actor.id - 1] = false $scene = Scene_Menu.new return end end end end #End of Part Five #Part Six - Hell is coming...AAAAAAAAH! class Scene_PSPEND_Main_Screen def initialize(actor_id_index) @actor_ind = actor_id_index main end def main @help = Window_Help.new @spend = PSPEND_CUSTOM_WINDOW.new(@actor_ind) @spend.y = 64 @spend.z = 99998 @help.z = 99998 Graphics.transition loop do Graphics.update Input.update update_spend_help_win if $scene != self break end end Graphics.freeze @spend.dispose @help.dispose end def update_spend_help_win @spend.update @help.update @help.set_text(PSPEND_HELP_TEXT[@spend.index]) if Input.trigger?(Input::B) $game_system.se_play($data_system.cancel_se) $scene = Scene_Menu.new $PSPEND_POINTS[@actor_ind] = $PSPEND_RET $PSPEND_ACTORS[@actor_ind] = false return end if Input.repeat?(Input::RIGHT) unless $PSPEND_POINTS[@actor_ind] > 0 $game_system.se_play($data_system.buzzer_se) return end $game_system.se_play($data_system.cursor_se) $PSPEND_POINTS[@actor_ind] -= 1 case @spend.index when 0 $PSPEND_ADD[1] += STRENGTH_ADD when 1 $PSPEND_ADD[2] += AGILITY_ADD when 2 $PSPEND_ADD[3] += DEXTERITY_ADD when 3 $PSPEND_ADD[4] += INTELIGENCE_ADD when 4 $PSPEND_ADD[5] += HP_ADD when 5 $PSPEND_ADD[6] += SP_ADD when 6 $PSPEND_POINTS[@actor_ind] += 1 when 7 $PSPEND_POINTS[@actor_ind] += 1 end @spend.refresh return end if Input.repeat?(Input::LEFT) unless $PSPEND_POINTS[@actor_ind] < $PSPEND_RET $game_system.se_play($data_system.buzzer_se) return end $game_system.se_play($data_system.cursor_se) case @spend.index when 0 if $PSPEND_ADD[1] <= $ACTORD.str $game_system.se_play($data_system.buzzer_se) return end $PSPEND_ADD[1] -= STRENGTH_ADD when 1 if $PSPEND_ADD[2] <= $ACTORD.agi $game_system.se_play($data_system.buzzer_se) return end $PSPEND_ADD[2] -= AGILITY_ADD when 2 if $PSPEND_ADD[3] <= $ACTORD.dex $game_system.se_play($data_system.buzzer_se) return end $PSPEND_ADD[3] -= DEXTERITY_ADD when 3 if $PSPEND_ADD[4] <= $ACTORD.int $game_system.se_play($data_system.buzzer_se) return end $PSPEND_ADD[4] -= INTELIGENCE_ADD when 4 if $PSPEND_ADD[5] <= $ACTORD.maxhp $game_system.se_play($data_system.buzzer_se) return end $PSPEND_ADD[5] -= HP_ADD when 5 if $PSPEND_ADD[6] <= $ACTORD.maxsp $game_system.se_play($data_system.buzzer_se) return end $PSPEND_ADD[6] -= SP_ADD when 6 $PSPEND_POINTS[@actor_ind] -= 1 when 7 $PSPEND_POINTS[@actor_ind] -= 1 end $PSPEND_POINTS[@actor_ind] += 1 @spend.refresh return end if Input.trigger?(Input::C) case @spend.index when 6 @spend.refresh(true) when 7 $ACTORD.str = $PSPEND_ADD[1] $ACTORD.agi = $PSPEND_ADD[2] $ACTORD.dex = $PSPEND_ADD[3] $ACTORD.int = $PSPEND_ADD[4] $ACTORD.maxhp = $PSPEND_ADD[5] $ACTORD.maxsp = $PSPEND_ADD[6] $game_system.se_play($data_system.decision_se) $scene = Scene_Menu.new $PSPEND_ACTORS[@actor_ind] = false return end end end end #End of Part Six - Yipee!!! I made it! #Part Seven - Save Load part! class Scene_Save < Scene_File def write_save_data(file) characters = [] for i in 0...$game_party.actors.size actor = $game_party.actors[i] characters.push([actor.character_name, actor.character_hue]) end Marshal.dump(characters, file) Marshal.dump(Graphics.frame_count, file) $game_system.save_count += 1 $game_system.magic_number = $data_system.magic_number Marshal.dump($game_system, file) Marshal.dump($game_switches, file) Marshal.dump($game_variables, file) Marshal.dump($game_self_switches, file) Marshal.dump($game_screen, file) Marshal.dump($game_actors, file) Marshal.dump($game_party, file) Marshal.dump($game_troop, file) Marshal.dump($game_map, file) Marshal.dump($game_player, file) Marshal.dump($PSPEND_POINTS,file) Marshal.dump($PSPEND_ACTORS,file) Marshal.dump($actor_attr,file) end end # -- And now for the load screen class Scene_Load < Scene_File def read_save_data(file) characters = Marshal.load(file) Graphics.frame_count = Marshal.load(file) $game_system = Marshal.load(file) $game_switches = Marshal.load(file) $game_variables = Marshal.load(file) $game_self_switches = Marshal.load(file) $game_screen = Marshal.load(file) $game_actors = Marshal.load(file) $game_party = Marshal.load(file) $game_troop = Marshal.load(file) $game_map = Marshal.load(file) $game_player = Marshal.load(file) $PSPEND_POINTS = Marshal.load(file) $PSPEND_ACTORS = Marshal.load(file) $actor_attr = Marshal.load(file) if $game_system.magic_number != $data_system.magic_number $game_map.setup($game_map.map_id) $game_player.center($game_player.x, $game_player.y) end $game_party.refresh end end #-- END OF SAVE AND LOAD SCREEN #-- END OF THE SCRIPT #======================= # Written by Drago del fato #=======================
Observação: se você gostou deste post ou ele lhe foi útil de alguma forma, por favor considere apoiar financeiramente a Gaming Room. Fico feliz só de ajudar, mas a contribuição do visitante é muito importante para que este site continua existindo e para que eu possa continuar provendo este tipo de conteúdo e melhorar cada vez mais. Acesse aqui e saiba como. Obrigado!