您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
HV自动打怪脚本,初次使用,请先设置好选项
当前为
// ==UserScript== // @name hvAutoAttack // @name:zh-CN 【HV】打怪 // @name:zh-TW 【HV】打怪 // @author Dodying // @namespace https://github.com/dodying/UserJs // @supportURL https://github.com/dodying/UserJs/issues // @icon https://raw.githubusercontent.com/dodying/UserJs/master/Logo.png // @description HV auto attack script, for the first user, should configure before use it. // @description:zh-CN HV自动打怪脚本,初次使用,请先设置好选项 // @description:zh-TW HV自動打怪腳本,初次使用,請先設置好選項 // @include http://*hentaiverse.org/* // @exclude http://*hentaiverse.org/pages/showequip.php?* // @version 2.532 // @grant unsafeWindow // @run-at document-end // ==/UserScript== (function () { if (gE('form[name="ipb_login_form"]')) return; if (gE('img[src="http://ehgt.org/g/derpy.gif"]')) reload(); optionButton(); if (getValue('hvAAOption')) { g('option', getValue('hvAAOption', true)); if (g('option').version !== GM_info.script.version.substring(0, 4)) { alert('hvAutoAttack版本更新,请重新设置\r\n强烈推荐【重置设置】后再设置。'); gE('#hvAABox').style.display = 'block'; gE('.hvAAOptionRestore').focus(); return; } } else { alert('请设置hvAutoAttack'); gE('#hvAABox').style.display = 'block'; return; } if (g('option').version !== '2.53') alert('请仔细看完\n请仔细看完\n请仔细看完\n暑假搞了个小说下载脚本,后来想弄个漫画下载脚本的,虽然研究了一会,但太懒太麻烦,就放弃了。\n不过还是学到了一些,比如说图片的获取保存。\n重点来了,要自动答题,可以匹配图片的大小或是base64值来确定是哪张图片。\n各位网友有空请把【记录Riddle的图片地址与答案。】的开关开启,然后将记录的地址反馈到这里,我好方便写脚本。'); if (gE('#riddlecounter')) { //需要答题 riddleAlert(); //答题警报 } else if (gE('#togpane_log')) { //战斗中 g('attackStatus', (getValue('attackStatus') !== undefined) ? getValue('attackStatus') : g('option').attackStatus); g('runtime', 0); pauseButton(); statusButton(); if (g('option').reloader) reloader(); main(); } else { //非战斗 delValue(2); if (/^\?s=Battle&ss=ar/.test(location.search) && g('option').autoArena && (!g('option').stamina || parseInt(gE('.fd4>div').innerHTML.match(/\d+/) [0]) > parseInt(g('option').staminaValue))) { setTimeout(function () { autoArena(); }, g('option').autoArenaTime * 1000); } } }) (); function main() { //主程序 if (getValue('hvAADisabled')) { //如果禁用 document.title = 'hvAutoAttack暂停中'; gE('.clb>button').innerHTML = '继续'; return; } g('end', false); if (g('option').stamina && parseInt(gE('.fd4>div').innerHTML.match(/\d+/) [0]) < parseInt(g('option').staminaValue)) { gE('1001', 'id').click; return; } g('runtime', g('runtime') + 1); g('monsterAll', gE('div.btm1', 'all').length); var monsterDead = gE('img[src*="nbardead"]', 'all').length; g('monsterAlive', g('monsterAll') - monsterDead); g('bossAll', gE('div.btm2[style^="background:"]', 'all').length); var bossDead = gE('div.btm1[style*="opacity:"] div.btm2[style*="background:"]', 'all').length; g('bossAlive', g('bossAll') - bossDead); countRound(); //回合计数及自动前进并获取怪物总HP if (g('end')) return; if (getValue('monsterStatus')) { g('monsterStatus', getValue('monsterStatus', true)); } else { alert('请点击临时修复'); gE('#hvAABox').style.display = 'block'; gE('#hvAATab-Othcer').style.zIndex = 1; gE('#hvAAFix').focus(); } var bar = gE('.cwb2', 'all'); g('hp', bar[0].offsetWidth / 120); g('mp', bar[1].offsetWidth / 120); g('sp', bar[2].offsetWidth / 120); g('oc', parseInt(gE('.cwbt2').innerText)); battleInfo(); //战斗战况 countMonsterHP(); //统计怪物血量 if (g('option').delayAlert) { g('delayAlert', setTimeout(function () { otherAlert('default', 3); }, g('option').delayAlertTime * 1000)); } if (g('option').delayReload) { g('delayReload', setTimeout(function () { reload(); }, g('option').delayReloadTime * 1000)); } if (gE('#ikey_p')) autoUseGem(); //自动使用宝石 if (g('end')) return; deadSoon(); //自动回血回魔 if (g('end')) return; if (g('option').scroll && g('roundNow') >= g('option').scrollRound && g('option') ['scrollRoundType_' + g('roundType')]) autoUseScroll(); //自动使用卷轴 if (g('end')) return; if (g('option').buffSkill) autoUseBuffSkill(); //自动使用药水、施法增益技能 if (g('end')) return; if (g('option').infusion && g('roundNow') >= g('option').infusionRound && g('option') ['infusionRoundType_' + g('roundType')]) autoUseInfusions(); //自动使用魔药 if (g('end')) return; if (g('option').debuffSkill && ((g('bossAlive') > 0 && g('option').debuffSkillBoss) || g('option').debuffSkillAll)) autoUseDeSkill(); //自动施法De技能 if (g('end')) return; autoAttack(); //自动打怪 if (g('end')) return; } function optionButton() { //配置 var globalStyle = cE('style'); globalStyle.innerHTML = '' + '.csp {height:auto!important;}' + '#hvAABox {font-size:12pt!important;}' + '#hvAABox .hvAATablist{position:relative;left:14px;}' + '#hvAABox .hvAATab {position:absolute;width:605px;height:400px;left:36px;padding:15px;border:1px solid #91a7b4;border-radius:3px;box-shadow:0 2px 3px rgba(0,0,0,0.1);font-size:1.2em;line-height:1.5em;color:#666;background:#fff;overflow:hidden;}' + '#hvAABox *:target {z-index:1!important;}' + '#hvAABox .hvAATabmenu {position:absolute;left:-9px;}' + '#hvAABox .hvAATabmenu span a {display:block;padding:5px 10px;margin:0 10px 0 0;border:1px solid #91a7b4;border-radius:5px 0 0 5px;background:#e3f1f8;color:black;text-decoration:none;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;}' + '#hvAABox .hvAATabmenu span:hover {z-index:999999!important;left:-5px;position:relative;}' + '#hvAABox input[type=text] {width:24px;}' + '#hvAABox label{cursor:pointer;}' + '#hvAABox .hvAACenter {text-align:center;}' + '#hvAABox .hvAASeparate {height:1px;background-color:black;}' + '#hvAAOptionBoxButton {position:relative;top:443px;}' + '#hvAABox .hvAATitle {font-weight:bolder;font-size:larger;text-align:center;}' + 'div.monsterHp {z-index:10;position:absolute;top:-1px;width:120px;text-align:center;font-size:8pt;font-weight:bolder;color:yellow;text-shadow:-1px -1px 0 Black,1px -1px 0 Black,-1px 1px 0 Black,1px 1px 0 Black;}' + 'button {border-style:solid;border-color:gray;}' + '.hvAANew {width:25px;height:25px;float:left;background:transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAMCAYAAACX8hZLAAAAcElEQVQ4jbVRSQ4AIQjz/59mTiZIF3twmnCwFAq4FkeFXM+5vCzohYxjPMtfxS8CN6iqQ7TfE0wrODxVbzJNgoaTo4CmbBO1ZWICouQ0DHaL259MEzaU+w8pZOdSjcUgaPJDHCbO0A2kuAiuwPGQ+wBms12x8HExTwAAAABJRU5ErkJggg==) no-repeat;background-position:center;}'; gE('head').appendChild(globalStyle); var optionButton = cE('div'); optionButton.id = 'hvAAButton'; optionButton.style = 'top:4px;left:' + (gE('.stuffbox').offsetWidth - 24 - 50) + 'px;position:absolute;z-index:9999;cursor:pointer;background-color:#EDEBDF'; optionButton.innerHTML = '<img src=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAADi0lEQVRIiZVWPYgUZxj+dvGEk7vsNdPYCMul2J15n+d991PIMkWmOEyMyRW2FoJIUojYp5ADFbZJkyISY3EqKGpgz+Ma4bqrUojICaIsKGIXSSJcsZuD3RT3zWZucquXDwYG5n2f9/d5vnFuHwfAZySfAXgN4DXJzTiOj+3H90OnkmXZAe/9FMm3JJ8AuBGepyRfle2yLDvgnKt8EDVJkq8B3DGzjve+1m63p0n2AVzJbUh2SG455yre+5qZ/aCq983sxMfATwHYJvlCVYckHwFYVdURgO8LAS6RHJJcM7N1VR0CeE5yAGBxT3AR+QrA3wA20tQOq+pFkgOS90Tk85J51Xs9qaorqjoAcC6KohmSGyQHcRx/kbdv7AHgDskXaWqH0zSddc5Voyia2SOXapqmswsLvpam6ez8/Pwn+YcoimYAvARw04XZ5N8qZtZR1aGqXnTOVSd0cRd42U5EzqvqSFWX2u32tPd+yjnnXNiCGslHJAf7ybwM7r2vAdgWkYdZls157w+NK/DeT7Xb7WkAqyTvlZHjOD5oxgtmtqrKLsmze1VJsquqKwsLO9vnnKvkJHpLsq+qo/JAd8BtneTvqvqTiPwoIu9EZKUUpGpmi2Y2UtU+yTdJkhx1JJ8FEl0pruK/TrwA4F2r1WrkgI1G4wjJP0XkdLF9WaZzZnZZVa8GMj5xgf43JvXczFZbLb1ebgnJn0nenjQbEVkG0JsUYOykyi6Aa+XoQTJuTRr8OADJzVBOh+SlckYkz5L8Q0TquXOj0fhURN6r6pkSeAXAUsDaJPnYxXF8jOQrklskh97ryZJTVURWAPwF4DqAX0TkvRl/zTKdK2aeJMnxICFbAHrNZtOKVVdIrrVa2t1jz6sicprkbQC3VPVMGTzMpQvgQY63i8lBFddVdVCk/6TZlMFzopFci+P44H+YHCR3CODc/wUvDPY7ksMg9buZrKr3ATwvyoT3vrafzPP3er1eA9Azs7tjJhcqOBHkeSOKohkROR9K7prZYqnnlSRJjofhb4vIt/V6vUbyN1Xtt1qtb1zpZqs45xyAxXAnvCQ5FJGHqrpiZiMzu5xnHlZxCOABybXw3gvgp/Zq3/gA+BLATVVdyrJsbods2lfVq7lN4crMtapjZndD5pPBixWFLTgU7uQ3AJ6KyLKILAdy9sp25bZMBC//JSRJcjQIYg9Aj+TjZrNp+/mb+Ad711sdZZ1k/QAAAABJRU5ErkJggg==></img>'; optionButton.onclick = function () { gE('#hvAABox').style.display = (gE('#hvAABox').style.display === 'none') ? 'block' : 'none'; } gE('body').appendChild(optionButton); var optionBox = cE('div'); optionBox.id = 'hvAABox'; optionBox.style = 'z-index:9999;width:700px;height:560px;display:none;position:absolute;left:' + (gE('body').offsetWidth / 2 - 350) + 'px;top:50px;text-align:left;background-color:white;border-color:black;border-style:solid;'; optionBox.innerHTML = '' + '<h1 class="hvAACenter">hvAutoAttack设置<button class="hvAAOptionRestore">重置设置</button></h1><div class="hvAATablist">' + '<div class="hvAATabmenu"><span><a href="#hvAATab-Main">主要选项</a></span><span><a href="#hvAATab-Self">对自身技能</a></span><span><a href="#hvAATab-Debuff">De技能</a></span><span><a href="#hvAATab-Special">特殊技能</a></span><span><a href="#hvAATab-Scroll">卷轴</a></span><span><a href="#hvAATab-Infusion">魔药</a></span><span><a href="#hvAATab-Weight">权重规则</a></span><span><a href="#hvAATab-Other">其他</a></span></div>' + '<div id="hvAATab-Main"class="hvAATab"style="z-index:1;"><div class="hvAACenter"title="1.使用宝石回复\n2.使用(技能、)Potion药水回复\n3.使用Elixir药水回复"><span style="color:green;">HP:1.<input name="hp1"placeholder="50"type="text">% 2.<input name="hp2"placeholder="50"type="text">% 3.<input name="hp3"placeholder="5"type="text">% </span><br><span style="color:blue;">MP:1.<input name="mp1"placeholder="70"type="text">% 2.<input name="mp2"placeholder="10"type="text">% 3.<input name="mp3"placeholder="5"type="text">% </span><br><span style="color:red;">SP:1.<input name="sp1"placeholder="75"type="text">% 2.<input name="sp2"placeholder="50"type="text">% 3.<input name="sp3"placeholder="5"type="text">% </span><br><input id="lastElixir"type="checkbox"><label for="lastElixir">当技能与药水CD时,使用Last Elixir。</div><div id="attackStatus"class="hvAACenter"style="color:red;"><b>*攻击模式</b>:<input type="radio"id="aS0"name="attackStatus"value="0"><label for="aS0">物理</label><input type="radio"id="aS1"name="attackStatus"value="1"><label for="aS1">火</label><input type="radio"id="aS2"name="attackStatus"value="2"><label for="aS2">冰</label><input type="radio"id="aS3"name="attackStatus"value="3"><label for="aS3">雷</label><input type="radio"id="aS4"name="attackStatus"value="4"><label for="aS4">风</label><input type="radio"id="aS5"name="attackStatus"value="5"><label for="aS5">圣</label><input type="radio"id="aS6"name="attackStatus"value="6"><label for="aS6">暗</label></div><div><b>技能施放条件</b>:中级:怪物存活数≥<input name="middleSkill"placeholder="3"type="text">;高级:怪物存活数≥<input name="highSkill"placeholder="5"type="text">。</div><div><input id="spiritStance"type="checkbox"><label for="spiritStance">Overcharge≥<input name="spiritStance_oc"placeholder="50"type="text">%后,开启Spirit Stance。</label></div><div title="防止脚本莫名暂停"><input id="delayAlert"type="checkbox"><label for="delayAlert">页面停留<input name="delayAlertTime"placeholder="10"type="text">秒后,<b>警报</b>;</label><input id="delayReload"type="checkbox"><label for="delayReload">页面停留<input name="delayReloadTime"placeholder="15"type="text">秒后,<b>刷新页面</b>。</label></div><div><input id="riddleAnswer"type="checkbox"><label for="riddleAnswer">当【小马】答题时间≤<input name="riddleAnswerTime"placeholder="3"type="text">秒,如果输入框为空则<b>随机</b>生成答案并提交,否则直接提交。</label></div><div><input id="stamina"type="checkbox"><label for="stamina">当【Stamina】<<input name="staminaValue"placeholder="10"type="text">时,自动逃跑。</label></div><div><div class="hvAANew"></div><input id="answerCount"type="checkbox"><label for="answerCount">记录Riddle的图片地址与答案。</label></div><div><div class="hvAANew"></div><input id="autoArena"type="checkbox"><label for="autoArena">在竞技场页面停留<input name="autoArenaTime"placeholder="120"type="text"></input>秒后,自动开始竞技场。</label></div><div><div class="hvAANew"></div><input id="reloader"type="checkbox"><label for="reloader">开启内置<b><a href="https://forums.e-hentai.org/index.php?showtopic=65126&st=2660&p=4384894&#entry4384894"target="_blank"title="感谢网友【zsp40088】提出">Reloader</a>模式</b></label></div></div>' + '<div id="hvAATab-Self"class="hvAATab"><input type="checkbox"id="buffSkill"><label for="buffSkill"><span class="hvAATitle">对自身技能</span></label><br>施放条件(有一个成立就行):<br>1、总回合数≥<input name="buffSkillAllRound"placeholder="12"type="text">。2、存活≥<input name="buffSkillBoss"placeholder="1"type="text">只Boss。3、遭遇战中,存在≥<input name="buffSkillMonster"placeholder="6"type="text">只怪物。<br><b>增益技能</b>(Buff不存在就施放的技能,按【施放顺序】排序):<br><input type="checkbox"id="buffSkill_HD"><label for="buffSkill_HD">Health Draught</label><input type="checkbox"id="buffSkill_MD"><label for="buffSkill_MD">Mana Draught</label><input type="checkbox"id="buffSkill_SD"><label for="buffSkill_SD">Spirit Draught</label><br><input type="checkbox"id="buffSkill_Pr"><label for="buffSkill_Pr">Protection</label><input type="checkbox"id="buffSkill_SL"><label for="buffSkill_SL">Spark of Life</label><input type="checkbox"id="buffSkill_SS"><label for="buffSkill_SS">Spirit Shield</label><input type="checkbox"id="buffSkill_Ha"><label for="buffSkill_Ha">Haste</label><br><input type="checkbox"id="buffSkill_AF"><label for="buffSkill_AF">Arcane Focus</label><input type="checkbox"id="buffSkill_He"><label for="buffSkill_He">Heartseeker</label><input type="checkbox"id="buffSkill_Re"><label for="buffSkill_Re">Regen</label><input type="checkbox"id="buffSkill_SV"><label for="buffSkill_SV">Shadow Veil</label><input type="checkbox"id="buffSkill_Ab"><label for="buffSkill_Ab">Absorb</label><div></div>当<b>获得Channel时</b>,即施法只需1点MP,<br><b>先ReBuff</b>:buff存在≤<input name="channelReBuff"placeholder="5"type="text">回合时,重新使用该技能。<br><b>再施放Channel技能</b>(按【施放顺序】排序):<br><input type="checkbox"id="channelSkill_Pr"><label for="channelSkill_Pr">Protection</label><input type="checkbox"id="channelSkill_SL"><label for="channelSkill_SL">Spark of Life</label><input type="checkbox"id="channelSkill_SS"><label for="channelSkill_SS">Spirit Shield</label><input type="checkbox"id="channelSkill_Ha"><label for="channelSkill_Ha">Haste</label><br><input type="checkbox"id="channelSkill_AF"><label for="channelSkill_AF">Arcane Focus</label><input type="checkbox"id="channelSkill_He"><label for="channelSkill_He">Heartseeker</label><input type="checkbox"id="channelSkill_Re"><label for="channelSkill_Re">Regen</label><input type="checkbox"id="channelSkill_SV"><label for="channelSkill_SV">Shadow Veil</label><input type="checkbox"id="channelSkill_Ab"><label for="channelSkill_Ab">Absorb</label></div>' + '<div id="hvAATab-Debuff"class="hvAATab"><input type="checkbox"id="debuffSkill"><label for="debuffSkill"><span class="hvAATitle">De技能</span>(按【施放顺序】排序,模式优先度1>2):</label><br><input type="checkbox"id="debuffSkillBoss"><label for="debuffSkillBoss">模式1、<b>只对Boss施放</b>:</label><br><input type="checkbox"id="debuffSkillBoss_Im"><label for="debuffSkillBoss_Im">Imperil</label><input type="checkbox"id="debuffSkillBoss_MN"><label for="debuffSkillBoss_MN">MagNet</label><input type="checkbox"id="debuffSkillBoss_Si"><label for="debuffSkillBoss_Si">Silence</label><input type="checkbox"id="debuffSkillBoss_Dr"><label for="debuffSkillBoss_Dr">Drain</label><input type="checkbox"id="debuffSkillBoss_We"><label for="debuffSkillBoss_We">Weaken</label><input type="checkbox"id="debuffSkillBoss_Co"><label for="debuffSkillBoss_Co">Confuse</label><br>存活≥<input name="debuffSkillBossCount"placeholder="5"type="text">只怪物时,施放<input type="checkbox"id="debuffSkillBoss_Sle"><label for="debuffSkillBoss_Sle">Sleep</label><input type="checkbox"id="debuffSkillBoss_Bl"><label for="debuffSkillBoss_Bl">Blind</label><input type="checkbox"id="debuffSkillBoss_Slo"><label for="debuffSkillBoss_Slo">Slow</label><br><input type="checkbox"id="debuffSkillAll"><label for="debuffSkillAll"><b>模式2、对所有怪施放</b>:</label><br><input type="checkbox"id="debuffSkillAll_Im"><label for="debuffSkillAll_Im">Imperil</label><input type="checkbox"id="debuffSkillAll_MN"><label for="debuffSkillAll_MN">MagNet</label><input type="checkbox"id="debuffSkillAll_Si"><label for="debuffSkillAll_Si">Silence</label><input type="checkbox"id="debuffSkillAll_Dr"><label for="debuffSkillAll_Dr">Drain</label><input type="checkbox"id="debuffSkillAll_We"><label for="debuffSkillAll_We">Weaken</label><input type="checkbox"id="debuffSkillAll_Co"><label for="debuffSkillAll_Co">Confuse</label></div>' + '<div id="hvAATab-Special"class="hvAATab"><input id="specialSkill"type="checkbox"><label for="specialSkill"><span class="hvAATitle">特殊技能</span>:</label><br><input id="specialSkill_OFC"type="checkbox"><label for="specialSkill_OFC">Orbital Friendship Cannon:当存在≥<input name="specialSkillMonster_OFC"placeholder="8"type="text">只怪兽或存在≥<input name="specialSkillBoss_OFC"placeholder="1"type="text">Boss,使用该技能。</label><br><input id="specialSkill_FUS"type="checkbox"><label for="specialSkill_FUS">FUS RO DAH(跪求元素ID):当存在≥<input name="specialSkillMonster_FUS"placeholder="8"type="text">只怪兽或存在≥<input name="specialSkillBoss_FUS"placeholder="1"type="text">Boss,使用该技能。</label></div>' + '<div id="hvAATab-Scroll"class="hvAATab"><input type="checkbox"id="scroll"><label for="scroll"><span class="hvAATitle">使用卷轴</span></label><br>战役模式:<input type="checkbox"id="scrollRoundType_ar"><label for="scrollRoundType_ar">竞技场</label><input type="checkbox"id="scrollRoundType_rb"><label for="scrollRoundType_rb">浴血擂台</label><input type="checkbox"id="scrollRoundType_gr"><label for="scrollRoundType_gr">压榨界</label><input type="checkbox"id="scrollRoundType_iw"><label for="scrollRoundType_iw">物品界</label><input type="checkbox"id="scrollRoundType_ba"><label for="scrollRoundType_ba">遭遇战</label><br>总体条件:当前回合数≥<input name="scrollNowRound"placeholder="100"type="text">。<br><input id="scrollFirst"type="checkbox"><label for="scrollFirst">存在技能生成的Buff时,仍然使用卷轴。</label><br><input type="checkbox"id="scroll_Go"><label for="scroll_Go">Scroll of the Gods 当前回合数≥<input name="scrollRound_Go"placeholder="0"type="text"></label><br><input type="checkbox"id="scroll_Av"><label for="scroll_Av">Scroll of the Avatar 当前回合数≥<input name="scrollRound_Av"placeholder="0"type="text"></label><br><input type="checkbox"id="scroll_Pr"><label for="scroll_Pr">Scroll of Protection 当前回合数≥<input name="scrollRound_Pr"placeholder="0"type="text"></label><br><input type="checkbox"id="scroll_Sw"><label for="scroll_Sw">Scroll of Swiftness 当前回合数≥<input name="scrollRound_Sw"placeholder="0"type="text"></label><br><input type="checkbox"id="scroll_Li"><label for="scroll_Li">Scroll of Life 当前回合数≥<input name="scrollRound_Li"placeholder="0"type="text"></label><br><input type="checkbox"id="scroll_Sh"><label for="scroll_Sh">Scroll of Shadows 当前回合数≥<input name="scrollRound_Sh"placeholder="0"type="text"></label><br><input type="checkbox"id="scroll_Ab"><label for="scroll_Ab">Scroll of Absorption 当前回合数≥<input name="scrollRound_Ab"placeholder="0"type="text"></label></div>' + '<div id="hvAATab-Infusion"class="hvAATab"><input type="checkbox"id="infusion"><label for="infusion"><span class="hvAATitle">使用魔药:</span></label><select name="infusionStatus"><option value="1">Infusion of Flames</option><option value="2">Infusion of Frost</option><option value="3">Infusion of Lightning</option><option value="4">Infusion of Storms</option><option value="5">Infusion of Divinity</option><option value="6">Infusion of Darkness</option></select><br>战役模式:<input type="checkbox"id="infusionRoundType_ar"><label for="infusionRoundType_ar">竞技场</label><input type="checkbox"id="infusionRoundType_rb"><label for="infusionRoundType_rb">浴血擂台</label><input type="checkbox"id="infusionRoundType_gr"><label for="infusionRoundType_gr">压榨界</label><input type="checkbox"id="infusionRoundType_iw"><label for="infusionRoundType_iw">物品界</label><input type="checkbox"id="infusionRoundType_ba"><label for="infusionRoundType_ba">遭遇战</label><br>使用条件:当前回合数≥<input name="infusionRound"placeholder="100"type="text">。</div>' + '<div id="hvAATab-Weight"class="hvAATab hvAACenter"><span class="hvAATitle">权重规则</span> <a href="https://github.com/dodying/UserJs/blob/master/HentaiVerse/hvAutoAttack/README.md#权重规则"target="_blank">示例</a><br>1、每回合计算怪物当前血量,血量最低的设置初始血量为10,其他怪物为当前血量倍数*10<br>2、初始权重与下述各Buff权重相加<br>Sleep:<input name="weight_Sle"placeholder="+5"type="text"> Blind:<input name="weight_Bl"placeholder="+3"type="text"> Slow:<input name="weight_Slo"placeholder="+3"type="text"> Imperil:<input name="weight_Im"placeholder="-5"type="text"> Coalesced Mana:<input name="weight_CM"placeholder="-5"type="text"><br>MagNet:<input name="weight_MN"placeholder="-4"type="text"> Silence:<input name="weight_Si"placeholder="-4"type="text"> Drain:<input name="weight_Dr"placeholder="-4"type="text"> Weaken:<input name="weight_We"placeholder="-4"type="text"> Confuse:<input name="weight_Co"placeholder="-1"type="text"><br>3、计算出最终权重,攻击权重最小的怪物<br>4、如果你对各Buff权重有特别见解,请务必<a href="https://github.com/dodying/UserJs/issues/2"target="_blank">告诉我</a></div>' + '<div id="hvAATab-Other"class="hvAATab"><span>反馈:<a href="https://github.com/dodying/UserJs/issues/"target="_blank">GitHub</a>或<a href="https://greasyfork.org/scripts/18482/feedback"target="_blank">GreasyFork</a>或<a href="http://e-hentai.org/dmspublic/karma.php?u=2565471"target="_blank">+K</a> </span><div class="hvAASeparate"></div><div class="hvAACenter"><span class="hvAATitle">当前状况</span>:<br>如果脚本长期暂停且网络无问题,请点击【临时修复】<br>战役模式:<select class="hvAADebug"name="roundType"><option></option><option value="ar">竞技场</option><option value="rb">浴血擂台</option><option value="gr">压榨界</option><option value="iw">物品界</option><option value="ba">遭遇战</option></select><br>当前回合:<input name="roundNow"class="hvAADebug"type="text"placeholder="1"> 总回合:<input name="roundAll"class="hvAADebug"type="text"placeholder="1"><br><b>各怪物及状况</b>:<div id="hvAAFixMonster"></div><button id="hvAAFix">临时修复</button></div></div>' + '</div><div id="hvAAOptionBoxButton"class="hvAACenter"><button id="optionApply">确认</button> <button id="optionCancel">取消</button></div>'; gE('.hvAAOptionRestore', optionBox).onclick = function () { if (!confirm('是否继续,此操作无法反悔')) return; delValue('hvAAOption'); reload(); } if (getValue('hvAAOption')) { var _option = getValue('hvAAOption', true); var inputs = gE('input,select', 'all', optionBox); for (var i = 0; i < inputs.length; i = i + 1) { if (inputs[i].className === 'hvAADebug' && getValue(inputs[i].name)) { inputs[i].value = getValue(inputs[i].name); } else if (_option[inputs[i].name] || _option[inputs[i].id]) { if (inputs[i].type === 'text' || inputs[i].type === 'select-one') { inputs[i].value = _option[inputs[i].name]; } else if (inputs[i].type === 'checkbox') { inputs[i].checked = _option[inputs[i].id]; } else if (inputs[i].type === 'radio') { (_option[inputs[i].name] === inputs[i].value) ? inputs[i].checked = true : inputs[i].checked = false; } } } } if (gE('#togpane_log') && getValue('monsterStatus')) { var monsterStatus = getValue('monsterStatus', true); for (var i = 0; i < monsterStatus.length; i = i + 1) { var span = cE('span'); span.innerHTML = ' id:' + monsterStatus[i].id + ' 总HP:<input name="monsterStatus_' + i + '_HP"class="hvAADebug"type="text"style="width:60px;">'; if (i % 2 === 1) span.innerHTML += '<br>'; gE('input', span).value = monsterStatus[i].hp; gE('#hvAAFixMonster', optionBox).appendChild(span); } } gE('#hvAAFix', optionBox).onclick = function () { if (confirm('注意,修复只是临时作用使脚本能够运行!\n如果脚本能够继续运行请按取消!\n是否继续?')) { var inputs = gE('.hvAADebug[name^="round"]', 'all', optionBox); for (var i = 0; i < inputs.length; i = i + 1) { setValue(inputs[i].name, inputs[i].value || inputs[i].placeholder); } var monsterStatus = new Array(); var inputs = gE('#hvAAFixMonster input.hvAADebug', 'all', optionBox); for (var i = 0; i < gE('div.btm1', 'all').length; i = i + 1) { monsterStatus.push({ 'id': i + 1, 'hp': (inputs[i]) ? inputs[i].value : '100000' }); } setValue('monsterStatus', monsterStatus); reload(); } } gE('#optionApply', optionBox).onclick = function () { if (!gE('input[name=attackStatus]:checked', optionBox)) { alert('请选择攻击模式'); gE('#attackStatus', optionBox).style.border = '1px solid'; setTimeout(function () { gE('#attackStatus', optionBox).style.border = ''; }, 0.5 * 1000); return; } var _option = new Object(); _option.version = GM_info.script.version.substring(0, 4); var inputs = gE('input,select', 'all', optionBox); for (var i = 0; i < inputs.length; i = i + 1) { if (inputs[i].className === 'hvAADebug') continue; if (inputs[i].type === 'text' || inputs[i].type === 'select-one') { _option[inputs[i].name] = inputs[i].value || inputs[i].placeholder; } else if (inputs[i].type === 'checkbox') { _option[inputs[i].id] = inputs[i].checked; } else if (inputs[i].type === 'radio' && inputs[i].checked) { _option[inputs[i].name] = inputs[i].value; } } setValue('hvAAOption', _option); optionBox.style.display = 'none'; reload(); } gE('#optionCancel', optionBox).onclick = function () { optionBox.style.display = 'none'; } gE('body').appendChild(optionBox); } function riddleAlert() { //答题警报 var img = cE('img'); img.src = '/pages/ponychart.jpg'; gE('.csp').appendChild(img); var audio = cE('audio'); document.onmousemove = function () { audio.pause(); } document.onkeydown = function () { audio.pause(); } audio.src = 'https://raw.githubusercontent.com/dodying/UserJs/master/HentaiVerse/hvAutoAttack/Riddle' + ((/Chrome|Safari/.test(window.navigator.userAgent)) ? '.mp3' : '.wav'); audio.loop = true; audio.play(); if (g('option').answerCount) { window.onbeforeunload = function () { var arr = (getValue('answerCount')) ? getValue('answerCount', true) : new Array(); arr.push({ 'url': gE('#riddleform>div:nth-child(3)>img').src, 'answer': gE('#riddlemaster').value }); setValue('answerCount', arr); } } for (var i = 0; i < 30; i = i + 1) { setTimeout(function () { var timeDiv = gE('#riddlecounter>div>div', 'all'); var time = ''; for (var j = 0; j < timeDiv.length; j = j + 1) { var time = (parseInt(timeDiv[j].style.backgroundPosition.replace('0px -', '')) / 12).toString() + time; } document.title = time; if (g('option').riddleAnswer) { if (parseInt(time) <= parseInt(g('option').riddleAnswerTime)) { if (!gE('#riddlemaster').value) { var random = Math.random(); if (random < 1 / 3) { gE('#riddlemaster').value = 'A'; } else if (random < 2 / 3) { gE('#riddlemaster').value = 'B'; } else { gE('#riddlemaster').value = 'C'; } } gE('#riddleform').submit(); } } }, i * 1000); } } function pauseButton() { //暂停按钮 var button = cE('button'); button.innerHTML = '暂停'; button.onclick = function () { if (getValue('hvAADisabled')) { this.innerHTML = '暂停'; delValue(0); main(); } else { this.innerHTML = '继续'; setValue('hvAADisabled', true); } } gE('.clb').insertBefore(button, gE('.clb>.cbl')) } function statusButton() { //选择模式按钮 var button = cE('button'); button.innerHTML = '临时攻击模式'; button.onclick = function () { var p = parseInt(prompt('请选择(默认为火):\n0.物理\n1.火\n2.冰\n3.雷\n4.风\n5.圣\n6.暗', '')); if (isNaN(p) || p < 0 || p > 6) return; setValue('attackStatus', p); reload(); } gE('.clb').insertBefore(button, gE('.clb>.cbl')) } function reloader() { var script = cE('script'); script.innerHTML = '(' + (function () { document.getElementById('battleform').submit = function () { document.getElementById('hvAAReloader').click(); } }).toString() + ')()'; gE('head').appendChild(script); var a = cE('a'); a.id = 'hvAAReloader'; a.onclick = function () { formSubmit(); } gE('body').appendChild(a); } function formSubmit() { //基本来自https://forums.e-hentai.org/index.php?showtopic=65126&st=2660&p=4384894&#entry4384894 if (gE('#battleaction').value === '0') { reload(); return; } var inputs = gE('#battleform>input', 'all'); var serializedForm = ''; for (var i = 0; i < inputs.length; i = i + 1) { if (i !== 0) serializedForm += '&'; serializedForm += inputs[i].id + '=' + inputs[i].value; } post(location.href, serializedForm, function (e) { clearTimeout(g('delayAlert')); clearTimeout(g('delayReload')); var data = e.target.response; var replacements = '.cwbdv, .bte, #ckey_spirit, #ckey_defend, #togpane_magico, #togpane_magict, #togpane_item, #quickbar, #togpane_log'; var monsterReplacements = '#mkey_0, #mkey_1, #mkey_2, #mkey_3, #mkey_4, #mkey_5, #mkey_6, #mkey_7, #mkey_8, #mkey_9'; var existing = gE(replacements, 'all'); var newStuff = gE(replacements, 'all', data); var i = existing.length; while (i--) { existing[i].parentNode.replaceChild(newStuff[i], existing[i]); } var existing = gE(monsterReplacements, 'all'); var newStuff = gE(monsterReplacements, 'all', data); var i = existing.length; while (i--) { if (existing[i].hasAttribute('onclick') || newStuff[i].hasAttribute('onclick')) { existing[i].parentNode.replaceChild(newStuff[i], existing[i]); } } var popup = gE('.btcp', 'all', data); if (popup.length !== 0) gE('.btt').insertBefore(popup[0], gE('.btt').firstChild); unsafeWindow.battle = new unsafeWindow.Battle; unsafeWindow.battle.clear_infopane(); main(); }); } function autoArena() { //自动刷竞技场 var dateNow = new Date(); dateNow = dateNow.getUTCFullYear() + '/' + (dateNow.getUTCMonth() + 1) + '/' + dateNow.getUTCDate(); var date = localStorage.arenaDate; if (date !== dateNow) { setValue('arenaDate', dateNow); delValue('arenaidArr'); delValue('arenaidOk'); } if (getValue('arenaidOk')) return; var myLevel = parseInt(gE('.clb>.cit:nth-child(12) .fd4>div').innerHTML.match(/\d+/) [0]); var levelArr = new Array(1, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150, 165, 180, 200, 225, 250, 500); for (var i = 0; i < levelArr.length; i = i + 1) { if (myLevel <= levelArr[i]) break; } var arenaidArr = (getValue('arenaidArr')) ? getValue('arenaidArr', true) : new Array(1, 3, 5, 8, 9, 11, 12, 13, 15, 16, 17, 19, 20, 21, 23, 24, 26, 27, 28, 29, 32); var length = levelArr.indexOf(levelArr[i]); length = (length > arenaidArr.length) ? arenaidArr.length : length; if (length === 1) setValue('arenaidOk', true); arenaidArr.length = length; post(location.href, 'recover=all', function () { //回复 document.title = '回复完成'; post('?s=Battle&ss=ar', 'arenaid=' + arenaidArr[arenaidArr.length - 1], function () { document.title = '竞技场开始'; arenaidArr.splice( - 1); setValue('arenaidArr', arenaidArr); reload(); }); }); } function otherAlert(e, times) { //其他警报 var audio = cE('audio'); audio.src = 'https://raw.githubusercontent.com/dodying/UserJs/master/HentaiVerse/hvAutoAttack/' + e + ((/Chrome|Safari/.test(window.navigator.userAgent)) ? '.mp3' : '.wav'); var _time = 0; audio.addEventListener('ended', function () { _time = _time + 1; if (_time === times) { audio.pause(); return; } audio.play(); }); audio.play(); } function countRound() { //回合计数及自动前进并获取怪物总HP if (getValue('roundType')) { g('roundType', getValue('roundType')); } else { g('roundType', location.search.replace(/.*ss=([a-z]{2}).*/, '$1')); setValue('roundType', g('roundType')); } var battleLog = gE('#togpane_log>table>tbody>tr>td.t3', 'all'); if (battleLog[battleLog.length - 1].innerHTML === 'Battle Start!') delValue(1); if (!localStorage.roundNow) { var monsterStatus = new Array(); var id = 0; for (var i = battleLog.length - 3; i > battleLog.length - 3 - g('monsterAll'); i--) { var hp = parseFloat(battleLog[i].innerHTML.replace(/.*HP=/, '')); if (isNaN(hp)) hp = monsterStatus[monsterStatus.length - 1].hp; monsterStatus[id] = { 'id': (id === 9) ? 0 : id + 1, 'isDead': false, 'hp': hp }; id = id + 1; } setValue('monsterStatus', monsterStatus); g('monsterStatus', monsterStatus); var round = battleLog[battleLog.length - 2].innerHTML.replace(/.*\(Round /, '').replace(/\).*/, '').replace(/\s+/g, ''); var roundNow; var roundAll; if (g('roundType') !== 'ba' || /^\d+\/\d+$/.test(round)) { roundNow = parseInt(round.replace(/\/.*/, '')); roundAll = parseInt(round.replace(/.*\//, '')); } else { if (g('monsterAll') >= g('option').buffSkillMonster || g('bossAlive') >= g('option').buffSkillBoss) { roundNow = 1; roundAll = 1; } else { roundNow = 2; roundAll = 2; } } setValue('roundNow', roundNow); setValue('roundAll', roundAll); g('roundNow', roundNow); g('roundAll', roundAll); } else { g('roundNow', parseInt(getValue('roundNow'))); g('roundAll', parseInt(getValue('roundAll'))); } if (gE('.btcp')) { if (g('monsterAlive') > 0) { otherAlert('Failed', 1); delValue(2); } else if (g('roundNow') !== g('roundAll')) { delValue(1); reload(); } else if (g('roundNow') === g('roundAll')) { otherAlert('Win', 1); delValue(2); setTimeout(function () { reload(); }, 3 * 1000); } g('end', true); return; } } function battleInfo() { //战斗战况 var attackStatusCN = { 0: '物理', 1: '火', 2: '冰', 3: '雷', 4: '风', 5: '圣', 6: '暗' }; if (!gE('#battleLog')) { var div = cE('div'); div.id = 'battleLog'; div.innerHTML = '运行次数:' + g('runtime') + '<br>回合:' + g('roundNow') + '/' + g('roundAll') + '<br>攻击模式:' + attackStatusCN[g('attackStatus')] + '<br>存活Boss:' + g('bossAlive') + '<br>怪物:' + g('monsterAlive') + '/' + g('monsterAll'); div.style = 'font-size:20px;text-align:center;'; gE('div.clb').insertBefore(div, gE('.cit')); } else { gE('#battleLog').innerHTML = '运行次数:' + g('runtime') + '<br>回合:' + g('roundNow') + '/' + g('roundAll') + '<br>攻击模式:' + attackStatusCN[g('attackStatus')] + '<br>存活Boss:' + g('bossAlive') + '<br>怪物:' + g('monsterAlive') + '/' + g('monsterAll'); } document.title = g('runtime') + '||' + g('roundNow') + '/' + g('roundAll') + '||' + g('monsterAlive') + '/' + g('monsterAll'); } function autoUseGem() { //自动使用宝石 var Gem = gE('#ikey_p').getAttribute('onmouseover').replace(/battle.set_infopane_item\(\'(.*?)\'.*/, '$1'); if (Gem === 'Health Gem' && g('hp') <= g('option').hp1 * 0.01) { gE('#ikey_p').click(); g('end', true); return; } else if (Gem === 'Mana Gem' && g('mp') <= g('option').mp1 * 0.01) { gE('#ikey_p').click(); g('end', true); return; } else if (Gem === 'Spirit Gem' && g('sp') <= g('option').sp1 * 0.01) { gE('#ikey_p').click(); g('end', true); return; } else if (Gem === 'Mystic Gem') { gE('#ikey_p').click(); g('end', true); return; } } function deadSoon() { //自动回血回魔 if (g('mp') < g('option').mp2 * 0.01) { //自动回魔 gE('#quickbar').style.backgroundColor = 'blue'; if (gE('.bti3>div[onmouseover*="Mana Potion"]')) { gE('.bti3>div[onmouseover*="Mana Potion"]').click(); g('end', true); return; } else if (g('mp') <= g('option').mp3 * 0.01 && gE('.bti3>div[onmouseover*="Mana Elixir"]')) { gE('.bti3>div[onmouseover*="Mana Elixir"]').click(); g('end', true); return; } } if (g('sp') < g('option').sp2 * 0.01) { //自动回精 gE('#quickbar').style.backgroundColor = 'green'; if (gE('.bti3>div[onmouseover*="Spirit Potion"]')) { gE('.bti3>div[onmouseover*="Spirit Potion"]').click(); g('end', true); return; } else if (g('sp') <= g('option').sp3 * 0.01 && gE('.bti3>div[onmouseover*="Spirit Elixir"]')) { gE('.bti3>div[onmouseover*="Spirit Elixir"]').click(); g('end', true); return; } } if (g('hp') <= g('option').hp2 * 0.01) { //自动回血 if (!gE('.cwb2[src*="barsilver"]')) gE('#quickbar').style.backgroundColor = 'red'; if (isOn('311')) { gE('311', 'id').click(); g('end', true); return; } if (isOn('313')) { gE('313', 'id').click(); g('end', true); return; } if (gE('.bti3>div[onmouseover*="Health Potion"]')) { gE('.bti3>div[onmouseover*="Health Potion"]').click(); g('end', true); return; } else if (g('hp') <= g('option').hp3 * 0.01 && gE('.bti3>div[onmouseover*="Health Elixir"]')) { gE('.bti3>div[onmouseover*="Health Elixir"]').click(); g('end', true); return; } } if (g('option').lastElixir && gE('.bti3>div[onmouseover*="Last Elixir"]')) { gE('.bti3>div[onmouseover*="Last Elixir"]').click(); g('end', true); return; } } function autoUseScroll() { //自动使用卷轴 var scrollLib = { 'Go': { 'name': 'Scroll of the Gods', 'mult': '3', 'img1': 'absorb', 'img2': 'shadowveil', 'img3': 'sparklife' }, 'Av': { 'name': 'Scroll of the Avatar', 'mult': '2', 'img1': 'haste', 'img2': 'protection' }, 'Pr': { 'name': 'Scroll of Protection', 'mult': '1', 'img1': 'protection' }, 'Sw': { 'name': 'Scroll of Swiftness', 'mult': '1', 'img1': 'haste' }, 'Li': { 'name': 'Scroll of Life', 'mult': '1', 'img1': 'sparklife' }, 'Sh': { 'name': 'Scroll of Shadows', 'mult': '1', 'img1': 'shadowveil' }, 'Ab': { 'name': 'Scroll of Absorption', 'mult': '1', 'img1': 'absorb' } }; var scrollFirst = (g('option').scrollFirst) ? '_scroll' : ''; for (var i in scrollLib) { if (g('option') ['scroll_' + i] && gE('.bti3>div[onmouseover*="' + scrollLib[i].name + '"]') && g('roundNow') >= g('option') ['scrollRound_' + i]) { for (var j = 1; j <= scrollLib[i].mult; j++) { if (gE('div.bte>img[src*="' + scrollLib[i]['img' + j] + scrollFirst + '"]')) { var isUsed = true; break; } var isUsed = false; } if (!isUsed) { gE('.bti3>div[onmouseover*="' + scrollLib[i].name + '"]').click(); g('end', true); return; } } } } function autoUseBuffSkill() { //自动使用药水、施法增益技能 var skillLib = { 'Pr': { 'name': 'Protection', 'id': '411', 'img': 'protection' }, 'SL': { 'name': 'Spark of Life', 'id': '422', 'img': 'sparklife' }, 'SS': { 'name': 'Spirit Shield', 'id': '423', 'img': 'spiritshield' }, 'Ha': { 'name': 'Haste', 'id': '412', 'img': 'haste' }, 'AF': { 'name': 'Arcane Focus', 'id': '432', 'img': 'arcanemeditation', }, 'He': { 'name': 'Heartseeker', 'id': '431', 'img': 'heartseeker' }, 'Re': { 'name': 'Regen', 'id': '312', 'img': 'regen' }, 'SV': { 'name': 'Shadow Veil', 'id': '413', 'img': 'shadowveil' }, 'Ab': { 'name': 'Absorb', 'id': '421', 'img': 'absorb' } }; if ((g('roundAll') >= g('option').buffSkillAllRound) || (g('roundAll') === g('roundNow') && g('roundAll') === 1)) { if (gE('div.bte>img[src*="channeling"]')) { var buff = gE('div.bte>img', 'all'); if (buff.length > 0) { for (var n = 0; n < buff.length; n++) { var spellName = buff[n].getAttribute('onmouseover').replace(/battle.set_infopane_effect\(\'(.*?)\'.*/, '$1'); if (spellName === 'Absorbing Ward') continue; var buffLastTime = parseInt(buff[n].getAttribute('onmouseover').replace(/.*\'\,(.*?)\)/g, '$1')); if (buffLastTime <= g('option').channelReBuff) { if (spellName === 'Cloak of the Fallen' && !gE('div.bte>img[src*="sparklife"]') && isOn('422')) { gE('422', 'id').click(); g('end', true); return; } for (var i in skillLib) { if (spellName === skillLib[i].name && isOn(skillLib[i].id)) { gE(skillLib[i].id, 'id').click(); g('end', true); return; } } } break; } for (var i in skillLib) { if (g('option') ['channelSkill_' + i] !== undefined) { if (g('option') ['channelSkill_' + i] && !gE('div.bte>img[src*="' + skillLib[i].img + '"]') && isOn(skillLib[i].id)) { gE(skillLib[i].id, 'id').click(); g('end', true); return; } } } } } for (var i in skillLib) { if (g('option') ['buffSkill_' + i] !== undefined) { if (g('option') ['buffSkill_' + i] && !gE('div.bte>img[src*="' + skillLib[i].img + '"]') && isOn(skillLib[i].id)) { gE(skillLib[i].id, 'id').click(); g('end', true); return; } } } if (!gE('div.bte>img[src*="healthpot"]') && g('hp') < 1 && g('option').buffSkill_HD && gE('.bti3>div[onmouseover*="Health Draught"]')) { gE('.bti3>div[onmouseover*="Health Draught"]').click(); g('end', true); return; } else if (!gE('div.bte>img[src*="manapot"]') && g('mp') < 1 && g('option').buffSkill_MD && gE('.bti3>div[onmouseover*="Mana Draught"]')) { gE('.bti3>div[onmouseover*="Mana Draught"]').click(); g('end', true); return; } else if (!gE('div.bte>img[src*="spiritpot"]') && g('sp') < 0.8 && g('option').buffSkill_SD && gE('.bti3>div[onmouseover*="Spirit Draught"]')) { gE('.bti3>div[onmouseover*="Spirit Draught"]').click(); g('end', true); return; } } else if (g('roundAll') === g('roundNow') && g('roundAll') === 2) { if (!gE('div.bte>img[src*="sparklife"]') && isOn('422')) { gE('422', 'id').click(); g('end', true); return; } } } function autoUseInfusions() { //自动使用魔药 var infusionLib = { '1': { 'name': 'Infusion of Flames', 'img': 'fireinfusion' }, '2': { 'name': 'Infusion of Frost', 'img': 'coldinfusion' }, '3': { 'name': 'Infusion of Lightning', 'img': 'elecinfusion' }, '4': { 'name': 'Infusion of Storms', 'img': 'windinfusion' }, '5': { 'name': 'Infusion of Divinity', 'img': 'holyinfusion' }, '6': { 'name': 'Infusion of Darkness', 'img': 'darkinfusion' } }; if (gE('.bti3>div[onmouseover*="' + infusionLib[g('option').infusionStatus].name + '"]') && !gE('div.bte>img[src*="' + infusionLib[[g('option').infusionStatus]].img + '"]')) { gE('.bti3>div[onmouseover*="' + infusionLib[g('option').infusionStatus].name + '"]').click(); g('end', true); return; } } function countMonsterHP() { //统计怪物血量 var monsterHp = gE('div.btm4>div.btm5:nth-child(1)', 'all'); var monsterStatus = g('monsterStatus'); for (var i = 0; i < monsterHp.length; i++) { if (gE('img[src="/y/s/nbardead.png"]', monsterHp[i])) { monsterStatus[i].isDead = true; monsterStatus[i].hpNow = Infinity; } else { monsterStatus[i].isDead = false; monsterStatus[i].hpNow = Math.floor(monsterStatus[i].hp * parseFloat(gE('div.chbd>img.chb2', monsterHp[i]).style.width) / 120) + 1; var hpDiv = cE('div'); hpDiv.className = 'monsterHp'; hpDiv.innerHTML = monsterStatus[i].hpNow + ' / ' + monsterStatus[i].hp; gE('.chbd', monsterHp[i]).appendChild(hpDiv); } } setValue('monsterStatus', monsterStatus); monsterStatus.sort(objArrSort('hpNow')); var hpLowest = monsterStatus[0].hpNow; for (var i = 0; i < monsterStatus.length; i++) { monsterStatus[i].initWeight = (monsterStatus[i].isDead) ? Infinity : monsterStatus[i].hpNow / hpLowest * 10; monsterStatus[i].finWeight = monsterStatus[i].initWeight; } g('monsterStatus', monsterStatus); } function autoUseDeSkill() { //自动施法De技能 var skillLib = { 'Sle': { 'name': 'Sleep', 'id': '222', 'img': 'sleep', 'effect': true }, 'Bl': { 'name': 'Blind', 'id': '231', 'img': 'blind', 'effect': true }, 'Slo': { 'name': 'Slow', 'id': '221', 'img': 'slow', 'effect': true }, 'Im': { 'name': 'Imperil', 'id': '213', 'img': 'imperil', 'effect': false }, 'CM': { 'name': 'Coalesced Mana', 'id': '', 'img': 'coalescemana', 'effect': false }, 'MN': { 'name': 'MagNet', 'id': '233', 'img': 'magnet', 'effect': false }, 'Si': { 'name': 'Silence', 'id': '232', 'img': 'silence', 'effect': false }, 'Dr': { 'name': 'Drain', 'id': '211', 'img': 'drainhp', 'effect': false }, 'We': { 'name': 'Weaken', 'id': '212', 'img': 'weaken', 'effect': false }, 'Co': { 'name': 'Confuse', 'id': '223', 'img': 'confuse', 'effect': false } }; var monsterStatus = g('monsterStatus'); monsterStatus.sort(objArrSort('id')); var monsterBuff = gE('div.btm6', 'all'); for (var i = 0; i < monsterBuff.length; i++) { for (var j in skillLib) { monsterStatus[i].finWeight += (gE('img[src*="' + skillLib[j].img + '"]', monsterBuff[i])) ? parseFloat(g('option') ['weight_' + j]) : 0; } } g('monsterStatus', monsterStatus); monsterStatus.sort(objArrSort('finWeight')); for (var i in skillLib) { if (g('option') ['debuffSkillBoss_' + i] && g('bossAlive') > 0 && g('option').debuffSkillBoss && skillLib[i].effect && g('monsterAlive') >= g('option').debuffSkillBossCount) { if (isOn(skillLib[i].id)) { for (var j = monsterStatus.length - 1; j >= 0; j--) { if (!monsterStatus[j].isDead) { var monsterFind = (!gE('#mkey_' + monsterStatus[j].id + '>.btm6>img[src*="' + skillLib[i].img + '"]')) ? true : false; break; } } if (monsterFind) { gE(skillLib[i].id, 'id').click(); gE('#mkey_' + monsterStatus[j].id).click(); g('end', true); return; } } } else if (((g('option') ['debuffSkillBoss_' + i] && g('bossAlive') > 0 && g('option').debuffSkillBoss) || (g('option') ['debuffSkillAll_' + i] && g('option').debuffSkillAll)) && !skillLib[i].effect) { if (isOn(skillLib[i].id) && !gE('#mkey_' + monsterStatus[0].id + '>.btm6>img[src*="' + skillLib[i].img + '"]')) { gE(skillLib[i].id, 'id').click(); gE('#mkey_' + monsterStatus[0].id).click(); g('end', true); return; } } } } function autoAttack() { //自动打怪 if (g('option').spiritStance && g('oc') >= parseInt(g('option').spiritStance_oc) && !gE('#ckey_spirit[src*="spirit_a"]')) { gE('#ckey_spirit').click(); } g('monsterStatus').sort(objArrSort('finWeight')); var minNum = g('monsterStatus') [0].id; if (g('attackStatus') !== 0) { if (g('monsterAlive') >= g('option').highSkill && isOn('1' + g('attackStatus') + '3')) { gE('1' + g('attackStatus') + '3', 'id').click(); } else if (g('monsterAlive') >= g('option').middleSkill && isOn('1' + g('attackStatus') + '2')) { gE('1' + g('attackStatus') + '2', 'id').click(); } else if (isOn('1' + g('attackStatus') + '1')) { gE('1' + g('attackStatus') + '1', 'id').click(); } } if (g('option').specialSkill && g('oc') >= 210) { /* if (g('option').specialSkill_FUS && (g('monsterAlive') > g('option').specialSkillMonster_FUS || g('bossAlive') > g('option').specialSkillBoss_FUS) && isOn('')) gE('', 'id').click(); */ if (g('option').specialSkill_OFC && (g('monsterAlive') > g('option').specialSkillMonster_OFC || g('bossAlive') > g('option').specialSkillBoss_OFC) && isOn('1111')) gE('1111', 'id').click(); } if (minNum === 10) minNum = 0; gE('#mkey_' + minNum).click(); g('end', true); return; } function gE(ele, mode, parent) { //获取元素 if (mode === undefined) { return document.querySelector(ele); } else if (mode === 'all') { return (parent === undefined) ? document.querySelectorAll(ele) : parent.querySelectorAll(ele); } else if (mode === 'id') { return document.getElementById(ele); } else if (typeof mode === 'object') { return mode.querySelector(ele); } } function cE(name) { //创建元素 return document.createElement(name); } function isOn(id) { if (gE(id, 'id') && gE(id, 'id').style.opacity !== '0.5') { return true; } else { return false; } } function setValue(item, value) { localStorage[item] = (typeof value === 'string') ? value : JSON.stringify(value); } function getValue(item, toJSON) { return (toJSON) ? JSON.parse(localStorage[item]) : localStorage[item]; } function delValue(item) { if (typeof item === 'string') { localStorage.removeItem(item); } else if (typeof item === 'number') { localStorage.removeItem('hvAADisabled'); if (item > 0) { localStorage.removeItem('roundNow'); localStorage.removeItem('roundAll'); localStorage.removeItem('monsterStatus'); if (item > 1) { localStorage.removeItem('attackStatus'); localStorage.removeItem('roundType'); } } } } function reload() { location = location.search.replace(/#.*/, ''); } function g(item, key) { //全局变量 if (key === undefined) { return window[item]; } else { window[item] = key; } } function post(href, parm, func) { //post var xhr = new XMLHttpRequest(); xhr.open('POST', href); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8'); xhr.responseType = 'document'; xhr.onload = function (e) { if (e.target.status >= 200 && e.target.status < 400) func(e); xhr = null; } xhr.send(parm); } function objArrSort(propertyName) { //对象数组排序函数,从小到大排序,来自http://www.jb51.net/article/24536.htm return function (object1, object2) { var value1 = object1[propertyName]; var value2 = object2[propertyName]; if (value2 < value1) { return 1; } else if (value2 > value1) { return - 1; } else { return 0; } } }