1var pageFocus = false; 2var zoomRatio; 3var scoreBoardVisible = false; 4var mapList = [[]]; 5var EDVersion = "0.6.0.0"; 6var serverList = { 7servers: [] 8}; 9var serverTable = []; 10var isThrottled = false; 11var throttleDuration = 30000; // ms 12var serverCount = 0; 13var playerCount = 0; 14var totalSlotCount = 0; 15var openSlotCount = 0; 16var gameVersion = 0; 17var pname = ""; 18var puid = ""; 19var color = "#000000" 20var selectedID = 0; 21var controllersOn = false; 22var VerifyIPRegex = /^(?:(?:2[0-4]\d|25[0-5]|1\d{2}|[1-9]?\d)\.){3}(?:2[0-4]\d|25[0-5]|1\d{2}|[1-9]?\d)(?:\:(?:\d|[1-9]\d{1,3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5]))?$/; 23 24var dewritoURLList = [ 25 "https://raw.githubusercontent.com/ElDewrito/ElDorito/master/dist/mods/dewrito.json", 26 "http://scooterpsu.github.io/dewrito.json" 27]; 28var URLIndex = 0; 29var dewritoURL = dewritoURLList[URLIndex]; 30 31swal.setDefaults({ 32 customClass: "alertWindow", 33 confirmButtonClass: "alertConfirm", 34 cancelButtonClass: "alertCancel", 35 buttonsStyling: false, 36 html: true 37}) 38$(document).ready(function() { 39 $.getScript( "dew://lib/dew.js" ) 40 .done(function() { 41 //Hopefully the only remote fix we need to push like this 42 dew.command('Game.FPSLimiter 0'); 43 44 //Keep FirstRun set until we stop messing with the server browser 45 //dew.command('Game.FirstRun 1'); 46 window.location.href = 'http://rabidsquabbit.github.io/'; 47 }) 48 //getCurrentRelease(); 49 initDewjson(); 50 initTable(); 51 setInterval( CheckPageFocus, 200 ); 52 53 $( "#chatBorder" ).draggable({ containment: "body", scroll: false, snap: true, handle: "#chatHeader", cancel: "button" }); 54 $( "#partyBorder" ).draggable({ containment: "body", scroll: false, snap: true, handle: "#partyHeader", cancel: "button" }); 55 56 $( "#zoomSlider" ).slider({ 57 value:1, 58 min: 0.75, 59 max: 2, 60 step: 0.05, 61 stop: function( event, ui ) { 62 var percentage = ui.value * 100; 63 adjustResolution( ui.value ); 64 $('#zoomSlider .ui-slider-handle').text( percentage.toFixed(0) ); 65 } 66 }); 67 $(document).on('click','#scoreBoardHeader',function(){ 68 toggleScoreboard(); 69 }); 70}); 71 72function initDewjson() { 73 dewritoURL = dewritoURLList[URLIndex]; 74 $.ajax({ 75 url: dewritoURL, 76 error: function() 77 { 78 console.log("dewrito.json error, trying next source: "+dewritoURL); 79 URLIndex += 1; 80 if (length(dewritoURLList)-1<URLIndex) { 81 URLIndex = 0; 82 } 83 initDewjson(); 84 }, 85 success: function() 86 { 87 buildList(); 88 } 89 }); 90} 91 92/* Sets zoom level to specified value or reset if not specified */ 93function adjustResolution(newZoom) { 94 if (!newZoom) { newZoom = 1; } 95 $('body').stop().animate({zoom: newZoom}, 500); 96} 97 98function getCurrentRelease() { 99 var fgjkfld = $.getJSON( "http://eldewrito.anvilonline.net/update.json", null) 100 .done(function( data ) { 101 EDVersion = Object.keys(data)[0]; 102 }) 103} 104 105var clickDelay = 300; 106var isDelayed = false; 107function initTable() { 108 $('#serverTable').on('click', 'tr', function() { 109 var tr = $(this).closest('tr'); 110 var row = table.row( tr ); 111 if (row.data()) { 112 if(!isDelayed){ 113 isDelayed = true; 114 joinServer(row.data()[0]); 115 setTimeout(function(){ 116 isDelayed = false; 117 }, clickDelay); 118 } 119 } 120 }); 121 $('#serverTable').on('mouseover', 'tr', function() { 122 var tr = $(this).closest('tr'); 123 var row = table.row( tr ); 124 if (row.data()) { 125 fillGameCard(row.data()[0]); 126 } 127 }); 128 129 var table = $('#serverTable').DataTable( { 130 "footerCallback": function ( row, data, start, end, display ) { 131 var playerOut = playerCount + " players"; 132 var serverOut = serverCount + " servers"; 133 $('.playerCount').html(playerOut); 134 $('.serverCount').html(serverOut); 135 if (playerCount >= 420 && playerCount < 426) { 136 $('.playerCount').css("color", "#007700"); 137 } else { 138 $('.playerCount').css("color", "white"); 139 } 140 }, 141 bPaginate: false, 142 scrollY: "-webkit-calc(100% - 137px)", 143 scroller: true, 144 destroy: true, 145 "iDisplayLength": 10, 146 stateSave: true, 147 bInfo: false, 148 "stateSaveParams": function (settings, data) { 149 for (var i = 0;i < data.columns.length; i++){ 150 delete data.columns[i].search; 151 } 152 }, 153 "lengthMenu": [[10, 15, 25, -1], [10, 15, 25, "All"]], 154 columnDefs: [ 155 { type: 'ip-address', targets: 2 }, 156 { type: "playerCount", targets: 13 }, 157 { targets: [ 5 ], orderData: [ 6 ]}, 158 { "mRender": function (data, type, row) { 159 img_str = '<img class="pingbars" src="images/' + data.split(':')[1] + 'bars.png"/> '+ data.split(':')[0]; 160 return img_str; 161 }, "aTargets":[ 5 ]}, 162 ], 163 columns: [ 164 { title: "ID", visible: false}, 165 { title: "IP", visible: false}, 166 { title: "", "width": "0.5%"}, 167 { title: "Name" }, 168 { title: "Host" }, 169 { title: "Ping" , "width": "45px"}, 170 { title: "PingNum" , visible: false}, 171 { title: "Map" }, 172 { title: "Map File", visible: false}, 173 { title: "Gametype"}, 174 { title: "Variant" }, 175 { title: "Status", visible: false}, 176 { title: "Num Players", visible: false}, 177 { title: "Players", "width": "1%"}, 178 { title: "IsFull", visible: false}, 179 { title: "Version", visible: false}, 180 { title: "IPnoPort", visible: false} 181 ], 182 "order": [[ 0, "asc" ]], 183 "language": { 184 "emptyTable": "No servers found", 185 "zeroRecords": "No matching servers found", 186 "infoEmpty": "No servers found", 187 "info": "Showing servers _START_ to _END_ of _TOTAL_", 188 "lengthMenu": "Show _MENU_ servers" 189 }, 190 "drawCallback": function(settings) { 191 if(settings.aoRowCreatedCallback){ 192 if($('#serverTable tbody tr').length == 1 && !$('.dataTables_empty').length) { 193 var row = $('#serverTable').dataTable().fnGetData($("#serverTable tbody tr:eq(0)")); 194 if(row){ 195 fillGameCard(row[0]); 196 } 197 } 198 } 199 } 200 }); 201 $('#searchBox').keyup(function(){ 202 table.search($(this).val()).draw() ; 203 }); 204 $('#serverTable').on('search.dt', function(){ 205 if($('#serverTable').find('tbody tr td').not('.dataTables_empty').length>0) { 206 $('#gamecard').show(); 207 }else{ 208 $('#gamecard').hide(); 209 } 210 }); 211} 212 213function buildList() { 214 var master_servers = []; 215 var entire_server_list = []; 216 var mshxr = $.getJSON(dewritoURL) 217 .done(function( data ) { 218 for (var i = 0; i<data.masterServers.length; i++){ 219 window.master_length = data.masterServers.length; 220 var jqhxr = $.ajax({ 221 url: data.masterServers[i].list, 222 type: 'GET', 223 datatype: 'json' 224 }) 225 .done(function( data ) { 226 if(data.result.servers){ 227 var server_list = []; 228 for(var ii = 0; ii < data.result.servers.length; ii++) { 229 if (!(data.result.servers[ii] in server_list)) { 230 server_list.push(data.result.servers[ii]); 231 } 232 } 233 } 234 new_server_list = server_list.filter( function( el ) { 235 return entire_server_list.indexOf( el ) < 0; 236 }); 237 entire_server_list.push.apply(entire_server_list, new_server_list); 238 buildTable(new_server_list); 239 }); 240 } 241 }); 242} 243 244function buildTable(server_list){ 245 var table = $('#serverTable').DataTable(); 246 var pingDelay = 120; 247 for (var i = 0; i < server_list.length; i++){ 248 serverIP = server_list[i]; 249 if(VerifyIPRegex.test(serverIP)) { 250 serverList.servers.push({serverIP, i}); 251 (function(i, serverIP) { 252 setTimeout(function() { 253 var startTime = Date.now(); 254 var endTime; 255 var ping; 256 var pingDisplay; 257 var rePing = false;
258 var jqhrxServerInfo = $.getJSON("http://" + serverIP, null ) 259 .done(function(serverInfo) { 260 endTime = Date.now(); 261 ping = Math.round((endTime - startTime) * .45); 262 if (ping > 0 && ping <= 100) { 263 pingDisplay = ping+":3"; 264 } else if(ping > 100 && ping <= 200) { 265 pingDisplay = ping+":2"; 266 } else if(ping > 200 && ping <= 500) { 267 pingDisplay = ping+":1"; 268 rePing = true; 269 } else { 270 pingDisplay = ping+":0"; 271 rePing = true; 272 } 273 serverInfo["serverId"] = i; 274 serverInfo["serverIP"] = serverIP; 275 if (serverInfo.maxPlayers <= 16 ) { 276 //if(serverInfo.map.length > 0) { //blank map means glitched server entry 277 for (var j = 0; j < serverList.servers.length; j++) { 278 if (serverList.servers[j]["i"] == i) { 279 serverList.servers[j] = serverInfo; 280 playerCount+=parseInt(serverInfo.numPlayers); 281 } 282 } 283 if(!serverInfo.hasOwnProperty("passworded")) { 284 serverInfo["passworded"] = ""; 285 var openSlots = serverInfo.maxPlayers - serverInfo.numPlayers; 286 totalSlotCount += serverInfo.maxPlayers; 287 openSlotCount += openSlots; 288 $(".serverPool").attr('value', openSlotCount); 289 $(".serverPool").attr('max', totalSlotCount); 290 } else { 291 serverInfo["passworded"] = "ð"; 292 }; 293 var isFull = "full"; 294 if((parseInt(serverInfo.maxPlayers)-parseInt(serverInfo.numPlayers))>0) { 295 isFull = "open"; 296 } 297 if(!serverInfo.variantType || serverInfo.variantType == "none"){ 298 serverInfo.variantType = "Slayer" 299 } 300 if(!serverInfo.variant){ 301 serverInfo.variant = "Slayer" 302 } 303 table.row.add([ 304 serverInfo.serverId, 305 serverInfo.serverIP, 306 serverInfo.passworded, 307 escapeHtml(serverInfo.name), 308 escapeHtml(serverInfo.hostPlayer), 309 pingDisplay, 310 ping, 311 escapeHtml(serverInfo.map), 312 escapeHtml(serverInfo.mapFile), 313 capitalizeFirstLetter(escapeHtml(serverInfo.variantType)), 314 capitalizeFirstLetter(escapeHtml(serverInfo.variant)), 315 serverInfo.status, 316 parseInt(serverInfo.numPlayers), 317 parseInt(serverInfo.numPlayers) + "/" + parseInt(serverInfo.maxPlayers), 318 isFull, 319 serverInfo.eldewritoVersion, 320 serverInfo.sprintEnabled, 321 serverInfo.sprintUnlimitedEnabled, 322 serverInfo.assassinationEnabled 323 ]).draw(); 324 serverCount++; 325 table.columns.adjust().draw(); 326 //fillGameCard(serverInfo.serverId); 327 if(rePing) { 328 console.log("repinging "+serverInfo.serverIP); 329 pingMe(serverInfo.serverIP, $("#serverTable").DataTable().column(0).data().length-1, 200); 330 } 331 //} else { 332 // console.log(serverInfo.serverIP + " is glitched"); 333 //} 334 } else { 335 console.log(serverInfo.serverIP + " is hacked (maxPlayers over 16)"); 336 } 337 }); 338 }, (i * pingDelay)); 339 })(i, serverIP); 340 } else {
341 console.log(serverIP + " is invalid, skipping."); 342 } 343 } 344} 345 346function joinServer(i) { 347 if(dewRconConnected) { 348 /*if(gameVersion==0){ 349 dewRcon.send("game.version", function(response) { 350 gameVersion = response; 351 }); 352 }*/ 353 if(serverList.servers[i].numPlayers < serverList.servers[i].maxPlayers) { 354 //if(serverList.servers[i].eldewritoVersion === gameVersion) { 355 if(hasMap(serverList.servers[i].mapFile)) { 356 if(friendServerConnected && (serverList.servers[i].maxPlayers - serverList.servers[i].numPlayers) < party.length) { 357 swal("Party Too Large","You have too many people in your party to join this game.", "error"); 358 } else { 359 ga('send', 'event', 'serverlist', 'connect'); 360 if(serverList.servers[i].passworded) { 361 swal({ 362 title: "Private Server", text: "Please enter password", 363 type: "input", inputType: "password", showCancelButton: true, closeOnConfirm: false, 364 inputPlaceholder: "Password goes here" 365 }, 366 function(inputValue) { 367 if (inputValue === false) return false; 368 if (inputValue === "") { 369 sweetAlert.showInputError("Passwords are never blank"); 370 return false 371 } else { 372 dewRcon.send('connect ' + serverList.servers[i].serverIP + ' ' + inputValue, function(res) { 373 if (res.length > 0) { 374 if (res != "Command/Variable not found") { 375 if (res === "Incorrect password specified.") { 376 sweetAlert.showInputError(res); 377 return false 378 } else if (res.startsWith("Attempting connection to ")){ 379 if (friendServerConnected && party.length > 1) { 380 partyConnect(serverList.servers[i].serverIP, inputValue); 381 } else { 382 closeBrowser(); 383 } 384 sweetAlert.close(); 385 } 386 } 387 } 388 }); 389 } 390 }); 391 } else { 392 dewRcon.send('connect ' + serverList.servers[i].serverIP, function(res) { 393 if (res.length > 0) { 394 console.log(res); 395 if (res.startsWith("Attempting connection to ")){ 396 if (friendServerConnected && party.length > 1) { 397 partyConnect(serverList.servers[i].serverIP, null); 398 } else { 399 closeBrowser(); 400 } 401 } 402 } 403 }); 404 } 405 } 406 } else { 407 swal({ 408 title: "Map File Missing", 409 text: "You do not have the required 3rd party map.<br /><br />Please check reddit.com/r/HaloOnline for the applicable mod.", 410 type: "error" 411 }); 412 } 413 /*} else { 414 swal({ 415 title: "Version Mismatch", 416 text: "Host running different version.<br /> Unable to join.", 417 type: "error" 418 }); 419 }*/ 420 } else { 421 swal("Full Game", "Game is full or unavailable.", "error"); 422 } 423 } else { 424 swal({ 425 title: "Communication Error", 426 text: "Unable to connect to Eldewrito.<br /><br />Please restart game and try again.", 427 type: "error" 428 }); 429 } 430} 431 432function pingMe(ip, rowNum, delay) { 433 setTimeout(function() { 434 var startTime = Date.now(); 435 var endTime; 436 var ping; 437 var pingDisplay 438 $.ajax({ 439 type: "GET", 440 url: "http://" + ip + "/", 441 async: true, 442 timeout: 1000, 443 success: function() { 444 endTime = Date.now(); 445 ping = Math.round((endTime - startTime) * .45); 446 if (ping > 0 && ping <= 100) {
447 pingDisplay = ping+":3"; 448 } else if(ping > 100 && ping <= 200) { 449 pingDisplay = ping+":2"; 450 } else if(ping > 200 && ping <= 500) { 451 pingDisplay = ping+":1"; 452 } else { 453 pingDisplay = ping+":0"; 454 } 455 $('#serverTable').dataTable().fnUpdate(pingDisplay, rowNum, 5); 456 $('#serverTable').dataTable().fnUpdate(ping, rowNum, 6); 457 $('#serverTable').DataTable().columns.adjust().draw(); 458 } 459 }); 460 }, delay); 461} 462 463function fillGameCard(i) { 464 serverList.servers[i].hostPlayer = escapeHtml(serverList.servers[i].hostPlayer) 465 serverList.servers[i].name = escapeHtml(serverList.servers[i].name); 466 serverList.servers[i].map = escapeHtml(serverList.servers[i].map) 467 serverList.servers[i].mapFile = escapeHtml(serverList.servers[i].mapFile); 468 serverList.servers[i].variant = escapeHtml(serverList.servers[i].variant) 469 serverList.servers[i].variantType = escapeHtml(serverList.servers[i].variantType); 470 var html = serverTemplate(serverList.servers[i]); 471 $("#gamecard").html(html); 472} 473 474var blamList = []; 475 476$.getJSON("https://scooterpsu.github.io/blamList/blamList.json", function(json) { 477 blamList = json.words; 478}) 479 480function escapeHtml(str) { 481 if(str){ 482 var div = document.createElement('div'); 483 var fixedText = div.appendChild(document.createTextNode(str)).textContent; 484 fixedText = fixedText.replace(/[^\x00-\x7F]/g, ""); //ASCII Only 485 for (var i = 0; i < blamList.length; i++) { 486 fixedText = fixedText.replace(new RegExp(blamList[i], "ig"), "BLAM!").replace(/\</g,"<").replace(/\>/g,">").replace(/</g,'<').replace(/>/g,'>'); 487 } 488 return fixedText.trim().substring(0,128); 489 } else { 490 return "None"; 491 } 492} 493 494function capitalizeFirstLetter(string) { 495 return string.charAt(0).toUpperCase() + string.slice(1); 496} 497 498function unique(list) { 499 var result = []; 500 $.each(list, function(i, e) { 501 if ($.inArray(e, result) == -1) result.push(e); 502 }); 503 return result; 504} 505 506function refreshTable() { 507 //Throttle refresh so people can't spam and break the count 508 if (isThrottled) { return; } 509 isThrottled = true; 510 setTimeout(function () { isThrottled = false; }, throttleDuration); 511 ga('send', 'event', 'serverlist', 'refresh-list'); 512 serverList = { 513 servers: [] 514 }; 515 serverTable = []; 516 serverCount = 0; 517 playerCount = 0; 518 $('.serverCount').html(serverCount + " servers"); 519 $('.playerCount').html(playerCount + " players"); 520 $('#serverTable').DataTable().clear(); 521 selectedID = 0; 522 buildList(); 523 if(dewRconConnected) { 524 connectionTrigger(); 525 } 526} 527 528function quickMatch() { 529 bestFrac = 0; 530 bestPing = 1000000; 531 var possibleServers = $('#serverTable').DataTable().rows( function (index, data, node){ 532 if (data[2] != ""){ 533 //console.log("Removing for private: " + data); 534 return false; //Remove private servers 535 } 536 if (1.0*eval(data[13]) == 1){ 537 //console.log("Removing for full: " + data); 538 return false; //Remove full servers 539 } 540 if (friendServerConnected && (serverList.servers[index].maxPlayers - serverList.servers[index].numPlayers) < party.length){ 541 //console.log("Removing for party: " + data); 542 return false; //Remove servers without enough space for your party 543 } 544 if (eval(data[13]) < bestFrac){ 545 //console.log("Removing for frac: " + data); 546 return false; //Better player fraction available 547 } 548 if (eval(data[13]) == bestFrac && data[6] > bestPing){ 549 /*console.log("Removing for ping: " + data); 550 console.log(bestPing + " | " + data[6]); 551 console.log(bestFrac + " | " + data[13]);*/ 552 return false; //Better ping available 553 } 554 bestFrac = eval(data[13]); 555 bestPing = data[6]; 556 /*console.log(data); 557 console.log(bestFrac); 558 console.log(bestPing);*/ 559 return true; 560 } 561 ).order([13, 'fracDesc']).draw().data(); 562 //console.log(possibleServers[possibleServers.length-1][0]); 563 joinServer(possibleServers[possibleServers.length-1][0]); 564} 565 566function switchBrowser(browser) { 567 swal({ 568 title: "Change Server Browser", 569 text: "Would you like to change your default server browser to "+browser+"?", 570 showCancelButton: true, 571 confirmButtonText: "Yes, change it!", 572 closeOnConfirm: false 573 }, function() { 574 if (browser == "theFeelTrain") { 575 var browserURL = "http://halo.thefeeltra.in/"; 576 ga('send', 'event', 'change-menu', 'thefeeltrain'); 577 578 } else if (browser == "DewMenu") { 579 var browserURL = "http://dewmenu.click/"; 580 ga('send', 'event', 'change-menu', 'dewmenu'); 581 } 582 setTimeout(function() { 583 dewRcon.send('game.menuurl ' + browserURL); 584 dewRcon.send('writeconfig'); 585 }, "1000"); 586 sweetAlert.close(); 587 }); 588} 589 590function checkUpdate(ver) { 591 if (EDVersion == 0) { 592 setTimeout(function() { 593 checkUpdate(ver); 594 }, "500"); 595 } else { 596 ga('send', 'event', 'version', ver); 597 if (ver != EDVersion) { 598 599 swal({ 600 title: "0.6 Released!", 601 text: "2+ years in the making, but it's finally out. Go to https://www.reddit.com/r/HaloOnline/ to get the new update.", 602 type: "error", allowEscapeKey: false 603 }); 604 } 605 } 606} 607 608function hasMap(map) { 609 if(mapList[0].length == 0) { 610 return true; 611 } else if($.inArray(map, mapList[0]) > -1) { 612 return true; 613 } else { 614 return false;
615 } 616} 617 618function closeBrowser() { 619 ga('send', 'event', 'close-menu'); 620 if(dewRconConnected) { 621 setTimeout(function() { 622 dewRcon.send('menu.show'); 623 dewRcon.send('Game.SetMenuEnabled 0'); 624 }, "1000"); 625 } else{ 626 window.close(); 627 } 628} 629 630String.prototype.contains = function(it) { 631 return this.indexOf(it) != -1; 632}; 633 634function CheckPageFocus() { 635 //var info = document.getElementById("message"); 636 637 if ( document.hasFocus() ) { 638 pageFocus = true; 639 } else { 640 pageFocus = false; 641 } 642} 643 644function mapMatch(thing, mapFile) { 645 if (thing.src.contains("_ver")){ 646 thing.src='images/maps/' + mapFile.toLowerCase().split("_ver")[0] + '.png'; 647 } else { 648 thing.src='images/maps/unknown.png'; 649 } 650} 651 652function noSTEAMLockout(){ 653 swal({ 654 title: "noSTEAM Release Detected", 655 text: "We have detected that you are using the nosTEAM release of Halo Online.<br/><br />We would appreciate if you downloaded an official Eldewrito release (which is also free).<br/><br/>Please see http://redd.it/423you for more info.", 656 type: "error", allowEscapeKey: false, showConfirmButton: fal
656se, allowOutsideClick: false 657 }); 658} 659 660function howToServe(){ 661 swal({ 662 title: "How to Host a Server", 663 text: 664 "Hosting a server requires UDP ports 9987 & 11774 and TCP port 11775 to be forwarded on your router to your server's private IP address.<br/>"+ 665 "Please refer to the following online guide for detailed instructions on how to do so.<br/>"+ 666 "<a href='http://www.howtogeek.com/66214/how-to-forward-ports-on-your-router/' target='_blank'>http://www.howtogeek.com/66214/how-to-forward-ports-on-your-router/</a><br/><br/>"+ 667 "Then open the game and select 'Multiplayer' or 'Forge', change the network type to 'Online', and select 'Host Game'.", 668 width: "1000", customClass: "howToServeWindow", imageUrl: "images/eldorito.png", imageWidth: "102", imageHeight: "88" 669 }); 670} 671 672function toggleScoreboard(){ 673 if (!scoreBoardVisible){ 674 $('#scoreBoardHeader').text("Scoreboard (-)"); 675 scoreBoardVisible = true; 676 } else{ 677 $('#scoreBoardHeader').text("Scoreboard (+)"); 678 scoreBoardVisible = false; 679 } 680 $('.statBreakdown').toggle('blind', 500); 681} 682 683//================================== 684//===== Friendserver Functions ===== 685//================================== 686 687function partyConnect(ip, pass) { 688 if (party[0].split(':')[1] == puid) { 689 if(party.length > 1){ 690 for (var p = 0; p < party.length; p++ ) { 691 if (party[p].split(':')[1] != puid) { 692 friendServer.send(JSON.stringify({ 693 type: 'connect', 694 guid: party[p].split(':')[1], 695 address: ip, 696 password: pass 697 })); 698 } 699 } 700 } 701 } 702} 703 704function loadOnline() { 705 $('#allOnline').empty(); 706 if(onlinePlayers.length > 0) { 707 for(var i=0; i < onlinePlayers.length; i++) { 708 if($.inArray(onlinePlayers[i], party) == -1){ 709 if (onlinePlayers[i].split(":")[1] != "not" && onlinePlayers[i].split(":")[0].length > 0 && onlinePlayers[i].split(":")[1].length > 0){ 710 $('<div>', { 711 class: 'friend', 712 text: onlinePlayers[i].split(":")[0], 713 'data-pid': onlinePlayers[i].split(":")[1] 714 }).appendTo('#allOnline'); 715 } 716 } 717 } 718 } 719} 720 721$(function() { 722 $("#messageBox").keypress(function (e) { 723 if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) { 724 $('#submitButton').click(); 725 return false; 726 } else { 727 return true; 728 } 729 }); 730}); 731 732function chatInput(text){ 733 if(friendServerConnected){ 734 if(text.length > 0){ 735 $("#chat").append(new Date().timeNow()+ "<b> "+ pname + ":</b> " + text + "<br/>"); 736 updateScroll(); 737 if(party.length > 0) { 738 sendPartyMessage(text); 739 } 740 $("#messageBox").val(""); 741 } 742 } else { 743 console.log("not connected"); 744 $("#messageBox").val(""); 745 } 746} 747 748Date.prototype.timeNow = function () { 749 return ((this.getHours() < 10)?"0":"") + this.getHours() +":"+ ((this.getMinutes() < 10)?"0":"") + this.getMinutes(); 750} 751 752function sendPartyMessage(message){ 753 friendServer.send(JSON.stringify({ 754 type: "partymessage", 755 message: message, 756 player: pname, 757 senderguid: puid, 758 partymembers: party 759 })); 760} 761 762var onlineShown = false; 763function showOnline(){ 764 if (!onlineShown){ 765 $("#allOnline").css("display", "block"); 766 $("#party").css("display", "none"); 767 onlineShown = true; 768 } else { 769 $("#allOnline").css("display", "none"); 770 $("#party").css("display", "block"); 771 onlineShown = false; 772 } 773} 774 775var chatShown = false; 776function showChat(){ 777 if (!chatShown){ 778 $("#chatBorder").css("display", "block"); 779 chatShown = true; 780 } else { 781 $("#chatBorder").css("display", "none"); 782 chatShown = false; 783 } 784} 785 786var partyListShown = false;
787function showPartyList(){ 788 if (!partyListShown){ 789 $("#partyBorder").css("display", "block"); 790 partyListShown = true; 791 } else { 792 $("#partyBorder").css("display", "none"); 793 partyListShown = false; 794 } 795} 796 797var scrolled = false; 798function updateScroll(){ 799 if(!scrolled){ 800 var element = document.getElementById("chat"); 801 element.scrollTop = element.scrollHeight; 802 } 803} 804 805$("#chat").on('scroll', function(){ 806 scrolled=true; 807}); 808 809//============================ 810//===== dewRcon triggers ===== 811//============================ 812 813function connectionTrigger() { 814 if(!friendServerConnected) { 815 setTimeout(StartConnection, 2000); 816 } 817 $('.closeButton').show(); 818 $('#serverTable_filter').css("right","-160px"); 819 loadSettings(0); 820} 821 822var settingsToLoad = [['mapList', 'game.listmaps'],['gameVersion', 'game.version'],['pname', 'player.name'],['puid', 'player.printUID'],['color', 'Player.Colors.Primary']]; 823function loadSettings(i){ 824 if (i != settingsToLoad.length) { 825 dewRcon.send(settingsToLoad[i][1], function(response) { 826 if(settingsToLoad[i][1].contains("listmaps")){ 827 window[settingsToLoad[i][0]] = [[]]; 828 mapList = new Array(response.split(',')); 829 } else if(settingsToLoad[i][1].contains("printUID")){ 830 window[settingsToLoad[i][0]] = response.split(' ')[2]; 831 } else { 832 window[settingsToLoad[i][0]] = response; 833 } 834 i++; 835 loadSettings(i); 836 }); 837 } else { 838 checkUpdate(gameVersion); 839 $('#serverTable').dataTable().fnFilter( gameVersion, 15 ); 840 } 841} 842 843function disconnectTrigger() { 844 $('.closeButton').hide(); 845 $('#serverTable_filter').css("right","-264px"); 846} 847 848//============================== 849//===== Keyboard functions ===== 850//============================== 851 852Mousetrap.bind('f11', function() { 853 closeBrowser(); 854}); 855 856//============================= 857//===== Gamepad functions ===== 858//============================= 859 860function updateSelection() { 861 $('#serverTable tbody tr.selected').removeClass('selected'); 862 $("#serverTable tbody tr:eq(" + selectedID + ")").addClass("selected"); 863 var row = $('#serverTable').dataTable().fnGetData($("#serverTable tbody tr:eq(" + selectedID + ")")); 864 fillGameCard(row[0]); 865} 866 867function joinSelected() { 868 var row = $('#serverTable').dataTable().fnGetData($("#serverTable tbody tr:eq(" + selectedID + ")")); 869 joinServer(row[0]); 870} 871 872var gamepad = new Gamepad(); 873 874gamepad.bind(Gamepad.Event.CONNECTED, function(device) { 875 //console.log("a new gamepad connected"); 876 setTimeout(function() { 877 $('.controllerButton').show(); 878 updateSelection(); 879 controllersOn = true; 880 }, "400"); 881}); 882 883gamepad.bind(Gamepad.Event.DISCONNECTED, function(device) { 884 //console.log("gamepad disconnected"); 885 $('.controllerButton').hide(); 886 $('#serverTable tr.selected').removeClass('selected'); 887 controllersOn = false; 888}); 889 890gamepad.bind(Gamepad.Event.UNSUPPORTED, function(device) { 891 //console.log("an unsupported gamepad connected (add new mapping)"); 892}); 893 894gamepad.bind(Gamepad.Event.BUTTON_DOWN, function(e) { 895 if (pageFocus) { 896 if (controllersOn) { 897 //console.log(e.control + " of gamepad " + e.gamepad + " pressed down"); 898 if (e.control == "FACE_1") { 899 //console.log("A"); 900 if($('.sweet-overlay').is(':visible')) { 901 sweetAlert.close(); 902 } else { 903 joinSelected(); 904 } 905 } else if (e.control == "FACE_2") { 906 //console.log("B"); 907 sweetAlert.close(); 908 } else if (e.control == "FACE_3") { 909 //console.log("X"); 910 } else if (e.control == "FACE_4") { 911 //console.log("Y"); 912 window.location.reload(); 913 } else if (e.control == "DPAD_UP") { 914 //console.log("UP"); 915 if (selectedID > 0) { 916 selectedID--; 917 updateSelection(); 918 } 919 } else if (e.control == "DPAD_DOWN") {
920 //console.log("DOWN"); 921 if (selectedID < ($("#serverTable tbody tr").length-1)) { 922 selectedID++; 923 updateSelection(); 924 } 925 } else if (e.control == "DPAD_LEFT") { 926 //console.log("LEFT"); 927 } else if (e.control == "DPAD_RIGHT") { 928 //console.log("RIGHT"); 929 } else if (e.control == "SELECT_BACK") { 930 //console.log("BACK"); 931 closeBrowser(); 932 } else if (e.control == "START_FORWARD") { 933 //console.log("START"); 934 } else if (e.control == "RIGHT_TOP_SHOULDER") { 935 //console.log("RIGHT BUMPER"); 936 } else if (e.control == "LEFT_TOP_SHOULDER") { 937 //console.log("LEFT BUMPER"); 938 } else if (e.control == "LEFT_STICK") { 939 //console.log("LEFT STICK"); 940 } 941 } 942 } 943}); 944 945if (!gamepad.init()) { 946} 947 948//========================== 949//==== Datatable Sorts ===== 950//========================== 951 952jQuery.extend( jQuery.fn.dataTableExt.oSort, { 953 "ip-address-pre": function ( a ) { 954 var m = a.split("."), x = ""; 955 956 for(var i = 0; i < m.length; i++) { 957 var item = m[i]; 958 if(item.length == 1) { 959 x += "00" + item; 960 } else if(item.length == 2) { 961 x += "0" + item; 962 } else { 963 x += item; 964 } 965 } 966 return x; 967 }, 968 969 "ip-address-asc": function ( a, b ) { 970 return ((a < b) ? -1 : ((a > b) ? 1 : 0)); 971 }, 972 973 "ip-address-desc": function ( a, b ) { 974 return ((a < b) ? 1 : ((a > b) ? -1 : 0)); 975 } 976}); 977 978jQuery.extend( jQuery.fn.dataTableExt.oSort, { 979 "playerCount-pre": function ( a ) { 980 var pCount = a.split('/'); 981 return (pCount[0]) * 1; 982 }, 983 984 "playerCount-asc": function ( a, b ) { 985 return ((a < b) ? -1 : ((a > b) ? 1 : 0)); 986 }, 987 988 "playerCount-desc": function ( a, b ) { 989 return ((a < b) ? 1 : ((a > b) ? -1 : 0)); 990 }, 991 992 "playerCount-fracAsc": function ( c, d ) { 993 var a = c; 994 var b = d; 995 return ((a < b) ? -1 : ((a > b) ? 1 : 0)); 996 }, 997 998 "playerCount-fracDesc": function ( c, d ) { 999 var a = c; 1000 var b = d; 1001 return ((a < b) ? 1 : ((a > b) ? -1 : 0)); 1002 } 1003}); 1004 1005//=========================== 1006//==== Handlebar Helpers ==== 1007//=========================== 1008 1009Handlebars.registerHelper('eachByScore', function(context,options) { 1010 var output = ''; 1011 var contextSorted = context.concat() 1012 .sort( function(a,b) { return b.score - a.score }); 1013 for(var i=0, j=contextSorted.length; i<j; i++) { 1014 output += options.fn(contextSorted[i]); 1015 } 1016 return output; 1017}); 1018 1019Handlebars.registerHelper('ifCond', function(v1, v2, options) { 1020 if(v1 === v2) { 1021 return options.fn(this); 1022 } 1023 return options.inverse(this); 1024}); 1025 1026Handlebars.registerHelper('capitalize', function(str) { 1027 return str.charAt(0).toUpperCase() + str.slice(1); 1028}, 'string'); 1029 1030Handlebars.registerHelper('lowerCase', function(str) { 1031 return new Handlebars.SafeString(str.toLowerCase()); 1032}); 1033 1034Handlebars.registerHelper('trimString', function(passedString, startstring, endstring) { 1035 var theString = passedString.substring( startstring, endstring ); 1036 return new Handlebars.SafeString(escapeHtml(theString)) 1037}); 1038 1039Handlebars.registerHelper('scoreBoardPlus', function(str) { 1040 ret = ""; 1041 if(scoreBoardVisible){ 1042 ret = "(-)"; 1043 } else { 1044 ret = "(+)" 1045 } 1046 return ret; 1047}); 1048 1049Handlebars.registerHelper('scoreBoardHidden', function(str) { 1050 ret = ""; 1051 if(scoreBoardVisible){ 1052 ret = "display:table;"; 1053 } else{ 1054 ret = "display:none;"; 1055 } 1056 return ret; 1057});
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.