Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Logger = BetterLog.useSpreadsheet("1kmdpcGogAwDT7wyd2HqiOr1rjkPJVpWzyrPSRO3dgRc")
- function getLogMetaData(logID,excludedPlayers,countTries,includedIds) {
- //logID="nV9JvKRr612PWQYa"
- if(logID==undefined || logID.length==0) return "";
- //var logsJSON = UrlFetchApp.fetch("https://www.warcraftlogs.com:443/v1/reports/guild/untitled+spreadsheet/eredar/eu?start="+date+"&api_key=bafb317c52cb13076ff2a3f3363371f1");
- var logJSON = UrlFetchApp.fetch("https://www.warcraftlogs.com:443/v1/report/fights/"+logID+"?api_key=0f9e772cb350e61d740df5b391e383b1");
- var log = Utilities.jsonParse(logJSON.getContentText());
- //get first mythic boss fight
- var day = log.start/1000;
- var first=undefined;
- var last=undefined;
- for(var i=0;i<log.fights.length;i++) {
- var fight = log.fights[i];
- if(first == undefined && fight.difficulty == 5 ) {
- first = fight;
- }
- if(last !=undefined && fight.difficulty && fight.difficulty != 5) {
- break;
- }
- last = fight;
- }
- var ms = new Date(day+last.end_time)-new Date(day+first.start_time)
- var divisor = 1000*60*60*24
- var duration = ms /divisor;
- return [new Date(log.start),getPlayersSorted(log.friendlies,excludedPlayers),getNumberOfTries(log.fights,includedIds), getNumberOfKills(log.fights,includedIds),duration,getStartEndTimes(log),getFightIds(log.fights)];
- }
- /***
- **/
- function getIncludedIdsFromRange(includedIdsArray) {
- var includedIds = []
- for(var i=0; i<includedIdsArray.length;i++) {
- if(includedIdsArray[i][0]==true) {
- includedIds.push(includedIdsArray[i][1]);
- }
- }
- return includedIds;
- }
- /***
- **/
- function getFightIds(fights) {
- var validBossIDs=[2076,2074,2070,2064,2075,2082,2088,2069,2073,2063,2092] //vari is 2069
- var bossIDs = []
- for(var i=0; i <fights.length;i++) {
- if(contains(validBossIDs,fights[i].boss) && fights[i].difficulty == 5) {
- bossIDs.push([fights[i].id,fights[i].boss].join(","))
- }
- }
- return bossIDs.join("-");
- }
- /***
- **/
- function possibleTwinks(logRange, charStructure, ignorePlayers) {
- //ignored players
- var ignos = ignorePlayers.split("-");
- // find all players in logs
- var totalChars = []
- for(var i=0;i<logRange[0].length;i++) {
- var log = logRange[0][i];
- var players = log.split("-");
- for(var j=0;j<players.length;j++) {
- var charName = players[j].split(",")[0];
- // add char if not already in list and not ingored
- if(!contains(totalChars,charName)&&!contains(ignos,charName)) totalChars.push(charName)
- }
- }
- var knownChars = [];
- //maps twinks to mains
- for(var i=0;i<charStructure.length;i++) {
- var cell = charStructure[i][0]
- if(cell.length>0) {
- var chars = cell.split("-")
- for(var c = 0;c<chars.length;c++) {
- knownChars.push(chars[c]);
- }
- }
- }
- var possibleChars = [];
- for(var j = 0;j<totalChars.length;j++){
- if(!contains(knownChars,totalChars[j])) possibleChars.push(totalChars[j])
- }
- return possibleChars;
- }
- /***
- **/
- function stripName(name) {
- return name.replace(/\s/g,'').replace("-","")
- }
- /***
- **/
- function getTotalDeathsFromLogs(playerName,logRange,mainsTwinks,merge) {
- var charStructure = makeCharStructure(mainsTwinks)
- playerName=stripName(playerName);
- var chars = getCharactersOfPlayer(charStructure, playerName)
- var counter = 0;
- for(var i=0;i<logRange[0].length;i++) {
- var log = logRange[0][i];
- var players = log.split("-");
- for(var j=0;j<players.length;j++) {
- if(merge) {
- if(contains(chars,players[j])) counter++;
- } else {
- if(playerName==players[j]) counter++;
- }
- }
- }
- return counter;
- }
- /***
- **/
- function getNumberOfTries(fights,includedIds) {
- var includedIds = getIncludedIdsFromRange(includedIds)
- var bossIDs = []
- for(var i=0; i <fights.length;i++) {
- if(contains(includedIds,fights[i].boss) && fights[i].difficulty == 5) {
- bossIDs.push(fights[i].id)
- }
- }
- return bossIDs.length;
- }
- /***
- **/
- function getNumberOfKills(fights,includedIds) {
- var includedIds = getIncludedIdsFromRange(includedIds)
- var bossIDs = []
- for(var i=0; i <fights.length;i++) {
- if(contains(includedIds,fights[i].boss) && fights[i].kill && fights[i].difficulty ==5) {
- bossIDs.push(fights[i].id)
- }
- }
- return bossIDs.length;
- }
- /***
- **/
- function getPlayersSorted(friendlies,excludedPlayers) {
- if(friendlies.length==0) return "";
- if(!excludedPlayers) return""
- excludedPlayers = excludedPlayers.split("-")
- var playerNames = []
- var invalidTypes = ["NPC","Boss","Pet"]
- for(var i=0; i<friendlies.length;i++) {
- if(!contains(invalidTypes,friendlies[i].type) && !contains(excludedPlayers,friendlies[i].name)) {
- playerNames.push([friendlies[i].name,friendlies[i].type])
- }
- }
- playerNames.sort();
- return playerNames.join("-")
- }
- /***
- **/
- function getClasses(playerArea, logs) {
- var classes = [];
- for(var i =0;i<playerArea.length;i++) {
- var name = playerArea[i][0];
- name = stripName(name);
- if(name.length<1) continue;
- var found = false;
- //go through logs to find class
- for(var p=0;p<logs[0].length;p++) {
- var log = logs[0][p];
- //iterate over players per log
- if(log.length>0) {
- var split = log.split("-")
- //split input per log
- for (var j=0;j<split.length;j++) {
- var split2 = split[j].split(",")
- if(split2[0]==name) {
- //player class found
- var class = split2[1]
- classes.push(class)
- found=true;
- break;
- }
- }
- if(found) break;
- }
- }
- if(!found) classes.push("")
- }
- return classes;
- }
- /***
- **/
- function getStartEndTimes(log) {
- var fights = log.fights;
- var times = [];
- /*for(var i=0;i<fights.length;i++) {
- var t = [fights[i].start_time,fights[i].end_time]
- times.push(t);
- }*/
- // return times.join("-");
- var start = fights[0].start_time
- var end = fights[fights.length-1].end_time
- return [start,end].join(",")
- }
- /***
- **/
- function getDeaths(logID,times,cutoff,mainsTwinks,fightIdsCell, includedIdsArray) {
- if(logID==undefined || logID.length==0) return "";
- if(cutoff==0 || cutoff==undefined) cutoff=100;
- var chars = charStructureToList(mainsTwinks);
- var includedIds = getIncludedIdsFromRange(includedIdsArray)
- var fightIdsSplit = fightIdsCell.split("-");
- var fightIds=[];
- for(var i=0;i<fightIdsSplit.length;i++) {
- var id = fightIdsSplit[i].split(",")[0]
- var bossId = fightIdsSplit[i].split(",")[1];
- if(contains(includedIds,bossId)) {
- fightIds.push(id);
- }
- }
- //restore start end times
- var start = times.split(",")[0]
- var end = times.split(",")[1]
- //get log to this fight
- //hymsi key: bafb317c52cb13076ff2a3f3363371f1
- //leo key: 0f9e772cb350e61d740df5b391e383b1
- // hauex key: 836d35ba618368db3fbfe970da5cc81b
- var logJSON = UrlFetchApp.fetch("https://www.warcraftlogs.com:443/v1/report/tables/deaths/"+logID+"?start="+start+"&end="+end+"&cutoff="+(cutoff+2)+"&api_key=bafb317c52cb13076ff2a3f3363371f1");
- var log = Utilities.jsonParse(logJSON.getContentText());
- var entries = log.entries
- var deaths = [];
- var deathCounter=0;
- var id = 0;
- for (var i = 0;i<entries.length;i++) {
- var entry = entries[i];
- if(contains(chars,entry.name)) { //only look up chars from the squad
- if(!contains(fightIds,entry.fight)) {
- // if the id is not a valid fight id (e.g. because boss was excluded), continue
- continue;
- }
- if(id!=entry.fight) {
- //new fight
- id = entry.fight;
- deaths.push(entry.name);
- deathCounter = 1;
- } else {
- //same fight
- if(deathCounter==cutoff) {
- //deathCounter reached -> continue to next entry
- continue;
- } else {
- deaths.push(entry.name);
- deathCounter++;
- }
- }
- }
- }
- return deaths.join("-");
- }
- /***
- **/
- function getParticipation(logID,playerArea,mainsTwinks,mergeTwinks,countTries,includedIds) {
- //var logsJSON = UrlFetchApp.fetch("https://www.warcraftlogs.com:443/v1/reports/guild/untitled+spreadsheet/eredar/eu?start="+date+"&api_key=0f9e772cb350e61d740df5b391e383b1");
- if(logID.length==0) return "";
- var logJSON = UrlFetchApp.fetch("https://www.warcraftlogs.com:443/v1/report/fights/"+logID+"?api_key=836d35ba618368db3fbfe970da5cc81b");
- var log = Utilities.jsonParse(logJSON.getContentText());
- var charStructure = makeCharStructure(mainsTwinks)
- var fights = log.fights
- var includedIds = getIncludedIdsFromRange(includedIds)
- // get IDs of boss tries
- var bossIDs = []
- // garothi - felhounds - high command - Hasabel - Eonar - Imonar - Kingaroth - Vari - Coven - Aggramar - Argus
- var validBossIDs=[2076,2074,2070,2064,2075,2082,2088,2069,2073,2063,2092]
- for(var i=0; i<fights.length;i++) {
- //exclude trash fights (boss=0), non mythic fights (difficulty !=5), non Antorusfights (boss not in range)
- if(contains(includedIds,fights[i].boss) && fights[i].difficulty==5) {
- if(!countTries) { //only count kills
- if(fights[i].kill) bossIDs.push(fights[i].id)
- }else{
- bossIDs.push(fights[i].id)
- }
- }
- }
- var friendlies = log.friendlies
- var participation=[]
- for(var x = 0;x<playerArea.length;x++) {
- var name = playerArea[x][0];
- if(!name || name.length<1) continue;
- name = stripName(name)
- //get all characters of that player
- var chars = getCharactersOfPlayer(charStructure, name)
- Logger.log("Chars: "+chars)
- var playerNames = [];
- //find playerNames in logs
- for(var i=0; i<friendlies.length;i++) {
- if(mergeTwinks) {
- if(contains(chars,friendlies[i].name)) {
- playerNames.push(friendlies[i]);
- }
- } else {
- if(friendlies[i].name==name)
- playerNames.push(friendlies[i])
- }
- }
- if(playerNames.length == 0) participation.push(0);
- else {
- var tries = 0;
- // get for each char name of the player each fight id he participated in
- for(var j=0;j<playerNames.length;j++) {
- for(var i=0;i<playerNames[j].fights.length;i++){
- var id = playerNames[j].fights[i].id;
- if(contains(bossIDs,id)) tries++;
- }
- }
- participation.push(tries)
- }
- }
- return participation
- }
- /***
- **/
- function getCharactersOfPlayer(charStructure, main) {
- var chars = [main]
- for(var twink in charStructure) {
- if(charStructure.hasOwnProperty(twink)) {
- if(charStructure[twink] == main) {
- chars.push(twink)
- }
- }
- }
- return chars
- }
- /***
- **/
- function contains(array,obj) {
- for(var i=0;i<array.length;i++) {
- if(array[i]==obj) return true;
- }
- return false;
- }
- /***
- **/
- function contains2D(array,obj) {
- for(var i=0;i<array.length;i++) {
- var first = array[i][0]
- if(first==obj) return true;
- }
- return false;
- }
- /***
- **/
- function makeCharStructure(mainsTwinks) {
- var charStructure = {}
- //maps twinks to mains
- for(var i=0;i<mainsTwinks.length;i++) {
- var cell = mainsTwinks[i][0]
- if(cell.length>0) {
- var chars = cell.split("-")
- for(var c = 1;c<chars.length;c++) {
- var main = chars[0]
- var twink = chars[c]
- charStructure[twink] = main;
- }
- }
- }
- return charStructure;
- }
- /***
- **/
- function getCharacters(range,splitter,mainsTwinks,mergeTwinks) {
- var charStructure = makeCharStructure(mainsTwinks)
- Logger.log(charStructure)
- var names = [];
- //iterate over players per log
- for (var i=0;i<range[0].length;i++) {
- if(range[0][i].length>0) {
- var split = range[0][i].split(splitter)
- //split input per log
- for (var j=0;j<split.length;j++) {
- var split2 = split[j].split(",")
- var name = split2[0]
- var class = split2[1]
- if(!contains2D(names,name)) { //only add each name once
- var main = charStructure[name]
- Logger.log(main)
- // 1. solo main -> main immer undefined, oben oder unten je nach mergeTwinks
- // 2. main mit twink -> main immer undefined
- // 3. twink -> main defined -> wird nur hinzugefügt wenn mergeTwinks = False
- if(mergeTwinks) {
- if(main==undefined) names.push([name,class])
- } else {
- names.push([name,class])
- }
- }
- }
- }
- }
- return names.sort(function(a,b) {
- var nameA = a[0].toUpperCase(); // ignore upper and lowercase
- var nameB = b[0].toUpperCase(); // ignore upper and lowercase
- if (nameA < nameB) {
- return -1;
- }
- if (nameA > nameB) {
- return 1;
- }
- // names must be equal
- return 0;
- });
- }
- /***
- **/
- function getCharactersFromList(mainsTwinks,mergeTwinks) {
- var mains = [];
- for(var i=0;i<mainsTwinks.length;i++) {
- var cell = mainsTwinks[i][0]
- if(cell.length>0) {
- var chars = cell.split("-")
- mains.push(chars[0])
- if(!mergeTwinks)
- for(var j=1; j<chars.length;j++){
- mains.push("- "+chars[j]);
- }
- }
- }
- return mains;
- }
- /***
- **/
- function charStructureToList(mainsTwinks) {
- var mains = [];
- for(var i=0;i<mainsTwinks.length;i++) {
- var cell = mainsTwinks[i][0]
- if(cell.length>0) {
- var chars = cell.split("-")
- mains.push(chars[0])
- for(var j=1; j<chars.length;j++){
- mains.push(chars[j]);
- }
- }
- }
- return mains;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement