Fix issues with joining
This commit is contained in:
1 file changed
+99
-70
+99
-70
@@ -109,7 +109,6 @@ interface ClientInfoData {
|
||||
|
||||
interface MultiplayerClient {
|
||||
Id: string
|
||||
Key: string
|
||||
PosX: number
|
||||
PosY: number
|
||||
Flipped: boolean
|
||||
@@ -289,6 +288,7 @@ app.ws('/ws', {
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
const { connection: connection0, db: db0 } = dbInfo0
|
||||
const { connection: connection1, db: db1 } = dbInfo1
|
||||
|
||||
@@ -298,6 +298,7 @@ app.ws('/ws', {
|
||||
db0,
|
||||
ip
|
||||
)
|
||||
|
||||
if (!authResult.valid) {
|
||||
connection0.end()
|
||||
connection1.end()
|
||||
@@ -310,9 +311,10 @@ app.ws('/ws', {
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
const userId = authResult.id
|
||||
|
||||
const result = await db0
|
||||
const userResult = await db0
|
||||
.select({
|
||||
username: users.username,
|
||||
admin: users.admin,
|
||||
@@ -322,7 +324,7 @@ app.ws('/ws', {
|
||||
.where(eq(users.id, userId))
|
||||
.execute()
|
||||
|
||||
if (result.length != 1) {
|
||||
if (userResult.length !== 1) {
|
||||
connection0.end()
|
||||
connection1.end()
|
||||
ws.send({
|
||||
@@ -335,68 +337,120 @@ app.ws('/ws', {
|
||||
return
|
||||
}
|
||||
|
||||
const players: any = []
|
||||
for (const marketplaceInfo of multiplayerClients) {
|
||||
const userData = await db1
|
||||
const currentUserData = await db1
|
||||
.select({
|
||||
saveData: berryDashUserData.saveData
|
||||
})
|
||||
.from(berryDashUserData)
|
||||
.where(and(eq(berryDashUserData.id, marketplaceInfo.UserID)))
|
||||
.where(eq(berryDashUserData.id, userId))
|
||||
.execute()
|
||||
|
||||
const savedata = userData[0].saveData
|
||||
? JSON.parse(userData[0].saveData)
|
||||
const currentSavedata = currentUserData[0]?.saveData
|
||||
? JSON.parse(currentUserData[0].saveData)
|
||||
: null
|
||||
if (!savedata) {
|
||||
|
||||
if (!currentSavedata) {
|
||||
connection0.end()
|
||||
connection1.end()
|
||||
ws.send({
|
||||
type: 'multiplayer_join_response',
|
||||
accepted: false,
|
||||
denyReason: 'Unable to load save data',
|
||||
id: null,
|
||||
players: null
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
const customIcon = savedata.bird?.customIcon?.selected ?? null
|
||||
const icon = customIcon ? 0 : savedata?.icon ?? 1
|
||||
const overlay = customIcon ? 1 : savedata?.overlay ?? 0
|
||||
const iconColor = customIcon
|
||||
const currentCustomIcon =
|
||||
currentSavedata.bird?.customIcon?.selected ?? null
|
||||
const currentIcon = currentCustomIcon
|
||||
? 0
|
||||
: currentSavedata.bird?.icon ?? 1
|
||||
const currentOverlay = currentCustomIcon
|
||||
? 1
|
||||
: currentSavedata.bird?.overlay ?? 0
|
||||
const currentIconColor = currentCustomIcon
|
||||
? [255, 255, 255]
|
||||
: savedata?.settings?.colors?.icon ?? [255, 255, 255]
|
||||
const overlayColor = customIcon
|
||||
: currentSavedata?.settings?.colors?.icon ?? [255, 255, 255]
|
||||
const currentOverlayColor = currentCustomIcon
|
||||
? [255, 255, 255]
|
||||
: savedata?.settings?.colors?.overlay ?? [255, 255, 255]
|
||||
: currentSavedata?.settings?.colors?.overlay ?? [255, 255, 255]
|
||||
|
||||
const players: any = []
|
||||
for (const marketplaceInfo of multiplayerClients) {
|
||||
const playerUserData = await db1
|
||||
.select({
|
||||
saveData: berryDashUserData.saveData
|
||||
})
|
||||
.from(berryDashUserData)
|
||||
.where(eq(berryDashUserData.id, marketplaceInfo.UserID))
|
||||
.execute()
|
||||
|
||||
const playerSavedata = playerUserData[0]?.saveData
|
||||
? JSON.parse(playerUserData[0].saveData)
|
||||
: null
|
||||
|
||||
if (!playerSavedata) continue
|
||||
|
||||
const playerInfo = await db0
|
||||
.select({
|
||||
username: users.username,
|
||||
admin: users.admin
|
||||
})
|
||||
.from(users)
|
||||
.where(eq(users.id, marketplaceInfo.UserID))
|
||||
.execute()
|
||||
|
||||
if (playerInfo.length !== 1) continue
|
||||
|
||||
const playerCustomIcon =
|
||||
playerSavedata.bird?.customIcon?.selected ?? null
|
||||
const playerIcon = playerCustomIcon
|
||||
? 0
|
||||
: playerSavedata.bird?.icon ?? 1
|
||||
const playerOverlay = playerCustomIcon
|
||||
? 1
|
||||
: playerSavedata.bird?.overlay ?? 0
|
||||
const playerIconColor = playerCustomIcon
|
||||
? [255, 255, 255]
|
||||
: playerSavedata?.settings?.colors?.icon ?? [255, 255, 255]
|
||||
const playerOverlayColor = playerCustomIcon
|
||||
? [255, 255, 255]
|
||||
: playerSavedata?.settings?.colors?.overlay ?? [255, 255, 255]
|
||||
|
||||
players.push({
|
||||
id: marketplaceInfo.UserID,
|
||||
username: result[0].username,
|
||||
admin: result[0].admin,
|
||||
username: playerInfo[0].username,
|
||||
admin: playerInfo[0].admin,
|
||||
timestamp: marketplaceInfo.JoinTimestamp,
|
||||
iconData: {
|
||||
icon,
|
||||
overlay,
|
||||
iconColor,
|
||||
overlayColor,
|
||||
customIcon: customIcon ?? ''
|
||||
icon: playerIcon,
|
||||
overlay: playerOverlay,
|
||||
iconColor: playerIconColor,
|
||||
overlayColor: playerOverlayColor,
|
||||
customIcon: playerCustomIcon ?? ''
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
const key = randomBytes(16).toString('hex')
|
||||
const time = Date.now()
|
||||
const data: MultiplayerClient = {
|
||||
const newClient: MultiplayerClient = {
|
||||
Id: ws.id,
|
||||
Key: key,
|
||||
PosX: 0,
|
||||
PosY: -1,
|
||||
Flipped: false,
|
||||
Paused: false,
|
||||
FlaggedReason: null,
|
||||
Token: result[0].token, //Just to be safe
|
||||
Username: result[0].username,
|
||||
Token: userResult[0].token,
|
||||
Username: userResult[0].username,
|
||||
UserID: userId,
|
||||
Admin: result[0].admin,
|
||||
Admin: userResult[0].admin,
|
||||
Platform: null,
|
||||
JoinTimestamp: time
|
||||
}
|
||||
multiplayerClients.push(data)
|
||||
multiplayerClients.push(newClient)
|
||||
|
||||
ws.send({
|
||||
type: 'multiplayer_join_response',
|
||||
accepted: true,
|
||||
@@ -404,51 +458,26 @@ app.ws('/ws', {
|
||||
players
|
||||
})
|
||||
|
||||
const userData = await db1
|
||||
.select({
|
||||
saveData: berryDashUserData.saveData
|
||||
})
|
||||
.from(berryDashUserData)
|
||||
.where(and(eq(berryDashUserData.id, userId)))
|
||||
.execute()
|
||||
for (const existingClient of multiplayerClients) {
|
||||
if (ws.id === existingClient.Id) continue
|
||||
|
||||
const savedata = userData[0].saveData
|
||||
? JSON.parse(userData[0].saveData)
|
||||
: null
|
||||
if (!savedata) {
|
||||
connection0.end()
|
||||
connection1.end()
|
||||
return
|
||||
}
|
||||
|
||||
const customIcon = savedata.bird?.customIcon?.selected ?? null
|
||||
const icon = customIcon ? 0 : savedata?.icon ?? 1
|
||||
const overlay = customIcon ? 1 : savedata?.overlay ?? 0
|
||||
const iconColor = customIcon
|
||||
? [255, 255, 255]
|
||||
: savedata?.settings?.colors?.icon ?? [255, 255, 255]
|
||||
const overlayColor = customIcon
|
||||
? [255, 255, 255]
|
||||
: savedata?.settings?.colors?.overlay ?? [255, 255, 255]
|
||||
|
||||
for (const multiplayerClientInfo of multiplayerClients) {
|
||||
if (ws.id == multiplayerClientInfo.Id) continue
|
||||
const client = Array.from(clients).find(
|
||||
client => client.id === multiplayerClientInfo.Id
|
||||
const clientSocket = Array.from(clients).find(
|
||||
client => client.id === existingClient.Id
|
||||
)
|
||||
if (!client) continue
|
||||
client.send({
|
||||
if (!clientSocket) continue
|
||||
|
||||
clientSocket.send({
|
||||
type: 'multiplayer_player_join',
|
||||
id: userId,
|
||||
username: result[0].username,
|
||||
admin: result[0].admin,
|
||||
username: userResult[0].username,
|
||||
admin: userResult[0].admin,
|
||||
timestamp: time,
|
||||
iconData: {
|
||||
icon,
|
||||
overlay,
|
||||
iconColor,
|
||||
overlayColor,
|
||||
customIcon: customIcon ?? ''
|
||||
icon: currentIcon,
|
||||
overlay: currentOverlay,
|
||||
iconColor: currentIconColor,
|
||||
overlayColor: currentOverlayColor,
|
||||
customIcon: currentCustomIcon ?? ''
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user