Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

rabbit97 님의 블로그

28일 일지 본문

프로젝트 Final

28일 일지

rabbit97 2024. 11. 28. 22:34

# 오늘의 개발 상황

위성 타겟 다 클라이언트 상황에서 문제 발견

기존 작성 된 로직

 

이 방식은 위성 타겟이라는 디버프를 가진 유저를 찾은 다음에 페이즈가 낮이 되면 전달할 다음 유저를 찾아서 확률을 발동 시키고 트루면 데미지 및 이펙트, 펄스면 자신에게 디버프를 지우고 내 다음 유저(방 입장 순서)에게 이 디버프를 전달

매일 낮마다 반복

 

이였는데 문제는

내 다음 유저에게 디버프를 전달 후 내 다음 유저에게 디버프가 존재해 또 디버프를 다음 유저에게 전달하고를 반복해서 방장에게만 디버프가 전달되는 상황

 

** 관련 로그 요약 - 한 턴에 일어난 상황 

  1. User 9 '3': 디버프가 User 9 에게 전이되었습니다. \
    • 현재 좌표: x: -21.622, y: -6.936
  2. User 10 '4': 디버프가 User 10 에게 전이되었습니다. \
    • 현재 좌표: x: -24.732, y: -6.886
  3. User 7 '1': 디버프가 User 7 에게 전이되었습니다. \
    • 현재 좌표: x: 21.717, y: 3.223

 

 

** 한 턴이 시작할때마다 해당 로그 반복

  1. User 8 '2': 디버프가 User 8 에게 전이되었습니다. \
    • 현재 좌표: x: 21.517, y: -4.826
  2. User 9 '3': 디버프가 User 9 에게 전이되었습니다. \
    • 현재 좌표: x: -21.622, y: -6.936
  3. User 10 '4': 디버프가 User 10 에게 전이되었습니다. \
    • 현재 좌표: x: -24.732, y: -6.886
  4. User 7 '1': 디버프가 User 7 에게 전이되었습니다. \
    • 현재 좌표: x: 21.717, y: 3.223

 

 

1 대 1 에서는 티가 잘 안났었는데 다클라이언트에서 테스트를 해보니 바로 확인

 

문제 상황을 팀원들에게 알리고 팀원 분 중 엄청 잘 하시는 한분이 보완을 도와주셨는데

 

해결한 방법은

 

// debuff가 있는지 체크
debuffCheck(userCharacter, debuff) {
  return userCharacter.debuffs.includes(debuff);
}

// 디버프 들고 있는 유저를 찾는 방식.
getDebuffUser(debuff) {
  const users = this.getAllUserDatas();
  let debuffUser = 0;
  users.forEach((user) => {
    const character = this.getCharacter(user.id);
    if (this.debuffCheck(character, debuff)) {
      console.dir(user, null);
      debuffUser = user;
    }
  });
  return debuffUser;
}

// 위성타겟 디버프 가졌는지 확인하고 다음유저에게 넘기기까지
debuffUpdate() {
  const satelliteTargetUser = this.getDebuffUser(CARD_TYPE.SATELLITE_TARGET);
  console.dir(satelliteTargetUser, null);
  const character = this.getCharacter(satelliteTargetUser.id);

  const index = character.debuffs.indexOf(CARD_TYPE.SATELLITE_TARGET);
  if (index !== -1) {
    character.debuffs.splice(index, 1);
  }

  if (Math.random() < 0) {
    console.log(`위성 터졌다!`);

    // 효과가 발동되었을 때
    character.hp -= 1;
    animationNotification(this, ANIMATION_TYPE.SATELLITE_TARGET_ANIMATION, curUser);
  } else {
    const nextUser = this.getNextUser(satelliteTargetUser.id);
    const nextUserCharacter = this.getCharacter(nextUser.id);
    nextUserCharacter.debuffs.push(CARD_TYPE.SATELLITE_TARGET);
  }

  // 감옥체크
  if (this.debuffCheck(character, CARD_TYPE.CONTAINMENT_UNIT)) {
  }
}

 

유틸 함수를 새로 작성 - 페이즈 업데이트될때 호출되는 패킷 알림 로직에서 조건문으로 그 페이즈가 낮이면 조건 안에 이 함수들을 선언

원리는 일단 낮이 되면 디버프를 가진 유저를 먼저 찾고 그 유저가 가진 디버프에따라 로직이 조건으로 다르게 진행 되는데

제일 문제였던 로직 - 위성 타겟의 확률이 안 터졌을 경우 다음 유저에게 넘긴다

 

기존 방식과 차이점은 일단 기존 로직은 반복문 안에 함수를 선언을 해서 반복문을 돌고 또 돌다가 내 다음 유저에게 디버프를 전달했는데 또 디버프가 있으니 또 전달해서 문제였었고,

 

지금 수정한 방식은 만약에 낮이 시작 되었는데 디버프를 들고있으면 확률이 안터졌을 경우 넘긴다.

말은 비슷해보여도 아래 방식이 보기도 편하고 계산도 할만큼만 하고 딱 베스트 상황

 

 

 

 

# 내일까지 해야할 것들

 

디버프 유틸 함수를 새로 작성했기 때문에 감금 장치를 새로 구현해야함

 

- 기존에는 위치만 이동해서 감옥에 가두는건가? 했지만 오늘 회의 내용때 캐릭터 스테이트 타입으로 감금 상태가 있는걸 발견
기존 로직에 이걸 적용 내일 점심까지 적용시키기

'프로젝트 Final' 카테고리의 다른 글

3일 일지  (1) 2024.12.03
29일 일지  (1) 2024.11.30
27일 일지  (0) 2024.11.27
26일 일지  (0) 2024.11.26
23일 일지  (0) 2024.11.23