오늘의 목표

더보기

✔️ 최종프로젝트 진행

 


⏱️ 오늘의 일정

최종 프로젝트 진행


📜 최종프로젝트 진행

 

 

몬스터 사망 보상과 유저 상태 업데이트를 구현했다.

 

몬스터 사망 보상

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;
}

 

방안에 있는 유저들에게 방안에 있는 유저들의 정보를 전달한다.

+ Recent posts