Fix for creating new characters, added teleport function to zone character model
This commit is contained in:
parent
9d6a8730a9
commit
30b2028bd8
@ -56,7 +56,24 @@ export default class CharacterConnectEvent extends BaseEvent {
|
|||||||
// Emit character connect event
|
// Emit character connect event
|
||||||
callback({ character })
|
callback({ character })
|
||||||
|
|
||||||
// @TODO: Teleport character into zone
|
// wait 300 ms, @TODO: Find a better way to do this
|
||||||
|
await new Promise(resolve => setTimeout(resolve, 100))
|
||||||
|
|
||||||
|
const zone = ZoneManager.getZoneById(character.zone!.id)
|
||||||
|
if (!zone) {
|
||||||
|
this.logger.error('zone:character:join error: Zone not found')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
zone.addCharacter(character)
|
||||||
|
|
||||||
|
const zoneCharacter = ZoneManager.getCharacterById(character.id)
|
||||||
|
if (!zoneCharacter) {
|
||||||
|
this.logger.error('zone:character:join error: Zone character not found')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
await zoneCharacter.teleport(character.zone!.id, character.positionX, character.positionY)
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
this.handleError('Failed to connect character', error)
|
this.handleError('Failed to connect character', error)
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,7 @@ import { ZCharacterCreate } from '#application/zodTypes'
|
|||||||
import { Character } from '#entities/character'
|
import { Character } from '#entities/character'
|
||||||
import CharacterRepository from '#repositories/characterRepository'
|
import CharacterRepository from '#repositories/characterRepository'
|
||||||
import UserRepository from '#repositories/userRepository'
|
import UserRepository from '#repositories/userRepository'
|
||||||
|
import ZoneRepository from '#repositories/zoneRepository'
|
||||||
|
|
||||||
export default class CharacterCreateEvent extends BaseEvent {
|
export default class CharacterCreateEvent extends BaseEvent {
|
||||||
public listen(): void {
|
public listen(): void {
|
||||||
@ -35,10 +36,19 @@ export default class CharacterCreateEvent extends BaseEvent {
|
|||||||
return this.socket.emit('notification', { message: 'You can only have 4 characters' })
|
return this.socket.emit('notification', { message: 'You can only have 4 characters' })
|
||||||
}
|
}
|
||||||
|
|
||||||
const newCharacter = new Character()
|
// @TODO: Change to default location
|
||||||
await newCharacter.setName(data.name).setUser(user).save()
|
const zone = await ZoneRepository.getFirst()
|
||||||
|
|
||||||
if (!newCharacter) return this.socket.emit('notification', { message: 'Failed to create character. Please try again (later).' })
|
const newCharacter = new Character()
|
||||||
|
await newCharacter
|
||||||
|
.setName(data.name)
|
||||||
|
.setUser(user)
|
||||||
|
.setZone(zone!)
|
||||||
|
.save()
|
||||||
|
|
||||||
|
if (!newCharacter) {
|
||||||
|
return this.socket.emit('notification', { message: 'Failed to create character. Please try again (later).' })
|
||||||
|
}
|
||||||
|
|
||||||
characters = [...characters, newCharacter]
|
characters = [...characters, newCharacter]
|
||||||
|
|
||||||
|
@ -1,4 +1,7 @@
|
|||||||
import { Character } from '#entities/character'
|
import { Character } from '#entities/character'
|
||||||
|
import ZoneManager from '#managers/zoneManager'
|
||||||
|
import Logger, { LoggerType } from '#application/logger'
|
||||||
|
import SocketManager from '#managers/socketManager'
|
||||||
|
|
||||||
class ZoneCharacter {
|
class ZoneCharacter {
|
||||||
public readonly character: Character
|
public readonly character: Character
|
||||||
@ -12,6 +15,42 @@ class ZoneCharacter {
|
|||||||
public async savePosition() {
|
public async savePosition() {
|
||||||
await this.character.setPositionX(this.character.positionX).setPositionY(this.character.positionY).setRotation(this.character.rotation).setZone(this.character.zone).update()
|
await this.character.setPositionX(this.character.positionX).setPositionY(this.character.positionY).setRotation(this.character.rotation).setZone(this.character.zone).update()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async teleport(zoneId: number, targetX: number, targetY: number): Promise<void> {
|
||||||
|
const io = SocketManager.getIO()
|
||||||
|
const socket = SocketManager.getSocketByCharacterId(this.character.id)
|
||||||
|
const zone = ZoneManager.getZoneById(zoneId)?.getZone()
|
||||||
|
const logger = Logger.type(LoggerType.APP)
|
||||||
|
console.log('teleporting')
|
||||||
|
|
||||||
|
if (!socket) {
|
||||||
|
logger.error('zone:character:move error: Socket not found')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!zone) {
|
||||||
|
logger.error('zone:character:move error: Zone not found')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Let other clients know of new character
|
||||||
|
io.to(zone.id.toString()).emit('zone:character:join', 'ewaewa')
|
||||||
|
|
||||||
|
// Update zoneCharacter properties
|
||||||
|
this.currentPath = null
|
||||||
|
this.isMoving = false
|
||||||
|
|
||||||
|
// Update local character object
|
||||||
|
await this.character.setPositionX(targetX).setPositionY(targetY).setRotation(this.character.rotation).setZone(zone).update()
|
||||||
|
|
||||||
|
// Emit teleport event
|
||||||
|
socket.emit('zone:character:teleport', {
|
||||||
|
zone,
|
||||||
|
characters: ZoneManager.getZoneById(zone.id)?.getCharactersInZone()
|
||||||
|
})
|
||||||
|
|
||||||
|
console.log('teleported')
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default ZoneCharacter
|
export default ZoneCharacter
|
||||||
|
@ -5,6 +5,7 @@ import { Zone } from '#entities/zone'
|
|||||||
import ZoneManager from '#managers/zoneManager'
|
import ZoneManager from '#managers/zoneManager'
|
||||||
import CharacterRepository from '#repositories/characterRepository'
|
import CharacterRepository from '#repositories/characterRepository'
|
||||||
import ZoneRepository from '#repositories/zoneRepository'
|
import ZoneRepository from '#repositories/zoneRepository'
|
||||||
|
import SocketManager from '#managers/socketManager'
|
||||||
|
|
||||||
type Position = { x: number; y: number }
|
type Position = { x: number; y: number }
|
||||||
export type Node = Position & { parent?: Node; g: number; h: number; f: number }
|
export type Node = Position & { parent?: Node; g: number; h: number; f: number }
|
||||||
|
Loading…
x
Reference in New Issue
Block a user