QT Framework for Grepolis

A script framework for Grepolis

目前为 2014-07-29 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name QT Framework for Grepolis
  3. // @namespace Quack
  4. // @description A script framework for Grepolis
  5. // @include http://*.grepolis.*/game*
  6. // @icon http://s1.directupload.net/images/140711/eshmcqzu.png
  7. // @version 1.02.01
  8. // @grant GM_listValues
  9. // @grant GM_getValue
  10. // @grant GM_setValue
  11. // @grant GM_deleteValue
  12. // @grant GM_info
  13. // @grant GM_xmlhttpRequest
  14. // ==/UserScript==
  15.  
  16. /************************************************************************
  17. * Main Script
  18. ***********************************************************************/
  19. function main_script(DATA) {
  20. /************************************************************************
  21. * Global variables
  22. ***********************************************************************/
  23. var QT = {};
  24. var wID = Game.world_id;
  25. var mID = Game.market_id;
  26. var aID = Game.alliance_id;
  27. var sID = Game.player_id;
  28. var pName = Game.player_name;
  29.  
  30. /************************************************************************
  31. * Languages
  32. ***********************************************************************/
  33. QT.Lang = {
  34. get : function (a, b) {
  35. if (QT.Lang[mID] != undefined && QT.Lang[mID][a] != undefined && QT.Lang[mID][a][b] != undefined) {
  36. return QT.Lang[mID][a][b]
  37. } else {
  38. return QT.Lang.en[a][b]
  39. }
  40. },
  41. de : {
  42. test : {
  43. teststring : 'Sprache wurde erkannt'
  44. }
  45. },
  46. en : {
  47. test : {
  48. teststring : 'Language detected'
  49. }
  50. }
  51. };
  52.  
  53. /************************************************************************
  54. * Images
  55. ***********************************************************************/
  56. QT.Images = {};
  57.  
  58. /************************************************************************
  59. * Links
  60. ***********************************************************************/
  61. QT.Links = {};
  62.  
  63. /************************************************************************
  64. * Settings
  65. ***********************************************************************/
  66. QT.Settings = {
  67. values : {
  68. "messageOpenAlert" : true,
  69. "reportOpenAlert" : true,
  70. "onlinetotal" : 0
  71. },
  72. save : function (name, value) {
  73. QT_saveValue(name, value);
  74. },
  75. save_all : function (valuesToSave) {
  76. QT_saveAllValues(QT.Settings.values, valuesToSave);
  77. },
  78. delete : function (name) {
  79. QT_deleteValue(name);
  80. },
  81. delete_all : function () {
  82. QT_deleteAllValues();
  83. },
  84. setValues : function () {
  85. for (var opt in DATA) {
  86. QT.Settings.values[opt] = DATA[opt];
  87. }
  88. }
  89. };
  90.  
  91. /************************************************************************
  92. * Ajax Call functions
  93. ***********************************************************************/
  94. QT.CallAjaxFunction = {
  95. message : {
  96. default:
  97. function (event, xhr, settings) {
  98. if (QT.Settings.values.messageOpenAlert)
  99. QT.Functions.messageOpenAlert();
  100. }
  101. },
  102. report : {
  103. index : function () {
  104. if (QT.Settings.values.reportOpenAlert)
  105. QT.Functions.reportOpenAlert();
  106. }
  107. }
  108. };
  109.  
  110. /************************************************************************
  111. * Functions
  112. ***********************************************************************/
  113. QT.Functions = {
  114. messageOpenAlert : function () {
  115. alert("Die Nachrichten wurden geöffnet");
  116. },
  117. reportOpenAlert : function () {
  118. alert("Die Berichte wurden geöffnet");
  119. },
  120. testButtons : function () {
  121. $('#ui_box').append('<div id="qt_buttons" style="position: relative;top: 54px;z-index: 100"><button id="qt_save">Save</button><button id="qt_saveall">Save all</button><button id="qt_delete">Delete</button><button id="qt_deleteall">Delete all</button></div>');
  122. $("#qt_save").click(function () {
  123. QT.Settings.save("messageOpenAlert", false);
  124. });
  125. $("#qt_saveall").click(function () {
  126. var values = {};
  127. values.messageOpenAlert = false;
  128. values.reportOpenAlert = false;
  129. QT.Settings.save_all(values);
  130. });
  131. $("#qt_delete").click(function () {
  132. QT.Settings.delete("messageOpenAlert");
  133. });
  134. $("#qt_deleteall").click(function () {
  135. QT.Settings.delete_all();
  136. });
  137. }
  138. };
  139.  
  140. /************************************************************************
  141. * Observer
  142. ***********************************************************************/
  143. $.Observer(GameEvents.game.load).subscribe('QT', function (e, data) {
  144. QT.Settings.setValues();
  145. QT.Functions.testButtons();
  146.  
  147. $(document).ajaxComplete(function (event, xhr, settings) {
  148. var a = settings.url.split("?");
  149. var b = a[0].substr(6);
  150. var c = a[1].split("&")[1].substr(7);
  151. if (b in QT.CallAjaxFunction && c in QT.CallAjaxFunction[b]) {
  152. QT.CallAjaxFunction[b][c](event, xhr, settings);
  153. }
  154. });
  155. });
  156. }
  157.  
  158. /************************************************************************
  159. * Start Method
  160. ***********************************************************************/
  161. var DATA = {
  162. script_version : GM_info.script.version
  163. };
  164.  
  165. var keys = GM_listValues();
  166. for (var i = 0, key = null; key = keys[i]; i++) {
  167. DATA[key] = GM_getValue(key);
  168. }
  169.  
  170. unsafeWindow.QT_saveValue = function (name, val) {
  171. setTimeout(function () {
  172. GM_setValue(name, val);
  173. window.location.reload();
  174. }, 0);
  175. };
  176. unsafeWindow.QT_saveAllValues = function (QTsettings, values) {
  177. setTimeout(function () {
  178. var exceptions = ["qmenu_update_next", "qmenu_online_version", "onlinetotal"];
  179. for (key in QTsettings) {
  180. if (exceptions.indexOf(key) === -1) {
  181. if (key in values) {
  182. GM_setValue(key, values[key]);
  183. } else {
  184. GM_deleteValue(key);
  185. }
  186. }
  187. }
  188. window.location.reload();
  189. }, 0);
  190. };
  191. unsafeWindow.QT_deleteValue = function (name) {
  192. setTimeout(function () {
  193. GM_deleteValue(name);
  194. window.location.reload();
  195. }, 0);
  196. };
  197. unsafeWindow.QT_deleteAllValues = function () {
  198. setTimeout(function () {
  199. var keys = GM_listValues();
  200. for (var i = 0, key = null; key = keys[i]; i++) {
  201. GM_deleteValue(key);
  202. }
  203. window.location.reload();
  204. }, 0);
  205. };
  206.  
  207. if (typeof exportFunction == 'function') {
  208. exportFunction(unsafeWindow.QT_saveValue, unsafeWindow, {
  209. defineAs : "QT_saveValue"
  210. });
  211. exportFunction(unsafeWindow.QT_saveAllValues, unsafeWindow, {
  212. defineAs : "QT_saveAllValues"
  213. });
  214. exportFunction(unsafeWindow.QT_deleteValue, unsafeWindow, {
  215. defineAs : "QT_deleteValue"
  216. });
  217. exportFunction(unsafeWindow.QT_deleteAllValues, unsafeWindow, {
  218. defineAs : "QT_deleteAllValues"
  219. });
  220. }
  221.  
  222. function appendScript() {
  223. if (unsafeWindow.Game) {
  224. var QT_script = document.createElement('script');
  225. QT_script.type = 'text/javascript';
  226. QT_script.textContent = main_script.toString() + "\n main_script(" + JSON.stringify(DATA) + ");";
  227. document.body.appendChild(QT_script);
  228. } else {
  229. setTimeout(function () {
  230. appendScript();
  231. }, 100);
  232. }
  233. }
  234.  
  235. appendScript();