질문과 답변

Extra Form

스크립트는 정말 배우기 어렵네요ㄷ;;

 

제가 액알스크립트를 수정하고싶은데

거기서 몬스터가 죽으면 그자리에 시체가 남고 시간되면 사라지고 리젠되는거져

 

액알은 http://avangs.info/zbxe/?_filter=search&mid=script_center_rgss&search_keyword=%EC%95%A1%EC%95%8C&search_target=title&document_srl=671327

있는데요

 

액알 스크립트 올립니다

그리고 소환 스킬도 없에주세요

 

#=================================================
# ■ Neo A-RPG Module 1.2
#-------------------------------------------------
#  제작자: 패닉(kcss)
#   일부제작: 비밀소년
#=================================================
class Game_Character
  attr_accessor :battler
  attr_accessor :team
  attr_accessor :agent
  attr_accessor :am_bullet
  attr_accessor :attack_delay
  attr_accessor :timer_last_attack
  attr_accessor :o_atk_r
  attr_accessor :sprite_damage
  attr_accessor :sprite_damage_critical
  attr_accessor :receiver
  attr_accessor :summon_setting_time
  attr_accessor :summon_duration_time
  attr_accessor :onwer 
  alias acr_d initialize
  alias acr_u update
  def initialize
    acr_d
    @battler = Game_Battler.new
    @team = 1
    @attack_delay = 1
    @timer_last_attack = 0       
    @range_count = 0
  end
  def update
    acr_u
    return if $game_system.map_interpreter.running? or $game_temp.message_window_showing
    acr_event_setting   
    regen! if b.dead? and regen_?
  end     
  def sprite
    c = self
    if $scene.is_a?(Scene_Map)
      $scene.instance_eval do
        @spriteset.instance_eval do
          @character_sprites.each do |v|
            if v.character == c
              return v
            end
          end
        end
      end
    end
    return nil
  end   
  def moveto_outside
    @x = -10
    @y = -10
    @real_x = @x * 128
    @real_y = @y * 128
    @prelock_direction = 0
  end
  def b
    return @battler
  end 
  def unerase
    @erased = false
    refresh
  end 
  def regen!
    return if not regen_?
    if @regen_count < @regen_time * 40
      @regen_count += 1
      return
    end   
    self.b.damage = nil
    self.b.hp = self.b.maxhp
    @die=false
    moveto(@event.x, @event.y)
    @regen_count = 0
    unerase
  end 
  def regen_?
    return (@regen_time != nil)
  end 
end
 
class Game_Character
  def find_nearest_enemy
    target = nil
    nearest_distance = 999999
    for enemy in all_enemies
      distance = (x - enemy.x).abs + (y - enemy.y).abs
      if distance < nearest_distance
        nearest_distance = distance
        target = enemy
      end
    end
    return target
  end
  #───────────────────────
  # ♧ 타겟에 가까이 이동한다.
  #─────────────────────── 
  def move_toward_target(target)
    return unless target
    sx = @x - target.x
    sy = @y - target.y
    if sx == 0 and sy == 0
      return
    end
    abs_sx = sx.abs
    abs_sy = sy.abs
    if abs_sx == abs_sy
      rand(2) == 0 ? abs_sx += 1 : abs_sy += 1
    end
    if abs_sx > abs_sy
      sx > 0 ? move_left : move_right
      if not moving? and sy != 0
        sy > 0 ? move_up : move_down
      end
    else
      sy > 0 ? move_up : move_down
      if not moving? and sx != 0
        sx > 0 ? move_left : move_right
      end
    end
  end 
  #───────────────────────
  # ♧ 타겟을 조준하여 이동한다.
  #───────────────────────
  def move_aim_target(target)
    return unless target
    sx = @x - target.x
    sy = @y - target.y
    if sx == 0 or sy == 0#and가아님
      return
    end
    abs_sx = sx.abs
    abs_sy = sy.abs
    if abs_sx == abs_sy
      rand(2) == 0 ? abs_sx += 1 : abs_sy += 1
    end
    if abs_sx < abs_sy
      sx > 0 ? move_left : move_right
      if not moving? and sy != 0
        sy > 0 ? move_up : move_down
      end
    else
      sy > 0 ? move_up : move_down
      if not moving? and sx != 0
        sx > 0 ? move_left : move_right
      end
    end
  end 
  #───────────────────────
  # ♧ 타겟을 바라본다
  #───────────────────────
  def turn_toward_target(target)
    return unless target
    sx = @x - target.x
    sy = @y - target.y
    if sx == 0 and sy == 0
      return
    end
    if sx.abs > sy.abs
      sx > 0 ? turn_left : turn_right
    else
      sy > 0 ? turn_up : turn_down
    end
  end 
  #───────────────────────
  # ♧ 타겟으로부터 멀리 이동한다
  #───────────────────────
  def move_away_target(target)
    return unless target
    sx = @x - target.x
    sy = @y - target.y
    if sx == 0 and sy == 0
      return
    end
    abs_sx = sx.abs
    abs_sy = sy.abs
    if abs_sx == abs_sy
      rand(2) == 0 ? abs_sx += 1 : abs_sy += 1
    end
    if abs_sx > abs_sy
      sx > 0 ? move_right : move_left
      if not moving? and sy != 0
        sy > 0 ? move_down : move_up
      end
    else
      sy > 0 ? move_down : move_up
      if not moving? and sx != 0
        sx > 0 ? move_right : move_left
      end
    end
  end 
  def dist(target)
    return (@x - target.x).abs + (@y - target.y).abs
  end 
  def sight_target?(target)
    return unless target
    case @direction
    when 2
      if @x == target.x and @y < target.y
        return true
      end
    when 4
      if @x > target.x and @y == target.y
        return true
      end
    when 6
      if @x < target.x and @y == target.y
        return true
      end
    when 8
      if @x == target.x and @y > target.y
        return true
      end
    end
    return false
  end    
end
def timer
  Graphics.frame_count.to_f / Graphics.frame_rate.to_f
end
class Game_Character
  #--------------------------------------------------------------------------
  # ● 이벤트
  #--------------------------------------------------------------------------
  def acr_event_setting   
    if b.dead? and @action
      return if @die
      treasure
      erase
      moveto_outside
      @die = true
      if @erase_if_dead
        event_remove(self)
      end
      return
    end
    if not b.dead?     
      if sprite != nil and @am_bullet == nil
        sprite.gauge(b.hp.to_f / b.maxhp)
      end     
      if @wait_count == 0
        if @agent
          if not moving?
            eval('agent_' + @agent)
          end         
        end       
      end
    end
    if not @summon_duration_time == nil
      if sprite != nil
        sprite.gauge_summon((timer - @summon_setting_time).to_f / @summon_duration_time.to_f)
      end     
      if timer - @summon_setting_time > @summon_duration_time.to_f
        erase
        moveto_outside
        event_remove(self)       
      end           
    end       
  end
  def battle?
    if b and not b.dead?
      return true
    else
      return false
    end
  end 
  def treasure   
    if @am_enemy == true
      if @summon_duration_time == nil
        if receiver.b.is_a?(Game_Actor)       
          receiver.b.exp += b.exp       
          display_con(sprintf("%s exp:%d 획득",receiver.b.name, b.exp))
        end
        if @drop_item
          if @drop_item_rate
            if rand(100) < @drop_item_rate           
              보관이벤트(@drop_item).moveto(x, y)
            end
          else
            보관이벤트(@drop_item).moveto(x, y)
          end         
        end     
      end     
    end
  end   
  #--------------------------------------------------------------------------
  # ● agent.플레이어
  #--------------------------------------------------------------------------
  def agent_player
    sprite.gauge(b.hp.to_f / b.maxhp)
    if b.weapon_id == 0
      desc = '[근접,40,0]'
    else
      desc = $data_weapons[b.weapon_id].description
    end
    if Input.press?(Input::C)
      if timer - self.timer_last_attack < @attack_delay.to_f
        return
      end     
      self.timer_last_attack = timer
      desc.sub(/[(.+?),([0-9]+),([0-9]+)]/) do      
        @attack_delay = ($2.to_f/40).to_f
        @attack_range = $3.to_i
        eval('weapon_p_'+ $1.to_s)
      end       
      desc.sub(/[([0-9]+)]/) do
        @bullet_id = $1.to_i
      end           
    end
  end 
############################################################################### 
# 여기부터 이벤트쪽 agent, weapon설정 
############################################################################### 
 
  #--------------------------------------------------------------------------
  # ● agent.밀리
  #--------------------------------------------------------------------------
  def agent_근접
    target = find_nearest_enemy
    unless moving?     
      move_toward_target(target)
    end
    unless moving?
      weapon_근접
    end
  end
  #--------------------------------------------------------------------------
  # ● agent.미사일
  #-------------------------------------------------------------------------- 
  def agent_거너
    target = find_nearest_enemy
    if target
      weapon_거너
    end
    if not moving?
      move_aim_target(target)
      turn_toward_target(target)
    end
  end 
  #--------------------------------------------------------------------------
  # ● agent.미사일
  #-------------------------------------------------------------------------- 
  def agent_소환사
    target = find_nearest_enemy
    if target
      weapon_소환
    end
    if not moving?
      move_aim_target(target)
      turn_toward_target(target)
    end
  end   
  #--------------------------------------------------------------------------
  # ● agent.컨트롤_미사일
  #--------------------------------------------------------------------------   
  def agent_컨트롤_거너
    target = find_nearest_enemy
    if dist(target) <= 3 + rand(2)
      move_away_target(target)
      if not moving?
        move_random
      end
    else
      move_aim_target(target)
    end   
    if sight_target?(target)
      weapon_거너
    else
      if not moving?
        move_toward_target(target)
        weapon_거너
      end
    end
  end 
  #--------------------------------------------------------------------------
  # ● agent.미사일
  #--------------------------------------------------------------------------   
  def agent_총알
    weapon_총알
    if not moving?
      move_forward
      if not moving?
        erase
        moveto_outside
        event_remove(self)               
      end
    end
  end    
  #--------------------------------------------------------------------------
  # ● 모든 적
  #--------------------------------------------------------------------------
  def all_enemies
    array = []
    for target in $game_map.events.values
      if not target.b.dead? and target.team != team
        if not target.am_bullet
          array.push(target)
        end       
      end
    end
    target = $game_player
    if not target.b.dead? and target.team != team
      array.push(target)
    end
    return array
  end
  #--------------------------------------------------------------------------
  # ● 근접 공격
  #--------------------------------------------------------------------------
  def weapon_근접
    if timer - self.timer_last_attack < @attack_delay.to_f
      return
    end       
    d = @direction
    new_x = x + (d == 6 ? 1 : d == 4 ? -1 : 0)
    new_y = y + (d == 2 ? 1 : d == 8 ? -1 : 0)
    for target in all_enemies
      if target.x == new_x and target.y == new_y
        self.timer_last_attack = timer
        if self.b.is_a?(Game_Actor)
          target.animation_id = $data_weapons[b.weapon_id].animation2_id
        else         
          target.animation_id = $data_enemies[b.id].animation2_id
        end               
        if self.onwer
          target.receiver = self.onwer
        else
          target.receiver = self
        end       
        target.b.attack_effect(b)
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 총알 공격
  #-------------------------------------------------------------------------- 
  def weapon_거너
    if timer - self.timer_last_attack < @attack_delay.to_f
      return
    end           
    self.timer_last_attack = timer
    d = direction
    new_x = x
    new_y = y
    c = 보관이벤트(@summon_event_id)
    c.battler = self.b.dup
    c.agent = "총알"
    c.team = self.team
    c.am_bullet = true
    c.moveto(new_x, new_y)
    c.instance_eval{@direction = d}
  end 
  #--------------------------------------------------------------------------
  # ● 소환 공격
  #-------------------------------------------------------------------------- 
  def weapon_소환
    if timer - self.timer_last_attack < @attack_delay.to_f
      return
    end           
    self.timer_last_attack = timer
    d = direction
    new_x = x + (d == 6 ? 1 : d == 4 ? -1 : 0)
    new_y = y + (d == 2 ? 1 : d == 8 ? -1 : 0)
    c = 보관이벤트(@summon_event_id)
    c.moveto(new_x, new_y)
    c.instance_eval{@direction = d}
  end   
  #--------------------------------------------------------------------------
  # ● 총알 공격
  #--------------------------------------------------------------------------   
  def weapon_총알
    for target in all_enemies
      if target.x == x and target.y == y and not target.am_bullet
        if self.onwer
          target.receiver = self.onwer
        else
          target.receiver = self
        end
        target.b.attack_effect(b)
        if self.b.is_a?(Game_Actor)
          target.animation_id = $data_weapons[b.weapon_id].animation2_id
        else         
          target.animation_id = $data_enemies[b.id].animation2_id
        end               
        erase
        moveto_outside
        event_remove(self)       
      end
    end
  end 
############################################################################### 
# 여기부터 플레이어쪽 agent, weapon설정 
############################################################################### 
  #--------------------------------------------------------------------------
  # ● 플레이어용_근접 공격
  #--------------------------------------------------------------------------
  def weapon_p_근접
    d = @direction
    new_x = x + (d == 6 ? 1 : d == 4 ? -1 : 0)
    new_y = y + (d == 2 ? 1 : d == 8 ? -1 : 0)
    for target in all_enemies
      if target.x == new_x and target.y == new_y
        if b.weapon_id == 0
          target.animation_id = 4
        else
          target.animation_id = $data_weapons[b.weapon_id].animation2_id
        end       
        target.receiver = self
        target.b.attack_effect(b)
      end
    end
  end   
  #--------------------------------------------------------------------------
  # ● 플레이어용_일직선 공격
  #--------------------------------------------------------------------------
  def weapon_p_일직선
    d = @direction      
    for target in all_enemies
      for r in 1..@attack_range
        new_x = x + (d == 6 ? r : d == 4 ? -r : 0)
        new_y = y + (d == 2 ? r : d == 8 ? -r : 0)
        if target.x == new_x and target.y == new_y
          if b.weapon_id == 0
            target.animation_id = 4
          else
            target.animation_id = $data_weapons[b.weapon_id].animation2_id
          end       
          target.receiver = self
          target.b.attack_effect(b)
        end
      end     
    end
  end     
  #--------------------------------------------------------------------------
  # ● agent.플레이어_미사일
  #--------------------------------------------------------------------------   
  def agent_p_총알
    weapon_p_총알
    if not moving?
      @range_count+=1
      if @range_count > o_atk_r
        erase
        moveto_outside
        event_remove(self)       
      end           
      move_forward
      if not moving?
        erase
        moveto_outside
        event_remove(self)
      end
    end
  end  
  #--------------------------------------------------------------------------
  # ● 플레이어용 총알 공격
  #-------------------------------------------------------------------------- 
  def weapon_p_거너
    d = direction
    new_x = x #+ (d == 6 ? 1 : d == 4 ? -1 : 0)
    new_y = y #+ (d == 2 ? 1 : d == 8 ? -1 : 0)
    if @bullet_id != nil
      c = 보관이벤트(@bullet_id)
      c.battler = self.b.dup
      c.agent = 'p_총알'
      c.team = self.team
      c.o_atk_r = @attack_range
      c.am_bullet = true
      c.moveto(new_x, new_y)
      c.instance_eval{@direction = d}
    end   
  end
  #--------------------------------------------------------------------------
  # ● 플레이어용 총알 공격
  #--------------------------------------------------------------------------   
  def weapon_p_총알
    for target in all_enemies
      if target.x == x and target.y == y and not target.am_bullet
        target.b.attack_effect(b)
        if b.weapon_id == 0
          target.animation_id = 4
        else
          target.animation_id = $data_weapons[b.weapon_id].animation2_id
        end              
        target.receiver = $game_player
        erase
        moveto_outside
        event_remove(self)       
      end
    end
  end   
end
class Sprite_Character
  alias update_before_sprite_addon update
  def update
    update_before_sprite_addon
    if @character.battle?
      b = @character.battler
      if b.damage
        @character.sprite_damage = b.damage
        @character.sprite_damage_critical = b.critical
        b.damage = nil
        b.critical = nil
      end
    end   
    update_damage
  end
  #damage_output
  def damage_output(value, critical)
    dispose_damage
    if value.is_a?(Numeric)
      damage_string = value.abs.to_s
    else
      damage_string = value.to_s
    end
    bitmap = Bitmap.new(80, 24)
    bitmap.font.name = 'Arial Black'
    bitmap.font.size = 16
    bitmap.font.color.set(0, 0, 0)
    bitmap.draw_text(-1, 6-1, 80, 18, damage_string, 1)
    bitmap.draw_text(+1, 6-1, 80, 18, damage_string, 1)
    bitmap.draw_text(-1, 6+1, 80, 18, damage_string, 1)
    bitmap.draw_text(+1, 6+1, 80, 18, damage_string, 1)
    if value.is_a?(Numeric) and value < 0
      bitmap.font.color.set(176, 255, 144)
    else
      bitmap.font.color.set(255, 255, 255)
    end
    bitmap.draw_text(0, 6, 80, 18, damage_string, 1)
    if critical
      bitmap.font.size = 10
      bitmap.font.color.set(0, 0, 0)
      bitmap.draw_text(-1, -1, 80, 10, 'CRITICAL', 1)
      bitmap.draw_text(+1, -1, 80, 10, 'CRITICAL', 1)
      bitmap.draw_text(-1, +1, 80, 10, 'CRITICAL', 1)
      bitmap.draw_text(+1, +1, 80, 10, 'CRITICAL', 1)
      bitmap.font.color.set(255, 255, 255)
      bitmap.draw_text(0, 0, 80, 10, 'CRITICAL', 1)
    end
    @_damage_sprite = ::Sprite.new(self.viewport)
    @_damage_sprite.bitmap = bitmap
    @_damage_sprite.ox = 40
    @_damage_sprite.oy = 10
    @_damage_sprite.x = self.x
    @_damage_sprite.y = self.y - self.oy / 2
    @_damage_sprite.z = self.z+999
    @_damage_duration = 40
  end 
  def update_damage
    if @character.sprite_damage != nil
      damage_output(@character.sprite_damage, @character.sprite_damage_critical)
      @character.sprite_damage = nil
    end
  end 
end

class Sprite_Character < Sprite_Character
  def update
    super
    if @_gauge_setup then
      @_gauge_sprite_b.x = self.x
      @_gauge_sprite_b.y = self.y - self.oy
      @_gauge_sprite.x = self.x
      @_gauge_sprite.y = self.y - self.oy
    end
  end
  def gauge(p)
    setup_gauge if not @_gauge_setup
    @_gauge_sprite.src_rect = Rect.new(0, 0, p * 30, 2)
  end
  def setup_gauge
    dispose_gauge
    @_gauge_setup = true
    @_gauge_sprite = Sprite.new(self.viewport)
    @_gauge_sprite.bitmap = Bitmap.new(30, 2)
    @_gauge_sprite.bitmap.fill_rect(0, 0, 30, 2, Color.new(255, 0, 0))
    @_gauge_sprite.ox = 15
    @_gauge_sprite.oy = -1
    @_gauge_sprite.z = 1000
    @_gauge_sprite_b = Sprite.new(self.viewport)
    @_gauge_sprite_b.bitmap = Bitmap.new(32, 4)
    @_gauge_sprite_b.bitmap.fill_rect(0, 0, 32, 4, Color.new(0, 0, 0))
    @_gauge_sprite_b.bitmap.fill_rect(1, 1, 30, 2, Color.new(0, 0, 0))
    @_gauge_sprite_b.ox = 16
    @_gauge_sprite_b.oy = 0
    @_gauge_sprite_b.z = 999
  end
  def dispose_gauge
    return if not @_gauge_setup
    @_gauge_setup = false
    @_gauge_sprite.dispose
    @_gauge_sprite_b.dispose
  end
  def dispose
    dispose_gauge
    super
  end
end

class Sprite_Character < Sprite_Character
  def update
    super
    if @_gauge_s_setup then
      @_gauge_s_sprite_b.x = self.x
      @_gauge_s_sprite_b.y = self.y - self.oy
      @_gauge_s_sprite.x = self.x
      @_gauge_s_sprite.y = self.y - self.oy
    end
  end
  def gauge_summon(p)
    setup_s_gauge if not @_gauge_s_setup
    @_gauge_s_sprite.src_rect = Rect.new(0, 0, (1-p)*30 , 2)
    #@_gauge_sp_duration = 255
  end
  def setup_s_gauge
    dispose_s_gauge
    @_gauge_s_setup = true
    @_gauge_s_sprite = Sprite.new(self.viewport)
    @_gauge_s_sprite.bitmap = Bitmap.new(30, 2)
    @_gauge_s_sprite.bitmap.fill_rect(0, 0, 30, 2, Color.new(0, 255, 0))
    @_gauge_s_sprite.ox = 15
    @_gauge_s_sprite.oy = -5
    @_gauge_s_sprite.z = 1000
    @_gauge_s_sprite_b = Sprite.new(self.viewport)
    @_gauge_s_sprite_b.bitmap = Bitmap.new(32, 4)
    @_gauge_s_sprite_b.bitmap.fill_rect(0, 0, 32, 4, Color.new(0, 0, 0))
    @_gauge_s_sprite_b.bitmap.fill_rect(1, 1, 30, 2, Color.new(0, 0, 0))
    @_gauge_s_sprite_b.ox = 16
    @_gauge_s_sprite_b.oy = -4
    @_gauge_s_sprite_b.z = 999
  end
  def dispose_s_gauge
    return if not @_gauge_s_setup
    @_gauge_s_setup = false
    @_gauge_s_sprite.dispose
    @_gauge_s_sprite_b.dispose
  end
  def dispose
    dispose_s_gauge
    super
  end
end
#=================================================
# ■ 보관이벤트
#-------------------------------------------------
#  제작자: 비밀소년
#   p.s 안쓰는부분은 없앴음
#=================================================
def event_remove(event)
  remove_sprite event
  $game_map.events.delete event.id
end

def 소환물다지워!
  for dst in 20001..20500
    event = $game_map.events[dst]
    remove_sprite event
    $game_map.events.delete dst
  end
end

def 보관이벤트(id)
  for dst in 20001..20500
    if $game_map.events[dst] == nil
      return 보관이벤트_a(dst, id)
    end
  end
  return nil
end

def 보관이벤트_a(dst, id)
  if not $bo_map
    $bo_map = load_data(sprintf("Data/Map%03d.rxdata", 1))
  end
  $game_map.instance_eval do
    @events[dst] = Game_Event.new(@map_id, $bo_map.events[id])
  end
  $game_map.events[dst].instance_eval do
    @id = dst
  end
  $game_map.events[dst].moveto(rand($game_map.width), rand($game_map.height))
  create_sprite $game_map.events[dst]
 
  return $game_map.events[dst]
end

def create_sprite(c)
  if $scene.is_a?(Scene_Map)
    $scene.instance_eval do
      @spriteset.instance_eval do
        @character_sprites.each do |v|
          if v.character == c
            return v
          end
        end
        sprite = Sprite_Character.new(@viewport1, c)
        @character_sprites.push(sprite)
      end
    end
  end
  return nil
end

def remove_sprite(c)
  if $scene.is_a?(Scene_Map)
    $scene.instance_eval do
      @spriteset.instance_eval do
        delv = nil
        @character_sprites.each do |v|
          if v.character == c
            delv = v
          end
        end
        if delv
          delv.dispose
          @character_sprites.delete delv
        end
      end
    end
  end
  return nil
end
class Game_Character
  #--------------------------------------------------------------------------
  # ● 플레이어용 소환 스킬
  #   사용법: $game_player.소환스킬(이벤트번호, 스킬번호, 딜레이) 
  #-------------------------------------------------------------------------- 
  def 소환스킬(n, v_n, del)
    delay = (del.to_f/40).to_f
    if (timer.to_f - $skill_v[v_n].to_f).to_f < delay.to_f
      return
    end     
    $skill_v[v_n] = timer.to_f
    d = direction
    new_x = x + (d == 6 ? 1 : d == 4 ? -1 : 0)
    new_y = y + (d == 2 ? 1 : d == 8 ? -1 : 0)
    return if not self.passable?(new_x, new_y, 0)
    c = 보관이벤트(n)
    c.moveto(new_x, new_y)
    c.onwer = self
    c.instance_eval{@direction = d}
  end 
  #--------------------------------------------------------------------------
  # ● 플레이어용 근접공격 스킬
  #   사용법: $game_player.근접스킬(데미지배율, 스킬번호, 딜레이, 애니번호)
  #-------------------------------------------------------------------------- 
  def 근접스킬(n, v_n, del, ani)
    delay = (del.to_f/40).to_f
    if (timer.to_f - $skill_v[v_n].to_f).to_f < delay.to_f
      return
    end     
    $skill_v[v_n] = timer.to_f
    d = @direction
    new_x = x + (d == 6 ? 1 : d == 4 ? -1 : 0)
    new_y = y + (d == 2 ? 1 : d == 8 ? -1 : 0)
    for target in all_enemies
      if target.x == new_x and target.y == new_y
        if ani == 0
          target.animation_id = 4
        else
          target.animation_id = ani
        end       
        target.receiver = self
        target.b.attack_effect2(b, n)
      end
    end
  end  
  #--------------------------------------------------------------------------
  # ● 플레이어용 일직선공격 스킬
  #   사용법: $game_player.근접스킬(데미지배율, 스킬번호, 딜레이, 사정거리, 애니번호)
  #-------------------------------------------------------------------------- 
  def 일직선스킬(n, v_n, del, ran, ani)
    delay = (del.to_f/40).to_f
    if (timer.to_f - $skill_v[v_n].to_f).to_f < delay.to_f
      return
    end     
    $skill_v[v_n] = timer.to_f
    d = @direction      
    for target in all_enemies
      for r in 1..ran
        new_x = x + (d == 6 ? r : d == 4 ? -r : 0)
        new_y = y + (d == 2 ? r : d == 8 ? -r : 0)
        if target.x == new_x and target.y == new_y
          if ani == 0
            target.animation_id = 4
          else
            target.animation_id = ani
          end       
          target.receiver = self
          target.b.attack_effect2(b, n)
        end
      end     
    end
  end    
  #--------------------------------------------------------------------------
  # ● 플레이어용 총알 스킬
  #   사용법: $game_player.총알스킬(데미지배율, 스킬번호, 딜레이, 사정거리, 애니번호, 이벤트 번호)
  #-------------------------------------------------------------------------- 
  def 총알스킬(n, v_n, del, ran, ani, ev_n)
    delay = (del.to_f/40).to_f
    if (timer.to_f - $skill_v[v_n].to_f).to_f < delay.to_f
      return
    end     
    $skill_v[v_n] = timer.to_f
    d = @direction      
    new_x = x #+ (d == 6 ? 1 : d == 4 ? -1 : 0)
    new_y = y #+ (d == 2 ? 1 : d == 8 ? -1 : 0)
    c = 보관이벤트(1)
    c.battler = self.b.dup
    $skill_arrow_range = ran
    $skill_damage_rate = n
    $skill_ani = ani
    c.agent = 'p_총알_스킬($skill_arrow_range, $skill_damage_rate, $skill_ani)'
    c.team = self.team
    c.o_atk_r = @attack_range
    c.am_bullet = true
    c.moveto(new_x, new_y)
    c.instance_eval{@direction = d}   
    if @delay == nil or @delay == 0
      @delay = 2
    else
      @delay -= 1
      return
    end    
  end      
  def agent_p_총알_스킬(ran, n, ani)
    weapon_p_총알_스킬(n, ani)
    if not moving?
      @range_count+=1
      if @range_count > ran
        erase
        moveto_outside
        event_remove(self)       
      end           
      move_forward
      if not moving?
        erase
        moveto_outside
        event_remove(self)
      end
    end
  end  
  def weapon_p_총알_스킬(n, ani)
    for target in all_enemies
      if target.x == x and target.y == y and not target.am_bullet
        if ani == 0
          target.animation_id = 4
        else
          target.animation_id = ani
        end       
        target.receiver = self
        target.b.attack_effect2(b, n)
        erase
        moveto_outside
        event_remove(self)       
      end
    end
  end     
end

class Game_Battler
  def attack_effect2(attacker, attack_rate)
    self.critical = false
    hit_result = (rand(100) < attacker.hit)
    if hit_result == true
      atk = [attacker.atk - self.pdef / 2, 0].max
      self.damage = atk * (20 + attacker.str) / 20
      self.damage *= elements_correct(attacker.element_set)
      self.damage /= 100
      if self.damage > 0
        if rand(100) < 4 * attacker.dex / self.agi
          self.damage *= 2
          self.critical = true
        end
        if self.guarding?
          self.damage /= 2
        end
      end
      if self.damage.abs > 0
        amp = [self.damage.abs * 15 / 100, 1].max
        self.damage += rand(amp+1) + rand(amp+1) - amp
      end
      eva = 8 * self.agi / attacker.dex + self.eva
      hit = self.damage < 0 ? 100 : 100 - eva
      hit = self.cant_evade? ? 100 : hit
      hit_result = (rand(100) < hit)
    end
    if hit_result == true
      remove_states_shock
      self.damage *= attack_rate
      self.damage = self.damage.to_i
      self.hp -= self.damage
      @state_changed = false
      states_plus(attacker.plus_state_set)
      states_minus(attacker.minus_state_set)
    else
      self.damage = "Miss"
      self.critical = false
    end
    return true
  end
end
class Skill_Variables
  def initialize
    @data = []
  end
  def [](variable_id)
    if variable_id <= 200 and @data[variable_id] != nil
      return @data[variable_id]
    else
      return 0
    end
  end
  def []=(variable_id, value)
    if variable_id <= 200
      @data[variable_id] = value
    end
  end
end
#=================================================
# ■ comment_command
#-------------------------------------------------
#  제작자: 비밀소년
#  설명: 주석으로 이벤트를 초기화시킵니다.
#=================================================

class Game_Event
  def read_comment(command)
    case command
    when /battler = actor ([0-9]+)/
      @battler = $game_actors[$1.to_i]
      @am_enemy = false
      @action = true
    when /battler = enemy ([0-9]+)/
      @battler = Game_SingleEnemy.new($1.to_i)
      @am_enemy = true
      @action = true
    when /team = ([0-9]+)/
      @team = $1.to_i
    when /agent = (.*)/
      @agent = $1
    when /delay = ([0-9]+)/
      @attack_delay = ($1.to_f/40).to_f
    when /drop_item = ([0-9]+)/
      @drop_item = $1.to_i     
    when /regen_time = ([0-9]+)/
      @regen_time = $1.to_i
      @regen_count = 0
    when /drop_rate = ([0-9]+)/
      @drop_item_rate = $1.to_i
    when /summon_event_id = ([0-9]+)/
      @summon_event_id = $1.to_i     
    when /duration_time = ([0-9]+)/
      @summon_duration_time = $1.to_i           
      @summon_setting_time = timer
    when /script = (.*)/
      eval($1)
    when /erase if dead/
      @erase_if_dead = true
    end
  end
  alias refresh_before_cmtcmd refresh
  def refresh
    refresh_before_cmtcmd
    unless @erased or @page == nil
      unless @my_comment_read_page == @page
        @my_comment_read_page = @page
        for v in @page.list
          if (v.code == 108 or v.code == 408)
            read_comment(v.parameters[0].dup)
          end
        end
      end
    end
  end
end
class Game_Character
  attr_accessor :item_sprite_id
  attr_accessor :color
end

class Sprite_Character
  alias id_item update
  def item_id(text, color)
    @color = color
    bitmap = Bitmap.new(160, 16)
    bitmap.font.name = "굴림"
    bitmap.font.size = 12
    bitmap.font.color.set(0, 0, 0)
    bitmap.draw_text(+1, +1, 160, 16, text, 1)
    if @color == "빨강"
      bitmap.font.color.set(255, 0, 0)
    elsif @color == "초록"
      bitmap.font.color.set(0, 255, 0)
    elsif @color == "파랑"
      bitmap.font.color.set(0, 0, 255)      
    elsif @color == "노랑"
      bitmap.font.color.set(255, 255, 0)      
    elsif @color == "주황"
      bitmap.font.color.set(200, 80, 80)            
    elsif @color == "흰색"
      bitmap.font.color.set(255, 255, 255)                  
    elsif @color == "갈색"
      bitmap.font.color.set(210, 145, 70)                        
    end   
    bitmap.draw_text(0, 0, 160, 16, text, 1)
    @_id_item = Sprite.new(self.viewport)
    @_id_item.bitmap = bitmap
    @_id_item.ox = 80
    @_id_item.oy = 14
    @_id_item.x = self.x
    @_id_item.y = self.y - self.oy / 2
    @_id_item.z = 3000
    @_id_item_visible = true
  end

  def dispose_id_item
    @_id_item.dispose
    @_id_item_visible = false
  end
 
  def update_id_item
    if @character.item_sprite_id != nil
      if not @_id_item_visible
        item_id(@character.item_sprite_id, @character.color)
      end
      @_id_item.x = self.x
      @_id_item.y = self.y - self.oy
    else
      if @_id_item_visible
        dispose_id_item
      end
    end
  end
     
  def update
    id_item
    update_id_item
  end
end

class Game_Event
  alias item_id_update update
  def update
    item_id_update
    if Input.press?(Input::ALT)
      text = @event.name.dup
      text.gsub!(/[[Ii][Tt][Ee][Mm](.+?),(.+?)]/) do
        @item_sprite_id = $1
        if not @item_sprite_id == nil
          @color = $2.to_s
        end     
      end
      @item_sprite_id = nil if @erased
      @item_sprite_id = nil if @character_name == ""
    else
      @item_sprite_id = nil
      @color = nil
    end
  end 
end
#=================================================
# ■ Game_SingleEnemy
#-------------------------------------------------
#  제작자: 비밀소년
#  설명: Game_Troop과 상관없이 Enemy를 초기화시킵니다.
#=================================================

class Game_SingleEnemy < Game_Battler
  #───────────────────────
  # ♧ 오브젝트 초기화
  #───────────────────────
  def initialize(enemy_id)
    super()
    @enemy_id = enemy_id
    enemy = $data_enemies[@enemy_id]
    @battler_name = enemy.battler_name
    @battler_hue = enemy.battler_hue
    @hp = maxhp
    @sp = maxsp
  end
  #--------------------------------------------------------------------------
  # ● 에너미 ID 취득
  #--------------------------------------------------------------------------
  def id
    return @enemy_id
  end
  #--------------------------------------------------------------------------
  # ● 이름의 취득
  #--------------------------------------------------------------------------
  def name
    return $data_enemies[@enemy_id].name
  end
  #--------------------------------------------------------------------------
  # ● 기본 MaxHP 의 취득
  #--------------------------------------------------------------------------
  def base_maxhp
    return $data_enemies[@enemy_id].maxhp
  end
  #--------------------------------------------------------------------------
  # ● 기본 MaxSP 의 취득
  #--------------------------------------------------------------------------
  def base_maxsp
    return $data_enemies[@enemy_id].maxsp
  end
  #--------------------------------------------------------------------------
  # ● 기본 완력의 취득
  #--------------------------------------------------------------------------
  def base_str
    return $data_enemies[@enemy_id].str
  end
  #--------------------------------------------------------------------------
  # ● 기본 손재주가 있음의 취득
  #--------------------------------------------------------------------------
  def base_dex
    return $data_enemies[@enemy_id].dex
  end
  #--------------------------------------------------------------------------
  # ● 기본 민첩함의 취득
  #--------------------------------------------------------------------------
  def base_agi
    return $data_enemies[@enemy_id].agi
  end
  #--------------------------------------------------------------------------
  # ● 기본 마력의 취득
  #--------------------------------------------------------------------------
  def base_int
    return $data_enemies[@enemy_id].int
  end
  #--------------------------------------------------------------------------
  # ● 기본 공격력의 취득
  #--------------------------------------------------------------------------
  def base_atk
    return $data_enemies[@enemy_id].atk
  end
  #--------------------------------------------------------------------------
  # ● 기본 물리 방어의 취득
  #--------------------------------------------------------------------------
  def base_pdef
    return $data_enemies[@enemy_id].pdef
  end
  #--------------------------------------------------------------------------
  # ● 기본 마법 방어의 취득
  #--------------------------------------------------------------------------
  def base_mdef
    return $data_enemies[@enemy_id].mdef
  end
  #--------------------------------------------------------------------------
  # ● 기본 회피 수정의 취득
  #--------------------------------------------------------------------------
  def base_eva
    return $data_enemies[@enemy_id].eva
  end
  #--------------------------------------------------------------------------
  # ● 통상 공격 공격측 애니메이션 ID 의 취득
  #--------------------------------------------------------------------------
  def animation1_id
    return $data_enemies[@enemy_id].animation1_id
  end
  #--------------------------------------------------------------------------
  # ● 통상 공격 대상측 애니메이션 ID 의 취득
  #--------------------------------------------------------------------------
  def animation2_id
    return $data_enemies[@enemy_id].animation2_id
  end
  #--------------------------------------------------------------------------
  # ● 속성 보정치의 취득
  #     element_id : 속성 ID
  #--------------------------------------------------------------------------
  def element_rate(element_id)
    # 속성 유효도에 대응하는 수치를 취득
    table = [0,200,150,100,50,0,-100]
    result = table[$data_enemies[@enemy_id].element_ranks[element_id]]
    # 스테이트에서 이 속성이 방어되고 있는 경우는 반감
    for i in @states
      if $data_states[i].guard_element_set.include?(element_id)
        result /= 2
      end
    end
    # 메소드 종료
    return result
  end
  #--------------------------------------------------------------------------
  # ● 스테이트 유효도의 취득
  #--------------------------------------------------------------------------
  def state_ranks
    return $data_enemies[@enemy_id].state_ranks
  end
  #--------------------------------------------------------------------------
  # ● 스테이트 방어 판정
  #     state_id : 스테이트 ID
  #--------------------------------------------------------------------------
  def state_guard?(state_id)
    return false
  end
  #--------------------------------------------------------------------------
  # ● 통상 공격의 속성 취득
  #--------------------------------------------------------------------------
  def element_set
    return []
  end
  #--------------------------------------------------------------------------
  # ● 통상 공격의 스테이트 변화 (+) 취득
  #--------------------------------------------------------------------------
  def plus_state_set
    return []
  end
  #--------------------------------------------------------------------------
  # ● 통상 공격의 스테이트 변화 (-) 취득
  #--------------------------------------------------------------------------
  def minus_state_set
    return []
  end
  #--------------------------------------------------------------------------
  # ● 액션의 취득
  #--------------------------------------------------------------------------
  def actions
    return $data_enemies[@enemy_id].actions
  end
  #--------------------------------------------------------------------------
  # ● EXP 의 취득
  #--------------------------------------------------------------------------
  def exp
    return $data_enemies[@enemy_id].exp
  end
  #--------------------------------------------------------------------------
  # ● 골드의 취득
  #--------------------------------------------------------------------------
  def gold
    return $data_enemies[@enemy_id].gold
  end
  #--------------------------------------------------------------------------
  # ● 아이템 ID 의 취득
  #--------------------------------------------------------------------------
  def item_id
    return $data_enemies[@enemy_id].item_id
  end
  #--------------------------------------------------------------------------
  # ● 무기 ID 의 취득
  #--------------------------------------------------------------------------
  def weapon_id
    return $data_enemies[@enemy_id].weapon_id
  end
  #--------------------------------------------------------------------------
  # ● 방어구 ID 의 취득
  #--------------------------------------------------------------------------
  def armor_id
    return $data_enemies[@enemy_id].armor_id
  end
  #--------------------------------------------------------------------------
  # ● 트레이닝 전기밥통 출현율의 취득
  #--------------------------------------------------------------------------
  def treasure_prob
    return $data_enemies[@enemy_id].treasure_prob
  end
  #--------------------------------------------------------------------------
  # ● 배틀 화면 Z 좌표의 취득
  #--------------------------------------------------------------------------
  def screen_z
    return screen_y
  end
  #--------------------------------------------------------------------------
  # ● 도망친다
  #--------------------------------------------------------------------------
  def escape
    # 히두후라그를 세트
    @hidden = true
    # 경향 액션을 클리어
    self.current_action.clear
  end
  #--------------------------------------------------------------------------
  # ● 변신
  #     enemy_id : 변신처의 에너미 ID
  #--------------------------------------------------------------------------
  def transform(enemy_id)
    # 에너미 ID 를 변경
    @enemy_id = enemy_id
    # 버틀러 그래픽을 변경
    @battler_name = $data_enemies[@enemy_id].battler_name
    @battler_hue = $data_enemies[@enemy_id].battler_hue
    # 액션재작성
    make_action
  end
  #--------------------------------------------------------------------------
  # ● 액션 작성
  #--------------------------------------------------------------------------
  def make_action
    # 경향 액션을 클리어
    self.current_action.clear
    # 움직일 수 없는 경우
    unless self.movable?
      # 메소드 종료
      return
    end
    # 현재 유효한 액션을 추출
    available_actions = []
    rating_max = 0
    for action in self.actions
      # 턴 조건 확인
      n = $game_temp.battle_turn
      a = action.condition_turn_a
      b = action.condition_turn_b
      if (b == 0 and n != a) or
         (b > 0 and (n < 1 or n < a or n % b != a % b))
        next
      end
      # HP 조건 확인
      if self.hp * 100.0 / self.maxhp > action.condition_hp
        next
      end
      # 레벨 조건 확인
      if $game_party.max_level < action.condition_level
        next
      end
      # 스윗치 조건 확인
      switch_id = action.condition_switch_id
      if switch_id > 0 and $game_switches[switch_id] == false
        next
      end
      # 조건에 해당 : 이 액션을 추가
      available_actions.push(action)
      if action.rating > rating_max
        rating_max = action.rating
      end
    end
    # 최대의 레이팅치를 3 으로서 합계를 계산 (0 이하는 제외)
    ratings_total = 0
    for action in available_actions
      if action.rating > rating_max - 3
        ratings_total += action.rating - (rating_max - 3)
      end
    end
    # 레이팅의 합계가 0 이 아닌 경우
    if ratings_total > 0
      # 난수를 작성
      value = rand(ratings_total)
      # 작성한 난수에 대응하는 것을 경향 액션으로 설정
      for action in available_actions
        if action.rating > rating_max - 3
          if value < action.rating - (rating_max - 3)
            self.current_action.kind = action.kind
            self.current_action.basic = action.basic
            self.current_action.skill_id = action.skill_id
            self.current_action.decide_random_target_for_enemy
            return
          else
            value -= action.rating - (rating_max - 3)
          end
        end
      end
    end
  end
  #───────────────────────
  # ♧ 트룹의 흔적을 없애버린다.
  #───────────────────────
  def index
    return 0
  end
  def screen_x
    return 0
  end
  def screen_y
    return 0
  end
end
class Game_Console
  def initialize
    @display_sprite = Sprite.new
    @display_sprite.x += 5
    @display_sprite.y += 150
    @display_sprite.z = 999999
    @display_sprite.bitmap = Bitmap.new(200,200)
    @display_sprite.bitmap.font.color = Color.new(0,0,0,255)
    @display_sprite.bitmap.font.size = 18
    @display_sprite.src_rect.set(0, 0, 200, 200)
    @display_y = 0
    @number_of_display = 0 
  end   
  def update
    if @display_sprite.nil? or @display_sprite.disposed?
      @display_sprite = Sprite.new
      @display_sprite.x += 5
      @display_sprite.y += 150
      @display_sprite.z = 999999
      @display_sprite.bitmap = Bitmap.new(200,200)
      @display_sprite.bitmap.font.color = Color.new(0,0,0,255)
      @display_sprite.bitmap.font.size = 18
      @display_sprite.src_rect.set(0, 0, 200, 200)
      @display_y = 0
      @number_of_display = 0
    end   
    if @display_y > 0
      @number_of_display += 1
      if @number_of_display > 100
        @display_sprite.bitmap.clear
        @number_of_display = 0
        @display_y = 0
        @display_sprite.oy = 0
        @display_sprite.src_rect.set(0, 0, 200, 200)
      end
    end   
  end 
  def add_to_display(text)
    @number_of_display = 0
    text = text.split("n")
    if @display_y > 0 and @display_y/4 > 32
      @display_sprite.bitmap.clear
      @display_y = 0
    end
    # Draw text
    if text.is_a?(String)
      @display_sprite.bitmap.draw_text(0,@display_y,100,32, "#{text}")
      @display_y += 32
    else
      for t in text
        next if t.nil?
        @display_sprite.bitmap.draw_text(0,@display_y,100,32, "#{t}")
        @display_y += 32
      end
    end
  end
end
class Scene_Map
  alias console_update update
  alias console_ini initialize
  def initialize
    console_ini
    $console = Game_Console.new
    $skill_v = Skill_Variables.new
  end 
  def update      
    console_update
    $console.update   
  end
end
def display_con(text)
  $console.add_to_display(text)
end


List of Articles
종류 분류 제목 글쓴이 날짜 조회 수
공지 묻고 답하기 가이드 습작 2014.06.14 12384
RMXP 공식이 이해가 안갑니다 2 나폴루 2011.10.30 2132
RMVX 애니메이션 배경색 3 file robot 2011.10.30 2147
RMVX 데이터베이스 밸런스 조절법좀요ㅠㅠㅠ 3 초보제작가뉴센 2011.10.30 2276
RMXP kgc메뉴확장 스크립트 에러납니다 3 game 光 ㅋㅋ 2011.10.30 2267
RMXP 액션알피지 제작에 대한 질문 4 불인간 2011.10.26 2102
RMXP 맵 만들때 질문이요... ㅠㅠ 5 file 카잔파이아 2011.10.26 1970
RMXP RPG XP 맵질문~!! 3 shalwk 2011.10.25 2153
RMVX window7 연결프로그램 2 푸른초원 2011.10.25 2242
RMVX 병렬 시행 이벤트 후 캐릭터를 자동이동시켰더니 움직이질 않네요 ㅠ 2 슬픈하품 2011.10.25 2481
RMVX 자동 실행(또는 병렬진행)한 대화가 테스트 화면에서 계속 반복되네요ㅠ 7 슬픈하품 2011.10.24 1930
RMVX rpgvx 탈것에서 내리는 방법 1 사과튤립 2011.10.24 2481
RMVX 저 네이버에 vx게임 만드신 분꺼 보았는데... 2 file 냉혈한도라지 2011.10.24 2040
RMVX 다음 화면으로 자동으로 넘어갈 수 있게 하는 방법 3 슬픈하품 2011.10.24 1857
RMXP 문이 자연스럽게 움직이게 하는방법 1 챔피언 2011.10.23 2416
RMVX rpg vx 맵 어둡게 하는 방법 1 RMadrid 2011.10.23 2379
RMVX RPGVX 게임은돌아가는데 글씨가 안보여요 ㅠ 5 힙간 2011.10.22 2165
RMVX RPG VX<<< BGM이랑 ME 이거 사운드가 안나와요.ㅜㅜ 1 토모야키 2011.10.22 3432
RMXP rpgxp응답없음..헬프미~~ 2 용자건담 2011.10.21 2140
RMXP 공격력 증가방법 2 캉쿤 2011.10.21 2318
RMVX xp툴의 BGM을 vx툴로 옮기고 싶은데요 3 동담 2011.10.21 1903
Board Pagination Prev 1 ... 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 ... 515 Next
/ 515