van.mz.playerAdvanced

Player display optimization 球员着色插件

当前为 2019-06-21 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name van.mz.playerAdvanced
  3. // @namespace van
  4. // @version 3.20
  5. // @description Player display optimization 球员着色插件
  6. // @author van
  7. // @match https://www.managerzone.com/*
  8. // @grant GM_setValue
  9. // @grant GM_getValue
  10. // @grant GM_listValues
  11. // @grant GM_deleteValue
  12. // @grant GM_setClipboard
  13. // @grant GM_xmlhttpRequest
  14. // @connect www.budeng.win
  15. // @require https://cdn.bootcss.com/pako/1.0.5/pako.min.js
  16. // @require https://cdn.jsdelivr.net/gh/vanjoge/MZExtension/Scripts/base64js.min.js
  17. // ==/UserScript==
  18.  
  19. var gm_mzlanguage = {
  20. zh: {
  21. Name: "中文",
  22. Save: "保存",
  23. Setting: "设置",
  24. Test: "测试",
  25. SettingTitle: "点击可对语言和XML导出进行设置",
  26. Language: "语言",
  27. XmlMode: "战术导出模式",
  28. XmlMode1: "顺序选择球员",
  29. XmlMode2: "根据位置选择球员(需提交数据到后台)",
  30. TacConf: "位置系数设置",
  31. AutoRun: "自动着色",
  32. AutoRun0: "仅打开页面时自动执行一次",
  33. AutoRun1: "随系统刷新自动着色(如果浏览器变卡请关闭此选项)",
  34.  
  35.  
  36. NotSureEx: "挂牌后属性可能有变动,不确定转会市场显示是否是真实属性,请自行甄别。<br/>属性变动时间",
  37. NotSure: "属性不确定",
  38. ManualColorTitle: "点击可手动着色 快捷键:ALT + A",
  39. ManualColor: "手动着色",
  40. Jijing: "比赛集锦",
  41. dongzuo: "球员动作",
  42. Copyxml1: "复制主队战术",
  43. Copyxml2: "复制客队战术",
  44. CopyXmlMsg: "战术已复制到剪切板",
  45. CopyXmlMsgError: "战术复制失败",
  46. BA_NORMAL: "BA_NORMAL",
  47. BA_WALL: "站人墙",
  48. BA_HOLD: "抱着球",
  49. BA_DOWN: "倒地",
  50. BA_HOLD_THROWIN: "界外球准备",
  51. BA_THROWIN: "界外球",
  52. BA_LEFT_FOOT_SHOT_FWD: "射门/长传(L)",
  53. BA_LEFT_FOOT_SHOT_BACK: "BA_LEFT_FOOT_SHOT_BACK",
  54. BA_LEFT_FOOT_SHOT_RIGHT: "BA_LEFT_FOOT_SHOT_RIGHT",
  55. BA_LEFT_FOOT_SHOT_LEFT: "BA_LEFT_FOOT_SHOT_LEFT",
  56. BA_RIGHT_FOOT_SHOT_FWD: "射门/长传(R)",
  57. BA_RIGHT_FOOT_SHOT_BACK: "BA_RIGHT_FOOT_SHOT_BACK",
  58. BA_RIGHT_FOOT_SHOT_RIGHT: "BA_RIGHT_FOOT_SHOT_RIGHT",
  59. BA_RIGHT_FOOT_SHOT_LEFT: "BA_RIGHT_FOOT_SHOT_LEFT",
  60. BA_LEFT_FOOT_PASS_FWD: "短传(L)",
  61. BA_LEFT_FOOT_PASS_BACK: "BA_LEFT_FOOT_PASS_BACK",
  62. BA_LEFT_FOOT_PASS_RIGHT: "BA_LEFT_FOOT_PASS_RIGHT",
  63. BA_LEFT_FOOT_PASS_LEFT: "BA_LEFT_FOOT_PASS_LEFT",
  64. BA_RIGHT_FOOT_PASS_FWD: "短传(R)",
  65. BA_RIGHT_FOOT_PASS_BACK: "BA_RIGHT_FOOT_PASS_BACK",
  66. BA_RIGHT_FOOT_PASS_RIGHT: "BA_RIGHT_FOOT_PASS_RIGHT",
  67. BA_RIGHT_FOOT_PASS_LEFT: "BA_RIGHT_FOOT_PASS_LEFT",
  68. BA_PICK_UP_BALL: "捡起球",
  69. BA_DROP_BALL: "放下球",
  70. BA_HEADER: "争顶",
  71. BA_TRIP: "丢失球权",
  72. BA_CELEBRATE: "庆祝进球",
  73. BA_GK_READY: "准备扑救",
  74. BA_GK_ACRO_LEFT: "ACRO(L)",
  75. BA_GK_ACRO_LEFT_HOLD: "ACRO_HOLD(L)",
  76. BA_GK_ACRO_RIGHT: "ACRO(R)",
  77. BA_GK_ACRO_RIGHT_HOLD: "ACRO_HOLD(R)",
  78. BA_GK_SIDESTEP_LEFT: "移动(L)",
  79. BA_GK_SIDESTEP_RIGHT: "移动(R)",
  80. BA_GK_KICK: "BA_GK_KICK",
  81. BA_GK_THROW_BALL: "BA_GK_THROW_BALL",
  82. BA_GK_STRETCH_LEFT: "BA_GK_STRETCH_LEFT",
  83. BA_GK_STRETCH_LEFT_HOLD: "BA_GK_STRETCH_LEFT_HOLD",
  84. BA_GK_STRETCH_RIGHT: "BA_GK_STRETCH_RIGHT",
  85. BA_GK_STRETCH_RIGHT_HOLD: "BA_GK_STRETCH_RIGHT_HOLD",
  86. BA_BALL_OWNER: "控球",
  87. BA_TACKLE: "上抢",
  88. BA_SLIDING_TACKLE: "BA_SLIDING_TACKLE",
  89. BA_SLIDING_TACKLE_STAND: "BA_SLIDING_TACKLE_STAND",
  90. BA_MAX: "BA_MAX",
  91. BA_MY_1001: "头球攻门(L)",
  92. BA_MY_1002: "头球攻门(R)",
  93. BA_MY_1003: "卸下球",
  94. BA_MY_1011: "上抢(成功)",
  95. BA_MY_1012: "上抢(失败)",
  96. Unknown: "未知"
  97.  
  98.  
  99. ,
  100. training_pos: "无教练",
  101. training_camp: "进营",
  102. training_coach: "有教练",
  103. training_ycc: "调整",
  104. training_itc: "强化",
  105. training_neg: "掉球",
  106. training_unit: "格",
  107. training_unknown: "未知训练类型",
  108. training_ball_day: "离下一次涨球训练天数",
  109. training_part: "分段训练效率",
  110. training_total: "进度",
  111. training_avg: "平均",
  112. training_now: "当前训练进度",
  113. SkillsAnalysisTitle: "点击可手动着色和分析训练效率 快捷键:ALT + S",
  114. SkillsAnalysis: "训练效率分析"
  115.  
  116.  
  117. ,
  118.  
  119. sug_T0: "首选:",
  120. sug_T1: "次选:",
  121. sug_T2: "可尝试:",
  122. sug_T3: "默认:",
  123.  
  124. Pos9: "后卫",
  125. Pos7: "门将",
  126. Pos10: "边锋",
  127. Pos5: "前锋",
  128. Pos4: "中场",
  129. Pos56: "中锋",
  130.  
  131. sug_Loser: "关键属性容易早死,尽早交换或开除。",
  132.  
  133. sug_PRI: "训练顺序:",
  134. attrName1: "速度",
  135. attrName2: "耐力",
  136. attrName3: "意识",
  137. attrName4: "传球",
  138. attrName5: "射门",
  139. attrName6: "头球",
  140. attrName7: "守门",
  141. attrName8: "控球",
  142. attrName9: "抢断",
  143. attrName10: "传中",
  144. attrName11: "定位"
  145. }
  146. ,
  147.  
  148. en: {
  149. Name: "English",
  150. Save: "Save",
  151. Setting: "Setting",
  152. Test: "Test",
  153. SettingTitle: "Click setting language",
  154. Language: "Language",
  155. XmlMode: "Tactical Export Model",
  156. XmlMode1: "Sequential selection",
  157. XmlMode2: "Choose by location(need submit data to server)",
  158. TacConf: "Tactical Coefficient Setting",
  159. AutoRun: "Auto Colorable",
  160. AutoRun0: "By page loaded(Once)",
  161. AutoRun1: "By MZ Refresh",
  162.  
  163. NotSureEx: "Skills may change after entering the transfer market.<br/>Change time ",
  164. NotSure: "Uncertain skill",
  165. ManualColorTitle: "Click the Colorable Skill. Shortcut key : ALT + A",
  166. ManualColor: "Colorable Skill",
  167. Jijing: "Events",
  168. dongzuo: "PlayerStatus",
  169. Copyxml1: "CopyXML(home)",
  170. Copyxml2: "CopyXML(away)",
  171. CopyXmlMsg: "The tactic was copied to the Clipboard!",
  172. CopyXmlMsgError: "Copy error!",
  173. BA_NORMAL: "Normal",
  174. BA_WALL: "Wall",
  175. BA_HOLD: "Hold",
  176. BA_DOWN: "Down",
  177. BA_HOLD_THROWIN: "HoldThrowin",
  178. BA_THROWIN: "Throwin",
  179. BA_LEFT_FOOT_SHOT_FWD: "FootShot(L)",
  180. BA_LEFT_FOOT_SHOT_BACK: "FootShotBack(L)",
  181. BA_LEFT_FOOT_SHOT_RIGHT: "FootShotRight(L)",
  182. BA_LEFT_FOOT_SHOT_LEFT: "FootShotLeft(L)",
  183. BA_RIGHT_FOOT_SHOT_FWD: "FootShot(R)",
  184. BA_RIGHT_FOOT_SHOT_BACK: "FootShotBack(R)",
  185. BA_RIGHT_FOOT_SHOT_RIGHT: "FootShotRight(R)",
  186. BA_RIGHT_FOOT_SHOT_LEFT: "FootShotLeft(R)",
  187. BA_LEFT_FOOT_PASS_FWD: "FootPass(L)",
  188. BA_LEFT_FOOT_PASS_BACK: "FootPassBack(L)",
  189. BA_LEFT_FOOT_PASS_RIGHT: "FootPassRight(L)",
  190. BA_LEFT_FOOT_PASS_LEFT: "FootPassLeft(L)",
  191. BA_RIGHT_FOOT_PASS_FWD: "FootPass(R)",
  192. BA_RIGHT_FOOT_PASS_BACK: "FootPassBack(R)",
  193. BA_RIGHT_FOOT_PASS_RIGHT: "FootPassRight(R)",
  194. BA_RIGHT_FOOT_PASS_LEFT: "FootPassLeft(R)",
  195. BA_PICK_UP_BALL: "PickUpBall",
  196. BA_DROP_BALL: "DropBall",
  197. BA_HEADER: "Header",
  198. BA_TRIP: "Trip",
  199. BA_CELEBRATE: "Celebrate",
  200. BA_GK_READY: "GkReady",
  201. BA_GK_ACRO_LEFT: "GkAcroLeft",
  202. BA_GK_ACRO_LEFT_HOLD: "GkAcroLeftHold",
  203. BA_GK_ACRO_RIGHT: "GkAcroRight",
  204. BA_GK_ACRO_RIGHT_HOLD: "GkAcroRightHold",
  205. BA_GK_SIDESTEP_LEFT: "GkSidestepLeft",
  206. BA_GK_SIDESTEP_RIGHT: "GkSidestepRight",
  207. BA_GK_KICK: "GkKick",
  208. BA_GK_THROW_BALL: "GkThrowBall",
  209. BA_GK_STRETCH_LEFT: "GkStretchLeft",
  210. BA_GK_STRETCH_LEFT_HOLD: "GkStretchLeftHold",
  211. BA_GK_STRETCH_RIGHT: "GkStretchRight",
  212. BA_GK_STRETCH_RIGHT_HOLD: "GkStretchRightHold",
  213. BA_BALL_OWNER: "BallOwner",
  214. BA_TACKLE: "Tackle",
  215. BA_SLIDING_TACKLE: "SlidingTackle",
  216. BA_SLIDING_TACKLE_STAND: "SlidingTackleStand",
  217. BA_MAX: "Max",
  218. BA_MY_1001: "HeadGoal(L)",
  219. BA_MY_1002: "HeadGoal(R)",
  220. BA_MY_1003: "StopTheBall",
  221. BA_MY_1011: "Tackle(Success)",
  222. BA_MY_1012: "Tackle(Fail)",
  223. Unknown: "Unknown"
  224.  
  225.  
  226.  
  227. ,
  228. training_pos: "No coach",
  229. training_camp: "CAMP",
  230. training_coach: "Coach",
  231. training_ycc: "Ycc",
  232. training_itc: "Itc",
  233. training_neg: "Neg",
  234. training_unit: "↑",
  235. training_unknown: "Unknown training",
  236. training_ball_day: "Next ball days",
  237. training_part: "Training efficiency",
  238. training_total: "Total",
  239. training_avg: "Avg",
  240. training_now: "Now",
  241. SkillsAnalysisTitle: "Colorable Skill and Analysis of Training Efficiency Shortcut key :ALT + S",
  242. SkillsAnalysis: "Colorable By Graphs"
  243.  
  244.  
  245.  
  246. ,
  247. sug_T0: "First plan:",
  248. sug_T1: "Second plan:",
  249. sug_T2: "May try:",
  250. sug_T3: "Default:",
  251.  
  252. Pos9: "CB",
  253. Pos7: "GK",
  254. Pos10: "WF",
  255. Pos5: "ST",
  256. Pos4: "MF",
  257. Pos56: "CF",
  258.  
  259. sug_Loser: "Key skills too low.Exchange or dismiss as soon as possible.",
  260.  
  261. sug_PRI: "Training order:",
  262. attrName1: "Speed",
  263. attrName2: "Stamina",
  264. attrName3: "Play Intelligence",
  265. attrName4: "Passing",
  266. attrName5: "Shooting",
  267. attrName6: "Heading",
  268. attrName7: "Keeping",
  269. attrName8: "Ball Control",
  270. attrName9: "Tackling",
  271. attrName10: "Aerial Passing",
  272. attrName11: "Set Plays"
  273. }
  274.  
  275. ,
  276. es: {
  277. Name: "Español",
  278. Save: "Guardar",
  279. Setting: "Ajustes",
  280. Test: "Test",
  281. SettingTitle: "Haga clic en configuración Idioma",
  282. Language: "Idioma",
  283.  
  284. XmlMode: "Tactical Export Model",
  285. XmlMode1: "Secuencia de selección",
  286. XmlMode2: "Elegir por locación (necesita suministrar datos al servidor)",
  287. TacConf: "Tactical Coefficient Setting",
  288. AutoRun: "Auto Coloreable",
  289. AutoRun0: "Por página cargada (sólo una vez)",
  290. AutoRun1: "Por recargar MZ",
  291.  
  292. NotSureEx: "Las skills pueden cambiar después de ingresar al mercado. <br/> Cambiar hora ",
  293. NotSure: "Skill incierta",
  294. ManualColorTitle: "Haga clic en la skill para colorear. Acceso directo: ALT + A",
  295. ManualColor: "Color de la skill",
  296. Jijing: "Eventos",
  297. dongzuo: "PlayerStatus",
  298. Copyxml1: "CopiarXML(local)",
  299. Copyxml2: "CopiarXML(visitante)",
  300. CopyXmlMsg: "La táctica fue copiada al portapapeles",
  301. CopyXmlMsgError: "¡Error al copiar!",
  302. BA_NORMAL: "Normal",
  303. BA_WALL: "Wall",
  304. BA_HOLD: "Hold",
  305. BA_DOWN: "Down",
  306. BA_HOLD_THROWIN: "HoldThrowin",
  307. BA_THROWIN: "Throwin",
  308. BA_LEFT_FOOT_SHOT_FWD: "FootShot(L)",
  309. BA_LEFT_FOOT_SHOT_BACK: "FootShotBack(L)",
  310. BA_LEFT_FOOT_SHOT_RIGHT: "FootShotRight(L)",
  311. BA_LEFT_FOOT_SHOT_LEFT: "FootShotLeft(L)",
  312. BA_RIGHT_FOOT_SHOT_FWD: "FootShot(R)",
  313. BA_RIGHT_FOOT_SHOT_BACK: "FootShotBack(R)",
  314. BA_RIGHT_FOOT_SHOT_RIGHT: "FootShotRight(R)",
  315. BA_RIGHT_FOOT_SHOT_LEFT: "FootShotLeft(R)",
  316. BA_LEFT_FOOT_PASS_FWD: "FootPass(L)",
  317. BA_LEFT_FOOT_PASS_BACK: "FootPassBack(L)",
  318. BA_LEFT_FOOT_PASS_RIGHT: "FootPassRight(L)",
  319. BA_LEFT_FOOT_PASS_LEFT: "FootPassLeft(L)",
  320. BA_RIGHT_FOOT_PASS_FWD: "FootPass(R)",
  321. BA_RIGHT_FOOT_PASS_BACK: "FootPassBack(R)",
  322. BA_RIGHT_FOOT_PASS_RIGHT: "FootPassRight(R)",
  323. BA_RIGHT_FOOT_PASS_LEFT: "FootPassLeft(R)",
  324. BA_PICK_UP_BALL: "Toma la pelota",
  325. BA_DROP_BALL: "Tira la pelota al césped",
  326. BA_HEADER: "Cabezazo",
  327. BA_TRIP: "Trip",
  328. BA_CELEBRATE: "Celebración",
  329. BA_GK_READY: "Arquero preparado",
  330. BA_GK_ACRO_LEFT: "GkAcroLeft",
  331. BA_GK_ACRO_LEFT_HOLD: "GkAcroLeftHold",
  332. BA_GK_ACRO_RIGHT: "GkAcroRight",
  333. BA_GK_ACRO_RIGHT_HOLD: "GkAcroRightHold",
  334. BA_GK_SIDESTEP_LEFT: "Arquero da un paso a la izquierda",
  335. BA_GK_SIDESTEP_RIGHT: "Arquero da un paso a la derecha",
  336. BA_GK_KICK: "Arquero da una patada",
  337. BA_GK_THROW_BALL: "GkThrowBall",
  338. BA_GK_STRETCH_LEFT: "GkStretchLeft",
  339. BA_GK_STRETCH_LEFT_HOLD: "GkStretchLeftHold",
  340. BA_GK_STRETCH_RIGHT: "GkStretchRight",
  341. BA_GK_STRETCH_RIGHT_HOLD: "GkStretchRightHold",
  342. BA_BALL_OWNER: "Con la pelota en los pies",
  343. BA_TACKLE: "Entrada",
  344. BA_SLIDING_TACKLE: "Barrida",
  345. BA_SLIDING_TACKLE_STAND: "SlidingTackleStand",
  346. BA_MAX: "Max",
  347. BA_MY_1001: "HeadGoal(L)",
  348. BA_MY_1002: "HeadGoal(R)",
  349. BA_MY_1003: "Frena la pelota",
  350. BA_MY_1011: "Entrada(acertada)",
  351. BA_MY_1012: "Entrada(fallida)",
  352. Unknown: "Desconocido"
  353.  
  354.  
  355. ,
  356. training_pos: "Sin entrenador",
  357. training_camp: "CAMP",
  358. training_coach: "Coach",
  359. training_ycc: "YCC",
  360. training_itc: "ITC",
  361. training_neg: "Neg",
  362. training_unit: "↑",
  363. training_unknown: "Entrenamiento desconocido",
  364. training_ball_day: "Días para ganar una pelotita",
  365. training_part: "Eficacia de entrenamiento",
  366. training_total: "Total",
  367. training_avg: "Avg",
  368. training_now: "Ahora",
  369. SkillsAnalysisTitle: "Skills y análisis de eficacia de entrenamiento coloreables al presionar: ALT + S",
  370. SkillsAnalysis: "Coloreable por gráficos"
  371.  
  372.  
  373. ,
  374. sug_T0: "First plan:",
  375. sug_T1: "Second plan:",
  376. sug_T2: "May try:",
  377. sug_T3: "Default:",
  378.  
  379. Pos9: "CB",
  380. Pos7: "GK",
  381. Pos10: "WF",
  382. Pos5: "ST",
  383. Pos4: "MF",
  384. Pos56: "CF",
  385.  
  386. sug_Loser: "Key skills too low.Exchange or dismiss as soon as possible.",
  387.  
  388. sug_PRI: "Training order:",
  389. attrName1: "Speed",
  390. attrName2: "Stamina",
  391. attrName3: "Play Intelligence",
  392. attrName4: "Passing",
  393. attrName5: "Shooting",
  394. attrName6: "Heading",
  395. attrName7: "Keeping",
  396. attrName8: "Ball Control",
  397. attrName9: "Tackling",
  398. attrName10: "Aerial Passing",
  399. attrName11: "Set Plays"
  400. }
  401.  
  402. };
  403. var now_language = gm_mzlanguage.en;
  404. var scoutLocList = { "9": { "Prop": { "1": 0, "2": 0, "9": 1, "10": 2, "8": 2, "3": 2, "4": 2, "6": 2 }, "Order": [1, 2, 9, 10, 8, 3, 4, 6], "CampKey": "9" }, "7": { "Prop": { "2": 0, "7": 1, "3": 1, "1": 1, "10": 2, "11": 2, "8": 2 }, "Order": [2, 7, 3, 1, 10, 11, 8], "CampKey": "7" }, "10": { "Prop": { "1": 0, "2": 0, "10": 1, "8": 1, "9": 2, "4": 2, "5": 2, "6": 2 }, "Order": [1, 2, 10, 8, 9, 4, 5, 6], "CampKey": "10" }, "5": { "Prop": { "1": 0, "2": 0, "5": 1, "8": 1, "6": 1, "3": 2, "4": 2, "10": 2, "9": 2 }, "Order": [1, 2, 5, 8, 6, 3, 4, 10, 9], "CampKey": "5" }, "4": { "Prop": { "1": 0, "2": 0, "4": 1, "8": 1, "3": 1, "10": 2, "9": 2, "5": 2, "6": 2 }, "Order": [1, 2, 4, 8, 3, 10, 9, 5, 6], "CampKey": "4" }, "5,6": { "Prop": { "2": 0, "1": 0, "5": 1, "6": 1, "8": 1, "3": 2, "4": 2, "10": 2, "9": 2 }, "Order": [2, 1, 5, 8, 6, 3, 4, 10, 9], "CampKey": "56" } };
  405. var OKeys = ["9", "7", "10", "5", "4", "5,6"];
  406.  
  407. function CTable() {
  408. //key value
  409. this.data = {};
  410. //keys
  411. this.keys = new Array();
  412. this.addData = function (key, value) {
  413. if (this.data[key] == undefined) {
  414. this.keys.push(key);
  415. this.keys.sort(function (a, b) {
  416. return a - b;
  417. });
  418. }
  419. this.data[key] = value;
  420. };
  421. this.getVal = function (i) {
  422. if (this.data[i] == undefined) {
  423. //
  424. } else {
  425. return this.data[i];
  426. }
  427. };
  428. this.GetX = function (i) {
  429. var rv = this.getVal(i);
  430. rv = Math.floor(rv * 214 / 1000) - 3;
  431. return rv;
  432. };
  433. this.GetY = function (i) {
  434. var rv = GetVal(i);
  435. rv = Math.floor(rv * 328 / 1000) - 1;
  436. return rv;
  437. };
  438. }
  439.  
  440. function mzcamp() {
  441. this.data = {};
  442. this.name = null;
  443. this.keys = new Array();
  444. this.index = 0;
  445. this.add = function (begin, end) {
  446. if (end > begin + 2937600000) {
  447. end = begin + 2937600000;
  448. }
  449. if (this.data[begin] == undefined) {
  450. this.keys.push(begin);
  451. this.keys.sort(function (a, b) {
  452. return a - b;
  453. });
  454. }
  455. this.data[begin] = {
  456. begin: begin,
  457. end: end
  458. };
  459. };
  460. this.getItem = function (begin) {
  461. return this.data[begin];
  462. };
  463. this.resetIndex = function () {
  464. this.index = 0;
  465. };
  466. this.inYTC = function (x) {
  467. while (this.index < this.keys.length) {
  468. let item = this.data[this.keys[this.index]];
  469. if (x < item.begin) {
  470. return false;
  471. } else if (x <= item.end) {
  472. if (/\d/.test(item.name)) {
  473. return false;
  474. }
  475. return true;
  476. }
  477. if (x > item.end) {
  478. this.index++;
  479. }
  480. }
  481. return false;
  482. };
  483. };
  484. function playerTrainingBySkill() {
  485. //涨球时间
  486. this.ballDay = 0;
  487. //训练统计
  488. this.stat = new trainingStat();
  489. //当前球数
  490. this.skill = 0;
  491. }
  492. function trainingStat() {
  493. //所有 不包含掉球
  494. this.all = new trainingDay();
  495. ////普通训练 无教练
  496. //this.pos = new trainingDay();
  497. ////强化营
  498. //this.itc = new trainingDay();
  499. ////调整营
  500. //this.ycc = new trainingDay();
  501. ////掉球
  502. //this.neg = new trainingDay();
  503. ////理疗
  504. //this.physio = new trainingDay();
  505. ////有教练
  506. //this.coach = new trainingDay();
  507. ////训练营
  508. //this.camp = new trainingDay();
  509. //对某类型加1
  510. this.add = function (type, tn) {
  511. if (!this[type]) {
  512. this[type] = new trainingDay();
  513. }
  514. this[type][tn] += 1;
  515. };
  516. this.getSum = function (canOver100) {
  517. let ret = 0;
  518. if (this.neg) {
  519. ret = this.all.getSum() - this.neg.getSum();
  520. } else {
  521. ret = this.all.getSum();
  522. }
  523. if (!canOver100) {
  524. if (ret >= 100) {
  525. ret = 99.99;
  526. }
  527. }
  528. return ret;
  529. };
  530. this.getAvg = function () {
  531.  
  532. return this.all.getAvg();
  533. };
  534. this.getTnText = function () {
  535. let str = "";
  536. if (this.pos) {
  537. str += " " + now_language.training_pos + this.pos.getTnText();
  538. }
  539. if (this.camp) {
  540. str += " " + now_language.training_camp + this.camp.getTnText();
  541. }
  542. if (this.coach) {
  543. str += " " + now_language.training_coach + this.coach.getTnText();
  544. }
  545. if (this.ycc) {
  546. str += " " + now_language.training_ycc + this.ycc.getTnText();
  547. }
  548. if (this.itc) {
  549. str += " " + now_language.training_itc + this.itc.getTnText();
  550. }
  551. if (this.neg) {
  552. str += " " + now_language.training_neg + this.neg.getTnText();
  553. }
  554. return str;
  555. };
  556. this.getDayByAvg = function (avg) {
  557. let ret = (100 - this.getSum()) / avg;
  558. ret = parseFloat(ret).toFixed(1);
  559. return ret;
  560. };
  561. this.getDay = function () {
  562. if (this.coach) {
  563. return this.getDayByAvg(this.coach);
  564. } else if (this.pos) {
  565. return this.getDayByAvg(this.pos);
  566. }
  567. return undefined;
  568. };
  569. }
  570. function trainingDay() {
  571. this.t1 = 0;
  572. this.t2 = 0;
  573. this.t3 = 0;
  574. this.t4 = 0;
  575. this.t5 = 0;
  576. this.t6 = 0;
  577. this.t7 = 0;
  578. this.t8 = 0;
  579. this.t9 = 0;
  580. this.t10 = 0;
  581. this.getSum = function () {
  582. let ret = this.t1 * 0.4 * 1 + this.t2 * 0.55 * 2 + this.t3 * 0.7 * 3 + this.t4 * 0.85 * 4 + this.t5 * 1 * 5 + this.t6 * 1.15 * 6 + this.t7 * 1.3 * 7 + this.t8 * 1.45 * 8 + this.t9 * 1.6 * 9 + this.t10 * 1.75 * 10;
  583. ret = parseFloat(ret).toFixed(1);
  584. return ret;
  585. };
  586. this.getAvg = function () {
  587. let ret = this.getSum() / (this.t1 * 1 + this.t2 * 1 + this.t3 * 1 + this.t4 * 1 + this.t5 * 1 + this.t6 * 1 + this.t7 * 1 + this.t8 * 1 + this.t9 * 1 + this.t10 * 1);
  588. ret = parseFloat(ret).toFixed(1);
  589. return ret;
  590. };
  591. this.getTnText = function () {
  592. let str = "";
  593. if (this.t1 > 0) {
  594. str += " 1" + now_language.training_unit + "(" + this.t1 + ")";
  595. }
  596. if (this.t2 > 0) {
  597. str += " 2" + now_language.training_unit + "(" + this.t2 + ")";
  598. }
  599. if (this.t3 > 0) {
  600. str += " 3" + now_language.training_unit + "(" + this.t3 + ")";
  601. }
  602. if (this.t4 > 0) {
  603. str += " 4" + now_language.training_unit + "(" + this.t4 + ")";
  604. }
  605. if (this.t5 > 0) {
  606. str += " 5" + now_language.training_unit + "(" + this.t5 + ")";
  607. }
  608. if (this.t6 > 0) {
  609. str += " 6" + now_language.training_unit + "(" + this.t6 + ")";
  610. }
  611. if (this.t7 > 0) {
  612. str += " 7" + now_language.training_unit + "(" + this.t7 + ")";
  613. }
  614. if (this.t8 > 0) {
  615. str += " 8" + now_language.training_unit + "(" + this.t8 + ")";
  616. }
  617. if (this.t9 > 0) {
  618. str += " 9" + now_language.training_unit + "(" + this.t9 + ")";
  619. }
  620. if (this.t10 > 0) {
  621. str += " 10" + now_language.training_unit + "(" + this.t10 + ")";
  622. }
  623. return str;
  624. };
  625. }
  626. var mzreg = {
  627. playerMax: /trainingField.players\s*=\s*({.+})/,
  628. playerId: /player_id_(\d+)/,
  629. bar_itc: /bar_itc_(\d+)/,
  630. bar_ycc: /bar_ycc_(\d+)/,
  631. bar_pos: /bar_pos_(\d+)/,
  632. bar_neg: /bar_neg_(\d+)/,
  633. trainingType: /&t=([^)]+)/,
  634. data2d_url: /matchviewer\/media/,
  635. shortlist_url: /\/?p=shortlist/
  636. };
  637. var mzImg = {
  638. red_skill:
  639. [
  640. "",
  641. "",
  642. "",
  643. "",
  644. "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAH4AAAAKCAYAAABykOpfAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADASURBVFhH7ZhBDoAgDAS94uP5kd/x4M0XaNZQUxshUg72sCRGrduE7giI01TakvOxz/PjQEye23M0fa2fjDccEOCAKU2DtanR9ITrcEADvqmXCw34bWaIoHeUzBQ4ALiAL6NdXgR7L25F05Oi0wGA1E2v8xJHTIOPpHeWzTQL3o54QG6B/1tPgk4H7NRt120BW5vq/9Y7y2YawK4pXaO69lWvt3XR9CQ44MBW9u9ft3PR9AOlMzXaD5ne/pBgnwMnVGDpfjrKHa4AAAAASUVORK5CYII=",
  645. "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAH4AAAAKCAYAAABykOpfAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAACySURBVFhH7ZhBDoAgDAS5wuP5kd/x4M0XaGpaszbW4HFDSYhQ96CdbLGWomPp/dhbe0yJ2X1/ZddH7zVV3IALTBsI1ieDXT8V3BHn3tR1gYDfKgOjPqFrBgSuuNvcbk73e0sYuz7BA3h0Lp7zFpcYgmfWJ/gAvHe8QP4Cz6ZP8EGp9+e2gY1KPZs+wUMbt9Z6uTr6qse2TtbM+gQPGdi0fx9t59j1CR8ywP5D5u/zzw7/BIZH4+GYZs1CAAAAAElFTkSuQmCC",
  646. "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAH4AAAAKCAYAAABykOpfAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAACtSURBVFhH5ZhBDoAgDAS5wuP5kd/x4M0XaNZQUxsxeGSXhKh1L2WyhZJSG0utx17KYyJm/+NTTd9bh6njBhwwbXiwMTk1/dRwR5x7U28vHvBbZVDQU0JHUoALd5vbzenx2xZATU8N3jvX7/MWR8yDV9LLgI+OB+Qv8Ox6avC+1Md928D2Sj27nhY8wK45X67unep9W6empwWPxLbWv4+2c2p6avhqFzJ/82WDfwLFrd5EQmi8RgAAAABJRU5ErkJggg==",
  647. "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAH4AAAAKCAYAAABykOpfAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADbSURBVFhH7VjRCoMwDPTVfrx/5O/sYW/7gkqWnkuDlQiDuHEFUeOByV2TtJ2mNtZlqa9Sukts+O7vxJd6xs+It1vZIbgEgmGF9c4SX9+ig4dbiRl1xgawq94erMBHlYF4rZA/mflwHNmOieDfITzxmukjfqIJl46TIOywfR52sVnhiddMP+InXdCoA154n/ES3JnwxPf8RHlPx/nS7fs2hB2VeuK19KcLedUBEfYxz13fEjHtos8uXojXqT7i5yr/qfhn279Ht3PE/8F2jgc4n0Orbx5YpWZy4OcbEqHYp2q4IyoAAAAASUVORK5CYII=",
  648. "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAH4AAAAKCAYAAABykOpfAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADfSURBVFhH7ZjBDoMgEES9ysf7R/2dHnrrF9BsYZpxUw3GtdvDmBgVJwHmsSwwTf26LUt9lrK6rQz//VP6UiP92fL50nIAt47gYrC+cunrGzp8OOvPpXBHIvdDvb8w4G8zg/RthuTI5wEx4k8KdKsUDUe0o+H+Gw2UvkV6lD+p4Hlkcp5HuZUxeOlbpEf48zfgfcRb5/bAS3/On1TwBo8XdhzRALs11fs8Jn1LA6N+poG3Bt7neZW3DCYvUvziRfo4f9LAW8WPvn8f3c5Jv7+dO+pPKnwdyMQeyBz189fwX20F0wr7zmFhAAAAAElFTkSuQmCC",
  649. "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAH4AAAAKCAYAAABykOpfAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADeSURBVFhH7ZhLDoQgEETdyuG9kdeZxezmBJgeKFN2RiOZRjZFYlSsINSj+U1TTeuy5E9Kh8vy8N3fpU95pD9nXJryAdwagsRgfWHS5y90+PC0P01w70TuTr0+MOBfI4P0ZYTkyOcO0cOfEOhWCCqOaEfF/Tt+KH2J9FH+hILnnsnzPPItj8FLXyJ9hD/dwPuIt8ZdgZf+WX9CwRs8XthxRAPs2VDv5zHpyzTQy88w8FbB1zwf5i2DyYsUv3iRfpw/YeCtoHfdv9/dzkl/vZ3r7U8ofB3IjD2QafX/X/gb1OjNbdNi8SQAAAAASUVORK5CYII=",
  650. "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAH4AAAAKCAYAAABykOpfAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADQSURBVFhH7ZhNDoQgDIXZyuG50VzHhTtPwKQDz9QGCLNrk0diVHgaeF9aflLq5VNKvXN+XVKHdnunPtdI/gw5ArgMBEWDtR9RX3/Q4YN3f4bQ9QAe6v1BAx5lBupbhtSR783PWcZO6DiiHR237/gB9S3So/izBK8jV8/zqJc6DZ76FukR/NkGbyNeBrcCT71vf7ZTvZ23AXaW6qlvqd+rP1PwAvY8jte8JTD1IsUuXqiP488UvDRcff++u52jfr2d8+bPEj4PZGIdyPzLy8L/AkpZx9CM/6kBAAAAAElFTkSuQmCC"
  651. ],
  652. red_skill_blevel:
  653. [
  654. "",
  655. "",
  656. "",
  657. "",
  658. "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAH4AAAAKCAYAAABykOpfAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAN1JREFUeNpiYICCvX19/z9ycaFgkBgDDjDQ6v///w/Hy5cvB4mDMYiNLDeKsWMwQA5YGEAOePRIGQzq0SN9/tNaMB6NfCIjHjlA0QG2nDZY1COlXHCE1x+N/W/TJAWP/NHIJRDxsICE5S5YwKPzkXPjYFCPHvGwyB+NeBIiHluuQhZHj5jBoB65qGdkZBwt6imNePQcRihiBkr9aOOOykU9OiBUFA+U+tHIo0Lj7hknJ95WNHrjazCoH408yjCTc1ERIwsjIwM+AFKDzB5M6kcBhWAoD+CMYtIxQIABAD/G6io9wgMiAAAAAElFTkSuQmCC",
  659. "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAH4AAAAKCAYAAABykOpfAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANZJREFUeNrsWLENwkAMtBFNMgKz0DEHS6RHSAyQFVL+FCkzCvRMYPQvHPmtkC+oLPukk/6dq+5iy3qAL+ZxpHffV8w1+AFreiJamVLK9cJ8lt+8sEAaxZBGapMt6nXo0/NW6DX8qlM0tjrHql786SXw+3Kl8+O0hu8ueDaGu4WN1HfZXRb1OngO33XwW10i69poi3o56hExRr02TndMy2gr+ljuGqNeozVareg9httc7l5dt7sV62XKoj7Crnm4DAMeEWEPWSPPlvUB4w8y/zzgBAk+AgwATrKOZ9SrHu0AAAAASUVORK5CYII=",
  660. "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAH4AAAAKCAYAAABykOpfAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANVJREFUeNpiYICCvX19/z9ycaFgkBgDDjDc1f///x+Oly9fDhIHYxAbWW6oYjBA9jgMIAcMeqCNBPXokT7/aS0YD5fIR0n56ABbThgp6pFyBjjC64/G/rdpkoJH/pCPeJhHYakfFjDofOTcMhLUo0c8LPKHVcRjS/XI4ugBNxLUIxf1jIyMw6+oRw8I9BxAKOCGq/ph37hDL/rQAaGicriqHw6RS7Bx94yTE28rF71xNBLUD/eIZ3IuKmJkYWRkwAdAapDZI0n9sAejAzi4B3CGIwYIMACTLTKkLYTX2wAAAABJRU5ErkJggg==",
  661. "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAH4AAAAKCAYAAABykOpfAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAONJREFUeNrsmDEOwjAMRWPE0h6Bs7BxDi7RHSFxgFyBMadg5Ciwc4KgRKRyvtN2YXAkf8lSmr6hznctK8799PA+fsaxirTnFmR8zccY5wghpP0cac3faYksnkgRTxQPwXjJo+n31yWHVvOrSka1Ktv4Ns/+pGz49XmOx9thNl+d8eXDSzWXRPGZV7/xkkfji/mqjW9VMd/HgzBe8rzVE5H+Vo+JYUVvHYTxtfHdDHfYylBbrc94L4zvIfLw8h6G1akVhx3jJd+b8bvTNNGeyK0pMXxt/DLfnexC5n8XOD3EV4ABAA1G1tKnDW+dAAAAAElFTkSuQmCC",
  662. "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAH4AAAAKCAYAAABykOpfAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAONJREFUeNpiYICCvX19/z9ycaFgkBgDDjCqnjL1////h+Ply5eDxMEYxEaWoxUGA2SHwQCyw9E9NaqecvXokT7/aS0Y0yvyUVImOsCWUkfVU0c9Us4DR3j90dj/Nk1S8MinecTDHAJLnTCHo/ORU/OoesrVo0c8LPLpGvHYUiWyOLrHRtVTrh65qGdkZKR/UY/uUPQUSshjo+rJUz/gjTv0ogkdECrKRtWTp54ekUuwcfeMkxNvKxS98TKqnnL1Ax3xTM5FRYwsjIwM+ABIDTJ7VD311A84GB1gGbgBnIHAAAEGALzfew8s0IRiAAAAAElFTkSuQmCC",
  663. "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAH4AAAAKCAYAAABykOpfAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAOJJREFUeNpiYICCvX19/z9ycaFgkBgDDjCqnr7q////D8fLly8HiYMxiI0sRywGA2SLYADZIeiOHFVPf/XokT7/aS0Ykxv5KCkNHWBLeaPqB0Y9Uk4FR3j90dj/Nk1S8MgnOeJhBsNSG8wh6Hzk1Dmqnv7q0SMeFvkURTy2VIYsju7QUfX0V49c1DMyMlJe1KNbjJ7iCDl0VD191FO9cYde1KADQkXTqHr6qCcncgk27p5xcuJtVaI3RkbV0189tSOeybmoiJGFkZEBHwCpQWaPqh849VQHowMmQ2cAhxoYIMAAohYfTLMKd8QAAAAASUVORK5CYII=",
  664. "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAH4AAAAKCAYAAABykOpfAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAO9JREFUeNrsmDEOwjAMReOKpT0CXIWNS2Rh4ArdERJ07hXY2lMwsnEN2DlBaCJcOW5oVhf5S1ZT6zUZvuVaKcxXt7Z176qKwufMDykvm3fOjdH3vc+H8GufC6IfoujG/FDl5fPc9OvzGALNjyqHK1VJyi+DR+PR9NN977bn9Wi+QRCrBzfm77TalJfPc+PR/Mj4VNXQPD9Yefk8bfUAMGn1Bf9/PJomeuakvGzeWgtd15nD5hJiMD3kJq2DK9dqlJfJ06k+FWFYeJXl7JTIhwvl5fM544tdXcMKYLadeIaulV8On5VegPzvBU4qPgIMABoVn4y9nkDEAAAAAElFTkSuQmCC"
  665. ],
  666. green_skill:
  667. [
  668. "",
  669. "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAH4AAAAKCAYAAABykOpfAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAACPSURBVFhH7ZgxCoAwFEO79f5ncejVdFICjcQPQuc0H0T9uiQvta2tzRrHdfd+fg70+DxnQwcIHKBZGgRDyZGkgF/q80IDEafMHABcwOdoZxDqvZnsyAF4LZ3n2UcvTpk5UMHXEQ/4AW8GHXLqp77O8wyCofS9Jeni7m9Vn22daUaynTMFuyIrP3BWXPJ55wH1ZAeNPHeqYQAAAABJRU5ErkJggg==",
  670. "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAH4AAAAKCAYAAABykOpfAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAC3SURBVFhH7VhBCoAwDNtt/3+LB7+mJ6WwSC3OmdMKZiBqDZomtNsspY112Y9at9thMTyPZxbfe4/iExWA4WYmhjc2UmPxE1PTp79U7uV6u/AGP3WGL3gpn1QBM9eqG9WOSo/3oM/ik6YtWmakH36eR9xi3ngGL4WTKhCNjxVvJr8ZP8InTVu0YuuO8zaM7bX6EV4KJ1XAr957q3q/rWPxSdMWLVOA3Z6xeKmcWAH2hwyLT5z6L6mdbM4PGe5TPwoAAAAASUVORK5CYII=",
  671. "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAH4AAAAKCAYAAABykOpfAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAC6SURBVFhH7ZhLCoAwDES76/3P4sKr6UoZ6EgMViw02TgFscahMXmkH0tpbV32o9btdsHG9/4ere/5lX1iBggcMNksWO8qWj8xNA31pXIv6q1jAT/NDBF6kUrKAOCiulntrHT/zM+J1ieFLTcAaZtd52mHzYKP1ItIUgY8eF/xgPwGfrY+KWy58VO3X7cJtjfVz9aLSFIG7O69t6u3x7pofVLYcoMMRB/PRscXlcQMRP+QGR0/MfRfujoBedoWpRqlwWYAAAAASUVORK5CYII=",
  672. "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAH4AAAAKCAYAAABykOpfAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAC3SURBVFhH7ZhLCoAwDETd9f5nceHVdKUEOhKDLTRddBZTEDVOoJmn/bhttR37dZdyfg6L4Xk8s+lb/VS84wCAG0w0DzamsukFN+GAB/xSrxce8N/IwKBPlKwUc8DgGnx87XgR4j3cYtOLYtIBA+mbn+cRt5gHz6RPlq20CD5+8Qa5B361XgSTDsShO87bANsa6lfrk2UrzS/uWqt6v61j04vghANs27PR/kyUrlS2HzKj/RHBMQceHJceMQCHNbYAAAAASUVORK5CYII=",
  673. "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAH4AAAAKCAYAAABykOpfAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAACqSURBVFhH7ZjBCoAwDEN32/9/iwd/TU9KoZFYVnHHsA5ErTnMPtKta83Hvp1X78frshi+x7u6PvuvpeIAbjAxGGxMhrp+Kbh/nPtQ9wcGPKoMivqC7hkwuOZuuB1Oj+9ImLq+wBN4di6v84hbjMEr6wt8Aj463iB/gVfTF/ik1Md1G2CzUq+mL/CDNi7b1XNbx7t9RX2Bpwyot2ez8y/4lAH1A5nZ+a8O/wZU9iW93UtuGAAAAABJRU5ErkJggg==",
  674. "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAH4AAAAKCAYAAABykOpfAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAACqSURBVFhH7ZjBDoAgDEO58f/f4sFf05NmCZW6OOKVDhKjzl7g2TFWShv7dl61Hq/LYvju79n00TpMHQdwg4nBYP3ksumnhvvHuQ/19sCAvzJDBr0kdJuUwTV3w+1wun/HAmTTS4Nn5/I+j7jFGHwmfRrw3vEGeQReXS8NnlO937cBNkr16npZ8Fy9R1U9H+uy6WXBo8BD0baOc72ekYa+Gji9aTVqWKn9BDcjBi1Jkz7/KwAAAABJRU5ErkJggg==",
  675. "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAH4AAAAKCAYAAABykOpfAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADPSURBVFhH7VhBDoAwCPPm/9/iwa/paQaxhhG3sBMz6RKjYg/QDgYuy7P27SzrelSX2PDd34k/So+fFm9T2SG4BIJlhfXOEl9u0cHDVGJGnbEBvKo/D1bgr8pAvFbIX2Y+HEe2YyP4dwhPvGZ6i59owqXjJAi77DkPu9is8MRrpn/xky5o1AEvvM94Ca4nPPE1P1He03G+dPtzG8K2Sj3xWvrThRx1wDZ3ra7eNi/E61b3PIzyPgWe41l/PBvlZwpRo07wh0x/LBvlJ8p7Fu4Chrg01UrUXzQAAAAASUVORK5CYII=",
  676. "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAH4AAAAKCAYAAABykOpfAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADZSURBVFhH7ZjBDoQgDES9+f/f4mF/zT1hujhmbISwsW73MCZGxSbAPAYK07Rfr+Vd5nk93VaG//6p+LVE6tPS+dFyALeO4GKwvnLFlw906HBXn0fhjjj3oL6/MOCrmUHxdYZk5/OAGNEnBbpViobD7Wi4/0YDFV+dHqVPKngembzOo9zKGLziq9Mj9Pkb8N7x1rkeeMXf0ycVvMHjxI4dDbCtqd6vY4qvy8ConmngORlpZfWt5EXx/eRuRJ808EjwOGExF0duV7T96+uZCl8HMrEHMt/q+Wv4G4AbPGGz4g/QAAAAAElFTkSuQmCC",
  677. "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAH4AAAAKCAYAAABykOpfAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADZSURBVFhH7ZjBDoQgDES9+f/fsof9NT1hujibsVnIEou9DIlRa4Mwj0JhWc7yfu1lXbfLZTZ893f5byVTnxaXITuAW0dQGKyvTP7lAx06PK3PENx/IvdL/XxgwL9mBvnXGZIjnwfEDH1CoFslaDiiHQ337/ih/GukZ+kTCp5HJq/zsJuNwcu/RnqGPtPA+4i3zvXAy/9ZfULBGzxO7DiiAbY11ft1TP51GZilZxh4TkZaWX0reZF/P7mboU8YeCR4nLBYFGduV7Rd7OsfCl8HMrkHMqP634V/AA8vQ+1df+9kAAAAAElFTkSuQmCC",
  678. "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAH4AAAAKCAYAAABykOpfAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADESURBVFhH7ZhLDoAgDETZcf+zuPBqusJUHFMbSmTXJkNiVBgNzEvLp5Sn7NvZaj0+l9Sh3d6pP1omf4YcAVwGgqLB2o+obzd0+BDdnyF0PYCX+vOgAY8yA/U9Q+rIj+anl7ELOo5oR8ftO35AfY/0LP5MwevI1fM86qVOg6e+R3oGf36DtxEvg5uBpz62P79TvZ23AdZL9dT31B/VHxe8Xox4q3pv8UL9fHEXwR8XvDRwe5Zre7bKawqfBzK5DmRWeVn4FzPlS3kjdc0LAAAAAElFTkSuQmCC"
  679. ],
  680. green_skill_blevel:
  681. [
  682. "",
  683. "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAH4AAAAKCAYAAABykOpfAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAOdJREFUeNrslzEKAjEQRWdEzB2s9iB2aRQULGw9ighexHIbC0FBL+BRvEPWJpLgxL8R0TZhHnzYnWyVP/mZJXpxOXXeGNdTqMm69z6pbdtQjwrPuKYqQxE0WsBGQOPF9P19E6XmF2o8GpyTNYR0SjR8e1v7yW6czNfNLEvD5crT8cCS6HQ9P0hqzpn07hz1aJqGrLWkFEp+0vGOxxpGPTNr1Jce9bnxEv1436PxOtzVIQ6mStRP56OPRHhHvWHNx4rA4e7bVI/DnaoODWaL3yf5n2+UsmA8+SHSkXAFiOnpp1+pgqcAAwA2YdI0uYtBawAAAABJRU5ErkJggg==",
  684. "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAH4AAAAKCAYAAABykOpfAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAP1JREFUeNrsWEEKwjAQzIpY3+CpD/HWi4KCB68+RQQ/4rEXD4KCfsCn+IfUSzTBDdto2hQEV9iBgXY7p05nslSpF87HymSZrtHOVARtemOMZ1mWdu5or+kz4W/oQI1DUGND01P0oem729pRzGdiPDUsxKckp+rJl+UM31xXZrwdefPl5f+W/cXSqMMefJovp7vCmdaZv0ek6rWut0Se56ooCiVggjC59Myms656WvUAIFXPrepDI7HK6fndZHxML8sdb4I1Cat7Mhu8NQJWd1UNAY1P0T9rH6RPGYMua7EtPbbcNeklVbzZm87bk0k1XfWCP0r+t3/gCPnxIcAAqgwADpJouaIAAAAASUVORK5CYII=",
  685. "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAH4AAAAKCAYAAABykOpfAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAO5JREFUeNrsmDEKAjEQRSci5A5WOYhdKgvBwtajiOBFLNNYCAp6AY/iHaLNSIIJs2GjTWbXYj582J393ctMhgX46Hp+ota+41CDilrnETHbORfq0eGZfhO3cRQFkURBlRA58iX0w2MbLfCZwFMApfo6kytPTmIEvrtvcL6fZfgCq62nqzXC6ahyd94uL0g173V+T+LKe9+dEsYYsNaCiEllJ9I7mNa483TUK6Vk1HOP+hJMGs30Pv4GslVelrsRwAcIFEQfKAqSIy8wRlzualt3bVlrmRcYw3qyWGr1aw+gGe68aGD90w8cMb/fAgwAkWYpnU/mV8wAAAAASUVORK5CYII=",
  686. "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAH4AAAAKCAYAAABykOpfAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANVJREFUeNpiYICC7Zt//mdn/4GCQWIMOMBAq////z8cL1++HCQOxiA2stwoxo7BADlgYQA54NEjZTCoR4/0+U9rwXg08omMeOQARQfYctpgUY+UcsERXn809r9NkxQ88kcjl0DEwwISlrtgAY/OR86Ng0E9esTDIn804kmIeGy5ClkcPWIGg3rkop6RkXG0qKc04tFzGKGIGSj1o407Khf16IBQUTxQ6kcjj4qNO1ytaFyNr4FUPxp5lGEmT192RgYCAFnNYFM/CigEQ3kAZxSTjgECDABGFRX5kmgsvgAAAABJRU5ErkJggg==",
  687. "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAH4AAAAKCAYAAABykOpfAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAM9JREFUeNrsWMEJAjEQ3PhJD9ZiAz4swVJEsBGfKcCHFViKPehrJcE9NsuFCL6G3YGBu9y8Zm6WJURf3G9vzvnVsZ7RAGh6Zl5YSqnnjfVZf/PCBm2UQBtpTUbU29Cvz1Oj1/C7plisNQdVr/70Fvj5ceTdZbuE7y54MUbaIkbad90uRL0NXsJ3HfxaS/S5NRpRr0d9SilGvTXONmZmNIo+lrvJqLeYjVYUvcdwf17uRlvxaJlC0kfYPTf7Q040gdag6wPgFzL/XOAEmT4CDAB1xsUXGbRqMwAAAABJRU5ErkJggg==",
  688. "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAH4AAAAKCAYAAABykOpfAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAM5JREFUeNpiYICC7Zt//mdn/4GCQWIMOMBwV////384Xr58OUgcjEFsZLmhisEA2eMwgBww6IE2EtSjR/r8p7VgPFwiHyXlowNsOWGkqEfKGeAIrz8a+9+mSQoe+UM+4mEehaV+WMCg85Fzy0hQjx7xsMgfVhGPLdUji6MH3EhQj1zUMzIyDr+iHj0g0HMAoYAbruqHfeMOvehDB4SKyuGqfjhELtGNO1ytXFyNo+GsfrhHPJOnLzsjAwGArGakqR/2YHQAB/cAznDEAAEGAM3odEQYHimLAAAAAElFTkSuQmCC",
  689. "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAH4AAAAKCAYAAABykOpfAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANxJREFUeNpiYICC7Zt//mdn/4GCQWIMOMCoelT1////h+Ply5eDxMEYxEaWGywYDJA9AgPIHkUPhFH1mOrRI33+01owHqyRj5KS0QG2lD2qHrt6pJwEjvD6o7H/bZqk4JE/6CIe5nBYaoZ5FJ2PnPpH1WOqR494WOQP6ojHloqRxdEDYlQ9pnrkop6RkXHwF/XoHkNP0YQCYlQ9asQPmcYdelGGDggVfaPqf2JE/FDAKI0XXK1WXI2dUfWYjbuhgpk8fdkZGQgAZDWj6vGrH3JgdECGegM4QwEDBBgAToojce1k6CoAAAAASUVORK5CYII=",
  690. "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAH4AAAAKCAYAAABykOpfAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANtJREFUeNpiYICC7Zt//mdn/4GCQWIMOMCoesrU////H46XL18OEgdjEBtZjlYYDJAdBgPIDkf31Kh6ytWjR/r8p7VgTK/IR0mZ6ABbSh1VTx31SDkPHOH1R2P/2zRJwSOf5hEPcwgsdcIcjs5HTs2j6ilXjx7xsMina8RjS5XI4ugeG1VPuXrkop6RkZH+RT26Q9FTKCGPjaonT/2AN+7QiyZ0QKgoG1VPnnp6RC7RjTtcrVBcjZdR9eSrH+iIZ/L0ZWdkIACQ1Yyqp676AQejAywDN4AzEBggwAD3jtKPndMGXwAAAABJRU5ErkJggg==",
  691. "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAH4AAAAKCAYAAABykOpfAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANtJREFUeNpiYICC7Zt//mdn/4GCQWIMOMCoevqq////PxwvX74cJA7GIDayHLEYDJAtggFkh6A7clQ9/dWjR/r8p7VgTG7ko6Q0dIAt5Y2qHxj1SDkVHOH1R2P/2zRJwSOf5IiHGQxLbTCHoPORU+eoevqrR494WORTFPHYUhmyOLpDR9XTXz1yUc/IyEh5UY9uMXqKI+TQUfX0UU/1xh16UYMOCBVNo+rpo56cyCW6cYerVYmrMTKqnn7qqR3xTJ6+7IwMBACymlH1A6ue6mB0wGToDOBQAwMEGADJEoG8ooBn0wAAAABJRU5ErkJggg==",
  692. "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAH4AAAAKCAYAAABykOpfAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAANNJREFUeNrsmMEJQjEMhlMv3cFZXMCDIziKCC7isQN4cAJHcQc9RVrMI/1tyTVP8kPgNXwvPfwhhBJ9db+9OedXFzVHEwXvm2fmJUopNd+iftdck/5RpAvjpcH759H06/PUQszvOgc16qTg18GL8WL6+XHk3WW7mE8CSvdIYTzrbgveP4/Gi/md8aOu0Xm8OHj/vB71KaXfUY+FsIOsi4P3yZvLHY4OlDVqgvfJa+NH0S0Lsy1xtlwE75e3jN/sDzmRIc0Evy7eVDyA/O8Dzig+AgwAwwcw6YPFEjsAAAAASUVORK5CYII="
  693. ]
  694. };
  695. var pmax = {};
  696. var isAjaxing = false;
  697. trainingInfo = {};
  698. function clearCache(maxcount) {
  699. let lists = GM_listValues();
  700. let max = lists.length;
  701. if (maxcount) {
  702. max = maxcount;
  703. } else if (lists.length > 100) {
  704. max = 100;
  705. }
  706. for (var i = 0; i < lists.length; i++) {
  707. let ts;
  708. if (lists[i].startsWith("Dt_")) {
  709. ts = GM_getValue(lists[i], -1);
  710. let key = lists[i].substring(3);
  711. if (ts != -1) {
  712. let dt = new Date(ts);
  713. let now = new Date();
  714. if (now.getUTCFullYear() == dt.getUTCFullYear() && now.getUTCMonth() == dt.getUTCMonth() && now.getUTCDate() == dt.getUTCDate()) {
  715. continue;
  716. }
  717. GM_deleteValue(lists[i]);
  718. GM_deleteValue(key);
  719. max--;
  720. if (max <= 0) {
  721. break;
  722. }
  723. }
  724. }
  725. }
  726. }
  727. function autoclearCache() {
  728. let ts = GM_getValue("last_autoclear", 0);
  729. let dt = new Date(ts);
  730. let now = new Date();
  731.  
  732. if (now.getUTCFullYear() == dt.getUTCFullYear() && now.getUTCMonth() == dt.getUTCMonth() && (now.getUTCDate() - dt.getUTCDate()) < 3) {
  733. return false;
  734. } else {
  735. clearCache(100);
  736. GM_setValue("last_autoclear", now.getTime());
  737. return true;
  738. }
  739. }
  740. function myAjax(url, callback, cache_mode, Cjson) {
  741. if (cache_mode == undefined) {
  742. cache_mode = 2;
  743. //0 不缓存每次都获取 1 缓存永不刷新 2 缓存每日刷新
  744. }
  745. if (cache_mode > 0) {
  746. let b64 = getLocValue(url, cache_mode);
  747. if (b64) {
  748. let tdata;
  749. if (b64.startsWith("H4sIAA")) {
  750. if (Cjson) {
  751. tdata = "9" + b64;
  752. } else {
  753. tdata = pako.ungzip(base64js.toByteArray(b64), { to: 'string' });
  754. }
  755. } else {
  756. if (Cjson) {
  757. tdata = "9" + base64js.fromByteArray(pako.gzip(b64));
  758. } else {
  759. tdata = b64;
  760. }
  761. }
  762. callback(tdata, true);
  763. return;
  764. }
  765. }
  766. $.ajax({
  767. type: "GET",
  768. url: url,
  769. dataType: "html",
  770. success: function (data) {
  771. let b64 = base64js.fromByteArray(pako.gzip(data));
  772. setLocValue(url, b64);
  773. if (Cjson) {
  774. callback("9" + b64, false);
  775. } else {
  776. callback(data, false);
  777. }
  778. isAjaxing = false;
  779. }
  780. });
  781.  
  782. }
  783. function getLocValue(key, cache_mode) {
  784. if (cache_mode == 1) {
  785. let b64 = GM_getValue(key, false);
  786. if (b64) {
  787. return b64;
  788. }
  789. return false;
  790. } else {
  791. let ts = GM_getValue("Dt_" + key, -1);
  792.  
  793. if (ts != -1) {
  794. let dt = new Date(ts);
  795. let now = new Date();
  796. //let d = now.getTime() - dt.getTime();
  797. if (now.getUTCFullYear() == dt.getUTCFullYear() && now.getUTCMonth() == dt.getUTCMonth() && now.getUTCDate() == dt.getUTCDate()) {
  798. if (now.getUTCHours() >= 1 && now.getUTCHours() <= 22) {
  799. //取缓存
  800. } else if (now.getUTCHours() != dt.getUTCHours()) {
  801. //每小时更新一次缓存
  802. return false;
  803. }
  804. } else {
  805. return false;
  806. }
  807. let b64 = GM_getValue(key, false);
  808. if (b64) {
  809. return b64;
  810. }
  811. return false;
  812.  
  813. } else {
  814. return false;
  815. }
  816. }
  817. }
  818. function setLocValue(key, val) {
  819. GM_setValue("Dt_" + key, new Date().getTime());
  820. GM_setValue(key, val);
  821. }
  822. function getMax(callback) {
  823. myAjax(
  824. "/?p=training",
  825. function (data) {
  826. var result = data.match(mzreg.playerMax);
  827. pmax = JSON.parse(result[1]);
  828. callback(pmax);
  829.  
  830. });
  831. return false;
  832. }
  833. function setSrc(transfer, img, skill, maxed, skillBallDay, pid, k) {
  834. if (skill > 0) {
  835. let flag_exit = false;
  836. if (transfer && skillBallDay) {
  837. if (new Date().getTime() - skillBallDay < 345600000) {
  838.  
  839. getTrainingGraphsBySkill_id(pid, k, function (data) {
  840. let result = data.match(new RegExp('{"x":' + skillBallDay + ',"y":(\\d+),[^}]*"marker"'));
  841. if (result && result.length) {
  842. $(img).parent().parent().find("td.skillval").html("(" + result[1] + ")");
  843. setSrc(false, img, result[1], maxed, false, pid, k);
  844. flag_exit = true;
  845. }
  846. });
  847. }
  848. }
  849. if (flag_exit) {
  850. return;
  851. }
  852. if (pid && trainingInfo[pid][k]) {
  853. let extmp = $(img).parent().parent().find(".skill_exact2");
  854. if (extmp.length > 0) {
  855. extmp.remove();
  856. }
  857. let sum = 0;
  858. if (trainingInfo[pid][k][skill]) {
  859. sum = trainingInfo[pid][k][skill].stat.getSum();
  860. }
  861. $(img).parent().parent().append("<td class='skill_exact2'><div><span id=" + pid + "_" + k + "_" + skill + " class='skillval skill_exact_van'>" + sum + "%</span></div></td>");
  862. }
  863. if (maxed === "red") {
  864. if (/blevel_/.test(img.src) || img.blevel == 1) {
  865. img.blevel = 1;
  866. img.src = mzImg.red_skill_blevel[skill];
  867. } else {
  868. img.src = mzImg.red_skill[skill];
  869. }
  870. }
  871. else if (maxed === "green") {
  872. if (/blevel_/.test(img.src) || img.blevel == 1) {
  873. img.blevel = 1;
  874. img.src = mzImg.green_skill_blevel[skill];
  875. } else {
  876. img.src = mzImg.green_skill[skill];
  877. }
  878. }
  879. if (img.isYtc) {
  880. $(img).parent().parent().children().eq(0).addClass("gm_ytc");
  881. }
  882. }
  883. }
  884. function showMax(GraphsType) {
  885. let players = $(".playerContainer");
  886. for (var i = 0; i < players.length; i++) {
  887. let pdom = players.eq(i);
  888. let pid = pdom.html().match(mzreg.playerId)[1];
  889. let player = pmax[pid];
  890. let imgs = pdom.find("img.skill");
  891. if (pdom.find(".scout_report").length > 0) {
  892. getScoutReport(pid, pdom);
  893. }
  894. if (GraphsType == 0 && player) {
  895. setSrc(false, imgs[0], player.skills.speed, player.maxed.speed);
  896. setSrc(false, imgs[1], player.skills.stamina, player.maxed.stamina);
  897. setSrc(false, imgs[2], player.skills.gameintelligence, player.maxed.gameintelligence);
  898. setSrc(false, imgs[3], player.skills.passing, player.maxed.passing);
  899. setSrc(false, imgs[4], player.skills.shooting, player.maxed.shooting);
  900. setSrc(false, imgs[5], player.skills.heading, player.maxed.heading);
  901. setSrc(false, imgs[6], player.skills.goalkeeping, player.maxed.goalkeeping);
  902. setSrc(false, imgs[7], player.skills.technique, player.maxed.technique);
  903. setSrc(false, imgs[8], player.skills.tackling, player.maxed.tackling);
  904. setSrc(false, imgs[9], player.skills.highpassing, player.maxed.highpassing);
  905. setSrc(false, imgs[10], player.skills.situations, player.maxed.situations);
  906. } else if (pdom.find(".training_graphs").length > 0 && imgs.length > 0) {
  907. let skills = pdom.find("td.skillval");
  908. getTrainingGraphs(pid, imgs, skills);
  909. }
  910. }
  911. return false;
  912. }
  913. function drawPlayerByTrainingGraphs(pid, data, imgs, skills) {
  914. eval(data);
  915. let maxeds = ["green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green"];
  916. let skillBallDays = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
  917. let allSkillTraining_tmp = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
  918. let camp = new mzcamp();
  919. for (var i = 0; i < series.length; i++) {
  920. if ((series[i].type == "line" && series[i].color == "rgba(255,0,0,0.7)")) {
  921. if (series[i].data.length > 0) {
  922. let g = series[i].data[0];
  923. let index = g.y - 1;
  924. if (index >= 0 && g.y <= 11) {
  925. maxeds[index] = "red";
  926. }
  927. }
  928. } else if ((series[i].type == "line" && series[i].color == "rgba(255,88,0,0.6)")) {
  929. //训练营线
  930. if (series[i].data && series[i].data.length == 2) {
  931. camp.add(series[i].data[0].x, series[i].data[1].x);
  932. }
  933. }
  934. else {
  935. for (var j = 0; j < series[i].data.length; j++) {
  936. let g = series[i].data[j];
  937.  
  938. if (g.y == "-3") {
  939. let itemcamp = camp.getItem(g.x);
  940. if (itemcamp) {
  941. itemcamp.name = g.name;
  942. }
  943. }
  944.  
  945. let index = g.y - 1;
  946. if (index >= 0 && g.y <= 11) {
  947. if (g.name == "Maxed") {
  948. maxeds[index] = "red";
  949. }
  950. if (g.marker && g.marker.symbol) {
  951. if (allSkillTraining_tmp[index] == 0) {
  952. allSkillTraining_tmp[index] = new Array();
  953. allSkillTraining_tmp[index].push(new playerTrainingBySkill());
  954. }
  955. let playerTS = allSkillTraining_tmp[index][allSkillTraining_tmp[index].length - 1];
  956. if (/training_camp/.test(g.marker.symbol)) {
  957. //训练营 判断是否是ytc
  958. if (camp.inYTC(g.x)) {
  959. imgs[index].isYtc = true;
  960. }
  961.  
  962. }
  963. if (/_ball/.test(g.marker.symbol)) {
  964. if (skillBallDays[index] < g.x) {
  965. skillBallDays[index] = g.x;
  966. playerTS.ballDay = g.x;
  967. allSkillTraining_tmp[index].push(new playerTrainingBySkill());
  968. }
  969. }
  970. let result = g.marker.symbol.match(mzreg.trainingType);
  971. let type = "";
  972. if (result && result.length > 0) {
  973. switch (result[1]) {
  974. case "physio":
  975. //理疗
  976. type = "physio";
  977. break;
  978. case "coach":
  979. //有教练
  980. type = "coach";
  981. break;
  982. case "training_camp":
  983. //训练营
  984. type = "camp";
  985. break;
  986. case "training_camp_ycc":
  987. //调整营
  988. type = "ycc";
  989. break;
  990. case "training_camp_itc":
  991. //强化营
  992. type = "itc";
  993. break;
  994. default:
  995. //未知
  996. console.log(now_language.training_unknown + ":" + result[1]);
  997. break;
  998. }
  999. }
  1000. if (type == "") {
  1001. fillTrainingLevel("itc", mzreg.bar_itc, playerTS, g.marker.symbol);
  1002. fillTrainingLevel("ycc", mzreg.bar_ycc, playerTS, g.marker.symbol);
  1003. fillTrainingLevel("pos", mzreg.bar_pos, playerTS, g.marker.symbol);
  1004. fillTrainingLevel("neg", mzreg.bar_neg, playerTS, g.marker.symbol, true);
  1005. } else {
  1006. fillTrainingLevel(type, mzreg.bar_itc, playerTS, g.marker.symbol);
  1007. fillTrainingLevel(type, mzreg.bar_ycc, playerTS, g.marker.symbol);
  1008. fillTrainingLevel(type, mzreg.bar_pos, playerTS, g.marker.symbol);
  1009. fillTrainingLevel(type, mzreg.bar_neg, playerTS, g.marker.symbol, true);
  1010. }
  1011. }
  1012. }
  1013. }
  1014. }
  1015. }
  1016. let allSkillTraining = new Array();
  1017. for (var t1 = 0; t1 < allSkillTraining_tmp.length; t1++) {
  1018. if (skills[t1].nowSkill == undefined) {
  1019. skills[t1].nowSkill = skills.eq(t1).html().replace("(", "").replace(")", "");
  1020. }
  1021. let nowSkill = parseInt(skills[t1].nowSkill);
  1022. let tmp = {};
  1023. for (var t2 = 0; t2 < allSkillTraining_tmp[t1].length; t2++) {
  1024. let tmp2 = allSkillTraining_tmp[t1][t2];
  1025. if (tmp2.stat.getSum() != 0) {
  1026. tmp2.skill = nowSkill + 1 - allSkillTraining_tmp[t1].length + t2;
  1027. tmp[tmp2.skill] = tmp2;
  1028. }
  1029. }
  1030. allSkillTraining[t1] = tmp;
  1031. }
  1032. trainingInfo[pid] = allSkillTraining;
  1033. for (var k = 0; k < maxeds.length; k++) {
  1034. setSrc($(".player_share_skills").length == 0, imgs[k], skills[k].nowSkill, maxeds[k], skillBallDays[k], pid, k);
  1035. }
  1036. }
  1037. function fillTrainingLevel(type, reg, playerTS, url, isneg) {
  1038. let result = url.match(reg);
  1039. if (result && result.length > 0) {
  1040. let stat = playerTS.stat;
  1041. if (isneg) {
  1042. stat.add(type, "t" + result[1]);
  1043. } else {
  1044. stat.add("all", "t" + result[1]);
  1045. stat.add(type, "t" + result[1]);
  1046. }
  1047. }
  1048. }
  1049.  
  1050. function getScoutReport(pid, pdom) {
  1051. myAjax(
  1052. "/ajax.php?p=players&sub=scout_report&pid=" + pid + "&sport=soccer",
  1053. function (data) {
  1054. var srdom = $($.parseHTML(data));
  1055. var remark = srdom.find("span.blurred span").text();
  1056. var srdivs = srdom.find("dd div.flex-grow-1");
  1057. if (srdivs.length == 3) {
  1058. var HS = srdivs.eq(0).find(".lit").length;
  1059. var LS = srdivs.eq(1).find(".lit").length;
  1060. var SS = srdivs.eq(2).find(".lit").length;
  1061. //Trzxyvopaxis
  1062. var Hspan = srdivs.eq(0).find(".blurred span");
  1063. var HArr = new Array();
  1064. for (var i = 0; i < Hspan.length; i++) {
  1065. if (Hspan.eq(i).text() != "Trzxyvopaxis") {
  1066. HArr.push(Hspan.eq(i).text());
  1067. }
  1068. }
  1069. var Lspan = srdivs.eq(1).find(".blurred span");
  1070. var LArr = new Array();
  1071. for (var i = 0; i < Lspan.length; i++) {
  1072. if (Lspan.eq(i).text() != "Trzxyvopaxis") {
  1073. LArr.push(Lspan.eq(i).text());
  1074. }
  1075. }
  1076.  
  1077. var HPids = [], LPids = [];
  1078.  
  1079. var skillnames = pdom.find("td > span.clippable");
  1080. for (var i = 0; i < skillnames.length; i++) {
  1081. if (HArr.indexOf(skillnames.eq(i).text()) >= 0) {
  1082. skillnames.eq(i).parent().addClass("gm_scout_h");
  1083. skillnames.eq(i).parent().addClass("gm_s" + HS);
  1084. HPids.push(i + 1);
  1085. } else if (LArr.indexOf(skillnames.eq(i).text()) >= 0) {
  1086. skillnames.eq(i).parent().removeClass("gm_scout_h");
  1087. skillnames.eq(i).parent().addClass("gm_s" + LS);
  1088. LPids.push(i + 1);
  1089. }
  1090. //else {
  1091. // skillnames.eq(i).parent().removeClass("gm_scout_h");
  1092. // skillnames.eq(i).parent().removeClass("gm_s*");
  1093. //}
  1094. }
  1095.  
  1096. $("#GM_scout_" + pid).remove();
  1097. let nsavgstat = "<span id='GM_scout_" + pid + "'>[H" + HS + " " + HArr[0] + "," + HArr[1] + "] [L" + LS + " " + LArr[0] + "," + LArr[1] + "] S" + SS;
  1098. nsavgstat += "</span>";
  1099. nsavgstat = $(nsavgstat)[0];
  1100. nsavgstat.addEventListener('click', function () {
  1101. var strSus = remark;
  1102. if (IsLoser(HS, LS, LPids[0], LPids[1])) {
  1103. strSus += "<br/><br/>" + now_language.sug_Loser;
  1104. }
  1105. var plans = getTrainPlans(HPids[0], HPids[1], LPids[0], LPids[1]);
  1106. for (var j = 0; j < plans.length; j++) {
  1107.  
  1108. var str = "";
  1109. var pri = getTrainPRI(plans[j].loc, HS, HPids[0], HPids[1], LS, LPids[0], LPids[1]);
  1110. for (var i = 0; i < pri.Order.length; i++) {
  1111. if (str != "") {
  1112. str += ">";
  1113. }
  1114. str += now_language["attrName" + pri.Order[i]];
  1115. }
  1116. strSus += "<br/><br/>" + now_language["sug_T" + plans[j].type] + now_language["Pos" + pri.Sloc.CampKey] + "<br/><br/>" + now_language.sug_PRI + str;
  1117.  
  1118. }
  1119. showHelpLayer(strSus, 'Scout Report', true);
  1120.  
  1121. return false;
  1122. });
  1123. pdom.find("a.subheader").after(nsavgstat);
  1124.  
  1125. }
  1126.  
  1127. }, 1);
  1128. }
  1129.  
  1130. function checkScoutLoc(lst, key, LP1, LP2, slocs) {
  1131. if (lst[key] != undefined) {
  1132. var sloc = lst[key];
  1133. if (getProp(LP1, sloc) == 0 || getProp(LP2, sloc) == 0) {
  1134.  
  1135. slocs.push({ type: 1, loc: sloc });
  1136. }
  1137. else {
  1138. slocs.push({ type: 0, loc: sloc });
  1139. }
  1140. slocs.keys[key] = true;
  1141. }
  1142. }
  1143. function getProp(id, loc) {
  1144. if (loc.Prop[id] != undefined) {
  1145. return loc.Prop[id];
  1146. }
  1147. return 3;
  1148. }
  1149. function getTrainPlans(HP1, HP2, LP1, LP2) {
  1150. //0 首选 1 次选(弱项有主项) 2 一般(强项不适合 从非弱项中找) 3 强行默认 一般练后卫
  1151. var slocs = [];
  1152. slocs.keys = {};
  1153.  
  1154. //按高星挑选合适训练计划
  1155. checkScoutLoc(scoutLocList, HP1 + "," + HP2, LP1, LP2, slocs);
  1156. checkScoutLoc(scoutLocList, HP2 + "," + HP1, LP1, LP2, slocs);
  1157. checkScoutLoc(scoutLocList, HP1, LP1, LP2, slocs);
  1158. checkScoutLoc(scoutLocList, HP2, LP1, LP2, slocs);
  1159.  
  1160.  
  1161. for (var i = 0; i < OKeys.length; i++) {
  1162. var key = OKeys[i];
  1163. if (!slocs.keys[key]) {
  1164. var loc = scoutLocList[key];
  1165. if (getProp(LP1, loc) != 1 && getProp(LP2, loc) != 1) {
  1166. slocs.push({ type: 2, loc: loc });
  1167. slocs.keys[key] = true;
  1168. }
  1169. }
  1170. }
  1171. if (slocs.length == 0) {
  1172. slocs.push({ type: 3, loc: scoutLocList[OKeys[0]] });
  1173. }
  1174. return slocs;
  1175. }
  1176. function IsLoser(HStar, LStar, LP1, LP2) {
  1177. if (HStar <= 2) {
  1178. return true;
  1179. }
  1180. //弱1带速耐
  1181. if (LStar == 1 && HStar < 4) {
  1182. if (LP1 == 1 || LP2 == 1 || LP1 == 2 || LP2 == 2) {
  1183. return true;
  1184. }
  1185. }
  1186. return false;
  1187. }
  1188. function getTrainPRI(sloc, HStar, HP1, HP2, LStar, LP1, LP2) {
  1189.  
  1190. //获取训练顺序
  1191. var lstBase = [];
  1192. var lstMain = [];
  1193. var lstSub = [];
  1194. for (var i = 0; i < sloc.Order.length; i++) {
  1195. var ID = sloc.Order[i];
  1196. var t = getProp(ID, sloc);
  1197. if (t == 0 || t == 1) {
  1198. //强3+星 基础和主项训练完再训练
  1199. if (HStar >= 3) {
  1200. if (HP1 == ID || HP2 == ID) {
  1201. lstSub.push(ID);
  1202. }
  1203. }
  1204. //弱2星带基础和主项 最优先训练
  1205. if (LStar <= 2) {
  1206. if (LP1 == ID || LP2 == ID) {
  1207. if (t == 0) {
  1208. lstBase.unshift(ID);
  1209. }
  1210. else {
  1211. lstMain.push(ID);
  1212. }
  1213. }
  1214. }
  1215. //高低星都没有基础和主项 最优先训练
  1216. if (HP1 != ID && HP2 != ID && LP1 != ID && LP2 != ID) {
  1217. //意降低优先级
  1218. if (ID == 3) {
  1219. lstSub.push(ID);
  1220. }
  1221. else if (t == 0) {
  1222. lstBase.push(ID);
  1223. }
  1224. else {
  1225. lstMain.push(ID);
  1226. }
  1227. }
  1228. }
  1229. else if (t == 2) {
  1230. lstSub.push(ID);
  1231. }
  1232. }
  1233.  
  1234. var pri = 29;
  1235. var ditPRI = {};
  1236. var lstOrder = lstBase.concat(lstMain).concat(lstSub);
  1237.  
  1238. while (lstBase.length > 0) {
  1239. ditPRI[lstBase.shift()] = pri;
  1240. pri -= 1;
  1241. }
  1242. pri = 19;
  1243. while (lstMain.length > 0) {
  1244. ditPRI[lstMain.shift()] = pri;
  1245. pri -= 1;
  1246. }
  1247. pri = 9;
  1248. while (lstSub.length > 0) {
  1249. ditPRI[lstSub.shift()] = pri;
  1250. pri -= 1;
  1251. }
  1252.  
  1253. var ret = {
  1254. "Sloc": sloc, "TrainPRI": ditPRI, "Order": lstOrder
  1255. };
  1256. return ret;
  1257. }
  1258.  
  1259. function getTrainingGraphs(pid, imgs, skills) {
  1260. myAjax(
  1261. "/ajax.php?p=trainingGraph&sub=getJsonTrainingHistory&sport=soccer&player_id=" + pid,
  1262. function (data) {
  1263. drawPlayerByTrainingGraphs(pid, data, imgs, skills);
  1264. });
  1265. }
  1266. function getTrainingGraphsBySkill_id(pid, skill_id, callback) {
  1267. myAjax(
  1268. "/ajax.php?p=trainingGraph&sub=getJsonTrainingHistory&sport=soccer&player_id=" + pid + "&skill_id=" + (skill_id + 2),
  1269. function (data) {
  1270. callback(data);
  1271. });
  1272. }
  1273. function showPop(parent) {
  1274. $("body").append("<div id=\"informationBubble\" class=\"shadow\"></div>");
  1275. var bubble = $("#informationBubble");
  1276. bubble.css("width", "200px");
  1277. let tmpArr = parent.attr('id').split("_");
  1278.  
  1279. let playTS = trainingInfo[tmpArr[0]][tmpArr[1]];
  1280. let str = "";
  1281. let sum = 0;
  1282. if (playTS[tmpArr[2]]) {
  1283. let training = playTS[tmpArr[2]].stat;
  1284. str = now_language.training_avg + " " + training.getAvg() + "%" + training.getTnText() + "<br/><br/>" + now_language.training_ball_day + ":<br/>";
  1285. if (training.camp) {
  1286. str += training.getDayByAvg(training.camp.getAvg()) + "(" + now_language.training_camp + ") ";
  1287. }
  1288. if (training.coach) {
  1289. str += training.getDayByAvg(training.coach.getAvg()) + "(" + now_language.training_coach + ") ";
  1290. }
  1291. if (training.pos) {
  1292. str += training.getDayByAvg(training.pos.getAvg()) + "(" + now_language.training_pos + ")";
  1293. }
  1294. str += "<br/><br/>";
  1295.  
  1296. sum = training.getSum();
  1297. }
  1298. let flag = false;
  1299. str += now_language.training_part + ":";
  1300. for (var i = 0; i < 10; i++) {
  1301. if (playTS[i]) {
  1302. flag = true;
  1303. str += "<br/>" + i + "-" + (i + 1) + " " + now_language.training_total + ":"
  1304. + playTS[i].stat.getSum(true) + "%"
  1305. + " " + now_language.training_avg + ":" + playTS[i].stat.getAvg() + "%<br/>" + playTS[i].stat.getTnText();
  1306. }
  1307. }
  1308.  
  1309. let content = "<div class='clearfix'><h3 style='margin: 0; padding: 0'>" + now_language.training_now + ":"
  1310. + sum
  1311. + "%</h3><div class='skill_exact big'><div class='skill_exact_wrapper clearfix'><div class='skill_exact_bar' style='width: "
  1312. + sum * 2
  1313. + "px;'></div></div></div><p>"
  1314. + (flag ? str : "")
  1315. + "</p></div>";
  1316. bubble.html(content);
  1317. mz.stickToParent(bubble, parent);
  1318. bubble.slideDown("fast");
  1319.  
  1320. $(parent).bind("mouseleave", function () {
  1321. bubble.remove();
  1322. });
  1323. }
  1324. function setLanguage(language) {
  1325. if (language) {
  1326. let new_language = gm_mzlanguage[language];
  1327. if (new_language == undefined) {
  1328. new_language = gm_mzlanguage.en;
  1329. }
  1330. if (now_language != new_language) {
  1331. GM_setValue("mylanguage", language);
  1332. }
  1333. now_language = new_language;
  1334. } else {
  1335. if (now_language == gm_mzlanguage.en) {
  1336. now_language = gm_mzlanguage.cn;
  1337. GM_setValue("mylanguage", "cn");
  1338. } else {
  1339. now_language = gm_mzlanguage.en;
  1340. GM_setValue("mylanguage", "en");
  1341. }
  1342. }
  1343. }
  1344. function initgw() {
  1345. let tmplanguage = GM_getValue("mylanguage", false);
  1346. if (tmplanguage == "cn") {
  1347. tmplanguage = "zh";
  1348. setLanguage(tmplanguage);
  1349. }
  1350. if (gm_mzlanguage[tmplanguage] == undefined) {
  1351. let lang = $("meta[name='language']");
  1352. if (lang.length > 0) {
  1353. setLanguage($("meta[name='language']")[0].content);
  1354. }
  1355.  
  1356. } else {
  1357. now_language = gm_mzlanguage[tmplanguage];
  1358. }
  1359.  
  1360. var css = document.createElement('style');
  1361. css.type = 'text/css';
  1362. css.innerHTML = ".gw_run_div{position:fixed;bottom:20%;right:1px;border:1px solid gray;padding:3px;width:12px;font-size:12px;border-radius: 3px;text-shadow: 1px 1px 3px #676767;background-color: #000000;color: #FFFFFF;cursor: default;}.gw_run{cursor:pointer;}.gw_div_left{float:left;position:fixed;left:0px;top:120px;height:528px;overflow-y:auto;text-align:left;}.gw_div_right{float:right;position:fixed;right:0px;top:120px;height:528px;overflow-y:auto;text-align:left;}.shupai{writing-mode:tb-rl;-webkit-writing-mode:vertical-rl;}.gm_ytc{font-style:italic;text-decoration:underline;}.gm_scout_h{font-weight: bold;}.gm_s1{color:red;}.gm_s2{color:darkgoldenrod;}.gm_s3{color:blue;}.gm_s4{color:fuchsia;}";
  1363.  
  1364.  
  1365. document.getElementsByTagName('head')[0].appendChild(css);
  1366.  
  1367. $(document.body).append("<div class='gw_run_div'>"
  1368. + "<div id='gw_run' class='gw_run shupai' title='" + now_language.ManualColorTitle + "'><b>" + now_language.ManualColor + "</b></div>"
  1369. + "<div>---</div>"
  1370. + "<div id='gw_run2' class='gw_run shupai' title='" + now_language.SettingTitle + "'><b>" + now_language.Setting + "</b></div>"
  1371. + "</div>");
  1372. $('#gw_run')[0].addEventListener('click', function () { gw_start(1); });
  1373. $('#gw_run2')[0].addEventListener('click', function () {
  1374. OpenSetting();
  1375. });
  1376.  
  1377. document.onkeydown = function () {
  1378. if (event.altKey) {
  1379. if (window.event.keyCode == 65) {
  1380. //alt + A
  1381. gw_start(1);
  1382. }
  1383. else if (window.event.keyCode == 83) {
  1384. //alt + S
  1385. gw_start(1);
  1386. }
  1387. else if (window.event.keyCode == 68) {
  1388. //alt + D
  1389. Advanced2D();
  1390. }
  1391. }
  1392. };
  1393. $("body").on("mouseenter", ".skill_exact_van", function () {
  1394. showPop($(this));
  1395. });
  1396. }
  1397. function report() {
  1398. let username = $("#header-username").html();
  1399. if (username != undefined) {
  1400.  
  1401. GM_xmlhttpRequest({
  1402. method: "GET",
  1403. url: "http://www.budeng.win:852/MZ/ReportUsr?username=" + username,
  1404. responseType: "json",
  1405. onload: function (result) {
  1406. },
  1407. onerror: function (result) {
  1408. }
  1409. });
  1410. }
  1411. }
  1412. //GraphsType 0 自动模式 1 强制训练图
  1413. function gw_start(GraphsType) {
  1414. if ($("#players_container").width() < 660) {
  1415. if (mzreg.shortlist_url.test(location.href)) {
  1416. $(".col_2_of_3").width("660");
  1417. }
  1418. $("#players_container").width("660");
  1419. }
  1420. if ($(".player_share_skills").length > 0) {
  1421. if (GraphsType == 0) {
  1422. getMax(function () {
  1423. showMax(0);
  1424. });
  1425. } else {
  1426. showMax(GraphsType);
  1427. }
  1428. } else if ($(".playerContainer").find(".training_graphs").length > 0) {
  1429. showMax(GraphsType);
  1430. }
  1431. }
  1432. function OpenSetting() {
  1433.  
  1434. let lang = GM_getValue("mylanguage", "en");
  1435. let xml_mode = GM_getValue("xml_mode", 0);
  1436. let autoRun = GM_getValue("autoRun", 0);
  1437. let tmphtml;
  1438. tmphtml = '\
  1439. <div><b>'+ now_language.Language + ':</b></div>\
  1440. <div><select id="gm_language">\
  1441. <option value="en"'+ (lang == "en" ? ' selected="selected" ' : '') + '>' + gm_mzlanguage.en.Name + '</option>\
  1442. <option value="zh"'+ (lang == "zh" ? ' selected="selected" ' : '') + '>' + gm_mzlanguage.zh.Name + '</option>\
  1443. <option value="es"'+ (lang == "es" ? ' selected="selected" ' : '') + '>' + gm_mzlanguage.es.Name + '</option>\
  1444. </select>\
  1445. </div>\
  1446. \
  1447. <div><b>'+ now_language.AutoRun + ':</b></div>\
  1448. <div><select id="gm_autorun">\
  1449. <option value="0"'+ (autoRun == 0 ? ' selected="selected" ' : '') + '>' + now_language.AutoRun0 + '</option>\
  1450. <option value="1"'+ (autoRun == 1 ? ' selected="selected" ' : '') + '>' + now_language.AutoRun1 + '</option>\
  1451. </select>\
  1452. </div>\
  1453. \
  1454. <div><b>'+ now_language.XmlMode + ':</b></div>\
  1455. <div><select id="gm_xml_mode">\
  1456. <option value="0"'+ (xml_mode == 0 ? ' selected="selected" ' : '') + '>' + now_language.XmlMode1 + '</option>\
  1457. <option value="1"'+ (xml_mode == 1 ? ' selected="selected" ' : '') + '>' + now_language.XmlMode2 + '</option>\
  1458. </select>\
  1459. </div>\
  1460. <div><b>'+ now_language.TacConf + ':</b></div>\
  1461. <div><textarea style="width: 380px;height:200px;" id="txtTacConf" spellcheck="false" autocapitalize="off" autocomplete="off" autocorrect="off"></textarea>\
  1462. </div>\
  1463. <div>\
  1464. <a href="#" class="mzbtn buttondiv button_account" id="gm_setting_save">\
  1465. <span class="buttonClassMiddle"><span style="white-space: nowrap">'+ now_language.Save + '</span></span><span class="buttonClassRight">&nbsp;</span>\
  1466. </a>\
  1467. </div>\
  1468. ';
  1469.  
  1470. showHelpLayer(tmphtml, now_language.Setting, true);
  1471. $("#txtTacConf").val(GM_getValue("TacConf", ""));
  1472. $("#gm_setting_save")[0].addEventListener('click', function () {
  1473. setLanguage($("#gm_language").val());
  1474. GM_setValue("xml_mode", $("#gm_xml_mode").val());
  1475. GM_setValue("autoRun", $("#gm_autorun").val());
  1476. GM_setValue("TacConf", $("#txtTacConf").val());
  1477.  
  1478. $('#gw_run')[0].title = now_language.ManualColorTitle;
  1479. $('#gw_run').html("<b>" + now_language.ManualColor + "</b>");
  1480. $('#gw_run2')[0].title = now_language.SettingTitle;
  1481. $('#gw_run2').html("<b>" + now_language.Setting + "</b>");
  1482.  
  1483. $('#gw_jijing').html(now_language.Jijing);
  1484. $('#gw_dongzuo').html(now_language.dongzuo);
  1485. $('#gw_copyxml1').html(now_language.Copyxml1);
  1486. $('#gw_copyxml2').html(now_language.Copyxml2);
  1487. $('#gw_test').html(now_language.Test);
  1488.  
  1489.  
  1490. powerboxCloseAll();
  1491. });
  1492. }
  1493.  
  1494. //以下为2D比赛辅助
  1495. function MatchEvent() {
  1496. this.data = new Array();
  1497. this.setAllPlayerEvent = function (team, tc) {
  1498. for (let i = 0; i < tc.length; i++) {
  1499. this.data.push(tc[i]);
  1500. }
  1501.  
  1502. for (let i = 0; i < team.m_players.length; i++) {
  1503. let len = team.m_players[i].m_events.getLength();
  1504. for (var j = 0; j < len; j++) {
  1505. this.data.push(team.m_players[i].m_events.at(j));
  1506. }
  1507. }
  1508. };
  1509. this.Sort = function () {
  1510. this.data.sort(function (a, b) {
  1511. return a.m_frame - b.m_frame;
  1512. });
  1513. };
  1514. }
  1515.  
  1516. function OutOfPlay() {
  1517. this.data = new Array();
  1518. this.add = function (begin, end) {
  1519. this.data.push({
  1520. begin: begin,
  1521. end: end
  1522. });
  1523. };
  1524. this.resetIndex = function () {
  1525. this.index = 0;
  1526. };
  1527. this.notin = function (frame) {
  1528. while (this.index < this.data.length) {
  1529. let item = this.data[this.index];
  1530. if (frame < item.begin) {
  1531. return true;
  1532. } else if (frame <= item.end) {
  1533. return false;
  1534. }
  1535. if (frame > item.end) {
  1536. this.index++;
  1537. }
  1538. }
  1539. return true;
  1540. };
  1541. this.Sort = function () {
  1542. this.data.sort(function (a, b) {
  1543. return a.begin - b.begin;
  1544. });
  1545. }
  1546. }
  1547.  
  1548. let mEvent, mStaticEventHome, mStaticEventAway;
  1549. let out_of_play;
  1550. let dit_bypid = {};
  1551. let dit_player = {};
  1552. let m_koFrame = 0, m_htFrame = 0, m_ko2Frame = 0, m_ht2Frame = 0, m_ko3Frame = 0, m_ht3Frame = 0, m_ko4Frame = 0, m_ht4Frame = 0;
  1553.  
  1554. function Advanced2D() {
  1555.  
  1556. if (OK_2D) {
  1557. if ($("#canvas").length > 0) {
  1558.  
  1559. let home = MyGame.prototype.mzlive.m_match.getHomeTeam();
  1560. let away = MyGame.prototype.mzlive.m_match.getAwayTeam();
  1561.  
  1562. if (home != null && away != null) {
  1563.  
  1564. let nl = matchLoader.matchXml.documentElement.evaluate('Periods/*');
  1565. let p;
  1566. while (p = nl.iterateNext()) {
  1567. if (p.getAttribute('name') == 'half1') {
  1568. m_koFrame = MyGame.prototype.mzlive.m_match.timeToFrame(p.getAttribute('start'));
  1569. m_htFrame = MyGame.prototype.mzlive.m_match.timeToFrame(p.getAttribute('end'));
  1570. }
  1571. else if (p.getAttribute('name') == 'half2') {
  1572. m_ko2Frame = MyGame.prototype.mzlive.m_match.timeToFrame(p.getAttribute('start'));
  1573. m_ht2Frame = MyGame.prototype.mzlive.m_match.timeToFrame(p.getAttribute('end'));
  1574. }
  1575. else if (p.getAttribute('name') == 'extra1') {
  1576. m_ko3Frame = MyGame.prototype.mzlive.m_match.timeToFrame(p.getAttribute('start'));
  1577. m_ht3Frame = MyGame.prototype.mzlive.m_match.timeToFrame(p.getAttribute('end'));
  1578. }
  1579. else if (p.getAttribute('name') == 'extra2') {
  1580. m_ko4Frame = MyGame.prototype.mzlive.m_match.timeToFrame(p.getAttribute('start'));
  1581. m_ht4Frame = MyGame.prototype.mzlive.m_match.timeToFrame(p.getAttribute('end'));
  1582. }
  1583. }
  1584.  
  1585. let players = matchLoader.matchXml.documentElement.evaluate('Player');
  1586. let re1;
  1587. dit_bypid = {};
  1588. dit_player = {};
  1589. while (re1 = players.iterateNext()) {
  1590. let ttt = {
  1591. internalId: re1.getAttribute('internalId'),
  1592. name: re1.getAttribute('name'),
  1593. shirtno: re1.getAttribute('shirtno'),
  1594. teamId: re1.getAttribute('teamId'),
  1595. origin: re1.getAttribute('origin')
  1596. };
  1597. dit_bypid[re1.getAttribute('id')] = ttt;
  1598. if (ttt.teamId == home.m_teamId) {
  1599. dit_player[ttt.internalId] = home.getPlayerByPlayerId(ttt.internalId);
  1600. } else {
  1601. dit_player[ttt.internalId] = away.getPlayerByPlayerId(ttt.internalId);
  1602. }
  1603. }
  1604.  
  1605. let events = matchLoader.matchXml.documentElement.evaluate('Events/*');
  1606.  
  1607. let re, begin, end;
  1608.  
  1609. let homeTc = new Array();
  1610. let awayTc = new Array();
  1611.  
  1612.  
  1613. out_of_play = new OutOfPlay();
  1614. out_of_play.add(0, m_koFrame);
  1615. out_of_play.add(m_htFrame, m_ko2Frame);
  1616. if (m_ko3Frame > 0) {
  1617. out_of_play.add(m_ht2Frame, m_ko3Frame);
  1618. }
  1619. if (m_ko4Frame > 0) {
  1620. out_of_play.add(m_ht3Frame, m_ko4Frame);
  1621. }
  1622. while (re = events.iterateNext()) {
  1623. begin = re.getAttribute('intervalendframe');
  1624. end = re.getAttribute('startframe');
  1625. if (begin != undefined && end != undefined) {
  1626. out_of_play.add(begin, end);
  1627. }
  1628.  
  1629. //战术变动
  1630. if (re.tagName == 'Tactic') {
  1631. let t_teamid = re.getAttribute('teamId');
  1632. let t_time = re.getAttribute('time');
  1633. let t_type = re.getAttribute('type');
  1634. let t_new_setting = re.getAttribute('new_setting');
  1635. if (t_teamid == home.m_teamId) {
  1636. homeTc.push({
  1637. tag: 'Tactic',
  1638. m_frame: MyGame.prototype.mzlive.m_match.timeToFrame(t_time),
  1639. type: t_type,
  1640. new_setting: t_new_setting,
  1641. m_team: home
  1642. });
  1643. } else {
  1644. awayTc.push({
  1645. tag: 'Tactic',
  1646. m_frame: MyGame.prototype.mzlive.m_match.timeToFrame(t_time),
  1647. type: t_type,
  1648. new_setting: t_new_setting,
  1649. m_team: away
  1650. });
  1651. }
  1652. }
  1653. //换人
  1654. else if (re.tagName == 'Substitution') {
  1655. let t_time = re.getAttribute('time');
  1656. let t_clock = re.getAttribute('clock');
  1657. let t_frame = re.getAttribute('frame');
  1658. let t_playerId = re.getAttribute('playerId');
  1659. let t_teamId = re.getAttribute('teamId');
  1660. let t_substitutedId = re.getAttribute('substitutedId');
  1661. let t_reason = re.getAttribute('reason');
  1662. let t_minute = re.getAttribute('minute');
  1663. let t_scorecondition = re.getAttribute('scorecondition');
  1664. let t_score = re.getAttribute('score');
  1665.  
  1666. let t_player, t_sub_player;
  1667. let p5 = dit_bypid[t_playerId];
  1668. if (p5) {
  1669. t_player = dit_player[p5.internalId];
  1670. }
  1671. p5 = dit_bypid[t_substitutedId];
  1672. if (p5) {
  1673. t_sub_player = dit_player[p5.internalId];
  1674. }
  1675.  
  1676. if (t_teamId == home.m_teamId) {
  1677. homeTc.push({
  1678. tag: 'Sub',
  1679. m_frame: t_frame,
  1680. clock: t_clock,
  1681. player: t_player,
  1682. sub_player: t_sub_player,
  1683. reason: t_reason,
  1684. minute: t_minute,
  1685. scorecondition: t_scorecondition,
  1686. score: t_score,
  1687. m_team: home
  1688. });
  1689. } else {
  1690. awayTc.push({
  1691. tag: 'Sub',
  1692. m_frame: t_frame,
  1693. clock: t_clock,
  1694. player: t_player,
  1695. sub_player: t_sub_player,
  1696. reason: t_reason,
  1697. minute: t_minute,
  1698. scorecondition: t_scorecondition,
  1699. score: t_score,
  1700. m_team: away
  1701. });
  1702. }
  1703. }
  1704. }
  1705. out_of_play.Sort();
  1706.  
  1707.  
  1708.  
  1709.  
  1710. let lstEventHome = new MatchEvent();
  1711. let lstEventAway = new MatchEvent();
  1712. lstEventHome.setAllPlayerEvent(home, homeTc);
  1713. lstEventAway.setAllPlayerEvent(away, awayTc);
  1714.  
  1715. lstEventHome.Sort();
  1716. lstEventAway.Sort();
  1717.  
  1718. mStaticEventHome = lstEventHome;
  1719. mStaticEventAway = lstEventAway;
  1720.  
  1721.  
  1722. if ($('.gw_div_left').length == 0) {
  1723. $('#canvas').parent().append('<div class="gw_div_left"></div>');
  1724. $('#canvas').parent().append('<div class="gw_div_right"></div>');
  1725. $('#canvas').parent().append(
  1726. '<div><b id="gw_jijing" class="gw_run" style="color: red;">' + now_language.Jijing + '</b>'
  1727. + ' <b id="gw_dongzuo" class="gw_run" style="color: red;">' + now_language.dongzuo + '</b>'
  1728. + ' <b id="gw_copyxml1" class="gw_run" style="color: red;">' + now_language.Copyxml1 + '</b>'
  1729. + ' <b id="gw_copyxml2" class="gw_run" style="color: red;">' + now_language.Copyxml2 + '</b>'
  1730. + ' <b id="gw_test" class="gw_run" style="color: red;">' + now_language.Test + '</b>'
  1731. + '</div>');
  1732.  
  1733. $('#gw_jijing')[0].addEventListener('click', function () {
  1734. ShowDiv(0);
  1735. });
  1736.  
  1737. $('#gw_dongzuo')[0].addEventListener('click', function () {
  1738. ShowDiv(1);
  1739. });
  1740.  
  1741. $('#gw_copyxml1')[0].addEventListener('click', function () {
  1742. CopyXML(true);
  1743.  
  1744. });
  1745. $('#gw_copyxml2')[0].addEventListener('click', function () {
  1746. CopyXML(false);
  1747. });
  1748. $('#gw_test')[0].addEventListener('click', function () {
  1749.  
  1750. });
  1751.  
  1752. } else {
  1753. $('.gw_div_left').empty();
  1754. $('.gw_div_right').empty();
  1755. }
  1756. }
  1757. }
  1758. }
  1759. }
  1760. function ShowDiv(type) {
  1761. $('.gw_div_left').empty();
  1762. $('.gw_div_right').empty();
  1763. if (type == 0) {
  1764. let lstEventHome = mStaticEventHome;
  1765. let lstEventAway = mStaticEventAway;
  1766.  
  1767. let team = MyGame.prototype.mzlive.m_match.getHomeTeam();
  1768. $('.gw_div_left').append("<div><b>" +
  1769. team.getTactics() + " " + team.getPlayStyle() + " " + team.getAggression()
  1770. + "</b></div>");
  1771. for (let i = 0; i < lstEventHome.data.length; i++) {
  1772. if (lstEventHome.data[i].tag == "Tactic") {
  1773. $('.gw_div_left').append('<div><b id="gw_eventH' + i + '" class="gw_run">'
  1774. + MyGame.prototype.mzlive.m_match.frameToMatchMinute(lstEventHome.data[i].m_frame) + "′ "
  1775. + lstEventHome.data[i].type + " -> "
  1776. + lstEventHome.data[i].new_setting + '</b></div>');
  1777. } else if (lstEventHome.data[i].tag == "Sub") {
  1778. $('.gw_div_left').append('<div><b id="gw_eventH' + i + '" class="gw_run">'
  1779. + MyGame.prototype.mzlive.m_match.frameToMatchMinute(lstEventHome.data[i].m_frame) + "′ "
  1780. + lstEventHome.data[i].player.m_name + "(" + lstEventHome.data[i].player.m_shirtNo + ")↑ "
  1781. + lstEventHome.data[i].sub_player.m_name + "(" + lstEventHome.data[i].sub_player.m_shirtNo + ")↓<br/>"
  1782. + lstEventHome.data[i].reason + lstEventHome.data[i].minute + "′[" + lstEventHome.data[i].scorecondition + " " + lstEventHome.data[i].score + "]"
  1783. + '</b></div>');
  1784.  
  1785. } else {
  1786. $('.gw_div_left').append('<div><b id="gw_eventH' + i + '" class="gw_run">'
  1787. + MyGame.prototype.mzlive.m_match.frameToMatchMinute(lstEventHome.data[i].m_frame) + "′ "
  1788. + lstEventHome.data[i].m_owner.m_name + "(" + lstEventHome.data[i].m_owner.m_shirtNo + ") "
  1789. + lstEventHome.data[i].m_description + '</b></div>');
  1790. }
  1791.  
  1792. let dom = $('#gw_eventH' + i)[0];
  1793. dom.m_frame = lstEventHome.data[i].m_frame;
  1794. dom.m_frame -= 45;
  1795. if (dom.m_frame < 0) {
  1796. dom.m_frame = 0;
  1797. }
  1798. dom.addEventListener('click', function () { MyGame.prototype.mzlive.m_match.setCurrentFrame(this.m_frame); });
  1799. }
  1800.  
  1801. team = MyGame.prototype.mzlive.m_match.getAwayTeam();
  1802. $('.gw_div_right').append("<div><b>" +
  1803. team.getTactics() + " " + team.getPlayStyle() + " " + team.getAggression()
  1804. + "</b></div>");
  1805. for (let i = 0; i < lstEventAway.data.length; i++) {
  1806. if (lstEventAway.data[i].tag == "Tactic") {
  1807. $('.gw_div_right').append('<div><b id="gw_eventA' + i + '" class="gw_run">'
  1808. + MyGame.prototype.mzlive.m_match.frameToMatchMinute(lstEventAway.data[i].m_frame) + "′ "
  1809. + lstEventAway.data[i].type + " -> "
  1810. + lstEventAway.data[i].new_setting + '</b></div>');
  1811. } else if (lstEventAway.data[i].tag == "Sub") {
  1812. $('.gw_div_right').append('<div><b id="gw_eventA' + i + '" class="gw_run">'
  1813. + MyGame.prototype.mzlive.m_match.frameToMatchMinute(lstEventAway.data[i].m_frame) + "′ "
  1814. + lstEventAway.data[i].player.m_name + "(" + lstEventAway.data[i].player.m_shirtNo + ")↑ "
  1815. + lstEventAway.data[i].sub_player.m_name + "(" + lstEventAway.data[i].sub_player.m_shirtNo + ")↓<br/>"
  1816. + lstEventAway.data[i].reason + lstEventAway.data[i].minute + "′[" + lstEventAway.data[i].scorecondition + " " + lstEventAway.data[i].score + "]"
  1817. + '</b></div>');
  1818. } else {
  1819. $('.gw_div_right').append('<div><b id="gw_eventA' + i + '" class="gw_run">'
  1820. + MyGame.prototype.mzlive.m_match.frameToMatchMinute(lstEventAway.data[i].m_frame) + "′ "
  1821. + lstEventAway.data[i].m_owner.m_name + "(" + lstEventAway.data[i].m_owner.m_shirtNo + ") "
  1822. + lstEventAway.data[i].m_description + '</b></div>');
  1823. }
  1824. let dom = $('#gw_eventA' + i)[0];
  1825. dom.m_frame = lstEventAway.data[i].m_frame;
  1826. dom.m_frame -= 45;
  1827. if (dom.m_frame < 0) {
  1828. dom.m_frame = 0;
  1829. }
  1830. dom.addEventListener('click', function () { MyGame.prototype.mzlive.m_match.setCurrentFrame(this.m_frame); });
  1831. }
  1832. } else {
  1833.  
  1834. for (let pid in mEvent.dataByPlayer) {
  1835. let divname;
  1836. if (mEvent.dataByPlayer[pid].isHome) {
  1837. divname = '.gw_div_left';
  1838. } else {
  1839. divname = '.gw_div_right';
  1840. }
  1841. let frame_count = 0;
  1842. frame_count = mEvent.dataByPlayer[pid].FoolCount;
  1843. $(divname).append('<div><b id="gw_player_' + pid + '" class="gw_run">'
  1844. + mEvent.dataByPlayer[pid].owner.m_name + "(" + mEvent.dataByPlayer[pid].owner.m_shirtNo + ")"
  1845. + "[" + frame_count + "]</b></div>");
  1846. let dom = $("#gw_player_" + pid)[0];
  1847. dom.pid = pid;
  1848. dom.divname = divname;
  1849. dom.addEventListener('click', function () {
  1850. $(this.divname).empty();
  1851.  
  1852. $(divname).append('<div><b>'
  1853. + mEvent.dataByPlayer[pid].owner.m_name + "(" + mEvent.dataByPlayer[pid].owner.m_shirtNo + ")</b></div>");
  1854. let arr = mEvent.dataByPlayer[this.pid].data;
  1855. for (var k = 0; k < arr.length; k++) {
  1856. let key = 'gw_player_' + pid + "_s_" + k;
  1857. $(this.divname).append('<div><b id="' + key + '" class="gw_run">'
  1858. + MyGame.prototype.mzlive.m_match.frameToMatchMinute(arr[k].m_frame_start) + "′["
  1859. + arr[k].m_frame_start + "+" + (arr[k].m_frame_end - arr[k].m_frame_start + 1)
  1860. + "]" + (arr[k].FoolCount == 0 ? "" : ("+" + arr[k].FoolCount)) + " "
  1861. + getMatchStatusName(arr[k].status)
  1862. + "</b></div>");
  1863.  
  1864. let dom = $("#" + key)[0];
  1865. dom.m_frame = arr[k].m_frame_start;
  1866. dom.addEventListener('click', function () { MyGame.prototype.mzlive.m_match.setCurrentFrame(this.m_frame); });
  1867. }
  1868. });
  1869.  
  1870.  
  1871.  
  1872.  
  1873.  
  1874. }
  1875. }
  1876. }
  1877.  
  1878.  
  1879. function getMatchStatusName(status) {
  1880. switch (status) {
  1881. case MatchStatus.BA_NORMAL:
  1882. return now_language.BA_NORMAL;
  1883. case MatchStatus.BA_WALL:
  1884. return now_language.BA_WALL;
  1885. case MatchStatus.BA_HOLD:
  1886. return now_language.BA_HOLD;
  1887. case MatchStatus.BA_DOWN:
  1888. return now_language.BA_DOWN;
  1889. case MatchStatus.BA_HOLD_THROWIN:
  1890. return now_language.BA_HOLD_THROWIN;
  1891. case MatchStatus.BA_THROWIN:
  1892. return now_language.BA_THROWIN;
  1893. case MatchStatus.BA_LEFT_FOOT_SHOT_FWD:
  1894. return now_language.BA_LEFT_FOOT_SHOT_FWD;
  1895. case MatchStatus.BA_LEFT_FOOT_SHOT_BACK:
  1896. return now_language.BA_LEFT_FOOT_SHOT_BACK;
  1897. case MatchStatus.BA_LEFT_FOOT_SHOT_RIGHT:
  1898. return now_language.BA_LEFT_FOOT_SHOT_RIGHT;
  1899. case MatchStatus.BA_LEFT_FOOT_SHOT_LEFT:
  1900. return now_language.BA_LEFT_FOOT_SHOT_LEFT;
  1901. case MatchStatus.BA_RIGHT_FOOT_SHOT_FWD:
  1902. return now_language.BA_RIGHT_FOOT_SHOT_FWD;
  1903. case MatchStatus.BA_RIGHT_FOOT_SHOT_BACK:
  1904. return now_language.BA_RIGHT_FOOT_SHOT_BACK;
  1905. case MatchStatus.BA_RIGHT_FOOT_SHOT_RIGHT:
  1906. return now_language.BA_RIGHT_FOOT_SHOT_RIGHT;
  1907. case MatchStatus.BA_RIGHT_FOOT_SHOT_LEFT:
  1908. return now_language.BA_RIGHT_FOOT_SHOT_LEFT;
  1909. case MatchStatus.BA_LEFT_FOOT_PASS_FWD:
  1910. return now_language.BA_LEFT_FOOT_PASS_FWD;
  1911. case MatchStatus.BA_LEFT_FOOT_PASS_BACK:
  1912. return now_language.BA_LEFT_FOOT_PASS_BACK;
  1913. case MatchStatus.BA_LEFT_FOOT_PASS_RIGHT:
  1914. return now_language.BA_LEFT_FOOT_PASS_RIGHT;
  1915. case MatchStatus.BA_LEFT_FOOT_PASS_LEFT:
  1916. return now_language.BA_LEFT_FOOT_PASS_LEFT;
  1917. case MatchStatus.BA_RIGHT_FOOT_PASS_FWD:
  1918. return now_language.BA_RIGHT_FOOT_PASS_FWD;
  1919. case MatchStatus.BA_RIGHT_FOOT_PASS_BACK:
  1920. return now_language.BA_RIGHT_FOOT_PASS_BACK;
  1921. case MatchStatus.BA_RIGHT_FOOT_PASS_RIGHT:
  1922. return now_language.BA_RIGHT_FOOT_PASS_RIGHT;
  1923. case MatchStatus.BA_RIGHT_FOOT_PASS_LEFT:
  1924. return now_language.BA_RIGHT_FOOT_PASS_LEFT;
  1925. case MatchStatus.BA_PICK_UP_BALL:
  1926. return now_language.BA_PICK_UP_BALL;
  1927. case MatchStatus.BA_DROP_BALL:
  1928. return now_language.BA_DROP_BALL;
  1929. case MatchStatus.BA_HEADER:
  1930. return now_language.BA_HEADER;
  1931. case MatchStatus.BA_TRIP:
  1932. return now_language.BA_TRIP;
  1933. case MatchStatus.BA_CELEBRATE:
  1934. return now_language.BA_CELEBRATE;
  1935. case MatchStatus.BA_GK_READY:
  1936. return now_language.BA_GK_READY;
  1937. case MatchStatus.BA_GK_ACRO_LEFT:
  1938. return now_language.BA_GK_ACRO_LEFT;
  1939. case MatchStatus.BA_GK_ACRO_LEFT_HOLD:
  1940. return now_language.BA_GK_ACRO_LEFT_HOLD;
  1941. case MatchStatus.BA_GK_ACRO_RIGHT:
  1942. return now_language.BA_GK_ACRO_RIGHT;
  1943. case MatchStatus.BA_GK_ACRO_RIGHT_HOLD:
  1944. return now_language.BA_GK_ACRO_RIGHT_HOLD;
  1945. case MatchStatus.BA_GK_SIDESTEP_LEFT:
  1946. return now_language.BA_GK_SIDESTEP_LEFT;
  1947. case MatchStatus.BA_GK_SIDESTEP_RIGHT:
  1948. return now_language.BA_GK_SIDESTEP_RIGHT;
  1949. case MatchStatus.BA_GK_KICK:
  1950. return now_language.BA_GK_KICK;
  1951. case MatchStatus.BA_GK_THROW_BALL:
  1952. return now_language.BA_GK_THROW_BALL;
  1953. case MatchStatus.BA_GK_STRETCH_LEFT:
  1954. return now_language.BA_GK_STRETCH_LEFT;
  1955. case MatchStatus.BA_GK_STRETCH_LEFT_HOLD:
  1956. return now_language.BA_GK_STRETCH_LEFT_HOLD;
  1957. case MatchStatus.BA_GK_STRETCH_RIGHT:
  1958. return now_language.BA_GK_STRETCH_RIGHT;
  1959. case MatchStatus.BA_GK_STRETCH_RIGHT_HOLD:
  1960. return now_language.BA_GK_STRETCH_RIGHT_HOLD;
  1961. case MatchStatus.BA_BALL_OWNER:
  1962. return now_language.BA_BALL_OWNER;
  1963. case MatchStatus.BA_TACKLE:
  1964. return now_language.BA_TACKLE;
  1965. case MatchStatus.BA_SLIDING_TACKLE:
  1966. return now_language.BA_SLIDING_TACKLE;
  1967. case MatchStatus.BA_SLIDING_TACKLE_STAND:
  1968. return now_language.BA_SLIDING_TACKLE_STAND;
  1969. case MatchStatus.BA_MAX:
  1970. return now_language.BA_MAX;
  1971. case 1001:
  1972. return now_language.BA_MY_1001;
  1973. case 1002:
  1974. return now_language.BA_MY_1002;
  1975. case 1003:
  1976. return now_language.BA_MY_1003;
  1977. case 1011:
  1978. return now_language.BA_MY_1011;
  1979. case 1012:
  1980. return now_language.BA_MY_1012;
  1981. default:
  1982. return now_language.Unknown;
  1983. }
  1984. }
  1985.  
  1986. function StatsToPos_X(i, IsLocal) {
  1987. var ret = IsLocal ? Math.round(-.255800462 * i + 199.8228530689) : Math.round(.2555000556 * i + 8.3741302936);
  1988. return ret;
  1989. }
  1990. function StatsToPos_Y(i, IsLocal) {
  1991. var ret = IsLocal ? Math.round(-.3073207154 * i + 315.9278777381) : Math.round(.3070644902 * i + 9.2794889414);
  1992. return ret;
  1993. }
  1994. function CopyXML(ishome) {
  1995.  
  1996. let xml_mode = GM_getValue("xml_mode", 0);
  1997. if (xml_mode == 0) {
  1998. getMax(function () {
  1999. let tmpXML = Stats2XML(ishome, pmax);
  2000. GM_setClipboard(tmpXML);
  2001. alert(now_language.CopyXmlMsg);
  2002. });
  2003. } else {
  2004. let tmpXML = Stats2XML(ishome);
  2005. myAjax(
  2006. "/?p=players",
  2007. function (data2) {
  2008. //
  2009. var myData = new FormData();
  2010. myData.append("xml", "9" + base64js.fromByteArray(pako.gzip(tmpXML)));
  2011. myData.append("html", data2);
  2012. myData.append("tacConf", GM_getValue("TacConf", ""));
  2013. GM_xmlhttpRequest({
  2014. method: "POST",
  2015. url: "http://www.budeng.win:852/MZ/TuneXMLByHtml",
  2016. data: myData,
  2017. responseType: "json",
  2018. onload: function (result) {
  2019. var dxml = JSON.parse(result.responseText);
  2020. if (dxml.ErrorCode == 0) {
  2021. GM_setClipboard(dxml.data);
  2022. alert(now_language.CopyXmlMsg);
  2023. } else {
  2024. alert(now_language.CopyXmlMsgError);
  2025. }
  2026. },
  2027. onerror: function (result) {
  2028. alert(now_language.CopyXmlMsgError);
  2029. }
  2030. });
  2031. }, 2, true);
  2032. }
  2033. }
  2034. function Stats2XML(ishome, players) {
  2035.  
  2036. let team;
  2037. if (ishome) {
  2038. team = MyGame.prototype.mzlive.m_match.getHomeTeam();
  2039. } else {
  2040. team = MyGame.prototype.mzlive.m_match.getAwayTeam();
  2041. }
  2042.  
  2043. let pidArr = new Array();
  2044. if (players) {
  2045. for (let pid in players) {
  2046. pidArr.push(pid);
  2047. }
  2048. }
  2049. while (pidArr.length < 11) {
  2050. pidArr.push(0);
  2051. }
  2052.  
  2053. let pl;
  2054. let nl = matchLoader.matchXml.documentElement.evaluate('Player');
  2055. let tmpXML = "<?xml version=\"1.0\" ?>" + "\r\n<SoccerTactics>\r\n\t<Team tactics=" + "\"" + team.getTactics() + "\" playstyle=\"" + team.getPlayStyle() + "\" aggression=\"" + team.getAggression() + "\" />\r\n"
  2056. + "\t<Pos pos=\"goalie\" pid=\"" + pidArr.shift() + "\" x=\"103\" y=\"315\" x1=\"103\" y1=\"315\" x2=\"103\" y2=\"315\" pt=\"15\" fk=\"15\" />\r\n";
  2057.  
  2058.  
  2059. while (pl = nl.iterateNext()) {
  2060. let origin = pl.getAttribute('origin');
  2061. let teamId = pl.getAttribute("teamId");
  2062. if (origin != "" && origin != "375,0" && origin != "375,1000") {
  2063. let arr = origin.split(",");
  2064. if (team.getId() == teamId) {
  2065. let x = StatsToPos_X(arr[0], ishome);
  2066. let y = StatsToPos_Y(arr[1], ishome);
  2067. tmpXML += "\t<Pos pos=\"normal\" pid=\"" + pidArr.shift() + "\" x=\"" + x + "\" y=\"" + y + "\" x1=\"" + x + "\" y1=\"" + y + "\" x2=\"" + x + "\" y2=\"" + y + "\" pt=\"1\" fk=\"1\" />\r\n";
  2068. }
  2069.  
  2070. }
  2071. }
  2072. tmpXML += "</SoccerTactics>\r\n";
  2073. return tmpXML;
  2074. }
  2075. var _open, _prepareTransferData, _centerPowerbox, _ajaxSubmit;
  2076. var finalInitAfterLoading, processButtonPresses, Load010SetupMainSceneInstance;
  2077. let OK_2D = false;
  2078. (function () {
  2079. 'use strict';
  2080.  
  2081.  
  2082. initgw();
  2083.  
  2084. _open = window.XMLHttpRequest.prototype.open;
  2085. window.XMLHttpRequest.prototype.open = function () {
  2086. if (mzreg.data2d_url.test(arguments[1])) {
  2087. OK_2D = false;
  2088. if (MyGame.prototype.mzlive.R_GW == undefined) {
  2089. MyGame.prototype.mzlive.R_GW = true;
  2090.  
  2091. finalInitAfterLoading = MyGame.prototype.mzlive.finalInitAfterLoading;
  2092. MyGame.prototype.mzlive.finalInitAfterLoading = function () {
  2093. finalInitAfterLoading.apply(this);
  2094. OK_2D = true;
  2095. Advanced2D();
  2096. };
  2097. Load010SetupMainSceneInstance = MyGame.prototype.Load010SetupMainSceneInstance;
  2098. MyGame.prototype.Load010SetupMainSceneInstance = function () {
  2099. window.matchLoader = arguments[0];
  2100. Load010SetupMainSceneInstance.apply(this, arguments);
  2101. };
  2102.  
  2103. }
  2104. }
  2105. return _open.apply(this, arguments);
  2106. };
  2107.  
  2108. if (unsafeWindow.prepareTransferData != undefined) {
  2109. _prepareTransferData = unsafeWindow.prepareTransferData;
  2110. unsafeWindow.prepareTransferData = function (readyState, response, responseParameter) {
  2111.  
  2112. _prepareTransferData.apply(this, arguments);
  2113. if (GM_getValue("autoRun", 0) == 1) {
  2114. if (typeof (responseParameter) === "undefined" || !responseParameter) {
  2115. gw_start(0);
  2116. }
  2117. }
  2118. };
  2119. }
  2120.  
  2121. if (unsafeWindow.centerPowerbox != undefined) {
  2122. _centerPowerbox = unsafeWindow.centerPowerbox;
  2123. unsafeWindow.centerPowerbox = function () {
  2124.  
  2125. _centerPowerbox.apply(this, arguments);
  2126. if (GM_getValue("autoRun", 0) == 1) {
  2127. gw_start(0);
  2128. }
  2129. };
  2130. }
  2131.  
  2132. if ($.fn.ajaxSubmit != undefined) {
  2133. _ajaxSubmit = $.fn.ajaxSubmit;
  2134. $.fn.ajaxSubmit = function (options) {
  2135. if (options.gm_success_is == undefined) {
  2136. options.gm_success_is = true;
  2137. options.gm_success = options.success;
  2138. options.success = function () {
  2139. options.gm_success.apply(this, arguments);
  2140. if (GM_getValue("autoRun", 0) == 1) {
  2141. gw_start(0);
  2142. }
  2143. };
  2144. }
  2145. _ajaxSubmit.apply(this, arguments);
  2146. };
  2147. }
  2148.  
  2149.  
  2150. gw_start(0);
  2151. report();
  2152. autoclearCache();
  2153. })();