스크립트 능력치에의한 스테이트 추가/해제, 능력치한계지정
2009.05.26 23:36
extra_vars1 | 자작 |
---|---|
extra_vars2 | RPGXP |
extra_vars3 | 시스템관련 |
extra_vars4 | 1 |
extra_vars5 | 2 |
extra_vars6 | |
extra_vars7 | |
extra_vars8 | |
extra_vars9 | |
extra_vars10 | |
extra_vars11 | |
extra_vars12 |
################################################################################
# #
# 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::ATKLIMIT].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 start
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
사용시에는 가능하시면 리플, 쪽지나 메일로 사용보고 부탁드립니다.
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
50 | [무한응용]스위치/변수 임시 저장/로딩하기 | 카리스 | 2010.03.31 | 486 |
49 | 반칸이동 [1] | A.M.S | 2010.02.21 | 457 |
48 | 아이템획득 표시 | A.M.S | 2010.02.21 | 458 |
47 | 8방향이동 | A.M.S | 2010.02.21 | 383 |
46 | 특정범위내에들어오면이동하기 | A.M.S | 2010.02.21 | 329 |
45 | 새로운 턴형식(사이드뷰비슷한...) [1] | A.M.S | 2010.02.21 | 486 |
44 | 직업명 표시 | A.M.S | 2010.02.21 | 305 |
43 | 부드러운화면이동 | A.M.S | 2010.02.21 | 363 |
42 | 스텟포인트투자 | A.M.S | 2010.02.21 | 326 |
41 | 상점에서 상세정보보여주기 | A.M.S | 2010.02.21 | 310 |
40 | 아이템소지 한계돌파 | A.M.S | 2010.02.21 | 237 |
39 | 퀘스트스크립트 [2] | A.M.S | 2010.02.21 | 408 |
38 | 1인용메뉴 | A.M.S | 2010.02.21 | 308 |
37 | 기본전투 공격시 줌인되게 하는 스크립트 | [안타까운현실] | 2009.12.21 | 525 |
36 | Window_Message_Plus v3.2 [2] | 에존 | 2009.10.11 | 771 |
35 | 에너미 아이템 변화 스크립트 [1] | Evangelista | 2009.05.27 | 955 |
» | 능력치에의한 스테이트 추가/해제, 능력치한계지정 | Evangelista | 2009.05.26 | 688 |
33 | 이벤트커맨드 스크립트 관련 설명 [3] | Evangelista | 2009.01.27 | 1000 |
32 | 이벤트커맨드 스크립트 관련 설명 | Evangelista | 2009.01.27 | 893 |
31 | 이벤트커맨드 스크립트 조건분기법 모음 [1] | Evangelista | 2009.01.27 | 717 |