1 분 소요

오늘 작업

  1. 보스 몬스터가 일반 공격에 한 번에 죽는 문제가 발생했다. 해당 문제는 bossMonster를 자식 클래스로 만드는 과정에서 setDamaged 함수가 현재 체력을 리턴해주지 않아 undefind 값이 전송되었고, 클라이언트에서 그걸 처리하는 과정에서 클라이언트 쪽 몬스터의 체력을 0으로 만들며 생긴 문제였다. 해당 문제는 return 값 추가하는 걸로 해결했다.

  2. waveMonsters와 monsters를 구분지어서 작업하려 하고 있었으나, 이전 wave 작업했던 분이 했던 것과 이해가 잘못되어 있었다.

addWaveMonster에선 직접 몬스터의 데이터를 호출하는 것이 아니라 서버에서 호스트 클라이언트에

addWaveMonster() {
    const monstersData = [];
    const { monster: monsterAsset } = getGameAssets();
    const waveMonsterSize = Math.min(config.game.monster.waveMaxMonsterCount, this.waveCount);
    this.waveCount += 2;

    for (let i = 1; i <= waveMonsterSize; i++) {
      const monsterId = this.monsterIndex++;


      if (this.bossMonsterWaveCount === 0) {
        //monstersData.push(this.createBossMonsterData(true, monster.x, monster.y));
        const data = monsterAsset.data[7];
        this.bossMonsterWaveCount = 20;

        monstersData.push({
          monsterId,
          monsterCode: data.code,
        });
      }
      else {
        this.bossMonsterWaveCount--;

        const monsterList = [0, 1, 3, 4, 5];
        // 몬스터 데이터 뽑기
        const codeIdx = Math.floor(Math.random() * monsterList.length);
        const data = monsterAsset.data[monsterList[codeIdx]];
        //this.monsters.set(monsterId, waveMonster);


        // 몬스터 id와 code 저장
        monstersData.push({
          monsterId,
          monsterCode: data.code,
        });
      }
    }

    const waveMonsterSpawnRequestPacket = makePacket(config.packetType.S_MONSTER_SPAWN_REQUEST, {
      monsters: monstersData,
    });

    const owner = this.getPlayerById(this.ownerId);
    owner.user.socket.write(waveMonsterSpawnRequestPacket);
  }

기존 작업자는 waveMonster와 monster에 동시에 몬스터 데이터를 작성하고 추가하고 있다.

  spawnWaveMonster(monsters) {
    for (const monster of monsters) {
      // Monster Asset 조회
      const { monster: monsterAsset } = getGameAssets();
      const data = monsterAsset.data.find((asset) => asset.code === monster.monsterCode);

      if (monster.monsterCode === 208) {
        const bossMonster = new BossMonster(
          monster.monsterId,
          monster.monsterCode,
          data.name,
          data.hp,
          data.attack,
          data.defence,
          data.range,
          data.speed,
          data.grade,
          monster.x,
          monster.y,
          true,
        )

        this.monsters.set(monster.monsterId, bossMonster);
        this.waveMonsters.set(monster.monsterId, bossMonster);
      }
      else {
        // 몬스터 생성
        const spawnMonster = new Monster(
          monster.monsterId,
          monster.monsterCode,
          data.name,
          data.hp,
          data.attack,
          data.defence,
          data.range,
          data.speed,
          data.grade,
          monster.x,
          monster.y,
          true,
        );

        this.monsters.set(monster.monsterId, spawnMonster);
        this.waveMonsters.set(monster.monsterId, spawnMonster);
      }
    }
  }

태그:

카테고리:

업데이트: