VX 스크립트

자작 스크립트입니다.

 

################################################################################
#                                                                              #
# DEST21C : 파라미터변화에 따른 스테이트 자동 추가 / 해제 스크립트 V0.8        #
# DEST21C : 파라미터제한수치 설정 스크립트 V1.0                                #
#                                                                              #
# 버그보고 및 리퀘스트 : dest21c@nate.com                                      #
#                                                                              #
# 추후예정 : 현재 HP나 MP가 MAXHP나 MAXMP의 일정 %일때 스테이트 자동 추가/해제 #
#                                                                              #
################################################################################
=begin

@ 주의사항
 - Game_Battler 클래스의 일부 항목을 재정의합니다.
 - 같은 개소를 재정의하는 스크립트와 경합할 우려가 있습니다.
 - 재정의한 항목
  : def maxhp_limit
  : def maxhp
  : def maxmp
  : def atk
  : def def
  : def spi
  : def agi
  : def maxhp=
  : def maxmp=
  : def atk=
  : def def=
  : def spi=
  : def agi=
  : Game_Actor 클래스의 def maxhp_limit
 
=end

module DEST21C
  module PARAMETER_STATE
    # 커스터마이즈 항목
    # ID : 조건합치시 추가할 스테이트 ID의 배열 ([1, 2, 3번째...])
    # CON1 : 계산의 조건 파라미터 수치([1, 2, 3번째...])
    # CON2 : CON1초과이면 0, 이하이면 1 (예: [0, 1, 0...])
    # CON3 : 파라미터종별
    #   (1 : STR / 2 : DEF / 3 : SPI / 4 : AGI / 5 : MAXHP / 6 : MAXMP)
    #   ([1, 2, 3번째...])
    #
    # 예시) MAXHP가 50이하일 때 30번 스테이트 추가 / SPI가 100초과일때 10번 추가
    # STATE_ID = [30, 10]
    # STATE_CON1 = [50, 100]
    # STATE_CON2 = [1, 0]
    # STATE_CON3 = [5, 3]
    STATE_ID = [20, 21, 22, 23]
    STATE_CON1 = [50, 50, 50, 50]
    STATE_CON2 = [0, 1, 0, 1]
    STATE_CON3 = [1, 2, 3, 4]
  end
  module PARAMETER_LIMIT
    # 커스터마이즈 항목
    # MAXHP : MAXHP의 한계치
    # MAXMP : MAXMP의 한계치
    # ATK : ATK의 한계치
    # DEF : DEF의 한계치
    # SPI : SPI의 한계치
    # AGI : AGI의 한계치
    MAXHP = 999
    MAXMP = 999
    ATK = 999
    DEF = 999
    SPI = 999
    AGI = 999
  end
end


 

class Game_Battler
  STATEID_LIST = DEST21C::PARAMETER_STATE::STATE_ID
  STATECON1_LIST = DEST21C::PARAMETER_STATE::STATE_CON1
  STATECON2_LIST = DEST21C::PARAMETER_STATE::STATE_CON2
  STATECON3_LIST = DEST21C::PARAMETER_STATE::STATE_CON3
  # 각종 파라미터를 읽을 시 스테이트의 추가/해제 판정
  def atk
    # 통상 처리의 실행
    n = [[base_atk + @atk_plus, 1].max, DEST21C::PARAMETER_LIMIT::ATK].min
    for state in states do n *= state.atk_rate / 100.0 end
    n = [[Integer(n), 1].max, DEST21C::PARAMETER_LIMIT::ATK].min
    # 조건의 파라미터 종별을 검색한다.
    for s in 0...STATECON3_LIST.size
      if STATECON3_LIST[s] == 1
        # 수치 초과의 조건이라면
        if STATECON2_LIST[s] == 0
          n_id = STATEID_LIST[s]
          if n > STATECON1_LIST[s]
            add_state(n_id)
          elsif n <= STATECON1_LIST[s]
            remove_state(n_id)
          end
        # 수치 이하의 조건이라면
        elsif STATECON2_LIST[s] == 1
          n_id = STATEID_LIST[s]
          if n <= STATECON1_LIST[s]
            add_state(n_id)
          elsif n > STATECON1_LIST[s]
            remove_state(n_id)
          end
        end
      end
    end
    return n
  end #def
   
  def def
    # 통상 처리의 실행
    n = [[base_def + @def_plus, 1].max, DEST21C::PARAMETER_LIMIT::DEF].min
    for state in states do n *= state.def_rate / 100.0 end
    n = [[Integer(n), 1].max, DEST21C::PARAMETER_LIMIT::DEF].min
    # 조건의 파라미터 종별을 검색한다.
    for s in 0...STATECON3_LIST.size
      if STATECON3_LIST[s] == 2
        # 수치 초과의 조건이라면
        if STATECON2_LIST[s] == 0
          n_id = STATEID_LIST[s]
          if n > STATECON1_LIST[s]
            add_state(n_id)
          elsif n <= STATECON1_LIST[s]
            remove_state(n_id)
          end
        # 수치 이하의 조건이라면
        elsif STATECON2_LIST[s] == 1
          n_id = STATEID_LIST[s]
          if n <= STATECON1_LIST[s]
            add_state(n_id)
          elsif n > STATECON1_LIST[s]
            remove_state(n_id)
          end
        end
      end
    end
    return n
  end #def
 
  def spi
    # 통상 처리의 실행
    n = [[base_spi + @spi_plus, 1].max, DEST21C::PARAMETER_LIMIT::SPI].min
    for state in states do n *= state.spi_rate / 100.0 end
    n = [[Integer(n), 1].max, DEST21C::PARAMETER_LIMIT::SPI].min
    # 조건의 파라미터 종별을 검색한다.
    for s in 0...STATECON3_LIST.size
      if STATECON3_LIST[s] == 3
        # 수치 초과의 조건이라면
        if STATECON2_LIST[s] == 0
          n_id = STATEID_LIST[s]
          if n > STATECON1_LIST[s]
            add_state(n_id)
          elsif n <= STATECON1_LIST[s]
            remove_state(n_id)
          end
        # 수치 이하의 조건이라면
        elsif STATECON2_LIST[s] == 1
          n_id = STATEID_LIST[s]
          if n <= STATECON1_LIST[s]
            add_state(n_id)
          elsif n > STATECON1_LIST[s]
            remove_state(n_id)
          end
        end
      end
    end
    return n
  end #def
 
  def agi
    # 통상 처리의 실행
    n = [[base_agi + @agi_plus, 1].max, DEST21C::PARAMETER_LIMIT::AGI].min
    for state in states do n *= state.agi_rate / 100.0 end
    n = [[Integer(n), 1].max, DEST21C::PARAMETER_LIMIT::AGI].min
    # 조건의 파라미터 종별을 검색한다.
    for s in 0...STATECON3_LIST.size
      if STATECON3_LIST[s] == 4
        # 수치 초과의 조건이라면
        if STATECON2_LIST[s] == 0
          n_id = STATEID_LIST[s]
          if n > STATECON1_LIST[s]
            add_state(n_id)
          elsif n <= STATECON1_LIST[s]
            remove_state(n_id)
          end
        # 수치 이하의 조건이라면
        elsif STATECON2_LIST[s] == 1
          n_id = STATEID_LIST[s]
          if n <= STATECON1_LIST[s]
            add_state(n_id)
          elsif n > STATECON1_LIST[s]
            remove_state(n_id)
          end
        end
      end
    end
    return n
  end #def

  def maxhp_limit
    return DEST21C::PARAMETER_LIMIT::MAXHP
  end
 
  def maxhp
    # 통상 처리의 실행
    n = [[base_maxhp + @maxhp_plus, 1].max, maxhp_limit].min
    # 조건의 파라미터 종별을 검색한다.
    for s in 0...STATECON3_LIST.size
      if STATECON3_LIST[s] == 5
        # 수치 초과의 조건이라면
        if STATECON2_LIST[s] == 0
          n_id = STATEID_LIST[s]
          if n > STATECON1_LIST[s]
            add_state(n_id)
          elsif n <= STATECON1_LIST[s]
            remove_state(n_id)
          end
        # 수치 이하의 조건이라면
        elsif STATECON2_LIST[s] == 1
          n_id = STATEID_LIST[s]
          if n <= STATECON1_LIST[s]
            add_state(n_id)
          elsif n > STATECON1_LIST[s]
            remove_state(n_id)
          end
        end
      end
    end
    return n
  end #def
 
  def maxmp
    # 통상 처리의 실행
    n = [[base_maxmp + @maxmp_plus, 0].max, DEST21C::PARAMETER_LIMIT::MAXMP].min
    # 조건의 파라미터 종별을 검색한다.
    for s in 0...STATECON3_LIST.size
      if STATECON3_LIST[s] == 6
        # 수치 초과의 조건이라면
        if STATECON2_LIST[s] == 0
          n_id = STATEID_LIST[s]
          if n > STATECON1_LIST[s]
            add_state(n_id)
          elsif n <= STATECON1_LIST[s]
            remove_state(n_id)
          end
        # 수치 이하의 조건이라면
        elsif STATECON2_LIST[s] == 1
          n_id = STATEID_LIST[s]
          if n <= STATECON1_LIST[s]
            add_state(n_id)
          elsif n > STATECON1_LIST[s]
            remove_state(n_id)
          end
        end
      end
    end
    return n
  end #def

  # 최대HP의 설정
  def maxhp=(new_maxhp)
    @maxhp_plus += new_maxhp - self.maxhp
    @maxhp_plus = [[@maxhp_plus, -DEST21C::PARAMETER_LIMIT::MAXHP].max, DEST21C::PARAMETER_LIMIT::MAXHP].min
    @hp = [@hp, self.maxhp].min
  end
 
  # 최대MP의 설정
  def maxmp=(new_maxmp)
    @maxmp_plus += new_maxmp - self.maxmp
    @maxmp_plus = [[@maxmp_plus, -DEST21C::PARAMETER_LIMIT::MAXMP].max, DEST21C::PARAMETER_LIMIT::MAXMP].min
    @mp = [@mp, self.maxmp].min
  end
 
  # ATK의 설정
  def atk=(new_atk)
    @atk_plus += new_atk - self.atk
    @atk_plus = [[@atk_plus, -DEST21C::PARAMETER_LIMIT::ATK].max, DEST21C::PARAMETER_LIMIT::ATK].min
  end
 
  # DEF의 설정
  def def=(new_def)
    @def_plus += new_def - self.def
    @def_plus = [[@def_plus, -DEST21C::PARAMETER_LIMIT::DEF].max, DEST21C::PARAMETER_LIMIT::DEF].min
  end
 
  # SPI의 설정
  def spi=(new_spi)
    @spi_plus += new_spi - self.spi
    @spi_plus = [[@spi_plus, -DEST21C::PARAMETER_LIMIT::SPI].max, DEST21C::PARAMETER_LIMIT::SPI].min
  end
 
  # AGI의 설정
  def agi=(new_agi)
    @agi_plus += new_agi - self.agi
    @agi_plus = [[@agi_plus, -DEST21C::PARAMETER_LIMIT::AGI].max, DEST21C::PARAMETER_LIMIT::AGI].min
  end
 
end #class Game_Battler

# 상기 실행만으로는 곧바로 적용되지 않으므로 파라미터를 불러들여 처리한다.
# Scene_Menu 클래스에서 각종 파라미터를 불러들인다.
class Scene_Menu < Scene_Base
  alias dest21c_parameter_state_start start
  def start
    parameters_load_module
    dest21c_parameter_state_start
  end
end

# Scene_Item 클래스에서 각종 파라미터를 불러들인다.
class Scene_Item < Scene_Base
  alias dest21c_parameter_state_update update
  def update
    parameters_load_module
    dest21c_parameter_state_update
  end
end

# Scene_Skill 클래스에서 각종 파라미터를 불러들인다.
class Scene_Skill < Scene_Base
  alias dest21c_parameter_state_update update
  def update
    parameters_load_module
    dest21c_parameter_state_update
  end
end

# Scene_Status 클래스에서 각종 파라미터를 불러들인다.
class Scene_Status < Scene_Base
  alias dest21c_parameter_state_start start
  def start
    parameters_load_module
    dest21c_parameter_state_start
  end
end

# Scene_Equip 클래스에서 각종 파라미터를 불러들인다.
class Scene_Equip < Scene_Base
  alias dest21c_parameter_state_update update
  def update
    parameters_load_module
    dest21c_parameter_state_update
  end
end

# Scene_Battle 클래스에서 각종 파라미터를 불러들인다.
class Scene_Battle < Scene_Base
  alias dest21c_parameter_state_update update
  def update
    parameters_load_module
    dest21c_parameter_state_update
  end
end

# 액터의 최대HP한계치를 설정한다.
class Game_Actor < Game_Battler
  def maxhp_limit
    return super()
  end
end

# 각종 파라미터를 불러들이는 모듈
def parameters_load_module
  $game_party.members.each{|actor|
    a = actor.atk}
  $game_party.members.each{|actor|
    a = actor.def}
  $game_party.members.each{|actor|
    a = actor.spi}
  $game_party.members.each{|actor|
    a = actor.agi}
  $game_party.members.each{|actor|
    a = actor.maxhp}
  $game_party.members.each{|actor|
    a = actor.maxmp}
end

 

 

 

 

버그보고나 리퀘스트는 본문의 메일로 보내셔도 되지만 리플이나 쪽지로 남기셔도 좋습니다.

가능하면 사용시에는  메일이나 리플, 쪽지로 사용보고를 해 주시면 감사하겠습니다.
Comment '5'
  • ?
    배군 2009.05.28 16:15

    에반님

    안녕하세염...... 제가 데미지 공식을 좀 바꾸려하는데......

    데미지 와 방어력을 1-1로하려는데요(원래는 데미지*4-방어력*2 잖아요)

    평타 데미지는 괜찮은데 스킬데미지를 어떻게 정해야할지 모르겠어요 ㅠㅠ 어캐하죠?

    님게임보면 공격력하고 방어력 나누기 공식 사용했다던데......

  • ?
    Evangelista 2009.05.28 16:39
    지금은 근무중이니 원하시는 사양을 말씀해 주시면 집에 가서 만들어 드리든가 도와드리든가 하겠습니다.
  • ?
    Evangelista 2009.05.28 16:37

    공격력 - 방어력 = 대미지 공식을 쓰시겠다는 건가요?

    스킬은 연산에 포함되는 항목이 많아서 좀 짜증납니다.

    오히려 그걸 잘 이용하면 여러가지 특수스킬을 만들 수 있습니다만.

  • ?
    Zero_Som 2009.05.29 17:16
    능력치 최대치는 이벤트로도 구현할수있... 습니다아.
  • ?
    Maxim_Cool 2012.01.23 05:29

    수고하시네요!!!!


List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 스크립트 자료 게시물 작성시 주의사항 3 습작 2012.12.24 5398
317 메시지 어드밴스 텍스트 시스템 13 file 카르와푸딩의아틀리에 2009.06.30 4918
316 기타 미니게임 로또??일까? 14 file 카르와푸딩의아틀리에 2009.06.30 2577
315 이동 및 탈것 달리면 스태미너가 감소하는 스크립트 18 file 카르와푸딩의아틀리에 2009.06.30 2869
314 메뉴 몬스터도감 심플버전! 52 file 카르와푸딩의아틀리에 2009.06.30 6907
313 메뉴 전투 결과 팝업 스크립트 12 file 카르와푸딩의아틀리에 2009.06.30 3381
312 기타 회피,명중,크리 스테이트를 작성하는 스크립트 9 카르와푸딩의아틀리에 2009.06.30 2393
311 전투 WGB배틀 시스템. 59 file 카르와푸딩의아틀리에 2009.06.30 8777
310 전투 RPGTankentai SBS3.3b 버전 (사이드뷰) 21 file 카르와푸딩의아틀리에 2009.07.01 8455
309 기타 높이(층)를 설정하는 스크립트 11 file 카르와푸딩의아틀리에 2009.07.01 3343
308 기타 밤낮의 변화에 따른 전투배경의 변화 스크립트 10 file 카르와푸딩의아틀리에 2009.07.01 2948
307 이동 및 탈것 탈것탑승후 내부로 이동하는 스크립트 16 file 카르와푸딩의아틀리에 2009.07.01 3268
306 오디오 사운드 자동 변환 설정 rukan 2009.07.01 1461
305 기타 페이드 시간 변경 2 rukan 2009.07.01 1360
304 온라인 VX Phoenix 온라인 스크립트 Ver 1.5 36 아방스 2009.07.02 5510
303 HUD HUD HP / MP 게이지바 스크립트 29 file 아방스 2009.07.02 5677
302 기타 배틀신에서 곡 넘기기 2 rukan 2009.07.02 1757
301 이동 및 탈것 대쉬금지의 변경 1 rukan 2009.07.02 1449
300 기타 『주석을 활용한 이벤트 커맨드 확장』스크립트 1 rukan 2009.07.02 1600
299 HUD X 와 Y 좌표 표시 해주는 스크립트 9 아방스 2009.07.03 2760
298 맵/타일 레이 월드맵 스크립트 14 file 카르와푸딩의아틀리에 2009.07.04 4813
Board Pagination Prev 1 ... 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 ... 32 Next
/ 32