[TIP] 키벨류 간단하게 사용하기

2021. 1. 20. 22:34·소스모드/TIP


키벨류 간단하게 사용하는 법은 아래의 스톡함수를 사용하면 기존보다 

훨씬 짧은줄로 간단하게 사용이가능합니다.

 

① 로드(정수, 문자열)

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
'소스모드/TIP' 카테고리의 다른 글
  • [컨버팅] 하프라이프2 데스매치 무기 시퀀스 리스트
  • [소스엔진] 무기,스킨등을 컨버팅하는데 필요한 툴
  • [TIP] VMT 입체방향을 고정시키는 법
  • [TIP] 소스모드 플러그인 언로드의 방법 두가지
백고미
백고미
  • 백고미
    백고미의 정신세계
    백고미
  • 전체
    오늘
    어제
    • 분류 전체보기 (125)
      • [ 공지사항 ] (0)
      • 정보 (14)
        • 워프레임 (5)
        • 게임 (3)
        • 군대 (1)
        • 이민 (1)
      • Java Spring (43)
        • JSP와 스프링 (34)
        • Tip (9)
      • Spring boot (1)
        • Tip (1)
      • 직업 정보 (2)
        • 경찰 공무원 (2)
        • AAFES (0)
        • HD GFD (0)
      • 리뷰 (1)
        • 인터넷 (1)
      • Life (2)
        • 운동 (1)
        • 자격증 (1)
      • 소스모드 (27)
        • CSGO (7)
        • CSS (0)
        • HL2DM (2)
        • L4D2 (1)
        • BMS (0)
        • TIP (16)
        • Extension (1)
        • 문법 (0)
      • C# (4)
        • s&box (4)
      • LUA (8)
        • Garry's Mod (8)
      • Resource (11)
        • Player Model (1)
        • Npc Model (1)
        • Weapon Model (2)
        • PropPhyics (6)
        • PropDynamic (1)
        • Texture (0)
        • Animation Texture (0)
        • Overlay (0)
        • Effect Sound (0)
        • Particle (0)
      • 일기장 (1)
        • TRH (4)
        • 스케줄 (1)
        • Els (0)
        • 프로젝트 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
  • 링크

    • John John한 블로그
  • 공지사항

  • 인기 글

  • 태그

    병무청가는법
    병무청가는길
    경기북부 병무청 가는 법
    경기북부 병무청
    경찰 간부후보생
    경기북부병무청 망월사
    윈도우10 고양이
    경기북부병무지청
    경찰 가산점표
    경찰 공무원 응시 자격
    공찰공무원 필수과목
    경기북부병무청
    윈도우10 참가자 프로그램
    키벨류
    운전면허 종류
    윈도우10 1주년
    경기북부병무청 가는법
    경찰시험 응시 자격
    경기북부 병무청 가는길
    병무청 가는 법
    발표 PPT
    윈도우10 닌자캣
    경기북부 병무청 가는 길
    경찰공무원 선택과목
    원동기장치면허
    스쿼트 운동 효과
    순경 가산점
    경기북부병무청 회룡역
    경찰공무원 가산점표
    병무청 가는 길
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
백고미
[TIP] 키벨류 간단하게 사용하기
상단으로

티스토리툴바