건의 및 신고

조회 수 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
    건의사항 게시판에는 홈페이지에 관련된 건의나 신고를 받는곳입니다. ^^;

  1. [공지] 개인적인 질문에대해서는 답변하지 않습니다.

    Date2009.10.02 By괴도키드 Views19239
    read more
  2. 다운좀요ㅠㅠ

    Date2008.01.31 By알피지 Views572
    Read More
  3. Q&A게시판과 FAQ게시판을 만들어주세요! (그외 여러 건의)

    Date2008.01.19 Category건의사항 By플로리 Views747
    Read More
  4. 스킬레벨업 스크립트 강좌로올려주세요 ~~~

    Date2008.01.19 Category건의사항 By하야부사 Views548
    Read More
  5. 소재만들기

    Date2008.01.16 Category건의사항 Byㅇㅇㅇㅇ Views783
    Read More
  6. 아방스님 문장의 표시 이벤트 에서 사용 할수 있는 명령 [수정필요] ◀ 이강좌

    Date2008.01.15 Category건의사항 By하야부사 Views810
    Read More
  7. 아방스님 강좌올릴때요.

    Date2008.01.14 Category건의사항 By하야부사 Views848
    Read More
  8. 겨울분위기에 맞게 해봤습니다.

    Date2011.12.24 Category로고신청 By완폐남™ Views1582
    Read More
  9. 그냥 잡스 관련 기사 보다가...생각나서

    Date2011.10.10 Category로고신청 By아방스 Views892
    Read More
  10. [BGM]아방스 다용도 로고2

    Date2011.08.15 Category로고신청 By맛난호빵 Views1147
    Read More
  11. 아방스 다용도 로고

    Date2011.08.14 Category로고신청 By맛난호빵 Views1189
    Read More
  12. 저도 로고좀 만들어봤습니다

    Date2011.08.14 Category로고신청 ByrlawnsahXP Views1150
    Read More
  13. 애퍼쳐 사이언스 로고 모방

    Date2011.08.14 Category로고신청 By맛난호빵 Views1275
    Read More
  14. 로고_종결류.gif

    Date2011.07.25 Category로고신청 ByJACKY Views1201
    Read More
  15. 로고신청!!!!!!!뭬풰 뤼쉬 스투아 윌!!!!(?)

    Date2011.07.25 Category로고신청 By엘리카 Views1225
    Read More
  16. 현재 아방스는 ASCII시대.gif

    Date2011.05.26 Category로고신청 By맛난호빵 Views1767
    Read More
  17. 로고신청이라는게 있었구나

    Date2011.05.25 Category로고신청 ByJACKY Views1423
    Read More
  18. 아방스의 확 바뀌는 스타일

    Date2011.05.24 Category로고신청 By은색바람 Views1431
    Read More
Board Pagination Prev 1 ... 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 Next
/ 58