Fix issues with joining

This commit is contained in:
Lncvrt committed 2026-03-05 12:31:09 -07:00
1 parent 3653c671f2
commit 53c5642b4e
1 file changed
+99 -70
+99 -70
View File
@@ -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 ?? ''
}
})
}