forked from noxious/server
37 lines
1.2 KiB
TypeScript
37 lines
1.2 KiB
TypeScript
import { SocketEvent } from '#application/enums';
|
|
import type { UUID } from '#application/types'
|
|
|
|
import { BaseService } from '#application/base/baseService'
|
|
import MapManager from '#managers/mapManager'
|
|
import SocketManager from '#managers/socketManager'
|
|
|
|
class CharacterAttackService extends BaseService {
|
|
private readonly ATTACK_DELAY_MS = 1000
|
|
|
|
public async applyAttackDelay(): Promise<void> {
|
|
await new Promise((resolve) => setTimeout(resolve, this.ATTACK_DELAY_MS))
|
|
}
|
|
|
|
public async attack(characterId: UUID): Promise<boolean> {
|
|
const io = SocketManager.getIO()
|
|
const socket = SocketManager.getSocketByCharacterId(characterId)
|
|
const character = MapManager.getCharacterById(characterId)
|
|
|
|
if (!socket) {
|
|
this.logger.error(`Attack failed - Missing socket for character ${characterId}`)
|
|
return false
|
|
}
|
|
|
|
if (!character) {
|
|
this.logger.error(`Attack failed - Character ${characterId} not found in MapManager`)
|
|
return false
|
|
}
|
|
|
|
// Emit attack event
|
|
io.in(character.character.map.id).emit(SocketEvent.MAP_CHARACTER_ATTACK, character.character.id)
|
|
return true
|
|
}
|
|
}
|
|
|
|
export default new CharacterAttackService()
|