dev.3
backported trunk version no new functionality fixes and cleanups
This commit is contained in:
parent
3e3f891016
commit
8d1516f1a7
|
@ -1,6 +1,6 @@
|
||||||
// ==UserScript==
|
// ==UserScript==
|
||||||
// @name MBCHC
|
// @name MBCHC
|
||||||
// @version dev.2
|
// @version dev.3
|
||||||
// @description Mute's Bondage Club Hacks Collection
|
// @description Mute's Bondage Club Hacks Collection
|
||||||
// @author codename.mute@proton.me
|
// @author codename.mute@proton.me
|
||||||
// @namespace https://code.fleshless.org/mute/
|
// @namespace https://code.fleshless.org/mute/
|
||||||
|
@ -24,8 +24,8 @@
|
||||||
if (!window.AsylumGGTSSAddItems) throw "AsylumGGTSSAddItems() not found, aborting MBCHC loading"
|
if (!window.AsylumGGTSSAddItems) throw "AsylumGGTSSAddItems() not found, aborting MBCHC loading"
|
||||||
if (window.MBCHC) throw "MBCHC found, aborting loading"
|
if (window.MBCHC) throw "MBCHC found, aborting loading"
|
||||||
window.MBCHC = {
|
window.MBCHC = {
|
||||||
VERSION: "dev.2",
|
VERSION: "dev.3",
|
||||||
TARGET_VERSION: "R82",
|
TARGET_VERSION: "R85",
|
||||||
NEXT_MESSAGE: 1,
|
NEXT_MESSAGE: 1,
|
||||||
LOG_MESSAGES: false,
|
LOG_MESSAGES: false,
|
||||||
RETHROW: false,
|
RETHROW: false,
|
||||||
|
@ -35,7 +35,6 @@
|
||||||
HISTORY_MODE: false,
|
HISTORY_MODE: false,
|
||||||
RE_TITLE: /^[a-zA-Z]+$/,
|
RE_TITLE: /^[a-zA-Z]+$/,
|
||||||
RE_PREF_ACTIVITY_ME: /^@/,
|
RE_PREF_ACTIVITY_ME: /^@/,
|
||||||
RE_PREF_ACTIVITY_ME_APO: /^@'/,
|
|
||||||
RE_PREF_ACTIVITY: /^@@/,
|
RE_PREF_ACTIVITY: /^@@/,
|
||||||
RE_ACT_CIDS: /^<(\d+)?:(\d+)?>/,
|
RE_ACT_CIDS: /^<(\d+)?:(\d+)?>/,
|
||||||
RE_TZ: /(?:GMT|UTC)([+-]\d\d?)/i,
|
RE_TZ: /(?:GMT|UTC)([+-]\d\d?)/i,
|
||||||
|
@ -49,7 +48,7 @@
|
||||||
UTC_OFFSET: new Date().getTimezoneOffset() * 60 * 1000,
|
UTC_OFFSET: new Date().getTimezoneOffset() * 60 * 1000,
|
||||||
HAND_PENETRATORS: ["Flogger", "Whip", "TennisRacket", "Gavel", "SmallVibratingWand", "LargeDildo", "Vibrator", "Hairbrush", "SmallDildo", "Baguette", "Spatula", "Broom"],
|
HAND_PENETRATORS: ["Flogger", "Whip", "TennisRacket", "Gavel", "SmallVibratingWand", "LargeDildo", "Vibrator", "Hairbrush", "SmallDildo", "Baguette", "Spatula", "Broom"],
|
||||||
HIDE_SPECIAL: ["Activity","Emoticon"],
|
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: [
|
HIDE_CLOTHES: [
|
||||||
"Cloth","ClothAccessory","Necklace","Suit","ClothLower","SuitLower","Bra","Corset","Panties",
|
"Cloth","ClothAccessory","Necklace","Suit","ClothLower","SuitLower","Bra","Corset","Panties",
|
||||||
"Socks","RightAnklet","LeftAnklet","Garters","Shoes","Hat","HairAccessory3","HairAccessory1","HairAccessory2",
|
"Socks","RightAnklet","LeftAnklet","Garters","Shoes","Hat","HairAccessory3","HairAccessory1","HairAccessory2",
|
||||||
|
@ -157,7 +156,7 @@
|
||||||
"ItemEars": ["ear", "ears", "earlobe", "earlobes"],
|
"ItemEars": ["ear", "ears", "earlobe", "earlobes"],
|
||||||
"ItemHead": ["head", "face", "hair", "eyes", "forehead"],
|
"ItemHead": ["head", "face", "hair", "eyes", "forehead"],
|
||||||
},
|
},
|
||||||
BCE_TESTER_PATCHES: [
|
FBC_TESTER_PATCHES: [
|
||||||
[/^\^('s)?( )?/g, "^SourceCharacter$1\\s+"],
|
[/^\^('s)?( )?/g, "^SourceCharacter$1\\s+"],
|
||||||
[/([^\\])\$/g, "$1\\.?$$"],
|
[/([^\\])\$/g, "$1\\.?$$"],
|
||||||
],
|
],
|
||||||
|
@ -296,6 +295,12 @@
|
||||||
} finally {
|
} finally {
|
||||||
char.FocusGroup = null
|
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}) },
|
cid2dict: function(type, cid) { return({Tag: `${type}Character`, MemberNumber: cid, Text: this.cid2char(cid).dn}) },
|
||||||
send_activity: function(msg) {
|
send_activity: function(msg) {
|
||||||
let dict = [{Tag: "MISSING PLAYER DIALOG: ", Text: ""}]
|
let dict = [{Tag: "MISSING PLAYER DIALOG: ", Text: ""}]
|
||||||
|
@ -347,28 +352,28 @@
|
||||||
for (let name of this.HAND_PENETRATORS) {
|
for (let name of this.HAND_PENETRATORS) {
|
||||||
let option = options.find(o => o.Name === name)
|
let option = options.find(o => o.Name === name)
|
||||||
if (option && option.Property) {
|
if (option && option.Property) {
|
||||||
if (!option.Property.Attribute) option.Property.Attribute = []
|
if (!option.Property.AllowActivity) option.Property.AllowActivity = []
|
||||||
if (option.Property.Attribute.indexOf("PenetrateItem") < 0) option.Property.Attribute.push("PenetrateItem")
|
if (option.Property.AllowActivity.indexOf("PenetrateItem") < 0) option.Property.AllowActivity.push("PenetrateItem")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
copy_bce_trigger: function(trigger) {
|
copy_fbc_trigger: function(trigger) {
|
||||||
let result = {
|
let result = {
|
||||||
Type: "Action",
|
Type: "Action",
|
||||||
Event: trigger.Event,
|
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)
|
return(result)
|
||||||
},
|
},
|
||||||
patch_bce: function() {
|
patch_fbc: function() {
|
||||||
this.remove_bce_hook()
|
this.remove_fbc_hook()
|
||||||
delete this.remove_bce_hook
|
delete this.remove_fbc_hook
|
||||||
window.bce_ActivityTriggers.push(...window.bce_ActivityTriggers.filter(t => "Emote" === t.Type).map(t => this.copy_bce_trigger(t)))
|
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_bce_${tag}`]}) */ // this line explodes, don't ask me why
|
/* (["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)
|
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)
|
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}))) },
|
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) {
|
need_load_hook: function(module, screen) {
|
||||||
|
@ -505,14 +510,14 @@
|
||||||
}
|
}
|
||||||
mbchc.bell()
|
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 < 1) return
|
||||||
if (tokens.length < 2) return(mbchc.complete([`${mbchc.CommandsKey}${this.Tag}`]))
|
if (tokens.length < 2) return(mbchc.complete([`${mbchc.CommandsKey}${this.Tag}`]))
|
||||||
if (tokens.length > 2) return(mbchc.bell())
|
if (tokens.length > 2) return(mbchc.bell())
|
||||||
let anim = tokens[1].toLocaleLowerCase()
|
let anim = tokens[1].toLocaleLowerCase()
|
||||||
return(mbchc.complete(Object.keys(window.bce_EventExpressions).filter(a => a.toLocaleLowerCase().startsWith(anim))))
|
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 < 1) return
|
||||||
if (tokens.length < 2) return(mbchc.complete([`${mbchc.CommandsKey}${this.Tag}`]))
|
if (tokens.length < 2) return(mbchc.complete([`${mbchc.CommandsKey}${this.Tag}`]))
|
||||||
let pose = tokens[tokens.length - 1].toLocaleLowerCase()
|
let pose = tokens[tokens.length - 1].toLocaleLowerCase()
|
||||||
|
@ -614,8 +619,7 @@
|
||||||
let input = window.ElementValue("InputChat")
|
let input = window.ElementValue("InputChat")
|
||||||
if (!input.startsWith("@@@") && input.startsWith("@")) {
|
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, 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.replace_me)
|
||||||
input = input.replace(window.MBCHC.RE_PREF_ACTIVITY_ME, `${window.MBCHC.PREF_ACTIVITY}<${window.Player.cid}:>SourceCharacter `)
|
|
||||||
window.ElementValue("InputChat", input)
|
window.ElementValue("InputChat", input)
|
||||||
}
|
}
|
||||||
let result = next(nextargs)
|
let result = next(nextargs)
|
||||||
|
@ -665,7 +669,8 @@
|
||||||
window.MBCHC.sdk.hookFunction("DocumentKeyDown", 0, (nextargs, next) => {
|
window.MBCHC.sdk.hookFunction("DocumentKeyDown", 0, (nextargs, next) => {
|
||||||
let [event] = nextargs
|
let [event] = nextargs
|
||||||
if ("InputChat" === document.activeElement.id || "bce-message-input" === document.activeElement.id) return(next(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))
|
return(next(nextargs))
|
||||||
})
|
})
|
||||||
window.MBCHC.sdk.hookFunction("ChatRoomKeyDown", 0, (nextargs, next) => {
|
window.MBCHC.sdk.hookFunction("ChatRoomKeyDown", 0, (nextargs, next) => {
|
||||||
|
@ -685,8 +690,8 @@
|
||||||
window.MBCHC.complete_hint_hide()
|
window.MBCHC.complete_hint_hide()
|
||||||
return(next(nextargs))
|
return(next(nextargs))
|
||||||
})
|
})
|
||||||
window.MBCHC.remove_bce_hook = window.MBCHC.sdk.hookFunction("MainRun", 0, (nextargs, next) => {
|
window.MBCHC.remove_fbc_hook = window.MBCHC.sdk.hookFunction("MainRun", 0, (nextargs, next) => {
|
||||||
if (window.bce_ActivityTriggers) window.MBCHC.patch_bce()
|
if (window.bce_ActivityTriggers) window.MBCHC.patch_fbc()
|
||||||
return(next(nextargs))
|
return(next(nextargs))
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user