VX 스크립트

  일단 장비 레벨 개념 스크립트라고 이름을 붙이긴 했지만

 

초보적인 개념이기도 하고 솔직히 스스로의 힘으로 만들려니 부족한 부분이 참 많아서

 

앞에 초보적이라는 말을 빼버릴 수가 없네요...

 

 

 

  뼈대는 시옷전사님의 인챈트스크롤 스크립트에서 가져왔습니다.  일단 기본적으로 경험치는

 

액터와 동일하게 설정되어 있습니다. 모듈 앞부분의

 

    EXP_BASIS = 40
    EXP_INFLATION = 50

 

부분이 필요 경험치량 계산에 쓰이는 부분입니다. 액터란의 경험치 보정의

 

기본치와 증가도를 가져온 겁니다 . 기본치는 BASIS,  증가도는 INFLATION

 

 

  경험치를 습득하기 위해서는 장비의 메모란에 <equiplevel>를 기입해야 합니다. 기입된 장비들은

 

장비란이나 아이템란에서 레벨이 표시됩니다. 안타깝지만 능력부족으로 경험치 부분은 묘화를 못했습니다.

 

그러면 메모란에 기입만 하면 되냐... 라고 하면 대답은 아닙니다...

 

스크립트 앞부분에서 아이템마다 제한 레벨을 설정해주어야 하며 또한 능력 개방 레벨도 지정해줘야 합니다.

 

무슨 뜻이냐면 무기라면 선제공격, 연속공격, 양손무기, 잦은 크리티컬 부분을 일컬음이고 방어구라면

 

크리티컬 방지, 소비마력절반, 획득 경험치 두배, 자동체력회복 옵션을 말하는 겁니다.

 

지정한 레벨이 되면 옵션이 개방 ( on, 스크립트로 말하면 true) 되지만 양손무기는 체크된 무기에 한해서

 

지정한 레벨이 되면 한손무기가 됩니다 ... 사실 양손무기라는게 페널티에 가까운 옵션이니까요.. (방패를 쓸수 없다

 

던가... 이도류에서 한손을 못쓴다던가...)

 

 

 능력 상승부분은 명중률이나 회피율은 레벨당 +1입니다. 이 부분은 함수 부분에서 따로 정의할 수 있습니다. 장비

 

레벨 제한이 높다면 ( 예를 들어 99쯤 된다던가 하면) 이부분은 필히 수정해야겠죠... 잘못하면 명중률은 그렇다쳐도

 

회피율 400정도 되는 캐릭도 나올 것 같네요 @ㅅ@;;;

 

 다른 부분은 기본 능력치의 10분의 1만큼 가산됩니다. 공격력이 10인 무기라면 레벨 1이 되면 공격력이 11,  레벨2

 

가 되면 공격력은 12가 되겠죠.

 

 

주의 사항은  첫째, 제 능력부족으로 장비 경험치 묘화가 안됩니다.. 레벨업을 할지 안할지는 저도 잘 모릅니다... 게다가

 

한번에 많은 렙업이 되는 걸 방지하기 위해서 한번에 999999999경험치를 먹어도 1업만 하도록 설정해두었습니다.

 

둘째, 장비의 속성과 상태부분또한 제 능력부족으로 설정하지 못했습니다. 이래저래 만져봤는데 속성유효도를 E로 지정해둔

 

몹이 데미지가 팍팍 들어가더라구요 ( 원래는 속성유효도를 E로 지정하면 0%, 즉 데미지를 입으면 안됩니다;;;;)

 

셋째, 이 스크립트는 앞에서도 말했던 것처럼 시옷전사님의 인챈트 스크롤 스크립트에 뼈대를 두고 있습니다... 따라서

 

인챈트 스크롤 스크립트와 양립이 안됩니다... 같은 함수를 재정의하고 있어서 양립되게 하려면 좀 만져줘야 합니다.

 

 

 

그냥 한번 살펴보시고 뜯어보시는 용도로 쓰시는 게 적당할 것 같네요

 

아래는 스크립트 원본, 예제를 미디어파이어로 첨부하겠습니다 .

 

P.S 미디어파이어로 예제를 첨부하려했는데 오늘따라 미디어파이어가 말썽이네요... 필요하신분은 쪽지 주시면

 

메일로 보내드릴게요...

 

-----------------------------------------------------------------------------------------------------------------------------------------------

 

음... 약간 수정했습니다. 일단 기본적으로는 경험치 쌓는 게 불가능하고요 앞부분에서 지정된 스크롤로

 

각성 시켜야 경험치를 얻을 수 있습니다. 그 다음에는 약간 버그 수정 정도네요.

 

아래는 스크립트 원본, 그 밑에는 이 스크립트가 스킬 필요조건이랑 호환이 잘 안되서 약간 수정해서 호환되게

 

만든 스킬 필요조건 스크립트 입니다.

-------------------------------------------------------------------------------------------------------------------------------------------

 

#==============================================================================
# ■ IMIR_EquipLevel
#------------------------------------------------------------------------------
# 장비에 레벨 개념을 부여하는 스크립트 입니다. 아래 모듈에서 세세하게 설정할 수 있으나
# 각성 스크롤로 각성시킨 장비에 한해서 경험치 습득이 가능합니다.
# 각성 요건은 장비의 한계 레벨이 0 초과일 것. 입니다.
# 기본적으로 경험치는 액터와 동일하게 습득하며 장비 레벨업시 기존의 10분의 1만큼
# 능력이 상승합니다( 공, 방, 정, 민, 가격 )
# 명중률과 회피율, 무기자체 크리티컬은 장비레벨의 10분의 1만큼 상승합니다.
# 속성과 상태에 대해서는 아직 미흡하여 차후 추가하도록 하겠습니다
# ( 가능하다면 ㅎㅅㅎ;)
# 시옷전사님의 인챈트스크롤 스크립트를 참조하였으며 인챈트스크롤 스크립트와는
# 양립이 불가능합니다 ( 같은 함수를 재정의하기 때문에...)
#==============================================================================

module IMIR
  module EquipLevel
    #--------------------------------------------------------------------------
    # ● 장비 경험치 기본값 설정.
    #--------------------------------------------------------------------------
    EXP_BASIS = 40
    EXP_INFLATION = 50
    #--------------------------------------------------------------------------
    # ● 무기 각성 주문서 일람.
    #--------------------------------------------------------------------------
    SCROLL_FOR_WEAPON = [1]
    #--------------------------------------------------------------------------
    # ● 방어구 각성 주문서 일람. 부위별로 하나씩 필요.
    #--------------------------------------------------------------------------
    SCROLL_FOR_ARMOR = [32, 33, 34, 35]
    #--------------------------------------------------------------------------
    # ● 무기 별 한계 레벨 설정
    #   ex. when 1 then return 1, when (무기 번호) then return (한계 레벨)
    #--------------------------------------------------------------------------
    def self.weapon_possible_level(weapon_id)
      case weapon_id
      when 14 then return 99
      when 31 then return 1
      else
        return 0
      end
    end
    #--------------------------------------------------------------------------
    # ● 무기 별 양손사용 해제 레벨 설정
    #   ex. when 1 then return 1, when (무기 번호) then return (양손사용 해제 레벨)
    #--------------------------------------------------------------------------
    def self.one_hand_level(weapon_id)
      case weapon_id
      when 31 then return 1
      else
        return 99
      end
    end
    #--------------------------------------------------------------------------
    # ● 무기 별 선제공격 개방 레벨 설정
    #   ex. when 1 then return 1, when (무기 번호) then return (선제공격 개방 레벨)
    #--------------------------------------------------------------------------
    def self.fast_attack_level(weapon_id)
      case weapon_id
      when 14 then return 4
      else
        return 99
      end
    end
    #--------------------------------------------------------------------------
    # ● 무기 별 연속공격 개방 레벨 설정
    #   ex. when 1 then return 1, when (무기 번호) then return (연속공격 개방 레벨)
    #--------------------------------------------------------------------------
    def self.dual_attack_level(weapon_id)
      case weapon_id
      when 14 then return 5
      else
        return 99
      end
    end
    #--------------------------------------------------------------------------
    # ● 무기 별 잦은치명타 개방 레벨 설정
    #   ex. when 1 then return 1, when (무기 번호) then return (잦은치명타 개방 레벨)
    #--------------------------------------------------------------------------
    def self.cri_bonus_level(weapon_id)
      case weapon_id
      when 14 then return 2
      when 2 then return 3
      else
        return 99
      end
    end
    #--------------------------------------------------------------------------
    # ● 방어구 별 한계 레벨 설정
    #   ex. when 1 then return 1, when (방어구 번호) then return (한계 레벨)
    #--------------------------------------------------------------------------
    def self.armor_possible_level(armor_id)
      case armor_id
      when 1 then return 2
      when 2 then return 13
      when 7 then return 3
      when 13 then return 4
      else
        return 0
      end
    end
    #--------------------------------------------------------------------------
    # ● 방어구 별 치명타무효 개방 레벨 설정
    #   ex. when 1 then return 1, when (방어구 번호) then return (치명타무효 개방 레벨)
    #--------------------------------------------------------------------------
    def self.prevent_cri_level(armor_id)
      case armor_id
      when 1 then return 2
      when 2 then return 2
      else
        return 99
      end
    end
    #--------------------------------------------------------------------------
    # ● 방어구 별 소모마력감소 개방 레벨 설정
    #   ex. when 1 then return 1, when (방어구 번호) then return (소모마력감소 개방 레벨)
    #--------------------------------------------------------------------------
    def self.half_mp_level(armor_id)
      case armor_id
      when 1 then return 2
      when 2 then return 2
      else
        return 99
      end
    end
    #--------------------------------------------------------------------------
    # ● 방어구 별 추가경험습득 개방 레벨 설정
    #   ex. when 1 then return 1, when (방어구 번호) then return (추가경험습득 개방 레벨)
    #--------------------------------------------------------------------------
    def self.double_exp_level(armor_id)
      case armor_id
      when 7 then return 2
      when 13 then return 2
      else
        return 99
      end
    end
    #--------------------------------------------------------------------------
    # ● 방어구 별 자동체력회복 개방 레벨 설정
    #   ex. when 1 then return 1, when (방어구 번호) then return (자동체력회복 개방 레벨)
    #--------------------------------------------------------------------------
    def self.auto_hp_level(armor_id)
      case armor_id
      when 7 then return 2
      when 13 then return 2
      else
        return 99
      end
    end
   
  end
end
#==============================================================================
# ■ RPG::Weapon
#------------------------------------------------------------------------------
# 무기를 위한 자료구조를 포함한 모듈입니다.
#==============================================================================

module RPG
  class Weapon < BaseItem
    attr_accessor :open_flag # 각성플래그
    attr_accessor :w_cri #무기 크리티컬
    #--------------------------------------------------------------------------
    # ● 무기의 각성플래그 취득
    #--------------------------------------------------------------------------
    def open_flag
      @open_flag = false if @open_flag == nil
      return @open_flag
    end
    #--------------------------------------------------------------------------
    # ● 무기의 가격 취득
    #--------------------------------------------------------------------------
    def price
      @bonus_price = 0 if @bonus_price == nil
      return @price + @bonus_price
    end
    #--------------------------------------------------------------------------
    # ● 무기의 명중률 취득
    #--------------------------------------------------------------------------
    def hit
      @bonus_hit = 0 if @bonus_hit == nil
      return @hit + @bonus_hit
    end
    #--------------------------------------------------------------------------
    # ● 무기의 공격력 취득
    #--------------------------------------------------------------------------
    def atk
      @bonus_atk = 0 if @bonus_atk == nil
      return @atk + @bonus_atk
    end
    #--------------------------------------------------------------------------
    # ● 무기의 방어력 취득
    #--------------------------------------------------------------------------
    def def
      @bonus_def = 0 if @bonus_def == nil
      return @def + @bonus_def
    end
    #--------------------------------------------------------------------------
    # ● 무기의 정신력 취득
    #--------------------------------------------------------------------------
    def spi
      @bonus_spi = 0 if @bonus_spi == nil
      return @spi + @bonus_spi
    end
    #--------------------------------------------------------------------------
    # ● 무기의 민첩성 취득
    #--------------------------------------------------------------------------
    def agi
      @bonus_agi = 0 if @bonus_agi == nil
      return @agi + @bonus_agi
    end
    #--------------------------------------------------------------------------
    # ● 무기 자체의 크리티컬 취득
    #--------------------------------------------------------------------------
    def w_cri
      @w_cri = 0 if @w_cri == nil
      return @w_cri
    end
    #--------------------------------------------------------------------------
    # ● 무기의 양손 무기 판정 취득
    #--------------------------------------------------------------------------
    def two_handed
      @bonus_two_handed = true if @bonus_two_handed == nil
      if @bonus_two_handed
        return @two_handed
      else
        return @bonus_two_handed
      end
    end
    #--------------------------------------------------------------------------
    # ● 무기의 선제 공격 판정 취득
    #--------------------------------------------------------------------------
    def fast_attack
      @bonus_fast_attack = false if @bonus_fast_attack == nil
      return @fast_attack || @bonus_fast_attack
    end
    #--------------------------------------------------------------------------
    # ● 무기의 연속 공격 판정 취득
    #--------------------------------------------------------------------------
    def dual_attack
      @bonus_dual_attack = false if @bonus_dual_attack == nil
      return @dual_attack || @bonus_dual_attack
    end
    #--------------------------------------------------------------------------
    # ● 무기의 잦은 치명타 판정 취득
    #--------------------------------------------------------------------------
    def critical_bonus
      @bonus_critical_bonus = false if @bonus_critical_bonus == nil
      return @critical_bonus || @bonus_critical_bonus
    end
    #--------------------------------------------------------------------------
    # ● 무기인가 아닌가의 판정
    #--------------------------------------------------------------------------
    def weapon?
      return true
    end
    #--------------------------------------------------------------------------
    # ● 방어구인가 아닌가의 판정
    #--------------------------------------------------------------------------
    def armor?
      return false
    end
    #--------------------------------------------------------------------------
    # ● 주문서인가 아닌가의 판정
    #--------------------------------------------------------------------------
    def scroll?
      return IMIR::EquipLevel::SCROLL_FOR_WEAPON.include?(@id)
    end
    #--------------------------------------------------------------------------
    # ● 아군 효과 범위인가 아닌가의 판정
    #--------------------------------------------------------------------------
    def for_friend?
      return true
    end
    #--------------------------------------------------------------------------
    # ● 아군 전체 효과 범위인가 아닌가의 판정
    #--------------------------------------------------------------------------
    def for_all?
      return false
    end
    #--------------------------------------------------------------------------
    # ● 무기의 레벨 취득
    #--------------------------------------------------------------------------
    def item_level
      @item_level = 0 if @item_level == nil
      return @item_level
    end
    #--------------------------------------------------------------------------
    # ● 무기의 경험치 취득
    #--------------------------------------------------------------------------
    def item_exp
      @item_exp = 0 if @item_exp == nil
      return @item_exp
    end
    #--------------------------------------------------------------------------
    # ● 경험치 계산
    #--------------------------------------------------------------------------
    def make_item_exp_list
      @item_exp_list = Array.new(101) if @item_exp_list == nil
      @item_exp_list[1] = 100
      @item_exp_list[100] = 0
      m = IMIR::EquipLevel::EXP_BASIS
      n = 0.75 + IMIR::EquipLevel::EXP_INFLATION / 200.0;
      for i in 2..99
        @item_exp_list[i] = @item_exp_list[i-1] + Integer(m)
        m *= 1 + n;
        n *= 0.9;
      end
    end
    #--------------------------------------------------------------------------
    # ● 경험치의 변경
    #     exp  : 새로운 경험치
    #     show : 레벨업 표시 플래그
    #--------------------------------------------------------------------------
    def change_item_exp(exp, show)
      @item_level = 0 if @item_level == nil
      make_item_exp_list if @item_exp_list == nil
      last_level = @item_level
      @item_exp = [[exp, 9999999].min, 0].max
      if @item_exp >= @item_exp_list[@item_level+1] and @item_exp_list[@item_level+1] > 0
        item_level_up
      end
      if show and @item_level > last_level
        display_item_level_up
      end
    end
    #--------------------------------------------------------------------------
    # ● 레벨업
    #--------------------------------------------------------------------------
    def item_level_up
      @bonus_price = 0 if @bonus_price == nil
      @bonus_hit = 0 if @bonus_hit == nil
      @bonus_atk = 0 if @bonus_atk == nil
      @bonus_def = 0 if @bonus_def == nil
      @bonus_spi = 0 if @bonus_spi == nil
      @bonus_agi = 0 if @bonus_agi == nil
      @bonus_two_handed = true if @bonus_two_handed == nil
      @bonus_fast_attack = false if @bonus_fast_attack == nil
      @bonus_dual_attack = false if @bonus_dual_attack == nil
      @bonus_critical_bonus = false if @bonus_critical_bonus == nil
      @bonus_element_set = [] if @bonus_element_set == nil
      @bonus_state_set = [] if @bonus_state_set == nil
      @w_cri = 0 if @w_cri == nil
      @item_level = 0 if @item_level == nil
     
      unless @item_level >= IMIR::EquipLevel.weapon_possible_level(@id)
        @item_level += 1
        @item_exp = @item_exp_list[@item_level]
        @bonus_price += $data_weapons[@id].price / 10
        @w_cri += @item_level / 10
        @bonus_hit += @item_level / 10
        @bonus_atk += $data_weapons[@id].atk / 10
        @bonus_def += $data_weapons[@id].def / 10
        @bonus_spi += $data_weapons[@id].spi / 10
        @bonus_agi += $data_weapons[@id].agi / 10
        @bonus_two_handed = false if @item_level >= IMIR::EquipLevel.one_hand_level(@id)
        @bonus_fast_attack = true if @item_level >= IMIR::EquipLevel.fast_attack_level(@id)
        @bonus_dual_attack = true if @item_level >= IMIR::EquipLevel.dual_attack_level(@id)
        @bonus_critical_bonus = true if @item_level >= IMIR::EquipLevel.cri_bonus_level(@id)
      else
        @item_exp = @item_exp_list[IMIR::EquipLevel.weapon_possible_level(@id)]
      end
    end
    #--------------------------------------------------------------------------
    # ● 레벨업 메세지의 표시
    #     new_skills : 새롭게 습득한 스킬의 배열
    #--------------------------------------------------------------------------
    def display_item_level_up
      $game_message.new_page
      text = sprintf("%s의 %s이 %s로 올랐다!", @name, Vocab::level, @item_level)
      $game_message.texts.push(text)
      if @item_level / 10 > (@item_level - 1) / 10
        text = sprintf("%s의 명중률이 %s 올랐다!", @name, 1)
        $game_message.texts.push(text)
      end
      if @item_level / 10 > (@item_level - 1) / 10
        text = sprintf("%s의 크리티컬이 %s 올랐다!", @name, 1)
        $game_message.texts.push(text)
      end
      if $data_weapons[@id].atk / 10 > 0
        text = sprintf("%s의 %s이 %s 올랐다!", @name, Vocab::atk, $data_weapons[@id].atk / 10)
        $game_message.texts.push(text)
      end
      if $data_weapons[@id].def / 10 > 0
        text = sprintf("%s의 %s이 %s 올랐다!", @name, Vocab::def, $data_weapons[@id].def / 10)
        $game_message.texts.push(text)
      end
      if $data_weapons[@id].spi / 10 > 0
        text = sprintf("%s의 %s이 %s 올랐다!", @name, Vocab::spi, $data_weapons[@id].spi / 10)
        $game_message.texts.push(text)
      end       
      if $data_weapons[@id].agi / 10 > 0
        text = sprintf("%s의 %s이 %s 올랐다!", @name, Vocab::agi, $data_weapons[@id].agi / 10)
        $game_message.texts.push(text)
      end     
      if @item_level == IMIR::EquipLevel.one_hand_level(@id)
        text= sprintf("%s는 한손 사용이 가능해졌다!", @name)
        $game_message.texts.push(text)
      end
      if @item_level == IMIR::EquipLevel.fast_attack_level(@id)
        text= sprintf("%s는 선제 공격이 가능해졌다!", @name)
        $game_message.texts.push(text)
      end
      if @item_level == IMIR::EquipLevel.dual_attack_level(@id)
        text= sprintf("%s는 연속 공격이 가능해졌다!", @name)
        $game_message.texts.push(text)
      end
      if @item_level == IMIR::EquipLevel.cri_bonus_level(@id)
        text= sprintf("%s의 크리티컬률이 올라갔다!", @name)
        $game_message.texts.push(text)
      end
    end
    #--------------------------------------------------------------------------
    # ● 경험치의 획득
    #     exp  : 경험치의 증가량
    #     show : 레벨업 표시 플래그
    #--------------------------------------------------------------------------
    def gain_item_exp(exp, show)
      if @open_flag
        @item_exp = 0 if @item_exp == nil
        change_item_exp(@item_exp + exp, show)
      end
    end
    #--------------------------------------------------------------------------
    # ● 무기의 각성
    #--------------------------------------------------------------------------
    def enchant(weapon)
       @open_flag = true if IMIR::EquipLevel.weapon_possible_level(weapon.id) > 0
    end
   
  end
end
#==============================================================================
# ■ RPG::Armor
#------------------------------------------------------------------------------
# 방어구를 위한 자료구조를 포함한 모듈입니다.
#==============================================================================
module RPG
  class Armor < BaseItem
    attr_accessor :open_flag # 각성플래그
    #--------------------------------------------------------------------------
    # ● 방어구의 각성플래그 취득
    #--------------------------------------------------------------------------
    def open_flag
      @open_flag = false if @open_flag == nil
      return @open_flag
    end
    #--------------------------------------------------------------------------
    # ● 방어구의 가격 취득
    #--------------------------------------------------------------------------
    def price
      @bonus_price = 0 if @bonus_price == nil
      return @price + @bonus_price
    end
    #--------------------------------------------------------------------------
    # ● 방어구의 회피율 취득
    #--------------------------------------------------------------------------
    def eva
      @bonus_eva = 0 if @bonus_eva == nil
      return @eva + @bonus_eva
    end
    #--------------------------------------------------------------------------
    # ● 방어구의 공격력 취득
    #--------------------------------------------------------------------------
    def atk
      @bonus_atk = 0 if @bonus_atk == nil
      return @atk + @bonus_atk
    end
    #--------------------------------------------------------------------------
    # ● 방어구의 방어력 취득
    #--------------------------------------------------------------------------
    def def
      @bonus_def = 0 if @bonus_def == nil
      return @def + @bonus_def
    end
    #--------------------------------------------------------------------------
    # ● 방어구의 정신력 취득
    #--------------------------------------------------------------------------
    def spi
      @bonus_spi = 0 if @bonus_spi == nil
      return @spi + @bonus_spi
    end
    #--------------------------------------------------------------------------
    # ● 방어구의 민첩성 취득
    #--------------------------------------------------------------------------
    def agi
      @bonus_agi = 0 if @bonus_agi == nil
      return @agi + @bonus_agi
    end
    #--------------------------------------------------------------------------
    # ● 방어구의 치명타 방지 판정 취득
    #--------------------------------------------------------------------------
    def prevent_critical
      @bonus_prevent_critical = false if @bonus_prevent_critical == nil
      return @prevent_critical || @bonus_prevent_critical
    end
    #--------------------------------------------------------------------------
    # ● 방어구의 소비 MP 절반 판정 취득
    #--------------------------------------------------------------------------
    def half_mp_cost
      @bonus_half_mp_cost = false if @bonus_half_mp_cost == nil
      return @half_mp_cost || @bonus_half_mp_cost
    end
    #--------------------------------------------------------------------------
    # ● 방어구의 획득 경험치 2배 판정 취득
    #--------------------------------------------------------------------------
    def double_exp_gain
      @bonus_double_exp_gain = false if @bonus_double_exp_gain == nil
      return @double_exp_gain || @bonus_double_exp_gain
    end
    #--------------------------------------------------------------------------
    # ● 방어구의 HP 자동 회복 판정 취득
    #--------------------------------------------------------------------------
    def auto_hp_recover
      @bonus_auto_hp_recover = false if @bonus_auto_hp_recover == nil
      return @auto_hp_recover || @bonus_auto_hp_recover
    end
    #--------------------------------------------------------------------------
    # ● 방어구의 레벨 취득
    #--------------------------------------------------------------------------
    def item_level
      @item_level = 0 if @item_level == nil
      return @item_level
    end
    #--------------------------------------------------------------------------
    # ● 방어구의 경험치 취득
    #--------------------------------------------------------------------------
    def item_exp
      @item_exp = 0 if @item_exp == nil
      return @item_exp
    end
    #--------------------------------------------------------------------------
    # ● 경험치 계산
    #--------------------------------------------------------------------------
    def make_item_exp_list
      @item_exp_list = Array.new(101) if @item_exp_list == nil
      @item_exp_list[1] = 100
      @item_exp_list[100] = 0
      m = IMIR::EquipLevel::EXP_BASIS
      n = 0.75 + IMIR::EquipLevel::EXP_INFLATION / 200.0;
      for i in 2..99
        @item_exp_list[i] = @item_exp_list[i-1] + Integer(m)
        m *= 1 + n;
        n *= 0.9;
      end
    end
    #--------------------------------------------------------------------------
    # ● 경험치의 변경
    #     item_exp  : 새로운 경험치
    #     show : 레벨업 표시 플래그
    #--------------------------------------------------------------------------
    def change_item_exp(exp, show)
      @item_level = 0 if @item_level == nil
      make_item_exp_list if @item_exp_list == nil
      last_level = @item_level
      @item_exp = [[exp, 9999999].min, 0].max
      if @item_exp >= @item_exp_list[@item_level+1] and @item_exp_list[@item_level+1] > 0
        item_level_up
        @item_exp = @item_exp_list[@item_level]
      end
      if show and @item_level > last_level
        display_item_level_up
      end
    end
    #--------------------------------------------------------------------------
    # ● 레벨업
    #--------------------------------------------------------------------------
    def item_level_up
      @bonus_price = 0 if @bonus_price == nil
      @bonus_eva = 0 if @bonus_eva == nil
      @bonus_atk = 0 if @bonus_atk == nil
      @bonus_def = 0 if @bonus_def == nil
      @bonus_spi = 0 if @bonus_spi == nil
      @bonus_agi = 0 if @bonus_agi == nil
      @bonus_prevent_critical = false if @bonus_prevent_critical == nil
      @bonus_half_mp_cost = false if @bonus_half_mp_cost == nil
      @bonus_double_exp_gain = false if @bonus_double_exp_gain == nil
      @bonus_auto_hp_recover = false if @bonus_auto_hp_recover == nil
      @bonus_element_set = [] if @bonus_element_set == nil
      @bonus_state_set = [] if @bonus_state_set == nil
      @item_level = 0 if @item_level == nil
     
      unless @item_level >= IMIR::EquipLevel.armor_possible_level(@id)
        @item_level += 1
        @item_exp = @item_exp_list[@item_level]
        @bonus_price += $data_armors[@id].price / 10
        @bonus_eva += @item_level / 10
        @bonus_atk += $data_armors[@id].atk / 10
        @bonus_def += $data_armors[@id].def / 10
        @bonus_spi += $data_armors[@id].spi / 10
        @bonus_agi += $data_armors[@id].agi / 10
        @bonus_prevent_critical = true if @item_level >= IMIR::EquipLevel.prevent_cri_level(@id)
        @bonus_half_mp_cost = true if @item_level >= IMIR::EquipLevel.half_mp_level(@id)
        @bonus_double_exp_gain = true if @item_level >= IMIR::EquipLevel.double_exp_level(@id)
        @bonus_auto_hp_recover = true if @item_level >= IMIR::EquipLevel.auto_hp_level(@id)
      else
        @item_exp = @item_exp_list[IMIR::EquipLevel.armor_possible_level(@id)]
      end
    end
    #--------------------------------------------------------------------------
    # ● 레벨업 메세지의 표시
    #     new_skills : 새롭게 습득한 스킬의 배열
    #--------------------------------------------------------------------------
    def display_item_level_up
      $game_message.new_page
      text = sprintf("%s의 %s이 %s로 올랐다!", @name, Vocab::level, @item_level)
      $game_message.texts.push(text)
      if $data_armors[@id].atk / 10 > 0
        text = sprintf("%s의 %s이 %s 올랐다!", @name, Vocab::atk, $data_armors[@id].atk / 10)
        $game_message.texts.push(text)
      end
      if $data_armors[@id].def / 10 > 0
        text = sprintf("%s의 %s이 %s 올랐다!", @name, Vocab::def, $data_armors[@id].def / 10)
        $game_message.texts.push(text)
      end
      if $data_armors[@id].spi / 10 > 0
        text = sprintf("%s의 %s이 %s 올랐다!", @name, Vocab::spi, $data_armors[@id].spi / 10)
        $game_message.texts.push(text)
      end       
      if $data_armors[@id].agi / 10 > 0
        text = sprintf("%s의 %s이 %s 올랐다!", @name, Vocab::agi, $data_armors[@id].agi / 10)
        $game_message.texts.push(text)
      end    
      if @item_level == IMIR::EquipLevel.prevent_cri_level(@id)
        text= sprintf("%s는 치명타 방어능력이 개방되었다!", @name)
        $game_message.texts.push(text)
      end
      if @item_level == IMIR::EquipLevel.half_mp_level(@id)
        text= sprintf("%s는 소모마력 감소능력이 개방되었다!", @name)
        $game_message.texts.push(text)
      end
      if @item_level == IMIR::EquipLevel.double_exp_level(@id)
        text= sprintf("%s는 추가경험 습득능력이 개방되었다!", @name)
        $game_message.texts.push(text)
      end
      if @item_level == IMIR::EquipLevel.auto_hp_level(@id)
        text= sprintf("%s의 자동 체력회복능력이 개방되었다!", @name)
        $game_message.texts.push(text)
      end
    end
    #--------------------------------------------------------------------------
    # ● 경험치의 획득
    #     exp  : 경험치의 증가량
    #     show : 레벨업 표시 플래그
    #--------------------------------------------------------------------------
    def gain_item_exp(exp, show)
      if @open_flag
        @item_exp = 0 if @item_exp == nil
        change_item_exp(@item_exp + exp, show)
      end
    end
    #--------------------------------------------------------------------------
    # ● 방어구의 각성
    #--------------------------------------------------------------------------
    def enchant(weapon)
       @open_flag = true if IMIR::EquipLevel.armor_possible_level(weapon.id) > 0
    end
    #--------------------------------------------------------------------------
    # ● 무기인가 아닌가의 판정
    #--------------------------------------------------------------------------
    def weapon?
      return false
    end
    #--------------------------------------------------------------------------
    # ● 방어구인가 아닌가의 판정
    #--------------------------------------------------------------------------
    def armor?
      return true
    end
    #--------------------------------------------------------------------------
    # ● 주문서인가 아닌가의 판정
    #--------------------------------------------------------------------------
    def scroll?
      return IMIR::EquipLevel::SCROLL_FOR_ARMOR.include?(@id)
    end
    #--------------------------------------------------------------------------
    # ● 아군 효과 범위인가 아닌가의 판정
    #--------------------------------------------------------------------------
    def for_friend?
      return true
    end
    #--------------------------------------------------------------------------
    # ● 아군 전체 효과 범위인가 아닌가의 판정
    #--------------------------------------------------------------------------
    def for_all?
      return false
    end
   
  end
end
#==============================================================================
# ■ Game_Actor
#------------------------------------------------------------------------------
#  액터를 취급하는 클래스입니다.이 클래스는 Game_Actors 클래스 ($game_actors)
# 의 내부에서 사용되어 Game_Party 클래스 ($game_party)로부터도 참조됩니다.
#==============================================================================

class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # ● 공개 인스턴스 변수
  #--------------------------------------------------------------------------
  attr_reader   :weapon                  
  attr_reader   :armor1                  
  attr_reader   :armor2                  
  attr_reader   :armor3                
  attr_reader   :armor4                 
  #--------------------------------------------------------------------------
  # ● 셋업
  #     actor_id : 액터 ID
  #--------------------------------------------------------------------------
  alias :sw_es_game_actor_setup :setup
  def setup(actor_id)
    sw_es_game_actor_setup(actor_id)
    @weapon = $data_weapons[@weapon_id].clone if @weapon_id > 0
    if @armor1_id > 0
      @armor1 = (two_swords_style ? $data_weapons[@weapon_id].clone : $data_armors[@armor1_id].clone)
    end
    @armor2 = $data_armors[@armor2_id].clone if @armor2_id > 0
    @armor3 = $data_armors[@armor3_id].clone if @armor3_id > 0
    @armor4 = $data_armors[@armor4_id].clone if @armor4_id > 0
  end
  #--------------------------------------------------------------------------
  # ● 무기 오브젝트의 배열 취득
  #--------------------------------------------------------------------------
  def weapons
    result = []
    result.push(@weapon)
    if two_swords_style
      result.push(@armor1)
    end
    return result
  end
  #--------------------------------------------------------------------------
  # ● 방어구 오브젝트의 배열 취득
  #--------------------------------------------------------------------------
  def armors
    result = []
    unless two_swords_style
      result.push(@armor1)
    end
    result.push(@armor2)
    result.push(@armor3)
    result.push(@armor4)
    return result
  end
  #--------------------------------------------------------------------------
  # ● 장비의 변경 (ID 로 지정)
  #     equip_type : 장비 부위 (0..4)
  #     item_id    : 무기 ID or 방어구 ID
  #     test       : 테스트 플래그 (전투 테스트, 또는 장비 화면에서의 일시 장비)
  #    이벤트 커멘드, 및 전투 테스트의 준비로 사용한다.
  #--------------------------------------------------------------------------
  def change_equip_by_id(equip_type, item_id, test = false)
    if equip_type == 0 or (equip_type == 1 and two_swords_style)
      change_equip(equip_type, $data_weapons[item_id].clone, test)
    else
      change_equip(equip_type, $data_armors[item_id].clone, test)
    end
  end
  #--------------------------------------------------------------------------
  # ● 장비의 변경 (오브젝트로 지정)
  #     equip_type : 장비 부위 (0..4)
  #     item       : 무기 or 방어구 (nil 라면 장비 해제)
  #     test       : 테스트 플래그 (전투 테스트, 또는 장비 화면에서의 일시 장비)
  #--------------------------------------------------------------------------
  def change_equip(equip_type, item, test = false)
    last_item = equips[equip_type]
    unless test
      return if $game_party.item_number(item) == 0 if item != nil
      $game_party.gain_item(last_item, 1)
      if item != nil
        if item.weapon?
          $game_party.weapons.delete(item)
        elsif item.armor?
          $game_party.armors.delete(item)
        end
      end
    end
    case equip_type
    when 0  # 무기
      @weapon = item
      unless two_hands_legal?             # 양손 소유 위반의 경우
        change_equip(1, nil, test)        # 반대의 손의 장비를 제외한다
      end
    when 1  # 방패
      @armor1 = item
      unless two_hands_legal?             # 양손 소유 위반의 경우
        change_equip(0, nil, test)        # 반대의 손의 장비를 제외한다
      end
    when 2  # 마리
      @armor2 = item
    when 3  # 신체
      @armor3 = item
    when 4  # 장식품
      @armor4 = item
    end
  end
  #--------------------------------------------------------------------------
  # ● 양손 장비 합법 판정
  #--------------------------------------------------------------------------
  def two_hands_legal?
    if weapons[0] != nil and weapons[0].two_handed
      return false if @armor1 != nil
    end
    if weapons[1] != nil and weapons[1].two_handed
      return false if @weapon != nil
    end
    return true
  end
  #--------------------------------------------------------------------------
  # ● 장비 가능 판정
  #     item : 아이템
  #--------------------------------------------------------------------------
  alias :sw_es_actor_equippable? :equippable?
  def equippable?(item)
    if item.is_a?(RPG::Weapon)
      return false if !(item.weapon?)
    elsif item.is_a?(RPG::Armor)
      return false if !(item.armor?)
    end
    sw_es_actor_equippable?(item)
  end
  #--------------------------------------------------------------------------
  # ● 강화 가능 판정
  #--------------------------------------------------------------------------
  def enchant_legal?(item)
    if item.is_a?(RPG::Weapon)
      return false if @weapon == nil or @weapon.open_flag
      return false if IMIR::EquipLevel.weapon_possible_level(@weapon.id) == 0
    elsif item.is_a?(RPG::Armor)
      if item.kind == 0
        return false if @armor1 == nil or two_swords_style or @armor1.open_flag
        return false if IMIR::EquipLevel.armor_possible_level(@armor1.id) == 0
      elsif item.kind == 1
        return false if @armor2 == nil or @armor2.open_flag
        return false if IMIR::EquipLevel.armor_possible_level(@armor2.id) == 0
      elsif item.kind == 2
        return false if @armor3 == nil or @armor3.open_flag
        return false if IMIR::EquipLevel.armor_possible_level(@armor3.id) == 0
      elsif item.kind == 3
        return false if @armor4 == nil or @armor4.open_flag
        return false if IMIR::EquipLevel.armor_possible_level(@armor4.id) == 0
      end
    end
    return true
  end
  #--------------------------------------------------------------------------
  # ● 장비 강화
  #--------------------------------------------------------------------------
  def enchant_equip(item)
    if item.is_a?(RPG::Weapon)
      @weapon.enchant(@weapon)
    elsif item.is_a?(RPG::Armor)
      if item.kind == 0
        @armor1.enchant(@armor1)
      elsif item.kind == 1
        @armor2.enchant(@armor2)
      elsif item.kind == 2
        @armor3.enchant(@armor3)
      elsif item.kind == 3
        @armor4.enchant(@armor4)
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 경험치의 획득 (경험치 2 배의 옵션을 고려)
  #     exp  : 경험치의 증가량
  #     show : 레벨업 표시 플래그
  #--------------------------------------------------------------------------
  def gain_exp(exp, show)
    if double_exp_gain
      change_exp(@exp + exp * 2, show)
    else
      change_exp(@exp + exp, show)
    end
    for equip in equips
      next if equip == nil
      equip.gain_item_exp(exp, true) if equip.is_a?(RPG::Weapon)
      equip.gain_item_exp(exp, true) if equip.is_a?(RPG::Armor)
    end
  end
#~   #--------------------------------------------------------------------------
#~   # ● 크리티컬 확률의 취득
#~   #--------------------------------------------------------------------------
#~   def cri
#~     n = 4
#~     n += 4 if actor.critical_bonus
#~     for weapon in weapons.compact
#~       n += 4 if weapon.critical_bonus
#~       n += weapon.w_cri
#~     end
#~     return n
#~   end
 
end
#==============================================================================
# ■ Game_Party
#------------------------------------------------------------------------------
#  파티를 취급하는 클래스입니다.골드나 아이템등의 정보가 포함됩니다.이 쿠
# 라스의 인스턴스는 $game_party 로 참조됩니다.
#==============================================================================

class Game_Party < Game_Unit
  #--------------------------------------------------------------------------
  # ● 공개 인스턴스 변수
  #--------------------------------------------------------------------------
  attr_accessor :weapons                 
  attr_accessor :armors                  
  #--------------------------------------------------------------------------
  # ● 오브젝트 초기화
  #--------------------------------------------------------------------------
  alias :im_game_party_initialize :initialize
  def initialize
    im_game_party_initialize
    @weapon_scrolls = {}
    @armor_scrolls = {}
    @weapons = []   
    @armors  = []    
  end
  #--------------------------------------------------------------------------
  # ● 아이템 오브젝트의 배열 취득 (무기와 방어구를 포함한다)
  #--------------------------------------------------------------------------
  def items
    result = []
    for i in @items.keys.sort
      result.push($data_items[i]) if @items[i] > 0
    end
    for i in @weapon_scrolls.keys.sort
      result.push($data_weapons[i]) if @weapon_scrolls[i] > 0
    end
    for i in @armor_scrolls.keys.sort
      result.push($data_armors[i]) if @armor_scrolls[i] > 0
    end
    for weapon in @weapons
      result.push(weapon)
    end
    for armor in @armors
      result.push(armor)
    end
    return result
  end
  #--------------------------------------------------------------------------
  # ● 아이템의 소지수취득
  #     item : 아이템
  #--------------------------------------------------------------------------
  def item_number(item)
    case item
    when RPG::Item
      number = @items[item.id]
    when RPG::Weapon
      if item.scroll?
        number = @weapon_scrolls[item.id]
      else
        number = 1
      end
    when RPG::Armor
      if item.scroll?
        number = @armor_scrolls[item.id]
      else
        number = 1
      end
    end
    return number == nil ? 0 : number
  end
  #--------------------------------------------------------------------------
  # ● 아이템의 소지 판정
  #     item          : 아이템
  #     include_equip : 장비품도 포함한다
  #--------------------------------------------------------------------------
  def has_item?(item, include_equip = false)
    if item_number(item) > 0
      return true
    end
    return false
  end
  #--------------------------------------------------------------------------
  # ● 아이템의 증가 (감소)
  #     item          : 아이템
  #     n             : 개수
  #     include_equip : 장비품도 포함한다
  #--------------------------------------------------------------------------
  def gain_item(item, n, include_equip = false)
    number = item_number(item)
    case item
    when RPG::Item
      @items[item.id] = [[number + n, 0].max, 99].min
    when RPG::Weapon
      if item.scroll?
        @weapon_scrolls[item.id] = [[number + n, 0].max, 99].min
      else
        if n > 0
          @weapons.push(item)
        elsif n < 0
          for i in 0...@weapons.size
            if @weapons[i].id == item.id
              @weapons[i] = nil
              n += 1
            end
            break if n == 0
          end
          @weapons.compact!
        end
      end
    when RPG::Armor
      if item.scroll?
        @armor_scrolls[item.id] = [[number + n, 0].max, 99].min
      else
        if n > 0
          @armors.push(item)
        elsif n < 0
          for i in 0...@armors.size
            if @armors[i].id == item.id
              @armors[i] = nil
              n += 1
            end
            break if n == 0
          end
          @armors.compact!
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 아이템의 소모
  #     item : 아이템
  #    지정된 오브젝트가 소모 아이템이면, 소지수를 1 줄인다.
  #--------------------------------------------------------------------------
  alias :sw_es_consume_item :consume_item
  def consume_item(item)
    if item.is_a?(RPG::Weapon) or item.is_a?(RPG::Armor) and item.scroll?
      lose_item(item, 1)
    end
    sw_es_consume_item(item)
  end
  #--------------------------------------------------------------------------
  # ● 아이템의 사용 가능 판정
  #     item : 아이템
  #--------------------------------------------------------------------------
  alias :sw_es_item_can_use? :item_can_use?
  def item_can_use?(item)
    return true if item.is_a?(RPG::Weapon) or item.is_a?(RPG::Armor) and (item_number(item) != 0) and item.scroll?
    sw_es_item_can_use?(item)
  end
end
#==============================================================================
# ■ Scene_Item
#------------------------------------------------------------------------------
# 아이템 화면의 처리를 실시하는 클래스입니다.
#==============================================================================

class Scene_Item < Scene_Base
  #--------------------------------------------------------------------------
  # ● 타겟 선택의 갱신
  #--------------------------------------------------------------------------
  def update_target_selection
    if Input.trigger?(Input::B)
      Sound.play_cancel
      if $game_party.item_number(@item) == 0    # 아이템을 다 사용했을 경우
        @item_window.refresh                    # 윈도우의 내용을 재작성
      end
      hide_target_window
    elsif Input.trigger?(Input::C)
      if not $game_party.item_can_use?(@item)
        Sound.play_buzzer
      elsif @item.is_a?(RPG::Weapon) or @item.is_a?(RPG::Armor) and @item.scroll?
        target = $game_party.members[@target_window.index]
        if target.enchant_legal?(@item)
          target.enchant_equip(@item)
          $game_party.consume_item(@item)
          @item_window.draw_item(@item_window.index)
          se = RPG::SE.new("Applause")
          se.play
          @item_window.refresh                    # 윈도우의 내용을 재작성
          $scene = Scene_Equip.new(@target_window.index)
        else
          Sound.play_buzzer
        end
      else
        determine_target
      end
    end
  end
end

#==============================================================================
# ■ Window_Item
#------------------------------------------------------------------------------
# 아이템 화면등에서, 소지 아이템의 일람을 표시하는 윈도우입니다.
#==============================================================================

class Window_Item < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 스킬명의 묘화
  #     item    : 아이템 (스킬, 무기, 방어구로도 가능)
  #     x       : 묘화처 X 좌표
  #     y       : 묘화처 Y 좌표
  #     enabled : 유효 플래그.false 때 반투명으로 묘화
  #--------------------------------------------------------------------------
  def draw_item_name(item, x, y, enabled = true)
    if item != nil
      draw_icon(item.icon_index, x, y, enabled)
      self.contents.font.color.alpha = enabled ? 255 : 128
      if item.is_a?(RPG::Item) or item.open_flag == false or item.scroll?
        self.contents.font.color = normal_color
        self.contents.draw_text(x + 24, y, 172, WLH, item.name)
      elsif item.is_a?(RPG::Armor) and item.item_level >= IMIR::EquipLevel.armor_possible_level(item.id)
        self.contents.font.color = text_color(item.item_level)
        text = item.name + " Lv. MAX"
        self.contents.draw_text(x + 24, y, 172, WLH, text)
      elsif item.is_a?(RPG::Weapon) and item.item_level >= IMIR::EquipLevel.weapon_possible_level(item.id)
        self.contents.font.color = text_color(item.item_level)
        text = item.name + " Lv. MAX"
        self.contents.draw_text(x + 24, y, 172, WLH, text)
      else
        self.contents.font.color = text_color(item.item_level)
        text = item.name + " Lv. " + item.item_level.to_s
        self.contents.draw_text(x + 24, y, 172, WLH, text)
      end
    end
  end

end
#==============================================================================
# ■ Window_Equip
#------------------------------------------------------------------------------
# 장비 화면에서, 액터가 현재 장비하고 있는 아이템을 표시하는 윈도우입니다.
#==============================================================================

class Window_Equip < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 스킬명의 묘화
  #     item    : 아이템 (스킬, 무기, 방어구로도 가능)
  #     x       : 묘화처 X 좌표
  #     y       : 묘화처 Y 좌표
  #     enabled : 유효 플래그.false 때 반투명으로 묘화
  #--------------------------------------------------------------------------
  def draw_item_name(item, x, y, enabled = true)
    if item != nil
      draw_icon(item.icon_index, x, y, enabled)
      self.contents.font.color.alpha = enabled ? 255 : 128
      if item.is_a?(RPG::Item) or item.open_flag == false or item.scroll?
        self.contents.font.color = normal_color
        self.contents.draw_text(x + 24, y, 172, WLH, item.name)
      elsif item.is_a?(RPG::Armor) and item.item_level >= IMIR::EquipLevel.armor_possible_level(item.id)
        self.contents.font.color = text_color(item.item_level)
        text = item.name + " Lv. MAX"
        self.contents.draw_text(x + 24, y, 172, WLH, text)
      elsif item.is_a?(RPG::Weapon) and item.item_level >= IMIR::EquipLevel.weapon_possible_level(item.id)
        self.contents.font.color = text_color(item.item_level)
        text = item.name + " Lv. MAX"
        self.contents.draw_text(x + 24, y, 172, WLH, text)
      else
        self.contents.font.color = text_color(item.item_level)
        text = item.name + " Lv. " + item.item_level.to_s
        self.contents.draw_text(x + 24, y, 172, WLH, text)
      end
    end
  end
end

#==============================================================================
# ■ Window_Base
#------------------------------------------------------------------------------
#  게임중의 모든 윈도우의 슈퍼 클래스입니다.
#==============================================================================

class Window_Base < Window
  #--------------------------------------------------------------------------
  # ● 아이템명의 묘화
  #     item    : 아이템 (스킬, 무기, 방어구로도 가능)
  #     x       : 묘화처 X 좌표
  #     y       : 묘화처 Y 좌표
  #     enabled : 유효 플래그.false 때 반투명으로 묘화
  #--------------------------------------------------------------------------
  def draw_item_name(item, x, y, enabled = true)
    if item != nil
      draw_icon(item.icon_index, x, y, enabled)
      self.contents.font.color.alpha = enabled ? 255 : 128
      if item.is_a?(RPG::Skill) or item.is_a?(RPG::Item)
        self.contents.font.color = normal_color
        self.contents.draw_text(x + 24, y, 172, WLH, item.name)
      elsif item.open_flag == false or item.scroll?
        self.contents.font.color = normal_color
        self.contents.draw_text(x + 24, y, 172, WLH, item.name)
      elsif item.is_a?(RPG::Armor) and item.item_level >= IMIR::EquipLevel.armor_possible_level(item.id)
        self.contents.font.color = text_color(item.item_level)
        text = item.name + " Lv. MAX"
        self.contents.draw_text(x + 24, y, 172, WLH, text)
      elsif item.is_a?(RPG::Weapon) and item.item_level >= IMIR::EquipLevel.weapon_possible_level(item.id)
        self.contents.font.color = text_color(item.item_level)
        text = item.name + " Lv. MAX"
        self.contents.draw_text(x + 24, y, 172, WLH, text)
      else
        self.contents.font.color = text_color(item.item_level)
        text = item.name + " Lv. " + item.item_level.to_s
        self.contents.draw_text(x + 24, y, 172, WLH, text)
      end
    end
  end
end

#==============================================================================
# ■ Game_Interpreter
#------------------------------------------------------------------------------
#  이벤트 커멘드를 실행하는 interpreter입니다.이 클래스는 Game_Map 클래스,
# Game_Troop 클래스, Game_Event 클래스의 내부에서 사용됩니다.
#==============================================================================

class Game_Interpreter
  #--------------------------------------------------------------------------
  # ● 무기의 증감
  #--------------------------------------------------------------------------
  def command_127
    value = operate_value(@params[1], @params[2], @params[3])
    if value > 0
      for i in 0...value
        $game_party.gain_item($data_weapons[@params[0]].clone, 1, @params[4])
      end
    else
      $game_party.gain_item($data_weapons[@params[0]], value, @params[4])
    end
    return true
  end
  #--------------------------------------------------------------------------
  # ● 방어구의 증감
  #--------------------------------------------------------------------------
  def command_128
    value = operate_value(@params[1], @params[2], @params[3])
    if value > 0
      for i in 0...value
        $game_party.gain_item($data_armors[@params[0]].clone, 1, @params[4])
      end
    else
      $game_party.gain_item($data_armors[@params[0]], value, @params[4])
    end
    return true
  end
end
#==============================================================================
# ■ Scene_Shop
#------------------------------------------------------------------------------
# 상점 화면의 처리를 실시하는 클래스입니다.
#==============================================================================

class Scene_Shop < Scene_Base
  #--------------------------------------------------------------------------
  # ● 개수 입력의 결정
  #--------------------------------------------------------------------------
  def decide_number_input
    Sound.play_shop
    @number_window.active = false
    @number_window.visible = false
    case @command_window.index
    when 0  # 구입한다
      $game_party.lose_gold(@number_window.number * @item.price)
      if @item.is_a?(RPG::Item) or @item.scroll?
        $game_party.gain_item(@item, @number_window.number)
      else
        for i in 0...@number_window.number
          if @item.is_a?(RPG::Weapon)
            $game_party.gain_item($data_weapons[@item.id].clone, 1)
          elsif @item.is_a?(RPG::Armor)
            $game_party.gain_item($data_armors[@item.id].clone, 1)
          end
        end
      end
      @gold_window.refresh
      @buy_window.refresh
      @status_window.refresh
      @buy_window.active = true
      @buy_window.visible = true
    when 1  # 매각한다
      $game_party.gain_gold(@number_window.number * (@item.price / 2))
      if @item.is_a?(RPG::Item)
        $game_party.lose_item(@item, @number_window.number)
      else
        if @item.is_a?(RPG::Weapon)
          $game_party.weapons.delete(@item)
        elsif @item.is_a?(RPG::Armor)
          $game_party.armors.delete(@item)
        end
      end
      @gold_window.refresh
      @sell_window.refresh
      @status_window.refresh
      @sell_window.active = true
      @sell_window.visible = true
      @status_window.visible = false
    end
  end
end

 

---------------------------------------------------------------------------------------------------------------------------

 

태그노트는스크립트 자료실을 뒤져주세요 TAG로 검색하시면 금방 나올겁니다.

 

-----------------------------------------------------------------------------------------------------------------------------

 

###########################
# Requirements for Skills # IMIR:EquipLevel Ver.
##############################################################################
# 버전 1.1                                                               
# 제작자: Queex                                                             
# 저작권: 비상업적 일반 창작자
# 필요 스크립트: TagNote 2.0 이상  (이 스크립트보다 위쪽에 위치하도록!)                                               
# 번역: 훈덕
##############################################################################
# 스킬의 사용에 필요 조건이 생깁니다.
# 이것을 활용하여
# 기술을 사용하면 불화살이 소모되게 한다거나
# HP가 낮을 때만 발동되는 초필살기 등을 만들 수 있습니다.
#
# 필요 조건은 스킬의 메모 항목에 표기하면됩니다. 
# 각 종류별로 하나의 태그만 인식됩니다.                 
#            
#                                                                           
# 무기의 메모 항목에 표기하는 태그:                   
# <weapon_type xxx>                                                         
#                                                                          
# 아이템에 표기 가능한 태그:                                           
# <include_battle_test> - 이 아이템을 테스트 전투에서 사용가능하게 해줌 
#                                                                          
# 스킬에 표기 가능한 태그:                                     
# <weapon_type xxx> - 해당 종류의 무기로만 스킬 사용 가능   
# <item_present id> - 파티가 해당 id의 아이템을 소유하고 있어야 스킬 사용 가능 
# <item_consume id n> - 스킬 사용시 id 아이템을 n 개 소비               
# <item_consume id> - 스킬 사용시 id 아이템을 1 개 소비
# <switch_on id>  - id 스위치가 on일때 
# <var_eq id n> - 변수번호 id가 n일때
# <var_up id n> - 변수번호 id가 n이상 일때
# <lev_up n> - 레벨이 n 이상일때
# <class_eq n> - 직업코드가 n일때
# <state n> - n번 상태일때 ( 상태창 열면 이름 옆의 숫자 )
# <gold n> -  골드가 n 이상일때
# <element n> - 공격 속성에 n번 속성이 있을 때
# <hp_percent_exceed per> - HP가 비율 per 이상        
# <hp_percent_below per> - HP가 비율 per 미만 
# <mp_percent_exceed per> - MP가 비율 per 이상                                                     
# <mp_percent_exceed per true> - MP를 비율 per 만큼 소비
# <mp_percent_below per> - MP가 비율 per 미만             
# <free_hand> - 적어도 한 손이 빈손이어야 함                
# <dual_weapon> - 이도류 사용                      
# <two_handed_weapon> - 양손무기 사용      
#   
#
# 예를 들어:
# <item_present 3>
# <item_consumed 4 2>
# <weapon_type bow>
#
# 위의 스킬을 사용하려면 id 3 아이템이 필요하고
# 사용할때 id 4 아이템을 2개씩 소비하며
# bow 타입으로 설정된 (메모란에 <weapon_type bow> 라고 입력한) 무기를 장비해야합니다.
#
#
#
#                                                                      
# Note:                                                                     
# This script also includes the function hands_free which returns the       
# number of free hands for a Game_Actor.                                    
#                                                                           
# Version History:                                                          
# 0.4 - test release                                                        
# 0.5 - can specify some item to include in battle test                     
# 1.0 - Bugfix and update to TagNote 2.0                                    
# 1.1 - Fix regressions                                                     
##############################################################################

class Game_Actor < Game_Battler
 
 include TAGNOTE

  def hands_free
    if weapons[0] == nil
      if @armor1 == nil
        return 2
      elsif weapons.length==2
        if weapons[1].two_handed
          return 0
        else
          return 1
        end
      else
        return 1
      end
    elsif weapons[0].two_handed or @armor1 != nil
      return 0
    else
      return 1
    end
  end

  alias skill_req_skill_can_use? skill_can_use?
  def skill_can_use?(skill)
   
    if skill.id != 0
      skill_note=$data_skills[skill.id].note
      #Check for weapon type
      skill_needs = get_tag(skill_note,"weapon_type") #weapon type string
      if skill_needs != nil
        if two_swords_style
          if @weapon != nil and @armor1 != nil
            return false unless has_tag_value?(@weapon.note,"weapon_type",skill_needs) or has_tag_value?(@armor1.note,"weapon_type",skill_needs)
          elsif @weapon != nil
            return false unless has_tag_value?(@weapon.note,"weapon_type",skill_needs)
          elsif @armor1 != nil
            return false unless has_tag_value?(@armor1.note,"weapon_type",skill_needs)
          else
            return false
          end
        else
          return false unless @weapon != nil
          return false unless has_tag_value?(@weapon.note,"weapon_type",skill_needs)
        end
      end
     
      #Check for item presence
      skill_needs = get_tag(skill_note,"item_present") #item id
      if skill_needs != nil
        return false unless $game_party.has_item?($data_items[skill_needs.to_i],true)
      end
     
      #Check for item consumption
      skill_needs = get_tag(skill_note,"item_consume") #item id
      if skill_needs !=nil
        skill_needs_num = get_additional_tag(skill_note,"item_consume",2) #number
        if skill_needs_num == nil
          skill_needs_num = 1
        end
        return false unless $game_party.item_number($data_items[skill_needs.to_i])>=skill_needs_num.to_i
      end
     
      #Check for switch
      skill_needs = get_tag(skill_note,"switch_on") #switch id
      if skill_needs != nil
        return false unless $game_switches[skill_needs.to_i] == true
      end
     
      #Check for variable_equal
      skill_needs = get_tag(skill_note,"var_eq") #variable id
      if skill_needs !=nil
        skill_needs_num = get_additional_tag(skill_note,"var_eq",2) #number
        if skill_needs_num == nil
          skill_needs_num = 0
        end
        return false unless $game_variables[skill_needs.to_i] == skill_needs_num.to_i
      end
     
      #Check for variable_up
      skill_needs = get_tag(skill_note,"var_up") #variable id
      if skill_needs !=nil
        skill_needs_num = get_additional_tag(skill_note,"var_up",2) #number
        if skill_needs_num == nil
          skill_needs_num = 0
        end
        return false unless $game_variables[skill_needs.to_i] >= skill_needs_num.to_i
      end
     
      #Check for level_up
      skill_needs = get_tag(skill_note,"lev_up") #level
      if skill_needs !=nil
        return false unless level >= skill_needs.to_i
      end
     
      #Check for class_equal
      skill_needs = get_tag(skill_note,"class_eq") #class id
      if skill_needs !=nil
         return false unless class_id == skill_needs.to_i
      end
     
      #Check for state
      skill_needs = get_tag(skill_note,"state") #state id
      if skill_needs != nil
        return false unless state?(skill_needs.to_i)
      end
     
      #Check for gold
      skill_needs = get_tag(skill_note,"gold") #gold
      if skill_needs != nil
        return false unless $game_party.gold >= skill_needs.to_i
      end
     
      #Check for element
      skill_needs = get_tag(skill_note,"element") #gold
      if skill_needs != nil
        return false unless element_set.include?(skill_needs.to_i)
      end
     
      #Check for HP exceeds
      skill_needs = get_tag(skill_note,"hp_percent_exceed") #percent
      if skill_needs !=nil
        return false unless (100.0 * @hp/maxhp)>=skill_needs.to_f
      end
     
      #Check for HP below
      skill_needs = get_tag(skill_note,"hp_percent_below") #percent
      if skill_needs != nil
        return false unless (100.0 * @hp/maxhp)<skill_needs.to_f
      end
     
      #Check for MP exceeds
      skill_needs = get_tag(skill_note,"mp_percent_exceed") #percent
      if skill_needs != nil
        return false unless (100.0 * @mp/maxmp)>=skill_needs.to_f
      end
     
      #Check for MP below
      skill_needs = get_tag(skill_note,"mp_percent_below") #percent
      if skill_needs != nil
        return false unless (100.0* @mp/maxmp)<skill_needs.to_f
      end
     
      #Check for free hand
      skill_needs = has_tag?(skill_note,"free_hand") #boolean
      if skill_needs
        return false unless hands_free>=1
      end
     
      #Check for dual weapons
      skill_needs = has_tag?(skill_note,"dual_weapon") #boolean
      if skill_needs
        return false unless two_swords_style
        return false unless weapons[0]!=nil and weapons[1]!=nil
      end
     
      #Check for two-handed weapon
      skill_needs = has_tag?(skill_note,"two_handed_weapon") #boolean
      if skill_needs
        if two_swords_style
          return false unless ( weapons[0]!= nil and weapons[0].two_handed) or (weapons[1] != nil and weapons[1].two_handed)
        else
          return false unless ( weapons[0]!= nil and weapons[0].two_handed)
        end
      end
     
      return skill_req_skill_can_use?(skill)
    end
  end
 
 
  def calc_mp_cost(skill)
    base_cost=skill.mp_cost
   
    mp_prop=get_tag(skill.note,"mp_percent_exceed")
    if mp_prop!=nil
      mp_lose=get_additional_tag_value(skill.note,"mp_percent_exceed",2)
      if mp_lose.eql?("true")
        base_cost=(mp_prop.to_f/100.0 * maxmp).to_i
      end
    end
   
    if half_mp_cost
      return base_cost / 2
    else
      return base_cost
    end
  end
 
end

class Scene_Battle < Scene_Base
 
  include TAGNOTE
#--------------------------------------------------------------------------
# * Execute Battle Action: Skill
#--------------------------------------------------------------------------
  alias skill_req_execute_action_skill execute_action_skill
  def execute_action_skill
    skill_req_execute_action_skill
    skill = @active_battler.action.skill
   
    #consume items required
    skill_needs = get_tag(skill.note,"item_consume")
    if skill_needs != nil
      num_items = get_additional_tag(skill.note,"item_consume",2)
      if num_items==nil
        num_items=1
      end
      $game_party.lose_item($data_items[skill_needs.to_i],num_items.to_i,true)
    end
  end
end

class Game_Party < Game_Unit
 
  include TAGNOTE
 
  alias skill_req_setup_battle_test_members setup_battle_test_members
  def setup_battle_test_members
    skill_req_setup_battle_test_members
    for i in 1...$data_items.size
      if has_tag?($data_items[i].note,"include_battle_test")
        @items[i] = 99
      end
    end
  end
end
   

 

   

 

 

Who's 아이미르

?

허루쿠... 임용고시 공부해야되는데 이러고 있다....

 

알만툴의 중독성은 쩔어준다는;;;

Comment '9'
  • ?
    아담 2011.09.08 20:08

    괜찮네요 ㅎㅎㅎ SRPG스크립트는 별 수정 없습니까~~?

  • ?
    포인트퍙퍙 2011.09.21 19:15

    감사합니다. 매우 유용하네요.

  • ?
    시르 2011.12.24 01:48

    엄청기네요 ㄷㄷ

  • ?
    로돌프 2012.01.02 19:42

    좋은 정본데 어렵당@_@

  • ?
    제복잇 2012.01.10 18:08

    어디다가 넣나요? ㅋ

  • ?
    시옷청룡 2012.02.25 15:35

    감사합니다^^

  • ?
    sherk 2013.01.22 22:33
    저는 이상하게 1600번 줄에서 오류가 뜨네요ㅠㅠ
    수정은 경험치만 늘렸는데ㅠㅠ
  • ?
    sherk 2013.01.22 22:44
    그래서 그런데
    sshcys74@naver.com으로
    예제파일을 보내주심 안될까요?
  • ?
    아이미르 2013.01.27 17:28
    요즘은 바쁘기도 하지만 VX시절 예제를 거의 갖고 있지 않습니다. 죄송합니다 ㅇㅅㅇ;

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 스크립트 자료 게시물 작성시 주의사항 3 습작 2012.12.24 5453
577 전투 XAS Hero Edition VX 15 Alkaid 2011.12.28 4237
576 변수/스위치 Etude87_Variables_VX 1 file 습작 2011.11.26 2611
575 기타 아이디를 띄우기 20 12345678 2011.11.07 4629
574 전투 Animated Battlers VX 3.5 by DerVVulfman 2 Alkaid 2011.11.02 3102
573 스킬 Yanfly Engine RD - Custom Dmg Formulas (커스텀 데미지, 관계도) 6 file communnn 2011.10.25 3377
572 스킬 Yanfly Engine RD - Display Skill Query (스킬 상세 정보) 8 file communnn 2011.10.24 3405
571 기타 Kylock1.2+(RMDude-Kylock1.5) Time System Script 4 file communnn 2011.10.20 2597
570 전투 VX SRPG3d 수정본(1) 12 아이미르 2011.10.19 4621
569 스킬 스킬, 아이템 적아 구분 없이 쓰기 10 file EuclidE 2011.10.16 2901
568 전투 VX SRPG3d(한글번역) 8 file 아이미르 2011.10.15 5040
567 장비 카드 슬롯 장비 스크립트 18 file 아이미르 2011.10.13 4135
566 스킬 Simple Sort Inventory 2.0 by cozziekuns 1 file Alkaid 2011.09.29 2352
565 맵/타일 Roguelike Random Dungeon Generator 2.0 by cozziekuns 4 file Alkaid 2011.09.29 2563
564 메시지 HG_POP_TEXT (맵 화면에 문자 표시) 4 file 허걱 2011.09.16 3590
563 파티 파티원이 따라다니는 스크립트 11 file 놀러 2011.09.15 3988
562 기타 [XP / VX 공용] rand() 함수 확장 스크립트 4 허걱 2011.09.13 2365
561 전투 VX SRPG 스크립트를 수정해봤습니다(8) - 누적수정 30 아이미르 2011.09.09 3917
» 장비 초보적인 장비레벨 개념 스크립트 - 수정 및 덤 9 아이미르 2011.09.06 2659
559 기타 여러스크립트(목적은 포인트) 12 file 인생은 힘들다. 2011.08.26 3090
558 스킬 SW_BookSkill && EchantScroll(상호충돌수정버전) 6 시옷전사 2011.08.22 1758
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ... 32 Next
/ 32