Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- =begin
- #===============================================================================
- Title: Untargetable State
- Author: Hime
- Date: Sep 25, 2015
- --------------------------------------------------------------------------------
- ** Change log
- Sep 25, 2015
- - when selecting actors, the correct actor index needs to be provided
- Oct 17, 2013
- - compatiblity patch with yanfly's Ace Battle Engine
- Jun 7, 2013
- - bug fix: game crashes when there are no valid targets
- May 29, 2013
- - fixed bug where enemies that are hidden appear in the target window
- May 25, 2013
- - added support for untargetable actors
- - Initial release
- --------------------------------------------------------------------------------
- ** Terms of Use
- * Free to use in non-commercial projects
- * Contact me for commercial use
- * No real support. The script is provided as-is
- * Will do bug fixes, but no compatibility patches
- * Features may be requested but no guarantees, especially if it is non-trivial
- * Credits to Hime Works in your project
- * Preserve this header
- --------------------------------------------------------------------------------
- ** Description
- This script allows you to create a state that prevents you from targeting
- a battler. When the state is applied, the battler cannot be targeted or
- affected by any skills or items.
- --------------------------------------------------------------------------------
- ** Installation
- Place this script below Materials and above Main
- --------------------------------------------------------------------------------
- ** Usage
- In the configuration below, enter the ID's of all states that should have the
- untargetable property
- --------------------------------------------------------------------------------
- ** Compatibility
- This script overwrites the following
- Window_BattleEnemy
- item_max
- enemy
- draw_item
- #===============================================================================
- =end
- $imported = {} if $imported.nil?
- $imported["TH_UntargetableState"] = true
- #===============================================================================
- # ** Configuration
- #===============================================================================
- module TH
- module Untargetable_State
- # List of state ID's that will have untargetable effect
- States = [20]
- end
- end
- #===============================================================================
- # ** Rest of script
- #===============================================================================
- class Game_Action
- alias :th_untargetable_state_make_targets :make_targets
- def make_targets
- th_untargetable_state_make_targets.select {|target| target && target.can_target? }
- end
- end
- class Game_Battler < Game_BattlerBase
- def can_target?
- return false if untargetable_state?
- return false unless exist?
- return true
- end
- #-----------------------------------------------------------------------------
- # Check if untargetable state is applied
- #-----------------------------------------------------------------------------
- def untargetable_state?
- !(@states & TH::Untargetable_State::States).empty?
- end
- end
- class Game_Enemy < Game_Battler
- #-----------------------------------------------------------------------------
- # Lots of hardcoded conditions based on default scripts
- #-----------------------------------------------------------------------------
- alias :th_untargetable_state_can_target? :can_target?
- def can_target?
- return false if dead?
- th_untargetable_state_can_target?
- end
- end
- class Game_Unit
- #-----------------------------------------------------------------------------
- # New. Return an array of battlers that can be targeted
- #-----------------------------------------------------------------------------
- def targetable_members
- members.select {|member| member.can_target? }
- end
- end
- #-------------------------------------------------------------------------------
- # Updated to only draw enemies that can be selected.
- # Basically replaces everything
- #-------------------------------------------------------------------------------
- class Window_BattleEnemy < Window_Selectable
- def item_max
- $game_troop.targetable_members.size
- end
- def enemy
- $game_troop.targetable_members[@index]
- end
- def draw_item(index)
- change_color(normal_color)
- name = $game_troop.targetable_members[index].name
- draw_text(item_rect_for_text(index), name)
- end
- alias :th_untargetable_state_current_item_enabled? :current_item_enabled?
- def current_item_enabled?
- return false if $game_troop.targetable_members[@index].nil?
- th_untargetable_state_current_item_enabled?
- end
- end
- #-------------------------------------------------------------------------------
- # Updated to only draw actors that can be selected.
- # Basically replaces everything
- #-------------------------------------------------------------------------------
- class Window_BattleActor < Window_BattleStatus
- def actor_index
- $game_party.targetable_members[@index].name
- end
- def item_max
- $game_party.targetable_members.size
- end
- def draw_item(index)
- actor = $game_party.targetable_members[index]
- draw_basic_area(basic_area_rect(index), actor)
- draw_gauge_area(gauge_area_rect(index), actor)
- end
- alias :th_untargetable_state_current_item_enabled? :current_item_enabled?
- def current_item_enabled?
- return false if $game_party.targetable_members[index].nil?
- th_untargetable_state_current_item_enabled?
- end
- end
- class Scene_Battle < Scene_Base
- # Overwrite. Need the proper index of the selected actor.
- def on_actor_ok
- BattleManager.actor.input.target_index = @actor_window.actor_index
- @actor_window.hide
- @skill_window.hide
- @item_window.hide
- next_command
- end
- end
- if $imported["YEA-BattleEngine"]
- class Window_BattleActor < Window_BattleStatus
- def draw_item(index)
- return if index.nil?
- clear_item(index)
- actor = $game_party.targetable_members[index] ### changed this
- rect = item_rect(index)
- return if actor.nil?
- draw_actor_face(actor, rect.x+2, rect.y+2, actor.alive?)
- draw_actor_name(actor, rect.x, rect.y, rect.width-8)
- draw_actor_action(actor, rect.x, rect.y)
- draw_actor_icons(actor, rect.x, line_height*1, rect.width)
- gx = YEA::BATTLE::BATTLESTATUS_HPGAUGE_Y_PLUS
- contents.font.size = YEA::BATTLE::BATTLESTATUS_TEXT_FONT_SIZE
- draw_actor_hp(actor, rect.x+2, line_height*2+gx, rect.width-4)
- if draw_tp?(actor) && draw_mp?(actor)
- dw = rect.width/2-2
- dw += 1 if $imported["YEA-CoreEngine"] && YEA::CORE::GAUGE_OUTLINE
- draw_actor_tp(actor, rect.x+2, line_height*3, dw)
- dw = rect.width - rect.width/2 - 2
- draw_actor_mp(actor, rect.x+rect.width/2, line_height*3, dw)
- elsif draw_tp?(actor) && !draw_mp?(actor)
- draw_actor_tp(actor, rect.x+2, line_height*3, rect.width-4)
- else
- draw_actor_mp(actor, rect.x+2, line_height*3, rect.width-4)
- end
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement