스크립트 능력치에의한 스테이트 추가/해제, 능력치한계지정
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
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
1881 | 스킬아이콘 [10] | 충치보、 | 2007.08.19 | 1242 |
1880 | xp풍 마을 [3] | Vermond | 2007.08.14 | 1242 |
1879 | RPGXP 기본 맵타일을 RPG2K용으로 이식(?)한것 | 카리스 | 2007.11.27 | 1229 |
1878 | 문어 몬스터... | coor5101 | 2008.08.31 | 1229 |
1877 | 스타 유닛,기술 등 [15] | 불타는시체 | 2006.07.11 | 1223 |
1876 | 좋은남자들모듬 페이스칩 | 정곡지선 | 2007.11.14 | 1222 |
1875 | Golden Sun 느낌의 [3] | 충치보、 | 2007.09.01 | 1220 |
1874 | [평가]나의 '케로로중사' 와 게임의 '케로로중사' [15] | 곽효원 | 2005.11.13 | 1220 |
1873 | 이누야샤 캐릭터칩[카고메.이누야샤,미륵,시쿄우] [8] | lucky캣 | 2005.05.30 | 1217 |
1872 | RPG XP 용 필수 배틀러 <실제 적 크기> [3] | 덩키동크 | 2005.06.02 | 1209 |
1871 | Devil may CRY 의 단테 | 책벌레공상가 | 2005.07.11 | 1207 |
1870 | 선박과 항구 마을 [6] | 사신지 | 2006.09.28 | 1205 |
1869 | 삼국지 조조전 캐릭터 5 [3] | Tale | 2007.11.28 | 1204 |
1868 | [RPG2K] 일본풍 나는 맵칩(외부) [1] | 윤수마루 | 2006.01.06 | 1200 |
1867 | 분노에 잠긴 주인공,어두운 분위기 맵/[쇼팽혁명] | 프로우 | 2008.12.02 | 1198 |
1866 | 반 자작 rpgxp용 월드맵+오토타일 | 하라파 | 2008.02.22 | 1195 |
1865 | 페이스 메이커로 만들어본 얼굴들 [3] | 무풍섬 | 2008.10.12 | 1192 |
1864 | [RPG XP용] 강철의 연금술사의 에드워드 에릭 [3] | 책벌레공상가 | 2005.05.20 | 1192 |
1863 | 섬의 오두막 [2] | 사신지 | 2006.10.01 | 1188 |
1862 | 액알칩 검은옷에 철검들고있는 남자. | 의지 | 2006.03.01 | 1187 |