Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #==============================================================================
- #
- # • Dhoom Enemy Scan v.1.3
- # drd-workshop.blogspot.com
- # -- Last Updated: 29.05.2015
- # -- Requires: None
- #
- #==============================================================================
- #==============================================================================
- # • HOW TO USE
- #==============================================================================
- #
- # Use this notetag for the skills:
- # <scan_enemy>
- #
- #==============================================================================
- module Dhoom
- module EnemyScanWindow
- #Window x, y, width, height
- XYWH = [0,0,544,416]
- #0 : Normal Window, 1 : Dim Background, 2 : Transparent
- WindowMode = 1
- Enemy_Name_Color = 6
- Start_Y = 24
- HP_Icon = 122
- Element_Icon = []
- #Element_Icon[Element ID] = Icon Index
- Element_Icon[1] = 143
- Element_Icon[2] = 130
- Element_Icon[3] = 96
- Element_Icon[4] = 97
- Element_Icon[5] = 98
- Element_Icon[6] = 99
- Element_Icon[7] = 100
- Element_Icon[8] = 101
- Element_Icon[9] = 102
- Element_Icon[10] = 103
- Element_Resist_Icon = [187,188,184,189,185]
- Element_Info = ["<x1.5>","<1/2>","< - >","< + >"]
- #States = [State id, state id, ... ]
- States = [1,2,3,4,5]
- Drop_IconText = [261, "< Drops >"]
- Steal_IconText = [482, "< Steal >"]
- Gold_Icon = 361
- Scan_Window_Wait = 60
- end
- module REGEXP
- module Skill
- Enemy_Scan = /<(?:scan_enemy|SCAN_ENEMY)>/i
- end
- end
- end
- $imported = {} if $imported.nil?
- $imported["DhoomEnemyScanWindow"] = true
- class RPG::Skill < RPG::UsableItem
- attr_reader :scan_enemy
- def load_notetags_denemy_scan
- @scan_enemy = false
- self.note.split(/[\r\n]+/).each { |line|
- case line
- when Dhoom::REGEXP::Skill::Enemy_Scan
- @scan_enemy = true
- end
- }
- end
- end
- module DataManager
- class <<self; alias load_database_denemy_scan load_database; end
- def self.load_database
- load_database_denemy_scan
- load_notetags_denemy_scan
- end
- def self.load_notetags_denemy_scan
- for obj in $data_skills
- next if obj.nil?
- obj.load_notetags_denemy_scan
- end
- end
- end
- class Window_EnemyScan < Window_Base
- include Dhoom::EnemyScanWindow
- attr_accessor :enemy
- def initialize(enemy=nil)
- super(*XYWH)
- self.opacity = 0 if WindowMode != 0
- @enemy = enemy
- @temp_enemy = @enemy
- create_back_bitmap
- create_back_sprite
- refresh if enemy != nil
- end
- def create_back_bitmap
- @back_bitmap = Bitmap.new(width, height)
- rect1 = Rect.new(0, 0, width, 12)
- rect2 = Rect.new(0, 12, width, height - 24)
- rect3 = Rect.new(0, height - 12, width, 12)
- @back_bitmap.gradient_fill_rect(rect1, back_color2, back_color1, true)
- @back_bitmap.fill_rect(rect2, back_color1)
- @back_bitmap.gradient_fill_rect(rect3, back_color1, back_color2, true)
- end
- def back_color1
- Color.new(0, 0, 0, 160)
- end
- def back_color2
- Color.new(0, 0, 0, 0)
- end
- def create_back_sprite
- @back_sprite = Sprite.new
- @back_sprite.bitmap = @back_bitmap
- @back_sprite.visible = false
- @back_sprite.z = z - 1
- end
- def refresh
- contents.clear
- reset_font_settings
- @line = 0
- draw_enemy_name
- draw_enemy_hp
- draw_enemy_element_icon
- draw_enemy_element_rate
- draw_enemy_state_icon
- draw_enemy_state_rate
- draw_enemy_element_info
- draw_enemy_parameter
- draw_enemy_drop_items
- draw_enemy_steal_items
- draw_enemy_exp_ap_gold
- end
- def draw_enemy_name
- change_color(text_color(Enemy_Name_Color))
- draw_text(0,text_y,contents.width,line_height,@enemy.name,1)
- change_color(normal_color)
- @line += 2
- end
- def draw_enemy_hp
- size1 = text_size(@enemy.hp).width
- contents.font.size = 16
- size2 = text_size(@enemy.mhp).width
- total_size = size1+size2+24
- contents.font.size = 24
- basex = contents.width/2.0-total_size/2.0-4
- draw_icon(HP_Icon,basex,text_y)
- draw_text(basex+24,text_y,size1+8,line_height,@enemy.hp)
- contents.font.size = 16
- draw_text(basex+24+size1,text_y,size2+8,line_height,@enemy.mhp)
- contents.font.size = 24
- @line += 1
- end
- def draw_enemy_element_icon
- size = Element_Icon.compact.size*26+12
- basex = mid_x(size)
- Element_Icon.compact.each_with_index do |icon,index|
- next if icon.nil?
- draw_icon(icon,index*24+basex,text_y)
- end
- @line += 1
- end
- def draw_enemy_element_rate
- size = Element_Icon.compact.size*26+12
- basex = mid_x(size)
- l = 0
- Element_Icon.each_with_index do |ind,i|
- next if ind.nil?
- icon = 4
- if $imported["YEA-Element Absorb"] and @enemy.enemy.element_absorb.include?(i)
- icon = 3
- elsif @enemy.element_rate(i) > 1.0
- icon = 0
- elsif @enemy.element_rate(i) == 0
- icon = 2
- elsif @enemy.element_rate(i) < 1.0
- icon = 1
- end
- draw_icon(Element_Resist_Icon[icon],l*24+basex,text_y)
- l += 1
- end
- @line += 1
- end
- def draw_enemy_state_icon
- size = States.size*26+12
- basex = mid_x(size)
- States.each_with_index do |i,index|
- state = $data_states[i]
- draw_icon(state.icon_index,index*24+basex,text_y)
- end
- @line += 1
- end
- def draw_enemy_state_rate
- size = States.size*26+12
- basex = mid_x(size)
- for i in 0...States.size
- icon = 4
- if @enemy.state_rate(i+1) > 1.0
- icon = 0
- elsif @enemy.state_rate(i+1) == 0
- icon = 2
- elsif @enemy.state_rate(i+1) < 1.0
- icon = 1
- end
- draw_icon(Element_Resist_Icon[icon],i*24+basex,text_y)
- end
- @line += 1
- end
- def draw_enemy_element_info
- size = 5*26
- Element_Info.each do |string|
- size += text_size(string).width
- end
- basex = mid_x(size)
- xx = 0
- for i in 0...4
- draw_icon(Element_Resist_Icon[i],24*i+basex+xx,text_y)
- draw_text(24*i+basex+xx+26,text_y,200,line_height,Element_Info[i])
- xx += text_size(Element_Info[i]).width
- end
- @line += 1
- end
- def draw_enemy_parameter
- contents.font.out_color = text_color(1)
- atk = @enemy.atk_elements
- t = "< ATK >"
- tsize = text_size("< ATK >").width
- size = tsize+@enemy.atk_elements.size*24
- basex = mid_x(size)
- draw_text(basex,text_y,tsize+8,line_height,t)
- atk.each_with_index do |icon,index|
- draw_icon(Element_Icon[icon],basex+tsize+(index*24)+8,text_y)
- end
- @line += 1
- end
- def draw_enemy_drop_items
- kind = 0
- @enemy.enemy.drop_items.each do |item|
- kind += 1 if item.kind == 0
- end
- return if kind == @enemy.enemy.drop_items.size
- contents.font.size = 16
- drops = []
- size = []
- denom = []
- i = 0
- @enemy.enemy.drop_items.each do |item|
- next if item.kind == 0
- drops[i] = [] if drops[i].nil?
- denom[i] = [] if denom[i].nil?
- size[i] = 0 if size[i].nil?
- case item.kind
- when 1
- drop = $data_items[item.data_id]
- when 2
- drop = $data_weapons[item.data_id]
- when 3
- drop = $data_armors[item.data_id]
- end
- size[i] += 24+text_size(drop.name).width+text_size(" #{(100*1.0/item.denominator).to_i}%").width
- denom[i].push(" #{(100*1.0/item.denominator).to_i}%")
- drops[i].push(drop)
- i += 1 if drops[i].size == 4
- end
- contents.font.size = 24
- s = 24+text_size(Drop_IconText[1]).width
- basex = mid_x(s+size[0])
- draw_icon(Drop_IconText[0],basex,text_y)
- draw_text(basex+24,text_y,s,line_height,Drop_IconText[1])
- contents.font.size = 16
- l = 0
- drops.each_with_index do |drop,index|
- if l == 0
- basex = contents.width/2.0-(size[index]+s)/2.0
- else
- basex = contents.width/2.0-size[index]/2.0
- end
- xx = 0
- drop.each_with_index do |item,ii|
- if l == 0
- draw_icon(item.icon_index,24*ii+basex+xx+s,text_y)
- draw_text(24*ii+basex+xx+24+s,text_y,200,line_height,item.name+denom[index][ii])
- else
- draw_icon(item.icon_index,24*ii+basex+xx,text_y)
- draw_text(24*ii+basex+xx+24,text_y,200,line_height,item.name+denom[index][ii])
- end
- xx += text_size(item.name).width+text_size(denom[index][ii]).width
- end
- l += 1
- @line += 1
- end
- end
- def draw_enemy_steal_items
- return if !$imported["YEA-StealItems"]
- return if @enemy.stealable_items.empty?
- contents.font.size = 16
- drops = []
- size = []
- denom = []
- i = 0
- @enemy.stealable_items.each do |item|
- next if item.kind == 0
- drops[i] = [] if drops[i].nil?
- size[i] = 0 if size[i].nil?
- denom[i] = [] if denom[i].nil?
- case item.kind
- when 1
- drop = $data_items[item.data_id]
- when 2
- drop = $data_weapons[item.data_id]
- when 3
- drop = $data_armors[item.data_id]
- end
- size[i] += 24+text_size(drop.name).width+text_size(" #{(item.rate*100).to_i}%").width
- denom[i].push(" #{(item.rate*100).to_i}%")
- drops[i].push(drop)
- i += 1 if drops[i].size == 4
- end
- contents.font.size = 24
- s = 24+text_size(Steal_IconText[1]).width
- basex = mid_x(s+size[0])
- draw_icon(Steal_IconText[0],basex,text_y)
- draw_text(basex+24,text_y,s,line_height,Steal_IconText[1])
- contents.font.size = 16
- l = 0
- drops.each_with_index do |drop,index|
- basex = contents.width/2.0-size[index]/2.0
- basex = contents.width/2.0-(s+size[index])/2.0 if l == 0
- xx = 0
- drop.each_with_index do |item,ii|
- if l == 0
- draw_icon(item.icon_index,24*ii+basex+xx+s,text_y)
- draw_text(24*ii+basex+xx+24+s,text_y,200,line_height,item.name+denom[index][ii])
- else
- draw_icon(item.icon_index,24*ii+basex+xx,text_y)
- draw_text(24*ii+basex+xx+24,text_y,200,line_height,item.name)
- end
- xx += text_size(item.name).width+text_size(denom[index][ii]).width
- end
- l += 1
- @line += 1
- end
- end
- def draw_enemy_exp_ap_gold
- contents.font.size = 24
- if defined?(@enemy.jp)
- text = "#{@enemy.enemy.exp}EXP - #{@enemy.jp}AP - #{@enemy.enemy.gold}#{Vocab::currency_unit}"
- else
- text = "#{@enemy.enemy.exp}EXP - #{@enemy.enemy.gold}#{Vocab::currency_unit}"
- end
- size = text_size(text).width+24
- basex = mid_x(size)
- draw_text(basex,text_y,size,line_height,text)
- draw_icon(Gold_Icon,basex+size-24,text_y)
- @line += 1
- end
- def text_y
- @line*line_height+Start_Y
- end
- def mid_x(size)
- return contents.width/2.0-size/2.0
- end
- def update
- if @temp_enemy != @enemy
- refresh
- @temp_enemy = @enemy
- end
- update_back_sprite
- end
- def update_back_sprite
- @back_sprite.visible = (WindowMode == 1 && self.visible)
- @back_sprite.y = y
- @back_sprite.opacity = openness
- @back_sprite.update
- end
- def dispose
- super
- @back_bitmap.dispose
- @back_sprite.dispose
- end
- end
- class Scene_Battle < Scene_Base
- alias dhoom_enemyscan_scbat_create_all_windows create_all_windows
- def create_all_windows
- dhoom_enemyscan_scbat_create_all_windows
- create_enemyscan_window
- end
- def create_enemyscan_window
- @enemyscan_window = Window_EnemyScan.new
- @enemyscan_window.visible = false
- @enemyscan_wait = false
- end
- if $imported[:TSBS]
- alias dhoom_enemyscan_scbat_tsbs_apply_item tsbs_apply_item
- def tsbs_apply_item(target, item, subj = @subject)
- dhoom_enemyscan_scbat_tsbs_apply_item(target, item, subj)
- if item.is_a?(RPG::Skill) and item.scan_enemy and target.result.used and !@enemyscan_wait
- @enemyscan_window.enemy = target
- @enemyscan_window.show
- @status_window.hide
- @actor_command_window.hide
- @log_window.clear
- @enemyscan_wait = Dhoom::EnemyScanWindow::Scan_Window_Wait
- wait_for_scan_enemy
- end
- end
- end
- alias dhoom_enemyscan_scbat_apply_item_effects apply_item_effects
- def apply_item_effects(target, item)
- dhoom_enemyscan_scbat_apply_item_effects(target, item)
- if item.is_a?(RPG::Skill) and item.scan_enemy and target.result.used
- @enemyscan_window.enemy = target
- @enemyscan_window.visible = true
- @status_window.visible = false
- @log_window.clear
- @enemyscan_wait = Dhoom::EnemyScanWindow::Scan_Window_Wait
- wait_for_scan_enemy
- end
- end
- def wait_for_scan_enemy
- while @enemyscan_wait > 0
- @enemyscan_wait -= 1
- Graphics.update
- Input.update
- update_all_windows
- break if Input.trigger?(:B)
- end
- @enemyscan_wait = false
- @actor_command_window.show
- @status_window.show
- @enemyscan_window.hide
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement