이전에 단편적으로 비슷한글을 올린적이 있다.
바로 카솟,데매,팀포등에서 사용하던 화면흔들기 코드를 그대로 사용하면
서버가 팅기게된다. 이유는 BfWriteByte를 지원하지 않는데 사용했기 때문이었다.
따라서 Protobuf를 사용하라고 글을 올렸었다.
일단 이글을 올린 이유는 아래부터 시작한다.
1. 일반적으로 Protobuf를 보면 Angle, Bool, Color, Float, Int, String ... 등 BfWrite에 있는건 전부 있다.
이때 중요한건 BfWrite에는 안써도 됬던 값인 const char[] field 즉 "여기부분값"을 새로 찾아서 넣어줘야 한다.
여기서 문제가 발생했다.
예를들어 단순히 컨버팅작업을 통해 채팅태그 기능을 만든다 치자. ( 카솟 - > 글옵 )
그럼 카솟 코드는 뭐 Sayhook안에 어쩌구저쩌구 써놓고 BfWrite를 사용한 코드가 있을것이다.
stock SayText2ToTeam(client, team, const String:message[], any:...) { new Handle:buffer = INVALID_HANDLE; new String:txt[255]; for(new i = 1; i <= MaxClients; i++){ if(IsClientInGame(i)){ new targetTeam = GetClientTeam(i); if(targetTeam == team || targetTeam == TEAM_SPECTATOR){ SetGlobalTransTarget(i); VFormat(txt, sizeof(txt), message, 3); buffer = StartMessageOne("SayText2", i); if (buffer != INVALID_HANDLE) { BfWriteByte(buffer, client); BfWriteByte(buffer, true); BfWriteString(buffer, txt); EndMessage(); buffer = INVALID_HANDLE; } } } } }
뭐 대충 이런식으로 이런거는 직접 컨버팅할필요 없이 구글링하면 바로 나온다.
아래의 코드를 쓰면된다.
stock PbSayText2(client, author = 0, bool:bWantsToChat = false, const String:szFormat[], any:...) { decl String:szSendMsg[192]; VFormat(szSendMsg, sizeof(szSendMsg), szFormat, 5); StrCat(szSendMsg, sizeof(szSendMsg), "\n"); new Handle:pb = StartMessageOne("SayText2", client); if (pb != INVALID_HANDLE) { PbSetInt(pb, "ent_idx", author); PbSetBool(pb, "chat", bWantsToChat); PbSetString(pb, "msg_name", szSendMsg); PbAddString(pb, "params", ""); PbAddString(pb, "params", ""); PbAddString(pb, "params", ""); PbAddString(pb, "params", ""); EndMessage(); } }
이걸 쓰면 똑같은 기능을 글옵에서 쓸수있다.
2. 근데 위기능은 어디서나 자주쓰이는 기능이라 찾기도 쉽고 굳이 내가 만들필요없다.
문제는 바로 생소한것은 구글링으로 나오지 않는다는점이다.
아래는 어제오늘 게렛쨩의 stocklib를 컨버팅하다 막힌 부분이다.
Pbset값 중간에 ""에 뭘넣을지 몰라서 헤매고있었다.
시1발 여기에 뭘넣지? 필드값인데 그냥 "1234", "param"이런거 넣어주면되나??싶었는데
아니었다. 넣으니 블래밍이 떠서 바로 서버를 껏다.
해답은 바로 아래에 있었다.
반드시 찾아봐야할 사이트
Counter-Strike: Global Offensive UserMessages - AlliedModders Wiki
Counter-Strike: Global Offensive UserMessages Counter-Strike: Global Offensive uses Google's Protocol Buffers instead of Valve's traditional UserMessages. The data on this page was read from [1] . The initial versions of these files were provided by Valve and updated by the AlliedModders staff. //=...
wiki.alliedmods.net
이곳이다.
이곳에 들어가면 엄청난 정보들이 나무위키처럼 리스트로 있는데
빨간 동그라미 친값이 Protobuf넣어줄값이다. 그안에 위에서 언급했던 const char[] field부분에 값을 써주면된다.
Ex) PbSetInt(pb, "ent_idx", Client);
'소스모드 > CSGO' 카테고리의 다른 글
[CSGO] 스폰엔티티를 플러그인으로 생성 (0) | 2021.03.19 |
---|---|
[CSGO:TIP] mp_roundtime이 안먹힐때 (0) | 2021.01.20 |
[CSGO:Plugin] HP바 플러그인 (0) | 2021.01.20 |
[CSGO:TIP] 팀공격시 아군공격메시지 제거 (0) | 2021.01.20 |
[CSGO:TIP] 허드 위치 참고 (0) | 2021.01.20 |