diff --git a/EditFullDive/Readme.txt b/EditFullDive/Readme.txt
index 564f5c6..9aeace3 100644
--- a/EditFullDive/Readme.txt
+++ b/EditFullDive/Readme.txt
@@ -1,3 +1,4 @@
-Fulldive version will break with earch update,
-and you'll have to check the gh page for a newer
-edit versions~
\ No newline at end of file
+Fulldive version will break with each update,
+and you'll have to check the gh page for a new version~
+
+Overhauls style, adds "author" button to prop and avatar detail pages.
\ No newline at end of file
diff --git a/EditFullDive/index.html b/EditFullDive/index.html
index d831d3c..4ae1dec 100644
--- a/EditFullDive/index.html
+++ b/EditFullDive/index.html
@@ -1,3419 +1,3423 @@
-
-
- ';
+ }
+
+ console.log(searchProps[i].ResultName);
+ console.log(searchProps[i].ResultName.makeSafe());
+
+ propHtml += '
'+
+ '
![]()
'+
+ searchProps[i].ResultName.makeSafe()+'
'+
+ '
Details
'+
+ '
Select Prop
'+
+ '
Drop
'+
+ '
';
+ }
+
+ propWrapper.innerHTML = propHtml;
+}
+
+//Invites
+engine.on('LoadInvites', function(_list){
+ renderInvites(_list);
+});
+
+function renderInvites(_list){
+ var html = '';
+
+ for(var i=0; _list[i]; i++){
+
+ html += '
'+
+ '
![]()
'+
+ '
'+
+ '
'+_list[i].SenderUsername.makeSafe()+' invited you to join their session
'+_list[i].InstanceName.makeSafe()+'
'+
+ '
'+
+ '
'+
+ '
'+
+ '
'+
+ '
'+
+ '
'+
+ '
';
+ }
+
+ html+= '';
+
+ document.querySelector('#message-invites .message-list').innerHTML = html;
+ document.querySelector('.messages-invites > .filter-number').innerHTML = _list.length;
+}
+
+function AddInvite(_invite){
+
+ var html = '
'+
+ '
![]()
'+
+ '
'+
+ '
'+_invite.SenderUsername.makeSafe()+' invited you to join their session
'+_invite.InstanceName.makeSafe()+'
'+
+ '
'+
+ '
'+
+ '
'+
+ '
'+
+ '
'+
+ '
'+
+ '
';
+
+ cvr('#message-invites .message-list').addHTML(html);
+ document.querySelector('.messages-invites > .filter-number').innerHTML = cvr('#message-invites .message-list .message-invite').length;
+}
+
+function UpdateInvite(_invite){
+ //NOP
+}
+
+function RemoveInvite(_invite){
+ cvr('#invites .list-content .flex-list [data-id="'+_invite.InviteMeshId+'"]').remove();
+}
+
+engine.on('AddInvite', function(_invite){
+ AddInvite(_invite);
+});
+
+engine.on('UpdateInvite', function(_invite){
+ UpdateInvite(_invite);
+});
+
+engine.on('RemoveInvite', function(_invite){
+ RemoveInvite(_invite);
+});
+
+//Settings
+function switchSettingCategorie(_id, _e){
+ var buttons = document.querySelectorAll('#settings .filter-option');
+ var categories = document.querySelectorAll('#settings .settings-categorie');
+
+ for(var i = 0; i < buttons.length; i++){
+ buttons[i].classList.remove('active');
+ }
+
+ for(var i = 0; i < categories.length; i++){
+ categories[i].classList.remove('active');
+ }
+
+ _e.classList.add('active');
+
+ if (_id == "settings-audio")
+ {
+ LoadMicrophones();
+ }
+
+ if (_id == "settings-graphics")
+ {
+ LoadResolutions();
+ }
+
+ document.getElementById(_id).classList.add('active');
+}
+
+//Messages
+function switchMessageCategorie(_id, _e){
+ var buttons = document.querySelectorAll('#messages .filter-option');
+ var categories = document.querySelectorAll('#messages .message-categorie');
+
+ for(var i = 0; i < buttons.length; i++){
+ buttons[i].classList.remove('active');
+ }
+
+ for(var i = 0; i < categories.length; i++){
+ categories[i].classList.remove('active');
+ }
+
+ _e.classList.add('active');
+
+ document.getElementById(_id).classList.add('active');
+}
+
+function loadMessages(_invites, _friendrequests, _votes, _systems, _dms){
+ var html = '';
+ for(var i=0; i < _invites.length; i++){
+ html += displayMessageInvite(_invites[i]);
+ }
+ if(_invites.length == 0){
+ html = '
'+
+'
'+
+'

'+
+'
'+
+' No invites found.'+
+'
'+
+'
'+
+'
';
+ }
+ document.querySelector('#message-invites .message-list').innerHTML = html;
+ document.querySelector('.messages-invites > .filter-number').innerHTML = _invites.length;
+
+ html = '';
+ for(i=0; i < _friendrequests.length; i++){
+ html += displayMessageFriendRequest(_friendrequests[i]);
+ }
+ if(_friendrequests.length == 0){
+ html = '
'+
+'
'+
+'

'+
+'
'+
+' No friend requests found.'+
+'
'+
+'
'+
+'
';
+ }
+ document.querySelector('#message-friendrequests .message-list').innerHTML = html;
+ document.querySelector('.message-friendrequests > .filter-number').innerHTML = _friendrequests.length;
+
+ html = '';
+ for(i=0; i < _votes.length; i++){
+ html += displayMessageVote(_votes[i]);
+ }
+ if(_votes.length == 0){
+ html = '
'+
+'
'+
+'

'+
+'
'+
+' No votes found.'+
+'
'+
+'
'+
+'
';
+ }
+ document.querySelector('#message-votes .message-list').innerHTML = html;
+ document.querySelector('.message-votes > .filter-number').innerHTML = _votes.length;
+
+ html = '';
+ for(i=0; i < _systems.length; i++){
+ html += displayMessageSystem(_systems[i]);
+ }
+ if(_systems.length == 0){
+ html = '
'+
+'
'+
+'

'+
+'
'+
+' No system messages found.'+
+'
'+
+'
'+
+'
';
+ }
+ document.querySelector('#message-system .message-list').innerHTML = html;
+ document.querySelector('.message-system > .filter-number').innerHTML = _systems.length;
+
+ html = '';
+ for(i=0; i < _dms.length; i++){
+ html += displayMessageDM(_dms[i]);
+ }
+ if(_dms.length == 0){
+ html = '
'+
+'
'+
+'

'+
+'
'+
+' No direct messages found.'+
+'
'+
+'
'+
+'
';
+ }
+ document.querySelector('#message-dm .message-list').innerHTML = html;
+ document.querySelector('.message-dm > .filter-number').innerHTML = _dms.length;
+}
+
+function displayMessageInvite(_invite){
+ return '
'+
+'
![]()
'+
+'
'+
+'
'+_invite.SenderUsername.makeSafe()+' invited you to join their session
'+_invite.InstanceName.makeSafe()+'
'+
+'
'+
+'
'+
+'
'+
+'
'+
+'
'+
+'
'+
+'
';
+}
+
+function displayMessageInviteRequest(_request){
+ return '
'+
+ '
![]()
'+
+ '
'+
+ '
'+_request.RequestMessage.makeSafe()+'
'+
+ '
'+
+ '
'+
+ '
'+
+ '
'+
+ '
'+
+ '
';
+}
+
+function respondeInvite(_guid, _response){
+ engine.call('CVRAppCallRespondToInvite', _guid, _response);
+}
+
+function respondeInviteRequest(_guid, _response){
+ engine.call('CVRAppCallRespondToInviteRequest', _guid, _response);
+}
+
+function displayMessageFriendRequest(_friendrequest){
+ return '
'+
+'
![]()
'+
+'
'+
+'
'+_friendrequest.UserName.makeSafe()+' sent you a friend request
'+
+'
'+
+'
'+
+'
'+
+'
'+
+'
'+
+'
';
+}
+
+function displayMessageVote(_vote){
+ return '
'+
+'
![]()
'+
+'
'+
+'
'+getVoteTitle(_vote)+'
'+
+'
'+getVoteMessage(_vote)+'
'+
+'
'+
+ getVoteAdditionalButtons(_vote)+
+'
'+
+'
'+
+'
';
+}
+
+engine.on('RemoveVote', function(VoteId){
+ removeVote(VoteId);
+});
+
+function removeVote(_VoteId) {
+ var vote = document.getElementById("notification_vote_" + _VoteId);
+ if (vote) vote.parentNode.removeChild(vote);
+
+ var votes = document.querySelectorAll(".message-content.message-vote");
+
+ // If there are no votes -> Reset the message saying there are no votes
+ if (votes.length === 0) {
+ loadMessagesSingle('votes', []);
+ }
+ // Otherwise just update the vote count number
+ else {
+ document.querySelector('.message-votes > .filter-number').innerHTML = votes.length;
+ }
+}
+
+function getVoteTitle(_vote) {
+ switch (_vote.ReadableType) {
+ case 'Kick':
+ return `${_vote.StarterName} has started a votekick against ${_vote.Data}`;
+ default:
+ return _vote.ReadableType;
+ }
+}
+
+function getVoteMessage(_vote) {
+ switch (_vote.ReadableType) {
+ default:
+ return "";
+ }
+}
+
+function getVoteImageSource(_vote) {
+ switch (_vote.ReadableType) {
+ case 'Kick':
+ return 'src="gfx/btn-kick.svg"';
+ default:
+ return `data-loading-url="${GetCachedImage(_vote.ImageCoui, _vote.ImageUrl)}"`;
+ }
+}
+
+function getVoteAdditionalButtons(_vote) {
+ switch (_vote.ReadableType) {
+ case 'Kick':
+ return '
';
+ default:
+ return "";
+ }
+}
+
+function respondeVote(_guid, _response){
+ engine.call('CVRAppCallRespondToVote', _guid, _response);
+}
+
+function displayMessageSystem(_system){
+ return '
'+
+'

'+
+'
'+
+'
'+_system.HeaderText.makeSafe()+'
'+
+'
'+_system.LongText.makeSafe()+'
'+
+'
'+
+'
'+
+'
'+
+'
';
+}
+
+function respondeSystem(_guid, _response){
+ engine.call('CVRAppCallRespondToSystem', _guid, _response);
+}
+
+function displayMessageDM(_dm){
+ return '
'+
+'

'+
+'
'+
+'
'+
+'
';
+}
+
+function loadMessagesSingle(_cat, _list){
+ switch(_cat){
+ case 'invites':
+ var html = '';
+ for(var i=0; i < _list.length; i++){
+ html += displayMessageInvite(_list[i]);
+ }
+ if(_list.length == 0){
+ html = '
'+
+ '
'+
+ '

'+
+ '
'+
+ ' No invites found.'+
+ '
'+
+ '
'+
+ '
';
+ }
+ document.querySelector('#message-invites .message-list').innerHTML = html;
+ document.querySelector('.messages-invites > .filter-number').innerHTML = _list.length;
+ break;
+ case 'invite-requests':
+ var html = '';
+ for(var i=0; i < _list.length; i++){
+ html += displayMessageInviteRequest(_list[i]);
+ }
+ if(_list.length == 0){
+ html = '
'+
+ '
'+
+ '

'+
+ '
'+
+ ' No invite requests found.'+
+ '
'+
+ '
'+
+ '
';
+ }
+ document.querySelector('#message-invite-requests .message-list').innerHTML = html;
+ document.querySelector('.messages-invite-requests > .filter-number').innerHTML = _list.length;
+ break;
+ case 'system-notifications':
+ var html = '';
+ for(var i=0; i < _list.length; i++){
+ //html += displayMessageInvite(_list[i]);
+ }
+ if(_list.length == 0){
+ html = '
'+
+ '
'+
+ '

'+
+ '
'+
+ ' No System Notifications found.'+
+ '
'+
+ '
'+
+ '
';
+ }
+ document.querySelector('#message-system .message-list').innerHTML = html;
+ document.querySelector('.messages-system > .filter-number').innerHTML = _list.length;
+ break;
+ case 'friend-requests':
+ var html = '';
+ for(var i=0; i < _list.length; i++){
+ html += displayMessageFriendRequest(_list[i]);
+ }
+ if(_list.length == 0){
+ html = '
'+
+ '
'+
+ '

'+
+ '
'+
+ ' No Friend Request found.'+
+ '
'+
+ '
'+
+ '
';
+ }
+ document.querySelector('#message-friendrequests .message-list').innerHTML = html;
+ document.querySelector('.message-friendrequests > .filter-number').innerHTML = _list.length;
+ break;
+ case 'votes':
+ var html = '';
+ for(var i=0; i < _list.length; i++){
+ html += displayMessageVote(_list[i]);
+ }
+ if(_list.length == 0){
+ html = '
'+
+ '
'+
+ '

'+
+ '
'+
+ ' No votes found.'+
+ '
'+
+ '
'+
+ '
';
+ }
+ document.querySelector('#message-votes .message-list').innerHTML = html;
+ document.querySelector('.message-votes > .filter-number').innerHTML = _list.length;
+ break;
+ }
+}
+
+var lastPropsUpdate = new Date();
+var propList = [];
+//Props
+function loadProps(_list){
+ propList = _list;
+
+ lastPropsUpdate = new Date();
+
+ renderProps(_list);
+}
+
+function renderProps(_list, _forceRefresh){
+ var contentList = document.querySelector('#props .list-content');
+
+ if (_forceRefresh === true) cvr('#props .list-content .flex-list').innerHTML('');
+
+ for(var i=0; _list[i]; i++){
+ if (cvr('#props .list-content .flex-list #prp_'+_list[i].SpawnableId+'').length == 0){
+ AddProp(_list[i]);
+ } else {
+ UpdateProp(_list[i]);
+ }
+ }
+}
+
+function AddProp(_prop){
+ const spawnableImageUrl = GetCachedImage(_prop.SpawnableImageCoui, _prop.SpawnableImageUrl);
+ var html = '
'+
+ '
![]()
'+
+ _prop.SpawnableName.makeSafe()+'
Details
'+
+ '
Select Prop
'+
+ '
Drop Prop
';
+
+ cvr('#props .list-content .flex-list').addHTML(html);
+}
+
+function UpdateProp(_prop){
+ const spawnableImageUrl = GetCachedImage(_prop.SpawnableImageCoui, _prop.SpawnableImageUrl);
+ if (cvr('#props .list-content .flex-list #prp_' + _prop.SpawnableId + ' .content-image').first().getAttribute('src') != spawnableImageUrl) {
+ cvr('#props .list-content .flex-list #prp_' + _prop.SpawnableId + ' .content-image').attr('src', spawnableImageUrl);
+ }
+ cvr('#props .list-content .flex-list #prp_'+_prop.SpawnableId+' .content-name').innerHTML(_prop.SpawnableName.makeSafe());
+}
+
+function RemoveProp(_prop){
+ cvr('#props .list-content .flex-list #prp_'+_prop.SpawnableId+'').remove();
+}
+
+engine.on('AddProp', function(_prop){
+ AddProp(_prop);
+});
+
+engine.on('UpdateProp', function(_prop){
+ UpdateProp(_prop);
+});
+
+engine.on('RemoveProp', function(_prop){
+ RemoveProp(_prop);
+});
+
+function SpawnProp(_uid){
+ engine.call('CVRAppCallSpawnProp', _uid);
+}
+function SelectProp(_uid, _image, _name){
+ engine.call('CVRAppCallSelectProp', _uid, _image, _name);
+}
+function DeletePropMode(){
+ engine.trigger('CVRAppCallDeletePropMode');
+}
+function ReloadAllAvatars(){
+ engine.trigger('CVRAppActionReloadAllAvatars');
+}
+
+//World Details
+function getWorldDetails(_uid){
+ engine.call('CVRAppCallGetWorldDetails', _uid);
+ if(debug){
+ loadWorldDetails({WorldName: 'Testworld', AdminTags: '', SafetyTags: 'SFW', AuthorName: 'Khodrin', AuthorGuid: 'AAAA',
+ Guid: 'AAAA', AuthorImageUrl: 'https://abis3.fra1.digitaloceanspaces.com/ProfilePictures/Khodrin.png',
+ WorldImageUrl: 'https://abis3.fra1.digitaloceanspaces.com/Worlds/b1d2ac7c-4074-4804-abd5-3fe2fe12680c.png',
+ WorldDescription: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam vel tellus eget mauris vestibulum tempus at sed felis. Pellentesque vitae sapien non sapien sagittis ultrices sed quis odio. Quisque ac rutrum nunc. Nulla cursus volutpat lectus, eget consectetur enim fermentum eu. Etiam sodales posuere magna ac dictum. Phasellus laoreet purus sollicitudin pretium vehicula. Aenean ullamcorper in mauris ultrices ornare. Aliquam elementum lacus vel enim blandit, quis pretium urna fringilla. Aliquam sagittis venenatis mi et tristique. Mauris a pulvinar dolor. Nam nec pharetra erat, in molestie ipsum. Proin sed justo sed sem elementum faucibus non nec ex.',
+ UploadedAt: '2020-01-01', UpdatedAt: '2020-01-20', WorldSize: '20MB'
+ },
+ [{Guid: 'AAAA', CurrentPlayerCount: 24, InstanceName: 'Sauerkraut der Zukunft#945623', InstanceRegion: 'EU'}],
+ []);
+ }
+}
+
+var currentWorldDetails = {};
+
+function loadWorldDetails(_data, _instances){
+ window.worldCurrentCategories = _data.FilterTags.split(',');
+ currentWorldDetails = _data;
+ var detailPage = document.getElementById('world-detail');
+
+ document.querySelector('#world-detail h1').innerHTML = 'World: '+_data.WorldName.makeSafe();
+ document.querySelector('.data-worldName').innerHTML = _data.WorldName.makeSafe();
+ document.querySelector('.data-description').innerHTML = _data.WorldDescription.makeSafe();
+ document.querySelector('.data-adminTags').innerHTML = _data.AdminTags.replace(/,/g, ' ').makeSafe();
+ document.querySelector('.data-safetyTags').innerHTML = _data.SafetyTags.replace(/,/g, ' ').makeSafe();
+ document.querySelector('.data-fileSize').innerHTML = _data.WorldSize;
+ document.querySelector('.data-uploaded').innerHTML = _data.UploadedAt;
+ document.querySelector('.data-updated').innerHTML = _data.UpdatedAt;
+
+ if (_data.Compatibillity == 0){
+ cvr('.world-legacy').show();
+ } else {
+ cvr('.world-legacy').hide();
+ }
+
+ document.querySelector('.data-worldImage').src = GetCachedImage(_data.WorldImageCoui, _data.WorldImageUrl);
+ document.querySelector('.data-worldPreload').setAttribute('onclick', 'preloadWorld(\''+_data.WorldId+'\');');
+
+ document.querySelector('.data-worldExplore').setAttribute('onclick', 'changeWorld(\''+_data.WorldId+'\');');
+
+ document.querySelector('.data-worldSetHome').setAttribute('onclick', 'setHome(\''+_data.WorldId+'\');');
+
+ document.querySelector('.data-worldFavorite').setAttribute('onclick', 'favoriteWorld(\''+_data.WorldId+'\');');
+
+ document.querySelector('.data-worldAuthorImage').src = GetCachedImage(_data.AuthorImageCoui, _data.AuthorImageUrl);
+ document.querySelector('.data-authorName').innerHTML = _data.AuthorName.makeSafe();
+ document.querySelector('.action-btn.data-author-profile').setAttribute('onclick', 'getUserDetails(\''+_data.AuthorId+'\');');
+
+ var html = '';
+
+ for(var i=0; i < _instances.length; i++){
+ html += generateInstanceHTML(_instances[i]);
+ }
+
+ if(_instances.length == 0){
+ html = '
There are currently no open instances for this world
';
+ }
+
+ document.querySelector('.data-worldInstances').innerHTML = html;
+
+ detailPage.classList.remove('hidden');
+ detailPage.classList.add('in');
+ SetElementToTop(detailPage);
+
+ document.querySelector('#world-instance-create .btn-create').setAttribute('onclick', 'instancingCreateInstance(\''+_data.WorldId+'\');');
+ hideCreateInstance();
+}
+
+function updateWorldDetailInstances(_instances){
+ var html = '';
+
+ for(var i=0; i < _instances.length; i++){
+ html += generateInstanceHTML(_instances[i]);
+ }
+
+ if(_instances.length == 0){
+ html = '
There are currently no open instances for this world
';
+ }
+
+ document.querySelector('.data-worldInstances').innerHTML = html;
+}
+
+function addWorldDetailInstance(_instance){
+ uiLoadingClose();
+
+ var instances = document.querySelectorAll('#world-detail .world-instance');
+
+ for(var i=0; i < instances.length; i++){
+ instances[i].classList.remove('new');
+ }
+
+ var html = generateInstanceHTML(_instance, true);
+ document.querySelector('.data-worldInstances').insertAdjacentHTML('afterbegin', html);
+
+ var empty = document.querySelector('.world-instances-empty-message');
+ if(empty != null){
+ empty.parentNode.removeChild(empty);
+ }
+
+ setTimeout(function() {
+ showInstanceDetails(_instance.InstanceId)
+ }, 300);
+}
+
+function generateInstanceHTML(_instance, _new){
+ return '
'+
+ '
'+
+ '
'+_instance.CurrentPlayerCount+'
'+
+ '
'+_instance.InstanceRegion+'
'+
+ '
'+_instance.InstanceName.makeSafe()+'
'+
+ '
';
+}
+
+function closeWorldDetail(){
+ var detailPage = document.getElementById('world-detail');
+ detailPage.classList.remove('in');
+ detailPage.classList.add('out');
+ setTimeout(function(){
+ detailPage.classList.add('hidden');
+ detailPage.classList.remove('out');
+ }, 200);
+}
+
+// Instance Creation
+engine.on('LoadInstanceCreationSettings', function(typeValue, regionValue, ruleValue){
+ setInitialCreateInstanceSettings(typeValue, regionValue, ruleValue);
+});
+
+function setInitialCreateInstanceSettings(typeValue, regionValue, ruleValue){
+ let typeElementToActivate = document.querySelector(`.instancing-type-btn[data-instance-type-value="${typeValue}"]`);
+ if (!typeElementToActivate) typeElementToActivate = document.querySelector('.instancing-type-btn[data-instance-type-value="Public"]');
+ instancingChangeType(typeElementToActivate);
+
+ let regionElementToActivate = document.querySelector(`.region-select[data-instance-region-value="${regionValue}"]`);
+ if (!regionElementToActivate) regionElementToActivate = document.querySelector('.region-select[data-instance-region-value="0"]');
+ instancingChangeRegion(regionElementToActivate);
+
+ // let ruleElementToActivate = document.querySelector(`.rule-select[data-instance-rule-value="${ruleValue}"]`);
+ // if (!ruleElementToActivate) ruleElementToActivate = document.querySelector('.rule-select[data-instance-rule-value="SFW"]');
+ // instancingChangeRule(ruleElementToActivate);
+}
+
+function showCreateInstance(){
+ const createInstance = document.getElementById('world-instance-create');
+ createInstance.classList.remove('hidden');
+ createInstance.classList.add('in');
+}
+
+function instancingChangeType(_e){
+ document.getElementById('instancing-type').value = _e.attributes.getNamedItem('data-instance-type-value').value;
+
+ const buttons = document.querySelectorAll('.instancing-type-btn');
+ for(let i=0; buttons[i]; i++){
+ buttons[i].classList.remove('active');
+ }
+
+ _e.classList.add('active');
+}
+
+function instancingChangeRegion(_e){
+ document.getElementById('instancing-region').value = _e.attributes.getNamedItem('data-instance-region-value').value;
+
+ const buttons = document.querySelectorAll('.region-select');
+ for(let i=0; buttons[i]; i++){
+ buttons[i].classList.remove('active');
+ }
+
+ _e.classList.add('active');
+}
+
+function instancingChangeRule(_e){
+ document.getElementById('instancing-rule').value = _e.attributes.getNamedItem('data-instance-rule-value').value;
+
+ const buttons = document.querySelectorAll('.rule-select');
+ for(let i=0; buttons[i]; i++){
+ buttons[i].classList.remove('active');
+ }
+
+ _e.classList.add('active');
+}
+
+function instancingCreateInstance(_uid){
+ const type = document.getElementById('instancing-type').value;
+ const region = document.getElementById('instancing-region').value;
+ const rule = document.getElementById('instancing-rule').value;
+
+ engine.call('CVRAppCallCreateInstance', _uid, type, region, rule);
+ hideCreateInstance();
+ uiLoadingShow('Your instance is being created.');
+}
+
+function hideCreateInstance(){
+ var createInstance = document.getElementById('world-instance-create');
+
+ createInstance.classList.remove('in');
+ createInstance.classList.add('out');
+ setTimeout(function(){
+ createInstance.classList.add('hidden');
+ createInstance.classList.remove('out');
+ }, 200);
+}
+//World Categories
+window.worldCategories = [];
+window.worldCurrentCategories = [];
+window.pickedWorldForCategorie = '';
+window.pickedWorldCategories = [];
+
+function favoriteWorld(_guid){
+ window.pickedWorldForCategorie = _guid;
+
+ var html = '';
+
+ for (var i=0; i < window.worldCategories.length; i++){
+ if(window.worldCurrentCategories.includes(window.worldCategories[i].CategoryKey)){
+ window.pickedWorldCategories[window.worldCategories[i].CategoryKey] = true;
+ html += '
'+window.worldCategories[i].CategoryClearTextName.makeSafe()+' ';
+ }else{
+ window.pickedWorldCategories[window.worldCategories[i].CategoryKey] = false;
+ html += '
'+window.worldCategories[i].CategoryClearTextName.makeSafe()+' ';
+ }
+ }
+
+ cvr('#world-detail .favorite-categories').innerHTML(html);
+
+ cvr('#world-detail .favorite-category-selection').removeClass('hidden').addClass('in');
+}
+
+function closeWorldDetailFavorite(){
+ var detailPage = document.querySelector('#world-detail .favorite-category-selection');
+ detailPage.classList.remove('in');
+ detailPage.classList.add('out');
+ setTimeout(function(){
+ detailPage.classList.add('hidden');
+ detailPage.classList.remove('out');
+ }, 200);
+}
+
+function changeWorldCategory(_categoryIdentifier, _e){
+ if (_e.classList.contains('checked')){
+ var index = window.worldCurrentCategories.indexOf(_categoryIdentifier);
+ if (index > -1) {
+ window.worldCurrentCategories.splice(index, 1);
+ }
+
+ window.pickedWorldCategories[_categoryIdentifier] = false;
+ _e.classList.remove('checked');
+ }else{
+ window.worldCurrentCategories.push(_categoryIdentifier);
+
+ window.pickedWorldCategories[_categoryIdentifier] = true;
+ _e.classList.add('checked');
+ }
+}
+
+function sendWorldCategoryUpdate(){
+ var categoryList = [];
+
+ for (var k in window.pickedWorldCategories){
+ if (window.pickedWorldCategories[k]){
+ categoryList[categoryList.length] = k;
+ }
+ }
+
+ engine.call("CVRAppCallUpdateWorldCategories", window.pickedWorldForCategorie, categoryList.join(','));
+ closeWorldDetailFavorite();
+}
+
+//Instance Detail
+function closeInstanceDetail(){
+ var detailPage = document.getElementById('instance-detail');
+ detailPage.classList.remove('in');
+ detailPage.classList.add('out');
+ setTimeout(function(){
+ detailPage.classList.add('hidden');
+ detailPage.classList.remove('out');
+ }, 200);
+}
+
+function showInstanceDetails(_uid){
+ engine.call('CVRAppCallGetInstanceDetails', _uid);
+}
+
+engine.on('LoadInstanceDetails', function (_instance) {
+ loadInstanceDetail(_instance);
+});
+
+function loadInstanceDetail(_instance){
+ var detailPage = document.getElementById('instance-detail');
+ closeAvatarSettings();
+
+ document.querySelector('#instance-detail h1').innerHTML = "Instance: "+_instance.InstanceName.makeSafe();
+
+ document.querySelector('#instance-detail .profile-image').src = GetCachedImage(_instance.Owner.UserImageCoui, _instance.Owner.UserImageUrl);
+ document.querySelector('#instance-detail .content-instance-owner h2').innerHTML = _instance.Owner.UserName.makeSafe();
+ document.querySelector('#instance-detail .content-instance-owner h3').innerHTML = _instance.Owner.UserRank;
+
+ document.querySelector('#instance-detail .profile-badge img').src = GetCachedImage(_instance.Owner.FeaturedBadgeImageCoui, _instance.Owner.FeaturedBadgeImageUrl);
+ document.querySelector('#instance-detail .profile-badge p').innerHTML = _instance.Owner.FeaturedBadgeName;
+
+ document.querySelector('#instance-detail .profile-group img').src = GetCachedImage(_instance.Owner.FeaturedGroupImageCoui, _instance.Owner.FeaturedGroupImageUrl);
+ document.querySelector('#instance-detail .profile-group p').innerHTML = _instance.Owner.FeaturedGroupName.makeSafe();
+
+ document.querySelector('#instance-detail .profile-avatar img').src = GetCachedImage(_instance.Owner.CurrentAvatarImageCoui, _instance.Owner.CurrentAvatarImageUrl);
+ document.querySelector('#instance-detail .profile-avatar p').innerHTML = _instance.Owner.CurrentAvatarName.makeSafe();
+
+
+ document.querySelector('#instance-detail .world-image').src = GetCachedImage(_instance.World.WorldImageCoui, _instance.World.WorldImageUrl)
+ document.querySelector('#instance-detail .world-image').setAttribute(
+ 'onclick', 'getWorldDetails(\''+_instance.World.WorldId+'\');');
+ document.querySelector('#instance-detail .content-instance-world h2').innerHTML = _instance.World.WorldName.makeSafe();
+ document.querySelector('#instance-detail .content-instance-world p').innerHTML = 'by '+_instance.World.AuthorName.makeSafe();
+ document.querySelector('#instance-detail .content-instance-world p').setAttribute(
+ 'onclick', 'getUserDetails(\''+_instance.World.AuthorId+'\');');
+
+
+ document.querySelector('#instance-detail .data-type').innerHTML = _instance.Privacy;
+ document.querySelector('#instance-detail .data-region').innerHTML = _instance.Region;
+ document.querySelector('#instance-detail .data-gamemode').innerHTML = _instance.GameMode;
+ document.querySelector('#instance-detail .data-maxplayers').innerHTML = _instance.MaxPlayer;
+ document.querySelector('#instance-detail .data-currplayers').innerHTML = _instance.CurrentPlayer;
+
+
+ document.querySelector('#instance-detail .instance-btn.joinBtn').
+ setAttribute('onclick', 'joinInstance(\''+_instance.InstanceId+'\', \''+_instance.World.WorldId+'\');');
+ document.querySelector('#instance-detail .instance-btn.portalBtn').
+ setAttribute('onclick', 'dropInstancePortal(\''+_instance.InstanceId+'\');');
+
+
+ var html = '';
+
+ for(var i=0; i < _instance.Users.length; i++){
+ html += '
![]()
'+
+ _instance.Users[i].UserName.makeSafe()+'
';
+ }
+
+ document.querySelector('#instance-detail .content-instance-players .scroll-content').innerHTML = html;
+
+ document.querySelector('#instance-detail .content-instance-players .scroll-content').scrollTop = 0;
+
+ detailPage.classList.remove('hidden');
+ detailPage.classList.add('in');
+ SetElementToTop(detailPage);
+}
+
+//User Details
+var currentRequestedUserId = "";
+function getUserDetails(_uid){
+ engine.call('CVRAppCallGetUserDetails', _uid);
+ currentRequestedUserId = _uid;
+}
+function getUserDetailsTab(_uid, _tab){
+ engine.call('CVRAppCallRequestUSerDetailsTab', _uid, _tab);
+}
+function setUserFriendNote(_uid, _note){
+ engine.call('CVRAppCallSetUserFriendNote', _uid, _note);
+}
+
+var PlayerData = {};
+
+var userProfileMute;
+var userProfileVolume;
+var userProfilePlayerAvatarsBlocked;
+var userProfileBundleVerifierBypass;
+var userProfileAvatarBlocked;
+var userProfilePropBlocked;
+
+function loadUserDetails(_data, _profile){
+ currentRequestedUserId = _data.UserId;
+ window.friendCurrentCategories = _data.FilterTags.split(',');
+ PlayerData = _data;
+ var detailPage = document.getElementById('user-detail');
+
+ document.querySelector('#user-detail h1').innerHTML = 'Profile: '+_data.UserName.makeSafe();
+
+ document.querySelector('#user-detail .online-state').className = 'online-state '+(_data.OnlineState?'online':'offline');
+ document.querySelector('#user-detail .profile-image').src = GetCachedImage(_data.UserImageCoui, _data.UserImageUrl);
+ document.querySelector('#user-detail .user-sidebar h2').innerHTML = _data.UserName.makeSafe();
+ document.querySelector('#user-detail .user-sidebar h3').innerHTML = _data.UserRank;
+
+ document.querySelector('#user-detail .profile-badge img').src = GetCachedImage(_data.FeaturedBadgeImageCoui, _data.FeaturedBadgeImageUrl);
+ document.querySelector('#user-detail .profile-badge p').innerHTML = _data.FeaturedBadgeName;
+
+ document.querySelector('#user-detail .profile-group img').src = GetCachedImage(_data.FeaturedGroupImageCoui, _data.FeaturedGroupImageUrl);
+ document.querySelector('#user-detail .profile-group p').innerHTML = _data.FeaturedGroupName.makeSafe();
+
+ document.querySelector('#user-detail .profile-avatar img').src = GetCachedImage(_data.CurrentAvatarImageCoui, _data.CurrentAvatarImageUrl);
+ document.querySelector('#user-detail .profile-avatar p').innerHTML = _data.CurrentAvatarName.makeSafe();
+ document.querySelector('#user-detail .profile-avatar img').setAttribute('onclick', 'GetAvatarDetails(\''+_data.CurrentAvatarId+'\');');
+
+ var friendBtn = document.querySelector('#user-detail .friend-btn');
+ if(_data.IsFriend){
+ friendBtn.setAttribute('onclick', 'unFriend(\''+_data.UserId+'\');');
+ friendBtn.innerHTML = '

Unfriend';
+ }else{
+ friendBtn.setAttribute('onclick', 'addFriend(\''+_data.UserId+'\');');
+ friendBtn.innerHTML = '

Add Friend';
+ }
+
+ var blockBtn = document.querySelector('#user-detail .block-btn');
+ if(_data.IsBlocked){
+ blockBtn.setAttribute('onclick', 'unBlock(\''+_data.UserId+'\');');
+ blockBtn.innerHTML = '

Unblock';
+ }else{
+ blockBtn.setAttribute('onclick', 'block(\''+_data.UserId+'\');');
+ blockBtn.innerHTML = '

Block';
+ }
+
+ /*var muteBtn = document.querySelector('#user-detail .mute-btn');
+ if(_data.IsMuted){
+ muteBtn.setAttribute('onclick', 'unMute(\''+_data.Guid+'\');');
+ muteBtn.innerHTML = '

Unmute';
+ }else{
+ muteBtn.setAttribute('onclick', 'mute(\''+_data.Guid+'\');');
+ muteBtn.innerHTML = '

Mute';
+ }*/
+
+ var kickBtn = document.querySelector('#user-detail .kick-btn');
+ kickBtn.setAttribute('onmousedown', 'kickUser(\''+_data.UserId+'\');');
+
+ var favoriteBtn = document.querySelector('#user-detail .fav-btn');
+ favoriteBtn.setAttribute('onclick', 'favoriteFriend(\''+_data.UserId+'\');');
+
+ var voteKickBtn = document.querySelector('#user-detail .vote-btn');
+ voteKickBtn.setAttribute('onclick', 'VoteKick(\''+_data.UserId+'\');');
+
+ var moderationView = document.querySelector('#user-detail .user-settings-dialog');
+
+ var userSettingsTools = '
User Settings
Back
';
+
+ userSettingsTools += '
\n' +
+ '
Players Avatar:
\n' +
+ '
\n' +
+ '
'
+
+ userSettingsTools += '
\n' +
+ '
Current Avatar:
\n' +
+ '
\n' +
+ '
'
+
+ userSettingsTools += '
\n' +
+ '
User Bundle Verifier:
\n' +
+ '
\n' +
+ '
'
+
+ userSettingsTools += '
\n' +
+ '
Player Props:
\n' +
+ '
\n' +
+ '
'
+
+ userSettingsTools += '
\n' +
+ '
Mute Player:
\n' +
+ '
\n' +
+ '
';
+
+ userSettingsTools += '
\n' +
+ '
Voice Volume:
\n' +
+ '
\n' +
+ '
';
+
+ userSettingsTools += '
\n' +
+ '
Reload Avatar
\n' +
+ '
'
+
+ moderationView.innerHTML = userSettingsTools;
+
+ userProfileMute = new inp_toggle(document.getElementById('SelfModerationMute'));
+ userProfileVolume = new inp_slider(document.getElementById('SelfModerationVolume'));
+ userProfilePlayerAvatarsBlocked = new inp_dropdown(document.getElementById('SelfModerationUsersAvatars'));
+ userProfileAvatarBlocked = new inp_dropdown(document.getElementById('SelfModerationAvatar'));
+ userProfileBundleVerifierBypass = new inp_dropdown(document.getElementById('SelfModerationBundleVerifierAvatar'));
+ userProfilePropBlocked = new inp_dropdown(document.getElementById('SelfModerationUsersProps'));
+
+ moderationView.classList.add('hidden');
+
+ detailPage.classList.remove('hidden');
+ detailPage.classList.add('in');
+ SetElementToTop(detailPage);
+
+ updateUserDetailsActivity(_data.Instance, _data.Users);
+
+ switchTab('#user-detail .tab-btn', '#user-detail .tab-content', '#tab-content-activity', document.querySelector('#user-detail .tab-list .tab-btn.activity'));
+}
+
+engine.on("LoadUserDetailsTab", function(_content, _tab){
+ switch(_tab){
+ case "avatars":
+ document.querySelector('#user-detail #tab-content-avatars .activityDataLoading').classList.add('hidden');
+ if (_content.length == 0){
+ document.querySelector('#user-detail #tab-content-avatars .activityDataNone').classList.remove('hidden');
+ break;
+ }
+ var html = "";
+ for (var i=0; i < _content.length; i++){
+ html += "
![]()
"+escapeHtml(_content[i].Name)+"
Details
";
+ }
+ document.querySelector('#user-detail #tab-content-avatars .activityDataAvailable').classList.remove('hidden');
+ document.querySelector('#user-detail #tab-content-avatars .activityDataAvailable .scroll-content .flex-list').innerHTML = html;
+ break;
+ case "worlds":
+ document.querySelector('#user-detail #tab-content-worlds .activityDataLoading').classList.add('hidden');
+ if (_content.length == 0){
+ document.querySelector('#user-detail #tab-content-worlds .activityDataNone').classList.remove('hidden');
+ break;
+ }
+ var html = "";
+ for (var i=0; i < _content.length; i++){
+ html += "
![]()
"+escapeHtml(_content[i].Name)+"
Details
";
+ }
+ document.querySelector('#user-detail #tab-content-worlds .activityDataAvailable').classList.remove('hidden');
+ document.querySelector('#user-detail #tab-content-worlds .activityDataAvailable .scroll-content .flex-list').innerHTML = html;
+ break;
+ case "props":
+ document.querySelector('#user-detail #tab-content-props .activityDataLoading').classList.add('hidden');
+ if (_content.length == 0){
+ document.querySelector('#user-detail #tab-content-props .activityDataNone').classList.remove('hidden');
+ break;
+ }
+ var html = "";
+ for (var i=0; i < _content.length; i++){
+ html += "
![]()
"+escapeHtml(_content[i].Name)+"
Details
";
+ }
+ document.querySelector('#user-detail #tab-content-props .activityDataAvailable').classList.remove('hidden');
+ document.querySelector('#user-detail #tab-content-props .activityDataAvailable .scroll-content .flex-list').innerHTML = html;
+ break;
+ }
+});
+
+function showUserSettings(){
+ var moderationView = document.querySelector('#user-detail .user-settings-dialog');
+ moderationView.classList.remove('hidden');
+ moderationView.classList.add('in');
+}
+
+function hideUserSettings(){
+ var moderationView = document.querySelector('#user-detail .user-settings-dialog');
+ moderationView.classList.remove('in');
+ moderationView.classList.add('out');
+ setTimeout(function(){
+ moderationView.classList.add('hidden');
+ moderationView.classList.remove('out');
+ }, 200);
+}
+
+function ReloadAvatar(_userId){
+ engine.call('CVRAppCallReloadAvatar', _userId);
+}
+
+function unFriend(_guid){
+ uiConfirmShow("Unfriend", "Are you sure you want to remove this person from your friendslist?", "removeFriend", _guid);
+}
+
+function addFriend(_guid){
+ engine.call('CVRAppCallRelationsManagement', _guid, 'Add');
+}
+
+function acceptFriend(_guid){
+ engine.call('CVRAppCallRelationsManagement', _guid, 'Accept');
+}
+
+function denyFriend(_guid){
+ engine.call('CVRAppCallRelationsManagement', _guid, 'Deny');
+}
+
+function block(_guid){
+ uiConfirmShow("Block", "Are you sure you want to Block this person?", "block", _guid);
+}
+
+function unBlock(_guid){
+ engine.call('CVRAppCallRelationsManagement', _guid, 'Unblock');
+}
+
+function ClearBundleVerifierCache(){
+ engine.trigger('CVRAppActionBundleVerifierClearCache');
+}
+
+function kickUser(_guid){
+ uiConfirmShow("Kick", "Are you sure you want to Kick this person? They won't be able to rejoin this instance for 1 Hour.", "actualKick", _guid);
+}
+
+function updateUserDetailsActivity(_activity, _instanceUsers){
+ if(_activity.IsInJoinableInstance == true && PlayerData.IsFriend && PlayerData.OnlineState) {
+
+ const worldImage = document.querySelector('#tab-content-activity .player-instance-world-image');
+ worldImage.src = GetCachedImage(_activity.WorldImageCoui, _activity.WorldImageUrl);
+ worldImage.onclick = () => showInstanceDetails(_activity.InstanceId);
+
+ document.querySelector('#tab-content-activity .player-instance-details h2').innerHTML = _activity.WorldName.makeSafe();
+ document.querySelector('#tab-content-activity .player-instance-details .data-gamemode').innerHTML = _activity.GameModeName.makeSafe();
+ document.querySelector('#tab-content-activity .player-instance-details .data-maxplayers').innerHTML = _activity.MaxPlayer;
+ document.querySelector('#tab-content-activity .player-instance-details .data-currplayers').innerHTML = _activity.CurrentPlayer;
+ document.querySelector('#tab-content-activity .player-instance-details .data-instancedetails').onclick = () => showInstanceDetails(_activity.InstanceId);
+
+ var html = '';
+
+ for (var i = 0; i < _instanceUsers.length; i++) {
+ html += '
![]()
' +
+ _instanceUsers[i].UserName.makeSafe() + '
';
+ }
+
+ document.querySelector('#tab-content-activity .player-instance-players .scroll-content').innerHTML = html;
+
+ document.querySelector('#tab-content-activity .activityDataAvailable').className = 'activityDataAvailable';
+ document.querySelector('#tab-content-activity .activityDataUnavailable').className = 'activityDataUnavailable hidden';
+ document.querySelector('#tab-content-activity .activityDataPrivate').className = 'activityDataPrivate hidden';
+ document.querySelector('#tab-content-activity .activityDataOffline').className = 'activityDataOffline hidden';
+ document.querySelector('#tab-content-activity .activityDataNoInstance').className = 'activityDataNoInstance hidden';
+ }else if(_activity.IsInJoinableInstance == true && PlayerData.IsFriend && PlayerData.OnlineState){
+ document.querySelector('#tab-content-activity .activityDataAvailable').className = 'activityDataAvailable hidden';
+ document.querySelector('#tab-content-activity .activityDataUnavailable').className = 'activityDataUnavailable hidden';
+ document.querySelector('#tab-content-activity .activityDataPrivate').className = 'activityDataPrivate hidden';
+ document.querySelector('#tab-content-activity .activityDataOffline').className = 'activityDataOffline';
+ document.querySelector('#tab-content-activity .activityDataNoInstance').className = 'activityDataNoInstance hidden';
+ }else if(_activity.IsInJoinableInstance == false && PlayerData.IsFriend && PlayerData.OnlineState && PlayerData.isConnected){
+ document.querySelector('#tab-content-activity .activityDataAvailable').className = 'activityDataAvailable hidden';
+ document.querySelector('#tab-content-activity .activityDataUnavailable').className = 'activityDataUnavailable hidden';
+ document.querySelector('#tab-content-activity .activityDataPrivate').className = 'activityDataPrivate';
+ document.querySelector('#tab-content-activity .activityDataOffline').className = 'activityDataOffline hidden';
+ document.querySelector('#tab-content-activity .activityDataNoInstance').className = 'activityDataNoInstance hidden';
+ }else if(!PlayerData.isConnected && PlayerData.IsFriend){
+ document.querySelector('#tab-content-activity .activityDataAvailable').className = 'activityDataAvailable hidden';
+ document.querySelector('#tab-content-activity .activityDataUnavailable').className = 'activityDataUnavailable hidden';
+ document.querySelector('#tab-content-activity .activityDataPrivate').className = 'activityDataPrivate hidden';
+ document.querySelector('#tab-content-activity .activityDataOffline').className = 'activityDataOffline hidden';
+ document.querySelector('#tab-content-activity .activityDataNoInstance').className = 'activityDataNoInstance';
+ }else{
+ document.querySelector('#tab-content-activity .activityDataAvailable').className = 'activityDataAvailable hidden';
+ document.querySelector('#tab-content-activity .activityDataUnavailable').className = 'activityDataUnavailable';
+ document.querySelector('#tab-content-activity .activityDataPrivate').className = 'activityDataPrivate hidden';
+ document.querySelector('#tab-content-activity .activityDataOffline').className = 'activityDataOffline hidden';
+ document.querySelector('#tab-content-activity .activityDataNoInstance').className = 'activityDataNoInstance hidden';
+ }
+
+ var joinBtn = document.querySelector('#user-detail .join-btn');
+ var inviteBtn = document.querySelector('#user-detail .invite-btn');
+ var inviteRequestBtn = document.querySelector('#user-detail .invite-request-btn');
+
+ if(PlayerData.OnlineState && _activity.IsInJoinableInstance){
+ if(_activity.InstanceId !== null){
+ joinBtn.setAttribute('onclick', 'joinInstance(\''+_activity.InstanceId+'\', \''+_activity.WorldId+'\');');
+ joinBtn.classList.remove('disabled');
+ }else{
+ joinBtn.setAttribute('onclick', '');
+ joinBtn.classList.add('disabled');
+ }
+
+ inviteBtn.setAttribute('onclick', 'invitePlayer(\''+PlayerData.UserId+'\');');
+ inviteBtn.classList.remove('disabled');
+ }else if(PlayerData.IsFriend) {
+ joinBtn.setAttribute('onclick', '');
+ joinBtn.classList.add('disabled');
+
+ inviteBtn.setAttribute('onclick', 'invitePlayer(\''+PlayerData.UserId+'\');');
+ inviteBtn.classList.remove('disabled');
+ }else{
+ joinBtn.setAttribute('onclick', '');
+ joinBtn.classList.add('disabled');
+
+ inviteBtn.setAttribute('onclick', '');
+ inviteBtn.classList.add('disabled');
+ }
+
+ if (PlayerData.OnlineState && PlayerData.isConnected && PlayerData.IsFriend) {
+ inviteRequestBtn.setAttribute('onclick', 'requestInvite(\''+PlayerData.UserId+'\');');
+ inviteRequestBtn.classList.remove('disabled');
+ } else {
+ inviteRequestBtn.setAttribute('onclick', '');
+ inviteRequestBtn.classList.add('disabled');
+ }
+}
+
+function closeUserDetail(){
+ var detailPage = document.getElementById('user-detail');
+ detailPage.classList.remove('in');
+ detailPage.classList.add('out');
+ setTimeout(function(){
+ detailPage.classList.add('hidden');
+ detailPage.classList.remove('out');
+ }, 200);
+}
+
+window.friendCategories = [];
+window.friendCurrentCategories = [];
+window.pickedFriendForCategorie = '';
+window.pickedFriendCategories = [];
+
+function favoriteFriend(_guid){
+ window.pickedFriendForCategorie = _guid;
+
+ var html = '';
+
+ for (var i=0; i < window.friendCategories.length; i++){
+ if(window.friendCurrentCategories.includes(window.friendCategories[i].CategoryKey)){
+ window.pickedFriendCategories[window.friendCategories[i].CategoryKey] = true;
+ html += '
'+window.friendCategories[i].CategoryClearTextName.makeSafe()+' ';
+ }else{
+ window.pickedFriendCategories[window.friendCategories[i].CategoryKey] = false;
+ html += '
'+window.friendCategories[i].CategoryClearTextName.makeSafe()+' ';
+ }
+ }
+
+ cvr('#user-detail .favorite-categories').innerHTML(html);
+
+ cvr('#user-detail .favorite-category-selection').removeClass('hidden').addClass('in');
+}
+
+function closeFriendDetailFavorite(){
+ var detailPage = document.querySelector('#user-detail .favorite-category-selection');
+ detailPage.classList.remove('in');
+ detailPage.classList.add('out');
+ setTimeout(function(){
+ detailPage.classList.add('hidden');
+ detailPage.classList.remove('out');
+ }, 200);
+}
+
+function changeFriendCategory(_categoryIdentifier, _e){
+ if (_e.classList.contains('checked')){
+ var index = window.friendCurrentCategories.indexOf(_categoryIdentifier);
+ if (index > -1) {
+ window.friendCurrentCategories.splice(index, 1);
+ }
+
+ window.pickedFriendCategories[_categoryIdentifier] = false;
+ _e.classList.remove('checked');
+ }else{
+ window.friendCurrentCategories.push(_categoryIdentifier);
+
+ window.pickedFriendCategories[_categoryIdentifier] = true;
+ _e.classList.add('checked');
+ }
+}
+
+function sendFriendCategoryUpdate(){
+ var categoryList = [];
+
+ for (var k in window.pickedFriendCategories){
+ if (window.pickedFriendCategories[k]){
+ categoryList[categoryList.length] = k;
+ }
+ }
+
+ engine.call("CVRAppCallUpdateFriendCategories", window.pickedFriendForCategorie, categoryList.join(','));
+ closeFriendDetailFavorite();
+}
+
+function VoteKick(_guid){
+ uiConfirmShow("Vote Kick", "Are you sure you want to start a Vote Kick for this person?", "voteKick", _guid);
+}
+
+//Avatar Details
+engine.on('LoadAvatarDetails', function(_AvatarDetails){
+ displayAvatarDetails(_AvatarDetails);
+});
+
+window.avatarCategories = [];
+window.avatarCurrentCategories = [];
+
+function displayAvatarDetails(_AvatarDetails){
+ window.avatarCurrentCategories = _AvatarDetails.FilterTags.split(',');
+ var detailPage = document.getElementById('avatar-detail');
+
+ cvr('#avatar-detail h1').innerHTML(_AvatarDetails.AvatarName.makeSafe());
+ cvr('#avatar-detail .avatar-image').attr('src', GetCachedImage(_AvatarDetails.AvatarImageCoui, _AvatarDetails.AvatarImageUrl));
+
+ cvr('#avatar-detail .author').innerHTML(_AvatarDetails.AuthorName.makeSafe());
+
+ cvr('#avatar-detail .privacy span').innerHTML(_AvatarDetails.IsPublic?'Public':'Private');
+ cvr('#avatar-detail .uploaded span').innerHTML(_AvatarDetails.UploadedAt);
+ cvr('#avatar-detail .updated span').innerHTML(_AvatarDetails.UpdatedAt);
+ cvr('#avatar-detail .size span').innerHTML(_AvatarDetails.FileSize);
+
+ cvr('#avatar-detail .description').innerHTML(_AvatarDetails.AvatarDesc.makeSafe());
+ cvr('#avatar-detail .tags').innerHTML(_AvatarDetails.Tags.replace(/,/g, ' ').makeSafe());
+
+ cvr('#avatar-detail .author-btn').removeClass('disabled').attr('onclick', 'getUserDetails(\''+_AvatarDetails.AuthorId+'\');');
+
+ if (_AvatarDetails.IsPublic || _AvatarDetails.IsSharedWithMe || _AvatarDetails.IsMine){
+ cvr('#avatar-detail .change-btn').removeClass('disabled').attr('onclick', 'changeAvatar("'+_AvatarDetails.AvatarId+'");');
+ cvr('#avatar-detail .fav-btn').removeClass('disabled').attr('onclick', 'favoriteAvatar("'+_AvatarDetails.AvatarId+'");');
+ }else{
+ cvr('#avatar-detail .change-btn').addClass('disabled').attr('onclick', '');
+ cvr('#avatar-detail .fav-btn').addClass('disabled').attr('onclick', '');
+ }
+
+ window.pickedAvatarCategories = [];
+
+ detailPage.classList.remove('hidden');
+ detailPage.classList.add('in');
+ SetElementToTop(detailPage);
+}
+
+function closeAvatarDetail(){
+ var detailPage = document.getElementById('avatar-detail');
+ detailPage.classList.remove('in');
+ detailPage.classList.add('out');
+ setTimeout(function(){
+ detailPage.classList.add('hidden');
+ detailPage.classList.remove('out');
+ }, 200);
+ closeAvatarDetailFavorite();
+}
+
+window.pickedAvatarForCategorie = '';
+window.pickedAvatarCategories = [];
+
+function favoriteAvatar(_guid){
+ window.pickedAvatarForCategorie = _guid;
+
+ var html = '';
+
+ for (var i=0; i < window.avatarCategories.length; i++){
+ if(window.avatarCurrentCategories.includes(window.avatarCategories[i].CategoryKey)){
+ window.pickedAvatarCategories[window.avatarCategories[i].CategoryKey] = true;
+ html += '
'+window.avatarCategories[i].CategoryClearTextName.makeSafe()+' ';
+ }else{
+ window.pickedAvatarCategories[window.avatarCategories[i].CategoryKey] = false;
+ html += '
'+window.avatarCategories[i].CategoryClearTextName.makeSafe()+' ';
+ }
+ }
+
+ cvr('#avatar-detail .favorite-categories').innerHTML(html);
+
+ cvr('#avatar-detail .favorite-category-selection').removeClass('hidden').addClass('in');
+}
+
+function closeAvatarDetailFavorite(){
+ var detailPage = document.querySelector('#avatar-detail .favorite-category-selection');
+ detailPage.classList.remove('in');
+ detailPage.classList.add('out');
+ setTimeout(function(){
+ detailPage.classList.add('hidden');
+ detailPage.classList.remove('out');
+ }, 200);
+}
+
+function changeAvatarCategory(_categoryIdentifier, _e){
+ if (_e.classList.contains('checked')){
+ var index = window.avatarCurrentCategories.indexOf(_categoryIdentifier);
+ if (index > -1) {
+ window.avatarCurrentCategories.splice(index, 1);
+ }
+
+ window.pickedAvatarCategories[_categoryIdentifier] = false;
+ _e.classList.remove('checked');
+ }else{
+ window.avatarCurrentCategories.push(_categoryIdentifier);
+
+ window.pickedAvatarCategories[_categoryIdentifier] = true;
+ _e.classList.add('checked');
+ }
+}
+
+function sendAvatarCategoryUpdate(){
+ var categoryList = [];
+
+ for (var k in window.pickedAvatarCategories){
+ if (window.pickedAvatarCategories[k]){
+ categoryList[categoryList.length] = k;
+ }
+ }
+
+ engine.call("CVRAppCallUpdateAvatarCategories", window.pickedAvatarForCategorie, categoryList.join(','));
+ closeAvatarDetailFavorite();
+}
+
+//Prop Details
+function getPropDetails(_propId){
+ engine.call("CVRAppCallGetPropDetails", _propId);
+}
+
+engine.on('LoadPropDetails', function(_PropDetails){
+ displayPropDetails(_PropDetails);
+});
+
+window.propCategories = [];
+window.propCurrentCategories = [];
+
+function displayPropDetails(_PropDetails){
+ window.propCurrentCategories = _PropDetails.FilterTags.split(',');
+ var detailPage = document.getElementById('prop-detail');
+
+ cvr('#prop-detail h1').innerHTML(_PropDetails.SpawnableName.makeSafe());
+ cvr('#prop-detail .prop-image').attr('src', GetCachedImage(_PropDetails.SpawnableImageCoui, _PropDetails.SpawnableImageUrl));
+
+ cvr('#prop-detail .author').innerHTML(_PropDetails.AuthorName.makeSafe());
+
+ cvr('#prop-detail .data-propAuthorImage').src = GetCachedImage(_PropDetails.AuthorImageCoui, _PropDetails.AuthorImageUrl);
+ cvr('#prop-detail .data-authorName').innerHTML = _PropDetails.AuthorName.makeSafe();
+
+ cvr('#prop-detail .privacy span').innerHTML(_PropDetails.IsPublic?'Public':'Private');
+ cvr('#prop-detail .uploaded span').innerHTML(_PropDetails.UploadedAt);
+ cvr('#prop-detail .updated span').innerHTML(_PropDetails.UpdatedAt);
+ cvr('#prop-detail .size span').innerHTML(_PropDetails.FileSize);
+
+ cvr('#prop-detail .description').innerHTML(_PropDetails.SpawnableDesc.makeSafe());
+ cvr('#prop-detail .tags').innerHTML(_PropDetails.Tags.replace(/,/g, ' ').makeSafe());
+
+ cvr('#prop-detail .author-btn').removeClass('disabled').attr('onclick', 'getUserDetails(\''+_PropDetails.AuthorId+'\');');
+
+ if (_PropDetails.IsPublic || _PropDetails.IsSharedWithMe || _PropDetails.IsMine){
+ cvr('#prop-detail .drop-btn').removeClass('disabled').attr('onclick', 'SpawnProp("'+_PropDetails.SpawnableId+'");');
+ cvr('#prop-detail .select-btn').removeClass('disabled').attr('onclick', 'SelectProp("'+_PropDetails.SpawnableId+'", "'+GetCachedImage(_PropDetails.SpawnableImageCoui, _PropDetails.SpawnableImageUrl)+'", "'+_PropDetails.SpawnableName.replace(/"/g, '-').makeSafe()+'");');
+ cvr('#prop-detail .fav-btn').removeClass('disabled').attr('onclick', 'favoriteProp("'+_PropDetails.SpawnableId+'");');
+ }else{
+ cvr('#prop-detail .change-btn').addClass('disabled').attr('onclick', '');
+ cvr('#prop-detail .select-btn').addClass('disabled').attr('onclick', '');
+ cvr('#prop-detail .fav-btn').addClass('disabled').attr('onclick', '');
+ }
+
+ window.pickedPropCategories = [];
+
+ detailPage.classList.remove('hidden');
+ detailPage.classList.add('in');
+ SetElementToTop(detailPage);
+}
+
+function closePropDetail(){
+ var detailPage = document.getElementById('prop-detail');
+ detailPage.classList.remove('in');
+ detailPage.classList.add('out');
+ setTimeout(function(){
+ detailPage.classList.add('hidden');
+ detailPage.classList.remove('out');
+ }, 200);
+ closePropDetailFavorite();
+}
+
+window.pickedPropForCategorie = '';
+window.pickedPropCategories = [];
+
+function favoriteProp(_guid){
+ window.pickedPropForCategorie = _guid;
+
+ var html = '';
+
+ for (var i=0; i < window.propCategories.length; i++){
+ if(window.propCurrentCategories.includes(window.propCategories[i].CategoryKey)){
+ window.pickedPropCategories[window.propCategories[i].CategoryKey] = true;
+ html += '
'+window.propCategories[i].CategoryClearTextName.makeSafe()+' ';
+ }else{
+ window.pickedPropCategories[window.propCategories[i].CategoryKey] = false;
+ html += '
'+window.propCategories[i].CategoryClearTextName.makeSafe()+' ';
+ }
+ }
+
+ cvr('#prop-detail .favorite-categories').innerHTML(html);
+
+ cvr('#prop-detail .favorite-category-selection').removeClass('hidden').addClass('in');
+}
+
+function closePropDetailFavorite(){
+ var detailPage = document.querySelector('#prop-detail .favorite-category-selection');
+ detailPage.classList.remove('in');
+ detailPage.classList.add('out');
+ setTimeout(function(){
+ detailPage.classList.add('hidden');
+ detailPage.classList.remove('out');
+ }, 200);
+}
+
+function changePropCategory(_categoryIdentifier, _e){
+ if (_e.classList.contains('checked')){
+ var index = window.propCurrentCategories.indexOf(_categoryIdentifier);
+ if (index > -1) {
+ window.propCurrentCategories.splice(index, 1);
+ }
+
+ window.pickedPropCategories[_categoryIdentifier] = false;
+ _e.classList.remove('checked');
+ }else{
+ window.propCurrentCategories.push(_categoryIdentifier);
+
+ window.pickedPropCategories[_categoryIdentifier] = true;
+ _e.classList.add('checked');
+ }
+}
+
+function sendPropCategoryUpdate(){
+ var categoryList = [];
+
+ for (var k in window.pickedPropCategories){
+ if (window.pickedPropCategories[k]){
+ categoryList[categoryList.length] = k;
+ }
+ }
+
+ engine.call("CVRAppCallUpdatePropCategories", window.pickedPropForCategorie, categoryList.join(','));
+ closePropDetailFavorite();
+}
+
+//Ui Masseges e.g. alerts, coinfirms
+var messageList = [];
+var pushMessageList = [];
+
+function uiMessageActive(){
+ var messageBoxes = document.querySelectorAll('.message-box');
+ var messageActive = false;
+
+ for(var i = 0; i < messageBoxes.length; i++){
+ if(!messageBoxes[i].className.includes('hidden')){
+ messageActive = true;
+ }
+ }
+
+ return messageActive;
+}
+
+function uiCheckForAdditionalMessage(){
+ if (messageList.length === 0) {
+ return;
+ }
+
+ var data = messageList.shift();
+ switch(data.type){
+ case 'alert':
+ uiAlertShow(data.headline, data.text, data.id);
+ break;
+ case 'confirm':
+ uiConfirmShow(data.headline, data.text, data.id, data.data);
+ break;
+ case 'alertTimed':
+ uiAlertTimedShow(data.headline, data.text, data.time, data.id);
+ break;
+ }
+}
+
+function uiAlertShow(_headline, _text, _id){
+ var alertBox = document.getElementById('alert');
+
+ // Check if the alert is already at the top of the buffer
+ if (messageList.length > 0 && messageList[0].headline === _headline && messageList[0].text === _text && messageList[0].id === _id) {
+ return;
+ }
+
+ if(uiMessageActive()){
+ messageList.push({
+ type: 'alert',
+ headline: _headline,
+ text: _text,
+ id: _id
+ });
+ return;
+ }
+
+ alertBox.classList.remove('hidden');
+ alertBox.classList.add('in');
+
+ alertBox.setAttribute('data-index', _id);
+
+ document.querySelector('#alert h2').innerHTML = _headline.makeSafe();
+ document.querySelector('#alert p').innerHTML = _text.makeSafe();
+ SetElementToTop(alertBox);
+}
+
+function uiAlertClose(){
+ var alertBox = document.getElementById('alert');
+
+ var id = alertBox.getAttribute('data-index');
+
+ alertBox.classList.remove('in');
+ alertBox.classList.add('out');
+ setTimeout(function(){
+ alertBox.classList.add('hidden');
+ alertBox.classList.remove('out');
+
+ uiCheckForAdditionalMessage();
+ }, 200);
+
+ engine.call('CVRAppCallAlertClose', id);
+}
+
+window.setInterval(updateUiAlertTime, 1000);
+var currentAlertMessage = null;
+
+function updateUiAlertTime() {
+ var currentTime = new Date();
+ if (currentAlertMessage && currentTime >= currentAlertMessage.deadline) {
+ uiAlertTimedClose();
+ currentAlertMessage = null;
+ } else if (currentAlertMessage) {
+ var percent = ((currentTime.getTime() - currentAlertMessage.deadline.getTime() + 1000) / 1000) * 100;
+ document.querySelector('#alertTimed .message-time-bar').setAttribute('style', 'width:' + percent + '%;');
+ }
+}
+
+function uiAlertTimedShow(_headline, _text, _time, _id) {
+
+ // filter out back-to-back duplicate messages
+ if (messageList.length > 0 && messageList[0].text === _text && messageList[0].id === _id) {
+ return;
+ }
+
+ // temp deadline, to make sure queued notifications are also cleared if its been too long
+ var currentTime = new Date();
+ var queueDeadline = new Date(currentTime.getTime() + _time * 3000);
+
+ messageList.push({
+ type: 'alertTimed',
+ headline: _headline,
+ text: _text,
+ time: _time,
+ deadline: queueDeadline,
+ id: _id
+ });
+
+ if (!uiMessageActive()) {
+ uiAlertNext();
+ }
+}
+
+function uiAlertNext() {
+
+ // filter out expired messages
+ var currentTime = new Date();
+ messageList = messageList.filter(message => !message.deadline || message.deadline > currentTime);
+
+ if (messageList.length === 0) {
+ currentAlertMessage = null;
+ return;
+ }
+
+ currentAlertMessage = messageList.shift();
+
+ // real deadline
+ var currentTime = new Date();
+ currentAlertMessage.deadline = new Date(currentTime.getTime() + currentAlertMessage.time * 1000);
+
+ var alertBox = document.getElementById('alertTimed');
+ alertBox.classList.remove('hidden');
+ alertBox.classList.add('in');
+ alertBox.setAttribute('data-index', currentAlertMessage.id);
+ document.querySelector('#alertTimed h2').innerHTML = currentAlertMessage.headline.makeSafe();
+ document.querySelector('#alertTimed p').innerHTML = currentAlertMessage.text.makeSafe();
+ document.querySelector('#alertTimed .message-time-bar').setAttribute('style', 'width:0;');
+}
+
+function uiAlertTimedClose() {
+ var alertBox = document.getElementById('alertTimed');
+ var id = alertBox.getAttribute('data-index');
+
+ alertBox.classList.remove('in');
+ alertBox.classList.add('out');
+
+ setTimeout(function() {
+ alertBox.classList.add('hidden');
+ alertBox.classList.remove('out');
+ uiCheckForAdditionalMessage();
+ }, 200);
+
+ engine.call('CVRAppCallAlertClose', id);
+}
+
+window.setInterval(updateUiPushTime, 1000);
+var currentPushMessage = null;
+
+function updateUiPushTime() {
+ var currentTime = new Date();
+ if (currentPushMessage && currentTime >= currentPushMessage.deadline) {
+ uiPushClose();
+ }
+}
+
+function uiPushShow(_text, _time, _id) {
+
+ // filter out back-to-back duplicate messages
+ if (pushMessageList.length > 0 && pushMessageList[0].text === _text && pushMessageList[0].id === _id) {
+ return;
+ }
+
+ // temp deadline, to make sure queued notifications are also cleared if its been too long
+ var currentTime = new Date();
+ var queueDeadline = new Date(currentTime.getTime() + _time * 3000);
+
+ pushMessageList.push({
+ text: _text,
+ time: _time,
+ deadline: queueDeadline,
+ id: _id
+ });
+
+ if (!uiMessageActive()) {
+ uiPushNext();
+ }
+}
+
+function uiPushNext() {
+
+ // filter out expired messages (cohtml is paused completely while closed)
+ var currentTime = new Date();
+ pushMessageList = pushMessageList.filter(message => !message.deadline || message.deadline > currentTime);
+
+ if (pushMessageList.length === 0){
+ currentPushMessage = null;
+ return;
+ }
+
+ currentPushMessage = pushMessageList.shift();
+
+ // real deadline
+ var currentTime = new Date();
+ currentPushMessage.deadline = new Date(currentTime.getTime() + currentPushMessage.time * 1000);
+
+ var alertBox = document.getElementById('push');
+
+ alertBox.classList.remove('hidden');
+ alertBox.classList.add('in');
+ alertBox.setAttribute('data-index', currentPushMessage.id);
+ document.querySelector('#push p').innerHTML = currentPushMessage.text.makeSafe();
+ SetElementToTop(alertBox);
+}
+
+function uiPushClose() {
+ var alertBox = document.getElementById('push');
+ var id = alertBox.getAttribute('data-index');
+ alertBox.classList.remove('in');
+ alertBox.classList.add('out');
+
+ setTimeout(function() {
+ alertBox.classList.add('hidden');
+ alertBox.classList.remove('out');
+ uiPushNext();
+ }, 200);
+
+ engine.call('CVRAppCallAlertClose', id);
+}
+
+function uiLoadingShow(_text){
+ var loadingBox = document.getElementById('loading');
+
+ loadingBox.classList.remove('hidden');
+ loadingBox.classList.add('in');
+
+ document.querySelector('#loading p').innerHTML = _text.makeSafe();
+}
+
+function uiLoadingClose(){
+ var loadingBox = document.getElementById('loading');
+
+ loadingBox.classList.remove('in');
+ loadingBox.classList.add('out');
+ setTimeout(function(){
+ loadingBox.classList.add('hidden');
+ loadingBox.classList.remove('out');
+
+ uiCheckForAdditionalMessage();
+ }, 200);
+}
+
+function uiConfirmShow(_headline, _text, _id, _data){
+ var alertBox = document.getElementById('confirm');
+
+ if(uiMessageActive()){
+ messageList.push({
+ type: 'confirm',
+ headline: _headline,
+ text: _text,
+ id: _id,
+ data: _data
+ });
+ return;
+ }
+
+ alertBox.classList.remove('hidden');
+ alertBox.classList.add('in');
+
+ SetElementToTop(alertBox);
+
+ alertBox.setAttribute('data-index', _id);
+
+ if (_data !== undefined) // not specified when using ViewManager.TriggerConfirm
+ alertBox.setAttribute('data-storage', _data.makeSafe());
+
+ document.querySelector('#confirm h2').innerHTML = _headline.makeSafe();
+ document.querySelector('#confirm p').innerHTML = _text.makeSafe();
+}
+
+window.uiConfirm = {
+ id: 0,
+ value: "",
+ data: ""
+};
+
+function uiConfirmClose(_value){
+ var alertBox = document.getElementById('confirm');
+
+ var id = alertBox.getAttribute('data-index');
+ var data = alertBox.getAttribute('data-storage');
+
+ alertBox.classList.remove('in');
+ alertBox.classList.add('out');
+ setTimeout(function(){
+ alertBox.classList.add('hidden');
+ alertBox.classList.remove('out');
+
+ uiCheckForAdditionalMessage();
+ }, 200);
+
+ window.uiConfirm.id = id;
+ window.uiConfirm.value = _value;
+ window.uiConfirm.data = data;
+
+ var event = new CustomEvent("uiConfirm");
+ window.dispatchEvent(event);
+ engine.call('CVRAppCallConfirmClose', id, _value, data);
+}
+
+window.addEventListener("uiConfirm", function(){
+ switch(window.uiConfirm.id){
+ case "logout":
+ if(window.uiConfirm.value == 'true') {
+ engine.trigger('CVRAppTaskGameLogout');
+ }
+ break;
+ case "removeFriend":
+ if(window.uiConfirm.value == 'true') {
+ engine.call('CVRAppCallRelationsManagement', window.uiConfirm.data, 'Unfriend');
+ }
+ break;
+ case "block":
+ if(window.uiConfirm.value == 'true') {
+ engine.call('CVRAppCallRelationsManagement', window.uiConfirm.data, 'Block');
+ }
+ break;
+ case "actualKick":
+ if(window.uiConfirm.value == 'true') {
+ engine.call('CVRAppCallKickUser', window.uiConfirm.data);
+ }
+ break;
+ case "voteKick":
+ if(window.uiConfirm.value == 'true') {
+ engine.call('CVRAppCallStartVoteKick', window.uiConfirm.data, '');
+ }
+ break;
+ case "resetIK":
+ if(window.uiConfirm.value == 'true') {
+ resetIkSettingsEx();
+ }
+ break;
+ case "resetSettings":
+ if(window.uiConfirm.value == 'true') {
+ engine.call('CVRAppActionSettingsReset');
+ }
+ break;
+ }
+});
+
+function logout(){
+ uiConfirmShow("Logout", "You will be logged out and the game will be closed. Are you sure?", "logout", "");
+}
+
+//Time Display
+function checkTime(i) {
+ if (i < 10) {
+ i = "0" + i;
+ }
+ return i;
+}
+
+function updateTime(){
+ var today = new Date();
+ var h = today.getHours();
+ var m = today.getMinutes();
+
+ h = checkTime(h);
+ m = checkTime(m);
+
+ if(game_settings && game_settings['GeneralClockFormat'] && game_settings['GeneralClockFormat'] != '24'){
+ document.querySelector('.time-display').innerHTML = h%12+':'+m+' '+(h >= 12 ? 'PM' : 'AM');
+ }else{
+ document.querySelector('.time-display').innerHTML = h+':'+m;
+ }
+}
+updateTime();
+window.setInterval(updateTime, 1000);
+
+//Quick menu
+function updateAnimationNames(_names){
+ var emote1 = document.querySelector('.quick-menu-wrapper .emote-1');
+ if(emote1) emote1.innerHTML = _names.emote1.makeSafe();
+
+ var emote2 = document.querySelector('.quick-menu-wrapper .emote-2');
+ if(emote2) emote2.innerHTML = _names.emote2.makeSafe();
+
+ var emote3 = document.querySelector('.quick-menu-wrapper .emote-3');
+ if(emote3) emote3.innerHTML = _names.emote3.makeSafe();
+
+ var emote4 = document.querySelector('.quick-menu-wrapper .emote-4');
+ if(emote4) emote4.innerHTML = _names.emote4.makeSafe();
+
+ var emote5 = document.querySelector('.quick-menu-wrapper .emote-5');
+ if(emote5) emote5.innerHTML = _names.emote5.makeSafe();
+
+ var emote6 = document.querySelector('.quick-menu-wrapper .emote-6');
+ if(emote6) emote6.innerHTML = _names.emote6.makeSafe();
+
+ var emote7 = document.querySelector('.quick-menu-wrapper .emote-7');
+ if(emote7) emote7.innerHTML = _names.emote7.makeSafe();
+
+ var emote8 = document.querySelector('.quick-menu-wrapper .emote-8');
+ if(emote8) emote6.innerHTML = _names.emote8.makeSafe();
+
+
+ var state1 = document.querySelector('.quick-menu-wrapper .state-1');
+ if(state1) state1.innerHTML = _names.state1.makeSafe();
+
+ var state2 = document.querySelector('.quick-menu-wrapper .state-2');
+ if(state2) state2.innerHTML = _names.state2.makeSafe();
+
+ var state3 = document.querySelector('.quick-menu-wrapper .state-3');
+ if(state3) state3.innerHTML = _names.state3.makeSafe();
+
+ var state4 = document.querySelector('.quick-menu-wrapper .state-4');
+ if(state4) state4.innerHTML = _names.state4.makeSafe();
+
+ var state5 = document.querySelector('.quick-menu-wrapper .state-5');
+ if(state5) state5.innerHTML = _names.state5.makeSafe();
+
+ var state6 = document.querySelector('.quick-menu-wrapper .state-6');
+ if(state6) state6.innerHTML = _names.state6.makeSafe();
+
+ var state7 = document.querySelector('.quick-menu-wrapper .state-7');
+ if(state7) state7.innerHTML = _names.state7.makeSafe();
+
+ var state8 = document.querySelector('.quick-menu-wrapper .state-8');
+ if(state8) state6.innerHTML = _names.state8.makeSafe();
+}
+
+//Calls to cohtml
+function refreshAvatars(){
+ engine.trigger('CVRAppTaskRefreshAvatars');
+}
+
+function refreshWorlds(){
+ worldsResetLoad = true;
+ engine.trigger('CVRAppTaskRefreshWorlds');
+}
+
+function loadFilteredWorlds(){
+ worldsResetLoad = true;
+ engine.call('CVRAppCallLoadFilteredWorldsPaged', worldFilter, 0);
+}
+
+function refreshGameModes(){
+ engine.trigger('CVRAppTaskRefreshGameModes');
+}
+
+function refreshFriends(){
+ engine.trigger('CVRAppTaskRefreshFriends');
+}
+
+function refreshFeed(){
+ engine.trigger('CVRAppTaskRefreshFeed');
+}
+
+function disconnect(){
+ engine.trigger('CVRAppActionDisconnect');
+}
+
+function goHome(){
+ engine.trigger('CVRAppActionGoHome');
+}
+
+function exit(){
+ engine.trigger('CVRAppActionQuit');
+}
+
+function toggleMic(){
+ engine.trigger('CVRAppActionMicToggle');
+}
+
+function toogleCamera(){
+ engine.trigger('CVRAppActionCameraToggle');
+}
+function tooglePathCamera(){
+ engine.trigger('CVRAppActionPathCameraToggle');
+}
+
+function recalibrate(){
+ engine.trigger('CVRAppActionRecalibrate');
+}
+
+function respawn(){
+ engine.trigger('CVRAppActionRespawn');
+}
+
+function mediaPrev(){
+ engine.trigger('CVRAppActionMediaPrev');
+}
+
+function mediaPlayPause(){
+ engine.trigger('CVRAppActionMediaPlayPause');
+}
+
+function mediaStop(){
+ engine.trigger('CVRAppActionMediaStop');
+}
+
+function mediaNext(){
+ engine.trigger('CVRAppActionMediaNext');
+}
+
+function settingsReset(){
+ uiConfirmShow("Reset All Settings", "Are you sure you want to Reset All Settings?", "resetSettings", "");
+}
+
+function toogleSeatedPlay(){
+ engine.trigger('CVRAppActionToggleSeatedPlay');
+}
+
+function toggleFlight(){
+ engine.trigger('CVRAppActionToggleFlight');
+}
+
+function autoCalibrateHeight(){
+ engine.trigger('CVRAppActionAutoCalibrateHeight');
+}
+
+function mouseUnlock(){
+ engine.trigger('CVRAppActionMouseUnlock');
+}
+
+function refreshProps(){
+ engine.trigger('CVRAppActionRefreshProps');
+}
+
+function RemoveMyProps(){
+ engine.trigger('CVRAppActionRemoveMyProps');
+}
+
+function RemoveAllProps(){
+ engine.trigger('CVRAppActionRemoveAllProps');
+}
+
+function changeAvatar(_uid){
+ engine.call('CVRAppCallChangeAvatar', _uid);
+}
+
+function changeWorld(_uid){
+ engine.call('CVRAppCallChangeWorld', _uid);
+}
+
+function preloadWorld(_uid){
+ engine.call('CVRAppCallPreloadWorld', _uid);
+}
+
+function setHome(_uid){
+ engine.call('CVRAppCallSetHomeWorld', _uid);
+}
+
+function joinInstance(_uid, _world){
+ engine.call('CVRAppCallJoinInstance', _uid, _world);
+}
+function invitePlayer(_uid){
+ engine.call('CVRAppCallInvitePlayer', _uid);
+}
+
+function requestInvite(_uid){
+ engine.call('CVRAppCallRequestInvite', _uid);
+}
+
+function playEmote(_id){
+ engine.call('CVRAppCallPlayEmote', _id);
+}
+
+function changeState(_id){
+ engine.call('CVRAppCallChangeState', _id);
+}
+
+function changeAnimatorParam(_name, _value){
+ engine.call('CVRAppCallChangeAnimatorParam', _name, _value, 2);
+}
+
+function changeGestureLeft(_id){
+ engine.call('CVRAppCallChangeGestureLeft', _id);
+}
+
+function changeGestureRight(_id){
+ engine.call('CVRAppCallChangeGestureRight', _id);
+}
+
+function dropInstancePortal(_instanceID){
+ engine.call('CVRAppCallDropInstancePortal', _instanceID);
+}
+
+function loadSettings(){
+ engine.trigger('CVRAppActionLoadSettings');
+}
+
+function playSound(sound){
+ engine.trigger('CVRAppCallPlayAudio', sound);
+}
+
+function LoadMicrophones(){
+ engine.trigger('CVRAppActionLoadMicrophones');
+}
+
+function LoadResolutions(){
+ engine.trigger('CVRAppActionLoadResolutions');
+}
+
+function GetAvatarDetails(_guid){
+ engine.call('CVRAppCallGetAvatarDetails', _guid);
+}
+
+function ClearImageCache(){
+ engine.call('CVRAppActionImageCacheClear');
+}
+
+var hasProcessedInfoFirstTime = false;
+function updateGameDebugInformation(_info)
+{
+ var ping = document.querySelector('.game-debug-ping');
+ if (ping)
+ ping.innerHTML = _info.Ping;
+
+ var fps = document.querySelector('.game-debug-fps');
+ if (fps)
+ fps.innerHTML = _info.Fps;
+
+ var version = document.querySelector('.game-debug-version');
+ if (version)
+ version.innerHTML = _info.Version;
+
+ var platform = document.querySelector('.game-debug-platform');
+ if (platform)
+ platform.innerHTML = _info.Platform;
+
+ var inVr = document.querySelector('.game-debug-inVr');
+ if (inVr)
+ {
+ if (_info.IsInVR)
+ inVr.innerHTML = "true";
+ else
+ inVr.innerHTML = "false";
+ }
+
+ if (!hasProcessedInfoFirstTime)
+ {
+ hasProcessedInfoFirstTime = true;
+
+ if (_info.IsInEditor)
+ {
+ var elementsToRemove = [
+ "GraphicsFullscreenWrapper",
+ "GraphicsResolutionPresetsWrapper"
+ ];
+ RemoveElementsByID(elementsToRemove);
+ }
+
+ if (_info.Platform == "Android")
+ {
+ var elementsToRemove = [
+ "subcategory-tobii-eye-tracking",
+ "subcategory-vive-face-tracking",
+ "subcategory-rich-presence",
+ "subcategory-pc-controls",
+ "subcategory-pc-controls-2",
+ "subcategory-pc-controls-3",
+ "subcategory-bundleverifier",
+ "subcategory-tsac",
+ "subcategory-audio-devices",
+ "content-filter-nsfw-wrapper-notice",
+
+ "GraphicsFullscreenWrapper",
+ "GraphicsResolutionPresetsWrapper",
+ ];
+ RemoveElementsByID(elementsToRemove);
+
+ if (_info.IsInVR)
+ {
+ elementsToRemove = [
+ "GraphicsFramerateTargetWrapper"
+ ];
+ RemoveElementsByID(elementsToRemove);
+ }
+ }
+ }
+}
+
+function RemoveElementsByID(_idList)
+{
+ for(var i=0; i < _idList.length; i++)
+ RemoveElementByID(_idList[i]);
+}
+function RemoveElementByID(_id)
+{
+ var entry = document.getElementById(_id);
+ if (entry)
+ entry.innerHTML = "";
+}
+
+//Advanced Avatar Settings
+function showAvatarSettings(){
+ engine.trigger('CVRAppActionLoadAvatarSettings');
+}
+
+function DisplayAvatarSettings(_list, _openPage){
+ var contentElement = document.querySelector('#avatar-settings .list-content');
+ var html = '';
+
+ for(var i=0; i < _list.length; i++){
+ var entry = _list[i];
+
+ switch(entry.type){
+ case 'toggle':
+ html += '
\n' +
+ '
'+entry.name.makeSafe()+':
\n' +
+ '
\n' +
+ '
';
+ break;
+ case 'dropdown':
+ var settings = '';
+
+ for(var j=0; j < entry.optionList.length; j++){
+ if(j != 0) settings += ',';
+ settings += j+':'+entry.optionList[j].makeParameterSafeFull();
+ }
+
+ html += '
\n' +
+ '
'+entry.name.makeSafe()+':
\n' +
+ '
\n' +
+ '
';
+ break;
+ case 'colorpicker':
+ html += '
\n' +
+ '
'+entry.name.makeSafe()+':
\n' +
+ '
\n' +
+ '
';
+ break;
+ case 'slider':
+ html += '
\n' +
+ '
'+entry.name.makeSafe()+':
\n' +
+ '
\n' +
+ '
';
+ break;
+ case 'joystick2d':
+ html += '
\n' +
+ '
' + entry.name.makeSafe() + ':
\n' +
+ '
\n' +
+ '
';
+ break;
+ case 'joystick3d':
+ html += '
\n' +
+ '
' + entry.name.makeSafe() + ':
\n' +
+ '
\n' +
+ '
';
+ break;
+ case 'inputsingle':
+ html += '
\n' +
+ '
'+entry.name.makeSafe()+':
\n' +
+ '
\n' +
+ '
';
+ break;
+ case 'inputvector2':
+ html += '
\n' +
+ '
'+entry.name.makeSafe()+':
\n' +
+ '
\n' +
+ '
';
+ break;
+ case 'inputvector3':
+ html += '
\n' +
+ '
'+entry.name.makeSafe()+':
\n' +
+ '
\n' +
+ '
';
+ break;
+ }
+ }
+
+ if(_list.length == 0){
+ html = "There are no advanced settings configured for this avatar.";
+ }
+
+ contentElement.innerHTML = html;
+
+ if (_openPage) {
+ var avatarSettings = document.getElementById('avatar-settings');
+ avatarSettings.classList.remove('hidden');
+ avatarSettings.classList.add('in');
+ }
+
+ for(var i=0; i < _list.length; i++){
+ var entry = _list[i];
+
+ switch(entry.type){
+ case 'toggle':
+ new inp_toggle(document.getElementById('AVS_'+entry.parameterName.makeSafe()));
+ break;
+ case 'dropdown':
+ new inp_dropdown(document.getElementById('AVS_'+entry.parameterName.makeSafe()));
+ break;
+ case 'colorpicker':
+ new inp_slider(document.getElementById('AVS_'+entry.parameterName.makeSafe()+'-r'));
+ new inp_slider(document.getElementById('AVS_'+entry.parameterName.makeSafe()+'-g'));
+ new inp_slider(document.getElementById('AVS_'+entry.parameterName.makeSafe()+'-b'));
+ break;
+ case 'slider':
+ new inp_slider(document.getElementById('AVS_'+entry.parameterName.makeSafe()));
+ break;
+ case 'joystick2d':
+ new inp_joystick(document.getElementById('AVS_'+entry.parameterName.makeSafe()));
+ break;
+ case 'joystick3d':
+ new inp_joystick(document.getElementById('AVS_'+entry.parameterName.makeSafe()));
+ new inp_sliderH(document.getElementById('AVS_'+entry.parameterName.makeSafe()+'-z'));
+ break;
+ case 'inputsingle':
+ new inp_number(document.getElementById('AVS_'+entry.parameterName.makeSafe()));
+ break;
+ case 'inputvector2':
+ new inp_number(document.getElementById('AVS_'+entry.parameterName.makeSafe()+'-x'));
+ new inp_number(document.getElementById('AVS_'+entry.parameterName.makeSafe()+'-y'));
+ break;
+ case 'inputvector3':
+ new inp_number(document.getElementById('AVS_'+entry.parameterName.makeSafe()+'-x'));
+ new inp_number(document.getElementById('AVS_'+entry.parameterName.makeSafe()+'-y'));
+ new inp_number(document.getElementById('AVS_'+entry.parameterName.makeSafe()+'-z'));
+ break;
+ }
+ }
+}
+
+function closeAvatarSettings(){
+ closeKeyboard();
+ closeNumpad();
+ var avatarSettings = document.getElementById('avatar-settings');
+ avatarSettings.classList.remove('in');
+ avatarSettings.classList.add('out');
+ setTimeout(function(){
+ avatarSettings.classList.add('hidden');
+ avatarSettings.classList.remove('out');
+ }, 200);
+}
+
+function DisplayAvatarSettingsProfiles(_info){
+ var html = '';
+
+ for(var i=0; i < _info.length; i++){
+ html += '
\n' +
+ '
'+_info[i].makeSafe()+'
\n' +
+ '
S
\n' +
+ '
D
\n' +
+ '
';
+ }
+
+ document.getElementById('savedProfiles').innerHTML = html;
+}
+
+function saveAdvAvtrProfileNew(){
+ var profileName = document.getElementById('advAvtrProfileNameNew').value;
+ saveAdvAvtrProfile(profileName);
+ document.getElementById('advAvtrProfileNameNew').value = "";
+}
+function loadAdvAvtrProfileDefault(){
+ engine.trigger('CVRAppActionLoadAdvAvtrSettingsDefault');
+}
+function saveAdvAvtrProfile(_name){
+ engine.call('CVRAppCallSaveAdvAvtrSettingsProfile', _name);
+ uiPushShow("The Profile was saved", 2, 'advAvtrCnfSav');
+}
+function loadAdvAvtrProfile(_name){
+ engine.call('CVRAppCallLoadAdvAvtrSettingsProfile', _name);
+}
+var profileIndex = "";
+function deleteAdvAvtrProfile(_name){
+ profileIndex = _name;
+ uiConfirmShow("Advanced Avatar Settings", 'Are you sure you want to delete the profile "'+ _name +'"', 'deleteAdvAvtrProfile', '');
+}
+window.addEventListener("uiConfirm", function(e){
+ if(window.uiConfirm.id == "deleteAdvAvtrProfile" && window.uiConfirm.value == 'true'){
+ engine.call('CVRAppCallDeleteAdvAvtrSettingsProfile', profileIndex);
+ uiPushShow("The Profile was deleted", 2, 'advAvtrCnfDel');
+ }
+});
+
+function vrInputChanged(_fullBodyActive){
+ if (_fullBodyActive){
+ cvr('#seatedPlayBtnHome').hide();
+ cvr('#recalibrateBtnHome').show();
+ } else {
+ cvr('#seatedPlayBtnHome').show();
+ cvr('#recalibrateBtnHome').hide();
+ }
+}
+
+//Calls from cohtml
+engine.on('LoadAvatars', function (_list) {
+ loadAvatars(_list);
+});
+
+engine.on('LoadWorlds', function (_list) {
+ loadWorlds(_list);
+});
+
+engine.on('LoadWorldsPaged', function (_list, _current, _max) {
+ loadWorldsPaged(_list, _current, _max);
+});
+
+engine.on('LoadFriends', function (_list) {
+ loadFriends(_list);
+});
+
+engine.on('UpdateUsersOnline', function (_list) {
+ updateUsersOnline(JSON.parse(_list));
+});
+
+engine.on('LoadMessages', function(_invites, _friendrequests, _votes, _systems, _dms){
+ loadMessages(_invites, _friendrequests, _votes, _systems, _dms);
+});
+
+engine.on('LoadMessagesSingle', function(_category, _list){
+ loadMessagesSingle(_category, _list);
+});
+
+/*engine.on('LoadInvites', function(_list){
+ loadMessagesSingle('invites', _list);
+});*/
+
+engine.on('LoadInviteRequests', function(_list){
+ loadMessagesSingle('invite-requests', _list);
+});
+
+engine.on('LoadFriendRequests', function(_list){
+ loadMessagesSingle('friend-requests', _list);
+});
+
+engine.on('AddInvites', function(_invite){
+ addMessagesSingle('invites', [_invite]);
+});
+
+engine.on('AddFriendRequest', function(_friendRequest){
+ addMessagesSingle('friend-requests', [_friendRequest]);
+});
+
+engine.on('AddVote', _vote => {
+ addMessagesSingle('votes', [_vote]);
+})
+
+engine.on('ImageCacheSizeUpdate', _cacheSizeStr => {
+ const cacheSpan = document.getElementById('ImageCacheUsedSize');
+ cacheSpan.textContent = _cacheSizeStr;
+})
+
+function addMessagesSingle(_cat, _list){
+ switch(_cat){
+ case 'invites':
+ var html = '';
+ for(var i=0; i < _list.length; i++){
+ html += displayMessageInvite(_list[i]);
+ }
+ document.querySelector('#message-invites .message-list').innerHTML += html;
+ break;
+ case 'invite-requets':
+ var html = '';
+ for(var i=0; i < _list.length; i++){
+ html += displayMessageInviteRequest(_list[i]);
+ }
+ document.querySelector('#message-invite-requests .message-list').innerHTML += html;
+ break;
+ case 'system-notifications':
+ var html = '';
+ for(var i=0; i < _list.length; i++){
+ //html += displayMessageInvite(_list[i]);
+ }
+ document.querySelector('#message-system .message-list').innerHTML += html;
+ break;
+ case 'friend-requests':
+ var html = '';
+ for(var i=0; i < _list.length; i++){
+ html += displayMessageFriendRequest(_list[i]);
+ }
+ document.querySelector('#message-friendrequests .message-list').innerHTML += html;
+ break;
+ case 'votes':
+ var html = '';
+ for(var i=0; i < _list.length; i++){
+ html += displayMessageVote(_list[i]);
+ }
+ document.querySelector('#message-votes .message-list').innerHTML += html;
+ break;
+ }
+}
+
+engine.on('LoadSystemNotifications', function(_list){
+ addMessagesSingle('system-notifications', _list);
+});
+
+engine.on('LoadWorldDetails', function (_data, _instances) {
+ loadWorldDetails(_data, _instances);
+});
+
+engine.on('AddWorldDetailsInstance', function(_instance){
+ addWorldDetailInstance(_instance);
+});
+
+engine.on('LoadUserDetails', function (_data, _profile) {
+ loadUserDetails(_data, _profile);
+});
+
+engine.on('alert', function (_headline, _text, _id) {
+ uiAlertShow(_headline, _text, _id);
+});
+engine.on('alertTimed', function (_headline, _text, _time, _id) {
+ uiAlertTimedShow(_headline, _text, _time, _id);
+});
+engine.on('push', function (_text, _time, _id) {
+ uiPushShow(_text, _time, _id);
+});
+
+engine.on('confirm', function (_headline, _text, _id) {
+ uiConfirmShow(_headline, _text, _id);
+});
+
+engine.on('loadingShow', function (_text) {
+ uiLoadingShow(_text);
+});
+
+engine.on('loadingClose', function () {
+ uiLoadingClose();
+});
+
+engine.on('UpdateMute', function (_muted) {
+ if(!_muted){
+ var buttons = document.querySelectorAll('.action-mute');
+ for(var i=0 ; i < buttons.length; i++){
+ buttons[i].innerHTML = '

Unmute
';
+ }
+ }else{
+ var buttons = document.querySelectorAll('.action-mute');
+ for(var i=0 ; i < buttons.length; i++){
+ buttons[i].innerHTML = '