源子 发表于 2024-11-4 14:03:29

【梅克军团】免操作避税神器,合理避税不求人!油猴批量血液献祭脚本2.0再升级!

本帖最后由 源子 于 2024-11-6 12:21 编辑

前情提要:血液批量献祭油猴脚本——合理避税,从我做起

避税的原理不再过多赘述,之前的脚本只是随手写的,有种力大砖飞的美感,也就可能随机吞掉你几次兑换量罢了。另外操作界面还是太复杂了,还要看使用说明才知道怎么用,这样不好不好。@Name
本次脚本主要有以下几项改动:
1、本次的2.0版本不再采用模拟点击的方式,直接在后端提交请求,实现了数量更精准的献祭。
2、兑换界面与泥潭原页面基本一致,仅将兑换按钮的文本修改成了“批量兑换”,方便区分脚本是否成功运行。
3、新增了提示文本,方便直观比较税前税后价。
已知BUG:因为浮点计算的问题,泥潭的计算公式在计算某些数值时会出现误差。例如兑换100旅程,实际应该消耗3500血液,但是泥潭的计算公式错误地计算成了3449。虽然无伤大雅,但是如果管理看到这里的话可以考虑修改一下计算公式,先将税率0.15放大100倍,计算完成后再截位,规避浮点计算,就不会出现这种问题。不过这跟咱的脚本没啥关系,咱们逃税只需要3400。

使用说明:最好的使用说明就是没有使用说明!看看这个界面,还需要我说明什么吗!只管放心大胆地填,逃税的事就交给脚本去执行!
万一被抓,逃税是脚本做的,关我周树人什么事?
PS:楼主的血液量较少,测试量不足,如果使用过程发现有什么BUG,不妨给楼主点个免费的评分补点血,才能更好地修BUG,这不是骗赞,真的不是骗赞!

逃税完成展示:



用了chatGPT重构了变量名并添加注释,方便有志之士复用,不得不说chatGPT在这方面真挺方便的,让我打那么老长一段变量名那可真是会要老命的
// ==UserScript==
// @name         批量血液献祭2.0
// @namespace    http://tampermonkey.net/
// @version      2.0
// @description替换原网页功能,批量血液献祭
// @match      https://www.gamemale.com/home.php?mod=spacecp&ac=credit&op=exchange
// @author       源子
// ==/UserScript==

(function() {
    'use strict';

    function showInfo(message) {
      console.log(message); // 输出到控制台
      showError(message);    // 在前端显示消息
    }

    // 获取表单元素
    const form = document.querySelector('#exchangeform'); // 兑换表单
    const submitButton = document.querySelector('#exchangesubmit_btn'); // 提交按钮
    const exchangeAmountInput = document.querySelector('#exchangeamount'); // 兑换数量输入框
    const toCreditsSelect = document.querySelector('#tocredits'); // 目标积分选择框
    const taxPercentDisplay = document.querySelector('#taxpercent'); // 显示原价、含税价和现价的区域
    const exchangedesamountInput = document.querySelector('#exchangedesamount'); // 现价显示框

    const TAX_RATE = 0.15; // 税率为 15%

    // 禁用网页自带的 exchangecalcredit 计算逻辑
    exchangeAmountInput.removeAttribute('onkeyup');
    toCreditsSelect.removeAttribute('onchange');

    // 设置提交按钮文本为“批量兑换”
    if (submitButton) {
      const buttonText = submitButton.querySelector('em');
      if (buttonText) {
            buttonText.textContent = "批量兑换";
      }
    }

    // 更新显示原价、含税价和现价的函数
    function updatePriceDisplay() {
      const exchangeAmount = parseInt(exchangeAmountInput.value) || 1;
      const selectedOption = toCreditsSelect.options;
      const ratio = parseFloat(selectedOption.getAttribute('ratio'));

      const originalPrice = exchangeAmount * ratio; // 原价
      const taxIncludedUnitPrice = Math.floor(ratio * (1 + TAX_RATE)); // 含税单价取整
      const finalPrice = Math.floor(originalPrice * (1 + TAX_RATE)); // 含税总价
      const roundedTotalPrice = taxIncludedUnitPrice * exchangeAmount; // 现价:含税单价的整数部分乘数量

      // 更新税率显示区域,显示原价、 泥潭含税价和逃税价
      taxPercentDisplay.textContent = `原价: ${originalPrice}, 泥潭含税价: ${finalPrice}, 逃税价: ${roundedTotalPrice}`;
      exchangedesamountInput.value = roundedTotalPrice;
    }

    // 添加监听器以在输入和选择变化时更新价格显示
    exchangeAmountInput.addEventListener('input', updatePriceDisplay);
    toCreditsSelect.addEventListener('change', updatePriceDisplay);

    // 替换提交按钮行为
    function replaceSubmitButton() {
      if (submitButton) {
            submitButton.onclick = (event) => {
                event.preventDefault(); // 阻止默认提交
                submitFormMultipleTimes(); // 调用自定义的提交函数
            };
            showInfo("兑换功能已升级为批量兑换");
      } else {
            console.warn("未找到提交按钮,检查选择器是否正确");
      }
    }

    // 多次提交
    async function submitFormMultipleTimes() {
      const repeatCount = parseInt(exchangeAmountInput.value) || 1;
      const actionUrl = form.action;
      const headers = {
            "User-Agent": "Mozilla/5.0",
            "Cookie": document.cookie
      };
      const exchangeAmount = parseInt(exchangeAmountInput.value) || 1;
      const totalExchangeAmount = exchangeAmount * repeatCount; // 总兑换量
      let successCount = 0; // 初始化成功次数计数器

      for (let i = 0; i < repeatCount; i++) {
            try {
                const formData = new FormData(form);
                formData.set('exchangeamount', 1); // 每次提交的 exchangeamount 值设为 1

                const response = await fetch(actionUrl, {
                  method: 'POST',
                  headers: headers,
                  body: formData,
                });
                if (!response.ok) {
                  console.error(`兑换失败:第${i + 1}次`);
                } else {
                  successCount++; // 增加成功计数
                  showInfo(`兑换成功:第${i + 1}次`);
                }
            } catch (error) {
                console.error(`兑换错误:第${i + 1}次`, error);
            }
      }

      // 延时 1 秒提示兑换总量、成功次数并刷新页面
      setTimeout(() => {
            alert(`兑换完成!成功次数/兑换量:${successCount}/${repeatCount},获得${toCreditsSelect.options.getAttribute('title')}:${successCount},消耗血液:${exchangedesamountInput.value}`);
            location.reload();
      }, 1000); // 延时 1 秒
    }


    // 初始化替换按钮
    replaceSubmitButton();
    // 初始化价格显示
    updatePriceDisplay();

})();

最后附上一个乞讨用的附件,走过路过不要错过~



凯诺斯 发表于 2024-11-4 14:07:47

批量血液献祭这个功能感觉很适合萌新惹{:6_169:}

大河内太 发表于 2024-11-4 14:12:10

谢谢 血液去哪里领.JPG
避税能省出好几个积分的血液来惹

yein_leaf 发表于 2024-11-4 14:15:13

反正我一直保持着能省一点是一点的原则,这属于是锦上添花了

毛茸茸兽兽 发表于 2024-11-4 14:18:21

狠狠泥潭的薅羊毛哇~

曜阳炎 发表于 2024-11-4 14:19:08

很好用,一点一点旅程兑换起来确实更划算……首先我得有那么多血液ヘ(;´Д`ヘ)所以我选择靠勋章回帖加旅程

水水水冘 发表于 2024-11-4 14:32:28

对于我这种农场主来说,血液随便消耗了QAQ

1017186309 发表于 2024-11-4 14:36:55

很不错东西惹,节约下很多的税收浪费

深暗幽狼 发表于 2024-11-4 14:40:05

这样兑换就简洁了,初版兑换时不小心输错过,还好血液多,无伤大雅。

2297988 发表于 2024-11-4 14:43:27

我一直都是手动一个个点的XD

娱乐法师火布偶 发表于 2024-11-4 14:47:21

现在基本上已经没有血液献祭的需求了,最多偶尔换一个灵魂

提尔特 发表于 2024-11-4 14:48:44

献祭类脚本我用的比较少需求也不大 都是手动点的…

饥渴难耐的G 发表于 2024-11-4 14:56:14

我为了避税都是一个个自己手打的

我们一起学狗叫 发表于 2024-11-4 14:58:24

谢谢大佬,比上一个版本更加简化了呢<(_ _)>

亚洛斯 发表于 2024-11-4 15:21:09

惹,很棒的功能更新惹,前天批量换100咒术等了好久才换完~

MakerLin 发表于 2024-11-4 15:23:33

很好的功能 让我的血液飞速下降:lol

cinder 发表于 2024-11-4 15:37:42

對新人友好,老鹹魚已經用不上了.
https://img.gamemale.com/album/202408/03/102140l525dr2fcjnwqdf6.gif.thumb.jpg

lhbb5874 发表于 2024-11-4 16:08:54

谢谢大佬,这个还蛮有用的,偷睡去了{:4_86:}

昵莓释巴 发表于 2024-11-4 16:40:50

好一个100倍无伤大雅哈哈哈

不是卖萌的基佬 发表于 2024-11-4 17:08:07

合理避税从此刻开始(*ˉ︶ˉ*)
页: [1] 2 3 4
查看完整版本: 【梅克军团】免操作避税神器,合理避税不求人!油猴批量血液献祭脚本2.0再升级!