This commit is contained in:
Mr. Stallion 2023-03-29 17:23:54 -07:00
parent bfb937ea61
commit ffc9b097db
16 changed files with 147 additions and 44 deletions

View File

@ -2,6 +2,10 @@
## 1.21.2
* Fixed image previews for `imgur.io`, `gifdeliverynetwork.com`, and `rule34.us`
* Fixed dependencies
* Profile analyser now warns about a missing portrait image
* Added option for mini portraits in chat messages
* Added convenience buttons to joining a channel and creating a private chat
## 1.21.1
* Fixed a bug that skipped resolving profiles from channel ads

View File

@ -1,8 +1,8 @@
# Download
[Windows](https://github.com/mrstallion/fchat-rising/releases/download/v1.21.1/F-Chat-Rising-1.21.1-win.exe) (82 MB)
| [MacOS Intel](https://github.com/mrstallion/fchat-rising/releases/download/v1.21.1/F-Chat-Rising-1.21.1-macos-intel.dmg) (82 MB)
| [MacOS M1](https://github.com/mrstallion/fchat-rising/releases/download/v1.21.1/F-Chat-Rising-1.21.1-macos-m1.dmg) (84 MB)
| [Linux](https://github.com/mrstallion/fchat-rising/releases/download/v1.21.1/F-Chat-Rising-1.21.1-linux.AppImage) (82 MB)
[Windows](https://github.com/mrstallion/fchat-rising/releases/download/v1.21.2/F-Chat-Rising-1.21.2-win.exe) (82 MB)
| [MacOS Intel](https://github.com/mrstallion/fchat-rising/releases/download/v1.21.2/F-Chat-Rising-1.21.2-macos-intel.dmg) (82 MB)
| [MacOS M1](https://github.com/mrstallion/fchat-rising/releases/download/v1.21.2/F-Chat-Rising-1.21.2-macos-m1.dmg) (84 MB)
| [Linux](https://github.com/mrstallion/fchat-rising/releases/download/v1.21.2/F-Chat-Rising-1.21.2-linux.AppImage) (82 MB)
# F-Chat Rising

View File

@ -43,11 +43,11 @@
<div v-for="record in results" :key="record.character.name" class="search-result" :class="'status-' + record.character.status">
<template v-if="record.character.status === 'looking'" v-once>
<img :src="characterImage(record.character.name)" v-if="showAvatars"/>
<user :character="record.character" :showStatus="true" :match="shouldShowMatch"></user>
<user :character="record.character" :showStatus="true" :match="shouldShowMatch" :avatar="false"></user>
<bbcode :text="record.character.statusText" class="status-text"></bbcode>
</template>
<template v-else v-once>
<user :character="record.character" :showStatus="true" :match="shouldShowMatch"></user>
<user :character="record.character" :showStatus="true" :match="shouldShowMatch" :avatar="shouldShowAvatar"></user>
<bbcode :text="record.character.statusText" v-if="!!record.character.statusText" class="status-text"></bbcode>
</template>
</div>
@ -151,6 +151,7 @@
shouldShowMatch = true;
state = 'search';
hasReceivedResults = false;
shouldShowAvatar = false;
debugSearchJson = JSON.stringify(
{
@ -521,6 +522,7 @@
}
this.shouldShowMatch = core.state.settings.risingComparisonInSearch;
this.shouldShowAvatar = core.state.settings.risingShowPortraitInMessage;
this.results = [];
this.state = 'results';
@ -644,11 +646,21 @@
& > .status-crown {
overflow: hidden;
width: 100%;
height: 23px;
height: 2em;
padding-top: 5px;
.user-avatar {
max-width: 2em;
max-height: 2em;
min-width: 2em;
min-height: 2em;
margin-top: -5px;
}
.status-text {
opacity: 0.75;
padding-left: 4px;
display: inline-flex;
}
}

View File

@ -32,7 +32,7 @@
</div>
<div><a href="#" @click.prevent="showProfileAnalyzer()" class="btn"><span class="fas fa-user-md"></span>
Profile Analyzer</a>
Profile Helper</a>
</div>
<div class="list-group conversation-nav">
@ -43,8 +43,8 @@
</div>
{{l('chat.pms')}}
<div @click.prevent="showAddPmPartner()" class="pm-add"><a href="#"><span class="fas fa-plus"></span></a></div>
<a href="#" @click.prevent="showAddPmPartner()" class="btn"><span class="fas fa-comment"></span>
{{l('chat.pms')}}</a>
<div class="list-group conversation-nav" ref="privateConversations">
<a v-for="conversation in conversations.privateConversations" href="#" @click.prevent="conversation.show()"
@ -64,7 +64,10 @@
</div>
</div>
</a>
<a href="#" @click.prevent="showAddPmPartner()" class="new-conversation" :class="{ glowing: conversations.privateConversations.length === 0 }">Open Conversation</a>
</div>
<a href="#" @click.prevent="showChannels()" class="btn"><span class="fas fa-list"></span>
{{l('chat.channels')}}</a>
@ -82,6 +85,8 @@
<span class="fas fa-times leave" @click.stop="conversation.close()" :aria-label="l('chat.closeTab')"></span>
</span>
</a>
<a href="#" @click.prevent="showChannels()" class="join-channel" :class="{ glowing: conversations.channelConversations.length === 0 }">Join Channel</a>
</div>
</sidebar>
<div style="display:flex;flex-direction:column;flex:1;min-width:0">
@ -617,5 +622,37 @@
}
}
}
.new-conversation, .join-channel {
font-size: 90%;
margin-left: 0.2em;
margin-top: 0.25em;
}
.glowing {
padding: 3px;
margin-right: 0.5em;
animation: noticeme 2.5s infinite alternate;
animation-timing-function: ease-in-out;
}
.join-channel.glowing {
animation-delay: 0.3s !important;
}
@keyframes noticeme {
0% {
// box-shadow: 0 0 10px -10px #aef4af;
color: var(--gray-dark)
}
80% {
// box-shadow: 0 0 10px -10px #aef4af;
color: var(--gray-dark)
}
100% {
// box-shadow: 0 0 10px 10px #aef4af;
color: var(--yellow)
}
}
}
</style>

View File

@ -1042,4 +1042,13 @@
}
}
}
.user-avatar {
max-height: 1.2em;
min-height: 1.2em;
margin-right: 2px !important;
margin-top: 0;
min-width: 1.2em;
max-width: 1.2em;
}
</style>

View File

@ -205,6 +205,13 @@
Show character portrait by text input
</label>
</div>
<div class="form-group">
<label class="control-label" for="risingShowPortraitInMessage">
<input type="checkbox" id="risingShowPortraitInMessage" v-model="risingShowPortraitInMessage"/>
Show character portrait with each message
</label>
</div>
</div>
<div v-show="selectedTab === '3'">
@ -375,6 +382,7 @@
risingColorblindMode!: boolean;
risingShowPortraitNearInput!: boolean;
risingShowPortraitInMessage!: boolean;
risingFilter!: SmartFilterSettings = {} as any;
@ -418,6 +426,7 @@
this.risingColorblindMode = settings.risingColorblindMode;
this.risingShowPortraitNearInput = settings.risingShowPortraitNearInput;
this.risingShowPortraitInMessage = settings.risingShowPortraitInMessage;
this.risingFilter = settings.risingFilter;
}
@ -480,6 +489,7 @@
risingComparisonInSearch: this.risingComparisonInSearch,
risingShowUnreadOfflineCount: this.risingShowUnreadOfflineCount,
risingShowPortraitNearInput: this.risingShowPortraitNearInput,
risingShowPortraitInMessage: this.risingShowPortraitInMessage,
risingColorblindMode: this.risingColorblindMode,
risingFilter: {

View File

@ -1,5 +1,5 @@
<!-- Linebreaks inside this template will break BBCode views -->
<template><span :class="userClass" v-bind:bbcodeTag.prop="'user'" v-bind:character.prop="character" v-bind:channel.prop="channel" @mouseover.prevent="show()" @mouseenter.prevent="show()" @mouseleave.prevent="dismiss()" @click.middle.prevent.stop="toggleStickyness()" @click.right.passive="dismiss(true)" @click.left.passive="dismiss(true)"><span v-if="!!statusClass" :class="statusClass"></span><span v-if="!!rankIcon" :class="rankIcon"></span><span v-if="!!smartFilterIcon" :class="smartFilterIcon"></span>{{character.name}}<span v-if="!!matchClass" :class="matchClass">{{getMatchScoreTitle(matchScore)}}</span></span></template>
<template><span :class="userClass" v-bind:bbcodeTag.prop="'user'" v-bind:character.prop="character" v-bind:channel.prop="channel" @mouseover.prevent="show()" @mouseenter.prevent="show()" @mouseleave.prevent="dismiss()" @click.middle.prevent.stop="toggleStickyness()" @click.right.passive="dismiss(true)" @click.left.passive="dismiss(true)"><img v-if="!!avatar" :src="avatarUrl" class="user-avatar" /><span v-if="!!statusClass" :class="statusClass"></span><span v-if="!!rankIcon" :class="rankIcon"></span><span v-if="!!smartFilterIcon" :class="smartFilterIcon"></span>{{character.name}}<span v-if="!!matchClass" :class="matchClass">{{getMatchScoreTitle(matchScore)}}</span></span></template>
<script lang="ts">
@ -10,6 +10,7 @@ import { Score } from '../learn/matcher';
import core from './core';
import { EventBus } from './preview/event-bus';
import { kinkMatchWeights, Scoring } from '../learn/matcher-types';
import { characterImage } from './common';
export function getStatusIcon(status: Character.Status): string {
@ -137,6 +138,9 @@ export default class UserView extends Vue {
@Prop({default: true})
readonly preview: boolean = true;
@Prop({default: false})
readonly avatar: boolean = false;
userClass = '';
rankIcon: string | null = null;
@ -144,6 +148,7 @@ export default class UserView extends Vue {
statusClass: string | null = null;
matchClass: string | null = null;
matchScore: number | string | null = null;
avatarUrl: string | null = null;
// tslint:disable-next-line no-any
scoreWatcher: ((event: any) => void) | null = null;
@ -214,6 +219,7 @@ export default class UserView extends Vue {
this.matchClass = res.matchClass;
this.matchScore = res.matchScore;
this.userClass = res.userClass;
this.avatarUrl = characterImage(this.character.name);
}

View File

@ -133,7 +133,7 @@ export default class AdLauncherDialog extends CustomDialog {
openAdEditor(): void {
this.hide();
(<AdCenterDialog>this.$parent.$refs['adCenter']).show();
(<AdCenterDialog>this.$parent.$refs['adCenter'])!.show();
}
selectAllChannels(e: any): void {

View File

@ -55,6 +55,7 @@ export class Settings implements ISettings {
risingShowUnreadOfflineCount = true;
risingColorblindMode = false;
risingShowPortraitNearInput = true;
risingShowPortraitInMessage = true;
risingFilter = {
hideAds: false,

View File

@ -235,6 +235,7 @@ export namespace Settings {
readonly risingShowUnreadOfflineCount: boolean;
readonly risingColorblindMode: boolean;
readonly risingShowPortraitNearInput: boolean;
readonly risingShowPortraitInMessage: boolean;
readonly risingFilter: SmartFilterSettings;
}

View File

@ -3,7 +3,7 @@ import {CreateElement, default as Vue, VNode, VNodeChildrenArrayContents} from '
import {Channel} from '../fchat';
import { Score } from '../learn/matcher';
import {BBCodeView} from '../bbcode/view';
import {formatTime} from './common';
import { formatTime } from './common';
import core from './core';
import {Conversation} from './interfaces';
import UserView from './UserView.vue';
@ -38,7 +38,7 @@ const userPostfix: {[key: number]: string | undefined} = {
if(message.type !== Conversation.Message.Type.Event) {
children.push(
(message.type === Conversation.Message.Type.Action) ? createElement('i', { class: 'message-pre fas fa-star-of-life' }) : '',
createElement(UserView, {props: {character: message.sender, channel: this.channel}}),
createElement(UserView, {props: {avatar: core.state.settings.risingShowPortraitInMessage, character: message.sender, channel: this.channel}}),
userPostfix[message.type] !== undefined ? createElement('span', { class: 'message-post' }, userPostfix[message.type]) : ' '
);
if('isHighlight' in message && message.isHighlight) classes += ' message-highlight';

View File

@ -50,7 +50,7 @@ theme: jekyll-theme-slate
changelog: https://github.com/mrstallion/fchat-rising/blob/master/CHANGELOG.md
download:
version: 1.21.1
version: 1.21.2
url: https://github.com/mrstallion/fchat-rising/releases/download/v%VERSION%/F-Chat-Rising-%VERSION%-%PLATFORM_TAIL%

View File

@ -1,6 +1,6 @@
{
"name": "fchat",
"version": "1.21.1",
"version": "1.21.2",
"author": "The F-List Team and Mister Stallion (Esq.)",
"description": "F-List.net Chat Client",
"main": "main.js",

View File

@ -22,6 +22,7 @@
<li v-for="r in recommendations" class="recommendation" :class="r.level">
<h3>{{r.title}}</h3>
<p>{{r.desc}}</p>
<p class="more-info" v-if="r.helpUrl"><a :href="r.helpUrl">Here's how</a></p>
</li>
</ul>
</div>
@ -48,9 +49,9 @@ export default class ProfileAnalysis extends Vue {
const profile = new CharacterAnalysis(char.character);
const analyzer = new ProfileRecommendationAnalyzer(profile);
this.analyzing = false;
this.recommendations = await analyzer.analyze();
this.recommendations = analyzer.analyze();
this.analyzing = false;
}
}
</script>
@ -87,5 +88,14 @@ export default class ProfileAnalysis extends Vue {
background-color: var(--scoreWeakMismatchBg);
}
}
.more-info {
margin-top: 1em;
a {
color: var(--linkForcedColor) !important;
font-weight: bold;
}
}
}
</style>

View File

@ -1,7 +1,9 @@
import _ from 'lodash';
import Axios from 'axios';
import { CharacterAnalysis, Matcher } from '../matcher';
import { FurryPreference, Kink, mammalSpecies, Species } from '../matcher-types';
import { characterImage } from '../../chat/common';
export enum ProfileRecommendationLevel {
INFO = 'info',
@ -18,6 +20,7 @@ export interface ProfileRecommendation {
level: ProfileRecommendationLevel;
title: string;
desc: string;
helpUrl?: string;
urlParams?: ProfileRecommendationUrlParams
}
@ -28,19 +31,20 @@ export class ProfileRecommendationAnalyzer {
//
}
protected add(code: string, level: ProfileRecommendationLevel, title: string, desc: string, urlParams?: ProfileRecommendationUrlParams): void {
this.recommendations.push({ code, level, title, desc, urlParams });
protected add(code: string, level: ProfileRecommendationLevel, title: string, desc: string, helpUrl?: string, urlParams?: ProfileRecommendationUrlParams): void {
this.recommendations.push({ code, level, title, desc, helpUrl, urlParams });
}
analyze(): ProfileRecommendation[] {
async analyze(): Promise<ProfileRecommendation[]> {
this.recommendations = [];
await this.checkPortrait();
this.checkMissingProperties();
this.checkSpeciesPreferences();
this.checkKinkCounts();
this.checkCustomKinks();
this.checkPortrait();
this.checkImages();
this.checkInlineImage();
this.checkDescriptionLength();
@ -48,22 +52,27 @@ export class ProfileRecommendationAnalyzer {
return this.recommendations;
}
protected checkPortrait(): void {
// this.profile.character.
// do nothing
protected async checkPortrait(): Promise<void> {
const profileUrl = characterImage(this.profile.character.name);
const result = await Axios.head(profileUrl);
if (_.trim(result.headers['etag'] || '', '"').trim().toLowerCase() === '639d154d-16c3') {
this.add(`ADD_AVATAR`, ProfileRecommendationLevel.CRITICAL, 'Add an avatar portrait', 'Profiles with an avatar portrait stand out in chats.', 'https://wiki.f-list.net/Guide:_Character_Profiles#Avatar');
}
}
protected checkImages(): void {
if (!this.profile.character.image_count) {
this.add(`ADD_IMAGE`, ProfileRecommendationLevel.CRITICAL, 'Add a profile image', 'Profiles with images are more attractive to other players.');
this.add(`ADD_IMAGE`, ProfileRecommendationLevel.CRITICAL, 'Add a profile image', 'Profiles with images are more attractive to other players.', 'https://wiki.f-list.net/Guide:_Character_Profiles#Images');
} else if (this.profile.character.image_count > 1 && this.profile.character.image_count < 3) {
this.add(`ADD_MORE_IMAGES`, ProfileRecommendationLevel.NOTE, 'Add more profile images', 'Profiles with images are more attractive try to have at least 3 images in your profile.');
this.add(`ADD_MORE_IMAGES`, ProfileRecommendationLevel.NOTE, 'Add more profile images', 'Profiles with images are more attractive try to have at least 3 images in your profile.', 'https://wiki.f-list.net/Guide:_Character_Profiles#Images');
}
}
protected checkInlineImage(): void {
if (_.keys(this.profile.character.inlines).length < 1) {
this.add(`ADD_INLINE_IMAGE`, ProfileRecommendationLevel.NOTE, 'Add an inline image', 'Profiles with inline images are more engaging to other players.');
this.add(`ADD_INLINE_IMAGE`, ProfileRecommendationLevel.NOTE, 'Add an inline image', 'Profiles with inline images are more engaging to other players.', 'https://wiki.f-list.net/Frequently_Asked_Questions#How_do_I_add_an_inline_image_to_my_profile.3F');
}
}
@ -71,9 +80,9 @@ export class ProfileRecommendationAnalyzer {
const desc = this.profile.character.description.trim();
if (desc.length < 20) {
this.add(`ADD_DESCRIPTION`, ProfileRecommendationLevel.CRITICAL, 'Add description', 'Profiles with descriptions are more likely to draw attention from other players.');
this.add(`ADD_DESCRIPTION`, ProfileRecommendationLevel.CRITICAL, 'Add a description', 'Profiles with descriptions are more likely to draw attention from other players.', 'https://wiki.f-list.net/Guide:_Character_Profiles#Description');
} else if (desc.length < 400) {
this.add(`EXPAND_DESCRIPTION`, ProfileRecommendationLevel.NOTE, 'Extend your description', 'Long descriptions are more attractive to other players. Try expanding your description to at least 400 characters.');
this.add(`EXPAND_DESCRIPTION`, ProfileRecommendationLevel.NOTE, 'Extend your description', 'Long descriptions are more attractive to other players. Try expanding your description to at least 400 characters.', 'https://wiki.f-list.net/Guide:_Character_Profiles#Description');
}
}
@ -91,13 +100,13 @@ export class ProfileRecommendationAnalyzer {
}, { filled: 0, total: 0 });
if (counts.total === 0) {
this.add(`ADD_CUSTOM_KINK`, ProfileRecommendationLevel.CRITICAL, 'Add custom kinks', `Custom kinks will help your profile stand out. Try adding at least 5 custom kinks.`);
this.add(`ADD_CUSTOM_KINK`, ProfileRecommendationLevel.CRITICAL, 'Add custom kinks', `Custom kinks will help your profile stand out. Try adding at least 5 custom kinks.`, 'https://wiki.f-list.net/Guide:_Character_Profiles#Custom_Kinks');
} else if (counts.total < 5) {
this.add(`ADD_MORE_CUSTOM_KINKS`, ProfileRecommendationLevel.NOTE, 'Add more custom kinks', `Players pay a lot of attention to custom kinks. Try adding at least 5 custom kinks.`);
this.add(`ADD_MORE_CUSTOM_KINKS`, ProfileRecommendationLevel.NOTE, 'Add more custom kinks', `Players pay a lot of attention to custom kinks. Try adding at least 5 custom kinks.`, 'https://wiki.f-list.net/Guide:_Character_Profiles#Custom_Kinks');
}
if (counts.filled < counts.total && counts.total > 0) {
this.add(`ADD_MORE_CUSTOM_KINK_DESCRIPTIONS`, ProfileRecommendationLevel.NOTE, 'Add descriptions to custom kinks', `Some or all of your custom kinks are missing descriptions. Add descriptions to your custom kinks to attract more players.`);
this.add(`ADD_MORE_CUSTOM_KINK_DESCRIPTIONS`, ProfileRecommendationLevel.NOTE, 'Add descriptions to custom kinks', `Some or all of your custom kinks are missing descriptions. Add descriptions to your custom kinks to attract more players.`, 'https://wiki.f-list.net/Guide:_Character_Profiles#Custom_Kinks');
}
}
@ -114,11 +123,11 @@ export class ProfileRecommendationAnalyzer {
const totalCount = counts.favorite + counts.yes + counts.maybe + counts.no;
if (totalCount < 10) {
this.add(`ADD_MORE_KINKS`, ProfileRecommendationLevel.CRITICAL, `Add more kinks`, `You should have at least 10 kinks for the matching algorithm to work well.`);
this.add(`ADD_MORE_KINKS`, ProfileRecommendationLevel.CRITICAL, `Add more kinks`, `You should have at least 10 kinks for the matching algorithm to work well.`, 'https://wiki.f-list.net/Guide:_Character_Profiles#Kinks');
} else {
_.each(counts, (count, key) => {
if (count < minCountPerType) {
this.add(`ADD_MORE_KINKS_${key.toString().toUpperCase()}`, ProfileRecommendationLevel.CRITICAL, `Add more '${key}' kinks`, `You should have at least ${minCountPerType} '${key}' kinks for the matching algorithm to work well.`);
this.add(`ADD_MORE_KINKS_${key.toString().toUpperCase()}`, ProfileRecommendationLevel.CRITICAL, `Add more '${key}' kinks`, `You should have at least ${minCountPerType} '${key}' kinks for the matching algorithm to work well.`, 'https://wiki.f-list.net/Guide:_Character_Profiles#Kinks');
}
});
}
@ -128,35 +137,39 @@ export class ProfileRecommendationAnalyzer {
const p = this.profile;
if (p.age === null) {
this.add('AGE', ProfileRecommendationLevel.CRITICAL, 'Enter age', 'Specifying the age of your character will improve your matches with other players.');
this.add('AGE', ProfileRecommendationLevel.CRITICAL, 'Enter age', 'Specifying the age of your character will improve your matches with other players.', 'https://wiki.f-list.net/Guide:_Character_Profiles#General_Details');
}
if (p.orientation === null) {
this.add('ORIENTATION', ProfileRecommendationLevel.CRITICAL, 'Enter sexual orientation', 'Specifying the sexual orientation of your character will improve your matches with other players.');
this.add('ORIENTATION', ProfileRecommendationLevel.CRITICAL, 'Enter sexual orientation', 'Specifying the sexual orientation of your character will improve your matches with other players.', 'https://wiki.f-list.net/Guide:_Character_Profiles#General_Details');
}
if (p.species === null) {
this.add('SPECIES', ProfileRecommendationLevel.CRITICAL, 'Enter species', 'Specifying the species of your character even if it\'s \'human\' will improve your matches with other players.');
this.add('SPECIES', ProfileRecommendationLevel.CRITICAL, 'Enter species', 'Specifying the species of your character even if it\'s \'human\' will improve your matches with other players.', 'https://wiki.f-list.net/Guide:_Character_Profiles#General_Details');
}
if (p.furryPreference === null) {
this.add('FURRY_PREFERENCE', ProfileRecommendationLevel.CRITICAL, 'Enter furry preference', 'Specifying whether you like to play with anthro characters will improve your matches with other players.');
this.add('FURRY_PREFERENCE', ProfileRecommendationLevel.CRITICAL, 'Enter furry preference', 'Specifying whether you like to play with anthro characters will improve your matches with other players.', 'https://wiki.f-list.net/Guide:_Character_Profiles#RPing_Preferences');
}
if (p.subDomRole === null) {
this.add('SUB_DOM_ROLE', ProfileRecommendationLevel.CRITICAL, 'Enter sub/dom role', 'Specifying your preferred sub/dom role will improve your matches with other players.');
this.add('SUB_DOM_ROLE', ProfileRecommendationLevel.CRITICAL, 'Enter sub/dom role', 'Specifying your preferred sub/dom role will improve your matches with other players.', 'https://wiki.f-list.net/Guide:_Character_Profiles#Sexual_Details');
}
if (p.position === null) {
this.add('POSITION', ProfileRecommendationLevel.CRITICAL, 'Enter position', 'Specifying your preferred position (e.g. "top", "bottom") will improve your matches with other players.');
this.add('POSITION', ProfileRecommendationLevel.CRITICAL, 'Enter position', 'Specifying your preferred position (e.g. "top", "bottom") will improve your matches with other players.', 'https://wiki.f-list.net/Guide:_Character_Profiles#Sexual_Details');
}
if (p.postLengthPreference === null) {
this.add('POST_LENGTH', ProfileRecommendationLevel.CRITICAL, 'Enter post length preference', 'Specifying your post length preference will improve your matches with other players.');
this.add('POST_LENGTH', ProfileRecommendationLevel.CRITICAL, 'Enter post length preference', 'Specifying your post length preference will improve your matches with other players.', 'https://wiki.f-list.net/Guide:_Character_Profiles#RPing_Preferences');
}
if (p.bodyType === null) {
this.add('BODY_TYPE', ProfileRecommendationLevel.CRITICAL, 'Enter body type', 'Specifying your character\'s body type will improve your matches with other players.');
this.add('BODY_TYPE', ProfileRecommendationLevel.CRITICAL, 'Enter body type', 'Specifying your character\'s body type will improve your matches with other players.', 'https://wiki.f-list.net/Guide:_Character_Profiles#General_Details');
}
if (p.gender === null) {
this.add('GENDER', ProfileRecommendationLevel.CRITICAL, 'Enter gender', 'Specifying your character\'s gender will help matching you with other players', 'https://wiki.f-list.net/Guide:_Character_Profiles#General_Details');
}
}

View File

@ -1,6 +1,6 @@
{
"name": "f-list-rising",
"version": "1.21.1",
"version": "1.21.2",
"author": "The F-List Team and and Mister Stallion (Esq.)",
"description": "A heavily modded F-Chat 3.0 client for F-List",
"license": "MIT",