-
Notifications
You must be signed in to change notification settings - Fork 0
/
stat-exp.sk
119 lines (80 loc) · 3.9 KB
/
stat-exp.sk
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#레벨업 요구 경험치 변수 반환
function rpp_GetVar_ExpSystem() :: numbers:
set {_id} to rpp_GetID_S() # 변수 DB 저장 경로 로드
return {%{_id}%.LevelUpExp::*}
#특정 레벨 레벨업 요구 경험치 반환
function rpp_GetNextLevelRequiredExp(level:number) :: number:
set {_id} to rpp_GetID_S() # 변수 DB 저장 경로 로드
add 1 to {_level}
return {%{_id}%.LevelUpExp::%{_level}%}
#레벨 시스템 리로드
function rpp_Reload_ExpSystem():
set {_id} to rpp_GetID_S() # 변수 DB 저장 경로 로드
set {_max} to rpp_GetMaxLevel() # 최대 레벨 로드
set {_exp} to rpp_GetLevelUpExp() # 최초 레벨업 경험치 로드
set {_rate} to rpp_GetLevelUpExpRate() # 레벨업 요구 경험치 증가량 로드
set {_rate} to rpp_ConvertRate({_rate}) # 로드한 증가량을 연산 가능한 값으로 변환
delete {%{_id}%.LevelUpExp::*} # 기존 경험치 변수 초기화
loop {_max} times: # 경험치 변수 재설정
add {_exp} to {%{_id}%.LevelUpExp::*}
set {_exp} to {_exp} + ({_exp} * {_rate})
#플레이어 레벨 설정
function rpp_SetPlayerLevel(p:offlineplayer, level:number):
set {_id} to rpp_GetID()
set {_uuid} to uuid of {_p}
set {%{_id}%.PlayerLevel::%{_uuid}%} to {_level}
#플레이어 레벨 반환
function rpp_GetPlayerLevel(p:offlineplayer) :: number:
set {_id} to rpp_GetID()
set {_uuid} to uuid of {_p}
return {%{_id}%.PlayerLevel::%{_uuid}%}
#플레이어 경험치 설정
function rpp_SetPlayerExp(p:offlineplayer, exp:number):
set {_id} to rpp_GetID()
set {_uuid} to uuid of {_p}
set {%{_id}%.PlayerExp::%{_uuid}%} to {_exp}
#플레이어 경험치 반환
function rpp_GetPlayerExp(p:offlineplayer) :: number:
set {_id} to rpp_GetID()
set {_uuid} to uuid of {_p}
return {%{_id}%.PlayerExp::%{_uuid}%}
#플레이어 레벨 및 경험치 바 설정
function rpp_ApplyExpSystem(p:offlineplayer):
set {_maxLevel} to rpp_GetMaxLevel()
set {_level} to rpp_GetPlayerLevel({_p})
set {_maxExp} to rpp_GetNextLevelRequiredExp({_level})
set {_exp} to rpp_GetPlayerExp({_p})
set level of {_p} to {_level} # 레벨 출력 설정
if {_level} >= {_maxLevel}: #플레이어가 최대레벨일 때 경험치바를 최대로 설정
set level progress of {_p} to 1
else:
set level progress of {_p} to {_exp} / {_maxExp}
#플레이어 레벨업 / 경험치, 레벨 업데이트
function rpp_RunExp(p:offlineplayer, exp:number):
#레벨 체크
set {_maxLevel} to rpp_GetMaxLevel() # 최대 레벨 로드
set {_level} to rpp_GetPlayerLevel({_p}) # 플레이어 레벨 로드
if {_level} >= {_maxLevel}: # 플레이어 레벨이 최대 레벨이라면 중지
stop
#경험치 체크
set {_maxExp} to rpp_GetNextLevelRequiredExp({_level}) # 다음 레벨업에 필요한 경험치 로드
set {_playerExp} to rpp_GetPlayerExp({_p}) # 플레이어의 현재 경험치 로드
set {_setExp} to {_exp} + {_playerExp} # 설정할 경험치에 플레이어의 현재 경험치 + 입력받은 경험치 설정
if {_setExp} < {_maxExp}: # 두 값의 합이 레벨업 요구 경험치보다 작다면 플레이어의 경험치를 저장하고 종료
rpp_SetPlayerExp({_p}, {_setExp}) # 플레이어의 경험치 설정
rpp_ApplyExpSystem({_p}) # 변경된 경험치 바 적용
stop
#레벨업
add 1 to {_level} # 레벨 1 증가
remove {_maxExp} from {_setExp} # 올릴 경험치에서 요구 경험치만큼을 감소
rpp_SetPlayerLevel({_p}, {_level}) # 플레이어 레벨 설정
rpp_SetPlayerExp({_p}, {_setExp}) # 플레이어의 경험치 설정
rpp_ApplyExpSystem({_p}) # 변경된 경험치 바 적용
rpp_UpdatePlayerStatPoint({_p}) # 스텟포인트 업데이트
#반복 레벨업 감지
rpp_RunExp({_p}, 0) # 자기 자신을 다시 호출하여 반복 레벨업 감지
#플레이어 레벨 경험치 데이터 생성
function rpp_InitExp(p:offlineplayer):
rpp_SetPlayerLevel({_p}, 0)
rpp_SetPlayerExp({_p}, 0)
rpp_ApplyExpSystem({_p})