I'm FanJae.

[EA FC Proclub Draft Bot] 0. 프로젝트 시작 본문

Toy Project/EA FC Pro club Draft Bot [Python]

[EA FC Proclub Draft Bot] 0. 프로젝트 시작

FanJae 2024. 8. 31. 18:21

0. 게임 모드 설명 및 Draft Bot의 필요성

0-1. 게임 모드 설명

- 'EA FC'는 피파라는 이름으로 더 유명한 게임이다. (보통 EA FC라는 이름은 낯설어 해도 피파는 알고 있다..)

- 축구 게임하면 가장 많이 떠올리는 '피파'가 라이센스 문제로 EA SPORTS FC로 명칭을 바꾼것이다.

- 이 게임은 EA FC 온라인이라는 국내 서비스 중인 작품과 'EA SPORTS FC 시리즈'라고 해서 두 가지의 시리즈가 있다.

- 여기서 Proclub 모드는 EA SPORTS FC 시리즈에 있는 게임 모드이다.

- 축구라는 게임이 11명이 하는 것처럼 이 모드는 총 22명이 모두 사람이다.

 

- 골키퍼, 수비수, 미드필더, 공격수가 모두 각각의 사람인 것이다.

- 이러한 이유로 주로 '비슷한 시간대' 디스코드 서버에 모여서 게임을 하는 경우가 많았다.

- 국내에도 다양한 프로클럽 커뮤니티가 존재한다.

 

0-2. Draft Bot의 필요성

0-2-1. 내전 시스템

① 기존 팀게임 시간의 제한적 접근과 내전 시스템의 도입

- 현실적인 이유로, 각자 팀을 만들어서 게임을 하지만, 팀 게임은 보통 저녁 시간대(9시~10시 내외)에 이루어졌다.

- 상대적으로 주말에 게임할 시간이 많은 사람들은 휴일 오후 시간대에도 '내전'을 했다.

- '내전'이라는 것은 기존 자신의 팀원이 아닌 불특정 다수가 디스코드에 모여 게임을 하는 것이다.

② 내전의 문제점

- 이렇게 하다보면 자신의 주 포지션을 가는 것은 굉장히 어렵다.

- 또한, 누가 어떤 포지션을 가야하는가? 등의 문제도 생긴다. 

- 이를 랜덤으로 추첨해주는 시스템이 Draft Bot이였다.

0-2-2. 내전 리그 시스템

① 내전의 고도화 작업이었던 내전 리그 시스템의 도입

- 내전 리그는 내전과 다르게 11명의 플레이어 中 1명이 일일 감독이 되어 본인이 원하는 선수를 뽑아 하는 컨텐츠였다.

- 보통 8팀(88명)으로 운영되었는데, 문제는 이 정도 인원을 수작업으로 모두 처리하는건 상당히 노가다였다.

- 선수 선발 여부 / 중복 선발 여부 확인 / 선수의 포지션 확인 등 여러 작업이 필요했다.

0-2-3. 종합적인 문제점 정리

- 내전 : 어떤 선수가 어떤 포지션을 가야하는가?를 랜덤하게 뽑아줄 필요가 있었다.

- 내전 리그

① 일일 감독이 80명의 선수 선발 여부 / 중복 선발 여부 체크 / 포지션 확인 등 여러 작업을 관리하기 위한 봇이 필요했다.

 

0-3. Draft Bot의 역할

① 포지션 랜덤 선발

- 각자가 원하는 포지션은 모두 다르다.

- 실제 축구도 그렇듯, 인기 포지션(공격수)이 있고 비인기 포지션(보통 수비수)이 있다.

- 게임에서도 어쩔수 없이 비인기 포지션을 누군가는 가야 하는 상황이 생긴다.

- 이를 랜덤으로 뽑아주도록 해서 불만을 최소화 하는 것이 Draft Bot의 취지이다.

② 내전 리그 선수 관리

- 내전 리그 시스템으로 인해서 수작업으로 뽑다보면 뽑힌 선수인지 아닌지 혼동스럽다.

- 이처럼 감독이 선수를 뽑을때 남은 선수 체크, 중복 선발 여부 체크, 포지션 확인등을 해주면 시간을 단축시킬 수 있다.

- 실제로 이것이 수작업으로 진행될때는 80명을 드래프트 하는데만 1시간 이상이 걸렸다.


1. 비화

1-1. 이미 진행된 적 있는 프로젝트

- 이 프로젝트는 이미 진행되었던 적이 있다.

- 당시에 나는 어떤 프로클럽 커뮤니티에 스태프를 하며, 이 작업을 하게 되었다.

- 서버 관리자였던 분께서 나에게 자신의 코드를 흔쾌히 공개했다.

- 그 프로젝트에 내전 시스템의 일부 기능을 추가하였고, 내전 시스템을 봇을 이용해 할 수 있도록 개선했다.

- 그런 점에서 이 Toy Project는 이미 진행해 본 경험이 있는 프로젝트다.

 

1-2. 다시 진행해보려는 이유

- 사실 내가 소속되어 있던 프로클럽 커뮤니티가 마무리가 좋게 끝나지 못했기 때문에, 나에게 이 봇은 좋은 기억은 아니다.

- 그럼에도 기존 만들던 봇을 내가 원했던 방식으로 마무리 지어보고 싶었다.

 

① 서버 관리자와의 소통의 아쉬움

- 당시 서버 관리자 분은 자신의 일상 생활적 이유로 봇을 관리하기 어려웠다. 나는 당시 대부분의 코드를 추가할 때 이 봇을 혼자서 개발했던 서버 관리자 분께 허락을 받고 진행했다. 물론 관리자 분이 반드시 허락 받으라고 지시한 적은 없지만, 원작자 허락없이 추가하는것도 예의는 아니니까 말이다.
- 문제는 이것 때문에 봇을 관리하던 입장에서 쉽게 의사결정을 내리지 못한 부분이 많았다. 서버 관리자 분은 자신의 PC를 이용해서 지난 4~5년의 시간동안 봇을 가동(...) 시켜왔었다. 즉, 봇 호스팅 조차 하지 않으셨다. 
- 시기적으로 아쉬웠던 점은 서버 관리자분도 어느정도 서버 운영에 대한 문제에 개입을 하지 못하던 시기였기에 봇을 관리하던 입장에서 상당히 아쉬움으로 남아있다. 그래서, 이번 프로젝트에서는 해당 봇에서 하지 못했던 것도 직접 추가해보려고 한다.
- 다만, 기존 소스 코드에 구현했던 것은 '서버 관리자'분이 공개하지 않는다면, 나도 내가 구현한 부분 외에는 절대 공개하지 않을 것이다. 일부 코드는 내가 작성한 코드가 분명하지만, 그 코드를 전체 공개하는 것은 다소 문제가 있다고 생각한다.

② 사용 과정에서 품었던 의문점 해소

- 본인은 과거 회사를 재직하던 시절에도 Python을 다뤘던 적은 있지만, 그것이 주 업무는 아니었기 때문에 기존 업무에 대한 자동화 Script를 작성하는게 전부 였으며, Discord.py를 이용해서 봇을 만드는 경험을 한 적은 없다. 문제는 '내전리그 시스템'이 엄청나게 느렸다는 것이다. 80명의 인원이 동시에 사용한다는 이유만으로 5초 이상의 딜레이가 걸린다면, 사용할 이유가 없다. 따라서 나는 왜 이런 문제가 발생했는지 알고 싶다.
Comments