diff --git a/group/group_chat_urls.js b/group/group_chat_urls.js new file mode 100644 index 0000000..780e588 --- /dev/null +++ b/group/group_chat_urls.js @@ -0,0 +1,26 @@ +/* + * Group Chat URLs by Ruud + * ======================= + * + * Makes URLs posted in group chat clickable. + * I recommend just taking the important lines and + * stuffing them into the existing chat callback + * because this is awful and probably breaks existing scripts. + */ +{ + tagpro.group.socket._callbacks.chat[0] = e => { + e.message = e.message.replace(/[<>]/g, x => { + return x == '<' ? '<' : '>'; + }).replace(/((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)/g, url => { + return '' + url + ''; + }); + + // took this from the minified gobal-group.js + var t = $(".js-chat-log"); + if (e.from) + var n = $("").addClass("player-name").text(e.from + ": "); + var r = $("").html(e.message).addClass("chat-message"); + $("
").addClass("chat-line").append(n).append(r).appendTo(t), + t.scrollTop(t.get(0).scrollHeight) + }; +} \ No newline at end of file diff --git a/group/group_presets.js b/group/group_presets.js new file mode 100644 index 0000000..9841271 --- /dev/null +++ b/group/group_presets.js @@ -0,0 +1,138 @@ +/* + * Group Presets by Ruud + * ===================== + * + * Creates a select box on the private settings, allowing the + * group leader to select a predefined set of settings. + * Available presets are PUG (defined as halves in ELTP rules), + * OFM (5 mins OFM), Duel (5 mins, 3 caps, 1s player respawn duel) + * and Testing (20 mins, infinite caps, 1s respawn times). + */ +{ + tagpro.group.settings = { + defaults: { + redTeamName: "Red", + blueTeamName: "Blue", + redTeamScore: "0", + blueTeamScore: "0", + map: "", + time: "12", + caps: "3", + accel: "1", + topspeed: "1", + bounce: "1", + playerRespawnTime: "3000", + speedPadRespawnTime: "10000", + dynamiteRespawnTime: "30000", + buffRespawnTime: "60000", + buffDelay: false, + potatoTime: "0" + }, + set: (key, value) => { + tagpro.group.socket.emit('setting', {name: key, value: value}); + }, + get: key => { + switch(key) { + case 'buffDelay': + return $('input[name=buffDelay]').prop('checked'); + + case 'redTeamName': + case 'blueTeamName': + return $('input[name=' + key + ']').val(); + + case 'redTeamScore': + return $('#red-team .team-score-value').text(); + + case 'blueTeamScore': + return $('#blue-team .team-score-value').text(); + + default: + return $('select[name=' + key + ']').val(); + } + }, + apply: preset => { + console.log(preset); + for(let k in tagpro.group.settings.defaults) + tagpro.group.settings.set( + k, preset.hasOwnProperty(k) ? + preset[k] : tagpro.group.settings.defaults[k]); + }, + presets: [ + { + name: 'Default' + }, + { + name: 'Pick-Up Game', + caps: 0, + time: 10, + buffDelay: true + }, + { + name: 'Open Field Masters', + map: 'OFM', + time: 5 + }, + { + name: 'Duel', + map: 'Duel', + time: '5', + caps: '3', + playerRespawnTime: '1000' + }, + { + name: 'Testing', + time: '20', + caps: '0', + speedPadRespawnTime: '1000', + dynamiteRespawnTime: '1000', + buffRespawnTime: '1000', + playerRespawnTime: '1000' + } + ] + }; + + // DOM manipulation, you'll probably want to do this in a more convenient way if you implement this :) + let presetSelector = $('') + .attr('name','name')) + .append($('') + .attr('type','checkbox') + .attr('name','public')); + + $('.group-settings.pull-right') + .append($('