diff --git a/html/src/app.js b/html/src/app.js
index 1dc68ee4..2115a47e 100644
--- a/html/src/app.js
+++ b/html/src/app.js
@@ -8199,25 +8199,11 @@ speechSynthesis.getVoices();
}
if (!joinTime || joinTime + 120000 < dtNow) {
// wait 2mins for user to load in
- var displayName = '';
- var userId = '';
- var ref = this.photonLobby.get(id);
- displayName = `ID:${id}`;
- if (typeof ref !== 'undefined') {
- if (typeof ref.displayName !== 'undefined') {
- displayName = ref.displayName;
- }
- if (typeof ref.id !== 'undefined') {
- userId = ref.id;
- }
- }
- var time = Math.round(timeSinceLastEvent / 1000);
- var feed = {
- userId,
- displayName,
- time
- };
- hudTimeout.unshift(feed);
+ hudTimeout.unshift({
+ userId: this.getUserIdFromPhotonId(id),
+ displayName: this.getDisplayNameFromPhotonId(id),
+ time: Math.round(timeSinceLastEvent / 1000)
+ });
}
}
});
@@ -8278,70 +8264,32 @@ speechSynthesis.getVoices();
if (isInvisible) {
text = 'User has joined invisible';
} else if (avatarEyeHeight < 0) {
- text = 'Photon bot has joined';
+ text = 'Photon bot has joined, a';
} else if (
joinTime &&
joinTime + 10000 < dtNow &&
!hasInstantiated
) {
- text = 'Photon bot has joined';
+ text = 'Photon bot has joined, b';
} else if (
(!joinTime || joinTime + 3000 < dtNow) &&
typeof ref === 'undefined' &&
!event7PhotonIds.includes(id.toString())
) {
- text = 'Photon bot has joined';
+ text = 'Photon bot has joined, c';
}
if (text) {
if (!this.photonLobbyBots.includes(id)) {
- var displayName = `ID:${id}`;
- var userId = '';
- if (typeof ref !== 'undefined') {
- if (typeof ref.displayName !== 'undefined') {
- displayName = ref.displayName;
- }
- if (typeof ref.id !== 'undefined') {
- userId = ref.id;
- }
- }
this.addEntryPhotonEvent({
photonId: id,
- displayName,
- userId,
text,
+ color: 'yellow',
created_at: new Date().toJSON()
});
}
photonBots.unshift(id);
}
});
- this.photonLobbyBots.forEach((id) => {
- if (!photonBots.includes(id)) {
- var ref = this.photonLobby.get(id);
- var userId = '';
- if (typeof ref.id !== 'undefined') {
- userId = ref.id;
- }
- var displayName = `ID:${id}`;
- if (typeof ref.displayName !== 'undefined') {
- displayName = ref.displayName;
- }
- var time = '';
- if (this.photonLobbyJointime.has(id)) {
- var {joinTime} = this.photonLobbyJointime.get(id);
- if (typeof joinTime !== 'undefined') {
- time = ` ${timeToText(Date.now() - joinTime)}`;
- }
- }
- this.addEntryPhotonEvent({
- photonId: id,
- displayName,
- userId,
- text: `Photon bot has left${time}`,
- created_at: new Date().toJSON()
- });
- }
- });
if (this.photonLobbyBots.length !== photonBots.length) {
this.updatePhotonLobbyBotSize(photonBots.length);
}
@@ -8366,7 +8314,12 @@ speechSynthesis.getVoices();
}
};
- $app.methods.addEntryPhotonEvent = function (feed) {
+ $app.methods.addEntryPhotonEvent = function (input) {
+ var feed = {
+ displayName: this.getDisplayNameFromPhotonId(input.photonId),
+ userId: this.getUserIdFromPhotonId(input.photonId),
+ ...input
+ };
this.photonEventTable.data.unshift(feed);
if (this.photonEventOverlay) {
if (
@@ -8409,6 +8362,17 @@ speechSynthesis.getVoices();
return displayName;
};
+ $app.methods.getUserIdFromPhotonId = function (photonId) {
+ var userId = '';
+ if (photonId) {
+ var ref = this.photonLobby.get(photonId);
+ if (typeof ref !== 'undefined' && typeof ref.id !== 'undefined') {
+ userId = ref.id;
+ }
+ }
+ return userId;
+ };
+
$app.methods.showUserFromPhotonId = function (photonId) {
if (photonId) {
var ref = this.photonLobby.get(photonId);
@@ -8472,15 +8436,6 @@ speechSynthesis.getVoices();
);
this.parsePhotonAvatar(data.Parameters[251].avatarDict);
this.parsePhotonAvatar(data.Parameters[251].favatarDict);
- var lobbyJointime = this.photonLobbyJointime.get(
- data.Parameters[253]
- );
- if (typeof lobbyJointime !== 'undefined') {
- this.photonLobbyJointime.set(data.Parameters[253], {
- ...lobbyJointime,
- hasInstantiated: true
- });
- }
if (typeof data.Parameters[251].inVRMode !== 'undefined') {
this.photonLobbyInVrMode.set(
data.Parameters[253],
@@ -8521,16 +8476,18 @@ speechSynthesis.getVoices();
this.startLobbyWatcherLoop();
} else if (data.Code === 254) {
// Leave
+ this.checkPhotonBotLeave(data.Parameters[254], gameLogDate);
+ this.photonUserLeave(data.Parameters[254], gameLogDate);
this.photonLobbyCurrent.delete(data.Parameters[254]);
this.photonLobbyJointime.delete(data.Parameters[254]);
this.photonLobbyInVrMode.delete(data.Parameters[254]);
this.parsePhotonLobbyIds(data.Parameters[252].$values);
if (typeof data.Parameters[203] !== 'undefined') {
- this.setPhotonLobbyMaster(data.Parameters[203]);
+ this.setPhotonLobbyMaster(data.Parameters[203], gameLogDate);
}
} else if (data.Code === 4) {
// Sync
- this.setPhotonLobbyMaster(data.Parameters[254]);
+ this.setPhotonLobbyMaster(data.Parameters[254], gameLogDate);
} else if (data.Code === 33) {
// Moderation
if (data.Parameters[245]['0'] === 21) {
@@ -8556,21 +8513,10 @@ speechSynthesis.getVoices();
gameLogDate
});
if (block || mute) {
- var displayName = `ID:${photonId}`;
- var userId = '';
- if (typeof ref !== 'undefined') {
- if (typeof ref.displayName !== 'undefined') {
- displayName = ref.displayName;
- }
- if (typeof ref.id !== 'undefined') {
- userId = ref.id;
- }
- }
this.addEntryPhotonEvent({
photonId,
- displayName,
- userId,
text: `mute:${mute} block:${block}`,
+ color: 'yellow',
created_at: gameLogDate
});
}
@@ -8621,6 +8567,15 @@ speechSynthesis.getVoices();
if (!this.photonLobbyCurrent.has(data.Parameters[254])) {
this.photonLobbyCurrent.set(data.Parameters[254]);
}
+ var lobbyJointime = this.photonLobbyJointime.get(
+ data.Parameters[254]
+ );
+ if (typeof lobbyJointime !== 'undefined') {
+ this.photonLobbyJointime.set(data.Parameters[254], {
+ ...lobbyJointime,
+ hasInstantiated: true
+ });
+ }
} else if (data.Code === 6) {
var senderId = data.Parameters[254];
// VRC Event
@@ -8642,20 +8597,6 @@ speechSynthesis.getVoices();
) {
return;
}
- var displayName = '';
- var userId = '';
- if (senderId) {
- var ref = this.photonLobby.get(senderId);
- displayName = `ID:${senderId}`;
- if (typeof ref !== 'undefined') {
- if (typeof ref.displayName !== 'undefined') {
- displayName = ref.displayName;
- }
- if (typeof ref.id !== 'undefined') {
- userId = ref.id;
- }
- }
- }
if (
data.EventType === '_InstantiateObject' &&
data.Data[0] === 'Portals/PortalInternalDynamic'
@@ -8671,8 +8612,6 @@ speechSynthesis.getVoices();
var time = timeToText(Date.parse(gameLogDate) - date);
this.addEntryPhotonEvent({
photonId: senderId,
- displayName,
- userId,
text: `DeletedPortal ${time}`,
created_at: gameLogDate
});
@@ -8686,18 +8625,11 @@ speechSynthesis.getVoices();
);
this.lastPortalId = '';
}
- var ref = this.photonLobby.get(senderId);
- if (
- typeof ref !== 'undefined' &&
- typeof ref.displayName !== 'undefined'
- ) {
- var userId = '';
- if (typeof ref.id !== 'undefined') {
- userId = ref.id;
- }
+ var displayName = this.getDisplayNameFromPhotonId(senderId);
+ if (displayName) {
var ref1 = {
- id: userId,
- displayName: ref.displayName
+ id: this.getUserIdFromPhotonId(senderId),
+ displayName
};
this.portalQueue = 'skip';
this.parsePhotonPortalSpawn(gameLogDate, instanceId, ref1);
@@ -8745,8 +8677,6 @@ speechSynthesis.getVoices();
}
this.addEntryPhotonEvent({
photonId: senderId,
- displayName,
- userId,
text,
created_at: gameLogDate
});
@@ -8813,37 +8743,61 @@ speechSynthesis.getVoices();
}
};
- $app.methods.setPhotonLobbyMaster = function (photonId) {
+ $app.methods.setPhotonLobbyMaster = function (photonId, gameLogDate) {
if (this.photonLobbyMaster !== photonId) {
if (this.photonLobbyMaster !== 0) {
- var ref = this.photonLobby.get(photonId);
- var displayName = `ID:${photonId}`;
- var userId = '';
- if (typeof ref !== 'undefined') {
- if (typeof ref.displayName !== 'undefined') {
- displayName = ref.displayName;
- }
- if (typeof ref.id !== 'undefined') {
- userId = ref.id;
- }
- }
this.addEntryPhotonEvent({
photonId,
- displayName,
- userId,
text: `Photon Migrate Master`,
- created_at: new Date().toJSON()
+ created_at: gameLogDate
});
}
this.photonLobbyMaster = photonId;
}
};
+ $app.methods.checkPhotonBotLeave = function (photonId, gameLogDate) {
+ var text = '';
+ var lobbyJointime = this.photonLobbyJointime.get(photonId);
+ if (
+ typeof lobbyJointime !== 'undefined' &&
+ !lobbyJointime.hasInstantiated
+ ) {
+ var time = timeToText(Date.now() - lobbyJointime.joinTime);
+ text = `Left without instantiating ${time}`;
+ } else if (this.photonLobbyBots.includes(photonId)) {
+ var text = 'Photon bot has left';
+ if (typeof lobbyJointime !== 'undefined') {
+ var time = timeToText(Date.now() - lobbyJointime.joinTime);
+ text = `Photon bot has left ${time}`;
+ }
+ }
+ if (text) {
+ this.addEntryPhotonEvent({
+ photonId,
+ text,
+ color: 'yellow',
+ created_at: gameLogDate
+ });
+ }
+ };
+
$app.methods.parsePhotonUser = async function (
photonId,
user,
gameLogDate
) {
+ var lobbyJointime = this.photonLobbyJointime.get(photonId);
+ if (
+ typeof lobbyJointime !== 'undefined' &&
+ !lobbyJointime.hasInstantiated
+ ) {
+ this.photonLobbyJointime.set(photonId, {
+ ...lobbyJointime,
+ hasInstantiated: true
+ });
+ }
+ var hasJoined = this.photonLobbyCurrent.has(photonId);
var tags = [];
if (
typeof user.tags !== 'undefined' &&
@@ -8914,6 +8868,28 @@ speechSynthesis.getVoices();
this.photonModerationUpdate(ref, block, mute, gameLogDate);
}
}
+ if (!hasJoined) {
+ this.photonUserJoin(photonId, ref, gameLogDate);
+ }
+ };
+
+ $app.methods.photonUserJoin = function (photonId, ref, gameLogDate) {
+ if (ref.id === API.currentUser.id) {
+ return;
+ }
+ this.addEntryPhotonEvent({
+ photonId,
+ text: 'has joined',
+ created_at: gameLogDate
+ });
+ };
+
+ $app.methods.photonUserLeave = function (photonId, gameLogDate) {
+ this.addEntryPhotonEvent({
+ photonId,
+ text: 'has left',
+ created_at: gameLogDate
+ });
};
$app.methods.photonModerationUpdate = function (
diff --git a/html/src/index.pug b/html/src/index.pug
index f95358d1..b452d64a 100644
--- a/html/src/index.pug
+++ b/html/src/index.pug
@@ -1279,14 +1279,14 @@ html
span(v-else-if="userDialog.ref.status === 'busy'") Do Not Disturb
span(v-else) Offline
i.x-user-status(:class="userStatusClass(userDialog.ref)")
- span(v-text="userDialog.ref.displayName" style="margin-left:5px;font-weight:bold")
+ span(v-text="userDialog.ref.displayName" style="margin-left:5px;margin-right:5px;font-weight:bold")
el-popover(placement="top" trigger="click")
- span(slot="reference" v-text="userDialog.ref.username" style="margin-left:5px;color:#909399;font-family:monospace;font-size:12px;cursor:pointer")
+ span(slot="reference" v-text="userDialog.ref.username" style="margin-right:5px;color:#909399;font-family:monospace;font-size:12px;cursor:pointer")
span(style="display:block;text-align:center;font-family:monospace") {{ userDialog.ref.username | textToHex }}
el-tooltip(v-for="item in userDialog.ref.$languages" :key="item.key" placement="top")
template(#content)
span {{ item.value }} ({{ item.key }})
- span.famfamfam-flags(:class="languageClass(item.key)" style="display:inline-block;margin-left:5px")
+ span.famfamfam-flags(:class="languageClass(item.key)" style="display:inline-block;margin-right:5px")
div
el-tag.name(type="info" effect="plain" size="mini" :class="userDialog.ref.$trustClass" v-text="userDialog.ref.$trustLevel" style="margin-right:5px;margin-top:5px")
el-tag.x-tag-friend(v-if="userDialog.isFriend && userDialog.friend" type="info" effect="plain" size="mini" style="margin-right:5px;margin-top:5px") Friend No.{{userDialog.friend.no}}
diff --git a/html/src/vr.js b/html/src/vr.js
index b29019dc..0ca16e74 100644
--- a/html/src/vr.js
+++ b/html/src/vr.js
@@ -567,7 +567,7 @@ Vue.component('marquee-text', MarqueeText);
};
$app.methods.addEntryHudFeed = function (json) {
- var {displayName, text} = JSON.parse(json);
+ var {displayName, text, color} = JSON.parse(json);
var combo = 1;
this.hudFeed.forEach((item) => {
if (item.displayName === displayName && item.text === text) {
@@ -579,7 +579,8 @@ Vue.component('marquee-text', MarqueeText);
time: Date.now(),
displayName,
text,
- combo
+ combo,
+ color
});
this.cleanHudFeed();
};
diff --git a/html/src/vr.pug b/html/src/vr.pug
index 4d5a69a8..15995374 100644
--- a/html/src/vr.pug
+++ b/html/src/vr.pug
@@ -416,7 +416,9 @@ html
circle(class="np-progress-circle-stroke" cx="60" cy="60" stroke="white" r="30" fill="transparent" stroke-width="60")
.hud-feed
div(v-for="feed in hudFeed")
- .item {{ feed.displayName }} {{ feed.text }}
+ .item {{ feed.displayName }}
+ span(v-if="feed.color === 'yellow'" style="color: yellow") {{ feed.text }}
+ span(v-else) {{ feed.text }}
template(v-if="feed.combo > 1")
span.combo x{{ feed.combo }}
.hud-timeout(v-if="hudTimeout.length > 0")