키벨류 간단하게 사용하는 법은 아래의 스톡함수를 사용하면 기존보다
훨씬 짧은줄로 간단하게 사용이가능합니다.
① 로드(정수, 문자열)
stock LoadInteger(Handle:Vault, const String:Key[32], const String:SaveKey[255], DefaultValue)
{
decl Variable;
KvJumpToKey(Vault, Key, false);
Variable = KvGetNum(Vault, SaveKey, DefaultValue);
KvRewind(Vault);
return Variable;
}
stock LoadString(Handle:Vault, const String:Key[32], const String:SaveKey[255], const String:DefaultValue[255], String:Reference[255])
{
KvJumpToKey(Vault, Key, false);
KvGetString(Vault, SaveKey, Reference, 255, DefaultValue);
KvRewind(Vault);
}
② 저장(위와 마찬가지로 정수, 문자열)
stock SaveInteger(Handle:Vault, const String:Key[32], const String:SaveKey[255], Variable)
{
//Delete:
if(Variable <= 0)
{
KvJumpToKey(Vault, Key, false);
KvDeleteKey(Vault, SaveKey);
KvRewind(Vault);
}
else
{
KvJumpToKey(Vault, Key, true);
KvSetNum(Vault, SaveKey, Variable);
KvRewind(Vault);
}
}
stock SaveString(Handle:Vault, const String:Key[32], const String:SaveKey[255], const String:Variable[255])
{
//Jump:
KvJumpToKey(Vault, Key, true);
//Save:
KvSetString(Vault, SaveKey, Variable);
//Rewind:
KvRewind(Vault);
}
위 두 종류의 스톡함수는 본인이 사용하는 스톡부분에 박아두시고
실제 사용 예제를 아래 써보겠습니다.
우선 기존의 경우 저장/로드 할거없이 키벨류가 차지하는 줄이 좀 깁니다.
예제) 기존
public Save(Client) // 저장
{
if(Client > 0 && IsClientInGame(Client))
{
new String:SteamID[32];
GetClientAuthString(Client, SteamID, 32);
decl Handle:Vault;
Vault = CreateKeyValues("Vault");
if(FileExists(Path2))
FileToKeyValues(Vault, Path2);
//정수값 저장 예시
if(Point[Client] > 0)
{
KvJumpToKey(Vault, "Point", true);
KvSetNum(Vault, SteamID, Point[Client]);
KvRewind(Vault);
}
else
{
KvJumpToKey(Vault, "Point", false);
KvDeleteKey(Vault, SteamID);
KvRewind(Vault);
}
//문자열 저장예시
if(!StrEqual(WName[Client], FIRST_NAME, false))
{
KvJumpToKey(Vault, "WName", true);
KvSetString(Vault, SteamID, WName[Client]);
KvRewind(Vault);
}
else
{
KvJumpToKey(Vault, "WName", false);
KvDeleteKey(Vault, SteamID);
KvRewind(Vault);
}
KvRewind(Vault);
KeyValuesToFile(Vault, Path2);
CloseHandle(Vault);
}
}
//불러오기
public Action:Load(Handle:Timer, any:Client)
{
if(Client > 0 && Client <= MaxClients)
{
new String:SteamID[32];
GetClientAuthString(Client, SteamID, 32);
decl Handle:Vault;
Vault = CreateKeyValues("Vault");
FileToKeyValues(Vault, Path2);
KvJumpToKey(Vault, "Point", false);
Point[Client] = KvGetNum(Vault, SteamID);
KvRewind(Vault);
KvJumpToKey(Vault, "WName", false);
KvGetString(Vault, SteamID, WName[Client], 255, FIRST_NAME);
KvRewind(Vault);
PrintToChat(Client, "\x04[다이샵] - 세이브데이터 불러오기 완료");
KvRewind(Vault);
CloseHandle(Vault);
}
}
하지만 제가 올린 위의 함수를 사용하면
① 로드(정수, 문자열)
- 정수값 로드 예제
stchogihwa[Client] = LoadInteger(SaveVault, "stchogihwa", SteamId, 0);
=> 저장할변수이름 = LoadInteger(Path값, "키벨류저장될이름", SteamId, 0);
- 문자열 로드 예제
LoadString(SaveVault, "Class", SteamId, Class[Client], 255);
=> LoadString(Path값, "키벨류저장될이름", SteamId, 저장할변수이름, 문자열길이);
② 저장(정수, 문자열)
- 정수값 저장 예제
SaveInteger(SaveVault, "deathtime", SteamId, deathtime[Client]);
=> SaveInteger(Path값, "키벨류저장될이름", SteamId, 저장할변수이름);
- 문자열 저장 예제
SaveString(SaveVault, "Class", SteamId, Class[Client]);
=> SaveString(Path값, "키벨류저장될이름", SteamId, 저장할변수이름);
요렇게 위에 저장할거 한개를 세줄쓸때 한줄로 간단하게 땡처리 가능.
추가적인 팁
소스모드 1.7.0이상부터는
GetClientAuthString(Client, SteamId, 32); 대신
GetClientAuthId(Client, AuthId_Steam2, SteamId, sizeof(SteamId)); 요걸 쓰면 좋음.
'소스모드 > TIP' 카테고리의 다른 글
[TIP] 각 게임 별 팀 번호 (0) | 2021.02.17 |
---|---|
[컨버팅] 하프라이프2 데스매치 무기 시퀀스 리스트 (0) | 2021.02.04 |
[소스엔진] 무기,스킨등을 컨버팅하는데 필요한 툴 (0) | 2021.02.04 |
[TIP] VMT 입체방향을 고정시키는 법 (0) | 2021.02.02 |
[TIP] 소스모드 플러그인 언로드의 방법 두가지 (0) | 2021.01.22 |