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 이동 및 탈것 Super Simple Vehicle System Enhanced 8.0 by DerVVulfman 1 Alkaid 2010.12.12 1956
660 변수/스위치 Switchless Common Events by PK8(XP/VX/VXA) Alkaid 2012.09.15 1202
659 메뉴 Tales Of Symphonia Menu 8 file 백호 2009.02.21 1744
658 기타 Tax Script 1.2 by The Darklord@rmxp.org 2 file 백호 2009.02.22 1130
657 메시지 Taylor's Simple Message System 2000 Alkaid 2020.07.05 247
656 기타 Terrain Encounter Areas by SephirothSpawn 백호 2009.02.22 778
655 기타 Tetris Attack by trickster 1 file 백호 2009.02.22 986
654 기타 Text Scroll by Dubealex (Release 3) 2 file 백호 2009.02.22 940
653 기타 Text to RGSS by DerVVulfman Alkaid 2011.04.18 1319
652 영상 The AVI Player 1.3 by DerVVulfman 3 Alkaid 2010.10.08 1707
651 기타 The General Monster Generator 1.1 by DerVVulfman 1 file Alkaid 2011.03.02 1496
650 전투 The Lycan ABS by DerVVulfman Alkaid 2013.07.22 1898
649 변수/스위치 The Self Data Suite by PK8 (XP/VX/VXA) Alkaid 2012.09.14 1237
648 기타 Trailing Characters ver.1 by SephirothSpawn 6 file 백호 2009.02.22 1551
647 그래픽 Transition Pack 1.11 by Fantasist Alkaid 2011.01.22 2044
646 스킬 Trickster's Bag of Skill Effects file 백호 2009.02.22 1077
645 스킬 Trickster's Bag of Skill Effects (SDK 필요) Alkaid 2012.09.17 1291
644 이동 및 탈것 Trickster's Caterpillar System 0.99 3 Alkaid 2010.12.23 1590
643 메뉴 Trickster's Plug 'n' Play Gradient Bar 2.0 1 file 백호 2009.02.22 2051
642 전투 Trickster씨의 전투 시스템 (SDK 필수?) Alkaid 2012.09.18 3261
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