Professional Documents
Culture Documents
Untitled
Untitled
"redSpawnPoints": [],
"blueSpawnPoints": [],
"canBeStored": false
}
`
let administrators = [
/*tomo*/ { Auth: "s5_6hQ7l6hut8DF_TaGBRlroFZiuEbYrmo-hXD-iQ5M", Conn:
"3138312E32332E3233322E3635" },
/*tomo*/ { Auth: "HykesTSRmRFxrvk4AfD6dqvNFqRAjqeyAKHFFSgQ08U", Conn:
"3138312E32332E3233322E3635" },
/*bene*/ { Auth: "YVg4REEXFhmLh3tkHMbo2YWHoBYwewFlPlYIRm3g-YE", Conn:
"3138312E34362E36382E323036" },
/*s*/ { Auth: "5Xr4pjaGo5czHnyoXO48jqVqLslkf3JJp3XjkEWTiO4", Conn:
"3136372E35382E38362E323035" },
/*bebe*/ { Auth: "aSMVRMTdiK5erhjAf-gKXW4xqhjr3lUu9KS78qAUHfE", Conn:
"3138362E31392E3136382E323531" },
/*asu*/ { Auth: "rLagTdTIuUhbV1JCLo1vicS3ZmTXo8gLQuJ2xFwBqRA", Conn:
"3138362E3132382E3135362E313136" },
/*sx*/ { Auth: "8CXm-Lw3aMyQxARoxGup0qRG_Yr6hkFafAO8U3mckZI", Conn:
"3138312E34362E35372E3536" },
];
/* CONFIGURATIONS */
let timeLimit = 180;
let slowPlayerSpeed = 0.975
let speedsterSpeed = 1.04
let smallRadius = 11;
let bigRadius = 26;
let fastPlayerSpeed = 1.014
let invMassWeak = 0.8
let standardInvMass = 1.5
let invMassStrong = 2.5;
let invMassStrongFairy = 2.2;
let bouncerTime = 1000;
let precisionTime = 1000;
let speedTime = 450;
let pufferRadio = 40;
let constant = 8;
let rubberAmount = 7;
let bounceCoeff = 0.85
let topSpeed = 3;
let lastPlayerTouched = [null, null];
let fairyBuffRadius = 190
let freezeBuffRadius = 40
let disabledList = [811];
let freezedPlayerSpeed = 0.975
let fullMotivatedSpeed = 1.01
let fairySize = 17;
let invisibleRadius = 150;
let fairySizeIncrease = 2;
let freezeSizeDecrease = 6;
let statusEffects = ['fairyBuff']
function discordPromote() {
room.sendAnnouncement('Te está gustando el host? 🤔 Unite a nuestro discord -
> https://discord.gg/H74GvqtEq6', null, '0xFFC0CB', "bold", 2)
}
resetMotivation();
resetTouchers();
setPlayerSizes();
gameRunning = true;
}
room.onPositionsReset = function () {
playerIsDumb();
}
function errorPrevention() {
playerPowerups = playerPowerups.filter(powerup =>
room.getPlayerList().find(player => player.id === powerup.id)
);
}
function resetMotivation() {
let motivationPower = playerPowerups.find(plyp => plyp.power == 9);
if (motivationPower) {
motivationPower.motivationLevel = 0;
}
}
function resetTouchers() {
lastPlayerTouched = [null, null]
}
room.setTimeLimit((timeLimit / 60));
function getLink() {
return
document.querySelector('iframe').contentWindow.document.getElementById('roomlink').
innerText.split('Room Link:')[1]
}
if (command == '!discord') {
room.sendAnnouncement('https://discord.gg/H74GvqtEq6', null,
'0x00FF00', "normal", 1)
}
if (command == '!test') {
discordMessage();
}
if (command == '!dc') {
room.sendAnnouncement('https://discord.gg/H74GvqtEq6', null,
'0x00FF00', "normal", 1)
}
if (command == "!help") {
room.sendAnnouncement('!skills para ver las habilidades, !select
[numero] para seleccionar.', null, '0x00FF00', "normal", 1)
room.sendAnnouncement('Hecho con amor por tomo -> discord:
https://discord.gg/H74GvqtEq6', null, '0x00FF00', "normal", 1)
return
}
if (command == "!skills") {
room.sendAnnouncement('[1] Velocista ⚡️ - El jugador se mueve mas rapido
después de patear la pelota por unos segundos', player.id, '0x00FF00', "normal", 2)
room.sendAnnouncement('[2] Tanque 🐢 - El jugador le pega mas fuerte a
la pelota, pero es mas lento', player.id, '0x00FF00', "normal", 0)
room.sendAnnouncement('[3] Preciso 🎯 - La pelota se hace mas pequeña
por un segundo después de ser pateada', player.id, '0x00FF00', "normal", 0)
room.sendAnnouncement('[4] Rebote 🏀 - La pelota rebota mas por un
segundo después de ser pateada', player.id, '0x00FF00', "normal", 0)
room.sendAnnouncement('[5] Fantasmal 👻 - El jugador pierde las
colisiones', player.id, '0x00FF00', "normal", 2)
room.sendAnnouncement('[6] Hada 🧚 - Otorga una bonificación de fuerza y
potencia de tiro a los jugadores cercanos', player.id, '0x00FF00', "normal", 0)
room.sendAnnouncement('[7] Pufferfish 🐡 - El jugador se vuelve mucho
mas grande por un breve momento después de patear', player.id, '0x00FF00',
"normal", 0)
room.sendAnnouncement('[8] Rubberboy 🎈 - La pelota rebota en vos a
grandes velocidades', player.id, '0x00FF00', "normal", 0)
room.sendAnnouncement('[9] Motivado 🔥 - La potencia de tiro aumenta en
función de la cantidad de goles que hayas hecho', player.id, '0x00FF00', "normal",
0)
room.sendAnnouncement('[10] Profético 🪬 - Si en 3 minutos de partida no
hay goles, gana la partida automaticamente. El jugador va aumentando de tamaño
progresivamente', player.id, '0x00FF00', "normal", 0)
room.sendAnnouncement('[11] Titiritero 🎭 - Crea una sombra en la
posición opuesta de la cancha que intercambia posiciones con vos al tocar el
balón', player.id, '0x00FF00', "normal", 0)
room.sendAnnouncement('[12] Warper 🌀 - La pelota puede
teletransportarse por el mapa luego de ser pateada', player.id, '0x00FF00',
"normal", 0)
room.sendAnnouncement('PARA SELECCIONAR ESCRIBE !select [numero de la
skill] ', player.id, '0x00FF00', "normal", 2)
return
}
if (command == '!removepower') {
removePower(selection)
}
if (command == '!resetball') {
resetBall(player);
}
if (command == "!select") {
if (!selection) {
room.sendAnnouncement('@' + player.name + ', lo estás escribiendo
mal -> !select [numero] (Ejemplo: !select 3)', player.id, '0x00FF00', "normal", 2)
return
}
if (disabledList.includes(parseInt(selection))) {
room.sendAnnouncement('Esta habilidad está deshabilitada
temporalmente 😔', player.id, '0x00FF00', "normal", 2)
return;
}
if (!player.team || !gameRunning) {
room.sendAnnouncement('Solo puedes seleccionar mientras estés en
la cancha', player.id, '0x00FF00', "normal", 2)
return
}
if (selection == 2) {
room.setPlayerDiscProperties(player.id, { radius: bigRadius })
}
if (selection == 6) {
room.setPlayerDiscProperties(player.id, { radius: smallRadius })
}
if (selection == 8) {
setRubber(player)
}
statusEffects.forEach(status => {
playerPowerups = playerPowerups.filter(powerups => powerups.power
!= status)
})
if (selection == 9) {
powerupObject.motivationLevel = 0;
}
playerPowerups.push(powerupObject)
log(player.name + ' with id ' + player.id + ' has selected ' +
selection)
room.sendAnnouncement(player.name + ' seleccionó la habilidad ' +
powers[parseInt(selection) - 1], null, '0x00FF00', "normal", 2)
return
}
function say(message) {
return room.sendAnnouncement('Admin: ' + message, null, '0x00FF00', "bold",
2)
}
function log(e) {
if (debugMode) {
log('[DEBUG]' + e)
}
}
function list() {
console.log(room.getPlayerList())
}
function removePower(player) {
log(player)
let id = room.getPlayerList().find(p => (p.name).trim() == player).id
if (id) {
playerPowerups.splice(playerPowerups.findIndex(pp => pp.id == id), 1)
room.setPlayerAvatar(id, '❌')
room.sendAnnouncement('Un administrador te ha quitado la habilidad, por
favor selecciona de nuevo', id, '0x00FF00', "normal", 2)
}
}
if (banned.includes(player.name.toLowerCase()) ||
authban.includes(player.auth)) {
room.kickPlayer(player.id, ' :) ', true);
log(player.name + ' was banned ')
return
}
room.setPlayerAvatar(player.id, "❌")
greetPlayer(player)
updateAdmins(); // Gives admin to the first player who join the room if
there's no one
checkAdminRights(player)
}
room.onGameTick = function () {
handlePuppets();
errorPrevention();
getCurrentPosession();
profecyLogic();
setPlayerSizes();
manageGhosts();
handleFairyAura();
handleBallColor();
handleWarp();
rubberPlayers.forEach(player => {
setRubber(player);
})
/* FUNCTIONS */
function setWarp() {
if (warpBall) {
return
}
warpBall = true;
setTimeout(() => {
warpBall = false;
}, warpTime)
}
function handleWarp() {
if (!warpBall) {
return
}
if (shouldWarpY || shouldWarpX) {
warpBall = false;
clearInterval(interval);
room.setDiscProperties(0, { x: room.getDiscProperties(0).x, y: -
room.getDiscProperties(0).y })
}
function handleDribble() {
dribblerPlayers.forEach(dribblerPlayer => {
})
function handleInvisible() {
invisiblePlayers.forEach(invisiblePlayer => {
})
function handleBallColor() {
let ballProps = room.getDiscProperties(0)
let ballPosition = { x: ballProps.x, y: ballProps.y }
if (isTelekinetic) {
room.setDiscProperties(0, { color: '0x808080' })
return
}
if (anyFairyInRange) {
room.setDiscProperties(0, { color: '0xff0080' })
return
}
else {
room.setDiscProperties(0, { color: '0xFFCC00' })
}
}
function handleFairyAura() {
let fairyPlayers = playerPowerups.filter(player => player.power == 6 &&
isPlayerActive(player))
fairyPlayers.forEach(fairyPlayer => {
})
}
function playerIsDumb() {
let playerList = room.getPlayerList();
playerList.forEach(player => {
if (!playerPowerups.find(ply => ply.id == player.id)) {
room.sendAnnouncement('Parece que todavía no seleccionaste
ninguna habilidad 🤔. (Si necesitás ayuda usá el comando !help)', player.id,
'0x00FF00', "normal", 2)
}
})
}
function updateAdmins() {
// Get all players except the host (id = 0 is always the host)
var players = room.getPlayerList().filter((player) => player.id != 0);
if (players.length == 0) return; // No players left, do nothing.
if (players.find((player) => player.admin) != null) return; // There's an
admin left so do nothing.
room.setPlayerAdmin(players[0].id, true); // Give admin to the first non
admin player in the list
}
function setMotivationLevel(team) {
lastPlayerTouched.forEach(ply => {
if (ply?.team == team) {
let motivationPower = playerPowerups.find(plyp => plyp.id ==
ply.id && plyp.power == 9);
if (motivationPower) {
motivationPower.motivationLevel = +
+motivationPower.motivationLevel;
log("- Motivation up " + ply.id)
if (motivationPower.motivationLevel == 1) {
room.sendAnnouncement(ply.name + ' solo está
comenzando. Su potencia de tiro ha aumentado. 🔥');
}
if (motivationPower.motivationLevel == 2) {
room.sendAnnouncement(ply.name + ' ha alcanzado su
máximo poder. Suerte al otro equipo. 🔥');
}
}
}
})
}
function anyPlayerWithBounce() {
return room.getPlayerList().find(player => playerHasPower(player, 8) &&
player.team != 0);
}
function anyPlayerWithProfecy() {
return room.getPlayerList().find(player => playerHasPower(player, 10) &&
player.team != 0);
}
function isPlayerActive(player) {
return room.getPlayerList().find(ply => ply.team != 0 && player.id ==
ply.id);
}
function handlePuppets() {
let puppeteerPlayers = playerPowerups.filter(player => player.power == 11 &&
isPlayerActive(player));
function playersOfTeam(team) {
return room.getPlayerList().filter(player => player.team == team)
}
function manageGhosts() {
let ghostPlayers = playerPowerups.filter(player => player.power == 5 &&
isPlayerActive(player))
function profecyLogic() {
let scores = room.getScores();
if (playerWithProfecy.team == 2) {
//blue goal
room.setDiscProperties(0, { x: -550, y: 0, xspeed: -20 })
room.setDiscProperties(0, { x: -550, y: 0, xspeed: -20 })
}
if (playerWithProfecy.team == 1) {
//red goal
room.setDiscProperties(0, { x: 550, y: 0, xspeed: 20 })
room.setDiscProperties(0, { x: 550, y: 0, xspeed: 20 })
}
profecyfulfilled = true;
}
}
function setBallPowerup(player) {
if (playerHasPower(player, 1)) {
log("speedster triggered ", player)
setSpeedster(player)
}
let gravity = 0;
if(player.position.y > 0){
gravity = 0.1;
}
if(player.position.y < 0){
gravity = -0.1;
}
function setTelekinesis(player) {
isTelekinetic = true;
setTimeout(() => {
let pl = room.getPlayerDiscProperties(player.id)
if (Math.abs(pl.xspeed) > 0.1 || Math.abs(pl.yspeed) > 0.1) {
room.setDiscProperties(0, { xspeed: pl.xspeed * 3, yspeed:
pl.yspeed * 3 })
}
isTelekinetic = false;
}, 650)
}
function setRubber(player) {
room.setPlayerDiscProperties(player.id, { bCoeff: rubberAmount })
}
function getPlayerProps(playerId) {
return room.getPlayerDiscProperties(playerId)
}
function setBouncer() {
room.setDiscProperties(0, { bCoeff: 0.7 })
setTimeout(() => {
room.setDiscProperties(0, { bCoeff: 0.4 })
}, bouncerTime)
}
function setPrecision() {
room.setDiscProperties(0, { radius: 4 })
setTimeout(() => {
room.setDiscProperties(0, { radius: 6.25 })
}, precisionTime)
}
function setSpeedster(player) {
let pushed = { id: player.id, power: 1 };
activePowerups.push(pushed);
setTimeout(() => {
activePowerups.splice(activePowerups.indexOf(pushed), 1)
}, speedTime)
}
function resetBall(byPlayer) {
if (byPlayer.admin) {
room.setDiscProperties(0, { x: 0, y: 0 })
}
}
function setPuffer(player) {
room.setPlayerDiscProperties(player.id, { radius: pufferRadio })
setTimeout(() => {
room.setPlayerDiscProperties(player.id, { radius: 15 })
}, bouncerTime)
}
function setPlayerSizes() {
function greetPlayer(player) {
room.sendAnnouncement("(っ ◔◡◔)っ 𝘉𝘪𝘦𝘯𝘷𝘦𝘯𝘪𝘥𝘰 ", player.id, '0x00FF00',
"normal", 1)
room.sendAnnouncement('!skills para ver las habilidades, !select [numero]
para seleccionar.', player.id, '0x00FF00', "normal", 1)
room.sendAnnouncement('Hecho por tomo -> tomo#0870', player.id, '0x00FF00',
"normal", 1)
}
function checkAdminRights(player) {
if (isAuthorized(player)) {
room.setPlayerAdmin(player.id, true)
}
}
function isAuthorized(player) {
return administrators.findIndex(a => a.Auth == player.auth || a.Conn ==
player.Conn) !== -1;
}
function getPlayerRadius(player) {
if (playerHasPower(player, 6)) {
radius = smallRadius;
}
if (playerHasPower(player, 10)) {
let scores = room.getScores()
let maxSize = 28;
let currentSize = Math.trunc(scores.time) / 14 + 15
radius = currentSize > maxSize ? maxSize : currentSize ;
}
if (playerHasPower(player, 2)) {
radius = bigRadius;
}
if (playerHasPower(player, 'fairyBuff')) {
radius = radius + fairySizeIncrease;
}
if (playerHasPower(player, 'freezed')) {
radius = radius - freezeSizeDecrease;
}
return radius;
}
function calculateSniperPotency(player) {
// Determine the maximum value based on the `isPositiveMax` parameter
const maxNum = player.team == 2 ? 500 : -500;
const num = player.position.x
// Adjust the input to get a value between 0 and 1
const adjustedNum = num / maxNum;
return adjustedSinValue;
}
function getCurrentPosession() {
let ballPosition = room.getBallPosition();
let players = room.getPlayerList();
room.setDiscProperties(0, { invMass: standardInvMass })
for (let i = 0; i < players.length; i++) {
if (players[i].position != null) {
let distanceToBall = pointDistance(players[i].position,
ballPosition);
if (distanceToBall <= (6.25 + getPlayerRadius(players[i]) +
constant)) {
setLastPlayerTouched(players[i])
if (playerHasPower(players[i], 2) &&
playerHasPower(players[i], 'fairyBuff')) {
room.setDiscProperties(0, { invMass: 3 })
return
}
else if (playerHasPower(players[i], 2)) {
room.setDiscProperties(0, { invMass: invMassStrong })
}
else if (playerHasPower(players[i], 12)) {
room.setDiscProperties(0, { invMass: invMassWeak })
}
}
}
}
function setLastPlayerTouched(player) {
if (lastPlayerTouched[0]?.id != player.id) {
lastPlayerTouched = [player, lastPlayerTouched[0]]
}