Confira o Videos Épicos #45!
16 Respostas   912 Visualizações
0 Membros e 1 Visitante estão vendo este tópico.
@Mr.Necklaces Para min, quero apenas o meu nick no script.@Speed Eu faço ou você faz?
# Sistema: Resque Summoner System# Autor: Resque# Email: rogessonb@gmail.com# Data: 27/01/2017# Engine: RPG MAKER Ace VX# Linguagem: RGSS3# Utilização: Livre, desde que devidamente creditado.# Descrição# Invoca um monstro para lutar ao seu lado do grupo.######################### Configuração #########################module ResqueSummon # Level máximo que o summon pode ter. # Valor mínimo = 1 SUMMON_MAX_LEVEL = 99 # Opção de batalha do summon. # Caso o valor for (true), o summon atacará e # usará habilidades sozinho. # Caso o valor for (false), você controlará as ações. AUTO_BATTLE = true # Opção de consumir MP do invocador do summon quando o summon # executar alguma ação (ataque, skill, etc). # Para não consumir MP, o valor deverá ser (false). USE_MP_TO_KEEP_ALIVE = true # Valor de drenagem de mp caso a opção acima seja (true) # O invocador perderá uma porcentagem de MP quando o summon # executar uma ação. # Ex de valores: # 0.6 = 0,6% de drenagem # 1.0 = 1% de drenagem # 5.6 = 5,6% de drenagem # 70.2 = 70.2% de drenagem DRAIN_MP_PERCENTAGE = 0.6 # Quantidade máxima de membros em batalha. # O summon será invocado apenas a quantidade de # de membros no grupo for menor do que o valor definido. MAX_ACTOR_SIZE = 4end######################### Script #########################class Game_Party < Game_Unit attr_accessor :actors alias resque_initialize initialize def initialize resque_initialize @summons = [] end def add_actor(actor_id) @actors.push(actor_id) unless @actors.include?(actor_id) $game_player.refresh $game_map.need_refresh = true end def add_summon(monster_id, actor) summon = Game_Summon.new(monster_id, actor) @actors << summon @summons << summon $game_player.refresh $game_map.need_refresh = true end def remove_summon return if @summons.empty? @actors.pop $game_player.refresh $game_map.need_refresh = true end def clear_all_summons @actors.collect {|actor| @summons << actor if actor.is_a?(Game_Summon) } @summons.each { |summon| @actors.delete(summon) } $game_player.refresh $game_map.need_refresh = true endendclass Scene_Battle < Scene_Base def on_skill_ok @skill = @skill_window.item if @skill.note.match(/<unsummon>/) BattleManager.actor.input.set_skill(@skill.id) BattleManager.actor.last_skill.object = @skill @skill_window.hide $game_party.remove_summon next_command end BattleManager.actor.input.set_skill(@skill.id) BattleManager.actor.last_skill.object = @skill if !@skill.need_selection? @skill_window.hide next_command elsif @skill.for_opponent? select_enemy_selection else select_actor_selection end end def on_item_ok @item = @item_window.item BattleManager.actor.input.set_item(@item.id) if @item.note.match(/<summon>/) monster_id = @item.note.scan(/[0-9]+/).first.to_i $game_party.add_summon(monster_id, BattleManager.actor) @item_window.hide next_command return $game_party.last_item.object = @item end if !@item.need_selection? @item_window.hide next_command elsif @item.for_opponent? select_enemy_selection else select_actor_selection end $game_party.last_item.object = @item endendclass Game_Actors def [](actor_id) if actor_id.is_a? Game_Summon return actor_id end return nil unless $data_actors[actor_id] @data[actor_id] ||= Game_Actor.new(actor_id) endendclass Game_Summon < Game_Actor def initialize(monster_id, master) @master = master @last_skill = Game_BaseItem.new super(monster_id) setup(monster_id) end def setup(monster_id) @actor_id = monster_id @name = actor.name @enemy = $data_enemies[monster_id] @battler_name = @enemy.battler_name @nickname = @battler_name init_graphics @class_id = 1 @level = @master.level @exp = {} @equips = [] init_exp init_skills clear_param_plus recover_all end def use_sprite? return true end def actor $data_enemies[@actor_id] end def max_level ResqueSummon::SUMMON_MAX_LEVEL end def auto_battle? ResqueSummon::AUTO_BATTLE end def init_skills @skills = [] @enemy.actions.each do |action| learn_skill(action.skill_id) end end def init_graphics @character_name = @name @character_index = 3 @face_name = 0 @face_index = 0 end def make_damage_value(user, item) value = item.damage.eval(user, self, $game_variables) value *= item_element_rate(user, item) value *= pdr if item.physical? value *= mdr if item.magical? value *= rec if item.damage.recover? value = apply_critical(value) if @result.critical value = apply_variance(value, item.damage.variance) value = apply_guard(value) if user.is_a?(Game_Summon) drain_master_hp check_master_mp end @result.make_damage(value.to_i, item) end private def check_master_mp $game_party.clear_all_summons if @master.mp <= 0 && ResqueSummon::USE_MP_TO_KEEP_ALIVE end def drain_master_hp @master.mp = drain_rate end def drain_rate (@master.mp - (@master.mp * ResqueSummon::DRAIN_MP_PERCENTAGE / 100)).to_i endendmodule BattleManager def self.process_victory play_battle_end_me replay_bgm_and_bgs $game_message.add(sprintf(Vocab::Victory, $game_party.name)) $game_party.clear_all_summons display_exp gain_gold gain_drop_items gain_exp SceneManager.return battle_end(0) return true endendclass Window_ItemList < Window_Selectable def enable?(item) return false if item.note.match(/<summon>/) && $game_party.actors.size >= ResqueSummon::MAX_ACTOR_SIZE $game_party.usable?(item) endend
#===============================================================================# Jet's Viewed Battle System# By Jet10985(Jet)#===============================================================================# This script will add actor sprites into the battle scene.# This script has: 10 customization options.#===============================================================================# Overwritten Methods:# Game_Actor: use_sprite?, screen_x, screen_y# Sprite_Battler: revert_to_normal# Scene_Battle: show_attack_animation#-------------------------------------------------------------------------------# Aliased methods:# Game_Enemy: screen_x, screen_y# Sprite_Battler: update_origin, update_bitmap# Window_BattleEnemy: update# Window_BattleActor: update# Window_ActorCommand: update#================================================================================beginSet an enemy's attack animation by using this in their notebox:<anim: 50>Replace 50 with the animation id.--------------------------------------------------------------------------------You may use a sprite for a monster instead of a regular battler by using thisnotetag in the monster's notebox:<sprite: ImageName, 0>Replace ImageName with the name of the spritesheet, and 0 with the index on thespritesheet you want the monster to use.=endmodule Jet module VBS # Which direction do actors face on the field? There are 4 options: # :up, :down, :left, or :right. Actor's will direction chosen. ACTOR_ORIENTATION = :left # This will make it so actor's are centered on the screen instead of being # placed in pre-determined lines using START_POINT and SPACE_DIFFERENCE. CENTER_ACTORS = false # This is the x and y starting point for actors. This option may take one of # 2 functions. If CENTER_ACTORS is true, and ACTOR_ORIENTATION is either # :left, or :right, then only the x value will be used as where to center # the actors. If it is :down or :up, only the y value will be used. # If CENTER_ACTORS is false, then this is where actor's will begin to be # placed on screen. START_POINT = [345, 200] # This is how much space is between each actor on the field. SPACE_DIFFERENCE = 27 # If you're using the :left or :right view, this will push each # subsequent actor back by a certain number of pixels, to avoid having # a straight line. SIDEVIEW_PUSH_BACK = 18 # Do you want to reverse the direction and field during an ambush? # (This is when enemies surprise the player and get the first turn) REVERSE_FIELD_FOR_AMBUSH = true # this is how far the actor will move forward when they are selection an # action, as well as executing it. SLIDE_AMOUNT = 127 # This is how far the actor will slide each frame until they reach their # goal of SLIDE_FORWARD. Best used when this is a factor of SLIDE_FORWARD. FRAME_SLIDE = 20 # During selecting an actor command, and during selecting an enemy target, # would you like the selected character to flash? DO_FLASH = true # These are state-based sprite changes. If the actor has one of these states # then the game will search for a sprite of the character's regular sprite # name with the special state tag appended to it. So if Jimmy's sprite # name was $Jimmy, and he had poison inflcted on him, and poison's id was # listed here as ["_poison", 0], it would change Jimmy's in-battle sprite # to $Jimmy_poison at the first sprite index. STATE_SPRITES = { 1 => ["", 0], 2 => ["", 0] } # Do not touch this option. DIR_ORIENT = {right: 6, left: 4, down: 2, up: 8}[ACTOR_ORIENTATION] endend#===============================================================================# DON'T EDIT FURTHER UNLESS YOU KNOW WHAT TO DO.#===============================================================================class Integer def even? self % 2 == 0 end def odd? !even? endendclass RPG::Enemy def animation (f = note.match(/<anim:[ ]*(\d+)>/i)) ? f[1].to_i : 1 end def battle_sprite (f = note.match(/<sprite:[ ]*(.+),[ ]*(\d+)>/i)) ? f[1..2] : false endendmodule BattleManager class << self alias jet3845_on_encounter on_encounter def on_encounter(*args, &block) jet3845_on_encounter(*args, &block) @true_surprise = @surprise end end def self.true_surprise @true_surprise ||= false end def self.player_dir if @true_surprise && Jet::VBS::REVERSE_FIELD_FOR_AMBUSH return 10 - Jet::VBS::DIR_ORIENT else return Jet::VBS::DIR_ORIENT end endendclass Game_Actor def use_sprite? true end def screen_x if [8, 2].include?(BattleManager.player_dir) if Jet::VBS::CENTER_ACTORS x = Graphics.width / 2 x -= 16 x += Jet::VBS::SPACE_DIFFERENCE / 2 if $game_party.members.size.even? x -= ($game_party.members.size / 2 - index) * Jet::VBS::SPACE_DIFFERENCE return x else return Jet::VBS::START_POINT[0] + Jet::VBS::SPACE_DIFFERENCE * index end end return Jet::VBS::START_POINT[0] end alias jet3745_screen_x screen_x def screen_x(*args, &block) x = jet3745_screen_x(*args, &block) case BattleManager.player_dir when 4 x += Jet::VBS::SIDEVIEW_PUSH_BACK * index when 6 x -= Jet::VBS::SIDEVIEW_PUSH_BACK * index end return x if !Jet::VBS::REVERSE_FIELD_FOR_AMBUSH x = Graphics.width - x if BattleManager.true_surprise && [6, 4].include?(BattleManager.player_dir) x end def screen_y if [6, 4].include?(BattleManager.player_dir) if Jet::VBS::CENTER_ACTORS y = Graphics.height / 2 y -= 16 y += Jet::VBS::SPACE_DIFFERENCE / 2 if $game_party.members.size.even? y -= ($game_party.members.size / 2 - index) * Jet::VBS::SPACE_DIFFERENCE return y else return Jet::VBS::START_POINT[1] + Jet::VBS::SPACE_DIFFERENCE * index end end return Jet::VBS::START_POINT[1] end alias jet3745_screen_y screen_y def screen_y(*args, &block) y = jet3745_screen_y(*args, &block) return y if !Jet::VBS::REVERSE_FIELD_FOR_AMBUSH y = Graphics.height - y if BattleManager.true_surprise && [8, 2].include?(BattleManager.player_dir) y end def screen_z 101 + index end alias jet3745_character_name character_name def character_name(*args, &block) name = jet3745_character_name(*args, &block) return name unless SceneManager.scene_is?(Scene_Battle) states.sort {|a, b| b.priority <=> a.priority }.each {|a| if (add = Jet::VBS::STATE_SPRITES[a.id]) return name + add[0] end } return name end alias jet3745_character_index character_index def character_index(*args, &block) index = jet3745_character_index(*args, &block) return index unless SceneManager.scene_is?(Scene_Battle) states.sort {|a, b| b.priority <=> a.priority }.each {|a| if (add = Jet::VBS::STATE_SPRITES[a.id]) return index + add[1] end } return index endendclass Game_Enemy alias jet3745_screen_x screen_x def screen_x(*args, &block) x = jet3745_screen_x(*args, &block) return x if !Jet::VBS::REVERSE_FIELD_FOR_AMBUSH x = Graphics.width - x if BattleManager.true_surprise && [6, 4].include?(BattleManager.player_dir) x end alias jet3745_screen_y screen_y def screen_y(*args, &block) y = jet3745_screen_y(*args, &block) return y if !Jet::VBS::REVERSE_FIELD_FOR_AMBUSH y = Graphics.height - y if BattleManager.true_surprise && [8, 2].include?(BattleManager.player_dir) y end def atk_animation_id1 enemy.animation end def atk_animation_id2 0 end def bat_sprite? !!enemy.battle_sprite end def character_name enemy.battle_sprite[0] end def character_index enemy.battle_sprite[1].to_i end alias jet3745_character_name character_name def character_name(*args, &block) name = jet3745_character_name(*args, &block) return name unless SceneManager.scene_is?(Scene_Battle) states.sort {|a, b| b.priority <=> a.priority }.each {|a| if (add = Jet::VBS::STATE_SPRITES[a.id]) return name + add[0] end } return name end alias jet3745_character_index character_index def character_index(*args, &block) index = jet3745_character_index(*args, &block) return index unless SceneManager.scene_is?(Scene_Battle) states.sort {|a, b| b.priority <=> a.priority }.each {|a| if (add = Jet::VBS::STATE_SPRITES[a.id]) return index + add[1] end } return index endendclass Sprite_Battler alias jet3835_update_bitmap update_bitmap def update_bitmap(*args, &block) jet3835_update_bitmap(*args, &block) if @battler.enemy? if @battler.actor? || @battler.bat_sprite? actor_update_bitmap end #elsif @battler.enemy? # jet3835_update_bitmap(*args, &block) #end end def actor_update_bitmap @timer ||= 0 @index ||= 1 @char_index ||= @battler.character_index @back_time ||= false index = @index char_index = @char_index @timer += 1 (@index += (@back_time ? -1 : 1); @timer = 0) if @timer == 19 if @index == 3 @back_time = true @index = 1 elsif @index == -1 @back_time = false @index = 1 end @char_index = @battler.character_index if @battler.is_a?(Game_Summon) self.bitmap = Cache.battler(@battler.battler_name, 0) self.mirror = true return else bitmap = Cache.character(@battler.character_name) end return if bitmap == @bitmap && index == @index && @char_index == char_index self.bitmap = bitmap sign = @battler.character_name[/^[\!\$]./] if sign && sign.include?('$') cw = bitmap.width / 3 ch = bitmap.height / 4 else cw = bitmap.width / 12 ch = bitmap.height / 8 end dir = BattleManager.player_dir dir = 10 - dir if @battler.is_a?(Game_Enemy) sx = (@battler.character_index % 4 * 3) * cw + (cw * @index) sy = (@battler.character_index / 4 * 4 + (dir - 2) / 2) * ch self.src_rect.set(sx, sy, cw, ch) end alias jet3745_update_origin update_origin def update_origin(*args, &block) jet3745_update_origin(*args, &block) if @battler.enemy? if @battler.actor? || @battler.bat_sprite? actor_update_origin end end def actor_update_origin self.ox = (@actor_ox ||= 0) self.oy = (@actor_oy ||= 0) end def revert_to_normal self.blend_type = 0 self.color.set(0, 0, 0, 0) self.opacity = 255 if bitmap && @battler && !@battler.actor? && !@battler.bat_sprite? self.ox = bitmap.width / 2 if bitmap self.src_rect.y = 0 end end def slide_forward(amount = Jet::VBS::SLIDE_AMOUNT, frame = Jet::VBS::FRAME_SLIDE) dir = BattleManager.player_dir dir = 10 - dir if @battler.is_a?(Game_Enemy) case dir when 2 affect = :@actor_oy frame *= -1 when 4 affect = :@actor_ox amount *= -1 when 6 affect = :@actor_ox frame *= -1 when 8 affect = :@actor_oy amount *= -1 end orig_amount = amount until (orig_amount < 0 ? amount >= 0 : amount <= 0) instance_variable_set(affect, instance_variable_get(affect) + frame) amount += frame SceneManager.scene.spriteset.update Graphics.update end end def slide_backward(amount = Jet::VBS::SLIDE_AMOUNT, frame = Jet::VBS::FRAME_SLIDE) dir = BattleManager.player_dir dir = 10 - dir if @battler.is_a?(Game_Enemy) case dir when 2 affect = :@actor_oy amount *= -1 when 4 affect = :@actor_ox frame *= -1 when 6 affect = :@actor_ox amount *= -1 when 8 affect = :@actor_oy frame *= -1 end orig_amount = amount until (orig_amount < 0 ? amount >= 0 : amount <= 0) instance_variable_set(affect, instance_variable_get(affect) + frame) amount += frame SceneManager.scene.spriteset.update Graphics.update end endendclass Scene_Battle attr_reader :spriteset def show_attack_animation(targets) show_normal_animation(targets, @subject.atk_animation_id1, false) show_normal_animation(targets, @subject.atk_animation_id2, true) end alias jet3746_use_item use_item def use_item(*args, &block) sprite = @spriteset.battler_to_sprite(@subject) if (@subject.actor? || @subject.bat_sprite?) && !@subject.current_action.guard? sprite.slide_forward end jet3746_use_item(*args, &block) if (@subject.actor? || @subject.bat_sprite?) && !@subject.current_action.guard? sprite.slide_backward end endendclass Spriteset_Battle def battler_to_sprite(actor) battler_sprites.each {|a| return a if a.battler == actor } return false endendclass Window_BattleEnemy alias jet3745_update update def update(*args, &block) jet3745_update(*args, &block) if self.active && Jet::VBS::DO_FLASH if Object.const_defined?(:Mouse) $game_troop.alive_members.each {|a| img = SceneManager.scene.spriteset.battler_to_sprite(a) x = img.x - img.ox y = img.y - img.oy if Mouse.area?(x, y, img.src_rect.width, img.src_rect.height) self.index = a.index end } end active_troop = $game_troop.alive_members[@index] sprite = SceneManager.scene.spriteset.battler_to_sprite(active_troop) sprite.start_effect(:whiten) if !sprite.effect? end endendclass Window_BattleActor alias jet3745_update update def update(*args, &block) jet3745_update(*args, &block) if self.active && Jet::VBS::DO_FLASH if Object.const_defined?(:Mouse) $game_party.alive_members.each {|a| img = SceneManager.scene.spriteset.battler_to_sprite(a) x = img.x - img.ox y = img.y - img.oy if Mouse.area?(x, y, img.src_rect.width, img.src_rect.height) self.index = a.index end } end active_troop = $game_party.members[@index] sprite = SceneManager.scene.spriteset.battler_to_sprite(active_troop) sprite.start_effect(:whiten) if !sprite.effect? end endendclass Window_ActorCommand alias jet3745_update update def update(*args, &block) jet3745_update(*args, &block) if self.active && Jet::VBS::DO_FLASH active_troop = @actor sprite = SceneManager.scene.spriteset.battler_to_sprite(active_troop) sprite.start_effect(:whiten) if !sprite.effect? end endendclass Game_Action def guard? item == $data_skills[subject.guard_skill_id] || item.note.match(/<summon>/) endend