From 8d1516f1a756564536b0896ca2ed5da6b418fc54 Mon Sep 17 00:00:00 2001 From: Mute Date: Thu, 20 Oct 2022 11:02:02 +0000 Subject: [PATCH] dev.3 backported trunk version no new functionality fixes and cleanups --- mbchc-dev.user.js | 53 ++++++++++++++++++++++++++--------------------- 1 file changed, 29 insertions(+), 24 deletions(-) diff --git a/mbchc-dev.user.js b/mbchc-dev.user.js index 5e56112..b11f4e2 100644 --- a/mbchc-dev.user.js +++ b/mbchc-dev.user.js @@ -1,6 +1,6 @@ // ==UserScript== // @name MBCHC -// @version dev.2 +// @version dev.3 // @description Mute's Bondage Club Hacks Collection // @author codename.mute@proton.me // @namespace https://code.fleshless.org/mute/ @@ -24,8 +24,8 @@ if (!window.AsylumGGTSSAddItems) throw "AsylumGGTSSAddItems() not found, aborting MBCHC loading" if (window.MBCHC) throw "MBCHC found, aborting loading" window.MBCHC = { - VERSION: "dev.2", - TARGET_VERSION: "R82", + VERSION: "dev.3", + TARGET_VERSION: "R85", NEXT_MESSAGE: 1, LOG_MESSAGES: false, RETHROW: false, @@ -35,7 +35,6 @@ HISTORY_MODE: false, RE_TITLE: /^[a-zA-Z]+$/, RE_PREF_ACTIVITY_ME: /^@/, - RE_PREF_ACTIVITY_ME_APO: /^@'/, RE_PREF_ACTIVITY: /^@@/, RE_ACT_CIDS: /^<(\d+)?:(\d+)?>/, RE_TZ: /(?:GMT|UTC)([+-]\d\d?)/i, @@ -49,7 +48,7 @@ UTC_OFFSET: new Date().getTimezoneOffset() * 60 * 1000, HAND_PENETRATORS: ["Flogger", "Whip", "TennisRacket", "Gavel", "SmallVibratingWand", "LargeDildo", "Vibrator", "Hairbrush", "SmallDildo", "Baguette", "Spatula", "Broom"], HIDE_SPECIAL: ["Activity","Emoticon"], - HIDE_BODY: ["Blush","BodyLower","BodyUpper","Eyebrows","Eyes","Eyes2","Face","Fluids","HairBack","HairFront","Hands","Head","Mouth","Nipples","Pussy"], + HIDE_BODY: ["Blush","BodyLower","BodyUpper","Eyebrows","Eyes","Eyes2","Face","Fluids","HairBack","HairFront","Hands","Head","LeftHand","Mouth","Nipples","Pussy","RightHand"], HIDE_CLOTHES: [ "Cloth","ClothAccessory","Necklace","Suit","ClothLower","SuitLower","Bra","Corset","Panties", "Socks","RightAnklet","LeftAnklet","Garters","Shoes","Hat","HairAccessory3","HairAccessory1","HairAccessory2", @@ -157,7 +156,7 @@ "ItemEars": ["ear", "ears", "earlobe", "earlobes"], "ItemHead": ["head", "face", "hair", "eyes", "forehead"], }, - BCE_TESTER_PATCHES: [ + FBC_TESTER_PATCHES: [ [/^\^('s)?( )?/g, "^SourceCharacter$1\\s+"], [/([^\\])\$/g, "$1\\.?$$"], ], @@ -296,6 +295,12 @@ } finally { char.FocusGroup = null } }, + replace_me: function(match, offset, string) { + let text = string.slice(1) + let suffix = " " + if (text.startsWith("'") || text.startsWith(" ")) suffix = "" + return `${window.MBCHC.PREF_ACTIVITY}<${window.Player.cid}:>SourceCharacter${suffix}` + }, cid2dict: function(type, cid) { return({Tag: `${type}Character`, MemberNumber: cid, Text: this.cid2char(cid).dn}) }, send_activity: function(msg) { let dict = [{Tag: "MISSING PLAYER DIALOG: ", Text: ""}] @@ -347,28 +352,28 @@ for (let name of this.HAND_PENETRATORS) { let option = options.find(o => o.Name === name) if (option && option.Property) { - if (!option.Property.Attribute) option.Property.Attribute = [] - if (option.Property.Attribute.indexOf("PenetrateItem") < 0) option.Property.Attribute.push("PenetrateItem") + if (!option.Property.AllowActivity) option.Property.AllowActivity = [] + if (option.Property.AllowActivity.indexOf("PenetrateItem") < 0) option.Property.AllowActivity.push("PenetrateItem") } } }, - copy_bce_trigger: function(trigger) { + copy_fbc_trigger: function(trigger) { let result = { Type: "Action", Event: trigger.Event, - Matchers: trigger.Matchers.map(m => ({Tester: new RegExp(this.BCE_TESTER_PATCHES.reduce((ax,[f,r]) => ax.replaceAll(f,r), m.Tester.source), "u")})) + Matchers: trigger.Matchers.map(m => ({Tester: new RegExp(this.FBC_TESTER_PATCHES.reduce((ax,[f,r]) => ax.replaceAll(f,r), m.Tester.source), "u")})) } return(result) }, - patch_bce: function() { - this.remove_bce_hook() - delete this.remove_bce_hook - window.bce_ActivityTriggers.push(...window.bce_ActivityTriggers.filter(t => "Emote" === t.Type).map(t => this.copy_bce_trigger(t))) - /* (["anim", "pose"]).forEach(tag => {let cmd = window.Commands.find(c => tag === c.Tag); if (cmd) cmd.AutoComplete = this[`complete_bce_${tag}`]}) */ // this line explodes, don't ask me why + patch_fbc: function() { + this.remove_fbc_hook() + delete this.remove_fbc_hook + window.bce_ActivityTriggers.push(...window.bce_ActivityTriggers.filter(t => "Emote" === t.Type).map(t => this.copy_fbc_trigger(t))) + /* (["anim", "pose"]).forEach(tag => {let cmd = window.Commands.find(c => tag === c.Tag); if (cmd) cmd.AutoComplete = this[`complete_fbc_${tag}`]}) */ // this line explodes, don't ask me why let cmd = window.Commands.find(c => "anim" === c.Tag) - if (cmd) cmd.AutoComplete = this.complete_bce_anim + if (cmd) cmd.AutoComplete = this.complete_fbc_anim cmd = window.Commands.find(c => "pose" === c.Tag) - if (cmd) cmd.AutoComplete = this.complete_bce_pose + if (cmd) cmd.AutoComplete = this.complete_fbc_pose }, gather_versions: function() { return(window.ChatRoomCharacter.filter(c => c.MBCHC).map(c => ({name: c.dn, cid: c.cid, version: c.MBCHC.VERSION}))) }, need_load_hook: function(module, screen) { @@ -505,14 +510,14 @@ } mbchc.bell() }, - complete_bce_anim: function(args, locase, cmdline) { const [mbchc, input, tokens] = window.MBCHC.complete_common(); // `this` is command object + complete_fbc_anim: function(args, locase, cmdline) { const [mbchc, input, tokens] = window.MBCHC.complete_common(); // `this` is command object if (tokens.length < 1) return if (tokens.length < 2) return(mbchc.complete([`${mbchc.CommandsKey}${this.Tag}`])) if (tokens.length > 2) return(mbchc.bell()) let anim = tokens[1].toLocaleLowerCase() return(mbchc.complete(Object.keys(window.bce_EventExpressions).filter(a => a.toLocaleLowerCase().startsWith(anim)))) }, - complete_bce_pose: function(args, locase, cmdline) { const [mbchc, input, tokens] = window.MBCHC.complete_common(); // `this` is command object + complete_fbc_pose: function(args, locase, cmdline) { const [mbchc, input, tokens] = window.MBCHC.complete_common(); // `this` is command object if (tokens.length < 1) return if (tokens.length < 2) return(mbchc.complete([`${mbchc.CommandsKey}${this.Tag}`])) let pose = tokens[tokens.length - 1].toLocaleLowerCase() @@ -614,8 +619,7 @@ let input = window.ElementValue("InputChat") if (!input.startsWith("@@@") && input.startsWith("@")) { input = input.replace(window.MBCHC.RE_PREF_ACTIVITY, window.MBCHC.PREF_ACTIVITY) - input = input.replace(window.MBCHC.RE_PREF_ACTIVITY_ME_APO, `${window.MBCHC.PREF_ACTIVITY}<${window.Player.cid}:>SourceCharacter'`) - input = input.replace(window.MBCHC.RE_PREF_ACTIVITY_ME, `${window.MBCHC.PREF_ACTIVITY}<${window.Player.cid}:>SourceCharacter `) + input = input.replace(window.MBCHC.RE_PREF_ACTIVITY_ME, window.MBCHC.replace_me) window.ElementValue("InputChat", input) } let result = next(nextargs) @@ -665,7 +669,8 @@ window.MBCHC.sdk.hookFunction("DocumentKeyDown", 0, (nextargs, next) => { let [event] = nextargs if ("InputChat" === document.activeElement.id || "bce-message-input" === document.activeElement.id) return(next(nextargs)) - if ("inline" === document.getElementById("InputChat")?.style.display) window.ElementFocus("InputChat") + if ("inline" === document.getElementById("InputChat")?.style.display && [event.altKey, event.ctrlKey, event.metaKey].every(i => !i)) window.ElementFocus("InputChat") // alt, ctrl and meta should all be false + // TODO: this is not ideal, but it will have to do for now return(next(nextargs)) }) window.MBCHC.sdk.hookFunction("ChatRoomKeyDown", 0, (nextargs, next) => { @@ -685,8 +690,8 @@ window.MBCHC.complete_hint_hide() return(next(nextargs)) }) - window.MBCHC.remove_bce_hook = window.MBCHC.sdk.hookFunction("MainRun", 0, (nextargs, next) => { - if (window.bce_ActivityTriggers) window.MBCHC.patch_bce() + window.MBCHC.remove_fbc_hook = window.MBCHC.sdk.hookFunction("MainRun", 0, (nextargs, next) => { + if (window.bce_ActivityTriggers) window.MBCHC.patch_fbc() return(next(nextargs)) })