HWHPrestigeExt

HWH extension to do prestige quests

이 스크립트를 설치하려면 Tampermonkey, Greasemonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램을 설치해야 합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Userscripts와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 유저 스크립트 관리자 확장 프로그램이 필요합니다.

(이미 유저 스크립트 관리자가 설치되어 있습니다. 설치를 진행합니다!)

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

(이미 유저 스타일 관리자가 설치되어 있습니다. 설치를 진행합니다!)

// ==UserScript==
// @name			HWHPrestigeExt
// @name:en			HWHPrestigeExt
// @name:ru			HWHPrestigeExt
// @namespace		HWHPrestigeExt
// @version			0.2
// @description		HWH extension to do prestige quests
// @description:en	HWH extension to do prestige quests
// @description:ru	Расширение HWH для квестов престижа
// @author			vakorg
// @license 		Copyright vakorg
// @homepage		none
// @icon			https://zingery.ru/scripts/VaultBoyIco16.ico
// @icon64			https://zingery.ru/scripts/VaultBoyIco64.png
// @match			https://www.hero-wars.com/*
// @match			https://apps-1701433570146040.apps.fbsbx.com/*
// @run-at			document-start
// ==/UserScript==

(function () {

    if (!this.HWHClasses) {
		console.log('%cObject for extension not found', 'color: red');
		return;
	}

	console.log('%cStart Extension ' + GM_info.script.name + ', v' + GM_info.script.version + ' by ' + GM_info.script.author, 'color: red');
	const { addExtentionName } = HWHFuncs;
	addExtentionName(GM_info.script.name, GM_info.script.version, GM_info.script.author);

	const {
		setProgress,
		hideProgress,
		getSaveVal,
		setSaveVal,
		popup,
        I18N,
		Events,
	} = HWHFuncs;

Events.on('startGame', (r) => {
    const style = document.createElement('style');
    style.innerText = `.scriptMenu_dmkMissionButton > .PopUp_btnPlate {display: unset; height: unset;}`;
    document.head.appendChild(style);
});

let {buttons,i18nLangData} = HWHData;

let ruLang ={
    PRESTIGE_HUNT: 'Престиж',
    PRESTIGE_HUNT_TITLE: 'Сделать задания престижа',
	PRESTIGE_HUNT_SETUP: '⚙️',
    PRESTIGE_HUNT_SETUP_TITLE: 'Настройки престижа',

}
let enLang ={
    FRAGMENT_HUNT: 'Spend Stamina',

}
Object.assign(i18nLangData.ru, ruLang)
Object.assign(i18nLangData.en, enLang)
this.HWHData.i18nLangData = i18nLangData;

const PrestigeButton = {
    PrestigeButton: {
		isCombine: true,
		combineList: [
			{
				get name() { return I18N('PRESTIGE_HUNT'); },
				get title() { return I18N('PRESTIGE_HUNT_TITLE'); },
        		onClick: goPrestige,
				hide: false,
				color: 'orange'
			},
			{
        		get name() { return I18N('PRESTIGE_HUNT_SETUP'); },
				get title() { return I18N('PRESTIGE_HUNT_SETUP_TITLE'); },
        		onClick: setupPrestige,
				hide: false,
				color: 'orange'
			},
		]
}}

Object.assign(buttons,PrestigeButton)
this.HWHData.buttons = buttons;


function setupPrestige() {
		let fragment= new Prestige();
		fragment.setup();
}

function goPrestige() {
		let fragment= new Prestige();
		fragment.start();
}

//добавить галочку в "сделать всё"
const task = {
			name: 'gohuntFragment',
			label: I18N('PRESTIGE_HUNT'),
			checked: false
		}
const functions3 = {
		goPrestige
}

const {doYourBest} = HWHClasses;
const doIt = new doYourBest();
	let myfuncList=doIt.funcList
	myfuncList.splice (-3,0,task);
	let myfunctions = doIt.functions
	Object.assign(myfunctions, functions3)

	class extdoYourBest extends doYourBest {
		funcList = myfuncList
		functions = myfunctions
	}
this.HWHClasses.doYourBest = extdoYourBest;


class Prestige {


	prestigeheroTitanGift = false
	TitanArtifactLevelUp = false
    TitanArtifactLevelUpTitanId = 0
    TitanArtifactLevelUpSlotId = -1
    shopBuy = false
    shopBuySlot = 0
    shopBuyFragmentTitanArtifact = 0
    petlevelUpItem = false
    petlevelUpPetId = 0
    arenaAttack = false
    arenaAttackHeroes = ""
    arenaAttackPet = ""
    arenaAttackFavor = ""
    arenaAttackBunner = 0
	buyStamina = false
    questsFarm = false
updateVar(){
	this.TitanArtifactLevelUp = getSaveVal('prestigeTitanArtifactLevelUp', false)
    this.TitanArtifactLevelUpTitanId = getSaveVal('prestigeTitanArtifactLevelUpTitanId', 4020)
    this.TitanArtifactLevelUpSlotId = getSaveVal('prestigeTitanArtifactLevelUpSlotId', 1)
    this.shopBuy = getSaveVal('prestigeShopBuy', false)
    this.shopBuySlot = getSaveVal('prestigeShopBuySlot', 22)
    this.shopBuyFragmentTitanArtifact = getSaveVal('prestigeShopBuyFragmentTitanArtifact', 2003)
    this.petlevelUpItem = getSaveVal('prestigePetlevelUpItem', false)
    this.petlevelUpPetId = getSaveVal('prestigePetlevelUpPetId', 6008)
    this.arenaAttack = getSaveVal('prestigeArenaAttack', false)
    this.arenaAttackHeroes = getSaveVal('prestigearenaAttackHeroes', "64,13,71,35,70")
    this.arenaAttackPet = getSaveVal('prestigearenaAttackPet', "6008")
    this.arenaAttackFavor = getSaveVal('prestigearenaAttackFavor', "13,6003,35,6001,64,6005,70,6002,71,6008")
    this.arenaAttackBunner = getSaveVal('prestigearenaAttackBunner', "7")
    this.questsFarm = getSaveVal('prestigeQuestsFarm', true)
}
SaveVar(){
 setSaveVal('prestigeTitanArtifactLevelUp', this.TitanArtifactLevelUp)
	 setSaveVal('prestigeTitanArtifactLevelUpTitanId', this.TitanArtifactLevelUpTitanId)
	 setSaveVal('prestigeTitanArtifactLevelUpSlotId', this.TitanArtifactLevelUpSlotId)
	 setSaveVal('prestigeShopBuy', this.shopBuy)
	 setSaveVal('prestigeShopBuySlot', this.shopBuySlot)
	 setSaveVal('prestigeShopBuyFragmentTitanArtifact', this.shopBuyFragmentTitanArtifact)
	 setSaveVal('prestigePetlevelUpItem', this.petlevelUpItem)
	 setSaveVal('prestigePetlevelUpPetId', this.petlevelUpPetId)
	 setSaveVal('prestigeArenaAttack', this.arenaAttack)
	 setSaveVal('prestigeArenaAttackHeroes', this.arenaAttackHeroes)
	 setSaveVal('prestigeArenaAttackPet', this.arenaAttackPet)
	 setSaveVal('prestigeArenaAttackFavor', this.arenaAttackFavor)
	 setSaveVal('prestigeArenaAttackBunner', this.arenaAttackBunner)
	 setSaveVal('prestigeQuestsFarm', this.questsFarm)
}

async start() {
    this.updateVar()
    let sendQ = []
          const questGetAll = await Caller.send(['questGetAll']);
    		const questsNotFarm = questGetAll.filter((e) => e.state == 1);
     if(this.questsFarm){
        setProgress(I18N('questsFarm'));

		const questsFarm = questGetAll.filter((e) => e.state == 2);
		const IsActive = questsFarm.filter((e) => e.id == 20010000);
        const IsTitanit = questsFarm.filter((e) => e.id == 20010001);

		if (IsActive.length != 0){
		sendQ.push({
				name: 'quest_questsFarm',
				args: {
					questIds: [20010000]
				},
			});}
         	if (IsTitanit.length != 0){
		sendQ.push({
				name: 'quest_questsFarm',
				args: {
					questIds: [20010001]
				},
			});}
    }
    if(this.TitanArtifactLevelUp){
        setProgress(I18N('TitanArtifactLevelUp'));

        const IsTitanArtifact = questsNotFarm.filter((e) => [20000150, 20000151, 20000152, 20000153, 20000154].includes(e.id));
        if (IsTitanArtifact.length != 0){
             sendQ.push(
                 {
    "name": "titanArtifactLevelUp",
    "args": {
        "titanId": this.TitanArtifactLevelUpTitanId,
        "slotId": this.TitanArtifactLevelUpSlotId
    }
}
  )
        }
    }
     if(this.petlevelUpItem){
        setProgress(I18N('petlevelUpItem'));

  const pet_getAll = await Caller.send(['pet_getAll']);

const item = pet_getAll.find(obj => obj.id === this.petlevelUpPetId);
let minSlot = 0;
if (item && item.slots) {
    const values = Object.values(item.slots);

    if (values.length > 0) {
        minSlot = Math.min(...values);

    }
}
        const IsPet = questsNotFarm.filter((e) => [20000100, 20000101, 20000102, 20000103, 20000104].includes(e.id));
        if (IsPet.length != 0 & minSlot>0){
            sendQ.push(
                {
                    name: "pet_levelUpItem",
    "args": {
        "petId": this.petlevelUpPetId,
        "slot": minSlot,
        "paid": false
    }
                })
                sendQ.push(
                {
                    name: "pet_levelUpItem",
    "args": {
        "petId": this.petlevelUpPetId,
        "slot": minSlot,
        "paid": false
    }
                }
                    )
        }
    }

 if(this.shopBuy){
        setProgress(I18N('ShopBuy'));

        const IsShopBuy = questsNotFarm.filter((e) => [20000160, 20000161, 20000162, 20000163, 20000164].includes(e.id));
        if (IsShopBuy.length != 0){
            sendQ.push(
                {
                     "name": "shopBuy",
    "args": {
    "shopId": 13,
    "slot": +this.shopBuySlot,
    "cost": {
        "coin": {
            "18": 12
        }
    },
    "reward": {
        "fragmentTitanArtifact": {
            [this.shopBuyFragmentTitanArtifact]: 1
        }
    },
    "amount": 180
}}
                      )
        }
    }

     if(this.arenaAttack){
             setProgress(I18N('arenaAttack'));
          const ArenaEnemy = await Caller.send(['arenaFindEnemies']);
         let heros = this.arenaAttackHeroes.split(',');
const arr = this.arenaAttackFavor.split(",");
const Favor = {};

for (let i = 0; i < arr.length; i += 2) {
  Favor[arr[i]] = Number(arr[i + 1]);
}
          sendQ.push(
          {
        "name": "arenaAttack",
        "args": {
            "userId": ArenaEnemy[0].userId,
            "heroes": [
                heros[0],
                heros[1],
                heros[2],
                heros[3],
                heros[4]
            ],
            "pet": this.arenaAttackPet,
            "favor": Favor,
            "banners": [
                this.arenaAttackBunner
            ]
        }
     }
              )
     }
  if (sendQ.length != 0){
      const Res = await Caller.send(sendQ);
  }
}
async setup() {

    this.updateVar()
	let buttons0 = []
		 buttons0.push({msg: 'Сохранить', result: "1"})
	buttons0.push({msg: I18N('BTN_CANCEL'), result: false})
	//buttons0.push({result: false, isCancel: true})
	let checkbox = [
        	{
			name: 'questsFarm',
			label: 'questsFarm',
				checked: this.questsFarm
		},
		{
			name: 'TitanArtifactLevelUp',
			label: 'PRESTIGE_TitanArtifactLevelUp' + "\nTitanId:" + this.TitanArtifactLevelUpTitanId + "\nSlotId:" + this.TitanArtifactLevelUpSlotId,
				checked: this.TitanArtifactLevelUp
		},
		{
			name: 'shopBuy',
            	label: 'shopBuy' + "\nSlot:" + this.shopBuySlot + "\nFragmentTitanArtifact:" + this.shopBuyFragmentTitanArtifact,
				checked: this.shopBuy,
		},
        	{
			name: 'petlevelUpItem',
				label: 'petlevelUpItem' + "\npetlevelUpPetId:" + this.petlevelUpPetId,
				checked: this.petlevelUpItem,
		},
        	{
			name: 'arenaAttack',
			label: 'arenaAttack' + "\nHeroes:" + this.arenaAttackHeroes + "\nPet:" + this.arenaAttackPet + "\nFavor:" + this.arenaAttackFavor + "\nBunner:" + this.arenaAttackBunner,
				checked: this.arenaAttack,
		}
	]


     buttons0.push(
                {
                    msg: 'Титан лвл ап Артифакт ИД',
                    default: this.TitanArtifactLevelUpTitanId,
                    isInput: false,
                    result: 'TitanArtifactLevelUpTitanId',
                    color: 'green'
                },
            );

     buttons0.push(
                {
                    msg: 'prestigeTitanArtifactLevelUpSlotId',
                    default: this.TitanArtifactLevelUpSlotId,
                    isInput: false,
                    result: 'TitanArtifactLevelUpSlotId',
                    color: 'green'
                },
            );

     buttons0.push(
                {
                    msg: 'shopBuySlot',
                    default: this.shopBuySlot,
                    isInput: false,
                    result: 'shopBuySlot',
                    color: 'green'
                },
            );

     buttons0.push(
                {
                    msg: 'shopBuyFragmentTitanArtifact',
                    default: this.shopBuyFragmentTitanArtifact,
                    isInput: false,
                    result: 'shopBuyFragmentTitanArtifact',
                    color: 'green'
                },
            );

     buttons0.push(
                {
                    msg: 'petlevelUpPetId',
                    default: this.petlevelUpPetId,
                    isInput: false,
                    result: 'petlevelUpPetId',
                    color: 'green'
                },
            );

     buttons0.push(
                {
                    msg: 'arenaAttackHeroes',
                    default: this.arenaAttackHeroes,
                    isInput: false,
                    result: 'arenaAttackHeroes',
                    color: 'green'
                }
            );
         buttons0.push(
                {
                    msg: 'arenaAttackPet',
                    default: this.arenaAttackPet,
                    result: 'arenaAttackPet',
                    isInput: false,
                    color: 'green'
                }
            );     buttons0.push(
                {
                    msg: 'arenaAttackFavor',
                    default: this.arenaAttackFavor,
                    isInput: false,
                    result: 'arenaAttackFavor',
                    color: 'green'
                }
            );
         buttons0.push(
                {
                    msg: 'arenaAttackBunner',
                    default: this.arenaAttackBunner,
                    result: 'arenaAttackBunner',
                    isInput: false,
                    color: 'green'
                }
            );
            let answer = await popup.confirm("Настройки", buttons0,checkbox);
    	let chkcvar = popup.getCheckBoxes().find((e) => e.name === 'TitanArtifactLevelUp')?.checked
	this.TitanArtifactLevelUp = chkcvar
    	chkcvar = popup.getCheckBoxes().find((e) => e.name === 'shopBuy')?.checked
	this.shopBuy = chkcvar
    chkcvar = popup.getCheckBoxes().find((e) => e.name === 'petlevelUpItem')?.checked
	this.petlevelUpItem = chkcvar
    chkcvar = popup.getCheckBoxes().find((e) => e.name === 'arenaAttack')?.checked
	this.arenaAttack = chkcvar
        chkcvar = popup.getCheckBoxes().find((e) => e.name === 'questsFarm')?.checked
	this.questsFarm = chkcvar
 if (!answer) {
              return;
	}
    let editVarName = false

    let answer2 = false
 if (answer == 1) {this.SaveVar();
                  return;}
    else{
     editVarName = answer;
        let buttons1 = []
             buttons1.push(
                {
                    msg: editVarName,
                    default: this[editVarName],
                    isInput: true,
                    color: 'green'
                },
            );
        buttons1.push({msg: I18N('BTN_CANCEL'), result: false})
            answer2 = await popup.confirm("Изменить значение", buttons1);
    }

 if (!answer) {
              return;
	}

this[editVarName] = answer2;
this.SaveVar();
this.setup();


}

}

this.HWHClasses.Prestige = Prestige;
})();