[PUBG] 시간내 연속킬 테이블

chaechae·2024년 7월 2일
0

PUBG BattleGround 

목록 보기
3/7
post-thumbnail

이번에는 특정 시간내 연속킬을 했는지 무기와, 거리별로 집계된 테이블을 만들기 위해 고민했던 것들을 정리 해보려고 합니다!

먼저, 해당 데이터는 solo 기준입니다. 듀오나 스쿼드 매치의 경우 상대팀이 두명 이상이므로 한명을 다운 시켜도 바로 게임이 끝나지 않고 그로기상태(기절)로그가 추가되기 때문에 킬로그가 조금 꼬이더군요 (봐야할 기준이 더 많습니다)

아래처럼 연속킬을 한경우 게임결과에 killStreaks 값이 생성되지만, 저희는 어떤 무기로 어떤 거리에서 연속킬을 했는지 필요하기 때문에 결국 kill 로그들을 파헤쳐야합니다.

LogPlayerKillV2

아래는 특정 유저의 LogPlayerKillV2 를 시간순서대로 가져온 것 입니다. 저번에 말했던 것 처럼 KILL을 했기 때문에 distance 컬럼 또한 남겨지는 것을 볼 수 있습니다.

제가 필요한 것은 유저가 10초이내에 연속적으로 킬을 했는지? 유저의 무기별 연속킬 여부를 알 수 있는 테이블을 만들어야 합니다.🧐 (배그 공식상 10초이내에 더블킬 이상을 했다면 연속킬로 보는것 같습니다. 사실 10초 라는 시간이 짧은 편은 아니지만 데이터가 부족하기 때문에 일단 10초이내로 기준을 잡아보았습니다😂)

아래의 초록색 상자 부분이 해당유저가 첫킬 이후 10초내에 발생한 kill 로그 입니다.
이처럼 킬 이후 10초내에 또 다른 킬을 했는지 여부를 확인해야 합니다.

고민

그런데 여기서 고려해야할 것이 몇가지 생깁니다..

  • 첫번째 문제는 세션으로 집계해서 봐야하나, 아니면 모든 kill log 의 시간차이를 계산해서 10초이내에 발생했다면 연속킬로 볼 것인가.. 입니다.

10초를 기준으로 세션을 나눠서 볼지 아니면 모든 킬로그 간의 차이를 통해 연속킬을 계산할지 말이죠. 하지만 임의로 정한 세션으로 나눠서 본다면 문제가 생깁니다.

예를 들어, 00:00:07 , 00:00:09 에 킬을하고 00:00:12에 킬을 한 경우입니다. 3킬 모두 10초이내에 발생한 연속킬로 인정이 되어야하는데 10초 구간으로 묶어버린다면 아래의 결과처럼 00:00:07 , 00:00:09 두킬만 연속킬로 집계가 되어버립니다.

  • 10초 이내에 연속킬
_D10secondskill
00:00:0700:00:001
00:00:0900:00:001
00:00:1300:00:101
  • 10seconds 로 groupby 시
10secondskill
00:00:002
00:00:101

이렇게 놓치는 부분들을 고려해서 저는 킬과 킬 사이의 차이(time_diff)를 전부 구해 10초 이내라면 전부 연속킬로 보기로 했습니다. 또한 트리플, 쿼드라 구분하지 않고 10초이내에 두번이상 킬했다면 무조건 연속킬로 보았습니다.

아래처럼 Korea_lve_Love 유저를 킬하고 8.116초이후에 ART_C4l 유저를 처치했으니 연속킬로 인정이 됩니다.

  • 두 번째 문제 " 남이 양념 바른걸 날먹 한거일 수도 있지 않을까? "

10초내에 연속킬을 했다고 해도 다른 상대가 9번 맞춘걸 내가 1번만 맞춰서 연속적으로 킬한경우 일 수도 있습니다. 이 경우 연속킬은 했지만 무차별 난사를 해서 킬을 땄다고 봐도 될 것인가..🥹에 대한 문제입니다. 그냥 운좋게 한발 사용해서 킬한 것 인데 "시간 안에 조준, 발사, 정지, 조준점 원위치" 과정을 원활하게 하여 해당 총기의 반동제어가 좋다!! 라고 보기는 애매합니다.

결국, 제 3자의 개입이 있었냐 없었냐를 알아야 한다!!

  • assist 혹은 kill 로그의 기록된 damage를 통해 알 수 있지 않을까?

아쉽게도 다른 상대방과 함께 잡았더라도 assist 값은 빈리스트로 되어있었고 (duo 이상의 게임, 게임 룰상 같은팀인 경우에만 남겨지고 있었습니다.) LogPlayerKillV2 로그에 총 입힌damage 컬럼이 남겨있지 않을까? 했지만 역시 남아있지 않았습니다.

결국, 나를 제외한 99명이 모두 적인 상황에서 제3자의 개입을 아예 배제할 수는 없으니
각 유저별 무기를 사용해 유저에게 입힌 데미지(LogPlayerTakeDamage) 와 킬테이블을 합쳐서 50% 이상 damage를 가했다면 본인의 연속킬로 인정하기로 했습니다. (다행히 이전의 만들어 놓은 damage가 집계된 테이블이 있으니 merge 해주면 될 것 같습니다)

아래는 time_difftotal_damage를 계산한 table의 샘플입니다. 결론적으로 초록색 구간의 case가 완벽한 연속킬(더블킬)로 인정이 됩니다. (일부 total_damage 값을 보면 100을 넘어가는 경우가 있는데 이는 적이 중간에 치료아이템으로 회복하고 또 맞았기 때문입니다😂..)

요약하면 다음과 같습니다.

  • 이전 kill log 간의 시간차이를 구한다.
  • 각 킬로그 사이가 10초이내에 발생했다면 연속킬로 본다.
  • 한사람이 50% 이상의 데미지를 입혀서 킬을 했다면 본인의 킬로 인정한다. (50이상의 데미지를 입힌 경우만 가져옴)
  • AI가 죽은 경우도 포함 시킨다. ( AI 가 죽은 경우, 킬거리가 -1로 남겨져 있기 떄문에 Killer.location 좌표와 Victim.location 좌표간의 거리차이를 구해야한다)
  • 무기와 거리별로 killStreaks 횟수 그리고 연속킬로 몇명을 죽였는지 kill_cnt 집계
  • 무기와 거리별로 발생한 모든 킬과 연속킬로 죽인 킬의 비율을 통해 10초 이내에 달성한 킬의 비율을 구한다.

무기와 거리별 연속킬 테이블

이렇게 완성된 killStreaks_static 테이블은 아래와 같습니다.
이제 각 매치에서 발생한 모든 kill log를 무기와 거리별로 집계한 테이블을 합쳐주고 멀티킬 비율을 집계하면 무기들의 각각 10초 이내에 달성한 킬의 수(비율)을 구할 수 있습니다!

(table) killStreaks_static

  • killStreaks : 연속킬 발생횟수
  • kill_cnt : 연속킬로 적을 죽인 횟수
  • distance_category: 거리 범주

ACE3215m 이내의 거리에서 10초이내에 달성한 연속킬은 2번 나왔고, 총 4명이 처치되었다고 볼 수 있습니다.

(table) weapon_kill_df

  • 매치에서 발생한 모든 kill log를 무기와 거리별로 집계한 테이블입니다.

(모든 경기의 킬로그) 15m이내의 거리에서 WeapACE32 무기로 총 177명을 처치했습니다.

(table) 최종

두테이블 merge 해주고 컬럼명들을 보기 좋게 바꿔주었습니다. 일부 AR 무기 기준 ACE32AK47 15M 이내에서 발생한 연속킬 비율을 비교해보면 AK47이 상대적으로 많은데요!!

하지만 아무래도 표본이 매우 적기 때문에 근접전에서 AK47 무기가 반동제어가 더 좋다~ 라고 보기에는 역시 무리가 있습니다. (신뢰도가 매우 떨어집니다😢 ㅎㅎ 아무튼 지금은 지표를 보기위해 정제된 테이블을 만드는것이 주 목적이었니까 패스 하겠습니다 하하)

역시, 연속킬이라는 상황이 쉽게는 일어나지 않기 때문에 데이터가 많이 필요할 것 같습니다.

  • ratio : kill_cnt/total_kill_cnt 발생한 전체 킬과 연속킬의 비율 입니다.

데이터가 많이 쌓였다면.. 그래도 위 테이블을 가지고 거리별 난사 제어를 확인할 수 있을 것 입니다!

(희망편으로) 아래와 같이 발로란트의 결과처럼 n초이내의 멀티킬을 통해 근접전에서 난사제어가 잘되는지, 시각화를 통해 반동지표를 모니터링 할 수 있겠죠! 아래의 경우 팬텀 무기가 근접전에서 좀 더 나은 선택이라고 보고 있습니다.

데이터가 부족하지만 이제 대시보드에 적용시켜 봅시다 😀!!

profile
다양한 컨텐츠가 있는 곳을 좋아합니다. 시리즈를 참고하시면 편하게 글을 보실 수 있습니다🫠

0개의 댓글