'));
var $commands_tbody = $('').appendTo($commands_table);
var cmdTotal = 0;
function updateCommand(id) {
//console.log("Update on line: " + id);
mrpCommands[id].alias = $("#mrp_alias_input_" + id).val();
mrpCommands[id].name = $("#mrp_name_input_" + id).val();
mrpCommands[id].color = $("#mrp_color_input_" + id).val();
mrpCommands[id].bold = $("#mrp_bold_input_" + id).attr("checked") == "checked" ? true : false;
mrpCommands[id].rp = $("#mrp_rp_input_" + id).attr("checked") == "checked" ? true : false;
//console.log(mrpCommands[id]);
GM_setValue("DCCE_MRP", JSON.stringify(mrpCommands));
}
//Fonction pour générer une ligne au tableau
//cmd {alias:"str", name:"str", color:"#008000", bold:false, rp:true}
function drawCommand(cmd, id) {
let $row = $('
').appendTo($commands_tbody);
$row.addClass("loaded_item");
let $alias_td = $('
').appendTo($row);
let $name_td = $('
').appendTo($row);
let $color_td = $('
').appendTo($row);
let $bold_td = $('
').appendTo($row);
let $rp_td = $('
').appendTo($row);
$alias_td.children("input").keyup(function(){updateCommand(id)});
$name_td.children("input").keyup(function(){updateCommand(id)});
$color_td.children("input").change(function(){updateCommand(id)});
$bold_td.children("input").change(function(){updateCommand(id)});
$rp_td.children("input").change(function(){updateCommand(id)});
}
for (let j = 0; j < mrpCommands.length; j++) {
$commands_tbody.append(drawCommand(mrpCommands[j], j));
}
var $mrp_container = $('').appendTo($clrconfig);
var $mrp_remove = $('').click(function(){
if (mrpCommands.length > 3) {
mrpCommands.pop();
GM_setValue("DCCE_MRP", JSON.stringify(mrpCommands));
$("#cmd_row_" + mrpCommands.length).remove();
}
}).appendTo($mrp_container);
var $mrp_add = $('').click(function(){
drawCommand({alias:"", name:"", color:"#FFFFFF", bold:false, rp:false}, mrpCommands.length);
stylizeTableCells();
mrpCommands.push({alias:"", name:"", color:"#FFFFFF", bold:false, rp:false});
GM_setValue("DCCE_MRP", JSON.stringify(mrpCommands));
}).appendTo($mrp_container);
//Css des éléments du tableau
function stylizeTableCells() {
$commands_table.find('td').css({
border: '1px solid white',
height: '15px'
});
}
stylizeTableCells();
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//FIN Constructeur de fenêtre de configuration
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//---------------------------------------------------
//Ajout d'un item au menu bandeau "Paramètres" de DC
//---------------------------------------------------
var $params_menu = $('.menus > .parametres > ul');
var $dcce_config = $('').appendTo($params_menu);
$dcce_config.text("Configuration du Chat");
$dcce_config.addClass('link couleur2 separator');
$dcce_config.click(function () {
//Fermeture des autres instances de paramétrage ouvertes
engine.closeDataBox('dcce_configwindow');
var $config_window = new DCCE_ConfigurationWindow();
$databox.append($config_window.$window);
});
//**********************************************
// FIN INTERFACE DE CONFIGURATION UTILISATEUR
//**********************************************
//**********************************************
// DEBUT MAIN
//**********************************************
//Compte les charactères façon DreadCast: 7 bits = 1 char, 8-11 bits = 2 chars, 12-16 bits = 3 chars
function chatCharCount(str) {
if (!str) return 0;
return str.split("").map(a => a.charCodeAt(0).toString(2).length >= 12 ? 3 : a.charCodeAt(0).toString(2).length >= 8 ? 2 : 1).reduce((a, b) => a + b);
}
//ALERTCHAT, Script d'Odul
(function() {
var imgUnmute = 'url(http://i.imgur.com/uvIB44X.png)';
var imgMute = 'url(http://i.imgur.com/8oV9IrJ.png)';
var audio = document.createElement('audio');
audio.id='checkchat';
document.body.appendChild(audio);
$('#checkchat').attr('src', alertChatAudioURL);
$("#checkchat").css("display","none");
$('').prependTo($('#bandeau ul.menus'));
var End = $('
').prependTo($('#bandeau ul.menus'));
End.attr("id", 'endAudiocheckchat');
End.css({
left: '5px',
height: '30px',
"z-index": '999999',
"background-size": '29px 15px',
"background-repeat": 'no-repeat',
"background-position-y": '6px',
color: '#999'
});
End.text("AC").addClass('link');
End.hover(
function(){
$(this).css("color", "#0073d5");
},
function(){
var colorAC = (activateAlertChat) ? "#999" : "#D00000";
$(this).css("color", colorAC);
}
);
End.click(function() {
activateAlertChat = (activateAlertChat) ? false : true;
GM_setValue("DCCE_activateAlertChat", activateAlertChat);
document.getElementById('endAudiocheckchat').style.backgroundImage = (activateAlertChat) ? imgUnmute : imgMute;
//document.getElementById('checkchat').volume = (activateAlertChat) ? 1 : 0;
document.getElementById('checkchat').volume = (activateAlertChat) ? alertVolume : 0;
var colorAC = (activateAlertChat) ? "#999" : "#D00000";
End.css("color", colorAC);
});
//Initialisation depuis le stockage local
document.getElementById('endAudiocheckchat').style.backgroundImage = (activateAlertChat) ? imgUnmute : imgMute;
//document.getElementById('checkchat').volume = (activateAlertChat) ? 1 : 0;
document.getElementById('checkchat').volume = (activateAlertChat) ? alertVolume : 0;
var colorAC = (activateAlertChat) ? "#999" : "#D00000";
End.css("color", colorAC);
})();
//MatriceRP
//Par Isilin
const FORBIDDEN_ALIASES = ["me", "y", "ye", "yme", "w", "we", "wme", "roll", ""];
function tagMessage(inputStr) {
let message = inputStr;
let aliasUsed = inputStr.split(" ")[0].substr(1);
if (message[0] !== "/") return message; //Vérifier avant tout que l'utilisateur veut rentrer une commande...
if (FORBIDDEN_ALIASES.indexOf(aliasUsed) > -1) return message; //On ne modifie pas le message si l'alias utilisé est une commande du jeu ou un alias invalide
let command = mrpCommands.find(cmd => cmd.alias.toLowerCase() === aliasUsed.toLowerCase()); //On récupère les paramètres de la commande à partir de son alias (vérification non sensible à la casse)
if (command === undefined) return message; //On ne modifie pas le message si l'alias utilisé n'est pas défini
if (message.length <= command.alias.length + 2) return ""; //On vide le message si un alias est utilisé seul ou avec un espace sans texte
message = (command.rp ? "/me " : "")
//+ "[b][c=" + command.color.substr(1) + "]{" + command.name + "}[/c][/b]"
+ "[b]{" + command.name + "}[/b]"
+ (command.bold ? "[b]" : "")
+ "[c=" + command.color.substr(1) + "]" + message.substr(command.alias.length + 1) + "[/c]"
+ (command.bold ? "[/b]" : "");
return message;
}
//AmeliorationTchat2.0
//Par Odul
var $chatInput = $("#chatForm .text_chat");
function beautifyMessage(inputStr) {
let message = inputStr;
if (/^\/me/i.test(message)) {
message = "/me" + message.substr(3); //Transforme /Me en /me pour que la casse soit respectée et que le chat ressorte bien une emote.
message = message.replace(/"([^\"]+)"/gi, "[c=FFFFFF]$1[/c]");
} else {
message = message.replace(/\*([^\*]+)\*/gi, "[c=58DCF9][i]$1[/i][/c]");
}
return message;
}
//Override honteux du code de base de DC
MenuChat.prototype.send = function() {
if (nav.getChat().kw("chatForm")) {
if ("" == $("#chatForm input.text_chat").val())
return !1;
this.checkConversation();
if ($("#chatForm input.text_chat").val().split("").map(a => a.charCodeAt(0).toString(2).length >= 12 ? 3 : a.charCodeAt(0).toString(2).length >= 8 ? 2 : 1).reduce((a, b) => a + b) >= (0 == this.currentMode ? 200 : 196)) return !1; //La seule chose ajoutée par l'override: refuser d'envoyer le message si trop long! :)
1 == this.currentMode ? $("#chatForm input.text_chat").val("/we " + $("#chatForm input.text_chat").val()) : 2 == this.currentMode && $("#chatForm input.text_chat").val("/ye " + $("#chatForm input.text_chat").val());
engine.submitForm("Menu/Chat/default=Send&etat=2&room=" + this.getRoom(!0), "chatForm", this.update, !0),
6 == evolution.currentPoint && evolution.unlock(3)
}
}
//Applique les scripts AmeliorationTchat2.0 et MatriceRP au moment de poster le message
var isMessageLocked = false;
function ameliorInput() {
if (!isMessageLocked) {
isMessageLocked = true;
let ogMessage = $chatInput.val(); //Message avant modifications
let finalMessage = tagMessage(beautifyMessage(ogMessage)); //Message balisé, prêt à envoyer
$chatInput.val(finalMessage);
//Si le message était trop long pour être envoyé, on attend le refus de la fonction overridée, puis on débalise le message
let ml = $("#chatForm > .text_mode").text() == "N" ? 199 : 195;
if (chatCharCount(finalMessage) >= ml) {
console.log("Resetting message");
setTimeout(function(){
$chatInput.val(ogMessage);
isMessageLocked = false;
}, 2);
} else {
setTimeout(function(){ isMessageLocked = false; }, 2);
}
}
}
function verifyKeyPressed(e) {
if (e.keyCode==13) {
ameliorInput();
}
}
$("#chatForm .text_chat").keypress(verifyKeyPressed);
$("#chatForm .text_valider").click(ameliorInput);
//HIGHLIGHT CHAT LIMIT
//Code de Ladoria, modifications de débugging et implémentation au script.
function HighlightChatLimit() {
var limitColor = 'red', //Couleurs pour chaque pallier de longueur
alertColor = 'orange',
warningColor = 'yellow',
limitLength = 199, //Palliers de longueur
alertLength = 170,
warningLength = 135;
var c1 = $("#chatForm").css('border-color'); //CSS original de la box
var c2 = $("#chatForm .text_mode").css('border-color');
var c3 = $("#chatForm .text_valider").css('background-color');
var c4 = $("#chatForm").css('box-shadow');
var animateChatInput = function(e) {
var processedInput = tagMessage(beautifyMessage($("#chatForm .text_chat").val()));
var len = chatCharCount(processedInput);
console.log(processedInput.length, chatCharCount(processedInput));
let maxLength = $("#chatForm > .text_mode").text() == "N" ? 199 : 195; //Longueur max = 199, sauf si le chat est en mode chuchotement ou cri
if (len >= maxLength) {
highlight(limitColor); // limit reached
$("#chatForm .text_chat").attr("maxlength", $("#chatForm .text_chat").val().length); //On bloque pour que le joueur arrête d'écrire
}
else if (len >= alertLength) {
highlight(alertColor); // approach limit
$("#chatForm .text_chat").attr("maxlength", maxLength);
}
else if (len >= warningLength) {
highlight(warningColor); // first warning
$("#chatForm .text_chat").attr("maxlength", maxLength);
}
else {
originalHighlight(c1, c2, c3, c4); // far away from limit
$("#chatForm .text_chat").attr("maxlength", maxLength);
}
};
function originalHighlight(formBorderColor, modeBorderColor, bgColor, bsSettings) {
$("#chatForm").css('border-color', formBorderColor);
$("#chatForm .text_mode").css('border-color', modeBorderColor);
$("#chatForm .text_valider").css('background-color', bgColor);
$("#chatForm").css('box-shadow', bsSettings);
}
function highlight(color) {
originalHighlight(color, color, color, '0px 0px 3px 2px ' + color);
}
$("#chatForm .text_chat").attr("maxlength", "199");
$("#chatForm .text_chat").keyup(animateChatInput);
$("#chatForm > .text_mode").click(animateChatInput);
}
HighlightChatLimit(); //Exécution du script de limite de chat.
//SCROLLING
scrollChat(); //Place le chat au chargement du jeu.
$newMessageAlert.click(scrollChat); //Scroll au clic du bouton d'alerte de nouveau message.
$(".text_chat").keydown(function(key){ //Si en préférence, scroller le chat automatiquement quand on commence à écrire.
if(typePredict && key != 13) scrollChat(); //Ne pas le faire avec la touche entrée car déjà fait quand la ligne apparaît dans le chat.
});
var lastChat = $('#chatContent').text(); //Sert à comparer pour voir si le chat a changé.
setInterval(function(){ //Scrolle ou alerte à la réception d'un message.
if(lastChat != $('#chatContent').text()) {
lastChat = $('#chatContent').text(); //Actualiser la copie local du chat.
var audio = document.getElementById('checkchat');
audio.load();
audio.play();
if(autoScroll) {
scrollChat();
}
else if($("#chatContent .link.linkable:last").text() !== $("#txt_pseudo").text()) {
$newMessageAlert.stop().fadeIn(500); //Afficher uniquement le bouton si l'utilisateur ne vient pas de poster.
}
}
}, 1000);
//COLOR TAG
$(document).on("click", "span.perso.link", function(){
var idPerso = $(this).attr('id').slice(9);
$(document).one("ajaxSuccess", {idPerso: idPerso}, function(e){ //Permet d'attendre le chargement de la fenêtre, one() pour éviter un duplicata.
var idctb = '#colorTagBox_' + e.data.idPerso;
var colorTagBox = $('
' + 'Couleur chat: ' +
'' +
'' +
'
').appendTo($("#ib_persoBox_" + e.data.idPerso + " .fakeToolTip"));
GM_setValue("dcce_name_" + e.data.idPerso, $("#ib_persoBox_" + e.data.idPerso + " .titreinfo").contents().filter(function(){
return this.nodeType == 3;
})[0].nodeValue); //Récupère le nom du personnage, utilisé dans le nommage de la classe du pseudo.
if(GM_getValue("dcce_ctb_" + e.data.idPerso) !== undefined) { //Récupère et applique au bouton couleur la couleur enregistrée
$(idctb).val((GM_getValue("dcce_ctb_" + e.data.idPerso)));
}
$(idctb).on("change", {idPerso: e.data.idPerso}, function(e) { //Enregistre en mémoire la nouvelle couleur
GM_setValue("dcce_ctb_" + e.data.idPerso, $(this).val());
chatChangeColor(e.data.idPerso);
});
$(idctb + "_reset").on("click", {idPerso: e.data.idPerso}, function(e) { //Reset de la couleur
GM_deleteValue("dcce_ctb_" + e.data.idPerso);
$(idctb).val(DEFAULT_CHAT_COLOR);
chatChangeColor(e.data.idPerso);
});
});
});
});