van.mz.playerAdvanced

Player display optimization 球员着色插件

当前为 2019-07-17 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name van.mz.playerAdvanced
  3. // @namespace van
  4. // @version 3.33
  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.jsdelivr.net/pako/1.0.5/pako.min.js
  16. // @require https://cdn.jsdelivr.net/gh/vanjoge/MZExtension/Scripts/base64js.min.js
  17. // ==/UserScript==
  18.  
  19.  
  20. var gm_mzlanguage = {
  21. zh: {
  22. Name: "中文",
  23. Save: "保存",
  24. Setting: "设置",
  25. Test: "测试",
  26. SettingTitle: "点击可对语言和XML导出进行设置",
  27. Language: "语言",
  28. XmlMode: "战术导出模式",
  29. XmlMode1: "顺序选择球员",
  30. XmlMode2: "根据位置选择球员(需提交数据到后台)",
  31. TacConf: "位置系数设置",
  32. AutoRun: "自动着色",
  33. AutoRun0: "仅打开页面时自动执行一次",
  34. AutoRun1: "随系统刷新自动着色(如果浏览器变卡请关闭此选项)",
  35.  
  36.  
  37. NotSureEx: "挂牌后属性可能有变动,不确定转会市场显示是否是真实属性,请自行甄别。<br/>属性变动时间",
  38. NotSure: "属性不确定",
  39. ManualColorTitle: "点击可手动着色 快捷键:ALT + A",
  40. ManualColor: "手动着色",
  41. Jijing: "比赛集锦",
  42. dongzuo: "球员动作",
  43. Copyxml1: "复制主队战术",
  44. Copyxml2: "复制客队战术",
  45. CopyXmlMsg: "战术已复制到剪切板",
  46. CopyXmlMsgError: "战术复制失败",
  47. BA_NORMAL: "BA_NORMAL",
  48. BA_WALL: "站人墙",
  49. BA_HOLD: "抱着球",
  50. BA_DOWN: "倒地",
  51. BA_HOLD_THROWIN: "界外球准备",
  52. BA_THROWIN: "界外球",
  53. BA_LEFT_FOOT_SHOT_FWD: "射门/长传(L)",
  54. BA_LEFT_FOOT_SHOT_BACK: "BA_LEFT_FOOT_SHOT_BACK",
  55. BA_LEFT_FOOT_SHOT_RIGHT: "BA_LEFT_FOOT_SHOT_RIGHT",
  56. BA_LEFT_FOOT_SHOT_LEFT: "BA_LEFT_FOOT_SHOT_LEFT",
  57. BA_RIGHT_FOOT_SHOT_FWD: "射门/长传(R)",
  58. BA_RIGHT_FOOT_SHOT_BACK: "BA_RIGHT_FOOT_SHOT_BACK",
  59. BA_RIGHT_FOOT_SHOT_RIGHT: "BA_RIGHT_FOOT_SHOT_RIGHT",
  60. BA_RIGHT_FOOT_SHOT_LEFT: "BA_RIGHT_FOOT_SHOT_LEFT",
  61. BA_LEFT_FOOT_PASS_FWD: "短传(L)",
  62. BA_LEFT_FOOT_PASS_BACK: "BA_LEFT_FOOT_PASS_BACK",
  63. BA_LEFT_FOOT_PASS_RIGHT: "BA_LEFT_FOOT_PASS_RIGHT",
  64. BA_LEFT_FOOT_PASS_LEFT: "BA_LEFT_FOOT_PASS_LEFT",
  65. BA_RIGHT_FOOT_PASS_FWD: "短传(R)",
  66. BA_RIGHT_FOOT_PASS_BACK: "BA_RIGHT_FOOT_PASS_BACK",
  67. BA_RIGHT_FOOT_PASS_RIGHT: "BA_RIGHT_FOOT_PASS_RIGHT",
  68. BA_RIGHT_FOOT_PASS_LEFT: "BA_RIGHT_FOOT_PASS_LEFT",
  69. BA_PICK_UP_BALL: "捡起球",
  70. BA_DROP_BALL: "放下球",
  71. BA_HEADER: "争顶",
  72. BA_TRIP: "丢失球权",
  73. BA_CELEBRATE: "庆祝进球",
  74. BA_GK_READY: "准备扑救",
  75. BA_GK_ACRO_LEFT: "ACRO(L)",
  76. BA_GK_ACRO_LEFT_HOLD: "ACRO_HOLD(L)",
  77. BA_GK_ACRO_RIGHT: "ACRO(R)",
  78. BA_GK_ACRO_RIGHT_HOLD: "ACRO_HOLD(R)",
  79. BA_GK_SIDESTEP_LEFT: "移动(L)",
  80. BA_GK_SIDESTEP_RIGHT: "移动(R)",
  81. BA_GK_KICK: "BA_GK_KICK",
  82. BA_GK_THROW_BALL: "BA_GK_THROW_BALL",
  83. BA_GK_STRETCH_LEFT: "BA_GK_STRETCH_LEFT",
  84. BA_GK_STRETCH_LEFT_HOLD: "BA_GK_STRETCH_LEFT_HOLD",
  85. BA_GK_STRETCH_RIGHT: "BA_GK_STRETCH_RIGHT",
  86. BA_GK_STRETCH_RIGHT_HOLD: "BA_GK_STRETCH_RIGHT_HOLD",
  87. BA_BALL_OWNER: "控球",
  88. BA_TACKLE: "上抢",
  89. BA_SLIDING_TACKLE: "BA_SLIDING_TACKLE",
  90. BA_SLIDING_TACKLE_STAND: "BA_SLIDING_TACKLE_STAND",
  91. BA_MAX: "BA_MAX",
  92. BA_MY_1001: "头球攻门(L)",
  93. BA_MY_1002: "头球攻门(R)",
  94. BA_MY_1003: "卸下球",
  95. BA_MY_1011: "上抢(成功)",
  96. BA_MY_1012: "上抢(失败)",
  97. Unknown: "未知"
  98.  
  99.  
  100. ,
  101. training_pos: "无教练",
  102. training_camp: "进营",
  103. training_coach: "有教练",
  104. training_ycc: "调整",
  105. training_itc: "强化",
  106. training_neg: "掉球",
  107. training_unit: "格",
  108. training_unknown: "未知训练类型",
  109. training_ball_day: "离下一次涨球训练天数",
  110. training_part: "分段训练效率",
  111. training_total: "进度",
  112. training_avg: "平均",
  113. training_now: "当前训练进度",
  114. SkillsAnalysisTitle: "点击可手动着色和分析训练效率 快捷键:ALT + S",
  115. SkillsAnalysis: "训练效率分析"
  116.  
  117.  
  118. ,
  119.  
  120. sug_T0: "首选:",
  121. sug_T1: "次选:",
  122. sug_T2: "可尝试:",
  123. sug_T3: "默认:",
  124.  
  125. Pos9: "后卫",
  126. Pos7: "门将",
  127. Pos10: "边锋",
  128. Pos5: "前锋",
  129. Pos4: "中场",
  130. Pos56: "中锋",
  131.  
  132. sug_Loser: "关键属性容易早死,尽早交换或开除。",
  133.  
  134. sug_PRI: "训练顺序:",
  135. attrName1: "速度",
  136. attrName2: "耐力",
  137. attrName3: "意识",
  138. attrName4: "传球",
  139. attrName5: "射门",
  140. attrName6: "头球",
  141. attrName7: "守门",
  142. attrName8: "控球",
  143. attrName9: "抢断",
  144. attrName10: "传中",
  145. attrName11: "定位"
  146.  
  147. ,
  148. scoutReport: "球探报告"
  149.  
  150. }
  151. ,
  152.  
  153. en: {
  154. Name: "English",
  155. Save: "Save",
  156. Setting: "Setting",
  157. Test: "Test",
  158. SettingTitle: "Click setting language",
  159. Language: "Language",
  160. XmlMode: "Tactical Export Model",
  161. XmlMode1: "Sequential selection",
  162. XmlMode2: "Choose by location(need submit data to server)",
  163. TacConf: "Tactical Coefficient Setting",
  164. AutoRun: "Auto Colorable",
  165. AutoRun0: "By page loaded(Once)",
  166. AutoRun1: "By MZ Refresh",
  167.  
  168. NotSureEx: "Skills may change after entering the transfer market.<br/>Change time ",
  169. NotSure: "Uncertain skill",
  170. ManualColorTitle: "Click the Colorable Skill. Shortcut key : ALT + A",
  171. ManualColor: "Colorable Skill",
  172. Jijing: "Events",
  173. dongzuo: "PlayerStatus",
  174. Copyxml1: "CopyXML(home)",
  175. Copyxml2: "CopyXML(away)",
  176. CopyXmlMsg: "The tactic was copied to the Clipboard!",
  177. CopyXmlMsgError: "Copy error!",
  178. BA_NORMAL: "Normal",
  179. BA_WALL: "Wall",
  180. BA_HOLD: "Hold",
  181. BA_DOWN: "Down",
  182. BA_HOLD_THROWIN: "HoldThrowin",
  183. BA_THROWIN: "Throwin",
  184. BA_LEFT_FOOT_SHOT_FWD: "FootShot(L)",
  185. BA_LEFT_FOOT_SHOT_BACK: "FootShotBack(L)",
  186. BA_LEFT_FOOT_SHOT_RIGHT: "FootShotRight(L)",
  187. BA_LEFT_FOOT_SHOT_LEFT: "FootShotLeft(L)",
  188. BA_RIGHT_FOOT_SHOT_FWD: "FootShot(R)",
  189. BA_RIGHT_FOOT_SHOT_BACK: "FootShotBack(R)",
  190. BA_RIGHT_FOOT_SHOT_RIGHT: "FootShotRight(R)",
  191. BA_RIGHT_FOOT_SHOT_LEFT: "FootShotLeft(R)",
  192. BA_LEFT_FOOT_PASS_FWD: "FootPass(L)",
  193. BA_LEFT_FOOT_PASS_BACK: "FootPassBack(L)",
  194. BA_LEFT_FOOT_PASS_RIGHT: "FootPassRight(L)",
  195. BA_LEFT_FOOT_PASS_LEFT: "FootPassLeft(L)",
  196. BA_RIGHT_FOOT_PASS_FWD: "FootPass(R)",
  197. BA_RIGHT_FOOT_PASS_BACK: "FootPassBack(R)",
  198. BA_RIGHT_FOOT_PASS_RIGHT: "FootPassRight(R)",
  199. BA_RIGHT_FOOT_PASS_LEFT: "FootPassLeft(R)",
  200. BA_PICK_UP_BALL: "PickUpBall",
  201. BA_DROP_BALL: "DropBall",
  202. BA_HEADER: "Header",
  203. BA_TRIP: "Trip",
  204. BA_CELEBRATE: "Celebrate",
  205. BA_GK_READY: "GkReady",
  206. BA_GK_ACRO_LEFT: "GkAcroLeft",
  207. BA_GK_ACRO_LEFT_HOLD: "GkAcroLeftHold",
  208. BA_GK_ACRO_RIGHT: "GkAcroRight",
  209. BA_GK_ACRO_RIGHT_HOLD: "GkAcroRightHold",
  210. BA_GK_SIDESTEP_LEFT: "GkSidestepLeft",
  211. BA_GK_SIDESTEP_RIGHT: "GkSidestepRight",
  212. BA_GK_KICK: "GkKick",
  213. BA_GK_THROW_BALL: "GkThrowBall",
  214. BA_GK_STRETCH_LEFT: "GkStretchLeft",
  215. BA_GK_STRETCH_LEFT_HOLD: "GkStretchLeftHold",
  216. BA_GK_STRETCH_RIGHT: "GkStretchRight",
  217. BA_GK_STRETCH_RIGHT_HOLD: "GkStretchRightHold",
  218. BA_BALL_OWNER: "BallOwner",
  219. BA_TACKLE: "Tackle",
  220. BA_SLIDING_TACKLE: "SlidingTackle",
  221. BA_SLIDING_TACKLE_STAND: "SlidingTackleStand",
  222. BA_MAX: "Max",
  223. BA_MY_1001: "HeadGoal(L)",
  224. BA_MY_1002: "HeadGoal(R)",
  225. BA_MY_1003: "StopTheBall",
  226. BA_MY_1011: "Tackle(Success)",
  227. BA_MY_1012: "Tackle(Fail)",
  228. Unknown: "Unknown"
  229.  
  230.  
  231.  
  232. ,
  233. training_pos: "No coach",
  234. training_camp: "CAMP",
  235. training_coach: "Coach",
  236. training_ycc: "Ycc",
  237. training_itc: "Itc",
  238. training_neg: "Neg",
  239. training_unit: "↑",
  240. training_unknown: "Unknown training",
  241. training_ball_day: "Next ball days",
  242. training_part: "Training efficiency",
  243. training_total: "Total",
  244. training_avg: "Avg",
  245. training_now: "Now",
  246. SkillsAnalysisTitle: "Colorable Skill and Analysis of Training Efficiency Shortcut key :ALT + S",
  247. SkillsAnalysis: "Colorable By Graphs"
  248.  
  249.  
  250.  
  251. ,
  252. sug_T0: "First plan:",
  253. sug_T1: "Second plan:",
  254. sug_T2: "May try:",
  255. sug_T3: "Default:",
  256.  
  257. Pos9: "CB",
  258. Pos7: "GK",
  259. Pos10: "WF",
  260. Pos5: "ST",
  261. Pos4: "MF",
  262. Pos56: "CF",
  263.  
  264. sug_Loser: "Key skills too low.Exchange or dismiss as soon as possible.",
  265.  
  266. sug_PRI: "Training order:",
  267. attrName1: "Speed",
  268. attrName2: "Stamina",
  269. attrName3: "Play Intelligence",
  270. attrName4: "Passing",
  271. attrName5: "Shooting",
  272. attrName6: "Heading",
  273. attrName7: "Keeping",
  274. attrName8: "Ball Control",
  275. attrName9: "Tackling",
  276. attrName10: "Aerial Passing",
  277. attrName11: "Set Plays"
  278. ,
  279. scoutReport: "Scout Report"
  280. }
  281.  
  282. ,
  283. es: {
  284. Name: "Español",
  285. Save: "Guardar",
  286. Setting: "Ajustes",
  287. Test: "Test",
  288. SettingTitle: "Haga clic en configuración Idioma",
  289. Language: "Idioma",
  290.  
  291. XmlMode: "Tactical Export Model",
  292. XmlMode1: "Secuencia de selección",
  293. XmlMode2: "Elegir por locación (necesita suministrar datos al servidor)",
  294. TacConf: "Tactical Coefficient Setting",
  295. AutoRun: "Auto Coloreable",
  296. AutoRun0: "Por página cargada (sólo una vez)",
  297. AutoRun1: "Por recargar MZ",
  298.  
  299. NotSureEx: "Las skills pueden cambiar después de ingresar al mercado. <br/> Cambiar hora ",
  300. NotSure: "Skill incierta",
  301. ManualColorTitle: "Haga clic en la skill para colorear. Acceso directo: ALT + A",
  302. ManualColor: "Color de la skill",
  303. Jijing: "Eventos",
  304. dongzuo: "PlayerStatus",
  305. Copyxml1: "CopiarXML(local)",
  306. Copyxml2: "CopiarXML(visitante)",
  307. CopyXmlMsg: "La táctica fue copiada al portapapeles",
  308. CopyXmlMsgError: "¡Error al copiar!",
  309. BA_NORMAL: "Normal",
  310. BA_WALL: "Wall",
  311. BA_HOLD: "Hold",
  312. BA_DOWN: "Down",
  313. BA_HOLD_THROWIN: "HoldThrowin",
  314. BA_THROWIN: "Throwin",
  315. BA_LEFT_FOOT_SHOT_FWD: "FootShot(L)",
  316. BA_LEFT_FOOT_SHOT_BACK: "FootShotBack(L)",
  317. BA_LEFT_FOOT_SHOT_RIGHT: "FootShotRight(L)",
  318. BA_LEFT_FOOT_SHOT_LEFT: "FootShotLeft(L)",
  319. BA_RIGHT_FOOT_SHOT_FWD: "FootShot(R)",
  320. BA_RIGHT_FOOT_SHOT_BACK: "FootShotBack(R)",
  321. BA_RIGHT_FOOT_SHOT_RIGHT: "FootShotRight(R)",
  322. BA_RIGHT_FOOT_SHOT_LEFT: "FootShotLeft(R)",
  323. BA_LEFT_FOOT_PASS_FWD: "FootPass(L)",
  324. BA_LEFT_FOOT_PASS_BACK: "FootPassBack(L)",
  325. BA_LEFT_FOOT_PASS_RIGHT: "FootPassRight(L)",
  326. BA_LEFT_FOOT_PASS_LEFT: "FootPassLeft(L)",
  327. BA_RIGHT_FOOT_PASS_FWD: "FootPass(R)",
  328. BA_RIGHT_FOOT_PASS_BACK: "FootPassBack(R)",
  329. BA_RIGHT_FOOT_PASS_RIGHT: "FootPassRight(R)",
  330. BA_RIGHT_FOOT_PASS_LEFT: "FootPassLeft(R)",
  331. BA_PICK_UP_BALL: "Toma la pelota",
  332. BA_DROP_BALL: "Tira la pelota al césped",
  333. BA_HEADER: "Cabezazo",
  334. BA_TRIP: "Trip",
  335. BA_CELEBRATE: "Celebración",
  336. BA_GK_READY: "Arquero preparado",
  337. BA_GK_ACRO_LEFT: "GkAcroLeft",
  338. BA_GK_ACRO_LEFT_HOLD: "GkAcroLeftHold",
  339. BA_GK_ACRO_RIGHT: "GkAcroRight",
  340. BA_GK_ACRO_RIGHT_HOLD: "GkAcroRightHold",
  341. BA_GK_SIDESTEP_LEFT: "Arquero da un paso a la izquierda",
  342. BA_GK_SIDESTEP_RIGHT: "Arquero da un paso a la derecha",
  343. BA_GK_KICK: "Arquero da una patada",
  344. BA_GK_THROW_BALL: "GkThrowBall",
  345. BA_GK_STRETCH_LEFT: "GkStretchLeft",
  346. BA_GK_STRETCH_LEFT_HOLD: "GkStretchLeftHold",
  347. BA_GK_STRETCH_RIGHT: "GkStretchRight",
  348. BA_GK_STRETCH_RIGHT_HOLD: "GkStretchRightHold",
  349. BA_BALL_OWNER: "Con la pelota en los pies",
  350. BA_TACKLE: "Entrada",
  351. BA_SLIDING_TACKLE: "Barrida",
  352. BA_SLIDING_TACKLE_STAND: "SlidingTackleStand",
  353. BA_MAX: "Max",
  354. BA_MY_1001: "HeadGoal(L)",
  355. BA_MY_1002: "HeadGoal(R)",
  356. BA_MY_1003: "Frena la pelota",
  357. BA_MY_1011: "Entrada(acertada)",
  358. BA_MY_1012: "Entrada(fallida)",
  359. Unknown: "Desconocido"
  360.  
  361.  
  362. ,
  363. training_pos: "Sin entrenador",
  364. training_camp: "CAMP",
  365. training_coach: "Coach",
  366. training_ycc: "YCC",
  367. training_itc: "ITC",
  368. training_neg: "Neg",
  369. training_unit: "↑",
  370. training_unknown: "Entrenamiento desconocido",
  371. training_ball_day: "Días para ganar una pelotita",
  372. training_part: "Eficacia de entrenamiento",
  373. training_total: "Total",
  374. training_avg: "Avg",
  375. training_now: "Ahora",
  376. SkillsAnalysisTitle: "Skills y análisis de eficacia de entrenamiento coloreables al presionar: ALT + S",
  377. SkillsAnalysis: "Coloreable por gráficos"
  378.  
  379.  
  380. ,
  381. sug_T0: "Primera opción:",
  382. sug_T1: "Segunda opción:",
  383. sug_T2: "Podrías intentar:",
  384. sug_T3: "Predeterminado:",
  385.  
  386. Pos9: "Centro defensor",
  387. Pos7: "Arquero",
  388. Pos10: "Delantero lateral",
  389. Pos5: "Segundo delantero",
  390. Pos4: "Centrocampista",
  391. Pos56: "Miediocampista/Anchor",
  392.  
  393. sug_Loser: "Habilidades clave demasiado bajas. Intercambialo lo más antes posible.",
  394.  
  395. sug_PRI: "Orden de entrenamiento:",
  396. attrName1: "Velocidad",
  397. attrName2: "Resistencia",
  398. attrName3: "Inteligencia",
  399. attrName4: "Pases",
  400. attrName5: "Remates",
  401. attrName6: "Cabezazos",
  402. attrName7: "Atajando",
  403. attrName8: "Control de balón",
  404. attrName9: "Entradas",
  405. attrName10: "Pases Largos",
  406. attrName11: "Balón Parado"
  407. ,
  408. scoutReport: "REPORTE DE SCOUTEO"
  409. }
  410. ,
  411. br: {
  412. Name: "Português",
  413. Save: "Salvar",
  414. Setting: "Configurações",
  415. Test: "Teste",
  416. SettingTitle: "Clique para configurar linguagem",
  417. Language: "Linguagem",
  418. XmlMode: "Exportar Modelo Tático",
  419. XmlMode1: "Seleção Sequencial",
  420. XmlMode2: "Escolha localização (precisa submeter dados ao servidor)",
  421. TacConf: "Configuração de Coeficiente Tático",
  422. AutoRun: "Auto Colorir",
  423. AutoRun0: "Por página carregada(Uma vez)",
  424. AutoRun1: "Recarregada do MZ",
  425.  
  426. NotSureEx: "Habilidades podem mudar depois de entrar no mercado de transferências.<br/>Hora da mudança ",
  427. NotSure: "Habilidade incerta",
  428. ManualColorTitle: "Clique na habilidade colorida. Tecla de atalho: ALT + A",
  429. ManualColor: "Habilidade colorida",
  430. Jijing: "Eventos",
  431. dongzuo: "Status do jogador",
  432. Copyxml1: "Copiar XML(mandante)",
  433. Copyxml2: "Copiar XML(visitante)",
  434. CopyXmlMsg: "A tática foi copiada para a área de transferências!",
  435. CopyXmlMsgError: "Erro na cópia!",
  436. BA_NORMAL: "Normal",
  437. BA_WALL: "Wall",
  438. BA_HOLD: "Hold",
  439. BA_DOWN: "Down",
  440. BA_HOLD_THROWIN: "HoldThrowin",
  441. BA_THROWIN: "Throwin",
  442. BA_LEFT_FOOT_SHOT_FWD: "FootShot(L)",
  443. BA_LEFT_FOOT_SHOT_BACK: "FootShotBack(L)",
  444. BA_LEFT_FOOT_SHOT_RIGHT: "FootShotRight(L)",
  445. BA_LEFT_FOOT_SHOT_LEFT: "FootShotLeft(L)",
  446. BA_RIGHT_FOOT_SHOT_FWD: "FootShot(R)",
  447. BA_RIGHT_FOOT_SHOT_BACK: "FootShotBack(R)",
  448. BA_RIGHT_FOOT_SHOT_RIGHT: "FootShotRight(R)",
  449. BA_RIGHT_FOOT_SHOT_LEFT: "FootShotLeft(R)",
  450. BA_LEFT_FOOT_PASS_FWD: "FootPass(L)",
  451. BA_LEFT_FOOT_PASS_BACK: "FootPassBack(L)",
  452. BA_LEFT_FOOT_PASS_RIGHT: "FootPassRight(L)",
  453. BA_LEFT_FOOT_PASS_LEFT: "FootPassLeft(L)",
  454. BA_RIGHT_FOOT_PASS_FWD: "FootPass(R)",
  455. BA_RIGHT_FOOT_PASS_BACK: "FootPassBack(R)",
  456. BA_RIGHT_FOOT_PASS_RIGHT: "FootPassRight(R)",
  457. BA_RIGHT_FOOT_PASS_LEFT: "FootPassLeft(R)",
  458. BA_PICK_UP_BALL: "Pega a bola",
  459. BA_DROP_BALL: "Deixa a bola",
  460. BA_HEADER: "Cabeceio",
  461. BA_TRIP: "Trip",
  462. BA_CELEBRATE: "Celebração",
  463. BA_GK_READY: "Goleiro pronto",
  464. BA_GK_ACRO_LEFT: "GkAcroLeft",
  465. BA_GK_ACRO_LEFT_HOLD: "GkAcroLeftHold",
  466. BA_GK_ACRO_RIGHT: "GkAcroRight",
  467. BA_GK_ACRO_RIGHT_HOLD: "GkAcroRightHold",
  468. BA_GK_SIDESTEP_LEFT: "Goleiro dá passo à esquerda",
  469. BA_GK_SIDESTEP_RIGHT: "Goleiro dá passo à direita",
  470. BA_GK_KICK: "Goleiro chuta",
  471. BA_GK_THROW_BALL: "GkThrowBall",
  472. BA_GK_STRETCH_LEFT: "GkStretchLeft",
  473. BA_GK_STRETCH_LEFT_HOLD: "GkStretchLeftHold",
  474. BA_GK_STRETCH_RIGHT: "GkStretchRight",
  475. BA_GK_STRETCH_RIGHT_HOLD: "GkStretchRightHold",
  476. BA_BALL_OWNER: "Com a bola nos pés",
  477. BA_TACKLE: "Desarme",
  478. BA_SLIDING_TACKLE: "Carrinho",
  479. BA_SLIDING_TACKLE_STAND: "SlidingTackleStand",
  480. BA_MAX: "Max",
  481. BA_MY_1001: "HeadGoal(L)",
  482. BA_MY_1002: "HeadGoal(R)",
  483. BA_MY_1003: "Pára a bola",
  484. BA_MY_1011: "Desarme(Sucesso)",
  485. BA_MY_1012: "Desarme(Falha)",
  486. Unknown: "Desconhecido"
  487.  
  488.  
  489.  
  490. ,
  491. training_pos: "Sem treinador",
  492. training_camp: "CAMP",
  493. training_coach: "Coach",
  494. training_ycc: "Ycc",
  495. training_itc: "Itc",
  496. training_neg: "Neg",
  497. training_unit: "↑",
  498. training_unknown: "Treinamento desconhecido",
  499. training_ball_day: "Dias para ganhar bola",
  500. training_part: "Eficiência de treinamento",
  501. training_total: "Total",
  502. training_avg: "Avg",
  503. training_now: "Agora",
  504. SkillsAnalysisTitle: "Tecla de atalho de Habilidades coloridas e Análise de Eficiência de treinamento: ALT + S",
  505. SkillsAnalysis: "Colorir por gráficos"
  506.  
  507.  
  508.  
  509. ,
  510. sug_T0: "Primeira opção:",
  511. sug_T1: "Segunda opção:",
  512. sug_T2: "Pode tentar:",
  513. sug_T3: "Padrão:",
  514.  
  515. Pos9: "Zagueiro central",
  516. Pos7: "Goleiro",
  517. Pos10: "Ponta",
  518. Pos5: "Segundo atacante",
  519. Pos4: "Meia Central",
  520. Pos56: "Meio-campo/Volante",
  521.  
  522. sug_Loser: "Habilidades principais muito baixas. Troque ou dispense o mais breve possível.",
  523.  
  524. sug_PRI: "Ordem de treinamento:",
  525. attrName1: "Velocidade",
  526. attrName2: "Resistência",
  527. attrName3: "Inteligência",
  528. attrName4: "Passe Curto",
  529. attrName5: "Chute",
  530. attrName6: "Cabeceio",
  531. attrName7: "Defesa a Gol",
  532. attrName8: "Controle de Bola",
  533. attrName9: "Desarme",
  534. attrName10: "Passe Longo",
  535. attrName11: "Bola Parada"
  536. ,
  537. scoutReport: "Relatório de Observador"
  538. }
  539. };
  540. var now_language = gm_mzlanguage.en;
  541. 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" } };
  542. var OKeys = ["9", "7", "10", "5", "4", "5,6"];
  543. function CTable() {
  544. //key value
  545. this.data = {};
  546. //keys
  547. this.keys = new Array();
  548. this.addData = function (key, value) {
  549. if (this.data[key] == undefined) {
  550. this.keys.push(key);
  551. this.keys.sort(function (a, b) {
  552. return a - b;
  553. });
  554. }
  555. this.data[key] = value;
  556. };
  557. this.getVal = function (i) {
  558. if (this.data[i] == undefined) {
  559. //
  560. } else {
  561. return this.data[i];
  562. }
  563. };
  564. this.GetX = function (i) {
  565. let rv = this.getVal(i);
  566. rv = Math.floor(rv * 214 / 1000) - 3;
  567. return rv;
  568. };
  569. this.GetY = function (i) {
  570. let rv = this.getVal(i);
  571. rv = Math.floor(rv * 328 / 1000) - 1;
  572. return rv;
  573. };
  574. }
  575.  
  576. function mzcamp() {
  577. this.data = {};
  578. this.name = null;
  579. this.keys = new Array();
  580. this.index = 0;
  581. this.add = function (begin, end) {
  582. if (end > begin + 2937600000) {
  583. end = begin + 2937600000;
  584. }
  585. if (this.data[begin] == undefined) {
  586. this.keys.push(begin);
  587. this.keys.sort(function (a, b) {
  588. return a - b;
  589. });
  590. }
  591. this.data[begin] = {
  592. begin: begin,
  593. end: end
  594. };
  595. };
  596. this.getItem = function (begin) {
  597. return this.data[begin];
  598. };
  599. this.resetIndex = function () {
  600. this.index = 0;
  601. };
  602. this.inYTC = function (x) {
  603. while (this.index < this.keys.length) {
  604. let item = this.data[this.keys[this.index]];
  605. if (x < item.begin) {
  606. return false;
  607. } else if (x <= item.end) {
  608. if (/\d/.test(item.name)) {
  609. return false;
  610. }
  611. return true;
  612. }
  613. if (x > item.end) {
  614. this.index++;
  615. }
  616. }
  617. return false;
  618. };
  619. };
  620. function playerTrainingBySkill() {
  621. //涨球时间
  622. this.ballDay = 0;
  623. //训练统计
  624. this.stat = new trainingStat();
  625. //当前球数
  626. this.skill = 0;
  627. }
  628. function trainingStat() {
  629. //所有 不包含掉球
  630. this.all = new trainingDay();
  631. ////普通训练 无教练
  632. //this.pos = new trainingDay();
  633. ////强化营
  634. //this.itc = new trainingDay();
  635. ////调整营
  636. //this.ycc = new trainingDay();
  637. ////掉球
  638. //this.neg = new trainingDay();
  639. ////理疗
  640. //this.physio = new trainingDay();
  641. ////有教练
  642. //this.coach = new trainingDay();
  643. ////训练营
  644. //this.camp = new trainingDay();
  645. //对某类型加1
  646. this.add = function (type, tn) {
  647. if (!this[type]) {
  648. this[type] = new trainingDay();
  649. }
  650. this[type][tn] += 1;
  651. };
  652. this.getSum = function (canOver100) {
  653. let ret = 0;
  654. if (this.neg) {
  655. ret = this.all.getSum() - this.neg.getSum();
  656. } else {
  657. ret = this.all.getSum();
  658. }
  659. if (!canOver100) {
  660. if (ret >= 100) {
  661. ret = 99.99;
  662. }
  663. }
  664. return ret;
  665. };
  666. this.getAvg = function () {
  667. //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);
  668. //ret = parseFloat(ret).toFixed(1);
  669. //return ret;
  670.  
  671. return this.all.getAvg();
  672. };
  673. this.getTnText = function () {
  674. let str = "";
  675. if (this.pos) {
  676. str += " " + now_language.training_pos + this.pos.getTnText();
  677. }
  678. if (this.camp) {
  679. str += " " + now_language.training_camp + this.camp.getTnText();
  680. }
  681. if (this.coach) {
  682. str += " " + now_language.training_coach + this.coach.getTnText();
  683. }
  684. if (this.ycc) {
  685. str += " " + now_language.training_ycc + this.ycc.getTnText();
  686. }
  687. if (this.itc) {
  688. str += " " + now_language.training_itc + this.itc.getTnText();
  689. }
  690. if (this.neg) {
  691. str += " " + now_language.training_neg + this.neg.getTnText();
  692. }
  693. return str;
  694. };
  695. //this.getAvgAndText = function () {
  696. // //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);
  697. // //ret = parseFloat(ret).toFixed(1);
  698. // //return ret;
  699.  
  700. // let ret = this.getAvg();
  701. // let str = "";
  702. // if (ret <= 0.4) {
  703. // str = "1格";
  704. // }
  705. // else if (ret > 0.4 && ret <= 1.1) {
  706. // str = "2格";
  707. // }
  708. // else if (ret > 0.4 && ret <= 2.1) {
  709. // str = "2格";
  710. // }
  711.  
  712.  
  713.  
  714. // this.t1 * 0.4 * 1
  715. // + this.t2 * 0.55 * 2
  716. // + this.t3 * 0.7 * 3
  717. // + this.t4 * 0.85 * 4
  718. // + this.t5 * 1 * 5
  719. // + this.t6 * 1.15 * 6
  720. // + this.t7 * 1.3 * 7
  721. // + this.t8 * 1.45 * 8
  722. // + this.t9 * 1.6 * 9
  723. // + this.t10 * 1.75 * 10;
  724. //};
  725. this.getDayByAvg = function (avg) {
  726. let ret = (100 - this.getSum()) / avg;
  727. ret = parseFloat(ret).toFixed(1);
  728. return ret;
  729. };
  730. this.getDay = function () {
  731. if (this.coach) {
  732. return this.getDayByAvg(this.coach);
  733. } else if (this.pos) {
  734. return this.getDayByAvg(this.pos);
  735. }
  736. return undefined;
  737. };
  738. }
  739. function trainingDay() {
  740. this.t1 = 0;
  741. this.t2 = 0;
  742. this.t3 = 0;
  743. this.t4 = 0;
  744. this.t5 = 0;
  745. this.t6 = 0;
  746. this.t7 = 0;
  747. this.t8 = 0;
  748. this.t9 = 0;
  749. this.t10 = 0;
  750. this.getSum = function () {
  751. 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;
  752. ret = parseFloat(ret).toFixed(1);
  753. return ret;
  754. };
  755. this.getAvg = function () {
  756. 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);
  757. ret = parseFloat(ret).toFixed(1);
  758. return ret;
  759. };
  760. this.getTnText = function () {
  761. let str = "";
  762. if (this.t1 > 0) {
  763. str += " 1" + now_language.training_unit + "(" + this.t1 + ")";
  764. }
  765. if (this.t2 > 0) {
  766. str += " 2" + now_language.training_unit + "(" + this.t2 + ")";
  767. }
  768. if (this.t3 > 0) {
  769. str += " 3" + now_language.training_unit + "(" + this.t3 + ")";
  770. }
  771. if (this.t4 > 0) {
  772. str += " 4" + now_language.training_unit + "(" + this.t4 + ")";
  773. }
  774. if (this.t5 > 0) {
  775. str += " 5" + now_language.training_unit + "(" + this.t5 + ")";
  776. }
  777. if (this.t6 > 0) {
  778. str += " 6" + now_language.training_unit + "(" + this.t6 + ")";
  779. }
  780. if (this.t7 > 0) {
  781. str += " 7" + now_language.training_unit + "(" + this.t7 + ")";
  782. }
  783. if (this.t8 > 0) {
  784. str += " 8" + now_language.training_unit + "(" + this.t8 + ")";
  785. }
  786. if (this.t9 > 0) {
  787. str += " 9" + now_language.training_unit + "(" + this.t9 + ")";
  788. }
  789. if (this.t10 > 0) {
  790. str += " 10" + now_language.training_unit + "(" + this.t10 + ")";
  791. }
  792. return str;
  793. };
  794. }
  795. var mzreg = {
  796. img_val: /(\d+)\.gif/,
  797. playerMax: /trainingField.players\s*=\s*({.+})/,
  798. playerId: /player_id_(\d+)/,
  799. bar_itc: /bar_itc_(\d+)/,
  800. bar_ycc: /bar_ycc_(\d+)/,
  801. bar_pos: /bar_pos_(\d+)/,
  802. bar_neg: /bar_neg_(\d+)/,
  803. trainingType: /&t=([^)]+)/,
  804. data2d_url: /matchviewer\/media/,
  805. shortlist_url: /\/?p=shortlist/,
  806. ruok_url: /\/?p=team&tid=572357/
  807. //data2d_url: /matchviewer\/getMatchFiles.php\?type=data&mid=\d+/
  808. };
  809. var mzImg = {
  810. g: "data:image/gif;base64,R0lGODlhDAAKAJEDAP///8zM/wAA/////yH5BAEAAAMALAAAAAAMAAoAAAIk3CIpYZ0BABJtxvjMgojTIVwKpl0dCQbQJX3T+jpLNDXGlDUFADs=",
  811. r: "data:image/gif;base64,R0lGODlhDAAKAJEDAP////8AAMyZmf///yH5BAEAAAMALAAAAAAMAAoAAAIk3BQZYp0CAAptxvjMgojTEVwKpl0dCQrQJX3T+jpLNDXGlDUFADs=",
  812. b: "data:image/gif;base64,R0lGODlhDAAKAJEDAP///5mZmQAAAP///yH5BAEAAAMALAAAAAAMAAoAAAIk3CIpYZ0BABJtxvjMgojTIVwKpl0dCQbQJX3T+jpLNDXGlDUFADs=",
  813. p: "data:image/gif;base64,R0lGODlhDAAKAJEDAP///5lm/5kzzP///yH5BAEAAAMALAAAAAAMAAoAAAIk3CIpYZ0BABJtxvjMgojTIVwKpl0dCQbQJX3T+jpLNDXGlDUFADs=",
  814. x: "data:image/gif;base64,R0lGODlhBgAKAJEDAJnMZpmZmQAAAP///yH5BAEAAAMALAAAAAAGAAoAAAIRXCRhApAMgoPtVXXS2Lz73xUAOw=="
  815. };
  816. var pmax = {};
  817. var isAjaxing = false;
  818. var trainingInfo = {};
  819. function clearCache(maxcount) {
  820. let lists = GM_listValues();
  821. let max = lists.length;
  822. if (maxcount) {
  823. max = maxcount;
  824. } else if (lists.length > 100) {
  825. max = 100;
  826. }
  827. for (let i = 0; i < lists.length; i++) {
  828. let ts;
  829. if (lists[i].startsWith("Dt_")) {
  830. ts = GM_getValue(lists[i], -1);
  831. let key = lists[i].substring(3);
  832. if (ts != -1) {
  833. let dt = new Date(ts);
  834. let now = new Date();
  835. if (now.getUTCFullYear() == dt.getUTCFullYear() && now.getUTCMonth() == dt.getUTCMonth() && now.getUTCDate() == dt.getUTCDate()) {
  836. continue;
  837. }
  838. GM_deleteValue(lists[i]);
  839. GM_deleteValue(key);
  840. max--;
  841. if (max <= 0) {
  842. break;
  843. }
  844. }
  845. }
  846. }
  847. }
  848. function autoclearCache() {
  849. let ts = GM_getValue("last_autoclear", 0);
  850. let dt = new Date(ts);
  851. let now = new Date();
  852.  
  853. if (now.getUTCFullYear() == dt.getUTCFullYear() && now.getUTCMonth() == dt.getUTCMonth() && (now.getUTCDate() - dt.getUTCDate()) < 3) {
  854. return false;
  855. } else {
  856. clearCache(100);
  857. GM_setValue("last_autoclear", now.getTime());
  858. return true;
  859. }
  860. }
  861.  
  862. function myAjax(url, callback, cache_mode, Cjson) {
  863. if (cache_mode == undefined) {
  864. cache_mode = 2;
  865. //0 不缓存每次都获取 1 缓存永不刷新 2 缓存每日刷新
  866. }
  867. if (cache_mode > 0) {
  868. let b64 = getLocValue(url, cache_mode);
  869. if (b64) {
  870. let tdata;
  871. if (b64.startsWith("H4sIAA")) {
  872. if (Cjson) {
  873. tdata = "9" + b64;
  874. } else {
  875. tdata = pako.ungzip(base64js.toByteArray(b64), { to: 'string' });
  876. }
  877. } else {
  878. if (Cjson) {
  879. tdata = "9" + base64js.fromByteArray(pako.gzip(b64));
  880. } else {
  881. tdata = b64;
  882. }
  883. }
  884. if (callback(tdata, true)) {
  885. clearCacheItem(url);
  886. }
  887. return;
  888. }
  889. }
  890. $.ajax({
  891. type: "GET",
  892. url: url,
  893. dataType: "html",
  894. success: function (data) {
  895. let b64 = base64js.fromByteArray(pako.gzip(data));
  896. setLocValue(url, b64);
  897. let ret = false;
  898. if (Cjson) {
  899. ret = callback("9" + b64, false);
  900. } else {
  901. ret = callback(data, false);
  902. }
  903. if (ret) {
  904. clearCacheItem(url);
  905. }
  906. isAjaxing = false;
  907. }
  908. });
  909.  
  910. }
  911. function getLocValue(key, cache_mode) {
  912. if (cache_mode == 1) {
  913. let b64 = GM_getValue(key, false);
  914. if (b64) {
  915. return b64;
  916. }
  917. return false;
  918. } else {
  919. let ts = GM_getValue("Dt_" + key, -1);
  920.  
  921. if (ts != -1) {
  922. let dt = new Date(ts);
  923. let now = new Date();
  924. //let d = now.getTime() - dt.getTime();
  925. if (now.getUTCFullYear() == dt.getUTCFullYear() && now.getUTCMonth() == dt.getUTCMonth() && now.getUTCDate() == dt.getUTCDate()) {
  926. if (now.getUTCHours() >= 1 && now.getUTCHours() <= 22) {
  927. //取缓存
  928. } else if (now.getUTCHours() != dt.getUTCHours()) {
  929. //每小时更新一次缓存
  930. return false;
  931. }
  932. } else {
  933. return false;
  934. }
  935. let b64 = GM_getValue(key, false);
  936. if (b64) {
  937. return b64;
  938. }
  939. return false;
  940.  
  941. } else {
  942. return false;
  943. }
  944. }
  945. }
  946. function setLocValue(key, val) {
  947. GM_setValue("Dt_" + key, new Date().getTime());
  948. GM_setValue(key, val);
  949. }
  950. function clearCacheItem(key) {
  951. GM_deleteValue("Dt_" + key);
  952. GM_deleteValue(key);
  953. }
  954. function getMax(callback) {
  955. myAjax(
  956. "/?p=training",
  957. function (data) {
  958. let result = data.match(mzreg.playerMax);
  959. if (result) {
  960. pmax = JSON.parse(result[1]);
  961. callback(pmax);
  962. } else {
  963. return true;
  964. }
  965.  
  966. });
  967. return false;
  968. }
  969. function setSrc(transfer, img, skill, maxed, skillBallDay, pid, k) {
  970. img.skill = skill;
  971. img.maxed = maxed;
  972. if (skill > 0) {
  973. let flag_exit = false;
  974. if (transfer && skillBallDay) {
  975. if (new Date().getTime() - skillBallDay < 345600000) {
  976.  
  977. getTrainingGraphsBySkill_id(pid, k, function (data) {
  978. let result = data.match(new RegExp('{"x":' + skillBallDay + ',"y":(\\d+),[^}]*"marker"'));
  979. if (result && result.length) {
  980. $(img).parent().parent().find("td.skillval").html("(" + result[1] + ")");
  981. setSrc(false, img, parseInt(result[1]), maxed, false, pid, k);
  982. flag_exit = true;
  983. return true;
  984. } else {
  985. return false;
  986. }
  987. });
  988. //$(img).parent().find("span").remove();
  989. //$(img).parent().append("<span class=\"help_button_placeholder\"><a class=\"help_button\" href=\"#\" onclick=\"showHelpLayer('" + now_language.NotSureEx + new Date(skillBallDay).toLocaleString() + "', '" + now_language.NotSure + "', true); return false\"><span class=\"help_button_wrapper\"><span class=\"help_button_text\">?</span></span></a></span>");
  990. }
  991. }
  992. if (flag_exit) {
  993. return;
  994. }
  995. if (pid && trainingInfo[pid][k]) {
  996. let extmp = $(img).parent().parent().find(".skill_exact2");
  997. if (extmp.length > 0) {
  998. extmp.remove();
  999. }
  1000. let sum = 0;
  1001. if (trainingInfo[pid][k][skill]) {
  1002. sum = trainingInfo[pid][k][skill].stat.getSum();
  1003. }
  1004. $(img).parent().parent().append("<td class='skill_exact2'><div><span id=" + pid + "_" + k + "_" + skill + " class='skillval skill_exact_van'>" + sum + "%</span></div></td>");
  1005. }
  1006.  
  1007. if (img.isYtc) {
  1008. $(img).parent().parent().children().eq(0).addClass("gm_ytc");
  1009. }
  1010. }
  1011. let strdiv = "<div class='skill' style='font-size:0;padding: 0 0 0 4px;'>";
  1012. for (let i = 0; i < skill; i++) {
  1013. if (maxed === "red") {
  1014. strdiv += "<img src='" + mzImg.r + "'>";
  1015. }
  1016. else if (maxed === "green") {
  1017. strdiv += "<img src='" + mzImg.g + "'>";
  1018. } else {
  1019. strdiv += "<img src='" + mzImg.b + "'>";
  1020. }
  1021. }
  1022. if (/blevel_/.test(img.src)) {
  1023. strdiv += "<img src='" + mzImg.x + "'>";
  1024. }
  1025. strdiv += "</div>";
  1026. $(img).hide();
  1027.  
  1028. $(img).parent().find("div").remove();
  1029. $(img).after(strdiv);
  1030. }
  1031. function showMax(GraphsType) {
  1032. let players = $(".playerContainer");
  1033. for (let i = 0; i < players.length; i++) {
  1034. let pdom = players.eq(i);
  1035. let pid = pdom.html().match(mzreg.playerId)[1];
  1036. let player = pmax[pid];
  1037. let imgs = pdom.find("img.skill");
  1038.  
  1039. if (GraphsType == 0 && player) {
  1040. if (isNaN(parseInt(player.skills.speed))) {
  1041. for (let j = 0; j < imgs.length; j++) {
  1042. setSrc(false, imgs[j], parseInt(imgs[j].src.match(mzreg.img_val)[1]), "");
  1043. }
  1044. } else {
  1045. setSrc(false, imgs[0], player.skills.speed, player.maxed.speed);
  1046. setSrc(false, imgs[1], player.skills.stamina, player.maxed.stamina);
  1047. setSrc(false, imgs[2], player.skills.gameintelligence, player.maxed.gameintelligence);
  1048. setSrc(false, imgs[3], player.skills.passing, player.maxed.passing);
  1049. setSrc(false, imgs[4], player.skills.shooting, player.maxed.shooting);
  1050. setSrc(false, imgs[5], player.skills.heading, player.maxed.heading);
  1051. setSrc(false, imgs[6], player.skills.goalkeeping, player.maxed.goalkeeping);
  1052. setSrc(false, imgs[7], player.skills.technique, player.maxed.technique);
  1053. setSrc(false, imgs[8], player.skills.tackling, player.maxed.tackling);
  1054. setSrc(false, imgs[9], player.skills.highpassing, player.maxed.highpassing);
  1055. setSrc(false, imgs[10], player.skills.situations, player.maxed.situations);
  1056. }
  1057. if (pdom.find(".scout_report").length > 0) {
  1058. getScoutReport(pid, pdom);
  1059. }
  1060. } else if (pdom.find(".training_graphs").length > 0 && imgs.length > 0) {
  1061. if (pdom.find(".scout_report").length > 0) {
  1062. getScoutReport(pid, pdom);
  1063. }
  1064. getTrainingGraphs(pid, pdom, GraphsType);
  1065. } else if (pdom.find(".scout_report").length > 0) {
  1066. for (let j = 0; j < imgs.length; j++) {
  1067. setSrc(false, imgs[j], parseInt(imgs[j].src.match(mzreg.img_val)[1]), "");
  1068. }
  1069. getScoutReport(pid, pdom, GraphsType == 2);
  1070. }
  1071. }
  1072. return false;
  1073. }
  1074. function drawPlayerByTrainingGraphs(pid, data, pdom) {
  1075. let imgs = pdom.find("img.skill");
  1076. var series = undefined;
  1077. eval(data);
  1078. if (series == undefined) {
  1079. return false;
  1080. }
  1081. let maxeds = ["green", "green", "green", "green", "green", "green", "green", "green", "green", "green", "green"];
  1082. let skillBallDays = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
  1083. let allSkillTraining_tmp = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
  1084. let camp = new mzcamp();
  1085. for (let i = 0; i < series.length; i++) {
  1086. if ((series[i].type == "line" && series[i].color == "rgba(255,0,0,0.7)")) {
  1087. if (series[i].data.length > 0) {
  1088. let g = series[i].data[0];
  1089. let index = g.y - 1;
  1090. if (index >= 0 && g.y <= 11) {
  1091. maxeds[index] = "red";
  1092. }
  1093. }
  1094. } else if ((series[i].type == "line" && series[i].color == "rgba(255,88,0,0.6)")) {
  1095. //训练营线
  1096. if (series[i].data && series[i].data.length == 2) {
  1097. camp.add(series[i].data[0].x, series[i].data[1].x);
  1098. }
  1099. }
  1100. else {
  1101. for (let j = 0; j < series[i].data.length; j++) {
  1102. let g = series[i].data[j];
  1103.  
  1104. if (g.y == "-3") {
  1105. let itemcamp = camp.getItem(g.x);
  1106. if (itemcamp) {
  1107. itemcamp.name = g.name;
  1108. }
  1109. }
  1110.  
  1111. let index = g.y - 1;
  1112. if (index >= 0 && g.y <= 11) {
  1113. if (g.name == "Maxed") {
  1114. maxeds[index] = "red";
  1115. }
  1116. if (g.marker && g.marker.symbol) {
  1117. if (allSkillTraining_tmp[index] == 0) {
  1118. allSkillTraining_tmp[index] = new Array();
  1119. allSkillTraining_tmp[index].push(new playerTrainingBySkill());
  1120. }
  1121. let playerTS = allSkillTraining_tmp[index][allSkillTraining_tmp[index].length - 1];
  1122. if (/training_camp/.test(g.marker.symbol)) {
  1123. //训练营 判断是否是ytc
  1124. if (camp.inYTC(g.x)) {
  1125. imgs[index].isYtc = true;
  1126. }
  1127.  
  1128. }
  1129. if (/_ball/.test(g.marker.symbol)) {
  1130. if (skillBallDays[index] < g.x) {
  1131. skillBallDays[index] = g.x;
  1132. playerTS.ballDay = g.x;
  1133. allSkillTraining_tmp[index].push(new playerTrainingBySkill());
  1134. }
  1135. }
  1136. let result = g.marker.symbol.match(mzreg.trainingType);
  1137. let type = "";
  1138. if (result && result.length > 0) {
  1139. switch (result[1]) {
  1140. case "physio":
  1141. //理疗
  1142. type = "physio";
  1143. break;
  1144. case "coach":
  1145. //有教练
  1146. type = "coach";
  1147. break;
  1148. case "training_camp":
  1149. //训练营
  1150. type = "camp";
  1151. break;
  1152. case "training_camp_ycc":
  1153. //调整营
  1154. type = "ycc";
  1155. break;
  1156. case "training_camp_itc":
  1157. //强化营
  1158. type = "itc";
  1159. break;
  1160. default:
  1161. //未知
  1162. console.log(now_language.training_unknown + ":" + result[1]);
  1163. break;
  1164. }
  1165. }
  1166. if (type == "") {
  1167. fillTrainingLevel("itc", mzreg.bar_itc, playerTS, g.marker.symbol);
  1168. fillTrainingLevel("ycc", mzreg.bar_ycc, playerTS, g.marker.symbol);
  1169. fillTrainingLevel("pos", mzreg.bar_pos, playerTS, g.marker.symbol);
  1170. fillTrainingLevel("neg", mzreg.bar_neg, playerTS, g.marker.symbol, true);
  1171. } else {
  1172. fillTrainingLevel(type, mzreg.bar_itc, playerTS, g.marker.symbol);
  1173. fillTrainingLevel(type, mzreg.bar_ycc, playerTS, g.marker.symbol);
  1174. fillTrainingLevel(type, mzreg.bar_pos, playerTS, g.marker.symbol);
  1175. fillTrainingLevel(type, mzreg.bar_neg, playerTS, g.marker.symbol, true);
  1176. }
  1177. }
  1178. }
  1179. }
  1180. }
  1181. }
  1182. let allSkillTraining = new Array();
  1183. for (let t1 = 0; t1 < allSkillTraining_tmp.length; t1++) {
  1184. if (imgs[t1].nowSkill == undefined) {
  1185. imgs[t1].nowSkill = parseInt(imgs[t1].src.match(mzreg.img_val)[1]);;
  1186. }
  1187. let tmp = {};
  1188. for (let t2 = 0; t2 < allSkillTraining_tmp[t1].length; t2++) {
  1189. let tmp2 = allSkillTraining_tmp[t1][t2];
  1190. if (tmp2.stat.getSum() != 0) {
  1191. tmp2.skill = imgs[t1].nowSkill + 1 - allSkillTraining_tmp[t1].length + t2;
  1192. tmp[tmp2.skill] = tmp2;
  1193. }
  1194. }
  1195. allSkillTraining[t1] = tmp;
  1196. }
  1197. trainingInfo[pid] = allSkillTraining;
  1198. for (let k = 0; k < maxeds.length; k++) {
  1199. setSrc($(".player_share_skills").length == 0, imgs[k], imgs[k].nowSkill, maxeds[k], skillBallDays[k], pid, k);
  1200. }
  1201.  
  1202. series = undefined;
  1203. plotBands = undefined;
  1204. xPlotLines = undefined;
  1205. return true;
  1206. }
  1207. function fillTrainingLevel(type, reg, playerTS, url, isneg) {
  1208. let result = url.match(reg);
  1209. if (result && result.length > 0) {
  1210. let stat = playerTS.stat;
  1211. if (isneg) {
  1212. stat.add(type, "t" + result[1]);
  1213. } else {
  1214. stat.add("all", "t" + result[1]);
  1215. stat.add(type, "t" + result[1]);
  1216. }
  1217. }
  1218. }
  1219.  
  1220. function getScoutReport(pid, pdom, showMB) {
  1221. let url = "/ajax.php?p=players&sub=scout_report&pid=" + pid + "&sport=soccer";
  1222. let cache_mode = 1;
  1223. if (pdom.find("#discard_youth_button").length) {
  1224. url = "/ajax.php?p=players&sub=scout_report&pid=null&sport=soccer";
  1225. cache_mode = 0;
  1226. }
  1227. myAjax(
  1228. url,
  1229. function (data) {
  1230. let srdom = $($.parseHTML(data));
  1231. let remark = srdom.find("span.blurred span").text();
  1232. let srdivs = srdom.find("dd div.flex-grow-1");
  1233. if (srdivs.length == 3) {
  1234. let HS = srdivs.eq(0).find(".lit").length;
  1235. let LS = srdivs.eq(1).find(".lit").length;
  1236. let SS = srdivs.eq(2).find(".lit").length;
  1237. //Trzxyvopaxis
  1238. let Hspan = srdivs.eq(0).find(".blurred span");
  1239. let HArr = new Array();
  1240. for (let i = 0; i < Hspan.length; i++) {
  1241. if (Hspan.eq(i).text() != "Trzxyvopaxis") {
  1242. HArr.push(Hspan.eq(i).text());
  1243. }
  1244. }
  1245. let Lspan = srdivs.eq(1).find(".blurred span");
  1246. let LArr = new Array();
  1247. for (let i = 0; i < Lspan.length; i++) {
  1248. if (Lspan.eq(i).text() != "Trzxyvopaxis") {
  1249. LArr.push(Lspan.eq(i).text());
  1250. }
  1251. }
  1252.  
  1253. let HPids = [], LPids = [];
  1254.  
  1255. let skillnames = pdom.find("td > span.clippable");
  1256. for (let i = 0; i < skillnames.length; i++) {
  1257. if (HArr.indexOf(skillnames.eq(i).text()) >= 0) {
  1258. skillnames.eq(i).parent().addClass("gm_scout_h");
  1259. skillnames.eq(i).parent().addClass("gm_s" + HS);
  1260. HPids.push(i + 1);
  1261. } else if (LArr.indexOf(skillnames.eq(i).text()) >= 0) {
  1262. skillnames.eq(i).parent().removeClass("gm_scout_h");
  1263. skillnames.eq(i).parent().addClass("gm_s" + LS);
  1264. LPids.push(i + 1);
  1265. }
  1266. //else {
  1267. // skillnames.eq(i).parent().removeClass("gm_scout_h");
  1268. // skillnames.eq(i).parent().removeClass("gm_s*");
  1269. //}
  1270. }
  1271.  
  1272. $("#GM_scout_" + pid).remove();
  1273. let nsavgstat = "<span id='GM_scout_" + pid + "'>[H" + HS + " " + HArr[0] + "," + HArr[1] + "] [L" + LS + " " + LArr[0] + "," + LArr[1] + "] S" + SS;
  1274. nsavgstat += "</span>";
  1275. nsavgstat = $(nsavgstat)[0];
  1276. nsavgstat.addEventListener('click', function () {
  1277. let strSus = remark;
  1278. if (IsLoser(HS, LS, LPids[0], LPids[1])) {
  1279. strSus += "<br/><br/>" + now_language.sug_Loser;
  1280. }
  1281. let plans = getTrainPlans(HPids[0], HPids[1], LPids[0], LPids[1]);
  1282. for (let j = 0; j < plans.length; j++) {
  1283.  
  1284. let str = "";
  1285. let pri = getTrainPRI(plans[j].loc, HS, HPids[0], HPids[1], LS, LPids[0], LPids[1]);
  1286. for (let i = 0; i < pri.Order.length; i++) {
  1287. if (str != "") {
  1288. str += ">";
  1289. }
  1290. str += now_language["attrName" + pri.Order[i]];
  1291. }
  1292. strSus += "<br/><br/>" + now_language["sug_T" + plans[j].type] + now_language["Pos" + pri.Sloc.CampKey] + "<br/><br/>" + now_language.sug_PRI + str;
  1293.  
  1294. }
  1295. showHelpLayer(strSus, now_language.scoutReport, true);
  1296.  
  1297. return false;
  1298. });
  1299. pdom.find("a.subheader").after(nsavgstat);
  1300.  
  1301. } else {
  1302. return true;
  1303. }
  1304.  
  1305. }, cache_mode);
  1306. }
  1307.  
  1308. function checkScoutLoc(lst, key, LP1, LP2, slocs) {
  1309. if (lst[key] != undefined) {
  1310. let sloc = lst[key];
  1311. if (getProp(LP1, sloc) == 0 || getProp(LP2, sloc) == 0) {
  1312.  
  1313. slocs.push({ type: 1, loc: sloc });
  1314. }
  1315. else {
  1316. slocs.push({ type: 0, loc: sloc });
  1317. }
  1318. slocs.keys[key] = true;
  1319. }
  1320. }
  1321. function getProp(id, loc) {
  1322. if (loc.Prop[id] != undefined) {
  1323. return loc.Prop[id];
  1324. }
  1325. return 3;
  1326. }
  1327. function getTrainPlans(HP1, HP2, LP1, LP2) {
  1328. //0 首选 1 次选(弱项有主项) 2 一般(强项不适合 从非弱项中找) 3 强行默认 一般练后卫
  1329. let slocs = [];
  1330. slocs.keys = {};
  1331.  
  1332. //按高星挑选合适训练计划
  1333. checkScoutLoc(scoutLocList, HP1 + "," + HP2, LP1, LP2, slocs);
  1334. checkScoutLoc(scoutLocList, HP2 + "," + HP1, LP1, LP2, slocs);
  1335. checkScoutLoc(scoutLocList, HP1, LP1, LP2, slocs);
  1336. checkScoutLoc(scoutLocList, HP2, LP1, LP2, slocs);
  1337.  
  1338.  
  1339. for (let i = 0; i < OKeys.length; i++) {
  1340. let key = OKeys[i];
  1341. if (!slocs.keys[key]) {
  1342. let loc = scoutLocList[key];
  1343. if (getProp(LP1, loc) != 1 && getProp(LP2, loc) != 1) {
  1344. slocs.push({ type: 2, loc: loc });
  1345. slocs.keys[key] = true;
  1346. }
  1347. }
  1348. }
  1349. if (slocs.length == 0) {
  1350. slocs.push({ type: 3, loc: scoutLocList[OKeys[0]] });
  1351. }
  1352. return slocs;
  1353. }
  1354. function IsLoser(HStar, LStar, LP1, LP2) {
  1355. if (HStar <= 2) {
  1356. return true;
  1357. }
  1358. //弱1带速耐
  1359. if (LStar == 1 && HStar < 4) {
  1360. if (LP1 == 1 || LP2 == 1 || LP1 == 2 || LP2 == 2) {
  1361. return true;
  1362. }
  1363. }
  1364. return false;
  1365. }
  1366. function getTrainPRI(sloc, HStar, HP1, HP2, LStar, LP1, LP2) {
  1367.  
  1368. //获取训练顺序
  1369. let lstBase = [];
  1370. let lstMain = [];
  1371. let lstSub = [];
  1372. for (let i = 0; i < sloc.Order.length; i++) {
  1373. let ID = sloc.Order[i];
  1374. let t = getProp(ID, sloc);
  1375. if (t == 0 || t == 1) {
  1376. //强3+星 基础和主项训练完再训练
  1377. if (HStar >= 3) {
  1378. if (HP1 == ID || HP2 == ID) {
  1379. lstSub.push(ID);
  1380. }
  1381. }
  1382. //弱2星带基础和主项 最优先训练
  1383. if (LStar <= 2) {
  1384. if (LP1 == ID || LP2 == ID) {
  1385. if (t == 0) {
  1386. lstBase.unshift(ID);
  1387. }
  1388. else {
  1389. lstMain.push(ID);
  1390. }
  1391. }
  1392. }
  1393. //高低星都没有基础和主项 最优先训练
  1394. if (HP1 != ID && HP2 != ID && LP1 != ID && LP2 != ID) {
  1395. //意降低优先级
  1396. if (ID == 3) {
  1397. lstSub.push(ID);
  1398. }
  1399. else if (t == 0) {
  1400. lstBase.push(ID);
  1401. }
  1402. else {
  1403. lstMain.push(ID);
  1404. }
  1405. }
  1406. }
  1407. else if (t == 2) {
  1408. lstSub.push(ID);
  1409. }
  1410. }
  1411.  
  1412. let pri = 29;
  1413. let ditPRI = {};
  1414. let lstOrder = lstBase.concat(lstMain).concat(lstSub);
  1415.  
  1416. while (lstBase.length > 0) {
  1417. ditPRI[lstBase.shift()] = pri;
  1418. pri -= 1;
  1419. }
  1420. pri = 19;
  1421. while (lstMain.length > 0) {
  1422. ditPRI[lstMain.shift()] = pri;
  1423. pri -= 1;
  1424. }
  1425. pri = 9;
  1426. while (lstSub.length > 0) {
  1427. ditPRI[lstSub.shift()] = pri;
  1428. pri -= 1;
  1429. }
  1430.  
  1431. let ret = {
  1432. "Sloc": sloc, "TrainPRI": ditPRI, "Order": lstOrder
  1433. };
  1434. return ret;
  1435. }
  1436.  
  1437. function getTrainingGraphs(pid, pdom, GraphsType) {
  1438. myAjax(
  1439. "/ajax.php?p=trainingGraph&sub=getJsonTrainingHistory&sport=soccer&player_id=" + pid,
  1440. function (data) {
  1441. if (data == "") {
  1442. return true;
  1443. }
  1444. let ret = drawPlayerByTrainingGraphs(pid, data, pdom);
  1445. return !ret;
  1446. });
  1447. }
  1448. function getTrainingGraphsBySkill_id(pid, skill_id, callback) {
  1449. myAjax(
  1450. "/ajax.php?p=trainingGraph&sub=getJsonTrainingHistory&sport=soccer&player_id=" + pid + "&skill_id=" + (skill_id + 2),
  1451. function (data) {
  1452. return !callback(data);
  1453. });
  1454. }
  1455. function showPop(parent) {
  1456. $("body").append("<div id=\"informationBubble\" class=\"shadow\"></div>");
  1457. let bubble = $("#informationBubble");
  1458. bubble.css("width", "200px");
  1459. let tmpArr = parent.attr('id').split("_");
  1460.  
  1461. let playTS = trainingInfo[tmpArr[0]][tmpArr[1]];
  1462. let str = "";
  1463. let sum = 0;
  1464. if (playTS[tmpArr[2]]) {
  1465. let training = playTS[tmpArr[2]].stat;
  1466. str = now_language.training_avg + " " + training.getAvg() + "%" + training.getTnText() + "<br/><br/>" + now_language.training_ball_day + ":<br/>";
  1467. if (training.camp) {
  1468. str += training.getDayByAvg(training.camp.getAvg()) + "(" + now_language.training_camp + ") ";
  1469. }
  1470. if (training.coach) {
  1471. str += training.getDayByAvg(training.coach.getAvg()) + "(" + now_language.training_coach + ") ";
  1472. }
  1473. if (training.pos) {
  1474. str += training.getDayByAvg(training.pos.getAvg()) + "(" + now_language.training_pos + ")";
  1475. }
  1476. str += "<br/><br/>";
  1477.  
  1478. sum = training.getSum();
  1479. }
  1480. let flag = false;
  1481. str += now_language.training_part + ":";
  1482. for (let i = 0; i < 10; i++) {
  1483. if (playTS[i]) {
  1484. flag = true;
  1485. str += "<br/>" + i + "-" + (i + 1) + " " + now_language.training_total + ":"
  1486. + playTS[i].stat.getSum(true) + "%"
  1487. + " " + now_language.training_avg + ":" + playTS[i].stat.getAvg() + "%<br/>" + playTS[i].stat.getTnText();
  1488. }
  1489. }
  1490.  
  1491. let content = "<div class='clearfix'><h3 style='margin: 0; padding: 0'>" + now_language.training_now + ":"
  1492. + sum
  1493. + "%</h3><div class='skill_exact big'><div class='skill_exact_wrapper clearfix'><div class='skill_exact_bar' style='width: "
  1494. + sum * 2
  1495. + "px;'></div></div></div><p>"
  1496. + (flag ? str : "")
  1497. + "</p></div>";
  1498. bubble.html(content);
  1499. mz.stickToParent(bubble, parent);
  1500. bubble.slideDown("fast");
  1501.  
  1502. $(parent).bind("mouseleave", function () {
  1503. bubble.remove();
  1504. });
  1505. }
  1506. function setLanguage(language) {
  1507. if (language) {
  1508. let new_language = gm_mzlanguage[language];
  1509. if (new_language == undefined) {
  1510. new_language = gm_mzlanguage.en;
  1511. }
  1512. if (now_language != new_language) {
  1513. GM_setValue("mylanguage", language);
  1514. }
  1515. now_language = new_language;
  1516. } else {
  1517. if (now_language == gm_mzlanguage.en) {
  1518. now_language = gm_mzlanguage.cn;
  1519. GM_setValue("mylanguage", "cn");
  1520. } else {
  1521. now_language = gm_mzlanguage.en;
  1522. GM_setValue("mylanguage", "en");
  1523. }
  1524. }
  1525. }
  1526. function initgw() {
  1527. let tmplanguage = GM_getValue("mylanguage", false);
  1528. if (tmplanguage == "cn") {
  1529. tmplanguage = "zh";
  1530. setLanguage(tmplanguage);
  1531. }
  1532. if (gm_mzlanguage[tmplanguage] == undefined) {
  1533. let lang = $("meta[name='language']");
  1534. if (lang.length > 0) {
  1535. setLanguage($("meta[name='language']")[0].content);
  1536. }
  1537.  
  1538. } else {
  1539. now_language = gm_mzlanguage[tmplanguage];
  1540. }
  1541.  
  1542. let css = document.createElement('style');
  1543. css.type = 'text/css';
  1544. 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;}";
  1545.  
  1546.  
  1547. document.getElementsByTagName('head')[0].appendChild(css);
  1548.  
  1549. $(document.body).append("<div class='gw_run_div'>"
  1550. + "<div id='gw_run' class='gw_run shupai' title='" + now_language.ManualColorTitle + "'><b>" + now_language.ManualColor + "</b></div>"
  1551. + "<div>---</div>"
  1552. + "<div id='gw_run2' class='gw_run shupai' title='" + now_language.SettingTitle + "'><b>" + now_language.Setting + "</b></div>"
  1553. + "</div>");
  1554. $('#gw_run')[0].addEventListener('click', function () { gw_start(1); });
  1555. $('#gw_run2')[0].addEventListener('click', function () {
  1556. OpenSetting();
  1557. });
  1558.  
  1559. document.onkeydown = function () {
  1560. if (event.altKey) {
  1561. if (window.event.keyCode == 65) {
  1562. //alt + A
  1563. gw_start(1);
  1564. }
  1565. else if (window.event.keyCode == 83) {
  1566. //alt + S
  1567. gw_start(1);
  1568. }
  1569. else if (window.event.keyCode == 68) {
  1570. //alt + D
  1571. Advanced2D();
  1572. }
  1573. }
  1574. };
  1575. $("body").on("mouseenter", ".skill_exact_van", function () {
  1576. showPop($(this));
  1577. });
  1578. if (mzreg.ruok_url.test(location.href)) {
  1579. let ad = document.createElement('audio');
  1580. ad.autoplay = true;
  1581. ad.controls = true;
  1582. ad.loop = true;
  1583. ad.preload = "auto";
  1584. ad.src = "https://webfs.yun.kugou.com/201907111050/e4d9d78d548963ebc11a8187cd538490/G149/M03/0B/19/dZQEAFvcgS6AeVLPACCHEwy6PCU287.mp3";
  1585.  
  1586. ad.oncanplay = function () {
  1587. ad.play();
  1588. };
  1589. document.body.appendChild(ad);
  1590. //$(document.body).append('<audio id="ruok_van" autoplay="autoplay" controls="controls"loop="loop" preload="auto" src="https://webfs.yun.kugou.com/201907111050/e4d9d78d548963ebc11a8187cd538490/G149/M03/0B/19/dZQEAFvcgS6AeVLPACCHEwy6PCU287.mp3"></audio>');
  1591. //$("#ruok_van")[0].play();
  1592. }
  1593. }
  1594. function report() {
  1595. let username = $("#header-username").html();
  1596. if (username != undefined) {
  1597.  
  1598. GM_xmlhttpRequest({
  1599. method: "GET",
  1600. url: "http://www.budeng.win:852/MZ/ReportUsr?username=" + username,
  1601. responseType: "json",
  1602. onload: function (result) {
  1603. },
  1604. onerror: function (result) {
  1605. }
  1606. });
  1607. }
  1608. }
  1609. //GraphsType 0 自动模式 1 强制训练图
  1610. function gw_start(GraphsType) {
  1611. if ($("#players_container").width() < 660) {
  1612. if (mzreg.shortlist_url.test(location.href)) {
  1613. $(".col_2_of_3").width("660");
  1614. }
  1615. $("#players_container").width("660");
  1616. }
  1617. if ($(".player_share_skills").length > 0) {
  1618. if (GraphsType == 0) {
  1619. getMax(function () {
  1620. showMax(0);
  1621. });
  1622. } else {
  1623. showMax(GraphsType);
  1624. }
  1625. } else if ($(".playerContainer").find(".training_graphs").length > 0) {
  1626. showMax(GraphsType);
  1627. } else if ($(".playerContainer").find(".scout_report").length > 0) {
  1628. showMax(GraphsType);
  1629. }
  1630. }
  1631. function OpenSetting() {
  1632.  
  1633. let lang = GM_getValue("mylanguage", "en");
  1634. let xml_mode = GM_getValue("xml_mode", 0);
  1635. let autoRun = GM_getValue("autoRun1", 1);
  1636. let tmphtml = '<div><b>' + now_language.Language + ':</b></div><div><select id="gm_language">';
  1637. for (let l in gm_mzlanguage) {
  1638. tmphtml += '<option value="' + l + '"' + (lang == l ? ' selected="selected" ' : '') + '>' + gm_mzlanguage[l].Name + '</option>';
  1639. }
  1640. tmphtml += '</select>\
  1641. </div>\
  1642. \
  1643. <div><b>'+ now_language.AutoRun + ':</b></div>\
  1644. <div><select id="gm_autorun">\
  1645. <option value="0"'+ (autoRun == 0 ? ' selected="selected" ' : '') + '>' + now_language.AutoRun0 + '</option>\
  1646. <option value="1"'+ (autoRun == 1 ? ' selected="selected" ' : '') + '>' + now_language.AutoRun1 + '</option>\
  1647. </select>\
  1648. </div>\
  1649. \
  1650. <div><b>'+ now_language.XmlMode + ':</b></div>\
  1651. <div><select id="gm_xml_mode">\
  1652. <option value="0"'+ (xml_mode == 0 ? ' selected="selected" ' : '') + '>' + now_language.XmlMode1 + '</option>\
  1653. <option value="1"'+ (xml_mode == 1 ? ' selected="selected" ' : '') + '>' + now_language.XmlMode2 + '</option>\
  1654. </select>\
  1655. </div>\
  1656. <div><b>'+ now_language.TacConf + ':</b></div>\
  1657. <div><textarea style="width: 380px;height:200px;" id="txtTacConf" spellcheck="false" autocapitalize="off" autocomplete="off" autocorrect="off"></textarea>\
  1658. </div>\
  1659. <div>\
  1660. <a href="#" class="mzbtn buttondiv button_account" id="gm_setting_save">\
  1661. <span class="buttonClassMiddle"><span style="white-space: nowrap">'+ now_language.Save + '</span></span><span class="buttonClassRight">&nbsp;</span>\
  1662. </a>\
  1663. </div>\
  1664. ';
  1665.  
  1666. showHelpLayer(tmphtml, now_language.Setting, true);
  1667. $("#txtTacConf").val(GM_getValue("TacConf", ""));
  1668. $("#gm_setting_save")[0].addEventListener('click', function () {
  1669. setLanguage($("#gm_language").val());
  1670. GM_setValue("xml_mode", $("#gm_xml_mode").val());
  1671. GM_setValue("autoRun1", $("#gm_autorun").val());
  1672. GM_setValue("TacConf", $("#txtTacConf").val());
  1673.  
  1674. $('#gw_run')[0].title = now_language.ManualColorTitle;
  1675. $('#gw_run').html("<b>" + now_language.ManualColor + "</b>");
  1676. $('#gw_run2')[0].title = now_language.SettingTitle;
  1677. $('#gw_run2').html("<b>" + now_language.Setting + "</b>");
  1678.  
  1679. $('#gw_jijing').html(now_language.Jijing);
  1680. $('#gw_dongzuo').html(now_language.dongzuo);
  1681. $('#gw_copyxml1').html(now_language.Copyxml1);
  1682. $('#gw_copyxml2').html(now_language.Copyxml2);
  1683. $('#gw_test').html(now_language.Test);
  1684.  
  1685.  
  1686. powerboxCloseAll();
  1687. });
  1688. }
  1689.  
  1690. //以下为2D比赛辅助
  1691. function MatchEvent() {
  1692. this.data = new Array();
  1693. this.setAllPlayerEvent = function (team, tc) {
  1694. for (let i = 0; i < tc.length; i++) {
  1695. this.data.push(tc[i]);
  1696. }
  1697.  
  1698. for (let i = 0; i < team.m_players.length; i++) {
  1699. let len = team.m_players[i].m_events.getLength();
  1700. for (let j = 0; j < len; j++) {
  1701. this.data.push(team.m_players[i].m_events.at(j));
  1702. }
  1703. }
  1704. };
  1705. this.Sort = function () {
  1706. this.data.sort(function (a, b) {
  1707. return a.m_frame - b.m_frame;
  1708. });
  1709. };
  1710. }
  1711.  
  1712. function OutOfPlay() {
  1713. this.data = new Array();
  1714. this.add = function (begin, end) {
  1715. this.data.push({
  1716. begin: begin,
  1717. end: end
  1718. });
  1719. };
  1720. this.resetIndex = function () {
  1721. this.index = 0;
  1722. };
  1723. this.notin = function (frame) {
  1724. while (this.index < this.data.length) {
  1725. let item = this.data[this.index];
  1726. if (frame < item.begin) {
  1727. return true;
  1728. } else if (frame <= item.end) {
  1729. return false;
  1730. }
  1731. if (frame > item.end) {
  1732. this.index++;
  1733. }
  1734. }
  1735. return true;
  1736. };
  1737. this.Sort = function () {
  1738. this.data.sort(function (a, b) {
  1739. return a.begin - b.begin;
  1740. });
  1741. }
  1742. }
  1743.  
  1744. let mEvent, mStaticEventHome, mStaticEventAway;
  1745. let out_of_play;
  1746. let dit_bypid = {};
  1747. let dit_player = {};
  1748. 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;
  1749.  
  1750. function Advanced2D() {
  1751.  
  1752. if (OK_2D) {
  1753. if ($("#canvas").length > 0) {
  1754.  
  1755. let home = MyGame.prototype.mzlive.m_match.getHomeTeam();
  1756. let away = MyGame.prototype.mzlive.m_match.getAwayTeam();
  1757.  
  1758. if (home != null && away != null) {
  1759.  
  1760. let nl = matchLoader.matchXml.documentElement.evaluate('Periods/*');
  1761. let p;
  1762. while (p = nl.iterateNext()) {
  1763. if (p.getAttribute('name') == 'half1') {
  1764. m_koFrame = MyGame.prototype.mzlive.m_match.timeToFrame(p.getAttribute('start'));
  1765. m_htFrame = MyGame.prototype.mzlive.m_match.timeToFrame(p.getAttribute('end'));
  1766. }
  1767. else if (p.getAttribute('name') == 'half2') {
  1768. m_ko2Frame = MyGame.prototype.mzlive.m_match.timeToFrame(p.getAttribute('start'));
  1769. m_ht2Frame = MyGame.prototype.mzlive.m_match.timeToFrame(p.getAttribute('end'));
  1770. }
  1771. else if (p.getAttribute('name') == 'extra1') {
  1772. m_ko3Frame = MyGame.prototype.mzlive.m_match.timeToFrame(p.getAttribute('start'));
  1773. m_ht3Frame = MyGame.prototype.mzlive.m_match.timeToFrame(p.getAttribute('end'));
  1774. }
  1775. else if (p.getAttribute('name') == 'extra2') {
  1776. m_ko4Frame = MyGame.prototype.mzlive.m_match.timeToFrame(p.getAttribute('start'));
  1777. m_ht4Frame = MyGame.prototype.mzlive.m_match.timeToFrame(p.getAttribute('end'));
  1778. }
  1779. }
  1780.  
  1781. let players = matchLoader.matchXml.documentElement.evaluate('Player');
  1782. let re1;
  1783. dit_bypid = {};
  1784. dit_player = {};
  1785. while (re1 = players.iterateNext()) {
  1786. let ttt = {
  1787. internalId: re1.getAttribute('internalId'),
  1788. name: re1.getAttribute('name'),
  1789. shirtno: re1.getAttribute('shirtno'),
  1790. teamId: re1.getAttribute('teamId'),
  1791. origin: re1.getAttribute('origin')
  1792. };
  1793. dit_bypid[re1.getAttribute('id')] = ttt;
  1794. if (ttt.teamId == home.m_teamId) {
  1795. dit_player[ttt.internalId] = home.getPlayerByPlayerId(ttt.internalId);
  1796. } else {
  1797. dit_player[ttt.internalId] = away.getPlayerByPlayerId(ttt.internalId);
  1798. }
  1799. }
  1800.  
  1801. let events = matchLoader.matchXml.documentElement.evaluate('Events/*');
  1802.  
  1803. let re, begin, end;
  1804.  
  1805. let homeTc = new Array();
  1806. let awayTc = new Array();
  1807.  
  1808.  
  1809. out_of_play = new OutOfPlay();
  1810. out_of_play.add(0, m_koFrame);
  1811. out_of_play.add(m_htFrame, m_ko2Frame);
  1812. if (m_ko3Frame > 0) {
  1813. out_of_play.add(m_ht2Frame, m_ko3Frame);
  1814. }
  1815. if (m_ko4Frame > 0) {
  1816. out_of_play.add(m_ht3Frame, m_ko4Frame);
  1817. }
  1818. while (re = events.iterateNext()) {
  1819. begin = re.getAttribute('intervalendframe');
  1820. end = re.getAttribute('startframe');
  1821. if (begin != undefined && end != undefined) {
  1822. out_of_play.add(begin, end);
  1823. }
  1824.  
  1825. //战术变动
  1826. if (re.tagName == 'Tactic') {
  1827. let t_teamid = re.getAttribute('teamId');
  1828. let t_time = re.getAttribute('time');
  1829. let t_type = re.getAttribute('type');
  1830. let t_new_setting = re.getAttribute('new_setting');
  1831. if (t_teamid == home.m_teamId) {
  1832. homeTc.push({
  1833. tag: 'Tactic',
  1834. m_frame: MyGame.prototype.mzlive.m_match.timeToFrame(t_time),
  1835. type: t_type,
  1836. new_setting: t_new_setting,
  1837. m_team: home
  1838. });
  1839. } else {
  1840. awayTc.push({
  1841. tag: 'Tactic',
  1842. m_frame: MyGame.prototype.mzlive.m_match.timeToFrame(t_time),
  1843. type: t_type,
  1844. new_setting: t_new_setting,
  1845. m_team: away
  1846. });
  1847. }
  1848. }
  1849. //换人
  1850. else if (re.tagName == 'Substitution') {
  1851. let t_time = re.getAttribute('time');
  1852. let t_clock = re.getAttribute('clock');
  1853. let t_frame = re.getAttribute('frame');
  1854. let t_playerId = re.getAttribute('playerId');
  1855. let t_teamId = re.getAttribute('teamId');
  1856. let t_substitutedId = re.getAttribute('substitutedId');
  1857. let t_reason = re.getAttribute('reason');
  1858. let t_minute = re.getAttribute('minute');
  1859. let t_scorecondition = re.getAttribute('scorecondition');
  1860. let t_score = re.getAttribute('score');
  1861.  
  1862. let t_player, t_sub_player;
  1863. let p5 = dit_bypid[t_playerId];
  1864. if (p5) {
  1865. t_player = dit_player[p5.internalId];
  1866. }
  1867. p5 = dit_bypid[t_substitutedId];
  1868. if (p5) {
  1869. t_sub_player = dit_player[p5.internalId];
  1870. }
  1871.  
  1872. if (t_teamId == home.m_teamId) {
  1873. homeTc.push({
  1874. tag: 'Sub',
  1875. m_frame: t_frame,
  1876. clock: t_clock,
  1877. player: t_player,
  1878. sub_player: t_sub_player,
  1879. reason: t_reason,
  1880. minute: t_minute,
  1881. scorecondition: t_scorecondition,
  1882. score: t_score,
  1883. m_team: home
  1884. });
  1885. } else {
  1886. awayTc.push({
  1887. tag: 'Sub',
  1888. m_frame: t_frame,
  1889. clock: t_clock,
  1890. player: t_player,
  1891. sub_player: t_sub_player,
  1892. reason: t_reason,
  1893. minute: t_minute,
  1894. scorecondition: t_scorecondition,
  1895. score: t_score,
  1896. m_team: away
  1897. });
  1898. }
  1899. }
  1900. }
  1901. out_of_play.Sort();
  1902.  
  1903.  
  1904.  
  1905.  
  1906. let lstEventHome = new MatchEvent();
  1907. let lstEventAway = new MatchEvent();
  1908. lstEventHome.setAllPlayerEvent(home, homeTc);
  1909. lstEventAway.setAllPlayerEvent(away, awayTc);
  1910.  
  1911. lstEventHome.Sort();
  1912. lstEventAway.Sort();
  1913.  
  1914. mStaticEventHome = lstEventHome;
  1915. mStaticEventAway = lstEventAway;
  1916.  
  1917.  
  1918. if ($('.gw_div_left').length == 0) {
  1919. $('#canvas').parent().append('<div class="gw_div_left"></div>');
  1920. $('#canvas').parent().append('<div class="gw_div_right"></div>');
  1921. $('#canvas').parent().append(
  1922. '<div><b id="gw_jijing" class="gw_run" style="color: red;">' + now_language.Jijing + '</b>'
  1923. + ' <b id="gw_dongzuo" class="gw_run" style="color: red;">' + now_language.dongzuo + '</b>'
  1924. + ' <b id="gw_copyxml1" class="gw_run" style="color: red;">' + now_language.Copyxml1 + '</b>'
  1925. + ' <b id="gw_copyxml2" class="gw_run" style="color: red;">' + now_language.Copyxml2 + '</b>'
  1926. + ' <b id="gw_test" class="gw_run" style="color: red;">' + now_language.Test + '</b>'
  1927. + '</div>');
  1928.  
  1929. $('#gw_jijing')[0].addEventListener('click', function () {
  1930. ShowDiv(0);
  1931. });
  1932.  
  1933. $('#gw_dongzuo')[0].addEventListener('click', function () {
  1934. ShowDiv(1);
  1935. });
  1936.  
  1937. $('#gw_copyxml1')[0].addEventListener('click', function () {
  1938. CopyXML(true);
  1939.  
  1940. });
  1941. $('#gw_copyxml2')[0].addEventListener('click', function () {
  1942. CopyXML(false);
  1943. });
  1944. $('#gw_test')[0].addEventListener('click', function () {
  1945.  
  1946. });
  1947.  
  1948. } else {
  1949. $('.gw_div_left').empty();
  1950. $('.gw_div_right').empty();
  1951. }
  1952. }
  1953. }
  1954. }
  1955. }
  1956. function ShowDiv(type) {
  1957. $('.gw_div_left').empty();
  1958. $('.gw_div_right').empty();
  1959. if (type == 0) {
  1960. let lstEventHome = mStaticEventHome;
  1961. let lstEventAway = mStaticEventAway;
  1962.  
  1963. let team = MyGame.prototype.mzlive.m_match.getHomeTeam();
  1964. $('.gw_div_left').append("<div><b>" +
  1965. team.getTactics() + " " + team.getPlayStyle() + " " + team.getAggression()
  1966. + "</b></div>");
  1967. for (let i = 0; i < lstEventHome.data.length; i++) {
  1968. if (lstEventHome.data[i].tag == "Tactic") {
  1969. $('.gw_div_left').append('<div><b id="gw_eventH' + i + '" class="gw_run">'
  1970. + MyGame.prototype.mzlive.m_match.frameToMatchMinute(lstEventHome.data[i].m_frame) + "′ "
  1971. + lstEventHome.data[i].type + " -> "
  1972. + lstEventHome.data[i].new_setting + '</b></div>');
  1973. } else if (lstEventHome.data[i].tag == "Sub") {
  1974. $('.gw_div_left').append('<div><b id="gw_eventH' + i + '" class="gw_run">'
  1975. + MyGame.prototype.mzlive.m_match.frameToMatchMinute(lstEventHome.data[i].m_frame) + "′ "
  1976. + lstEventHome.data[i].player.m_name + "(" + lstEventHome.data[i].player.m_shirtNo + ")↑ "
  1977. + lstEventHome.data[i].sub_player.m_name + "(" + lstEventHome.data[i].sub_player.m_shirtNo + ")↓<br/>"
  1978. + lstEventHome.data[i].reason + lstEventHome.data[i].minute + "′[" + lstEventHome.data[i].scorecondition + " " + lstEventHome.data[i].score + "]"
  1979. + '</b></div>');
  1980.  
  1981. } else {
  1982. $('.gw_div_left').append('<div><b id="gw_eventH' + i + '" class="gw_run">'
  1983. + MyGame.prototype.mzlive.m_match.frameToMatchMinute(lstEventHome.data[i].m_frame) + "′ "
  1984. + lstEventHome.data[i].m_owner.m_name + "(" + lstEventHome.data[i].m_owner.m_shirtNo + ") "
  1985. + lstEventHome.data[i].m_description + '</b></div>');
  1986. }
  1987.  
  1988. let dom = $('#gw_eventH' + i)[0];
  1989. dom.m_frame = lstEventHome.data[i].m_frame;
  1990. dom.m_frame -= 45;
  1991. if (dom.m_frame < 0) {
  1992. dom.m_frame = 0;
  1993. }
  1994. dom.addEventListener('click', function () { MyGame.prototype.mzlive.m_match.setCurrentFrame(this.m_frame); });
  1995. }
  1996.  
  1997. team = MyGame.prototype.mzlive.m_match.getAwayTeam();
  1998. $('.gw_div_right').append("<div><b>" +
  1999. team.getTactics() + " " + team.getPlayStyle() + " " + team.getAggression()
  2000. + "</b></div>");
  2001. for (let i = 0; i < lstEventAway.data.length; i++) {
  2002. if (lstEventAway.data[i].tag == "Tactic") {
  2003. $('.gw_div_right').append('<div><b id="gw_eventA' + i + '" class="gw_run">'
  2004. + MyGame.prototype.mzlive.m_match.frameToMatchMinute(lstEventAway.data[i].m_frame) + "′ "
  2005. + lstEventAway.data[i].type + " -> "
  2006. + lstEventAway.data[i].new_setting + '</b></div>');
  2007. } else if (lstEventAway.data[i].tag == "Sub") {
  2008. $('.gw_div_right').append('<div><b id="gw_eventA' + i + '" class="gw_run">'
  2009. + MyGame.prototype.mzlive.m_match.frameToMatchMinute(lstEventAway.data[i].m_frame) + "′ "
  2010. + lstEventAway.data[i].player.m_name + "(" + lstEventAway.data[i].player.m_shirtNo + ")↑ "
  2011. + lstEventAway.data[i].sub_player.m_name + "(" + lstEventAway.data[i].sub_player.m_shirtNo + ")↓<br/>"
  2012. + lstEventAway.data[i].reason + lstEventAway.data[i].minute + "′[" + lstEventAway.data[i].scorecondition + " " + lstEventAway.data[i].score + "]"
  2013. + '</b></div>');
  2014. } else {
  2015. $('.gw_div_right').append('<div><b id="gw_eventA' + i + '" class="gw_run">'
  2016. + MyGame.prototype.mzlive.m_match.frameToMatchMinute(lstEventAway.data[i].m_frame) + "′ "
  2017. + lstEventAway.data[i].m_owner.m_name + "(" + lstEventAway.data[i].m_owner.m_shirtNo + ") "
  2018. + lstEventAway.data[i].m_description + '</b></div>');
  2019. }
  2020. let dom = $('#gw_eventA' + i)[0];
  2021. dom.m_frame = lstEventAway.data[i].m_frame;
  2022. dom.m_frame -= 45;
  2023. if (dom.m_frame < 0) {
  2024. dom.m_frame = 0;
  2025. }
  2026. dom.addEventListener('click', function () { MyGame.prototype.mzlive.m_match.setCurrentFrame(this.m_frame); });
  2027. }
  2028. } else {
  2029.  
  2030. for (let pid in mEvent.dataByPlayer) {
  2031. let divname;
  2032. if (mEvent.dataByPlayer[pid].isHome) {
  2033. divname = '.gw_div_left';
  2034. } else {
  2035. divname = '.gw_div_right';
  2036. }
  2037. let frame_count = 0;
  2038. frame_count = mEvent.dataByPlayer[pid].FoolCount;
  2039. $(divname).append('<div><b id="gw_player_' + pid + '" class="gw_run">'
  2040. + mEvent.dataByPlayer[pid].owner.m_name + "(" + mEvent.dataByPlayer[pid].owner.m_shirtNo + ")"
  2041. + "[" + frame_count + "]</b></div>");
  2042. let dom = $("#gw_player_" + pid)[0];
  2043. dom.pid = pid;
  2044. dom.divname = divname;
  2045. dom.addEventListener('click', function () {
  2046. $(this.divname).empty();
  2047.  
  2048. $(divname).append('<div><b>'
  2049. + mEvent.dataByPlayer[pid].owner.m_name + "(" + mEvent.dataByPlayer[pid].owner.m_shirtNo + ")</b></div>");
  2050. let arr = mEvent.dataByPlayer[this.pid].data;
  2051. for (let k = 0; k < arr.length; k++) {
  2052. let key = 'gw_player_' + pid + "_s_" + k;
  2053. $(this.divname).append('<div><b id="' + key + '" class="gw_run">'
  2054. + MyGame.prototype.mzlive.m_match.frameToMatchMinute(arr[k].m_frame_start) + "′["
  2055. + arr[k].m_frame_start + "+" + (arr[k].m_frame_end - arr[k].m_frame_start + 1)
  2056. + "]" + (arr[k].FoolCount == 0 ? "" : ("+" + arr[k].FoolCount)) + " "
  2057. + getMatchStatusName(arr[k].status)
  2058. + "</b></div>");
  2059.  
  2060. let dom = $("#" + key)[0];
  2061. dom.m_frame = arr[k].m_frame_start;
  2062. dom.addEventListener('click', function () { MyGame.prototype.mzlive.m_match.setCurrentFrame(this.m_frame); });
  2063. }
  2064. });
  2065.  
  2066.  
  2067.  
  2068.  
  2069.  
  2070. }
  2071. }
  2072. }
  2073.  
  2074.  
  2075. function getMatchStatusName(status) {
  2076. switch (status) {
  2077. case MatchStatus.BA_NORMAL:
  2078. return now_language.BA_NORMAL;
  2079. case MatchStatus.BA_WALL:
  2080. return now_language.BA_WALL;
  2081. case MatchStatus.BA_HOLD:
  2082. return now_language.BA_HOLD;
  2083. case MatchStatus.BA_DOWN:
  2084. return now_language.BA_DOWN;
  2085. case MatchStatus.BA_HOLD_THROWIN:
  2086. return now_language.BA_HOLD_THROWIN;
  2087. case MatchStatus.BA_THROWIN:
  2088. return now_language.BA_THROWIN;
  2089. case MatchStatus.BA_LEFT_FOOT_SHOT_FWD:
  2090. return now_language.BA_LEFT_FOOT_SHOT_FWD;
  2091. case MatchStatus.BA_LEFT_FOOT_SHOT_BACK:
  2092. return now_language.BA_LEFT_FOOT_SHOT_BACK;
  2093. case MatchStatus.BA_LEFT_FOOT_SHOT_RIGHT:
  2094. return now_language.BA_LEFT_FOOT_SHOT_RIGHT;
  2095. case MatchStatus.BA_LEFT_FOOT_SHOT_LEFT:
  2096. return now_language.BA_LEFT_FOOT_SHOT_LEFT;
  2097. case MatchStatus.BA_RIGHT_FOOT_SHOT_FWD:
  2098. return now_language.BA_RIGHT_FOOT_SHOT_FWD;
  2099. case MatchStatus.BA_RIGHT_FOOT_SHOT_BACK:
  2100. return now_language.BA_RIGHT_FOOT_SHOT_BACK;
  2101. case MatchStatus.BA_RIGHT_FOOT_SHOT_RIGHT:
  2102. return now_language.BA_RIGHT_FOOT_SHOT_RIGHT;
  2103. case MatchStatus.BA_RIGHT_FOOT_SHOT_LEFT:
  2104. return now_language.BA_RIGHT_FOOT_SHOT_LEFT;
  2105. case MatchStatus.BA_LEFT_FOOT_PASS_FWD:
  2106. return now_language.BA_LEFT_FOOT_PASS_FWD;
  2107. case MatchStatus.BA_LEFT_FOOT_PASS_BACK:
  2108. return now_language.BA_LEFT_FOOT_PASS_BACK;
  2109. case MatchStatus.BA_LEFT_FOOT_PASS_RIGHT:
  2110. return now_language.BA_LEFT_FOOT_PASS_RIGHT;
  2111. case MatchStatus.BA_LEFT_FOOT_PASS_LEFT:
  2112. return now_language.BA_LEFT_FOOT_PASS_LEFT;
  2113. case MatchStatus.BA_RIGHT_FOOT_PASS_FWD:
  2114. return now_language.BA_RIGHT_FOOT_PASS_FWD;
  2115. case MatchStatus.BA_RIGHT_FOOT_PASS_BACK:
  2116. return now_language.BA_RIGHT_FOOT_PASS_BACK;
  2117. case MatchStatus.BA_RIGHT_FOOT_PASS_RIGHT:
  2118. return now_language.BA_RIGHT_FOOT_PASS_RIGHT;
  2119. case MatchStatus.BA_RIGHT_FOOT_PASS_LEFT:
  2120. return now_language.BA_RIGHT_FOOT_PASS_LEFT;
  2121. case MatchStatus.BA_PICK_UP_BALL:
  2122. return now_language.BA_PICK_UP_BALL;
  2123. case MatchStatus.BA_DROP_BALL:
  2124. return now_language.BA_DROP_BALL;
  2125. case MatchStatus.BA_HEADER:
  2126. return now_language.BA_HEADER;
  2127. case MatchStatus.BA_TRIP:
  2128. return now_language.BA_TRIP;
  2129. case MatchStatus.BA_CELEBRATE:
  2130. return now_language.BA_CELEBRATE;
  2131. case MatchStatus.BA_GK_READY:
  2132. return now_language.BA_GK_READY;
  2133. case MatchStatus.BA_GK_ACRO_LEFT:
  2134. return now_language.BA_GK_ACRO_LEFT;
  2135. case MatchStatus.BA_GK_ACRO_LEFT_HOLD:
  2136. return now_language.BA_GK_ACRO_LEFT_HOLD;
  2137. case MatchStatus.BA_GK_ACRO_RIGHT:
  2138. return now_language.BA_GK_ACRO_RIGHT;
  2139. case MatchStatus.BA_GK_ACRO_RIGHT_HOLD:
  2140. return now_language.BA_GK_ACRO_RIGHT_HOLD;
  2141. case MatchStatus.BA_GK_SIDESTEP_LEFT:
  2142. return now_language.BA_GK_SIDESTEP_LEFT;
  2143. case MatchStatus.BA_GK_SIDESTEP_RIGHT:
  2144. return now_language.BA_GK_SIDESTEP_RIGHT;
  2145. case MatchStatus.BA_GK_KICK:
  2146. return now_language.BA_GK_KICK;
  2147. case MatchStatus.BA_GK_THROW_BALL:
  2148. return now_language.BA_GK_THROW_BALL;
  2149. case MatchStatus.BA_GK_STRETCH_LEFT:
  2150. return now_language.BA_GK_STRETCH_LEFT;
  2151. case MatchStatus.BA_GK_STRETCH_LEFT_HOLD:
  2152. return now_language.BA_GK_STRETCH_LEFT_HOLD;
  2153. case MatchStatus.BA_GK_STRETCH_RIGHT:
  2154. return now_language.BA_GK_STRETCH_RIGHT;
  2155. case MatchStatus.BA_GK_STRETCH_RIGHT_HOLD:
  2156. return now_language.BA_GK_STRETCH_RIGHT_HOLD;
  2157. case MatchStatus.BA_BALL_OWNER:
  2158. return now_language.BA_BALL_OWNER;
  2159. case MatchStatus.BA_TACKLE:
  2160. return now_language.BA_TACKLE;
  2161. case MatchStatus.BA_SLIDING_TACKLE:
  2162. return now_language.BA_SLIDING_TACKLE;
  2163. case MatchStatus.BA_SLIDING_TACKLE_STAND:
  2164. return now_language.BA_SLIDING_TACKLE_STAND;
  2165. case MatchStatus.BA_MAX:
  2166. return now_language.BA_MAX;
  2167. case 1001:
  2168. return now_language.BA_MY_1001;
  2169. case 1002:
  2170. return now_language.BA_MY_1002;
  2171. case 1003:
  2172. return now_language.BA_MY_1003;
  2173. case 1011:
  2174. return now_language.BA_MY_1011;
  2175. case 1012:
  2176. return now_language.BA_MY_1012;
  2177. default:
  2178. return now_language.Unknown;
  2179. }
  2180. }
  2181.  
  2182. function StatsToPos_X(i, IsLocal) {
  2183. let ret = IsLocal ? Math.round(-.255800462 * i + 199.8228530689) : Math.round(.2555000556 * i + 8.3741302936);
  2184. return ret;
  2185. }
  2186. function StatsToPos_Y(i, IsLocal) {
  2187. let ret = IsLocal ? Math.round(-.3073207154 * i + 315.9278777381) : Math.round(.3070644902 * i + 9.2794889414);
  2188. return ret;
  2189. }
  2190. function CopyXML(ishome) {
  2191.  
  2192. let xml_mode = GM_getValue("xml_mode", 0);
  2193. if (xml_mode == 0) {
  2194. getMax(function () {
  2195. let tmpXML = Stats2XML(ishome, pmax);
  2196. GM_setClipboard(tmpXML);
  2197. alert(now_language.CopyXmlMsg);
  2198. });
  2199. } else {
  2200. let tmpXML = Stats2XML(ishome);
  2201. myAjax(
  2202. "/?p=players",
  2203. function (data2) {
  2204. //
  2205. let myData = new FormData();
  2206. myData.append("xml", "9" + base64js.fromByteArray(pako.gzip(tmpXML)));
  2207. myData.append("html", data2);
  2208. myData.append("tacConf", GM_getValue("TacConf", ""));
  2209. GM_xmlhttpRequest({
  2210. method: "POST",
  2211. url: "http://www.budeng.win:852/MZ/TuneXMLByHtml",
  2212. data: myData,
  2213. responseType: "json",
  2214. onload: function (result) {
  2215. let dxml = JSON.parse(result.responseText);
  2216. if (dxml.ErrorCode == 0) {
  2217. GM_setClipboard(dxml.data);
  2218. alert(now_language.CopyXmlMsg);
  2219. } else {
  2220. alert(now_language.CopyXmlMsgError);
  2221. }
  2222. },
  2223. onerror: function (result) {
  2224. alert(now_language.CopyXmlMsgError);
  2225. }
  2226. });
  2227. }, 2, true);
  2228. }
  2229. }
  2230. function Stats2XML(ishome, players) {
  2231.  
  2232. let team;
  2233. if (ishome) {
  2234. team = MyGame.prototype.mzlive.m_match.getHomeTeam();
  2235. } else {
  2236. team = MyGame.prototype.mzlive.m_match.getAwayTeam();
  2237. }
  2238.  
  2239. let pidArr = new Array();
  2240. if (players) {
  2241. for (let pid in players) {
  2242. pidArr.push(pid);
  2243. }
  2244. }
  2245. while (pidArr.length < 11) {
  2246. pidArr.push(0);
  2247. }
  2248.  
  2249. let pl;
  2250. let nl = matchLoader.matchXml.documentElement.evaluate('Player');
  2251. let tmpXML = "<?xml version=\"1.0\" ?>" + "\r\n<SoccerTactics>\r\n\t<Team tactics=" + "\"" + team.getTactics() + "\" playstyle=\"" + team.getPlayStyle() + "\" aggression=\"" + team.getAggression() + "\" />\r\n"
  2252. + "\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";
  2253.  
  2254.  
  2255. while (pl = nl.iterateNext()) {
  2256. let origin = pl.getAttribute('origin');
  2257. let teamId = pl.getAttribute("teamId");
  2258. if (origin != "" && origin != "375,0" && origin != "375,1000") {
  2259. let arr = origin.split(",");
  2260. if (team.getId() == teamId) {
  2261. let x = StatsToPos_X(arr[0], ishome);
  2262. let y = StatsToPos_Y(arr[1], ishome);
  2263. 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";
  2264. }
  2265.  
  2266. }
  2267. }
  2268. tmpXML += "</SoccerTactics>\r\n";
  2269. return tmpXML;
  2270. }
  2271. var _open, _prepareTransferData, _centerPowerbox, _ajaxSubmit;
  2272. var finalInitAfterLoading, processButtonPresses, Load010SetupMainSceneInstance;
  2273. let OK_2D = false;
  2274. (function () {
  2275. 'use strict';
  2276.  
  2277.  
  2278. initgw();
  2279.  
  2280. _open = window.XMLHttpRequest.prototype.open;
  2281. window.XMLHttpRequest.prototype.open = function () {
  2282. if (mzreg.data2d_url.test(arguments[1])) {
  2283. OK_2D = false;
  2284. if (MyGame.prototype.mzlive.R_GW == undefined) {
  2285. MyGame.prototype.mzlive.R_GW = true;
  2286.  
  2287. finalInitAfterLoading = MyGame.prototype.mzlive.finalInitAfterLoading;
  2288. MyGame.prototype.mzlive.finalInitAfterLoading = function () {
  2289. finalInitAfterLoading.apply(this);
  2290. OK_2D = true;
  2291. Advanced2D();
  2292. };
  2293. Load010SetupMainSceneInstance = MyGame.prototype.Load010SetupMainSceneInstance;
  2294. MyGame.prototype.Load010SetupMainSceneInstance = function () {
  2295. window.matchLoader = arguments[0];
  2296. Load010SetupMainSceneInstance.apply(this, arguments);
  2297. };
  2298.  
  2299. }
  2300. }
  2301. return _open.apply(this, arguments);
  2302. };
  2303.  
  2304. if (unsafeWindow.prepareTransferData != undefined) {
  2305. _prepareTransferData = unsafeWindow.prepareTransferData;
  2306. unsafeWindow.prepareTransferData = function (readyState, response, responseParameter) {
  2307.  
  2308. _prepareTransferData.apply(this, arguments);
  2309. if (GM_getValue("autoRun1", 1) == 1) {
  2310. if (typeof (responseParameter) === "undefined" || !responseParameter) {
  2311. gw_start(0);
  2312. }
  2313. }
  2314. };
  2315. }
  2316.  
  2317. if (unsafeWindow.centerPowerbox != undefined) {
  2318. _centerPowerbox = unsafeWindow.centerPowerbox;
  2319. unsafeWindow.centerPowerbox = function () {
  2320.  
  2321. _centerPowerbox.apply(this, arguments);
  2322. if (GM_getValue("autoRun1", 1) == 1) {
  2323. gw_start(0);
  2324. }
  2325. };
  2326. }
  2327.  
  2328. if ($.fn.ajaxSubmit != undefined) {
  2329. _ajaxSubmit = $.fn.ajaxSubmit;
  2330. $.fn.ajaxSubmit = function (options) {
  2331. if (options.gm_success_is == undefined) {
  2332. options.gm_success_is = true;
  2333. options.gm_success = options.success;
  2334. options.success = function () {
  2335. options.gm_success.apply(this, arguments);
  2336. if (GM_getValue("autoRun1", 1) == 1) {
  2337. gw_start(0);
  2338. }
  2339. };
  2340. }
  2341. _ajaxSubmit.apply(this, arguments);
  2342. };
  2343. }
  2344.  
  2345.  
  2346. gw_start(0);
  2347. report();
  2348. autoclearCache();
  2349. })();