2025-02-26 TIL
오늘 작업
-
보스 몬스터가 일반 공격에 한 번에 죽는 문제가 발생했다. 해당 문제는 bossMonster를 자식 클래스로 만드는 과정에서 setDamaged 함수가 현재 체력을 리턴해주지 않아 undefind 값이 전송되었고, 클라이언트에서 그걸 처리하는 과정에서 클라이언트 쪽 몬스터의 체력을 0으로 만들며 생긴 문제였다. 해당 문제는 return 값 추가하는 걸로 해결했다.
-
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);
}
}
}