Advertisement
Guest User

Untitled

a guest
May 25th, 2016
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.31 KB | None | 0 0
  1. // ==UserScript==
  2. // @name FaceIT match room advanced stats
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.3
  5. // @description Shows elo, level and cs go steam hours for each player on match screen.
  6. // @match https://www.faceit.com/*
  7. // ==/UserScript==
  8. 'use strict';
  9.  
  10. var webkey = "1357CEF154C84CD7A502BE4B1EA6375C";
  11. var allPlayers = [];
  12. var hasFriends = [];
  13. var team1Players = [];
  14. var team1PlayersIDS = [];
  15. team1Players['teams'] = [];
  16. team1Players['teams']['team1'] = [];
  17. team1Players['teams']['team2'] = [];
  18. var team2Players = [];
  19. var team2PlayersIDS = [];
  20. team2Players['teams'] = [];
  21. team2Players['teams']['team1'] = [];
  22. team2Players['teams']['team2'] = [];
  23.  
  24. var drawStats = function(match) {
  25. var players1 = match.faction1.slice(0);
  26. $(players1).each(function(index,player){
  27. team1PlayersIDS.push(player['csgo_id']);
  28. });
  29. var players2 = match.faction2.slice(0);
  30. $(players2).each(function(index,player){
  31. team2PlayersIDS.push(player['csgo_id']);
  32. });
  33. if (match != null && $(".custom_stats_field").length != 10) {
  34. var factions = match.faction1.slice(0).concat(match.faction2);
  35.  
  36. $(factions).each(function(index, player) {
  37. var steamID = player['csgo_id'];
  38. var steamURL = "https://api.steampowered.com/IPlayerService/GetOwnedGames/v0001/?key=" + webkey + "&steamid=" + steamID + "&format=json"
  39. var matchVoting = match.state === "voting";
  40. var steamFriends = "https://api.steampowered.com/ISteamUser/GetFriendList/v0001/?key=" + webkey + "&steamid=" + steamID + "&relationship=friend"
  41. if(allPlayers.indexOf(player['csgo_id']) == -1){
  42. allPlayers.push(player['csgo_id']);
  43. }
  44.  
  45. $.ajax({ url: "https://jsonp-steamid-proxy.herokuapp.com/?url=" + encodeURIComponent(steamURL),
  46. success: function(data) { callfaceit(steamFriends, data, player,matchVoting); },
  47. error: function(data) { callfaceit(steamFriends, data, player,matchVoting); }
  48. });
  49. });
  50. }
  51. };
  52.  
  53. angular.element(document).ready(function() {
  54. angular.element(document).injector().invoke(function($compile, $location) {
  55. var thisDocument = angular.element(document).scope();
  56. thisDocument.location = $location;
  57. thisDocument.$watch( 'location.url()', function(url) {
  58. if (url && url.indexOf('en/csgo/room/') > -1) {
  59. var gameElement = $("section.match-vs");
  60. var pageDocument = angular.element(gameElement).scope();
  61. var game = angular.element(gameElement).scope();
  62.  
  63. game.$watch('match', drawStats);
  64. }
  65. });
  66. });
  67. });
  68.  
  69. var cleanPrevious = function() {
  70. try {
  71. $(".custom_skill_level").remove();
  72. $(".custom_stats_field").remove();
  73. $(".custom_flag").remove();
  74. $(".match-team-member__row").remove();
  75. } catch (err) {};
  76. };
  77.  
  78. var callfaceit = function(steamFriends, previousData, player, matchVoting) {
  79. var nickname = player['nickname'];
  80. $.ajax({ url: "https://api.faceit.com/api/nicknames/" + player['nickname'],
  81. success: function(data) {
  82. try {
  83. var csgoID = player['csgo_id'];
  84. player = data['payload']['games']['csgo'];
  85. player['nickname'] = nickname;
  86. player['hours'] = extractHours(previousData);
  87. player['country'] = data['payload']['country'];
  88. player['csgo_id'] = csgoID;
  89. } catch (err) {}
  90. if(matchVoting !== true){
  91. checkFriend(steamFriends, player, data, matchVoting);
  92. }else{
  93. drawcustomstats(data, player, matchVoting);
  94. }
  95. },
  96. error: function(data) {
  97. var csgoID = player['csgo_id'];
  98. player['hours'] = extractHours(previousData);
  99. player['nickname'] = nickname;
  100. player['country'] = data['payload']['country'];
  101. player['csgo_id'] = csgoID;
  102. if(matchVoting !== true){
  103. checkFriend(steamFriends, player, data, matchVoting);
  104. }else{
  105. drawcustomstats(data, player, matchVoting);
  106. }
  107. }
  108. });
  109. };
  110.  
  111. var checkFriend = function(URL, player, data, matchVoting){
  112. $.ajax({ url: URL,
  113. success: function(data1){
  114. var teamPlayers = [];
  115. var teamID = [];
  116. try {
  117. if(team1PlayersIDS.indexOf(player['csgo_id']) != -1){
  118. teamPlayers = team1Players;
  119. teamID = team1PlayersIDS;
  120. }else{
  121. teamPlayers = team2Players;
  122. teamID = team2PlayersIDS;
  123. }
  124. player['friendsInLobby'] = [];
  125. player['allFriends'] = [];
  126. try {
  127. player['allFriends'] = data1['friendslist']['friends'];
  128. }catch (err){}
  129. teamPlayers[player['csgo_id']] = [];
  130. for(var i = 0; i < player['allFriends'].length; i++){
  131. for(var j = 0; j < teamID.length; j++){
  132. if(player['allFriends'][i]['steamid'] == teamID[j]){
  133. player['friendsInLobby'].push(teamID[j]);
  134. hasFriends.push(player['csgo_id']);
  135. hasFriends.push(teamID[j]);
  136. teamPlayers[player['csgo_id']].push(teamID[j]);
  137. }
  138. }
  139. }
  140. } catch (err) {}
  141. if(team1PlayersIDS.indexOf(player['csgo_id']) != -1){
  142. team1Players = teamPlayers;
  143. sortPlayerTeams(teamID, 1, player['csgo_id']);
  144. }else{
  145. team2Players = teamPlayers;
  146. sortPlayerTeams(teamID, 2, player['csgo_id']);
  147. }
  148. drawcustomstats(data, player, matchVoting);
  149. },
  150. error: function(data1){
  151. var teamPlayers = [];
  152. var teamID = [];
  153. try {
  154. if(team1PlayersIDS.indexOf(player['csgo_id']) != -1){
  155. teamPlayers = team1Players;
  156. teamID = team1PlayersIDS;
  157. }else{
  158. teamPlayers = team2Players;
  159. teamID = team2PlayersIDS;
  160. }
  161. player['friendsInLobby'] = [];
  162. player['allFriends'] = [];
  163. try {
  164. player['allFriends'] = data1['friendslist']['friends'];
  165. }catch (err){}
  166. teamPlayers[player['csgo_id']] = [];
  167. for(var i = 0; i < player['allFriends'].length; i++){
  168. for(var j = 0; j < teamID.length; j++){
  169. if(player['allFriends'][i]['steamid'] == teamID[j]){
  170. player['friendsInLobby'].push(teamID[j]);
  171. hasFriends.push(player['csgo_id']);
  172. hasFriends.push(teamID[j]);
  173. teamPlayers[player['csgo_id']].push(teamID[j]);
  174. }
  175. }
  176. }
  177. } catch (err) {}
  178. if(team1PlayersIDS.indexOf(player['csgo_id']) != -1){
  179. team1Players = teamPlayers;
  180. sortPlayerTeams(teamID, 1, player['csgo_id']);
  181. }else{
  182. team2Players = teamPlayers;
  183. sortPlayerTeams(teamID, 2, player['csgo_id']);
  184. }
  185. drawcustomstats(data, player, matchVoting);
  186. }
  187. });
  188. };
  189.  
  190. var sortPlayerTeams = function(teamID, teamNR, playerID){
  191. var teamPlayers = [];
  192. if(teamNR == 1){
  193. teamPlayers = team1Players;
  194. teamPlayers['teams']['team1'] = team1Players['teams']['team1'];
  195. teamPlayers['teams']['team2'] = team1Players['teams']['team2'];
  196. }else{
  197. teamPlayers = team2Players;
  198. teamPlayers['teams']['team1'] = team2Players['teams']['team1'];
  199. teamPlayers['teams']['team2'] = team2Players['teams']['team2'];
  200. }
  201. if(hasFriends.indexOf(playerID) != -1){
  202. if(teamPlayers['teams']['team1'].length === 0){
  203. teamPlayers['teams']['team1'].push(playerID);
  204. }else{
  205. for(var i = 0; i < teamPlayers['teams']['team1'].length; i++){
  206. for(var j = 0; j < teamPlayers[playerID].length; j++){
  207. if(teamPlayers[playerID][j] != "undefined" && teamPlayers['teams']['team1'][i] == teamPlayers[playerID][j]){
  208. teamPlayers['teams']['team1'].push(playerID);
  209. break;
  210. }
  211. }
  212. }
  213. }
  214. if(teamPlayers['teams']['team2'].length === 0 && teamPlayers['teams']['team1'].indexOf(playerID) == -1){
  215. teamPlayers['teams']['team2'].push(playerID);
  216. }else{
  217. for(var i = 0; i < teamPlayers['teams']['team2'].length; i++){
  218. for(var j = 0; j < teamPlayers[playerID].length; j++){
  219. if(teamPlayers['teams']['team2'][i] == teamPlayers[playerID][j]){
  220. teamPlayers['teams']['team2'].push(playerID);
  221. break;
  222. }
  223. }
  224. }
  225. }
  226. }
  227. if(teamNR == 1){
  228. team1Players['teams']['team1'] = teamPlayers['teams']['team1'];
  229. team1Players['teams']['team2'] = teamPlayers['teams']['team2'];
  230. }else{
  231. team2Players['teams']['team1'] = teamPlayers['teams']['team1'];
  232. team2Players['teams']['team2'] = teamPlayers['teams']['team2'];
  233. }
  234. };
  235.  
  236.  
  237. var extractHours = function(data) {
  238. var hours = "N/A";
  239. try {
  240. var games = data['response']['games'];
  241. for(var i = 0; i < games.length; i++) {
  242. var game = games[i];
  243. if (game['appid'] === 730) {
  244. hours = (game['playtime_forever']/60).toFixed(1);
  245. break;
  246. }
  247. }
  248. } catch (err) {}
  249. return hours;
  250. };
  251.  
  252. var drawcustomstats = function(data, player, matchVoting) {
  253. var skillLevelImgURL = "https://cdn.faceit.com/frontend/144/assets/images/skill-icons/skill_level_" + player['skill_level_label'] + "_sm.png";
  254. var skillLevelDiv = $("<div></div>").addClass("custom_skill_level");
  255. var skillLevelImg = $("<img/>").attr({ src: skillLevelImgURL})
  256. skillLevelDiv.css({
  257. "position": "absolute",
  258. "z-index": 3,
  259. "right": "34px",
  260. "bottom": "-6px",
  261. "width": "24px",
  262. "height": "24px",
  263. }).append(skillLevelImg);
  264. var countryFlagURL = "https://cdn.faceit.com/frontend/125/assets/images/flags/" + player['country'].toUpperCase() + ".png";
  265. var countryFlagDiv = $("<div></div>").addClass("custom_flag");
  266. var countryFlagImg = $("<img/ alt=" + player['country']+ ">").attr({ src: countryFlagURL})
  267.  
  268. countryFlagDiv.css({
  269. "position": "absolute",
  270. "z-index": 1,
  271. "right": "-18px",
  272. "bottom": "35px",
  273. "width": "45px",
  274. "height": "25px",
  275. }).append(countryFlagImg);
  276. var statsContainerDiv;
  277. if(matchVoting !== true){
  278. statsContainerDiv = $("<div></div>").addClass('pa-sm')
  279. .addClass('btn-block')
  280. .addClass("custom_stats_field")
  281. .attr('style', 'padding-top: 0px !important');
  282.  
  283. var statsDiv;
  284. if(player['friendsInLobby'].length !== 0 && player['friendsInLobby'][0] !== "undefined" && hasFriends.indexOf(player['csgo_id']) !== -1){
  285. var teamID = 0;
  286. if(team1PlayersIDS.indexOf(player['csgo_id']) == -1){
  287. teamID = 2;
  288. }else{
  289. teamID = 1;
  290. }
  291. if(teamID == 1){
  292. if(team1Players['teams']['team1'].indexOf(player['csgo_id']) != -1){
  293. statsDiv = $("<div style=\"background-color: rgba(100,0,0,0.4)\"></div>");
  294. }else{
  295. statsDiv = $("<div style=\"background-color: rgba(0,100,0,0.4)\"></div>");
  296. }
  297. }else{
  298. if(team2Players['teams']['team1'].indexOf(player['csgo_id']) != -1){
  299. statsDiv = $("<div style=\"background-color: rgba(100,0,0,0.4)\"></div>");
  300. }else{
  301. statsDiv = $("<div style=\"background-color: rgba(0,100,0,0.4)\"></div>");
  302. }
  303. }
  304. }else{
  305. statsDiv = $("<div style=\"background-color: rgb(255,255,255)\"></div>");
  306. }
  307. var eloField = $("<strong></strong>").html(player['faceit_elo']);
  308. statsDiv.append("ELO: ");
  309. statsDiv.append(eloField);
  310. var hoursField = $("<strong></strong>").html(player['hours']);
  311. statsDiv.append(" Hours: ");
  312. statsDiv.append(hoursField);
  313.  
  314. statsContainerDiv.append(statsDiv);
  315. }
  316. var matchItem = $("a.match-team-member__name strong:contains('" + player['nickname'] + "')").parent().parent().parent().parent();
  317. matchItem.find('.match-team-member__avatar').append(skillLevelDiv);
  318. if(!matchVoting){
  319. matchItem.find('.match-team-member__row').append(statsContainerDiv);
  320. }
  321. matchItem.find('.match-team-member__avatar').append(countryFlagDiv);
  322. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement