赛尔号启航Pc

赛尔号启航Pc.

当前为 2023-05-28 提交的版本,查看 最新版本

// ==UserScript==
// @name            赛尔号启航Pc
// @name:en         赛尔号启航Pc
// @namespace       赛尔号启航Pc
// @version         1.0.2
// @description     赛尔号启航Pc.
// @description:en  helpersaiier
// @include         http://s.61.com/home
// @require         https://greasyfork.org/scripts/372672-everything-hook/code/Everything-Hook.js?version=881251
// @author          2942332601QQ
// @match           http://s.61.com/home
// @run-at          document-start
// @grant           none
// @license         GPL-3.0-or-later
// ==/UserScript==

(function () {
    'use strict';
    var SelfUid = ""
    var skillID = ""   //获取首发精灵skillID
    var myTeam = []  //获取精灵配置信息
    var myTeamDone = 0
    var rewrite = 0
    var CmdArr = []
    // fixMsg()
    // 创建一个 div
    var topWindow = window.top;
    //判断顶层body
    if (topWindow == window) {
        var div = document.createElement("div");


        div.style.position = "fixed";
        div.style.left = "0";
        div.style.top = "100px";
        div.style.width = "250px";
        div.style.height = "50%";
        div.style.backgroundColor = "lightblue";



        // 创建一个按钮
        var button1 = document.createElement("button");
        button1.innerHTML = "开启监听";
        button1.style.display = "block";
        button1.style.margin = "10px auto";
        button1.style.width = "100px";
        button1.style.height = "30px";
        // 在点击按钮时输出日志到文本框中
        button1.onclick = function () {
            if (rewrite == 0) {
                rewrite = 1
                fixMsg()
                logTextArea.value += "顺利开启,您可以进行功能操作了\n";

                button1.innerHTML = "关闭监听";
            } else if (rewrite == 1) {
                rewrite = 0
                backMSg()
                logTextArea.value += "顺利关闭,内存得到部分释放\n";
                button1.innerHTML = "开启监听";
            }

        };
        div.appendChild(button1);


        // 创建一个按钮
        var button = document.createElement("button");
        button.innerHTML = "一键刷资源";
        button.style.display = "block";
        button.style.margin = "10px auto";
        button.style.width = "100px";
        button.style.height = "30px";
        // 在点击按钮时输出日志到文本框中
        button.onclick = async function () {
            if (skillID == "") {
                alert("请先开启监听!调换首发精灵技能!")
                return
            }
            logTextArea.value += "开始刷皮皮第一层\n";
            while (true) {
                //查询轮盘
                await sendMsg(1176, { planetId: 1 })
                let reward = ""
                CmdArr.forEach(item => {
                    if (parseInt(Object.keys(item)[0]) == 1176) {
                        reward = JSON.parse(item["1176"]).reward
                    }
                })
                if (reward["1"] == undefined) {
                    logTextArea.value += "第" + 1 + "次奖励,继续皮皮星1\n";
                }
                else if (reward["1"] < 10) {
                    logTextArea.value += "第" + reward["1"] + "次奖励,继续皮皮星1\n";
                } else {
                    logTextArea.value += "第" + reward["1"] + "次奖励,已经刷完皮皮星1\n";
                    CmdArr = []
                    break
                }

                await getObjs(20001, 109, 1)
                await wait(200)
                CmdArr = []
            }
            await wait(200)
            logTextArea.value += "开始刷皮皮第二层\n";
            while (true) {
                //查询轮盘
                await sendMsg(1176, { planetId: 1 })
                let reward = ""
                CmdArr.forEach(item => {
                    if (parseInt(Object.keys(item)[0]) == 1176) {
                        reward = JSON.parse(item["1176"]).reward
                    }
                })
                if (reward["2"] == undefined) {
                    logTextArea.value += "第" + 1 + "次奖励,继续皮皮星2\n";
                }
                else if (reward["2"] < 10) {
                    logTextArea.value += "第" + reward["2"] + "次奖励,继续皮皮星2\n";
                } else {
                    logTextArea.value += "第" + reward["2"] + "次奖励,已经刷完皮皮星2\n";
                    CmdArr = []
                    break
                }
                await wait(200)

                await getObjs(20002, 87, 2)
                CmdArr = []
            }
            await wait(200)
            logTextArea.value += "开始刷皮皮第三层\n";
            while (true) {
                //查询轮盘
                await sendMsg(1176, { planetId: 1 })
                let reward = ""
                CmdArr.forEach(item => {
                    if (parseInt(Object.keys(item)[0]) == 1176) {
                        reward = JSON.parse(item["1176"]).reward
                    }
                })

                if (reward["3"] < 5) {
                    logTextArea.value += "第" + (reward["3"] + reward["4"]) + "次奖励,继续皮皮星3\n";
                    await getObjs(20003, 29, 3)

                } else if (reward["4"] < 5) {
                    logTextArea.value += "第" + (reward["3"] + reward["4"]) + "次奖励,继续皮皮星3\n";
                    await getObjs(20003, 29, 4)
                } else if (reward["3"] == undefined) {
                    await getObjs(20003, 29, 3)
                } else if (reward["4"] == undefined) {
                    await getObjs(20003, 29, 4)
                } else {
                    logTextArea.value += "第" + (reward["3"] + reward["4"]) + "次奖励,已经刷完皮皮星3\n";
                    CmdArr = []
                    await wait(200)
                    break
                }

                CmdArr = []
            }

            await wait(200)
            logTextArea.value += "开始刷水星第一层\n";
            while (true) {
                CmdArr = []
                //查询轮盘
                await sendMsg(1176, { planetId: 2 })
                let reward = ""
                CmdArr.forEach(item => {
                    if (parseInt(Object.keys(item)[0]) == 1176) {
                        reward = JSON.parse(item["1176"]).reward
                    }
                })
                if (reward["9"] == undefined) {
                    logTextArea.value += "第" + 1 + "次奖励,继续水星1\n";
                } else if (reward["9"] < 20) {
                    logTextArea.value += "第" + reward["9"] + "次奖励,继续水星1\n";
                } else {
                    logTextArea.value += "第" + reward["9"] + "次奖励,已经刷完水星1\n";
                    CmdArr = []
                    break
                }
                await wait(200)

                await getObjs(20004, 31, 9)
                CmdArr = []
            }
            await wait(200)
            logTextArea.value += "开始刷水星第二层\n";
            while (true) {
                CmdArr = []
                //查询轮盘
                await sendMsg(1176, { planetId: 2 })
                let reward = ""
                CmdArr.forEach(item => {
                    if (parseInt(Object.keys(item)[0]) == 1176) {
                        reward = JSON.parse(item["1176"]).reward
                    }
                })
                if (reward["10"] == undefined) {
                    logTextArea.value += "第" + 1 + "次奖励,继续水星2\n";
                } else if (reward["10"] < 10) {
                    logTextArea.value += "第" + reward["10"] + "次奖励,继续水星2\n";
                } else {
                    logTextArea.value += "第" + reward["10"] + "次奖励,已经刷完水星2\n";
                    CmdArr = []
                    break
                }
                await wait(200)
                await getObjs(20005, 31, 10)
                CmdArr = []
            }
            await wait(200)
            logTextArea.value += "开始刷水星第三层\n";
            while (true) {
                CmdArr = []
                //查询轮盘
                await sendMsg(1176, { planetId: 2 })
                let reward = ""
                CmdArr.forEach(item => {
                    if (parseInt(Object.keys(item)[0]) == 1176) {
                        reward = JSON.parse(item["1176"]).reward
                    }
                })

                if (reward["11"] == undefined) {
                    logTextArea.value += "第" + 1 + "次奖励,继续水星3\n";
                }

                else if (reward["11"] < 3) {
                    logTextArea.value += "第" + reward["11"] + "次奖励,继续水星3\n";
                } else {
                    logTextArea.value += "第" + reward["11"] + "次奖励,已经刷完水星3\n";
                    CmdArr = []
                    break
                }

                await getObjs(20006, 31, 11)
                CmdArr = []
                await wait(200)
            }


            await wait(200)
            logTextArea.value += "开始刷火星第一层\n";
            while (true) {
                CmdArr = []
                //查询轮盘
                await sendMsg(1176, { planetId: 3 })
                let reward = ""
                CmdArr.forEach(item => {
                    if (parseInt(Object.keys(item)[0]) == 1176) {
                        reward = JSON.parse(item["1176"]).reward
                    }
                })
                if (reward["12"] == undefined) {
                    logTextArea.value += "第" + 1 + "次奖励,继续火星1\n";
                } else if (reward["12"] < 10) {
                    logTextArea.value += "第" + reward["12"] + "次奖励,继续火星1\n";
                } else {
                    logTextArea.value += "第" + reward["12"] + "次奖励,已经刷完火星1\n";
                    CmdArr = []
                    break
                }
                await wait(200)

                await getObjs(20007, 9, 12)
                CmdArr = []
            }
            await wait(200)
            logTextArea.value += "开始刷火星第二层\n";
            while (true) {
                CmdArr = []
                //查询轮盘
                await sendMsg(1176, { planetId: 3 })
                let reward = ""
                CmdArr.forEach(item => {
                    if (parseInt(Object.keys(item)[0]) == 1176) {
                        reward = JSON.parse(item["1176"]).reward
                    }
                })
                if (reward["13"] == undefined) {
                    logTextArea.value += "第" + 1 + "次奖励,继续火星2\n";
                } else if (reward["13"] < 20) {
                    logTextArea.value += "第" + reward["13"] + "次奖励,继续火星2\n";
                } else {
                    logTextArea.value += "第" + reward["13"] + "次奖励,已经刷完火星2\n";
                    CmdArr = []
                    break
                }
                await wait(200)

                await getObjs(20008, 9, 13)
                CmdArr = []
            }
            await wait(200)
            logTextArea.value += "开始刷火星第三层\n";
            while (true) {
                CmdArr = []
                //查询轮盘
                await sendMsg(1176, { planetId: 3 })
                let reward = ""
                CmdArr.forEach(item => {
                    if (parseInt(Object.keys(item)[0]) == 1176) {
                        reward = JSON.parse(item["1176"]).reward
                    }
                })
                if (reward["14"] == undefined) {
                    logTextArea.value += "第" + 1 + "次奖励,继续火星2\n";
                } else if (reward["14"] < 3) {
                    logTextArea.value += "第" + reward["14"] + "次奖励,继续火星2\n";
                } else {
                    logTextArea.value += "第" + reward["14"] + "次奖励,已经刷完火星2\n";
                    CmdArr = []
                    break
                }
                await wait(200)

                await getObjs(20009, 9, 14)
                CmdArr = []
            }







            await wait(200)
            logTextArea.value += "开始刷云霄星第一层\n";
            while (true) {
                CmdArr = []
                //查询轮盘
                await sendMsg(1176, { planetId: 5 })
                let reward = ""
                CmdArr.forEach(item => {
                    if (parseInt(Object.keys(item)[0]) == 1176) {
                        reward = JSON.parse(item["1176"]).reward
                    }
                })
                if (reward["33"] == undefined) {
                    logTextArea.value += "第" + 1 + "次奖励,继续云霄星1\n";
                } else if (reward["33"] < 20) {
                    logTextArea.value += "第" + reward["33"] + "次奖励,继续云霄星1\n";
                } else {
                    logTextArea.value += "第" + reward["33"] + "次奖励,已经刷完云霄星1\n";
                    CmdArr = []
                    break
                }
                await wait(200)

                await getObjs(20015, 10, 33)
                CmdArr = []
            }
            await wait(200)
            logTextArea.value += "开始刷云霄星第二层\n";
            while (true) {
                CmdArr = []
                //查询轮盘
                await sendMsg(1176, { planetId: 5 })
                let reward = ""
                CmdArr.forEach(item => {
                    if (parseInt(Object.keys(item)[0]) == 1176) {
                        reward = JSON.parse(item["1176"]).reward
                    }
                })
                if (reward["34"] == undefined) {
                    logTextArea.value += "第" + 1 + "次奖励,继续云霄星2\n";
                } else if (reward["34"] < 10) {
                    logTextArea.value += "第" + reward["34"] + "次奖励,继续云霄星2\n";
                } else {
                    logTextArea.value += "第" + reward["34"] + "次奖励,已经刷完云霄星2\n";
                    CmdArr = []
                    break
                }
                await wait(200)
                await getObjs(20016, 9, 34)
                CmdArr = []
            }
            await wait(200)
            logTextArea.value += "开始刷云霄星第三层\n";
            while (true) {
                CmdArr = []
                //查询轮盘
                await sendMsg(1176, { planetId: 5 })
                let reward = ""
                CmdArr.forEach(item => {
                    if (parseInt(Object.keys(item)[0]) == 1176) {
                        reward = JSON.parse(item["1176"]).reward
                    }
                })
                if (reward["35"] == undefined) {
                    logTextArea.value += "第" + 1 + "次奖励,继续云霄星3\n";
                } else if (reward["35"] < 5) {
                    logTextArea.value += "第" + reward["35"] + "次奖励,继续云霄星3\n";
                } else {
                    logTextArea.value += "第" + reward["35"] + "次奖励,已经刷完云霄星3\n";
                    CmdArr = []
                    break
                }
                await wait(200)

                await getObjs(20017, 10, 35)
                CmdArr = []
            }


            await wait(200)
            logTextArea.value += "开始刷喷泉星第一层\n";
            while (true) {
                CmdArr = []
                //查询轮盘
                await sendMsg(1176, { planetId: 6 })
                let reward = ""
                CmdArr.forEach(item => {
                    if (parseInt(Object.keys(item)[0]) == 1176) {
                        reward = JSON.parse(item["1176"]).reward
                    }
                })
                if (reward["179"] == undefined) {
                    logTextArea.value += "第" + 1 + "次奖励,继续喷泉星1\n";
                } else if (reward["179"] < 10) {
                    logTextArea.value += "第" + reward["179"] + "次奖励,继续喷泉星1\n";
                } else {
                    logTextArea.value += "第" + reward["179"] + "次奖励,已经刷完喷泉星1\n";
                    CmdArr = []
                    break
                }

                await getObjs(20018, 9, 179)
                await wait(200)

                CmdArr = []
            }

            await wait(200)
            logTextArea.value += "开始刷喷泉星第二层\n";
            while (true) {
                CmdArr = []
                //查询轮盘
                await sendMsg(1176, { planetId: 6 })
                let reward = ""
                CmdArr.forEach(item => {
                    if (parseInt(Object.keys(item)[0]) == 1176) {
                        reward = JSON.parse(item["1176"]).reward
                    }
                })
                if (reward["60"] == undefined) {
                    logTextArea.value += "第" + 1 + "次奖励,继续喷泉星2\n";
                } else if (reward["60"] < 10) {
                    logTextArea.value += "第" + reward["60"] + "次奖励,继续喷泉星2\n";
                } else {
                    logTextArea.value += "第" + reward["60"] + "次奖励,已经刷完喷泉星2\n";
                    CmdArr = []

                    break
                }
                await getObjs(20020, 9, 60)
                CmdArr = []
                await wait(200)
            }




            await wait(200)
            logTextArea.value += "开始刷暗影星第一层\n";
            while (true) {
                CmdArr = []
                //查询轮盘
                await sendMsg(1176, { planetId: 8 })
                let reward = ""
                CmdArr.forEach(item => {
                    if (parseInt(Object.keys(item)[0]) == 1176) {
                        reward = JSON.parse(item["1176"]).reward
                    }
                })
                if (reward["66"] == undefined) {
                    logTextArea.value += "第" + 1 + "次奖励,继续暗影星1\n";
                } else if (reward["66"] < 20) {
                    logTextArea.value += "第" + reward["66"] + "次奖励,继续暗影星1\n";
                } else {
                    logTextArea.value += "第" + reward["66"] + "次奖励,已经刷完暗影星1\n";
                    CmdArr = []
                    break
                }
                await getObjs(20026, 43, 66)
                await wait(200)

                CmdArr = []
            }





















            console.log("一键刷资源")
        };
        div.appendChild(button);


        // 创建一个按钮
        var button2 = document.createElement("button");
        button2.innerHTML = "一键雇佣";
        button2.style.display = "block";
        button2.style.margin = "10px auto";
        button2.style.width = "100px";
        button2.style.height = "30px";
        // 在点击按钮时输出日志到文本框中
        button2.onclick = async function () {
            if (myTeam.length == 0 || skillID == "") {
                alert("请先开启监听!读取完精灵配置再来!并激活首发精灵的技能")
                return
            }
            SelfUid = prompt("请输入你的大号UID【保证大号小号在同一个战队】");
            console.log(SelfUid)
            let nowSkillId = skillID
            while (1) {
                CmdArr = []
                await sendMsg(10042, {
                    "friendPageNo": 1,
                    "friendPageSize": 1000,
                    "teamPageNo": 1,
                    "teamPageSize": 1000
                })
                let HireArr = []
                CmdArr.forEach(item => {
                    if (parseInt(Object.keys(item)[0]) == 10042) {
                        let teamHireList = JSON.parse(item["10042"]).teamHireList
                        teamHireList.forEach(item0 => {
                            if (item0.userId == parseInt(SelfUid)) {
                                console.log(item0)
                                HireArr.push(item0)
                            }
                        })
                    }
                })

                let doneGet = 0
                for (let index = 0; index < HireArr.length; index++) {
                    if (HireArr[index].petHireTimes < 10) {
                        doneGet = 1
                        logTextArea.value += "开始:" + HireArr[index].roleNick + "的第" + (index + 1) + "只精灵,雇佣次数:" + HireArr[index].petHireTimes + "\n";
                        let newTeamList = []

                        for (let index = 0; index < myTeam.length; index++) {
                            if(myTeam[index].indexOf("_")!=-1){
                                break
                            }else{
                                newTeamList.push(myTeam[index])
                            }
                        }

                        newTeamList.push(SelfUid + "_" + HireArr[index].type + "_" + HireArr[index].pos)



                        CmdArr = []
                        await sendMsg(10043, {
                            "type": HireArr[index].type,
                            "pos": HireArr[index].pos,
                            "targetUid": parseInt(SelfUid)
                        })
                        let goalPet
                        //取出雇佣目标精灵信息
                        CmdArr.forEach(item => {
                            if (parseInt(Object.keys(item)[0]) == 10043) {
                                goalPet = JSON.parse(item["10043"]).pet
                            }
                        })

                        console.log({
                            "levelId": 1,
                            "getTimeList": newTeamList,
                            "attachBattleSkill": [
                                {
                                    "petId": goalPet.petId,
                                    "level": goalPet.level,
                                    "skillList": goalPet.skills,
                                    "getTime": HireArr[index].getTime,
                                    "otherUid": parseInt(SelfUid),
                                    "type": HireArr[index].type
                                }
                            ]
                        })
                        await sendMsg(1026, {
                            "levelId": 1,
                            "getTimeList": newTeamList,
                            "attachBattleSkill": [
                                {
                                    "petId": goalPet.petId,
                                    "level": goalPet.level,
                                    "skillList": goalPet.skills,
                                    "getTime": HireArr[index].getTime,
                                    "otherUid": parseInt(SelfUid),
                                    "type": HireArr[index].type
                                }
                            ]
                        })


                        await sendMsg(1042, {
                            "groupId": "",
                            "battleType": 0
                        })


                        await sendMsg(1045, {
                            "data": null,
                            "groupId": "",
                            "opType": 5
                        });
                        CmdArr = []

                        await sendMsg(1057, {
                            "groupId": "",
                        });
                        CmdArr = []


                        await sendMsg(1045, {
                            opType: 1,
                            data: {
                                skillID: nowSkillId,
                            },
                            groupId: "",
                        });
                        CmdArr = []
                        logTextArea.value += "本次雇佣完毕!" + "\n";
                        console.log("打完了!")
                        await wait(100)
                        break
                    }

                }
                if (doneGet == 0) {
                    logTextArea.value += "雇佣完毕!!" + "\n";
                    return
                }
            }




        };
        div.appendChild(button2);









        // 创建一个文本框用于输出日志
        var logTextArea = document.createElement("textarea");
        logTextArea.style.display = "block";
        logTextArea.style.width = "90%";
        logTextArea.style.height = "210px";
        logTextArea.style.margin = "10px auto";
        div.appendChild(logTextArea);



        // 将 div 添加到页面中
        let bdTag = document.getElementsByTagName("html")[0]
        bdTag.appendChild(div);
    }


    async function getObjs(mapId, viewId, levelId) {
        await sendMsg(279, {})
        CmdArr = []

        await sendMsg(4354, { mapId: mapId, viewId: viewId })
        CmdArr = []


        await sendMsg(1172, {
            "levelId": levelId,
            "battleType": 3
        });
        CmdArr = []


        await sendMsg(1045, {
            "data": "",
            "groupId": "",
            "battleType": 5
        });
        CmdArr = []

        await sendMsg(1057, {
            "groupId": "",
        });
        CmdArr = []


        await sendMsg(1045, {
            opType: 1,
            data: {
                skillID: skillID,
            },
            groupId: "",
        });
        CmdArr = []

        console.log("打完了!")
    }


    function sendMsg(nowCmd, nowBody) {
        return new Promise((resolve) => {
            document.querySelector("iframe").contentWindow.GlobalSocket.PROTOCOL_SOCKET.send(
                nowCmd,
                nowBody
            );
            console.log("发送指令:" + nowCmd);

            async function checkCmd() {
                while (true) {
                    await new Promise((resolve) => setTimeout(resolve, 1));

                    let keysArr = []
                    CmdArr.forEach(item => {
                        keysArr.push(parseInt(Object.keys(item)[0]))
                    })
                    if (keysArr.indexOf(nowCmd) != -1) {
                        console.info("接收到了信息!" + nowCmd)
                        resolve();
                        break;
                    }
                }
            }

            checkCmd().then(resolve);
        });
    }





    function fixMsg() {
        // 保存原函数
        var originalCreateMsg = document.querySelector("iframe").contentWindow.SocketSeqMsgs.prototype.createMsg;

        // 重写createMsg方法
        document.querySelector("iframe").contentWindow.SocketSeqMsgs.prototype.createMsg = function (t, e) {
            // 执行原有的createMsg方法
            originalCreateMsg.call(this, t, e);

            // 获取需要的变量
            var s = this._tmpBytesArray[this._tmpBytesArray.length - 1];
            var raw = s.raw;
            var cmd = s.header.cmd;
            CmdArr.push({ [cmd]: raw })
            // 在这里可以对获取到的变量进行处理或者输出
            console.log("=======")
            console.log('接收cmd:', cmd);
            console.log('raw:', raw);
            try {
                if ((raw.indexOf("skills") != -1) && (raw.indexOf("subCmd") != -1) && (raw.indexOf("pet") != -1)) {
                    skillID = JSON.parse(raw).pet.skills[0]
                    logTextArea.value += "技能刷新完毕" + JSON.parse(raw).pet.nick + "==>技能读取完毕!!\n请确保精灵第一技能可以释放一次秒掉野怪\n";
                }
                if (raw.indexOf("defaultTeam") != -1) {
                    myTeam = JSON.parse(raw).value
                    console.log(myTeam)
                    logTextArea.value += "顺利获取精灵配置信息,可开始雇佣!\n";
                }

            } catch (e) {

            }

            console.log("=======")

        }
    }



    function backMSg() {
        // 保存原函数
        var originalCreateMsg = document.querySelector("iframe").contentWindow.SocketSeqMsgs.prototype.createMsg;
        document.querySelector("iframe").contentWindow.SocketSeqMsgs.prototype.createMsg = function (t, e) {
            // 执行原有的createMsg方法
            originalCreateMsg.call(this, t, e);

        }
    }

    function wait(ms) {
        return new Promise(resolve => setTimeout(() => resolve(), ms));
    };




    // Your code here...
})();