From 998e67349cbca0903931455f11e32ffa10eaf44d Mon Sep 17 00:00:00 2001 From: qwerinope Date: Fri, 21 Nov 2025 17:03:17 +0100 Subject: [PATCH] add albeees style random bullet shooting --- README.md | 4 +- src/cheers/execute.ts | 26 ++++- src/items/silverbullet.ts | 31 ++++- src/web/alerts/types.ts | 8 +- src/web/alerts/www/public/mariokartbox.ogg | Bin 0 -> 52836 bytes .../alerts/www/src/alerts/blastinRoulette.ts | 110 ++++++++++++++++++ src/web/alerts/www/src/alerts/index.ts | 4 +- 7 files changed, 173 insertions(+), 10 deletions(-) create mode 100644 src/web/alerts/www/public/mariokartbox.ogg create mode 100644 src/web/alerts/www/src/alerts/blastinRoulette.ts diff --git a/README.md b/README.md index c9713ff..06c8607 100644 --- a/README.md +++ b/README.md @@ -204,7 +204,7 @@ NAME|COMMAND|FUNCTION|ALIASES|COST -|-|-|-|- Blaster|`blaster {target}`|Times targeted user out for 60 seconds|`blaster` `blast`|100 Grenade|`grenade`|Times a random vulnerable chatter out for 60 seconds|`grenade`|99 -Silver Bullet|`silverbullet {target}`|Times targeted user out for 30 minutes|`silverbullet` `execute` `{blastin}`|666 +Silver Bullet|`silverbullet {target}`|Times targeted or random vulnerable user out for 30 minutes|`silverbullet` `execute` `{blastin}`|666 TNT|`tnt`|Give 5-10 random chatters 60 second timeouts|`tnt`|1000 ## Cheers @@ -214,7 +214,7 @@ NAME|AMOUNT|USAGE|FUNCTION `grenade`|99|`cheer99`|Times a random vulnerable chatter out for 60 seconds. Of failure gives cheerer a grenade `timeout`|100|`cheer100 {target}`|Times specified user out for 1 minute. On failure gives cheerer a blaster `superloot`|150|`cheer150`|Get superloot. Details and drop rates can be found [(here)](#lootbox). -`execute`|666|`cheer666 {target}`|Times specified user out for 30 minutes. On failure gives cheerer a silver bullet +`execute`|666|`cheer666 [target]`|Times specified or random vulnerable user out for 30 minutes. On failure gives cheerer a silver bullet `tnt`|1000|`cheer1000`|Gives 5-10 random vulnerable chatters 60 second timeouts. On failure gives cheerer a TNT ## Point Redeems diff --git a/src/cheers/execute.ts b/src/cheers/execute.ts index 2d72bfc..eda6584 100644 --- a/src/cheers/execute.ts +++ b/src/cheers/execute.ts @@ -7,13 +7,35 @@ import { createTimeoutRecord } from "db/dbTimeouts"; import { parseCheerArgs } from "lib/parseCommandArgs"; import { createCheerEventRecord } from "db/dbCheerEvents"; import { playAlert } from "web/alerts/serverFunctions"; +import { redis } from "lib/redis"; const ITEMNAME = 'silverbullet'; export default new Cheer('execute', 666, async (msg, user) => { const args = parseCheerArgs(msg.messageText); - if (!args[0]) { await handleNoTarget(msg, user, ITEMNAME, false); return; }; - const target = await User.initUsername(args[0].toLowerCase()); + + let target: User | null; + if (!args[0]) { + const vulnsids = await redis.keys('user:*:vulnerable'); + const baseusers = vulnsids.map(a => User.initUserId(a.slice(5, -11))); + const users: User[] = []; + for (const user of baseusers) { + const a = await user; + if (!a) continue; + users.push(a); + }; + if (users.length === 0) { await sendMessage('No vulnerable chatters'); await handleNoTarget(msg, user, ITEMNAME, true); return; }; + target = users[Math.floor(Math.random() * users.length)]!; + await playAlert({ + name: 'blastinRoulette', + user: user.displayName, + targets: users.map(a => a.displayName), + finaltarget: target.displayName + }); + await new Promise((res, _) => setTimeout(res, 6000)); + } else { + target = await User.initUsername(args[0].toLowerCase()); + }; if (!target) { await handleNoTarget(msg, user, ITEMNAME, false); return; }; await getUserRecord(target); diff --git a/src/items/silverbullet.ts b/src/items/silverbullet.ts index 5c13904..468e8bf 100644 --- a/src/items/silverbullet.ts +++ b/src/items/silverbullet.ts @@ -7,6 +7,7 @@ import parseCommandArgs from "lib/parseCommandArgs"; import { timeout } from "lib/timeout"; import { playAlert } from "web/alerts/serverFunctions"; import User from "user"; +import { redis } from "lib/redis"; const ITEMNAME = 'silverbullet'; @@ -20,10 +21,6 @@ export default new Item({ price: 666, execution: async (msg, user, specialargs) => { const messagequery = parseCommandArgs(msg.messageText, specialargs?.activation); - if (!messagequery[0]) { await sendMessage('Please specify a target'); return; }; - const target = await User.initUsername(messagequery[0].toLowerCase()); - if (!target) { await sendMessage(`${messagequery[0]} doesn't exist`); return; }; - await getUserRecord(target); // make sure the user record exist in the database if (await user.itemLock()) { await sendMessage('Cannot use an item (itemlock)', msg.messageId); return; }; await user.setLock(); @@ -31,6 +28,32 @@ export default new Item({ const userObj = await getUserRecord(user); if (userObj.inventory[ITEMNAME]! < 1) { await sendMessage(`You don't have any silver bullets!`, msg.messageId); await user.clearLock(); return; }; + let target: User | null; + if (!messagequery[0]) { + const vulnsids = await redis.keys('user:*:vulnerable'); + const baseusers = vulnsids.map(a => User.initUserId(a.slice(5, -11))); + const users: User[] = []; + for (const user of baseusers) { + const a = await user; + if (!a) continue; + users.push(a); + }; + if (users.length === 0) { await user.clearLock(); await sendMessage('No vulnerable chatters', msg.messageId); return; }; + target = users[Math.floor(Math.random() * users.length)]!; + await playAlert({ + name: 'blastinRoulette', + user: user.displayName, + targets: users.map(a => a.displayName), + finaltarget: target.displayName + }); + await new Promise((res, _) => setTimeout(res, 6000)); + } else { + target = await User.initUsername(messagequery[0].toLowerCase()); + }; + if (!target) { await user.clearLock(); await sendMessage(`${messagequery[0]} doesn't exist`); return; }; + + await getUserRecord(target); // make sure the user record exist in the database + const result = await timeout(target, `You got blasted by ${user.displayName}!`, 60 * 30); if (result.status) await Promise.all([ sendMessage(`KEKPOINT KEKPOINT KEKPOINT ${target.displayName.toUpperCase()} RIPBOZO RIPBOZO RIPBOZO RIPBOZO RIPBOZO RIPBOZO RIPBOZO`), diff --git a/src/web/alerts/types.ts b/src/web/alerts/types.ts index d9e55d1..c14e2cd 100644 --- a/src/web/alerts/types.ts +++ b/src/web/alerts/types.ts @@ -27,12 +27,18 @@ export type soundAlert = alertBase<'sound'> & { sound: soundAlerts; }; +export type blastinRoulette = alertBase<'blastinRoulette'> & { + targets: string[]; + finaltarget?: string; +}; + export type alert = | userBlastAlert | userExecutionAlert | grenadeExplosionAlert | tntExplosionAlert - | soundAlert; + | soundAlert + | blastinRoulette; type playAlertEvent = { function: 'playAlert'; diff --git a/src/web/alerts/www/public/mariokartbox.ogg b/src/web/alerts/www/public/mariokartbox.ogg new file mode 100644 index 0000000000000000000000000000000000000000..422d0f7dec3b5c0198edf17dd24825949f5455cf GIT binary patch literal 52836 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 literal 0 HcmV?d00001 diff --git a/src/web/alerts/www/src/alerts/blastinRoulette.ts b/src/web/alerts/www/src/alerts/blastinRoulette.ts new file mode 100644 index 0000000..5963ccf --- /dev/null +++ b/src/web/alerts/www/src/alerts/blastinRoulette.ts @@ -0,0 +1,110 @@ +import { blastinRoulette } from "web/alerts/types"; + +function easeOutQuad(t: number) { + return t * (2 - t); +} + +export default async function execute(alert: blastinRoulette) { + const audio = new Audio("/alerts/public/mariokartbox.ogg"); + audio.play(); + const div = document.createElement('div'); + div.classList.add('blastin-roulette'); + + const words = (alert.targets && alert.targets.length) ? alert.targets.slice() : ["..."]; + + // how to center a div + div.style.position = 'fixed'; + div.style.top = '50%'; + div.style.left = '50%'; + div.style.transform = 'translate(-50%, -50%)'; + div.style.display = 'flex'; + div.style.alignItems = 'center'; + div.style.justifyContent = 'center'; + + const text = document.createElement('span'); + text.style.fontFamily = '"Jersey 15"'; + text.style.fontSize = '6rem'; + text.style.fontWeight = '700'; + text.style.lineHeight = '1'; + text.style.textAlign = 'center'; + div.appendChild(text); + + // animation parameters + const totalDuration = 4000; // 4 sec + const finalHold = 2000; // hold final word for 2 sec + const steps = 60; // how many changes before settling + + let lastPick = ''; + let chosenFinal: string | undefined; + for (let i = 0; i < steps; i++) { + const t = i / (steps - 1); + const when = Math.round(easeOutQuad(t) * totalDuration); + setTimeout(() => { + if (i === steps - 1) { + // If a finaltarget was provided, use it as the final word + let pick: string; + if (alert.finaltarget) pick = alert.finaltarget + else { + pick = words[Math.floor(Math.random() * words.length)]; + let attempts = 0; + while (pick === lastPick && attempts < 10 && words.length > 1) { + pick = words[Math.floor(Math.random() * words.length)]; + attempts++; + }; + }; + text.textContent = pick; + lastPick = pick; + chosenFinal = pick; + + // brief flicker effect: toggle opacity a few times + const flickerTimes = 6; + const flickerInterval = 80; // ms + // ensure opacity starts at 1 + text.style.opacity = '1'; + for (let k = 0; k < flickerTimes; k++) { + setTimeout(() => { + text.style.opacity = (k % 2 === 0) ? '0' : '1'; + }, k * flickerInterval); + }; + // ensure fully visible after flicker + setTimeout(() => { text.style.opacity = '1'; }, flickerTimes * flickerInterval); + } else { + // pick a random word different from the previous shown + let pick = words[Math.floor(Math.random() * words.length)]; + let attempts = 0; + // Avoid showing the same word as lastPick + while (pick === lastPick && attempts < 10 && words.length > 1) { + pick = words[Math.floor(Math.random() * words.length)]; + attempts++; + }; + // If the next step is the final and a finaltarget is provided, ensure the penultimate isn't equal to it + if (i === steps - 2 && alert.finaltarget && pick === alert.finaltarget && words.length > 1) { + attempts = 0; + let fallback = words[Math.floor(Math.random() * words.length)]; + while ((fallback === pick || fallback === alert.finaltarget) && attempts < 10 && words.length > 1) { + fallback = words[Math.floor(Math.random() * words.length)]; + attempts++; + }; + pick = fallback; + }; + + text.textContent = pick; + lastPick = pick; + }; + }, when); + }; + + // resolve the completion promise after the final hold + setTimeout(() => { + // chosenFinal should be set by the final step; if not, pick one now + if (!chosenFinal) { + if (alert.finaltarget) chosenFinal = alert.finaltarget as string; + else chosenFinal = words[Math.floor(Math.random() * words.length)]; + } + }, totalDuration + finalHold); + + // total time manager should wait/remove + const duration = totalDuration + finalHold; + + return { duration, alertDiv: div, blocking: true }; +}; diff --git a/src/web/alerts/www/src/alerts/index.ts b/src/web/alerts/www/src/alerts/index.ts index c17e720..fac8cb9 100644 --- a/src/web/alerts/www/src/alerts/index.ts +++ b/src/web/alerts/www/src/alerts/index.ts @@ -4,6 +4,7 @@ import userExecution from "./userExecution"; import grenadeExplosion from "./grenadeExplosion"; import tntExplosion from "./tntExplosion"; import sound from "./sound"; +import blastinRoulette from "./blastinRoulette"; export type AlertRunner = { duration: number; @@ -20,5 +21,6 @@ export default { 'userExecution': userExecution, 'grenadeExplosion': grenadeExplosion, 'tntExplosion': tntExplosion, - 'sound': sound + 'sound': sound, + 'blastinRoulette': blastinRoulette } as AlertMap;