批量自动领取FF14女儿节偶像应援计划道具

批量自动领取FF14女儿节【偶像应援计划】道具

Pada tanggal 11 Juni 2022. Lihat %(latest_version_link).

  1. /* eslint-disable require-atomic-updates */
  2. // ==UserScript==
  3. // @name 批量自动领取FF14女儿节偶像应援计划道具
  4. // @namespace AnnAngela
  5. // @match https://actff1.web.sdo.com/20220420_DaughterDay/index.html
  6. // @version 1.1.3
  7. // @author AnnAngela
  8. // @run-at document-idle
  9. // @description 批量自动领取FF14女儿节【偶像应援计划】道具
  10. // ==/UserScript==
  11. "use strict";
  12. setInterval(() => {
  13. const anchor = document.querySelector("body > div.el-dialog__wrapper > .ff_passbox > div.el-dialog__body > div.ff_pass_cont > div > div.passbox > div.tc_mogu > div.voteList.wid");
  14. if (!anchor || document.getElementById("allInOne")) {
  15. return;
  16. }
  17. const button = document.createElement("div");
  18. button.id = "allInOne";
  19. button.innerText = "一键领取可直接领取奖励";
  20. anchor.after(button);
  21. button.setAttribute("style", "background: #8782ab; color: #fff; border-radius: .5rem; font-size: .13rem; height: .24rem; line-height: .24rem; text-align: center; cursor: pointer; margin-left: .3rem; width: 1.9rem; position: absolute; right: -3.45rem; bottom: auto; top: 1.44rem;");
  22. button.addEventListener("click", async () => {
  23. if (button.innerText !== "一键领取可直接领取奖励") {
  24. return;
  25. }
  26. if (!confirm("您确定要一键领取所有可以直接领取(即非任选)的奖励吗?")) {
  27. return;
  28. }
  29. button.style.cursor = "not-allowed";
  30. button.innerText = "领取中,请稍候……";
  31. const messages = [];
  32. const { vItemConfig } = await (await fetch("https://actff1.web.sdo.com/20220420_DaughterDay/Handler/Item/GetItemConfig.ashx", {
  33. referrer: "https://actff1.web.sdo.com/20220420_DaughterDay/index.html",
  34. referrerPolicy: "strict-origin-when-cross-origin",
  35. body: null,
  36. method: "POST",
  37. mode: "cors",
  38. credentials: "include",
  39. })).json();
  40. const availableItems = vItemConfig.filter(({ Status }) => Status === 0);
  41. const allInOneItems = availableItems.filter(({ ItemCode }) => !!ItemCode);
  42. messages.push(`共有 ${allInOneItems.length} 个奖励可以直接领取,有 ${availableItems.filter(({ ItemCode }) => !ItemCode).length} 个奖励需要手动选择。`);
  43. messages.push("-".repeat(37));
  44. let index = 0, successCount = 0, failedCount = 0;
  45. for (const { ItemCode, ItemName, ItemLevel, ItemType } of allInOneItems) {
  46. button.innerText = `领取中,请稍候(${index++}/${allInOneItems.length})……`;
  47. const data = new URLSearchParams({ ItemCode: ItemCode.replace(/^MOG-/, ""), ItemCount: 1, ItemLevel, ItemType });
  48. const response = await (await fetch("https://actff1.web.sdo.com/20220420_DaughterDay/Handler/Item/ItemExchange.ashx", {
  49. headers: {
  50. "content-type": "application/x-www-form-urlencoded; charset=UTF-8",
  51. },
  52. referrer: "https://actff1.web.sdo.com/20220420_DaughterDay/index.html",
  53. referrerPolicy: "strict-origin-when-cross-origin",
  54. body: `${data}`,
  55. method: "POST",
  56. mode: "cors",
  57. credentials: "include",
  58. })).json();
  59. if (response.result === "1") {
  60. messages.push(`正在领取第 ${ItemLevel + 1} ${ItemType === 0 ? "免费" : "付费"} 奖励:${ItemName}……成功!`);
  61. successCount++;
  62. } else {
  63. messages.push(`正在领取第 ${ItemLevel + 1} ${ItemType === 0 ? "免费" : "付费"} 奖励:${ItemName}……`);
  64. messages.push(` 结果:失败 - ${JSON.stringify(response)}`);
  65. failedCount++;
  66. }
  67. }
  68. messages.push("-".repeat(37));
  69. messages.push(`总数:${index},成功:${successCount},失败:${failedCount}`);
  70. alert(messages.join("\n"));
  71. alert("即将刷新页面");
  72. location.reload();
  73. });
  74. }, 100);