Sorts the list of people by allegiance, then by hp, more severely wounded first.
// ==UserScript==
// @name Nexus Clash Character List Sort
// @namespace http://userscripts.org/users/435889
// @description Sorts the list of people by allegiance, then by hp, more severely wounded first.
// @include http://nexusclash.com/modules.php?name=Game*
// @include http://www.nexusclash.com/modules.php?name=Game*
// @exclude http://nexusclash.com/modules.php?name=Game&op=disconnect
// @exclude http://www.nexusclash.com/modules.php?name=Game&op=disconnect
// @version 0.0.1.20141011170741
// ==/UserScript==
(function() {
var match = /There (is|are) ([0-9]{1,3}) other (person|people) here, ([\s\S]*?>)\./.exec(document.documentElement.innerHTML); // gets the whole list of people
if (match[2] == 0) {
//there are no present, so exit
console.log('nobody here, exiting');
return;
};
var ppl = match[4].substring(1, match[4].length - 1).split('>, <');
if (ppl.length != parseInt(match[2])) {
return;
};
var people = [[],[]];
var i = 0;
for (i = 0; i < ppl.length; i++) {
var p = /a class="(faction|ally|friendly|neutral|enemy|hostile|friendly)" href="javascript:SelectItem\('target_id','([0-9]+)'\)">([\s\S]+?) <\/a> \(<a href="modules.php\?name=Game&op=character&id=[0-9]+">([0-9]*)<\/a>\)(<img width="12" height="12" src="images\/g\/status\/Hiding.png" title="Hidden">)?<img( title="([0-9]{1,3})\/([0-9]{1,3}) hit points")?[\s\S]+?src="images\/g\/HealthBar_([1-4]).gif"/.exec(ppl[i]);
var type;
if (p[1] == 'enemy' || p[1] == 'hostile' || p[1] == 'neutral') {
p_type = 0;
} else {
p_type = 1
};
var person = {};
person['html'] = ppl[i]
person['id'] = p[2]
if (p[6]) {
person['sort_hp'] = (parseInt(p[7])/parseInt(p[8])) * 100;
} else {
person['sort_hp'] = 4 - parseInt(p[9]); // makes less hp mean lower value.
};
if (!people.hasOwnProperty(p_type)) { // if there is not already an entry for this alignment
people[p_type] = []; // create an empty array for the key.
people[p_type].push(person);
} else {
var added = false;
for (x in people[p_type]) { // sort through the current list of people with that allegiance
if (people[p_type][x]['sort_hp'] > person['sort_hp']) { // until it finds a person with more or equal hp
people[p_type].splice(x, 0, person)// then insert the new person before the current one.
added = true; // record that the person has been added
break; // and finish the for loop since we have added the person.
};
};
if (!added) { // if the loop completed without adding the person
people[p_type].push(person); // add them to the end of the list.
};
};
};
var h;
var count = (people[0].length + people[1].length);
if (count != parseInt(match[2])) {
return;
};
if (count == 1) {
h = '<p id="chars_desc">There is 1 other person here.</p>\n';
} else {
h = '<p id="chars_desc">There are ' + count + ' other people here.</p>\n';
};
if (people[0].length >= 1) {
h += '<p id="victims">';
for (index in people[0]) {
h += '<span class="char" id="char_' + people[0][index]['id'] + '"><' + people[0][index]['html'] +'></span>, ';
};
h = h.substring(0, h.length - 2) + '.</p>';
};
if (people[1].length >= 1) {
h += '<p id="friends">'
for (index in people[1]) {
h += '<span class="char" id="char_' + people[1][index]['id'] + '"><' + people[1][index]['html'] +'></span>, ';
};
h = h.substring(0, h.length - 2) + '.</p>';
};
h = '<div id="other_chars">' + h + '</div>';
document.documentElement.innerHTML = document.documentElement.innerHTML.replace(match[0], h);
})();