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
661 기타 무기 회피율, 방어구 공격력 지정 스크립트 6 백호 2009.02.22 1248
660 기타 무기 개조 스크립트 file 백호 2009.02.21 1248
659 기타 몬스터도감 - 개량형 ? 7 file 백호 2009.02.22 2884
658 기타 몬스터 도감 7 file 백호 2009.02.21 1834
657 기타 몬스터 도감 18 file 백호 2009.02.22 2669
656 기타 몬스터 게이지바 턴알 22 file 키라링 2009.01.22 4016
655 기타 모험일기 5 키라링 2009.01.18 1825
654 기타 모험 일기 스크립트 2 file 백호 2009.02.21 1434
653 기타 명령어들 6 지존!! 2010.07.24 2288
652 기타 멤버 교체 11 file 백호 2009.02.22 2529
651 메인화면에 별똥별 효과 6 file 아방스 2007.11.09 4220
650 메뉴 메이플스토리처럼 메뉴를^^ 57 file 딸기님 2010.07.13 7145
649 메시지 메세지플러스3.1v스크립트(얼굴표시,메세지색상,속도등정하는스크립트) 8 백호 2009.02.21 4880
648 기타 메세지창의 위치 변동 자동화 file 백호 2009.02.21 1138
647 기타 메세지를 분출해 표시 백호 2009.02.22 1169
646 메시지 메세지 표시 업그레이드 11 file 백호 2009.02.21 4729
645 키입력 메세지 입력 스크립트. 25 file Bera 2010.10.18 3582
644 메시지 메세지 오류 수정 시스템 3 엘릭스토리안 2010.02.06 1474
643 메세지 분풀해 표시 스크립트 9 WMN 2008.03.17 2711
642 메뉴 메뉴화면에 '해야 할 일' 알려주는 창 넣기 11 하진 2012.04.23 3257
Board Pagination Prev 1 ... 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ... 52 Next
/ 52