TW Friends Check

Shows list of Friends gifts (log) from current Event. TW Friends script req.

当前为 2015-07-14 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name TW Friends Check
  3. // @name:ru TW Friends Check
  4. // @namespace TW Friends Check
  5. // @description Shows list of Friends gifts (log) from current Event. TW Friends script req.
  6. // @description:ru Журнал подарков от друзей
  7. // @include http://*.the-west.*/game.php*
  8. // @include https://*.the-west.*/game.php*
  9. // @version 0.05a
  10. // @grant none
  11. // ==/UserScript==
  12. // TW Friends script needed!!! https://greasyfork.org/users/3197
  13. // Based on ideas of TW Friends script
  14. //
  15. // $.post("/game.php?window=ses&mode=log", {ses_id:"Easter", limit:100, page:2} )
  16.  
  17.  
  18. function FCScript(fn) {
  19. var script = document.createElement('script');
  20. script.setAttribute("type", "application/javascript");
  21. script.textContent = '(' + fn + ')();';
  22. document.body.appendChild(script); // left for other use
  23. document.body.removeChild(script);
  24. }
  25.  
  26. FCScript(function() {
  27. var VERSION = "0.05a";
  28. var NAME = "TW Friends Check";
  29. var installURL = 'https://greasyfork.org/ru/scripts/9134-tw-friends-check';
  30. if (!isDefined(window.HiroFriends))
  31. {
  32. new west.gui.Dialog('TW Friends Check',
  33. '<div class="txcenter"><b>TW Friends script needed</b><br /><a href="https://greasyfork.org/users/3197" target=_blank>Link</a></div>',
  34. west.gui.Dialog.SYS_WARNING).addButton("OK").show();
  35. return;
  36. }
  37. if(Game && Game.loaded)
  38. {
  39. // old for Easter if (!Game.sesData.length) return;
  40. if (!Game.sesData) return;
  41. }
  42. fcContainer = $("<div />",
  43. {
  44. id: "twfc_container",
  45. style: "position: absolute; top: 32px; right: 50%; margin-right: 20px; padding-right:25px; z-index: 15; width: 100px; height: 36px; text-align: right; background: url('/images/interface/custom_unit_counter_sprite.png') no-repeat scroll right 0px transparent;"
  46. }
  47. );
  48. fcContainer.appendTo("#user-interface");
  49. //aLink = $("<a href='#' onclick='return TWFCheck.get();'>Test</a>",
  50. fcLink = $("<a />",
  51. {
  52. id: "twfc_a",
  53. style: "color:red; font-size:18px;",
  54. onclick: "return TWFCheck.get();",
  55. html: "LOAD",
  56. }
  57. );
  58. fcContainer.append('<div style="margin-top:5px;" id="twfc_wrap"></div>');
  59. fcLink.appendTo("#twfc_wrap");
  60. TWFCheck = {
  61. max_page: 100,
  62. is_init: false,
  63. is_calc: false,
  64. ses_id: '',
  65. friends: [],
  66. mes_loaded: 0,
  67. mes_friends: [],
  68. mes_load_done: false,
  69. window: null,
  70. winName: 'TWFC_window',
  71. };
  72. TWFCheck.init = function()
  73. {
  74. if (TWFCheck.is_init) return;
  75. TWFCheck.ses_id = HiroFriends.eventName;
  76. TWFCheck.friends = HiroFriends.friends;
  77. console.log('TWFC:inited');
  78. TWFCheck.is_init = true;
  79. }
  80. TWFCheck.get = function()
  81. {
  82. TWFCheck.init();
  83. if (!TWFCheck.mes_loaded) TWFCheck.loadMsgList();
  84. else TWFCheck.show();
  85. return false;
  86. }
  87. TWFCheck.loadMsgList = function(page)
  88. {
  89. if (!page) page = 1;
  90. TWFCheck.init();
  91. fcLink.html("...");
  92. var hasNext = true;
  93. while (hasNext) {
  94. $.ajax({ type: "POST", url: "/game.php?window=ses&mode=log", data: {ses_id:TWFCheck.ses_id, limit:100, page:page}, async: false,
  95. success: function(data)
  96. {
  97. console.log(data);
  98. hasNext = data.hasNext;
  99. TWFCheck.mes_loaded += data.entries.length;
  100.  
  101. $.each(data.entries,
  102. function (key, val)
  103. {
  104. if (val.type == 'friendDrop')
  105. {
  106. var d = val.details;
  107. d = JSON.parse(d);
  108. var fid = d.player_id;
  109.  
  110. var p = TWFCheck.mes_friends[fid];
  111. if (p) {p.count++;}
  112. else
  113. {
  114. p = {count:1, date:val.date, name:d.name, deleted:true, id:fid};
  115. }
  116. TWFCheck.mes_friends[fid] = p;
  117. }
  118. }); //each
  119. } //f.data
  120. }); //ajax
  121. //OFF if (page > TWFCheck.max_page) break;
  122. page++;
  123. } //while
  124. TWFCheck.mes_load_done = true;
  125. fcLink.html("VIEW");
  126. }
  127. TWFCheck.show = function()
  128. {
  129. if (!TWFCheck.mes_load_done) return;
  130. if (!TWFCheck.is_calc) TWFCheck.calc();
  131. var key; //player id -> friend_id
  132. var td1;
  133. var td2;
  134. var td3;
  135. var cols = 5;
  136. var dstr = '';
  137. var idx = 1;
  138. var tbl = $('<table style="width: 100%" border="0" cellpadding="0" cellspacing="0">');
  139. var deletedAr = [];
  140. var mes = TWFCheck.mes_friends;
  141. for(key in mes)
  142. {
  143. if (!mes.hasOwnProperty(key)) continue;
  144. var val = TWFCheck.mes_friends[key];
  145. if (val.deleted)
  146. {
  147. deletedAr.push(val);
  148. continue;
  149. }
  150. //console.log(idx+"/"+key+"/"+val);
  151. td1 = $('<td style="vertical-align: middle;">'+val.count+'</td>');
  152. dstr = '';
  153. if (val.count) dstr = val.date.getFormattedTimeString4Timestamp();
  154. td2 = $('<td style="vertical-align: middle;">'+dstr+'</td>');
  155. td3 = $('<td style="vertical-align: middle;"><a href="javascript:void(TWFCheck.removeFriend('+key+'));"><img style="width:16px; height: 16px;" alt="'+HiroFriends.localeMsg('removeFriend')+'" title="'+HiroFriends.localeMsg('removeFriend')+'" src="/images/icons/delete.png" /></a></td>');
  156. tbl.append(
  157. $('<tr style="background-image: url(\'/images/tw2gui/table/table_row.png\'); height: 29px;">)').append(
  158. $('<td style="width: 10%; vertical-align: middle; text-align: right; padding-right: 8px">' + idx
  159. + '.</td><td style="width: 35%; vertical-align: middle;"><a href="javascript:void(PlayerProfileWindow.open('+key+'));">' + val.name + '</a></td>'
  160. ), td1, td2, td3));
  161. idx++;
  162. }
  163. // deleted friends
  164. if (deletedAr.length)
  165. {
  166. td1 = $('<td style="vertical-align: middle; padding-left:8px;" colspan="'+cols+'"><b>Removed Friends</b></td>');
  167. tbl.append($('<tr style="background-image: url(\'/images/tw2gui/table/table_row_you.png\'); height: 29px;">)').append(td1));
  168. idx = 1;
  169. $.each(deletedAr, function(key,val)
  170. {
  171. td1 = $('<td style="vertical-align: middle;">'+val.count+'</td>');
  172. dstr = '';
  173. if (val.count) dstr = val.date.getFormattedTimeString4Timestamp();
  174. td2 = $('<td style="vertical-align: middle;" colspan="'+(cols-3)+'">'+dstr+'</td>');
  175. tbl.append(
  176. $('<tr style="background-image: url(\'/images/tw2gui/table/table_row.png\'); height: 29px;">)').append(
  177. $('<td style="width: 10%; vertical-align: middle; text-align: right; padding-right: 8px">' + idx
  178. + '.</td><td style="width: 35%; vertical-align: middle;"><a href="javascript:void(PlayerProfileWindow.open('+val.id+'));">' + val.name + '</a></td>'
  179. ), td1, td2));
  180. idx++;
  181. });
  182. }
  183. tbl.append($('<tr style="background-image: url(\'/images/tw2gui/table/table_row_you.png\'); height: 29px;">)').append($('<td style="vertical-align: middle; text-align: right; padding-right: 8px" colspan="'+cols+'"><a target="_blank" href="'+installURL+'">'+NAME+'</a> version <b>' + VERSION + '</b></td>')));
  184. var hiroWindow = wman.open(TWFCheck.winName, null, "noreload").setMiniTitle(TWFCheck.ses_id).setTitle(TWFCheck.ses_id);
  185. var hiroPane = new west.gui.Scrollpane;
  186. hiroPane.appendContent(tbl);
  187. hiroWindow.appendToContentPane(hiroPane.getMainDiv())
  188. TWFCheck.window = hiroWindow;
  189. }
  190. TWFCheck.calc = function()
  191. {
  192. //adding friends withot gifts + checking for deleted friends
  193. $.each(TWFCheck.friends, function(key,val)
  194. {
  195. var fid = val.id;
  196. if (!fid) fid = key;
  197. var p = TWFCheck.mes_friends[fid];
  198. if (!p) { p = {count:0, name:val.name, date:0, deleted:false, id:fid}; } // no gifts from friend
  199. else
  200. {
  201. p.deleted = false;
  202. }
  203. TWFCheck.mes_friends[fid] = p;
  204. });
  205. TWFCheck.is_calc = true;
  206. }
  207. TWFCheck.removeFriend = function(fid)
  208. {
  209. FriendslistWindow.deleteFromFriendList(fid);
  210. TWFCheck.mes_friends[fid].deleted = true;
  211. wman.close(TWFCheck.winName);
  212. TWFCheck.show();
  213. }
  214. }
  215. );