Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function onOpen() {
- var ui = SpreadsheetApp.getUi();
- // Or DocumentApp or FormApp.
- ui.createMenu('Elo Functions')
- .addItem('Create Multiplayer Template (Warning: Clobbers Data)', 'createMultiplayerTemplate')
- .addSeparator()
- .addToUi();
- }
- var Coven = "Coven";
- var Classic = "Classic";
- var Win = "Win";
- var Loss = "Loss";
- var Town = "Town";
- var Mafia = "Mafia";
- var Arsonist = "Arsonist";
- var SerialKiller = "SerialKiller";
- var Werewolf = "Werewolf";
- var Witch = "Witch";
- var Executioner = "Executioner";
- var Jester = "Jester";
- var Survivor = "Survivor";
- var Amnesiac = "Amnesiac";
- var Vampire = "Vampire";
- var Coven = "Coven";
- var Pestilence = "Pestilence";
- var Juggernaut = "Juggernaut";
- var GuardianAngel = "GuardianAngel";
- var Pirate = "Pirate";
- var WinRatesMap = {
- Classic:{
- Town: 0.57636,
- Mafia: 0.378361,
- Witch: 0.244151,
- SerialKiller: 0.114066,
- Arsonist: 0.101488,
- Executioner: 0.338722,
- Jester: 0.239533,
- Werewolf: 0.140815,
- Coven: 0.0
- },
- Coven:{
- Town: 0.547083,
- SerialKiller: 0.032316,
- Arsonist: 0.0491525,
- Executioner: 0.337763,
- Jester: 0.32736,
- Werewolf: 0.0591398,
- Coven: 0.393743,
- Juggernaut: 0.0263158,
- Mafia: 0.0
- }
- };
- var WinLossMap = { Win:1, Loss:0 };
- var OppostionMap = {
- Town: [ Mafia, Arsonist, SerialKiller, Werewolf, Witch, Executioner, Coven, Pestilence, Juggernaut, Pirate ],
- Mafia: [ Town, Arsonist, SerialKiller, Werewolf, Coven, Pestilence, Juggernaut, Pirate ],
- Arsonist: [ Town, Mafia, SerialKiller, Werewolf, Coven, Pestilence, Juggernaut, Pirate ],
- SerialKiller: [ Town, Mafia, Arsonist, Werewolf, Coven, Pestilence, Juggernaut, Pirate ],
- Werewolf: [ Town, Mafia, SerialKiller, Arsonist, Coven, Pestilence, Juggernaut, Pirate ],
- Witch: [ Town ],
- Executioner: [ Town ],
- Jester: [ Town, Mafia, SerialKiller, Arsonist, Werewolf, Witch, Executioner, Coven, Pestilence, Juggernaut, Pirate ],
- Survivor: [ Town, Mafia, SerialKiller, Arsonist, Werewolf, Witch, Executioner, Coven, Pestilence, Juggernaut, Pirate ],
- Amnesiac: [ Town, Mafia, SerialKiller, Arsonist, Werewolf, Witch, Executioner, Coven, Pestilence, Juggernaut, Pirate ],
- Vampire: [ Town, Mafia, Arsonist, SerialKiller, Werewolf, Coven, Pestilence, Juggernaut, Pirate ],
- Coven: [ Town, Mafia, Arsonist, SerialKiller, Werewolf, Pestilence, Juggernaut, Pirate ],
- Pestilence: [ Town, Mafia, Coven, Arsonist, SerialKiller, Werewolf, Coven, Juggernaut, Pirate ],
- Juggernaut: [ Town, Mafia, Coven, Arsonist, SerialKiller, Werewolf, Coven, Pestilence, Pirate ],
- GuardianAngel: [ Town, Mafia, Coven, Arsonist, SerialKiller, Werewolf, Coven, Pestilence, Juggernaut, Pirate ],
- Pirate: [ Town, Mafia, Coven, Arsonist, SerialKiller, Werewolf, Coven, Pestilence, Juggernaut ]
- };
- function createMultiplayerTemplate() {
- createGameTypeDropDown();
- createPlayerNumbers();
- createFactionDropDown();
- createWinLossDropDown();
- createHeadings();
- }
- function createHeadings(){
- var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
- sheet.getRange("D1").setValue("Elo Before")
- sheet.getRange("E1").setValue("Elo Gain")
- sheet.getRange("F1").setValue("Elo After")
- sheet.getRange("H1").setValue("Faction Avg")
- sheet.getRange("I1").setValue("Opponent Avg")
- }
- function createPlayerNumbers() {
- var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
- var range = sheet.getRange("A2:A16");
- range.setValues([[1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13],[14],[15]])
- }
- function createGameTypeDropDown() {
- var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
- var option = [Classic, Coven];
- var dv = SpreadsheetApp.newDataValidation();
- dv.setAllowInvalid(false);
- dv.setHelpText("");
- dv.requireValueInList(option, true);
- sheet.getRange("A1").setDataValidation(dv);
- }
- function createFactionDropDown() {
- var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
- var option = [Town,Mafia,Arsonist,SerialKiller,Werewolf,Witch,Executioner,Jester,Survivor,Amnesiac,Vampire,Coven,Pestilence,Juggernaut,GuardianAngel,Pirate];
- var dv = SpreadsheetApp.newDataValidation();
- dv.setAllowInvalid(false);
- dv.setHelpText("");
- dv.requireValueInList(option, true);
- sheet.getRange("B2:B16").setDataValidation(dv);
- }
- function createWinLossDropDown() {
- var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
- var option = [Win, Loss];
- var dv = SpreadsheetApp.newDataValidation();
- dv.setAllowInvalid(false);
- dv.setHelpText("");
- dv.requireValueInList(option, true);
- sheet.getRange("C2:C16").setDataValidation(dv);
- }
- function teamAvg( myFaction , _passInFullRangeForBetterDataValidation ) {
- var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
- var range = sheet.getRange("B2:D16");
- var arr = range.getValues();
- var nMatches = 0;
- var nSum = 0;
- for (var i = 0; i < arr.length; ++i){
- var row = arr[i];
- if (row[0] == myFaction){
- nSum += row[2];
- nMatches++;
- }
- }
- return nSum / nMatches;
- }
- function enemyAvg( myFaction , _passInFullRangeForBetterDataValidation ) {
- var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
- var range = sheet.getRange("B2:D16");
- var arr = range.getValues();
- var nMatches = 0;
- var nSum = 0;
- for (var i = 0; i < arr.length; ++i){
- var row = arr[i];
- var opposingFactions = OppostionMap[myFaction];
- if (opposingFactions.indexOf(row[0]) >= 0) {
- nSum += row[2];
- nMatches++;
- }
- }
- return nSum / nMatches;
- }
- function eloChange(gameType, myFaction, myRating, myTeamRating, theirTeamRating, winString, _passInFullRangeForBetterDataValidation) {
- var eloChange = 0;
- var isWin = winString == Win;
- var winRate = WinRatesMap[gameType][myFaction];
- var kFactor = 16;
- if (myRating >= 2000) { kFactor = 7; }
- else if (myRating >= 1800) { kFactor = 11; }
- var Rb = theirTeamRating;
- var Ra = myTeamRating;
- var Ea = 0.5 + (1 / (1 + Math.pow(10, ((Rb - Ra) / 600))));
- var eloChange = kFactor * (isWin ? 1-winRate : -winRate) * (isWin ? 2-Ea : Ea) ;
- return eloChange;
- }
- function alert(message) {
- SpreadsheetApp.getUi() // Or DocumentApp or FormApp.
- .alert(message);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement