diff --git a/src/cheers/execute.ts b/src/cheers/execute.ts index fb6ed21..f21710b 100644 --- a/src/cheers/execute.ts +++ b/src/cheers/execute.ts @@ -6,6 +6,7 @@ import { timeout } from "lib/timeout"; import { createTimeoutRecord } from "db/dbTimeouts"; import { parseCheerArgs } from "lib/parseCommandArgs"; import { createCheerEventRecord } from "db/dbCheerEvents"; +import { playAlert } from "web/alerts/serverFunctions"; const ITEMNAME = 'silverbullet'; @@ -20,7 +21,12 @@ export default new Cheer('execute', 6666, async (msg, user) => { if (result.status) await Promise.all([ sendMessage(`${target.displayName} RIPBOZO RIPBOZO RIPBOZO RIPBOZO RIPBOZO RIPBOZO RIPBOZO`), createTimeoutRecord(user, target, ITEMNAME), - createCheerEventRecord(user, ITEMNAME) + createCheerEventRecord(user, ITEMNAME), + playAlert({ + name: 'userExecution', + user: user.displayName, + target: target.displayName + }) ]); else { await handleNoTarget(msg, user, ITEMNAME); diff --git a/src/cheers/grenade.ts b/src/cheers/grenade.ts index 21282c7..f6e2aa6 100644 --- a/src/cheers/grenade.ts +++ b/src/cheers/grenade.ts @@ -6,6 +6,7 @@ import { getUserRecord } from "db/dbUser"; import { createTimeoutRecord } from "db/dbTimeouts"; import { createCheerEventRecord } from "db/dbCheerEvents"; import { Cheer, handleNoTarget } from "cheers"; +import { playAlert } from "web/alerts/serverFunctions"; const ITEMNAME = 'grenade'; @@ -22,6 +23,11 @@ export default new Cheer('grenade', 99, async (msg, user) => { redis.del(selection), sendMessage(`wybuh ${target?.displayName} got hit by ${user.displayName}'s grenade wybuh`), createTimeoutRecord(user, target!, ITEMNAME), - createCheerEventRecord(user, ITEMNAME) + createCheerEventRecord(user, ITEMNAME), + playAlert({ + name: 'grenadeExplosion', + user: user.displayName, + target: target?.displayName! + }) ]); }); diff --git a/src/cheers/tnt.ts b/src/cheers/tnt.ts index fd94277..78cacc9 100644 --- a/src/cheers/tnt.ts +++ b/src/cheers/tnt.ts @@ -24,16 +24,15 @@ export default new Cheer('tnt', 1000, async (msg, user) => { redis.del(`user:${targetid}:vulnerable`), sendMessage(`wybuh ${target?.displayName} got hit by ${user.displayName}'s TNT wybuh`), createTimeoutRecord(user, target!, ITEMNAME), - createCheerEventRecord(user, ITEMNAME) + createCheerEventRecord(user, ITEMNAME), + playAlert({ + name: 'tntExplosion', + user: user.displayName, + targets + }) ]); })); - playAlert({ - name: 'tntExplosion', - user: user.displayName, - targets - }); - await sendMessage(`RIPBOZO ${user.displayName} exploded ${targets.length} chatter${targets.length === 1 ? '' : 's'} with their TNT RIPBOZO`); }); diff --git a/src/items/grenade.ts b/src/items/grenade.ts index 3ab03c7..0be5c89 100644 --- a/src/items/grenade.ts +++ b/src/items/grenade.ts @@ -6,6 +6,7 @@ import User from "user"; import { getUserRecord } from "db/dbUser"; import { createTimeoutRecord } from "db/dbTimeouts"; import { createUsedItemRecord } from "db/dbUsedItems"; +import { playAlert } from "web/alerts/serverFunctions"; const ITEMNAME = 'grenade'; @@ -30,7 +31,12 @@ export default new Item(ITEMNAME, 'Grenade', 's', sendMessage(`wybuh ${target?.displayName} got hit by ${user.displayName}'s grenade wybuh`), changeItemCount(user, userObj, ITEMNAME), createTimeoutRecord(user, target!, ITEMNAME), - createUsedItemRecord(user, ITEMNAME) + createUsedItemRecord(user, ITEMNAME), + playAlert({ + name: 'grenadeExplosion', + user: user.displayName, + target: target?.displayName! + }) ]); await user.clearLock(); } diff --git a/src/items/silverbullet.ts b/src/items/silverbullet.ts index 9b3c61a..fe95317 100644 --- a/src/items/silverbullet.ts +++ b/src/items/silverbullet.ts @@ -5,6 +5,7 @@ import { createUsedItemRecord } from "db/dbUsedItems"; import { getUserRecord } from "db/dbUser"; import parseCommandArgs from "lib/parseCommandArgs"; import { timeout } from "lib/timeout"; +import { playAlert } from "web/alerts/serverFunctions"; import User from "user"; const ITEMNAME = 'silverbullet'; @@ -28,7 +29,12 @@ export default new Item(ITEMNAME, 'Silver bullet', 's', sendMessage(`${target.displayName} RIPBOZO RIPBOZO RIPBOZO RIPBOZO RIPBOZO RIPBOZO RIPBOZO`), changeItemCount(user, userObj, ITEMNAME), createTimeoutRecord(user, target, ITEMNAME), - createUsedItemRecord(user, ITEMNAME) + createUsedItemRecord(user, ITEMNAME), + playAlert({ + name: 'userExecution', + user: user.displayName, + target: target.displayName + }) ]); else { switch (result.reason) { diff --git a/src/items/tnt.ts b/src/items/tnt.ts index 33df92c..b3c84cd 100644 --- a/src/items/tnt.ts +++ b/src/items/tnt.ts @@ -31,6 +31,11 @@ export default new Item(ITEMNAME, 'TNT', 's', redis.del(`user:${targetid}:vulnerable`), sendMessage(`wybuh ${target?.displayName} got hit by ${user.displayName}'s TNT wybuh`), createTimeoutRecord(user, target!, ITEMNAME), + playAlert({ + name: 'tntExplosion', + user: user.displayName, + targets + }) ]); })); diff --git a/src/web/alerts/www/public/explosion2.ogg b/src/web/alerts/www/public/explosion2.ogg new file mode 100644 index 0000000..199c610 Binary files /dev/null and b/src/web/alerts/www/public/explosion2.ogg differ diff --git a/src/web/alerts/www/public/explosion3.ogg b/src/web/alerts/www/public/explosion3.ogg new file mode 100644 index 0000000..32b4653 Binary files /dev/null and b/src/web/alerts/www/public/explosion3.ogg differ diff --git a/src/web/alerts/www/src/alerts/grenadeExplosion.ts b/src/web/alerts/www/src/alerts/grenadeExplosion.ts new file mode 100644 index 0000000..a0ce205 --- /dev/null +++ b/src/web/alerts/www/src/alerts/grenadeExplosion.ts @@ -0,0 +1,57 @@ +import { grenadeExplosionAlert } from "web/alerts/types"; +import { AlertRunner } from "./index"; + +const duration = 500; + +export default async function execute(alert: grenadeExplosionAlert): Promise { + const audio = new Audio("/alerts/public/explosion2.ogg"); + + const parentDiv = document.createElement('div'); + parentDiv.className = 'grenadeExplosionAlert'; + parentDiv.innerHTML = ` + + + ${alert.user} + + + ${alert.target} + + + `; + + const randomX = Math.floor(Math.random() * (window.innerWidth - 300)); + const randomY = Math.floor(Math.random() * (window.innerHeight - 300)); + + parentDiv.style.left = `${randomX}px`; + parentDiv.style.top = `${randomY}px`; + + audio.play(); + + return { blocking: false, duration, alertDiv: parentDiv }; +}; diff --git a/src/web/alerts/www/src/alerts/index.ts b/src/web/alerts/www/src/alerts/index.ts index d538b73..24dddc4 100644 --- a/src/web/alerts/www/src/alerts/index.ts +++ b/src/web/alerts/www/src/alerts/index.ts @@ -1,5 +1,7 @@ import { alert } from "web/alerts/types"; import userBlast from "./userBlast"; +import userExecution from "./userExecution"; +import grenadeExplosion from "./grenadeExplosion"; import tntExplosion from "./tntExplosion"; export type AlertRunner = { @@ -14,7 +16,7 @@ type AlertMap = { export default { 'userBlast': userBlast, - 'userExecute': userBlast, - 'grenadeExplosion': userBlast, + 'userExecution': userExecution, + 'grenadeExplosion': grenadeExplosion, 'tntExplosion': tntExplosion, } as AlertMap; diff --git a/src/web/alerts/www/src/alerts/tntExplosion.ts b/src/web/alerts/www/src/alerts/tntExplosion.ts index ebde2d2..7075bcd 100644 --- a/src/web/alerts/www/src/alerts/tntExplosion.ts +++ b/src/web/alerts/www/src/alerts/tntExplosion.ts @@ -1,9 +1,9 @@ -import { userBlastAlert } from "web/alerts/types"; +import { tntExplosionAlert } from "web/alerts/types"; import { AlertRunner } from "./index"; const duration = 1500; -export default async function execute(alert: userBlastAlert): Promise { +export default async function execute(alert: tntExplosionAlert): Promise { const parentDiv = document.createElement('div'); parentDiv.className = 'tntExplosionAlert'; parentDiv.innerHTML = ` diff --git a/src/web/alerts/www/src/alerts/userExecution.ts b/src/web/alerts/www/src/alerts/userExecution.ts new file mode 100644 index 0000000..cc12859 --- /dev/null +++ b/src/web/alerts/www/src/alerts/userExecution.ts @@ -0,0 +1,64 @@ +import { userExecutionAlert } from "web/alerts/types"; +import { AlertRunner } from "./index"; + +const duration = 3000; + +export default async function execute(alert: userExecutionAlert): Promise { + const parentDiv = document.createElement('div'); + parentDiv.className = 'userExecutionAlert'; + parentDiv.innerHTML = ` + + + ${alert.user} + + + ${alert.target} + + + `; + + const randomX = Math.floor(Math.random() * (window.innerWidth - 800)); + const randomY = Math.floor(Math.random() * (window.innerHeight - 800)); + + const audio1 = new Audio("/alerts/public/explosion1.ogg"); + const audio2 = new Audio("/alerts/public/explosion2.ogg"); + const audio3 = new Audio("/alerts/public/explosion3.ogg"); + + audio1.volume = 1.0; + audio2.volume = 1.0; + audio3.volume = 1.0; + audio1.play(); + audio2.play(); + audio3.play(); + + parentDiv.style.left = `${randomX}px`; + parentDiv.style.top = `${randomY}px`; + + return { blocking: false, duration, alertDiv: parentDiv }; +};