Position comparison
This commit is contained in:
parent
4f2d58cc29
commit
9369f9483e
|
@ -1,5 +1,8 @@
|
|||
# Changelog
|
||||
|
||||
## 1.13.0
|
||||
* Position is now part of the profile match score
|
||||
|
||||
## 1.12.0
|
||||
* Post length preference is now part of the profile match score
|
||||
* Improved kink match scoring
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
# Download
|
||||
[Windows](https://github.com/mrstallion/fchat-rising/releases/download/v1.12.0/F-Chat-Rising-1.12.0-win.exe) (75 MB)
|
||||
| [MacOS](https://github.com/mrstallion/fchat-rising/releases/download/v1.12.0/F-Chat-Rising-1.12.0-macos.dmg) (76 MB)
|
||||
| [Linux](https://github.com/mrstallion/fchat-rising/releases/download/v1.12.0/F-Chat-Rising-1.12.0-linux.AppImage) (76 MB)
|
||||
[Windows](https://github.com/mrstallion/fchat-rising/releases/download/v1.13.0/F-Chat-Rising-1.13.0-win.exe) (75 MB)
|
||||
| [MacOS](https://github.com/mrstallion/fchat-rising/releases/download/v1.13.0/F-Chat-Rising-1.13.0-macos.dmg) (76 MB)
|
||||
| [Linux](https://github.com/mrstallion/fchat-rising/releases/download/v1.13.0/F-Chat-Rising-1.13.0-linux.AppImage) (76 MB)
|
||||
|
||||
|
||||
# F-Chat Rising
|
||||
|
@ -94,6 +94,7 @@ This repository contains a heavily customized version of the mainline F-Chat 3.0
|
|||
* Dominance preference
|
||||
* Human/anthro preference
|
||||
* Post length preference
|
||||
* Position preference
|
||||
* Non-custom kinks
|
||||
* Species
|
||||
1. Maching for non-binary genders relies on kinks. For example, if your non-binary character has a preference for females, make sure 'females' are listed as a favorite kink.
|
||||
|
|
|
@ -50,7 +50,7 @@ theme: jekyll-theme-slate
|
|||
changelog: https://github.com/mrstallion/fchat-rising/blob/master/CHANGELOG.md
|
||||
|
||||
download:
|
||||
version: 1.12.0
|
||||
version: 1.13.0
|
||||
|
||||
url: https://github.com/mrstallion/fchat-rising/releases/download/v%VERSION%/F-Chat-Rising-%VERSION%-%PLATFORM_TAIL%
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "fchat",
|
||||
"version": "1.12.0",
|
||||
"version": "1.13.0",
|
||||
"author": "The F-List Team and Mister Stallion (Esq.)",
|
||||
"description": "F-List.net Chat Client",
|
||||
"main": "main.js",
|
||||
|
|
|
@ -56,6 +56,14 @@ export enum SubDomRole {
|
|||
AlwaysDominant = 11
|
||||
}
|
||||
|
||||
export enum Position {
|
||||
AlwaysBottom = 85,
|
||||
UsuallyBottom = 86,
|
||||
Switch = 91,
|
||||
UsuallyTop = 87,
|
||||
AlwaysTop = 88
|
||||
}
|
||||
|
||||
export enum Orientation {
|
||||
Straight = 4,
|
||||
Gay = 5,
|
||||
|
|
|
@ -28,6 +28,7 @@ import {
|
|||
mammalSpecies,
|
||||
nonAnthroSpecies,
|
||||
Orientation,
|
||||
Position,
|
||||
PostLengthPreference, postLengthPreferenceMapping, postLengthPreferenceScoreMapping, Scoring,
|
||||
Species,
|
||||
SpeciesMap,
|
||||
|
@ -148,6 +149,7 @@ export class CharacterAnalysis {
|
|||
readonly furryPreference: FurryPreference | null;
|
||||
readonly age: number | null;
|
||||
readonly subDomRole: SubDomRole | null;
|
||||
readonly position: Position | null;
|
||||
readonly postLengthPreference: PostLengthPreference | null;
|
||||
|
||||
readonly isAnthro: boolean | null;
|
||||
|
@ -162,6 +164,7 @@ export class CharacterAnalysis {
|
|||
this.species = Matcher.species(c);
|
||||
this.furryPreference = Matcher.getTagValueList(TagId.FurryPreference, c);
|
||||
this.subDomRole = Matcher.getTagValueList(TagId.SubDomRole, c);
|
||||
this.position = Matcher.getTagValueList(TagId.Position, c);
|
||||
this.postLengthPreference = Matcher.getTagValueList(TagId.PostLength, c);
|
||||
|
||||
const ageTag = Matcher.getTagValue(TagId.Age, c);
|
||||
|
@ -401,7 +404,8 @@ export class Matcher {
|
|||
[TagId.Species]: this.resolveSpeciesScore(),
|
||||
[TagId.SubDomRole]: this.resolveSubDomScore(),
|
||||
[TagId.Kinks]: this.resolveKinkScore(pronoun),
|
||||
[TagId.PostLength]: this.resolvePostLengthScore()
|
||||
[TagId.PostLength]: this.resolvePostLengthScore(),
|
||||
[TagId.Position]: this.resolvePositionScore()
|
||||
},
|
||||
|
||||
info: {
|
||||
|
@ -731,7 +735,7 @@ export class Matcher {
|
|||
|
||||
if (yourSubDomRole === SubDomRole.UsuallyDominant) {
|
||||
if (theirSubDomRole === SubDomRole.Switch)
|
||||
return new Score(Scoring.MATCH, `Loves <span>switches</span>`);
|
||||
return new Score(Scoring.MATCH, `Loves <span>switches</span> (role)`);
|
||||
|
||||
if ((theirSubDomRole === SubDomRole.AlwaysSubmissive) || (theirSubDomRole === SubDomRole.UsuallySubmissive))
|
||||
return new Score(Scoring.MATCH, `Loves <span>submissives</span>`);
|
||||
|
@ -747,7 +751,7 @@ export class Matcher {
|
|||
|
||||
if (yourSubDomRole === SubDomRole.AlwaysDominant) {
|
||||
if (theirSubDomRole === SubDomRole.Switch)
|
||||
return new Score(Scoring.WEAK_MATCH, `Likes <span>switches</span>`);
|
||||
return new Score(Scoring.WEAK_MATCH, `Likes <span>switches</span> (role)`);
|
||||
|
||||
if ((theirSubDomRole === SubDomRole.AlwaysSubmissive) || (theirSubDomRole === SubDomRole.UsuallySubmissive))
|
||||
return new Score(Scoring.MATCH, `Loves <span>submissives</span>`);
|
||||
|
@ -766,7 +770,7 @@ export class Matcher {
|
|||
|
||||
if (yourSubDomRole === SubDomRole.UsuallySubmissive) {
|
||||
if (theirSubDomRole === SubDomRole.Switch)
|
||||
return new Score(Scoring.MATCH, `Loves <span>switches</span>`);
|
||||
return new Score(Scoring.MATCH, `Loves <span>switches</span> (role)`);
|
||||
|
||||
if ((theirSubDomRole === SubDomRole.AlwaysDominant) || (theirSubDomRole === SubDomRole.UsuallyDominant))
|
||||
return new Score(Scoring.MATCH, `Loves <span>dominants</span>`);
|
||||
|
@ -782,7 +786,7 @@ export class Matcher {
|
|||
|
||||
if (yourSubDomRole === SubDomRole.AlwaysSubmissive) {
|
||||
if (theirSubDomRole === SubDomRole.Switch)
|
||||
return new Score(Scoring.WEAK_MATCH, `Likes <span>switches</span>`);
|
||||
return new Score(Scoring.WEAK_MATCH, `Likes <span>switches</span> (role)`);
|
||||
|
||||
if ((theirSubDomRole === SubDomRole.AlwaysDominant) || (theirSubDomRole === SubDomRole.UsuallyDominant))
|
||||
return new Score(Scoring.MATCH, `Loves <span>dominants</span>`);
|
||||
|
@ -801,7 +805,7 @@ export class Matcher {
|
|||
|
||||
// You must be a switch
|
||||
if (theirSubDomRole === SubDomRole.Switch)
|
||||
return new Score(Scoring.MATCH, `Loves <span>switches</span>`);
|
||||
return new Score(Scoring.MATCH, `Loves <span>switches</span> (role)`);
|
||||
|
||||
// if (yourRoleReversalPreference === KinkPreference.Favorite)
|
||||
// return new Score(Scoring.MATCH, `Loves <span>role reversal</span>`);
|
||||
|
@ -818,6 +822,78 @@ export class Matcher {
|
|||
return new Score(Scoring.NEUTRAL);
|
||||
}
|
||||
|
||||
private resolvePositionScore(): Score {
|
||||
const yourPosition = this.yourAnalysis.position;
|
||||
const theirPosition = this.theirAnalysis.position;
|
||||
|
||||
if ((!yourPosition) || (!theirPosition))
|
||||
return new Score(Scoring.NEUTRAL);
|
||||
|
||||
if (yourPosition === Position.UsuallyTop) {
|
||||
if (theirPosition === Position.Switch)
|
||||
return new Score(Scoring.MATCH, `Loves <span>switches</span> (position)`);
|
||||
|
||||
if ((theirPosition === Position.AlwaysBottom) || (theirPosition === Position.UsuallyBottom))
|
||||
return new Score(Scoring.MATCH, `Loves <span>bottoms</span>`);
|
||||
|
||||
return new Score(Scoring.WEAK_MISMATCH, 'Hesitant about <span>tops</span>');
|
||||
}
|
||||
|
||||
if (yourPosition === Position.AlwaysTop) {
|
||||
if (theirPosition === Position.Switch)
|
||||
return new Score(Scoring.WEAK_MATCH, `Likes <span>switches</span> (position)`);
|
||||
|
||||
if ((theirPosition === Position.AlwaysBottom) || (theirPosition === Position.UsuallyBottom))
|
||||
return new Score(Scoring.MATCH, `Loves <span>bottoms</span>`);
|
||||
|
||||
if ((yourPosition === Position.AlwaysTop) && (theirPosition === Position.AlwaysTop))
|
||||
return new Score(Scoring.MISMATCH, 'No <span>tops</span>');
|
||||
|
||||
return new Score(Scoring.WEAK_MISMATCH, 'Hesitant about <span>tops</span>');
|
||||
}
|
||||
|
||||
if (yourPosition === Position.UsuallyBottom) {
|
||||
if (theirPosition === Position.Switch)
|
||||
return new Score(Scoring.MATCH, `Loves <span>switches</span> (position)`);
|
||||
|
||||
if ((theirPosition === Position.AlwaysTop) || (theirPosition === Position.UsuallyTop))
|
||||
return new Score(Scoring.MATCH, `Loves <span>tops</span>`);
|
||||
|
||||
return new Score(Scoring.WEAK_MISMATCH, 'Hesitant about <span>bottoms</span>');
|
||||
}
|
||||
|
||||
if (yourPosition === Position.AlwaysBottom) {
|
||||
if (theirPosition === Position.Switch)
|
||||
return new Score(Scoring.WEAK_MATCH, `Likes <span>switches</span> (position)`);
|
||||
|
||||
if ((theirPosition === Position.AlwaysTop) || (theirPosition === Position.UsuallyTop))
|
||||
return new Score(Scoring.MATCH, `Loves <span>tops</span>`);
|
||||
|
||||
if ((yourPosition === Position.AlwaysBottom) && (theirPosition === Position.AlwaysBottom))
|
||||
return new Score(Scoring.MISMATCH, 'No <span>bottoms</span>');
|
||||
|
||||
return new Score(Scoring.WEAK_MISMATCH, 'Hesitant about <span>bottoms</span>');
|
||||
}
|
||||
|
||||
// You must be a switch
|
||||
if (theirPosition === Position.Switch)
|
||||
return new Score(Scoring.MATCH, `Loves <span>switches</span> (position)`);
|
||||
|
||||
// if (yourRoleReversalPreference === KinkPreference.Favorite)
|
||||
// return new Score(Scoring.MATCH, `Loves <span>role reversal</span>`);
|
||||
//
|
||||
// if (yourRoleReversalPreference === KinkPreference.Yes)
|
||||
// return new Score(Scoring.MATCH, `Likes <span>role reversal</span>`);
|
||||
|
||||
if ((theirPosition === Position.AlwaysTop) || (theirPosition === Position.UsuallyTop))
|
||||
return new Score(Scoring.MATCH, `Loves <span>tops</span>`);
|
||||
|
||||
if ((theirPosition === Position.AlwaysBottom) || (theirPosition === Position.UsuallyBottom))
|
||||
return new Score(Scoring.MATCH, `Loves <span>bottoms</span>`);
|
||||
|
||||
return new Score(Scoring.NEUTRAL);
|
||||
}
|
||||
|
||||
|
||||
private resolveKinkBucketScore(bucket: 'all' | 'favorite' | 'yes' | 'maybe' | 'no' | 'positive' | 'negative'): KinkBucketScore {
|
||||
const yourKinks = this.getAllStandardKinks(this.you);
|
||||
|
|
|
@ -99,7 +99,7 @@ export class IndexedStore implements PermanentIndexedStore {
|
|||
species: ca.species,
|
||||
age: ca.age,
|
||||
domSubRole: ca.subDomRole, // domSubRole
|
||||
position: null, // position
|
||||
position: ca.position, // position
|
||||
|
||||
lastMetaFetched: null,
|
||||
guestbook: null,
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "f-list-rising",
|
||||
"version": "1.12.0",
|
||||
"version": "1.13.0",
|
||||
"author": "The F-List Team and and Mister Stallion (Esq.)",
|
||||
"description": "A heavily modded F-Chat 3.0 client for F-List",
|
||||
"license": "MIT",
|
||||
|
|
|
@ -59,7 +59,7 @@
|
|||
}
|
||||
|
||||
theirInterestIsRelevant(id: number): boolean {
|
||||
return ((id === TagId.FurryPreference) || (id === TagId.Orientation) || (id === TagId.SubDomRole) || (id === TagId.PostLength));
|
||||
return ((id === TagId.FurryPreference) || (id === TagId.Orientation) || (id === TagId.SubDomRole) || (id === TagId.Position) || (id === TagId.PostLength));
|
||||
}
|
||||
|
||||
yourInterestIsRelevant(id: number): boolean {
|
||||
|
|
Loading…
Reference in New Issue