planetarium / NineChronicles

Unity client application for Nine Chronicles, a fully decentralized idle RPG powered by the community.
https://nine-chronicles.com/
GNU Affero General Public License v3.0
349 stars 147 forks source link

클라이언트에서 클리어하지 못한 전투를 클리어한것처럼 보여주는 문제 #4355

Closed sonohoshi closed 1 month ago

sonohoshi commented 2 months ago

https://planetariumhq.slack.com/archives/C016RR80TK9/p1709626443130329

실제로 체인상에서는 클리어하지 못했지만, 클라이언트의 전투 재연에서는 클리어되어 다음 스테이지에 도전하려다 Action단에서 실패하고 에러 팝업을 받는 것으로 보임

sonohoshi commented 2 months ago

이거 조사 시작해봅니다

sonohoshi commented 2 months ago

https://planetariumhq.slack.com/archives/CBU2JFAF3/p1711209127674459

sonohoshi commented 2 months ago

제보된 tx 모두 playCount가 1인것으로 보아 클라이언트단에서 전투 반복 재현으로 인한 문제는 아닌듯

sonohoshi commented 2 months ago

제보된 케이스 모두 공통적으로 166 스테이지를 클리어하지 못했는데 클라에서는 클리어했다고 보여주고 있는 상태

sonohoshi commented 2 months ago

rc 브랜치 기준 로컬 Agent에서는 Simulator의 random값까지 일치하는 상황을 확인하여... main에서 쓰던 StageSimulator에 이상이 있는지 확인할 필요가 있겠습니다

sonohoshi commented 2 months ago

지금 클라이언트 단에서 rc 브랜치와 main의 Simulate 상태가 크게 차이는 안나보이는데, 애시당초 client의 Simulate 방식이 HAS action의 Simulate와 차이나는 부분이 있어보여서 정리를 할 필요가 있겠고...

sonohoshi commented 2 months ago

https://github.com/planetarium/NineChronicles/blob/main/nekoyume/Assets/_Scripts/Extensions/ActionEvalToViewModelExtensions.cs#L30 클라이언트는 이 부분을 정리할 필요는 있겠다 정도로 마무리... 나머지 조사는 tx 리플레이 같은게 있어야 원활한 조사가 가능할 것 같습니다.

sonohoshi commented 2 months ago

https://planetariumhq.slack.com/archives/C062ZS68A21/p1712118329465659?thread_ts=1712117643.493809&cid=C062ZS68A21 팀 내에서 345 스테이지를 대상으로도 발생했다는 제보

sonohoshi commented 1 month ago

일단 하나 잡아낸건 1회성 버프가 클라에서 써진것처럼 보여서 그런거였고요, 실제로 tx 이력을 뒤져보니까 344 스테이지에서 쓴 1회성 버프 아이디가 345 스테이지 tx에 같이 들어갔고+액션단에서는 1회성 버프를 무시했으나 클라가 혼자 1회성 버프를 사용해서 시뮬레이트를 돌린 케이스입니다. 그래서 대충... 1회성 버프가 액션단에서는 정상적으로 무시됐는지 그렇다면 클라는 왜 갑자기 1회성 버프를 썼는지 정도를 타겟으로 조사해볼 예정입니다. 별개로 repote replay를 클라에서까지 재연한 내용에 대해선 따로 기록 남겨두겠습니다

sonohoshi commented 1 month ago

if (eval.Action.StageBuffId.HasValue)
{
    var skill = CrystalRandomSkillState.GetSkill(
        eval.Action.StageBuffId.Value,
        tableSheets.CrystalRandomBuffSheet,
        tableSheets.SkillSheet);
    skillsOnWaveStart.Add(skill);
}
``` 찾았다 범인