오늘의 목표
더보기
✔️ 최종프로젝트 진행
⏱️ 오늘의 일정
최종 프로젝트 진행
📜 최종프로젝트 진행
몬스터 사망 보상과 유저 상태 업데이트를 구현했다.
몬스터 사망 보상
export const monsterDeathReward = async (killer: User, monster: User) => {
if (!monster || !killer) {
console.log(`monsterDeathReward monster : ${monster} user : ${killer}가 없음`);
return;
}
const monsterHP = monster.character.hp;
if (monsterHP > 0) {
console.log(`monsterDeathReward 몬스터가 죽지 않음 hp : ${monsterHP}`);
return;
}
const rooms: Room[] | null = await getRooms();
if (!rooms) {
console.log('monsterDeathReward 방이 없음');
return;
}
let killerRoom: Room | null | undefined = null;
let monsterRoom: Room | null | undefined = null;
killerRoom = rooms.find(room =>
room.users.some(user => user.id === killer.id)
);
monsterRoom = rooms.find(room =>
room.users.some(user => user.id === monster.id)
);
if (!killerRoom) {
console.log('monsterDeathReward killer가 속한 방이 없음');
return;
}
if (!monsterRoom) {
console.log('monsterDeathReward monster가 속한 방이 없음');
return;
}
if (killerRoom.id !== monsterRoom.id) {
console.log('monsterDeathReward killerRoom과 monsterRoom이 다름');
return;
}
if (!killer.character) {
console.log('monsterDeathReward killerCharacter가 없음');
return;
}
if (!killer.character.handCards) {
console.log('monsterDeathReward killerCharacter handCards가 없음');
return;
}
const monsterDeathRewardCardType = randomNumber(1, 23);
let isExistCard = false;
for (let i = 0; i < killer.character.handCards.length; i++) {
if (killer.character.handCards[i].type === monsterDeathRewardCardType) {
killer.character.handCards[i].count++;
isExistCard = true;
break;
}
}
if (isExistCard === false) {
const newCard: Card = {
type: monsterDeathRewardCardType,
count: 1
}
killer.character.handCards.push(newCard);
}
for (let i = 0; i < rooms.length; i++) {
if (rooms[i].id = killerRoom.id) {
rooms[i] = killerRoom;
break;
}
}
await setRedisData('roomData', rooms);
userUpdateNotification(killerRoom);
}
몬스터를 죽인 대상과 몬스터를 매개변수로 받아 각종 검사를 진행한다.
검사를 통과하면 카드를 생성해 캐릭터에게 보상으로 건네주고 업데이트 해준다.
유저 상태 업데이트
export const userUpdateNotification = (room: Room | null) => {
if (!room) {
console.log('userUpdateNoti userSocket 방이 없음');
return;
}
room.users.forEach(async (user) => {
const userSocket = await getSocketByUser(user);
if (userSocket) {
sendPacket(userSocket, config.packetType.USER_UPDATE_NOTIFICATION,
{
user: room.users
}
);
}
// else {
// console.log('`userUpdateNoti userSocket이 없음');
// return;
// }
});
return;
}
방안에 있는 유저들에게 방안에 있는 유저들의 정보를 전달한다.
'내일배움캠프' 카테고리의 다른 글
[내일배움캠프][TIL] 최종 프로젝트 진행 ( 채팅서버 구현 시작 ) (0) | 2024.11.26 |
---|---|
[내일배움캠프][TIL] 최종프로젝트 진행 ( 상점 기능 ) (0) | 2024.11.25 |
[내일배움캠프][TIL] 최종프로젝트 진행 ( 기본틀 완성 ) (0) | 2024.11.20 |
[내일배움캠프][TIL] 최종프로젝트 진행 ( 기본틀 부분완성 ) (0) | 2024.11.18 |
[내일배움캠프][TIL] 최종 프로젝트 진행 ( 스켈레톤 코드 작성 ) (0) | 2024.11.14 |