건의 및 신고

조회 수 548 추천 수 0 댓글 1
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

<이벤트로 스킬 레벨을 조작하는>
·있는 레벨로 설정한다
 set_skill_level(actor_id, skill_id, level)
   actor_id:액터 ID
   skill_id:스킬 ID
   level:설정 레벨
 (예) 아르시스의 크로스컷의 레벨을 10으로 설정한다.
   → set_skill_level(1,57,10)
·현재의 레벨을  1올린다
 skill_level_up(actor_id, skill_id)
 (예) 아르시스의 크로스컷의 레벨을  1올린다.
   → skill_level_up(1,57)
·현재의 레벨을  1내린다
 skill_level_down(actor_id, skill_id)
 (예) 아르시스의 크로스컷의 레벨을  1내린다.
   → skill_level_down(1,57)

<스킬 경험치의 표시>
적당한 윈도우(Window_Base 부하)에,
draw_skill_exp(acto,skill_id,x,y)와 기술한다.
  actor:액터
  skill_id:스킬 ID
  x:x방향 묘화 위치
  y:y방향 묘화 위치

이 위에거랑 스크립트상의 주석이 사용법임

그런데 이 위의 것을 참조하는 것보다 스크립트를 참조하는 것이 유용해요!

----------------------------절취선--------------------------

#==============================================================================
# ■ 스킬 업데이트   Ver. 4.6.1                     by Claimh
#------------------------------------------------------------------------------
#     스킬 마다 레벨제를 도입한다
#     전투중에 스킬을 사용하는 만큼, 위력 상승, 소비 SP감소, 명중율 상승
#     ※스킬 경험치의 표시:draw_skill_exp
#==============================================================================

module Skill_updata
  S_MIGHT = []
  S_COST = []
  S_HIT = []
  S_LEVEL = []
  S_INTER = []
  S_SLOPE = []
  S_ANIME = []
  S_ELEMENT = []
  S_STATE_P = []
  S_STATE_N = []
#==============================================================================
# □ 커스터마이즈 포인트
#==============================================================================
  #----------------------------------------------------------------------------
  # 기본 설정(여기만 설정하면, 다음은 필요 없을지도 모릅니다)
  #----------------------------------------------------------------------------
  # 위력 상승을 사용한다
  SKILL_MIGHT_UP = true          # 무효화→false
  # SP소비 감소를 사용한다
  SP_COST_DOWN = true            # 무효화→false
  # 명중율 상승을 사용한다
  SKILL_HIT_UP = true            # 무효화→false
  # 속성 변화를 사용한다
  ELEMENT_CHANGE = true          # 무효화→false
  # 스테이트 변화를 사용한다
  STATE_CHANGE = true            # 무효화→false
 
  # Lv업 표시를 한다
  SHOW_SKILL_LV_UP = true        # 무효화→false
  # Lv업시의 SE
  SKILLUP_SE = "056-Right02"     # 필요없으면 nil
  # 메뉴 사용시에도 올라간다(LV업 표시는 없습니다)
  MENU_COUNT = false

  # 스킬 레벨 상승 간격(몇회 사용할 때 마다 Lv 올라갈까)
  UPDATA_INTERVAL = 2            # 1이상
  # 한계 레벨
  LEVEL_LIMIT = 20               # 1이상

  # 위력 상승률(%)
  MIGHT_RATE = 0.5
  # SP소비 감소율(%)
  COST_RATE = 3
  # 명중 상승률(%)
  HIT_RATE = 1

  #----------------------------------------------------------------------------
  # 스킬&액터별 상세 설정
  #----------------------------------------------------------------------------
  # 한계 레벨
  # S_LEVEL[스킬 ID] = [액터 ID=>위력 상승률, …]
  # ※설정이 없는 경우→기본 설정(LEVEL_LIMIT)이 적응됩니다
  # ※액터 ID에 0을 지정하면 전액터 공통 설정이 됩니다.
  S_LEVEL[57] = {0=>10,1=>18, 2=>12, 3=>5, 4=>12, 5=>12, 6=>12, 7=>12, 8=>12}
  S_LEVEL[61] = {0=>10,1=>12, 2=>18, 3=>15, 4=>12, 5=>12, 6=>12, 7=>12, 8=>12}
 
  # 스킬&액터별 위력 상승률
  # S_MIGHT[스킬 ID] = [액터 ID=>위력 상승률, …]
  # ※설정이 없는 경우→기본 설정(MIGHT_RATE)이 적응됩니다
  # ※액터 ID에 0을 지정하면 전액터 공통 설정이 됩니다.
  S_MIGHT[57] = {0=>2,1=>8, 2=>2, 3=>5, 4=>2, 5=>2, 6=>2, 7=>2, 8=>2}
  S_MIGHT[61] = {0=>2,1=>2, 2=>8, 3=>5, 4=>2, 5=>2, 6=>2, 7=>2, 8=>2}

  # 스킬&액터별 SP소비 감소율
  # S_COST[스킬 ID] = [액터 ID=>SP소비 감소율, …]
  # ※설정이 없는 경우→기본 설정(COST_RATE)이 적응됩니다
  # ※액터 ID에 0을 지정하면 전액터 공통 설정이 됩니다.
  S_COST[57] = {0=>2,1=>8, 2=>2, 3=>5, 4=>2, 5=>2, 6=>2, 7=>2, 8=>2}
  S_COST[61] = {0=>2,1=>2, 2=>8, 3=>5, 4=>2, 5=>2, 6=>2, 7=>2, 8=>2}

  # 스킬&액터 별명 나카가미승율
  # S_HIT[스킬 ID] = [액터 ID=>명중 상승률, …]
  # ※설정이 없는 경우→기본 설정(HIT_RATE)이 적응됩니다
  # ※액터 ID에 0을 지정하면 전액터 공통 설정이 됩니다.
  S_HIT[57] = {0=>1,1=>2, 2=>1, 3=>1, 4=>1, 5=>1, 6=>1, 7=>1, 8=>1}
  S_HIT[61] = {0=>1,1=>1, 2=>2, 3=>1, 4=>1, 5=>1, 6=>1, 7=>1, 8=>1}

  #----------------------------------------------------------------------------
  # 스킬의 성장의 상세 설정
  #----------------------------------------------------------------------------
  # 스킬의 성장 패턴
  # 0:스킬을 일정 회수 사용하면 레벨업
  # 1:스킬을 일정 회수+레벨마다의 기울기분 사용하면 레벨업
  SKILL_PATTERN = 0
 
  # 스킬 레벨 상승 간격(몇회 사용할 때 마다 Lv 올라갈까)
  # S_INTER[스킬 ID] = [액터 ID=>상승 간격, …]
  #  ※설정이 없는 경우→기본 설정(UPDATA_INTERVAL)이 적응됩니다
  #  ※액터 ID에 0을 지정하면 전액터 공통 설정이 됩니다.
  S_INTER[57] = {0=>10,1=>5, 2=>8, 3=>8, 4=>8, 5=>8, 6=>8, 7=>8, 8=>8}
 
  # 스킬 레벨 상승의 기울기(스킬의 성장 패턴:1을 사용하는 경우만 필요)
  # S_SLOPE[스킬 ID] = [액터 ID=>상승의 기울어, …]
  #  ※설정이 없는 경우는 1이 됩니다.
  #  ※액터 ID에 0을 지정하면 전액터 공통 설정이 됩니다
  S_SLOPE[57] = {0=>10,1=>5, 2=>8, 3=>8, 4=>8, 5=>8, 6=>8, 7=>8, 8=>8}

  #----------------------------------------------------------------------------
  # 스킬이 성장한다고 애니메이션 변화시킨다(설정이 없으면 무시)
  #  기입 형태: S_ANIME[스킬 ID] = [액터 ID=>[[레벨, 애니메이션 ID]], ···]
  #----------------------------------------------------------------------------
  # 스킬 성장에 의한 애니메이션 변화를 실시해?
  USE_S_ANIME = true
 
  # 설정예
  # 아르시스는 크로스컷이 Lv.5, Lv.10(이)가 된다고 애니메이션이 바뀐다
  # 바질은 크로스컷이 Lv.11이 된다고 애니메이션이 바뀐다
  # ※액터 ID에 0을 지정하면 전액터 공통 설정이 됩니다.
  S_ANIME[57] = {0=>[[5, 69]], 1=>[[5, 69], [10, 70]], 2=>[[11, 70]]}

  #----------------------------------------------------------------------------
  # 속성 변화/스테이트 변화(설정이 없으면 무시)
  #----------------------------------------------------------------------------
  # 속성 변화
  # S_ELEMENT[스킬 ID] = {액터 ID=>{레벨=>[속성 ID,속성 ID…]}, ····}
  # ※액터 ID에 0을 지정하면 전액터 공통 설정이 됩니다.
  S_ELEMENT[57] = {1=>{1=>[1], 2=>[2], 3=>[3]}, 2=>{1=>[2], 2=>[5]}}

  # 스테이트 변화+
  # S_STATE_P[스킬 ID] = {액터 ID=>{레벨=>[스테이트 ID,스테이트 ID…]}, ····}
  # ※액터 ID에 0을 지정하면 전액터 공통 설정이 됩니다.
  S_STATE_P[57] = {1=>{1=>[1], 2=>[2], 3=>[3]}, 2=>{1=>[2], 2=>[5]}}

  # 스테이트 변화-
  # S_STATE_N[스킬 ID] = {액터 ID=>{레벨=>[스테이트 ID,스테이트 ID…]}, ····}
  # ※액터 ID에 0을 지정하면 전액터 공통 설정이 됩니다.
  S_STATE_N[57] = {1=>{1=>[1], 2=>[2], 3=>[3]}, 2=>{1=>[2], 2=>[5]}}

#==============================================================================
# □ 커스터마이즈 포인트 종료
#==============================================================================
end


class Game_Actor
  include Skill_updata
  attr_accessor   :skill_use      # 스킬 사용 회수
  attr_accessor   :skill_level    # 스킬 레벨
  attr_accessor   :skill_power    # 스킬 위력 갱신치
  attr_accessor   :skill_sp_cost  # 스킬 SP소비 갱신치
  attr_accessor   :skill_hit      # 스킬 명중율
  attr_accessor   :skill_up       # 레벨업 플래그
  attr_accessor   :skill_list     # 스킬 EXP 리스트
  alias skill_updata_init setup
  def setup(actor_id)
    skill_updata_init(actor_id)
    @skill_use = []
    @skill_level = []
    @skill_power = []
    @skill_sp_cost = []
    @skill_hit = []
    @skill_up = false
    @skill_list = []
    for id in 1...$data_skills.size
      @skill_use[id] = 0
      @skill_level[id] = 0
      @skill_power[id] = $data_skills[id].power
      @skill_sp_cost[id] = $data_skills[id].sp_cost
      @skill_hit[id] = $data_skills[id].hit
      @skill_list[id] = make_skill_list(id)
    end
  end

  #--------------------------------------------------------------------------
  # ● 스킬 EXP 계산
  #--------------------------------------------------------------------------
  def make_skill_list(skill_id)
    interval = S_INTER[skill_id]
    if !interval.nil? and !interval[@actor_id].nil?
      up_interval = interval[@actor_id]
    elsif !interval.nil? and !interval[0].nil?
      up_interval = interval[0]
    else
      up_interval = UPDATA_INTERVAL
    end
    # 기울기
    slope = S_SLOPE[skill_id]
    if !slope.nil? and !slope[@actor_id].nil?
      up_slope = slope[@actor_id]
    elsif !slope.nil? and !slope[0].nil?
      up_slope = slope[0]
    else
      up_slope = 1
    end
    limit = S_LEVEL[skill_id]
    # 한계 레벨
    if !limit.nil? and !limit[@actor_id].nil?
      limit_lv = limit[@actor_id]
    elsif !limit.nil? and !limit[0].nil?
      limit_lv = limit[0]
    else
      limit_lv = LEVEL_LIMIT
    end
    list = []
    list[0] = 0
    # 스킬 EXP 리스트 작성
    for lv in 1...limit_lv+1
      exp = 0
      case SKILL_PATTERN
      when 0
        exp = up_interval * lv
      when 1
        exp = list[lv-1] + up_slope * lv + up_interval
      end
      list[lv] = exp.truncate
    end
    return list
  end
end


class Game_Battler
  include Skill_updata
  #--------------------------------------------------------------------------
  # ● 스킬의 효과 적용(약간 강행.)
  #--------------------------------------------------------------------------
  alias skill_effect_update skill_effect
  def skill_effect(user, skill)
    up_flag = false
    if user.is_a?(Game_Actor) and ($scene.is_a?(Scene_Battle) or MENU_COUNT)
      skill_update_main(user, skill)
      skill_base = $data_skills[skill.id].dup
      # 위력 상승
      if SKILL_MIGHT_UP
        skill.power = user.skill_power[skill.id]
      end
      # 명중율 상승
      if SKILL_HIT_UP
        skill.hit = user.skill_hit[skill.id]
      end
      # 속성 변화
      if ELEMENT_CHANGE and S_ELEMENT != []
        ele1 = S_ELEMENT[skill.id]
        if !ele1.nil? and !ele1[user.id].nil?
          ele2 = ele1[user.id]
        elsif !ele1.nil? and !ele1[0].nil?
          ele2 = ele1[0]
        else
          # 설정이 없으면 무시
          ele2 = nil
        end
        if !ele2.nil? and ele2[user.skill_level[skill.id]] != nil
          skill.element_set = ele2[user.skill_level[skill.id]]
        end
      end
      # 스테이트 변화
      if STATE_CHANGE
        if S_STATE_P != []
          pst1 = S_STATE_P[skill.id]
          if !pst1.nil? and !pst1[user.id].nil?
            pst2 = pst1[user.id]
          elsif !pst1.nil? and !pst1[0].nil?
            pst2 = pst1[0]
          else
            # 설정이 없으면 무시
            pst2 = nil
          end
          if pst2 != nil and pst2[user.skill_level[skill.id]] != nil
            skill.plus_state_set = pst2[user.skill_level[skill.id]]
          end
        end
        if S_STATE_N != []
          nst1 = S_STATE_N[skill.id]
          if !nst1.nil? and !nst1[user.id].nil?
            nst2 = nst1[user.id]
          elsif !nst1.nil? and !nst1[0].nil?
            nst2 = nst1[0]
          else
            # 설정이 없으면 무시
            nst2 = nil
          end
          if nst1 != nil and nst2[user.skill_level[skill.id]] != nil
            skill.minus_state_set = nst2[user.skill_level[skill.id]]
          end
        end
      end
      up_flag = true
    end
    ret = skill_effect_update(user, skill)    # 원물
    if up_flag
      $data_skills[skill.id] = skill_base.dup
      # Miss시에는 후 반환
      if self.damage == "Miss"
        skill_use_recount(user, skill)
      end
    end
    return ret
  end
 
  #--------------------------------------------------------------------------
  # ● 스킬 업 카운트
  #--------------------------------------------------------------------------
  def skill_update_main(actor, skill)
    # 스킬 사용 회수의 카운트
    actor.skill_use[skill.id] += 1
    # 리밋트 취득
    limit = S_LEVEL[skill.id]
    if !limit.nil? and !limit[actor.id].nil?
      s_limit = limit[actor.id]
    elsif !limit.nil? and !limit[0].nil?
      s_limit = limit[0]
    else
      s_limit = LEVEL_LIMIT
    end
    # 개서 한계 도달
    if s_limit == false or actor.skill_level[skill.id] < s_limit
      # 레벨업 간격 취득
      interval = actor.skill_list[skill.id]
      # 개서 회수 도달
      if actor.skill_use[skill.id] == interval[actor.skill_level[skill.id]+1]
        # 스킬 레벨 상승
        actor.skill_level[skill.id] += 1
        actor.skill_up = true
        # 위력 상승 = 유효
        if SKILL_MIGHT_UP
          might = S_MIGHT[skill.id]
          if !might.nil? and !might[actor.id].nil?
            might_rate = might[actor.id]
          elsif !might.nil? and !might[0].nil?
            might_rate = might[0]
          else
            might_rate = MIGHT_RATE
          end
          # 보정치 갱신
          actor.skill_power[skill.id] += skill.power * might_rate / 100
          actor.skill_power[skill.id] = actor.skill_power[skill.id].truncate
        end
        # SP소비 감소 = 유효
        if SP_COST_DOWN
          cost = S_COST[skill.id]
          if !cost.nil? and !cost[actor.id].nil?
            cost_rate = cost[actor.id]
          elsif !cost.nil? and !cost[0].nil?
            cost_rate = cost[0]
          else
            cost_rate = COST_RATE
          end
          actor.skill_sp_cost[skill.id] -= skill.sp_cost * cost_rate / 100
          actor.skill_sp_cost[skill.id] = actor.skill_sp_cost[skill.id].truncate
          # SP소비가 0 이하는 있을 수 없다
          if actor.skill_sp_cost[skill.id] < 0
            actor.skill_sp_cost[skill.id] = 0
          end
        end
        # 명중율 상승 = 유효
        if SKILL_HIT_UP
          hit = S_HIT[skill.id]
          if !hit.nil? and !hit[actor.id].nil?
            hit_rate = hit[actor.id]
          elsif !hit.nil? and !hit[0].nil?
            hit_rate = hit[0]
          else
            hit_rate = HIT_RATE
          end
          actor.skill_hit[skill.id] += skill.hit * hit_rate / 100
          actor.skill_hit[skill.id] = actor.skill_hit[skill.id].truncate
          # 100이상은 있을 수 없다
          if actor.skill_hit[skill.id] > 100
            actor.skill_hit[skill.id] = 100
          end
        end
      end
    end
  end
 
  #--------------------------------------------------------------------------
  # ● 재카운트
  #--------------------------------------------------------------------------
  def skill_use_recount(actor, skill)
    if actor.skill_up
      actor.skill_level[skill.id] -= 1
      # 위력을 재계산
      if SKILL_MIGHT_UP
        actor.skill_power[skill.id] = skill.power
        might = S_MIGHT[skill.id]
        if !might.nil? and !might[actor.id].nil?
          might_rate = might[actor.id]
        elsif !might.nil? and !might[0].nil?
          might_rate = might[0]
        else
          might_rate = MIGHT_RATE
        end
        for i in 1...actor.skill_level[skill.id]
          actor.skill_power[skill.id] += skill.power * might_rate / 100
          actor.skill_power[skill.id] = actor.skill_power[skill.id].truncate
        end
      end
      # SP소비 재계산
      if SP_COST_DOWN
        actor.skill_sp_cost[skill.id] = skill.sp_cost
        cost = S_COST[skill.id]
        if !cost.nil? and !cost[actor.id].nil?
          cost_rate = cost[actor.id]
        elsif !cost.nil? and !cost[0].nil?
          cost_rate = cost[0]
        else
          cost_rate = COST_RATE
        end
        for i in 1...actor.skill_level[skill.id]
          actor.skill_sp_cost[skill.id] -= skill.sp_cost * cost_rate / 100
          actor.skill_sp_cost[skill.id] = actor.skill_sp_cost[skill.id].truncate
        end
        # SP소비가 0 이하는 있을 수 없다
        if actor.skill_sp_cost[skill.id] < 0
          actor.skill_sp_cost[skill.id] = 0
        end
      end
      # 명중율 재계산
      if SKILL_HIT_UP
        actor.skill_hit[skill.id] = skill.hit
        hit = S_HIT[skill.id]
        if !hit.nil? and !hit[actor.id].nil?
          hit_rate = hit[actor.id]
        elsif !hit.nil? and !hit[0].nil?
          hit_rate = hit[0]
        else
          hit_rate = HIT_RATE
        end
        for i in 1...actor.skill_level[skill.id]
          actor.skill_hit[skill.id] += skill.hit * hit_rate / 100
          actor.skill_hit[skill.id] = actor.skill_hit[skill.id].truncate
        end
        # 100이상은 있을 수 없다
        if actor.skill_hit[skill.id] > 100
          actor.skill_hit[skill.id] = 100
        end
      end
      actor.skill_up = false
    end
    actor.skill_use[skill.id] -= 1
  end
end

#==============================================================================
# 스킬 성장에 의한 애니메이션 변화
#==============================================================================
class Scene_Battle
  include Skill_updata
  #--------------------------------------------------------------------------
  # ● 프레임 갱신 (메인 국면 스텝 4 : 대상측 애니메이션)
  #--------------------------------------------------------------------------
  alias update_phase4_step4_skillup update_phase4_step4
  def update_phase4_step4
    update_phase4_step4_skillup
    if @active_battler.is_a?(Game_Actor) and USE_S_ANIME
      s_anime = S_ANIME[@skill.id]
      if !s_anime.nil? and !s_anime[@active_battler.id].nil?
        s_anime_set = s_anime[@active_battler.id]
      elsif !s_anime.nil? and !s_anime[0].nil?
        s_anime_set = s_anime[0]
      else
        # 설정이 없으면 무시
        return
      end
      for i in 0...s_anime_set.size
        s_anime_def = s_anime_set[i]
        # 규정 레벨 이상이라면 애니메이션 변화
        if @active_battler.skill_level[@skill.id] >= s_anime_def[0]
          # 대상측 애니메이션을 설정
          for target in @target_battlers
            target.animation_id = s_anime_def[1]
          end
        end
      end
    end
  end
end

#==============================================================================
# 이하, 레벨업 표시부분 (레벨업 표시가 필요 없으면 지워도 OK)
#==============================================================================
class Scene_Battle
  include Skill_updata
  if SHOW_SKILL_LV_UP
  #--------------------------------------------------------------------------
  # ● 프레임 갱신 (메인 국면 스텝 2 : 액션 개시)
  #--------------------------------------------------------------------------
  alias update_phase4_step2_skillup update_phase4_step2
  def update_phase4_step2
    if @active_battler.is_a?(Game_Actor)
      @active_battler.skill_up = false
    end
    @skillup = false
    update_phase4_step2_skillup   # 원물
  end

  #--------------------------------------------------------------------------
  # ● 프레임 갱신 (메인 국면 스텝 3 : 행동측 애니메이션)
  #--------------------------------------------------------------------------
  alias update_phase4_step3_skillup update_phase4_step3
  def update_phase4_step3
    if @active_battler.is_a?(Game_Actor) and @active_battler.skill_up != false
      @skillup = true
      @skill_up_window = Window_Skillup.new(@active_battler)
      if SKILLUP_SE != nil
        Audio.se_play("Audio/SE/" + SKILLUP_SE)
        sleep(0.1)
      end
    end
    update_phase4_step3_skillup
  end

  #--------------------------------------------------------------------------
  # ● 프레임 갱신 (메인 국면 스텝 5 : 데미지 표시)
  #--------------------------------------------------------------------------
  alias update_phase4_step5_skillup update_phase4_step5
  def update_phase4_step5
    if @active_battler.is_a?(Game_Actor) and @skillup
      @skill_up_window.dispose
      @active_battler.skill_up = false
      @skillup = false
    end
    update_phase4_step5_skillup     # 원물
  end

  #--------------------------------------------------------------------------
  # ● 프레임 갱신
  #--------------------------------------------------------------------------
  alias update_skillup update
  def update
    if @active_battler.is_a?(Game_Actor) and @active_battler.skill_up and @skillup
      @skill_up_window.contents_opacity -= 4
    end
    update_skillup              # 원물
  end
  end # if SHOW_SKILL_LV_UP
end

class Window_Skillup < Window_Base
  #--------------------------------------------------------------------------
  # ● 오브젝트 초기화
  #     actor : 액터
  #--------------------------------------------------------------------------
  def initialize(actor)
    super(actor.screen_x-140, 260, 250, 64)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.opacity = 0
    self.contents.font.color = Color.new(255, 64, 0)
    self.contents.draw_text(80, 0, 150, 32, "LEVEL UP!")
  end
end

 

#==============================================================================
# 이하, 재정의 부분을 포함한다(SP소비 감소의 기능이 필요 없으면 지워도 OK)
#==============================================================================
class Window_Skill < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 항목의 묘화(재정의)
  #     index : 항목 번호
  #--------------------------------------------------------------------------
  def draw_item(index)
    skill = @data[index]
    if @actor.skill_can_use?(skill.id)
      self.contents.font.color = normal_color
    else
      self.contents.font.color = disabled_color
    end
    x = 4 + index % 2 * (288 + 32)
    y = index / 2 * 32
    rect = Rect.new(x, y, self.width / @column_max - 32, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    bitmap = RPG::Cache.icon(skill.icon_name)
    opacity = self.contents.font.color == normal_color ? 255 : 128
    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
#-수정-----
    @actor.skill_level[skill.id] = 0 if @actor.skill_level[skill.id] == nil
    name_level = skill.name + "(Lv" + @actor.skill_level[skill.id].to_s + ")"
    self.contents.draw_text(x + 28, y, 204, 32, name_level, 0)
    @actor.skill_sp_cost[skill.id] = skill.sp_cost if @actor.skill_sp_cost[skill.id] == nil
    self.contents.draw_text(x + 232, y, 48, 32, @actor.skill_sp_cost[skill.id].to_s, 2)
#----------
  end
end

class Scene_Skill
  #--------------------------------------------------------------------------
  # ● 프레임 갱신 (타겟 윈도우가 액티브의 경우)(재정의)
  #--------------------------------------------------------------------------
  def update_target
    # B 버튼이 밀렸을 경우
    if Input.trigger?(Input::B)
      # 캔슬 SE 를 연주
      $game_system.se_play($data_system.cancel_se)
      # 타겟 윈도우를 소거
      @skill_window.active = true
      @target_window.visible = false
      @target_window.active = false
      return
    end
    # C 버튼이 밀렸을 경우
    if Input.trigger?(Input::C)
      # SP 조각등에서 사용할 수 없게 되었을 경우
      unless @actor.skill_can_use?(@skill.id)
        # 버저 SE 를 연주
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # 타겟이 전체의 경우
      if @target_window.index == -1
        # 파티 전체에 스킬의 사용 효과를 적용
        used = false
        for i in $game_party.actors
          used |= i.skill_effect(@actor, @skill)
        end
      end
      # 타겟이 사용자의 경우
      if @target_window.index <= -2
        # 타겟의 액터에게 스킬의 사용 효과를 적용
        target = $game_party.actors[@target_window.index + 10]
        used = target.skill_effect(@actor, @skill)
      end
      # 타겟이 단체의 경우
      if @target_window.index >= 0
        # 타겟의 액터에게 스킬의 사용 효과를 적용
        target = $game_party.actors[@target_window.index]
        used = target.skill_effect(@actor, @skill)
      end
      # 스킬을 사용했을 경우
      if used
        # 스킬의 사용시 SE 를 연주
        $game_system.se_play(@skill.menu_se)
#-----수정------------------------------------------------------
        @actor.skill_sp_cost[@skill.id] = @skill.sp_cost if @actor.skill_sp_cost[@skill.id] == nil
        # SP 소비
        @actor.sp -= @actor.skill_sp_cost[@skill.id]
#---------------------------------------------------------------
        # 각 윈도우의 내용을 재작성
        @status_window.refresh
        @skill_window.refresh
        @target_window.refresh
        # 전멸의 경우
        if $game_party.all_dead?
          # 게임 오버 화면으로 전환해
          $scene = Scene_Gameover.new
          return
        end
        # 코먼 이벤트 ID 가 유효의 경우
        if @skill.common_event_id > 0
          # 코먼 이벤트 호출 예약
          $game_temp.common_event_id = @skill.common_event_id
          # 맵 화면으로 전환해
          $scene = Scene_Map.new
          return
        end
      end
      # 스킬을 사용하지 않았던 경우
      unless used
        # 버저 SE 를 연주
        $game_system.se_play($data_system.buzzer_se)
      end
      return
    end
  end
end

class Scene_Battle
  include Skill_updata
  #--------------------------------------------------------------------------
  # ● 스킬 액션 결과 작성
  #--------------------------------------------------------------------------
  alias make_skill_action_result_skill_update make_skill_action_result
  def make_skill_action_result
    make_skill_action_result_skill_update
    # SP 소비
    if SP_COST_DOWN and @active_battler.is_a?(Game_Actor)
      @active_battler.sp += @skill.sp_cost
      @active_battler.sp -= @active_battler.skill_sp_cost[@skill.id]
    end
  end
end

class Game_Battler
  #--------------------------------------------------------------------------
  # ● 스킬의 사용 가능 판정
  #     skill_id : 스킬 ID
  #--------------------------------------------------------------------------
  alias skill_update_can_use? skill_can_use?
  def skill_can_use?(skill_id)
    ret = skill_update_can_use?(skill_id)
    if !ret and SP_COST_DOWN
      # SP 가 부족한 경우는 사용 불가가 되었어?
      if $data_skills[skill_id].sp_cost > self.sp
        if self.is_a?(Game_Actor)
          skill_sp_cost = self.skill_sp_cost[skill_id]
          if skill_sp_cost < self.sp
            ret = true
          end
        end
      end
    end
    return ret
  end
end

#==============================================================================
# 이벤트 스크립트 조작
#==============================================================================
class Interpreter
  include Skill_updata
  #--------------------------------------------------------------------------
  # ● 스킬 레벨 설정(레벨 세트)
  #     actor_id  :   액터 ID
  #     skill_id  :   스킬 ID
  #     level     :   설정 레벨
  #--------------------------------------------------------------------------
  def set_skill_level(actor_id, skill_id, level)
    actor = $game_actors[actor_id]
    skill = $data_skills[skill_id]
    # 리밋트 취득
    limit = S_LEVEL[skill_id]
    if !limit.nil? and !limit[actor.id].nil?
      s_limit = limit[actor.id]
    elsif !limit.nil? and !limit[0].nil?
      s_limit = limit[0]
    else
      s_limit = LEVEL_LIMIT
    end
    if level > s_limit or level < 0
      return
    end
    # 레벨
    actor.skill_level[skill.id] = level
    # 사용 회수
    use_list = actor.skill_list[skill.id]
    actor.skill_use[skill.id] = use_list[level]
    # 위력을 재계산
    if SKILL_MIGHT_UP
      actor.skill_power[skill.id] = skill.power
      might = S_MIGHT[skill.id]
      if !might.nil? and !might[actor.id].nil?
        might_rate = might[actor.id]
      elsif !might.nil? and !might[0].nil?
        might_rate = might[0]
      else
        might_rate = MIGHT_RATE
      end
      for i in 0...level
        actor.skill_power[skill.id] += skill.power * might_rate / 100
        actor.skill_power[skill.id] = actor.skill_power[skill.id].truncate
      end
    end
    # SP소비 재계산
    if SP_COST_DOWN
      actor.skill_sp_cost[skill.id] = skill.sp_cost
      cost = S_COST[skill.id]
      if !cost.nil? and !cost[actor.id].nil?
        cost_rate = cost[actor.id]
      elsif !cost.nil? and !cost[0].nil? and !cost.nil?
        cost_rate = cost[0]
      else
        cost_rate = COST_RATE
      end
      for i in 0...level
        actor.skill_sp_cost[skill.id] -= skill.sp_cost * cost_rate / 100
        actor.skill_sp_cost[skill.id] = actor.skill_sp_cost[skill.id].truncate
      end
      # SP소비가 0 이하는 있을 수 없다
      if actor.skill_sp_cost[skill.id] < 0
        actor.skill_sp_cost[skill.id] = 0
      end
    end
    # 명중율 재계산
    if SKILL_HIT_UP
      actor.skill_hit[skill.id] = skill.hit
      hit = S_HIT[skill.id]
      if !hit.nil? and !hit[actor.id].nil?
        hit_rate = hit[actor.id]
      elsif !hit.nil? and !hit[0].nil? and !hit.nil?
        hit_rate = hit[0]
      else
        hit_rate = HIT_RATE
      end
      for i in 0...level
        actor.skill_hit[skill.id] += skill.hit * hit_rate / 100
        actor.skill_hit[skill.id] = actor.skill_hit[skill.id].truncate
      end
      # 100이상은 있을 수 없다
      if actor.skill_hit[skill.id] > 100
        actor.skill_hit[skill.id] = 100
      end
    end
  end
 
  #--------------------------------------------------------------------------
  # ● 스킬 레벨 설정(레벨업)
  #     actor_id  :   액터 ID
  #     skill_id  :   스킬 ID
  #--------------------------------------------------------------------------
  def skill_level_up(actor_id, skill_id)
    actor = $game_actors[actor_id]
    set_skill_level(actor_id, skill_id, actor.skill_level[skill_id]+1)
  end
 
  #--------------------------------------------------------------------------
  # ● 스킬 레벨 설정(레벨 다운)
  #     actor_id  :   액터 ID
  #     skill_id  :   스킬 ID
  #--------------------------------------------------------------------------
  def skill_level_down(actor_id, skill_id)
    actor = $game_actors[actor_id]
    set_skill_level(actor_id, skill_id, actor.skill_level[skill_id]-1)
  end
end

class Window_Base < Window
  #--------------------------------------------------------------------------
  # ● 스킬 경험치의 표시(사용 회수/NEXT)
  #     actor        : 액터
  #     skill_id     : 스킬 ID
  #     x            : 묘화처 X 좌표
  #     y            : 묘화처 Y 좌표
  #--------------------------------------------------------------------------
  def draw_skill_exp(actor, skill_id, x, y)
    list = actor.skill_list[skill_id]
    limit = Skill_updata::S_LEVEL[skill_id]
    if !limit.nil? and !limit[actor.id].nil?
      skill_limit = limit[actor.id]
    elsif !limit.nil? and !limit[0].nil?
      skill_limit = limit[0]
    else
      skill_limit = Skill_updata::LEVEL_LIMIT
    end
    if actor.skill_level[skill_id] == skill_limit
      next_exp = "-"
    else
      next_exp = list[actor.skill_level[skill_id]+1].to_s
    end
    use = actor.skill_use[skill_id]
    skill_exp = use.to_s + "/" + next_exp
    self.contents.draw_text(x, y, 100, 32, skill_exp)
  end
end

----------------------------절취선----------------------------------

여기까지 복사하고요, 신모루치 제작 - 허졉한 스크립트 참조법!

스크립트 맨 위에서 바로 밑에 보면 이렇게 나와있음.

  #----------------------------------------------------------------------------
  # 기본 설정(여기만 설정하면, 다음은 필요 없을지도 모릅니다)
  #----------------------------------------------------------------------------
  # 위력 상승을 사용한다
  SKILL_MIGHT_UP = true          # 무효화→false
  # SP소비 감소를 사용한다
  SP_COST_DOWN = true            # 무효화→false
  # 명중율 상승을 사용한다
  SKILL_HIT_UP = true            # 무효화→false
  # 속성 변화를 사용한다
  ELEMENT_CHANGE = true          # 무효화→false
  # 스테이트 변화를 사용한다
  STATE_CHANGE = true            # 무효화→false
 
  # Lv업 표시를 한다
  SHOW_SKILL_LV_UP = true        # 무효화→false
  # Lv업시의 SE
  SKILLUP_SE = "056-Right02"     # 필요없으면 nil
  # 메뉴 사용시에도 올라간다(LV업 표시는 없습니다)
  MENU_COUNT = false

  # 스킬 레벨 상승 간격(몇회 사용할 때 마다 Lv 올라갈까)
  UPDATA_INTERVAL = 3            # 1이상
  # 한계 레벨
  LEVEL_LIMIT = 4               # 1이상

  # 위력 상승률(%)
  MIGHT_RATE = 0.5
  # SP소비 감소율(%)
  COST_RATE = 3
  # 명중 상승률(%)
  HIT_RATE = 1
여기서 #이라고 되있는 것은 주석인데, 그것을 참조하며 밑을 수정하면 자신의 게임에 유용히 사용할 수 있습니다^^

그러면 스크립트 능력이 오를지도;;;;

이상 부카제의 허졉한 강좌였습니다.

출처 - 공작소 

댓글 남기고 펐음 악플 삼가
출처-공작소 에서퍼온거

  • profile
    아방스 2008.01.31 17:04
    건의사항 게시판에는 홈페이지에 관련된 건의나 신고를 받는곳입니다. ^^;

List of Articles
분류 제목 글쓴이 날짜 조회 수
[공지] 개인적인 질문에대해서는 답변하지 않습니다. 7 괴도키드 2009.10.02 19239
건의사항 아방스 회원가입을 좀 까다롭게 하는게 어떨까요? zero? 2017.04.24 123
건의사항 아방스 회원 랭킹을 30위까지 확대시킬수는 없나요? 1 21thcentuary 2008.10.04 360
건의사항 아방스 커뮤니티 규정규칙에 관한 글을 보기 쉽게 되었으면 좋겠습니다. 1 코코아밀크 2017.01.21 111
건의사항 아방스 추천작 게시판으로 이동 (X) ---> 복사 (O) 3 2015.04.26 145
건의사항 아방스 채팅창의 음악이 조금더 다양하게 재생되었으면 좋겠습니다. 2 Lamancha 2014.11.30 298
건의사항 아방스 신규회원가입이 안되는 치명적인 이슈가 있습니다 파치리스 2020.12.26 363
건의사항 아방스 모바일앱을 만들어주세요 1 보자기군 2014.10.30 367
건의사항 아방스 리뉴얼에 대한 의견 2 소프트아이스크림 2011.12.30 908
건의사항 아방스 디자인 개편 건의 file 제스터 2015.02.25 147
건의사항 아방스 검색창 겔럭시안드로메다 2011.06.06 999
건의사항 아니 신고로 그만둘 사항은 아닌것같습니다 꿈꾸는소년 2008.10.10 337
건의사항 아... 그리고 글자 겹침 현상이라고 해야하나요? file 하늘바라KSND 2011.05.25 834
건의사항 실황이 안보여요 1 file LuD 2016.01.18 119
건의사항 신규가입 오류는 어떻게 할 수가 없는 문제인가요? 낄낄뿡스 2021.01.04 176
건의사항 신규 회원가입이 안됩니다. 폴트 2021.02.08 185
건의사항 신고합니다. 밑에분 허위신고임. 일단클릭 1 미카엘 2008.02.29 391
건의사항 신고합니다. 1 file 난 김민석이다 2008.02.28 403
건의사항 습작님! 외부소재 등록좀..ㅎㅎ 1 은색바람 2013.06.18 483
건의사항 스킬레벨업 스크립트 강좌로올려주세요 ~~~ 1 하야부사 2008.01.19 548
건의사항 스크립트 자료실 파일을 수정하려고 하는데 4 코아 코스튬 2011.09.05 980
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 12 13 Next
/ 13