XP 스크립트

Source Thread:  http://save-point.org/thread-4195.html

  Guillaume777씨의 장비확장 스크립트를 위한 최강장비 장착 스크립트입니다.  스크립트를 끼워넣은 뒤 장비창에서 X나 Y버튼(또는 거기에 대응하는 키)을 눌러보시길.  최강장비 선정기준은 Scene_Equip 처음의 상수부분을 편집해서 변경할 수 있습니다.

#==============================================================================
# ** Auto Equip Optimizer for Guillaume777's MultiSlots
#    Original version by RPG Advocate
#------------------------------------------------------------------------------
#    Edit by DerVVulfman
#    version 1.0
#    06-19-2012
#    RPGMaker XP
#==============================================================================


#==============================================================================
# ** Scene_Equip
#------------------------------------------------------------------------------
#  This class performs equipment screen processing.
#==============================================================================

class Scene_Equip
  #--------------------------------------------------------------------------
  # * Constants
  #--------------------------------------------------------------------------  
  WEAPON_ATK_WEIGHT = 1.0
  WEAPON_PDF_WEIGHT = 0.0
  WEAPON_MDF_WEIGHT = 0.0
  WEAPON_STR_WEIGHT = 0.0
  WEAPON_DEX_WEIGHT = 0.0
  WEAPON_AGI_WEIGHT = 0.0
  WEAPON_INT_WEIGHT = 0.0
  ARMOR_EVA_WEIGHT  = 0.0
  ARMOR_PDF_WEIGHT  = 0.75
  ARMOR_MDF_WEIGHT  = 0.25
  ARMOR_STR_WEIGHT  = 0.0
  ARMOR_DEX_WEIGHT  = 0.0
  ARMOR_AGI_WEIGHT  = 0.0
  ARMOR_INT_WEIGHT  = 0.0
  NO_ACCESSORY_OPTIMIZATION = false  
  #--------------------------------------------------------------------------
  # * Frame Update (when right window is active)
  #--------------------------------------------------------------------------  
  alias aeo_update_right update_right
  def update_right
    # Perform the original call
    aeo_update_right
    # If X button was pressed
    if Input.trigger?(Input::X)
      # Play decision SE
      $game_system.se_play($data_system.decision_se)
      # optimize 
      optimize(@right_window.index)
      # Refresh windows
      @left_window.refresh
      @right_window.refresh
      for i in 0..@actor.armor_slots.max+1
        @item_windows[i].refresh
      end
      return
    end
    # If Y button was pressed
    if Input.trigger?(Input::Y)
      # Play decision SE
      $game_system.se_play($data_system.decision_se)
      for i in 0..@actor.armor_slots.max+1
        optimize(i)
      end
      @left_window.refresh
      @right_window.refresh
      for i in 0..@actor.armor_slots.max+1
        @item_windows[i].refresh
      end
      return
    end
  end  
  #--------------------------------------------------------------------------
  # * Optimize Equipment
  #     slot : equipment slot
  #--------------------------------------------------------------------------  
  def optimize(slot)
    old_slot = slot
    slot = index_to_equip_kind(old_slot)
    # IF WEAPON SLOT.....
    if slot == 0
      # SORT through Weapons
      for w_slot in 0...@actor.weapon_slots.size
        # Only if the equipment menu slot is the matching weapon hand slot
        if old_slot == w_slot
          w_id = @actor.weapon_ids[w_slot]
          # Cannot be cursed if unequipped
          unless w_id == 0
            object = $data_weapons[w_id]
            return if object.cursed
          end
          optimal = object.id
          eval_current = 0.00
          if w_id != 0
            eval_current = calc_weapon_stats(object)
          else
            optimal = 0
          end
          @actor.equip_weapon(w_slot,0)
          flag = false
          zero_flag = true
          for weapon in $data_weapons
            if !flag
              flag = true
              next
            end
            # Cannot proceed w/ 2nd slot if first is two-handed
            unless @actor.weapon_ids[0].nil?
              unless $data_weapons[@actor.weapon_ids[0]].nil?
                if w_slot != 0 && $data_weapons[@actor.weapon_ids[0]].nb_hands > 1
                  next
                end
              end
            end
            eval_new = 0.00
            eval_new = calc_weapon_stats(weapon)
            zero_flag = false if eval_new > 0
            if @actor.equippable?(weapon) && 
              $game_party.weapon_number(weapon.id) > 0 && eval_new > eval_current
              eval_current = eval_new
              optimal = weapon.id
            end
          end
          optimal = 0 if zero_flag
          @actor.equip_weapon(w_slot, optimal)
          # If two-handed weapon (can't be if unarmed)
          unless object.nil?
            @actor.equip(1, 0) if object.nb_hands > 1
          end
        end
      end
    end
    # IF ARMOR SLOT.....
    if slot >= 1
      # Prevent accessories if no accesory switch is on
      return if NO_ACCESSORY_OPTIMIZATION && slot > 3
      # Obtain eval_current Object 
      for a_slot in 0..@actor.armor_slots.size-1
        slot_place = old_slot - @actor.weapon_slots.size
        if slot_place == a_slot
          id = @actor.armor_ids[a_slot]
          id = 0 if id.nil?
          object = $data_armors[id]
          # Do not proceed if cursed item
          unless object.nil?
            return if object.cursed
          end
          # Set Unequipped flag
          not_equipped = false
          # If shield slot
          if a_slot == 0
            # Skip Shield slot if two-handed equipped...
            for w_slot in 0...@actor.weapon_slots.size
              w_id = @actor.weapon_ids[w_slot]
              w_id = 0 if w_id.nil?
              w_object = $data_weapons[w_id]
              unless w_object.nil?
                return if w_object.nb_hands > 1
              end
            end
          end
          # Set optimal start
          if object.nil?
            optimal = 0
            not_equipped = true
          else
            if object.id == 0
              optimal = 0
              not_equipped = true
            else
              optimal = object.id
            end
          end
          # Calculate eval_current armor stats
          eval_current = 0.00
          if not_equipped == false
            eval_current = calc_armor_stats(object)
          end
          # Set Flag
          flag = false
          # Sort through Armor Database
          for armor in $data_armors
            if !flag
              flag = true
              next
            end
            # Skip for invalid slots
            next if armor.kind != slot-1
            # Calculate
            eval_new = 0.00
            eval_new = calc_armor_stats(armor)
            # If Armor Equippable by Actor and valid and above eval_current level
            if @actor.equippable?(armor) && 
              $game_party.armor_number(armor.id) > 0 && eval_new > eval_current
              # Set new eval_current level stat and ID
              eval_current = eval_new
              optimal = armor.id
            end
          end
          @actor.equip_armor(a_slot, optimal)        
        end
      end
    end  
  end
  #--------------------------------------------------------------------------
  # * Calculate Weapon Stats
  #     object : weapon evaluated
  #--------------------------------------------------------------------------  
  def calc_weapon_stats(object)
    eval_new = 0.00
    eval_new += object.atk      * WEAPON_ATK_WEIGHT
    eval_new += object.pdef     * WEAPON_PDF_WEIGHT
    eval_new += object.mdef     * WEAPON_MDF_WEIGHT
    eval_new += object.str_plus * WEAPON_STR_WEIGHT
    eval_new += object.dex_plus * WEAPON_DEX_WEIGHT
    eval_new += object.agi_plus * WEAPON_AGI_WEIGHT
    eval_new += object.int_plus * WEAPON_INT_WEIGHT
    return eval_new
  end
  #--------------------------------------------------------------------------
  # * Calculate Armor Stats
  #     object : armor evaluated
  #--------------------------------------------------------------------------  
  def calc_armor_stats(object)
    eval_new = 0.00
    eval_new += object.eva      * ARMOR_EVA_WEIGHT
    eval_new += object.pdef     * ARMOR_PDF_WEIGHT
    eval_new += object.mdef     * ARMOR_MDF_WEIGHT
    eval_new += object.str_plus * ARMOR_STR_WEIGHT
    eval_new += object.dex_plus * ARMOR_DEX_WEIGHT
    eval_new += object.agi_plus * ARMOR_AGI_WEIGHT
    eval_new += object.int_plus * ARMOR_INT_WEIGHT
    return eval_new
  end
end





List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 스크립트 자료 게시물 작성시 주의사항 습작 2012.12.24 6203
961 전투 XAS Hero Edition v3.82 19 아방스 2010.12.27 4347
960 메뉴 기본메뉴 뜯어고친것. (스샷추가) 6 file 백호 2009.02.22 4315
959 키입력 한글입력기 6 백호 2009.02.22 4306
958 기타 쓸만한스크립트61개포함 28 file 궭크이 2012.01.09 4298
957 온라인 온라인스크립트 실행방법 13 file 백호 2009.02.22 4275
956 HUD 캐릭터 아래 SP,HP표시해주는 스크립트 33 file 김!제스! 2010.08.04 4273
955 기타 XP 각종 스크립트입니다. 36 file 쿠도신이치 2009.04.26 4272
954 타이틀/게임오버 [펌]색다른 게임오버 스크립트 14 file 또라에몽 2010.05.09 4267
953 액알입니다.정말 확신함 12 dkqkfsoatp 2007.12.13 4267
952 이동 및 탈것 아하! 그렇구나의 3D 신기술 체험 3 14 아하!잘봤어요. 2010.02.28 4261
951 기타 말풍선 스크립트. 62 file 『동그라미』♥ 2010.02.04 4254
950 전투 사이드뷰 전투(보행그래픽) 15 file 백호 2009.02.21 4244
949 스킬 스킬샵 스크립트 16 file 독도2005 2009.08.24 4223
948 메인화면에 별똥별 효과 6 file 아방스 2007.11.09 4220
947 기타 [게이지바]게이지바 스크립트 2.5 (실용적?) 17 file 코아 코스튬 2010.12.05 4219
946 메뉴 메뉴를 바꾸는 스크립트 14 №1 2012.08.04 4214
945 이름입력 한글이름 입력기 스크립트 14 백호 2009.02.22 4211
944 미니맵 [헬악이님 제보] 단축키 미니맵 만들기!!| 13 file 아방스 2007.11.09 4197
943 HUD 맵 이름 표시와 미니맵을 같이하자 8 file 뮤리온。 2011.10.08 4195
942 전투 ATB시스템 입니다. [스샷 첨부] 17 백호 2009.02.22 4182
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ... 52 Next
/ 52