Tools for MilkyWayIdle. Includes feedback, action projections, market insights, asset history, DPS/HPS statistics, inventory tools, tasks, and guild utilities.
Pada tanggal
// ==UserScript==
// @name MWITools
// @namespace http://tampermonkey.net/
// @version 26.4.2
// @description Tools for MilkyWayIdle. Includes feedback, action projections, market insights, asset history, DPS/HPS statistics, inventory tools, tasks, and guild utilities.
// @author bot7420, shykai, Stella
// @license CC-BY-NC-SA-4.0
// @match https://www.milkywayidle.com/*
// @match https://test.milkywayidle.com/*
// @match https://www.milkywayidlecn.com/*
// @match https://amvoidguy.github.io/MWICombatSimulatorTest/*
// @match https://shykai.github.io/MWICombatSimulatorTest/dist/*
// @match https://mooneycalc.netlify.app/*
// @match https://mooneycalc.vercel.app/*
// @grant GM_addStyle
// @grant GM.xmlHttpRequest
// @grant GM_xmlhttpRequest
// @grant GM_notification
// @grant GM_getValue
// @grant GM_setValue
// @grant GM_info
// @grant unsafeWindow
// @connect raw.githubusercontent.com
// @connect feedback.43.167.210.211.sslip.io
// @connect mwi-guild.43.167.210.211.sslip.io
// @require https://milk.43.167.210.211.sslip.io/scripts/vendor/chart.js-4.4.3.umd.min.js#sha256-1G2Xof0CLF+yn6L0Xry8MiAtc67r8HbOX3JI9UmPx9c=
// @require https://milk.43.167.210.211.sslip.io/scripts/vendor/hammerjs-2.0.8.min.js#sha256-eVNjHw5UeU0jUqPPpZHAkU1z4U+QFBBY488WvueTm88=
// @require https://milk.43.167.210.211.sslip.io/scripts/vendor/chartjs-plugin-zoom-2.0.1.min.js#sha256-UDxwmAK+KFxnav4Dab9fcgZtCwwjkpGIwxWPNcAyepw=
// ==/UserScript==
// 特别感谢:ColaCola、Zhulimoon、400badrequest、Q7
/*
【遇到MWITools插件有问题时的解决方法】
请先务必排查以下问题:
1. 你的MWITools插件已更新至最新版(greasyfork网站有可能被墙,请开梯子更新;或者到QQ群文件里下载后手动导入或复制粘贴代码);
2. 你没有重复安装插件(有的人装了新版本插件,但还有个旧版本的没有删除,在同时运行;或者有的人在同一个浏览器里装了两个油猴类浏览器插件);
3. 安装或更新完插件后,以及在游戏设置里切换过语言后,必须刷新游戏网页;
4. 请在电脑上、使用最新版本Chrome浏览器、使用最新版本TamperMonkey(油猴)插件尝试(作者精力有限,做不到逐个适配各种环境、为每个人定位环境问题,
遇到问题时请优先使用上述主流环境。如果你一定要使用旧版本或其它品牌的浏览器或油猴插件,遇到问题请优先自行摸索如何解决,作者很可能无法解决你的问题。
手机使用问题很多,作者不定位手机上问题。问问群友用什么浏览器好使,多换几个浏览器试试。苹果手机建议尝试focus浏览器。)。
如果仍有问题,请私聊作者具体问题是什么、复现问题的具体步骤、最好附带截图;
报错日志是定位问题的快速甚至唯一方法,请打开浏览器开发者工具查看终端,刷新游戏网页,复现遇到的问题,截图发给作者。
*/
(()=>{var ag=Object.create;var Ps=Object.defineProperty;var ng=Object.getOwnPropertyDescriptor;var ig=Object.getOwnPropertyNames;var rg=Object.getPrototypeOf,og=Object.prototype.hasOwnProperty;var s=(e,t)=>Ps(e,"name",{value:t,configurable:!0});var sg=(e,t)=>()=>{try{return t||e((t={exports:{}}).exports,t),t.exports}catch(a){throw t=0,a}};var ug=(e,t,a,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of ig(t))!og.call(e,i)&&i!==a&&Ps(e,i,{get:()=>t[i],enumerable:!(n=ng(t,i))||n.enumerable});return e};var cg=(e,t,a)=>(a=e!=null?ag(rg(e)):{},ug(t||!e||!e.__esModule?Ps(a,"default",{value:e,enumerable:!0}):a,e));var ml=sg(($7,uo)=>{var Rs=(function(){var e=String.fromCharCode,t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$",n={};function i(r,c){if(!n[r]){n[r]={};for(var l=0;l<r.length;l++)n[r][r.charAt(l)]=l}return n[r][c]}s(i,"getBaseValue");var o={compressToBase64:s(function(r){if(r==null)return"";var c=o._compress(r,6,function(l){return t.charAt(l)});switch(c.length%4){default:case 0:return c;case 1:return c+"===";case 2:return c+"==";case 3:return c+"="}},"compressToBase64"),decompressFromBase64:s(function(r){return r==null?"":r==""?null:o._decompress(r.length,32,function(c){return i(t,r.charAt(c))})},"decompressFromBase64"),compressToUTF16:s(function(r){return r==null?"":o._compress(r,15,function(c){return e(c+32)})+" "},"compressToUTF16"),decompressFromUTF16:s(function(r){return r==null?"":r==""?null:o._decompress(r.length,16384,function(c){return r.charCodeAt(c)-32})},"decompressFromUTF16"),compressToUint8Array:s(function(r){for(var c=o.compress(r),l=new Uint8Array(c.length*2),d=0,m=c.length;d<m;d++){var p=c.charCodeAt(d);l[d*2]=p>>>8,l[d*2+1]=p%256}return l},"compressToUint8Array"),decompressFromUint8Array:s(function(r){if(r==null)return o.decompress(r);for(var c=new Array(r.length/2),l=0,d=c.length;l<d;l++)c[l]=r[l*2]*256+r[l*2+1];var m=[];return c.forEach(function(p){m.push(e(p))}),o.decompress(m.join(""))},"decompressFromUint8Array"),compressToEncodedURIComponent:s(function(r){return r==null?"":o._compress(r,6,function(c){return a.charAt(c)})},"compressToEncodedURIComponent"),decompressFromEncodedURIComponent:s(function(r){return r==null?"":r==""?null:(r=r.replace(/ /g,"+"),o._decompress(r.length,32,function(c){return i(a,r.charAt(c))}))},"decompressFromEncodedURIComponent"),compress:s(function(r){return o._compress(r,16,function(c){return e(c)})},"compress"),_compress:s(function(r,c,l){if(r==null)return"";var d,m,p={},b={},f="",g="",h="",_=2,y=3,w=2,k=[],C=0,x=0,T;for(T=0;T<r.length;T+=1)if(f=r.charAt(T),Object.prototype.hasOwnProperty.call(p,f)||(p[f]=y++,b[f]=!0),g=h+f,Object.prototype.hasOwnProperty.call(p,g))h=g;else{if(Object.prototype.hasOwnProperty.call(b,h)){if(h.charCodeAt(0)<256){for(d=0;d<w;d++)C=C<<1,x==c-1?(x=0,k.push(l(C)),C=0):x++;for(m=h.charCodeAt(0),d=0;d<8;d++)C=C<<1|m&1,x==c-1?(x=0,k.push(l(C)),C=0):x++,m=m>>1}else{for(m=1,d=0;d<w;d++)C=C<<1|m,x==c-1?(x=0,k.push(l(C)),C=0):x++,m=0;for(m=h.charCodeAt(0),d=0;d<16;d++)C=C<<1|m&1,x==c-1?(x=0,k.push(l(C)),C=0):x++,m=m>>1}_--,_==0&&(_=Math.pow(2,w),w++),delete b[h]}else for(m=p[h],d=0;d<w;d++)C=C<<1|m&1,x==c-1?(x=0,k.push(l(C)),C=0):x++,m=m>>1;_--,_==0&&(_=Math.pow(2,w),w++),p[g]=y++,h=String(f)}if(h!==""){if(Object.prototype.hasOwnProperty.call(b,h)){if(h.charCodeAt(0)<256){for(d=0;d<w;d++)C=C<<1,x==c-1?(x=0,k.push(l(C)),C=0):x++;for(m=h.charCodeAt(0),d=0;d<8;d++)C=C<<1|m&1,x==c-1?(x=0,k.push(l(C)),C=0):x++,m=m>>1}else{for(m=1,d=0;d<w;d++)C=C<<1|m,x==c-1?(x=0,k.push(l(C)),C=0):x++,m=0;for(m=h.charCodeAt(0),d=0;d<16;d++)C=C<<1|m&1,x==c-1?(x=0,k.push(l(C)),C=0):x++,m=m>>1}_--,_==0&&(_=Math.pow(2,w),w++),delete b[h]}else for(m=p[h],d=0;d<w;d++)C=C<<1|m&1,x==c-1?(x=0,k.push(l(C)),C=0):x++,m=m>>1;_--,_==0&&(_=Math.pow(2,w),w++)}for(m=2,d=0;d<w;d++)C=C<<1|m&1,x==c-1?(x=0,k.push(l(C)),C=0):x++,m=m>>1;for(;;)if(C=C<<1,x==c-1){k.push(l(C));break}else x++;return k.join("")},"_compress"),decompress:s(function(r){return r==null?"":r==""?null:o._decompress(r.length,32768,function(c){return r.charCodeAt(c)})},"decompress"),_decompress:s(function(r,c,l){var d=[],m,p=4,b=4,f=3,g="",h=[],_,y,w,k,C,x,T,A={val:l(0),position:c,index:1};for(_=0;_<3;_+=1)d[_]=_;for(w=0,C=Math.pow(2,2),x=1;x!=C;)k=A.val&A.position,A.position>>=1,A.position==0&&(A.position=c,A.val=l(A.index++)),w|=(k>0?1:0)*x,x<<=1;switch(m=w){case 0:for(w=0,C=Math.pow(2,8),x=1;x!=C;)k=A.val&A.position,A.position>>=1,A.position==0&&(A.position=c,A.val=l(A.index++)),w|=(k>0?1:0)*x,x<<=1;T=e(w);break;case 1:for(w=0,C=Math.pow(2,16),x=1;x!=C;)k=A.val&A.position,A.position>>=1,A.position==0&&(A.position=c,A.val=l(A.index++)),w|=(k>0?1:0)*x,x<<=1;T=e(w);break;case 2:return""}for(d[3]=T,y=T,h.push(T);;){if(A.index>r)return"";for(w=0,C=Math.pow(2,f),x=1;x!=C;)k=A.val&A.position,A.position>>=1,A.position==0&&(A.position=c,A.val=l(A.index++)),w|=(k>0?1:0)*x,x<<=1;switch(T=w){case 0:for(w=0,C=Math.pow(2,8),x=1;x!=C;)k=A.val&A.position,A.position>>=1,A.position==0&&(A.position=c,A.val=l(A.index++)),w|=(k>0?1:0)*x,x<<=1;d[b++]=e(w),T=b-1,p--;break;case 1:for(w=0,C=Math.pow(2,16),x=1;x!=C;)k=A.val&A.position,A.position>>=1,A.position==0&&(A.position=c,A.val=l(A.index++)),w|=(k>0?1:0)*x,x<<=1;d[b++]=e(w),T=b-1,p--;break;case 2:return h.join("")}if(p==0&&(p=Math.pow(2,f),f++),d[T])g=d[T];else if(T===b)g=y+y.charAt(0);else return null;h.push(g),d[b++]=y+g.charAt(0),p--,y=g,p==0&&(p=Math.pow(2,f),f++)}},"_decompress")};return o})();typeof define=="function"&&define.amd?define(function(){return Rs}):typeof uo<"u"&&uo!=null?uo.exports=Rs:typeof angular<"u"&&angular!=null&&angular.module("LZString",[]).factory("LZString",function(){return Rs})});function lg(e){return String(e?.character?.id??e?.character?.characterID??e?.characterID??e?.characterSkills?.[0]?.characterID??"")}s(lg,"resolveCharacterId");function gc(){let e=new Set,t=!1,a=s(n=>(typeof n!="function"||(t?n():e.add(n)),n),"add");return{add:a,event(n,i,o,r){return n?.addEventListener?.(i,o,r),a(()=>n?.removeEventListener?.(i,o,r)),o},observer(n,i,o){return n.observe(i,o),a(()=>n.disconnect()),n},interval(n,i){let o=setInterval(n,i);return a(()=>clearInterval(o)),o},timeout(n,i){let o=setTimeout(()=>{e.delete(r),n()},i),r=s(()=>clearTimeout(o),"cancel");return a(r),o},cleanup(){if(!t){t=!0;for(let n of[...e].reverse())try{n()}catch(i){console.error(u.config.isZH?"[MWITools] 功能清理失败":"[MWITools] Feature cleanup failed",i)}e.clear()}}}}s(gc,"createCleanupScope");var Da=new Map,Ft=new Map,Ls=new Set,hc=!1,Cn="";function no(e){let t=u.features.getStatus(e);for(let a of Ls)try{a(e,t)}catch(n){console.error(u.config.isZH?"[MWITools] 功能状态监听器执行失败":"[MWITools] Feature status listener failed",n)}}s(no,"emitFeatureStatus");function io(e,t,a=null){let n=Ft.get(e)??{};Ft.set(e,{...n,status:t,error:a}),no(e)}s(io,"setFeatureStatus");function $s(e){return e.setting?u.settings.get?.(e.setting)??e.defaultEnabled!==!1:e.defaultEnabled!==!1}s($s,"isFeatureEnabled");async function An(e){let t=Da.get(e);if(!t)return!1;let a=Ft.get(e);if(a?.status==="active"||a?.status==="initializing")return!0;if(!$s(t))return io(e,"disabled"),!1;if(t.scope==="character"&&!Cn)return io(e,"waiting"),!1;for(let i of t.dependsOn??[])if(!await An(i))return io(e,"waiting"),!1;io(e,"initializing");let n=gc();Ft.set(e,{...Ft.get(e),status:"initializing",scope:n,instanceCleanup:null});try{let i=await t.initialize?.({runtime:u,scope:n,characterId:Cn||null}),o=Ft.get(e)??{};return Ft.set(e,{...o,status:"active",error:null,scope:n,instanceCleanup:typeof i=="function"?i:null}),no(e),!0}catch(i){return n.cleanup(),Ft.set(e,{status:"failed",error:i,scope:null,instanceCleanup:null}),console.error(u.config.isZH?`[MWITools] 功能 ${e} 启动失败`:`[MWITools] Failed to initialize feature ${e}`,i),no(e),!1}}s(An,"initializeFeature");async function Qn(e){for(let[n,i]of Da)i.dependsOn?.includes(e)&&await Qn(n);let t=Da.get(e),a=Ft.get(e);if(a?.status==="active"||a?.status==="failed"){try{await a.instanceCleanup?.(),await t?.cleanup?.({runtime:u,characterId:Cn})}catch(n){console.error(u.config.isZH?`[MWITools] 功能 ${e} 清理失败`:`[MWITools] Failed to clean up feature ${e}`,n)}a.scope?.cleanup()}return Ft.set(e,{status:"disabled",error:null,scope:null,instanceCleanup:null}),no(e),!0}s(Qn,"disableFeature");var u={api:{},config:{},settings:{},data:{},state:{},starts:[],messageHandlers:new Map,createCleanupScope:gc,registerStart(e,t){this.starts.push({name:e,start:t})},start(){for(let e of this.starts)try{e.start()?.catch?.(a=>console.error(u.config.isZH?`[MWITools] 启动钩子执行失败:${e.name}`:`[MWITools] Startup hook failed: ${e.name}`,a))}catch(t){console.error(u.config.isZH?`[MWITools] 启动钩子执行失败:${e.name}`:`[MWITools] Startup hook failed: ${e.name}`,t)}return hc=!0,this.features.initializeAll()},onMessage(e,t){let a=this.messageHandlers.get(e)??[];return a.push(t),this.messageHandlers.set(e,a),()=>{let n=this.messageHandlers.get(e)??[];this.messageHandlers.set(e,n.filter(i=>i!==t))}},dispatchMessage(e,t){let a=[...this.messageHandlers.get(e.type)??[],...this.messageHandlers.get("*")??[]];for(let n of a)try{n(e,t)}catch(i){console.error(u.config.isZH?`[MWITools] 消息 ${e.type} 的处理器执行失败`:`[MWITools] Message handler failed for ${e.type}`,i)}},features:{register(e){if(!e?.id||typeof e.initialize!="function")throw new TypeError("Feature definitions need an id and initialize()");return Da.set(e.id,{scope:"global",defaultEnabled:!0,...e}),Ft.has(e.id)||Ft.set(e.id,{status:e.scope==="character"?"waiting":"disabled",error:null}),hc&&An(e.id),e.id},async initializeAll(e=null){for(let[t,a]of Da)e&&a.scope!==e||await An(t)},enable:An,disable:Qn,async restart(e){return await Qn(e),An(e)},async syncSetting(e){let t=[];for(let[a,n]of Da)n.setting===e&&(t.push(a),$s(n)?await An(a):await Qn(a));for(let a of t)for(let[n,i]of Da)i.dependsOn?.includes(a)&&($s(i)?await An(n):await Qn(n))},async handleCharacterData(e){let t=lg(e);if(!t)return;if(Cn&&Cn!==t)for(let[n,i]of Da)i.scope==="character"&&await Qn(n);let a=Cn!==t;Cn=t,a&&await this.initializeAll("character")},getStatus(e){let t=Ft.get(e)??{status:"unregistered",error:null};return{id:e,status:t.status,error:t.error?.message??null}},list(){return[...Da.keys()].map(e=>this.getStatus(e))},onStatusChange(e){return Ls.add(e),()=>Ls.delete(e)}}};var dg=new Intl.NumberFormat().format(1111).replaceAll("1","").at(0)||"",mg=new Intl.NumberFormat().format(1.1).replaceAll("1","").at(0);function _c(){let e=localStorage.getItem("i18nextLng")?.trim();return e||globalThis.document?.documentElement?.lang||globalThis.navigator?.language||"en-US"}s(_c,"getGameLanguage");function yc(){return _c().toLowerCase().startsWith("zh")}s(yc,"isGameLanguageZH");var ye=yc(),wc="green",vc="darkgreen",ei={useOrangeAsMainColor:{id:"useOrangeAsMainColor",desc:ye?"使用橙色字体":"Use orange as the main color for the script.",isTrue:!0},displayCapMM:{id:"displayCapMM",desc:ye?"大数统一使用 M,不显示 B 或 T":"Keep large values in millions instead of using B or T.",isTrue:!1},totalActionTime:{id:"totalActionTime",desc:ye?"左上角显示:当前动作预计总耗时、预计何时完成":"Top left: Estimated total time of the current action, estimated complete time.",isTrue:!0},actionPanel_totalTime:{id:"actionPanel_totalTime",desc:ye?"动作面板显示:目标等级所需次数、预计耗时和每小时经验":"Action panel: Actions and time needed for a target level, plus XP/hour.",isTrue:!0},actionPanel_totalTime_quickInputs:{id:"actionPanel_totalTime_quickInputs",desc:ye?"动作面板显示:快速输入次数 [依赖上一项]":"Action panel: Quick input numbers. [Depends on the previous selection]",isTrue:!0},actionPanel_foragingTotal:{id:"actionPanel_foragingTotal",desc:ye?"动作面板显示:采摘综合图显示综合收益 [依赖上一项]":"Action panel: Overall profit of the foraging maps with multiple outcomes. [Depends on the previous selection]",isTrue:!0},assetHistory:{id:"assetHistory",desc:ye?"库存页签显示:每日资产盈亏、历史图表和数据管理":"Inventory tabs: Daily asset P/L, history charts, and data management.",isTrue:!0},feedback:{id:"feedback",desc:ye?"总等级下方显示意见反馈入口":"Show the feedback entry below total level.",isTrue:!0},invWorth:{id:"invWorth",desc:ye?"库存搜索栏下方显示:库存和着装评分总结":"Below inventory search bar: Inventory and gear score summary.",isTrue:!0},includeCowbellsInAssets:{id:"includeCowbellsInAssets",desc:ye?"总资产计入牛铃":"Include cowbells in total assets.",isTrue:!1},valueBackEquipmentWithProtectionMirror:{id:"valueBackEquipmentWithProtectionMirror",desc:ye?"普通未强化背部装备按保护之镜价值估值":"Value ordinary unenhanced back equipment using Mirrors of Protection.",isTrue:!1},invSort:{id:"invSort",desc:ye?"库存显示:库存物品排序":"Inventory: Sort inventory items.",isTrue:!0},guildCreditConversionsSort:{id:"guildCreditConversionsSort",desc:ye?"公会信用兑换:显示性价比推荐":"Guild Credit Exchange: Show value recommendations.",isTrue:!0},profileBuildScore:{id:"profileBuildScore",desc:ye?"人物面板显示:战斗和生活着装评分":"Profile panel: Combat and skilling gear scores.",isTrue:!0},itemTooltip_prices:{id:"itemTooltip_prices",desc:ye?"物品悬浮窗显示:市场价值和订单簿价格":"Item tooltip: Market value and order book prices.",isTrue:!0},itemTooltip_profit:{id:"itemTooltip_profit",desc:ye?"物品悬浮窗显示:生产成本和利润计算 [依赖上一项]":"Item tooltip: Production cost and profit. [Depends on the previous selection]",isTrue:!0},showConsumTips:{id:"showConsumTips",desc:ye?"物品悬浮窗显示:消耗品回血回魔速度、回复性价比、每天最多消耗数量":"Item tooltip: HP/MP consumables restore speed, cost performance, max cost per day.",isTrue:!0},lootChestEstimate:{id:"lootChestEstimate",desc:ye?"战利品宝箱悬浮窗显示开箱期望价值":"Show expected opening value for loot chests.",isTrue:!0},lootSellAtAsk:{id:"lootSellAtAsk",desc:ye?"宝箱产物按卖单挂单价格估值;关闭则按买单立即卖出":"Value chest drops at ask; off values immediate sales at bid.",isTrue:!1},lootBuyAtAsk:{id:"lootBuyAtAsk",desc:ye?"钥匙和碎片按卖单立即买入;关闭则按买单挂单买入":"Buy keys and fragments at ask; off values bid buy orders.",isTrue:!0},lootKeyFromFragments:{id:"lootKeyFromFragments",desc:ye?"钥匙按碎片自制成本计算;关闭则按成品钥匙买入价":"Use fragment crafting cost for keys; off buys finished keys.",isTrue:!1},expPercentage:{id:"expPercentage",desc:ye?"左侧栏显示:技能经验百分比":"Left sidebar: Percentages of exp of the skill levels.",isTrue:!0},battlePanel:{id:"battlePanel",desc:ye?"战斗总结面板(战斗时点击玩家头像)显示:平均每小时战斗次数、收入、经验":"Battle info panel(click on player avatar during combat): Encounters/hour, revenue, exp.",isTrue:!0},itemIconLevel:{id:"itemIconLevel",desc:ye?"装备图标右上角显示:装备等级":"Top right corner of equipment icons: Equipment level.",isTrue:!0},showsKeyInfoInIcon:{id:"showsKeyInfoInIcon",desc:ye?"钥匙和钥匙碎片图标右上角显示:对应的地图序号 [依赖上一项]":"Top right corner of key/fragment icons: Corresponding combat zone index number. [Depends on the previous selection]",isTrue:!0},marketFilter:{id:"marketFilter",desc:ye?"市场页面显示:装备按等级、职业、部位筛选":"Marketplace: Filter by equipment level, class, slot.",isTrue:!0},taskMapIndex:{id:"taskMapIndex",desc:ye?"任务页面显示:目标战斗地图序号":"Tasks page: Combat zone index number.",isTrue:!0},mapIndex:{id:"mapIndex",desc:ye?"战斗地图选择页面显示:地图序号":"Combat zones page: Combat zone index number.",isTrue:!0},skillbook:{id:"skillbook",desc:ye?"在物品词典显示实时技能书升级需求":"Show live ability-book requirements in the item dictionary.",isTrue:!0},ThirdPartyLinks:{id:"ThirdPartyLinks",desc:ye?"左侧菜单栏显示:第三方工具网站链接、脚本设置链接":"Left sidebar: Links to 3rd-party websites, script settings.",isTrue:!0},actionQueue:{id:"actionQueue",desc:ye?"上方动作队列菜单显示:队列中每个动作预计总时间、到何时完成":"Queued actions panel at the top: Estimated total time and complete time of each queued action.",isTrue:!0},enhanceSim:{id:"enhanceSim",desc:ye?"带强化等级的装备的悬浮菜单显示:强化模拟计算":"Tooltip of equipment with enhancement level: Enhancing simulator calculations.",isTrue:!0},checkEquipment:{id:"checkEquipment",desc:ye?"页面上方显示:战斗时穿了生产装备,或者生产时没有穿对应的生产装备而库存里有,红字警告":"Top: Alert when fighting with production equipment equipped, or producing while matching equipment is unequipped in inventory.",isTrue:!0},notifiEmptyAction:{id:"notifiEmptyAction",desc:ye?"弹窗通知:正在空闲(游戏网页打开时才有效)":"Browser notification: Action queue is empty. (Works only when the game page is open.)",isTrue:!1},fillMarketOrderPrice:{id:"fillMarketOrderPrice",desc:ye?"发布市场订单时自动填写为最小压价":"Automatically adjust to the smallest price increase or decrease when posting marketplace orders.",isTrue:!0},showDamage:{id:"showDamage",desc:ye?"启用新版 DPS、HPS、承伤、战斗片段与历史统计":"Enable DPS, HPS, damage-taken, segment, and combat history tracking.",isTrue:!0},battleBuffs:{id:"battleBuffs",desc:ye?"在战斗单位下方显示 Buff / Debuff 图标和倒计时":"Show buff and debuff icons with countdowns below combat units.",isTrue:!0},actionBarProfit:{id:"actionBarProfit",desc:ye?"动作栏显示净利润":"Show net profit in the action bar.",isTrue:!0},productionSummary:{id:"productionSummary",desc:ye?"生产面板显示产出、库存和最大可做次数":"Show output, inventory, and maximum craftable count.",isTrue:!0},productionProfit:{id:"productionProfit",desc:ye?"生产面板显示净利润":"Show net profit in production panels.",isTrue:!0},procurementAssistant:{id:"procurementAssistant",desc:ye?"启用购物车、采购计划和生产缺料加购":"Enable the shopping cart, procurement plans, and production shortage actions.",isTrue:!0},taskInsights:{id:"taskInsights",desc:ye?"任务显示利润和耗时":"Show task profit and duration.",isTrue:!0},semiAutoTrain:{id:"semiAutoTrain",desc:ye?"生产升级链显示半自动火车、逐站预填和本步加购":"Show semi-automatic train navigation, step prefilling, and step shopping.",isTrue:!0},taskTrainPlanner:{id:"taskTrainPlanner",desc:ye?"任务页按升级链合并任务并规划火车(依赖半自动火车)":"Plan task upgrade trains by chain (requires the semi-automatic train).",isTrue:!0},taskNewBadge:{id:"taskNewBadge",desc:ye?"新领取任务置顶并显示高亮和新角标":"Pin and highlight newly received tasks.",isTrue:!0},taskAutoReturn:{id:"taskAutoReturn",desc:ye?"从任务前往动作后自动返回原任务位置":"Return to the originating task after leaving its action.",isTrue:!0},inventoryMarketDoubleClick:{id:"inventoryMarketDoubleClick",desc:ye?"双击库存物品打开对应市场窗口(货币、战利品除外)":"Double-click inventory items to open the market (except currencies and loot).",isTrue:!0},taskMaterials:{id:"taskMaterials",desc:ye?"任务显示现有材料可完成数量":"Show how much of a task your materials can complete.",isTrue:!0},taskQueueProgress:{id:"taskQueueProgress",desc:ye?"任务显示队列进度":"Show queued task progress.",isTrue:!0},taskAutoSort:{id:"taskAutoSort",desc:ye?"自动整理任务顺序":"Automatically organize tasks.",isTrue:!0},taskIcons:{id:"taskIcons",desc:ye?"任务卡显示物品或怪物图标":"Show item or monster task art.",isTrue:!0},taskStatistics:{id:"taskStatistics",desc:ye?"任务页显示统计抽屉":"Show the task summary drawer.",isTrue:!0},taskClaimCollector:{id:"taskClaimCollector",desc:ye?"集中显示可领取奖励":"Collect claim buttons at the top.",isTrue:!0},taskMergeActions:{id:"taskMergeActions",desc:ye?"合并相同动作任务数量":"Merge matching task quantities.",isTrue:!0},guildXpTracking:{id:"guildXpTracking",desc:ye?"在本机记录公会经验":"Track guild XP locally.",isTrue:!0},guildOverview:{id:"guildOverview",desc:ye?"公会总览显示经验趋势":"Show guild XP trends.",isTrue:!0},guildMemberXp:{id:"guildMemberXp",desc:ye?"成员表显示每小时经验":"Show XP rates for guild members.",isTrue:!0},guildLeaderboardXp:{id:"guildLeaderboardXp",desc:ye?"公会榜显示每小时经验":"Show XP rates on the guild leaderboard.",isTrue:!0},guildIdleMembers:{id:"guildIdleMembers",desc:ye?"公会总览显示闲置成员":"Show idle guild members.",isTrue:!0},leaderboardOverlay:{id:"leaderboardOverlay",desc:ye?"角色名字旁显示排行榜名次徽章":"Show leaderboard rank badges beside character names.",isTrue:!0},leaderboardXpRate:{id:"leaderboardXpRate",desc:ye?"排行榜显示每小时经验速率":"Show XP rates on standard leaderboards.",isTrue:!0},forceMWIToolsDisplayZH:{id:"forceMWIToolsDisplayZH",desc:ye?"MWITools 强制显示中文":"Always display MWITools in Chinese",isTrue:!1}},fg={general:{title:{zh:"通用",en:"General"},summary:{zh:"控制 MWITools 的语言、外观、通知和常用入口。",en:"Control MWITools language, appearance, notifications, and shortcuts."}},actionBar:{title:{zh:"动作栏",en:"Action Bar"},summary:{zh:"在顶部查看当前动作还剩多少次、还需多久以及预计完成时间。",en:"See the current action's remaining count, time left, and estimated finish time."}},production:{title:{zh:"生产面板",en:"Production Panel"},summary:{zh:"输入次数后立即查看耗时、产出、库存上限和利润。",en:"Preview time, output, inventory limits, and profit as you enter a quantity."}},inventory:{title:{zh:"库存与资产",en:"Inventory & Assets"},summary:{zh:"整理库存,并按统一价格口径查看装备和总资产。",en:"Organize inventory and value gear and assets with consistent pricing."}},market:{title:{zh:"市场",en:"Marketplace"},summary:{zh:"显示市场价格、筛选装备,并减少重复下单操作。",en:"Show market prices, filter equipment, and streamline order entry."}},tasks:{title:{zh:"任务",en:"Tasks"},summary:{zh:"按专业整理任务;已完成任务置顶,战斗任务再按地图和地牢归类。",en:"Group tasks by profession, pin completed tasks, and organize combat by zone or dungeon."}},combat:{title:{zh:"战斗",en:"Combat"},summary:{zh:"查看战斗收益、实时伤害、地图编号和装备提醒。",en:"Review combat rewards, live damage, zone numbers, and equipment warnings."}},guild:{title:{zh:"公会",en:"Guild"},summary:{zh:"只在本机记录经验快照,展示公会进度和成员速率。",en:"Store XP snapshots locally to show guild progress and member rates."}},leaderboard:{title:{zh:"排行榜与排名",en:"Leaderboards & Rankings"},summary:{zh:"在角色名字旁展示技能排名,并增强排行榜数据。",en:"Show skill ranks beside character names and enhance leaderboard data."}},tools:{title:{zh:"外部工具",en:"External Tools"},summary:{zh:"连接战斗模拟器、计算器和第三方数据页面。",en:"Connect combat simulators, calculators, and third-party data tools."}}},bg=[["feedback","general","意见反馈","Feedback","在总等级下方提交意见、填写外部图片链接并查看处理状态。","Submit feedback with external image links below total level and follow its status."],["forceMWIToolsDisplayZH","general","强制使用中文","Always use Chinese","无论游戏语言如何,都用中文显示 MWITools。","Display MWITools in Chinese regardless of the game language."],["useOrangeAsMainColor","general","使用橙色强调色","Use orange accents","让辅助信息更贴近游戏的暖色主题。","Use a warm accent color for MWITools information."],["displayCapMM","general","大数只显示 M","Show large values in M","开启后,十亿和万亿数值继续换算为 M,例如 1.2B 显示为 1,200M;关闭时正常使用 K/M/B/T。","When enabled, billions and trillions stay in millions; for example, 1.2B is shown as 1,200M. When disabled, K/M/B/T are used normally."],["notifiEmptyAction","general","空闲提醒","Idle notification","动作队列清空时发送浏览器通知;游戏页面需要保持打开。","Send a browser notification when the action queue becomes empty while the game is open."],["expPercentage","general","技能经验百分比","Skill XP percentage","在左侧技能进度条上显示当前等级的经验百分比。","Show progress through the current level on skill bars."],["totalActionTime","actionBar","当前动作时间","Current action timing","在顶部显示剩余次数、剩余时间和预计完成时刻。","Show remaining count, time remaining, and estimated completion time."],["actionBarProfit","actionBar","当前动作利润","Current action profit","在顶部动作栏显示当前生产动作的市价净利润。","Show market-value net profit for the current production action in the action bar."],["actionQueue","actionBar","完整队列时间","Full queue timing","计算队列中每项动作的耗时、累计完成时刻和最终结束时间。","Calculate each queued action, cumulative completion times, and the final queue end time."],["actionPanel_totalTime","production","目标等级与经验","Target level & XP","输入目标等级,查看还需多少次、预计耗时和每小时经验。","Enter a target level to see required actions, estimated time, and XP/hour."],["actionPanel_totalTime_quickInputs","production","生产次数快捷输入","Production quick inputs","在生产次数输入框旁提供常用次数和时长快捷按钮;依赖目标等级与经验功能。","Add common count and duration shortcuts beside the production input; depends on Target level & XP."],["productionSummary","production","产出与库存摘要","Output & inventory summary","实时显示总产出、当前拥有数量和按直接材料计算的最大可做次数。","Show total output, owned quantity, and the maximum craftable count from direct materials."],["productionProfit","production","生产净利润","Production net profit","同时显示市价、效率(高买低卖)和贪心(低买高卖)三种税后收入、成本与净利润。","Show after-tax revenue, costs, and net profit for market, efficiency (buy high/sell low), and greedy (buy low/sell high) valuations."],["procurementAssistant","production","购物车与采购","Shopping cart & procurement","控制购物车入口、采购计划、生产缺料提示和市场采购导航;关闭后相关界面会立即移除,已有清单数据仍保留。","Control the shopping cart, procurement plans, production shortage hints, and marketplace navigation. Turning it off removes the related UI while preserving saved cart data."],["actionPanel_foragingTotal","production","多产物采集收益","Multi-output gathering value","把同一采集动作的多个可能产物合并成期望收益。","Combine multiple possible gathering outputs into an expected value."],["assetHistory","inventory","每日资产盈亏","Daily asset P/L","在配装右侧显示资产摘要、分项变化、历史图表和数据管理。","Show asset summary, component changes, history charts, and data management beside Loadouts."],["inventoryMarketDoubleClick","inventory","双击打开市场","Double-click to market","双击库存物品打开对应市场窗口;货币和战利品不响应。","Double-click an inventory item to open it in the marketplace; currencies and loot are excluded."],["invWorth","inventory","总资产与着装评分","Assets & gear scores","在库存上方显示战斗评分、生活评分以及流动和固定资产明细。","Show combat and skilling scores plus current and fixed asset details above inventory."],["includeCowbellsInAssets","inventory","牛铃计入总资产","Include cowbells in assets","开启后,牛铃按市场折算价值计入不可交易代币和总资产;默认关闭。","Include cowbells at their market-derived value under non-tradable tokens and total assets. Off by default."],["valueBackEquipmentWithProtectionMirror","inventory","普通背部装备按保护之镜估值","Value ordinary back equipment by protection mirrors","开启后,未强化、未精炼的普通背部装备(包括披风、箭袋等)按保护之镜的当前价值估值;默认关闭。所有强化背部装备(包括精炼后的背部装备)在计算强化成本时始终使用保护之镜,不受此开关影响。","When enabled, ordinary unenhanced and unrefined back-slot equipment, including capes and quivers, uses the current value of a Mirror of Protection. Off by default. All enhanced back equipment, including refined back equipment, always uses Mirrors of Protection for enhancement costs regardless of this option."],["invSort","inventory","按价值整理库存","Sort inventory by value","可按市场价值、出售价或收购价整理库存,并显示整堆价值。","Sort inventory by server value, ask, or bid and show each stack value."],["profileBuildScore","inventory","人物着装评分","Profile gear scores","查看自己或他人的战斗与生活着装评分。","Show combat and skilling gear scores on character profiles."],["itemIconLevel","inventory","装备等级角标","Equipment level badges","在装备图标角落显示物品等级。","Show item level on equipment icons."],["showsKeyInfoInIcon","inventory","钥匙地图编号","Key zone numbers","在钥匙和碎片图标上显示对应战斗地图编号。","Show the related combat zone number on keys and fragments."],["itemTooltip_prices","market","悬浮价格","Tooltip prices","在物品悬浮窗显示市场价值和当前出售价、收购价。","Show server value and current ask and bid prices in item tooltips."],["itemTooltip_profit","market","悬浮生产利润","Tooltip production profit","在可生产物品的悬浮窗显示材料成本和预计利润。","Show material cost and estimated profit for craftable items."],["showConsumTips","market","消耗品性价比","Consumable efficiency","显示回血回魔速度、单位回复成本和每天最多用量。","Show recovery rate, cost per recovery, and maximum daily use."],["lootChestEstimate","market","宝箱价值估算","Loot chest estimate","在战利品宝箱悬浮窗显示概率加权的开箱期望,并可固定面板调整估值方式。","Show probability-weighted opening value for loot chests and pin the panel to adjust valuation."],["lootSellAtAsk","market","宝箱产物挂单卖出","List chest drops at ask","开启:按卖单挂单价估值;关闭:按买单立即卖出价估值。","On: value drops at ask; off: value immediate sales at bid."],["lootBuyAtAsk","market","钥匙材料立即买入","Buy key materials immediately","开启:按卖单立即买入钥匙或碎片;关闭:按买单挂单买入。","On: buy keys or fragments at ask; off: place buy orders at bid."],["lootKeyFromFragments","market","钥匙碎片自制","Craft keys from fragments","开启:按实际配方和碎片成本自制钥匙;关闭:购买成品钥匙。","On: craft keys from their actual recipe; off: buy finished keys."],["marketFilter","market","装备筛选","Equipment filters","在市场按等级、战斗职业和装备部位筛选物品。","Filter marketplace equipment by level, combat class, and slot."],["fillMarketOrderPrice","market","自动填写订单价格","Auto-fill order prices","创建订单时按最小有效档位匹配或压过当前最优价格。","Fill the smallest valid price step that matches or improves the current best order."],["taskInsights","tasks","按专业分组任务","Group tasks by profession","按左侧专业顺序显示可折叠分组;已完成任务置顶,战斗任务按地图和地牢细分。","Show collapsible profession groups, pin completed tasks, and split combat by zone or dungeon."],["semiAutoTrain","tasks","半自动火车","Semi-automatic train","沿制造与升级链逐站跳转、预填次数;点击游戏原生加入队列后前往下一站,并可把本步净缺料加入购物车。","Navigate production and upgrade chains, prefill counts, advance after the native queue action, and add each stop's net shortages to the cart."],["taskTrainPlanner","tasks","任务火车规划","Task train planning","聚合同一升级链的未完成任务,在最高级任务卡生成火车计划;依赖半自动火车。","Combine unfinished tasks from the same upgrade chain and start the plan from its highest-level task; requires the semi-automatic train."],["taskNewBadge","tasks","新任务置顶与标记","New task group and badges","本次进入任务页期间,将新领取任务置于最顶部的新任务分类并显示黄色角标;再次进入任务页时恢复正常分类。","Place newly received tasks in a highlighted top group for the current task-page visit, then restore their normal groups on the next visit."],["taskAutoReturn","tasks","任务自动返回","Task auto-return","从任务卡前往动作后,在提交或关闭动作时返回原任务分类和位置。","Return to the originating task group and position after submitting or closing its action."],["taskMaterials","tasks","任务材料完成量","Task material capacity","根据库存中的直接材料显示每项任务当前可完成的数量。","Show how much of each task can be completed from current direct-material inventory."],["taskQueueProgress","tasks","任务队列进度","Task queue progress","在任务卡上显示已经进入动作队列的数量和进度。","Show the quantity and progress already placed in the action queue on task cards."],["taskAutoSort","tasks","自动整理任务","Automatically organize tasks","在每个专业分组内部按等级和生产链整理任务。","Sort tasks within each profession by level and production chain."],["taskIcons","tasks","任务背景图标","Task artwork","用低透明度原生图标标识任务物品、怪物和副本。","Use subtle native item, monster, and dungeon artwork on task cards."],["taskStatistics","tasks","任务统计抽屉","Task statistics drawer","在任务页汇总完成状态、奖励和任务类型统计。","Summarize completion state, rewards, and task-type statistics on the task page."],["taskClaimCollector","tasks","集中领取任务奖励","Collect task rewards","把当前可领取任务集中显示在任务页顶部,减少逐项查找。","Collect currently claimable tasks at the top of the task page for faster claiming."],["taskMergeActions","tasks","合并相同任务动作","Merge matching task actions","打开动作时自动把多个相同任务的剩余数量合并到输入框。","Pre-fill the combined remaining quantity for matching active tasks."],["taskMapIndex","tasks","战斗任务地图编号","Combat task zone number","在战斗任务标题旁显示目标怪物所在地图编号。","Show the target monster's zone number on combat tasks."],["battlePanel","combat","战斗总结","Combat summary","战斗结束后查看遭遇次数、收益和经验速率。","Review encounter, revenue, and XP rates after combat."],["showDamage","combat","DPS / HPS / 承伤统计","DPS / HPS / Damage Taken","记录实时伤害、治疗、承伤、战斗片段和历史;详细显示选项在 DPS 面板内设置。","Track damage, healing, damage taken, segments, and history; configure display details in the DPS panel."],["battleBuffs","combat","战斗 Buff 显示","Battle buff display","在每个战斗单位下方显示增益和减益图标,带剩余时间倒计时环。","Show buff and debuff icons with countdown rings below each combat unit."],["mapIndex","combat","战斗地图编号","Combat zone numbers","在战斗地图选择页显示连续编号。","Show sequential numbers in the combat zone selector."],["checkEquipment","combat","错装提醒","Equipment warning","战斗穿生产装或生产漏穿库存中的对应装备时发出提醒。","Warn about skilling gear in combat or useful unequipped gear while skilling."],["enhanceSim","combat","强化模拟","Enhancement simulator","在强化装备悬浮窗中估算成功次数、保护策略和总成本。","Estimate attempts, protection strategy, and total cost for enhanced equipment."],["guildXpTracking","guild","本地记录公会经验","Local guild XP tracking","被动保存服务器发来的经验快照;数据只留在本机,保留 30 天。","Passively store server XP snapshots on this device for 30 days."],["guildOverview","guild","公会经验总览","Guild XP overview","显示最近、1 小时和 24 小时速率、升级时间与 7 天趋势。","Show recent, hourly, and daily XP rates, time to level, and a seven-day trend."],["guildMemberXp","guild","成员经验速率","Member XP rates","在成员表增加最近和 24 小时 XP/h 两列。","Add recent and 24-hour XP/h columns to the member table."],["guildLeaderboardXp","guild","公会榜经验速率","Guild leaderboard XP rates","在全服公会榜显示本机采样得到的最近和 24 小时 XP/h。","Show locally sampled recent and 24-hour XP/h on the guild leaderboard."],["guildIdleMembers","guild","闲置成员","Idle members","在公会总览常显当前未进行动作的可见成员。","Always show visible guild members who are not currently performing an action."],["leaderboardOverlay","leaderboard","排行榜名次徽章","Leaderboard rank badges","在角色名字旁显示信息采集助手提供的技能与名望排行榜名次徽章。","Show skill and fame leaderboard rank badges supplied by the data collector beside character names."],["leaderboardXpRate","leaderboard","排行榜经验速率","Leaderboard XP rates","在全服技能排行榜增加可排序的经验/小时列;此开关不影响名次徽章。","Add a sortable XP/hour column to standard skill leaderboards without affecting rank badges."],["guildCreditConversionsSort","guild","公会信用兑换性价比推荐","Guild credit exchange recommendations","按市场出售价计算兑换相同信用点的真实材料成本,并比较当前方案与最优方案。","Compare the selected conversion with the cheapest way to obtain the same credits using market asks."],["ThirdPartyLinks","tools","第三方工具入口","External tool shortcuts","在左侧菜单提供模拟器、计算器和脚本设置入口。","Add sidebar shortcuts for simulators, calculators, and MWITools settings."],["skillbook","tools","技能书计算器","Ability book calculator","在物品词典实时计算技能书解锁、升级所需本数与参考购买成本。","Calculate live ability-book unlock, leveling, and reference purchase requirements in the item dictionary."]],Os=Object.fromEntries(bg.map(([e,t,a,n,i,o])=>[e,{id:e,group:t,title:{zh:a,en:n},summary:{zh:i,en:o},details:{zh:i,en:o}}])),pg={actionBarProfit:"totalActionTime",actionQueue:"totalActionTime",actionPanel_foragingTotal:"actionPanel_totalTime",productionSummary:"actionPanel_totalTime",productionProfit:"actionPanel_totalTime",showsKeyInfoInIcon:"itemIconLevel",itemTooltip_profit:"itemTooltip_prices",showConsumTips:"itemTooltip_prices",lootChestEstimate:"itemTooltip_prices",lootSellAtAsk:"lootChestEstimate",lootBuyAtAsk:"lootChestEstimate",lootKeyFromFragments:"lootChestEstimate",taskMaterials:"taskInsights",taskQueueProgress:"taskInsights",taskAutoSort:"taskInsights",taskIcons:"taskInsights",taskStatistics:"taskInsights",taskClaimCollector:"taskInsights",taskMergeActions:"taskInsights",taskNewBadge:"taskInsights",taskTrainPlanner:"semiAutoTrain",guildOverview:"guildXpTracking",guildMemberXp:"guildXpTracking",guildLeaderboardXp:"guildXpTracking",guildIdleMembers:"guildOverview"};for(let[e,t]of Object.entries(pg))Os[e]&&(Os[e].parent=t);var qs=new Map;function gg(e){return ei[e]?.isTrue}s(gg,"getSetting");async function hg(e,t,a={}){if(!ei[e])return!1;let n=!!t,i=ei[e].isTrue;if(ei[e].isTrue=n,i===n&&!a.force)return!0;a.persist!==!1&&u.api.persistSettings?.();for(let o of qs.get(e)??[])try{o(n,i)}catch(r){console.error(ye?`[MWITools] 设置 ${e} 的监听器执行失败`:`[MWITools] Setting listener failed for ${e}`,r)}return await u.features.syncSetting(e),!0}s(hg,"setSetting");function _g(e,t){let a=qs.get(e)??new Set;return a.add(t),qs.set(e,a),()=>a.delete(t)}s(_g,"onSettingChange"),Object.defineProperties(u.config,{THOUSAND_SEPERATOR:{enumerable:!0,get(){return dg}},DECIMAL_SEPERATOR:{enumerable:!0,get(){return mg}},isZHInGameSetting:{enumerable:!0,get(){return yc()}},gameLanguage:{enumerable:!0,get(){return _c()}},isZH:{enumerable:!0,get(){return ye},set(e){ye=e}},SCRIPT_COLOR_MAIN:{enumerable:!0,get(){return wc},set(e){wc=e}},SCRIPT_COLOR_TOOLTIP:{enumerable:!0,get(){return vc},set(e){vc=e}},MARKET_API_URL:{enumerable:!0,get(){return u.api.getMarketApiUrl?.()??""}}}),Object.defineProperties(u.settings,{settingsMap:{enumerable:!0,get(){return ei},set(e){ei=e}},groups:{enumerable:!0,get(){return fg}},catalog:{enumerable:!0,get(){return Os}}}),Object.assign(u.settings,{get:gg,set:hg,onChange:_g}),u.registerStart("core/config.js",()=>{console.log(window.location.href)});var xc={"/items/coin":"金币","/items/task_token":"任务代币","/items/labyrinth_token":"迷宫代币","/items/chimerical_token":"奇幻代币","/items/sinister_token":"阴森代币","/items/enchanted_token":"秘法代币","/items/pirate_token":"海盗代币","/items/guild_token":"公会代币","/items/green_guild_credit":"绿色公会信用点","/items/brown_guild_credit":"棕色公会信用点","/items/white_guild_credit":"白色公会信用点","/items/blue_guild_credit":"蓝色公会信用点","/items/purple_guild_credit":"紫色公会信用点","/items/red_guild_credit":"红色公会信用点","/items/silver_guild_credit":"银色公会信用点","/items/gold_guild_credit":"金色公会信用点","/items/cowbell":"牛铃","/items/bag_of_10_cowbells":"牛铃袋 (10个)","/items/purples_gift":"小紫牛的礼物","/items/small_meteorite_cache":"小陨石舱","/items/medium_meteorite_cache":"中陨石舱","/items/large_meteorite_cache":"大陨石舱","/items/small_artisans_crate":"小工匠匣","/items/medium_artisans_crate":"中工匠匣","/items/large_artisans_crate":"大工匠匣","/items/small_treasure_chest":"小宝箱","/items/medium_treasure_chest":"中宝箱","/items/large_treasure_chest":"大宝箱","/items/chimerical_chest":"奇幻宝箱","/items/chimerical_refinement_chest":"奇幻精炼宝箱","/items/sinister_chest":"阴森宝箱","/items/sinister_refinement_chest":"阴森精炼宝箱","/items/enchanted_chest":"秘法宝箱","/items/enchanted_refinement_chest":"秘法精炼宝箱","/items/pirate_chest":"海盗宝箱","/items/pirate_refinement_chest":"海盗精炼宝箱","/items/purdoras_box_skilling":"紫多拉之盒(生活)","/items/purdoras_box_combat":"紫多拉之盒(战斗)","/items/labyrinth_refinement_chest":"迷宫精炼宝箱","/items/seal_of_gathering":"采集卷轴","/items/seal_of_gourmet":"美食卷轴","/items/seal_of_processing":"加工卷轴","/items/seal_of_efficiency":"效率卷轴","/items/seal_of_action_speed":"行动速度卷轴","/items/seal_of_combat_drop":"战斗掉落卷轴","/items/seal_of_attack_speed":"攻击速度卷轴","/items/seal_of_cast_speed":"施法速度卷轴","/items/seal_of_damage":"伤害卷轴","/items/seal_of_critical_rate":"暴击率卷轴","/items/seal_of_wisdom":"经验卷轴","/items/seal_of_rare_find":"稀有发现卷轴","/items/blue_key_fragment":"蓝色钥匙碎片","/items/green_key_fragment":"绿色钥匙碎片","/items/purple_key_fragment":"紫色钥匙碎片","/items/white_key_fragment":"白色钥匙碎片","/items/orange_key_fragment":"橙色钥匙碎片","/items/brown_key_fragment":"棕色钥匙碎片","/items/stone_key_fragment":"石头钥匙碎片","/items/dark_key_fragment":"黑暗钥匙碎片","/items/burning_key_fragment":"燃烧钥匙碎片","/items/chimerical_entry_key":"奇幻钥匙","/items/chimerical_chest_key":"奇幻宝箱钥匙","/items/sinister_entry_key":"阴森钥匙","/items/sinister_chest_key":"阴森宝箱钥匙","/items/enchanted_entry_key":"秘法钥匙","/items/enchanted_chest_key":"秘法宝箱钥匙","/items/pirate_entry_key":"海盗钥匙","/items/pirate_chest_key":"海盗宝箱钥匙","/items/donut":"甜甜圈","/items/blueberry_donut":"蓝莓甜甜圈","/items/blackberry_donut":"黑莓甜甜圈","/items/strawberry_donut":"草莓甜甜圈","/items/mooberry_donut":"哞莓甜甜圈","/items/marsberry_donut":"火星莓甜甜圈","/items/spaceberry_donut":"太空莓甜甜圈","/items/cupcake":"纸杯蛋糕","/items/blueberry_cake":"蓝莓蛋糕","/items/blackberry_cake":"黑莓蛋糕","/items/strawberry_cake":"草莓蛋糕","/items/mooberry_cake":"哞莓蛋糕","/items/marsberry_cake":"火星莓蛋糕","/items/spaceberry_cake":"太空莓蛋糕","/items/gummy":"软糖","/items/apple_gummy":"苹果软糖","/items/orange_gummy":"橙子软糖","/items/plum_gummy":"李子软糖","/items/peach_gummy":"桃子软糖","/items/dragon_fruit_gummy":"火龙果软糖","/items/star_fruit_gummy":"杨桃软糖","/items/yogurt":"酸奶","/items/apple_yogurt":"苹果酸奶","/items/orange_yogurt":"橙子酸奶","/items/plum_yogurt":"李子酸奶","/items/peach_yogurt":"桃子酸奶","/items/dragon_fruit_yogurt":"火龙果酸奶","/items/star_fruit_yogurt":"杨桃酸奶","/items/milking_tea":"挤奶茶","/items/foraging_tea":"采摘茶","/items/woodcutting_tea":"伐木茶","/items/cooking_tea":"烹饪茶","/items/brewing_tea":"冲泡茶","/items/alchemy_tea":"炼金茶","/items/enhancing_tea":"强化茶","/items/cheesesmithing_tea":"奶酪锻造茶","/items/crafting_tea":"制作茶","/items/tailoring_tea":"缝纫茶","/items/super_milking_tea":"超级挤奶茶","/items/super_foraging_tea":"超级采摘茶","/items/super_woodcutting_tea":"超级伐木茶","/items/super_cooking_tea":"超级烹饪茶","/items/super_brewing_tea":"超级冲泡茶","/items/super_alchemy_tea":"超级炼金茶","/items/super_enhancing_tea":"超级强化茶","/items/super_cheesesmithing_tea":"超级奶酪锻造茶","/items/super_crafting_tea":"超级制作茶","/items/super_tailoring_tea":"超级缝纫茶","/items/ultra_milking_tea":"究极挤奶茶","/items/ultra_foraging_tea":"究极采摘茶","/items/ultra_woodcutting_tea":"究极伐木茶","/items/ultra_cooking_tea":"究极烹饪茶","/items/ultra_brewing_tea":"究极冲泡茶","/items/ultra_alchemy_tea":"究极炼金茶","/items/ultra_enhancing_tea":"究极强化茶","/items/ultra_cheesesmithing_tea":"究极奶酪锻造茶","/items/ultra_crafting_tea":"究极制作茶","/items/ultra_tailoring_tea":"究极缝纫茶","/items/gathering_tea":"采集茶","/items/gourmet_tea":"美食茶","/items/wisdom_tea":"经验茶","/items/processing_tea":"加工茶","/items/efficiency_tea":"效率茶","/items/artisan_tea":"工匠茶","/items/catalytic_tea":"催化茶","/items/blessed_tea":"福气茶","/items/stamina_coffee":"耐力咖啡","/items/intelligence_coffee":"智力咖啡","/items/defense_coffee":"防御咖啡","/items/attack_coffee":"攻击咖啡","/items/melee_coffee":"近战咖啡","/items/ranged_coffee":"远程咖啡","/items/magic_coffee":"魔法咖啡","/items/super_stamina_coffee":"超级耐力咖啡","/items/super_intelligence_coffee":"超级智力咖啡","/items/super_defense_coffee":"超级防御咖啡","/items/super_attack_coffee":"超级攻击咖啡","/items/super_melee_coffee":"超级近战咖啡","/items/super_ranged_coffee":"超级远程咖啡","/items/super_magic_coffee":"超级魔法咖啡","/items/ultra_stamina_coffee":"究极耐力咖啡","/items/ultra_intelligence_coffee":"究极智力咖啡","/items/ultra_defense_coffee":"究极防御咖啡","/items/ultra_attack_coffee":"究极攻击咖啡","/items/ultra_melee_coffee":"究极近战咖啡","/items/ultra_ranged_coffee":"究极远程咖啡","/items/ultra_magic_coffee":"究极魔法咖啡","/items/wisdom_coffee":"经验咖啡","/items/lucky_coffee":"幸运咖啡","/items/swiftness_coffee":"迅捷咖啡","/items/channeling_coffee":"吟唱咖啡","/items/critical_coffee":"暴击咖啡","/items/poke":"破胆之刺","/items/impale":"透骨之刺","/items/puncture":"破甲之刺","/items/penetrating_strike":"贯心之刺","/items/scratch":"爪影斩","/items/cleave":"分裂斩","/items/maim":"血刃斩","/items/crippling_slash":"致残斩","/items/smack":"重碾","/items/sweep":"重扫","/items/stunning_blow":"重锤","/items/fracturing_impact":"碎裂冲击","/items/shield_bash":"盾击","/items/quick_shot":"快速射击","/items/aqua_arrow":"流水箭","/items/flame_arrow":"烈焰箭","/items/rain_of_arrows":"箭雨","/items/silencing_shot":"沉默之箭","/items/steady_shot":"稳定射击","/items/pestilent_shot":"疫病射击","/items/penetrating_shot":"贯穿射击","/items/water_strike":"流水冲击","/items/ice_spear":"冰枪术","/items/frost_surge":"冰霜爆裂","/items/mana_spring":"法力喷泉","/items/entangle":"缠绕","/items/toxic_pollen":"剧毒粉尘","/items/natures_veil":"自然菌幕","/items/life_drain":"生命吸取","/items/fireball":"火球","/items/flame_blast":"熔岩爆裂","/items/firestorm":"火焰风暴","/items/smoke_burst":"烟爆灭影","/items/minor_heal":"初级自愈术","/items/heal":"自愈术","/items/quick_aid":"快速治疗术","/items/rejuvenate":"群体治疗术","/items/taunt":"嘲讽","/items/provoke":"挑衅","/items/toughness":"坚韧","/items/elusiveness":"闪避","/items/precision":"精确","/items/berserk":"狂暴","/items/elemental_affinity":"元素增幅","/items/frenzy":"狂速","/items/spike_shell":"尖刺防护","/items/retribution":"惩戒","/items/vampirism":"吸血","/items/revive":"复活","/items/insanity":"疯狂","/items/invincible":"无敌","/items/speed_aura":"速度光环","/items/guardian_aura":"守护光环","/items/fierce_aura":"物理光环","/items/critical_aura":"暴击光环","/items/mystic_aura":"元素光环","/items/gobo_stabber":"哥布林长剑","/items/gobo_slasher":"哥布林关刀","/items/gobo_smasher":"哥布林狼牙棒","/items/spiked_bulwark":"尖刺重盾","/items/werewolf_slasher":"狼人关刀","/items/griffin_bulwark":"狮鹫重盾","/items/griffin_bulwark_refined":"狮鹫重盾 ★","/items/gobo_shooter":"哥布林弹弓","/items/vampiric_bow":"吸血弓","/items/cursed_bow":"咒怨之弓","/items/cursed_bow_refined":"咒怨之弓 ★","/items/gobo_boomstick":"哥布林火棍","/items/cheese_bulwark":"奶酪重盾","/items/verdant_bulwark":"翠绿重盾","/items/azure_bulwark":"蔚蓝重盾","/items/burble_bulwark":"深紫重盾","/items/crimson_bulwark":"绛红重盾","/items/rainbow_bulwark":"彩虹重盾","/items/holy_bulwark":"神圣重盾","/items/wooden_bow":"木弓","/items/birch_bow":"桦木弓","/items/cedar_bow":"雪松弓","/items/purpleheart_bow":"紫心弓","/items/ginkgo_bow":"银杏弓","/items/redwood_bow":"红杉弓","/items/arcane_bow":"神秘弓","/items/stalactite_spear":"石钟长枪","/items/granite_bludgeon":"花岗岩大棒","/items/furious_spear":"狂怒长枪","/items/furious_spear_refined":"狂怒长枪 ★","/items/regal_sword":"君王之剑","/items/regal_sword_refined":"君王之剑 ★","/items/chaotic_flail":"混沌连枷","/items/chaotic_flail_refined":"混沌连枷 ★","/items/soul_hunter_crossbow":"灵魂猎手弩","/items/sundering_crossbow":"裂空之弩","/items/sundering_crossbow_refined":"裂空之弩 ★","/items/frost_staff":"冰霜法杖","/items/infernal_battlestaff":"炼狱法杖","/items/jackalope_staff":"鹿角兔之杖","/items/rippling_trident":"涟漪三叉戟","/items/rippling_trident_refined":"涟漪三叉戟 ★","/items/blooming_trident":"绽放三叉戟","/items/blooming_trident_refined":"绽放三叉戟 ★","/items/blazing_trident":"炽焰三叉戟","/items/blazing_trident_refined":"炽焰三叉戟 ★","/items/cheese_sword":"奶酪剑","/items/verdant_sword":"翠绿剑","/items/azure_sword":"蔚蓝剑","/items/burble_sword":"深紫剑","/items/crimson_sword":"绛红剑","/items/rainbow_sword":"彩虹剑","/items/holy_sword":"神圣剑","/items/cheese_spear":"奶酪长枪","/items/verdant_spear":"翠绿长枪","/items/azure_spear":"蔚蓝长枪","/items/burble_spear":"深紫长枪","/items/crimson_spear":"绛红长枪","/items/rainbow_spear":"彩虹长枪","/items/holy_spear":"神圣长枪","/items/cheese_mace":"奶酪钉头锤","/items/verdant_mace":"翠绿钉头锤","/items/azure_mace":"蔚蓝钉头锤","/items/burble_mace":"深紫钉头锤","/items/crimson_mace":"绛红钉头锤","/items/rainbow_mace":"彩虹钉头锤","/items/holy_mace":"神圣钉头锤","/items/wooden_crossbow":"木弩","/items/birch_crossbow":"桦木弩","/items/cedar_crossbow":"雪松弩","/items/purpleheart_crossbow":"紫心弩","/items/ginkgo_crossbow":"银杏弩","/items/redwood_crossbow":"红杉弩","/items/arcane_crossbow":"神秘弩","/items/wooden_water_staff":"木制水法杖","/items/birch_water_staff":"桦木水法杖","/items/cedar_water_staff":"雪松水法杖","/items/purpleheart_water_staff":"紫心水法杖","/items/ginkgo_water_staff":"银杏水法杖","/items/redwood_water_staff":"红杉水法杖","/items/arcane_water_staff":"神秘水法杖","/items/wooden_nature_staff":"木制自然法杖","/items/birch_nature_staff":"桦木自然法杖","/items/cedar_nature_staff":"雪松自然法杖","/items/purpleheart_nature_staff":"紫心自然法杖","/items/ginkgo_nature_staff":"银杏自然法杖","/items/redwood_nature_staff":"红杉自然法杖","/items/arcane_nature_staff":"神秘自然法杖","/items/wooden_fire_staff":"木制火法杖","/items/birch_fire_staff":"桦木火法杖","/items/cedar_fire_staff":"雪松火法杖","/items/purpleheart_fire_staff":"紫心火法杖","/items/ginkgo_fire_staff":"银杏火法杖","/items/redwood_fire_staff":"红杉火法杖","/items/arcane_fire_staff":"神秘火法杖","/items/eye_watch":"掌上监工","/items/snake_fang_dirk":"蛇牙短剑","/items/vision_shield":"视觉盾","/items/gobo_defender":"哥布林防御者","/items/vampire_fang_dirk":"吸血鬼短剑","/items/knights_aegis":"骑士盾","/items/knights_aegis_refined":"骑士盾 ★","/items/treant_shield":"树人盾","/items/manticore_shield":"蝎狮盾","/items/tome_of_healing":"治疗之书","/items/tome_of_the_elements":"元素之书","/items/watchful_relic":"警戒遗物","/items/bishops_codex":"主教法典","/items/bishops_codex_refined":"主教法典 ★","/items/cheese_buckler":"奶酪圆盾","/items/verdant_buckler":"翠绿圆盾","/items/azure_buckler":"蔚蓝圆盾","/items/burble_buckler":"深紫圆盾","/items/crimson_buckler":"绛红圆盾","/items/rainbow_buckler":"彩虹圆盾","/items/holy_buckler":"神圣圆盾","/items/wooden_shield":"木盾","/items/birch_shield":"桦木盾","/items/cedar_shield":"雪松盾","/items/purpleheart_shield":"紫心盾","/items/ginkgo_shield":"银杏盾","/items/redwood_shield":"红杉盾","/items/arcane_shield":"神秘盾","/items/gatherer_cape":"采集者披风","/items/gatherer_cape_refined":"采集者披风 ★","/items/artificer_cape":"工匠披风","/items/artificer_cape_refined":"工匠披风 ★","/items/culinary_cape":"厨师披风","/items/culinary_cape_refined":"厨师披风 ★","/items/chance_cape":"机缘披风","/items/chance_cape_refined":"机缘披风 ★","/items/sinister_cape":"阴森披风","/items/sinister_cape_refined":"阴森披风 ★","/items/chimerical_quiver":"奇幻箭袋","/items/chimerical_quiver_refined":"奇幻箭袋 ★","/items/enchanted_cloak":"秘法披风","/items/enchanted_cloak_refined":"秘法披风 ★","/items/red_culinary_hat":"红色厨师帽","/items/snail_shell_helmet":"蜗牛壳头盔","/items/vision_helmet":"视觉头盔","/items/fluffy_red_hat":"蓬松红帽子","/items/corsair_helmet":"掠夺者头盔","/items/corsair_helmet_refined":"掠夺者头盔 ★","/items/acrobatic_hood":"杂技师兜帽","/items/acrobatic_hood_refined":"杂技师兜帽 ★","/items/magicians_hat":"魔术师帽","/items/magicians_hat_refined":"魔术师帽 ★","/items/cheese_helmet":"奶酪头盔","/items/verdant_helmet":"翠绿头盔","/items/azure_helmet":"蔚蓝头盔","/items/burble_helmet":"深紫头盔","/items/crimson_helmet":"绛红头盔","/items/rainbow_helmet":"彩虹头盔","/items/holy_helmet":"神圣头盔","/items/rough_hood":"粗糙兜帽","/items/reptile_hood":"爬行动物兜帽","/items/gobo_hood":"哥布林兜帽","/items/beast_hood":"野兽兜帽","/items/umbral_hood":"暗影兜帽","/items/cotton_hat":"棉帽","/items/linen_hat":"亚麻帽","/items/bamboo_hat":"竹帽","/items/silk_hat":"丝帽","/items/radiant_hat":"光辉帽","/items/dairyhands_top":"挤奶工上衣","/items/foragers_top":"采摘者上衣","/items/lumberjacks_top":"伐木工上衣","/items/cheesemakers_top":"奶酪师上衣","/items/crafters_top":"工匠上衣","/items/tailors_top":"裁缝上衣","/items/chefs_top":"厨师上衣","/items/brewers_top":"饮品师上衣","/items/alchemists_top":"炼金师上衣","/items/enhancers_top":"强化师上衣","/items/gator_vest":"鳄鱼马甲","/items/turtle_shell_body":"龟壳胸甲","/items/colossus_plate_body":"巨像胸甲","/items/demonic_plate_body":"恶魔胸甲","/items/anchorbound_plate_body":"锚定胸甲","/items/anchorbound_plate_body_refined":"锚定胸甲 ★","/items/maelstrom_plate_body":"怒涛胸甲","/items/maelstrom_plate_body_refined":"怒涛胸甲 ★","/items/marine_tunic":"海洋皮衣","/items/revenant_tunic":"亡灵皮衣","/items/griffin_tunic":"狮鹫皮衣","/items/kraken_tunic":"克拉肯皮衣","/items/kraken_tunic_refined":"克拉肯皮衣 ★","/items/icy_robe_top":"冰霜袍服","/items/flaming_robe_top":"烈焰袍服","/items/luna_robe_top":"月神袍服","/items/royal_water_robe_top":"皇家水系袍服","/items/royal_water_robe_top_refined":"皇家水系袍服 ★","/items/royal_nature_robe_top":"皇家自然系袍服","/items/royal_nature_robe_top_refined":"皇家自然系袍服 ★","/items/royal_fire_robe_top":"皇家火系袍服","/items/royal_fire_robe_top_refined":"皇家火系袍服 ★","/items/cheese_plate_body":"奶酪胸甲","/items/verdant_plate_body":"翠绿胸甲","/items/azure_plate_body":"蔚蓝胸甲","/items/burble_plate_body":"深紫胸甲","/items/crimson_plate_body":"绛红胸甲","/items/rainbow_plate_body":"彩虹胸甲","/items/holy_plate_body":"神圣胸甲","/items/rough_tunic":"粗糙皮衣","/items/reptile_tunic":"爬行动物皮衣","/items/gobo_tunic":"哥布林皮衣","/items/beast_tunic":"野兽皮衣","/items/umbral_tunic":"暗影皮衣","/items/cotton_robe_top":"棉袍服","/items/linen_robe_top":"亚麻袍服","/items/bamboo_robe_top":"竹袍服","/items/silk_robe_top":"丝绸袍服","/items/radiant_robe_top":"光辉袍服","/items/dairyhands_bottoms":"挤奶工下装","/items/foragers_bottoms":"采摘者下装","/items/lumberjacks_bottoms":"伐木工下装","/items/cheesemakers_bottoms":"奶酪师下装","/items/crafters_bottoms":"工匠下装","/items/tailors_bottoms":"裁缝下装","/items/chefs_bottoms":"厨师下装","/items/brewers_bottoms":"饮品师下装","/items/alchemists_bottoms":"炼金师下装","/items/enhancers_bottoms":"强化师下装","/items/turtle_shell_legs":"龟壳腿甲","/items/colossus_plate_legs":"巨像腿甲","/items/demonic_plate_legs":"恶魔腿甲","/items/anchorbound_plate_legs":"锚定腿甲","/items/anchorbound_plate_legs_refined":"锚定腿甲 ★","/items/maelstrom_plate_legs":"怒涛腿甲","/items/maelstrom_plate_legs_refined":"怒涛腿甲 ★","/items/marine_chaps":"航海皮裤","/items/revenant_chaps":"亡灵皮裤","/items/griffin_chaps":"狮鹫皮裤","/items/kraken_chaps":"克拉肯皮裤","/items/kraken_chaps_refined":"克拉肯皮裤 ★","/items/icy_robe_bottoms":"冰霜袍裙","/items/flaming_robe_bottoms":"烈焰袍裙","/items/luna_robe_bottoms":"月神袍裙","/items/royal_water_robe_bottoms":"皇家水系袍裙","/items/royal_water_robe_bottoms_refined":"皇家水系袍裙 ★","/items/royal_nature_robe_bottoms":"皇家自然系袍裙","/items/royal_nature_robe_bottoms_refined":"皇家自然系袍裙 ★","/items/royal_fire_robe_bottoms":"皇家火系袍裙","/items/royal_fire_robe_bottoms_refined":"皇家火系袍裙 ★","/items/cheese_plate_legs":"奶酪腿甲","/items/verdant_plate_legs":"翠绿腿甲","/items/azure_plate_legs":"蔚蓝腿甲","/items/burble_plate_legs":"深紫腿甲","/items/crimson_plate_legs":"绛红腿甲","/items/rainbow_plate_legs":"彩虹腿甲","/items/holy_plate_legs":"神圣腿甲","/items/rough_chaps":"粗糙皮裤","/items/reptile_chaps":"爬行动物皮裤","/items/gobo_chaps":"哥布林皮裤","/items/beast_chaps":"野兽皮裤","/items/umbral_chaps":"暗影皮裤","/items/cotton_robe_bottoms":"棉袍裙","/items/linen_robe_bottoms":"亚麻袍裙","/items/bamboo_robe_bottoms":"竹袍裙","/items/silk_robe_bottoms":"丝绸袍裙","/items/radiant_robe_bottoms":"光辉袍裙","/items/enchanted_gloves":"附魔手套","/items/pincer_gloves":"蟹钳手套","/items/panda_gloves":"熊猫手套","/items/magnetic_gloves":"磁力手套","/items/dodocamel_gauntlets":"渡渡驼护手","/items/dodocamel_gauntlets_refined":"渡渡驼护手 ★","/items/sighted_bracers":"瞄准护腕","/items/marksman_bracers":"神射护腕","/items/marksman_bracers_refined":"神射护腕 ★","/items/chrono_gloves":"时空手套","/items/cheese_gauntlets":"奶酪护手","/items/verdant_gauntlets":"翠绿护手","/items/azure_gauntlets":"蔚蓝护手","/items/burble_gauntlets":"深紫护手","/items/crimson_gauntlets":"绛红护手","/items/rainbow_gauntlets":"彩虹护手","/items/holy_gauntlets":"神圣护手","/items/rough_bracers":"粗糙护腕","/items/reptile_bracers":"爬行动物护腕","/items/gobo_bracers":"哥布林护腕","/items/beast_bracers":"野兽护腕","/items/umbral_bracers":"暗影护腕","/items/cotton_gloves":"棉手套","/items/linen_gloves":"亚麻手套","/items/bamboo_gloves":"竹手套","/items/silk_gloves":"丝手套","/items/radiant_gloves":"光辉手套","/items/collectors_boots":"收藏家靴","/items/shoebill_shoes":"鲸头鹳鞋","/items/black_bear_shoes":"黑熊鞋","/items/grizzly_bear_shoes":"棕熊鞋","/items/polar_bear_shoes":"北极熊鞋","/items/pathbreaker_boots":"开路者靴","/items/pathbreaker_boots_refined":"开路者靴 ★","/items/centaur_boots":"半人马靴","/items/pathfinder_boots":"探路者靴","/items/pathfinder_boots_refined":"探路者靴 ★","/items/sorcerer_boots":"巫师靴","/items/pathseeker_boots":"寻路者靴","/items/pathseeker_boots_refined":"寻路者靴 ★","/items/cheese_boots":"奶酪靴","/items/verdant_boots":"翠绿靴","/items/azure_boots":"蔚蓝靴","/items/burble_boots":"深紫靴","/items/crimson_boots":"绛红靴","/items/rainbow_boots":"彩虹靴","/items/holy_boots":"神圣靴","/items/rough_boots":"粗糙靴","/items/reptile_boots":"爬行动物靴","/items/gobo_boots":"哥布林靴","/items/beast_boots":"野兽靴","/items/umbral_boots":"暗影靴","/items/cotton_boots":"棉靴","/items/linen_boots":"亚麻靴","/items/bamboo_boots":"竹靴","/items/silk_boots":"丝靴","/items/radiant_boots":"光辉靴","/items/small_pouch":"小袋子","/items/medium_pouch":"中袋子","/items/large_pouch":"大袋子","/items/giant_pouch":"巨大袋子","/items/gluttonous_pouch":"贪食之袋","/items/guzzling_pouch":"暴饮之囊","/items/necklace_of_efficiency":"效率项链","/items/fighter_necklace":"战士项链","/items/ranger_necklace":"射手项链","/items/wizard_necklace":"巫师项链","/items/necklace_of_wisdom":"经验项链","/items/necklace_of_speed":"速度项链","/items/philosophers_necklace":"贤者项链","/items/earrings_of_gathering":"采集耳环","/items/earrings_of_essence_find":"精华发现耳环","/items/earrings_of_armor":"护甲耳环","/items/earrings_of_regeneration":"恢复耳环","/items/earrings_of_resistance":"抗性耳环","/items/earrings_of_rare_find":"稀有发现耳环","/items/earrings_of_critical_strike":"暴击耳环","/items/philosophers_earrings":"贤者耳环","/items/ring_of_gathering":"采集戒指","/items/ring_of_essence_find":"精华发现戒指","/items/ring_of_armor":"护甲戒指","/items/ring_of_regeneration":"恢复戒指","/items/ring_of_resistance":"抗性戒指","/items/ring_of_rare_find":"稀有发现戒指","/items/ring_of_critical_strike":"暴击戒指","/items/philosophers_ring":"贤者戒指","/items/trainee_milking_charm":"实习挤奶护符","/items/basic_milking_charm":"基础挤奶护符","/items/advanced_milking_charm":"高级挤奶护符","/items/expert_milking_charm":"专家挤奶护符","/items/master_milking_charm":"大师挤奶护符","/items/grandmaster_milking_charm":"宗师挤奶护符","/items/trainee_foraging_charm":"实习采摘护符","/items/basic_foraging_charm":"基础采摘护符","/items/advanced_foraging_charm":"高级采摘护符","/items/expert_foraging_charm":"专家采摘护符","/items/master_foraging_charm":"大师采摘护符","/items/grandmaster_foraging_charm":"宗师采摘护符","/items/trainee_woodcutting_charm":"实习伐木护符","/items/basic_woodcutting_charm":"基础伐木护符","/items/advanced_woodcutting_charm":"高级伐木护符","/items/expert_woodcutting_charm":"专家伐木护符","/items/master_woodcutting_charm":"大师伐木护符","/items/grandmaster_woodcutting_charm":"宗师伐木护符","/items/trainee_cheesesmithing_charm":"实习奶酪锻造护符","/items/basic_cheesesmithing_charm":"基础奶酪锻造护符","/items/advanced_cheesesmithing_charm":"高级奶酪锻造护符","/items/expert_cheesesmithing_charm":"专家奶酪锻造护符","/items/master_cheesesmithing_charm":"大师奶酪锻造护符","/items/grandmaster_cheesesmithing_charm":"宗师奶酪锻造护符","/items/trainee_crafting_charm":"实习制作护符","/items/basic_crafting_charm":"基础制作护符","/items/advanced_crafting_charm":"高级制作护符","/items/expert_crafting_charm":"专家制作护符","/items/master_crafting_charm":"大师制作护符","/items/grandmaster_crafting_charm":"宗师制作护符","/items/trainee_tailoring_charm":"实习缝纫护符","/items/basic_tailoring_charm":"基础缝纫护符","/items/advanced_tailoring_charm":"高级缝纫护符","/items/expert_tailoring_charm":"专家缝纫护符","/items/master_tailoring_charm":"大师缝纫护符","/items/grandmaster_tailoring_charm":"宗师缝纫护符","/items/trainee_cooking_charm":"实习烹饪护符","/items/basic_cooking_charm":"基础烹饪护符","/items/advanced_cooking_charm":"高级烹饪护符","/items/expert_cooking_charm":"专家烹饪护符","/items/master_cooking_charm":"大师烹饪护符","/items/grandmaster_cooking_charm":"宗师烹饪护符","/items/trainee_brewing_charm":"实习冲泡护符","/items/basic_brewing_charm":"基础冲泡护符","/items/advanced_brewing_charm":"高级冲泡护符","/items/expert_brewing_charm":"专家冲泡护符","/items/master_brewing_charm":"大师冲泡护符","/items/grandmaster_brewing_charm":"宗师冲泡护符","/items/trainee_alchemy_charm":"实习炼金护符","/items/basic_alchemy_charm":"基础炼金护符","/items/advanced_alchemy_charm":"高级炼金护符","/items/expert_alchemy_charm":"专家炼金护符","/items/master_alchemy_charm":"大师炼金护符","/items/grandmaster_alchemy_charm":"宗师炼金护符","/items/trainee_enhancing_charm":"实习强化护符","/items/basic_enhancing_charm":"基础强化护符","/items/advanced_enhancing_charm":"高级强化护符","/items/expert_enhancing_charm":"专家强化护符","/items/master_enhancing_charm":"大师强化护符","/items/grandmaster_enhancing_charm":"宗师强化护符","/items/trainee_stamina_charm":"实习耐力护符","/items/basic_stamina_charm":"基础耐力护符","/items/advanced_stamina_charm":"高级耐力护符","/items/expert_stamina_charm":"专家耐力护符","/items/master_stamina_charm":"大师耐力护符","/items/grandmaster_stamina_charm":"宗师耐力护符","/items/trainee_intelligence_charm":"实习智力护符","/items/basic_intelligence_charm":"基础智力护符","/items/advanced_intelligence_charm":"高级智力护符","/items/expert_intelligence_charm":"专家智力护符","/items/master_intelligence_charm":"大师智力护符","/items/grandmaster_intelligence_charm":"宗师智力护符","/items/trainee_attack_charm":"实习攻击护符","/items/basic_attack_charm":"基础攻击护符","/items/advanced_attack_charm":"高级攻击护符","/items/expert_attack_charm":"专家攻击护符","/items/master_attack_charm":"大师攻击护符","/items/grandmaster_attack_charm":"宗师攻击护符","/items/trainee_defense_charm":"实习防御护符","/items/basic_defense_charm":"基础防御护符","/items/advanced_defense_charm":"高级防御护符","/items/expert_defense_charm":"专家防御护符","/items/master_defense_charm":"大师防御护符","/items/grandmaster_defense_charm":"宗师防御护符","/items/trainee_melee_charm":"实习近战护符","/items/basic_melee_charm":"基础近战护符","/items/advanced_melee_charm":"高级近战护符","/items/expert_melee_charm":"专家近战护符","/items/master_melee_charm":"大师近战护符","/items/grandmaster_melee_charm":"宗师近战护符","/items/trainee_ranged_charm":"实习远程护符","/items/basic_ranged_charm":"基础远程护符","/items/advanced_ranged_charm":"高级远程护符","/items/expert_ranged_charm":"专家远程护符","/items/master_ranged_charm":"大师远程护符","/items/grandmaster_ranged_charm":"宗师远程护符","/items/trainee_magic_charm":"实习魔法护符","/items/basic_magic_charm":"基础魔法护符","/items/advanced_magic_charm":"高级魔法护符","/items/expert_magic_charm":"专家魔法护符","/items/master_magic_charm":"大师魔法护符","/items/grandmaster_magic_charm":"宗师魔法护符","/items/basic_task_badge":"基础任务徽章","/items/advanced_task_badge":"高级任务徽章","/items/expert_task_badge":"专家任务徽章","/items/celestial_brush":"星空刷子","/items/cheese_brush":"奶酪刷子","/items/verdant_brush":"翠绿刷子","/items/azure_brush":"蔚蓝刷子","/items/burble_brush":"深紫刷子","/items/crimson_brush":"绛红刷子","/items/rainbow_brush":"彩虹刷子","/items/holy_brush":"神圣刷子","/items/celestial_shears":"星空剪刀","/items/cheese_shears":"奶酪剪刀","/items/verdant_shears":"翠绿剪刀","/items/azure_shears":"蔚蓝剪刀","/items/burble_shears":"深紫剪刀","/items/crimson_shears":"绛红剪刀","/items/rainbow_shears":"彩虹剪刀","/items/holy_shears":"神圣剪刀","/items/celestial_hatchet":"星空斧头","/items/cheese_hatchet":"奶酪斧头","/items/verdant_hatchet":"翠绿斧头","/items/azure_hatchet":"蔚蓝斧头","/items/burble_hatchet":"深紫斧头","/items/crimson_hatchet":"绛红斧头","/items/rainbow_hatchet":"彩虹斧头","/items/holy_hatchet":"神圣斧头","/items/celestial_hammer":"星空锤子","/items/cheese_hammer":"奶酪锤子","/items/verdant_hammer":"翠绿锤子","/items/azure_hammer":"蔚蓝锤子","/items/burble_hammer":"深紫锤子","/items/crimson_hammer":"绛红锤子","/items/rainbow_hammer":"彩虹锤子","/items/holy_hammer":"神圣锤子","/items/celestial_chisel":"星空凿子","/items/cheese_chisel":"奶酪凿子","/items/verdant_chisel":"翠绿凿子","/items/azure_chisel":"蔚蓝凿子","/items/burble_chisel":"深紫凿子","/items/crimson_chisel":"绛红凿子","/items/rainbow_chisel":"彩虹凿子","/items/holy_chisel":"神圣凿子","/items/celestial_needle":"星空针","/items/cheese_needle":"奶酪针","/items/verdant_needle":"翠绿针","/items/azure_needle":"蔚蓝针","/items/burble_needle":"深紫针","/items/crimson_needle":"绛红针","/items/rainbow_needle":"彩虹针","/items/holy_needle":"神圣针","/items/celestial_spatula":"星空锅铲","/items/cheese_spatula":"奶酪锅铲","/items/verdant_spatula":"翠绿锅铲","/items/azure_spatula":"蔚蓝锅铲","/items/burble_spatula":"深紫锅铲","/items/crimson_spatula":"绛红锅铲","/items/rainbow_spatula":"彩虹锅铲","/items/holy_spatula":"神圣锅铲","/items/celestial_pot":"星空壶","/items/cheese_pot":"奶酪壶","/items/verdant_pot":"翠绿壶","/items/azure_pot":"蔚蓝壶","/items/burble_pot":"深紫壶","/items/crimson_pot":"绛红壶","/items/rainbow_pot":"彩虹壶","/items/holy_pot":"神圣壶","/items/celestial_alembic":"星空蒸馏器","/items/cheese_alembic":"奶酪蒸馏器","/items/verdant_alembic":"翠绿蒸馏器","/items/azure_alembic":"蔚蓝蒸馏器","/items/burble_alembic":"深紫蒸馏器","/items/crimson_alembic":"绛红蒸馏器","/items/rainbow_alembic":"彩虹蒸馏器","/items/holy_alembic":"神圣蒸馏器","/items/celestial_enhancer":"星空强化器","/items/cheese_enhancer":"奶酪强化器","/items/verdant_enhancer":"翠绿强化器","/items/azure_enhancer":"蔚蓝强化器","/items/burble_enhancer":"深紫强化器","/items/crimson_enhancer":"绛红强化器","/items/rainbow_enhancer":"彩虹强化器","/items/holy_enhancer":"神圣强化器","/items/milk":"牛奶","/items/verdant_milk":"翠绿牛奶","/items/azure_milk":"蔚蓝牛奶","/items/burble_milk":"深紫牛奶","/items/crimson_milk":"绛红牛奶","/items/rainbow_milk":"彩虹牛奶","/items/holy_milk":"神圣牛奶","/items/cheese":"奶酪","/items/verdant_cheese":"翠绿奶酪","/items/azure_cheese":"蔚蓝奶酪","/items/burble_cheese":"深紫奶酪","/items/crimson_cheese":"绛红奶酪","/items/rainbow_cheese":"彩虹奶酪","/items/holy_cheese":"神圣奶酪","/items/log":"原木","/items/birch_log":"白桦原木","/items/cedar_log":"雪松原木","/items/purpleheart_log":"紫心原木","/items/ginkgo_log":"银杏原木","/items/redwood_log":"红杉原木","/items/arcane_log":"神秘原木","/items/lumber":"木板","/items/birch_lumber":"白桦木板","/items/cedar_lumber":"雪松木板","/items/purpleheart_lumber":"紫心木板","/items/ginkgo_lumber":"银杏木板","/items/redwood_lumber":"红杉木板","/items/arcane_lumber":"神秘木板","/items/rough_hide":"粗糙兽皮","/items/reptile_hide":"爬行动物皮","/items/gobo_hide":"哥布林皮","/items/beast_hide":"野兽皮","/items/umbral_hide":"暗影皮","/items/rough_leather":"粗糙皮革","/items/reptile_leather":"爬行动物皮革","/items/gobo_leather":"哥布林皮革","/items/beast_leather":"野兽皮革","/items/umbral_leather":"暗影皮革","/items/cotton":"棉花","/items/flax":"亚麻","/items/bamboo_branch":"竹子","/items/cocoon":"蚕茧","/items/radiant_fiber":"光辉纤维","/items/cotton_fabric":"棉花布料","/items/linen_fabric":"亚麻布料","/items/bamboo_fabric":"竹子布料","/items/silk_fabric":"丝绸","/items/radiant_fabric":"光辉布料","/items/egg":"鸡蛋","/items/wheat":"小麦","/items/sugar":"糖","/items/blueberry":"蓝莓","/items/blackberry":"黑莓","/items/strawberry":"草莓","/items/mooberry":"哞莓","/items/marsberry":"火星莓","/items/spaceberry":"太空莓","/items/apple":"苹果","/items/orange":"橙子","/items/plum":"李子","/items/peach":"桃子","/items/dragon_fruit":"火龙果","/items/star_fruit":"杨桃","/items/arabica_coffee_bean":"低级咖啡豆","/items/robusta_coffee_bean":"中级咖啡豆","/items/liberica_coffee_bean":"高级咖啡豆","/items/excelsa_coffee_bean":"特级咖啡豆","/items/fieriosa_coffee_bean":"火山咖啡豆","/items/spacia_coffee_bean":"太空咖啡豆","/items/green_tea_leaf":"绿茶叶","/items/black_tea_leaf":"黑茶叶","/items/burble_tea_leaf":"紫茶叶","/items/moolong_tea_leaf":"哞龙茶叶","/items/red_tea_leaf":"红茶叶","/items/emp_tea_leaf":"虚空茶叶","/items/catalyst_of_coinification":"点金催化剂","/items/catalyst_of_decomposition":"分解催化剂","/items/catalyst_of_transmutation":"转化催化剂","/items/prime_catalyst":"至高催化剂","/items/snake_fang":"蛇牙","/items/shoebill_feather":"鲸头鹳羽毛","/items/snail_shell":"蜗牛壳","/items/crab_pincer":"蟹钳","/items/turtle_shell":"乌龟壳","/items/marine_scale":"海洋鳞片","/items/treant_bark":"树皮","/items/centaur_hoof":"半人马蹄","/items/luna_wing":"月神翼","/items/gobo_rag":"哥布林抹布","/items/goggles":"护目镜","/items/magnifying_glass":"放大镜","/items/eye_of_the_watcher":"观察者之眼","/items/icy_cloth":"冰霜织物","/items/flaming_cloth":"烈焰织物","/items/sorcerers_sole":"魔法师鞋底","/items/chrono_sphere":"时空球","/items/frost_sphere":"冰霜球","/items/panda_fluff":"熊猫绒","/items/black_bear_fluff":"黑熊绒","/items/grizzly_bear_fluff":"棕熊绒","/items/polar_bear_fluff":"北极熊绒","/items/red_panda_fluff":"小熊猫绒","/items/magnet":"磁铁","/items/stalactite_shard":"钟乳石碎片","/items/living_granite":"花岗岩","/items/colossus_core":"巨像核心","/items/vampire_fang":"吸血鬼之牙","/items/werewolf_claw":"狼人之爪","/items/revenant_anima":"亡者之魂","/items/soul_fragment":"灵魂碎片","/items/infernal_ember":"地狱余烬","/items/demonic_core":"恶魔核心","/items/griffin_leather":"狮鹫之皮","/items/manticore_sting":"蝎狮之刺","/items/jackalope_antler":"鹿角兔之角","/items/dodocamel_plume":"渡渡驼之翎","/items/griffin_talon":"狮鹫之爪","/items/chimerical_refinement_shard":"奇幻精炼碎片","/items/acrobats_ribbon":"杂技师彩带","/items/magicians_cloth":"魔术师织物","/items/chaotic_chain":"混沌锁链","/items/cursed_ball":"诅咒之球","/items/sinister_refinement_shard":"阴森精炼碎片","/items/royal_cloth":"皇家织物","/items/knights_ingot":"骑士之锭","/items/bishops_scroll":"主教卷轴","/items/regal_jewel":"君王宝石","/items/sundering_jewel":"裂空宝石","/items/enchanted_refinement_shard":"秘法精炼碎片","/items/marksman_brooch":"神射胸针","/items/corsair_crest":"掠夺者徽章","/items/damaged_anchor":"破损船锚","/items/maelstrom_plating":"怒涛甲片","/items/kraken_leather":"克拉肯皮革","/items/kraken_fang":"克拉肯之牙","/items/pirate_refinement_shard":"海盗精炼碎片","/items/pathbreaker_lodestone":"开路者磁石","/items/pathfinder_lodestone":"探路者磁石","/items/pathseeker_lodestone":"寻路者磁石","/items/labyrinth_refinement_shard":"迷宫精炼碎片","/items/butter_of_proficiency":"精通之油","/items/thread_of_expertise":"专精之线","/items/branch_of_insight":"洞察之枝","/items/gluttonous_energy":"贪食能量","/items/guzzling_energy":"暴饮能量","/items/milking_essence":"挤奶精华","/items/foraging_essence":"采摘精华","/items/woodcutting_essence":"伐木精华","/items/cheesesmithing_essence":"奶酪锻造精华","/items/crafting_essence":"制作精华","/items/tailoring_essence":"缝纫精华","/items/cooking_essence":"烹饪精华","/items/brewing_essence":"冲泡精华","/items/alchemy_essence":"炼金精华","/items/enhancing_essence":"强化精华","/items/swamp_essence":"沼泽精华","/items/aqua_essence":"海洋精华","/items/jungle_essence":"丛林精华","/items/gobo_essence":"哥布林精华","/items/eyessence":"眼精华","/items/sorcerer_essence":"法师精华","/items/bear_essence":"熊熊精华","/items/golem_essence":"魔像精华","/items/twilight_essence":"暮光精华","/items/abyssal_essence":"地狱精华","/items/chimerical_essence":"奇幻精华","/items/sinister_essence":"阴森精华","/items/enchanted_essence":"秘法精华","/items/pirate_essence":"海盗精华","/items/labyrinth_essence":"迷宫精华","/items/task_crystal":"任务水晶","/items/star_fragment":"星光碎片","/items/pearl":"珍珠","/items/amber":"琥珀","/items/garnet":"石榴石","/items/jade":"翡翠","/items/amethyst":"紫水晶","/items/moonstone":"月亮石","/items/sunstone":"太阳石","/items/philosophers_stone":"贤者之石","/items/crushed_pearl":"珍珠碎片","/items/crushed_amber":"琥珀碎片","/items/crushed_garnet":"石榴石碎片","/items/crushed_jade":"翡翠碎片","/items/crushed_amethyst":"紫水晶碎片","/items/crushed_moonstone":"月亮石碎片","/items/crushed_sunstone":"太阳石碎片","/items/crushed_philosophers_stone":"贤者之石碎片","/items/shard_of_protection":"保护碎片","/items/mirror_of_protection":"保护之镜","/items/philosophers_mirror":"贤者之镜","/items/basic_torch":"基础火把","/items/advanced_torch":"进阶火把","/items/expert_torch":"专家火把","/items/basic_shroud":"基础斗篷","/items/advanced_shroud":"进阶斗篷","/items/expert_shroud":"专家斗篷","/items/basic_beacon":"基础探照灯","/items/advanced_beacon":"进阶探照灯","/items/expert_beacon":"专家探照灯","/items/basic_food_crate":"基础食物箱","/items/advanced_food_crate":"进阶食物箱","/items/expert_food_crate":"专家食物箱","/items/basic_tea_crate":"基础茶叶箱","/items/advanced_tea_crate":"进阶茶叶箱","/items/expert_tea_crate":"专家茶叶箱","/items/basic_coffee_crate":"基础咖啡箱","/items/advanced_coffee_crate":"进阶咖啡箱","/items/expert_coffee_crate":"专家咖啡箱"},kc={"/actions/milking/cow":"奶牛","/actions/milking/verdant_cow":"翠绿奶牛","/actions/milking/azure_cow":"蔚蓝奶牛","/actions/milking/burble_cow":"深紫奶牛","/actions/milking/crimson_cow":"绛红奶牛","/actions/milking/unicow":"彩虹奶牛","/actions/milking/holy_cow":"神圣奶牛","/actions/foraging/egg":"鸡蛋","/actions/foraging/wheat":"小麦","/actions/foraging/sugar":"糖","/actions/foraging/cotton":"棉花","/actions/foraging/farmland":"翠野农场","/actions/foraging/blueberry":"蓝莓","/actions/foraging/apple":"苹果","/actions/foraging/arabica_coffee_bean":"低级咖啡豆","/actions/foraging/flax":"亚麻","/actions/foraging/shimmering_lake":"波光湖泊","/actions/foraging/blackberry":"黑莓","/actions/foraging/orange":"橙子","/actions/foraging/robusta_coffee_bean":"中级咖啡豆","/actions/foraging/misty_forest":"迷雾森林","/actions/foraging/strawberry":"草莓","/actions/foraging/plum":"李子","/actions/foraging/liberica_coffee_bean":"高级咖啡豆","/actions/foraging/bamboo_branch":"竹子","/actions/foraging/burble_beach":"深紫沙滩","/actions/foraging/mooberry":"哞莓","/actions/foraging/peach":"桃子","/actions/foraging/excelsa_coffee_bean":"特级咖啡豆","/actions/foraging/cocoon":"蚕茧","/actions/foraging/silly_cow_valley":"傻牛山谷","/actions/foraging/marsberry":"火星莓","/actions/foraging/dragon_fruit":"火龙果","/actions/foraging/fieriosa_coffee_bean":"火山咖啡豆","/actions/foraging/olympus_mons":"奥林匹斯山","/actions/foraging/spaceberry":"太空莓","/actions/foraging/star_fruit":"杨桃","/actions/foraging/spacia_coffee_bean":"太空咖啡豆","/actions/foraging/radiant_fiber":"光辉纤维","/actions/foraging/asteroid_belt":"小行星带","/actions/woodcutting/tree":"树","/actions/woodcutting/birch_tree":"桦树","/actions/woodcutting/cedar_tree":"雪松树","/actions/woodcutting/purpleheart_tree":"紫心树","/actions/woodcutting/ginkgo_tree":"银杏树","/actions/woodcutting/redwood_tree":"红杉树","/actions/woodcutting/arcane_tree":"奥秘树","/actions/cheesesmithing/cheese":"奶酪","/actions/cheesesmithing/cheese_boots":"奶酪靴","/actions/cheesesmithing/cheese_gauntlets":"奶酪护手","/actions/cheesesmithing/cheese_sword":"奶酪剑","/actions/cheesesmithing/cheese_brush":"奶酪刷子","/actions/cheesesmithing/cheese_shears":"奶酪剪刀","/actions/cheesesmithing/cheese_hatchet":"奶酪斧头","/actions/cheesesmithing/cheese_spear":"奶酪长枪","/actions/cheesesmithing/cheese_hammer":"奶酪锤子","/actions/cheesesmithing/cheese_chisel":"奶酪凿子","/actions/cheesesmithing/cheese_needle":"奶酪针","/actions/cheesesmithing/cheese_spatula":"奶酪锅铲","/actions/cheesesmithing/cheese_pot":"奶酪壶","/actions/cheesesmithing/cheese_mace":"奶酪钉头锤","/actions/cheesesmithing/cheese_alembic":"奶酪蒸馏器","/actions/cheesesmithing/cheese_enhancer":"奶酪强化器","/actions/cheesesmithing/cheese_helmet":"奶酪头盔","/actions/cheesesmithing/cheese_buckler":"奶酪圆盾","/actions/cheesesmithing/cheese_bulwark":"奶酪重盾","/actions/cheesesmithing/cheese_plate_legs":"奶酪腿甲","/actions/cheesesmithing/cheese_plate_body":"奶酪胸甲","/actions/cheesesmithing/verdant_cheese":"翠绿奶酪","/actions/cheesesmithing/verdant_boots":"翠绿靴","/actions/cheesesmithing/verdant_gauntlets":"翠绿护手","/actions/cheesesmithing/verdant_sword":"翠绿剑","/actions/cheesesmithing/verdant_brush":"翠绿刷子","/actions/cheesesmithing/verdant_shears":"翠绿剪刀","/actions/cheesesmithing/verdant_hatchet":"翠绿斧头","/actions/cheesesmithing/verdant_spear":"翠绿长枪","/actions/cheesesmithing/verdant_hammer":"翠绿锤子","/actions/cheesesmithing/verdant_chisel":"翠绿凿子","/actions/cheesesmithing/verdant_needle":"翠绿针","/actions/cheesesmithing/verdant_spatula":"翠绿锅铲","/actions/cheesesmithing/verdant_pot":"翠绿壶","/actions/cheesesmithing/verdant_mace":"翠绿钉头锤","/actions/cheesesmithing/snake_fang_dirk":"蛇牙短剑","/actions/cheesesmithing/verdant_alembic":"翠绿蒸馏器","/actions/cheesesmithing/verdant_enhancer":"翠绿强化器","/actions/cheesesmithing/verdant_helmet":"翠绿头盔","/actions/cheesesmithing/verdant_buckler":"翠绿圆盾","/actions/cheesesmithing/verdant_bulwark":"翠绿重盾","/actions/cheesesmithing/verdant_plate_legs":"翠绿腿甲","/actions/cheesesmithing/verdant_plate_body":"翠绿胸甲","/actions/cheesesmithing/azure_cheese":"蔚蓝奶酪","/actions/cheesesmithing/azure_boots":"蔚蓝靴","/actions/cheesesmithing/basic_beacon":"基础探照灯","/actions/cheesesmithing/azure_gauntlets":"蔚蓝护手","/actions/cheesesmithing/azure_sword":"蔚蓝剑","/actions/cheesesmithing/azure_brush":"蔚蓝刷子","/actions/cheesesmithing/azure_shears":"蔚蓝剪刀","/actions/cheesesmithing/azure_hatchet":"蔚蓝斧头","/actions/cheesesmithing/azure_spear":"蔚蓝长枪","/actions/cheesesmithing/azure_hammer":"蔚蓝锤子","/actions/cheesesmithing/azure_chisel":"蔚蓝凿子","/actions/cheesesmithing/azure_needle":"蔚蓝针","/actions/cheesesmithing/azure_spatula":"蔚蓝锅铲","/actions/cheesesmithing/azure_pot":"蔚蓝壶","/actions/cheesesmithing/azure_mace":"蔚蓝钉头锤","/actions/cheesesmithing/pincer_gloves":"蟹钳手套","/actions/cheesesmithing/azure_alembic":"蔚蓝蒸馏器","/actions/cheesesmithing/azure_enhancer":"蔚蓝强化器","/actions/cheesesmithing/azure_helmet":"蔚蓝头盔","/actions/cheesesmithing/azure_buckler":"蔚蓝圆盾","/actions/cheesesmithing/azure_bulwark":"蔚蓝重盾","/actions/cheesesmithing/azure_plate_legs":"蔚蓝腿甲","/actions/cheesesmithing/snail_shell_helmet":"蜗牛壳头盔","/actions/cheesesmithing/azure_plate_body":"蔚蓝胸甲","/actions/cheesesmithing/turtle_shell_legs":"龟壳腿甲","/actions/cheesesmithing/turtle_shell_body":"龟壳胸甲","/actions/cheesesmithing/burble_cheese":"深紫奶酪","/actions/cheesesmithing/burble_boots":"深紫靴","/actions/cheesesmithing/burble_gauntlets":"深紫护手","/actions/cheesesmithing/burble_sword":"深紫剑","/actions/cheesesmithing/burble_brush":"深紫刷子","/actions/cheesesmithing/burble_shears":"深紫剪刀","/actions/cheesesmithing/burble_hatchet":"深紫斧头","/actions/cheesesmithing/burble_spear":"深紫长枪","/actions/cheesesmithing/burble_hammer":"深紫锤子","/actions/cheesesmithing/burble_chisel":"深紫凿子","/actions/cheesesmithing/burble_needle":"深紫针","/actions/cheesesmithing/burble_spatula":"深紫锅铲","/actions/cheesesmithing/burble_pot":"深紫壶","/actions/cheesesmithing/burble_mace":"深紫钉头锤","/actions/cheesesmithing/burble_alembic":"深紫蒸馏器","/actions/cheesesmithing/burble_enhancer":"深紫强化器","/actions/cheesesmithing/burble_helmet":"深紫头盔","/actions/cheesesmithing/burble_buckler":"深紫圆盾","/actions/cheesesmithing/burble_bulwark":"深紫重盾","/actions/cheesesmithing/burble_plate_legs":"深紫腿甲","/actions/cheesesmithing/burble_plate_body":"深紫胸甲","/actions/cheesesmithing/crimson_cheese":"绛红奶酪","/actions/cheesesmithing/crimson_boots":"绛红靴","/actions/cheesesmithing/advanced_beacon":"进阶探照灯","/actions/cheesesmithing/crimson_gauntlets":"绛红护手","/actions/cheesesmithing/crimson_sword":"绛红剑","/actions/cheesesmithing/crimson_brush":"绛红刷子","/actions/cheesesmithing/crimson_shears":"绛红剪刀","/actions/cheesesmithing/crimson_hatchet":"绛红斧头","/actions/cheesesmithing/crimson_spear":"绛红长枪","/actions/cheesesmithing/crimson_hammer":"绛红锤子","/actions/cheesesmithing/crimson_chisel":"绛红凿子","/actions/cheesesmithing/crimson_needle":"绛红针","/actions/cheesesmithing/crimson_spatula":"绛红锅铲","/actions/cheesesmithing/crimson_pot":"绛红壶","/actions/cheesesmithing/crimson_mace":"绛红钉头锤","/actions/cheesesmithing/crimson_alembic":"绛红蒸馏器","/actions/cheesesmithing/crimson_enhancer":"绛红强化器","/actions/cheesesmithing/crimson_helmet":"绛红头盔","/actions/cheesesmithing/crimson_buckler":"绛红圆盾","/actions/cheesesmithing/crimson_bulwark":"绛红重盾","/actions/cheesesmithing/crimson_plate_legs":"绛红腿甲","/actions/cheesesmithing/vision_helmet":"视觉头盔","/actions/cheesesmithing/vision_shield":"视觉盾","/actions/cheesesmithing/crimson_plate_body":"绛红胸甲","/actions/cheesesmithing/rainbow_cheese":"彩虹奶酪","/actions/cheesesmithing/rainbow_boots":"彩虹靴","/actions/cheesesmithing/black_bear_shoes":"黑熊鞋","/actions/cheesesmithing/grizzly_bear_shoes":"棕熊鞋","/actions/cheesesmithing/polar_bear_shoes":"北极熊鞋","/actions/cheesesmithing/rainbow_gauntlets":"彩虹护手","/actions/cheesesmithing/rainbow_sword":"彩虹剑","/actions/cheesesmithing/panda_gloves":"熊猫手套","/actions/cheesesmithing/rainbow_brush":"彩虹刷子","/actions/cheesesmithing/rainbow_shears":"彩虹剪刀","/actions/cheesesmithing/rainbow_hatchet":"彩虹斧头","/actions/cheesesmithing/rainbow_spear":"彩虹长枪","/actions/cheesesmithing/rainbow_hammer":"彩虹锤子","/actions/cheesesmithing/rainbow_chisel":"彩虹凿子","/actions/cheesesmithing/rainbow_needle":"彩虹针","/actions/cheesesmithing/rainbow_spatula":"彩虹锅铲","/actions/cheesesmithing/rainbow_pot":"彩虹壶","/actions/cheesesmithing/rainbow_mace":"彩虹钉头锤","/actions/cheesesmithing/rainbow_alembic":"彩虹蒸馏器","/actions/cheesesmithing/rainbow_enhancer":"彩虹强化器","/actions/cheesesmithing/rainbow_helmet":"彩虹头盔","/actions/cheesesmithing/rainbow_buckler":"彩虹圆盾","/actions/cheesesmithing/rainbow_bulwark":"彩虹重盾","/actions/cheesesmithing/rainbow_plate_legs":"彩虹腿甲","/actions/cheesesmithing/rainbow_plate_body":"彩虹胸甲","/actions/cheesesmithing/holy_cheese":"神圣奶酪","/actions/cheesesmithing/holy_boots":"神圣靴","/actions/cheesesmithing/expert_beacon":"专家探照灯","/actions/cheesesmithing/holy_gauntlets":"神圣护手","/actions/cheesesmithing/holy_sword":"神圣剑","/actions/cheesesmithing/holy_brush":"神圣刷子","/actions/cheesesmithing/holy_shears":"神圣剪刀","/actions/cheesesmithing/holy_hatchet":"神圣斧头","/actions/cheesesmithing/holy_spear":"神圣长枪","/actions/cheesesmithing/holy_hammer":"神圣锤子","/actions/cheesesmithing/holy_chisel":"神圣凿子","/actions/cheesesmithing/holy_needle":"神圣针","/actions/cheesesmithing/holy_spatula":"神圣锅铲","/actions/cheesesmithing/holy_pot":"神圣壶","/actions/cheesesmithing/holy_mace":"神圣钉头锤","/actions/cheesesmithing/magnetic_gloves":"磁力手套","/actions/cheesesmithing/stalactite_spear":"石钟长枪","/actions/cheesesmithing/granite_bludgeon":"花岗岩大棒","/actions/cheesesmithing/vampire_fang_dirk":"吸血鬼短剑","/actions/cheesesmithing/werewolf_slasher":"狼人关刀","/actions/cheesesmithing/holy_alembic":"神圣蒸馏器","/actions/cheesesmithing/holy_enhancer":"神圣强化器","/actions/cheesesmithing/holy_helmet":"神圣头盔","/actions/cheesesmithing/holy_buckler":"神圣圆盾","/actions/cheesesmithing/holy_bulwark":"神圣重盾","/actions/cheesesmithing/holy_plate_legs":"神圣腿甲","/actions/cheesesmithing/holy_plate_body":"神圣胸甲","/actions/cheesesmithing/celestial_brush":"星空刷子","/actions/cheesesmithing/celestial_shears":"星空剪刀","/actions/cheesesmithing/celestial_hatchet":"星空斧头","/actions/cheesesmithing/celestial_hammer":"星空锤子","/actions/cheesesmithing/celestial_chisel":"星空凿子","/actions/cheesesmithing/celestial_needle":"星空针","/actions/cheesesmithing/celestial_spatula":"星空锅铲","/actions/cheesesmithing/celestial_pot":"星空壶","/actions/cheesesmithing/celestial_alembic":"星空蒸馏器","/actions/cheesesmithing/celestial_enhancer":"星空强化器","/actions/cheesesmithing/colossus_plate_body":"巨像胸甲","/actions/cheesesmithing/colossus_plate_legs":"巨像腿甲","/actions/cheesesmithing/demonic_plate_body":"恶魔胸甲","/actions/cheesesmithing/demonic_plate_legs":"恶魔腿甲","/actions/cheesesmithing/spiked_bulwark":"尖刺重盾","/actions/cheesesmithing/pathbreaker_boots":"开路者靴","/actions/cheesesmithing/dodocamel_gauntlets":"渡渡驼护手","/actions/cheesesmithing/corsair_helmet":"掠夺者头盔","/actions/cheesesmithing/knights_aegis":"骑士盾","/actions/cheesesmithing/anchorbound_plate_legs":"锚定腿甲","/actions/cheesesmithing/maelstrom_plate_legs":"怒涛腿甲","/actions/cheesesmithing/griffin_bulwark":"狮鹫重盾","/actions/cheesesmithing/furious_spear":"狂怒长枪","/actions/cheesesmithing/chaotic_flail":"混沌连枷","/actions/cheesesmithing/regal_sword":"君王之剑","/actions/cheesesmithing/anchorbound_plate_body":"锚定胸甲","/actions/cheesesmithing/maelstrom_plate_body":"怒涛胸甲","/actions/cheesesmithing/pathbreaker_boots_refined":"开路者靴 ★","/actions/cheesesmithing/dodocamel_gauntlets_refined":"渡渡驼护手 ★","/actions/cheesesmithing/corsair_helmet_refined":"掠夺者头盔 ★","/actions/cheesesmithing/knights_aegis_refined":"骑士盾 ★","/actions/cheesesmithing/anchorbound_plate_legs_refined":"锚定腿甲 ★","/actions/cheesesmithing/maelstrom_plate_legs_refined":"怒涛腿甲 ★","/actions/cheesesmithing/griffin_bulwark_refined":"狮鹫重盾 ★","/actions/cheesesmithing/furious_spear_refined":"狂怒长枪 ★","/actions/cheesesmithing/chaotic_flail_refined":"混沌连枷 ★","/actions/cheesesmithing/regal_sword_refined":"君王之剑 ★","/actions/cheesesmithing/anchorbound_plate_body_refined":"锚定胸甲 ★","/actions/cheesesmithing/maelstrom_plate_body_refined":"怒涛胸甲 ★","/actions/crafting/lumber":"木板","/actions/crafting/wooden_crossbow":"木弩","/actions/crafting/wooden_water_staff":"木制水法杖","/actions/crafting/basic_task_badge":"基础任务徽章","/actions/crafting/advanced_task_badge":"高级任务徽章","/actions/crafting/expert_task_badge":"专家任务徽章","/actions/crafting/wooden_shield":"木盾","/actions/crafting/wooden_nature_staff":"木制自然法杖","/actions/crafting/wooden_bow":"木弓","/actions/crafting/wooden_fire_staff":"木制火法杖","/actions/crafting/birch_lumber":"白桦木板","/actions/crafting/birch_crossbow":"桦木弩","/actions/crafting/birch_water_staff":"桦木水法杖","/actions/crafting/crushed_pearl":"珍珠碎片","/actions/crafting/birch_shield":"桦木盾","/actions/crafting/birch_nature_staff":"桦木自然法杖","/actions/crafting/birch_bow":"桦木弓","/actions/crafting/ring_of_gathering":"采集戒指","/actions/crafting/birch_fire_staff":"桦木火法杖","/actions/crafting/earrings_of_gathering":"采集耳环","/actions/crafting/cedar_lumber":"雪松木板","/actions/crafting/cedar_crossbow":"雪松弩","/actions/crafting/cedar_water_staff":"雪松水法杖","/actions/crafting/basic_milking_charm":"基础挤奶护符","/actions/crafting/basic_foraging_charm":"基础采摘护符","/actions/crafting/basic_woodcutting_charm":"基础伐木护符","/actions/crafting/basic_cheesesmithing_charm":"基础奶酪锻造护符","/actions/crafting/basic_crafting_charm":"基础制作护符","/actions/crafting/basic_tailoring_charm":"基础缝纫护符","/actions/crafting/basic_cooking_charm":"基础烹饪护符","/actions/crafting/basic_brewing_charm":"基础冲泡护符","/actions/crafting/basic_alchemy_charm":"基础炼金护符","/actions/crafting/basic_enhancing_charm":"基础强化护符","/actions/crafting/basic_torch":"基础火把","/actions/crafting/cedar_shield":"雪松盾","/actions/crafting/cedar_nature_staff":"雪松自然法杖","/actions/crafting/cedar_bow":"雪松弓","/actions/crafting/crushed_amber":"琥珀碎片","/actions/crafting/cedar_fire_staff":"雪松火法杖","/actions/crafting/ring_of_essence_find":"精华发现戒指","/actions/crafting/earrings_of_essence_find":"精华发现耳环","/actions/crafting/necklace_of_efficiency":"效率项链","/actions/crafting/purpleheart_lumber":"紫心木板","/actions/crafting/purpleheart_crossbow":"紫心弩","/actions/crafting/purpleheart_water_staff":"紫心水法杖","/actions/crafting/purpleheart_shield":"紫心盾","/actions/crafting/purpleheart_nature_staff":"紫心自然法杖","/actions/crafting/purpleheart_bow":"紫心弓","/actions/crafting/advanced_milking_charm":"高级挤奶护符","/actions/crafting/advanced_foraging_charm":"高级采摘护符","/actions/crafting/advanced_woodcutting_charm":"高级伐木护符","/actions/crafting/advanced_cheesesmithing_charm":"高级奶酪锻造护符","/actions/crafting/advanced_crafting_charm":"高级制作护符","/actions/crafting/advanced_tailoring_charm":"高级缝纫护符","/actions/crafting/advanced_cooking_charm":"高级烹饪护符","/actions/crafting/advanced_brewing_charm":"高级冲泡护符","/actions/crafting/advanced_alchemy_charm":"高级炼金护符","/actions/crafting/advanced_enhancing_charm":"高级强化护符","/actions/crafting/advanced_stamina_charm":"高级耐力护符","/actions/crafting/advanced_intelligence_charm":"高级智力护符","/actions/crafting/advanced_attack_charm":"高级攻击护符","/actions/crafting/advanced_defense_charm":"高级防御护符","/actions/crafting/advanced_melee_charm":"高级近战护符","/actions/crafting/advanced_ranged_charm":"高级远程护符","/actions/crafting/advanced_magic_charm":"高级魔法护符","/actions/crafting/crushed_garnet":"石榴石碎片","/actions/crafting/crushed_jade":"翡翠碎片","/actions/crafting/crushed_amethyst":"紫水晶碎片","/actions/crafting/catalyst_of_coinification":"点金催化剂","/actions/crafting/treant_shield":"树人盾","/actions/crafting/purpleheart_fire_staff":"紫心火法杖","/actions/crafting/ring_of_regeneration":"恢复戒指","/actions/crafting/earrings_of_regeneration":"恢复耳环","/actions/crafting/fighter_necklace":"战士项链","/actions/crafting/ginkgo_lumber":"银杏木板","/actions/crafting/ginkgo_crossbow":"银杏弩","/actions/crafting/ginkgo_water_staff":"银杏水法杖","/actions/crafting/ring_of_armor":"护甲戒指","/actions/crafting/catalyst_of_decomposition":"分解催化剂","/actions/crafting/advanced_torch":"进阶火把","/actions/crafting/ginkgo_shield":"银杏盾","/actions/crafting/earrings_of_armor":"护甲耳环","/actions/crafting/ginkgo_nature_staff":"银杏自然法杖","/actions/crafting/ranger_necklace":"射手项链","/actions/crafting/ginkgo_bow":"银杏弓","/actions/crafting/ring_of_resistance":"抗性戒指","/actions/crafting/crushed_moonstone":"月亮石碎片","/actions/crafting/ginkgo_fire_staff":"银杏火法杖","/actions/crafting/earrings_of_resistance":"抗性耳环","/actions/crafting/wizard_necklace":"巫师项链","/actions/crafting/ring_of_rare_find":"稀有发现戒指","/actions/crafting/expert_milking_charm":"专家挤奶护符","/actions/crafting/expert_foraging_charm":"专家采摘护符","/actions/crafting/expert_woodcutting_charm":"专家伐木护符","/actions/crafting/expert_cheesesmithing_charm":"专家奶酪锻造护符","/actions/crafting/expert_crafting_charm":"专家制作护符","/actions/crafting/expert_tailoring_charm":"专家缝纫护符","/actions/crafting/expert_cooking_charm":"专家烹饪护符","/actions/crafting/expert_brewing_charm":"专家冲泡护符","/actions/crafting/expert_alchemy_charm":"专家炼金护符","/actions/crafting/expert_enhancing_charm":"专家强化护符","/actions/crafting/expert_stamina_charm":"专家耐力护符","/actions/crafting/expert_intelligence_charm":"专家智力护符","/actions/crafting/expert_attack_charm":"专家攻击护符","/actions/crafting/expert_defense_charm":"专家防御护符","/actions/crafting/expert_melee_charm":"专家近战护符","/actions/crafting/expert_ranged_charm":"专家远程护符","/actions/crafting/expert_magic_charm":"专家魔法护符","/actions/crafting/catalyst_of_transmutation":"转化催化剂","/actions/crafting/earrings_of_rare_find":"稀有发现耳环","/actions/crafting/necklace_of_wisdom":"经验项链","/actions/crafting/redwood_lumber":"红杉木板","/actions/crafting/redwood_crossbow":"红杉弩","/actions/crafting/redwood_water_staff":"红杉水法杖","/actions/crafting/redwood_shield":"红杉盾","/actions/crafting/redwood_nature_staff":"红杉自然法杖","/actions/crafting/redwood_bow":"红杉弓","/actions/crafting/crushed_sunstone":"太阳石碎片","/actions/crafting/chimerical_entry_key":"奇幻钥匙","/actions/crafting/chimerical_chest_key":"奇幻宝箱钥匙","/actions/crafting/eye_watch":"掌上监工","/actions/crafting/watchful_relic":"警戒遗物","/actions/crafting/redwood_fire_staff":"红杉火法杖","/actions/crafting/ring_of_critical_strike":"暴击戒指","/actions/crafting/mirror_of_protection":"保护之镜","/actions/crafting/earrings_of_critical_strike":"暴击耳环","/actions/crafting/necklace_of_speed":"速度项链","/actions/crafting/arcane_lumber":"神秘木板","/actions/crafting/arcane_crossbow":"神秘弩","/actions/crafting/arcane_water_staff":"神秘水法杖","/actions/crafting/master_milking_charm":"大师挤奶护符","/actions/crafting/master_foraging_charm":"大师采摘护符","/actions/crafting/master_woodcutting_charm":"大师伐木护符","/actions/crafting/master_cheesesmithing_charm":"大师奶酪锻造护符","/actions/crafting/master_crafting_charm":"大师制作护符","/actions/crafting/master_tailoring_charm":"大师缝纫护符","/actions/crafting/master_cooking_charm":"大师烹饪护符","/actions/crafting/master_brewing_charm":"大师冲泡护符","/actions/crafting/master_alchemy_charm":"大师炼金护符","/actions/crafting/master_enhancing_charm":"大师强化护符","/actions/crafting/master_stamina_charm":"大师耐力护符","/actions/crafting/master_intelligence_charm":"大师智力护符","/actions/crafting/master_attack_charm":"大师攻击护符","/actions/crafting/master_defense_charm":"大师防御护符","/actions/crafting/master_melee_charm":"大师近战护符","/actions/crafting/master_ranged_charm":"大师远程护符","/actions/crafting/master_magic_charm":"大师魔法护符","/actions/crafting/sinister_entry_key":"阴森钥匙","/actions/crafting/sinister_chest_key":"阴森宝箱钥匙","/actions/crafting/expert_torch":"专家火把","/actions/crafting/arcane_shield":"神秘盾","/actions/crafting/arcane_nature_staff":"神秘自然法杖","/actions/crafting/manticore_shield":"蝎狮盾","/actions/crafting/arcane_bow":"神秘弓","/actions/crafting/enchanted_entry_key":"秘法钥匙","/actions/crafting/enchanted_chest_key":"秘法宝箱钥匙","/actions/crafting/pirate_entry_key":"海盗钥匙","/actions/crafting/pirate_chest_key":"海盗宝箱钥匙","/actions/crafting/arcane_fire_staff":"神秘火法杖","/actions/crafting/vampiric_bow":"吸血弓","/actions/crafting/soul_hunter_crossbow":"灵魂猎手弩","/actions/crafting/frost_staff":"冰霜法杖","/actions/crafting/infernal_battlestaff":"炼狱法杖","/actions/crafting/jackalope_staff":"鹿角兔之杖","/actions/crafting/philosophers_ring":"贤者戒指","/actions/crafting/crushed_philosophers_stone":"贤者之石碎片","/actions/crafting/philosophers_earrings":"贤者耳环","/actions/crafting/philosophers_necklace":"贤者项链","/actions/crafting/bishops_codex":"主教法典","/actions/crafting/cursed_bow":"咒怨之弓","/actions/crafting/sundering_crossbow":"裂空之弩","/actions/crafting/rippling_trident":"涟漪三叉戟","/actions/crafting/blooming_trident":"绽放三叉戟","/actions/crafting/blazing_trident":"炽焰三叉戟","/actions/crafting/grandmaster_milking_charm":"宗师挤奶护符","/actions/crafting/grandmaster_foraging_charm":"宗师采摘护符","/actions/crafting/grandmaster_woodcutting_charm":"宗师伐木护符","/actions/crafting/grandmaster_cheesesmithing_charm":"宗师奶酪锻造护符","/actions/crafting/grandmaster_crafting_charm":"宗师制作护符","/actions/crafting/grandmaster_tailoring_charm":"宗师缝纫护符","/actions/crafting/grandmaster_cooking_charm":"宗师烹饪护符","/actions/crafting/grandmaster_brewing_charm":"宗师冲泡护符","/actions/crafting/grandmaster_alchemy_charm":"宗师炼金护符","/actions/crafting/grandmaster_enhancing_charm":"宗师强化护符","/actions/crafting/grandmaster_stamina_charm":"宗师耐力护符","/actions/crafting/grandmaster_intelligence_charm":"宗师智力护符","/actions/crafting/grandmaster_attack_charm":"宗师攻击护符","/actions/crafting/grandmaster_defense_charm":"宗师防御护符","/actions/crafting/grandmaster_melee_charm":"宗师近战护符","/actions/crafting/grandmaster_ranged_charm":"宗师远程护符","/actions/crafting/grandmaster_magic_charm":"宗师魔法护符","/actions/crafting/philosophers_mirror":"贤者之镜","/actions/crafting/bishops_codex_refined":"主教法典 ★","/actions/crafting/cursed_bow_refined":"咒怨之弓 ★","/actions/crafting/sundering_crossbow_refined":"裂空之弩 ★","/actions/crafting/rippling_trident_refined":"涟漪三叉戟 ★","/actions/crafting/blooming_trident_refined":"绽放三叉戟 ★","/actions/crafting/blazing_trident_refined":"炽焰三叉戟 ★","/actions/tailoring/rough_leather":"粗糙皮革","/actions/tailoring/cotton_fabric":"棉花布料","/actions/tailoring/rough_boots":"粗糙靴","/actions/tailoring/cotton_boots":"棉靴","/actions/tailoring/rough_bracers":"粗糙护腕","/actions/tailoring/cotton_gloves":"棉手套","/actions/tailoring/small_pouch":"小袋子","/actions/tailoring/rough_hood":"粗糙兜帽","/actions/tailoring/cotton_hat":"棉帽","/actions/tailoring/rough_chaps":"粗糙皮裤","/actions/tailoring/cotton_robe_bottoms":"棉袍裙","/actions/tailoring/rough_tunic":"粗糙皮衣","/actions/tailoring/cotton_robe_top":"棉袍服","/actions/tailoring/reptile_leather":"爬行动物皮革","/actions/tailoring/linen_fabric":"亚麻布料","/actions/tailoring/reptile_boots":"爬行动物靴","/actions/tailoring/linen_boots":"亚麻靴","/actions/tailoring/reptile_bracers":"爬行动物护腕","/actions/tailoring/linen_gloves":"亚麻手套","/actions/tailoring/basic_shroud":"基础斗篷","/actions/tailoring/reptile_hood":"爬行动物兜帽","/actions/tailoring/linen_hat":"亚麻帽","/actions/tailoring/reptile_chaps":"爬行动物皮裤","/actions/tailoring/linen_robe_bottoms":"亚麻袍裙","/actions/tailoring/medium_pouch":"中袋子","/actions/tailoring/reptile_tunic":"爬行动物皮衣","/actions/tailoring/linen_robe_top":"亚麻袍服","/actions/tailoring/shoebill_shoes":"鲸头鹳鞋","/actions/tailoring/gobo_leather":"哥布林皮革","/actions/tailoring/bamboo_fabric":"竹子布料","/actions/tailoring/gobo_boots":"哥布林靴","/actions/tailoring/bamboo_boots":"竹靴","/actions/tailoring/gobo_bracers":"哥布林护腕","/actions/tailoring/bamboo_gloves":"竹手套","/actions/tailoring/gobo_hood":"哥布林兜帽","/actions/tailoring/bamboo_hat":"竹帽","/actions/tailoring/gobo_chaps":"哥布林皮裤","/actions/tailoring/bamboo_robe_bottoms":"竹袍裙","/actions/tailoring/large_pouch":"大袋子","/actions/tailoring/gobo_tunic":"哥布林皮衣","/actions/tailoring/bamboo_robe_top":"竹袍服","/actions/tailoring/marine_tunic":"海洋皮衣","/actions/tailoring/marine_chaps":"航海皮裤","/actions/tailoring/icy_robe_top":"冰霜袍服","/actions/tailoring/icy_robe_bottoms":"冰霜袍裙","/actions/tailoring/flaming_robe_top":"烈焰袍服","/actions/tailoring/flaming_robe_bottoms":"烈焰袍裙","/actions/tailoring/advanced_shroud":"进阶斗篷","/actions/tailoring/beast_leather":"野兽皮革","/actions/tailoring/silk_fabric":"丝绸","/actions/tailoring/beast_boots":"野兽靴","/actions/tailoring/silk_boots":"丝靴","/actions/tailoring/beast_bracers":"野兽护腕","/actions/tailoring/silk_gloves":"丝手套","/actions/tailoring/collectors_boots":"收藏家靴","/actions/tailoring/sighted_bracers":"瞄准护腕","/actions/tailoring/beast_hood":"野兽兜帽","/actions/tailoring/silk_hat":"丝帽","/actions/tailoring/beast_chaps":"野兽皮裤","/actions/tailoring/silk_robe_bottoms":"丝绸袍裙","/actions/tailoring/centaur_boots":"半人马靴","/actions/tailoring/sorcerer_boots":"巫师靴","/actions/tailoring/giant_pouch":"巨大袋子","/actions/tailoring/beast_tunic":"野兽皮衣","/actions/tailoring/silk_robe_top":"丝绸袍服","/actions/tailoring/red_culinary_hat":"红色厨师帽","/actions/tailoring/luna_robe_top":"月神袍服","/actions/tailoring/luna_robe_bottoms":"月神袍裙","/actions/tailoring/umbral_leather":"暗影皮革","/actions/tailoring/radiant_fabric":"光辉布料","/actions/tailoring/umbral_boots":"暗影靴","/actions/tailoring/radiant_boots":"光辉靴","/actions/tailoring/umbral_bracers":"暗影护腕","/actions/tailoring/radiant_gloves":"光辉手套","/actions/tailoring/enchanted_gloves":"附魔手套","/actions/tailoring/fluffy_red_hat":"蓬松红帽子","/actions/tailoring/chrono_gloves":"时空手套","/actions/tailoring/expert_shroud":"专家斗篷","/actions/tailoring/umbral_hood":"暗影兜帽","/actions/tailoring/radiant_hat":"光辉帽","/actions/tailoring/umbral_chaps":"暗影皮裤","/actions/tailoring/radiant_robe_bottoms":"光辉袍裙","/actions/tailoring/umbral_tunic":"暗影皮衣","/actions/tailoring/radiant_robe_top":"光辉袍服","/actions/tailoring/revenant_chaps":"亡灵皮裤","/actions/tailoring/griffin_chaps":"狮鹫皮裤","/actions/tailoring/dairyhands_top":"挤奶工上衣","/actions/tailoring/dairyhands_bottoms":"挤奶工下装","/actions/tailoring/foragers_top":"采摘者上衣","/actions/tailoring/foragers_bottoms":"采摘者下装","/actions/tailoring/lumberjacks_top":"伐木工上衣","/actions/tailoring/lumberjacks_bottoms":"伐木工下装","/actions/tailoring/cheesemakers_top":"奶酪师上衣","/actions/tailoring/cheesemakers_bottoms":"奶酪师下装","/actions/tailoring/crafters_top":"工匠上衣","/actions/tailoring/crafters_bottoms":"工匠下装","/actions/tailoring/tailors_top":"裁缝上衣","/actions/tailoring/tailors_bottoms":"裁缝下装","/actions/tailoring/chefs_top":"厨师上衣","/actions/tailoring/chefs_bottoms":"厨师下装","/actions/tailoring/brewers_top":"饮品师上衣","/actions/tailoring/brewers_bottoms":"饮品师下装","/actions/tailoring/alchemists_top":"炼金师上衣","/actions/tailoring/alchemists_bottoms":"炼金师下装","/actions/tailoring/enhancers_top":"强化师上衣","/actions/tailoring/enhancers_bottoms":"强化师下装","/actions/tailoring/revenant_tunic":"亡灵皮衣","/actions/tailoring/griffin_tunic":"狮鹫皮衣","/actions/tailoring/gluttonous_pouch":"贪食之袋","/actions/tailoring/guzzling_pouch":"暴饮之囊","/actions/tailoring/pathfinder_boots":"探路者靴","/actions/tailoring/pathseeker_boots":"寻路者靴","/actions/tailoring/marksman_bracers":"神射护腕","/actions/tailoring/acrobatic_hood":"杂技师兜帽","/actions/tailoring/magicians_hat":"魔术师帽","/actions/tailoring/kraken_chaps":"克拉肯皮裤","/actions/tailoring/royal_water_robe_bottoms":"皇家水系袍裙","/actions/tailoring/royal_nature_robe_bottoms":"皇家自然系袍裙","/actions/tailoring/royal_fire_robe_bottoms":"皇家火系袍裙","/actions/tailoring/kraken_tunic":"克拉肯皮衣","/actions/tailoring/royal_water_robe_top":"皇家水系袍服","/actions/tailoring/royal_nature_robe_top":"皇家自然系袍服","/actions/tailoring/royal_fire_robe_top":"皇家火系袍服","/actions/tailoring/gatherer_cape_refined":"采集者披风 ★","/actions/tailoring/artificer_cape_refined":"工匠披风 ★","/actions/tailoring/culinary_cape_refined":"厨师披风 ★","/actions/tailoring/chance_cape_refined":"机缘披风 ★","/actions/tailoring/chimerical_quiver_refined":"奇幻箭袋 ★","/actions/tailoring/sinister_cape_refined":"阴森披风 ★","/actions/tailoring/enchanted_cloak_refined":"秘法披风 ★","/actions/tailoring/pathfinder_boots_refined":"探路者靴 ★","/actions/tailoring/pathseeker_boots_refined":"寻路者靴 ★","/actions/tailoring/marksman_bracers_refined":"神射护腕 ★","/actions/tailoring/acrobatic_hood_refined":"杂技师兜帽 ★","/actions/tailoring/magicians_hat_refined":"魔术师帽 ★","/actions/tailoring/kraken_chaps_refined":"克拉肯皮裤 ★","/actions/tailoring/royal_water_robe_bottoms_refined":"皇家水系袍裙 ★","/actions/tailoring/royal_nature_robe_bottoms_refined":"皇家自然系袍裙 ★","/actions/tailoring/royal_fire_robe_bottoms_refined":"皇家火系袍裙 ★","/actions/tailoring/kraken_tunic_refined":"克拉肯皮衣 ★","/actions/tailoring/royal_water_robe_top_refined":"皇家水系袍服 ★","/actions/tailoring/royal_nature_robe_top_refined":"皇家自然系袍服 ★","/actions/tailoring/royal_fire_robe_top_refined":"皇家火系袍服 ★","/actions/cooking/donut":"甜甜圈","/actions/cooking/cupcake":"纸杯蛋糕","/actions/cooking/gummy":"软糖","/actions/cooking/yogurt":"酸奶","/actions/cooking/blueberry_donut":"蓝莓甜甜圈","/actions/cooking/blueberry_cake":"蓝莓蛋糕","/actions/cooking/apple_gummy":"苹果软糖","/actions/cooking/apple_yogurt":"苹果酸奶","/actions/cooking/blackberry_donut":"黑莓甜甜圈","/actions/cooking/blackberry_cake":"黑莓蛋糕","/actions/cooking/orange_gummy":"橙子软糖","/actions/cooking/orange_yogurt":"橙子酸奶","/actions/cooking/basic_food_crate":"基础食物箱","/actions/cooking/strawberry_donut":"草莓甜甜圈","/actions/cooking/strawberry_cake":"草莓蛋糕","/actions/cooking/plum_gummy":"李子软糖","/actions/cooking/plum_yogurt":"李子酸奶","/actions/cooking/mooberry_donut":"哞莓甜甜圈","/actions/cooking/mooberry_cake":"哞莓蛋糕","/actions/cooking/peach_gummy":"桃子软糖","/actions/cooking/peach_yogurt":"桃子酸奶","/actions/cooking/advanced_food_crate":"进阶食物箱","/actions/cooking/marsberry_donut":"火星莓甜甜圈","/actions/cooking/marsberry_cake":"火星莓蛋糕","/actions/cooking/dragon_fruit_gummy":"火龙果软糖","/actions/cooking/dragon_fruit_yogurt":"火龙果酸奶","/actions/cooking/spaceberry_donut":"太空莓甜甜圈","/actions/cooking/spaceberry_cake":"太空莓蛋糕","/actions/cooking/star_fruit_gummy":"杨桃软糖","/actions/cooking/star_fruit_yogurt":"杨桃酸奶","/actions/cooking/expert_food_crate":"专家食物箱","/actions/brewing/milking_tea":"挤奶茶","/actions/brewing/stamina_coffee":"耐力咖啡","/actions/brewing/foraging_tea":"采摘茶","/actions/brewing/intelligence_coffee":"智力咖啡","/actions/brewing/gathering_tea":"采集茶","/actions/brewing/woodcutting_tea":"伐木茶","/actions/brewing/cooking_tea":"烹饪茶","/actions/brewing/defense_coffee":"防御咖啡","/actions/brewing/brewing_tea":"冲泡茶","/actions/brewing/attack_coffee":"攻击咖啡","/actions/brewing/gourmet_tea":"美食茶","/actions/brewing/alchemy_tea":"炼金茶","/actions/brewing/enhancing_tea":"强化茶","/actions/brewing/cheesesmithing_tea":"奶酪锻造茶","/actions/brewing/melee_coffee":"近战咖啡","/actions/brewing/basic_tea_crate":"基础茶叶箱","/actions/brewing/basic_coffee_crate":"基础咖啡箱","/actions/brewing/crafting_tea":"制作茶","/actions/brewing/ranged_coffee":"远程咖啡","/actions/brewing/wisdom_tea":"经验茶","/actions/brewing/wisdom_coffee":"经验咖啡","/actions/brewing/tailoring_tea":"缝纫茶","/actions/brewing/magic_coffee":"魔法咖啡","/actions/brewing/super_milking_tea":"超级挤奶茶","/actions/brewing/super_stamina_coffee":"超级耐力咖啡","/actions/brewing/super_foraging_tea":"超级采摘茶","/actions/brewing/super_intelligence_coffee":"超级智力咖啡","/actions/brewing/processing_tea":"加工茶","/actions/brewing/lucky_coffee":"幸运咖啡","/actions/brewing/super_woodcutting_tea":"超级伐木茶","/actions/brewing/super_cooking_tea":"超级烹饪茶","/actions/brewing/super_defense_coffee":"超级防御咖啡","/actions/brewing/advanced_tea_crate":"进阶茶叶箱","/actions/brewing/advanced_coffee_crate":"进阶咖啡箱","/actions/brewing/super_brewing_tea":"超级冲泡茶","/actions/brewing/ultra_milking_tea":"究极挤奶茶","/actions/brewing/super_attack_coffee":"超级攻击咖啡","/actions/brewing/ultra_stamina_coffee":"究极耐力咖啡","/actions/brewing/efficiency_tea":"效率茶","/actions/brewing/swiftness_coffee":"迅捷咖啡","/actions/brewing/super_alchemy_tea":"超级炼金茶","/actions/brewing/super_enhancing_tea":"超级强化茶","/actions/brewing/ultra_foraging_tea":"究极采摘茶","/actions/brewing/ultra_intelligence_coffee":"究极智力咖啡","/actions/brewing/channeling_coffee":"吟唱咖啡","/actions/brewing/super_cheesesmithing_tea":"超级奶酪锻造茶","/actions/brewing/ultra_woodcutting_tea":"究极伐木茶","/actions/brewing/super_melee_coffee":"超级近战咖啡","/actions/brewing/artisan_tea":"工匠茶","/actions/brewing/super_crafting_tea":"超级制作茶","/actions/brewing/ultra_cooking_tea":"究极烹饪茶","/actions/brewing/super_ranged_coffee":"超级远程咖啡","/actions/brewing/ultra_defense_coffee":"究极防御咖啡","/actions/brewing/catalytic_tea":"催化茶","/actions/brewing/critical_coffee":"暴击咖啡","/actions/brewing/super_tailoring_tea":"超级缝纫茶","/actions/brewing/ultra_brewing_tea":"究极冲泡茶","/actions/brewing/super_magic_coffee":"超级魔法咖啡","/actions/brewing/ultra_attack_coffee":"究极攻击咖啡","/actions/brewing/blessed_tea":"福气茶","/actions/brewing/ultra_alchemy_tea":"究极炼金茶","/actions/brewing/ultra_enhancing_tea":"究极强化茶","/actions/brewing/expert_tea_crate":"专家茶叶箱","/actions/brewing/expert_coffee_crate":"专家咖啡箱","/actions/brewing/ultra_cheesesmithing_tea":"究极奶酪锻造茶","/actions/brewing/ultra_melee_coffee":"究极近战咖啡","/actions/brewing/ultra_crafting_tea":"究极制作茶","/actions/brewing/ultra_ranged_coffee":"究极远程咖啡","/actions/brewing/ultra_tailoring_tea":"究极缝纫茶","/actions/brewing/ultra_magic_coffee":"究极魔法咖啡","/actions/alchemy/coinify":"点金","/actions/alchemy/transmute":"转化","/actions/alchemy/decompose":"分解","/actions/alchemy/unrefine":"解精炼","/actions/enhancing/enhance":"强化","/actions/combat/fly":"苍蝇","/actions/combat/rat":"杰瑞","/actions/combat/skunk":"臭鼬","/actions/combat/porcupine":"豪猪","/actions/combat/slimy":"史莱姆","/actions/combat/smelly_planet":"臭臭星球","/actions/combat/frog":"青蛙","/actions/combat/snake":"蛇","/actions/combat/swampy":"沼泽虫","/actions/combat/alligator":"夏洛克","/actions/combat/swamp_planet":"沼泽星球","/actions/combat/sea_snail":"蜗牛","/actions/combat/crab":"螃蟹","/actions/combat/aquahorse":"水马","/actions/combat/nom_nom":"咬咬鱼","/actions/combat/turtle":"忍者龟","/actions/combat/aqua_planet":"海洋星球","/actions/combat/jungle_sprite":"丛林精灵","/actions/combat/myconid":"蘑菇人","/actions/combat/treant":"树人","/actions/combat/centaur_archer":"半人马弓箭手","/actions/combat/jungle_planet":"丛林星球","/actions/combat/gobo_stabby":"刺刺","/actions/combat/gobo_slashy":"砍砍","/actions/combat/gobo_smashy":"锤锤","/actions/combat/gobo_shooty":"咻咻","/actions/combat/gobo_boomy":"轰轰","/actions/combat/gobo_planet":"哥布林星球","/actions/combat/eye":"独眼","/actions/combat/eyes":"叠眼","/actions/combat/veyes":"复眼","/actions/combat/planet_of_the_eyes":"眼球星球","/actions/combat/novice_sorcerer":"新手巫师","/actions/combat/ice_sorcerer":"冰霜巫师","/actions/combat/flame_sorcerer":"火焰巫师","/actions/combat/elementalist":"元素法师","/actions/combat/sorcerers_tower":"巫师之塔","/actions/combat/gummy_bear":"软糖熊","/actions/combat/panda":"熊猫","/actions/combat/black_bear":"黑熊","/actions/combat/grizzly_bear":"棕熊","/actions/combat/polar_bear":"北极熊","/actions/combat/bear_with_it":"熊熊星球","/actions/combat/magnetic_golem":"磁力魔像","/actions/combat/stalactite_golem":"钟乳石魔像","/actions/combat/granite_golem":"花岗岩魔像","/actions/combat/golem_cave":"魔像洞穴","/actions/combat/zombie":"僵尸","/actions/combat/vampire":"吸血鬼","/actions/combat/werewolf":"狼人","/actions/combat/twilight_zone":"暮光之地","/actions/combat/abyssal_imp":"深渊小鬼","/actions/combat/soul_hunter":"灵魂猎手","/actions/combat/infernal_warlock":"地狱术士","/actions/combat/infernal_abyss":"地狱深渊","/actions/combat/chimerical_den":"奇幻洞穴","/actions/combat/sinister_circus":"阴森马戏团","/actions/combat/enchanted_fortress":"秘法要塞","/actions/combat/pirate_cove":"海盗基地","/actions/labyrinth/explore":"探索迷宫","/actions/special/party_ready":"队伍准备就绪"},Sc={"/monsters/abyssal_imp":"深渊小鬼","/monsters/acrobat":"杂技师","/monsters/trial_hedgehog":"试炼刺猬","/monsters/anchor_shark":"持锚鲨","/monsters/aquahorse":"水马","/monsters/trial_jellyfish":"试炼水母","/monsters/black_bear":"黑熊","/monsters/gobo_boomy":"轰轰","/monsters/brine_marksman":"海盐射手","/monsters/butterjerry":"蝶鼠","/monsters/captain_fishhook":"鱼钩船长","/monsters/centaur_archer":"半人马弓箭手","/monsters/cyclops":"独眼巨人","/monsters/chronofrost_sorcerer":"霜时巫师","/monsters/dryad":"树精","/monsters/crystal_colossus":"水晶巨像","/monsters/frost_sniper":"霜冻狙击手","/monsters/demonic_overlord":"恶魔霸主","/monsters/deranged_jester":"小丑皇","/monsters/dodocamel":"渡渡驼","/monsters/dusk_revenant":"黄昏亡灵","/monsters/trial_chameleon":"试炼变色龙","/monsters/elementalist":"元素法师","/monsters/enchanted_bishop":"秘法主教","/monsters/enchanted_king":"秘法国王","/monsters/enchanted_knight":"秘法骑士","/monsters/enchanted_pawn":"秘法士兵","/monsters/enchanted_queen":"秘法王后","/monsters/enchanted_rook":"秘法堡垒","/monsters/eye":"独眼","/monsters/eyes":"叠眼","/monsters/flame_sorcerer":"火焰巫师","/monsters/fly":"苍蝇","/monsters/trial_beetle":"试炼甲虫","/monsters/trial_dragonfly":"试炼蜻蜓","/monsters/trial_wasp":"试炼黄蜂","/monsters/trial_firefly":"试炼萤火虫","/monsters/frog":"青蛙","/monsters/sea_snail":"蜗牛","/monsters/giant_shoebill":"鲸头鹳","/monsters/gobo_chieftain":"哥布林酋长","/monsters/granite_golem":"花岗魔像","/monsters/griffin":"狮鹫","/monsters/grizzly_bear":"棕熊","/monsters/gummy_bear":"软糖熊","/monsters/crab":"螃蟹","/monsters/ice_sorcerer":"冰霜巫师","/monsters/infernal_warlock":"地狱术士","/monsters/trial_badger":"试炼獾","/monsters/jackalope":"鹿角兔","/monsters/rat":"杰瑞","/monsters/juggler":"杂耍者","/monsters/jungle_sprite":"丛林精灵","/monsters/giant_mantis":"巨螳螂","/monsters/luna_empress":"月神之蝶","/monsters/magician":"魔术师","/monsters/magnetic_golem":"磁力魔像","/monsters/manticore":"狮蝎兽","/monsters/marine_huntress":"海洋猎手","/monsters/giant_scorpion":"巨蝎","/monsters/mimic":"宝箱怪","/monsters/myconid":"蘑菇人","/monsters/nom_nom":"咬咬鱼","/monsters/novice_sorcerer":"新手巫师","/monsters/panda":"熊猫","/monsters/polar_bear":"北极熊","/monsters/porcupine":"豪猪","/monsters/rabid_rabbit":"疯魔兔","/monsters/red_panda":"小熊猫","/monsters/alligator":"夏洛克","/monsters/gobo_shooty":"咻咻","/monsters/skunk":"臭鼬","/monsters/gobo_slashy":"砍砍","/monsters/slimy":"史莱姆","/monsters/gobo_smashy":"锤锤","/monsters/soul_hunter":"灵魂猎手","/monsters/squawker":"鹦鹉","/monsters/gobo_stabby":"刺刺","/monsters/stalactite_golem":"钟乳石魔像","/monsters/pyre_hunter":"火焰猎手","/monsters/swampy":"沼泽虫","/monsters/the_kraken":"克拉肯","/monsters/the_watcher":"观察者","/monsters/snake":"蛇","/monsters/tidal_conjuror":"潮汐召唤师","/monsters/salamander":"火蜥蜴","/monsters/shadow_archer":"暗影弓手","/monsters/treant":"树人","/monsters/turtle":"忍者龟","/monsters/vampire":"吸血鬼","/monsters/veyes":"复眼","/monsters/siren":"海妖","/monsters/werewolf":"狼人","/monsters/zombie":"僵尸","/monsters/zombie_bear":"僵尸熊","/abilities/poke":"破胆之刺","/abilities/impale":"透骨之刺","/abilities/puncture":"破甲之刺","/abilities/penetrating_strike":"贯心之刺","/abilities/scratch":"爪影斩","/abilities/cleave":"分裂斩","/abilities/maim":"血刃斩","/abilities/crippling_slash":"致残斩","/abilities/smack":"重碾","/abilities/sweep":"重扫","/abilities/stunning_blow":"重锤","/abilities/fracturing_impact":"碎裂冲击","/abilities/shield_bash":"盾击","/abilities/quick_shot":"快速射击","/abilities/aqua_arrow":"流水箭","/abilities/flame_arrow":"烈焰箭","/abilities/rain_of_arrows":"箭雨","/abilities/silencing_shot":"沉默之箭","/abilities/steady_shot":"稳定射击","/abilities/pestilent_shot":"疫病射击","/abilities/penetrating_shot":"贯穿射击","/abilities/water_strike":"流水冲击","/abilities/ice_spear":"冰枪术","/abilities/frost_surge":"冰霜爆裂","/abilities/mana_spring":"法力喷泉","/abilities/entangle":"缠绕","/abilities/toxic_pollen":"剧毒粉尘","/abilities/natures_veil":"自然菌幕","/abilities/life_drain":"生命吸取","/abilities/fireball":"火球","/abilities/flame_blast":"熔岩爆裂","/abilities/firestorm":"火焰风暴","/abilities/smoke_burst":"烟爆灭影","/abilities/minor_heal":"初级自愈术","/abilities/heal":"自愈术","/abilities/quick_aid":"快速治疗术","/abilities/rejuvenate":"群体治疗术","/abilities/taunt":"嘲讽","/abilities/provoke":"挑衅","/abilities/toughness":"坚韧","/abilities/elusiveness":"闪避","/abilities/precision":"精确","/abilities/berserk":"狂暴","/abilities/frenzy":"狂速","/abilities/elemental_affinity":"元素增幅","/abilities/spike_shell":"尖刺防护","/abilities/retribution":"惩戒","/abilities/vampirism":"吸血","/abilities/revive":"复活","/abilities/insanity":"疯狂","/abilities/invincible":"无敌","/abilities/speed_aura":"速度光环","/abilities/guardian_aura":"守护光环","/abilities/fierce_aura":"物理光环","/abilities/critical_aura":"暴击光环","/abilities/mystic_aura":"元素光环","/abilities/promote":"晋升"};function ro(e){let t={};for(let a in e)t[e[a]]=a;return t}s(ro,"inverseKV");var Cc=ro(xc),Ac=ro(kc),Mc=ro(Sc);function yg(e){let t=Cc[e];if(!t)return console.log(u.config.isZH?`[MWITools] 找不到物品“${e}”对应的英文名称。`:`[MWITools] Cannot find the English item name for “${e}”.`),"";let a;try{a=u.state.initData_itemDetailMap?.[t]?.name}catch{return""}return a||(console.log(u.config.isZH?`[MWITools] 找不到物品 ${t} 的英文名称。`:`[MWITools] Cannot find the English item name for ${t}.`),"")}s(yg,"getItemEnNameFromZhName");function wg(e){let t=Ac[e];if(!t)return console.log(u.config.isZH?`[MWITools] 找不到行动“${e}”对应的英文名称。`:`[MWITools] Cannot find the English action name for “${e}”.`),"";let a;try{a=u.state.initData_actionDetailMap?.[t]?.name}catch{return""}return a||(console.log(u.config.isZH?`[MWITools] 找不到行动 ${t} 的英文名称。`:`[MWITools] Cannot find the English action name for ${t}.`),"")}s(wg,"getActionEnNameFromZhName");function vg(e){let t=Mc[e];return t||""}s(vg,"getOthersFromZhName");var xg={};Object.assign(u.api,{inverseKV:ro,getItemEnNameFromZhName:yg,getActionEnNameFromZhName:wg,getOthersFromZhName:vg}),Object.defineProperties(u.data,{ZHItemNames:{enumerable:!0,get(){return xc}},ZHActionNames:{enumerable:!0,get(){return kc}},ZHOthersDic:{enumerable:!0,get(){return Sc}},ZHToItemHridMap:{enumerable:!0,get(){return Cc}},ZHToActionHridMap:{enumerable:!0,get(){return Ac}},ZHToOthersMap:{enumerable:!0,get(){return Mc}}}),Object.defineProperties(u.state,{itemEnNameToHridMap:{enumerable:!0,get(){return xg}}});var Tc={marketData:{"/items/abyssal_essence":{"0":{a:260,b:255}},"/items/acrobatic_hood":{"0":{a:7e7,b:68e6},"2":{a:-1,b:58e6},"3":{a:-1,b:58e6},"4":{a:-1,b:58e6},"5":{a:74e6,b:66e6},"6":{a:-1,b:56e6},"7":{a:9e7,b:84e6},"8":{a:145e6,b:11e7},"9":{a:-1,b:15e7},"10":{a:28e7,b:275e6},"11":{a:-1,b:34e7},"12":{a:-1,b:96e7}},"/items/acrobatic_hood_refined":{"5":{a:-1,b:36e5},"10":{a:58e7,b:54e7},"11":{a:-1,b:36e5}},"/items/acrobats_ribbon":{"0":{a:68e5,b:66e5}},"/items/advanced_alchemy_charm":{"0":{a:39e6,b:-1},"1":{a:48e6,b:-1},"2":{a:54e6,b:-1},"3":{a:52e6,b:31e6},"4":{a:74e6,b:-1},"5":{a:12e7,b:-1}},"/items/advanced_attack_charm":{"0":{a:74e5,b:64e5},"1":{a:11e6,b:7e6},"2":{a:16e6,b:98e5},"3":{a:195e5,b:18e6},"4":{a:39e6,b:-1},"5":{a:56e6,b:46e6}},"/items/advanced_brewing_charm":{"0":{a:16e6,b:14e6},"2":{a:255e5,b:-1},"3":{a:31e6,b:-1},"4":{a:66e6,b:38e6},"5":{a:105e6,b:-1}},"/items/advanced_cheesesmithing_charm":{"0":{a:235e5,b:125e5},"3":{a:42e6,b:-1},"4":{a:6e7,b:-1},"5":{a:8e7,b:52e6}},"/items/advanced_cooking_charm":{"0":{a:-1,b:205e5},"1":{a:3e7,b:-1},"2":{a:39e6,b:-1},"3":{a:38e6,b:-1},"5":{a:82e6,b:74e6}},"/items/advanced_crafting_charm":{"0":{a:275e5,b:24e6},"1":{a:295e5,b:-1},"2":{a:36e6,b:19e6},"3":{a:46e6,b:-1},"4":{a:88e6,b:-1}},"/items/advanced_defense_charm":{"0":{a:7e6,b:66e5},"1":{a:11e6,b:92e5},"2":{a:-1,b:82e5},"3":{a:195e5,b:185e5},"5":{a:82e6,b:68e6}},"/items/advanced_enhancing_charm":{"0":{a:58e6,b:32e6},"1":{a:74e6,b:-1},"3":{a:96e6,b:-1},"5":{a:15e7,b:1e8}},"/items/advanced_foraging_charm":{"0":{a:21e6,b:185e5},"1":{a:28e6,b:-1},"3":{a:38e6,b:-1},"4":{a:62e6,b:-1},"5":{a:115e6,b:8e7},"7":{a:-1,b:16e5}},"/items/advanced_intelligence_charm":{"0":{a:74e5,b:64e5},"1":{a:13e6,b:7e6},"3":{a:215e5,b:185e5},"4":{a:-1,b:37e6},"5":{a:78e6,b:62e6}},"/items/advanced_magic_charm":{"0":{a:115e5,b:1e7},"1":{a:15e6,b:115e5},"3":{a:22e6,b:19e6},"4":{a:42e6,b:35e6},"5":{a:-1,b:68e6}},"/items/advanced_melee_charm":{"0":{a:68e5,b:66e5},"1":{a:9e6,b:54e5},"2":{a:135e5,b:82e5},"3":{a:185e5,b:175e5},"4":{a:49e6,b:29e6},"5":{a:58e6,b:5e7}},"/items/advanced_milking_charm":{"0":{a:255e5,b:205e5},"1":{a:28e6,b:-1},"2":{a:28e6,b:-1},"3":{a:33e6,b:-1},"4":{a:66e6,b:5e7},"5":{a:98e6,b:-1}},"/items/advanced_ranged_charm":{"0":{a:68e5,b:64e5},"1":{a:1e7,b:-1},"2":{a:13e6,b:8e6},"3":{a:2e7,b:165e5},"4":{a:39e6,b:36e6},"5":{a:74e6,b:33e6}},"/items/advanced_stamina_charm":{"0":{a:145e5,b:14e6},"1":{a:-1,b:12e6},"2":{a:195e5,b:125e5},"3":{a:3e7,b:265e5},"4":{a:56e6,b:44e6},"5":{a:82e6,b:64e6}},"/items/advanced_tailoring_charm":{"0":{a:21e6,b:15e6},"1":{a:28e6,b:-1},"2":{a:38e6,b:-1},"3":{a:4e7,b:29e6},"4":{a:68e6,b:-1},"5":{a:96e6,b:64e6}},"/items/advanced_woodcutting_charm":{"0":{a:22e6,b:15e6},"1":{a:38e6,b:-1},"3":{a:4e7,b:-1}},"/items/alchemists_bottoms":{"0":{a:-1,b:15e7},"5":{a:255e6,b:225e6},"6":{a:5e8,b:-1},"7":{a:265e6,b:25e7},"8":{a:31e7,b:27e7},"10":{a:48e7,b:44e7}},"/items/alchemists_top":{"0":{a:-1,b:15e7},"1":{a:-1,b:38e5},"3":{a:-1,b:35e5},"5":{a:21e7,b:18e7},"6":{a:23e7,b:8e7},"7":{a:24e7,b:21e7},"8":{a:27e7,b:24e7},"10":{a:44e7,b:38e7}},"/items/alchemy_essence":{"0":{a:400,b:390}},"/items/alchemy_tea":{"0":{a:860,b:820}},"/items/amber":{"0":{a:21500,b:21e3}},"/items/amethyst":{"0":{a:34e3,b:33e3}},"/items/anchorbound_plate_body":{"0":{a:96e6,b:92e6},"1":{a:-1,b:84e6},"2":{a:-1,b:84e6},"3":{a:-1,b:84e6},"4":{a:-1,b:86e6},"5":{a:11e7,b:1e8},"6":{a:-1,b:9e7},"7":{a:125e6,b:12e7},"8":{a:17e7,b:145e6},"9":{a:-1,b:18e7},"10":{a:41e7,b:39e7},"12":{a:13e8,b:96e7}},"/items/anchorbound_plate_body_refined":{"10":{a:-1,b:45e5}},"/items/anchorbound_plate_legs":{"0":{a:76e6,b:72e6},"1":{a:-1,b:68e6},"2":{a:-1,b:7e7},"4":{a:-1,b:66e6},"5":{a:94e6,b:84e6},"6":{a:-1,b:72e6},"7":{a:105e6,b:98e6},"8":{a:15e7,b:12e7},"10":{a:37e7,b:-1}},"/items/anchorbound_plate_legs_refined":{},"/items/apple":{"0":{a:23,b:21}},"/items/apple_gummy":{"0":{a:19,b:17}},"/items/apple_yogurt":{"0":{a:500,b:440}},"/items/aqua_arrow":{"0":{a:33e3,b:32e3}},"/items/aqua_essence":{"0":{a:30,b:25}},"/items/arabica_coffee_bean":{"0":{a:320,b:310}},"/items/arcane_bow":{"0":{a:1e6,b:98e4},"1":{a:125e4,b:-1},"2":{a:14e5,b:-1},"3":{a:13e5,b:-1},"4":{a:155e4,b:-1},"5":{a:165e4,b:25e4},"6":{a:13e6,b:-1},"7":{a:15e6,b:-1}},"/items/arcane_crossbow":{"0":{a:76e4,b:74e4},"1":{a:8e5,b:-1},"2":{a:82e4,b:39e4},"3":{a:84e4,b:4e5},"4":{a:1e6,b:42e4},"5":{a:145e4,b:46e4},"6":{a:47e5,b:46e4},"7":{a:1e7,b:-1},"10":{a:72e6,b:-1}},"/items/arcane_fire_staff":{"0":{a:76e4,b:74e4},"1":{a:-1,b:36e4},"2":{a:12e5,b:-1},"3":{a:8e5,b:35e4},"4":{a:84e4,b:49e4},"5":{a:92e4,b:44e4}},"/items/arcane_log":{"0":{a:430,b:410}},"/items/arcane_lumber":{"0":{a:2200,b:2150}},"/items/arcane_nature_staff":{"0":{a:78e4,b:76e4},"1":{a:88e4,b:45e4},"2":{a:88e4,b:-1},"3":{a:88e4,b:-1},"4":{a:1e6,b:46e4},"5":{a:135e4,b:1e6},"7":{a:86e5,b:86e4},"9":{a:9e6,b:9e5}},"/items/arcane_shield":{"0":{a:52e4,b:49e4},"3":{a:1e6,b:-1},"4":{a:98e4,b:-1},"5":{a:285e4,b:82e4},"6":{a:-1,b:54e4}},"/items/arcane_water_staff":{"0":{a:78e4,b:76e4},"1":{a:82e4,b:-1},"2":{a:76e4,b:-1},"3":{a:88e4,b:-1},"5":{a:165e4,b:5e5}},"/items/artisan_tea":{"0":{a:1750,b:1700}},"/items/attack_coffee":{"0":{a:900,b:880}},"/items/azure_alembic":{"0":{a:54e3,b:44e3},"1":{a:115e6,b:-1},"3":{a:23e4,b:-1}},"/items/azure_boots":{"0":{a:28500,b:26e3},"1":{a:36e3,b:-1},"4":{a:195e3,b:-1}},"/items/azure_brush":{"0":{a:41e3,b:31e3},"1":{a:64e3,b:2250},"2":{a:8e4,b:2250},"3":{a:1e5,b:-1},"9":{a:72e4,b:-1}},"/items/azure_buckler":{"0":{a:39e3,b:32e3},"1":{a:7e4,b:-1},"2":{a:86e3,b:-1},"3":{a:11e4,b:-1},"5":{a:15e4,b:-1}},"/items/azure_bulwark":{"0":{a:5e4,b:45e3},"5":{a:5e5,b:-1}},"/items/azure_cheese":{"0":{a:940,b:920}},"/items/azure_chisel":{"0":{a:56e3,b:32e3},"1":{a:115e3,b:-1},"2":{a:12e4,b:-1},"3":{a:235e3,b:-1}},"/items/azure_enhancer":{"0":{a:68e3,b:39e3},"3":{a:9e4,b:-1},"4":{a:125e3,b:-1}},"/items/azure_gauntlets":{"0":{a:26500,b:23e3},"1":{a:47e3,b:-1},"2":{a:-1,b:2350},"3":{a:205e3,b:-1},"4":{a:25e4,b:-1}},"/items/azure_hammer":{"0":{a:54e3,b:37e3},"1":{a:25e4,b:2050},"2":{a:-1,b:2050},"3":{a:4e5,b:2050},"7":{a:5e5,b:-1}},"/items/azure_hatchet":{"0":{a:48e3,b:36e3},"3":{a:39e4,b:-1},"5":{a:38e4,b:-1}},"/items/azure_helmet":{"0":{a:35e3,b:32e3},"1":{a:45e3,b:-1},"2":{a:-1,b:2900}},"/items/azure_mace":{"0":{a:54e3,b:49e3},"1":{a:115e3,b:-1},"3":{a:12e4,b:-1}},"/items/azure_milk":{"0":{a:195,b:185}},"/items/azure_needle":{"0":{a:45e3,b:41e3},"1":{a:98e3,b:-1},"3":{a:235e3,b:-1},"5":{a:33e4,b:-1}},"/items/azure_plate_body":{"0":{a:54e3,b:47e3},"1":{a:54e3,b:-1},"2":{a:105e3,b:78e3},"4":{a:2e5,b:-1},"5":{a:275e3,b:-1}},"/items/azure_plate_legs":{"0":{a:46e3,b:44e3},"1":{a:2e5,b:-1},"4":{a:3e5,b:-1},"5":{a:43e4,b:-1}},"/items/azure_pot":{"0":{a:94e3,b:43e3},"1":{a:265e3,b:-1},"2":{a:175e3,b:-1},"3":{a:25e4,b:-1}},"/items/azure_shears":{"0":{a:46e3,b:42e3},"1":{a:32e6,b:-1},"2":{a:42e4,b:-1},"3":{a:78e3,b:-1}},"/items/azure_spatula":{"0":{a:54e3,b:45e3},"2":{a:15e4,b:-1},"3":{a:235e3,b:2050},"4":{a:-1,b:2050},"6":{a:-1,b:2050}},"/items/azure_spear":{"0":{a:52e3,b:5e4},"1":{a:1e7,b:-1},"2":{a:1e7,b:-1}},"/items/azure_sword":{"0":{a:56e3,b:52e3},"1":{a:17e6,b:-1},"2":{a:2e5,b:-1},"4":{a:3e5,b:-1},"5":{a:175e3,b:-1}},"/items/bag_of_10_cowbells":{"0":{a:54e4,b:5e5}},"/items/bamboo_boots":{"0":{a:25500,b:20500},"1":{a:46e3,b:-1},"2":{a:66e3,b:-1},"3":{a:16e4,b:-1},"4":{a:115e3,b:-1},"5":{a:92e3,b:-1},"6":{a:68e4,b:-1},"7":{a:7e5,b:-1},"8":{a:12e5,b:-1}},"/items/bamboo_branch":{"0":{a:25,b:24}},"/items/bamboo_fabric":{"0":{a:320,b:290}},"/items/bamboo_gloves":{"0":{a:24e3,b:18500},"1":{a:6e4,b:-1},"2":{a:86e3,b:-1},"3":{a:19e4,b:-1},"4":{a:12e4,b:-1},"5":{a:38e4,b:-1},"6":{a:64e4,b:-1}},"/items/bamboo_hat":{"0":{a:3e4,b:24500},"1":{a:1e5,b:-1},"2":{a:135e3,b:-1},"3":{a:31e4,b:-1}},"/items/bamboo_robe_bottoms":{"0":{a:37e3,b:34e3},"2":{a:16e4,b:-1},"3":{a:3e5,b:-1}},"/items/bamboo_robe_top":{"0":{a:44e3,b:42e3},"2":{a:16e4,b:-1},"3":{a:22e4,b:-1}},"/items/basic_alchemy_charm":{"0":{a:4e6,b:34e5},"1":{a:125e5,b:-1}},"/items/basic_attack_charm":{"0":{a:84e4,b:82e4},"1":{a:96e4,b:-1},"2":{a:49e5,b:-1},"3":{a:74e5,b:-1},"5":{a:285e5,b:-1}},"/items/basic_brewing_charm":{"0":{a:18e5,b:165e4},"2":{a:78e5,b:-1}},"/items/basic_cheesesmithing_charm":{"0":{a:285e4,b:265e4}},"/items/basic_cooking_charm":{"0":{a:3e6,b:26e5},"2":{a:15e6,b:-1}},"/items/basic_crafting_charm":{"0":{a:34e5,b:-1}},"/items/basic_defense_charm":{"0":{a:86e4,b:84e4},"1":{a:125e5,b:-1}},"/items/basic_enhancing_charm":{"0":{a:82e5,b:72e5},"1":{a:96e5,b:-1},"3":{a:23e6,b:-1}},"/items/basic_foraging_charm":{"0":{a:28e5,b:23e5}},"/items/basic_intelligence_charm":{"0":{a:84e4,b:82e4}},"/items/basic_magic_charm":{"0":{a:13e5,b:125e4},"2":{a:98e5,b:-1},"3":{a:94e5,b:-1}},"/items/basic_melee_charm":{"0":{a:84e4,b:82e4},"1":{a:155e4,b:-1},"3":{a:6e8,b:-1}},"/items/basic_milking_charm":{"0":{a:245e4,b:18e5},"1":{a:185e5,b:-1}},"/items/basic_ranged_charm":{"0":{a:84e4,b:82e4},"1":{a:38e5,b:-1},"2":{a:74e5,b:-1},"3":{a:7e6,b:-1}},"/items/basic_stamina_charm":{"0":{a:15e5,b:14e5},"2":{a:78e5,b:-1}},"/items/basic_tailoring_charm":{"0":{a:255e4,b:175e4},"1":{a:285e4,b:-1}},"/items/basic_woodcutting_charm":{"0":{a:25e5,b:175e4},"1":{a:32e5,b:-1}},"/items/bear_essence":{"0":{a:88,b:86}},"/items/beast_boots":{"0":{a:66e3,b:62e3},"3":{a:26e4,b:-1},"5":{a:28e4,b:-1},"7":{a:12e5,b:-1},"8":{a:195e4,b:-1}},"/items/beast_bracers":{"0":{a:96e3,b:92e3},"1":{a:24e4,b:-1},"2":{a:175e3,b:-1},"3":{a:22e4,b:-1},"4":{a:25e4,b:-1},"5":{a:47e4,b:1e5},"6":{a:8e5,b:-1},"7":{a:155e5,b:-1}},"/items/beast_chaps":{"0":{a:145e3,b:14e4},"1":{a:165e3,b:-1},"2":{a:165e3,b:-1},"3":{a:22e4,b:-1},"5":{a:42e4,b:1e5}},"/items/beast_hide":{"0":{a:22,b:20}},"/items/beast_hood":{"0":{a:72e3,b:68e3},"2":{a:78e3,b:-1},"3":{a:125e3,b:-1},"4":{a:29e4,b:-1},"5":{a:48e4,b:1e5}},"/items/beast_leather":{"0":{a:1150,b:1100}},"/items/beast_tunic":{"0":{a:18e4,b:175e3},"2":{a:3e5,b:-1},"3":{a:19e4,b:-1},"4":{a:31e4,b:-1},"5":{a:38e4,b:1e5},"10":{a:-1,b:3e6}},"/items/berserk":{"0":{a:195e3,b:19e4}},"/items/birch_bow":{"0":{a:23500,b:18e3},"2":{a:145e3,b:-1},"5":{a:4e5,b:-1},"6":{a:7e5,b:-1}},"/items/birch_crossbow":{"0":{a:34e3,b:13e3},"1":{a:56e5,b:-1},"3":{a:145e3,b:-1},"4":{a:2e5,b:-1},"6":{a:14e5,b:-1}},"/items/birch_fire_staff":{"0":{a:19e3,b:17500},"1":{a:49e3,b:-1},"2":{a:49e3,b:-1},"3":{a:145e3,b:-1},"5":{a:7e5,b:-1}},"/items/birch_log":{"0":{a:70,b:68}},"/items/birch_lumber":{"0":{a:560,b:540}},"/items/birch_nature_staff":{"0":{a:26e3,b:18500},"2":{a:56e3,b:-1},"8":{a:115e4,b:-1},"10":{a:22e6,b:-1}},"/items/birch_shield":{"0":{a:13e3,b:4100}},"/items/birch_water_staff":{"0":{a:21e3,b:17500},"1":{a:47e3,b:-1},"2":{a:28e4,b:-1},"3":{a:34e4,b:-1}},"/items/bishops_codex":{"0":{a:98e6,b:96e6},"1":{a:-1,b:8e7},"2":{a:-1,b:8e7},"3":{a:-1,b:8e7},"4":{a:-1,b:8e7},"5":{a:1e8,b:96e6},"6":{a:-1,b:9e7},"7":{a:125e6,b:115e6},"8":{a:16e7,b:14e7},"9":{a:-1,b:18e7},"10":{a:36e7,b:35e7},"11":{a:-1,b:44e7},"12":{a:12e8,b:105e7},"13":{a:2e9,b:19e8}},"/items/bishops_codex_refined":{"10":{a:7e8,b:68e7}},"/items/bishops_scroll":{"0":{a:8e6,b:78e5}},"/items/black_bear_fluff":{"0":{a:125e3,b:12e4}},"/items/black_bear_shoes":{"0":{a:72e4,b:7e5},"2":{a:74e4,b:-1},"3":{a:94e4,b:-1},"5":{a:12e5,b:-1},"6":{a:17e5,b:-1},"7":{a:32e5,b:-1},"8":{a:45e5,b:-1},"9":{a:9e6,b:-1},"10":{a:13e6,b:125e5},"11":{a:24e6,b:-1},"12":{a:47e6,b:43e6},"13":{a:9e7,b:-1},"14":{a:165e6,b:155e6},"15":{a:32e7,b:-1},"16":{a:62e7,b:-1}},"/items/black_tea_leaf":{"0":{a:17,b:16}},"/items/blackberry":{"0":{a:98,b:96}},"/items/blackberry_cake":{"0":{a:800,b:780}},"/items/blackberry_donut":{"0":{a:700,b:680}},"/items/blazing_trident":{"0":{a:25e7,b:24e7},"1":{a:-1,b:205e6},"2":{a:-1,b:205e6},"3":{a:-1,b:195e6},"4":{a:-1,b:21e7},"5":{a:25e7,b:21e7},"6":{a:-1,b:21e7},"7":{a:28e7,b:265e6},"8":{a:38e7,b:31e7},"9":{a:-1,b:36e7},"10":{a:62e7,b:6e8},"11":{a:115e7,b:86e7},"12":{a:175e7,b:155e7},"14":{a:-1,b:4e9}},"/items/blazing_trident_refined":{"0":{a:-1,b:5e6},"10":{a:17e8,b:16e8},"12":{a:-1,b:11e7},"14":{a:86e8,b:-1}},"/items/blessed_tea":{"0":{a:1750,b:1650}},"/items/blooming_trident":{"0":{a:27e7,b:265e6},"1":{a:-1,b:205e6},"2":{a:-1,b:205e6},"3":{a:-1,b:205e6},"4":{a:-1,b:21e7},"5":{a:-1,b:25e7},"6":{a:-1,b:255e6},"7":{a:295e6,b:285e6},"8":{a:-1,b:34e7},"9":{a:-1,b:35e7},"10":{a:66e7,b:62e7},"11":{a:-1,b:68e7},"12":{a:185e7,b:175e7},"13":{a:31e8,b:-1},"14":{a:64e8,b:-1}},"/items/blooming_trident_refined":{"10":{a:-1,b:105e7},"14":{a:72e8,b:-1}},"/items/blue_key_fragment":{"0":{a:74e4,b:72e4}},"/items/blueberry":{"0":{a:72,b:70}},"/items/blueberry_cake":{"0":{a:720,b:660}},"/items/blueberry_donut":{"0":{a:620,b:600}},"/items/branch_of_insight":{"0":{a:21e6,b:205e5}},"/items/brewers_bottoms":{"0":{a:-1,b:33e6},"5":{a:22e7,b:-1},"7":{a:24e7,b:22e7},"8":{a:275e6,b:25e7},"9":{a:-1,b:235e6},"10":{a:41e7,b:39e7},"12":{a:-1,b:6e8}},"/items/brewers_top":{"0":{a:28e7,b:-1},"5":{a:185e6,b:155e6},"6":{a:19e7,b:165e6},"7":{a:23e7,b:19e7},"8":{a:235e6,b:64e6},"9":{a:-1,b:235e6},"10":{a:38e7,b:37e7},"12":{a:115e7,b:-1}},"/items/brewing_essence":{"0":{a:200,b:195}},"/items/brewing_tea":{"0":{a:520,b:470}},"/items/brown_key_fragment":{"0":{a:96e4,b:94e4}},"/items/burble_alembic":{"0":{a:98e3,b:94e3},"3":{a:39e4,b:-1},"5":{a:-1,b:4e5}},"/items/burble_boots":{"0":{a:62e3,b:52e3},"1":{a:62e3,b:-1},"2":{a:28e4,b:-1},"3":{a:32e4,b:-1}},"/items/burble_brush":{"0":{a:98e3,b:9e4},"1":{a:145e3,b:-1},"2":{a:2e5,b:-1},"3":{a:35e4,b:-1},"5":{a:5e5,b:-1},"20":{a:-1,b:88e3}},"/items/burble_buckler":{"0":{a:76e3,b:6e4},"1":{a:14e4,b:-1},"7":{a:5e8,b:-1}},"/items/burble_bulwark":{"0":{a:125e3,b:11e4},"2":{a:44e5,b:-1},"5":{a:3e5,b:-1}},"/items/burble_cheese":{"0":{a:1250,b:1200}},"/items/burble_chisel":{"0":{a:96e3,b:8e4},"1":{a:185e3,b:5200},"2":{a:-1,b:5200},"3":{a:37e4,b:5200}},"/items/burble_enhancer":{"0":{a:98e3,b:86e3},"1":{a:11e4,b:-1},"2":{a:12e4,b:-1},"3":{a:145e3,b:-1},"4":{a:175e3,b:-1},"5":{a:16e4,b:-1},"6":{a:115e4,b:-1},"7":{a:62e5,b:-1}},"/items/burble_gauntlets":{"0":{a:62e3,b:58e3},"1":{a:9e4,b:2900},"2":{a:16e4,b:2900},"3":{a:3e5,b:2900},"4":{a:-1,b:2900},"5":{a:5e5,b:-1},"6":{a:7e5,b:2900}},"/items/burble_hammer":{"0":{a:11e4,b:92e3},"1":{a:125e3,b:-1},"2":{a:3e5,b:-1},"3":{a:39e4,b:-1}},"/items/burble_hatchet":{"0":{a:98e3,b:86e3},"1":{a:145e3,b:-1},"2":{a:17e4,b:-1},"3":{a:34e4,b:-1},"8":{a:25e5,b:-1},"20":{a:-1,b:34e4}},"/items/burble_helmet":{"0":{a:74e3,b:7e4},"1":{a:115e3,b:-1}},"/items/burble_mace":{"0":{a:12e4,b:11e4},"3":{a:34e4,b:-1},"5":{a:5e5,b:-1},"6":{a:72e4,b:-1}},"/items/burble_milk":{"0":{a:255,b:240}},"/items/burble_needle":{"0":{a:98e3,b:92e3},"2":{a:245e4,b:-1},"3":{a:39e4,b:-1}},"/items/burble_plate_body":{"0":{a:11e4,b:105e3},"1":{a:11e4,b:-1},"3":{a:3e5,b:-1},"5":{a:94e4,b:-1}},"/items/burble_plate_legs":{"0":{a:96e3,b:94e3},"1":{a:185e3,b:-1},"3":{a:32e4,b:-1},"5":{a:54e4,b:-1},"10":{a:76e5,b:-1}},"/items/burble_pot":{"0":{a:105e3,b:84e3},"1":{a:1e5,b:-1},"2":{a:24e4,b:-1},"3":{a:38e4,b:-1}},"/items/burble_shears":{"0":{a:96e3,b:9e4},"1":{a:33e4,b:-1},"2":{a:49e4,b:-1},"3":{a:38e4,b:-1},"4":{a:76e4,b:-1},"5":{a:-1,b:64e4}},"/items/burble_spatula":{"0":{a:12e4,b:98e3},"2":{a:23e4,b:-1},"3":{a:38e4,b:-1}},"/items/burble_spear":{"0":{a:115e3,b:11e4},"3":{a:2e5,b:-1},"5":{a:295e3,b:-1},"6":{a:56e4,b:-1}},"/items/burble_sword":{"0":{a:12e4,b:115e3},"1":{a:12e4,b:6600},"2":{a:12e4,b:6600},"3":{a:18e4,b:6600},"5":{a:4e5,b:-1},"6":{a:56e4,b:-1}},"/items/burble_tea_leaf":{"0":{a:26,b:24}},"/items/burning_key_fragment":{"0":{a:205e4,b:2e6}},"/items/butter_of_proficiency":{"0":{a:13e6,b:125e5}},"/items/catalyst_of_coinification":{"0":{a:4200,b:4100}},"/items/catalyst_of_decomposition":{"0":{a:4600,b:4500}},"/items/catalyst_of_transmutation":{"0":{a:8200,b:8e3}},"/items/catalytic_tea":{"0":{a:1650,b:1600}},"/items/cedar_bow":{"0":{a:66e3,b:52e3},"3":{a:5e5,b:-1},"5":{a:33e5,b:-1}},"/items/cedar_crossbow":{"0":{a:72e3,b:52e3},"2":{a:8e4,b:-1},"3":{a:98e3,b:-1},"5":{a:35e4,b:-1},"7":{a:46e5,b:-1}},"/items/cedar_fire_staff":{"0":{a:54e3,b:48e3},"1":{a:82e3,b:-1},"2":{a:13e4,b:-1},"4":{a:49e4,b:-1},"5":{a:3e5,b:-1}},"/items/cedar_log":{"0":{a:200,b:190}},"/items/cedar_lumber":{"0":{a:1050,b:1e3}},"/items/cedar_nature_staff":{"0":{a:58e3,b:56e3},"1":{a:98e3,b:-1},"2":{a:98e3,b:-1},"4":{a:49e4,b:-1},"7":{a:6e5,b:-1}},"/items/cedar_shield":{"0":{a:4e4,b:31e3},"1":{a:5e4,b:-1},"2":{a:145e3,b:-1},"3":{a:56e3,b:-1},"4":{a:52e4,b:-1}},"/items/cedar_water_staff":{"0":{a:58e3,b:5e4},"1":{a:14e4,b:-1},"2":{a:16e4,b:-1},"5":{a:35e4,b:-1},"7":{a:5e5,b:-1}},"/items/celestial_alembic":{"0":{a:-1,b:22e6},"6":{a:-1,b:76e5},"7":{a:44e7,b:41e7},"8":{a:52e7,b:47e7},"10":{a:82e7,b:8e8},"20":{a:-1,b:5e6}},"/items/celestial_brush":{"0":{a:35e7,b:23e7},"5":{a:-1,b:22e7},"6":{a:-1,b:225e6},"7":{a:41e7,b:38e7},"8":{a:47e7,b:42e7},"10":{a:74e7,b:7e8},"12":{a:-1,b:12e8},"14":{a:-1,b:25e8},"20":{a:-1,b:15e7}},"/items/celestial_chisel":{"0":{a:-1,b:115e6},"5":{a:-1,b:36e7},"7":{a:42e7,b:37e7},"8":{a:49e7,b:47e7},"10":{a:74e7,b:72e7}},"/items/celestial_enhancer":{"0":{a:45e7,b:4e8},"10":{a:1e9,b:9e8},"11":{a:15e8,b:-1},"12":{a:25e8,b:-1},"13":{a:47e8,b:-1},"14":{a:92e8,b:215e5},"15":{a:-1,b:5e9}},"/items/celestial_hammer":{"0":{a:-1,b:175e6},"1":{a:-1,b:255e5},"2":{a:-1,b:175e5},"5":{a:-1,b:24e7},"6":{a:-1,b:3e8},"7":{a:43e7,b:37e7},"8":{a:49e7,b:38e7},"10":{a:76e7,b:41e7}},"/items/celestial_hatchet":{"0":{a:-1,b:22e7},"5":{a:-1,b:255e6},"7":{a:4e8,b:39e7},"8":{a:-1,b:4e8},"9":{a:62e7,b:14e7},"10":{a:74e7,b:7e8}},"/items/celestial_needle":{"0":{a:41e7,b:7e7},"1":{a:-1,b:275e5},"5":{a:-1,b:2e8},"6":{a:-1,b:34e7},"7":{a:4e8,b:37e7},"8":{a:47e7,b:4e8},"10":{a:72e7,b:68e7},"20":{a:-1,b:52e5}},"/items/celestial_pot":{"0":{a:-1,b:58e5},"6":{a:36e7,b:3e8},"7":{a:4e8,b:35e7},"8":{a:46e7,b:43e7},"10":{a:72e7,b:66e7},"12":{a:-1,b:44e7}},"/items/celestial_shears":{"0":{a:-1,b:27e7},"1":{a:-1,b:15e6},"2":{a:-1,b:2e8},"3":{a:39e7,b:-1},"5":{a:-1,b:35e7},"7":{a:41e7,b:37e7},"8":{a:46e7,b:4e8},"10":{a:74e7,b:68e7},"11":{a:12e8,b:58e7},"12":{a:-1,b:13e8},"20":{a:-1,b:5e6}},"/items/celestial_spatula":{"0":{a:-1,b:14e7},"4":{a:-1,b:82e5},"5":{a:-1,b:34e7},"6":{a:4e8,b:36e7},"7":{a:42e7,b:38e7},"8":{a:48e7,b:4e8},"10":{a:74e7,b:72e7},"14":{a:-1,b:62e8}},"/items/centaur_boots":{"0":{a:9e5,b:86e4},"1":{a:-1,b:7e5},"2":{a:9e5,b:7e5},"5":{a:12e5,b:115e4},"6":{a:16e5,b:15e5},"7":{a:26e5,b:25e5},"8":{a:88e5,b:4e6},"9":{a:8e6,b:-1},"10":{a:135e5,b:13e6},"11":{a:24e6,b:14e6},"12":{a:45e6,b:42e6},"13":{a:88e6,b:8e7},"14":{a:18e7,b:17e7},"15":{a:34e7,b:-1},"16":{a:9e8,b:88e4}},"/items/centaur_hoof":{"0":{a:18e4,b:175e3}},"/items/channeling_coffee":{"0":{a:3100,b:3e3}},"/items/chaotic_chain":{"0":{a:98e5,b:96e5}},"/items/chaotic_flail":{"0":{a:23e7,b:22e7},"1":{a:-1,b:16e7},"2":{a:-1,b:165e6},"3":{a:-1,b:165e6},"4":{a:-1,b:16e7},"5":{a:255e6,b:225e6},"6":{a:-1,b:17e7},"7":{a:265e6,b:255e6},"8":{a:31e7,b:275e6},"9":{a:-1,b:3e8},"10":{a:58e7,b:54e7},"12":{a:165e7,b:155e7}},"/items/chaotic_flail_refined":{"0":{a:-1,b:54e5},"10":{a:-1,b:11e8},"12":{a:-1,b:7e8},"14":{a:-1,b:64e8}},"/items/cheese":{"0":{a:440,b:430}},"/items/cheese_alembic":{"0":{a:5e3,b:4300},"1":{a:9200,b:-1},"2":{a:9e7,b:-1},"3":{a:14e3,b:-1},"6":{a:42e4,b:-1},"8":{a:6e5,b:-1}},"/items/cheese_boots":{"0":{a:3700,b:3600},"1":{a:175e4,b:-1},"2":{a:15e5,b:-1},"4":{a:38e4,b:-1},"10":{a:4e6,b:-1},"12":{a:45e5,b:-1},"13":{a:1e7,b:-1}},"/items/cheese_brush":{"0":{a:4e3,b:3800},"1":{a:5800,b:-1},"2":{a:5e3,b:-1},"3":{a:6600,b:-1},"4":{a:8200,b:-1},"5":{a:8800,b:-1},"6":{a:13e4,b:-1},"10":{a:245e4,b:-1}},"/items/cheese_buckler":{"0":{a:4300,b:3800},"1":{a:46e3,b:-1},"2":{a:78e3,b:-1},"5":{a:1e6,b:-1},"7":{a:28e4,b:-1},"8":{a:25e5,b:-1},"9":{a:3e6,b:-1}},"/items/cheese_bulwark":{"0":{a:6400,b:4800},"1":{a:9e4,b:-1},"2":{a:35e3,b:-1},"4":{a:86e3,b:-1},"5":{a:88e3,b:-1},"12":{a:38e6,b:-1}},"/items/cheese_chisel":{"0":{a:5e3,b:4800},"5":{a:22e4,b:-1}},"/items/cheese_enhancer":{"0":{a:5200,b:4800},"1":{a:3e4,b:-1},"5":{a:6e4,b:-1},"7":{a:6e5,b:-1},"10":{a:15e5,b:-1}},"/items/cheese_gauntlets":{"0":{a:3700,b:3600},"1":{a:25e3,b:-1},"2":{a:49e3,b:-1},"4":{a:52e3,b:-1},"5":{a:64e3,b:-1},"6":{a:1e5,b:-1},"9":{a:16e6,b:-1},"12":{a:4e6,b:-1},"13":{a:82e5,b:48e5}},"/items/cheese_hammer":{"0":{a:5200,b:4600},"1":{a:5e3,b:-1},"2":{a:14e3,b:-1}},"/items/cheese_hatchet":{"0":{a:4600,b:4100},"1":{a:5e7,b:-1},"2":{a:7e3,b:-1},"10":{a:45e5,b:-1}},"/items/cheese_helmet":{"0":{a:4600,b:4300},"1":{a:1e5,b:-1},"3":{a:115e3,b:-1}},"/items/cheese_mace":{"0":{a:5e3,b:4200},"1":{a:48e5,b:-1},"2":{a:1e5,b:-1},"5":{a:1e5,b:-1}},"/items/cheese_needle":{"0":{a:5e3,b:4500},"1":{a:245e3,b:-1},"5":{a:7e5,b:-1}},"/items/cheese_plate_body":{"0":{a:6600,b:4800},"1":{a:11e3,b:-1},"5":{a:1e6,b:-1},"10":{a:6e6,b:-1}},"/items/cheese_plate_legs":{"0":{a:6e3,b:4900}},"/items/cheese_pot":{"0":{a:4800,b:4600},"1":{a:3e4,b:-1},"5":{a:11e4,b:-1}},"/items/cheese_shears":{"0":{a:4900,b:4100},"1":{a:5600,b:-1},"3":{a:12e3,b:-1},"5":{a:98e3,b:-1}},"/items/cheese_spatula":{"0":{a:7200,b:4500},"2":{a:5e4,b:-1}},"/items/cheese_spear":{"0":{a:5200,b:5e3},"1":{a:5e3,b:-1},"3":{a:2e5,b:-1}},"/items/cheese_sword":{"0":{a:5200,b:4800},"1":{a:5e3,b:-1},"3":{a:43e3,b:-1},"4":{a:9e4,b:-1},"5":{a:9e4,b:-1},"7":{a:1e6,b:-1},"8":{a:37e5,b:-1},"10":{a:35e6,b:-1},"12":{a:98e5,b:-1},"15":{a:45e6,b:-1}},"/items/cheesemakers_bottoms":{"0":{a:-1,b:145e6},"5":{a:23e7,b:-1},"7":{a:255e6,b:21e7},"8":{a:295e6,b:-1},"10":{a:47e7,b:4e8}},"/items/cheesemakers_top":{"0":{a:-1,b:8e7},"5":{a:2e8,b:105e6},"6":{a:21e7,b:13e7},"7":{a:21e7,b:-1},"8":{a:25e7,b:84e5},"10":{a:43e7,b:-1}},"/items/cheesesmithing_essence":{"0":{a:340,b:330}},"/items/cheesesmithing_tea":{"0":{a:740,b:640}},"/items/chefs_bottoms":{"0":{a:-1,b:14e7},"5":{a:24e7,b:19e7},"6":{a:-1,b:12e7},"7":{a:245e6,b:21e7},"8":{a:285e6,b:26e7},"10":{a:46e7,b:39e7}},"/items/chefs_top":{"0":{a:-1,b:3e7},"5":{a:195e6,b:-1},"6":{a:1e11,b:35e5},"7":{a:21e7,b:-1},"8":{a:25e7,b:205e6},"10":{a:42e7,b:39e7}},"/items/chimerical_chest_key":{"0":{a:28e5,b:275e4}},"/items/chimerical_entry_key":{"0":{a:38e4,b:36e4}},"/items/chimerical_essence":{"0":{a:840,b:820}},"/items/chimerical_refinement_shard":{"0":{a:2e6,b:185e4}},"/items/chrono_gloves":{"0":{a:68e5,b:64e5},"3":{a:-1,b:36e5},"4":{a:-1,b:37e5},"5":{a:88e5,b:76e5},"6":{a:98e5,b:94e5},"7":{a:15e6,b:12e6},"8":{a:205e5,b:2e7},"9":{a:-1,b:27e6},"10":{a:56e6,b:54e6},"11":{a:-1,b:105e6},"12":{a:21e7,b:205e6},"13":{a:44e7,b:-1},"14":{a:88e7,b:8e8},"15":{a:175e7,b:-1},"16":{a:34e8,b:-1}},"/items/chrono_sphere":{"0":{a:82e4,b:8e5}},"/items/cleave":{"0":{a:34e3,b:32e3}},"/items/cocoon":{"0":{a:320,b:300}},"/items/collectors_boots":{"0":{a:38e5,b:35e5},"2":{a:-1,b:295e4},"3":{a:44e5,b:34e5},"4":{a:-1,b:38e5},"5":{a:54e5,b:47e5},"6":{a:72e5,b:2e5},"7":{a:96e5,b:-1},"8":{a:16e6,b:9e6},"9":{a:28e6,b:-1},"10":{a:39e6,b:36e6},"12":{a:125e6,b:105e6},"13":{a:-1,b:205e6},"15":{a:-1,b:31e7},"20":{a:-1,b:44e7}},"/items/colossus_core":{"0":{a:92e4,b:9e5}},"/items/colossus_plate_body":{"0":{a:92e5,b:84e5},"1":{a:-1,b:8e6},"2":{a:9e6,b:8e6},"3":{a:-1,b:8e6},"5":{a:96e5,b:82e5},"6":{a:125e5,b:-1},"7":{a:195e5,b:175e5},"8":{a:295e5,b:-1},"9":{a:38e6,b:-1},"10":{a:6e7,b:41e6},"12":{a:31e7,b:1e7}},"/items/colossus_plate_legs":{"0":{a:74e5,b:64e5},"5":{a:76e5,b:6e6},"6":{a:12e6,b:-1},"7":{a:18e6,b:145e5},"8":{a:3e7,b:12e6},"10":{a:52e6,b:32e6},"12":{a:-1,b:1e7}},"/items/cooking_essence":{"0":{a:290,b:285}},"/items/cooking_tea":{"0":{a:740,b:620}},"/items/corsair_crest":{"0":{a:84e5,b:82e5}},"/items/corsair_helmet":{"0":{a:96e6,b:94e6},"3":{a:13e7,b:43e5},"5":{a:105e6,b:96e6},"6":{a:11e7,b:88e6},"7":{a:12e7,b:115e6},"8":{a:16e7,b:145e6},"9":{a:22e7,b:21e7},"10":{a:37e7,b:36e7},"11":{a:64e7,b:5e8},"12":{a:12e8,b:11e8}},"/items/corsair_helmet_refined":{"10":{a:72e7,b:68e7},"12":{a:-1,b:15e8},"14":{a:-1,b:35e5}},"/items/cotton":{"0":{a:70,b:64}},"/items/cotton_boots":{"0":{a:3600,b:3500},"1":{a:54e3,b:-1},"2":{a:3e5,b:-1},"10":{a:14e5,b:-1},"11":{a:41e5,b:-1},"12":{a:76e5,b:-1},"20":{a:-1,b:64}},"/items/cotton_fabric":{"0":{a:420,b:410}},"/items/cotton_gloves":{"0":{a:3900,b:2200},"12":{a:-1,b:27e5},"20":{a:-1,b:3800}},"/items/cotton_hat":{"0":{a:3800,b:3300},"3":{a:48e4,b:-1},"20":{a:-1,b:80}},"/items/cotton_robe_bottoms":{"0":{a:5e3,b:4700},"2":{a:82e3,b:-1},"3":{a:88e3,b:-1},"5":{a:58e4,b:-1},"20":{a:-1,b:115}},"/items/cotton_robe_top":{"0":{a:6200,b:5400},"5":{a:35e4,b:-1},"10":{a:1e7,b:-1},"20":{a:-1,b:130}},"/items/crab_pincer":{"0":{a:9200,b:8800}},"/items/crafters_bottoms":{"0":{a:35e7,b:265e5},"5":{a:24e7,b:205e6},"7":{a:255e6,b:235e6},"8":{a:3e8,b:265e6},"10":{a:46e7,b:41e7}},"/items/crafters_top":{"5":{a:195e6,b:17e7},"6":{a:245e6,b:84e5},"7":{a:215e6,b:2e8},"8":{a:255e6,b:2e8},"10":{a:42e7,b:36e7}},"/items/crafting_essence":{"0":{a:330,b:320}},"/items/crafting_tea":{"0":{a:780,b:640}},"/items/crimson_alembic":{"0":{a:18e4,b:17e4},"1":{a:285e3,b:-1},"2":{a:39e4,b:-1},"3":{a:32e4,b:-1},"5":{a:82e4,b:21e4}},"/items/crimson_boots":{"0":{a:115e3,b:98e3},"1":{a:14e4,b:-1},"2":{a:15e4,b:-1},"3":{a:17e4,b:-1},"5":{a:35e4,b:-1},"6":{a:62e4,b:-1},"8":{a:3e6,b:-1}},"/items/crimson_brush":{"0":{a:14e4,b:125e3},"2":{a:26e4,b:-1},"3":{a:45e4,b:-1},"4":{a:12e5,b:-1},"5":{a:165e4,b:7e5},"8":{a:56e5,b:-1}},"/items/crimson_buckler":{"0":{a:145e3,b:14e4},"1":{a:17e4,b:-1},"2":{a:17e4,b:-1},"3":{a:19e4,b:-1},"5":{a:155e4,b:-1}},"/items/crimson_bulwark":{"0":{a:195e3,b:17e4},"1":{a:22e4,b:-1},"3":{a:33e4,b:-1},"4":{a:7e5,b:-1}},"/items/crimson_cheese":{"0":{a:1250,b:1200}},"/items/crimson_chisel":{"0":{a:14e4,b:135e3},"2":{a:33e4,b:-1},"3":{a:43e4,b:-1},"4":{a:82e4,b:-1},"5":{a:19e5,b:27e4},"6":{a:-1,b:205e3}},"/items/crimson_enhancer":{"0":{a:175e3,b:16e4},"1":{a:18e4,b:-1},"2":{a:22e4,b:-1},"3":{a:275e3,b:-1},"4":{a:62e4,b:-1},"5":{a:88e4,b:295e3},"6":{a:28e5,b:68e4},"7":{a:58e5,b:-1},"10":{a:68e5,b:-1}},"/items/crimson_gauntlets":{"0":{a:1e5,b:96e3},"2":{a:33e4,b:-1},"3":{a:34e4,b:-1},"4":{a:5e5,b:-1},"5":{a:5e5,b:-1}},"/items/crimson_hammer":{"0":{a:21e4,b:145e3},"1":{a:3e5,b:-1},"2":{a:35e4,b:-1},"3":{a:43e4,b:-1},"4":{a:1e7,b:-1},"5":{a:155e4,b:3e5},"6":{a:-1,b:42e4}},"/items/crimson_hatchet":{"0":{a:16e4,b:135e3},"1":{a:185e3,b:-1},"3":{a:4e6,b:-1},"5":{a:9e6,b:7e5},"6":{a:11e6,b:-1},"10":{a:52e6,b:-1}},"/items/crimson_helmet":{"0":{a:13e4,b:12e4},"2":{a:185e3,b:-1},"3":{a:33e4,b:-1},"5":{a:19e5,b:-1},"8":{a:6e7,b:-1}},"/items/crimson_mace":{"0":{a:2e5,b:195e3},"3":{a:35e4,b:-1}},"/items/crimson_milk":{"0":{a:350,b:340}},"/items/crimson_needle":{"0":{a:175e3,b:14e4},"1":{a:27e4,b:-1},"2":{a:42e4,b:-1},"3":{a:6e5,b:-1},"4":{a:82e4,b:-1},"5":{a:105e4,b:-1},"10":{a:-1,b:13e5}},"/items/crimson_plate_body":{"0":{a:19e4,b:185e3},"1":{a:29e4,b:-1},"4":{a:35e4,b:-1},"5":{a:4e5,b:1e5}},"/items/crimson_plate_legs":{"0":{a:175e3,b:17e4}},"/items/crimson_pot":{"0":{a:15e4,b:145e3},"1":{a:18e4,b:-1},"2":{a:23e4,b:-1},"3":{a:42e4,b:-1},"5":{a:-1,b:26e4}},"/items/crimson_shears":{"0":{a:16e4,b:15e4},"1":{a:32e4,b:-1},"2":{a:-1,b:11e3},"3":{a:7e5,b:11e3},"5":{a:26e5,b:235e3},"6":{a:-1,b:54e4}},"/items/crimson_spatula":{"0":{a:17e4,b:135e3},"1":{a:45e5,b:-1},"5":{a:14e5,b:285e3}},"/items/crimson_spear":{"0":{a:2e5,b:195e3},"1":{a:245e3,b:-1},"2":{a:4e5,b:-1},"3":{a:88e4,b:76e4},"6":{a:1e6,b:-1}},"/items/crimson_sword":{"0":{a:215e3,b:2e5},"1":{a:22e4,b:-1},"2":{a:23e4,b:14e3},"3":{a:35e4,b:-1},"4":{a:86e4,b:-1},"5":{a:1e6,b:-1},"8":{a:66e5,b:-1}},"/items/crippling_slash":{"0":{a:48e3,b:47e3}},"/items/critical_aura":{"0":{a:2e6,b:195e4}},"/items/critical_coffee":{"0":{a:3700,b:3600}},"/items/crushed_amber":{"0":{a:1350,b:1300}},"/items/crushed_amethyst":{"0":{a:2150,b:2100}},"/items/crushed_garnet":{"0":{a:2150,b:2100}},"/items/crushed_jade":{"0":{a:2150,b:2100}},"/items/crushed_moonstone":{"0":{a:3100,b:3e3}},"/items/crushed_pearl":{"0":{a:860,b:840}},"/items/crushed_philosophers_stone":{"0":{a:21e5,b:205e4}},"/items/crushed_sunstone":{"0":{a:7600,b:7400}},"/items/cupcake":{"0":{a:200,b:155}},"/items/cursed_ball":{"0":{a:76e5,b:74e5}},"/items/cursed_bow":{"0":{a:185e6,b:175e6},"1":{a:-1,b:16e7},"2":{a:-1,b:165e6},"3":{a:-1,b:165e6},"4":{a:-1,b:16e7},"5":{a:-1,b:17e7},"6":{a:205e6,b:17e7},"7":{a:23e7,b:195e6},"8":{a:34e7,b:205e6},"9":{a:-1,b:255e6},"10":{a:54e7,b:42e7},"12":{a:155e7,b:11e8}},"/items/cursed_bow_refined":{"0":{a:-1,b:4e7},"10":{a:125e7,b:6e6}},"/items/dairyhands_bottoms":{"0":{a:-1,b:1e8},"1":{a:-1,b:6e7},"3":{a:-1,b:41e5},"5":{a:23e7,b:2e8},"7":{a:245e6,b:205e6},"8":{a:285e6,b:245e6},"10":{a:45e7,b:4e8},"12":{a:-1,b:7e8}},"/items/dairyhands_top":{"0":{a:-1,b:13e7},"5":{a:19e7,b:155e6},"6":{a:195e6,b:125e6},"7":{a:205e6,b:19e7},"8":{a:24e7,b:2e8},"10":{a:41e7,b:38e7}},"/items/damaged_anchor":{"0":{a:8e6,b:78e5}},"/items/dark_key_fragment":{"0":{a:175e4,b:17e5}},"/items/defense_coffee":{"0":{a:880,b:840}},"/items/demonic_core":{"0":{a:92e4,b:9e5}},"/items/demonic_plate_body":{"0":{a:88e5,b:78e5},"3":{a:96e5,b:4e6},"4":{a:-1,b:42e5},"5":{a:12e6,b:86e5},"6":{a:145e5,b:94e5},"7":{a:2e7,b:165e5},"8":{a:-1,b:2e7},"10":{a:-1,b:72e6}},"/items/demonic_plate_legs":{"0":{a:68e5,b:6e6},"4":{a:-1,b:4e6},"5":{a:58e5,b:49e5},"6":{a:1e7,b:52e5},"7":{a:16e6,b:14e6},"8":{a:255e5,b:155e5},"10":{a:8e7,b:64e6},"13":{a:25e7,b:-1}},"/items/dodocamel_gauntlets":{"0":{a:5e7,b:46e6},"4":{a:-1,b:82e5},"5":{a:52e6,b:48e6},"6":{a:6e7,b:-1},"7":{a:-1,b:6e7},"8":{a:9e7,b:84e6},"9":{a:-1,b:1e8},"10":{a:24e7,b:235e6},"12":{a:92e7,b:88e7}},"/items/dodocamel_gauntlets_refined":{"10":{a:43e7,b:41e7},"12":{a:115e7,b:11e8},"14":{a:-1,b:3e6}},"/items/dodocamel_plume":{"0":{a:7e6,b:68e5}},"/items/donut":{"0":{a:165,b:145}},"/items/dragon_fruit":{"0":{a:390,b:380}},"/items/dragon_fruit_gummy":{"0":{a:1050,b:1e3}},"/items/dragon_fruit_yogurt":{"0":{a:1400,b:1350}},"/items/earrings_of_armor":{"0":{a:66e5,b:64e5},"1":{a:9e6,b:-1},"2":{a:105e5,b:-1},"3":{a:11e6,b:-1},"4":{a:29e6,b:-1},"6":{a:12e7,b:-1}},"/items/earrings_of_critical_strike":{"0":{a:1e7,b:82e5},"1":{a:-1,b:78e5},"2":{a:-1,b:1e7},"3":{a:205e5,b:18e6},"4":{a:4e7,b:31e6},"5":{a:74e6,b:72e6},"6":{a:-1,b:76e6}},"/items/earrings_of_essence_find":{"0":{a:66e5,b:64e5},"7":{a:175e6,b:-1}},"/items/earrings_of_gathering":{"0":{a:7e6,b:66e5},"2":{a:145e5,b:-1},"3":{a:2e7,b:-1},"5":{a:-1,b:58e6},"10":{a:-1,b:4e8}},"/items/earrings_of_rare_find":{"0":{a:76e5,b:7e6},"1":{a:96e5,b:-1},"2":{a:-1,b:9e6},"3":{a:205e5,b:18e6},"4":{a:34e6,b:32e6},"5":{a:66e6,b:64e6},"6":{a:14e7,b:-1},"10":{a:-1,b:9e7}},"/items/earrings_of_regeneration":{"0":{a:66e5,b:6e6},"1":{a:72e5,b:6e6},"2":{a:1e7,b:76e5},"3":{a:16e6,b:14e6},"4":{a:3e7,b:265e5},"5":{a:6e7,b:54e6},"6":{a:11e7,b:7e7},"7":{a:175e6,b:165e6},"8":{a:39e7,b:-1}},"/items/earrings_of_resistance":{"0":{a:68e5,b:66e5},"2":{a:98e5,b:-1},"3":{a:98e5,b:-1},"4":{a:215e5,b:-1},"5":{a:47e6,b:-1}},"/items/efficiency_tea":{"0":{a:1500,b:1450}},"/items/egg":{"0":{a:58,b:56}},"/items/elemental_affinity":{"0":{a:18e4,b:175e3}},"/items/elusiveness":{"0":{a:68e3,b:66e3}},"/items/emp_tea_leaf":{"0":{a:105,b:100}},"/items/enchanted_chest_key":{"0":{a:52e5,b:5e6}},"/items/enchanted_entry_key":{"0":{a:64e4,b:62e4}},"/items/enchanted_essence":{"0":{a:1650,b:1600}},"/items/enchanted_gloves":{"0":{a:86e5,b:8e6},"2":{a:-1,b:36e5},"5":{a:98e5,b:84e5},"6":{a:125e5,b:8e6},"7":{a:185e5,b:12e6},"8":{a:27e6,b:195e5},"9":{a:-1,b:105e5},"10":{a:72e6,b:64e6},"12":{a:245e6,b:21e7}},"/items/enchanted_refinement_shard":{"0":{a:36e5,b:35e5}},"/items/enhancers_bottoms":{"0":{a:-1,b:25e6},"5":{a:35e7,b:25e6},"7":{a:34e7,b:265e6},"8":{a:4e8,b:28e7},"10":{a:58e7,b:56e7}},"/items/enhancers_top":{"5":{a:34e7,b:2e8},"6":{a:265e6,b:-1},"7":{a:295e6,b:205e6},"8":{a:33e7,b:25e7},"10":{a:52e7,b:5e8},"12":{a:-1,b:14e8}},"/items/enhancing_essence":{"0":{a:880,b:860}},"/items/enhancing_tea":{"0":{a:1150,b:1100}},"/items/entangle":{"0":{a:23500,b:23e3}},"/items/excelsa_coffee_bean":{"0":{a:820,b:800}},"/items/expert_alchemy_charm":{"3":{a:28e7,b:-1},"5":{a:34e7,b:25e7}},"/items/expert_attack_charm":{"0":{a:47e6,b:43e6},"2":{a:-1,b:4e7},"3":{a:8e7,b:72e6},"4":{a:135e6,b:-1},"5":{a:185e6,b:17e7},"6":{a:31e7,b:-1}},"/items/expert_brewing_charm":{"0":{a:105e6,b:-1},"4":{a:24e7,b:-1},"5":{a:24e7,b:19e7}},"/items/expert_cheesesmithing_charm":{"0":{a:245e6,b:3e6},"5":{a:295e6,b:-1}},"/items/expert_cooking_charm":{"3":{a:16e7,b:-1},"5":{a:285e6,b:-1}},"/items/expert_crafting_charm":{"0":{a:165e6,b:42e6},"1":{a:19e7,b:-1},"3":{a:24e7,b:-1},"5":{a:31e7,b:-1}},"/items/expert_defense_charm":{"0":{a:48e6,b:31e6},"1":{a:78e6,b:-1},"2":{a:-1,b:54e6},"3":{a:76e6,b:68e6},"4":{a:14e7,b:1e8},"5":{a:195e6,b:175e6}},"/items/expert_enhancing_charm":{"0":{a:39e7,b:-1},"5":{a:52e7,b:-1}},"/items/expert_foraging_charm":{"0":{a:165e6,b:33e5},"3":{a:22e7,b:-1},"5":{a:275e6,b:265e6},"7":{a:-1,b:56e5}},"/items/expert_intelligence_charm":{"0":{a:5e7,b:31e6},"2":{a:-1,b:44e6},"3":{a:-1,b:68e6},"4":{a:-1,b:1e8},"5":{a:-1,b:17e7}},"/items/expert_magic_charm":{"0":{a:76e6,b:6e7},"1":{a:84e6,b:-1},"2":{a:88e6,b:-1},"3":{a:98e6,b:94e6},"4":{a:-1,b:14e7},"5":{a:21e7,b:2e8},"6":{a:34e7,b:285e6}},"/items/expert_melee_charm":{"0":{a:48e6,b:43e6},"3":{a:78e6,b:7e7},"5":{a:185e6,b:17e7}},"/items/expert_milking_charm":{"0":{a:16e7,b:-1},"1":{a:16e7,b:-1},"3":{a:195e6,b:-1},"5":{a:275e6,b:-1},"10":{a:-1,b:82e7}},"/items/expert_ranged_charm":{"0":{a:46e6,b:4e7},"1":{a:66e6,b:-1},"3":{a:72e6,b:68e6},"4":{a:13e7,b:1e8},"5":{a:18e7,b:17e7},"7":{a:4e8,b:-1}},"/items/expert_stamina_charm":{"0":{a:-1,b:66e6},"1":{a:8e7,b:-1},"2":{a:96e6,b:74e6},"3":{a:12e7,b:-1},"5":{a:255e6,b:205e6}},"/items/expert_tailoring_charm":{"0":{a:-1,b:52e6},"5":{a:25e7,b:-1}},"/items/expert_woodcutting_charm":{"0":{a:125e6,b:-1},"3":{a:23e7,b:1e7},"5":{a:275e6,b:-1}},"/items/eye_of_the_watcher":{"0":{a:78e4,b:76e4}},"/items/eye_watch":{"0":{a:74e5,b:7e6},"1":{a:-1,b:31e5},"2":{a:96e5,b:31e5},"3":{a:9e6,b:6e6},"4":{a:92e5,b:58e5},"5":{a:96e5,b:88e5},"6":{a:125e5,b:6e6},"7":{a:16e6,b:125e5},"8":{a:27e6,b:2e7},"9":{a:46e6,b:36e6},"10":{a:7e7,b:68e6},"12":{a:-1,b:38e5},"13":{a:-1,b:1e8}},"/items/eyessence":{"0":{a:37,b:36}},"/items/fierce_aura":{"0":{a:22e5,b:215e4}},"/items/fieriosa_coffee_bean":{"0":{a:940,b:920}},"/items/fighter_necklace":{"0":{a:14e6,b:115e5},"1":{a:-1,b:8e6},"2":{a:-1,b:14e6},"3":{a:265e5,b:205e5},"5":{a:-1,b:26e6}},"/items/fireball":{"0":{a:6600,b:6400}},"/items/firestorm":{"0":{a:18e4,b:175e3}},"/items/flame_arrow":{"0":{a:33e3,b:32e3}},"/items/flame_blast":{"0":{a:33e3,b:32e3}},"/items/flaming_cloth":{"0":{a:62e3,b:58e3}},"/items/flaming_robe_bottoms":{"0":{a:21e4,b:2e5},"2":{a:26e4,b:-1},"3":{a:2e5,b:-1},"5":{a:27e4,b:-1},"6":{a:8e5,b:-1},"7":{a:105e4,b:52e4},"8":{a:19e5,b:-1},"9":{a:25e5,b:6e5},"10":{a:3e6,b:23e5},"12":{a:24e6,b:-1}},"/items/flaming_robe_top":{"0":{a:26e4,b:255e3},"1":{a:275e3,b:-1},"2":{a:3e5,b:21e4},"3":{a:275e3,b:-1},"4":{a:35e4,b:-1},"5":{a:42e4,b:24e4},"6":{a:7e5,b:-1},"7":{a:78e4,b:56e4},"8":{a:175e4,b:58e4},"9":{a:35e5,b:6e5},"10":{a:46e5,b:31e5}},"/items/flax":{"0":{a:84,b:78}},"/items/fluffy_red_hat":{"0":{a:54e5,b:52e5},"5":{a:56e5,b:52e5},"6":{a:66e5,b:66e4},"7":{a:1e7,b:84e5},"8":{a:155e5,b:11e6},"9":{a:28e6,b:155e5},"10":{a:42e6,b:4e7}},"/items/foragers_bottoms":{"0":{a:-1,b:2e8},"5":{a:23e7,b:21e7},"6":{a:235e6,b:-1},"7":{a:25e7,b:245e6},"8":{a:29e7,b:255e6},"10":{a:45e7,b:39e7},"11":{a:-1,b:26e7}},"/items/foragers_top":{"0":{a:185e6,b:1e8},"1":{a:-1,b:3e7},"5":{a:19e7,b:155e6},"6":{a:21e7,b:-1},"7":{a:21e7,b:19e7},"8":{a:245e6,b:22e7},"10":{a:41e7,b:38e7}},"/items/foraging_essence":{"0":{a:290,b:285}},"/items/foraging_tea":{"0":{a:640,b:620}},"/items/fracturing_impact":{"0":{a:54e3,b:52e3}},"/items/frenzy":{"0":{a:36e4,b:35e4}},"/items/frost_sphere":{"0":{a:56e4,b:54e4}},"/items/frost_staff":{"0":{a:11e6,b:105e5},"5":{a:11e6,b:105e5},"6":{a:14e6,b:-1},"7":{a:145e5,b:94e5},"8":{a:16e6,b:-1},"9":{a:235e5,b:14e6},"10":{a:44e6,b:3e7}},"/items/frost_surge":{"0":{a:32e4,b:31e4}},"/items/furious_spear":{"0":{a:235e6,b:23e7},"1":{a:-1,b:19e7},"2":{a:-1,b:185e6},"3":{a:-1,b:175e6},"4":{a:-1,b:18e7},"5":{a:255e6,b:225e6},"6":{a:-1,b:2e8},"7":{a:295e6,b:27e7},"8":{a:-1,b:31e7},"10":{a:62e7,b:58e7},"12":{a:-1,b:155e7},"14":{a:-1,b:66e5}},"/items/furious_spear_refined":{"10":{a:-1,b:56e5},"15":{a:-1,b:5e6}},"/items/garnet":{"0":{a:35e3,b:34e3}},"/items/gathering_tea":{"0":{a:680,b:600}},"/items/gator_vest":{"0":{a:18e3,b:17500},"1":{a:27500,b:16e3},"2":{a:26e3,b:16e3},"3":{a:32e3,b:16e3},"4":{a:47e3,b:16e3},"5":{a:34e3,b:32e3},"6":{a:76e3,b:56e3},"7":{a:135e3,b:105e3},"8":{a:31e4,b:25e4},"9":{a:9e5,b:5e5},"10":{a:1e6,b:98e4}},"/items/giant_pouch":{"0":{a:66e5,b:64e5},"1":{a:72e5,b:64e5},"2":{a:72e5,b:64e5},"3":{a:76e5,b:64e5},"4":{a:9e6,b:82e5},"5":{a:11e6,b:1e7},"6":{a:205e5,b:135e5},"7":{a:-1,b:145e5},"10":{a:-1,b:11e5}},"/items/ginkgo_bow":{"0":{a:31e4,b:3e5},"3":{a:56e4,b:-1},"5":{a:68e4,b:-1},"6":{a:155e4,b:-1}},"/items/ginkgo_crossbow":{"0":{a:22e4,b:195e3},"1":{a:39e4,b:-1},"5":{a:14e5,b:-1},"6":{a:43e7,b:-1}},"/items/ginkgo_fire_staff":{"0":{a:25e4,b:22e4},"2":{a:275e3,b:-1},"3":{a:31e4,b:-1},"5":{a:48e4,b:-1},"6":{a:88e4,b:-1},"7":{a:41e5,b:-1}},"/items/ginkgo_log":{"0":{a:230,b:210}},"/items/ginkgo_lumber":{"0":{a:1600,b:1550}},"/items/ginkgo_nature_staff":{"0":{a:3e5,b:225e3},"3":{a:44e4,b:-1}},"/items/ginkgo_shield":{"0":{a:14e4,b:135e3},"3":{a:11e4,b:-1},"4":{a:195e3,b:-1},"5":{a:35e4,b:-1},"6":{a:66e4,b:-1}},"/items/ginkgo_water_staff":{"0":{a:34e4,b:22e4},"4":{a:45e5,b:-1},"5":{a:5e6,b:-1}},"/items/gluttonous_energy":{"0":{a:165e5,b:145e5}},"/items/gluttonous_pouch":{"0":{a:215e6,b:205e5},"5":{a:265e6,b:245e6}},"/items/gobo_boomstick":{"0":{a:8e4,b:78e3},"1":{a:88e3,b:-1},"2":{a:98e3,b:-1},"5":{a:11e4,b:28e3},"6":{a:225e3,b:-1},"7":{a:52e4,b:-1},"8":{a:115e4,b:-1},"10":{a:45e5,b:-1}},"/items/gobo_boots":{"0":{a:38e3,b:24e3},"1":{a:295e3,b:-1},"5":{a:11e5,b:-1}},"/items/gobo_bracers":{"0":{a:43e3,b:37e3},"2":{a:46e4,b:-1},"3":{a:47e4,b:-1},"5":{a:33e4,b:-1}},"/items/gobo_chaps":{"0":{a:64e3,b:6e4},"1":{a:1e5,b:-1},"2":{a:11e4,b:-1},"3":{a:225e3,b:-1},"5":{a:1e6,b:-1},"6":{a:12e5,b:-1}},"/items/gobo_defender":{"0":{a:42e4,b:41e4},"1":{a:-1,b:33e4},"2":{a:43e4,b:32e4},"3":{a:43e4,b:31e4},"4":{a:-1,b:4e5},"5":{a:46e4,b:41e4},"6":{a:54e4,b:41e4},"7":{a:68e4,b:5e5},"8":{a:11e5,b:9e5},"10":{a:39e5,b:255e4},"13":{a:-1,b:66e5}},"/items/gobo_essence":{"0":{a:90,b:88}},"/items/gobo_hide":{"0":{a:19,b:17}},"/items/gobo_hood":{"0":{a:45e3,b:38e3},"1":{a:1e5,b:-1},"2":{a:29e4,b:-1},"3":{a:25e4,b:-1},"4":{a:3e5,b:-1}},"/items/gobo_leather":{"0":{a:840,b:800}},"/items/gobo_rag":{"0":{a:36e4,b:35e4}},"/items/gobo_shooter":{"0":{a:8e4,b:78e3},"1":{a:82e3,b:-1},"2":{a:96e3,b:-1},"3":{a:96e3,b:-1},"5":{a:92e3,b:28e3},"6":{a:145e3,b:-1},"7":{a:34e4,b:-1},"8":{a:66e4,b:-1},"10":{a:35e5,b:-1}},"/items/gobo_slasher":{"0":{a:8e4,b:78e3},"1":{a:8e4,b:-1},"2":{a:92e3,b:-1},"3":{a:94e3,b:-1},"4":{a:1e5,b:-1},"5":{a:12e4,b:1e5},"6":{a:4e5,b:2e5},"7":{a:62e4,b:-1},"8":{a:2e6,b:11e5},"10":{a:45e5,b:4e6},"11":{a:1e7,b:52e5}},"/items/gobo_smasher":{"0":{a:8e4,b:78e3},"1":{a:27e4,b:-1},"2":{a:41e5,b:-1},"3":{a:1e5,b:-1},"5":{a:125e3,b:28e3},"6":{a:9e5,b:-1},"7":{a:1e6,b:-1},"8":{a:66e5,b:-1},"10":{a:68e5,b:-1},"14":{a:16e7,b:-1}},"/items/gobo_stabber":{"0":{a:8e4,b:78e3},"1":{a:84e3,b:-1},"2":{a:1e5,b:-1},"3":{a:98e3,b:-1},"4":{a:49e4,b:-1},"5":{a:1e5,b:-1},"6":{a:22e4,b:-1},"7":{a:5e5,b:-1},"8":{a:195e4,b:-1},"10":{a:49e5,b:-1},"12":{a:2e7,b:-1}},"/items/gobo_tunic":{"0":{a:7e4,b:64e3},"1":{a:105e3,b:-1},"2":{a:62e4,b:-1},"3":{a:64e4,b:-1},"4":{a:125e4,b:-1},"5":{a:6e5,b:-1}},"/items/goggles":{"0":{a:52e4,b:5e5}},"/items/golem_essence":{"0":{a:260,b:255}},"/items/gourmet_tea":{"0":{a:720,b:680}},"/items/grandmaster_alchemy_charm":{},"/items/grandmaster_attack_charm":{"5":{a:-1,b:7e8},"8":{a:-1,b:25e8}},"/items/grandmaster_brewing_charm":{},"/items/grandmaster_cheesesmithing_charm":{},"/items/grandmaster_cooking_charm":{"0":{a:-1,b:62e6}},"/items/grandmaster_crafting_charm":{},"/items/grandmaster_defense_charm":{"5":{a:96e7,b:-1}},"/items/grandmaster_enhancing_charm":{},"/items/grandmaster_foraging_charm":{"0":{a:-1,b:145e5},"5":{a:-1,b:16e6},"7":{a:-1,b:1e7},"8":{a:-1,b:19e8},"10":{a:-1,b:3e9},"20":{a:-1,b:145e5}},"/items/grandmaster_intelligence_charm":{},"/items/grandmaster_magic_charm":{"0":{a:11e8,b:-1},"7":{a:24e8,b:-1},"10":{a:-1,b:6e9}},"/items/grandmaster_melee_charm":{"0":{a:-1,b:16e7},"5":{a:-1,b:1e9}},"/items/grandmaster_milking_charm":{},"/items/grandmaster_ranged_charm":{"0":{a:-1,b:24e7},"5":{a:-1,b:225e6},"20":{a:-1,b:4e7}},"/items/grandmaster_stamina_charm":{},"/items/grandmaster_tailoring_charm":{"0":{a:-1,b:11e6},"5":{a:-1,b:1e9}},"/items/grandmaster_woodcutting_charm":{"0":{a:-1,b:1e7},"5":{a:-1,b:1e8}},"/items/granite_bludgeon":{"0":{a:165e5,b:98e5},"5":{a:13e6,b:-1},"6":{a:15e6,b:-1},"7":{a:2e7,b:12e6},"8":{a:28e6,b:18e6},"10":{a:62e6,b:49e6},"12":{a:22e7,b:215e5},"14":{a:58e7,b:56e4}},"/items/green_key_fragment":{"0":{a:58e4,b:56e4}},"/items/green_tea_leaf":{"0":{a:14,b:13}},"/items/griffin_bulwark":{"0":{a:185e6,b:17e7},"5":{a:-1,b:18e7},"6":{a:-1,b:19e7},"7":{a:25e7,b:215e6},"8":{a:-1,b:245e6},"10":{a:48e7,b:47e7},"11":{a:82e7,b:68e5},"12":{a:13e8,b:-1},"14":{a:-1,b:5e9}},"/items/griffin_bulwark_refined":{"10":{a:-1,b:115e6},"12":{a:195e7,b:5e6}},"/items/griffin_chaps":{"0":{a:76e5,b:7e6},"5":{a:98e5,b:82e5},"6":{a:13e6,b:-1},"7":{a:135e5,b:-1},"8":{a:15e6,b:-1},"10":{a:38e6,b:2e7},"12":{a:12e7,b:-1}},"/items/griffin_leather":{"0":{a:11e5,b:105e4}},"/items/griffin_talon":{"0":{a:66e5,b:64e5}},"/items/griffin_tunic":{"0":{a:105e5,b:1e7},"1":{a:-1,b:84e5},"2":{a:-1,b:84e5},"3":{a:-1,b:84e5},"5":{a:12e6,b:82e5},"6":{a:14e6,b:-1},"7":{a:16e6,b:-1},"8":{a:245e5,b:-1},"10":{a:33e6,b:-1},"12":{a:12e7,b:-1}},"/items/grizzly_bear_fluff":{"0":{a:92e3,b:9e4}},"/items/grizzly_bear_shoes":{"0":{a:52e4,b:49e4},"1":{a:58e4,b:-1},"4":{a:8e5,b:-1},"5":{a:12e5,b:8e5},"6":{a:2e6,b:12e5},"7":{a:235e4,b:19e5},"8":{a:4e6,b:33e5},"10":{a:115e5,b:105e5},"11":{a:-1,b:12e6},"12":{a:44e6,b:35e6},"13":{a:78e6,b:-1},"14":{a:15e7,b:-1},"15":{a:29e7,b:27e7},"16":{a:6e8,b:-1}},"/items/guardian_aura":{"0":{a:11e5,b:105e4}},"/items/gummy":{"0":{a:130,b:115}},"/items/guzzling_energy":{"0":{a:215e5,b:21e6}},"/items/guzzling_pouch":{"0":{a:27e7,b:26e7},"1":{a:-1,b:16e6},"2":{a:-1,b:265e6},"3":{a:-1,b:265e6},"4":{a:-1,b:23e7},"5":{a:29e7,b:27e7},"6":{a:32e7,b:31e7},"7":{a:38e7,b:37e7},"8":{a:52e7,b:5e8},"9":{a:-1,b:66e7},"10":{a:105e7,b:1e9},"12":{a:3e9,b:265e5}},"/items/heal":{"0":{a:33e3,b:32e3}},"/items/holy_alembic":{"0":{a:52e4,b:5e5},"1":{a:54e4,b:21e4},"2":{a:76e4,b:22e4},"3":{a:8e5,b:265e3},"4":{a:15e5,b:52e4},"5":{a:2e6,b:19e5},"6":{a:48e5,b:-1},"7":{a:8e6,b:66e5},"8":{a:175e5,b:12e6},"10":{a:47e6,b:43e6},"12":{a:165e6,b:-1}},"/items/holy_boots":{"0":{a:24e4,b:225e3},"1":{a:255e3,b:-1},"2":{a:31e4,b:-1},"3":{a:37e4,b:-1},"4":{a:62e4,b:-1},"5":{a:92e4,b:25e4},"6":{a:48e5,b:48e4}},"/items/holy_brush":{"0":{a:52e4,b:5e5},"1":{a:52e4,b:1e5},"2":{a:7e5,b:1e5},"3":{a:105e4,b:-1},"4":{a:135e4,b:-1},"5":{a:2e6,b:195e4},"6":{a:43e5,b:3e6},"7":{a:78e5,b:66e5},"8":{a:15e6,b:13e6},"9":{a:27e6,b:-1},"10":{a:49e6,b:42e6},"12":{a:-1,b:48e6}},"/items/holy_buckler":{"0":{a:5e5,b:49e4},"1":{a:47e4,b:-1},"2":{a:56e4,b:-1},"3":{a:45e4,b:-1},"5":{a:11e5,b:2e5},"6":{a:39e5,b:-1}},"/items/holy_bulwark":{"0":{a:9e5,b:8e5},"1":{a:84e4,b:-1},"2":{a:1e6,b:-1},"3":{a:14e5,b:14e4},"4":{a:19e5,b:19e4},"5":{a:17e5,b:175e3},"6":{a:48e5,b:48e4}},"/items/holy_cheese":{"0":{a:2200,b:2150}},"/items/holy_chisel":{"0":{a:52e4,b:5e5},"1":{a:5e5,b:235e3},"2":{a:8e5,b:245e3},"3":{a:1e6,b:24e4},"4":{a:125e4,b:-1},"5":{a:23e5,b:18e5},"6":{a:42e5,b:29e5},"7":{a:82e5,b:6e6},"8":{a:145e5,b:13e6},"9":{a:27e6,b:-1},"10":{a:49e6,b:47e6}},"/items/holy_enhancer":{"0":{a:54e4,b:5e5},"1":{a:56e4,b:-1},"2":{a:7e5,b:-1},"3":{a:82e4,b:-1},"4":{a:12e5,b:-1},"5":{a:195e4,b:19e5},"6":{a:39e5,b:19e5},"7":{a:78e5,b:68e5},"8":{a:16e6,b:135e5},"9":{a:29e6,b:-1},"10":{a:47e6,b:45e6},"11":{a:84e6,b:43e6},"12":{a:185e6,b:165e6}},"/items/holy_gauntlets":{"0":{a:3e5,b:2e5},"1":{a:56e4,b:-1},"2":{a:56e4,b:-1},"3":{a:46e4,b:-1},"4":{a:88e4,b:-1},"5":{a:15e5,b:3e5},"6":{a:44e5,b:225e4},"10":{a:-1,b:1e6}},"/items/holy_hammer":{"0":{a:52e4,b:5e5},"1":{a:64e4,b:225e3},"2":{a:74e4,b:225e3},"3":{a:78e4,b:245e3},"4":{a:14e5,b:255e3},"5":{a:2e6,b:19e5},"6":{a:42e5,b:2e6},"7":{a:8e6,b:66e5},"8":{a:15e6,b:13e6},"9":{a:275e5,b:-1},"10":{a:49e6,b:46e6},"12":{a:1e8,b:-1}},"/items/holy_hatchet":{"0":{a:52e4,b:5e5},"1":{a:54e4,b:2e5},"2":{a:76e4,b:265e3},"3":{a:86e4,b:34e4},"5":{a:19e5,b:185e4},"6":{a:47e5,b:285e4},"7":{a:78e5,b:72e5},"8":{a:15e6,b:135e5},"9":{a:-1,b:2e7},"10":{a:48e6,b:47e6}},"/items/holy_helmet":{"0":{a:43e4,b:42e4},"2":{a:43e4,b:-1},"3":{a:47e4,b:-1},"4":{a:6e5,b:-1},"5":{a:54e4,b:-1},"6":{a:42e5,b:42e4}},"/items/holy_mace":{"0":{a:86e4,b:72e4},"1":{a:78e4,b:3e5},"2":{a:-1,b:23e4},"3":{a:68e4,b:-1},"4":{a:9e5,b:-1},"5":{a:125e4,b:-1},"6":{a:2e6,b:2e5}},"/items/holy_milk":{"0":{a:460,b:450}},"/items/holy_needle":{"0":{a:5e5,b:46e4},"1":{a:62e4,b:-1},"3":{a:105e4,b:72e4},"4":{a:125e4,b:-1},"5":{a:2e6,b:18e5},"6":{a:42e5,b:-1},"7":{a:76e5,b:6e6},"8":{a:145e5,b:-1},"9":{a:275e5,b:225e5},"10":{a:44e6,b:4e7},"12":{a:1e8,b:-1}},"/items/holy_plate_body":{"0":{a:66e4,b:64e4},"1":{a:84e4,b:-1},"2":{a:8e5,b:-1},"3":{a:82e4,b:32e4},"4":{a:86e4,b:-1},"5":{a:15e5,b:6e5},"6":{a:45e5,b:45e4}},"/items/holy_plate_legs":{"0":{a:58e4,b:56e4},"1":{a:44e4,b:-1},"2":{a:64e4,b:-1},"3":{a:52e4,b:295e3},"4":{a:1e6,b:18e4},"5":{a:155e4,b:35e4},"6":{a:47e5,b:47e4}},"/items/holy_pot":{"0":{a:52e4,b:49e4},"1":{a:58e4,b:-1},"3":{a:94e4,b:28e4},"4":{a:135e4,b:27e4},"5":{a:2e6,b:195e4},"6":{a:45e5,b:3e6},"7":{a:82e5,b:62e5},"8":{a:165e5,b:13e6},"9":{a:-1,b:2e7},"10":{a:48e6,b:46e6},"11":{a:96e6,b:31e6}},"/items/holy_shears":{"0":{a:54e4,b:52e4},"1":{a:56e4,b:23e4},"2":{a:88e4,b:23e4},"3":{a:125e4,b:25e4},"4":{a:145e4,b:-1},"5":{a:2e6,b:195e4},"6":{a:48e5,b:3e6},"7":{a:78e5,b:68e5},"8":{a:15e6,b:135e5},"9":{a:27e6,b:-1},"10":{a:52e6,b:48e6},"12":{a:-1,b:9e7}},"/items/holy_spatula":{"0":{a:54e4,b:52e4},"1":{a:56e4,b:155e3},"2":{a:68e4,b:275e3},"3":{a:84e4,b:215e3},"5":{a:2e6,b:19e5},"6":{a:44e5,b:3e6},"7":{a:84e5,b:72e5},"8":{a:15e6,b:13e6},"9":{a:38e6,b:62e3},"10":{a:47e6,b:43e6}},"/items/holy_spear":{"0":{a:72e4,b:7e5},"1":{a:7e5,b:-1},"2":{a:76e4,b:-1},"3":{a:74e4,b:33e4},"4":{a:11e5,b:-1},"5":{a:145e4,b:92e4},"6":{a:5e6,b:5e5},"10":{a:-1,b:2e7}},"/items/holy_sword":{"0":{a:54e4,b:46e4},"1":{a:56e4,b:-1},"2":{a:98e4,b:44e4},"3":{a:7e5,b:-1},"4":{a:165e4,b:41e4},"5":{a:145e4,b:56e4},"6":{a:42e5,b:56e4},"7":{a:-1,b:1e6},"10":{a:-1,b:7e5}},"/items/ice_spear":{"0":{a:33e3,b:32e3}},"/items/icy_cloth":{"0":{a:58e3,b:56e3}},"/items/icy_robe_bottoms":{"0":{a:21e4,b:19e4},"1":{a:2e5,b:11e4},"2":{a:-1,b:11e4},"4":{a:35e4,b:-1},"5":{a:46e4,b:-1},"6":{a:49e4,b:-1},"7":{a:92e4,b:1e5},"8":{a:14e5,b:-1},"10":{a:4e6,b:165e4}},"/items/icy_robe_top":{"0":{a:265e3,b:255e3},"1":{a:64e5,b:1e5},"3":{a:3e5,b:1e5},"4":{a:35e4,b:-1},"5":{a:38e4,b:295e3},"6":{a:74e4,b:33e4},"7":{a:115e4,b:37e4},"8":{a:19e5,b:-1},"10":{a:5e6,b:23e5}},"/items/impale":{"0":{a:33e3,b:32e3}},"/items/infernal_battlestaff":{"0":{a:11e6,b:105e5},"4":{a:115e5,b:-1},"5":{a:11e6,b:105e5},"6":{a:12e6,b:1e7},"7":{a:13e6,b:115e5},"8":{a:17e6,b:12e6},"10":{a:39e6,b:36e6},"12":{a:17e7,b:-1}},"/items/infernal_ember":{"0":{a:54e4,b:52e4}},"/items/insanity":{"0":{a:84e4,b:82e4}},"/items/intelligence_coffee":{"0":{a:740,b:700}},"/items/invincible":{"0":{a:82e4,b:8e5}},"/items/jackalope_antler":{"0":{a:21e5,b:205e4}},"/items/jackalope_staff":{"0":{a:4e7,b:34e6},"5":{a:4e7,b:34e6},"6":{a:42e6,b:35e6},"7":{a:52e6,b:44e6},"10":{a:12e7,b:88e6}},"/items/jade":{"0":{a:35e3,b:34e3}},"/items/jungle_essence":{"0":{a:27,b:26}},"/items/knights_aegis":{"0":{a:98e6,b:96e6},"1":{a:-1,b:8e7},"3":{a:-1,b:8e7},"5":{a:1e8,b:96e6},"6":{a:-1,b:9e7},"7":{a:125e6,b:12e7},"8":{a:155e6,b:135e6},"9":{a:-1,b:155e6},"10":{a:36e7,b:34e7},"11":{a:-1,b:4e8},"12":{a:125e7,b:1e7},"20":{a:-1,b:6e6}},"/items/knights_aegis_refined":{"10":{a:68e7,b:7e7},"14":{a:-1,b:4e6}},"/items/knights_ingot":{"0":{a:78e5,b:76e5}},"/items/kraken_chaps":{"0":{a:78e6,b:74e6},"1":{a:-1,b:68e6},"2":{a:14e7,b:7e7},"3":{a:-1,b:68e6},"4":{a:-1,b:66e6},"5":{a:82e6,b:68e6},"7":{a:11e7,b:1e8},"8":{a:15e7,b:125e6},"9":{a:-1,b:14e7},"10":{a:37e7,b:36e7},"11":{a:-1,b:42e7},"12":{a:-1,b:115e7}},"/items/kraken_chaps_refined":{"10":{a:-1,b:5e8},"12":{a:-1,b:16e8},"15":{a:-1,b:5e8}},"/items/kraken_fang":{"0":{a:11e6,b:105e5}},"/items/kraken_leather":{"0":{a:84e5,b:82e5}},"/items/kraken_tunic":{"0":{a:98e6,b:94e6},"1":{a:-1,b:76e6},"2":{a:165e6,b:84e6},"3":{a:-1,b:84e6},"4":{a:-1,b:84e6},"5":{a:98e6,b:88e6},"6":{a:11e7,b:92e6},"7":{a:125e6,b:115e6},"8":{a:17e7,b:15e7},"9":{a:3e8,b:175e6},"10":{a:4e8,b:39e7},"11":{a:68e7,b:56e7},"12":{a:135e7,b:13e8}},"/items/kraken_tunic_refined":{"10":{a:72e7,b:66e7},"12":{a:-1,b:45e5},"15":{a:-1,b:52e5}},"/items/large_pouch":{"0":{a:78e4,b:74e4},"1":{a:1e6,b:-1},"2":{a:13e5,b:54e4},"3":{a:14e5,b:-1},"4":{a:165e4,b:-1},"5":{a:275e4,b:145e4}},"/items/liberica_coffee_bean":{"0":{a:640,b:620}},"/items/life_drain":{"0":{a:52e3,b:49e3}},"/items/linen_boots":{"0":{a:16500,b:10500},"3":{a:88e3,b:-1}},"/items/linen_fabric":{"0":{a:640,b:620}},"/items/linen_gloves":{"0":{a:17500,b:13e3},"1":{a:94e3,b:-1},"2":{a:11e4,b:-1},"5":{a:44e4,b:-1}},"/items/linen_hat":{"0":{a:18500,b:16500},"1":{a:86e3,b:-1},"2":{a:16e5,b:-1},"5":{a:35e4,b:-1}},"/items/linen_robe_bottoms":{"0":{a:24e3,b:22e3},"6":{a:72e5,b:-1}},"/items/linen_robe_top":{"0":{a:28e3,b:23e3},"2":{a:115e3,b:-1},"3":{a:13e5,b:-1},"5":{a:7e5,b:-1},"10":{a:-1,b:1e6}},"/items/living_granite":{"0":{a:58e4,b:56e4}},"/items/log":{"0":{a:28,b:26}},"/items/lucky_coffee":{"0":{a:2500,b:2450}},"/items/lumber":{"0":{a:320,b:300}},"/items/lumberjacks_bottoms":{"0":{a:235e6,b:-1},"5":{a:23e7,b:19e7},"7":{a:24e7,b:2e8},"8":{a:27e7,b:24e7},"10":{a:45e7,b:4e8}},"/items/lumberjacks_top":{"5":{a:19e7,b:18e7},"6":{a:195e6,b:-1},"7":{a:2e8,b:175e6},"8":{a:24e7,b:-1},"10":{a:41e7,b:37e7}},"/items/luna_robe_bottoms":{"0":{a:22e5,b:19e5},"1":{a:215e4,b:-1},"2":{a:22e5,b:-1},"4":{a:31e5,b:-1},"5":{a:36e5,b:26e5},"6":{a:4e6,b:-1},"7":{a:62e5,b:5e6},"8":{a:105e5,b:8e6},"9":{a:195e5,b:115e5},"10":{a:27e6,b:26e6},"12":{a:98e6,b:-1}},"/items/luna_robe_top":{"0":{a:26e5,b:23e5},"2":{a:3e6,b:-1},"3":{a:295e4,b:-1},"4":{a:34e5,b:-1},"5":{a:49e5,b:34e5},"6":{a:54e5,b:-1},"7":{a:7e6,b:-1},"8":{a:11e6,b:78e5},"9":{a:18e6,b:52e4},"10":{a:29e6,b:285e5},"11":{a:-1,b:43e6},"12":{a:105e6,b:86e6}},"/items/luna_wing":{"0":{a:285e3,b:28e4}},"/items/maelstrom_plate_body":{"0":{a:105e6,b:98e6},"1":{a:-1,b:86e6},"2":{a:-1,b:86e6},"3":{a:-1,b:86e6},"4":{a:-1,b:88e6},"5":{a:125e6,b:1e8},"6":{a:-1,b:86e6},"7":{a:125e6,b:12e7},"8":{a:175e6,b:145e6},"9":{a:-1,b:18e7},"10":{a:42e7,b:4e8},"12":{a:135e7,b:12e8}},"/items/maelstrom_plate_body_refined":{"1":{a:-1,b:48e5},"10":{a:78e7,b:7e8},"12":{a:-1,b:125e7},"14":{a:-1,b:45e5}},"/items/maelstrom_plate_legs":{"0":{a:84e6,b:76e6},"1":{a:-1,b:72e6},"2":{a:-1,b:72e6},"3":{a:-1,b:72e6},"4":{a:-1,b:7e7},"5":{a:92e6,b:78e6},"6":{a:98e6,b:74e6},"7":{a:11e7,b:105e6},"8":{a:15e7,b:13e7},"9":{a:-1,b:17e7},"10":{a:38e7,b:37e7},"12":{a:12e8,b:11e8},"13":{a:24e8,b:-1}},"/items/maelstrom_plate_legs_refined":{"10":{a:76e7,b:7e8},"12":{a:-1,b:4e6},"14":{a:-1,b:4e6}},"/items/maelstrom_plating":{"0":{a:84e5,b:82e5}},"/items/magic_coffee":{"0":{a:1200,b:1150}},"/items/magicians_cloth":{"0":{a:68e5,b:66e5}},"/items/magicians_hat":{"0":{a:74e6,b:72e6},"1":{a:-1,b:58e6},"2":{a:-1,b:58e6},"3":{a:-1,b:56e6},"4":{a:-1,b:58e6},"5":{a:76e6,b:64e6},"6":{a:-1,b:68e6},"7":{a:9e7,b:86e6},"8":{a:12e7,b:1e8},"9":{a:19e7,b:17e7},"10":{a:3e8,b:295e6},"11":{a:-1,b:48e7},"12":{a:11e8,b:88e7},"14":{a:42e8,b:35e5}},"/items/magicians_hat_refined":{"10":{a:6e8,b:56e7},"12":{a:135e7,b:125e7}},"/items/magnet":{"0":{a:27e4,b:265e3}},"/items/magnetic_gloves":{"0":{a:26e5,b:22e5},"1":{a:29e5,b:-1},"3":{a:-1,b:105e4},"5":{a:31e5,b:28e5},"6":{a:45e5,b:-1},"7":{a:7e6,b:62e5},"8":{a:135e5,b:84e5},"9":{a:205e5,b:-1},"10":{a:32e6,b:275e5},"12":{a:115e6,b:-1}},"/items/magnifying_glass":{"0":{a:18e5,b:175e4}},"/items/maim":{"0":{a:96e3,b:94e3}},"/items/mana_spring":{"0":{a:74e3,b:72e3}},"/items/manticore_shield":{"0":{a:21e6,b:205e5},"2":{a:-1,b:11e6},"3":{a:-1,b:105e5},"5":{a:23e6,b:21e6},"6":{a:275e5,b:2e7},"7":{a:31e6,b:295e5},"8":{a:58e6,b:3e7},"9":{a:88e6,b:5e7},"10":{a:13e7,b:12e7},"12":{a:44e7,b:41e7}},"/items/manticore_sting":{"0":{a:23e5,b:225e4}},"/items/marine_chaps":{"0":{a:44e4,b:4e5},"2":{a:68e4,b:-1},"8":{a:2e6,b:2e5}},"/items/marine_scale":{"0":{a:64e3,b:62e3}},"/items/marine_tunic":{"0":{a:52e4,b:5e5},"3":{a:62e4,b:-1},"4":{a:76e4,b:-1}},"/items/marksman_bracers":{"0":{a:98e6,b:94e6},"5":{a:1e8,b:82e6},"6":{a:-1,b:94e6},"7":{a:115e6,b:11e7},"8":{a:15e7,b:13e7},"9":{a:-1,b:16e7},"10":{a:32e7,b:31e7},"12":{a:-1,b:1e9}},"/items/marksman_bracers_refined":{"10":{a:68e7,b:64e7},"11":{a:-1,b:31e5},"12":{a:-1,b:125e7},"15":{a:-1,b:52e5}},"/items/marksman_brooch":{"0":{a:84e5,b:82e5}},"/items/marsberry":{"0":{a:135,b:125}},"/items/marsberry_cake":{"0":{a:1350,b:1300}},"/items/marsberry_donut":{"0":{a:1e3,b:980}},"/items/master_alchemy_charm":{"5":{a:-1,b:1e9}},"/items/master_attack_charm":{"0":{a:255e6,b:165e6},"5":{a:45e7,b:42e7},"6":{a:-1,b:86e6}},"/items/master_brewing_charm":{},"/items/master_cheesesmithing_charm":{"0":{a:1e9,b:-1}},"/items/master_cooking_charm":{},"/items/master_crafting_charm":{"0":{a:-1,b:105e6}},"/items/master_defense_charm":{"5":{a:45e7,b:-1}},"/items/master_enhancing_charm":{"0":{a:17e8,b:-1}},"/items/master_foraging_charm":{"5":{a:-1,b:46e7},"6":{a:-1,b:52e7},"7":{a:-1,b:6e6}},"/items/master_intelligence_charm":{"5":{a:58e7,b:-1}},"/items/master_magic_charm":{"5":{a:58e7,b:39e7},"6":{a:74e7,b:56e7}},"/items/master_melee_charm":{"0":{a:-1,b:13e7},"5":{a:45e7,b:4e8}},"/items/master_milking_charm":{"0":{a:-1,b:155e6},"10":{a:-1,b:2e9}},"/items/master_ranged_charm":{"0":{a:29e7,b:165e6},"1":{a:32e7,b:-1},"5":{a:43e7,b:4e8}},"/items/master_stamina_charm":{"5":{a:6e8,b:4e8}},"/items/master_tailoring_charm":{"0":{a:-1,b:12e6}},"/items/master_woodcutting_charm":{"0":{a:-1,b:62e5},"1":{a:-1,b:1e7}},"/items/medium_pouch":{"0":{a:155e3,b:14e4},"2":{a:34e4,b:-1},"3":{a:58e4,b:-1}},"/items/melee_coffee":{"0":{a:1150,b:1100}},"/items/milk":{"0":{a:96,b:92}},"/items/milking_essence":{"0":{a:265,b:260}},"/items/milking_tea":{"0":{a:540,b:440}},"/items/minor_heal":{"0":{a:2900,b:2750}},"/items/mirror_of_protection":{"0":{a:11e6,b:105e5}},"/items/mooberry":{"0":{a:180,b:175}},"/items/mooberry_cake":{"0":{a:1350,b:1200}},"/items/mooberry_donut":{"0":{a:880,b:860}},"/items/moolong_tea_leaf":{"0":{a:34,b:32}},"/items/moonstone":{"0":{a:52e3,b:5e4}},"/items/mystic_aura":{"0":{a:9e5,b:88e4}},"/items/natures_veil":{"0":{a:54e4,b:52e4}},"/items/necklace_of_efficiency":{"0":{a:12e6,b:11e6},"1":{a:2e7,b:-1},"3":{a:-1,b:21e6},"6":{a:-1,b:1e8}},"/items/necklace_of_speed":{"0":{a:145e5,b:135e5},"1":{a:17e6,b:135e5},"2":{a:23e6,b:175e5},"3":{a:33e6,b:31e6},"4":{a:64e6,b:52e6},"5":{a:115e6,b:11e7},"6":{a:2e8,b:15e7},"7":{a:-1,b:175e6}},"/items/necklace_of_wisdom":{"0":{a:11e6,b:1e7},"1":{a:14e6,b:1e7},"2":{a:19e6,b:14e6},"3":{a:31e6,b:275e5},"4":{a:58e6,b:5e7},"5":{a:105e6,b:98e6},"6":{a:-1,b:92e6},"7":{a:-1,b:17e7},"9":{a:54e7,b:3e8},"10":{a:-1,b:34e7}},"/items/orange":{"0":{a:18,b:17}},"/items/orange_gummy":{"0":{a:86,b:82}},"/items/orange_key_fragment":{"0":{a:105e4,b:1e6}},"/items/orange_yogurt":{"0":{a:560,b:540}},"/items/panda_fluff":{"0":{a:62e3,b:6e4}},"/items/panda_gloves":{"0":{a:47e4,b:36e4},"2":{a:43e4,b:-1},"3":{a:45e4,b:-1},"4":{a:48e4,b:-1},"5":{a:58e4,b:4e5},"6":{a:12e5,b:15e4},"7":{a:165e4,b:115e4},"8":{a:4e6,b:45e4},"9":{a:-1,b:36e4},"10":{a:56e5,b:42e5},"11":{a:17e6,b:-1},"12":{a:35e6,b:-1}},"/items/peach":{"0":{a:195,b:190}},"/items/peach_gummy":{"0":{a:740,b:700}},"/items/peach_yogurt":{"0":{a:1050,b:1e3}},"/items/pearl":{"0":{a:14e3,b:13500}},"/items/penetrating_shot":{"0":{a:3e5,b:295e3}},"/items/penetrating_strike":{"0":{a:19e4,b:185e3}},"/items/pestilent_shot":{"0":{a:49e3,b:47e3}},"/items/philosophers_earrings":{"0":{a:66e7,b:6e8},"1":{a:-1,b:56e7},"2":{a:-1,b:6e8},"3":{a:76e7,b:72e7},"4":{a:-1,b:68e7},"5":{a:98e7,b:96e7},"6":{a:-1,b:11e8},"7":{a:16e8,b:155e7},"8":{a:215e7,b:16e8},"10":{a:-1,b:38e8}},"/items/philosophers_necklace":{"0":{a:68e7,b:64e7},"1":{a:-1,b:58e7},"2":{a:-1,b:62e7},"3":{a:82e7,b:78e7},"4":{a:-1,b:78e7},"5":{a:11e8,b:105e7},"6":{a:-1,b:115e7},"7":{a:185e7,b:18e8},"8":{a:-1,b:19e8},"10":{a:6e9,b:58e8},"20":{a:-1,b:12e6}},"/items/philosophers_ring":{"0":{a:66e7,b:6e8},"1":{a:-1,b:54e7},"2":{a:-1,b:58e7},"3":{a:76e7,b:72e7},"4":{a:-1,b:78e7},"5":{a:98e7,b:96e7},"6":{a:125e7,b:11e8},"7":{a:16e8,b:155e7},"8":{a:215e7,b:18e8},"10":{a:-1,b:38e8}},"/items/philosophers_stone":{"0":{a:6e8,b:58e7}},"/items/pincer_gloves":{"0":{a:27e3,b:24500},"1":{a:4e4,b:-1},"2":{a:44e3,b:-1},"3":{a:5e4,b:-1},"4":{a:86e3,b:-1},"5":{a:125e3,b:-1},"6":{a:34e4,b:-1},"8":{a:5e5,b:-1},"10":{a:37e5,b:13e5},"11":{a:58e5,b:-1},"12":{a:155e5,b:10500}},"/items/pirate_chest_key":{"0":{a:58e5,b:56e5}},"/items/pirate_entry_key":{"0":{a:64e4,b:62e4}},"/items/pirate_essence":{"0":{a:1950,b:1900}},"/items/pirate_refinement_shard":{"0":{a:36e5,b:35e5}},"/items/plum":{"0":{a:52,b:50}},"/items/plum_gummy":{"0":{a:390,b:370}},"/items/plum_yogurt":{"0":{a:740,b:700}},"/items/poke":{"0":{a:2950,b:2900}},"/items/polar_bear_fluff":{"0":{a:12e4,b:115e3}},"/items/polar_bear_shoes":{"0":{a:82e4,b:76e4},"1":{a:98e4,b:-1},"3":{a:125e4,b:-1},"5":{a:-1,b:12e5},"6":{a:-1,b:14e5},"7":{a:3e6,b:245e4},"8":{a:5e6,b:-1},"9":{a:88e5,b:76e5},"10":{a:135e5,b:13e6},"11":{a:295e5,b:-1},"12":{a:46e6,b:43e6},"13":{a:92e6,b:8e7},"14":{a:2e8,b:18e7},"15":{a:44e7,b:-1}},"/items/precision":{"0":{a:56e3,b:54e3}},"/items/prime_catalyst":{"0":{a:17e4,b:16e4}},"/items/processing_tea":{"0":{a:2450,b:2400}},"/items/provoke":{"0":{a:68e3,b:66e3}},"/items/puncture":{"0":{a:96e3,b:94e3}},"/items/purple_key_fragment":{"0":{a:74e4,b:72e4}},"/items/purpleheart_bow":{"0":{a:165e3,b:135e3},"5":{a:56e5,b:-1}},"/items/purpleheart_crossbow":{"0":{a:15e4,b:105e3},"1":{a:155e3,b:-1},"2":{a:145e3,b:-1},"3":{a:225e3,b:-1},"4":{a:14e6,b:-1},"5":{a:2e6,b:-1},"7":{a:86e5,b:-1}},"/items/purpleheart_fire_staff":{"0":{a:13e4,b:115e3},"2":{a:15e4,b:-1},"3":{a:2e5,b:-1},"5":{a:1e6,b:-1},"7":{a:12e5,b:-1}},"/items/purpleheart_log":{"0":{a:265,b:260}},"/items/purpleheart_lumber":{"0":{a:1350,b:1300}},"/items/purpleheart_nature_staff":{"0":{a:145e3,b:12e4},"1":{a:35e4,b:-1},"2":{a:26e4,b:-1},"5":{a:49e4,b:-1}},"/items/purpleheart_shield":{"0":{a:125e3,b:88e3},"1":{a:12e4,b:-1},"3":{a:19e4,b:-1},"4":{a:44e4,b:-1},"5":{a:39e4,b:-1},"6":{a:62e4,b:-1}},"/items/purpleheart_water_staff":{"0":{a:13e4,b:115e3},"1":{a:2e5,b:-1},"2":{a:8e6,b:-1},"4":{a:22e5,b:-1},"5":{a:49e5,b:-1},"8":{a:7e6,b:-1}},"/items/quick_aid":{"0":{a:12e4,b:115e3}},"/items/quick_shot":{"0":{a:2800,b:2750}},"/items/radiant_boots":{"0":{a:18e4,b:175e3},"2":{a:245e3,b:-1},"3":{a:25e4,b:-1},"4":{a:56e4,b:-1},"5":{a:135e4,b:7e5},"6":{a:28e5,b:28e4},"10":{a:-1,b:2e7}},"/items/radiant_fabric":{"0":{a:2750,b:2700}},"/items/radiant_fiber":{"0":{a:580,b:560}},"/items/radiant_gloves":{"0":{a:185e3,b:175e3},"1":{a:18e4,b:-1},"2":{a:2e5,b:-1},"3":{a:3e5,b:-1},"5":{a:92e4,b:56e4},"6":{a:295e4,b:295e3}},"/items/radiant_hat":{"0":{a:295e3,b:29e4},"1":{a:37e4,b:215e3},"3":{a:41e4,b:-1},"5":{a:62e4,b:5e5},"6":{a:28e5,b:1e6},"7":{a:-1,b:3e6},"10":{a:3e7,b:255e5}},"/items/radiant_robe_bottoms":{"0":{a:52e4,b:5e5},"1":{a:66e4,b:-1},"2":{a:62e4,b:-1},"3":{a:62e4,b:-1},"4":{a:98e4,b:-1},"5":{a:22e5,b:-1},"7":{a:88e5,b:-1}},"/items/radiant_robe_top":{"0":{a:58e4,b:56e4},"1":{a:62e4,b:-1},"2":{a:7e5,b:-1},"3":{a:78e4,b:-1},"4":{a:9e5,b:-1},"5":{a:11e5,b:82e4},"6":{a:43e5,b:43e4}},"/items/rain_of_arrows":{"0":{a:195e3,b:19e4}},"/items/rainbow_alembic":{"0":{a:3e5,b:26e4},"1":{a:52e4,b:-1},"2":{a:42e4,b:-1},"3":{a:7e5,b:1e5},"4":{a:86e4,b:-1},"5":{a:94e4,b:-1},"6":{a:-1,b:54e4}},"/items/rainbow_boots":{"0":{a:195e3,b:19e4},"1":{a:225e3,b:-1},"4":{a:39e4,b:-1},"5":{a:36e4,b:-1}},"/items/rainbow_brush":{"0":{a:25e4,b:21e4},"1":{a:45e4,b:-1},"2":{a:46e4,b:-1},"3":{a:6e5,b:1e5},"4":{a:92e4,b:-1},"5":{a:82e4,b:27e4},"6":{a:52e5,b:11e5},"7":{a:1e7,b:-1}},"/items/rainbow_buckler":{"0":{a:255e3,b:215e3},"1":{a:33e4,b:-1},"2":{a:29e4,b:-1},"4":{a:62e4,b:-1},"5":{a:94e4,b:-1},"6":{a:115e4,b:-1}},"/items/rainbow_bulwark":{"0":{a:35e4,b:34e4},"1":{a:31e4,b:-1},"2":{a:58e4,b:-1},"3":{a:54e4,b:-1},"4":{a:1e6,b:-1},"5":{a:14e5,b:-1}},"/items/rainbow_cheese":{"0":{a:1800,b:1700}},"/items/rainbow_chisel":{"0":{a:24e4,b:225e3},"1":{a:-1,b:13e4},"2":{a:255e3,b:135e3},"3":{a:-1,b:1e5},"4":{a:7e5,b:-1},"5":{a:115e4,b:-1},"6":{a:2e6,b:125e4}},"/items/rainbow_enhancer":{"0":{a:31e4,b:24e4},"1":{a:49e4,b:-1},"2":{a:52e4,b:-1},"3":{a:-1,b:1e5},"4":{a:84e4,b:-1},"5":{a:96e4,b:32e4},"6":{a:175e4,b:13e5},"7":{a:5e6,b:-1}},"/items/rainbow_gauntlets":{"0":{a:195e3,b:145e3},"1":{a:23e4,b:-1},"2":{a:2e5,b:-1},"3":{a:35e4,b:-1},"5":{a:92e4,b:-1},"6":{a:25e5,b:-1}},"/items/rainbow_hammer":{"0":{a:265e3,b:245e3},"1":{a:39e4,b:-1},"2":{a:35e4,b:-1},"3":{a:76e4,b:1e5},"5":{a:12e5,b:8e5},"6":{a:54e5,b:115e4},"7":{a:-1,b:13e5}},"/items/rainbow_hatchet":{"0":{a:295e3,b:26e4},"1":{a:32e4,b:-1},"2":{a:45e4,b:-1},"3":{a:68e4,b:1e5},"4":{a:1e6,b:-1},"5":{a:15e5,b:8e5},"6":{a:6e6,b:13e5},"7":{a:11e6,b:-1}},"/items/rainbow_helmet":{"0":{a:235e3,b:22e4},"1":{a:25e4,b:-1},"3":{a:37e4,b:-1},"4":{a:44e4,b:-1},"5":{a:7e5,b:-1}},"/items/rainbow_mace":{"0":{a:46e4,b:38e4},"1":{a:35e4,b:-1},"3":{a:47e4,b:-1},"4":{a:54e4,b:-1}},"/items/rainbow_milk":{"0":{a:370,b:360}},"/items/rainbow_needle":{"0":{a:25e4,b:24e4},"3":{a:-1,b:1e5},"4":{a:5e5,b:-1},"5":{a:115e4,b:-1},"6":{a:-1,b:14e5}},"/items/rainbow_plate_body":{"0":{a:34e4,b:33e4},"1":{a:39e4,b:-1},"2":{a:52e4,b:-1},"3":{a:6e5,b:-1},"4":{a:98e4,b:-1},"5":{a:175e4,b:29500}},"/items/rainbow_plate_legs":{"0":{a:295e3,b:17e4},"3":{a:56e4,b:-1},"4":{a:45e5,b:-1},"5":{a:45e5,b:-1},"6":{a:68e5,b:-1}},"/items/rainbow_pot":{"0":{a:285e3,b:27e4},"1":{a:32e4,b:-1},"2":{a:42e4,b:-1},"3":{a:6e5,b:35e4},"5":{a:14e5,b:78e4},"6":{a:54e5,b:13e5},"7":{a:5e6,b:-1},"8":{a:6e6,b:-1}},"/items/rainbow_shears":{"0":{a:3e5,b:29e4},"1":{a:4e5,b:-1},"2":{a:46e4,b:-1},"3":{a:9e5,b:1e5},"4":{a:135e4,b:-1},"5":{a:11e5,b:-1},"6":{a:52e5,b:145e4},"7":{a:175e5,b:125e4},"8":{a:13e6,b:-1}},"/items/rainbow_spatula":{"0":{a:43e4,b:28e4},"1":{a:38e4,b:-1},"2":{a:39e4,b:-1},"3":{a:56e4,b:1e5},"4":{a:86e4,b:-1},"5":{a:115e4,b:-1},"6":{a:48e5,b:64e4}},"/items/rainbow_spear":{"0":{a:39e4,b:38e4},"1":{a:7e5,b:-1},"2":{a:7e5,b:-1},"3":{a:105e4,b:-1},"5":{a:-1,b:74e4}},"/items/rainbow_sword":{"0":{a:42e4,b:39e4},"2":{a:38e4,b:-1},"3":{a:43e4,b:-1},"6":{a:64e4,b:-1},"7":{a:82e4,b:-1}},"/items/ranged_coffee":{"0":{a:1200,b:1100}},"/items/ranger_necklace":{"0":{a:12e6,b:115e5},"1":{a:15e6,b:8e6},"2":{a:17e6,b:1e7},"3":{a:245e5,b:16e6},"7":{a:-1,b:12e7}},"/items/red_culinary_hat":{"0":{a:54e5,b:52e5},"2":{a:82e5,b:86e4},"4":{a:-1,b:155e4},"5":{a:9e6,b:68e5},"6":{a:105e5,b:-1},"7":{a:13e6,b:88e5},"8":{a:2e7,b:18e6},"9":{a:-1,b:88e5},"10":{a:5e7,b:48e6},"12":{a:19e7,b:15e7},"15":{a:15e8,b:1e8}},"/items/red_panda_fluff":{"0":{a:54e4,b:52e4}},"/items/red_tea_leaf":{"0":{a:50,b:48}},"/items/redwood_bow":{"0":{a:56e4,b:54e4},"3":{a:12e5,b:-1},"5":{a:68e4,b:-1},"6":{a:27e5,b:-1}},"/items/redwood_crossbow":{"0":{a:46e4,b:41e4},"1":{a:4e5,b:-1},"2":{a:5e5,b:-1},"3":{a:56e4,b:-1},"5":{a:66e4,b:-1},"6":{a:25e5,b:-1},"7":{a:64e5,b:3e6},"8":{a:14e6,b:-1},"10":{a:205e5,b:-1}},"/items/redwood_fire_staff":{"0":{a:4e5,b:39e4},"2":{a:9e5,b:-1},"3":{a:9e5,b:-1},"4":{a:12e5,b:-1},"5":{a:14e5,b:-1},"8":{a:6e6,b:-1}},"/items/redwood_log":{"0":{a:380,b:370}},"/items/redwood_lumber":{"0":{a:1850,b:1800}},"/items/redwood_nature_staff":{"0":{a:44e4,b:4e5},"1":{a:52e4,b:-1},"2":{a:76e4,b:-1},"3":{a:8e5,b:-1},"5":{a:145e4,b:-1}},"/items/redwood_shield":{"0":{a:265e3,b:25e4},"1":{a:27e4,b:-1},"2":{a:27e4,b:-1},"3":{a:46e4,b:-1},"5":{a:8e5,b:-1},"6":{a:92e4,b:-1},"10":{a:21e6,b:-1}},"/items/redwood_water_staff":{"0":{a:54e4,b:39e4},"1":{a:54e4,b:-1},"2":{a:52e4,b:-1},"3":{a:86e4,b:-1},"4":{a:6e5,b:-1},"5":{a:11e5,b:-1},"7":{a:2e6,b:-1},"10":{a:1e7,b:-1}},"/items/regal_jewel":{"0":{a:105e5,b:1e7}},"/items/regal_sword":{"0":{a:22e7,b:18e7},"4":{a:22e7,b:-1},"5":{a:225e6,b:215e6},"7":{a:265e6,b:245e6},"8":{a:33e7,b:29e7},"9":{a:44e7,b:-1},"10":{a:6e8,b:56e7},"12":{a:175e7,b:-1}},"/items/regal_sword_refined":{"0":{a:-1,b:52e5},"1":{a:-1,b:56e5},"2":{a:-1,b:62e5},"3":{a:-1,b:62e5},"10":{a:165e7,b:56e5},"12":{a:275e7,b:58e5}},"/items/rejuvenate":{"0":{a:12e4,b:115e3}},"/items/reptile_boots":{"0":{a:18e3,b:11e3},"1":{a:29500,b:-1}},"/items/reptile_bracers":{"0":{a:14500,b:1e4},"1":{a:6e4,b:-1},"2":{a:86e3,b:-1},"3":{a:96e3,b:-1}},"/items/reptile_chaps":{"0":{a:23e3,b:21e3},"2":{a:25e4,b:-1}},"/items/reptile_hide":{"0":{a:24,b:23}},"/items/reptile_hood":{"0":{a:16e3,b:12e3}},"/items/reptile_leather":{"0":{a:580,b:560}},"/items/reptile_tunic":{"0":{a:25500,b:23e3},"1":{a:8e4,b:-1},"2":{a:17e4,b:-1}},"/items/retribution":{"0":{a:52e3,b:5e4}},"/items/revenant_anima":{"0":{a:92e4,b:9e5}},"/items/revenant_chaps":{"0":{a:72e5,b:66e5},"5":{a:72e5,b:66e5},"6":{a:1e7,b:-1},"7":{a:155e5,b:14e6},"8":{a:225e5,b:15e6},"9":{a:5e7,b:-1},"10":{a:7e7,b:43e6}},"/items/revenant_tunic":{"0":{a:86e5,b:82e5},"3":{a:-1,b:32e5},"5":{a:96e5,b:92e5},"6":{a:12e6,b:11e6},"7":{a:16e6,b:14e6},"8":{a:235e5,b:15e6},"9":{a:45e6,b:-1},"10":{a:66e6,b:37e6}},"/items/revive":{"0":{a:82e4,b:8e5}},"/items/ring_of_armor":{"0":{a:62e5,b:56e5},"1":{a:64e5,b:-1},"2":{a:98e5,b:-1},"3":{a:11e6,b:-1},"4":{a:3e7,b:-1}},"/items/ring_of_critical_strike":{"0":{a:96e5,b:82e5},"1":{a:-1,b:78e5},"2":{a:-1,b:1e7},"3":{a:205e5,b:18e6},"4":{a:4e7,b:32e6},"5":{a:74e6,b:7e7},"6":{a:11e7,b:74e6}},"/items/ring_of_essence_find":{"0":{a:74e5,b:64e5}},"/items/ring_of_gathering":{"0":{a:62e5,b:58e5},"1":{a:11e6,b:-1}},"/items/ring_of_rare_find":{"0":{a:74e5,b:7e6},"1":{a:9e6,b:7e6},"2":{a:-1,b:94e5},"3":{a:2e7,b:17e6},"4":{a:4e7,b:295e5},"5":{a:7e7,b:66e6},"6":{a:14e7,b:-1},"7":{a:-1,b:72e5}},"/items/ring_of_regeneration":{"0":{a:66e5,b:6e6},"1":{a:72e5,b:64e5},"2":{a:12e6,b:84e5},"3":{a:16e6,b:145e5},"4":{a:3e7,b:27e6},"5":{a:66e6,b:6e7},"6":{a:11e7,b:7e7},"7":{a:19e7,b:145e6},"10":{a:9e8,b:-1}},"/items/ring_of_resistance":{"0":{a:58e5,b:56e5},"1":{a:9e6,b:-1},"3":{a:13e6,b:-1},"5":{a:49e6,b:-1}},"/items/rippling_trident":{"0":{a:23e7,b:22e7},"1":{a:-1,b:2e8},"2":{a:-1,b:2e8},"3":{a:-1,b:205e6},"4":{a:-1,b:19e7},"5":{a:3e8,b:22e7},"6":{a:-1,b:22e7},"7":{a:26e7,b:245e6},"8":{a:33e7,b:285e6},"9":{a:-1,b:32e7},"10":{a:62e7,b:58e7},"12":{a:17e8,b:145e7},"14":{a:66e8,b:-1}},"/items/rippling_trident_refined":{"10":{a:17e8,b:125e7},"12":{a:285e7,b:-1},"14":{a:7e9,b:6e9}},"/items/robusta_coffee_bean":{"0":{a:440,b:420}},"/items/rough_boots":{"0":{a:2950,b:2150},"2":{a:16e3,b:-1}},"/items/rough_bracers":{"0":{a:3600,b:2700},"1":{a:14e3,b:-1},"2":{a:18e3,b:-1}},"/items/rough_chaps":{"0":{a:6e3,b:4900},"3":{a:28e3,b:-1}},"/items/rough_hide":{"0":{a:76,b:64}},"/items/rough_hood":{"0":{a:4900,b:3400},"2":{a:2e4,b:-1},"5":{a:-1,b:290},"10":{a:-1,b:290}},"/items/rough_leather":{"0":{a:450,b:440}},"/items/rough_tunic":{"0":{a:7e3,b:5400},"2":{a:38e3,b:-1},"3":{a:76e3,b:-1}},"/items/royal_cloth":{"0":{a:8e6,b:78e5}},"/items/royal_fire_robe_bottoms":{"0":{a:76e6,b:66e6},"5":{a:78e6,b:68e6},"7":{a:96e6,b:9e7},"8":{a:16e7,b:11e7},"9":{a:-1,b:175e6},"10":{a:37e7,b:35e7},"12":{a:125e7,b:115e7}},"/items/royal_fire_robe_bottoms_refined":{"10":{a:7e8,b:8e7}},"/items/royal_fire_robe_top":{"0":{a:88e6,b:82e6},"3":{a:-1,b:8e7},"5":{a:-1,b:84e6},"6":{a:105e6,b:9e7},"7":{a:115e6,b:11e7},"8":{a:165e6,b:14e7},"9":{a:-1,b:19e7},"10":{a:4e8,b:38e7},"12":{a:135e7,b:12e8}},"/items/royal_fire_robe_top_refined":{"10":{a:-1,b:72e7}},"/items/royal_nature_robe_bottoms":{"0":{a:78e6,b:68e6},"5":{a:78e6,b:7e7},"7":{a:96e6,b:92e6},"8":{a:145e6,b:115e6},"10":{a:37e7,b:36e7},"12":{a:-1,b:115e7}},"/items/royal_nature_robe_bottoms_refined":{"10":{a:7e8,b:66e7},"12":{a:-1,b:145e7}},"/items/royal_nature_robe_top":{"0":{a:9e7,b:88e6},"5":{a:94e6,b:88e6},"6":{a:1e8,b:86e6},"7":{a:115e6,b:11e7},"8":{a:16e7,b:135e6},"9":{a:255e6,b:2e8},"10":{a:41e7,b:39e7},"12":{a:13e8,b:11e8}},"/items/royal_nature_robe_top_refined":{"10":{a:76e7,b:68e7},"12":{a:-1,b:155e7}},"/items/royal_water_robe_bottoms":{"0":{a:76e6,b:68e6},"5":{a:7e7,b:64e6},"6":{a:105e6,b:64e6},"7":{a:94e6,b:92e6},"8":{a:14e7,b:11e7},"9":{a:-1,b:155e6},"10":{a:37e7,b:36e7}},"/items/royal_water_robe_bottoms_refined":{},"/items/royal_water_robe_top":{"0":{a:9e7,b:84e6},"5":{a:96e6,b:82e6},"6":{a:105e6,b:84e6},"7":{a:-1,b:11e7},"8":{a:16e7,b:14e7},"9":{a:-1,b:2e8},"10":{a:4e8,b:38e7},"12":{a:14e8,b:-1}},"/items/royal_water_robe_top_refined":{"10":{a:-1,b:7e8},"12":{a:-1,b:16e8}},"/items/scratch":{"0":{a:3300,b:3200}},"/items/shard_of_protection":{"0":{a:6e4,b:58e3}},"/items/shield_bash":{"0":{a:48e3,b:47e3}},"/items/shoebill_feather":{"0":{a:11e4,b:105e3}},"/items/shoebill_shoes":{"0":{a:92e4,b:9e5},"1":{a:11e5,b:11e4},"3":{a:98e4,b:105e3},"4":{a:165e4,b:17e4},"5":{a:135e4,b:12e5},"6":{a:-1,b:14e5},"7":{a:275e4,b:23e5},"8":{a:8e6,b:35e5},"9":{a:86e5,b:86e4},"10":{a:12e6,b:1e7},"11":{a:-1,b:15e6},"12":{a:39e6,b:31e6},"14":{a:15e7,b:13e7},"15":{a:-1,b:49e4}},"/items/sighted_bracers":{"0":{a:18e5,b:17e5},"1":{a:-1,b:105e3},"2":{a:18e5,b:105e3},"3":{a:-1,b:105e3},"4":{a:2e6,b:105e3},"5":{a:175e4,b:1e6},"6":{a:185e4,b:105e3},"7":{a:235e4,b:225e3},"8":{a:26e5,b:225e3},"9":{a:49e5,b:52e4},"10":{a:56e5,b:54e5},"11":{a:14e6,b:8e6},"12":{a:31e6,b:-1}},"/items/silencing_shot":{"0":{a:96e3,b:94e3}},"/items/silk_boots":{"0":{a:76e3,b:5e4},"1":{a:84e3,b:-1},"2":{a:125e3,b:-1},"5":{a:5e5,b:1e5},"6":{a:48e4,b:-1}},"/items/silk_fabric":{"0":{a:1800,b:1750}},"/items/silk_gloves":{"0":{a:68e3,b:66e3},"1":{a:96e3,b:-1},"2":{a:13e4,b:-1},"3":{a:22e4,b:-1},"5":{a:34e4,b:12e4},"6":{a:56e4,b:8e3},"7":{a:2e6,b:-1}},"/items/silk_hat":{"0":{a:1e5,b:8e4},"1":{a:12e4,b:-1},"2":{a:125e3,b:-1},"3":{a:135e3,b:-1},"4":{a:2e5,b:-1},"5":{a:35e4,b:1e5}},"/items/silk_robe_bottoms":{"0":{a:2e5,b:185e3},"3":{a:34e4,b:-1},"5":{a:5e5,b:17e4}},"/items/silk_robe_top":{"0":{a:21e4,b:2e5},"2":{a:26e4,b:-1},"3":{a:27e4,b:-1},"5":{a:5e5,b:23e4},"6":{a:265e4,b:-1},"7":{a:66e5,b:-1}},"/items/sinister_chest_key":{"0":{a:41e5,b:4e6}},"/items/sinister_entry_key":{"0":{a:5e5,b:49e4}},"/items/sinister_essence":{"0":{a:1200,b:1150}},"/items/sinister_refinement_shard":{"0":{a:285e4,b:28e5}},"/items/smack":{"0":{a:2800,b:2700}},"/items/small_pouch":{"0":{a:25e3,b:17500},"1":{a:33e3,b:-1}},"/items/smoke_burst":{"0":{a:76e3,b:74e3}},"/items/snail_shell":{"0":{a:9600,b:9200}},"/items/snail_shell_helmet":{"0":{a:32e3,b:29e3},"1":{a:62e3,b:-1},"2":{a:96e3,b:-1},"3":{a:145e3,b:-1},"4":{a:96e4,b:-1},"5":{a:135e4,b:-1},"6":{a:29e5,b:-1},"7":{a:2e6,b:-1}},"/items/snake_fang":{"0":{a:5600,b:5400}},"/items/snake_fang_dirk":{"0":{a:38e3,b:27e3},"1":{a:44e3,b:16500},"2":{a:38e3,b:6400},"3":{a:45e3,b:6600},"4":{a:74e3,b:26500},"5":{a:125e3,b:28e3},"6":{a:31e4,b:31e3},"7":{a:66e4,b:26500},"8":{a:115e4,b:68e3},"9":{a:14e5,b:125e3},"10":{a:14e5,b:2e5},"11":{a:7e6,b:1e6},"12":{a:135e5,b:12e5},"13":{a:215e5,b:-1},"14":{a:32e6,b:2e6},"15":{a:5e7,b:8e6}},"/items/sorcerer_boots":{"0":{a:8e5,b:78e4},"1":{a:-1,b:78e4},"2":{a:-1,b:78e4},"3":{a:-1,b:78e4},"4":{a:105e4,b:78e4},"5":{a:135e4,b:13e5},"6":{a:19e5,b:18e5},"7":{a:33e5,b:32e5},"8":{a:58e5,b:5e6},"9":{a:98e5,b:82e5},"10":{a:165e5,b:15e6},"11":{a:32e6,b:23e6},"12":{a:54e6,b:52e6},"13":{a:11e7,b:8e7},"14":{a:21e7,b:205e6},"15":{a:45e7,b:38e7},"16":{a:88e7,b:-1}},"/items/sorcerer_essence":{"0":{a:125,b:120}},"/items/sorcerers_sole":{"0":{a:17e4,b:165e3}},"/items/soul_fragment":{"0":{a:54e4,b:52e4}},"/items/soul_hunter_crossbow":{"0":{a:12e6,b:98e5},"3":{a:11e6,b:-1},"5":{a:12e6,b:1e7},"6":{a:135e5,b:-1},"7":{a:155e5,b:145e5},"8":{a:205e5,b:-1},"10":{a:43e6,b:4e7}},"/items/spaceberry":{"0":{a:240,b:235}},"/items/spaceberry_cake":{"0":{a:1800,b:1750}},"/items/spaceberry_donut":{"0":{a:1400,b:1350}},"/items/spacia_coffee_bean":{"0":{a:1100,b:1050}},"/items/speed_aura":{"0":{a:25e5,b:24e5}},"/items/spike_shell":{"0":{a:7e4,b:68e3}},"/items/spiked_bulwark":{"0":{a:115e5,b:98e5},"1":{a:-1,b:8e6},"2":{a:-1,b:8e6},"3":{a:-1,b:8e6},"5":{a:145e5,b:1e7},"6":{a:-1,b:84e5},"7":{a:25e6,b:195e5},"8":{a:245e5,b:21e6},"10":{a:-1,b:42e6}},"/items/stalactite_shard":{"0":{a:56e4,b:54e4}},"/items/stalactite_spear":{"0":{a:13e6,b:98e5},"1":{a:12e6,b:-1},"3":{a:15e6,b:-1},"5":{a:14e6,b:12e6},"6":{a:-1,b:13e6},"7":{a:195e5,b:18e6},"8":{a:28e6,b:18e6},"10":{a:74e6,b:6e7},"14":{a:-1,b:5e5}},"/items/stamina_coffee":{"0":{a:680,b:620}},"/items/star_fragment":{"0":{a:13e3,b:12500}},"/items/star_fruit":{"0":{a:540,b:520}},"/items/star_fruit_gummy":{"0":{a:1300,b:1250}},"/items/star_fruit_yogurt":{"0":{a:1750,b:1700}},"/items/steady_shot":{"0":{a:96e3,b:94e3}},"/items/stone_key_fragment":{"0":{a:16e5,b:155e4}},"/items/strawberry":{"0":{a:140,b:135}},"/items/strawberry_cake":{"0":{a:1100,b:1e3}},"/items/strawberry_donut":{"0":{a:740,b:720}},"/items/stunning_blow":{"0":{a:96e3,b:94e3}},"/items/sugar":{"0":{a:12,b:11}},"/items/sundering_crossbow":{"0":{a:24e7,b:225e6},"1":{a:-1,b:18e7},"2":{a:-1,b:185e6},"3":{a:-1,b:18e7},"4":{a:-1,b:18e7},"5":{a:255e6,b:235e6},"6":{a:-1,b:225e6},"7":{a:295e6,b:265e6},"8":{a:-1,b:3e8},"9":{a:-1,b:36e7},"10":{a:62e7,b:6e8},"11":{a:-1,b:76e7},"12":{a:18e8,b:13e8},"14":{a:-1,b:3e9},"15":{a:-1,b:5e6}},"/items/sundering_crossbow_refined":{"0":{a:-1,b:52e5},"8":{a:-1,b:5e7},"10":{a:-1,b:15e8},"12":{a:-1,b:115e7},"13":{a:-1,b:56e5},"14":{a:-1,b:6e6},"15":{a:-1,b:58e5},"16":{a:-1,b:56e5},"20":{a:-1,b:54e5}},"/items/sundering_jewel":{"0":{a:105e5,b:1e7}},"/items/sunstone":{"0":{a:52e4,b:5e5}},"/items/super_alchemy_tea":{"0":{a:4e3,b:3900}},"/items/super_attack_coffee":{"0":{a:3700,b:3600}},"/items/super_brewing_tea":{"0":{a:3300,b:3100}},"/items/super_cheesesmithing_tea":{"0":{a:4100,b:3900}},"/items/super_cooking_tea":{"0":{a:3200,b:2950}},"/items/super_crafting_tea":{"0":{a:4400,b:4e3}},"/items/super_defense_coffee":{"0":{a:3700,b:3600}},"/items/super_enhancing_tea":{"0":{a:4800,b:4700}},"/items/super_foraging_tea":{"0":{a:7600,b:2650}},"/items/super_intelligence_coffee":{"0":{a:2800,b:2750}},"/items/super_magic_coffee":{"0":{a:5e3,b:4900}},"/items/super_melee_coffee":{"0":{a:4900,b:4800}},"/items/super_milking_tea":{"0":{a:2250,b:1850}},"/items/super_ranged_coffee":{"0":{a:4900,b:4800}},"/items/super_stamina_coffee":{"0":{a:2750,b:2700}},"/items/super_tailoring_tea":{"0":{a:4400,b:4200}},"/items/super_woodcutting_tea":{"0":{a:2700,b:2500}},"/items/swamp_essence":{"0":{a:50,b:47}},"/items/sweep":{"0":{a:33e3,b:32e3}},"/items/swiftness_coffee":{"0":{a:3e3,b:2950}},"/items/tailoring_essence":{"0":{a:225,b:215}},"/items/tailoring_tea":{"0":{a:740,b:700}},"/items/tailors_bottoms":{"0":{a:2e8,b:25e6},"5":{a:235e6,b:16e7},"7":{a:24e7,b:17e7},"8":{a:275e6,b:24e7},"10":{a:42e7,b:36e7},"12":{a:-1,b:66e7}},"/items/tailors_top":{"0":{a:-1,b:35e5},"3":{a:175e6,b:-1},"5":{a:19e7,b:16e7},"7":{a:205e6,b:18e7},"8":{a:25e7,b:8e6},"10":{a:4e8,b:33e7}},"/items/taunt":{"0":{a:56e3,b:54e3}},"/items/thread_of_expertise":{"0":{a:105e5,b:1e7}},"/items/tome_of_healing":{"0":{a:38e3,b:37e3},"1":{a:39e3,b:24e3},"2":{a:4e4,b:24e3},"3":{a:41e3,b:25e3},"4":{a:43e3,b:29e3},"5":{a:56e3,b:48e3},"6":{a:84e3,b:68e3},"7":{a:17e4,b:15e4},"8":{a:38e4,b:33e4},"10":{a:14e5,b:-1},"11":{a:47e5,b:-1},"12":{a:8e6,b:-1},"15":{a:8e7,b:-1},"19":{a:2e9,b:-1}},"/items/tome_of_the_elements":{"0":{a:215e4,b:21e5},"1":{a:-1,b:145e4},"2":{a:22e5,b:185e4},"3":{a:25e5,b:18e5},"4":{a:-1,b:165e4},"5":{a:215e4,b:105e4},"6":{a:225e4,b:18e5},"7":{a:23e5,b:195e4},"8":{a:27e5,b:16e5},"9":{a:33e5,b:175e4},"10":{a:56e5,b:48e5},"11":{a:11e6,b:105e4},"12":{a:25e6,b:11e5},"15":{a:3e8,b:125e4}},"/items/toughness":{"0":{a:56e3,b:54e3}},"/items/toxic_pollen":{"0":{a:22e4,b:215e3}},"/items/treant_bark":{"0":{a:3e4,b:29500}},"/items/treant_shield":{"0":{a:14e4,b:135e3},"3":{a:21e4,b:-1},"4":{a:17e4,b:-1},"5":{a:19e4,b:16e4},"6":{a:-1,b:15e4},"7":{a:105e4,b:-1},"10":{a:74e5,b:-1}},"/items/turtle_shell":{"0":{a:21500,b:19e3}},"/items/turtle_shell_body":{"0":{a:8e4,b:78e3},"2":{a:1e5,b:-1},"3":{a:215e3,b:-1},"4":{a:22e4,b:-1},"5":{a:16e4,b:-1}},"/items/turtle_shell_legs":{"0":{a:62e3,b:5e4},"3":{a:49e4,b:-1},"5":{a:82e4,b:-1}},"/items/twilight_essence":{"0":{a:265,b:260}},"/items/ultra_alchemy_tea":{"0":{a:7400,b:7e3}},"/items/ultra_attack_coffee":{"0":{a:10500,b:1e4}},"/items/ultra_brewing_tea":{"0":{a:7e3,b:6800}},"/items/ultra_cheesesmithing_tea":{"0":{a:8400,b:8e3}},"/items/ultra_cooking_tea":{"0":{a:7600,b:7e3}},"/items/ultra_crafting_tea":{"0":{a:8400,b:8200}},"/items/ultra_defense_coffee":{"0":{a:10500,b:1e4}},"/items/ultra_enhancing_tea":{"0":{a:11e3,b:10500}},"/items/ultra_foraging_tea":{"0":{a:6600,b:6200}},"/items/ultra_intelligence_coffee":{"0":{a:9e3,b:7200}},"/items/ultra_magic_coffee":{"0":{a:12e3,b:11500}},"/items/ultra_melee_coffee":{"0":{a:12e3,b:11500}},"/items/ultra_milking_tea":{"0":{a:6200,b:6e3}},"/items/ultra_ranged_coffee":{"0":{a:12e3,b:11500}},"/items/ultra_stamina_coffee":{"0":{a:9400,b:9200}},"/items/ultra_tailoring_tea":{"0":{a:8200,b:8e3}},"/items/ultra_woodcutting_tea":{"0":{a:6200,b:5800}},"/items/umbral_boots":{"0":{a:145e3,b:13e4},"1":{a:135e3,b:-1},"2":{a:18e4,b:-1},"3":{a:21e4,b:-1},"5":{a:47e5,b:32e4},"7":{a:5e7,b:-1},"8":{a:68e6,b:-1}},"/items/umbral_bracers":{"0":{a:24e4,b:235e3},"1":{a:3e5,b:-1},"2":{a:3e5,b:-1},"3":{a:38e4,b:-1},"4":{a:105e4,b:-1},"5":{a:88e5,b:-1},"10":{a:25e6,b:15e6}},"/items/umbral_chaps":{"0":{a:4e5,b:38e4},"1":{a:7e5,b:-1},"2":{a:12e5,b:-1},"3":{a:195e4,b:-1},"4":{a:25e5,b:-1},"5":{a:38e5,b:-1},"6":{a:62e5,b:-1}},"/items/umbral_hide":{"0":{a:240,b:235}},"/items/umbral_hood":{"0":{a:18e4,b:175e3},"2":{a:29e4,b:-1},"3":{a:33e4,b:-1},"4":{a:6e5,b:-1},"5":{a:82e4,b:205e3},"6":{a:58e5,b:-1}},"/items/umbral_leather":{"0":{a:2050,b:2e3}},"/items/umbral_tunic":{"0":{a:46e4,b:45e4},"2":{a:9e4,b:-1},"3":{a:96e4,b:-1},"5":{a:4e6,b:7e5}},"/items/vampire_fang":{"0":{a:56e4,b:54e4}},"/items/vampire_fang_dirk":{"0":{a:12e6,b:98e5},"5":{a:125e5,b:105e5},"6":{a:16e6,b:-1},"7":{a:18e6,b:16e6},"8":{a:295e5,b:22e6},"9":{a:-1,b:2e7},"10":{a:58e6,b:48e6}},"/items/vampiric_bow":{"0":{a:13e6,b:1e7},"2":{a:165e5,b:-1},"3":{a:215e5,b:-1},"4":{a:205e5,b:-1},"5":{a:26e6,b:-1},"8":{a:24e6,b:-1},"10":{a:8e7,b:-1}},"/items/vampirism":{"0":{a:68e3,b:66e3}},"/items/verdant_alembic":{"0":{a:2e4,b:15500},"2":{a:38e3,b:-1}},"/items/verdant_boots":{"0":{a:12e3,b:11500},"1":{a:68e3,b:-1}},"/items/verdant_brush":{"0":{a:18500,b:9800},"1":{a:35e3,b:-1},"2":{a:66e3,b:-1},"3":{a:68e3,b:-1},"4":{a:74e3,b:-1}},"/items/verdant_buckler":{"0":{a:28e3,b:8600},"1":{a:22500,b:-1},"3":{a:1e5,b:-1},"4":{a:12e4,b:-1},"5":{a:39e4,b:-1},"6":{a:64e4,b:-1},"7":{a:78e4,b:-1}},"/items/verdant_bulwark":{"0":{a:23500,b:18500},"2":{a:2e4,b:-1},"3":{a:1e7,b:-1}},"/items/verdant_cheese":{"0":{a:660,b:640}},"/items/verdant_chisel":{"0":{a:18500,b:14500}},"/items/verdant_enhancer":{"0":{a:19e3,b:16e3},"2":{a:25500,b:-1},"4":{a:68e3,b:-1},"5":{a:135e3,b:-1}},"/items/verdant_gauntlets":{"0":{a:12e3,b:11500},"1":{a:98e3,b:-1},"2":{a:2e4,b:-1},"5":{a:8e4,b:-1}},"/items/verdant_hammer":{"0":{a:19500,b:15500}},"/items/verdant_hatchet":{"0":{a:17500,b:9800},"4":{a:7e4,b:-1}},"/items/verdant_helmet":{"0":{a:15500,b:14e3},"2":{a:1e5,b:-1}},"/items/verdant_mace":{"0":{a:20500,b:19500},"1":{a:-1,b:740},"4":{a:17e3,b:720},"5":{a:3e5,b:-1}},"/items/verdant_milk":{"0":{a:135,b:130}},"/items/verdant_needle":{"0":{a:18e3,b:16500}},"/items/verdant_plate_body":{"0":{a:23500,b:21500}},"/items/verdant_plate_legs":{"0":{a:19500,b:18500},"2":{a:25e6,b:-1},"5":{a:11e5,b:-1}},"/items/verdant_pot":{"0":{a:2e4,b:18e3},"1":{a:16e4,b:-1},"2":{a:3e5,b:-1}},"/items/verdant_shears":{"0":{a:20500,b:16500},"1":{a:58e3,b:-1}},"/items/verdant_spatula":{"0":{a:2e4,b:1e4},"3":{a:56e4,b:560}},"/items/verdant_spear":{"0":{a:20500,b:19500},"1":{a:5e4,b:-1},"2":{a:5e4,b:-1},"3":{a:17e4,b:-1},"5":{a:125e3,b:-1}},"/items/verdant_sword":{"0":{a:20500,b:19e3},"1":{a:56e5,b:-1},"2":{a:4e4,b:-1},"3":{a:3e5,b:-1},"4":{a:2e5,b:-1},"5":{a:1e5,b:-1}},"/items/vision_helmet":{"0":{a:52e4,b:5e5},"1":{a:6e5,b:-1},"3":{a:64e4,b:-1},"4":{a:105e4,b:105e3},"5":{a:125e4,b:16e4},"6":{a:15e5,b:3e5},"7":{a:3e6,b:42e4},"8":{a:7e6,b:155e4},"9":{a:-1,b:25e5}},"/items/vision_shield":{"0":{a:17e5,b:16e5},"2":{a:-1,b:16e5},"4":{a:-1,b:1e5},"5":{a:3e6,b:1e5},"6":{a:-1,b:1e5},"7":{a:-1,b:1e5},"8":{a:78e5,b:1e5}},"/items/watchful_relic":{"0":{a:76e5,b:72e5},"3":{a:-1,b:31e5},"5":{a:1e7,b:-1},"7":{a:12e6,b:1e6},"8":{a:16e6,b:12e6},"9":{a:-1,b:5e5},"10":{a:-1,b:1e6}},"/items/water_strike":{"0":{a:7600,b:7400}},"/items/werewolf_claw":{"0":{a:56e4,b:54e4}},"/items/werewolf_slasher":{"0":{a:155e5,b:1e7},"5":{a:135e5,b:11e6},"6":{a:2e7,b:11e6},"7":{a:22e6,b:16e6},"8":{a:3e7,b:25e6},"9":{a:-1,b:1e7},"10":{a:7e7,b:5e7},"15":{a:-1,b:64e7}},"/items/wheat":{"0":{a:62,b:60}},"/items/white_key_fragment":{"0":{a:98e4,b:96e4}},"/items/wisdom_coffee":{"0":{a:1800,b:1750}},"/items/wisdom_tea":{"0":{a:980,b:960}},"/items/wizard_necklace":{"0":{a:125e5,b:105e5},"1":{a:15e6,b:-1},"2":{a:215e5,b:15e6},"3":{a:26e6,b:235e5},"4":{a:54e6,b:47e6},"5":{a:105e6,b:92e6},"10":{a:-1,b:28e7}},"/items/woodcutting_essence":{"0":{a:260,b:255}},"/items/woodcutting_tea":{"0":{a:720,b:560}},"/items/wooden_bow":{"0":{a:5e3,b:4900},"1":{a:88e3,b:-1},"2":{a:15e4,b:-1},"3":{a:1e5,b:-1},"4":{a:68e3,b:-1},"5":{a:25e4,b:-1},"6":{a:5e8,b:-1},"20":{a:-1,b:5e3}},"/items/wooden_crossbow":{"0":{a:4900,b:4100},"1":{a:9200,b:5e3},"2":{a:2e4,b:9400},"4":{a:58e4,b:-1},"5":{a:16e4,b:-1}},"/items/wooden_fire_staff":{"0":{a:5200,b:4700},"2":{a:4e4,b:-1},"4":{a:145e5,b:-1}},"/items/wooden_nature_staff":{"0":{a:5200,b:4600},"1":{a:3e4,b:-1},"2":{a:84e3,b:-1},"3":{a:98e3,b:-1},"20":{a:-1,b:145}},"/items/wooden_shield":{"0":{a:3900,b:3400},"1":{a:105e5,b:-1},"2":{a:92e6,b:-1},"7":{a:88e4,b:-1},"10":{a:-1,b:3100}},"/items/wooden_water_staff":{"0":{a:6800,b:4700},"1":{a:215e3,b:-1},"4":{a:28e4,b:-1}},"/items/yogurt":{"0":{a:350,b:270}}},timestamp:1760432846};var Sg=JSON.stringify(Tc),Ec=null,Ic=null,Nc=null,Hc=null,Dc=null,Pc=null,Lc=null,$c=null,Oc=null,qc=null,Rc=null,Bc=null,zc=null,Fc=null,jc=null,Wc=null,Vc=null,Gc=null,Zc=null,Uc=null,Kc=null,Xc=null,Jc=null,Yc={},Cg={},Ag={},Qc=[],el={},tl={},al=!1,nl="",il="",rl=[],ol=null,sl=[],ul=[],cl=0,ll=null,dl=[];Object.defineProperties(u.data,{MARKET_JSON_LOCAL_BACKUP:{enumerable:!0,get(){return Sg}}}),Object.defineProperties(u.state,{initData_characterSkills:{enumerable:!0,get(){return Ec},set(e){Ec=e}},initData_characterItems:{enumerable:!0,get(){return Ic},set(e){Ic=e}},initData_combatAbilities:{enumerable:!0,get(){return Nc},set(e){Nc=e}},initData_characterHouseRoomMap:{enumerable:!0,get(){return Hc},set(e){Hc=e}},initData_actionTypeDrinkSlotsMap:{enumerable:!0,get(){return Dc},set(e){Dc=e}},initData_actionDetailMap:{enumerable:!0,get(){return Pc},set(e){Pc=e}},initData_levelExperienceTable:{enumerable:!0,get(){return Lc},set(e){Lc=e}},initData_enhancementLevelSuccessRateTable:{enumerable:!0,get(){return $c},set(e){$c=e}},initData_enhancementLevelTotalBonusMultiplierTable:{enumerable:!0,get(){return Oc},set(e){Oc=e}},initData_itemDetailMap:{enumerable:!0,get(){return qc},set(e){qc=e}},initData_itemLocationDetailMap:{enumerable:!0,get(){return Rc},set(e){Rc=e}},initData_houseRoomDetailMap:{enumerable:!0,get(){return Bc},set(e){Bc=e}},initData_actionCategoryDetailMap:{enumerable:!0,get(){return zc},set(e){zc=e}},initData_abilityDetailMap:{enumerable:!0,get(){return Fc},set(e){Fc=e}},initData_shopItemDetailMap:{enumerable:!0,get(){return jc},set(e){jc=e}},initData_taskShopItemDetailMap:{enumerable:!0,get(){return Wc},set(e){Wc=e}},initData_labyrinthShopItemDetailMap:{enumerable:!0,get(){return Vc},set(e){Vc=e}},initData_openableLootDropMap:{enumerable:!0,get(){return Gc},set(e){Gc=e}},initData_guildBuffDetailMap:{enumerable:!0,get(){return Zc},set(e){Zc=e}},initData_characterAbilities:{enumerable:!0,get(){return Uc},set(e){Uc=e}},initData_myMarketListings:{enumerable:!0,get(){return Kc},set(e){Kc=e}},marketApiJson:{enumerable:!0,get(){return Xc},set(e){Xc=e}},marketValuesVersion:{enumerable:!0,get(){return Jc},set(e){Jc=e}},marketItemValues:{enumerable:!0,get(){return Yc},set(e){Yc=e??{}}},marketOrderBooks:{enumerable:!0,get(){return Cg}},marketPriceBands:{enumerable:!0,get(){return Ag}},currentActionsHridList:{enumerable:!0,get(){return Qc},set(e){Qc=e}},currentEquipmentMap:{enumerable:!0,get(){return el},set(e){el=e}},guildBuffLevels:{enumerable:!0,get(){return tl},set(e){tl=e??{}}},guildDataLoaded:{enumerable:!0,get(){return al},set(e){al=!!e}},currentCharacterId:{enumerable:!0,get(){return nl},set(e){nl=String(e??"")}},currentCharacterName:{enumerable:!0,get(){return il},set(e){il=String(e??"")}},characterQuests:{enumerable:!0,get(){return rl},set(e){rl=Array.isArray(e)?e:[]}},guild:{enumerable:!0,get(){return ol},set(e){ol=e??null}},guildCharacters:{enumerable:!0,get(){return sl},set(e){sl=Array.isArray(e)?e:[]}},guildLeaderboard:{enumerable:!0,get(){return ul},set(e){ul=Array.isArray(e)?e:[]}},guildStateUpdatedAt:{enumerable:!0,get(){return cl},set(e){cl=Number(e)||Date.now()}},actionTypeBuffSources:{enumerable:!0,get(){return ll},set(e){ll=e&&typeof e=="object"?e:null}},equipmentTaskActionBuffs:{enumerable:!0,get(){return dl},set(e){dl=Array.isArray(e)?e:[]}}});function Mn(e,t){return u.config.isZH?e:t}s(Mn,"localize");function Mg(e){return String(e??"").split("/").at(-1)?.replaceAll("_"," ")??""}s(Mg,"tailLabel");function Tg(e,t,a){return a||(e instanceof Map?e.get(t):e?.[t])}s(Tg,"detailFrom");var Eg={item:{zh:s(()=>u.data.ZHItemNames,"zh"),en:s(()=>u.state.initData_itemDetailMap,"en")},action:{zh:s(()=>u.data.ZHActionNames,"zh"),en:s(()=>u.state.initData_actionDetailMap,"en")},ability:{zh:s(()=>u.data.ZHOthersDic,"zh"),en:s(()=>u.state.initData_abilityDetailMap,"en")},monster:{zh:s(()=>u.data.ZHOthersDic,"zh"),en:s(()=>null,"en")}};function oo(e,t,{fallbackZh:a="",fallbackEn:n="",detail:i=null,fallback:o=""}={}){let r=Eg[e],c=r?.zh?.()?.[t],l=Tg(r?.en?.(),t,i),d=String(l?.name??"").trim(),m=o||Mg(t)||"—";return u.config.isZH?c||a||d||n||m:d||n||a||c||m}s(oo,"entityName");var en=s((e,t)=>oo("item",e,t),"itemName"),so=s((e,t)=>oo("action",e,t),"actionName"),H7=s((e,t)=>oo("ability",e,t),"abilityName"),D7=s((e,t)=>oo("monster",e,t),"monsterName");var lo=cg(ml(),1),Ig=.05,Ng=.18,fl=1e12,Hg=600*1e3,Dg=360*60*1e3;function co(e=globalThis.location?.hostname??""){return e.startsWith("test.")?"test":e.endsWith("milkywayidlecn.com")?"china":"production"}s(co,"getMarketEnvironment");function bl(e=globalThis.location?.hostname??""){switch(co(e)){case"test":return"https://test.milkywayidle.com/game_data/marketplace.json";case"china":return"https://www.milkywayidlecn.com/game_data/marketplace.json";default:return"https://www.milkywayidle.com/game_data/marketplace.json"}}s(bl,"getMarketApiUrl");function pl(e=globalThis.location?.hostname??""){return co(e)==="test"?Hg:Dg}s(pl,"getMarketRefreshInterval");function Pg(e,t,a=0){let n=e?.[t];if(!n)return null;let i=n[a]??n[String(a)];return Number.isFinite(Number(i))&&Number(i)>=0?Number(i):null}s(Pg,"getLevelValue");function gl(e,t=0){return u.state.marketApiJson?.marketData?.[e]?.[t]??u.state.marketApiJson?.marketData?.[e]?.[String(t)]??null}s(gl,"getMarketRecord");function Bs(e,t=0){let a=Number(gl(e,t)?.a);return a>0?a:0}s(Bs,"getAskPrice");function zs(e,t=0){let a=Number(gl(e,t)?.b);return a>0?a:0}s(zs,"getBidPrice");function hl(e,t=0){let a=Pg(u.state.marketItemValues,e,t);if(a!==null&&a>0)return a;let n=Bs(e,t),i=zs(e,t);return n>0&&i>0?(n+i)/2:n||i||0}s(hl,"getFairValue");function Fs(e){return e==="/items/bag_of_10_cowbells"?Ng:Ig}s(Fs,"getMarketTaxRate");function Lg(e,t=0){return zs(e,t)*(1-Fs(e))}s(Lg,"getNetSellPrice");function $g(e,t=0){return Bs(e,t)*(1-Fs(e))}s($g,"getNetSellPriceAtAsk");function _l(e){let t=Math.max(1,Math.floor(Math.abs(Number(e)||0))),a=String(t),n=Number(a[0]),i=a.length;return n<=2&&i>=4?5*10**(i-4):n<=4&&i>=3?10**(i-3):i>=3?2*10**(i-3):1}s(_l,"getMarketPriceIncrement");function js(e,t=1,a=fl){let n=Math.min(Math.max(Number(e)||t,t),a),i=_l(n),o=Math.round(n/i)*i;return Math.min(Math.max(o,t),a)}s(js,"normalizeMarketPrice");function Og(e){if(typeof e=="number")return e;let a=String(e??"").trim().toLowerCase().replaceAll(u.config.THOUSAND_SEPERATOR||",","").replace(u.config.DECIMAL_SEPERATOR||".",".").match(/^([+-]?(?:\d+\.?\d*|\.\d+))\s*([kmbt])?$/i);if(!a)return Number.NaN;let n={k:1e3,m:1e6,b:1e9,t:1e12};return Number(a[1])*(n[a[2]]??1)}s(Og,"parseCompactNumber");function Ws(){return u.config.isZH?"zh-CN":"en-US"}s(Ws,"getNumberLocale");function yl(e){if(e==null||e==="")return"—";let t=Number(e);return Number.isFinite(t)?new Intl.NumberFormat(Ws(),{maximumFractionDigits:20,useGrouping:!0}).format(t):"—"}s(yl,"formatExactNumber");function wl(e,t=2){if(e==null||e==="")return"—";let a=Number(e);if(!Number.isFinite(a))return"—";let n=Math.abs(a),i=Math.min(2,Math.max(0,Number(t)||0));if(n<1e3)return new Intl.NumberFormat(Ws(),{maximumFractionDigits:i,useGrouping:!0}).format(a);let o=[{value:1e3,symbol:"K"},{value:1e6,symbol:"M"},{value:1e9,symbol:"B"},{value:1e12,symbol:"T"}],r=n>=1e6&&u.settings.get?.("displayCapMM"),c=r?o[1]:[...o].reverse().find(({value:p})=>n>=p),l=a/c.value,d=Number(l.toFixed(i)),m=o.indexOf(c);return!r&&Math.abs(d)>=1e3&&m<o.length-1&&(c=o[m+1],l=a/c.value,d=Number(l.toFixed(i))),`${d.toLocaleString(Ws(),{maximumFractionDigits:i,useGrouping:!0})}${c.symbol}`}s(wl,"numberFormatter");function qg(e,t={}){let a=document.createElement(t.tagName??"span");return a.className=t.className??"mwi-number",a.textContent=wl(e,t.digits??2),a.title=yl(e),t.label&&a.setAttribute("aria-label",t.label),a}s(qg,"createFormattedNumber");function Rg(e){let t=Number(e);if(!Number.isFinite(t))return"-";let a=t>100?Math.round(t).toString():t.toFixed(1),[n,i]=a.split("."),o=n.replace(/\B(?=(\d{3})+(?!\d))/g,u.config.THOUSAND_SEPERATOR||",");return i===void 0?o:`${o}${u.config.DECIMAL_SEPERATOR||"."}${i}`}s(Rg,"formatScore");function Bg(e,t=0){let a=u.state.marketPriceBands?.[e]?.[t];if(a)return a;let n=hl(e,t);return n?{minimum:js(n*.9),maximum:js(n*1.1)}:null}s(Bg,"getPriceBand");function vl(e){if(!e)return null;let t=[e,lo.default.decompressFromUTF16(e),lo.default.decompress(e),lo.default.decompressFromBase64(e)];for(let a of t)if(a)try{let n=JSON.parse(a);if(n?.marketItemValues)return n}catch{}return null}s(vl,"parseStoredMarketItemValues");function zg(){let e=null;try{e=(globalThis.unsafeWindow??globalThis).localStorageUtil?.getMarketItemValues?.()??null}catch(t){console.error(u.config.isZH?"[MWITools] 无法从游戏缓存读取市场价值":"[MWITools] Unable to read market values from the game cache",t)}return e??=vl(globalThis.localStorage?.getItem("marketItemValues")),e?(u.state.marketValuesVersion=e.marketValuesVersion??null,u.state.marketItemValues=e.marketItemValues,u.api.invalidateAssetValueCache?.(),!0):!1}s(zg,"loadMarketItemValuesFromStorage");function Bi(e,t=!1){if(!e)return null;let a=e;try{typeof e=="string"&&(a=JSON.parse(e))}catch(i){return console.error(u.config.isZH?"[MWITools] 市场数据 JSON 解析失败:":"[MWITools] Failed to parse market data JSON:",i.message),null}if(!a?.timestamp||!a?.marketData)return null;let n={"/items/coin":{a:1,b:1},"/items/task_token":{a:0,b:0},"/items/cowbell":{a:0,b:0},"/items/small_treasure_chest":{a:0,b:0},"/items/medium_treasure_chest":{a:0,b:0},"/items/large_treasure_chest":{a:0,b:0},"/items/basic_task_badge":{a:0,b:0},"/items/advanced_task_badge":{a:0,b:0},"/items/expert_task_badge":{a:0,b:0}};for(let[i,o]of Object.entries(n))a.marketData[i]={0:o};return u.state.marketApiJson=a,u.api.invalidateAssetValueCache?.(),t&&(localStorage.setItem("MWITools_marketAPI_timestamp",String(Date.now())),localStorage.setItem("MWITools_marketAPI_json",JSON.stringify(a))),a}s(Bi,"validateMarketJsonFetch");function Fg(e,t){console.warn(u.config.isZH?`[MWITools] ${e};将优先使用可用的市场缓存。`:`[MWITools] ${t}; using cached market data when available.`)}s(Fg,"setMarketFetchFailure");function jg(){let e=typeof GM<"u"&&typeof GM.xmlHttpRequest=="function"?GM.xmlHttpRequest:typeof GM_xmlhttpRequest=="function"?GM_xmlhttpRequest:null;return e?new Promise(t=>{let a=!1,n,i=s(r=>{a||(a=!0,clearTimeout(n),t(r))},"finish");n=setTimeout(()=>i(null),5500);let o={url:bl(),method:"GET",timeout:5e3,onload:i,onabort:s(()=>i(null),"onabort"),onerror:s(()=>i(null),"onerror"),ontimeout:s(()=>i(null),"ontimeout")};try{let r=e(o);r?.then&&r.then(i).catch(()=>i(null))}catch(r){console.error(u.config.isZH?"[MWITools] 市场数据请求失败":"[MWITools] Market data request failed",r),i(null)}}):Promise.resolve(null)}s(jg,"requestMarketJson");function xl(){return!!(u.state.marketApiJson||Object.keys(u.state.marketItemValues??{}).length)}s(xl,"hasMarketValueSource");async function Wg(){return xl()?!0:!!await kl()}s(Wg,"ensureMarketValueSource");async function kl(e=!1){let t=Number(localStorage.getItem("MWITools_marketAPI_timestamp")),a=localStorage.getItem("MWITools_marketAPI_json");if(!e&&a&&t&&Date.now()-t<pl())return Bi(a,!1);let n=await jg(),i=Bi(n?.status===200?n.responseText:null,!0);if(i)return i;if(Fg("市场 API 请求失败","Market API request failed"),a){let o=Bi(a,!1);if(o)return o}return co()==="test"?null:Bi(u.data.MARKET_JSON_LOCAL_BACKUP,!1)}s(kl,"fetchMarketJSON");function Vg(e){e.marketItemValues&&(u.state.marketValuesVersion=e.marketValuesVersion??null,u.state.marketItemValues=e.marketItemValues,u.api.invalidateAssetValueCache?.())}s(Vg,"applyMarketItemValues");function Gg(e){let t=e.marketItemOrderBooks??e,a=t.itemHrid;if(!a)return;u.state.marketOrderBooks[a]=t.orderBooks??{},t.marketValues&&(u.state.marketItemValues[a]={...u.state.marketItemValues[a]??{},...t.marketValues}),u.api.invalidateAssetValueCache?.();let n=t.priceBandMins??{},i=t.priceBandMaxs??{},o=new Set([...Object.keys(n),...Object.keys(i)]);u.state.marketPriceBands[a]??={};for(let r of o)u.state.marketPriceBands[a][r]={minimum:Number(n[r])||0,maximum:Number(i[r])||fl}}s(Gg,"applyMarketOrderBooks");function Zg(e){let t=e.myMarketListings??e.marketListings??e.endMarketListings??e.listings;if(!Array.isArray(t))return;if(e.myMarketListings||e.marketListings||e.listings){u.state.initData_myMarketListings=t;return}let a=[...u.state.initData_myMarketListings??[]];for(let n of t){let i=n.id??n.marketListingId,o=a.findIndex(r=>(r.id??r.marketListingId)===i);n.isDone||n.isCancelled?o>=0&&a.splice(o,1):o>=0?a[o]=n:a.push(n)}u.state.initData_myMarketListings=a}s(Zg,"applyMarketListings");function Ug(e){return Number(e?.workingPrice)>0?Number(e.workingPrice):Number(e?.price)||0}s(Ug,"getListingWorkingPrice"),Object.assign(u.api,{getMarketEnvironment:co,getMarketApiUrl:bl,getMarketRefreshInterval:pl,getAskPrice:Bs,getBidPrice:zs,getFairValue:hl,getMarketTaxRate:Fs,getNetSellPrice:Lg,getNetSellPriceAtAsk:$g,getMarketPriceIncrement:_l,normalizeMarketPrice:js,parseCompactNumber:Og,numberFormatter:wl,formatExactNumber:yl,createFormattedNumber:qg,formatScore:Rg,getPriceBand:Bg,parseStoredMarketItemValues:vl,loadMarketItemValuesFromStorage:zg,validateMarketJsonFetch:Bi,fetchMarketJSON:kl,hasMarketValueSource:xl,ensureMarketValueSource:Wg,applyMarketItemValues:Vg,applyMarketOrderBooks:Gg,applyMarketListings:Zg,getListingWorkingPrice:Ug});var Kg=3,Sl=12,Xg=Object.freeze([0,.02,.042,.066,.092,.12,.15,.182,.216,.255,.29,.33,.372,.416,.462,.51,.56,.612,.666,.722,.78]),ti=Object.freeze({actionSpeed:"/buff_types/action_speed",artisan:"/buff_types/artisan",essenceFind:"/buff_types/essence_find",gathering:"/buff_types/gathering",gourmet:"/buff_types/gourmet",rareFind:"/buff_types/rare_find"});function pa(e){if(Array.isArray(e))return e;if(!e)return[];try{let t=JSON.parse(e);return Array.isArray(t)?t:[]}catch{return[]}}s(pa,"asArray");function zi(e){return(u.state.initData_characterItems??[]).filter(t=>t.itemHrid===e&&t.itemLocationHrid==="/item_locations/inventory").reduce((t,a)=>t+Number(a.count||0),0)}s(zi,"getInventoryCount");function Vs(e){return pa(e?.outputItems).length?pa(e.outputItems).map(t=>({itemHrid:t.itemHrid,count:Number(t.count)||0})):pa(e?.dropTable).map(t=>({itemHrid:t.itemHrid,count:(Number(t.dropRate??1)||0)*((Number(t.minCount??t.count??0)+Number(t.maxCount??t.count??0))/2)}))}s(Vs,"getExpectedOutputs");function Jg(){let e=new Map;for(let[t,a]of Object.entries(u.state.initData_actionDetailMap??{})){if(!/(?:fabric|lumber|cheese)$/.test(t))continue;let n=pa(a?.inputItems)[0],i=pa(a?.outputItems)[0],o=Number(n?.count)||0;!n?.itemHrid||!i?.itemHrid||o<=0||e.set(n.itemHrid,{itemHrid:i.itemHrid,inputCount:o})}return e.has("/items/rainbow_milk")||e.set("/items/rainbow_milk",{itemHrid:"/items/rainbow_cheese",inputCount:2}),e}s(Jg,"getProcessingProductMap");function Yg(e,t){let a=1+Math.max(0,t?.quantity??0),n=Math.min(1,Math.max(0,t?.upgradedProduct??0)),i=n>0?Jg():null,o=[];for(let r of Vs(e)){let c=i?.get(r.itemHrid),l=Number(r.count)||0,d=l*a*(c?1-n:1);if(d>0&&o.push({...r,baseCount:l,count:d}),c){let m=l*a*n/c.inputCount;m>0&&o.push({itemHrid:c.itemHrid,baseCount:0,count:m,kind:"processed",processedFromItemHrid:r.itemHrid})}}return o}s(Yg,"getEffectiveOutputs");function Cl(e){let t=pa(e?.inputItems).map(a=>({itemHrid:a.itemHrid,count:Number(a.count)||0,isUpgradeItem:a.itemHrid===e?.upgradeItemHrid}));return e?.upgradeItemHrid&&!t.some(a=>a.itemHrid===e.upgradeItemHrid)&&t.push({itemHrid:e.upgradeItemHrid,count:1,isUpgradeItem:!0}),t}s(Cl,"getDirectInputs");function Qg(e){let t=u.state.initData_actionDetailMap?.[e],a=u.state.actionTypeBuffSources;if(!t||!a)return null;let n=[];for(let i of Object.values(a)){let o=i?.[t.type];Array.isArray(o)&&n.push(...o)}return n}s(Qg,"getActionBuffs");function mo(e,t){let a=Qg(e);return a?a.reduce((n,i)=>i?.typeHrid!==t?n:n+(Number(i.flatBoost)||0)+(Number(i.ratioBoost)||0),0):null}s(mo,"getActionBuffRatio");function eh(e){let t=Object.values(u.state.currentEquipmentMap??{});return t.length||t.push(...(u.state.initData_characterItems??[]).filter(a=>a?.itemLocationHrid!=="/item_locations/inventory")),t.filter(a=>a?.itemHrid===e&&Number(a.count??1)>0).sort((a,n)=>(Number(n.enhancementLevel)||0)-(Number(a.enhancementLevel)||0))[0]}s(eh,"getEquippedItem");function Al(){let e=eh("/items/guzzling_pouch");if(!e)return 1;let t=u.state.initData_itemDetailMap?.["/items/guzzling_pouch"],a=Number(t?.equipmentDetail?.noncombatStats?.drinkConcentration??0),n=Number(t?.equipmentDetail?.noncombatEnhancementBonuses?.drinkConcentration??a),i=Math.max(0,Math.floor(Number(e.enhancementLevel)||0));return Math.max(1,1+a+n*(Xg[i]??0))}s(Al,"getDrinkConcentrationMultiplier");function th(e){let t=u.state.initData_actionTypeDrinkSlotsMap;return!t||typeof t!="object"?null:pa(t[e.type]).filter(a=>a?.itemHrid)}s(th,"getSelectedDrinks");function Ml(e){let t=u.state.initData_actionDetailMap?.[e],a=t?th(t):null;if(!t||a===null)return null;let n=Al(),i={efficiency:0,extraExp:0,lessResource:0,quantity:0,upgradedProduct:0},o=[];for(let r of a){let c=u.state.initData_itemDetailMap?.[r.itemHrid];if(!c)return null;for(let l of pa(c.consumableDetail?.buffs)){let d=Number(l.flatBoost)||0;l.typeHrid===ti.artisan?i.lessResource+=d:l.typeHrid===ti.gathering||l.typeHrid===ti.gourmet?i.quantity+=d:l.typeHrid==="/buff_types/wisdom"?i.extraExp+=d:l.typeHrid==="/buff_types/processing"?i.upgradedProduct+=d:l.typeHrid==="/buff_types/efficiency"?i.efficiency+=d:l.typeHrid==="/buff_types/action_level"?i.efficiency-=d/100:l.typeHrid===`/buff_types/${t.type.replace("/action_types/","")}_level`&&(i.efficiency+=d/100)}o.push({itemHrid:r.itemHrid})}return{concentrationMultiplier:n,drinks:o,efficiency:i.efficiency*n,extraExp:i.extraExp*n,lessResource:Math.min(1,Math.max(0,i.lessResource*n)),quantity:Math.max(0,i.quantity*n),upgradedProduct:Math.max(0,i.upgradedProduct*n)}}s(Ml,"getEffectiveTeaEffects");function Tl(){return Array.isArray(u.state.initData_characterSkills)&&Array.isArray(u.state.initData_characterItems)&&u.state.initData_actionTypeDrinkSlotsMap!==null&&u.state.initData_actionTypeDrinkSlotsMap!==void 0}s(Tl,"isPlayerDataReady");function El(e){if(e?.hasMaxCount===!1)return 1/0;let t=Number(e?.targetCount??e?.maxCount??e?.count??e?.actionCount);if(!Number.isFinite(t)||t<0)return 1/0;let a=Number(e?.currentCount??e?.completedCount??0);return Math.max(0,t-(Number.isFinite(a)?a:0))}s(El,"getActionCount");function fo(e){return 1+(Number(u.api.getTotalEffiPercentage?.(e))||0)/100}s(fo,"getEfficiencyMultiplier");function Il(e){let t=mo(e,ti.actionSpeed);return t!==null?t*100:Number(u.api.getToolsSpeedBuffByActionHrid?.(e))||0}s(Il,"getActionSpeedPercent");function ah(e,t,a={}){let n=(fo(e)-1)*100,i=Il(e),o=Number(a.durationPerAction);if(Number.isFinite(o)&&o>0)return{cycleSeconds:o,efficiencyPercent:n,secondsPerAction:o/fo(e),speedPercent:i,timingSource:"live"};let r=Number(t?.baseTimeCost)/1e9;if(!Number.isFinite(r)||r<=0)return null;let c=Math.max(Kg,r/(1+i/100));return{baseSeconds:r,cycleSeconds:c,efficiencyPercent:n,secondsPerAction:c/fo(e),speedPercent:i,timingSource:"calculated"}}s(ah,"getEffectiveSeconds");var nh=new Set(["conservative","fair","aggressive"]),ih=new Set(["/action_types/alchemy","/action_types/brewing","/action_types/cheesesmithing","/action_types/cooking","/action_types/crafting","/action_types/foraging","/action_types/milking","/action_types/tailoring","/action_types/woodcutting"]);function rh(e,t,a){let n=0;return a==="conservative"?n=t==="sell"?u.api.getNetSellPrice?.(e,0):u.api.getAskPrice?.(e,0):a==="aggressive"?n=t==="sell"?u.api.getNetSellPriceAtAsk?.(e,0):u.api.getBidPrice?.(e,0):(n=u.api.getFairValue?.(e,0),t==="sell"&&Number(n)>0&&(n*=1-(Number(u.api.getMarketTaxRate?.(e))||0))),Number(n)>0?Number(n):null}s(rh,"getDirectPrice");function Fi(e,t,a){let n=rh(e,t,a);if(n!==null||t!=="sell")return{value:n,source:n===null?"missing":"market",complete:n!==null,missingItemHrids:n===null?[e]:[]};let i=u.api.getAssetLiquidationValue?.(e,0,a);return Number(i?.value)>0?{value:Number(i.value),source:i.source==="market"?"market":"derived",complete:!!i.complete,missingItemHrids:i.missingItemHrids??[]}:{value:null,source:"missing",complete:!1,missingItemHrids:i?.missingItemHrids??[e]}}s(Fi,"getPriceInfo");function bo(e,t,a){return Fi(e,t,a).value}s(bo,"getPrice");function po(e){let t=Number(e?.minCount??e?.count??0)||0,a=Number(e?.maxCount??e?.count??t)||0;return(Number(e?.dropRate??1)||0)*((t+a)/2)}s(po,"expectedDropCount");function oh(e,t){let a=Math.max(0,Number(mo(e,ti.essenceFind))||0),n=Math.max(0,Number(mo(e,ti.rareFind))||0);return[...pa(t?.essenceDropTable).map(i=>({itemHrid:i.itemHrid,count:po(i)*(1+a),baseCount:po(i),findBonus:a,kind:"essence"})),...pa(t?.rareDropTable).map(i=>({itemHrid:i.itemHrid,count:po(i)*(1+n),baseCount:po(i),findBonus:n,kind:"rare"}))]}s(oh,"getOptionalOutputs");function sh(e){let t=String(e??"");if(!t)return null;let a=Object.entries(u.state.initData_actionDetailMap??{}).filter(([,o])=>ih.has(o?.type)&&Vs(o).some(r=>r?.itemHrid===t&&Number(r.count)>0));if(!a.length)return null;let n=t.split("/").at(-1),i=a.find(([o])=>o.endsWith(`/${n}`));return i?i[0]:(a.sort(([o,r],[c,l])=>(Number(r?.sortIndex)||0)-(Number(l?.sortIndex)||0)||o.localeCompare(c)),a[0][0])}s(sh,"resolveProductionActionByItemHrid");function Nl(e,t,a={}){let n=typeof e=="string"?{actionHrid:e}:e??{},i=n.actionHrid??n.hrid,o=u.state.initData_actionDetailMap?.[i];if(!i||!o)return{status:"waiting",actionHrid:i,missing:["actionData"]};let r=t===void 0?El(n):Number(t),c=r===1/0||!Number.isFinite(r),l=c?1/0:Math.max(0,r),d=a.respectInventoryLimit??(t===void 0&&typeof e!="string");if(!Tl())return{status:"waiting",actionHrid:i,detail:o,count:l,infinite:c,effectiveCount:l,effectivelyInfinite:c,materialLimited:!1,missing:["playerData"],missingPrices:[],netProfitPerAction:null,profitPerHour:null,totalProfit:null,totalSeconds:null};let m=ah(i,o,a),p=Ml(i);if(!p)return{status:"waiting",actionHrid:i,detail:o,count:l,infinite:c,effectiveCount:l,effectivelyInfinite:c,materialLimited:!1,missing:["playerData"],missingPrices:[],netProfitPerAction:null,profitPerHour:null,totalProfit:null,totalSeconds:null};let b=m?.secondsPerAction??null,f=Cl(o),g=Yg(o,p),h=p.lessResource,_=1/0;for(let W of f){let K=W.count*(W.isUpgradeItem?1:1-h);K>0&&(_=Math.min(_,Math.floor(zi(W.itemHrid)/K)))}f.length||(_=1/0);let w=d&&!(c&&_===0)?Math.min(l,_):l,k=!Number.isFinite(w),C=d&&f.length>0&&Number.isFinite(_)&&_>0&&(c||_<l),x="fair",T=oh(i,o),A=b?3600/b:null;function I(W){let K=[],le=[],D=[],re=f.reduce((ke,ee)=>{let de=ee.count*(ee.isUpgradeItem?1:1-h),De=bo(ee.itemHrid,"buy",W);return De===null&&K.push(ee.itemHrid),ke+(De===null?0:de*De)},0),Ee=g.reduce((ke,ee)=>{let de=ee.count,De=Fi(ee.itemHrid,"sell",W);return De.value===null&&K.push(ee.itemHrid),!De.complete&&De.value!==null&&D.push(...De.missingItemHrids),ke+(De.value===null?0:de*De.value)},0),we=T.reduce((ke,ee)=>{let de=Fi(ee.itemHrid,"sell",W);return de.value===null&&le.push(ee.itemHrid),!de.complete&&de.value!==null&&D.push(...de.missingItemHrids),ke+(de.value===null?0:ee.count*de.value)},0),Re=0;for(let ke of p.drinks){let ee=bo(ke.itemHrid,"buy",W);ee===null&&K.push(ke.itemHrid);let de=Sl*p.concentrationMultiplier;Re+=ee===null?0:ee*de}let Ue=A?Re/A:0,Ge=Ee+we,H=K.length===0&&b!==null,ae=H?Ge-re-Ue:null,ue=ae===null||!A?null:ae*A,_e=ae===null||k?null:ae*w;return{mode:W,complete:H,materialCostPerAction:re,teaCostPerHour:Re,teaCostPerAction:Ue,primaryRevenuePerAction:Ee,byproductRevenuePerAction:we,revenuePerAction:Ge,netProfitPerAction:ae,profitPerHour:ue,totalProfit:_e,missingPrices:[...new Set(K)],unpricedByproducts:[...new Set(le)],derivedMissingPrices:[...new Set(D)]}}s(I,"calculateValuation");let q=Object.fromEntries([...nh].map(W=>[W,I(W)])),B=q[x],j=B.missingPrices,V=f.map(W=>{let K=W.count*(W.isUpgradeItem?1:1-h),le=bo(W.itemHrid,"buy",x);return{...W,effectiveCount:K,owned:zi(W.itemHrid),unitPrice:le,valuePerAction:le===null?null:K*le}}),O=g.map(W=>{let K=W.count,le=Fi(W.itemHrid,"sell",x),D=le.value;return{...W,baseCount:W.baseCount??W.count,effectiveCount:K,expectedCount:K*(k?1:w),kind:"primary",owned:zi(W.itemHrid),unitPrice:D,valueSource:le.source,derivedMissingPrices:le.missingItemHrids,valuePerAction:D===null?null:K*D}}),M=B.unpricedByproducts,L=T.map(W=>{let K=Fi(W.itemHrid,"sell",x),le=K.value;return{...W,effectiveCount:W.count,expectedCount:W.count*(k?1:w),owned:zi(W.itemHrid),unitPrice:le,valueSource:K.source,derivedMissingPrices:K.missingItemHrids,valuePerAction:le===null?null:W.count*le}}),F=p.drinks.map(W=>{let K=bo(W.itemHrid,"buy",x),le=Sl*p.concentrationMultiplier,D=K===null?null:K*le;return{...W,countPerHour:le,costPerHour:D,unitPrice:K}}),R=B.complete,te=null;if(k)te=1/0;else if(b!==null){let W=Number(a.durationPerAction);if(Number.isFinite(W)&&W>0){let K=Math.max(w>0?1:0,Math.round(w/fo(i))),le=Number(a.currentCycleRemainingSeconds);te=K>0&&Number.isFinite(le)&&le>=0?Math.min(W,le)+Math.max(0,K-1)*W:K*W}else te=w*b}let X=Number(a.now??Date.now());return{status:R?"complete":"incomplete",isPartial:R&&(M.length>0||B.derivedMissingPrices.length>0),actionHrid:i,detail:o,count:l,infinite:c,effectiveCount:w,effectivelyInfinite:k,materialLimited:C,respectsInventoryLimit:!!d,secondsPerAction:b,totalSeconds:te,finishAt:Number.isFinite(te)&&te!==null?X+te*1e3:null,inputs:V,outputs:O,byproductOutputs:L,actionsPerHour:A,baseSeconds:m?.baseSeconds??null,cycleSeconds:m?.cycleSeconds??null,efficiencyPercent:m?.efficiencyPercent??0,speedPercent:m?.speedPercent??0,timingSource:m?.timingSource??null,teaEffects:{...p,drinks:F},maxCraftable:_,valuationMode:x,valuations:q,materialCostPerAction:B.materialCostPerAction,teaCostPerHour:B.teaCostPerHour,teaCostPerAction:B.teaCostPerAction,primaryRevenuePerAction:B.primaryRevenuePerAction,byproductRevenuePerAction:B.byproductRevenuePerAction,revenuePerAction:B.revenuePerAction,netProfitPerAction:B.netProfitPerAction,profitPerHour:B.profitPerHour,totalProfit:B.totalProfit,missingPrices:j,unpricedByproducts:M,derivedMissingPrices:B.derivedMissingPrices}}s(Nl,"projectAction");function uh(e=u.state.currentActionsHridList,t={}){let a=Number(t.now??Date.now()),n=0,i=!1,o=[];for(let r of e??[]){let c=Nl(r,void 0,{...t,now:a}),l=i?null:a+n*1e3;Number.isFinite(c.totalSeconds)&&!i?n+=c.totalSeconds:i=!0,o.push({...c,action:r,startsAt:l,cumulativeFinishAt:i?null:a+n*1e3})}return{items:o,totalSeconds:i?1/0:n,finishAt:i?null:a+n*1e3,hasInfinite:i}}s(uh,"projectQueue"),Object.assign(u.api,{getActionBuffRatio:mo,getActionSpeedPercent:Il,getDrinkConcentrationMultiplier:Al,getEffectiveTeaEffects:Ml,getInventoryCount:zi,getExpectedOutputs:Vs,getDirectInputs:Cl,getActionRemainingCount:El,isPlayerProjectionDataReady:Tl,projectAction:Nl,projectQueue:uh,resolveProductionActionByItemHrid:sh});var Hl=1,Dl="MWITools_procurement_settings_v1",ch="MWITools_procurement_v1",Pl=300*1e3,lh=30*1e3,dh=25,ji=Object.freeze({badgesEnabled:!0,upgradeChainEnabled:!0,createPlansByDefault:!0,inventorySyncEnabled:!0,autoCollapseEnabled:!0,locateEnabled:!0,autoPrefillEnabled:!0,purchaseNavEnabled:!0,pricesEnabled:!0,cartTotalEnabled:!0,autoRestockEnabled:!0,safetyLevel:"95",safetyThreshold:10,guzzlingPouchLevel:-1,nextItemShortcut:null,edgeZoneWidth:10,handleY:180,drawerWidth:360}),Ll=Object.freeze({off:0,95:1.645,99:2.326,99.9:3.09}),mh=Object.freeze([0,.02,.042,.066,.092,.12,.15,.182,.216,.255,.29,.33,.372,.416,.462,.51,.56,.612,.666,.722,.78]),go=new Map,ut=new Map,ga=new Map,ai=new Map,ho=new Map,Pa="",Wi="",Vi=!1,Lt=ph(),$l=null,Gi=null;function Tn(e){return e==null?e:globalThis.structuredClone(e)}s(Tn,"clone");function aa(e,t={}){for(let a of go.get(e)??[])try{a(Tn(t))}catch(n){console.error(u.config.isZH?`[MWITools] 采购事件 ${e} 的监听器执行失败`:`[MWITools] Procurement ${e} listener failed`,n)}}s(aa,"emit");function Ol(e,t){let a=go.get(e)??new Set;return a.add(t),go.set(e,a),e==="ready"&&Vi&&globalThis.queueMicrotask(()=>t({characterId:Pa})),()=>a.delete(t)}s(Ol,"on");function ql(e,t){go.get(e)?.delete(t)}s(ql,"off");function At(e){let t=String(e??"").trim();if(!t)return"";let a=t.replace(/^#/,"").replace(/^\/items\//,"");return a?`/items/${a}`:""}s(At,"normalizeItemHrid");function ni(e){let t=Math.floor(Number(e)||0);return Math.max(0,t)}s(ni,"normalizeEnhancementLevel");function _t(e,t=0){let a=At(e);return a?`${a}#${ni(t)}`:""}s(_t,"itemKey");function Zi(e){let t=String(e).lastIndexOf("#");return{itemHrid:t>=0?e.slice(0,t):At(e),enhancementLevel:t>=0?ni(e.slice(t+1)):0}}s(Zi,"parseItemKey");function fh(){return u.api.getMarketEnvironment?.()??"production"}s(fh,"getEnvironment");function bh(e=Pa){return`${ch}:${fh()}:${e}`}s(bh,"getCharacterStorageKey");function ph(){try{let e=JSON.parse(localStorage.getItem(Dl)||"null");return{...ji,...e?.values??{}}}catch{return{...ji}}}s(ph,"loadSettings");function gh(){localStorage.setItem(Dl,JSON.stringify({version:Hl,values:Lt}))}s(gh,"saveSettings");function hh(e){let t={...ji,...e};return t.safetyLevel=Object.hasOwn(Ll,t.safetyLevel)?t.safetyLevel:"95",t.safetyThreshold=Math.max(0,Math.floor(Number(t.safetyThreshold)||0)),t.guzzlingPouchLevel=Math.min(20,Math.max(-1,Math.floor(Number(t.guzzlingPouchLevel)||0))),t.edgeZoneWidth=Math.min(32,Math.max(0,Math.floor(Number(t.edgeZoneWidth)||0))),t.handleY=Math.max(8,Number(t.handleY)||180),t.drawerWidth=Math.min(560,Math.max(300,Number(t.drawerWidth)||360)),t}s(hh,"normalizeSettings");function _h(){return Tn(Lt)}s(_h,"getSettings");function yh(e,t){if(!Object.hasOwn(ji,e))return!1;let a=Lt[e];return Lt=hh({...Lt,[e]:t}),gh(),aa("settings:change",{id:e,value:Lt[e],previous:a}),!0}s(yh,"setSetting");function wh(){return{version:Hl,cart:[...ut.values()],plans:[...ga.values()]}}s(wh,"serializeData");function Gs(){Wi&&localStorage.setItem(Wi,JSON.stringify(wh()))}s(Gs,"persistData");function Rl(e){if(Pa=String(e??""),Wi=Pa?bh(Pa):"",ut.clear(),ga.clear(),Wi)try{let t=JSON.parse(localStorage.getItem(Wi)||"null");for(let a of t?.cart??[]){let n=_t(a.itemHrid??a.itemId,a.enhancementLevel);n&&ut.set(n,{...a,itemHrid:Zi(n).itemHrid,enhancementLevel:Zi(n).enhancementLevel,quantity:Math.max(0,Math.ceil(Number(a.quantity)||0))})}for(let a of t?.plans??[])a?.id&&ga.set(a.id,a)}catch(t){console.warn(u.config.isZH?"[MWITools] 无法加载采购数据":"[MWITools] Could not load procurement data",t)}vh(u.state.initData_characterItems??[]),e0(),Vi=!!Pa,aa("character:change",{characterId:Pa}),aa("cart:change",{items:wo()}),aa("plan:change",{plans:Qs()}),Vi&&aa("ready",{characterId:Pa})}s(Rl,"loadCharacterData");function ii(e){let t=At(e);return en(t,{fallback:t})}s(ii,"resolveItemName");function Ui(e){let t=String(e??"").trim();return t?so(t,{fallback:t}):""}s(Ui,"resolveActionName");function Bl(e){return String(e?.hash??e?.id??`${e?.itemLocationHrid??""}:${_t(e?.itemHrid,e?.enhancementLevel)}`)}s(Bl,"inventoryEntryKey");function vh(e){ai.clear();for(let t of e??[])t?.itemHrid&&ai.set(Bl(t),{...t})}s(vh,"rebuildInventorySnapshot");function Zs(){let e=new Map;for(let t of ai.values()){if(t.itemLocationHrid&&t.itemLocationHrid!=="/item_locations/inventory")continue;let a=_t(t.itemHrid,t.enhancementLevel);e.set(a,(e.get(a)??0)+Math.max(0,Number(t.count)||0))}return e}s(Zs,"inventoryCounts");function La(e,t=0){return Zs().get(_t(e,t))??0}s(La,"getInventoryCount");function Us(e,t=0,a=null,n=null){let i=_t(e,t),o=[],r=0;for(let c of ga.values()){if(c.id===a||c.status==="completed"||n?.has?.(c.actionHrid))continue;let l=Math.max(0,Number(c.materials?.[i])||0);l&&(r+=l,o.push({id:c.id,name:Ui(c.actionHrid)||c.name,quantity:l}))}return{total:r,byPlan:o}}s(Us,"getLockedDetails");function xh(e,t=0,a=null){let n=La(e,t);return Math.max(0,n-Us(e,t,a).total)}s(xh,"getEffectiveInventory");function Ks(e){return At(e)==="/items/coin"}s(Ks,"isCoin");function kh(){return Ll[Lt.safetyLevel]??0}s(kh,"getSafetyScore");function zl(e,t,a,n={}){let i=Math.max(0,Number(e)||0),o=Math.max(0,Math.ceil(Number(t)||0)),r=i*o,c=Math.min(1,Math.max(0,Number(a)||0)),l=i*(1-c),d=l*o,m=n.threshold??Lt.safetyThreshold,p=o>m&&n.bufferable!==!1?kh():0,b=l-Math.floor(l),f=Math.sqrt(o*b*(1-b)),g=o*Math.ceil(l),h=Math.min(r,g,Math.ceil(d+p*f-1e-9));return{raw:r,expected:d,buffer:p*f,suggested:h}}s(zl,"suggestedMaterialCount");function Sh(){if(Lt.guzzlingPouchLevel>=0)return Lt.guzzlingPouchLevel;let e=-1;for(let t of ai.values())At(t.itemHrid)==="/items/guzzling_pouch"&&t.itemLocationHrid!=="/item_locations/inventory"&&(e=Math.max(e,ni(t.enhancementLevel)));return e}s(Sh,"getGuzzlingPouchLevel");function Ch(){let e=Sh();if(e<0)return 1;let t=u.state.initData_itemDetailMap?.["/items/guzzling_pouch"],a=Number(t?.equipmentDetail?.noncombatStats?.drinkConcentration??.1),n=Number(t?.equipmentDetail?.noncombatEnhancementBonuses?.drinkConcentration??a);return 1+a+n*(mh[e]??0)}s(Ch,"getDrinkConcentration");function Ah(e){let t=u.api.getTeaBuffsByActionHrid?.(e)??{},a=Math.max(0,Number(t.lessResource)||0)/100;return Math.min(1,a*Ch())}s(Ah,"getTeaSavings");function Mh(e,t,a,n={}){let i=At(e.itemHrid),o=ni(e.enhancementLevel),r=Math.max(0,Number(e.count)||0),c=!Ks(i)&&!n.isUpgradeItem&&n.bufferable!==!1,l=zl(r,a,c?Ah(t):0,{bufferable:c}),d=La(i,o),m=Us(i,o,n.excludePlanId,n.excludeActionHrids),p=Math.max(0,d-m.total),b=ut.get(_t(i,o))?.quantity??0;return{itemHrid:i,enhancementLevel:o,name:ii(i),...l,owned:d,locked:m.total,lockedByPlans:m.byPlan,effectiveOwned:p,cartQuantity:b,shortage:Math.max(0,l.suggested-p),addableShortage:Math.max(0,l.suggested-p-b),purchasable:!Ks(i)}}s(Mh,"materialRequirement");function _o(e,t,a={}){let n=u.state.initData_actionDetailMap?.[e],i=Math.max(0,Math.ceil(Number(t)||0));if(!n||!i)return{status:"waiting",actionHrid:e,count:i,materials:[]};let o=u.api.getDirectInputs?.(n)??[],r={...a,excludeActionHrids:a.excludeActionHrids??new Set([e])},c=o.map(l=>Mh(l,e,i,{...r,isUpgradeItem:At(l.itemHrid)===At(n.upgradeItemHrid)}));return{status:"complete",actionHrid:e,count:i,detail:n,materials:c,missingTypes:c.filter(l=>l.purchasable&&l.shortage>0).length,missingQuantity:c.reduce((l,d)=>l+(d.purchasable?d.shortage:0),0)}}s(_o,"calculateRequirements");function Xs(e){let t=At(e),a=u.state.initData_actionDetailMap??{};if($l!==a||!Gi){$l=a,Gi=new Map;for(let[n,i]of Object.entries(a))for(let o of u.api.getExpectedOutputs?.(i)??[]){let r=At(o.itemHrid);!r||Gi.has(r)||Gi.set(r,{actionHrid:n,detail:i,outputCount:Number(o.count)||1})}}return Gi.get(t)??null}s(Xs,"getProducerAction");function yo(e,t){let a=_t(t.itemHrid,t.enhancementLevel),n=e.get(a);if(!n){e.set(a,{...t});return}let i=n.suggested+t.suggested,o=n.owned,r=n.locked,c=Math.max(0,o-r);e.set(a,{...n,raw:n.raw+t.raw,expected:n.expected+t.expected,buffer:n.buffer+t.buffer,suggested:i,shortage:Math.max(0,i-c),addableShortage:Math.max(0,i-c-n.cartQuantity)})}s(yo,"mergeMaterial");function Js(e,t,a={}){let n=[],i=new Map,o=new Set,r=!1,c=!1,l={...a,excludeActionHrids:a.excludeActionHrids??new Set([e])},d=s((m,p,b)=>{if(b>=dh){c=!0;return}if(o.has(m)){r=!0;return}let f=u.state.initData_actionDetailMap?.[m];if(!f)return;o.add(m);let g=_o(m,p,l),h={actionHrid:m,name:Ui(m),count:p,depth:b,materials:g.materials};n.push(h);let _=At(f.upgradeItemHrid);for(let y of g.materials)_&&y.itemHrid===_||yo(i,y);if(_){let y=Xs(_);if(y)d(y.actionHrid,Math.ceil(p/y.outputCount),b+1);else{let w=g.materials.find(k=>k.itemHrid===_);w&&yo(i,w)}}o.delete(m)},"visit");return d(e,Math.max(0,Math.ceil(Number(t)||0)),0),{status:n.length?"complete":"waiting",stages:n,leaves:[...i.values()],cycle:r,truncated:c}}s(Js,"calculateUpgradeChain");function Th(e,t){let a=new Set(t??[]),n=new Map;for(let i of e?.stages??[]){if(!a.has(i.actionHrid))continue;let o=u.state.initData_actionDetailMap?.[i.actionHrid],r=At(o?.upgradeItemHrid),c=r?Xs(r):null;for(let l of i.materials??[])r&&l.itemHrid===r&&c&&a.has(c.actionHrid)||yo(n,l)}return[...n.values()]}s(Th,"selectUpgradeChainMaterials");function wo(){return Tn([...ut.values()].map(e=>({...e,name:ii(e.itemHrid)||e.name})))}s(wo,"getCartItems");function Fl(e,t=0){let a=ut.get(_t(e,t));return Tn(a?{...a,name:ii(a.itemHrid)||a.name}:null)}s(Fl,"getCartItem");function En(){Gs(),aa("cart:change",{items:wo()})}s(En,"saveCartAndEmit");function Ys(e){let t=Array.isArray(e)?e:[e],a=0,n=0;for(let i of t){let o=At(i?.itemHrid??i?.itemId),r=ni(i?.enhancementLevel),c=Math.ceil(Number(i?.quantity)||0);if(!o||c<=0||Ks(o)){n+=1;continue}let l=_t(o,r),d=ut.get(l);ut.set(l,{itemHrid:o,enhancementLevel:r,name:i.name||d?.name||ii(o),quantity:(d?.quantity??0)+c,starred:!!(d?.starred??i.starred),threshold:d?.threshold??i.threshold??null,baselineStock:La(o,r),source:i.source??d?.source??"manual",updatedAt:new Date().toISOString(),manualOverrideUntil:d?.manualOverrideUntil??0}),a+=1}return a&&En(),{ok:a>0,added:a,skipped:n}}s(Ys,"addToCart");function Eh(e,t="material"){return Ys((e??[]).filter(a=>a.purchasable&&a.addableShortage>0).map(a=>({itemHrid:a.itemHrid,enhancementLevel:a.enhancementLevel,name:a.name,quantity:a.addableShortage,source:t})))}s(Eh,"addRequirementsToCart");function Ih(e){let t=new Map;for(let a of e??[])for(let n of a??[])yo(t,n);return[...t.values()]}s(Ih,"aggregateRequirements");function jl(e,t,a=0){let n=_t(e,a),i=ut.get(n);if(!i)return{ok:!1};let o=Math.max(0,Math.ceil(Number(t)||0));return!o&&!i.starred?ut.delete(n):(i.quantity=o,i.baselineStock=La(i.itemHrid,i.enhancementLevel),i.manualOverrideUntil=Date.now()+Pl,i.updatedAt=new Date().toISOString()),En(),{ok:!0}}s(jl,"setCartItemQuantity");function Nh(e,t,a){let n=ut.get(_t(e,t));return n?(Object.assign(n,a,{updatedAt:new Date().toISOString()}),Object.hasOwn(a,"quantity")&&(n.quantity=Math.max(0,Math.ceil(Number(a.quantity)||0)),n.manualOverrideUntil=Date.now()+Pl),Object.hasOwn(a,"threshold")&&(n.threshold=a.threshold==null?null:Math.max(0,Math.ceil(Number(a.threshold)||0))),En(),!0):!1}s(Nh,"updateCartItem");function Wl(e,t=0){let a=ut.delete(_t(e,t));return a&&En(),{ok:a}}s(Wl,"removeFromCart");function Vl({includeStarred:e=!1}={}){for(let[t,a]of ut)(e||!a.starred)&&ut.delete(t);return En(),{ok:!0}}s(Vl,"clearCart");function Gl(e,t,a,n={}){let i=_t(e,t),o=ut.get(i),r=Math.max(0,Math.floor(Number(a)||0));if(!o||!r||!Lt.inventorySyncEnabled)return!1;let c=o.quantity;o.quantity=Math.max(0,o.quantity-r),o.baselineStock=La(o.itemHrid,o.enhancementLevel),o.updatedAt=new Date().toISOString();let l=!1;return o.quantity<=0&&(l=!0,o.starred?o.quantity=0:ut.delete(i)),En(),l&&(aa("item:fulfilled",{item:Tn(o),source:n.source}),[...ut.values()].some(d=>d.quantity>0)||aa("all:fulfilled",{})),o.quantity!==c||l}s(Gl,"applyAcquisition");function Zl(e,t,a=0){let n=_t(e,a),i=Math.max(0,Math.floor(Number(t)||0));if(!i)return!1;let o=Gl(e,a,i,{source:"market-confirmation"});return o&&ho.set(n,{quantity:i,expiresAt:Date.now()+lh}),o}s(Zl,"confirmMarketPurchase");function Hh(e,t){let a=ho.get(e);if(!a||Date.now()>a.expiresAt)return ho.delete(e),t;let n=Math.max(0,t-a.quantity);return a.quantity=Math.max(0,a.quantity-t),a.quantity||ho.delete(e),n}s(Hh,"consumePurchaseSuppression");function Ul(e){let t=Zs();for(let i of e??[]){if(!i?.itemHrid)continue;let o=Bl(i);Number(i.count)<=0?ai.delete(o):ai.set(o,{...i})}let a=Zs(),n=new Set([...t.keys(),...a.keys()]);for(let i of n){let o=(a.get(i)??0)-(t.get(i)??0),r=ut.get(i);if(r&&(r.baselineStock=a.get(i)??0),o>0){let c=Hh(i,o);if(c>0){let l=Zi(i);Gl(l.itemHrid,l.enhancementLevel,c,{source:"inventory"})}}}Kl(),e0(),Gs(),aa("inventory:change",{changes:[...n].map(i=>({...Zi(i),before:t.get(i)??0,after:a.get(i)??0,delta:(a.get(i)??0)-(t.get(i)??0)}))})}s(Ul,"applyInventoryUpdates");function Kl(){if(!Lt.autoRestockEnabled)return;let e=Date.now(),t=!1;for(let a of ut.values()){if(!a.starred||!a.threshold||a.manualOverrideUntil>e)continue;let n=La(a.itemHrid,a.enhancementLevel),i=Math.max(0,a.threshold-n);i!==a.quantity&&(a.quantity=i,a.baselineStock=n,t=!0)}t&&En()}s(Kl,"applyRestockThresholds");function Qs(){return e0(),Tn([...ga.values()].map(e=>({...e,name:Ui(e.actionHrid)||e.name})))}s(Qs,"getPlans");function vo(){Gs(),aa("plan:change",{plans:Qs()})}s(vo,"savePlansAndEmit");function Dh(e,t,a=null){let n=u.state.initData_actionDetailMap?.[e];if(!n)return null;let i=Math.max(1,Math.ceil(Number(t)||1)),o=a??(Lt.upgradeChainEnabled?Js(e,i).leaves:_o(e,i).materials),r=Object.fromEntries(o.filter(m=>m.purchasable).map(m=>[_t(m.itemHrid,m.enhancementLevel),m.suggested])),c=u.api.getExpectedOutputs?.(n)?.[0]??null,l=globalThis.crypto?.randomUUID?.()??`plan-${Date.now()}-${Math.random()}`,d={id:l,actionHrid:e,name:n.name??e.split("/").at(-1),targetCount:i,materials:r,outputItemHrid:c?.itemHrid??null,outputPerAction:Number(c?.count)||0,baselineOutput:c?La(c.itemHrid,0):0,onlineProgress:0,progress:0,status:"active",createdAt:new Date().toISOString(),updatedAt:new Date().toISOString()};return ga.set(l,d),vo(),Tn(d)}s(Dh,"createPlan");function e0(){for(let e of ga.values()){if(e.status==="completed")continue;let t=e.outputItemHrid&&e.outputPerAction>0?Math.floor(Math.max(0,La(e.outputItemHrid,0)-e.baselineOutput)/e.outputPerAction):0;e.progress=Math.min(e.targetCount,Math.max(e.progress??0,e.onlineProgress??0,t))}}s(e0,"refreshPlanProgress");function Xl(e){let t=e?.endCharacterAction??e?.characterAction??e,a=t?.actionHrid??t?.hrid??u.state.currentActionsHridList?.find(i=>i.id===t?.id)?.actionHrid;if(!a)return;let n=!1;for(let i of ga.values())i.status==="completed"||i.actionHrid!==a||(i.onlineProgress=Math.min(i.targetCount,(i.onlineProgress??0)+1),i.progress=Math.max(i.progress??0,i.onlineProgress),i.updatedAt=new Date().toISOString(),n=!0);n&&vo()}s(Xl,"recordActionCompletion");function Ph(e,t){let a=ga.get(e);if(!a)return!1;if(Object.hasOwn(t,"targetCount")){a.targetCount=Math.max(1,Math.ceil(Number(t.targetCount)||1));let n=Lt.upgradeChainEnabled?Js(a.actionHrid,a.targetCount).leaves:_o(a.actionHrid,a.targetCount).materials;a.materials=Object.fromEntries(n.filter(i=>i.purchasable).map(i=>[_t(i.itemHrid,i.enhancementLevel),i.suggested]))}return(t.status==="completed"||t.status==="active")&&(a.status=t.status),a.updatedAt=new Date().toISOString(),vo(),!0}s(Ph,"updatePlan");function Lh(e){let t=ga.delete(e);return t&&vo(),t}s(Lh,"removePlan");function Jl(e){if(e?.type!=="info"||e?.message!=="infoNotification.buyOrderCompleted")return null;let t=new Map((Array.isArray(e.variables)?e.variables:[]).filter(a=>a?.name).map(a=>[a.name,a.data]));return{itemHrid:At(t.get("itemHrid")),quantity:Math.max(0,Math.floor(Number(t.get("count"))||0)),enhancementLevel:ni(t.get("enhancementLevel"))}}s(Jl,"parsePurchaseConfirmation");function $h(){u.onMessage("init_character_data",()=>{Rl(u.state.currentCharacterId)}),u.onMessage("items_updated",e=>{Ul(e.endCharacterItems??[])}),u.onMessage("action_completed",Xl),u.onMessage("info",e=>{let t=Jl(e);t?.itemHrid&&t.quantity&&Zl(t.itemHrid,t.quantity,t.enhancementLevel)})}s($h,"installMessageHandlers");function Oh(){let e=globalThis.unsafeWindow??globalThis.window??globalThis,t=e.MWITools??{},a={version:"1.0.0",apiVersion:1,get ready(){return Vi},getCartItems:wo,getCartItem:Fl,hasCartItem:s((n,i=0)=>ut.has(_t(n,i)),"hasCartItem"),getCartCount:s(()=>ut.size,"getCartCount"),addToCart:Ys,setCartItemQuantity:jl,removeFromCart:Wl,clearCart:Vl,resolveItemName:ii,resolveActionName:Ui,normalizeItemId:s(n=>At(n).replace("/items/",""),"normalizeItemId"),openMarketplace:s((n,i=0)=>u.api.openProcurementMarketplace?.(n,i)??!1,"openMarketplace"),on:Ol,off:ql};return t.shopping=a,e.MWITools=t,a}s(Oh,"exposePublicApi"),$h();var qh=Oh();Object.assign(u.api,{procurement:{defaults:ji,on:Ol,off:ql,emit:aa,get ready(){return Vi},get activeCharacterId(){return Pa},normalizeItemHrid:At,itemKey:_t,parseItemKey:Zi,resolveItemName:ii,resolveActionName:Ui,getSettings:_h,setSetting:yh,loadCharacterData:Rl,getInventoryCount:La,getEffectiveInventory:xh,getLockedDetails:Us,suggestedMaterialCount:zl,calculateRequirements:_o,getProducerAction:Xs,calculateUpgradeChain:Js,selectUpgradeChainMaterials:Th,aggregateRequirements:Ih,getCartItems:wo,getCartItem:Fl,addToCart:Ys,addRequirementsToCart:Eh,setCartItemQuantity:jl,updateCartItem:Nh,removeFromCart:Wl,clearCart:Vl,getPlans:Qs,createPlan:Dh,updatePlan:Ph,removePlan:Lh,confirmMarketPurchase:Zl,applyInventoryUpdates:Ul,applyRestockThresholds:Kl,recordActionCompletion:Xl,parsePurchaseConfirmation:Jl,publicApi:qh}});var Rh=50;function Ut(e){let t=Number(e);return Number.isFinite(t)&&t>0?t:0}s(Ut,"positiveNumber");function jt(e){return u.api.procurement?.normalizeItemHrid?.(e)??String(e??"")}s(jt,"normalizeItemHrid");function Yl(e){let t=u.api.getExpectedOutputs?.(e)?.[0],a=jt(t?.itemHrid);return a?{itemHrid:a,count:Ut(t?.count)||1}:null}s(Yl,"primaryOutput");function t0(){return Object.entries(u.state.initData_actionDetailMap??{})}s(t0,"actionEntries");function xo(e){let t=jt(e);for(let[a,n]of t0()){if(!n?.upgradeItemHrid)continue;let i=Yl(n);if(i?.itemHrid===t)return{actionHrid:n.hrid??a,detail:n,output:i,inputHrid:jt(n.upgradeItemHrid)}}return null}s(xo,"findUpgradeActionToItem");function Ql(e){let t=jt(e);for(let[a,n]of t0()){if(n?.upgradeItemHrid)continue;let i=Yl(n);if(i?.itemHrid===t)return{actionHrid:n.hrid??a,detail:n,output:i}}return null}s(Ql,"findBaseActionForItem");function Bh(e,t){let a=jt(t);return(u.api.getDirectInputs?.(e)??[]).reduce((n,i)=>jt(i?.itemHrid)===a?n+Ut(i?.count):n,0)}s(Bh,"inputCountFor");function ed(e){return Array.isArray(e)?e:e?.itemHrid||e?.hrid?[e]:Object.entries(e??{}).map(([t,a])=>({itemHrid:t,count:a?.count??a}))}s(ed,"normalizeRows");function zh(e){let t=e?.itemRewards??e?.rewards??e?.rewardItems;if(t)return ed(t);let a=e?.itemHrid??e?.rewardItemHrid??e?.item?.itemHrid;return a?[{itemHrid:a,count:e?.outputCount??e?.itemCount??e?.rewardCount??1}]:[]}s(zh,"shopRewards");function a0(e){let t=jt(e),a=null;for(let[n,i]of Object.entries(u.state.initData_shopItemDetailMap??{})){let o=zh(i).reduce((d,m)=>jt(m?.itemHrid??m?.hrid)===t?d+Ut(m?.count??1):d,0);if(!o)continue;let r=ed(i?.costs??i?.costItems??i?.cost).filter(d=>Ut(d?.count)>0);if(!r.length||r.some(d=>jt(d?.itemHrid??d?.hrid)!=="/items/coin"))continue;let l=r.reduce((d,m)=>d+Ut(m?.count),0)/o;!l||a&&a.unitPrice<=l||(a={shopHrid:i?.hrid??i?.shopItemHrid??n,itemHrid:t,rewardCount:o,unitPrice:l,detail:i})}return a}s(a0,"findCoinShopOffer");function td(e){let t=[],a=new Set,n=jt(e),i=!1,o=!1;for(;n;){if(a.has(n)){i=!0;break}if(t.length>=Rh){o=!0;break}a.add(n);let r=xo(n);if(!r)break;t.unshift({kind:"upgrade",actionHrid:r.actionHrid,outputHrid:n,outputCount:r.output.count,inputHrid:r.inputHrid,inputCount:Bh(r.detail,r.inputHrid)||1,detail:r.detail}),n=r.inputHrid}if(n&&t.length){let r=Ql(n);if(r)t.unshift({kind:"craft",actionHrid:r.actionHrid,outputHrid:n,outputCount:r.output.count,inputHrid:null,inputCount:0,detail:r.detail});else{let c=a0(n);c&&t.unshift({kind:"shop",actionHrid:null,outputHrid:n,outputCount:1,inputHrid:null,inputCount:0,shopHrid:c.shopHrid,shopOffer:c,detail:null})}}return{steps:t,cycle:i,truncated:o}}s(td,"buildTrainChain");function ad(e,t){return e instanceof Map?Ut(e.get(t)):Ut(e?.[t])}s(ad,"demandCount");function nd(e,t={}){let a=u.api.procurement,n=e.steps.map(o=>({...o,count:0})),i=0;for(let o=n.length-1;o>=0;o-=1){let r=n[o],c=Ut(a?.getInventoryCount?.(r.outputHrid,0)),l=Math.max(0,i-c),d=Math.ceil(ad(t,r.outputHrid));r.requiredByAbove=i,r.inventory=c,r.shortageUnits=l,r.count=r.kind==="shop"?Math.max(d,Math.ceil(l)):Math.max(d,Math.ceil(l/(Ut(r.outputCount)||1))),r.plannedOutput=r.count*(Ut(r.outputCount)||1),i=r.inputHrid?r.count*(Ut(r.inputCount)||1):0}return{...e,steps:n}}s(nd,"planTrainCounts");function id(e,t={}){let a=e.steps[0];if(a?.kind!=="craft"||ad(t,a.outputHrid)>0||a.count<=0)return e;let n=a0(a.outputHrid);if(!n)return e;let i=Ut(u.api.getAskPrice?.(a.outputHrid,0));return i&&n.unitPrice>i?e:{...e,steps:[{...a,kind:"shop",actionHrid:null,outputCount:1,count:Math.ceil(a.shortageUnits),plannedOutput:Math.ceil(a.shortageUnits),shopHrid:n.shopHrid,shopOffer:n,detail:null},...e.steps.slice(1)]}}s(id,"applyShopPreference");function Fh(e,t={},a={}){let n=td(e),i=nd(n,t);return a.preferShop===!1?i:id(i,t)}s(Fh,"createTrainPlan");function jh(e){let t=jt(e),a=new Set;for(;t&&!a.has(t);){a.add(t);let n=xo(t);if(!n)break;t=n.inputHrid}return t}s(jh,"trainChainRoot");function Wh(e){let t=jt(e),a=new Set,n=0;for(;t&&!a.has(t);){a.add(t);let i=xo(t);if(!i)break;t=i.inputHrid,n+=1}return n||(t0().some(([,i])=>jt(i?.upgradeItemHrid)===t)?0:-1)}s(Wh,"trainChainDepth");function Vh(e){let t=String(e??"").trim().toLowerCase().match(/^(\d+(?:\.\d+)?)([kmb])?$/);if(!t)return null;let a={k:1e3,m:1e6,b:1e9}[t[2]]??1,n=Math.floor(Number(t[1])*a);return Number.isFinite(n)&&n>0?n:null}s(Vh,"parseTrainCount");var Gh={findUpgradeActionToItem:xo,findBaseActionForItem:Ql,findCoinShopOffer:a0,buildTrainChain:td,planTrainCounts:nd,applyShopPreference:id,createTrainPlan:Fh,trainChainRoot:jh,trainChainDepth:Wh,parseTrainCount:Vh};u.api.trainPlanning=Gh;var Zh="MWIToolsHistory",ri="xpSnapshots",rd="MWITools_xp_history_v1",Uh=720*60*60*1e3,In=3600*1e3;function od(){return globalThis.indexedDB?new Promise(e=>{let t=globalThis.indexedDB.open(Zh,1);t.onupgradeneeded=()=>{let a=t.result;a.objectStoreNames.contains(ri)||a.createObjectStore(ri,{keyPath:"key",autoIncrement:!0}).createIndex("objectKey","objectKey",{unique:!1})},t.onsuccess=()=>e(t.result),t.onerror=()=>e(null)}):Promise.resolve(null)}s(od,"openDatabase");function sd(){try{let e=JSON.parse(globalThis.localStorage?.getItem(rd)||"[]");return Array.isArray(e)?e:[]}catch{return[]}}s(sd,"readFallback");function Kh(e){try{globalThis.localStorage?.setItem(rd,JSON.stringify(e))}catch(t){console.warn(u.config.isZH?"[MWITools] 无法保存经验历史备用数据":"[MWITools] Unable to save XP history fallback",t)}}s(Kh,"writeFallback");async function Xh(e){let t=await od();return t?new Promise(a=>{let i=t.transaction(ri,"readonly").objectStore(ri).index("objectKey").getAll(e);i.onsuccess=()=>a(i.result??[]),i.onerror=()=>a(null)}):null}s(Xh,"readIndexed");async function Jh(e,t){let a=await od();return a?new Promise(n=>{let i=a.transaction(ri,"readwrite"),o=i.objectStore(ri),r=o.index("objectKey").openKeyCursor(globalThis.IDBKeyRange.only(e));r.onsuccess=()=>{let c=r.result;if(c){o.delete(c.primaryKey),c.continue();return}for(let l of t)o.add({...l,objectKey:e})},i.oncomplete=()=>n(!0),i.onerror=()=>n(!1)}):!1}s(Jh,"replaceIndexed");async function ud(e){let t=await Xh(e);return t!==null?t.sort((a,n)=>a.at-n.at):sd().filter(a=>a.objectKey===e).sort((a,n)=>a.at-n.at)}s(ud,"getXpHistory");function cd(e,t=Date.now()){let a=t-Uh,n=t-24*In,i=new Map,o=[];for(let r of e)r.at<a||(r.at>=n?o.push(r):i.set(Math.floor(r.at/In),r));return[...i.values(),...o].sort((r,c)=>r.at-c.at)}s(cd,"compactHistory");async function Yh(e,t){if(await Jh(e,t))return;let a=sd().filter(n=>n.objectKey!==e);Kh([...a,...t.map(n=>({...n,objectKey:e}))])}s(Yh,"saveHistory");async function Qh(e,t,a=Date.now()){let n=Number(t),i=Number(a);if(!e||!Number.isFinite(n)||!Number.isFinite(i))return!1;let o=await ud(e),r=o.at(-1);return r&&(r.xp===n||r.at>=i||r.xp>n)?!1:(o.push({xp:n,at:i}),await Yh(e,cd(o,i)),!0)}s(Qh,"recordXpSnapshot");function ld(e,t,a,n){let i=e.at(-1);if(!i)return null;let r=e.filter(c=>c.at>=n-t&&c.at<=i.at)[0];return!r||i.at-r.at<a||i.xp<r.xp?null:(i.xp-r.xp)/(i.at-r.at)*In}s(ld,"calculateWindowRate");function e1(e,t=Date.now()){let a=[...e].sort((o,r)=>o.at-r.at),n=a.at(-1),i=null;return n&&(i=[...a].reverse().find(o=>n.at-o.at>=300*1e3&&o.xp<=n.xp)),{recent:n&&i?(n.xp-i.xp)/(n.at-i.at)*In:null,hour:ld(a,In,1800*1e3,t),day:ld(a,24*In,12*In,t),lastSampleAt:n?.at??null,points:a}}s(e1,"calculateXpRates"),Object.assign(u.api,{getXpHistory:ud,compactXpHistory:cd,recordXpSnapshot:Qh,calculateXpRates:e1});var n0=new Set(["/items/chimerical_token","/items/sinister_token","/items/enchanted_token","/items/pirate_token","/items/task_token","/items/labyrinth_token"]),t1=.2,a1=12,ha=new Map,Ki=new Map,ko=null;function ze(e){let t=Number(e);return Number.isFinite(t)&&t>0?t:0}s(ze,"positiveNumber");function $a(e){return Array.isArray(e)?e.map((t,a)=>[t?.hrid??t?.itemHrid??t?.guildBuffHrid??String(a),t]):Object.entries(e??{})}s($a,"entriesOfMap");function dd(){ha.clear(),Ki.clear(),ko=null}s(dd,"invalidateAssetValueCache");function Kt(e){return u.state.initData_itemDetailMap?.[e]??null}s(Kt,"getItemDetails");function md(e){return!!(u.settings.get?.(e)??u.settings.settingsMap?.[e]?.isTrue)}s(md,"settingEnabled");function n1(){return md("includeCowbellsInAssets")}s(n1,"shouldIncludeCowbellsInAssets");function i0(e,t=""){if(t==="/item_locations/back"||/(?:^|_)cape(?:_refined)?$/.test(String(e).split("/").at(-1)))return!0;let a=Kt(e),n=a?.equipmentDetail;return[a?.itemLocationHrid,a?.equipmentSlotHrid,a?.slotHrid,n?.itemLocationHrid,n?.equipmentSlotHrid,n?.slotHrid,n?.equipmentTypeHrid,n?.typeHrid,n?.type].some(i=>/(?:^|[/_])back(?:$|[/_])/.test(String(i??"")))}s(i0,"isBackEquipment");function fd(e){return!!Kt(e)?.equipmentDetail}s(fd,"isEquipment");function r0(){if(ko)return ko;let e=new Set;for(let[,t]of $a(u.state.initData_itemDetailMap))for(let a of t?.guildCreditConversions??[])a?.creditItemHrid&&e.add(a.creditItemHrid);return ko=e,e}s(r0,"getGuildCreditHrids");function i1(e){return e==="/items/cowbell"||e==="/items/guild_token"||r0().has(e)}s(i1,"isNonTradableTokenAsset");function r1(e){let t=Number.POSITIVE_INFINITY;for(let[a,n]of $a(u.state.initData_itemDetailMap)){let i=n?.hrid??n?.itemHrid??a;if(!i||i==="/items/guild_token")continue;let o=u.api.getFairValue(i,0);if(o>0)for(let r of n?.guildCreditConversions??[]){if(r?.creditItemHrid!==e)continue;let c=ze(r.itemCount),l=ze(r.creditCount);!c||!l||(t=Math.min(t,o*c/l))}}return Number.isFinite(t)?t:0}s(r1,"getGuildCreditValue");function o1(e){let t=Kt("/items/guild_token"),a=0;for(let n of t?.guildCreditConversions??[]){let i=n?.creditItemHrid,o=ze(n?.guildTokenCount??n?.itemCount),r=ze(n?.creditCount);if(!i||!o||!r)continue;let c=tn(i,0,e);c>0&&(a=Math.max(a,c*r/o))}return a}s(o1,"getGuildTokenValue");function Xi(e){let t=u.state.initData_openableLootDropMap,a=t instanceof Map?t.get(e):t?.[e];return Array.isArray(a)?a:a?.drops??a?.dropTable??a?.items??[]}s(Xi,"getDropRecords");function s1(e,t){let a=Xi(e);if(!Array.isArray(a)||!a.length)return 0;let n=0;for(let r of a){let c=r?.itemHrid??r?.hrid;if(!c)continue;let l=Array.isArray(r.dropRate)?r.dropRate[0]:r.dropRate,d=Number.isFinite(Number(l))?Math.max(0,Number(l)):1,m=Number(r.minCount??r.count??1),p=Number(r.maxCount??r.count??m);if(!Number.isFinite(m)||!Number.isFinite(p))continue;let b=d*(m+p)*.5,f=tn(c,r.enhancementLevel??0,t);n+=b*f}let i=Kt(e)?.openKeyItemHrid;if(!i)return n;let o=vd(i,0,t);return o>0?Math.max(0,n-o):0}s(s1,"getOpenableValue");function bd(e){return!!Kt(e)?.scrollDetail?.personalBuffTypeHrid}s(bd,"isPersonalBuffScroll");function So(e){let t=e?.costs??e?.costItems??e?.cost;return Array.isArray(t)?t:t?.itemHrid||t?.hrid?[t]:Object.entries(t??{}).map(([a,n])=>({itemHrid:a,count:n?.count??n}))}s(So,"normalizeCostRecords");function Co(e){let t=e?.itemRewards??e?.rewards??e?.rewardItems;if(Array.isArray(t))return t;if(t?.itemHrid||t?.hrid)return[t];let a=e?.itemHrid??e?.rewardItemHrid??e?.item?.itemHrid??u.state.itemEnNameToHridMap?.[e?.name];return a?[{itemHrid:a,count:e?.outputCount??e?.itemCount??e?.rewardCount??1,enhancementLevel:e?.enhancementLevel??0}]:[]}s(Co,"normalizeRewardRecords");function Ao(){return[u.state.initData_shopItemDetailMap,u.state.initData_taskShopItemDetailMap,u.state.initData_labyrinthShopItemDetailMap].flatMap(e=>$a(e).map(([,t])=>t))}s(Ao,"getShopDetails");function u1(e={}){let t=u.settings.settingsMap??{};return{sellAtAsk:!!t.lootSellAtAsk?.isTrue,buyAtAsk:t.lootBuyAtAsk?.isTrue!==!1,fromFragments:!!t.lootKeyFromFragments?.isTrue,...e}}s(u1,"getLootConfig");function pd(e,t,a){if(e==="/items/coin")return 1;let n=ze(a?u.api.getAskPrice?.(e,t):u.api.getBidPrice?.(e,t));if(!(n>0))return 0;let i=Number(u.api.getMarketTaxRate?.(e))||0;return n*Math.max(0,1-i)}s(pd,"lootSaleValue");function o0(e,t,a){return e==="/items/coin"?1:ze(a?u.api.getAskPrice?.(e,t):u.api.getBidPrice?.(e,t))}s(o0,"lootPurchaseValue");function gd(e,t=0){return`${e}:${Number(t)||0}`}s(gd,"lootDropIdentity");function hd(e){return Xi(e).flatMap(t=>{let a=t?.itemHrid??t?.hrid;if(!a)return[];let n=Array.isArray(t.dropRate)?t.dropRate[0]:t.dropRate,i=Number.isFinite(Number(n))?Math.max(0,Number(n)):1,o=Number(t.minCount??t.count??1),r=Number(t.maxCount??t.count??o);if(!Number.isFinite(o)||!Number.isFinite(r))return[];let c=Number(t.enhancementLevel??0)||0;return[{itemHrid:a,enhancementLevel:c,dropRate:i,minCount:o,maxCount:r,expectedCount:i*(o+r)*.5}]})}s(hd,"normalizeLootDrops");function c1(e,t){if(!e)return{value:0,complete:!0,source:"none",missing:[]};if(!t.fromFragments){let o=o0(e,0,t.buyAtAsk);return{value:o,complete:o>0,source:"finished",missing:o>0?[]:[e]}}let a=Number.POSITIVE_INFINITY,n=!1,i=new Set;for(let[,o]of $a(u.state.initData_actionDetailMap)){let r=(o?.outputItems??[]).reduce((p,b)=>{let f=b?.itemHrid??b?.hrid,g=Number(b?.enhancementLevel??0)||0;return f===e&&g===0?p+ze(b.count??1):p},0);if(!r)continue;n=!0;let c=[...o?.inputItems??[]],l=o?.upgradeItemHrid;l&&!c.some(p=>(p?.itemHrid??p?.hrid)===l)&&c.unshift({itemHrid:l,count:1});let d=0,m=!0;for(let p of c){let b=p?.itemHrid??p?.hrid,f=ze(p?.count);if(!b||!f)continue;let g=o0(b,Number(p?.enhancementLevel??0)||0,t.buyAtAsk);if(!(g>0)){m=!1,i.add(b);continue}d+=f*g}m&&(a=Math.min(a,d/r))}return{value:Number.isFinite(a)?a:0,complete:Number.isFinite(a),source:"fragments",missing:Number.isFinite(a)?[]:[...i,...n?[]:[e]]}}s(c1,"getLootKeyCost");function l1(e,t){let a=new Set(e.map(o=>gd(o.itemHrid,o.enhancementLevel))),n=new Set(e.map(o=>o.itemHrid).filter(o=>n0.has(o))),i=new Map;if(!n.size)return i;for(let o of Ao()){let r=So(o),c=Co(o);if(!r.length||c.length!==1)continue;let l=c[0],d=l?.itemHrid??l?.hrid,m=Number(l?.enhancementLevel??0)||0,p=ze(l?.count??1);if(!d||!p||!a.has(gd(d,m)))continue;let b=pd(d,m,t.sellAtAsk);if(b>0)for(let f of n){let g=r.reduce((x,T)=>(T?.itemHrid??T?.hrid)===f?x+ze(T.count):x,0);if(!g)continue;let h=0,_=!0;for(let x of r){let T=x?.itemHrid??x?.hrid,A=ze(x?.count);if(!T||!A||T===f)continue;let I=o0(T,Number(x?.enhancementLevel??0)||0,t.buyAtAsk);if(!(I>0)){_=!1;break}h+=A*I}if(!_)continue;let y=Math.max(0,b*p-h),w=y/g;if(!(w>0))continue;let k={tokenItemHrid:f,tokenCount:g,rewardItemHrid:d,rewardEnhancementLevel:m,rewardCount:p,rewardUnitValue:b,totalValue:y,valuePerToken:w},C=i.get(f);(!C||w>C.valuePerToken||w===C.valuePerToken&&d.localeCompare(C.rewardItemHrid)<0)&&i.set(f,k)}}return i}s(l1,"getBestLootRedemptions");function _d(e,t,a){if(a.has(e))return null;let n=hd(e);if(!n.length)return null;a.add(e);let i=l1(n,t),o=[],r=0;for(let g of n){let h=hd(g.itemHrid).length>0,_=pd(g.itemHrid,g.enhancementLevel,t.sellAtAsk),y=i.get(g.itemHrid)??null,w=t.sellAtAsk?"aggressive":"conservative",k=0,C="missing",x=!1,T=!1,A=[],I=!1;if(h&&g.itemHrid===e)I=!0;else if(h){let j=_d(g.itemHrid,t,a);j&&Number.isFinite(j.netValue)&&(k=Math.max(0,j.netValue),C="nested",x=!0,T=!0,A=j.missing)}if(!T&&!I&&_>0&&(k=_,C="market",T=!0),!T&&!I&&y&&(k=y.valuePerToken,C="redemption",T=!0),!T&&!I&&!h){let j=Oa(g.itemHrid,g.enhancementLevel,w,new Set);j.value>0&&(k=j.value,C="derived",T=!0,A=j.missingItemHrids)}!T&&!I&&bd(g.itemHrid)&&(k=0,C="zero",T=!0,A=[]);let q=g.expectedCount*k;r+=q;let B=[...i.values()].filter(j=>j.rewardItemHrid===g.itemHrid&&j.rewardEnhancementLevel===g.enhancementLevel);o.push({...g,unitValue:k,value:q,priced:T,nested:x,nestedMissing:A,pendingSelfReference:I,valueSource:C,tokenRedemption:y,redemptions:B})}let c=Kt(e)?.openKeyItemHrid??null,l=c1(c,t),d=o.filter(g=>g.pendingSelfReference),m=d.reduce((g,h)=>g+h.expectedCount,0);if(d.length&&l.complete&&m<1){let g=Math.max(0,(r-l.value)/(1-m));for(let h of d)h.unitValue=g,h.value=h.expectedCount*g,h.priced=!0,h.nested=!0,h.valueSource="nested",h.pendingSelfReference=!1,r+=h.value}let p=new Set(o.filter(g=>g.expectedCount>0&&!g.priced).map(g=>g.itemHrid));for(let g of o)for(let h of g.nestedMissing)p.add(h);for(let g of l.missing)p.add(g);let b=p.size===0&&l.complete,f=l.complete?r-l.value:null;return a.delete(e),{itemHrid:e,keyItemHrid:c,config:t,drops:o.sort((g,h)=>h.value-g.value),redemptions:[...i.values()],grossValue:r,keyCost:l.value,keySource:l.source,keyComplete:l.complete,netValue:f,complete:b,missing:[...p]}}s(_d,"projectLootChestInternal");function d1(e,t={}){return _d(e,u1(t),new Set)}s(d1,"projectLootChest");function oi(e,t,a){return e==="/items/coin"?1:[...a].filter(i=>String(i).endsWith(":acquisition")).length>=a1?0:tn(e,t,a,{forceAcquisitionValue:!0})}s(oi,"acquisitionCostValue");function yd(e,t,a){let n=Number.POSITIVE_INFINITY;for(let i of Ao()){let r=Co(i).reduce((d,m)=>{let p=m?.itemHrid??m?.hrid,b=Number(m?.enhancementLevel??0)||0;return p===e&&b===t?d+ze(m.count??1):d},0);if(!r)continue;let c=0,l=!0;for(let d of So(i)){let m=d?.itemHrid??d?.hrid,p=ze(d?.count);if(!m||!p)continue;let b=oi(m,Number(d?.enhancementLevel??0)||0,a);if(!(b>0)){l=!1;break}c+=p*b}l&&c>0&&(n=Math.min(n,c/r))}return Number.isFinite(n)?n:0}s(yd,"getShopAcquisitionValue");function wd(e,t,a){if(!String(e).endsWith("_refined"))return 0;let n=Number.POSITIVE_INFINITY;for(let[,i]of $a(u.state.initData_actionDetailMap)){let r=(Array.isArray(i?.outputItems)?i.outputItems:[]).reduce((p,b)=>(b?.itemHrid??b?.hrid)===e?p+ze(b.count??1):p,0),c=i?.upgradeItemHrid;if(!r||!c)continue;let l=i.retainAllEnhancement?t:0,d=oi(c,l,a),m=d>0;for(let p of i.inputItems??[]){let b=p?.itemHrid??p?.hrid,f=ze(p?.count);if(!b||!f)continue;let g=oi(b,Number(p?.enhancementLevel??0)||0,a);if(!(g>0)){m=!1;break}d+=f*g}m&&d>0&&(n=Math.min(n,d/r))}return Number.isFinite(n)?n:0}s(wd,"getRefinedAcquisitionValue");function vd(e,t,a){let n=Number.POSITIVE_INFINITY;for(let[,i]of $a(u.state.initData_actionDetailMap)){let r=(Array.isArray(i?.outputItems)?i.outputItems:[]).reduce((b,f)=>{let g=f?.itemHrid??f?.hrid,h=Number(f?.enhancementLevel??0)||0;return g===e&&h===t?b+ze(f.count??1):b},0);if(!r)continue;let c=0,l=!0,d=i?.inputItems??[],m=i?.upgradeItemHrid,p=d.some(b=>(b?.itemHrid??b?.hrid)===m);if(m&&!p){let b=i.retainAllEnhancement?t:0,f=oi(m,b,a);f>0?c+=f:l=!1}for(let b of d){let f=b?.itemHrid??b?.hrid,g=ze(b?.count);if(!f||!g)continue;let h=oi(f,Number(b?.enhancementLevel??0)||0,a);if(!(h>0)){l=!1;break}c+=g*h}l&&c>0&&(n=Math.min(n,c/r))}return Number.isFinite(n)?n:0}s(vd,"getCraftedAcquisitionValue");function m1(e,t,a,n={}){if(!(t>0)||!fd(e)||typeof u.api.calculateEnhancementPlan!="function")return 0;let i=i0(e,n.itemLocationHrid),o=u.api.calculateEnhancementPlan({itemHrid:e,targetLevel:t,forcedProtectionItemHrid:i?"/items/mirror_of_protection":null,allowPhilosopherMirror:!i,getFairValue:s((r,c=0)=>oi(r,c,a),"getFairValue"),getMarketValue:s((r,c=0)=>u.api.getFairValue(r,c),"getMarketValue")});return o?.status==="complete"?ze(o.totalCost):0}s(m1,"getEnhancedEquipmentCost");function f1(e,t){let a=0;for(let n of Ao()){let i=So(n),o=i.find(d=>(d?.itemHrid??d?.hrid)===e),r=ze(o?.count);if(!r)continue;let c=0;for(let d of Co(n)){let m=d?.itemHrid??d?.hrid;m&&(c+=ze(d.count??1)*tn(m,d.enhancementLevel??0,t))}let l=0;for(let d of i){let m=d?.itemHrid??d?.hrid;!m||m===e||(l+=ze(d.count)*tn(m,0,t))}a=Math.max(a,Math.max(0,c-l)/r)}return a}s(f1,"getShopCurrencyValue");function tn(e,t,a,n={}){if(!e)return 0;let i=Number(t)||0,o=u.api.getFairValue(e,i),r=i0(e,n.itemLocationHrid),c=i>0&&fd(e),l=r&&String(e).endsWith("_refined"),d=i===0&&r&&!l&&n.forceAcquisitionValue!==!0&&md("valueBackEquipmentWithProtectionMirror"),m=n.forceAcquisitionValue===!0||l,b=`${e}:${i}:${c?r?"enhancement-protected-mirror":"enhancement-protected":d?"protection-mirror-value":m?"acquisition":"market"}`;if(ha.has(b))return ha.get(b);if(a.has(b))return 0;if(d){a.add(b);let _=tn("/items/mirror_of_protection",0,a);if(a.delete(b),_>0)return ha.set(b,_),_}if(c){let _=m1(e,i,a,n);if(_>0){let y=o>0?Math.abs(o-_)/_:Number.POSITIVE_INFINITY,w=o>0&&y<=t1?o:_;return ha.set(b,w),w}if(o>0)return ha.set(b,o),o}if(!m&&o>0)return ha.set(b,o),o;if(o<=0&&bd(e))return ha.set(b,0),0;a.add(b);let f=0;if(e==="/items/cowbell")f=tn("/items/bag_of_10_cowbells",0,a)/10;else if(r0().has(e))f=r1(e);else if(e==="/items/guild_token")f=o1(a);else if(n0.has(e))f=f1(e,a);else if(m){let _=[o,yd(e,i,a),vd(e,i,a),wd(e,i,a)].filter(y=>y>0);f=_.length?Math.min(..._):0}else f=Math.max(r?0:yd(e,i,a),wd(e,i,a),s1(e,a));if(a.delete(b),!!Kt(e)?.openKeyItemHrid&&Xi(e).length>0&&!(f>0))return ha.set(b,0),0;f>0||(f=o),f>0||(f=ze(Kt(e)?.sellPrice));let h=Number.isFinite(f)&&f>0?f:0;return ha.set(b,h),h}s(tn,"getAssetValueInternal");function s0(e,t=0,a={}){return tn(e,t,new Set,a)}s(s0,"getAssetValue");function b1(e,t,a){if(a==="conservative")return ze(u.api.getNetSellPrice?.(e,t));if(a==="aggressive")return ze(u.api.getNetSellPriceAtAsk?.(e,t));let n=ze(u.api.getFairValue?.(e,t));if(!n)return 0;let i=Number(u.api.getMarketTaxRate?.(e))||0;return n*Math.max(0,1-i)}s(b1,"directLiquidationValue");function It(e,t,a=[]){let n=ze(e),i=[...new Set(a.filter(Boolean))];return{value:n,complete:n>0&&i.length===0,source:n>0?t:"missing",missingItemHrids:i}}s(It,"liquidationResult");function Mo(e){return e.flatMap(t=>t?.missingItemHrids??[])}s(Mo,"mergeLiquidationMissing");function p1(e,t,a,n){let i=Number.POSITIVE_INFINITY,o=[];for(let[,r]of $a(u.state.initData_actionDetailMap)){let l=(Array.isArray(r?.outputItems)?r.outputItems:[]).reduce((g,h)=>{let _=h?.itemHrid??h?.hrid,y=Number(h?.enhancementLevel??0)||0;return _===e&&y===t?g+ze(h.count??1):g},0);if(!l)continue;let d=[...r?.inputItems??[]],m=r?.upgradeItemHrid;m&&!d.some(g=>(g?.itemHrid??g?.hrid)===m)&&d.unshift({itemHrid:m,enhancementLevel:r.retainAllEnhancement?t:0,count:1});let p=0,b=!0,f=[];for(let g of d){let h=g?.itemHrid??g?.hrid,_=ze(g?.count);if(!h||!_)continue;let y=h==="/items/coin"?It(1,"coin"):Oa(h,Number(g?.enhancementLevel??0)||0,a,n);if(f.push(y),!(y.value>0)){b=!1;continue}p+=_*y.value}if(b&&p>0){let g=p/l;g<i&&(i=g)}else o.push(...Mo(f))}return Number.isFinite(i)?It(i,"crafting"):It(0,"missing",[...o,e])}s(p1,"getCraftedLiquidationValue");function g1(e,t,a){let n=Number.POSITIVE_INFINITY,i=null;for(let[o,r]of $a(u.state.initData_itemDetailMap)){let c=r?.hrid??r?.itemHrid??o;if(!(!c||c==="/items/guild_token"))for(let l of r?.guildCreditConversions??[]){if(l?.creditItemHrid!==e)continue;let d=ze(l.itemCount),m=ze(l.creditCount);if(!d||!m)continue;let p=Oa(c,0,t,a);if(p.value>0){let b=p.value*d/m;b<n&&(n=b,i=p)}}}return It(Number.isFinite(n)?n:0,"conversion",i?.missingItemHrids??[])}s(g1,"getGuildCreditLiquidationValue");function h1(e,t){let a=Kt("/items/guild_token"),n=0,i=null;for(let o of a?.guildCreditConversions??[]){let r=o?.creditItemHrid,c=ze(o?.guildTokenCount??o?.itemCount),l=ze(o?.creditCount);if(!r||!c||!l)continue;let d=Oa(r,0,e,t);if(d.value>0){let m=d.value*l/c;m>n&&(n=m,i=d)}}return It(n,"conversion",i?.missingItemHrids??[])}s(h1,"getGuildTokenLiquidationValue");function _1(e,t,a){let n=0,i=[];for(let o of Ao()){let r=So(o),c=r.find(f=>(f?.itemHrid??f?.hrid)===e),l=ze(c?.count);if(!l)continue;let d=[],m=0;for(let f of Co(o)){let g=f?.itemHrid??f?.hrid;if(!g)continue;let h=Oa(g,f.enhancementLevel??0,t,a);d.push(h),m+=ze(f.count??1)*h.value}let p=0;for(let f of r){let g=f?.itemHrid??f?.hrid;if(!g||g===e)continue;let h=Oa(g,0,t,a);d.push(h),p+=ze(f.count)*h.value}let b=Math.max(0,m-p)/l;b>n&&(n=b,i=d)}return It(n,"conversion",Mo(i))}s(_1,"getShopCurrencyLiquidationValue");function y1(e,t,a){let n=Xi(e);if(!Array.isArray(n)||!n.length)return It(0,"missing",[e]);let i=0,o=[];for(let c of n){let l=c?.itemHrid??c?.hrid;if(!l)continue;let d=Array.isArray(c.dropRate)?c.dropRate[0]:c.dropRate,m=Number.isFinite(Number(d))?Math.max(0,Number(d)):1,p=Number(c.minCount??c.count??1),b=Number(c.maxCount??c.count??p);if(!Number.isFinite(p)||!Number.isFinite(b))continue;let f=Oa(l,c.enhancementLevel??0,t,a);o.push(f),i+=m*(p+b)*.5*f.value}let r=Kt(e)?.openKeyItemHrid;if(r){let c=p1(r,0,t,a);if(o.push(c),!(c.value>0))return It(0,"missing",[...Mo(o),r]);i=Math.max(0,i-c.value)}return!(i>0)&&o.every(c=>c.complete)?{value:0,complete:!0,source:"openable",missingItemHrids:[]}:It(i,"openable",Mo(o))}s(y1,"getOpenableLiquidationValue");function Oa(e,t,a,n){if(!e)return It(0,"missing");let i=["conservative","fair","aggressive"].includes(a)?a:"fair",o=Number(t)||0,r=`${i}:${e}:${o}`;if(Ki.has(r))return Ki.get(r);if(n.has(r))return It(0,"missing",[e]);let c=b1(e,o,i);if(c>0){let m=It(c,"market");return Ki.set(r,m),m}n.add(r);let l;if(e==="/items/cowbell"){let m=Oa("/items/bag_of_10_cowbells",0,i,n);l=It(m.value/10,"conversion",m.missingItemHrids)}else r0().has(e)?l=g1(e,i,n):e==="/items/guild_token"?l=h1(i,n):n0.has(e)?l=_1(e,i,n):l=y1(e,i,n);n.delete(r);let d=!!Kt(e)?.openKeyItemHrid&&Xi(e).length>0;if(!(l.value>0)&&l.source==="missing"&&!d){let m=ze(Kt(e)?.sellPrice);l=m?It(m,"sell-price"):It(0,"missing",[...l.missingItemHrids,e])}return Ki.set(r,l),l}s(Oa,"getAssetLiquidationValueInternal");function w1(e,t=0,a="fair"){return Oa(e,t,a,new Set)}s(w1,"getAssetLiquidationValue");function v1(e){let t=u.state.guildBuffLevels,a=Array.isArray(t)?t.find(i=>(i?.guildBuffHrid??i?.hrid)===e):t?.[e],n=Number(typeof a=="object"?a?.level??a?.currentLevel:a);return Number.isSafeInteger(n)&&n>0?n:0}s(v1,"getGuildBuffLevel");function x1(){if(!u.state.guildDataLoaded)return null;let e=$a(u.state.initData_guildBuffDetailMap);if(!e.length)return null;let t=0;for(let[a,n]of e){let i=n?.guildBuffHrid??n?.hrid??a,o=n?.levelCosts;if(!i||!o)continue;let r=v1(i);for(let c=1;c<=r;c+=1){let l=o[c]??o[String(c)];if(!l)return null;let d=ze(l.guildTokenCost);if(d){let m=s0("/items/guild_token",0);if(!(m>0))return null;t+=d*m}for(let m of l.creditCosts??[]){let p=ze(m?.count);if(!p)continue;let b=s0(m.itemHrid,0);if(!(b>0))return null;t+=p*b}}}return t}s(x1,"getGuildShrineValue"),Object.assign(u.api,{getAssetValue:s0,getAssetLiquidationValue:w1,getGuildShrineValue:x1,projectLootChest:d1,isBackEquipment:i0,isNonTradableTokenAsset:i1,invalidateAssetValueCache:dd,shouldIncludeCowbellsInAssets:n1});function xd(){dd(),u.api.scheduleNetworthRefresh?.(),u.settings.settingsMap.assetHistory.isTrue&&u.api.scheduleAssetSnapshotRefresh?.(0)}s(xd,"refreshConfiguredAssetValues"),u.settings.onChange?.("includeCowbellsInAssets",xd),u.settings.onChange?.("valueBackEquipmentWithProtectionMirror",xd);function k1(e){u.state.initData_actionDetailMap=e.actionDetailMap,u.state.initData_levelExperienceTable=e.levelExperienceTable,u.state.initData_enhancementLevelSuccessRateTable=e.enhancementLevelSuccessRateTable,u.state.initData_enhancementLevelTotalBonusMultiplierTable=e.enhancementLevelTotalBonusMultiplierTable,u.state.initData_itemDetailMap=e.itemDetailMap,u.state.initData_itemLocationDetailMap=e.itemLocationDetailMap,u.state.initData_houseRoomDetailMap=e.houseRoomDetailMap,u.state.initData_actionCategoryDetailMap=e.actionCategoryDetailMap,u.state.initData_abilityDetailMap=e.abilityDetailMap,u.state.initData_shopItemDetailMap=e.shopItemDetailMap,u.state.initData_taskShopItemDetailMap=e.taskShopItemDetailMap,u.state.initData_labyrinthShopItemDetailMap=e.labyrinthShopItemDetailMap,u.state.initData_openableLootDropMap=e.openableLootDropMap,u.state.initData_guildBuffDetailMap=e.guildBuffDetailMap,u.api.invalidateAssetValueCache?.();for(let[t,a]of Object.entries(u.state.initData_itemDetailMap))u.state.itemEnNameToHridMap[a.name]=t}s(k1,"applyClientData");var S1=["characterGuildBuffMap","characterGuildBuffDict","characterGuildBuffs","characterGuildBuffLevelMap","characterGuildBuffLevelDict"],C1=["guildBuffLevelMap","guildBuffLevelDict","guildBuffLevels","guildBuffMap","guildBuffDict"],A1=["mooPassActionTypeBuffsMap","communityActionTypeBuffsMap","houseActionTypeBuffsMap","guildActionTypeBuffsMap","achievementActionTypeBuffsMap","consumableActionTypeBuffsMap","equipmentActionTypeBuffsMap","personalActionTypeBuffsMap"];function To(e,t=!1){let a=t?{}:{...u.state.actionTypeBuffSources??{}},n=!1;for(let i of A1)Object.hasOwn(e,i)&&(a[i]=e[i]??{},n=!0);t?u.state.actionTypeBuffSources=n?a:null:n&&(u.state.actionTypeBuffSources=a),Object.hasOwn(e,"equipmentTaskActionBuffs")?u.state.equipmentTaskActionBuffs=e.equipmentTaskActionBuffs??[]:t&&(u.state.equipmentTaskActionBuffs=[])}s(To,"applyActionTypeBuffs");function M1(e){if(!e||typeof e!="object")return{};let t=Array.isArray(e)?e.map((a,n)=>[a?.guildBuffHrid??a?.hrid??String(n),a]):Object.entries(e);return Object.fromEntries(t.filter(([a])=>a))}s(M1,"normalizeGuildBuffLevels");function u0(e,t=!1){let a=[],n=[],i=[{value:e,depth:0}],o=new Set,r=0;for(;i.length&&r<400;){let{value:l,depth:d}=i.pop();if(!(!l||typeof l!="object"||o.has(l)||d>6)){o.add(l),r+=1;for(let m of S1)l[m]&&typeof l[m]=="object"&&a.push(l[m]);for(let m of C1)l[m]&&typeof l[m]=="object"&&n.push(l[m]);for(let m of Object.values(l))m&&typeof m=="object"&&i.push({value:m,depth:d+1})}}let c=[...n,...a];c.length?(u.state.guildBuffLevels=c.reduce((l,d)=>({...l,...M1(d)}),u.state.guildBuffLevels??{}),u.state.guildDataLoaded=!0):t&&(u.state.guildDataLoaded=!0)}s(u0,"applyGuildData");function T1(e){u.state.currentCharacterId=e.character?.id??e.character?.characterID??e.characterID??e.characterSkills?.[0]?.characterID??"",u.state.currentCharacterName=e.character?.name??e.characterName??e.sharableCharacter?.name??e.combatUnit?.name??"",u.state.initData_characterSkills=e.characterSkills,u.state.initData_characterItems=e.characterItems??[],u.state.initData_characterHouseRoomMap=e.characterHouseRoomMap,u.state.initData_actionTypeDrinkSlotsMap=e.actionTypeDrinkSlotsMap,u.state.initData_characterAbilities=e.characterAbilities,u.state.initData_myMarketListings=e.myMarketListings??[],u.state.initData_combatAbilities=e.combatUnit?.combatAbilities??[],u.state.currentActionsHridList=[...e.characterActions??[]],u.state.characterQuests=(e.characterQuests??[]).map((t,a)=>({...t,_mwitoolsOriginalIndex:a})),To(e,!0),u.state.currentEquipmentMap={};for(let t of e.characterItems??[])t.itemLocationHrid!=="/item_locations/inventory"&&(u.state.currentEquipmentMap[t.itemLocationHrid]=t);u0(e),Cd(e),d0(e)}s(T1,"applyCharacterData");function c0(e){let t=e.endCharacterSkills??e.characterSkills??[];if(!Array.isArray(t)||!t.length)return;let a=[...u.state.initData_characterSkills??[]];for(let n of t){let i=a.findIndex(o=>o.skillHrid===n.skillHrid);i>=0?a[i]={...a[i],...n}:a.push(n)}u.state.initData_characterSkills=a}s(c0,"applySkillsUpdated");function kd(e){return e?.id??e?.characterQuestID??e?.characterQuestId}s(kd,"getQuestId");function l0(e){let t=e.endCharacterQuests??e.characterQuests??[];if(!Array.isArray(t))return;let a=[...u.state.characterQuests];for(let n of t){let i=kd(n),o=a.findIndex(c=>kd(c)===i);if(n.isClaimed||n.claimed||n.isDeleted||n.deleted||String(n.status??"").includes("claimed")){o>=0&&a.splice(o,1);continue}o>=0?a[o]={...a[o],...n,_mwitoolsOriginalIndex:a[o]._mwitoolsOriginalIndex}:a.push({...n,_mwitoolsOriginalIndex:a.length})}u.state.characterQuests=a}s(l0,"applyQuestsUpdated");function Sd(e,t){for(let a of t)if(Array.isArray(e?.[a]))return e[a];for(let a of Object.values(e??{}))if(!(!a||typeof a!="object"||Array.isArray(a))){for(let n of t)if(Array.isArray(a[n]))return a[n]}return[]}s(Sd,"findArray");function Cd(e){let t=e.guild??e.endGuild??e.guildData;t&&(u.state.guild={...u.state.guild??{},...t}),u.state.guildStateUpdatedAt=Date.now()}s(Cd,"applyGuildSnapshot");function d0(e){let t=Sd(e,["guildCharacters","endGuildCharacters","characters","members"]),a=e.guildCharacterMap??e.endGuildCharacterMap??null,n=e.guildSharableCharacterMap??e.endGuildSharableCharacterMap??{};!t.length&&a&&typeof a=="object"&&(t=Object.entries(a).map(([i,o])=>({...n[i],...o,characterID:o.characterID??Number(i)}))),t.length&&(u.state.guildCharacters=t),u.state.guildStateUpdatedAt=Date.now()}s(d0,"applyGuildCharacters");function Ad(e){if(!String(e.category??e.leaderboardCategory??e.typeHrid??"").toLowerCase().includes("guild"))return;let a=Sd(e,["leaderboard","leaderboardEntries","entries","rankings","guilds"]);a.length&&(u.state.guildLeaderboard=a)}s(Ad,"applyLeaderboard");function E1(e){for(let t of e.endCharacterActions)t.isDone===!1?u.state.currentActionsHridList.push(t):u.state.currentActionsHridList=u.state.currentActionsHridList.filter(({id:a})=>a!==t.id)}s(E1,"applyActionsUpdated");function I1(e){let t=e.endCharacterAction;if(!t||t.isDone===!0)return;let a=u.state.currentActionsHridList.find(({id:i})=>String(i)===String(t.id));if(!a)return;let n=Number(t.currentCount??t.completedCount??t.progressCount);Number.isFinite(n)&&(a.currentCount=n)}s(I1,"applyActionCompleted");function Md(e){if(e.endCharacterItems)for(let t of e.endCharacterItems){let a=u.state.initData_characterItems?.findIndex(n=>t.id!=null&&n.id===t.id||t.id==null&&n.itemHrid===t.itemHrid&&n.itemLocationHrid===t.itemLocationHrid&&n.enhancementLevel===t.enhancementLevel);a>=0?t.count===0?u.state.initData_characterItems.splice(a,1):u.state.initData_characterItems[a]=t:t.count>0&&u.state.initData_characterItems?.push(t),t.itemLocationHrid!=="/item_locations/inventory"&&(u.state.currentEquipmentMap[t.itemLocationHrid]=t.count===0?null:t)}}s(Md,"applyItemsUpdated");function Td(e){let t=e.endCharacterAbilities??e.characterAbilities??e.abilities;if(!Array.isArray(t))return;let a=[...u.state.initData_characterAbilities??[]];for(let n of t){let i=n.id??n.characterAbilityID??n.abilityHrid,o=a.findIndex(r=>(r.id??r.characterAbilityID??r.abilityHrid)===i);n.isDeleted||n.deleted?o>=0&&a.splice(o,1):o>=0?a[o]={...a[o],...n}:a.push(n)}u.state.initData_characterAbilities=a}s(Td,"applyCharacterAbilitiesUpdated");function N1(e){switch(e.type){case"init_client_data":k1(e);break;case"init_character_data":T1(e);break;case"actions_updated":E1(e);break;case"action_completed":I1(e),Md(e),c0(e),l0(e),Td(e);break;case"items_updated":Md(e);break;case"skills_updated":c0(e);break;case"quests_updated":l0(e);break;case"market_item_values_updated":u.api.applyMarketItemValues(e);break;case"market_item_order_books_updated":u.api.applyMarketOrderBooks(e);break;case"market_listings_updated":u.api.applyMarketListings(e);break;case"guild_updated":u0(e,!0),Cd(e);break;case"house_rooms_updated":u.state.initData_characterHouseRoomMap=e.characterHouseRoomMap??u.state.initData_characterHouseRoomMap,To(e);break;case"abilities_updated":case"character_abilities_updated":Td(e);break;case"achievement_buffs_updated":case"moo_pass_buffs_updated":case"community_buffs_updated":case"consumable_buffs_updated":case"equipment_buffs_updated":case"personal_buffs_updated":case"guild_buffs_updated":To(e);break;case"guild_characters_updated":d0(e);break;case"leaderboard_updated":Ad(e);break}}s(N1,"applyGameMessage"),Object.assign(u.api,{applyGameMessage:N1,applyGuildData:u0,applyQuestsUpdated:l0,applyGuildCharacters:d0,applyLeaderboard:Ad,applyActionTypeBuffs:To,applySkillsUpdated:c0});var H1=["api.milkywayidle.com/ws","api-test.milkywayidle.com/ws","api.milkywayidlecn.com/ws","api-test.milkywayidlecn.com/ws"];function D1(){let e=Object.getOwnPropertyDescriptor(MessageEvent.prototype,"data"),t=e.get;e.get=s(function(){let n=this.currentTarget;if(!n||typeof n.send!="function"&&typeof n.addEventListener!="function"||!H1.some(o=>String(n.url??"").includes(o)))return t.call(this);let i=t.call(this);return Object.defineProperty(this,"data",{value:i}),Ed(i)},"hookedGet"),Object.defineProperty(MessageEvent.prototype,"data",e)}s(D1,"hookWS");function Ed(e){let t;try{t=JSON.parse(e)}catch{return u.dispatchMessage({type:"__non_json_message__"},e),e}return t?.type&&(u.api.applyGameMessage(t),t.type==="init_character_data"&&u.features.handleCharacterData(t),u.dispatchMessage(t,e)),e}s(Ed,"handleMessage"),Object.assign(u.api,{hookWS:D1,handleMessage:Ed});var Id=1e6;function Eo(e){return!!(e&&Object.keys(e).length)}s(Eo,"hasStats");function Nd(e){let t=u.state.initData_itemLocationDetailMap?.[e.itemLocationHrid],a=u.state.initData_itemDetailMap?.[e.itemHrid]?.equipmentDetail,n=t?.isTool===!0;return{isTool:n,isCombat:!n&&(Eo(a?.combatStats)||Eo(a?.combatEnhancementBonuses)),isSkilling:n||Eo(a?.noncombatStats)||Eo(a?.noncombatEnhancementBonuses)}}s(Nd,"classifyEquippedItem");function Hd(e){return!!u.state.initData_houseRoomDetailMap?.[e.houseRoomHrid]?.usableInActionTypeMap?.["/action_types/combat"]}s(Hd,"isCombatHouse");function Dd(e){let t=u.state.initData_houseRoomDetailMap?.[e.houseRoomHrid]?.usableInActionTypeMap;return Object.entries(t??{}).some(([a,n])=>a!=="/action_types/combat"&&!!n)}s(Dd,"isSkillingHouse");function m0(){return{combatEquipment:0,skillingTools:0,skillingEquipment:0}}s(m0,"createEmptyGearScores");function f0(e){let t=m0();for(let a of e??[]){if(a.itemLocationHrid==="/item_locations/inventory")continue;let n=Nd(a);if(!n.isTool&&!n.isCombat&&!n.isSkilling)continue;let i=u.api.getAssetValue?u.api.getAssetValue(a.itemHrid,a.enhancementLevel,{itemLocationHrid:a.itemLocationHrid}):u.api.getFairValue(a.itemHrid,a.enhancementLevel);if(!(i>0))continue;let o=Number(a.count??1)*i;n.isCombat&&(t.combatEquipment+=o),n.isTool?t.skillingTools+=o:n.isSkilling&&(t.skillingEquipment+=o)}for(let a of Object.keys(t))t[a]/=Id;return t}s(f0,"calculateGearScores");async function b0(e){let t=0,a=0,n=0;for(let i of Object.values(e??{})){let o=await Pd(i)/Id;n+=o,Hd(i)&&(t+=o),Dd(i)&&(a+=o)}return{combat:t,skilling:a,all:n}}s(b0,"calculateHouseScores");function p0({houseScores:e,abilityScore:t,allAbilityScore:a,gearScores:n,equipmentHidden:i=!1}){let o={house:e.combat,abilities:t,equipment:n.combatEquipment};o.total=o.house+o.abilities+o.equipment;let r={house:e.skilling,tools:n.skillingTools,equipment:n.skillingEquipment,available:!i};return r.total=r.house+r.tools+r.equipment,{battle:o,skilling:r,assets:{allHouses:e.all,allAbilities:a},equipmentHidden:i}}s(p0,"createScoreResult");async function P1(){let e=await b0(u.state.initData_characterHouseRoomMap),t=f0(u.state.initData_characterItems),a=0;try{a=await g0()}catch(i){console.error(u.config.isZH?"[MWITools] 计算已装备技能评分失败。":"[MWITools] Failed to calculate equipped ability score.",i)}let n=0;try{n=await g0(!0)}catch(i){console.error(u.config.isZH?"[MWITools] 计算全部技能评分失败。":"[MWITools] Failed to calculate total ability score.",i)}return p0({houseScores:e,abilityScore:a,allAbilityScore:n,gearScores:t})}s(P1,"getSelfBuildScores");async function Pd(e){if(!await u.api.ensureMarketValueSource())return 0;let t=u.state.initData_houseRoomDetailMap?.[e.houseRoomHrid];if(!t)try{t=JSON.parse(GM_getValue("init_client_data","{}")).houseRoomDetailMap?.[e.houseRoomHrid]}catch{return 0}let a=t?.upgradeCostsMap;if(!a)return 0;let n=e.level,i=0;for(let o=1;o<=n;o++)for(let r of a[o]??[]){let c=u.api.getFairValue(r.itemHrid,0);c>0&&(i+=r.count*c)}return i}s(Pd,"getHouseFullBuildPrice");function L1(e,t=.5){let a=e[0].a,n=e[0].b;return a>0&&n<0&&(n=a),n>0&&a<0&&(a=n),a*t+n*(1-t)}s(L1,"getWeightedMarketPrice");async function g0(e=!1){let t=u.state.initData_levelExperienceTable,a=e?u.state.initData_characterAbilities:u.state.initData_combatAbilities;if(!t||!Array.isArray(a)||!await u.api.ensureMarketValueSource())return 0;let n=["poke","scratch","smack","quick_shot","water_strike","fireball","entangle","minor_heal"],i=s((r,c)=>{let l=t[r];if(!Number.isFinite(l))return 0;let d=l/c;return d+=1,d.toFixed(1)},"getNeedBooksToLevel"),o=0;return a.forEach(r=>{let c=0;n.some(m=>r.abilityHrid.includes(m))?c=i(r.level,50):c=i(r.level,500);let l=r.abilityHrid.replace("/abilities/","/items/"),d=u.api.getFairValue(l,0);d>0&&(o+=c*d)}),o/=1e6}s(g0,"calculateAbilityScore");function h0(){let e=document.querySelector("div.SharableProfile_overviewTab__W4dCV");return e||new Promise(t=>{setTimeout(()=>t(h0()),500)})}s(h0,"getInfoPanel");async function $1(e){let t=await Ld(e),a=t.equipmentHidden?u.config.isZH?"(装备隐藏)":" (Equipment hidden)":"",n=t.equipmentHidden?"-":null,i=await h0();i.style.height="auto",i.querySelector("#script_profile_gear_scores")?.remove(),i.insertAdjacentHTML("beforeend",`<section id="script_profile_gear_scores" style="display: block !important; width: fit-content !important; max-width: 100% !important; text-align: left !important; color: ${u.config.SCRIPT_COLOR_MAIN} !important; font-size: 0.8125rem !important; margin-top: 8px !important; border-left: 2px solid ${u.config.SCRIPT_COLOR_MAIN} !important; padding-left: 8px !important;">
<p id="toggleScores_profile" style="display: block !important; margin: 4px 0 !important; padding: 4px 0 !important; cursor: pointer !important; font-weight: 650 !important; text-align: left !important; width: fit-content !important; float: none !important;">
<span class="mwi-profile-toggle-icon" style="display: inline !important; font-weight: bold !important; margin-right: 4px !important; float: none !important;">+</span>
<span style="display: inline !important; float: none !important;">${u.config.isZH?"战斗着装评分:":"Combat Gear Score: "}</span>
<span style="display: inline !important; font-weight: 700 !important; color: #ffffff !important; margin-left: 2px !important; float: none !important;">${u.api.formatScore(t.battle.total)}${a}</span>
</p>
<section id="buildScores_profile" style="display: none; width: fit-content !important; text-align: left !important; margin-left: 18px !important; margin-top: 3px !important; margin-bottom: 6px !important; font-size: 0.75rem !important;">
<p style="display: block !important; margin: 2px 0 !important; padding: 3px 0 !important; text-align: left !important; width: fit-content !important; float: none !important;">
<span style="display: inline !important; color: var(--color-text-secondary, #9da6b2) !important; float: none !important;">${u.config.isZH?"房屋:":"House: "}</span>
<span style="display: inline !important; font-weight: 600 !important; color: #f3f5f7 !important; margin-left: 2px !important; float: none !important;">${u.api.formatScore(t.battle.house)}</span>
</p>
<p style="display: block !important; margin: 2px 0 !important; padding: 3px 0 !important; text-align: left !important; width: fit-content !important; float: none !important;">
<span style="display: inline !important; color: var(--color-text-secondary, #9da6b2) !important; float: none !important;">${u.config.isZH?"技能:":"Abilities: "}</span>
<span style="display: inline !important; font-weight: 600 !important; color: #f3f5f7 !important; margin-left: 2px !important; float: none !important;">${n??u.api.formatScore(t.battle.abilities)}</span>
</p>
<p style="display: block !important; margin: 2px 0 !important; padding: 3px 0 !important; text-align: left !important; width: fit-content !important; float: none !important;">
<span style="display: inline !important; color: var(--color-text-secondary, #9da6b2) !important; float: none !important;">${u.config.isZH?"装备:":"Equipment: "}</span>
<span style="display: inline !important; font-weight: 600 !important; color: #f3f5f7 !important; margin-left: 2px !important; float: none !important;">${n??u.api.formatScore(t.battle.equipment)}</span>
</p>
</section>
<p id="toggleSkillingScores_profile" style="display: block !important; margin: 4px 0 !important; padding: 4px 0 !important; cursor: pointer !important; font-weight: 650 !important; text-align: left !important; width: fit-content !important; float: none !important;">
<span class="mwi-profile-toggle-icon" style="display: inline !important; font-weight: bold !important; margin-right: 4px !important; float: none !important;">+</span>
<span style="display: inline !important; float: none !important;">${u.config.isZH?"生活着装评分:":"Skilling Gear Score: "}</span>
<span style="display: inline !important; font-weight: 700 !important; color: #ffffff !important; margin-left: 2px !important; float: none !important;">${n??u.api.formatScore(t.skilling.total)}${a}</span>
</p>
<section id="skillingScores_profile" style="display: none; width: fit-content !important; text-align: left !important; margin-left: 18px !important; margin-top: 3px !important; margin-bottom: 6px !important; font-size: 0.75rem !important;">
<p style="display: block !important; margin: 2px 0 !important; padding: 3px 0 !important; text-align: left !important; width: fit-content !important; float: none !important;">
<span style="display: inline !important; color: var(--color-text-secondary, #9da6b2) !important; float: none !important;">${u.config.isZH?"房屋:":"House: "}</span>
<span style="display: inline !important; font-weight: 600 !important; color: #f3f5f7 !important; margin-left: 2px !important; float: none !important;">${u.api.formatScore(t.skilling.house)}</span>
</p>
<p style="display: block !important; margin: 2px 0 !important; padding: 3px 0 !important; text-align: left !important; width: fit-content !important; float: none !important;">
<span style="display: inline !important; color: var(--color-text-secondary, #9da6b2) !important; float: none !important;">${u.config.isZH?"工具:":"Tools: "}</span>
<span style="display: inline !important; font-weight: 600 !important; color: #f3f5f7 !important; margin-left: 2px !important; float: none !important;">${n??u.api.formatScore(t.skilling.tools)}</span>
</p>
<p style="display: block !important; margin: 2px 0 !important; padding: 3px 0 !important; text-align: left !important; width: fit-content !important; float: none !important;">
<span style="display: inline !important; color: var(--color-text-secondary, #9da6b2) !important; float: none !important;">${u.config.isZH?"装备:":"Equipment: "}</span>
<span style="display: inline !important; font-weight: 600 !important; color: #f3f5f7 !important; margin-left: 2px !important; float: none !important;">${n??u.api.formatScore(t.skilling.equipment)}</span>
</p>
</section>
</section>`);let o=s((r,c)=>{let l=document.getElementById(r),d=document.getElementById(c);if(!l||!d)return;let m=l.querySelector(".mwi-profile-toggle-icon");l.addEventListener("click",()=>{let p=d.style.display==="none";d.style.display=p?"block":"none",m&&(m.textContent=p?"↓":"+")})},"bindToggle");o("toggleScores_profile","buildScores_profile"),o("toggleSkillingScores_profile","skillingScores_profile")}s($1,"showBuildScoreOnProfile");async function Ld(e){let t=e.profile,a=await b0(t.characterHouseRoomMap),n=t.hideWearableItems===!0,i=m0();if(n)return p0({houseScores:a,abilityScore:0,allAbilityScore:0,gearScores:i,equipmentHidden:!0});let o=0;try{o=await $d(e)}catch(c){console.error(u.config.isZH?"[MWITools] 计算资料技能评分失败。":"[MWITools] Failed to calculate profile ability score.",c)}let r=i;try{r=await Od(e)}catch(c){console.error(u.config.isZH?"[MWITools] 计算资料装备评分失败。":"[MWITools] Failed to calculate profile equipment score.",c)}return p0({houseScores:a,abilityScore:o,allAbilityScore:0,gearScores:r})}s(Ld,"getBuildScoreByProfile");async function $d(e){if(!await u.api.ensureMarketValueSource())return 0;let t=e.profile,a=["poke","scratch","smack","quick_shot","water_strike","fireball","entangle","minor_heal"],n=s((o,r)=>{let l=u.state.initData_levelExperienceTable[o]/r;return l+=1,l.toFixed(1)},"getNeedBooksToLevel"),i=0;return t.equippedAbilities.forEach(o=>{let r=0;a.some(d=>o.abilityHrid.includes(d))?r=n(o.level,50):r=n(o.level,500);let c=o.abilityHrid.replace("/abilities/","/items/"),l=u.api.getFairValue(c,0);l>0&&(i+=r*l)}),i/=1e6}s($d,"calculateSkill");async function Od(e){return await u.api.ensureMarketValueSource()?f0(Object.values(e.profile.wearableItemMap??{})):m0()}s(Od,"calculateEquipment"),Object.assign(u.api,{getSelfBuildScores:P1,getHouseFullBuildPrice:Pd,getWeightedMarketPrice:L1,classifyEquippedItem:Nd,isCombatHouse:Hd,isSkillingHouse:Dd,calculateGearScores:f0,calculateHouseScores:b0,calculateAbilityScore:g0,getInfoPanel:h0,showBuildScoreOnProfile:$1,getBuildScoreByProfile:Ld,calculateSkill:$d,calculateEquipment:Od});var _0="mwitools-duplicate-script-warning",qd=globalThis.unsafeWindow??globalThis.window??globalThis,O1=!!qd.__MWI_DPS,Rd=!1,Bd=!1;function zd(e={}){let t=e.pageWindow??qd,a=e.documentRef??globalThis.document,n=[];return(t.MWIMM||a?.getElementById("mwi-mm2-host"))&&n.push("MWI 市场伴侣 / MWI Market Mate"),(e.dpsWasPresent??O1)&&n.push("银河奶牛 DPS 统计 / Galaxy Cow DPS"),(t.kbd_calculateTotalNetworth||t.__everyday_profit_plus_interval__||a?.querySelector(".deltaNetworthDiv,#deltaNetworthChartModal,#refreshNetworthIcon,.epPrecisionHintActions,#everyday-profit-chartjs,#everyday-profit-zoom,#everyday-profit-crosshair"))&&n.push("Everyday Profit Plus Fixed"),n}s(zd,"detectDuplicateScripts");function Fd(e,{documentRef:t=globalThis.document,isZH:a=u.config.isZH}={}){if(!e.length||!t?.body)return null;let n=t.getElementById(_0);if(!n){n=t.createElement("aside"),n.id=_0,n.setAttribute("role","status"),n.setAttribute("aria-live","polite"),n.style.cssText="position:fixed;z-index:2147483646;top:14px;right:14px;width:min(380px,calc(100vw - 28px));box-sizing:border-box;padding:12px 38px 12px 14px;border:1px solid rgba(245,158,11,.6);border-radius:9px;background:rgba(24,27,35,.97);box-shadow:0 8px 28px rgba(0,0,0,.42);color:#f5f5f5;font:13px/1.55 system-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif";let r=t.createElement("button");r.type="button",r.textContent="×",r.setAttribute("aria-label",a?"关闭提醒":"Close warning"),r.style.cssText="position:absolute;top:5px;right:7px;width:26px;height:26px;border:0;background:transparent;color:#bbb;font:20px/26px sans-serif;cursor:pointer",r.addEventListener("click",()=>{Bd=!0,n.remove()}),n.append(r,t.createElement("div")),t.body.append(n)}let i=n.lastElementChild,o=e.join(a?"、":", ");return i.textContent=a?`检测到与新版 MWITools 功能重复的脚本:${o}。为避免重复监听、面板冲突和重复计算,建议在脚本管理器中停用或删除。`:`Scripts overlapping with the new MWITools were detected: ${o}. Disable or remove them in your userscript manager to avoid duplicate listeners, panels, and calculations.`,n}s(Fd,"showDuplicateWarning"),u.features.register({id:"duplicateScriptWarning",initialize({scope:e}){if(Rd)return;let t=new Set,a=s(()=>{if(!Bd){for(let i of zd())t.add(i);t.size&&(Rd=!0,Fd([...t]))}},"scan");a(),e.interval(a,1e3);let n=new MutationObserver(a);e.observer(n,document.body,{childList:!0,subtree:!0}),e.add(()=>document.getElementById(_0)?.remove())}});var _a=["equipment","inventory","marketListings","houses","abilities","nonTradableTokens","shrine"],y0=new Set,jd=null,Ji=null,Wd=null;function w0(e){if(e==null||e==="")return null;let t=Number(e);return Number.isFinite(t)?t:null}s(w0,"finiteOrNull");function Vd(e){return e.reduce((t,a)=>t+(Number.isFinite(a)?a:0),0)}s(Vd,"sumKnown");function q1(e){return e?.isDone||e?.isCancelled||e?.isCanceled||e?.isExpired?!0:/(cancel|complete|expire|closed|done)/i.test(String(e?.status??""))}s(q1,"isTerminalMarketListing");function Gd(e){let t={fair:0,ask:0,bid:0};for(let a of e??[]){let n=a.enhancementLevel??0,i=Number(u.api.getFairValue?.(a.itemHrid,n)),o=Number.isFinite(i)&&i>0?i:u.api.getAssetValue(a.itemHrid,n),r=u.api.getAskPrice(a.itemHrid,n),c=u.api.getBidPrice(a.itemHrid,n),l=Math.max(0,Number(a.coinsAvailable??0)),d=Math.max(0,Number(a.unclaimedCoinCount??0)),m=l+d;t.fair+=m,t.ask+=m,t.bid+=m;let p=Math.max(0,Number(a.unclaimedItemCount??0));if(t.fair+=p*o,t.ask+=p*r,t.bid+=p*c,!a.isSell||q1(a))continue;let b=Math.max(0,Number(a.orderQuantity??0)-Number(a.filledQuantity??0)),f=1-u.api.getMarketTaxRate(a.itemHrid);t.fair+=b*o*f,t.ask+=b*r*f,t.bid+=b*c*f}return t}s(Gd,"calculateMarketListingValues");async function Zd(){if(!Array.isArray(u.state.initData_characterItems)||!await u.api.ensureMarketValueSource())return null;let e=0,t=0,a=0,n=0,i=0,o=0,r=0;for(let p of u.state.initData_characterItems){if(p.itemHrid==="/items/cowbell"&&!u.api.shouldIncludeCowbellsInAssets())continue;let b=Math.max(0,Number(p.count??0)),f=p.enhancementLevel??0,g=u.api.getAssetValue(p.itemHrid,f,{itemLocationHrid:p.itemLocationHrid}),h=u.api.getAskPrice(p.itemHrid,f),_=u.api.getBidPrice(p.itemHrid,f);p.itemLocationHrid!=="/item_locations/inventory"?(e+=b*g,n+=b*h,i+=b*_):u.api.isNonTradableTokenAsset(p.itemHrid)?a+=b*g:(t+=b*g,o+=b*h,r+=b*_)}let c=Gd(u.state.initData_myMarketListings),l=await u.api.getSelfBuildScores(),d=w0(u.api.getGuildShrineValue()),m={equipment:e,inventory:t,marketListings:c.fair,houses:w0(l?.assets?.allHouses*1e6),abilities:w0(l?.assets?.allAbilities*1e6),nonTradableTokens:a,shrine:d};return m.liquid=Vd([m.equipment,m.inventory,m.marketListings]),m.fixed=Vd([m.houses,m.abilities,m.nonTradableTokens,m.shrine]),m.total=m.liquid+m.fixed,{schema:1,recordedAt:new Date().toISOString(),server:u.api.getMarketEnvironment?.()??"production",characterId:String(u.state.currentCharacterId??""),complete:_a.every(p=>Number.isFinite(m[p])),values:m,liquidation:{ask:n+o+c.ask,bid:i+r+c.bid},scores:l}}s(Zd,"getAssetSnapshot");function Io(){return jd}s(Io,"getLatestAssetSnapshot");function v0(e){return y0.add(e),()=>y0.delete(e)}s(v0,"onAssetSnapshot");async function Yi(){return Ji||(Ji=Zd().then(e=>{if(!e)return null;jd=e;for(let t of y0)try{t(e)}catch(a){console.error(u.config.isZH?"[MWITools] 资产快照监听器执行失败。":"[MWITools] Asset snapshot listener failed.",a)}return e}).finally(()=>{Ji=null}),Ji)}s(Yi,"refreshAssetSnapshot");function x0(e=120){clearTimeout(Wd),Wd=setTimeout(()=>{Yi()},e)}s(x0,"scheduleAssetSnapshotRefresh"),Object.assign(u.api,{ASSET_COMPONENT_KEYS:_a,calculateMarketListingValues:Gd,getAssetSnapshot:Zd,getLatestAssetSnapshot:Io,onAssetSnapshot:v0,refreshAssetSnapshot:Yi,scheduleAssetSnapshotRefresh:x0});var Ud="MWITools_asset_history_v1",Kd="__mwitools_asset_history_backup__",Qi={total:"kbd_calc_data",breakdown:"kbd_calc_breakdown_data",tags:"kbd_calc_tags",tagPrefs:"kbd_calc_tag_prefs",tagPanel:"kbd_calc_tag_panel",dataPanel:"kbd_calc_data_panel",lastUpdate:"kbd_calc_last_update_at"};function No(e,t){try{return e?JSON.parse(e):t}catch{return t}}s(No,"safeParse");function R1(){return{version:1,roles:{},migrations:{everydayProfit:{}},legacy:{}}}s(R1,"createEmptyData");function k0(e){if(e==null||e==="")return null;let t=Number(e);return Number.isFinite(t)?t:null}s(k0,"finiteOrNull");function Xd(e,t){let a=t.map(n=>k0(e[n]));return a.every(Number.isFinite)?a.reduce((n,i)=>n+i,0):null}s(Xd,"sumIfComplete");function S0(e={},t={}){let a=Object.fromEntries(_a.map(n=>[n,k0(e[n])]));return a.liquid=Xd(a,["equipment","inventory","marketListings"]),a.fixed=Xd(a,["houses","abilities","nonTradableTokens","shrine"]),a.total=Number.isFinite(a.liquid)&&Number.isFinite(a.fixed)?a.liquid+a.fixed:t.preserveTotal?k0(e.total):null,a}s(S0,"normalizeAssetValues");function an(e=new Date){return new Date(e.getTime()+8*36e5).toISOString().slice(0,10)}s(an,"getUtc8DayKey");function C0(e){let[t,a,n]=String(e).split("-").map(Number);return Date.UTC(t,a-1,n)}s(C0,"parseDayKey");function qa(e,t){return Math.round((C0(t)-C0(e))/864e5)}s(qa,"dayGap");function Ho(e,t,a){if(!e||typeof e!="object")return{};if(t&&e[t])return e[t];if(a&&e[a])return e[a];let n=Object.keys(e);return n.length===1?e[n[0]]:{}}s(Ho,"roleBucketFromLegacy");function Jd(e,t={}){return S0({equipment:t.equip,inventory:t.inventory,marketListings:t.orders,houses:t.house,abilities:t.skill,nonTradableTokens:null,shrine:null,total:e},{preserveTotal:!0})}s(Jd,"legacyValues");function Yd(e={},t={}){return{...e,...t}}s(Yd,"mergeDays");var A0=class{static{s(this,"AssetHistoryStore")}constructor(t=globalThis.localStorage){this.storage=t;let a=No(t?.getItem(Ud),null);this.data=a?.version===1?a:R1()}save(){this.storage?.setItem(Ud,JSON.stringify(this.data))}scopeKey(t=u.state.currentCharacterId){return`${u.api.getMarketEnvironment?.()??"production"}:${String(t??"")}`}getRole(t=this.scopeKey()){return this.data.roles[t]??={days:{}},this.data.roles[t].days??={},this.data.roles[t]}list(t=this.scopeKey()){return Object.entries(this.getRole(t).days).sort(([a],[n])=>a.localeCompare(n))}record(t,a=this.scopeKey(t?.characterId)){if(!t?.complete)return!1;let n=S0(t.values);if(!Number.isFinite(n.total))return!1;let i=an(new Date(t.recordedAt)),o=this.getRole(a);return o.server=t.server,o.characterId=t.characterId,o.days[i]={recordedAt:t.recordedAt,values:n},this.save(),i}comparison(t=an(),a=this.scopeKey()){let n=this.list(a).filter(([l])=>l<t);if(!n.length)return null;let i=new Date(C0(t)-864e5).toISOString().slice(0,10),o=n.find(([l])=>l===i),[r,c]=o??n.at(-1);return{date:r,record:c,gapDays:qa(r,t)}}sevenDayAverage(t=an(),a=this.scopeKey()){let n=this.list(a).filter(([l,d])=>l<=t&&Number.isFinite(d?.values?.total));if(n.length<2)return null;let i=n.findLastIndex(([l])=>l<=t),o=n[i],r=n[Math.max(0,i-1)];for(let l=i-1;l>=0;l-=1){let d=n[l];if(r=d,qa(d[0],o[0])>=7)break}let c=qa(r[0],o[0]);return c<=0?null:(o[1].values.total-r[1].values.total)/c}updateDay(t,a,n=this.scopeKey()){let i=S0(a);if(!_a.every(o=>Number.isFinite(i[o])))throw new TypeError("Every asset component needs a finite value");return this.getRole(n).days[t]={recordedAt:new Date().toISOString(),values:i,edited:!0},this.save(),i}deleteDay(t,a=this.scopeKey()){let n=this.getRole(a).days;return Object.hasOwn(n,t)?(delete n[t],this.save(),!0):!1}cleanupInvalid(t=this.scopeKey()){let a=0;for(let[n,i]of this.list(t))Number.isFinite(i?.values?.total)||(delete this.getRole(t).days[n],a+=1);return a&&this.save(),a}detectAnomalies(t=this.scopeKey()){let a=this.list(t).filter(([,r])=>Number.isFinite(r?.values?.total));if(a.length<5)return[];let n=a.slice(1).map(([r,c],l)=>({date:r,value:(c.values.total-a[l][1].values.total)/Math.max(1,qa(a[l][0],r))})),i=n.reduce((r,c)=>r+c.value,0)/n.length,o=Math.sqrt(n.reduce((r,c)=>r+(c.value-i)**2,0)/n.length);return o>0?n.map(r=>({...r,zScore:(r.value-i)/o})).filter(({zScore:r})=>Math.abs(r)>=4):[]}migrateLegacy({scopeKey:t=this.scopeKey(),roleName:a=""}={}){if(this.data.migrations.everydayProfit[t])return!1;let n=t.split(":").at(-1),i=No(this.storage?.getItem(Qi.total),{}),o=No(this.storage?.getItem(Qi.breakdown),{}),r=Ho(i,a,n),c=Ho(o,a,n),l={};for(let m of new Set([...Object.keys(r??{}),...Object.keys(c??{})])){let p=Jd(r?.[m],c?.[m]);Number.isFinite(p.total)&&(l[m]={recordedAt:`${m}T15:59:59.999Z`,values:p})}let d=this.getRole(t);return d.days={...l,...d.days},d.legacyRoleName=a||null,this.data.legacy=Object.fromEntries(Object.entries(Qi).filter(([m])=>m!=="total"&&m!=="breakdown").map(([m,p])=>[m,No(this.storage?.getItem(p),{})])),this.data.migrations.everydayProfit[t]={migratedAt:new Date().toISOString(),importedDays:Object.keys(l).length},this.save(),Object.keys(l).length}exportBackup(){return{[Kd]:!0,schema:1,exportedAt:new Date().toISOString(),data:this.data}}importBackup(t,{mode:a="merge",scopeKey:n=this.scopeKey()}={}){if(t?.[Kd]===!0){let i=t.data?.roles?.[n]?.days??{},o=this.getRole(n);return o.days=a==="replace"?{...i}:Yd(o.days,i),this.data.legacy={...this.data.legacy,...t.data?.legacy??{}},this.save(),Object.keys(i).length}if(t?.__everyday_profit_backup__===!0){let i=t.payload??{},o=i[Qi.total]??{},r=i[Qi.breakdown]??{},c=this.getRole(n).legacyRoleName??"",l=n.split(":").at(-1),d=Ho(o,c,l),m=Ho(r,c,l),p={};for(let f of new Set([...Object.keys(d),...Object.keys(m)])){let g=Jd(d[f],m[f]);Number.isFinite(g.total)&&(p[f]={recordedAt:`${f}T15:59:59.999Z`,values:g})}let b=this.getRole(n);return b.days=a==="replace"?p:Yd(b.days,p),this.data.legacy.importedEverydayProfit=i,this.save(),Object.keys(p).length}throw new TypeError("Unsupported asset history backup")}},vt=new A0;var Qd={equipment:"#5bc0eb",inventory:"#ffd166",marketListings:"#8ecae6",houses:"#ff6384",abilities:"#a78bfa",nonTradableTokens:"#80ed99",shrine:"#f4a261"},B1={equipment:["装备","Equipment"],inventory:["库存","Inventory"],marketListings:["订单","Market listings"],houses:["房屋","Houses"],abilities:["技能","Abilities"],nonTradableTokens:["不可交易代币","Non-tradable tokens"],shrine:["神龛","Shrine"]};function nn(e,t){return u.config.isZH?e:t}s(nn,"t");function z1(e,t){if(!Number.isFinite(t)||!e.length)return e;let a=e.at(-1)[0];return e.filter(([n])=>qa(n,a)<t)}s(z1,"filterEntries");function em(e,t){return e.map(([a,n],i)=>{if(!i)return null;let o=e[i-1],r=n?.values?.[t],c=o[1]?.values?.[t];return!Number.isFinite(r)||!Number.isFinite(c)?null:(r-c)/Math.max(1,qa(o[0],a))})}s(em,"normalizedChanges");function F1(e,t,a=7){return e.map(([n,i],o)=>{if(!o||!Number.isFinite(i?.values?.[t]))return null;let r=e[o-1];for(let d=o-1;d>=0&&(r=e[d],!(qa(r[0],n)>=a));d-=1);let c=qa(r[0],n),l=r[1]?.values?.[t];return!(c>0)||!Number.isFinite(l)?null:(i.values[t]-l)/c})}s(F1,"calendarAverage");function j1(e){return u.api.formatExactNumber?.(e)??String(e)}s(j1,"formatTooltip");var Do=class{static{s(this,"AssetHistoryChart")}constructor(t,a){this.canvas=t,this.fallback=a,this.instance=null}destroy(){this.instance?.destroy?.(),this.instance=null}resetZoom(){this.instance?.resetZoom?.()}render(t,{mode:a="total",range:n=null}={}){let i=globalThis.Chart;if(typeof i!="function"){this.destroy(),this.canvas.hidden=!0,this.fallback.hidden=!1,this.fallback.textContent=nn("图表依赖未加载;资产数据与明细仍可正常使用。","Chart dependencies did not load; asset data is still available.");return}this.canvas.hidden=!1,this.fallback.hidden=!0;let o=z1(t,n),r=o.map(([d])=>d.slice(5)),c,l;if(a==="profit"){let d=em(o,"total");c=[{type:"bar",label:nn("每日盈亏","Daily P/L"),data:d,backgroundColor:d.map(m=>m>=0?"rgba(65,190,115,.58)":"rgba(235,90,90,.58)"),borderRadius:3},{type:"line",label:nn("7 日均线","7-day average"),data:F1(o,"total"),borderColor:"#ffd369",backgroundColor:"transparent",borderWidth:2,pointRadius:0,tension:.22,spanGaps:!0}],l=nn("每日资产盈亏","Daily asset P/L")}else a==="breakdown"?(c=_a.map(d=>({type:"line",label:nn(...B1[d]),data:em(o,d),borderColor:Qd[d],backgroundColor:Qd[d],borderWidth:2,pointRadius:2,tension:.2,spanGaps:!0})),l=nn("分项每日变化","Daily component changes")):(c=[{type:"line",label:nn("总资产","Total assets"),data:o.map(([,d])=>d?.values?.total??null),borderColor:"#4cc9f0",backgroundColor:"rgba(76,201,240,.14)",fill:!0,borderWidth:2,pointRadius:2,tension:.2,spanGaps:!0}],l=nn("总资产历史","Total asset history"));this.destroy(),this.instance=new i(this.canvas.getContext("2d"),{data:{labels:r,datasets:c},options:{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"index",intersect:!1},animation:!1,plugins:{title:{display:!0,text:l,color:"#eee"},legend:{labels:{color:"#ddd",usePointStyle:!0}},tooltip:{callbacks:{label(d){let m=d.raw;return`${d.dataset.label}: ${Number.isFinite(m)?j1(m):"—"}`}}},zoom:{pan:{enabled:!0,mode:"x"},zoom:{wheel:{enabled:!0},pinch:{enabled:!0},drag:{enabled:!0,modifierKey:"shift"},mode:"x"}}},scales:{x:{ticks:{color:"#bbb",maxRotation:0,autoSkip:!0},grid:{color:"rgba(255,255,255,.06)"}},y:{ticks:{color:"#bbb",callback(d){return u.api.numberFormatter?.(d)??d}},grid:{color:"rgba(255,255,255,.08)"}}}}})}};var Xt="mwitools-asset-history-tab",er="mwitools-asset-history-panel",M0="mwitools-asset-history-style",W1=12,tm=[["total","总计","Total"],["equipment","装备","Equipment"],["inventory","库存","Inventory"],["marketListings","订单","Market listings"],["houses","房屋","Houses"],["abilities","技能","Abilities"],["nonTradableTokens","不可交易代币","Non-tradable tokens"],["shrine","神龛","Shrine"]];function Ie(e,t){return u.config.isZH?e:t}s(Ie,"t");function si(e,t=!1){if(!Number.isFinite(e))return"—";let a=u.api.numberFormatter?.(Math.abs(e))??e;return!t||e===0?String(a):`${e>0?"+":"−"}${a}`}s(si,"formatNumber");function am(e,t){if(!Number.isFinite(e)||!Number.isFinite(t)||t===0)return"—";let a=(e-t)/t*100;return`${a>0?"+":""}${a.toFixed(2)}%`}s(am,"formatPercent");function tr(e){return!Number.isFinite(e)||e===0?"is-neutral":e>0?"is-positive":"is-negative"}s(tr,"valueClass");function V1(e){return u.config.isZH?e===1?"今天":`近 ${e} 天`:e===1?"Today":`Over the last ${e} days`}s(V1,"sharePeriod");function G1({change:e,percent:t,gapDays:a=1},n=Math.floor(Math.random()*W1)){if(!Number.isFinite(e)||!Number.isFinite(t))return"";let i=V1(a),o=si(Math.abs(e)),r=`${Math.abs(t).toFixed(2)}%`,c=si(e,!0),l=`${t>0?"+":""}${t.toFixed(2)}%`,d=[()=>`📈 ${i}资产战报:赚了 ${o},总资产增长 ${r}。`,()=>`${i}的奶牛账本飘绿:进账 ${o},身家上涨 ${r}。`,()=>`汇报一下${i}战果:盈利 ${o},资产增加 ${r}。`,()=>`${i}收工报数:净赚 ${o},总资产提升 ${r}。`,()=>`财富成绩单更新:赚到 ${o},资产涨幅 ${r}。`,()=>`牛棚财报新鲜出炉:${i}盈利 ${o},身家增长 ${r}。`,()=>`${i}搬砖结算:收入 ${o},资产上涨 ${r}。`,()=>`小小炫耀一下:${i}赚了 ${o},总资产 +${r}。`,()=>`账本一翻,${i}多了 ${o},身家涨了 ${r}。`,()=>`🚀 财富进度向前:+${o},涨幅 +${r}。`,()=>`挤奶之余看了眼资产:${i}进账 ${o},总计增长 ${r}。`,()=>`MWITools 资产盘点:${i}盈利 +${o},变化 +${r}。`],m=[()=>`📉 ${i}资产战报:亏了 ${o},总资产缩水 ${r}。`,()=>`${i}的奶牛账本飘红:损失 ${o},身家下降 ${r}。`,()=>`汇报一下${i}战况:亏损 ${o},资产减少 ${r}。`,()=>`${i}收工报数:净亏 ${o},总资产回落 ${r}。`,()=>`财富成绩单更新:少了 ${o},资产跌幅 ${r}。`,()=>`牛棚财报有点红:${i}亏损 ${o},身家缩水 ${r}。`,()=>`${i}搬砖结算:支出 ${o},资产下降 ${r}。`,()=>`今天不炫耀了:${i}亏了 ${o},总资产 -${r}。`,()=>`账本一翻,${i}少了 ${o},身家跌了 ${r}。`,()=>`🩹 财富进度回撤:−${o},跌幅 −${r}。`,()=>`挤奶之余看了眼资产:${i}损失 ${o},总计下降 ${r}。`,()=>`MWITools 资产盘点:${i}亏损 −${o},变化 −${r}。`],p=[()=>`📈 Asset report: ${i} I gained ${o}; total assets are up ${r}.`,()=>`${i}'s cow ledger is green: +${o}, net worth up ${r}.`,()=>`The grind paid off: ${i} I made ${o}, growing assets by ${r}.`,()=>`Closing the books ${i}: profit ${o}, total wealth up ${r}.`,()=>`My wealth scorecard: +${o}, with a ${r} gain ${i.toLowerCase()}.`,()=>`Fresh from the cowshed: ${i} brought ${o}, net worth up ${r}.`,()=>`Tiny flex: I earned ${o} ${i.toLowerCase()}, assets +${r}.`,()=>`Checked the books: ${i} added ${o} to the pile, up ${r}.`,()=>`🚀 Wealth progress unlocked: +${o} (+${r}) ${i.toLowerCase()}.`,()=>`Milk money report: ${i} profit ${o}, portfolio growth ${r}.`,()=>`A green day in the galaxy: +${o}, total assets climbed ${r}.`,()=>`MWITools flex: ${i} P/L +${o}, asset change +${r}.`],b=[()=>`📉 Asset report: ${i} I lost ${o}; total assets are down ${r}.`,()=>`${i}'s cow ledger took a hit: -${o}, net worth down ${r}.`,()=>`Rough shift: ${i} cost me ${o}, and assets slipped ${r}.`,()=>`Closing the books ${i}: loss ${o}, total wealth down ${r}.`,()=>`My wealth scorecard: -${o}, with a ${r} drop ${i.toLowerCase()}.`,()=>`The cowshed report is red: ${i} lost ${o}, net worth down ${r}.`,()=>`Painful little update: I dropped ${o}, and assets fell ${r}.`,()=>`Checked the books twice: ${i} erased ${o}, down ${r}.`,()=>`🩹 Wealth progress setback: -${o} (-${r}) ${i.toLowerCase()}.`,()=>`Spilled milk report: ${i} loss ${o}, portfolio down ${r}.`,()=>`A red day in the galaxy: -${o}, total assets fell ${r}.`,()=>`MWITools reality check: ${i} P/L -${o}, asset change -${r}.`],f=u.config.isZH?[()=>`${i}资产持平:盈亏 0,变化 ${l}。`,()=>`${i}的奶牛账本没动:资产变化 0(${l})。`,()=>`财富成绩单:${i}盈亏 0,涨跌 ${l}。`,()=>`收工报数:${i}资产不增不减,变化 ${l}。`,()=>`账本平静:${i}盈亏 0,资产变化 ${l}。`,()=>`牛棚财报:${i}资产持平,盈亏 0(${l})。`,()=>`${i}搬砖结算:收入支出相抵,变化 ${l}。`,()=>`今天低调一下:${i}盈亏 0,资产持平 ${l}。`,()=>`账本一翻:${i}没有盈亏,变化 ${l}。`,()=>`➖ 财富进度原地踏步:${c}(${l})。`,()=>`挤奶之余看了眼资产:${i}盈亏 0,变化 ${l}。`,()=>`MWITools 资产盘点:${i}盈亏 ${c},变化 ${l}。`]:[()=>`${i}'s asset report is flat: P/L 0, change ${l}.`,()=>`${i}'s cow ledger did not move: 0 P/L (${l}).`,()=>`Wealth scorecard: ${i} finished flat at ${l}.`,()=>`Closing the books ${i}: no gain or loss, change ${l}.`,()=>`Quiet ledger: ${i} P/L 0, asset change ${l}.`,()=>`Cowshed report: ${i} assets stayed flat at ${l}.`,()=>`${i}'s grind broke even: P/L 0, change ${l}.`,()=>`Keeping it low-key: ${i} assets stayed flat at ${l}.`,()=>`Checked the books: ${i} had no P/L, change ${l}.`,()=>`➖ Wealth progress held steady: ${c} (${l}).`,()=>`Paused milking to check: ${i} P/L 0, change ${l}.`,()=>`MWITools asset check: ${i} P/L ${c}, change ${l}.`],g=e===0?f:u.config.isZH?e>0?d:m:e>0?p:b,h=((Number(n)||0)%g.length+g.length)%g.length;return g[h]()}s(G1,"buildAssetShareMessage");function Z1(e,t=document){let a=[...t.querySelectorAll('input[class*="Chat_chatInput"],input[placeholder*="输入消息"],input[placeholder*="message" i]')],n=a.find(c=>c.getClientRects().length>0)??a.at(0);if(!n||!e)return null;let i=n.ownerDocument?.defaultView??window,o=Object.getOwnPropertyDescriptor(i.HTMLInputElement.prototype,"value")?.set,r=s(c=>{o?o.call(n,c):n.value=c,n.dispatchEvent(new i.Event("input",{bubbles:!0}))},"applyValue");return r(""),r(e),n.focus(),n.setSelectionRange?.(e.length,e.length),n}s(Z1,"pasteAssetShareToChat");function U1(){if(document.getElementById(M0))return;let e=document.createElement("style");e.id=M0,e.textContent=`
#${Xt}[data-active="true"] { color:#00c6ff!important; font-weight:700; }
[data-mwitools-asset-active="true"] button:not(#${Xt}) { border-color:var(--mwi-asset-idle-border,rgba(255,255,255,.16))!important; background:var(--mwi-asset-idle-background,rgba(255,255,255,.08))!important; box-shadow:var(--mwi-asset-idle-shadow,none)!important; color:var(--mwi-asset-idle-color,var(--color-text-secondary,#aeb5c0))!important; filter:none!important; }
#${er} { box-sizing:border-box; width:100%; max-width:100%; min-width:0; max-height:calc(100% - 34px); overflow-x:hidden; overflow-y:auto; overscroll-behavior:contain; scrollbar-gutter:stable; padding:12px 12px 24px; color:var(--color-text-primary,#eee); background:#111b2b; }
.mwi-asset-disclaimer { margin:0 0 10px; color:var(--color-text-secondary,#aaa); font-size:.72rem; line-height:1.4; }
.mwi-asset-share { display:flex; align-items:center; gap:8px; margin:-2px 0 10px; }
.mwi-asset-share-status { min-width:0; color:var(--color-text-secondary,#aaa); font-size:.68rem; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.mwi-asset-summary { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:8px; margin-bottom:12px; }
.mwi-asset-card { min-width:0; padding:10px 12px; border:1px solid rgba(255,255,255,.08); border-radius:8px; background:rgba(255,255,255,.06); }
.mwi-asset-card-label { color:#9fb4d1; font-size:.68rem; }
.mwi-asset-card-value { overflow:hidden; margin-top:4px; font-size:1rem; font-weight:700; text-overflow:ellipsis; white-space:nowrap; }
.mwi-asset-card-meta { margin-top:3px; color:var(--color-text-secondary,#999); font-size:.63rem; }
.is-positive { color:#65d394!important; } .is-negative { color:#ff7b75!important; } .is-neutral { color:inherit; }
.mwi-asset-section { margin-top:10px; border:1px solid rgba(255,255,255,.08); border-radius:8px; background:#0c141f; overflow:hidden; }
.mwi-asset-section-title { padding:9px 11px; border-bottom:1px solid rgba(255,255,255,.08); font-size:.84rem; font-weight:700; }
.mwi-asset-table-wrap { max-width:100%; overflow-x:hidden; }
.mwi-asset-table { width:100%; min-width:0; table-layout:fixed; border-collapse:collapse; font-size:.72rem; }
.mwi-asset-table th,.mwi-asset-table td { overflow:hidden; padding:7px 6px; border-bottom:1px solid rgba(255,255,255,.065); text-align:right; text-overflow:ellipsis; white-space:nowrap; }
.mwi-asset-table th { overflow-wrap:anywhere; white-space:normal; }
.mwi-asset-table th:first-child,.mwi-asset-table td:first-child { text-align:left; }
.mwi-asset-table:not(.mwi-asset-history-table) th:first-child { width:18%; }
.mwi-asset-history-table th:first-child { width:28%; }
.mwi-asset-history-table th:last-child { width:38%; }
.mwi-asset-table tr:last-child td { border-bottom:0; }
.mwi-asset-table tr[data-key="total"] { font-weight:700; background:rgba(255,255,255,.035); }
.mwi-asset-chart-controls { display:flex; flex-wrap:wrap; gap:6px; padding:9px 10px 0; }
.mwi-asset-chart-controls button,.mwi-asset-action { border:1px solid rgba(255,255,255,.13); border-radius:5px; background:rgba(255,255,255,.07); color:inherit; padding:5px 9px; cursor:pointer; font:inherit; }
.mwi-asset-chart-controls button:hover,.mwi-asset-action:hover { background:#3f4655; transform:translateY(-1px); }
.mwi-asset-chart-controls button[data-active="true"] { border-color:transparent; background:#00c6ff; color:#0b1522; box-shadow:0 0 10px rgba(0,198,255,.45); }
.mwi-asset-chart-box { position:relative; height:330px; padding:8px 10px 12px; }
.mwi-asset-chart-fallback { display:grid; height:100%; place-items:center; color:var(--color-text-secondary,#aaa); font-size:.75rem; text-align:center; }
.mwi-asset-manager { padding:9px 11px 12px; }
.mwi-asset-manager summary { cursor:pointer; font-size:.8rem; font-weight:700; }
.mwi-asset-manager-actions { display:flex; flex-wrap:wrap; gap:6px; margin:9px 0; }
.mwi-asset-action.is-danger { color:#ff938c; }
.mwi-asset-history-table button { padding:3px 7px; font-size:.68rem; }
.mwi-asset-edit-dialog { width:min(520px,calc(100vw - 24px)); border:1px solid rgba(255,255,255,.16); border-radius:8px; background:#182033; color:#eee; }
.mwi-asset-edit-grid { display:grid; grid-template-columns:1fr 1fr; gap:8px 12px; }
.mwi-asset-edit-grid label { display:grid; gap:3px; color:#bbb; font-size:.7rem; }
.mwi-asset-edit-grid input { box-sizing:border-box; width:100%; border:1px solid rgba(255,255,255,.18); border-radius:4px; background:#101728; color:#eee; padding:6px; }
.mwi-asset-edit-actions { display:flex; justify-content:flex-end; gap:8px; margin-top:12px; }
@media(max-width:760px){
#${er} { min-height:0; padding:10px 8px calc(20px + env(safe-area-inset-bottom,0px)); overflow-x:hidden; overflow-y:auto; overscroll-behavior-y:contain; -webkit-overflow-scrolling:touch; touch-action:pan-y; }
.mwi-asset-chart-box { height:280px; }
.mwi-asset-edit-grid { grid-template-columns:1fr; }
}
`,(document.head??document.documentElement).appendChild(e)}s(U1,"addStyles");function K1(e){return String(u.api.getOriTextFromElement?.(e)??e?.textContent??"").trim().toLowerCase()}s(K1,"buttonLabel");var X1={inventory:/^(库存|inventory)$/i,equipment:/^(装备|equipment)$/i,skills:/^(技能|skills?|abilities)$/i,house:/^(房屋|house)$/i,loadout:/^(配装|loadouts?)(?:\s*\d+)?$/i};function J1(){let e=new Map;for(let a of document.querySelectorAll('button[role="tab"],button')){let n=a.parentElement;n&&(e.has(n)||e.set(n,[]),e.get(n).push(a))}let t=[];for(let[a,n]of e){let i=Object.fromEntries(Object.entries(X1).map(([d,m])=>[d,n.find(p=>m.test(K1(p)))])),o=[i.equipment,i.skills,i.house].filter(Boolean).length;if(!i.inventory||!i.loadout||o<2)continue;let r=a.getBoundingClientRect?.(),c=!!(r&&r.width>0&&r.height>0),l=!!a.closest('[class*="CharacterManagement_characterManagement"]');t.push({button:i.loadout,score:Number(c)*4+Number(l)*2})}return t.sort((a,n)=>n.score-a.score),t[0]?.button??null}s(J1,"findCharacterManagementLoadoutTab");function Y1(e){if(!(e instanceof Element))return!1;let t=String(e.className??"");return!!(e.querySelector("input,canvas")||/(Inventory|Equipment|Ability|Abilities|House|Loadout|Panel)_/i.test(t)||e.querySelector('[class*="Inventory_"],[class*="Equipment_"],[class*="Ability"],[class*="House_"],[class*="Loadout"]'))}s(Y1,"looksLikeContent");function Q1(e){let t=e.parentElement;for(let a=0;t?.parentElement&&a<8;a+=1){let n=t.parentElement;if([...n.children].filter(o=>o!==t&&o.id!==er).some(Y1))return{shell:n,navigationBranch:t};t=n}return null}s(Q1,"findPanelShell");function nm(){let e=globalThis.window??globalThis;return e.matchMedia?.("(max-width: 760px)")?.matches??Number(e.innerWidth)<=760}s(nm,"isCompactViewport");function Po(e,t,a=""){return`<div class="mwi-asset-card"><div class="mwi-asset-card-label">${e}</div><div class="mwi-asset-card-value" id="${t}">—</div>${a?`<div class="mwi-asset-card-meta" id="${a}"></div>`:""}</div>`}s(Po,"createCard");function e5(e){let t=new Blob([JSON.stringify(e,null,2)],{type:"application/json;charset=utf-8"}),a=URL.createObjectURL(t),n=document.createElement("a");n.href=a,n.download=`MWITools-asset-history-${new Date().toISOString().slice(0,10)}.json`,document.body.appendChild(n),n.click(),n.remove(),URL.revokeObjectURL(a)}s(e5,"downloadBackup");var T0=class{static{s(this,"AssetHistoryPanel")}constructor(t,a,n){this.host=t,this.store=a,this.scopeKey=n,this.snapshot=null,this.mode="total",this.range=30,this.build()}build(){this.host.innerHTML=`
<p class="mwi-asset-disclaimer">${Ie("盈亏按资产估值变化计算,包含市场价格波动,并非已实现交易利润。","P/L is based on asset valuation changes, including market price movement; it is not realized trading profit.")}</p>
<div class="mwi-asset-share"><button type="button" class="mwi-asset-action" id="mwi-asset-share-chat" disabled>${Ie("炫耀","Flex")}</button><span class="mwi-asset-share-status">${Ie("需要至少两天的资产记录","At least two asset records are required")}</span></div>
<div class="mwi-asset-summary">
${Po(Ie("当前总资产","Current total assets"),"mwi-asset-current-total")}
${Po(Ie("总盈亏","Total P/L"),"mwi-asset-total-change","mwi-asset-compare-date")}
${Po(Ie("盈亏比例","P/L percentage"),"mwi-asset-total-percent")}
${Po(Ie("近 7 日平均","7-day average"),"mwi-asset-seven-average")}
</div>
<section class="mwi-asset-section">
<div class="mwi-asset-section-title">${Ie("分项资产变化","Asset changes by component")}</div>
<div class="mwi-asset-table-wrap"><table class="mwi-asset-table"><thead><tr><th>${Ie("项目","Component")}</th><th>${Ie("当前","Current")}</th><th id="mwi-asset-change-heading">${Ie("变化","Change")}</th><th>${Ie("比例","Percentage")}</th></tr></thead><tbody id="mwi-asset-breakdown"></tbody></table></div>
</section>
<section class="mwi-asset-section">
<div class="mwi-asset-chart-controls">
<button type="button" data-mode="total">${Ie("总资产","Total assets")}</button>
<button type="button" data-mode="profit">${Ie("每日盈亏","Daily P/L")}</button>
<button type="button" data-mode="breakdown">${Ie("分项变化","Components")}</button>
<span style="flex:1"></span>
<button type="button" data-range="7">7${Ie("天","d")}</button>
<button type="button" data-range="15">15${Ie("天","d")}</button>
<button type="button" data-range="30">30${Ie("天","d")}</button>
<button type="button" data-range="all">${Ie("全部","All")}</button>
<button type="button" id="mwi-asset-reset-zoom">${Ie("重置缩放","Reset zoom")}</button>
</div>
<div class="mwi-asset-chart-box"><canvas id="mwi-asset-chart"></canvas><div class="mwi-asset-chart-fallback" hidden></div></div>
</section>
<section class="mwi-asset-section"><details class="mwi-asset-manager"><summary>${Ie("数据管理与备份","Data management & backup")}</summary>
<div class="mwi-asset-manager-actions">
<button type="button" class="mwi-asset-action" id="mwi-asset-export">${Ie("导出备份","Export backup")}</button>
<button type="button" class="mwi-asset-action" id="mwi-asset-import">${Ie("导入备份","Import backup")}</button>
<button type="button" class="mwi-asset-action is-danger" id="mwi-asset-cleanup">${Ie("清理无效记录","Clean invalid records")}</button>
<button type="button" class="mwi-asset-action is-danger" id="mwi-asset-anomalies">${Ie("检测并删除异常","Detect & delete anomalies")}</button>
<input type="file" id="mwi-asset-import-file" accept="application/json" hidden>
</div>
<div class="mwi-asset-table-wrap"><table class="mwi-asset-table mwi-asset-history-table"><thead><tr><th>${Ie("日期","Date")}</th><th>${Ie("总资产","Total")}</th><th>${Ie("操作","Actions")}</th></tr></thead><tbody id="mwi-asset-history-rows"></tbody></table></div>
</details></section>
<dialog class="mwi-asset-edit-dialog" id="mwi-asset-edit-dialog"><h3>${Ie("编辑分项资产","Edit asset components")}</h3><div class="mwi-asset-edit-grid">${_a.map(t=>{let a=tm.find(([n])=>n===t);return`<label>${Ie(a[1],a[2])}<input type="number" min="0" step="any" data-component="${t}"></label>`}).join("")}</div><div class="mwi-asset-edit-actions"><button type="button" class="mwi-asset-action" data-edit-cancel>${Ie("取消","Cancel")}</button><button type="button" class="mwi-asset-action" data-edit-save>${Ie("保存","Save")}</button></div></dialog>
`,this.chart=new Do(this.host.querySelector("#mwi-asset-chart"),this.host.querySelector(".mwi-asset-chart-fallback")),this.bind()}bind(){this.host.querySelector("#mwi-asset-share-chat").addEventListener("click",()=>this.shareToChat()),this.host.querySelectorAll("[data-mode]").forEach(a=>{a.addEventListener("click",()=>{this.mode=a.dataset.mode,this.renderChart()})}),this.host.querySelectorAll("[data-range]").forEach(a=>{a.addEventListener("click",()=>{this.range=a.dataset.range==="all"?null:Number(a.dataset.range),this.renderChart()})}),this.host.querySelector("#mwi-asset-reset-zoom").addEventListener("click",()=>this.chart.resetZoom()),this.host.querySelector("#mwi-asset-export").addEventListener("click",()=>e5(this.store.exportBackup()));let t=this.host.querySelector("#mwi-asset-import-file");this.host.querySelector("#mwi-asset-import").addEventListener("click",()=>t.click()),t.addEventListener("change",async()=>{let a=t.files?.[0];if(a)try{let n=JSON.parse(await a.text()),i=globalThis.confirm?.(Ie("确定:替换当前角色历史;取消:合并导入。","OK: replace this character's history; Cancel: merge it."));this.store.importBackup(n,{mode:i?"replace":"merge",scopeKey:this.scopeKey}),this.update(this.snapshot)}catch(n){globalThis.alert?.(`${Ie("导入失败","Import failed")}: ${n.message}`)}finally{t.value=""}}),this.host.querySelector("#mwi-asset-cleanup").addEventListener("click",()=>{let a=this.store.cleanupInvalid(this.scopeKey);globalThis.alert?.(Ie(`已删除 ${a} 条无效记录。`,`Removed ${a} invalid records.`)),this.update(this.snapshot)}),this.host.querySelector("#mwi-asset-anomalies").addEventListener("click",()=>{let a=this.store.detectAnomalies(this.scopeKey);if(!a.length){globalThis.alert?.(Ie("未发现明显异常。","No clear anomalies found."));return}let n=a.map(({date:i,zScore:o})=>`${i} (Z=${o.toFixed(1)})`).join(`
`);globalThis.confirm?.(Ie(`确认删除以下异常日期?
${n}`,`Delete these anomalous dates?
${n}`))&&(a.forEach(({date:i})=>this.store.deleteDay(i,this.scopeKey)),this.update(this.snapshot))}),this.host.querySelector("[data-edit-cancel]").addEventListener("click",()=>this.closeEditor()),this.host.querySelector("[data-edit-save]").addEventListener("click",()=>this.saveEditor())}shareToChat(){let t=this.host.querySelector(".mwi-asset-share-status"),a=G1(this.shareStats??{});if(!a){t.textContent=Ie("暂无可对比的盈亏数据","No comparable P/L data yet");return}let n=Z1(a);t.dataset.pasted=String(!!n),t.textContent=n?Ie("已放入聊天框,按回车发送","Pasted into chat; press Enter to send"):Ie("未找到聊天框,请先展开聊天","Chat input not found; open chat first")}openEditor(t){let a=this.store.getRole(this.scopeKey).days[t],n=this.host.querySelector("#mwi-asset-edit-dialog");n.dataset.dayKey=t;for(let i of n.querySelectorAll("[data-component]")){let o=a?.values?.[i.dataset.component];i.value=Number.isFinite(o)?o:""}typeof n.showModal=="function"?n.showModal():n.setAttribute("open","")}closeEditor(){let t=this.host.querySelector("#mwi-asset-edit-dialog");typeof t.close=="function"?t.close():t.removeAttribute("open")}saveEditor(){let t=this.host.querySelector("#mwi-asset-edit-dialog"),a=Object.fromEntries([...t.querySelectorAll("[data-component]")].map(n=>[n.dataset.component,Number(n.value)]));if(!_a.every(n=>Number.isFinite(a[n])&&a[n]>=0)){globalThis.alert?.(Ie("请为全部七个分项填写不小于零的数字。","Enter a non-negative number for all seven components."));return}this.store.updateDay(t.dataset.dayKey,a,this.scopeKey),this.closeEditor(),this.update(this.snapshot)}update(t){this.snapshot=t??this.snapshot;let a=an(),n=this.store.getRole(this.scopeKey).days[a],i=this.snapshot?.values??n?.values??{},o=this.store.comparison(a,this.scopeKey),r=o?.record?.values??{},c=Number.isFinite(i.total)&&Number.isFinite(r.total)?i.total-r.total:null,l=Number.isFinite(c)&&Number.isFinite(r.total)&&r.total!==0?c/r.total*100:null;this.shareStats=o&&Number.isFinite(l)?{change:c,percent:l,gapDays:o.gapDays}:null;let d=this.host.querySelector("#mwi-asset-share-chat"),m=this.host.querySelector(".mwi-asset-share-status");d.disabled=!this.shareStats,this.shareStats?m.dataset.pasted!=="true"&&(m.textContent=Ie("随机生成今日战报并放入聊天框","Generate a random report and paste it into chat")):m.textContent=Ie("需要至少两天的资产记录","At least two asset records are required");let p=o?o.gapDays===1?Ie(`较昨日(${o.date})`,`vs yesterday (${o.date})`):Ie(`较 ${o.gapDays} 天前(${o.date})`,`vs ${o.gapDays} days ago (${o.date})`):Ie("暂无历史对比","No prior record"),b=s((h,_,{signed:y=!1,className:w=""}={})=>{let k=this.host.querySelector(h);k.textContent=si(_,y),k.title=Number.isFinite(_)?u.api.formatExactNumber(_):"",k.className=`mwi-asset-card-value ${w}`.trim()},"setNumber");b("#mwi-asset-current-total",i.total),b("#mwi-asset-total-change",c,{signed:!0,className:tr(c)}),this.host.querySelector("#mwi-asset-compare-date").textContent=p,b("#mwi-asset-total-percent",null,{className:tr(c)}),this.host.querySelector("#mwi-asset-total-percent").textContent=am(i.total,r.total);let f=this.store.sevenDayAverage(a,this.scopeKey);b("#mwi-asset-seven-average",f,{signed:!0,className:tr(f)}),this.host.querySelector("#mwi-asset-change-heading").textContent=o?Ie(`变化(较 ${o.date})`,`Change (vs ${o.date})`):Ie("变化","Change"),this.host.querySelector("#mwi-asset-breakdown").replaceChildren(...tm.map(([h,_,y])=>{let w=document.createElement("tr");w.dataset.key=h;let k=i[h],C=r[h],x=Number.isFinite(k)&&Number.isFinite(C)?k-C:null;return w.innerHTML=`<td>${Ie(_,y)}</td><td title="${Number.isFinite(k)?u.api.formatExactNumber(k):""}">${si(k)}</td><td class="${tr(x)}" title="${Number.isFinite(x)?u.api.formatExactNumber(x):""}">${si(x,!0)}</td><td class="${tr(x)}">${am(k,C)}</td>`,w})),this.renderHistoryRows(),this.renderChart()}renderHistoryRows(){let t=this.host.querySelector("#mwi-asset-history-rows"),a=this.store.list(this.scopeKey).slice().reverse();t.replaceChildren(...a.map(([n,i])=>{let o=document.createElement("tr"),r=i?.values?.total;return o.innerHTML=`<td>${n}</td><td title="${Number.isFinite(r)?u.api.formatExactNumber(r):""}">${si(r)}</td><td><button type="button" class="mwi-asset-action" data-edit>${Ie("编辑","Edit")}</button> <button type="button" class="mwi-asset-action is-danger" data-delete>${Ie("删除","Delete")}</button></td>`,o.querySelector("[data-edit]").addEventListener("click",()=>this.openEditor(n)),o.querySelector("[data-delete]").addEventListener("click",()=>{globalThis.confirm?.(Ie(`确认删除 ${n}?`,`Delete ${n}?`))&&(this.store.deleteDay(n,this.scopeKey),this.update(this.snapshot))}),o}))}renderChart(){this.host.querySelectorAll("[data-mode]").forEach(t=>{t.dataset.active=String(t.dataset.mode===this.mode)}),this.host.querySelectorAll("[data-range]").forEach(t=>{let a=t.dataset.range==="all"?null:Number(t.dataset.range);t.dataset.active=String(a===this.range)}),this.chart.render(this.store.list(this.scopeKey),{mode:this.mode,range:this.range})}destroy(){this.chart.destroy()}};function im({scope:e,store:t,scopeKey:a}){let n=!1,i=null,o=null,r=null,c=null,l=null,d=null,m=new Map,p=null,b=s(()=>{for(let[x,T]of m)x.hidden=T.hidden,T.styleDisplay===null?x.style.removeProperty("display"):x.style.display=T.styleDisplay;m.clear()},"restoreNative"),f=s(()=>{if(!d||typeof getComputedStyle!="function")return;let x=d.querySelector(`button:not(#${Xt}):not([aria-selected="true"]):not(.Mui-selected)`)??d.querySelector(`button:not(#${Xt})`);if(!x)return;let T=getComputedStyle(x),A=T.background||T.backgroundColor;A&&A!=="transparent"&&A!=="rgba(0, 0, 0, 0)"&&d.style.setProperty("--mwi-asset-idle-background",A),T.borderColor&&T.borderColor!=="transparent"&&d.style.setProperty("--mwi-asset-idle-border",T.borderColor),T.color&&d.style.setProperty("--mwi-asset-idle-color",T.color),T.boxShadow&&T.boxShadow!=="none"&&d.style.setProperty("--mwi-asset-idle-shadow",T.boxShadow)},"captureIdleTabStyle"),g=s(()=>{if(d){delete d.dataset.mwitoolsAssetActive;for(let x of["--mwi-asset-idle-background","--mwi-asset-idle-border","--mwi-asset-idle-color","--mwi-asset-idle-shadow"])d.style.removeProperty(x)}},"clearNativeTabOverride"),h=s(()=>{if(!r)return;if(!nm()||!n){r.style.removeProperty("height"),r.style.removeProperty("max-height");return}let T=`calc(100dvh - ${Math.max(0,Math.round(r.getBoundingClientRect().top))}px - env(safe-area-inset-bottom,0px))`;r.style.height=T,r.style.maxHeight=T},"syncHostViewport"),_=s(x=>{let T=!!x;if(i==="native"&&T&&!n&&f(),n=T,o&&(o.dataset.active=String(n),o.setAttribute("aria-selected",String(n)),o.classList.toggle("Mui-selected",n),o.hasAttribute("data-selected")&&(o.dataset.selected=String(n)),o.hasAttribute("data-state")&&(o.dataset.state=n?"active":"inactive"),n||o.blur()),d&&n){let A=d.querySelector(`button[aria-selected="true"]:not(#${Xt}), button.Mui-selected:not(#${Xt}), [role="tab"][aria-selected="true"]:not(#${Xt})`);A&&(p=A)}if(r&&(r.hidden=!n),!n){b(),g(),h();return}d.dataset.mwitoolsAssetActive="true";for(let A of[...l?.children??[]])A===d||A===r||A.tagName==="STYLE"||(m.has(A)||m.set(A,{hidden:A.hidden,styleDisplay:A.style.display||null}),A.hidden=!0,A.style.display="none");h(),c?.update(u.api.getLatestAssetSnapshot?.())},"setActive"),y=s(()=>{_(!1),c?.destroy(),c=null,o?.remove(),r?.remove(),i=null,o=null,r=null,l=null,d=null,p=null},"teardownMount"),w=s((x,T)=>{i="native",{shell:l,navigationBranch:d}=T,o=x.cloneNode(!0),o.id=Xt,o.type="button";let A=o.querySelector(".TabsComponent_badge__1Du26, .MuiBadge-root");A?A.textContent=Ie("盈亏","P/L"):o.textContent=Ie("盈亏","P/L");for(let I of[...o.classList])/(?:^|[_-])(?:active|selected)(?:[_-]|$)/i.test(I)&&o.classList.remove(I);o.dataset.active="false",o.hasAttribute("data-selected")&&(o.dataset.selected="false"),o.hasAttribute("data-state")&&(o.dataset.state="inactive"),o.setAttribute("aria-selected","false"),o.setAttribute("tabindex","-1"),o.addEventListener("click",I=>{I.preventDefault(),I.stopPropagation(),_(!n)}),x.insertAdjacentElement("afterend",o),r=document.createElement("section"),r.id=er,r.hidden=!0,l.appendChild(r),c=new T0(r,t,a),c.update(u.api.getLatestAssetSnapshot?.())},"mountNative"),k=s(()=>{let x=J1(),T=x&&Q1(x);if(x&&T){let A=o?.parentElement===x.parentElement&&o?.previousElementSibling===x&&r?.parentElement===T.shell;if(i==="native"&&o?.isConnected&&r?.isConnected&&A){let I=d?.querySelector(`button[aria-selected="true"]:not(#${Xt}), button.Mui-selected:not(#${Xt}), [role="tab"][aria-selected="true"]:not(#${Xt})`);if(I&&I!==p||o.getAttribute("aria-selected")!=="true"){n&&_(!1);return}n&&_(!0);return}y(),w(x,T);return}i!==null&&y()},"ensureMounted");U1(),k(),e.interval(k,500);let C=s(x=>{!n||x.target.closest(`#${Xt}`)||x.target.closest(`#${er}`)||d?.contains(x.target)&&_(!1)},"handleTabBranchClick");return e.event(document,"pointerdown",C,!0),e.event(document,"click",C,!0),e.event(document,"keydown",x=>{n&&nm()&&x.key==="Escape"&&_(!1)}),e.event(window,"resize",h),{update(x){c?.update(x)},destroy(){y(),document.getElementById(M0)?.remove()}}}s(im,"createAssetHistoryUi");function rm(){if(u.state.currentCharacterName)return String(u.state.currentCharacterName).trim();let e=[".CharacterName_name__1amXp span",'[class*="CharacterName_name"] span','[data-testid="character-name"]'].map(t=>document.querySelector(t)).find(Boolean);return String(e?.textContent??"").trim()}s(rm,"detectRoleName");function ya(){return vt.scopeKey(u.state.currentCharacterId)}s(ya,"currentScopeKey");var t5={storageKey:"MWITools_asset_history_v1",record(e=Io(),t=ya()){return vt.record(e,t)},getHistory(e=ya()){return vt.list(e)},getComparison(e=an(),t=ya()){return vt.comparison(e,t)},getSevenDayAverage(e=an(),t=ya()){return vt.sevenDayAverage(e,t)},updateDay(e,t,a=ya()){return vt.updateDay(e,t,a)},deleteDay(e,t=ya()){return vt.deleteDay(e,t)},cleanup(e=ya()){return vt.cleanupInvalid(e)},detectAnomalies(e=ya()){return vt.detectAnomalies(e)},exportBackup(){return vt.exportBackup()},importBackup(e,t={}){return vt.importBackup(e,{scopeKey:ya(),...t})},migrateLegacy(e={}){return vt.migrateLegacy({scopeKey:ya(),roleName:rm(),...e})},refresh:Yi,scheduleRefresh:x0};u.api.assetHistory=t5,u.features.register({id:"assetHistory",setting:"assetHistory",scope:"character",initialize({scope:e,characterId:t}){let a=vt.scopeKey(t);vt.migrateLegacy({scopeKey:a,roleName:rm()});let n=im({scope:e,store:vt,scopeKey:a}),i=s(r=>{String(r?.characterId??"")===String(t)&&(vt.record(r,a),n.update(r))},"consume");e.add(v0(i));let o=Io();return o&&i(o),Yi(),()=>n.destroy()}});var a5=1,n5=1,om="mwitools:scores-updated",ui=globalThis.unsafeWindow??globalThis.window??globalThis,Nn=null;function rn(e){let t=Number(e);return Number.isFinite(t)?t:null}s(rn,"finiteOrNull");function E0(e){if(e==null)return e??null;let t=JSON.stringify(e);return ui.JSON?.parse?.(t)??JSON.parse(t)}s(E0,"cloneForConsumer");function sm(e){let t=e?.scores;return!t?.battle||!t?.skilling?null:{schemaVersion:n5,unit:"million_coins",server:String(e.server??"production"),characterId:String(e.characterId??""),calculatedAt:String(e.recordedAt??new Date().toISOString()),battle:{total:rn(t.battle.total),house:rn(t.battle.house),abilities:rn(t.battle.abilities),equipment:rn(t.battle.equipment)},skilling:{total:rn(t.skilling.total),house:rn(t.skilling.house),tools:rn(t.skilling.tools),equipment:rn(t.skilling.equipment),available:t.skilling.available!==!1}}}s(sm,"createPublicScoreSnapshot");function i5(){if(!Nn||typeof ui.dispatchEvent!="function")return;let e=ui.CustomEvent??globalThis.CustomEvent;typeof e=="function"&&ui.dispatchEvent(new e(om,{detail:E0(Nn)}))}s(i5,"dispatchScoresUpdated");function Lo(e){let t=sm(e);return t?(Nn=t,i5(),E0(Nn)):null}s(Lo,"publishScoreSnapshot");function $o(){return E0(Nn)}s($o,"getScores");async function r5(){let e=await u.api.refreshAssetSnapshot?.();return e?((!Nn||Nn.calculatedAt!==String(e.recordedAt??""))&&Lo(e),$o()):null}s(r5,"refreshScores");var um={name:"MWITools",apiVersion:a5,events:Object.freeze({scoresUpdated:om}),get scores(){return $o()},getScores:$o,refreshScores:r5};try{Object.defineProperty(ui,"MWIToolsAPI",{configurable:!0,enumerable:!0,value:um})}catch{ui.MWIToolsAPI=um}u.api.onAssetSnapshot?.(Lo);var cm=u.api.getLatestAssetSnapshot?.();cm&&Lo(cm),Object.assign(u.api,{createPublicScoreSnapshot:sm,getPublishedScores:$o,publishScoreSnapshot:Lo});var lm="1.2.0",o5="https://mwi-guild.43.167.210.211.sslip.io/api/v1/leaderboards?categories=16",dm="MWITools_leaderboard_overlay_cache_v2",s5=900*1e3,u5="https://mwi-guild.43.167.210.211.sslip.io/dist/icons/skills",I0="mwi-leaderboard-overlay-style",on="data-mwi-leaderboard-badges",ar="data-mwi-leaderboard-rate-header",Oo="data-mwi-leaderboard-rate-cell",mm='table[class*="LeaderboardPanel_leaderboardTable"]',qo=[["milking",{zh:"挤奶",en:"Milking"}],["foraging",{zh:"采摘",en:"Foraging"}],["woodcutting",{zh:"伐木",en:"Woodcutting"}],["cheesesmithing",{zh:"奶酪锻造",en:"Cheesesmithing"}],["crafting",{zh:"制作",en:"Crafting"}],["tailoring",{zh:"缝纫",en:"Tailoring"}],["cooking",{zh:"烹饪",en:"Cooking"}],["brewing",{zh:"冲泡",en:"Brewing"}],["alchemy",{zh:"炼金",en:"Alchemy"}],["enhancing",{zh:"强化",en:"Enhancing"}],["attack",{zh:"攻击",en:"Attack"}],["defense",{zh:"防御",en:"Defense"}],["melee",{zh:"近战",en:"Melee"}],["ranged",{zh:"远程",en:"Ranged"}],["magic",{zh:"魔法",en:"Magic"}],["fame_points",{zh:"名望",en:"Fame"}]],Ro=0,ci=!1,Bo=new Set;function zo(e,t){return u.config.isZH?e:t}s(zo,"t");function c5(e,t){return e&&typeof e=="object"?e[u.config.isZH?"zh":"en"]??t:String(e||t)}s(c5,"categoryLabel");function Hn(e){return String(e||"").normalize("NFKC").trim().toLocaleLowerCase()}s(Hn,"normalizedName");function N0(e){let t=Number(e);return!Number.isInteger(t)||t<1||t>100?null:t<=20?"rainbow":t<=50?"gold":t<=80?"silver":"bronze"}s(N0,"badgeTier");function fm(e,t,a){let n=Math.round(e/t*10)/10;return`${Number.isInteger(n)?n.toFixed(0):n.toFixed(1)}${a}`}s(fm,"roundedCompact");function nr(e){if(e==null||e==="")return null;let t=Number(e);return Number.isFinite(t)&&t>=0?t:null}s(nr,"validExperienceRate");function H0(e){let t=nr(e);return t==null?"—":t>=1e6?fm(t,1e6,"M"):fm(t,1e3,"K")}s(H0,"formatExperienceRate");function D0(e,t,a){let n=nr(e?.xpPerHour),i=nr(t?.xpPerHour),o=n!=null,r=i!=null,c=Number(e?.rank)||Number.MAX_SAFE_INTEGER,l=Number(t?.rank)||Number.MAX_SAFE_INTEGER;return a==="official"?c-l:o!==r?o?-1:1:o&&(a==="ascending"?n-i:i-n)||c-l}s(D0,"compareRateRows");function bm(e){if(e.getElementById(I0))return;let t=e.head||e.documentElement;if(!t){e.addEventListener("readystatechange",()=>bm(e),{once:!0});return}let a=e.createElement("style");a.id=I0,a.textContent=`
[${on}]{display:inline-flex;align-items:center;flex-wrap:wrap;gap:2px;margin-inline-start:4px;vertical-align:middle}
[${on}][data-mwi-leaderboard-placement="profile"]{display:flex;flex-basis:100%;width:100%;margin-block-start:4px;margin-inline-start:0}
.mwi-lb-badge{box-sizing:border-box;display:inline-flex;align-items:center;gap:1px;height:15px;min-height:15px;padding:0 3px 0 1px;border:1px solid;border-radius:999px;background:rgba(12,16,28,.78);color:#eef2ff;font:600 9px/1 system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;white-space:nowrap;box-shadow:0 1px 2px rgba(0,0,0,.24);vertical-align:middle}
.mwi-lb-badge-icon{display:block;flex:none;width:11px;height:11px;object-fit:contain}
.mwi-lb-badge--rainbow{border-color:transparent;color:#f8fbff;background:linear-gradient(rgba(12,16,28,.9),rgba(12,16,28,.9)) padding-box,linear-gradient(105deg,#ff5f6d,#ffd166,#67e8a5,#5cb8ff,#c77dff,#ff6ec7) border-box;box-shadow:0 0 7px rgba(121,190,255,.48),0 0 3px rgba(255,103,199,.34),inset 0 0 3px rgba(255,255,255,.14)}
.mwi-lb-badge--gold{border-color:#d9aa38;color:#ffe8a3;box-shadow:0 0 5px rgba(217,170,56,.24)}
.mwi-lb-badge--silver{border-color:#d8dee9;color:#f8fafc;box-shadow:0 0 4px rgba(226,232,240,.24)}
.mwi-lb-badge--bronze{border-color:#b87333;color:#f2c49b;box-shadow:0 0 4px rgba(184,115,51,.24)}
[${ar}]{cursor:pointer;user-select:none;white-space:nowrap}
[${ar}]:hover{filter:brightness(1.18)}
[${Oo}]{font-variant-numeric:tabular-nums;white-space:nowrap}
`,t.append(a)}s(bm,"ensureStyles");function l5(e,t,a){if(t!=="fame_points"){let r=e.createElement("img");return r.className="mwi-lb-badge-icon",r.src=`${a}/${encodeURIComponent(t)}.png`,r.alt="",r.setAttribute("aria-hidden","true"),r}let n=e.createElementNS("http://www.w3.org/2000/svg","svg");n.classList.add("mwi-lb-badge-icon"),n.setAttribute("viewBox","0 0 40 40"),n.setAttribute("aria-hidden","true");let i=e.createElementNS("http://www.w3.org/2000/svg","use"),o=[...e.querySelectorAll("use")].map(r=>r.getAttribute("href")||"").find(r=>r.includes("misc_sprite"))?.split("#")[0]||"/static/media/misc_sprite.cfad291b.svg";return i.setAttribute("href",`${o}#experience`),n.append(i),n}s(l5,"createBadgeIcon");function d5(e={}){let t=e.document??(typeof document<"u"?document:null);if(!t)throw new Error(Mn("排行榜浮层需要可用的页面文档。","MWILeaderboardOverlay requires a document."));let a=Array.isArray(e.categories)&&e.categories.length?e.categories:qo,n=a.map(([x])=>x),i=Object.fromEntries(a),o=String(e.iconBaseUrl||u5).replace(/\/+$/,""),r={categories:{},nameIndex:new Map,currentLeaderboard:null,sortMode:"official",refreshPending:!1,destroyed:!1,showBadges:e.showBadges!==!1,showRates:e.showRates!==!1};bm(t);function c(){let x=new Map;for(let A of n){let I=r.categories?.[A];for(let q of Array.isArray(I?.rows)?I.rows:[]){let B=Hn(q.characterName||q.name),j=Number(q.rank),V=N0(j);!B||!V||(x.has(B)||x.set(B,[]),x.get(B).push({category:A,label:i[A],rank:j,tier:V}))}}let T=new Map(n.map((A,I)=>[A,I]));for(let A of x.values())A.sort((I,q)=>I.rank-q.rank||(T.get(I.category)??Number.MAX_SAFE_INTEGER)-(T.get(q.category)??Number.MAX_SAFE_INTEGER));r.nameIndex=x}s(c,"rebuildNameIndex");function l(x){return x.map(T=>`${T.category}:${T.rank}`).join("|")}s(l,"badgeSignature");function d(){if(!r.showBadges)return;let x=t.querySelectorAll('[class*="CharacterName_name"][data-name]');for(let T of x){let A=T.parentElement;if(!A)continue;if(T.closest('[class*="Header_characterInfo"]')){A.closest('[class*="Header_name"]')?.querySelector(`[${on}]`)?.remove(),A.querySelector(`[${on}]`)?.remove();continue}let I=T.closest('[class*="CharacterProfile_"],[class*="PlayerProfile_"],[class*="ProfilePage_"],[class*="ProfilePanel_"],[data-mwi-leaderboard-profile]'),q=I?T.closest('[class*="Header_name"]'):null,B=q||A,j=B.querySelector(`:scope > [${on}]`)||(B===A?null:A.querySelector(`:scope > [${on}]`));if(T.closest('[class*="LeaderboardPanel_"]')){j?.remove();continue}let V=r.nameIndex.get(Hn(T.getAttribute("data-name")))||[],O=T.closest('[class*="ChatMessage_name"]')?V.slice(0,3):V;if(!O.length){j?.remove();continue}let M=!!I,L=M?"profile":"inline",F=l(O),R=j?.dataset.mwiLeaderboardPlacement||"";if(j||(j=t.createElement("span"),j.setAttribute(on,"")),j.dataset.mwiLeaderboardPlacement!==L&&(j.dataset.mwiLeaderboardPlacement=L),M){let te=q&&T.closest('[class*="CharacterName_characterName"]')||T;(j.parentElement!==B||j.previousElementSibling!==te)&&te.insertAdjacentElement("afterend",j)}else(!j.isConnected||R==="profile")&&A.append(j);j.dataset.mwiLeaderboardSignature!==F&&(j.dataset.mwiLeaderboardSignature=F,j.replaceChildren(...O.map(te=>{let X=t.createElement("span");X.className=`mwi-lb-badge mwi-lb-badge--${te.tier}`;let W=l5(t,te.category,o);X.append(W,t.createTextNode(`#${te.rank}`));let K=c5(te.label,te.category);return X.title=u.config.isZH?`${K}排行榜第 ${te.rank} 名`:`${K} leaderboard rank #${te.rank}`,X})))}}s(d,"renderNameBadges");function m(){return new Map((r.currentLeaderboard?.rows||[]).map(x=>[Hn(x.characterName||x.name),x]))}s(m,"currentRowsByName");function p(x){let T=r.sortMode==="descending"?" ↓":r.sortMode==="ascending"?" ↑":"",A=`${zo("经验/小时","XP/hour")}${T}`;x.textContent!==A&&(x.textContent=A),x.title=zo("点击排序:降序 → 升序 → 官方原排名","Click to sort: descending → ascending → official rank"),x.setAttribute("aria-sort",r.sortMode==="descending"?"descending":r.sortMode==="ascending"?"ascending":"none")}s(p,"updateHeaderCopy");function b(x,T){let A=x.tBodies?.[0];if(!A)return;let I=[...A.rows],q=Hn(u.state.currentCharacterName);I.sort((B,j)=>{let V=B.querySelector('[class*="CharacterName_name"][data-name]')?.getAttribute("data-name"),O=j.querySelector('[class*="CharacterName_name"][data-name]')?.getAttribute("data-name"),M=Hn(V),L=Hn(O);if(q){let F=M===q;if(F!==(L===q))return F?-1:1}return D0(T.get(M),T.get(L),r.sortMode)}),I.some((B,j)=>A.rows[j]!==B)&&I.forEach(B=>A.append(B))}s(b,"applyTableSort");function f(){if(!r.showRates||!r.currentLeaderboard)return;let T=t.querySelector(mm);if(!T)return;let A=T.tHead?.rows?.[0],I=T.tBodies?.[0];if(!A||!I)return;let q=A.querySelector(`[${ar}]`);q||(q=t.createElement("th"),q.setAttribute(ar,""),q.addEventListener("click",()=>{r.sortMode=r.sortMode==="official"?"descending":r.sortMode==="descending"?"ascending":"official",y()}),A.append(q)),p(q);let B=m();for(let j of I.rows){let V=j.querySelector('[class*="CharacterName_name"][data-name]')?.getAttribute("data-name"),O=B.get(Hn(V)),M=j.querySelector(`[${Oo}]`);M||(M=t.createElement("td"),M.setAttribute(Oo,""),j.append(M));let L=H0(O?.xpPerHour),F=nr(O?.xpPerHour),R=F!=null?`${Math.round(F).toLocaleString()} ${zo("经验/小时","XP/hour")}`:zo("缺少可比较的历史快照","No comparable historical snapshot");M.textContent!==L&&(M.textContent=L),M.title!==R&&(M.title=R)}b(T,B)}s(f,"renderLeaderboardRateColumn");function g(){r.destroyed||(r.showBadges&&d(),r.showRates&&f())}s(g,"refresh");function h(){t.querySelectorAll(`[${on}]`).forEach(x=>x.remove())}s(h,"removeBadges");function _(){let x=t.querySelector(mm);x&&r.currentLeaderboard&&(r.sortMode="official",b(x,m())),t.querySelectorAll(`[${ar}],[${Oo}]`).forEach(T=>T.remove())}s(_,"removeRateColumn");function y(){if(r.destroyed||r.refreshPending)return;r.refreshPending=!0,(t.defaultView?.requestAnimationFrame||(T=>setTimeout(T,25)))(()=>{r.refreshPending=!1,g()})}s(y,"scheduleRefresh");let w=t.defaultView?.MutationObserver||(typeof MutationObserver<"u"?MutationObserver:null);if(!w)throw new Error(Mn("排行榜浮层需要 MutationObserver 支持。","MWILeaderboardOverlay requires MutationObserver."));let k=new w(()=>y()),C=s(()=>{r.destroyed||!t.documentElement||(k.observe(t.documentElement,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["data-name"]}),y())},"observe");return t.documentElement?C():t.addEventListener("readystatechange",C,{once:!0}),Ro+=1,{setRankings(x){r.categories=x&&typeof x=="object"?x:{},c(),y()},enhanceLeaderboard({category:x,rows:T}){return n.includes(x)?(r.currentLeaderboard={category:x,rows:Array.isArray(T)?T:[]},r.sortMode="official",y(),!0):!1},clearLeaderboard(){r.currentLeaderboard&&(_(),r.currentLeaderboard=null,r.sortMode="official")},setDisplay({badges:x=r.showBadges,rates:T=r.showRates}={}){let A=!!x,I=!!T;r.showBadges&&!A&&h(),r.showRates&&!I&&_(),r.showBadges=A,r.showRates=I,y()},destroy(){r.destroyed||(r.destroyed=!0,k.disconnect(),h(),_(),Ro=Math.max(0,Ro-1),Ro===0&&t.getElementById(I0)?.remove())}}}s(d5,"createOverlay");function P0(e={}){let t=null,a=!1,n=null,i=null,o={badges:e.showBadges!==!1,rates:e.showRates!==!1},r=new Set((Array.isArray(e.categories)&&e.categories.length?e.categories:qo).map(([m])=>m)),c=s(()=>{a||t||!ci||(t=d5({...e,showBadges:o.badges,showRates:o.rates}),n&&t.setRankings(n),i&&t.enhanceLeaderboard(i))},"mount"),l=s(()=>{t?.destroy(),t=null},"unmount"),d={setRankings(m){n=m&&typeof m=="object"?m:{},t?.setRankings(n)},enhanceLeaderboard(m={}){return r.has(m.category)?(i={category:m.category,rows:Array.isArray(m.rows)?m.rows:[]},t?.enhanceLeaderboard(i),!0):!1},clearLeaderboard(){i=null,t?.clearLeaderboard()},setDisplay(m={}){o={badges:m.badges??o.badges,rates:m.rates??o.rates},t?.setDisplay(o)},destroy(){a||(a=!0,l(),Bo.delete(d))}};return Object.defineProperties(d,{enabled:{enumerable:!0,get(){return ci&&!a}},_mount:{value:c},_unmount:{value:l}}),Bo.add(d),c(),d}s(P0,"create");var L0={VERSION:lm,create:P0,formatExperienceRate:H0,badgeTier:N0,compareRateRows:D0,get enabled(){return ci}};function pm(e){if(e?.type!=="leaderboard_updated"||e?.leaderboardType!=="standard")return null;let t=e.leaderboard,a=String(e.leaderboardCategory??t?.category??"");if(t?.type!=="standard"||t?.category!==a||!qo.some(([i])=>i===a)||!Array.isArray(t?.rows))return null;let n=t.rows.map(i=>{let o=a==="fame_points";return{characterId:Number(i?.characterId??i?.id),characterName:String(i?.characterName??i?.name??"").trim(),rank:Number(i?.rank),level:o?0:Number(i?.level??i?.value1),experience:Number(i?.experience??(o?i?.value1:i?.value2)),xpPerHour:nr(i?.xpPerHour)}}).filter(i=>i.characterName&&Number.isInteger(i.rank)&&i.rank>=1&&i.rank<=100);return n.length?{category:a,rows:n}:null}s(pm,"normalizeLeaderboardPayload");function gm(e){let t=new Set(qo.map(([a])=>a));return Object.fromEntries(Object.entries(e??{}).flatMap(([a,n])=>{if(!t.has(a)||!Array.isArray(n?.rows))return[];let i=n.rows.filter(o=>String(o?.characterName??o?.name??"").trim()&&Number.isInteger(Number(o?.rank))&&Number(o.rank)>=1&&Number(o.rank)<=100);return i.length?[[a,{...n,rows:i}]]:[]}))}s(gm,"normalizeCategories");function m5(){try{let e=JSON.parse(globalThis.localStorage?.getItem(dm)||"null");return e?.schemaVersion===1?gm(e.categories):{}}catch{return{}}}s(m5,"loadCachedCategories");function f5(e){try{globalThis.localStorage?.setItem(dm,JSON.stringify({schemaVersion:1,cachedAt:Date.now(),categories:e}))}catch(t){console.warn(u.config.isZH?"[MWITools] 无法缓存排行榜名次":"[MWITools] Unable to cache leaderboard rankings",t)}}s(f5,"saveCachedCategories");function b5(e){let t=typeof GM<"u"&&typeof GM.xmlHttpRequest=="function"?GM.xmlHttpRequest:typeof GM_xmlhttpRequest=="function"?GM_xmlhttpRequest:null;return t?new Promise(a=>{let n=!1,i,o=s(r=>{if(!n){if(n=!0,clearTimeout(i),Number(r?.status)<200||Number(r?.status)>=300){a(null);return}try{let c=r.responseText||r.response,l=typeof c=="string"?JSON.parse(c):c;a(l?.schemaVersion===1&&l?.leaderboardType==="standard"?gm(l.categories):null)}catch{a(null)}}},"finish");i=setTimeout(()=>o(null),10500);try{let r=t({method:"GET",url:o5,timeout:1e4,onload:o,onabort:s(()=>o(null),"onabort"),onerror:s(()=>o(null),"onerror"),ontimeout:s(()=>o(null),"ontimeout")});e?.(r),r?.then&&r.then(o).catch(()=>o(null))}catch{o(null)}}):Promise.resolve(null)}s(b5,"requestLeaderboardCategories");var hm=globalThis.unsafeWindow??globalThis.window??globalThis;try{Object.defineProperty(hm,"MWILeaderboardOverlay",{configurable:!0,enumerable:!0,value:L0})}catch{hm.MWILeaderboardOverlay=L0}var ir=new Set,li=null;function $0(){return{badges:ir.has("badges"),rates:ir.has("rates")}}s($0,"integratedDisplay");function p5(){let e=$0(),t=P0({showBadges:e.badges,showRates:e.rates}),a=m5(),n=null,i=!0,o=null;t.setRankings(a);let r=s(()=>{n&&t.enhanceLeaderboard({category:n.category,rows:a[n.category]?.rows??n.rows})},"applyCurrentLeaderboard"),c=s(async()=>{let m=await b5(p=>{o=p});o=null,!(!i||!m)&&(a=m,f5(a),t.setRankings(a),r())},"refreshRankings"),l=u.onMessage("leaderboard_updated",m=>{let p=pm(m);if(!p){m?.type==="leaderboard_updated"&&m?.leaderboardType==="standard"&&(n=null,t.clearLeaderboard());return}n=p,a[p.category]||(a={...a,[p.category]:{receivedAt:new Date().toISOString(),rows:p.rows}},t.setRankings(a)),r()}),d=setInterval(()=>{c()},s5);return c(),{controller:t,stop(){i=!1,clearInterval(d),l(),o?.abort?.(),t.destroy()}}}s(p5,"startIntegratedService");function _m(e){if(ir.add(e),!ci){ci=!0;for(let t of Bo)t._mount()}return li?li.controller.setDisplay($0()):li=p5(),()=>{if(ir.delete(e),ir.size){li?.controller.setDisplay($0());return}li?.stop(),li=null,ci=!1;for(let t of Bo)t._unmount()}}s(_m,"activateIntegratedMode"),u.features.register({id:"leaderboardOverlay",setting:"leaderboardOverlay",initialize(){return _m("badges")}}),u.features.register({id:"leaderboardXpRate",setting:"leaderboardXpRate",initialize(){return _m("rates")}});var ym="mwi-buff-style",g5="/static/media/abilities_sprite.fdd1b4de.svg",Dn=new Map([["/abilities/mana_spring",10],["/abilities/taunt",65],["/abilities/provoke",65],["/abilities/toughness",20],["/abilities/elusiveness",20],["/abilities/precision",20],["/abilities/berserk",20],["/abilities/elemental_affinity",20],["/abilities/frenzy",20],["/abilities/spike_shell",30],["/abilities/retribution",30],["/abilities/vampirism",20],["/abilities/insanity",12],["/abilities/invincible",12],["/abilities/fierce_aura",120],["/abilities/guardian_aura",120],["/abilities/mystic_aura",120],["/abilities/speed_aura",120],["/abilities/critical_aura",120]]),rr=new Map([["/abilities/puncture",10],["/abilities/maim",12],["/abilities/crippling_slash",12],["/abilities/fracturing_impact",12],["/abilities/pestilent_shot",12],["/abilities/ice_spear",8],["/abilities/frost_surge",9],["/abilities/toxic_pollen",10],["/abilities/smoke_burst",8]]),wm=new Set(["/abilities/puncture","/abilities/maim","/abilities/pestilent_shot","/abilities/smoke_burst"]),O0=new Set(["/abilities/mana_spring","/abilities/fierce_aura","/abilities/guardian_aura","/abilities/mystic_aura","/abilities/speed_aura","/abilities/critical_aura"]);function h5(e){let t=e.split("/");return t[t.length-1]||e}s(h5,"abilityId");function _5(e){if(document.getElementById(ym))return;let t=document.createElement("style");t.id=ym,t.textContent=`
.mwi-has-buffbar{height:auto!important;min-height:0;overflow:visible!important}
.mwi-buffbar{width:100%;box-sizing:border-box;display:flex;flex-wrap:wrap;gap:4px;margin-top:4px;align-items:center;justify-content:center}
.mwi-chip{font:11px/1.2 "Trebuchet MS", Verdana, Arial, sans-serif;padding:2px 6px;border-radius:10px;white-space:nowrap;display:inline-flex;align-items:center;gap:4px;position:relative}
.mwi-icon-wrap{position:relative;width:15px;height:15px;display:inline-block}
.mwi-icon{width:15px;height:15px;display:block}
.mwi-progress-ring{position:absolute;inset:-3px;border-radius:14px;pointer-events:none;mask:linear-gradient(#000 0 0);-webkit-mask:linear-gradient(#000 0 0)}
.mwi-progress-ring::before{content:"";position:absolute;inset:0;border-radius:inherit;padding:3px;background:conic-gradient(var(--mwi-ring-color) 0deg var(--mwi-ring-deg), transparent var(--mwi-ring-deg) 360deg);-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask-composite:exclude}
.mwi-buff{background:#e7f4e4;color:#1e4d1a;border:1px solid #7fbf7a}
.mwi-debuff{background:#fbe3e3;color:#6b1a1a;border:1px solid #d17b7b}
`,(document.head||document.documentElement).appendChild(t),e.add(()=>t.remove())}s(_5,"ensureBuffStyles");function y5(e){let t=new WeakMap,a={players:new Map,monsters:new Map},n=[],i=[],o=null;function r(){if(o)return o;let A=['use[href*="abilities_sprite"]','use[xlink\\:href*="abilities_sprite"]','img[src*="abilities_sprite"]','link[href*="abilities_sprite"]'];for(let I of A){let q=document.querySelector(I);if(!q)continue;let B=q.getAttribute("href")||q.getAttribute("xlink:href")||q.getAttribute("src");if(typeof B=="string"&&B.includes("abilities_sprite"))return o=B.split("#")[0],o}return o=g5,o}s(r,"getAbilitySpriteBase");function c(A){let I=document.querySelector(`[class*="${A}"]`);if(!I)return[];let q=I.querySelector('[class*="BattlePanel_combatUnitGrid"]');return q?Array.from(q.querySelectorAll('[class*="CombatUnit_combatUnit"]')):[]}s(c,"getUnitElements");function l(){return{players:c("BattlePanel_playersArea"),monsters:c("BattlePanel_monstersArea")}}s(l,"getBattleUnits");function d(A){let I=A.querySelector(".mwi-buffbar");if(!I){I=document.createElement("div"),I.className="mwi-buffbar";let q=A.querySelector('[class*="CombatUnit_status"]')??A;q.classList.add("mwi-has-buffbar"),q.appendChild(I)}return I}s(d,"ensureBuffBar");function m(A){let I=t.get(A);return I||(I={effects:new Map},t.set(A,I)),I}s(m,"getState");function p(A){return!A||typeof A!="object"?null:typeof A.abilityHrid=="string"&&A.abilityHrid.length>0?A.abilityHrid:A.isAutoAtk===!0?"auto":null}s(p,"getActionKey");function b(A,I){if(Array.isArray(A))for(let q=0;q<A.length;q+=1){let B=A[q];if(!B||typeof B!="object")continue;let j=I.get(String(q))||{},V=typeof B.preparingAbilityHrid=="string"?B.preparingAbilityHrid:"";V?(j.abilityHrid=V,delete j.isAutoAtk):(B.isPreparingAutoAttack===!0||B.isAutoAtk===!0)&&(j.isAutoAtk=!0,delete j.abilityHrid),typeof B.currentHitpoints=="number"&&(j.cHP=B.currentHitpoints),typeof B.currentManapoints=="number"&&(j.cMP=B.currentManapoints),I.set(String(q),j)}}s(b,"seedStateFromCombatant");function f(){let A=l().monsters;for(let I of A){if(!I)continue;let q=t.get(I);q&&q.effects.clear();let B=I.querySelector(".mwi-buffbar");B&&(B.innerHTML="")}}s(f,"clearMonsterBuffs");function g(){a.monsters.clear(),n.length=0,i.length=0}s(g,"resetForNewBattle");function h(A){g(),f(),b(A.players,a.players),b(A.monsters,a.monsters)}s(h,"handleNewBattle");function _(A,I,q){let B=[],j=[];if(!I||typeof I!="object")return{actionChanges:B,hpChanges:j};let V=Object.keys(I);for(let O=0;O<V.length;O+=1){let M=V[O],L=I[M];if(!L||typeof L!="object")continue;let F=A.get(M)||{},R={...F,...L},te=typeof L.preparingAbilityHrid=="string"?L.preparingAbilityHrid:typeof L.abilityHrid=="string"?L.abilityHrid:"",X=L.isPreparingAutoAttack===!0||L.isAutoAtk===!0||L.isAutoAttack===!0;te?(R.abilityHrid=te,delete R.isAutoAtk):X&&(R.isAutoAtk=!0,delete R.abilityHrid);let W=p(F),K=p(R);W&&K&&W!==K&&B.push({mapName:q,key:M,prevAction:W,nextAction:K}),typeof F.cHP=="number"&&typeof R.cHP=="number"&&F.cHP!==R.cHP&&j.push({mapName:q,key:M,prevHP:F.cHP,newHP:R.cHP,delta:R.cHP-F.cHP}),A.set(M,R)}return{actionChanges:B,hpChanges:j}}s(_,"mergeState");function y(A){if(!A||typeof A!="object")return;let I=_(a.players,A.pMap,"pMap"),q=_(a.monsters,A.mMap,"mMap"),B=q.hpChanges.filter(V=>V.delta<0).map(V=>Number(V.key));for(let V of I.actionChanges){if(Dn.has(V.prevAction)){let M=Number(V.key);Number.isInteger(M)&&n.push({mapName:"pMap",casterIndex:M,abilityHrid:V.prevAction})}if(!rr.has(V.prevAction)||B.length===0)continue;let O=Number(V.key);Number.isInteger(O)&&i.push({casterMap:"pMap",casterIndex:O,abilityHrid:V.prevAction,targetSide:"monsters",targets:B})}let j=I.hpChanges.filter(V=>V.delta<0).map(V=>Number(V.key));for(let V of q.actionChanges){if(Dn.has(V.prevAction)){let M=Number(V.key);Number.isInteger(M)&&n.push({mapName:"mMap",casterIndex:M,abilityHrid:V.prevAction})}if(!rr.has(V.prevAction)||j.length===0)continue;let O=Number(V.key);Number.isInteger(O)&&i.push({casterMap:"mMap",casterIndex:O,abilityHrid:V.prevAction,targetSide:"players",targets:j})}}s(y,"updateBattleState");function w(A){let I=m(A),q=d(A),B=Date.now(),j=Array.from(I.effects.values()).filter(V=>V.expiresAt>B);I.effects=new Map(j.map(V=>[V.abilityHrid,V])),q.innerHTML="";for(let V of j.sort((O,M)=>O.expiresAt-M.expiresAt)){let O=document.createElement("span");O.className=`mwi-chip ${V.kind==="buff"?"mwi-buff":"mwi-debuff"}`;let M=document.createElement("span");M.className="mwi-icon-wrap";let L=document.createElementNS("http://www.w3.org/2000/svg","svg");L.setAttribute("role","img"),L.setAttribute("aria-label",u.config.isZH?"技能":"Ability"),L.setAttribute("class","Icon_icon__2LtL_ mwi-icon"),L.setAttribute("width","100%"),L.setAttribute("height","100%");let F=document.createElementNS("http://www.w3.org/2000/svg","use"),te=`${r()}#${h5(V.abilityHrid)}`;F.setAttribute("href",te),F.setAttribute("xlink:href",te),L.appendChild(F);let X=Math.max(1,V.durationSec),W=Math.max(0,Math.min(X,(B-V.startedAt)/1e3)),le=Math.min(1,Math.max(0,W/X))*360;M.appendChild(L),O.appendChild(M);let D=document.createElement("span");D.className="mwi-progress-ring",D.style.setProperty("--mwi-ring-deg",`${le}deg`),D.style.setProperty("--mwi-ring-color",V.kind==="buff"?"rgba(60,140,60,0.7)":"rgba(180,60,60,0.7)"),O.appendChild(D),q.appendChild(O)}}s(w,"renderUnit");function k(A,I,q,B){let j=m(A),V=Date.now();j.effects.set(q,{abilityHrid:q,kind:I,durationSec:B,startedAt:V,expiresAt:V+B*1e3}),w(A)}s(k,"updateUnitEffect");function C(A){let I=A?.pMap,q=A?.mMap,B=l();if(B.players.length===0&&B.monsters.length===0)return;if(_5(e),y(A),n.length>0){let V=n.splice(0,n.length);for(let O of V){if(!Dn.has(O.abilityHrid))continue;let M=Dn.get(O.abilityHrid),L=O0.has(O.abilityHrid),F=O.mapName==="pMap"?B.players:B.monsters;if(L)for(let R of F)R&&k(R,"buff",O.abilityHrid,M);else{let R=F[O.casterIndex];R&&k(R,"buff",O.abilityHrid,M)}}}if(i.length>0){let V=i.splice(0,i.length);for(let O of V){if(!rr.has(O.abilityHrid))continue;let M=rr.get(O.abilityHrid),L=O.targetSide==="monsters"?B.monsters:B.players,F=wm.has(O.abilityHrid)?O.targets.slice(0,1):O.targets;for(let R of F){let te=L[R];te&&k(te,"debuff",O.abilityHrid,M)}}}let j=s((V,O)=>{if(!V||typeof V!="object")return;let M=O==="pMap"?B.players:B.monsters,L=Object.keys(V);for(let F=0;F<L.length;F+=1){let R=L[F],te=V[R];if(!te||typeof te!="object")continue;let X=te.abilityHrid;if(typeof X!="string"||X.length===0||!Dn.has(X))continue;let W=Dn.get(X),K=Number.isInteger(Number(R))?Number(R):F;if(O0.has(X))for(let le of M)le&&k(le,"buff",X,W);else{let le=M[K];le&&k(le,"buff",X,W)}}},"applyBuffsFromMap");j(I,"pMap"),j(q,"mMap")}s(C,"applyBattleUpdated");function x(){let A=l();for(let I of[...A.players,...A.monsters])t.has(I)&&w(I)}s(x,"tickCountdowns");function T(){let A=l();for(let I of[...A.players,...A.monsters]){let q=I?.querySelector(".mwi-buffbar");q&&(q.closest(".mwi-has-buffbar")?.classList.remove("mwi-has-buffbar"),q.remove())}}return s(T,"removeAllBuffBars"),{handleNewBattle:h,applyBattleUpdated:C,tickCountdowns:x,removeAllBuffBars:T}}s(y5,"createBuffTracker"),u.features.register({id:"battleBuffs",setting:"battleBuffs",initialize({scope:e}){let t=y5(e);e.interval(()=>t.tickCountdowns(),1e3),e.add(u.onMessage("new_battle",a=>{t.handleNewBattle(a)})),e.add(u.onMessage("battle_updated",a=>{t.applyBattleUpdated(a)})),e.add(()=>t.removeAllBuffBars())}}),Object.assign(u.api,{battleBuffs:{BUFFS:Dn,DEBUFFS:rr,TEAM_BUFFS:O0,SINGLE_TARGET_DEBUFFS:wm}});var vm=null,w5=0,Fo=new Map,xm="mwitools-inventory-summary-style";function v5(){if(document.getElementById(xm))return;let e=document.createElement("style");e.id=xm,e.textContent=`
#script_inventory_summary {
--mwi-inventory-heading-font-size: .875rem;
--mwi-inventory-heading-line-height: 1.2;
margin: .0625rem 0;
color: var(--color-text-primary, #f3f5f7);
font-size: var(--mwi-inventory-heading-font-size);
line-height: var(--mwi-inventory-heading-line-height);
text-align: left;
}
.mwi-inventory-summary-grid {
display: grid;
grid-template-columns: minmax(0, 1fr);
gap: .0625rem;
}
.mwi-summary-card {
--mwi-summary-accent: 120, 174, 255;
min-width: 0;
overflow: visible;
border: 0;
border-left: 2px solid rgba(var(--mwi-summary-accent), .75);
border-radius: 0;
background: transparent;
}
.mwi-summary-card--combat { --mwi-summary-accent: 238, 115, 103; }
.mwi-summary-card--skilling { --mwi-summary-accent: 90, 200, 149; }
.mwi-summary-card--assets { --mwi-summary-accent: 230, 181, 79; }
.mwi-summary-toggle {
display: flex;
width: 100%;
min-height: 1.375rem;
box-sizing: border-box;
align-items: center;
gap: .1875rem;
padding: .1875rem .25rem;
border: 0;
background: transparent;
color: inherit;
font: inherit;
text-align: left;
cursor: pointer;
transition: none;
}
.mwi-summary-toggle:hover { background: rgba(var(--mwi-summary-accent), .075); }
.mwi-summary-toggle:focus-visible {
outline: 2px solid rgba(var(--mwi-summary-accent), .72);
outline-offset: -3px;
}
.mwi-summary-heading {
display: flex;
min-width: 0;
flex: 1;
align-items: baseline;
gap: .1875rem;
}
.mwi-summary-label {
flex: 0 0 auto;
color: var(--color-text-secondary, #aeb5c0);
font-size: inherit;
font-weight: 600;
white-space: nowrap;
}
.mwi-summary-value {
min-width: 0;
color: rgb(var(--mwi-summary-accent));
font-size: inherit;
font-weight: 750;
line-height: inherit;
overflow-wrap: anywhere;
}
.mwi-summary-chevron {
width: .375rem;
height: .375rem;
margin: 0 .0625rem 0 0;
flex: 0 0 .375rem;
border-right: 1.5px solid rgba(255, 255, 255, .65);
border-bottom: 1.5px solid rgba(255, 255, 255, .65);
transform: rotate(45deg) translate(-2px, 2px);
transition: transform .18s ease;
}
.mwi-summary-toggle[aria-expanded="true"] .mwi-summary-chevron {
transform: rotate(225deg) translate(-2px, 2px);
}
.mwi-summary-details {
margin: 0 .25rem 0 .5rem;
animation: mwi-summary-reveal .16s ease-out;
}
.mwi-summary-stats {
position: relative;
display: grid;
grid-template-columns: minmax(0, 1fr);
gap: 0;
padding: 0 0 0 .5rem;
}
.mwi-summary-stats::before {
position: absolute;
top: 0;
bottom: .5em;
left: 0;
width: 1px;
background: rgba(var(--mwi-summary-accent), .34);
content: "";
}
.mwi-summary-stat {
position: relative;
display: flex;
min-width: 0;
align-items: baseline;
justify-content: flex-start;
gap: .375rem;
padding: .15rem .25rem;
font-size: inherit;
line-height: inherit;
}
.mwi-summary-stat::before {
position: absolute;
top: 50%;
left: -.5rem;
width: .5rem;
border-top: 1px solid rgba(var(--mwi-summary-accent), .34);
content: "";
}
.mwi-summary-stat::after {
position: absolute;
top: calc(50% - 2px);
left: calc(-.5rem - 2px);
width: 3px;
height: 3px;
border-radius: 50%;
background: rgb(var(--mwi-summary-accent));
content: "";
}
.mwi-summary-stat-label {
overflow: hidden;
color: var(--color-text-secondary, #9da6b2);
font-size: inherit;
text-overflow: ellipsis;
white-space: nowrap;
}
.mwi-summary-stat-value { color: #f3f5f7; font-size: inherit; font-weight: 650; }
.mwi-asset-groups {
display: grid;
gap: 0;
padding: 0 0 0 .5rem;
}
.mwi-asset-group {
position: relative;
overflow: visible;
}
.mwi-asset-group:not(:last-child)::after {
position: absolute;
top: .6em;
bottom: -.6em;
left: -.5rem;
border-left: 1px solid rgba(var(--mwi-summary-accent), .34);
content: "";
}
.mwi-asset-toggle {
position: relative;
display: flex;
width: 100%;
min-height: 0;
align-items: center;
gap: .25rem;
padding: .15rem .25rem;
border: 0;
background: transparent;
color: var(--color-text-primary, #e8ebef);
font: inherit;
font-size: inherit;
font-weight: 600;
line-height: inherit;
text-align: left;
cursor: pointer;
}
.mwi-asset-toggle::before {
position: absolute;
top: 50%;
left: -.5rem;
width: .5rem;
border-top: 1px solid rgba(var(--mwi-summary-accent), .34);
content: "";
}
.mwi-asset-toggle:hover { background: rgba(255, 255, 255, .04); }
.mwi-asset-toggle:focus-visible { outline: 1px solid rgb(var(--mwi-summary-accent)); outline-offset: -2px; }
.mwi-asset-toggle .mwi-summary-chevron { margin: 0 2px 0 0; }
.mwi-asset-subtotal {
min-width: 0;
margin-left: 6px;
color: rgb(var(--mwi-summary-accent));
font-size: inherit;
font-weight: 700;
font-variant-numeric: tabular-nums;
overflow-wrap: anywhere;
}
.mwi-asset-rows {
position: relative;
display: grid;
gap: 0;
margin-left: .25rem;
padding: 0 .25rem 0 .5rem;
}
.mwi-asset-rows::before {
position: absolute;
top: 0;
bottom: .5em;
left: 0;
width: 1px;
background: rgba(var(--mwi-summary-accent), .25);
content: "";
}
.mwi-asset-row {
position: relative;
display: flex;
align-items: baseline;
justify-content: flex-start;
gap: .375rem;
padding: .15rem 0;
color: var(--color-text-secondary, #aeb5c0);
font-size: inherit;
line-height: inherit;
}
.mwi-asset-row::before {
position: absolute;
top: 50%;
left: -.5rem;
width: .5rem;
border-top: 1px solid rgba(var(--mwi-summary-accent), .25);
content: "";
}
.mwi-asset-row .mwi-number, .mwi-asset-row > span:last-child { color: #f3f5f7; font-weight: 600; }
.mwi-inventory-category-heading {
display: flex !important;
min-width: 0;
align-items: center;
gap: 8px;
}
.mwi-inventory-category-value {
display: inline-flex;
max-width: min(48%, 150px);
align-items: center;
overflow: hidden;
padding: 2px 7px;
border: 1px solid rgba(230, 181, 79, .22);
border-radius: 999px;
background: rgba(230, 181, 79, .09);
color: #e6c778;
font-size: .68rem;
font-weight: 650;
line-height: 1.25;
letter-spacing: .015em;
pointer-events: none;
text-overflow: ellipsis;
white-space: nowrap;
}
@keyframes mwi-summary-reveal {
from { opacity: 0; transform: translateY(-3px); }
to { opacity: 1; transform: translateY(0); }
}
`,(document.head??document.documentElement).appendChild(e)}s(v5,"addInventorySummaryStyles");function wa(e){return`<span class="mwi-number" title="${u.api.formatExactNumber(e)}">${u.api.numberFormatter(e)}</span>`}s(wa,"numberHtml");function x5(e,t){let a=e.querySelector('[class*="Inventory_categoryButton"]'),n=a?a.ownerDocument?.defaultView?.getComputedStyle(a):null,i=Number.parseFloat(n?.fontSize)>0?n.fontSize:".875rem",o=n?.lineHeight&&n.lineHeight!=="normal"?n.lineHeight:"1.2";t.style.setProperty("--mwi-inventory-heading-font-size",i),t.style.setProperty("--mwi-inventory-heading-line-height",o)}s(x5,"syncInventorySummaryTypography");function k5(){Array.isArray(u.state.initData_characterItems)&&(clearTimeout(vm),vm=setTimeout(()=>q0(),100))}s(k5,"scheduleNetworthRefresh");function S5(){let e=String(u.state.currentCharacterId??"").trim();return e?`${u.api.getMarketEnvironment?.()??"production"}:${e}`:""}s(S5,"inventoryDisplayKey");var C5={"/item_categories/currency":["currency","currencies","货币"],"/item_categories/loot":["loot","loots","战利品"],"/item_categories/scroll":["scroll","scrolls","卷轴"],"/item_categories/labyrinth":["labyrinth","迷宫"],"/item_categories/dungeon_key":["dungeon key","dungeon keys","地牢钥匙","地下城钥匙"],"/item_categories/food":["food","foods","食物"],"/item_categories/drink":["drink","drinks","饮料"],"/item_categories/ability_book":["ability book","ability books","技能书"],"/item_categories/equipment":["equipment","装备"],"/item_categories/resource":["resource","resources","资源"]};function A5(e){return String(e??"").replace(/^[+−-]\s*/,"").replace(/\s*\(\d+\)\s*$/,"").trim().toLowerCase()}s(A5,"normalizeCategoryLabel");function M5(e,t){let a=e.querySelector('div[class*="Item_itemContainer"] svg[aria-label]')?.getAttribute("aria-label")?.trim();if(a){let i=u.config.isZHInGameSetting?u.api.getItemEnNameFromZhName?.(a)??a:a,o=u.state.itemEnNameToHridMap?.[i],r=u.state.initData_itemDetailMap?.[o]?.categoryHrid;if(r)return r}let n=[u.api.getOriTextFromElement?.(t),t.textContent].map(A5);return Object.entries(C5).find(([,i])=>n.some(o=>i.includes(o)))?.[0]}s(M5,"resolveInventoryCategoryHrid");function km(){let e=new Map;for(let t of u.state.initData_characterItems??[]){if(t?.itemLocationHrid!=="/item_locations/inventory"||t.itemHrid==="/items/cowbell"&&!u.api.shouldIncludeCowbellsInAssets())continue;let a=u.state.initData_itemDetailMap?.[t.itemHrid]?.categoryHrid;if(!a)continue;let n=Math.max(0,Number(t.count)||0)*u.api.getAssetValue(t.itemHrid,t.enhancementLevel,{itemLocationHrid:t.itemLocationHrid});e.set(a,(e.get(a)??0)+n)}return e}s(km,"calculateInventoryCategoryValues");function Sm(e,t=km()){for(let a of e.children){let n=a.matches?.('[class*="Inventory_itemGrid"]')?a:a.querySelector(':scope > [class*="Inventory_itemGrid"]')??a,i=n.querySelector(':scope > [class*="Inventory_label"],:scope > button[class*="Inventory_categoryButton"]');if(!i)continue;let o=M5(n,i);if(!o)continue;let r=t.get(o)??0;n.dataset.mwitoolsInventoryCategory="true",i.classList.add("mwi-inventory-category-heading"),i.querySelector(":scope > .mwi-inventory-category-value")?.remove();let c=document.createElement("span");c.className="mwi-inventory-category-value",c.title=`${u.config.isZH?"分类价值":"Category value"}: ${u.api.formatExactNumber(r)}`,c.textContent=`${u.config.isZH?"价值":"Value"} ${u.api.numberFormatter(r)}`,i.appendChild(c)}}s(Sm,"addInventoryCategoryValues");async function T5(e=!1){let t=S5();if(!t)return null;if(!e&&Fo.has(t))return Fo.get(t);let a=await u.api.refreshAssetSnapshot();if(!a)return Fo.get(t)??null;let n={snapshot:a,categoryValues:km(),version:++w5};return Fo.set(t,n),n}s(T5,"getFrozenInventoryDisplay");async function q0(e={}){if(!Array.isArray(u.state.initData_characterItems))return;let t=document.querySelectorAll('div[class*="Inventory_items"]');if(!t.length)return;let a=u.settings.settingsMap.invWorth.isTrue,n=u.settings.settingsMap.invSort.isTrue,i=a?await T5(e.force===!0):null;if(a&&!i)return;let o=i?.snapshot;v5();let r=s(d=>{let{scores:m,values:p}=o,b=d.parentElement?.querySelector("#script_inventory_summary"),f=b?.querySelector("#buildScores")?.style.display==="block",g=b?.querySelector("#skillingScores")?.style.display==="block",h=b?.querySelector("#netWorthDetails")?.style.display==="block";b?.remove();let _=d.parentElement?.querySelector("#script_inv_sort_controls"),y=`<div id="script_inventory_summary">
<div class="mwi-inventory-summary-grid">
<section class="mwi-summary-card mwi-summary-card--combat">
<button type="button" class="mwi-summary-toggle" id="toggleScores" aria-expanded="false" aria-controls="buildScores">
<span class="mwi-summary-chevron" aria-hidden="true"></span>
<span class="mwi-summary-heading">
<span class="mwi-summary-label">${u.config.isZH?"战斗着装评分:":"Combat Gear Score: "}</span>
<span class="mwi-summary-value">${u.api.formatScore(m.battle.total)}</span>
</span>
</button>
<div class="mwi-summary-details" id="buildScores" style="display: none;" hidden>
<div class="mwi-summary-stats">
<div class="mwi-summary-stat"><span class="mwi-summary-stat-label">${u.config.isZH?"房屋:":"House: "}</span><span class="mwi-summary-stat-value">${u.api.formatScore(m.battle.house)}</span></div>
<div class="mwi-summary-stat"><span class="mwi-summary-stat-label">${u.config.isZH?"技能:":"Abilities: "}</span><span class="mwi-summary-stat-value">${u.api.formatScore(m.battle.abilities)}</span></div>
<div class="mwi-summary-stat"><span class="mwi-summary-stat-label">${u.config.isZH?"装备:":"Equipment: "}</span><span class="mwi-summary-stat-value">${u.api.formatScore(m.battle.equipment)}</span></div>
</div>
</div>
</section>
<section class="mwi-summary-card mwi-summary-card--skilling">
<button type="button" class="mwi-summary-toggle" id="toggleSkillingScores" aria-expanded="false" aria-controls="skillingScores">
<span class="mwi-summary-chevron" aria-hidden="true"></span>
<span class="mwi-summary-heading">
<span class="mwi-summary-label">${u.config.isZH?"生活着装评分:":"Skilling Gear Score: "}</span>
<span class="mwi-summary-value">${u.api.formatScore(m.skilling.total)}</span>
</span>
</button>
<div class="mwi-summary-details" id="skillingScores" style="display: none;" hidden>
<div class="mwi-summary-stats">
<div class="mwi-summary-stat"><span class="mwi-summary-stat-label">${u.config.isZH?"房屋:":"House: "}</span><span class="mwi-summary-stat-value">${u.api.formatScore(m.skilling.house)}</span></div>
<div class="mwi-summary-stat"><span class="mwi-summary-stat-label">${u.config.isZH?"工具:":"Tools: "}</span><span class="mwi-summary-stat-value">${u.api.formatScore(m.skilling.tools)}</span></div>
<div class="mwi-summary-stat"><span class="mwi-summary-stat-label">${u.config.isZH?"装备:":"Equipment: "}</span><span class="mwi-summary-stat-value">${u.api.formatScore(m.skilling.equipment)}</span></div>
</div>
</div>
</section>
<section class="mwi-summary-card mwi-summary-card--assets">
<button type="button" class="mwi-summary-toggle" id="toggleNetWorth" aria-expanded="false" aria-controls="netWorthDetails">
<span class="mwi-summary-chevron" aria-hidden="true"></span>
<span class="mwi-summary-heading">
<span class="mwi-summary-label">${u.config.isZH?"总资产:":"Total assets: "}</span>
<span class="mwi-summary-value">${wa(p.total)}</span>
</span>
</button>
<div class="mwi-summary-details" id="netWorthDetails" style="display: none;" hidden>
<div class="mwi-asset-groups">
<section class="mwi-asset-group">
<button type="button" class="mwi-asset-toggle" id="toggleCurrentAssets" aria-expanded="false" aria-controls="currentAssets"><span class="mwi-summary-chevron" aria-hidden="true"></span><span>${u.config.isZH?"流动资产":"Liquid assets"}</span><span class="mwi-asset-subtotal">${wa(p.liquid)}</span></button>
<div class="mwi-asset-rows" id="currentAssets" style="display: none;" hidden>
<div class="mwi-asset-row"><span>${u.config.isZH?"装备:":"Equipment: "}</span>${wa(p.equipment)}</div>
<div class="mwi-asset-row"><span>${u.config.isZH?"库存:":"Inventory: "}</span>${wa(p.inventory)}</div>
<div class="mwi-asset-row"><span>${u.config.isZH?"市场订单:":"Market orders: "}</span>${wa(p.marketListings)}</div>
</div>
</section>
<section class="mwi-asset-group">
<button type="button" class="mwi-asset-toggle" id="toggleNonCurrentAssets" aria-expanded="false" aria-controls="nonCurrentAssets"><span class="mwi-summary-chevron" aria-hidden="true"></span><span>${u.config.isZH?"非流动资产":"Non-current assets"}</span><span class="mwi-asset-subtotal">${wa(p.fixed)}</span></button>
<div class="mwi-asset-rows" id="nonCurrentAssets" style="display: none;" hidden>
<div class="mwi-asset-row"><span>${u.config.isZH?"房屋:":"Houses: "}</span>${wa(p.houses)}</div>
<div class="mwi-asset-row"><span>${u.config.isZH?"技能:":"Abilities: "}</span>${wa(p.abilities)}</div>
<div class="mwi-asset-row"><span>${u.config.isZH?"不可交易代币:":"Non-tradable tokens: "}</span>${wa(p.nonTradableTokens)}</div>
<div class="mwi-asset-row"><span>${u.config.isZH?"神龛:":"Shrine: "}</span><span>${p.shrine===null?"—":wa(p.shrine)}</span></div>
</div>
</section>
</div>
</div>
</section>
</div>
</div>`;_?_.insertAdjacentHTML("afterend",y):d.insertAdjacentHTML("beforebegin",y);let w=d.parentElement.querySelector("#script_inventory_summary");x5(d,w);let k=w.querySelector("#toggleScores"),C=w.querySelector("#buildScores"),x=w.querySelector("#toggleSkillingScores"),T=w.querySelector("#skillingScores"),A=w.querySelector("#toggleNetWorth"),I=w.querySelector("#netWorthDetails"),q=w.querySelector("#toggleCurrentAssets"),B=w.querySelector("#currentAssets"),j=w.querySelector("#toggleNonCurrentAssets"),V=w.querySelector("#nonCurrentAssets"),O=s((M,L,F)=>{M.setAttribute("aria-expanded",String(F)),L.hidden=!F,L.style.display=F?"block":"none"},"setExpanded");h&&(O(A,I,!0),O(q,B,!0),O(j,V,!0)),f&&O(k,C,!0),g&&O(x,T,!0),k.addEventListener("click",()=>{let M=C.style.display==="none";O(k,C,M)}),x.addEventListener("click",()=>{let M=T.style.display==="none";O(x,T,M)}),A.addEventListener("click",()=>{let M=I.style.display==="none";O(A,I,M),O(q,B,M),O(j,V,M)}),q.addEventListener("click",()=>{let M=B.style.display==="none";O(q,B,M)}),j.addEventListener("click",()=>{let M=V.style.display==="none";O(j,V,M)})},"addInventorySummary"),c=s(d=>{if(d.closest('[class*="TabPanel_hidden"]'))return!1;let p=d.closest('[class*="TabsComponent_tabPanelsContainer"]')?.parentElement??document;if(p.querySelector('#mwitools-asset-history-tab[data-active="true"]'))return!1;let f=p.querySelector('button[aria-selected="true"], button.Mui-selected, [role="tab"][aria-selected="true"]');if(f){if(f.id==="mwitools-asset-history-tab"||f.dataset.mwiCreditTab==="true"||f.classList.contains("income-tab"))return!1;let g=f.textContent||"";if(!/库存|Inventory/i.test(g)&&!f.querySelector('[class*="Inventory"]'))return!1}return!0},"isInventoryTabActive");s(()=>{for(let d of t){let m=c(d);if(a){d.classList.add("script_buildScore_added");let f=`${i.version}:${u.config.isZH?"zh":"en"}`;d.dataset.mwitoolsInventoryDisplayVersion!==f&&(r(d),Sm(d,i.categoryValues),d.dataset.mwitoolsInventoryDisplayVersion=f)}(n||a)&&(d.classList.contains("script_invSort_added")||(d.classList.add("script_invSort_added"),Mm(d)));let p=d.parentElement?.querySelector("#script_inventory_summary");p&&(p.style.display=m?"":"none");let b=d.parentElement?.querySelector("#script_inv_sort_controls");b&&(b.style.display=m?"":"none")}},"renderInventoryPanels")()}s(q0,"calculateNetworth");function jo(e,t=0,a="fair"){let n=Number(u.api.getAssetValue?.(e,t))||Number(u.api.getFairValue?.(e,t))||0;return a==="ask"?Number(u.api.getAskPrice?.(e,t))||n:a==="bid"&&Number(u.api.getBidPrice?.(e,t))||n}s(jo,"getInventorySortUnitValue");function Cm(e){let t=e?.querySelector?.('[class*="Item_enhancementLevel"]')?.textContent??"";return Number.parseInt(t.replace(/\D/g,""),10)||0}s(Cm,"getInventoryItemEnhancementLevel");function Am(e){return e!=="Equipment"}s(Am,"isSortableInventoryCategory");async function Mm(e){let t=u.settings.settingsMap.invSort.isTrue,a=u.settings.settingsMap.invWorth.isTrue;if(t&&!(await u.api.fetchMarketJSON())?.marketData){console.error(u.config.isZH?"[MWITools] 市场数据不可用,无法创建库存排序按钮。":"[MWITools] Market data is unavailable; inventory sort controls were not created.");return}let n=`<button
id="script_sortByFair_btn">
${u.config.isZH?"市场价值":"Market Value"}
</button>`,i=`<button
id="script_sortByAsk_btn">
${u.config.isZH?"出售价":"Ask"}
</button>`,o=`<button
id="script_sortByBid_btn">
${u.config.isZH?"收购价":"Bid"}
</button>`,r=`<button
id="script_sortByNone_btn">
${u.config.isZH?"无":"None"}
</button>`,c=`<button
id="script_refresh_inventory_btn"
style="border-radius: 4px; padding: 2px 8px; margin-left: 6px; cursor: pointer; font: inherit; font-size: 0.78rem; background-color: rgba(255, 255, 255, 0.08); color: var(--color-text-primary, #e8ebef); border: 1px solid rgba(255, 255, 255, 0.16);">
${u.config.isZH?"刷新":"Refresh"}
</button>`,l=`<div id="script_inv_sort_controls" style="color: ${u.config.SCRIPT_COLOR_MAIN}; font-size: 0.875rem; text-align: left; ">${t?u.config.isZH?"物品排序:":"Sort items by: ":""}${t?`${n} ${i} ${o} ${r}`:""}${a?` ${c}`:""}</div>`;if(!e.isConnected||!e.parentElement)return;let d=e.parentElement.querySelector("#script_inventory_summary");d?d.insertAdjacentHTML("beforebegin",l):e.insertAdjacentHTML("beforebegin",l);let m=s(f=>{let g=e.parentElement;if(!g)return;let h={fair:g.querySelector("button#script_sortByFair_btn"),ask:g.querySelector("button#script_sortByAsk_btn"),bid:g.querySelector("button#script_sortByBid_btn"),none:g.querySelector("button#script_sortByNone_btn")};for(let[_,y]of Object.entries(h)){if(!y)continue;let w=_===f;y.style.borderRadius="4px",y.style.padding="2px 8px",y.style.margin="0 2px",y.style.cursor="pointer",y.style.font="inherit",y.style.fontSize="0.78rem",y.style.transition="all 0.15s ease-in-out",w?(y.style.backgroundColor=u.config.SCRIPT_COLOR_MAIN,y.style.color="#0b1522",y.style.fontWeight="700",y.style.border="1px solid transparent",y.style.boxShadow="0 0 8px rgba(0, 198, 255, 0.45)"):(y.style.backgroundColor="rgba(255, 255, 255, 0.08)",y.style.color="var(--color-text-secondary, #aeb5c0)",y.style.fontWeight="500",y.style.border="1px solid rgba(255, 255, 255, 0.16)",y.style.boxShadow="none")}},"updateSortButtonStyles"),p=s(f=>{m(f);for(let g of e.children){let h=g.querySelector('[class*="Inventory_categoryButton"]'),_=u.api.getOriTextFromElement?.(h)??h?.textContent??"";if(!Am(_))continue;let y=g.querySelector('[class*="Inventory_label"]');y&&(y.style.order=Number.MIN_SAFE_INTEGER);let k=[...g.querySelectorAll('[class*="Item_itemContainer"]')].map((C,x)=>{let T=C.querySelector("svg[aria-label]")?.getAttribute("aria-label")??"";u.config.isZHInGameSetting&&typeof u.api.getItemEnNameFromZhName=="function"&&(T=u.api.getItemEnNameFromZhName(T));let A=u.state.itemEnNameToHridMap[T],I=Cm(C),q=C.querySelector('[class*="Item_count"]')?.textContent??"1",B=u.api.parseCompactNumber?.(q)??Number(q),j=Number.isFinite(Number(B))?Number(B):1,V={ask:jo(A,I,"ask")*j,bid:jo(A,I,"bid")*j,fair:jo(A,I,"fair")*j};C.querySelector("#script_stack_price")||(C.style.position="relative",(C.querySelector('[class*="Item_item"][class*="Item_clickable"]')??C).insertAdjacentHTML("beforeend",`<div
id="script_stack_price"
style="z-index: 1; position: absolute; top: 2px; left: 2px; text-align: left;">
</div>`));let O=C.querySelector("#script_stack_price");return{itemElem:C,originalIndex:x,priceElem:O,values:V}});if(f==="none"){for(let{itemElem:C,priceElem:x}of k)C.style.order=0,x.textContent="";continue}k.sort((C,x)=>x.values[f]-C.values[f]||C.originalIndex-x.originalIndex);for(let[C,{itemElem:x,priceElem:T,values:A}]of k.entries())x.style.order=C,T.textContent=u.api.numberFormatter(A[f])}},"sortItemsBy");t&&(e.parentElement.querySelector("button#script_sortByFair_btn")?.addEventListener("click",()=>p("fair")),e.parentElement.querySelector("button#script_sortByAsk_btn")?.addEventListener("click",()=>p("ask")),e.parentElement.querySelector("button#script_sortByBid_btn")?.addEventListener("click",()=>p("bid")),e.parentElement.querySelector("button#script_sortByNone_btn")?.addEventListener("click",()=>p("none")),m("none"));let b=e.parentElement.querySelector("button#script_refresh_inventory_btn");b?.addEventListener("click",async()=>{let f=u.config.isZH?"刷新":"Refresh";b.disabled=!0,b.textContent=u.config.isZH?"刷新中…":"Refreshing…";try{await q0({force:!0})}finally{b.isConnected&&(b.disabled=!1,b.textContent=f)}})}s(Mm,"addInvSortButton");async function E5(){let e=document.querySelector(".ItemSelector_menu__12sEM");if(!e||e.querySelector("#script_itemSelector_sort_div"))return;let t=await u.api.fetchMarketJSON();if(!t||!t.marketData)return;let a={};for(let m in u.state.initData_itemDetailMap)if(u.state.initData_itemDetailMap[m]?.guildCreditConversions){let p=u.state.initData_itemDetailMap[m].guildCreditConversions;for(let b of p){let f=b.creditItemHrid,g=0;t.marketData[m]&&t.marketData[m][0]&&(g=t.marketData[m][0].a);let h=0;if(t.marketData[m]&&t.marketData[m][0]&&(h=t.marketData[m][0].b),g===0&&h===0)continue;let _=g*b.itemCount/b.creditCount,y=h*b.itemCount/b.creditCount,w=u.state.initData_itemDetailMap[m].name,k=u.data.ZHItemNames[m],C=u.config.isZHInGameSetting&&k||w;a[f]||(a[f]={ask:null,bid:null}),g>0&&(!a[f].ask||_<a[f].ask.price)&&(a[f].ask={name:C,price:_}),h>0&&(!a[f].bid||y<a[f].bid.price)&&(a[f].bid={name:C,price:y})}}let n=e.querySelector(".Input_inputContainer__22GnD");if(!n)return;let i=`<button
id="script_itemSelector_sortByAsk_btn"
style="border-radius: 3px; background-color: ${u.config.SCRIPT_COLOR_MAIN}; color: black; font-size: 0.875rem; padding: 2px 6px;">
${u.config.isZH?"出售价":"Ask"}
</button>`,o=`<button
id="script_itemSelector_sortByBid_btn"
style="border-radius: 3px; background-color: ${u.config.SCRIPT_COLOR_MAIN}; color: black; font-size: 0.875rem; padding: 2px 6px;">
${u.config.isZH?"收购价":"Bid"}
</button>`,r=`<button
id="script_itemSelector_sortByNone_btn"
style="border-radius: 3px; background-color: ${u.config.SCRIPT_COLOR_MAIN}; color: black; font-size: 0.875rem; padding: 2px 6px;">
${u.config.isZH?"无":"None"}
</button>`,c=`<div id="script_itemSelector_sort_div" style="color: ${u.config.SCRIPT_COLOR_MAIN}; font-size: 0.875rem; text-align: left; margin-left: 8px; display: inline;">${u.config.isZH?"排序:":"Sort: "}${i} ${o} ${r}</div>`;n.insertAdjacentHTML("afterend",c);let l=e.querySelector(".ItemSelector_itemList__Qa5lq");if(!l)return;let d=s(m=>{let p=l.querySelectorAll(".ItemSelector_itemContainer__3olqe"),b="",f="",g=document.querySelector(".GuildPanel_exchangeModalContent__aQqyL");if(g){let y=g.querySelector(".GuildPanel_arrow__1v2a0 + .Item_itemContainer__x7kH1 svg");if(y){let w=y.attributes["aria-label"]?.value;w&&(u.config.isZHInGameSetting&&(w=u.api.getItemEnNameFromZhName(w)),b=u.state.itemEnNameToHridMap[w],f=w)}}let h=[];p.forEach(y=>{let w=y.querySelector(".Item_itemContainer__x7kH1");if(!w)return;let k=w.querySelector("svg")?.attributes["aria-label"]?.value;if(!k){w.style.order=0;let O=w.querySelector("#script_itemSelector_price");O&&O.remove();return}u.config.isZHInGameSetting&&(k=u.api.getItemEnNameFromZhName(k));let C=u.state.itemEnNameToHridMap[k],x=w.querySelector(".Item_count__1HVvv")?.innerText;if(!x){w.style.order=0;let O=w.querySelector("#script_itemSelector_price");O&&O.remove();return}x=u.api.parseCompactNumber(x);let T=0;t.marketData[C]&&t.marketData[C][0]&&(T=t.marketData[C][0].a);let A=0;t.marketData[C]&&t.marketData[C][0]&&(A=t.marketData[C][0].b);let I=0,q=0,B=0;if(b&&u.state.initData_itemDetailMap[C]?.guildCreditConversions){let M=u.state.initData_itemDetailMap[C].guildCreditConversions.find(L=>L.creditItemHrid===b);M&&(I=x/M.itemCount*M.creditCount,q=T*x/I,B=A*x/I)}b&&q>0&&h.push({name:k,ask:q,bid:B}),w.querySelector("#script_itemSelector_price")||(w.style.position="relative",w.querySelector(".Item_item__2De2O.Item_clickable__3viV6").insertAdjacentHTML("beforeend",`<div
id="script_itemSelector_price"
style="z-index: 1; position: absolute; top: 2px; left: 2px; text-align: left; font-size: 10px;">
</div>`));let j=w.querySelector("#script_itemSelector_price");w.querySelector("#script_itemSelector_credit")||w.querySelector(".Item_item__2De2O.Item_clickable__3viV6").insertAdjacentHTML("beforeend",`<div
id="script_itemSelector_credit"
style="z-index: 1; position: absolute; bottom: 2px; left: 2px; text-align: left; font-size: 10px;">
</div>`);let V=w.querySelector("#script_itemSelector_credit");if(m==="ask"){let O=q>0?q:T*x;y.style.order=Math.round(O),j.textContent=u.api.numberFormatter(I>0?I:T*x),V.textContent=u.api.numberFormatter(O)}else if(m==="bid"){let O=B>0?B:A*x;y.style.order=Math.round(O),j.textContent=u.api.numberFormatter(I>0?I:A*x),V.textContent=u.api.numberFormatter(O)}else m==="none"&&(y.style.order=0,j.textContent="",V.textContent="")});let _=e.querySelector("#script_best_item");if(m!=="none"&&b&&a[b]){let y=a[b][m];if(y)if(_)_.textContent=`${y.name} ${u.api.numberFormatter(y.price)}`;else{let w=`<span id="script_best_item" style="color: ${u.config.SCRIPT_COLOR_MAIN}; font-size: 0.875rem; margin-left: 8px;">${y.name} ${u.api.numberFormatter(y.price)}</span>`;e.querySelector("#script_itemSelector_sort_div").insertAdjacentHTML("beforeend",w)}else _&&_.remove()}else _&&_.remove()},"sortItemsBy");e.querySelector("button#script_itemSelector_sortByAsk_btn").addEventListener("click",function(m){d("ask")}),e.querySelector("button#script_itemSelector_sortByBid_btn").addEventListener("click",function(m){d("bid")}),e.querySelector("button#script_itemSelector_sortByNone_btn").addEventListener("click",function(m){d("none")})}s(E5,"addGuildCreditConversionsSortButton"),Object.assign(u.api,{calculateNetworth:q0,scheduleNetworthRefresh:k5,addInventoryCategoryValues:Sm,getInventorySortUnitValue:jo,getInventoryItemEnhancementLevel:Cm,isSortableInventoryCategory:Am,addInvSortButton:Mm,addGuildCreditConversionsSortButton:E5});var R0="mwitools-guild-credit-advisor",Tm="mwitools-guild-credit-advisor-style",Em="mwi-guild-credit-recommendation",di='[class*="GuildPanel_exchangeModalContent"]',or='[class*="ItemSelector_menu"]',Jt=12,mi=12,I5={green:"#43c4ad",brown:"#b8885b",white:"#dfe4f2",blue:"#6ea9ff",purple:"#a980e9",red:"#e65d68",silver:"#aeb9c9",gold:"#d8a33c"},Pn=null,sn=null;function xt(e,t){return Mn(e,t)}s(xt,"t");function rt(e){return String(e??"").replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}s(rt,"escapeHtml");function Nt(e){let t=Number(e);return Number.isFinite(t)&&t>0?t:0}s(Nt,"positiveNumber");function B0(e,t=2){return Number.isFinite(Number(e))?u.api.numberFormatter?.(Number(e),t)??String(e):"—"}s(B0,"formatNumber");function Ln(e){return Number.isFinite(Number(e))?u.api.formatExactNumber?.(Number(e))??String(e):"—"}s(Ln,"formatExact");function Im(e){if(!e?.isConnected)return!1;for(let t=e;t;t=t.parentElement){if(t.hidden||t.getAttribute?.("aria-hidden")==="true")return!1;let a=t.ownerDocument?.defaultView?.getComputedStyle?.(t);if(a?.display==="none"||a?.visibility==="hidden")return!1}return!0}s(Im,"isVisible");function z0(e=document){return[...e.querySelectorAll(di)].filter(Im).at(-1)}s(z0,"findGuildExchangeModal");function N5(e=document){return[...e.querySelectorAll(or)].filter(Im).at(-1)}s(N5,"findVisibleItemSelector");function H5(e){let t=e?.getAttribute?.("aria-label")?.trim();if(t&&u.config.isZHInGameSetting&&(t=u.api.getItemEnNameFromZhName?.(t)??t),t&&u.state.itemEnNameToHridMap?.[t])return u.state.itemEnNameToHridMap[t];let a=e?.querySelector?.("use")?.getAttribute?.("href")?.split("#").at(-1);return a?Object.keys(u.state.initData_itemDetailMap??{}).find(n=>n.split("/").at(-1)===a):""}s(H5,"itemHridFromIcon");function D5(){let e=new Set;for(let t of Object.values(u.state.initData_itemDetailMap??{}))for(let a of t?.guildCreditConversions??[])a?.creditItemHrid&&e.add(a.creditItemHrid);return e}s(D5,"guildCreditHrids");function P5(e){let t=D5(),a=[...e.querySelectorAll("svg[aria-label]")].map(H5).filter(Boolean),n=a.find(r=>t.has(r)),i=a.find(r=>r!==n&&u.state.initData_itemDetailMap?.[r]?.guildCreditConversions?.some(c=>c.creditItemHrid===n)),o=e.querySelector('input[type="number"],input');return{creditItemHrid:n,selectedItemHrid:i,batchCount:Math.max(1,Math.floor(Nt(o?.value)||1))}}s(P5,"readGuildExchangeContext");function Nm(e){let t=[];for(let[a,n]of Object.entries(u.state.initData_itemDetailMap??{})){let i=n?.hrid??n?.itemHrid??a;for(let o of n?.guildCreditConversions??[]){if(o?.creditItemHrid!==e)continue;let r=Nt(o.itemCount),c=Nt(o.creditCount);!r||!c||t.push({itemHrid:i,itemCount:r,creditCount:c,detail:n})}}return t}s(Nm,"collectGuildCreditConversions");function Hm(e){if(Array.isArray(e))return{price:Nt(e[0]),quantity:Nt(e[1])};let t=Nt(e?.quantity??e?.count??Nt(e?.orderQuantity)-Nt(e?.filledQuantity));return{price:Nt(e?.price),quantity:t}}s(Hm,"normalizeOrder");function Dm(e){return u.state.marketOrderBooks?.[e]?.[0]??u.state.marketOrderBooks?.[e]?.["0"]??null}s(Dm,"marketLevelBook");function Pm(e,t,a){let n=Nt(t);if(!n)return{available:!1,totalValue:0,estimated:!1};let i=Dm(e),o=i?.[a];if(i){if(!Array.isArray(o))return{available:!1,totalValue:0,estimated:!1};let c=n,l=0,d=a==="bids",m=o.map(Hm).filter(({price:p,quantity:b})=>p>0&&b>0).sort((p,b)=>d?b.price-p.price:p.price-b.price);for(let p of m){let b=Math.min(c,p.quantity);if(l+=b*p.price,c-=b,c<=0)break}return c<=0?{available:!0,totalValue:l,estimated:!1}:{available:!1,totalValue:0,estimated:!1}}let r=Nt(a==="bids"?u.api.getBidPrice?.(e,0):u.api.getAskPrice?.(e,0));return r?{available:!0,totalValue:r*n,estimated:!0}:{available:!1,totalValue:0,estimated:!0}}s(Pm,"quoteOrderBook");function Lm(e,t){let a=Pm(e,t,"asks");return{available:a.available,totalCost:a.totalValue,estimated:a.estimated}}s(Lm,"quoteGuildCreditAsk");function L5(e,t){let a=Pm(e,t,"bids");return{available:a.available,grossValue:a.totalValue,estimated:a.estimated}}s(L5,"quoteGuildCreditBid");function $m(e,t=1){let a=Math.max(1,Math.ceil(Nt(t)/e.creditCount)),n=a*e.itemCount,i=a*e.creditCount,o=Lm(e.itemHrid,n);return{...e,...o,batches:a,requiredItems:n,producedCredits:i,costPerCredit:o.available?o.totalCost/i:Number.POSITIVE_INFINITY}}s($m,"evaluateGuildCreditConversion");function $5(e,t=1){return Nm(e).map(a=>$m(a,t)).filter(({available:a})=>a).sort((a,n)=>a.costPerCredit-n.costPerCredit||a.totalCost-n.totalCost||sr(a.itemHrid).localeCompare(sr(n.itemHrid)))}s($5,"evaluateGuildCreditOptions");function O5(e,t){let a=Nt(t);if(!a)return{quantity:0,estimated:!1};let n=Dm(e);if(n){if(!Array.isArray(n.asks))return{quantity:0,estimated:!1};let o=a,r=0,c=n.asks.map(Hm).filter(({price:l,quantity:d})=>l>0&&d>0).sort((l,d)=>l.price-d.price);for(let l of c){let d=Math.floor(o/l.price),m=Math.min(l.quantity,d);if(m<=0)break;r+=m,o-=m*l.price}return{quantity:r,estimated:!1}}let i=Nt(u.api.getAskPrice?.(e,0));return{quantity:i?Math.floor(a/i):0,estimated:!!i}}s(O5,"affordableItemsFromAsks");function q5(e,t){let a=O5(e.itemHrid,t),n=Math.floor(a.quantity/e.itemCount);if(n<=0)return{available:!1,estimated:a.estimated,batches:0,requiredItems:0,producedCredits:0,totalCost:0};let i=n*e.itemCount,o=Lm(e.itemHrid,i);return{available:o.available&&o.totalCost<=t,estimated:a.estimated||o.estimated,batches:n,requiredItems:i,producedCredits:n*e.creditCount,totalCost:o.totalCost}}s(q5,"buyGuildCreditsWithinBudget");function R5(e,t,a){let n=Math.max(1,Math.floor(Nt(t))),i=n*e.creditCount;if(e.itemHrid===a.itemHrid)return{status:"already_optimal",directCredits:i,difference:0};let o=n*e.itemCount,r=L5(e.itemHrid,o);if(!r.available)return{status:"no_sell_quote",directCredits:i,saleQuantity:o,sale:r};let c=Math.max(0,Math.min(1,Number(u.api.getMarketTaxRate?.(e.itemHrid))||0)),l=r.grossValue*(1-c),d=q5(a,l);return d.available?{status:"ok",directCredits:i,saleQuantity:o,taxRate:c,netSaleValue:l,sale:r,replacement:d,difference:d.producedCredits-i,estimated:r.estimated||d.estimated}:{status:"unaffordable",directCredits:i,saleQuantity:o,taxRate:c,netSaleValue:l,sale:r,replacement:d}}s(R5,"evaluateGuildCreditReplacement");function sr(e){return en(e,{fallback:e})}s(sr,"itemName");function B5(){for(let a of globalThis.performance?.getEntriesByType?.("resource")??[])if(a.name?.includes("items_sprite")&&a.name.endsWith(".svg"))try{return new URL(a.name).pathname}catch{return a.name}let e=document.querySelector('svg use[href*="items_sprite"],svg use[xlink\\:href*="items_sprite"]'),t=e?.getAttribute("href")??e?.getAttribute("xlink:href")??"";return t.includes("#")?t.split("#")[0]:""}s(B5,"findItemsSpriteBase");function z5(e,t){let a=B5(),n=String(e??"").split("/").at(-1);if(!a||!n)return`<span class="icon-fallback" aria-label="${rt(t)}">?</span>`;let i=`${a}#${n}`;return`<svg class="item-icon" viewBox="0 0 32 32" role="img" aria-label="${rt(t)}"><use href="${rt(i)}" xlink:href="${rt(i)}"></use></svg>`}s(z5,"itemIconMarkup");function F5(e){let t=String(e??"").split("/").at(-1)?.split("_")[0];return I5[t]??u.config.SCRIPT_COLOR_MAIN??"#43c4ad"}s(F5,"creditColor");function j5(){return`
:host{position:fixed;z-index:2147483000;display:block;width:min(400px,calc(100vw - 24px));max-height:calc(100dvh - 24px);box-sizing:border-box;color:#f4f5ff;font-family:inherit;font-size:11px;line-height:1.25}
*{box-sizing:border-box}
.advisor{display:flex;max-height:inherit;flex-direction:column;overflow:hidden;border:1px solid #414361;border-left:4px solid var(--mwi-credit-accent,#43c4ad);border-radius:8px;background:#171927;box-shadow:0 10px 30px rgba(0,0,0,.48)}
.head{display:flex;align-items:center;justify-content:space-between;gap:7px;padding:6px 9px;border-bottom:1px solid #414361;background:#24263e}
.title{display:flex;align-items:center;gap:7px;min-width:0;color:#fff;font-size:13px;font-weight:750;white-space:nowrap}
.credit{display:flex;align-items:center;gap:4px;min-width:0;overflow:hidden;color:#c7cae4;font-size:9px;font-weight:500;text-overflow:ellipsis;white-space:nowrap}
.credit::before{width:7px;height:7px;flex:0 0 7px;border-radius:2px;background:var(--mwi-credit-accent,#43c4ad);content:""}
.basis{color:#aeb1c9;font-size:9px;white-space:nowrap}
.body{min-height:0;overflow-x:hidden;overflow-y:auto;padding:5px;scrollbar-width:thin}
.ranking{display:grid;gap:3px}
.rank-row{display:grid;min-height:34px;grid-template-columns:18px 22px minmax(0,1fr) auto;align-items:center;gap:5px;padding:3px 5px;border:1px solid #3d3f5d;border-radius:5px;background:#202139}
.rank-row.best{border-color:color-mix(in srgb,var(--mwi-credit-accent,#43c4ad) 72%,#414361);background:color-mix(in srgb,var(--mwi-credit-accent,#43c4ad) 13%,#202139)}
.rank-row.current-row{margin-top:4px;border-style:dashed;background:#1d1f33}
.rank{display:grid;width:17px;height:17px;place-items:center;border:1px solid #555976;border-radius:50%;color:#c9cce2;font:700 9px ui-monospace,SFMono-Regular,Menlo,monospace}
.best .rank{border-color:var(--mwi-credit-accent,#43c4ad);background:var(--mwi-credit-accent,#43c4ad);color:#111827}
.item-icon,.icon-fallback{display:grid;width:22px;height:22px;place-items:center;overflow:hidden;border-radius:4px;background:#292b45;color:#c7cae4;font-weight:700}
.copy{display:block;min-width:0}
.name-line{display:flex;min-width:0;align-items:center;gap:5px}
.name{min-width:0;overflow:hidden;color:#f5f6ff;font-size:11px;font-weight:700;text-overflow:ellipsis;white-space:nowrap}
.tag{flex:0 0 auto;padding:1px 4px;border:1px solid color-mix(in srgb,var(--mwi-credit-accent,#43c4ad) 65%,#555976);border-radius:999px;color:var(--mwi-credit-accent,#43c4ad);font-size:8px;font-weight:700}
.price{display:flex;align-items:baseline;justify-content:flex-end;gap:3px;color:var(--mwi-credit-accent,#43c4ad);font:750 12px/1.2 ui-monospace,SFMono-Regular,Menlo,monospace;white-space:nowrap}
.price small{color:#aeb1c9;font:500 9px/1.2 inherit}
.current-heading{margin:4px 2px 3px;color:#aeb1c9;font-size:8px;font-weight:700;letter-spacing:.04em;text-transform:uppercase}
.summary{margin-top:5px;padding:5px 7px;border-top:1px solid #414361;border-radius:0 0 5px 5px;background:#1d1f31;color:#dfe1f4;font-size:9px;line-height:1.35;text-align:center}
.summary strong{color:var(--mwi-credit-accent,#43c4ad);font-size:10px}
.summary.warning strong{color:#ffd17c}
.estimate{margin-top:3px;color:#9296b0;font-size:8px;text-align:center}
.empty{padding:14px;color:#bfc2d9;text-align:center}
@media(max-width:760px){
:host{width:calc(100vw - 16px);max-height:min(38dvh,300px);font-size:10px}
.head{padding:5px 7px}
.title{font-size:12px}
.basis{font-size:8px}
.body{padding:4px}
.rank-row{min-height:32px;grid-template-columns:17px 21px minmax(0,1fr) auto;gap:4px;padding:3px 4px}
.item-icon,.icon-fallback{width:21px;height:21px}
.name{font-size:10px}
.price{font-size:11px}
.price small{font-size:8px}
.summary{margin-top:4px;padding:4px 6px}
}
@media(max-width:420px){
:host{width:calc(100vw - 12px);max-height:min(40dvh,280px)}
.head{gap:5px}
.title{gap:5px}
.credit{max-width:92px}
.rank-row{grid-template-columns:17px 20px minmax(0,1fr) auto}
.item-icon,.icon-fallback{width:20px;height:20px}
}
`}s(j5,"advisorStyles");function W5(){let e=document.getElementById(R0);if(e?.shadowRoot)return e;e?.remove(),e=document.createElement("div"),e.id=R0;let t=e.attachShadow({mode:"open"}),a=document.createElement("style");a.textContent=j5();let n=document.createElement("aside");return n.className="advisor",n.setAttribute("role","complementary"),n.setAttribute("aria-live","polite"),t.append(a,n),e}s(W5,"createAdvisorHost");function Om(e,t,{current:a=!1,separate:n=!1}={}){let i=sr(e.itemHrid),o=e.estimated?"≈":"";return`<div class="rank-row${t===0?" best":""}${n?" current-row":""}">
<span class="rank">${n?"—":t+1}</span>
${z5(e.itemHrid,i)}
<span class="copy"><span class="name-line"><span class="name" title="${rt(i)}">${rt(i)}</span>${a?`<span class="tag">${rt(xt("当前","Current"))}</span>`:""}</span></span>
<span class="price" title="${rt(Ln(e.costPerCredit))}">${o}${rt(B0(e.costPerCredit))}<small>${rt(xt("每信用点","per credit"))}</small></span>
</div>`}s(Om,"rankRowMarkup");function V5(e,t){if(!e)return`<div class="summary">${rt(xt("选择兑换物品后可比较卖出换购收益。","Select an exchange item to compare sell-and-rebuy returns."))}</div>`;if(e.status==="already_optimal")return`<div class="summary"><strong>${rt(xt("当前方案已是单位信用成本最优","The selected option already has the best unit cost"))}</strong></div>`;if(e.status==="no_sell_quote")return`<div class="summary warning"><strong>${rt(xt("当前物品没有足够的收购报价","The selected item has insufficient buy-order depth"))}</strong><br>${rt(xt("无法估算卖出换购结果。","The sell-and-rebuy result cannot be estimated."))}</div>`;if(e.status==="unaffordable")return`<div class="summary warning"><strong>${rt(xt("税后收入不足以购买一个最优兑换批次","Net sale proceeds cannot buy one batch of the best option"))}</strong></div>`;let a=sr(t.itemHrid),n=Number(e.difference)||0,i;return n>0?i=xt(`卖出当前物品并改买${a},可多兑换 ${Ln(n)} 点信用。`,`Sell the selected items and buy ${a} to gain ${Ln(n)} more credits.`):n<0?i=xt(`直接兑换更划算;改买${a}会少 ${Ln(-n)} 点信用。`,`Direct exchange is better; switching to ${a} yields ${Ln(-n)} fewer credits.`):i=xt(`直接兑换与改买${a}获得的信用点相同。`,`Direct exchange and switching to ${a} yield the same credits.`),`<div class="summary"><strong>${rt(i)}</strong><br>${rt(xt(`税后可用 ${B0(e.netSaleValue)},可购买 ${Ln(e.replacement.requiredItems)} 个材料。`,`${B0(e.netSaleValue)} net proceeds buy ${Ln(e.replacement.requiredItems)} materials.`))}</div>`}s(V5,"replacementSummaryMarkup");function G5({context:e,ranked:t,selected:a,replacement:n}){let i=t.slice(0,3),o=sr(e.creditItemHrid),r=i.some(({itemHrid:m})=>m===e.selectedItemHrid),c=i.map((m,p)=>Om(m,p,{current:m.itemHrid===e.selectedItemHrid})).join(""),l=a&&!r?`<div class="current-heading">${rt(xt("当前方案","Selected option"))}</div>${Om(a,-1,{current:!0,separate:!0})}`:"",d=t.some(({estimated:m})=>m)||n?.estimated;return`<header class="head"><span class="title">${rt(xt("公会信用兑换推荐","Guild Credit Exchange"))}<span class="credit">${rt(o)}</span></span><span class="basis">${rt(xt("按订单深度","Order-book depth"))}</span></header>
<div class="body">${c?`<div class="ranking">${c}</div>${l}${V5(n,i[0])}${d?`<div class="estimate">${rt(xt("带 ≈ 的市场结果使用当前最低报价估算。","Estimated market results use the current best quote."))}</div>`:""}`:`<div class="empty">${rt(xt("没有具备完整报价的兑换方案。","No exchange option has a complete market quote."))}</div>`}</div>`}s(G5,"advisorMarkup");function qm(e,t,a){return Math.min(Math.max(e,t),Math.max(t,a))}s(qm,"clamp");function Z5(e){return e.closest('[class*="Modal_modalContainer"]')??e}s(Z5,"findGuildExchangeAnchor");function U5(){return{width:Number(globalThis.innerWidth)||document.documentElement.clientWidth,height:Number(globalThis.innerHeight)||document.documentElement.clientHeight}}s(U5,"viewportSize");function F0({left:e,top:t,width:a,height:n},i){return!(i?.width>0)||!(i?.height>0)?!1:!(e+a<=i.left||e>=i.right||t+n<=i.top||t>=i.bottom)}s(F0,"overlapsRect");function Rm(e=Pn){!e?.anchor||e.originalTranslate===void 0||(e.originalTranslate?e.anchor.style.setProperty("translate",e.originalTranslate,e.originalTranslatePriority):e.anchor.style.removeProperty("translate"),e.shiftY=0)}s(Rm,"restoreGuildExchangeAnchor");function K5(e,t){let a=Math.round(t);a&&(e.anchor.style.setProperty("translate",`0 ${a}px`,"important"),e.shiftY=a)}s(K5,"shiftGuildExchangeAnchor");function X5(e,t,a){let n=Math.min(0,a.height-Jt-t.bottom);return n?(K5(e,n),{...t,top:t.top+n,bottom:t.bottom+n}):t}s(X5,"keepGuildExchangeAnchorReachable");function J5(e){let t=Math.max(72,e.height-Jt*2);return e.width>760?t:Math.min(t,300,Math.max(160,e.height*.38))}s(J5,"responsiveAdvisorMaxHeight");function Bm(){let e=Pn;if(!e?.host?.isConnected||!e.anchor?.isConnected)return!1;Rm(e);let t=e.anchor.getBoundingClientRect(),a=e.host.getBoundingClientRect(),n=U5();t=X5(e,t,n);let i=a.width||Math.min(400,n.width-24),o=J5(n),r=Math.min(a.height||Math.min(260,n.height-24),o),c=N5()?.getBoundingClientRect?.(),l=qm(t.top,Jt,n.height-r-Jt),d={left:t.right+mi,top:l,width:i,height:r},m={left:t.left-mi-i,top:l,width:i,height:r},p={left:qm(t.left+(t.width-i)/2,Jt,n.width-i-Jt),top:t.top-mi-r,width:i,height:r},b=d.left+i<=n.width-Jt&&!F0(d,c),f=m.left>=Jt&&!F0(m,c),g=p.top>=Jt&&!F0(p,c),h=Math.min(t.top,c?.top??Number.POSITIVE_INFINITY),_=h-mi-Jt,y=_>=72,w;b?w="right":f?w="left":g?w="top":y?w="top-compressed":w="overlay";let k,C,x=o;return w==="right"?{left:k,top:C}=d:w==="left"?{left:k,top:C}=m:w==="top"?({left:k,top:C}=p,x=Math.min(o,t.top-mi-Jt)):w==="top-compressed"?(k=p.left,x=Math.min(o,_),C=h-mi-Math.min(r,x)):(k=p.left,C=Jt),e.host.dataset.placement=w,e.host.style.left=`${Math.round(k)}px`,e.host.style.top=`${Math.round(C)}px`,e.host.style.maxHeight=`${Math.max(w==="top-compressed"?1:72,Math.round(x))}px`,!0}s(Bm,"positionGuildCreditAdvisor");function Wo(){if(sn!==null)return;let e=s(()=>{sn=null,Bm()},"run");typeof globalThis.requestAnimationFrame=="function"?sn=globalThis.requestAnimationFrame(e):sn=setTimeout(e,0)}s(Wo,"scheduleGuildCreditAdvisorPosition");function zm(){sn!==null&&(typeof globalThis.cancelAnimationFrame=="function"?globalThis.cancelAnimationFrame(sn):clearTimeout(sn),sn=null),Rm(),Pn?.resizeObserver?.disconnect(),Pn=null}s(zm,"clearGuildCreditAdvisorPosition");function Y5(e,t){let a=Z5(t);if(e.parentElement!==document.body&&document.body.append(e),Pn?.host!==e||Pn?.anchor!==a){zm();let n=globalThis.ResizeObserver?new globalThis.ResizeObserver(Wo):null;n?.observe(a),n?.observe(e),Pn={anchor:a,host:e,resizeObserver:n,originalTranslate:a.style.getPropertyValue("translate"),originalTranslatePriority:a.style.getPropertyPriority("translate"),shiftY:0}}Bm()}s(Y5,"mountGuildCreditAdvisor");function Vo(){zm(),document.getElementById(R0)?.remove()}s(Vo,"removeGuildCreditAdvisor");async function Fm({marketReady:e=!1}={}){let t=z0();if(!t)return Vo(),null;let a=P5(t);if(!a.creditItemHrid||!e&&!await u.api.ensureMarketValueSource?.())return Vo(),null;let i=Nm(a.creditItemHrid).find(({itemHrid:b})=>b===a.selectedItemHrid),o=i?i.creditCount*a.batchCount:1,r=$5(a.creditItemHrid,o),c=r[0],l=i?$m(i,o):null,d=i&&c?R5(i,a.batchCount,c):null,m=W5();m.style.setProperty("--mwi-credit-accent",F5(a.creditItemHrid));let p=m.shadowRoot.querySelector(".advisor");return p.setAttribute("aria-label",xt("公会信用兑换推荐","Guild Credit Exchange")),p.innerHTML=G5({context:a,ranked:r,selected:l,replacement:d}),Y5(m,t),m}s(Fm,"renderGuildCreditAdvisor");async function jm(){if(!z0()||!await u.api.ensureMarketValueSource?.())return j0(),null;let e=await Fm({marketReady:!0});return{summaries:[],advisor:e}}s(jm,"renderGuildCreditRecommendations");function j0(){Vo(),document.getElementById(Tm)?.remove(),document.querySelectorAll(`.${Em}`).forEach(e=>e.remove())}s(j0,"cleanup"),u.features.register({id:"guildCreditConversionsSort",setting:"guildCreditConversionsSort",scope:"character",initialize({scope:e}){document.getElementById(Tm)?.remove(),document.querySelectorAll(`.${Em}`).forEach(o=>o.remove());let t=null,a=s(()=>{if(t!==null)return;let o=s(()=>{t=null,jm()},"run");typeof globalThis.requestAnimationFrame=="function"?t=globalThis.requestAnimationFrame(o):t=setTimeout(o,0)},"schedule"),n=new MutationObserver(o=>{let r=z0();o.some(l=>r&&(l.target===r||r.contains?.(l.target)||l.target?.contains?.(r))||l.type==="attributes"&&(l.target?.matches?.(`${di},${or}`)||l.target?.querySelector?.(`${di},${or}`))?!0:[...l.addedNodes,...l.removedNodes].some(d=>d?.matches?.(di)||d?.matches?.(or)||d?.querySelector?.(di)||d?.querySelector?.(or)))&&a()});e.observer(n,document.body,{attributes:!0,attributeFilter:["aria-hidden","aria-label","class","hidden","href","style"],childList:!0,subtree:!0});let i=s(o=>{o.target?.closest?.(di)&&a()},"scheduleFromModal");e.event(document,"input",i,!0),e.event(document,"change",i,!0),e.event(globalThis.window??globalThis,"resize",Wo),e.event(globalThis.window??globalThis,"orientationchange",Wo),e.event(globalThis.window??globalThis,"scroll",Wo,!0);for(let o of["market_item_values_updated","market_item_order_books_updated"])e.add(u.onMessage(o,a));e.add(()=>{t!==null&&(typeof globalThis.cancelAnimationFrame=="function"?globalThis.cancelAnimationFrame(t):clearTimeout(t)),j0()}),a()}}),Object.assign(u.api,{renderGuildCreditAdvisor:Fm,renderGuildCreditRecommendations:jm});var fi="mwitools-production-profit-panel",Wm="mwitools-production-profit-panel-style",na=12,$n=10,Ht=null;function se(e,t){return Mn(e,t)}s(se,"t");function Qe(e){return String(e??"").replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}s(Qe,"escapeHtml");function Dt(e,t=1){return Number.isFinite(Number(e))?Math.abs(Number(e))>=1e3?u.api.numberFormatter?.(Number(e),t)??String(e):new Intl.NumberFormat(u.config.isZH?"zh-CN":"en-US",{maximumFractionDigits:t}).format(Number(e)):"—"}s(Dt,"formatNumber");function ia(e){return e==null||e===""?"—":Number.isFinite(Number(e))?Dt(e,1):"—"}s(ia,"formatMoney");function Q5(e){return e==null||e===""||!Number.isFinite(Number(e))?"":Qe(u.api.formatExactNumber?.(Number(e))??String(e))}s(Q5,"exactNumberTitle");function On(e){let t=Q5(e);return t?` title="${t}"`:""}s(On,"numberTitleAttribute");function Vm(e){return`${Number(e||0)>=0?"+":""}${Dt(e,1)}%`}s(Vm,"formatPercent");function va(e){return en(e)}s(va,"itemName");function Gm(e,t){return so(e,{detail:t})}s(Gm,"actionName");function e_(){for(let a of globalThis.performance?.getEntriesByType?.("resource")??[])if(a.name?.includes("items_sprite")&&a.name.endsWith(".svg"))try{return new URL(a.name).pathname}catch{return a.name}let e=document.querySelector('svg use[href*="items_sprite"],svg use[xlink\\:href*="items_sprite"]'),t=e?.getAttribute("href")??e?.getAttribute("xlink:href")??"";return t.includes("#")?t.split("#")[0]:""}s(e_,"findItemsSpriteBase");function ur(e,t){let a=String(e??"").split("/").at(-1),n=e_();if(!a||!n)return`<span class="mwi-profit-icon-fallback">${Qe(String(t||"?").trim().charAt(0)||"?")}</span>`;let i=`${n}#${a}`;return`<svg class="mwi-profit-icon" viewBox="0 0 32 32" aria-label="${Qe(t)}"><use href="${Qe(i)}" xlink:href="${Qe(i)}"></use></svg>`}s(ur,"renderItemIcon");function Zm(){if(document.getElementById(Wm))return;let e=document.createElement("style");e.id=Wm,e.textContent=`
#${fi} { position:fixed; z-index:2147483000; width:min(760px,calc(100vw - 24px)); max-height:min(78vh,760px); box-sizing:border-box; overflow:auto; pointer-events:none; color:var(--color-text-primary,#f2f2f2); border:1px solid rgba(255,255,255,.16); border-radius:10px; background:linear-gradient(145deg,rgba(35,39,47,.985),rgba(19,22,28,.985)); box-shadow:0 18px 48px rgba(0,0,0,.48),0 2px 8px rgba(0,0,0,.3); font-family:inherit; font-size:12px; line-height:1.35; scrollbar-width:thin; backdrop-filter:blur(12px); }
#${fi} * { box-sizing:border-box; }
.mwi-profit-header { display:flex; align-items:center; gap:10px; padding:12px 14px; border-bottom:1px solid rgba(255,255,255,.1); }
.mwi-profit-header-icon { display:grid; width:38px; height:38px; flex:0 0 38px; place-items:center; border-radius:8px; background:rgba(255,255,255,.065); }
.mwi-profit-header-main { min-width:0; }
.mwi-profit-title { color:#fff; font-size:14px; font-weight:700; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.mwi-profit-subtitle { margin-top:2px; color:var(--color-text-secondary,#aeb4bf); font-size:11px; }
.mwi-profit-status { margin-left:auto; padding:3px 8px; border:1px solid currentColor; border-radius:999px; font-size:10px; font-weight:650; white-space:nowrap; }
.mwi-profit-status.complete { color:#7bd69a; background:rgba(66,185,108,.1); }
.mwi-profit-status.partial { color:#e7bd68; background:rgba(221,164,51,.1); }
.mwi-profit-status.incomplete { color:#ef8c86; background:rgba(218,73,65,.1); }
.mwi-profit-status.waiting { color:#9fb8df; background:rgba(74,119,187,.1); }
.mwi-profit-body { display:grid; grid-template-columns:minmax(0,1fr) 138px minmax(0,1fr); gap:10px; padding:12px; align-items:stretch; }
.mwi-profit-card { min-width:0; padding:10px; border:1px solid rgba(255,255,255,.095); border-radius:8px; background:rgba(255,255,255,.035); }
.mwi-profit-card.cost { border-top:2px solid rgba(239,124,111,.72); }
.mwi-profit-card.income { border-top:2px solid rgba(83,201,132,.72); }
.mwi-profit-card-title { display:flex; align-items:center; justify-content:space-between; margin-bottom:7px; color:#fff; font-size:11px; font-weight:700; letter-spacing:.04em; }
.mwi-profit-card-total { color:var(--color-text-secondary,#aeb4bf); font-size:10px; font-weight:600; }
.mwi-profit-item { display:grid; grid-template-columns:28px minmax(0,1fr) auto; gap:7px; align-items:center; padding:7px 0; border-top:1px solid rgba(255,255,255,.065); }
.mwi-profit-item:first-of-type { border-top:0; }
.mwi-profit-item-name { min-width:0; color:#edf0f4; font-size:11px; font-weight:600; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.mwi-profit-item-meta { margin-top:2px; color:var(--color-text-secondary,#9ba2ad); font-size:9.5px; }
.mwi-profit-item-value { min-width:64px; text-align:right; }
.mwi-profit-item-value strong { display:block; color:#fff; font-size:11px; }
.mwi-profit-item-value span { display:block; margin-top:2px; color:var(--color-text-secondary,#9ba2ad); font-size:9.5px; }
.mwi-profit-kind { display:inline-block; margin-right:4px; padding:0 4px; border-radius:3px; background:rgba(255,255,255,.075); color:#bdc5d1; font-size:8.5px; }
.mwi-profit-player { display:flex; min-width:0; flex-direction:column; align-items:center; justify-content:center; gap:7px; padding:9px 7px; border:1px solid rgba(255,255,255,.095); border-radius:8px; background:rgba(255,255,255,.025); text-align:center; }
.mwi-profit-player-title { color:#fff; font-size:11px; font-weight:700; }
.mwi-profit-teas { display:flex; min-height:28px; align-items:center; justify-content:center; gap:4px; }
.mwi-profit-tea { display:grid; width:27px; height:27px; place-items:center; border-radius:6px; background:rgba(255,255,255,.07); }
.mwi-profit-no-tea { color:var(--color-text-secondary,#9ba2ad); font-size:9.5px; }
.mwi-profit-effects { display:flex; flex-wrap:wrap; justify-content:center; gap:3px; }
.mwi-profit-effect { padding:2px 5px; border-radius:999px; color:#d5dbe4; background:rgba(255,255,255,.07); font-size:9px; }
.mwi-profit-flow { color:var(--color-primary,#70a8ff); font-size:24px; line-height:1; }
.mwi-profit-stat-list { width:100%; }
.mwi-profit-stat { display:flex; justify-content:space-between; gap:6px; padding:3px 0; border-top:1px solid rgba(255,255,255,.055); color:var(--color-text-secondary,#a4abb6); font-size:9.5px; }
.mwi-profit-stat strong { color:#edf0f4; font-weight:650; }
.mwi-profit-valuations { display:flex; flex-direction:column; gap:4px; padding:0 12px 10px; }
.mwi-profit-valuation-row { display:grid; grid-template-columns:126px repeat(6,minmax(0,1fr)); min-width:0; overflow:hidden; border:1px solid rgba(255,255,255,.1); border-left:3px solid var(--mwi-valuation-color); border-radius:7px; background:rgba(255,255,255,.03); }
.mwi-profit-valuation-row[data-mode="fair"] { --mwi-valuation-color:#74a9ef; }
.mwi-profit-valuation-row[data-mode="conservative"] { --mwi-valuation-color:#e1b65d; }
.mwi-profit-valuation-row[data-mode="aggressive"] { --mwi-valuation-color:#68c98e; }
.mwi-profit-valuation-row.mwi-loot-valuation-row { grid-template-columns:126px repeat(3,minmax(0,1fr)); }
.mwi-profit-valuation-row.incomplete { opacity:.72; }
.mwi-profit-valuation-name { display:flex; min-width:0; flex-direction:column; justify-content:center; gap:1px; padding:5px 8px; border-right:1px solid rgba(255,255,255,.08); }
.mwi-profit-valuation-title { color:#fff; font-size:10.5px; font-weight:750; line-height:1.2; }
.mwi-profit-valuation-state { color:var(--mwi-valuation-color); font-size:8px; line-height:1.15; }
.mwi-profit-valuation-metric { min-width:0; padding:5px 4px; border-left:1px solid rgba(255,255,255,.055); text-align:center; }
.mwi-profit-valuation-name + .mwi-profit-valuation-metric { border-left:0; }
.mwi-profit-valuation-label { min-height:2.2em; color:var(--color-text-secondary,#9da5b0); font-size:8px; line-height:1.1; }
.mwi-profit-valuation-value { margin-top:2px; color:#fff; font-size:10.5px; font-weight:700; overflow-wrap:anywhere; }
.mwi-profit-valuation-metric.profit { background:rgba(55,160,97,.075); }
.mwi-profit-valuation-metric.profit .mwi-profit-valuation-value { color:#82dfa4; }
.mwi-profit-warning { margin:0 12px 12px; padding:8px 10px; border:1px solid rgba(224,177,75,.25); border-radius:7px; background:rgba(195,139,30,.09); color:#e3c276; font-size:10px; }
.mwi-profit-hint { margin:0 12px 12px; color:var(--color-text-secondary,#8b93a0); font-size:9.5px; line-height:1.35; }
#${fi}.mwi-profit-pinned { pointer-events:auto; }
.mwi-profit-close { flex:0 0 auto; width:22px; height:22px; margin-left:auto; padding:0; border:1px solid rgba(255,255,255,.16); border-radius:5px; background:rgba(255,255,255,.06); color:#e7e9ef; font-size:14px; line-height:1; cursor:pointer; }
.mwi-profit-close:hover { background:rgba(255,255,255,.14); }
.mwi-loot-controls { display:grid; grid-template-columns:minmax(0,1fr); gap:8px; margin:10px 12px 0; padding:8px 10px; border:1px solid rgba(255,255,255,.08); border-radius:7px; background:rgba(0,0,0,.12); }
.mwi-loot-controls.has-key { grid-template-columns:repeat(3,minmax(0,1fr)); }
.mwi-loot-control { display:grid; min-width:0; min-height:38px; grid-template-columns:minmax(0,1fr) 36px; grid-template-rows:auto 20px; align-items:center; gap:2px 7px; padding:0 7px; border-left:1px solid rgba(255,255,255,.07); }
.mwi-loot-control:first-child { padding-left:0; border-left:0; }
.mwi-loot-control-label { min-width:0; grid-column:1 / 3; color:#edf0f4; font-size:10.5px; font-weight:600; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.mwi-loot-control-state { min-width:0; color:var(--color-text-secondary,#aeb4bf); font-size:9.5px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.mwi-loot-switch { position:relative; width:36px; height:20px; flex:0 0 36px; }
.mwi-loot-switch input { position:absolute; opacity:0; pointer-events:none; }
.mwi-loot-switch span { position:absolute; inset:0; border-radius:999px; cursor:pointer; background:#555; transition:.16s; }
.mwi-loot-switch span::after { content:""; position:absolute; top:2px; left:2px; width:16px; height:16px; border-radius:50%; background:#fff; transition:.16s; }
.mwi-loot-switch input:checked + span { background:var(--color-primary,#70a8ff); }
.mwi-loot-switch input:checked + span::after { transform:translateX(16px); }
.mwi-loot-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(112px,1fr)); gap:6px; margin-top:8px; }
.mwi-loot-cell { position:relative; display:flex; min-width:0; align-items:center; gap:6px; padding:5px 7px; border:1px solid rgba(255,255,255,.08); border-radius:6px; background:rgba(255,255,255,.03); }
.mwi-loot-cell.unpriced { opacity:.6; }
.mwi-loot-cell.best-redemption { border-color:rgba(255,193,74,.86); background:linear-gradient(135deg,rgba(255,185,55,.16),rgba(255,255,255,.035)); box-shadow:0 0 0 1px rgba(255,184,55,.12),0 0 14px rgba(255,171,42,.12); }
.mwi-loot-best-badge { position:absolute; top:-6px; right:-4px; z-index:1; padding:1px 5px; border:1px solid rgba(255,211,112,.72); border-radius:999px; background:#7b5410; color:#fff3cf; font-size:8px; font-weight:750; line-height:1.35; white-space:nowrap; }
.mwi-loot-cell-icon { position:relative; flex:0 0 26px; width:26px; height:26px; }
.mwi-loot-cell-icon .mwi-profit-icon,.mwi-loot-cell-icon .mwi-profit-icon-fallback { width:26px; height:26px; }
.mwi-loot-cell-chance { position:absolute; right:-3px; bottom:-3px; padding:0 3px; border-radius:6px; background:rgba(15,18,28,.92); color:#cbd3f4; font-size:8px; line-height:1.3; box-shadow:0 0 0 1px rgba(255,255,255,.1); }
.mwi-loot-cell-main { min-width:0; }
.mwi-loot-cell-name { overflow:hidden; color:#edf0f4; font-size:10.5px; font-weight:600; text-overflow:ellipsis; white-space:nowrap; }
.mwi-loot-cell-value { margin-top:1px; color:#82dfa4; font-size:10px; font-weight:650; }
.mwi-loot-cell.unpriced .mwi-loot-cell-value { color:var(--color-text-secondary,#9ba2ad); }
.mwi-profit-state { margin:12px; padding:18px; border:1px solid rgba(255,255,255,.09); border-radius:8px; background:rgba(255,255,255,.03); color:var(--color-text-secondary,#acb3be); text-align:center; }
.mwi-profit-icon,.mwi-profit-icon-fallback { width:26px; height:26px; }
.mwi-profit-icon-fallback { display:grid; place-items:center; border-radius:5px; background:rgba(255,255,255,.09); color:#fff; font-weight:700; }
.mwi-profit-header-icon .mwi-profit-icon,.mwi-profit-header-icon .mwi-profit-icon-fallback { width:32px; height:32px; }
.mwi-profit-tea .mwi-profit-icon,.mwi-profit-tea .mwi-profit-icon-fallback { width:23px; height:23px; }
@media(max-width:760px){#${fi}{max-height:72vh}.mwi-profit-body{grid-template-columns:1fr}.mwi-profit-player{order:-1;flex-direction:row;flex-wrap:wrap}.mwi-profit-flow{transform:rotate(90deg)}.mwi-profit-stat-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 8px}.mwi-profit-valuation-row{grid-template-columns:repeat(2,minmax(0,1fr))}.mwi-profit-valuation-name{grid-column:1 / 3;border-right:0;border-bottom:1px solid rgba(255,255,255,.08)}.mwi-profit-valuation-metric{border-top:1px solid rgba(255,255,255,.055)}.mwi-profit-valuation-name + .mwi-profit-valuation-metric{border-left:0}}
`,(document.head??document.documentElement).appendChild(e)}s(Zm,"addStyles");function Um(e,t){let a=va(e.itemHrid),n=t==="input",i=Number(e.baseCount??e.count)||0,o=Number(e.effectiveCount??e.count)||0,r=Dt(o,3);Math.abs(i-o)>1e-9&&(r=`${Dt(i,3)} → ${r}`);let c="";e.isUpgradeItem&&(c=se("前置","Base")),e.kind==="essence"&&(c=se("精华","Essence")),e.kind==="rare"&&(c=se("稀有","Rare"));let l=n?se("市价","Market value"):e.valueSource==="derived"?se("派生期望值","Derived expected value"):se("税后市价","Net market value");return`
<div class="mwi-profit-item" data-item-hrid="${Qe(e.itemHrid)}">
<div>${ur(e.itemHrid,a)}</div>
<div>
<div class="mwi-profit-item-name">${c?`<span class="mwi-profit-kind">${Qe(c)}</span>`:""}${Qe(a)}</div>
<div class="mwi-profit-item-meta">${Qe(r)} · ${l} <span${On(e.unitPrice)}>${ia(e.unitPrice)}</span></div>
</div>
<div class="mwi-profit-item-value">
<strong${On(e.valuePerAction)}>${ia(e.valuePerAction)}</strong>
<span>${se("每动作","per action")}</span>
</div>
</div>`}s(Um,"renderItemRow");function Ra(e,t,a=!1){return`<div class="mwi-profit-valuation-metric${a?" profit":""}"><div class="mwi-profit-valuation-label">${Qe(e)}</div><div class="mwi-profit-valuation-value"${On(t)}>${ia(t)}</div></div>`}s(Ra,"renderValuationMetric");var cr=[{mode:"fair",title:{zh:"市价",en:"Market value"},explanation:{zh:"市场价值",en:"Market value"}},{mode:"conservative",title:{zh:"效率(高买低卖)",en:"Efficiency (buy high, sell low)"},explanation:{zh:"卖单买入 · 买单卖出",en:"Buy at ask · sell at bid"}},{mode:"aggressive",title:{zh:"贪心(低买高卖)",en:"Greedy (buy low, sell high)"},explanation:{zh:"买单买入 · 卖单卖出",en:"Buy at bid · sell at ask"}}];function W0(e){return e?.[u.config.isZH?"zh":"en"]??""}s(W0,"valuationText");function t_(e,t){let a=!!t?.complete,n=a?t.materialCostPerAction+t.teaCostPerAction:null,i=a?t.profitPerHour*24:null;return`<section class="mwi-profit-valuation-row${a?"":" incomplete"}" data-mode="${e.mode}">
<div class="mwi-profit-valuation-name">
<div class="mwi-profit-valuation-title">${Qe(W0(e.title))}</div>
<div class="mwi-profit-valuation-state">${Qe(W0(e.explanation))}</div>
</div>
${Ra(se("税后收入/动作","Net revenue/action"),a?t.revenuePerAction:null)}
${Ra(se("材料成本/动作","Materials/action"),a?t.materialCostPerAction:null)}
${Ra(se("茶饮成本/动作","Tea cost/action"),a?t.teaCostPerAction:null)}
${Ra(se("总成本/动作","Total cost/action"),n)}
${Ra(se("净利润/动作","Net profit/action"),a?t.netProfitPerAction:null,!0)}
${Ra(se("净利润/天","Net profit/day"),i,!0)}
</section>`}s(t_,"renderValuationRow");function a_(e){if(e.status==="waiting")return{className:"waiting",label:se("玩家数据未就绪","Player data pending")};let t=cr.map(({mode:n})=>e.valuations?.[n]),a=t.filter(n=>n?.complete).length;return a===0?{className:"incomplete",label:se("无法计算","Unavailable")}:a<t.length?{className:"partial",label:se("部分口径缺价","Some prices missing")}:t.some(n=>n?.unpricedByproducts?.length>0||n?.derivedMissingPrices?.length>0)?{className:"partial",label:se("部分计价","Partial pricing")}:{className:"complete",label:se("完整计价","Fully priced")}}s(a_,"statusInfo");function n_(e,t,a,n={}){let i=va(t),o=a_(a),r=a.detail,c=!!n.directAction,l=c?Gm(a.actionHrid,r):i,d=c?`${se("全部期望产物","All expected outputs")} · ${se("当前玩家实时配置","Current player configuration")}`:`${Gm(a.actionHrid,r)} · ${se("当前玩家实时配置","Current player configuration")}`;if(e.dataset.status=o.className,e.innerHTML=`
<header class="mwi-profit-header">
<div class="mwi-profit-header-icon">${ur(t,i)}</div>
<div class="mwi-profit-header-main">
<div class="mwi-profit-title">${Qe(l)}</div>
<div class="mwi-profit-subtitle">${Qe(d)}</div>
</div>
<div class="mwi-profit-status ${o.className}">${Qe(o.label)}</div>
</header>`,a.status==="waiting"){e.insertAdjacentHTML("beforeend",`<div class="mwi-profit-state">${se("正在等待当前角色的装备、技能与茶饮数据,未使用任何默认配置。","Waiting for this character's equipment, skills, and drink data. No defaults are being used.")}</div>`);return}let m=(a.inputs??[]).map(k=>Um(k,"input")).join(""),p=[...a.outputs??[],...a.byproductOutputs??[]].map(k=>Um(k,"output")).join(""),b=a.teaEffects?.drinks??[],f=b.length?b.map(k=>{let C=va(k.itemHrid);return`<span class="mwi-profit-tea">${ur(k.itemHrid,C)}</span>`}).join(""):`<span class="mwi-profit-no-tea">${se("未使用茶饮","No active drinks")}</span>`,g=[];a.teaEffects?.lessResource>0&&g.push(`<span class="mwi-profit-effect">${se("工匠","Artisan")} −${Dt(a.teaEffects.lessResource*100,1)}%</span>`),a.teaEffects?.quantity>0&&g.push(`<span class="mwi-profit-effect">${se("额外产量","Extra output")} +${Dt(a.teaEffects.quantity*100,1)}%</span>`),e.insertAdjacentHTML("beforeend",`<div class="mwi-profit-body">
<section class="mwi-profit-card cost">
<div class="mwi-profit-card-title"><span>${se("投入","Inputs")}</span><span class="mwi-profit-card-total"${On(a.materialCostPerAction)}>${ia(a.materialCostPerAction)} / ${se("动作","action")}</span></div>
${m||`<div class="mwi-profit-no-tea">${se("无材料投入","No material inputs")}</div>`}
</section>
<section class="mwi-profit-player">
<div class="mwi-profit-player-title">${se("当前玩家","Current player")}</div>
<div class="mwi-profit-teas">${f}</div>
<div class="mwi-profit-effects">${g.join("")}</div>
<div class="mwi-profit-flow">→</div>
<div class="mwi-profit-stat-list">
<div class="mwi-profit-stat"><span>${se("饮料浓度","Drink strength")}</span><strong>×${Dt(a.teaEffects?.concentrationMultiplier??1,3)}</strong></div>
<div class="mwi-profit-stat"><span>${se("动作速度","Action speed")}</span><strong>${Vm(a.speedPercent)}</strong></div>
<div class="mwi-profit-stat"><span>${se("综合效率","Efficiency")}</span><strong>${Vm(a.efficiencyPercent)}</strong></div>
<div class="mwi-profit-stat"><span>${se("动作/小时","Actions/hour")}</span><strong>${Dt(a.actionsPerHour,1)}</strong></div>
<div class="mwi-profit-stat"><span>${se("茶费/小时","Tea cost/hour")}</span><strong${On(a.teaCostPerHour)}>${ia(a.teaCostPerHour)}</strong></div>
</div>
</section>
<section class="mwi-profit-card income">
<div class="mwi-profit-card-title"><span>${se("产出","Outputs")}</span><span class="mwi-profit-card-total"${On(a.revenuePerAction)}>${ia(a.revenuePerAction)} / ${se("动作","action")}</span></div>
${p||`<div class="mwi-profit-no-tea">${se("无可计价产出","No priced outputs")}</div>`}
</section>
</div>`),e.insertAdjacentHTML("beforeend",`<div class="mwi-profit-valuations">
${cr.map(k=>t_(k,a.valuations?.[k.mode])).join("")}
</div>`);let h=cr.filter(({mode:k})=>!a.valuations?.[k]?.complete),_=[];if(h.length){let k=h.map(C=>{let x=(a.valuations?.[C.mode]?.missingPrices??[]).map(va).join(u.config.isZH?"、":", ");return`${W0(C.title)}:${x||"—"}`}).join(u.config.isZH?";":"; ");_.push(`${se("以下口径缺少必需市场价格:","Required prices are missing for: ")}${k}`)}let y=[...new Set(cr.flatMap(({mode:k})=>a.valuations?.[k]?.unpricedByproducts??[]))];y.length&&_.push(`${se("以下副产物没有市场价,已从利润中排除:","These byproducts have no market price and were excluded: ")}${y.map(va).join(u.config.isZH?"、":", ")}`);let w=[...new Set(cr.flatMap(({mode:k})=>a.valuations?.[k]?.derivedMissingPrices??[]))];w.length&&_.push(`${se("派生期望值仍有内部产物缺价,当前利润只计入已知部分:","Some contents used by derived expected values are unpriced; profit includes only known contents: ")}${w.map(va).join(u.config.isZH?"、":", ")}`),_.length&&e.insertAdjacentHTML("beforeend",`<div class="mwi-profit-warning">${Qe(_.join(u.config.isZH?";":"; "))}</div>`)}s(n_,"renderPanel");function i_(e){let t=va(e.itemHrid),a=e.dropRate>=1?se("必得","100%"):`${Dt(e.dropRate*100,e.dropRate*100<1?2:0)}%`,n=e.minCount===e.maxCount?Dt(e.minCount,0):`${Dt(e.minCount,0)}–${Dt(e.maxCount,0)}`,i=e.redemptions??[],o=i.map(d=>{let m=va(d.tokenItemHrid);return`${se("最佳兑换","Best exchange")} · ${m}: ${Dt(d.tokenCount,0)} → ${Dt(d.rewardCount,0)} ${t} · ${ia(d.valuePerToken)} / ${se("代币","token")}`}),r=e.valueSource==="redemption"?se("最佳兑换折算","Best redemption"):e.valueSource==="derived"?se("派生期望值","Derived expected value"):e.valueSource==="zero"?se("封印计为 0","Seal valued at 0"):e.nested?se("开箱期望","Opening EV"):se("单价","Unit"),c=[`${t}
${se("概率","Chance")}: ${a} · ${se("数量","Count")}: ${n} · ${se("期望","Expected")}: ${Dt(e.expectedCount,2)}`,`${r}: ${e.priced?ia(e.unitValue):se("无价","No price")} · ${se("期望价值","Expected value")}: ${e.priced?ia(e.value):se("无价","No price")}`,...o].join(`
`),l=e.priced?`${e.nested?"≈":""}${ia(e.value)}`:se("无价","No price");return`
<div class="mwi-loot-cell${e.priced?"":" unpriced"}${i.length?" best-redemption":""}" data-item-hrid="${Qe(e.itemHrid)}" title="${Qe(c)}">
${i.length?`<span class="mwi-loot-best-badge">${se("最佳兑换","Best Exchange")}</span>`:""}
<div class="mwi-loot-cell-icon">
${ur(e.itemHrid,t)}
<span class="mwi-loot-cell-chance">${Qe(a)}</span>
</div>
<div class="mwi-loot-cell-main">
<div class="mwi-loot-cell-name">${Qe(t)}</div>
<div class="mwi-loot-cell-value">${Qe(l)}</div>
</div>
</div>`}s(i_,"renderLootChestDropCell");function V0(e,t,a,n){return`<div class="mwi-loot-control">
<span class="mwi-loot-control-label">${Qe(t)}</span>
<span class="mwi-loot-control-state">${Qe(a)}</span>
<label class="mwi-loot-switch">
<input type="checkbox" data-mwi-loot-setting="${e}" aria-label="${Qe(t)}"${n?" checked":""}>
<span aria-hidden="true"></span>
</label>
</div>`}s(V0,"renderLootSwitch");function r_(e,t){let a=[V0("lootSellAtAsk",se("产物卖出","Sell drops"),e.sellAtAsk?se("挂卖单","List at ask"):se("立即卖出","Sell now"),e.sellAtAsk)];return t&&a.push(V0("lootBuyAtAsk",se("钥匙或碎片","Key or fragments"),e.buyAtAsk?se("立即买入","Buy now"):se("挂买单","Place bid"),e.buyAtAsk),V0("lootKeyFromFragments",se("钥匙来源","Key source"),e.fromFragments?se("碎片自制","Craft fragments"):se("购买成品","Buy finished"),e.fromFragments)),`<div class="mwi-loot-controls${t?" has-key":""}">${a.join("")}</div>`}s(r_,"renderLootChestControls");function Km(e,t,a,n={}){let i=!!n.pinned,o=va(t),r=!!a.keyItemHrid,c=a.complete?"complete":"partial",l=a.complete?se("完整计价","Fully priced"):se("部分计价","Partial pricing");e.dataset.status=c,e.classList.toggle("mwi-profit-pinned",i),e.innerHTML=`
<header class="mwi-profit-header">
<div class="mwi-profit-header-icon">${ur(t,o)}</div>
<div class="mwi-profit-header-main">
<div class="mwi-profit-title">${Qe(o)}</div>
<div class="mwi-profit-subtitle">${Qe(r?se("开箱期望 · 已扣钥匙成本","Opening estimate · net of key cost"):se("开箱期望","Opening estimate"))}</div>
</div>
<div class="mwi-profit-status ${c}">${l}</div>
${i?`<button type="button" class="mwi-profit-close" aria-label="${se("关闭","Close")}" data-mwi-loot-close="1">×</button>`:""}
</header>`,i&&e.insertAdjacentHTML("beforeend",r_(a.config,r));let d=a.drops.map(i_).join("");e.insertAdjacentHTML("beforeend",`<section class="mwi-profit-card income" style="margin:12px;">
<div class="mwi-profit-card-title"><span>${se("可能产出","Possible drops")} (${a.drops.length})</span><span class="mwi-profit-card-total"${On(a.grossValue)}>${ia(a.grossValue)}</span></div>
${d?`<div class="mwi-loot-grid">${d}</div>`:`<div class="mwi-profit-no-tea">${se("无可计价产出","No priced drops")}</div>`}
</section>`);let m=a.config.sellAtAsk?se("挂卖单","List at ask"):se("立即卖出","Sell now"),p=r?a.config.fromFragments?se("碎片自制","Crafted from fragments"):se("购买成品","Buy finished"):se("无需钥匙","No key");e.insertAdjacentHTML("beforeend",`<div class="mwi-profit-valuations">
<section class="mwi-profit-valuation-row mwi-loot-valuation-row${a.complete?"":" incomplete"}" data-mode="fair">
<div class="mwi-profit-valuation-name">
<div class="mwi-profit-valuation-title">${se("期望价值","Expected value")}</div>
<div class="mwi-profit-valuation-state">${Qe(`${m} · ${p}`)}</div>
</div>
${Ra(se("毛期望价值","Gross value"),a.grossValue)}
${Ra(se("钥匙成本","Key cost"),r&&!a.keyComplete?null:a.keyCost)}
${Ra(se("净期望价值","Net value"),a.netValue,!0)}
</section>
</div>`),e.insertAdjacentHTML("beforeend",`<div class="mwi-profit-hint">${se(i?"开关会立即重算并保存;高亮卡片是每枚代币回报最高的兑换物品。":"双击固定面板后可调整买卖方向和钥匙来源;高亮卡片是每枚代币回报最高的兑换物品。",i?"Switches recalculate and save immediately; highlighted cards are the best return per token.":"Double-click to pin and adjust pricing; highlighted cards are the best return per token.")}</div>`),a.missing.length&&e.insertAdjacentHTML("beforeend",`<div class="mwi-profit-warning">${Qe(`${se("以下物品缺少所选口径的价格或配方,未计入期望:","These items lack prices or recipes for the selected mode and were excluded: ")}${a.missing.map(va).join(u.config.isZH?"、":", ")}`)}</div>`)}s(Km,"renderLootChestPanel");function Go(e,t,a){return Math.min(Math.max(e,t),Math.max(t,a))}s(Go,"clamp");function G0(){let e=Ht;if(!e?.anchor?.isConnected||!e.panel?.isConnected){ra();return}let t=e.anchor.getBoundingClientRect(),a=e.panel.getBoundingClientRect(),n=globalThis.innerWidth??document.documentElement.clientWidth,i=globalThis.innerHeight??document.documentElement.clientHeight,o=n-t.right-na,r=t.left-na,c="right",l,d;o>=a.width+$n?(l=t.right+$n,d=Go(t.top,na,i-a.height-na)):r>=a.width+$n?(c="left",l=t.left-a.width-$n,d=Go(t.top,na,i-a.height-na)):(c=i-t.bottom-na>=a.height+$n?"bottom":"top",l=Go(t.left,na,n-a.width-na),d=c==="bottom"?t.bottom+$n:t.top-a.height-$n,d=Go(d,na,i-a.height-na)),e.panel.dataset.placement=c,e.panel.style.left=`${Math.round(l)}px`,e.panel.style.top=`${Math.round(d)}px`}s(G0,"positionPanel");function ra(){let e=Ht;if(!e){document.getElementById(fi)?.remove();return}e.mutationObserver?.disconnect(),e.resizeObserver?.disconnect(),globalThis.removeEventListener?.("resize",e.position),globalThis.removeEventListener?.("scroll",e.position,!0),e.outsideHandler&&document.removeEventListener("mousedown",e.outsideHandler,!0);for(let t of e.settingStops??[])t?.();e.panel?.remove(),Ht=null}s(ra,"hideProductionProfitPanel");function Xm(){let e=document.createElement("aside");return e.id=fi,e.setAttribute("role","status"),e.setAttribute("aria-live","polite"),e}s(Xm,"createPanelElement");function Jm(e,t,a={}){let n=!!a.pinned;e.insertAdjacentElement("afterend",t);let i=s(()=>globalThis.requestAnimationFrame?.(G0)??G0(),"position"),o=null,r=null;return n||(o=new MutationObserver(()=>{e.isConnected||ra()}),o.observe(document.body,{childList:!0,subtree:!0}),r=globalThis.ResizeObserver?new globalThis.ResizeObserver(i):null,r?.observe(e),r?.observe(t),globalThis.addEventListener?.("resize",i),globalThis.addEventListener?.("scroll",i,!0)),Ht={anchor:e,panel:t,position:i,mutationObserver:o,resizeObserver:r,pinned:n,...a},i(),n&&document.body&&t.parentElement!==document.body&&document.body.appendChild(t),t}s(Jm,"mountPanel");function o_(e,t,a={}){if(Ht?.pinned)return null;let n=a.actionHrid??u.api.resolveProductionActionByItemHrid?.(t);if(!e?.isConnected||!n)return ra(),null;ra(),Zm();let i=u.api.projectAction(n,1),o=t??u.api.getExpectedOutputs?.(i.detail)?.[0]?.itemHrid;if(!o)return null;let r=Xm();return n_(r,o,i,{directAction:!!a.actionHrid}),Jm(e,r,{itemHrid:o,actionHrid:n})}s(o_,"showProductionProfitPanel");function Ym(e,t,a={}){let n=!!a.pinned;if(!n&&Ht?.pinned)return null;let i=u.api.projectLootChest?.(t);if(!e?.isConnected||!i)return ra(),null;ra(),Zm();let o=Xm();return Km(o,t,i,{pinned:n}),Jm(e,o,{itemHrid:t,pinned:n,kind:"loot"}),n&&s_(o,t),o}s(Ym,"showLootChestPanel");function s_(e,t){let a=s(()=>{let o=u.api.projectLootChest?.(t);Ht?.panel!==e||!o||Km(e,t,o,{pinned:!0})},"rerender");e.addEventListener("click",o=>{o.target.closest?.("[data-mwi-loot-close]")&&(o.stopPropagation(),ra())}),e.addEventListener("change",o=>{let r=o.target.closest?.("input[data-mwi-loot-setting]");r&&(o.stopPropagation(),u.settings.set?.(r.dataset.mwiLootSetting,r.checked))});let n=["lootSellAtAsk","lootBuyAtAsk","lootKeyFromFragments"].map(o=>u.settings.onChange?.(o,a));n.push(u.settings.onChange?.("lootChestEstimate",o=>{o||ra()})),Ht?.panel===e&&(Ht.settingStops=n);let i=s(o=>{!Ht?.pinned||Ht.panel!==e||e.contains(o.target)||ra()},"outsideHandler");globalThis.setTimeout?.(()=>{Ht?.panel===e&&(document.addEventListener("mousedown",i,!0),Ht.outsideHandler=i)},0)}s(s_,"attachLootChestControls");function u_(){let e=Ht;return!e||e.pinned||e.kind!=="loot"||!e.itemHrid||!e.anchor?.isConnected?!1:!!Ym(e.anchor,e.itemHrid,{pinned:!0})}s(u_,"pinActiveLootChestPanel");function c_(){Ht?.pinned||ra()}s(c_,"dismissHoverPanel"),Object.assign(u.api,{hideProductionProfitPanel:ra,dismissHoverPanel:c_,pinActiveLootChestPanel:u_,positionProductionProfitPanel:G0,showLootChestPanel:Ym,showProductionProfitPanel:o_});var Qm=s(()=>{let e=document.querySelector("div.Header_actionName__31-L2");e?(console.log(u.config.isZH?"[MWITools] 开始监听行动进度栏。":"[MWITools] Started observing the action progress bar."),Z0(e),new MutationObserver(t=>t.forEach(a=>{Z0()})).observe(e,{characterData:!0,subtree:!0,childList:!0})):setTimeout(Qm,200)},"showTotalActionTime");function Z0(){let e=document.querySelector("div.Header_actionName__31-L2 > div.Header_displayName__1hN09");if(e.textContent.includes("["))return;let t="Error",n=e.innerText.match(/\((\d+)\)/);if(n){let i=+n[1],o=+u.api.getOriTextFromElement(document.querySelector(".ProgressBar_text__102Yn")).match(/[\d\.]+/)[0],r=u.state.currentActionsHridList[0].actionHrid,c=1+u.api.getTotalEffiPercentage(r)/100;r.includes("enhanc")&&(c=1);let d=Math.round(i/c)*o;t=" ["+ef(d)+"]";let m=new Date;m.setSeconds(m.getSeconds()+d),t+=` ${String(m.getHours()).padStart(2,"0")}:${String(m.getMinutes()).padStart(2,"0")}:${String(m.getSeconds()).padStart(2,"0")}`}else t=" [∞]";e.textContent+=t}s(Z0,"calculateTotalTime");function ef(e){if(!Number.isFinite(e)||e<0)return"—";let t=Math.round(e);if(t>=86400){let o=Math.floor(t/86400),r=Math.floor(t%86400/3600),c=Math.floor(t%3600/60),l=[u.config.isZH?`${o}天`:`${o}d`];return r>0&&l.push(u.config.isZH?`${r}小时`:`${r}h`),c>0&&l.push(u.config.isZH?`${c}分`:`${c}m`),l.join(u.config.isZH?"":" ")}let a=new Date(t*1e3);function n(o){return("0"+o).slice(-2)}return s(n,"pad"),a.getUTCHours()+"h "+n(a.getUTCMinutes())+"m "+n(a.getUTCSeconds())+"s"}s(ef,"timeReadable");var U0=new MutationObserver(async function(e){for(let t of e)for(let a of t.addedNodes)if(a?.nodeType===1&&a.classList.contains("MuiTooltip-popper")){if(a.querySelector("div.ItemTooltipText_name__2JAHA"))await uf(a);else if(a.querySelector("div.QueuedActions_queuedActionsEditMenu__3OoQH"))u.api.handleActionQueueMenue(a.querySelector("div.QueuedActions_queuedActionsEditMenu__3OoQH"));else if(u.settings.settingsMap.itemTooltip_profit.isTrue){let n=nf(a);n&&u.api.showProductionProfitPanel?.(a,null,{actionHrid:n})}}}),tf=new Set(["/action_types/foraging","/action_types/milking","/action_types/woodcutting"]),l_=['[data-action-hrid^="/actions/"]','[class*="SkillAction_skillAction"]','[class*="GatheringProductionSkillPanel_action"]'].join(",");function d_(e){return Object.keys(e??{}).find(t=>t.startsWith("__reactFiber$")||t.startsWith("__reactInternalInstance$"))}s(d_,"reactFiberKey");function af(e){let t=String(e??""),a=u.state.initData_actionDetailMap?.[t];return tf.has(a?.type)?t:""}s(af,"gatheringActionHrid");function K0(e,t=0,a=new Set){if(!e||t>3||typeof e!="object"||a.has(e))return"";a.add(e);for(let n of["actionHrid","hrid"]){let i=af(e[n]);if(i)return i}for(let n of["actionDetail","action","detail","selectedAction","children","props"]){let i=e[n];if(Array.isArray(i)){for(let r of i){let c=K0(r,t+1,a);if(c)return c}continue}let o=K0(i,t+1,a);if(o)return o}return""}s(K0,"actionHridFromReactValue");function nf(e){for(let n=e;n;n=n.parentElement){let i=af(n.dataset?.actionHrid??n.getAttribute?.("data-action-hrid"));if(i)return i;let o=d_(n),r=o?n[o]:null;for(let c=0;r&&c<8;c+=1){for(let l of[r.memoizedProps,r.pendingProps,r.memoizedState,r.stateNode?.props,r.stateNode?.state]){let d=K0(l);if(d)return d}r=r.return}if(n.classList?.contains("MuiTooltip-popper"))break}let t=[u.api.getOriTextFromElement?.(e),e?.textContent,...[...e?.querySelectorAll?.("div,span")??[]].filter(n=>String(n.textContent??"").trim().length<=80).map(n=>u.api.getOriTextFromElement?.(n)??n.textContent)].map(n=>String(n??"").replaceAll(/\s+/g," ").trim()).filter(Boolean);return Object.values(u.state.initData_actionDetailMap??{}).filter(n=>tf.has(n?.type)).filter(n=>{let i=[n.name,u.data.ZHActionNames?.[n.hrid]].map(o=>String(o??"").trim()).filter(Boolean);return t.some(o=>i.includes(o))}).sort((n,i)=>Number(n.sortIndex??0)-Number(i.sortIndex??0)||String(n.hrid).localeCompare(String(i.hrid)))[0]?.hrid??""}s(nf,"resolveGatheringActionFromElement");function rf(e){return e?.closest?.(l_)??null}s(rf,"gatheringCardFromEventTarget");var of={"/action_types/brewing":"brewingSpeed","/action_types/cheesesmithing":"cheesesmithingSpeed","/action_types/cooking":"cookingSpeed","/action_types/crafting":"craftingSpeed","/action_types/foraging":"foragingSpeed","/action_types/milking":"milkingSpeed","/action_types/tailoring":"tailoringSpeed","/action_types/woodcutting":"woodcuttingSpeed","/action_types/alchemy":"alchemySpeed"},sf={"/action_types/brewing":"/house_rooms/brewery","/action_types/cheesesmithing":"/house_rooms/forge","/action_types/cooking":"/house_rooms/kitchen","/action_types/crafting":"/house_rooms/workshop","/action_types/foraging":"/house_rooms/garden","/action_types/milking":"/house_rooms/dairy_barn","/action_types/tailoring":"/house_rooms/sewing_parlor","/action_types/woodcutting":"/house_rooms/log_shed","/action_types/alchemy":"/house_rooms/laboratory"},bi={0:0,1:2,2:4.2,3:6.6,4:9.2,5:12,6:15,7:18.2,8:21.6,9:25.2,10:29,11:33.4,12:38.4,13:44,14:50.2,15:57,16:64.4,17:72.4,18:81,19:90.2,20:100};function m_(e){let t=0;for(let a of u.state.initData_characterItems)if(a.itemLocationHrid.includes("_tool")){let n=of[u.state.initData_actionDetailMap[e].type],i=1+bi[a.enhancementLevel]/100,o=u.state.initData_itemDetailMap[a.itemHrid].equipmentDetail.noncombatStats[n]||0;t+=o*i}return Number(t*100).toFixed(1)}s(m_,"getToolsSpeedBuffByActionHrid");function f_(e){let t=0,a=u.state.initData_actionDetailMap[e].type.replace("/action_types/","")+"Efficiency";for(let n of u.state.initData_characterItems){if(n.itemLocationHrid==="/item_locations/inventory")continue;let i=u.state.initData_itemDetailMap[n.itemHrid],o=i?.equipmentDetail?.noncombatStats[a];if(o&&o>0){let c=1;n.itemLocationHrid.includes("earrings")||n.itemLocationHrid.includes("ring")||n.itemLocationHrid.includes("neck")?c=1+bi[n.enhancementLevel]*5/100:c=1+bi[n.enhancementLevel]/100,t+=o*c}let r=i?.equipmentDetail?.noncombatStats.skillingEfficiency;if(r&&r>0){let c=1;n.itemLocationHrid.includes("earrings")||n.itemLocationHrid.includes("ring")||n.itemLocationHrid.includes("neck")?c=1+bi[n.enhancementLevel]*5/100:c=1+bi[n.enhancementLevel]/100,t+=r*c}}return Number(t*100).toFixed(1)}s(f_,"getItemEffiBuffByActionHrid");function b_(e){let t=sf[u.state.initData_actionDetailMap[e].type];if(!t)return 0;let a=u.state.initData_characterHouseRoomMap[t];return a?a.level*1.5:0}s(b_,"getHousesEffBuffByActionHrid");function p_(e){let t={efficiency:0,quantity:0,lessResource:0,extraExp:0,upgradedProduct:0},a=u.state.initData_actionDetailMap[e].type,n=u.state.initData_actionTypeDrinkSlotsMap[a];for(let i of n)if(!(!i||!i.itemHrid))for(let o of u.state.initData_itemDetailMap[i.itemHrid].consumableDetail.buffs)o.typeHrid==="/buff_types/artisan"?t.lessResource+=o.flatBoost*100:o.typeHrid==="/buff_types/action_level"?t.efficiency-=o.flatBoost:o.typeHrid==="/buff_types/gathering"||o.typeHrid==="/buff_types/gourmet"?t.quantity+=o.flatBoost*100:o.typeHrid==="/buff_types/wisdom"?t.extraExp+=o.flatBoost*100:o.typeHrid==="/buff_types/processing"?t.upgradedProduct+=o.flatBoost*100:o.typeHrid==="/buff_types/efficiency"?t.efficiency+=o.flatBoost*100:o.typeHrid===`/buff_types/${a.replace("/action_types/","")}_level`&&(t.efficiency+=o.flatBoost);return t}s(p_,"getTeaBuffsByActionHrid");async function uf(e){let t=e.querySelectorAll("div.ItemTooltipText_name__2JAHA span");if(t.length>1){u.api.dismissHoverPanel?.(),u.api.handleItemTooltipWithEnhancementLevel(e);return}u.api.hideEnhancementCostPanel?.();let a=t[0],n=u.api.getOriTextFromElement(a);u.config.isZHInGameSetting&&(n=u.api.getItemEnNameFromZhName(n));let i=u.state.itemEnNameToHridMap[n],o=0,r=null,c=e.querySelectorAll("span")[1];c?(o=u.api.parseCompactNumber(u.api.getOriTextFromElement(c).split(": ")[1]),r=c.parentNode.nextSibling):r=e.querySelectorAll("span")[0].parentNode.nextSibling;let l="",d=null,m=null,p=null,b=null;if(u.settings.settingsMap.itemTooltip_prices.isTrue&&(d=await g_(),(!d||!d.marketData)&&console.error(u.config.isZH?"[MWITools] 物品悬浮窗无法取得市场数据。":"[MWITools] Item tooltip market data is unavailable."),m=d?.marketData[i]?.[0]?.a??0,p=d?.marketData[i]?.[0]?.b??0,b=u.api.getFairValue(i,0),l+=`
<div style="color: ${u.config.SCRIPT_COLOR_TOOLTIP};">${u.config.isZH?"市场价值:":"Market value: "}${b>0?pi(b):"-"}${b>0&&o>0?` (${pi(b*o)})`:""}</div>
<div style="color: ${u.config.SCRIPT_COLOR_TOOLTIP};">${u.config.isZH?"价格: ":"Price: "}${pi(m)} / ${pi(p)} (${m&&m>0?pi(m*o):""} / ${p&&p>0?pi(p*o):""})</div>
`),u.settings.settingsMap.showConsumTips.isTrue){let y=u.state.initData_itemDetailMap[i],w=y?.consumableDetail?.hitpointRestore,k=y?.consumableDetail?.manapointRestore,C=y?.consumableDetail?.cooldownDuration;if(w&&C){let x=60/(C/1e9)*w,T=m?m/(w/100):null,A=1440*60/(C/1e9);l+=`<div style="color: ${u.config.SCRIPT_COLOR_TOOLTIP}; font-size: 0.625rem;">${T?T.toFixed(0)+(u.config.isZH?"金/100血, ":"coins/100hp, "):""}${x.toFixed(0)+(u.config.isZH?"血/分":"hp/min")}, ${A.toFixed(0)}${u.config.isZH?"个/天":"/day"}</div>`}else if(k&&C){let x=60/(C/1e9)*k,T=m?m/(k/100):null,A=1440*60/(C/1e9);l+=`<div style="color: ${u.config.SCRIPT_COLOR_TOOLTIP}; font-size: 0.625rem;">${T?T.toFixed(0)+(u.config.isZH?"金/100蓝, ":"coins/100mp, "):""}${x.toFixed(0)+(u.config.isZH?"蓝/分":"mp/min")}, ${A.toFixed(0)}${u.config.isZH?"个/天":"/day"}</div>`}else if(C){let x=86400/(C/1e9);l+=`<div style="color: ${u.config.SCRIPT_COLOR_TOOLTIP}">${x.toFixed(0)}${u.config.isZH?"个/天":"/day"}</div>`}}r.insertAdjacentHTML("afterend",l);let f=u.state.initData_openableLootDropMap,g=!!(f instanceof Map?f.get(i):f?.[i]);g&&u.settings.settingsMap.lootChestEstimate?.isTrue?u.api.showLootChestPanel?.(e,i):!g&&u.settings.settingsMap.itemTooltip_profit.isTrue?u.api.showProductionProfitPanel?.(e,i):u.api.dismissHoverPanel?.();let h=r.closest(".MuiTooltip-popper");setTimeout(s(y=>{if(!y.isConnected)return;let w=y.getBoundingClientRect();if(w.top<0||w.bottom>window.innerHeight){let C=y.style.transform.split(/\w+\(|\);?/)[1].split(/,\s?/g).map(x=>parseInt(x));y.style.transform=`translate3d(${C[0]}px, 0px, ${C[2]}px)`}},"fixOverflow"),100,h)}s(uf,"handleTooltipItem");async function g_(e=!1){return u.api.fetchMarketJSON(e)}s(g_,"fetchMarketJSON");function pi(e,t=1){return u.api.numberFormatter(e,t)}s(pi,"numberFormatter");function h_(e){let t=e.replace("Milk","Cow");if(t=t.replace("Log","Tree"),t=t.replace("Cowing","Milking"),t=t.replace("Rainbow Cow","Unicow"),t=t.replace("Collector's Boots","Collectors Boots"),t=t.replace("Knight's Aegis","Knights Aegis"),!u.state.initData_actionDetailMap)return console.error(u.config.isZH?`[MWITools] 无法按物品名称查找行动:行动数据尚未加载(${e})。`:`[MWITools] Cannot find an action by item name because action data is not loaded (${e}).`),null;for(let a of Object.values(u.state.initData_actionDetailMap))if(a.name===t)return a.hrid;return null}s(h_,"getActionHridFromItemName"),Object.assign(u.api,{showTotalActionTime:Qm,calculateTotalTime:Z0,timeReadable:ef,getToolsSpeedBuffByActionHrid:m_,getItemEffiBuffByActionHrid:f_,getHousesEffBuffByActionHrid:b_,getTeaBuffsByActionHrid:p_,handleTooltipItem:uf,getActionHridFromItemName:h_}),Object.defineProperties(u.state,{tooltipObserver:{enumerable:!0,get(){return U0}}}),Object.defineProperties(u.data,{actionHridToToolsSpeedBuffNamesMap:{enumerable:!0,get(){return of}},actionHridToHouseNamesMap:{enumerable:!0,get(){return sf}},itemEnhanceLevelToBuffBonusMap:{enumerable:!0,get(){return bi}}}),u.features.register({id:"itemTooltip_prices",setting:"itemTooltip_prices",initialize({scope:e}){let t=[GM_addStyle(`div.Header_actionName__31-L2 {
overflow: visible !important;
white-space: normal !important;
height: auto !important;
}`),GM_addStyle(`span.NavigationBar_label__1uH-y {
width: 10px !important;
}`)],a=!1,n=s(()=>{a||!document.body||(U0.observe(document.body,{attributes:!1,childList:!0,characterData:!1}),a=!0)},"attach");n(),e.interval(n,250),e.event(document,"dblclick",i=>{i.button&&i.button!==0||u.api.pinActiveLootChestPanel?.()&&(i.preventDefault(),i.stopPropagation())},!0),e.add(()=>{U0.disconnect();for(let i of t)i?.remove?.()})}});for(let e of["itemTooltip_profit","showConsumTips"])u.features.register({id:e,setting:e,dependsOn:["itemTooltip_prices"],initialize({scope:t}){e==="itemTooltip_profit"&&(t.event(document,"mouseover",a=>{let n=rf(a.target);if(!n||n.contains(a.relatedTarget))return;let i=nf(n);i&&u.api.showProductionProfitPanel?.(n,null,{actionHrid:i})}),t.event(document,"mouseout",a=>{let n=rf(a.target);!n||n.contains(a.relatedTarget)||u.api.dismissHoverPanel?.()}))}});var cf="mwitools-action-panel-style",__="/buff_types/efficiency",y_="/buff_types/action_level";function w_(){if(document.getElementById(cf))return;let e=document.createElement("style");e.id=cf,e.textContent=`
.mwi-level-progress { width:100%; max-width:100%; min-width:0; box-sizing:border-box; contain:inline-size; margin-top:6px; padding:6px 8px; border:1px solid rgba(255,255,255,.12); border-radius:5px; background:rgba(255,255,255,.025); color:var(--color-text-primary,#eee); font-size:.6875rem; line-height:1.35; }
.mwi-level-progress-row { display:flex; align-items:center; gap:6px; min-width:0; }
.mwi-level-progress-label { flex:0 0 auto; color:var(--color-text-secondary,#aaa); }
.mwi-target-level-input { width:48px!important; min-width:48px!important; height:23px!important; padding:1px 4px!important; border-radius:3px!important; font:inherit!important; text-align:center; }
.mwi-level-progress-result { min-width:0; margin-left:auto; text-align:right; font-weight:600; overflow-wrap:anywhere; }
.mwi-level-meta { margin-top:3px; color:var(--color-text-secondary,#aaa); font-size:.625rem; }
.mwi-native-level-stat { font:inherit; }
@media(max-width:520px){.mwi-level-progress-row{align-items:flex-start;flex-wrap:wrap}.mwi-level-progress-result{width:100%;text-align:left}}
`,(document.head??document.documentElement).appendChild(e)}s(w_,"addActionPanelStyles");var lf=s(()=>{let e=document.querySelector("div.GamePage_mainPanel__2njyb");e?(console.log(u.config.isZH?"[MWITools] 开始监听行动面板。":"[MWITools] Started observing the action panel."),new MutationObserver(async function(a){for(let n of a)for(let i of n.addedNodes)i?.classList?.contains("Modal_modalContainer__3B80m")&&i.querySelector("div.SkillActionDetail_regularComponent__3oCgr")&&Zo(i.querySelector("div.SkillActionDetail_regularComponent__3oCgr"))}).observe(e,{attributes:!1,childList:!0,subtree:!0})):setTimeout(lf,200)},"waitForActionPanelParent");async function Zo(e){if(!u.settings.settingsMap.actionPanel_totalTime.isTrue||e.dataset.mwitoolsActionPanel==="true"&&e.querySelector("#mwi-level-progress")&&e.querySelectorAll(".mwi-native-level-stat").length===4)return;e.querySelector("#mwi-level-progress")?.remove(),e.querySelectorAll(".mwi-native-level-stat").forEach(b=>b.remove()),e.dataset.mwitoolsActionPanel="true",w_();let t=e.querySelector('div[class*="SkillActionDetail_expGain"]'),a=e.querySelector('div[class*="SkillActionDetail_maxActionCountInput"] input');if(!t||!a)return;let n=u.api.resolveProductionAction?.(e),i=u.state.initData_actionDetailMap?.[n],o=u.api.getProductionPanelDuration?.(e);if(!i||!Number.isFinite(o)||o<=0)return;let r=Number(String(u.api.getOriTextFromElement(t)??"").replaceAll(u.config.THOUSAND_SEPERATOR,"").replaceAll(u.config.DECIMAL_SEPERATOR,"."));if(!Number.isFinite(r)||r<=0)return;let c=J0(n),l=1+c.total/100,d=i.experienceGain?.skillHrid,m=null,p=null;for(let b of u.state.initData_characterSkills)if(b.skillHrid===d){m=b.experience,p=b.level;break}if(m!==null&&p!==null){let b=s((q,B,j,V,O)=>{let M=0,L=0;for(let F=q;F<B;F++){let R=null;if(!Number.isFinite(u.state.initData_levelExperienceTable?.[F+1]))return null;F===q?R=u.state.initData_levelExperienceTable[F+1]-m:R=u.state.initData_levelExperienceTable[F+1]-u.state.initData_levelExperienceTable[F];let te=(F-q)*(1+Number(c.skillLevelRatio||0))*.01,X=Math.ceil(R/O);L+=X,M+=X/(j+te)*V}return{numOfActions:L,timeSec:M}},"calculateNeedToLevel"),f=Math.min(200,(u.state.initData_levelExperienceTable?.length??201)-1),g=document.createElement("section");g.id="mwi-level-progress",g.className="mwi-level-progress";let h=document.createElement("div");h.className="mwi-level-progress-row";let _=document.createElement("span");_.className="mwi-level-progress-label",_.textContent=u.config.isZH?"目标等级":"Target level";let y=document.createElement("input");y.id="tillLevelInput",y.type="number",y.value=String(p+1),y.min=String(p+1),y.max=String(f),y.className=`${a.className} mwi-target-level-input`;let w=document.createElement("span");w.id="tillLevelNumber",w.className="mwi-level-progress-result",h.append(_,y,w),g.append(h);let k=e.querySelector('div[class*="SkillActionDetail_info"]'),C=k?.querySelector('div[class*="SkillActionDetail_label"]'),x=k?.querySelector('div[class*="SkillActionDetail_value"]');if(k&&C&&x){let q=s((B,j,V)=>{let O=document.createElement("div");O.className=`${C.className} mwi-native-level-stat`,O.textContent=j;let M=document.createElement("div");M.id=B,M.className=`${x.className} mwi-native-level-stat`,M.textContent=V,k.append(O,M)},"addNativeStat");q("expPerHour",u.config.isZH?"经验/小时":"XP/hour",u.api.numberFormatter(Math.round(3600/o*r*l))),q("currentEfficiency",u.config.isZH?"当前效率":"Efficiency",`+${Number((l-1)*100).toFixed(1)}%`)}(e.querySelector("#mwi-production-summary")??e.querySelector('div[class*="SkillActionDetail_actionContainer"]')??a.parentElement).insertAdjacentElement("afterend",g);let A=!1,I=s(()=>{let q=Number(y.value);if(q>p&&q<=f){let B=b(p,q,l,o,r);B&&(w.textContent=u.config.isZH?`还需 ${u.api.numberFormatter(B.numOfActions)} 次 · 预计 ${u.api.timeReadable(B.timeSec)}`:`${u.api.numberFormatter(B.numOfActions)} actions · ${u.api.timeReadable(B.timeSec)}`,A&&mf(a,String(B.numOfActions)))}else w.textContent=u.config.isZH?`请输入 ${p+1}–${f}`:`Enter ${p+1}–${f}`},"updateTargetLevel");y.addEventListener("input",()=>{A=!0,I()}),I()}if((e.querySelector('div[class*="SkillActionDetail_dropTable"]')?.children.length??0)>1&&u.settings.settingsMap.actionPanel_foragingTotal.isTrue){let b=await u.api.fetchMarketJSON(),f=u.api.getTeaBuffsByActionHrid(n),g=0,h=0,_=u.state.initData_actionTypeDrinkSlotsMap[u.state.initData_actionDetailMap[n].type];for(let L of _)!L||!L.itemHrid||(g+=(b?.marketData[L.itemHrid]?.[0]?.a??0)*12,h+=(b?.marketData[L.itemHrid]?.[0]?.b??0)*12);let y=u.state.initData_actionDetailMap[n].baseTimeCost/1e9,w=u.api.getToolsSpeedBuffByActionHrid(n),C=3600/(y/(1+w/100)),x=u.state.initData_actionDetailMap[n].dropTable,T=0;for(let L of x){let F=b?.marketData[L.itemHrid]?.[0]?.b??0,R=L.dropRate*((L.minCount+L.maxCount)/2);T+=F*R*(1-u.api.getMarketTaxRate(L.itemHrid))}let I=C*1,q=df(n);C*=1+q/100,I*=1+q/100;let B=I*f.quantity/100,j=T,V=I*j+B*j-g,O=24*V,M=`<div id="totalProfit" class="mwi-level-meta">${u.config.isZH?"综合利润: ":"Overall profit: "}<span class="mwi-number" title="${u.api.formatExactNumber(V)}">${u.api.numberFormatter(V)}</span>${u.config.isZH?"/小时":"/hour"}, <span class="mwi-number" title="${u.api.formatExactNumber(O)}">${u.api.numberFormatter(O)}</span>${u.config.isZH?"/天":"/day"}</div>`;e.querySelector("#mwi-level-progress")?.insertAdjacentHTML("beforeend",M)}}s(Zo,"handleActionPanel");function X0(e,t){return(e??[]).reduce((a,n)=>(n?.typeHrid!==t||(a.ratioBoost+=Number(n.ratioBoost)||0,a.flatBoost+=Number(n.flatBoost)||0),a),{ratioBoost:0,flatBoost:0})}s(X0,"sumBuffValue");function v_(e){return(u.state.characterQuests??[]).some(t=>{if(t?.actionHrid!==e)return!1;let a=String(t.status??"").toLowerCase();return!(t.isClaimed||t.claimed||a.includes("claimed")||a.includes("completed"))})}s(v_,"isTaskAction");function x_(e){let t=u.state.initData_actionDetailMap?.[e],a=u.state.actionTypeBuffSources;if(!t||!a)return null;let n=[];for(let i of Object.values(a)){let o=i?.[t.type];Array.isArray(o)&&n.push(...o)}return v_(e)&&n.push(...u.state.equipmentTaskActionBuffs??[]),n}s(x_,"getAuthoritativeActionBuffs");function k_(e){let t=String(e?.function??"").toLowerCase();return t?t.includes("gathering")||t.includes("production"):!!(e?.levelRequirement&&(e?.dropTable||e?.outputItems))}s(k_,"supportsLevelEfficiency");function S_(e,t){let a=u.state.initData_actionDetailMap?.[e],n=X0(t,__).flatBoost*100,i=0,o=null,r=null,c=0;if(k_(a)&&a?.levelRequirement){let l=a.levelRequirement.skillHrid,d=(u.state.initData_characterSkills??[]).find(p=>p.skillHrid===l),m=Number(d?.level);if(Number.isFinite(m)){let p=String(l).split("/").pop(),b=X0(t,`/buff_types/${p}_level`);c=b.ratioBoost,o=(1+b.ratioBoost)*m+b.flatBoost,r=Number(a.levelRequirement.level||0)+X0(t,y_).flatBoost,i=Math.max(0,o-r)}}return{source:"game",total:n+i,directEfficiency:n,levelEfficiency:i,boostedSkillLevel:o,requiredLevel:r,skillLevelRatio:c}}s(S_,"getAuthoritativeEfficiency");function C_(e){let t=u.state.initData_actionDetailMap?.[e];if(!t?.levelRequirement)return{source:"legacy",total:0,levelEfficiency:0};let a=Number(t.levelRequirement.level)||0,n=Number((u.state.initData_characterSkills??[]).find(l=>l.skillHrid===t.levelRequirement.skillHrid)?.level??a),i=Math.max(0,n-a),o=Number(u.api.getHousesEffBuffByActionHrid?.(e))||0,r=Number(u.api.getTeaBuffsByActionHrid?.(e)?.efficiency)||0,c=Number(u.api.getItemEffiBuffByActionHrid?.(e))||0;return{source:"legacy",total:i+o+r+c,levelEfficiency:i,houseEfficiency:o,teaEfficiency:r,equipmentEfficiency:c}}s(C_,"getLegacyEfficiency");function J0(e){let t=x_(e);return t?S_(e,t):C_(e)}s(J0,"getActionEfficiencyDetails");function df(e,t=!1){let a=J0(e);return t&&console.log(u.config.isZH?"[MWITools] 行动总效率明细":"[MWITools] Total action efficiency details",e,a),Number.isFinite(a.total)?a.total:0}s(df,"getTotalEffiPercentage");function A_(e,t,a){return e==="∞"?"[∞]":isNaN(e)?"Error":"["+u.api.timeReadable(Math.round(e/a)*t)+"]"}s(A_,"getTotalTimeStr");function mf(e,t){let a=e.value;e.value=t;let n=e.ownerDocument?.defaultView?.Event??Event,i=new n("input",{bubbles:!0});i.simulated=!0;let o=e._valueTracker;o&&o.setValue(a),e.dispatchEvent(i)}s(mf,"reactInputTriggerHack");var Y0=s(()=>{let e=document.querySelectorAll(".NavigationBar_currentExperience__3GDeX");e.length&&(Uo(),e.forEach(t=>{let a=t.style.width;a=Number(a.replace("%","")).toFixed(2)+"%";let n=document.createElement("span");n.textContent=a,n.classList.add("insertedSpan"),n.style.fontSize="0.875rem",n.style.color=u.config.SCRIPT_COLOR_MAIN,t.parentNode.parentNode.querySelector("span.NavigationBar_level__3C7eR").style.width="auto";let i=t.parentNode.parentNode.children[0];i.insertBefore(n,i.children[1])}))},"waitForProgressBar"),Uo=s(()=>document.querySelectorAll("span.insertedSpan").forEach(e=>e.parentNode.removeChild(e)),"removeInsertedDivs");Object.assign(u.api,{waitForActionPanelParent:lf,handleActionPanel:Zo,getTotalEffiPercentage:df,getActionEfficiencyDetails:J0,getTotalTimeStr:A_,reactInputTriggerHack:mf,waitForProgressBar:Y0,removeInsertedDivs:Uo}),u.features.register({id:"expPercentage",setting:"expPercentage",initialize({scope:e}){Y0(),e.interval(()=>{Uo(),Y0()},1e3),e.add(Uo)}}),u.features.register({id:"actionPanel_totalTime",setting:"actionPanel_totalTime",scope:"character",initialize({scope:e}){let t=null,a=s(()=>{let n=document.querySelector("div.GamePage_mainPanel__2njyb");if(!n||t===n)return;t=n;let i=new MutationObserver(r=>{for(let c of r)for(let l of c.addedNodes){let d=l?.querySelector?.("div.SkillActionDetail_regularComponent__3oCgr");d&&(!d.querySelector("#mwi-level-progress")||d.querySelectorAll(".mwi-native-level-stat").length!==4)&&Zo(d)}});e.observer(i,n,{childList:!0,subtree:!0});let o=n.querySelector("div.SkillActionDetail_regularComponent__3oCgr");o&&(!o.querySelector("#mwi-level-progress")||o.querySelectorAll(".mwi-native-level-stat").length!==4)&&Zo(o)},"attach");a(),e.interval(a,500),e.add(()=>{document.querySelectorAll("#showTotalTime,#quickInputHourButtons,#quickInputCountButtons,#mwi-level-progress,#tillLevel,#expPerHour,#currentEfficiency,#totalProfit,.mwi-native-level-stat").forEach(n=>n.remove()),document.querySelectorAll('[data-mwitools-action-panel="true"]').forEach(n=>delete n.dataset.mwitoolsActionPanel)})}});var ff="mwitools-action-dashboard-style",M_=[.5,1,2,3,4,5,6,10,12,24],T_=[10,100,300,500,1e3,2e3];function et(e,t){return u.config.isZH?e:t}s(et,"t");function bf(e){if(e===1/0)return"∞";if(!Number.isFinite(e))return"—";let t=Math.max(0,Math.round(e));if(t<86400)return u.api.timeReadable?.(t)??`${t}s`;let a=Math.floor(t/86400),n=Math.floor(t%86400/3600),i=Math.floor(t%3600/60),o=[et(`${a}天`,`${a}d`)];return n>0&&o.push(et(`${n}小时`,`${n}h`)),i>0&&o.push(et(`${i}分`,`${i}m`)),o.join(u.config.isZH?"":" ")}s(bf,"formatDuration");function E_(e){return Number.isFinite(e)?new Intl.DateTimeFormat(u.config.isZH?"zh-CN":"en-US",{hour:"2-digit",minute:"2-digit",second:"2-digit"}).format(new Date(e)):"—"}s(E_,"formatClock");function un(e){return u.api.createFormattedNumber(e)}s(un,"number");function pf(){for(let a of globalThis.performance?.getEntriesByType?.("resource")??[])if(a.name?.includes("items_sprite")&&a.name.endsWith(".svg"))try{return new URL(a.name).pathname}catch{return a.name}let e=document.querySelector('svg use[href*="items_sprite"],svg use[xlink\\:href*="items_sprite"]'),t=e?.getAttribute("href")??e?.getAttribute("xlink:href")??"";return t.includes("#")?t.split("#")[0]:""}s(pf,"findItemsSpriteBase");function I_(e){return en(e,{fallback:"?"})}s(I_,"outputItemName");function N_(e,t,a){let n=String(t??"").split("/").at(-1),i=[...e?.querySelectorAll(':scope div[class*="SkillActionDetail_dropTable"] div[class*="Item_item"]')??[]].filter(p=>[...p.classList].some(b=>b.startsWith("Item_item__"))),o=i.find(p=>{let b=p.querySelector("use")?.getAttribute("href")??p.querySelector("use")?.getAttribute("xlink:href")??"";return n&&b.endsWith(`#${n}`)})??i[0];if(!o)return null;let r=o.cloneNode(!0);r.classList.add("mwi-production-native-item");for(let p of[...r.classList])p.includes("Item_clickable")&&r.classList.remove(p);let c=pf(),l=r.querySelector("use");if(l&&c&&n){let p=`${c}#${n}`;l.setAttribute("href",p),l.setAttribute("xlink:href",p)}r.querySelector("svg")?.setAttribute("aria-label",a);let m=r.querySelector('[class*="Item_name"]');return m&&(m.textContent=a),r}s(N_,"nativeProductionItem");function H_(e,t){let a=document.createElement("span");a.className="mwi-production-native-fallback";let n=String(e??"").split("/").at(-1),i=pf();if(n&&i){let r=document.createElementNS("http://www.w3.org/2000/svg","svg");r.classList.add("mwi-production-output-icon"),r.setAttribute("viewBox","0 0 32 32"),r.setAttribute("aria-label",t);let c=document.createElementNS("http://www.w3.org/2000/svg","use"),l=`${i}#${n}`;c.setAttribute("href",l),c.setAttribute("xlink:href",l),r.append(c),a.append(r)}else{let r=document.createElement("span");r.className="mwi-production-output-fallback",r.setAttribute("aria-hidden","true"),r.textContent="?",a.append(r)}let o=document.createElement("span");return o.className="mwi-production-output-name",o.textContent=t,a.append(o),a}s(H_,"fallbackProductionItem");function D_(e,t){let a=document.createElement("span");a.className="mwi-production-output-item";let n=I_(e.itemHrid),i=Number.isFinite(Number(e.expectedCount))?Math.round(Number(e.expectedCount)*1e9)/1e9:e.expectedCount,o=u.api.formatExactNumber?.(i)??String(i);a.title=`${n} ×${o}`,a.setAttribute("aria-label",a.title),a.append(N_(t,e.itemHrid,n)??H_(e.itemHrid,n));let r=document.createElement("span");return r.className="mwi-production-output-count",r.append("×",un(e.expectedCount)),a.append(r),a}s(D_,"createProductionOutput");function Ko(){if(document.getElementById(ff))return;let e=document.createElement("style");e.id=ff,e.textContent=`
.mwi-action-dashboard-host { position:relative!important; }
.mwi-action-dashboard { position:absolute; top:50%; right:0; z-index:5; box-sizing:border-box; max-width:calc(100% - var(--mwi-action-dashboard-left,0px)); margin:0; padding:2px 6px; transform:translateY(-50%); border:1px solid rgba(255,255,255,.1); border-radius:4px; background:rgba(0,0,0,.18); font:inherit; font-size:.6875rem; line-height:1.25; white-space:normal; overflow:visible; pointer-events:none; }
.mwi-action-line { display:flex; align-items:center; flex-wrap:wrap; gap:3px 10px; max-width:100%; color:#ffa500; }
.mwi-action-line > * { min-width:0; white-space:nowrap; }
.mwi-action-line strong { color:inherit; font-weight:650; }
.mwi-production-card { width:100%; max-width:100%; min-width:0; box-sizing:border-box; contain:inline-size; margin-top:6px; padding:6px; border:1px solid rgba(255,255,255,.12); border-radius:5px; background:rgba(255,255,255,.025); color:var(--color-text-primary,#eee); font-size:.6875rem; }
.mwi-production-card-title { padding:0 2px 4px; font-size:.72rem; font-weight:600; }
.mwi-production-metrics { display:grid; grid-template-columns:repeat(auto-fit,minmax(min(100%,110px),1fr)); gap:4px; }
.mwi-production-metric { min-width:0; overflow:hidden; padding:4px 3px; border-radius:3px; background:rgba(0,0,0,.14); text-align:center; }
.mwi-production-label { min-height:1.45em; color:var(--color-text-secondary,#aaa); font-size:.6rem; line-height:1.2; }
.mwi-production-value { margin-top:1px; font-size:.7rem; line-height:1.25; font-weight:600; overflow-wrap:anywhere; }
.mwi-production-output-metric { grid-column:1/-1; }
.mwi-production-output-grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(min(100%,120px),1fr)); gap:4px 8px; width:100%; }
.mwi-production-output-grid[data-count="1"] .mwi-production-output-item { grid-column:1/-1; }
.mwi-production-output-item { display:flex; min-width:0; align-items:center; justify-content:center; gap:4px; overflow:hidden; }
.mwi-production-native-item,.mwi-production-native-fallback { display:inline-flex!important; min-width:0; align-items:center; gap:4px; overflow:hidden; pointer-events:none; }
.mwi-production-native-fallback { padding:1px 6px; border:1px solid rgb(152,167,233); border-radius:4px; background:rgb(44,46,69); color:rgb(231,231,231); }
.mwi-production-native-item [class*="Item_iconContainer"] { width:14px!important; height:14px!important; flex:0 0 14px!important; }
.mwi-production-native-item [class*="Item_name"],.mwi-production-output-name { min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.mwi-production-output-icon,.mwi-production-output-fallback { display:grid; width:14px; height:14px; flex:0 0 14px; place-items:center; }
.mwi-production-output-fallback { border-radius:4px; background:rgba(255,255,255,.08); color:var(--color-text-secondary,#aaa); font-size:.72rem; }
.mwi-production-output-count { flex:0 0 auto; min-width:0; font-size:.72rem; font-weight:700; line-height:1; white-space:nowrap; }
.mwi-production-warning { margin:4px 2px 0; color:#d7bb67; font-size:.6rem; line-height:1.25; }
.mwi-max-action-button { margin-inline-start:4px; }
.mwi-production-quick-inputs { position:relative; display:grid; z-index:0; box-sizing:border-box; gap:3px; width:100%; min-width:0; margin:4px 0 1px; color:var(--color-text-secondary,#aaa); font-size:.625rem; }
.mwi-production-quick-row { display:flex; min-width:0; align-items:flex-start; gap:3px; }
.mwi-production-quick-label { flex:0 0 3.25em; color:${u.config.SCRIPT_COLOR_MAIN}; white-space:nowrap; }
.mwi-production-quick-buttons { display:flex; min-width:0; flex:1; flex-wrap:wrap; gap:2px; }
.mwi-production-quick-button { min-width:0!important; height:21px!important; padding:1px 5px!important; font-size:.625rem!important; line-height:1!important; }
@media(max-width:520px){.mwi-action-line{gap:2px 8px}}
`,(document.head??document.documentElement).appendChild(e)}s(Ko,"addStyles");function gf(e){let a=(e?.closest?.('[class*="Header_currentAction"]')??e?.parentElement)?.querySelector?.('[class*="ProgressBar_progressBar"]');if(!a)return{durationPerAction:null,currentCycleRemaining:null};let n=Number(a.style?.getPropertyValue?.("--duration"));if(!Number.isFinite(n)||n<=0){let d=u.api.getOriTextFromElement?.(a.querySelector('[class*="ProgressBar_text"]')),m=String(d??"").replace(",",".").match(/[\d.]+/);n=m?Number(m[0]):null}if(!Number.isFinite(n)||n<=0)return{durationPerAction:null,currentCycleRemaining:null};let i=a.querySelector('[class*="ProgressBar_active"]'),o=i?i.ownerDocument?.defaultView?.getComputedStyle(i).transform??i.style?.transform:null,r=String(o??"").match(/^matrix(?:3d)?\(\s*(-?[\d.]+)/),c=r?Number(r[1]):null,l=Number.isFinite(c)?n*(1-Math.min(1,Math.max(0,c))):n;return{durationPerAction:n,currentCycleRemaining:l}}s(gf,"getLiveActionTiming");function P_(e,t){if(!String(t?.actionHrid??"").includes("/enhancing"))return null;let n=[...e?.childNodes??[]].filter(o=>o.nodeType!==1||o.id!=="mwi-action-dashboard").map(o=>o.textContent??"").join(" ").trim().match(/\(([\d\s.,]+)\)\s*$/);if(!n)return null;let i=Number(n[1].replace(/\D/g,""));return Number.isSafeInteger(i)&&i>=0?i:null}s(P_,"getNativeEnhancementCount");function Xo(e){for(let t of e?.querySelectorAll('div[class*="SkillActionDetail_value"]')??[]){let n=String(u.api.getOriTextFromElement?.(t)??"").trim().replaceAll(u.config.THOUSAND_SEPERATOR,"").replace(u.config.DECIMAL_SEPERATOR,".").match(/^([\d.]+)\s*s$/i);if(n&&Number(n[1])>0)return Number(n[1])}return null}s(Xo,"getProductionPanelDuration");function L_(){document.querySelector("#mwi-action-dashboard")?.remove(),document.querySelectorAll(".mwi-action-dashboard-host").forEach(e=>e.classList.remove("mwi-action-dashboard-host"))}s(L_,"clearActionDashboard");function $_(e){return[...e?.childNodes??[]].filter(t=>t.nodeType!==1||t.id!=="mwi-action-dashboard"&&t.id!=="script_item_warning").map(t=>t.textContent??"").join(" ").replaceAll(/\s+/g," ").trim()}s($_,"nativeActionText");function hf(e){return String(e??"").replaceAll(/\([^)]*\)\s*$/g,"").replaceAll(/\s+/g," ").trim().toLocaleLowerCase()}s(hf,"normalizedActionText");function _f(e,t){let a=new Set([t?.name,u.data.ZHActionNames?.[e]]);for(let n of u.api.getExpectedOutputs?.(t)??[])a.add(u.state.initData_itemDetailMap?.[n.itemHrid]?.name),a.add(u.data.ZHItemNames?.[n.itemHrid]);return[...a].map(hf).filter(Boolean)}s(_f,"actionHeaderNames");function O_(e,t){let a=e?.actionHrid,n=u.state.initData_actionDetailMap?.[a];if(!a||!n||n.type==="/action_types/combat")return!1;let i=hf($_(t));return!i||/^(doing nothing|无事可做|没有行动)$/.test(i)?!1:String(a).includes("/enhancing")?/\+\s*\d+/.test(i)||_f(a,n).some(o=>i.includes(o)):_f(a,n).some(o=>i===o||i.includes(o))}s(O_,"actionMatchesHeader");function lr(){Ko();let e=document.querySelector('div[class*="Header_actionName"]'),a=[...u.state.currentActionsHridList??[]].sort((y,w)=>Number(y?.ordinal??0)-Number(w?.ordinal??0))[0];if(!e||!a||!O_(a,e)){L_();return}let n=gf(e),i=P_(e,a),o=u.api.projectAction(a,i??void 0,{durationPerAction:n.durationPerAction,currentCycleRemainingSeconds:n.currentCycleRemaining}),r=e.querySelector("#mwi-action-dashboard");r||(r=document.createElement("div"),r.id="mwi-action-dashboard",r.className="mwi-action-dashboard",e.appendChild(r)),e.classList.add("mwi-action-dashboard-host"),r.style.position="absolute";let c=[...e.children].filter(y=>y!==r&&y.id!=="script_item_warning").at(-1),l=e.getBoundingClientRect(),d=c?.getBoundingClientRect(),m=Math.max(0,(d?.right??l.left)-l.left+7);r.style.left=`${m}px`,r.style.setProperty("--mwi-action-dashboard-left",`${m}px`),r.replaceChildren(),r.removeAttribute("title");let p=document.createElement("div");p.className="mwi-action-line";let b=document.createElement("span"),f=o.effectivelyInfinite??o.infinite,g=o.effectiveCount??o.count;b.append(`${et("剩余","Remaining")} `,f?"∞":un(g)),o.materialLimited?b.title=et("已按当前库存中的可用原料计算","Limited by materials currently in inventory"):i!==null&&(b.title=et("已按强化栏当前可处理数量计算","Based on the amount currently available for enhancement"));let h=document.createElement("span");h.textContent=`${et("还需","Time left")} ${bf(o.totalSeconds)}`;let _=document.createElement("strong");_.textContent=o.finishAt?`${et("预计完成","Finishes at")} ${E_(o.finishAt)}`:`${et("预计完成","Finishes at")} —`,p.append(b,h,_),r.append(p)}s(lr,"renderActionDashboard");function yf(){let t=[...document.querySelectorAll('div[class*="SkillActionDetail_regularComponent"],div[class*="SkillActionDetail_skillActionDetail"]')].filter(a=>{for(let n=a;n;n=n.parentElement){if(n.hidden||n.getAttribute("aria-hidden")==="true")return!1;let i=n.ownerDocument?.defaultView?.getComputedStyle(n);if(i?.display==="none"||i?.visibility==="hidden")return!1}return!0});return t.find(a=>String(a.className).includes("regularComponent"))??t.at(-1)??null}s(yf,"findActionPanel");function Q0(e){return e?.querySelector('div[class*="SkillActionDetail_maxActionCountInput"] input')}s(Q0,"getCountInput");function q_(e,t){return[...(t?.closest('div[class*="SkillActionDetail_actionContainer"]')??e)?.querySelectorAll("button")??[]].find(n=>n.classList.contains("mwi-max-action-button")?!1:String(u.api.getOriTextFromElement?.(n)??n.textContent??"").trim()==="∞"||/infinite|unlimited/i.test(n.title??""))}s(q_,"findInfinityButton");function wf(e,t){if(typeof u.api.reactInputTriggerHack=="function"){u.api.reactInputTriggerHack(e,t);return}let a=e.ownerDocument?.defaultView??window,n=e.value,i=Object.getOwnPropertyDescriptor(a.HTMLInputElement.prototype,"value")?.set;i?i.call(e,t):e.value=t,e._valueTracker?.setValue(n),e.dispatchEvent(new a.Event("input",{bubbles:!0}))}s(wf,"setReactInputValue");function eu(){document.querySelectorAll(".mwi-production-quick-inputs").forEach(e=>e.remove())}s(eu,"removeProductionQuickInputs");function R_(e,t){return[...(t?.closest('div[class*="SkillActionDetail_maxActionCountInput"]')??e)?.querySelectorAll("button")??[]].find(n=>!n.classList.contains("mwi-production-quick-button"))}s(R_,"quickButtonPrototype");function B_(e,t){!e?.isConnected||!Number.isSafeInteger(t)||t<=0||(wf(e,String(t)),e.dispatchEvent(new(e.ownerDocument?.defaultView?.Event??Event)("change",{bubbles:!0})),qn())}s(B_,"applyProductionQuickCount");function vf({panel:e,input:t,id:a,label:n,values:i,resolveCount:o}){let r=document.createElement("div");r.id=a,r.className="mwi-production-quick-row";let c=document.createElement("span");c.className="mwi-production-quick-label",c.textContent=n;let l=document.createElement("div");l.className="mwi-production-quick-buttons";let d=R_(e,t);for(let m of i){let p=d?.cloneNode(!1)??document.createElement("button");p.type="button",p.classList.add("mwi-production-quick-button"),p.textContent=u.api.numberFormatter(m),p.dataset.quickValue=String(m),p.addEventListener("click",()=>{let b=o(m);B_(t,b)}),l.append(p)}return r.append(c,l),r}s(vf,"createProductionQuickRow");function tu(){Ko();let e=yf(),t=Q0(e),a=au(e);if(document.querySelectorAll(".mwi-production-quick-inputs").forEach(r=>{e?.contains(r)||r.remove()}),!e||!t||!a||!xf(a))return e?.querySelector(".mwi-production-quick-inputs")?.remove(),null;let n=t.closest('div[class*="SkillActionDetail_maxActionCountInput"]');if(!n)return null;let i=e.querySelector(".mwi-production-quick-inputs"),o=Xo(e);if(!i){i=document.createElement("div"),i.className="mwi-production-quick-inputs";let r=vf({panel:e,input:t,id:"quickInputHourButtons",label:et("时长","Hours"),values:M_,resolveCount:s(d=>{let m=Xo(e);return Number.isFinite(m)&&m>0?Math.max(1,Math.round(d*3600/m)):0},"resolveCount")}),c=vf({panel:e,input:t,id:"quickInputCountButtons",label:et("次数","Count"),values:T_,resolveCount:s(d=>d,"resolveCount")});i.append(r,c),(n.closest('div[class*="SkillActionDetail_actionContainer"]')??n).insertAdjacentElement("afterend",i)}return i.querySelectorAll("#quickInputHourButtons button").forEach(r=>{r.disabled=!Number.isFinite(o)||o<=0,r.title=r.disabled?et("无法读取当前单次耗时","Current action duration unavailable"):et(`按当前 ${o}s/次换算`,`Based on the current ${o}s per action`)}),i}s(tu,"renderProductionQuickInputs");function z_(e,t,a){let n=e?.querySelector(".mwi-max-action-button"),i=q_(e,t);if(!t||!i){n?.remove();return}n||(n=i.cloneNode(!1),n.type="button",n.classList.add("mwi-max-action-button"),n.textContent=et("最大","Max"),n.addEventListener("click",()=>{let r=Number(n.dataset.maxCraftable);if(!Number.isSafeInteger(r)||r<=0)return;let c=n.closest('div[class*="SkillActionDetail_regularComponent"],div[class*="SkillActionDetail_skillActionDetail"]'),l=Q0(c)??t;wf(l,String(r)),l.dispatchEvent(new(l.ownerDocument?.defaultView?.Event??Event)("change",{bubbles:!0})),qn()}),i.insertAdjacentElement("afterend",n));let o=Number.isSafeInteger(a)&&a>0;n.disabled=!o,n.dataset.maxCraftable=o?String(a):"",n.title=o?et(`填入库存最多可做 ${a} 次`,`Use inventory maximum: ${a}`):et("当前没有有限的可生产次数","No finite production maximum")}s(z_,"syncMaxButton");function au(e){let t=u.api.getOriTextFromElement?.(e?.querySelector('div[class*="SkillActionDetail_name"]'))?.trim();if(!t)return null;let a=u.config.isZHInGameSetting;if(a){let r=Object.entries(u.data.ZHActionNames??{}).find(([,c])=>c===t);if(r)return r[0]}let n=u.state.initData_actionDetailMap;if(!n)return null;let i=new Set([t]);if(a){let r=u.api.getActionEnNameFromZhName?.(t);r&&i.add(r)}for(let[r,c]of Object.entries(n))if(i.has(c?.name))return r;let o=a?Object.entries(u.data.ZHItemNames??{}).find(([,r])=>r===t):null;if(o){let[r]=o,c=Object.entries(n).find(([,l])=>u.api.getExpectedOutputs?.(l).some(d=>d.itemHrid===r));if(c)return c[0]}return u.api.getActionHridFromItemName?.(t)??null}s(au,"resolvePanelAction");function xf(e){let t=u.state.initData_actionDetailMap?.[e];return!t||String(t.type??"").includes("combat")?!1:!!u.api.getExpectedOutputs?.(t)?.length}s(xf,"isProductionAction");function cn(e,t){let a=document.createElement("div");a.className="mwi-production-metric";let n=document.createElement("div");n.className="mwi-production-label",n.textContent=e;let i=document.createElement("div");return i.className="mwi-production-value",t?.nodeType?i.append(t):i.textContent=t,a.append(n,i),a}s(cn,"metric");function qn(){Ko();let e=yf(),t=Q0(e),a=[...document.querySelectorAll("#mwi-production-summary")];if(!e){a.forEach(f=>f.remove()),document.querySelectorAll(".mwi-max-action-button").forEach(f=>f.remove());return}a.filter(f=>!e.contains(f)).forEach(f=>f.remove()),document.querySelectorAll(".mwi-max-action-button").forEach(f=>{e.contains(f)||f.remove()});let n=e.querySelector("#mwi-production-summary"),i=au(e);if(!i||!xf(i)){n?.remove(),e.querySelector(".mwi-max-action-button")?.remove();return}let o=t?u.api.parseCompactNumber(t.value):Number.POSITIVE_INFINITY,r=u.api.projectAction(i,o,{durationPerAction:Xo(e),respectInventoryLimit:!0});z_(e,t,r.maxCraftable);let c=e.querySelector("#mwi-production-summary");if(!c){c=document.createElement("section"),c.id="mwi-production-summary",c.className="mwi-production-card";let f=e.querySelector('div[class*="SkillActionDetail_actionContainer"]')??t?.parentElement??e.querySelector('div[class*="SkillActionDetail_name"]');f?f.insertAdjacentElement("afterend",c):e.appendChild(c)}let l=[...c.querySelectorAll('[data-mwitools-production-extension="true"]')];c.replaceChildren();let d=document.createElement("div");d.className="mwi-production-card-title",d.textContent=et("本次生产摘要","Production summary");let m=document.createElement("div");m.className="mwi-production-metrics";let p=document.createElement("div");p.className="mwi-production-output-grid",p.dataset.count=String(r.outputs?.length??0),r.outputs?.forEach(f=>p.append(D_(f,e)));let b=cn(r.effectivelyInfinite?et("预期单次产出","Output per action"):et("预期总产出","Total output"),p);if(b.classList.add("mwi-production-output-metric"),m.append(b,cn(et("当前拥有","Owned"),r.outputs?.length?r.outputs.map(f=>u.api.numberFormatter(f.owned)).join(" · "):"—"),cn(et("库存最多可做","Max craftable"),r.maxCraftable===1/0?"∞":un(r.maxCraftable)),cn(et("本次总耗时","Duration"),bf(r.totalSeconds))),u.settings.get("productionProfit")&&m.append(cn(et("每次净利润","Per action"),un(r.netProfitPerAction)),cn(et("每小时净利润","Per hour"),un(r.profitPerHour)),cn(et("每天净利润","Per day"),un(r.profitPerHour===null?null:r.profitPerHour*24)),cn(et("本次总净利润","Total profit"),r.netProfitPerAction===null?un(null):r.effectivelyInfinite?"∞":un(r.totalProfit))),c.append(d,m),r.status==="incomplete"){let f=document.createElement("div");f.className="mwi-production-warning",f.textContent=et("部分市场价格缺失,利润暂不显示为 0。","Some market prices are missing; profit is not treated as zero."),c.append(f)}c.append(...l)}s(qn,"renderProductionPanel");function F_(){document.querySelector("#mwi-action-dashboard")?.remove(),document.querySelectorAll(".mwi-action-dashboard-host").forEach(e=>e.classList.remove("mwi-action-dashboard-host")),document.querySelector("#mwi-production-summary")?.remove(),document.querySelector(".mwi-max-action-button")?.remove(),eu()}s(F_,"removeActionUi"),u.features.register({id:"totalActionTime",setting:"totalActionTime",scope:"character",initialize({scope:e}){Ko(),lr(),e.interval(lr,500),e.add(()=>{document.querySelector("#mwi-action-dashboard")?.remove(),document.querySelectorAll(".mwi-action-dashboard-host").forEach(t=>t.classList.remove("mwi-action-dashboard-host"))})}}),u.features.register({id:"actionBarProfit",setting:"actionBarProfit",scope:"character",dependsOn:["totalActionTime"],initialize(){return lr(),lr}}),u.features.register({id:"actionPanel_totalTime_quickInputs",setting:"actionPanel_totalTime_quickInputs",scope:"character",dependsOn:["actionPanel_totalTime"],initialize({scope:e}){tu(),e.interval(tu,350),e.add(eu)}}),u.features.register({id:"productionSummary",setting:"productionSummary",scope:"character",initialize({scope:e}){qn(),e.interval(qn,350),e.add(()=>document.querySelector("#mwi-production-summary")?.remove())}}),u.features.register({id:"productionProfit",setting:"productionProfit",scope:"character",dependsOn:["productionSummary"],initialize(){return qn(),qn}}),Object.assign(u.api,{renderActionDashboard:lr,renderProductionPanel:qn,getProductionPanelDuration:Xo,getLiveActionTiming:gf,resolveProductionAction:au,renderProductionQuickInputs:tu,removeProductionQuickInputs:eu,removeActionUi:F_});var nu="mwitools-procurement-style",j_="mwitools-procurement-host",ln="mwitools-procurement-market-nav",dn="mwitools-procurement-production",ge=u.api.procurement,Rn=null,yt=null,Yt=!1,Jo="cart",xa="",gi="",dr=new Map,Bn=!1,Yo=!1,mr=0,hi=!1,Qo=null,es="",Ba="",kf=2500,W_='<svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="9" cy="21" r="1.6"/><circle cx="19" cy="21" r="1.6"/><path d="M2 3h3l2.6 12.5a2 2 0 0 0 2 1.5h8.7a2 2 0 0 0 2-1.6L22 7H6"/></svg>',V_='<svg class="icon" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 2.5l2.9 6 6.6.9-4.8 4.6 1.2 6.5L12 17.4 6.1 20.5l1.2-6.5L2.5 9.4l6.6-.9z"/></svg>';function be(e,t){return u.config.isZH?e:t}s(be,"t");function fr(e){return u.config.isZH?"种材料":Number(e)===1?"material":"materials"}s(fr,"materialNoun");function ka(e){return u.api.numberFormatter?.(e)??String(e??"—")}s(ka,"formatNumber");function mn(e){return u.api.formatExactNumber?.(e)??String(e??"—")}s(mn,"exactNumber");function oa(e){return String(e??"").replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}s(oa,"escapeHtml");function G_(){if(document.getElementById(nu))return;let e=document.createElement("style");e.id=nu,e.textContent=`
.mwi-procurement-badge{position:static!important;display:inline-flex;max-width:78px;min-height:16px;align-items:center;margin-left:4px;padding:0 4px;border:1px solid rgba(255,255,255,.16);border-radius:3px;background:rgba(15,18,28,.72);font:600 .58rem/1.35 Roboto,Arial,sans-serif;vertical-align:middle;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;pointer-events:auto}
.mwi-procurement-panel{min-width:330px!important;max-width:min(420px,calc(100vw - 24px))!important}
.mwi-procurement-requirement-row{width:max-content!important;max-width:none!important;grid-template-columns:repeat(4,max-content)!important;align-items:center!important;white-space:nowrap!important}
.mwi-procurement-badge[data-state="missing"]{color:#ffad62;border-color:rgba(255,153,51,.45)}
.mwi-procurement-badge[data-state="ready"]{color:#43d17f;border-color:#43c979;background:rgba(48,176,105,.12)}
.mwi-procurement-badge[data-state="locked"]{color:#d9bd72;border-color:rgba(210,180,90,.4)}
#${dn}{min-width:0;max-width:100%;box-sizing:border-box;margin-top:5px;padding-top:5px;border-top:1px solid rgba(255,255,255,.08);font:inherit;font-size:.66rem}
.mwi-procurement-summary-line{display:flex;min-width:0;align-items:center;gap:5px;flex-wrap:wrap}
.mwi-procurement-summary-state{min-width:0;flex:1;color:var(--color-text-secondary,#aaa);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mwi-procurement-summary-state strong{color:#ffad62}
.mwi-procurement-inline-button{min-height:24px;padding:2px 8px;border:1px solid rgba(255,255,255,.16);border-radius:4px;background:var(--color-midnight-500,#343a54);color:var(--color-neutral-100,#eee);font:inherit;font-size:.65rem;cursor:pointer}
.mwi-procurement-inline-button:hover{background:var(--color-space-700,#46547e)}
.mwi-procurement-chain{margin-top:4px;border-radius:4px;background:rgba(0,0,0,.12)}
.mwi-procurement-chain>summary{padding:4px 6px;cursor:pointer;color:var(--color-text-secondary,#aaa)}
.mwi-procurement-chain-list{display:grid;gap:3px;padding:0 6px 6px}
.mwi-procurement-chain-stage{display:flex;align-items:center;gap:6px;min-width:0}
.mwi-procurement-chain-stage span:first-of-type{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mwi-procurement-chain-stage span:last-child{margin-left:auto;color:#d7bb67;white-space:nowrap}
.mwi-procurement-market-target{outline:2px solid rgba(245,158,11,.72)!important;outline-offset:1px;border-radius:4px;box-shadow:0 0 0 3px rgba(245,158,11,.12)}
#${ln}{position:fixed;z-index:1005;display:flex;box-sizing:border-box;align-items:center;gap:7px;min-height:40px;padding:5px 8px;border:1px solid var(--color-midnight-400,#505776);border-radius:0 0 5px 5px;background:var(--color-midnight-900,#151927);color:var(--color-neutral-100,#eee);box-shadow:0 7px 18px rgba(0,0,0,.38);font:inherit;font-size:.68rem}
#${ln}[data-inside="true"]{border-radius:5px 5px 0 0;box-shadow:0 -5px 16px rgba(0,0,0,.35)}
.mwi-procurement-nav-progress{flex:0 0 auto;color:var(--color-space-300,#9da9d0);white-space:nowrap}
.mwi-procurement-nav-items{display:flex;min-width:0;flex:1;gap:4px;overflow-x:auto;padding:1px}
.mwi-procurement-nav-chip{position:relative;display:flex;flex:0 0 34px;width:34px;height:32px;align-items:center;justify-content:center;padding:2px;border:1px solid var(--color-midnight-400,#505776);border-radius:4px;background:var(--color-midnight-700,#272d43);color:inherit;cursor:pointer}
.mwi-procurement-nav-chip[data-current="true"]{border-color:#8293d6;background:#394568}
.mwi-procurement-nav-chip[data-done="true"]{opacity:.68;border-color:#4d9d68;cursor:default}
.mwi-procurement-nav-icon{display:flex;width:27px;height:27px;align-items:center;justify-content:center;overflow:hidden}.mwi-procurement-nav-icon svg{display:block;width:27px;height:27px}.mwi-procurement-nav-icon .item-icon-fallback{font-size:11px;font-weight:700}
.mwi-procurement-nav-chip b{position:absolute;right:-2px;bottom:-2px;min-width:13px;padding:0 2px;border-radius:5px;background:var(--color-midnight-900,#151927);color:var(--color-neutral-100,#eee);font-size:.55rem;line-height:12px;text-align:center;box-shadow:0 0 0 1px var(--color-midnight-400,#505776)}.mwi-procurement-nav-chip[data-done="true"] b{color:#62d88e}
.mwi-procurement-nav-next{flex:0 0 auto;min-height:28px;padding:3px 10px;border:0;border-radius:4px;background:var(--color-space-600,#52649a);color:#fff;cursor:pointer;white-space:nowrap}
.mwi-procurement-toast{position:fixed;right:14px;top:14px;z-index:2147483000;max-width:min(360px,calc(100vw - 28px));padding:8px 11px;border:1px solid rgba(245,158,11,.55);border-radius:5px;background:rgba(15,18,28,.96);color:#eee;font-size:.75rem;box-shadow:0 8px 22px rgba(0,0,0,.4)}
`,(document.head??document.documentElement).appendChild(e)}s(G_,"addStyles");function Z_(){return`
:host{all:initial;color-scheme:dark;--panel:#171b2a;--card:#23283b;--text:#e7e9ef;--muted:#9299aa;--line:#505773;--accent:#5669ab;--gold:#e8c87f;font-family:"PingFang SC","Microsoft YaHei",Roboto,system-ui,sans-serif}
*{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent}
button,input,select{border:0;background:none;color:inherit;font:inherit}
button{cursor:pointer}.icon{display:block}
::-webkit-scrollbar{width:7px}::-webkit-scrollbar-thumb{border-radius:4px;background:color-mix(in srgb,var(--muted) 28%,transparent)}
.handle{position:fixed;right:0;z-index:1002;display:flex;width:32px;height:62px;align-items:center;justify-content:center;border-radius:9px 0 0 9px;background:var(--panel);color:var(--text);box-shadow:-2px 2px 10px rgba(0,0,0,.3);cursor:pointer;opacity:.86;touch-action:none;user-select:none;transition:opacity .15s}
.handle:hover{opacity:1}.handle .icon{width:16px;height:16px}.handle[data-has-items="true"]{box-shadow:-2px 2px 10px rgba(0,0,0,.3),inset 2px 0 0 var(--gold)}
.handle-badge{position:absolute;top:9px;right:7px;width:7px;height:7px;border-radius:50%;background:var(--gold);box-shadow:0 0 0 2px var(--panel)}
.handle-badge::after{content:"";position:absolute;inset:-3px;border:1.5px solid var(--gold);border-radius:50%;opacity:.6;animation:badge-pulse 1.6s ease-out infinite}@keyframes badge-pulse{0%{transform:scale(.7);opacity:.7}100%{transform:scale(1.9);opacity:0}}
.drawer{position:fixed;top:56px;right:10px;z-index:1001;display:flex;width:var(--drawer-width,360px);max-width:calc(100vw - 26px);min-height:320px;max-height:calc(100vh - 96px);flex-direction:column;border-radius:10px;background:var(--panel);color:var(--text);box-shadow:0 10px 32px rgba(0,0,0,.45),0 0 0 1px color-mix(in srgb,var(--line) 70%,transparent);transform:translateX(calc(100% + 18px));transition:transform .2s ease}
.drawer[data-open="true"]{transform:translateX(0)}.resize{position:absolute;left:-3px;top:0;bottom:0;width:7px;border-radius:10px 0 0 10px;cursor:ew-resize;touch-action:none}.resize:hover{background:color-mix(in srgb,var(--accent) 25%,transparent)}
.header{display:flex;flex:0 0 auto;align-items:center;gap:8px;padding:11px 14px 9px;border-bottom:1px solid color-mix(in srgb,var(--line) 55%,transparent)}
.title{font-size:14px;font-weight:700;letter-spacing:.2px}.head-count{padding:2px 7px;border-radius:5px;background:color-mix(in srgb,var(--gold) 12%,transparent);color:color-mix(in srgb,var(--gold) 85%,white);font-size:10.5px}.head-count:empty{display:none}
.close{margin-left:auto;width:27px;height:27px;border-radius:5px;color:var(--muted);font-size:15px}.close:hover{background:color-mix(in srgb,var(--text) 9%,transparent);color:var(--text)}
.tabs{display:flex;flex:0 0 auto;gap:2px;margin:8px 12px 0;padding:2px;border-radius:7px;background:color-mix(in srgb,var(--text) 5%,transparent)}
.tab{flex:1;min-width:0;padding:7px 0;border-radius:5px;color:var(--muted);font-size:12px;font-weight:600;white-space:nowrap}.tab:hover{color:var(--text)}.tab[data-active="true"]{background:var(--accent);color:#fff}
.body{min-height:100px;flex:1 1 auto;overflow-y:auto;padding:4px 12px 6px}.empty{margin:12px 2px;padding:26px 12px;border-radius:8px;background:color-mix(in srgb,var(--text) 4%,transparent);color:var(--muted);font-size:12.5px;line-height:1.7;text-align:center}
.cart-row{display:grid;min-height:56px;grid-template-columns:26px 44px minmax(0,1fr) auto auto;grid-template-rows:auto auto;align-items:center;column-gap:9px;row-gap:2px;padding:7px 2px;border-bottom:1px solid color-mix(in srgb,var(--line) 40%,transparent)}.cart-row:hover,.plan-row:hover{background:color-mix(in srgb,var(--text) 4%,transparent)}
.star{grid-column:1;grid-row:1/span 2;width:26px;height:32px;border-radius:5px;color:color-mix(in srgb,var(--muted) 32%,transparent)}.star:hover{color:color-mix(in srgb,var(--gold) 70%,transparent)}.star[data-active="true"]{color:var(--gold)}.star .icon{width:14px;height:14px;margin:auto}
.item-icon{grid-column:2;grid-row:1/span 2;display:flex;width:42px;height:42px;align-items:center;justify-content:center;border-radius:8px;background:var(--card);cursor:pointer}.item-icon:hover{background:color-mix(in srgb,var(--card) 88%,white)}.item-icon svg{width:32px;height:32px}.item-icon-fallback{color:var(--muted);font-size:13px;font-weight:700}
.item-name{grid-column:3;grid-row:1;min-width:0;overflow:hidden;color:var(--text);font-size:13.5px;font-weight:600;text-align:left;text-overflow:ellipsis;white-space:nowrap}.item-name:hover{color:var(--gold)}
.row-controls{grid-column:4;grid-row:1;display:flex;align-items:stretch;overflow:hidden;border-radius:6px;background:color-mix(in srgb,var(--text) 6%,transparent)}.step{width:27px;color:var(--muted);font-size:15px}.step:hover{background:color-mix(in srgb,var(--text) 9%,transparent);color:var(--text)}.qty{width:56px;height:30px;outline:0;background:transparent;color:var(--gold);font-size:13.5px;font-weight:700;text-align:center;font-variant-numeric:tabular-nums}.qty:focus{background:color-mix(in srgb,var(--accent) 16%,transparent)}
.delete{grid-column:5;grid-row:1;width:26px;height:32px;border-radius:5px;color:color-mix(in srgb,var(--muted) 55%,transparent);font-size:15px}.delete:hover{background:color-mix(in srgb,#e05a64 14%,transparent);color:#ff8d96}
.row-bottom{grid-column:3/6;grid-row:2;display:flex;min-width:0;align-items:center;gap:6px;color:var(--muted);font-size:11px;white-space:nowrap}.owned,.price{color:var(--muted)}.price{color:color-mix(in srgb,var(--gold) 78%,var(--muted))}.threshold-wrap{display:flex;min-width:0;align-items:center;gap:3px}.threshold{width:52px;padding:2px 4px;border-radius:4px;outline:0;background:color-mix(in srgb,var(--text) 7%,transparent);color:var(--text);font-size:10px;text-align:center}
.panel-footer{display:flex;flex:0 0 auto;align-items:center;gap:8px;min-height:56px;padding:10px 14px;border-top:1px solid color-mix(in srgb,var(--line) 55%,transparent);color:var(--muted);font-size:11px}.panel-footer:empty{display:none}.footer-total{font-size:10px;line-height:1.35}.footer-total strong{display:block;color:var(--gold);font-size:15px;font-weight:700;font-variant-numeric:tabular-nums}.footer-total small{display:block;color:var(--muted);font-size:9px}.clear{margin-left:auto;padding:9px 18px;border-radius:6px;background:color-mix(in srgb,var(--text) 8%,transparent);color:var(--text);font-size:12.5px;font-weight:700}.clear:hover{background:color-mix(in srgb,#e05a64 14%,transparent);color:#ff8d96}
.plan-row{display:flex;min-height:58px;flex-direction:column;gap:6px;padding:8px 4px;border-bottom:1px solid color-mix(in srgb,var(--line) 40%,transparent)}.row-top{display:flex;align-items:center;gap:8px;min-width:0}.plan-title{min-width:0;flex:1;overflow:hidden;color:var(--text);font-size:13px;font-weight:600;text-overflow:ellipsis;white-space:nowrap}.plan-status{color:var(--gold);font-size:10.5px}.progress{height:4px;overflow:hidden;border-radius:2px;background:color-mix(in srgb,var(--text) 7%,transparent)}.progress>span{display:block;height:100%;background:var(--accent)}.plan-meta{display:flex;justify-content:space-between;color:var(--muted);font-size:10.5px}.plan-actions{display:flex;gap:5px}.plan-actions button{padding:6px 9px;border-radius:6px;background:color-mix(in srgb,var(--text) 7%,transparent);color:var(--muted);font-size:11px;font-weight:600}.plan-actions button:hover{background:color-mix(in srgb,var(--text) 11%,transparent);color:var(--text)}
.setting-section{margin-top:5px}.setting-section-title{padding:8px 4px 4px;color:var(--muted);font-size:10.5px;font-weight:700;letter-spacing:.4px}.setting-row{display:flex;min-height:48px;align-items:center;gap:10px;padding:5px 4px;border-bottom:1px solid color-mix(in srgb,var(--line) 32%,transparent)}.setting-label{min-width:0;flex:1;color:var(--text);font-size:13px;font-weight:600}.setting-label small{display:block;margin-top:2px;color:var(--muted);font-size:10.5px;font-weight:400}.switch-state{min-width:18px;color:var(--muted);font-size:10.5px;text-align:right}.switch-state[data-on="true"]{color:#3edd8b;font-weight:700}.switch{position:relative;width:42px;height:23px;flex:0 0 auto;border-radius:99px;background:color-mix(in srgb,var(--text) 10%,transparent);transition:background-color .15s}.switch::after{content:"";position:absolute;top:3px;left:3px;width:17px;height:17px;border-radius:50%;background:#fff;opacity:.5;transition:transform .15s,opacity .15s}.switch[data-on="true"]{background:#29c274}.switch[data-on="true"]::after{transform:translateX(19px);opacity:1}
.setting-row input[type="number"],.setting-row select,.setting-button{flex:0 0 auto;min-height:28px;padding:5px 8px;border-radius:6px;background:color-mix(in srgb,var(--text) 7%,transparent);color:var(--text);font-size:11.5px}.setting-row input[type="number"]{width:76px;border:1px solid color-mix(in srgb,var(--text) 14%,transparent);outline:0;text-align:center}.setting-row select{max-width:116px}.setting-button{font-weight:600}.setting-button:hover{background:color-mix(in srgb,var(--text) 11%,transparent)}.shortcut{max-width:130px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
@media(max-width:760px){
.drawer{left:0;right:0;top:auto;bottom:0;width:100%!important;max-width:none;height:52%;min-height:0;max-height:90%;border-radius:14px 14px 0 0;box-shadow:0 -10px 32px rgba(0,0,0,.5);transform:translateY(105%)}
.drawer[data-open="true"]{transform:translateY(0)}
.resize{display:none}
.header::before{content:"";position:absolute;top:7px;left:50%;width:44px;height:4px;border-radius:2px;background:color-mix(in srgb,var(--muted) 45%,transparent);transform:translateX(-50%)}.header{position:relative;padding-top:18px}
}
@media(prefers-reduced-motion:reduce){.drawer{transition:none}.handle-badge::after{animation:none}}
`}s(Z_,"shellStyles");function br(e){document.querySelectorAll(".mwi-procurement-toast").forEach(a=>a.remove());let t=document.createElement("div");t.className="mwi-procurement-toast",t.textContent=e,document.body.appendChild(t),setTimeout(()=>t.remove(),2800)}s(br,"showToast");function ts(){return ge.getCartItems().filter(e=>e.quantity>0).sort((e,t)=>e.starred!==t.starred?e.starred?-1:1:e.name.localeCompare(t.name,u.config.isZH?"zh":"en"))}s(ts,"pendingItems");function U_(){for(let a of globalThis.performance?.getEntriesByType?.("resource")??[])if(a.name?.includes("items_sprite")&&a.name.endsWith(".svg"))try{return new URL(a.name).pathname}catch{return a.name}let e=document.querySelector('svg use[href*="items_sprite"],svg use[xlink\\:href*="items_sprite"]'),t=e?.getAttribute("href")??e?.getAttribute("xlink:href")??"";return t.includes("#")?t.split("#")[0]:""}s(U_,"findItemsSpriteBase");function Sf(e){let t=ge.normalizeItemHrid(e.itemHrid).split("/").at(-1),a=U_();if(!t||!a)return`<span class="item-icon-fallback">${oa((e.name||"?").trim().charAt(0)||"?")}</span>`;let n=`${a}#${t}`;return`<svg viewBox="0 0 32 32" aria-label="${oa(e.name)}"><use href="${oa(n)}" xlink:href="${oa(n)}"></use></svg>`}s(Sf,"renderItemIcon");function $t(){if(!yt)return;let e=ge.getSettings(),a=ge.getCartItems().filter(r=>r.quantity>0).length,n=yt.querySelector(".handle"),i=yt.querySelector(".drawer");if(!n||!i)return;n.style.top=`${Cf(e.handleY)}px`,i.style.setProperty("--drawer-width",`${e.drawerWidth}px`),i.dataset.open=String(Yt),n.dataset.hasItems=String(a>0),n.setAttribute("aria-expanded",String(Yt)),n.querySelector(".handle-badge").hidden=a===0,yt.querySelector(".head-count").textContent=a?be(`缺 ${a} 项`,`${a} missing`):be("无缺料","All set");for(let r of yt.querySelectorAll(".tab"))r.dataset.active=String(r.dataset.tab===Jo);let o=yt.querySelector(".body");yt.querySelector(".panel-footer").replaceChildren(),Jo==="plans"?J_(o):Jo==="settings"?ey(o):K_(o)}s($t,"renderShell");function K_(e){let t=ge.getCartItems();if(e.replaceChildren(),!t.length){let r=document.createElement("div");r.className="empty",r.textContent=be("购物清单还是空的。打开生产或房屋界面,把缺少的材料加入这里。","Your shopping list is empty. Add missing materials from a production or housing panel."),e.append(r);return}let a=ge.getSettings(),n=0,i=0;for(let r of t){let c=document.createElement("article");c.className="cart-row";let l=a.pricesEnabled&&(u.api.getAskPrice?.(r.itemHrid,r.enhancementLevel)||u.api.getFairValue?.(r.itemHrid,r.enhancementLevel))||0;a.pricesEnabled&&r.quantity>0&&(l>0?n+=l*r.quantity:i+=1),c.innerHTML=`
<button class="star" data-active="${!!r.starred}" title="${be("收藏:买齐后保留并监控常备数量","Favorite: keep and restock")}">${V_}</button>
<button class="item-icon" title="${be("在市场中打开","Open in marketplace")}">${Sf(r)}</button>
<button class="item-name" title="${oa(r.name)}">${oa(r.name)}${r.enhancementLevel?` +${r.enhancementLevel}`:""}</button>
<div class="row-controls">
<button class="step" data-step="-1">−</button>
<input class="qty" inputmode="numeric" value="${r.quantity}" aria-label="${be("待购数量","Quantity")}">
<button class="step" data-step="1">+</button>
</div>
<button class="delete" title="${be("删除","Remove")}">×</button>
<div class="row-bottom">
<span class="owned" title="${mn(ge.getInventoryCount(r.itemHrid,r.enhancementLevel))}">${be("库存","Stock")} ${ka(ge.getInventoryCount(r.itemHrid,r.enhancementLevel))}</span>
${a.pricesEnabled?`<span class="price" title="${l>0?mn(l*r.quantity):"—"}">${l>0?`${ka(l)} · ${be("计","total")} ${ka(l*r.quantity)}`:"—"}</span>`:""}
<label class="threshold-wrap" ${r.starred?"":"hidden"}>${be("常备","Min")}<input class="threshold" inputmode="numeric" placeholder="0" value="${r.threshold??""}"></label>
</div>`;let d=s(p=>{ge.setCartItemQuantity(r.itemHrid,p,r.enhancementLevel)},"setQuantity");c.querySelector(".star").addEventListener("click",()=>{ge.updateCartItem(r.itemHrid,r.enhancementLevel,{starred:!r.starred})});for(let p of c.querySelectorAll(".item-name,.item-icon"))p.addEventListener("click",()=>{zn(r.itemHrid,r.enhancementLevel)});c.querySelector(".delete").addEventListener("click",()=>{ge.removeFromCart(r.itemHrid,r.enhancementLevel)});let m=c.querySelector(".qty");m.addEventListener("change",()=>{d(u.api.parseCompactNumber?.(m.value))});for(let p of c.querySelectorAll(".step"))p.addEventListener("click",()=>{d(r.quantity+Number(p.dataset.step))}),X_(p,()=>{let b=ge.getCartItem(r.itemHrid,r.enhancementLevel);d((b?.quantity??0)+Number(p.dataset.step))});c.querySelector(".threshold").addEventListener("change",p=>{ge.updateCartItem(r.itemHrid,r.enhancementLevel,{threshold:p.target.value?u.api.parseCompactNumber?.(p.target.value):null})}),e.append(c)}let o=yt.querySelector(".panel-footer");o.innerHTML=`
<span class="footer-total">${be("补齐合计","Total")}<strong title="${i?be("部分物品缺少价格","Some items are unpriced"):mn(n)}">${a.cartTotalEnabled&&!i?ka(n):"—"}</strong>${i?`<small>${i} ${be("项未估价","unpriced")}</small>`:""}</span>
<button class="clear">${be("清空未收藏","Clear")}</button>`,o.querySelector(".clear").addEventListener("click",()=>{ge.clearCart()})}s(K_,"renderCart");function X_(e,t){let a=null,n=null,i=s(()=>{clearTimeout(a),clearInterval(n),a=null,n=null},"stop");e.addEventListener("pointerdown",()=>{a=setTimeout(()=>{n=setInterval(t,90)},420)}),e.addEventListener("pointerup",i),e.addEventListener("pointercancel",i),e.addEventListener("pointerleave",i)}s(X_,"installHoldRepeat");function J_(e){let t=ge.getPlans();if(e.replaceChildren(),!t.length){let n=document.createElement("div");n.className="empty",n.textContent=be("还没有制作计划。把生产缺料加入购物车时可以同时创建。","No crafting plans yet. Create one when adding production materials."),e.append(n);return}for(let n of t){let i=document.createElement("article");i.className="plan-row";let o=n.targetCount?Math.min(100,n.progress/n.targetCount*100):0;i.innerHTML=`
<div class="row-top"><div class="plan-title">${oa(n.name)}</div><span class="plan-status">${n.status==="completed"?be("已完成","Completed"):be("进行中","Active")}</span></div>
<div class="progress"><span style="width:${o}%"></span></div>
<div class="plan-meta"><span>${ka(n.progress)} / ${ka(n.targetCount)}</span><span>${Object.keys(n.materials??{}).length} ${fr(Object.keys(n.materials??{}).length)}</span></div>
<div class="plan-actions"><button data-action="count">${be("修改次数","Edit count")}</button><button data-action="toggle">${n.status==="completed"?be("重新打开","Reopen"):be("完成","Complete")}</button><button data-action="remove">${be("删除","Delete")}</button></div>`,i.querySelector('[data-action="count"]').addEventListener("click",()=>{let r=globalThis.prompt?.(be("输入新的目标次数","Enter a new target count"),String(n.targetCount));r!=null&&ge.updatePlan(n.id,{targetCount:r})}),i.querySelector('[data-action="toggle"]').addEventListener("click",()=>{ge.updatePlan(n.id,{status:n.status==="completed"?"active":"completed"})}),i.querySelector('[data-action="remove"]').addEventListener("click",()=>{ge.removePlan(n.id)}),e.append(i)}let a=yt.querySelector(".panel-footer");a.innerHTML=`<span>${be("制作计划","Plans")} ${t.length}</span><button class="clear">${be("清空计划","Clear plans")}</button>`,a.querySelector(".clear").addEventListener("click",()=>{for(let n of ge.getPlans())ge.removePlan(n.id)})}s(J_,"renderPlans");var Y_=[{title:["生产材料","Production materials"],rows:[["badgesEnabled","材料缺口徽标","Material shortage badges","bool"],["upgradeChainEnabled","升级链材料","Upgrade-chain materials","bool"],["createPlansByDefault","默认建立制作计划","Create plans by default","bool"],["inventorySyncEnabled","精确库存同步","Exact inventory sync","bool"],["autoRestockEnabled","收藏物资自动补货","Favorite item restocking","bool"]]},{title:["市场购物","Marketplace"],rows:[["locateEnabled","市场材料定位","Locate market materials","bool"],["autoPrefillEnabled","自动填写购买数量","Prefill purchase quantity","bool"],["purchaseNavEnabled","购物导航条","Shopping navigation","bool"],["pricesEnabled","显示市场价格","Show market prices","bool"],["cartTotalEnabled","显示购物总价","Show cart total","bool"],["autoCollapseEnabled","全部补齐后自动收起","Collapse when fulfilled","bool"]]},{title:["安全材料","Material safety"],rows:[["safetyLevel","材料安全余量","Material safety margin","safety"],["safetyThreshold","启用余量的最少次数","Minimum count for margin","number"],["guzzlingPouchLevel","狂饮袋等级(-1 自动)","Guzzling pouch level (-1 auto)","pouch"]]},{title:["界面与快捷键","Interface & shortcut"],rows:[["nextItemShortcut","下一项快捷键","Next item shortcut","shortcut"],["resetHandle","重置把手位置","Reset handle position","button"],["resetDrawer","重置抽屉宽度","Reset drawer width","button"]]}],Q_={badgesEnabled:["直接在材料旁显示缺少或余量","Show shortages beside materials"],upgradeChainEnabled:["展开查看升级链各阶段材料","Show materials through upgrade chains"],createPlansByDefault:["加购缺料时同时锁定制作材料","Create and lock a plan when adding materials"],inventorySyncEnabled:["按服务器库存变化自动扣减清单","Update the list from live inventory changes"],autoRestockEnabled:["收藏物品低于常备数量时自动补单","Restock favorites below their minimum"],locateEnabled:["从清单打开市场并定位对应物品","Open and locate items in the marketplace"],autoPrefillEnabled:["只填写待买数量,不会自动下单","Fill quantity without placing an order"],purchaseNavEnabled:["买完后快速切换到下一项","Move through remaining shopping items"],pricesEnabled:["显示当前单价和物品小计","Show current prices and subtotals"],cartTotalEnabled:["在底部显示全部补齐所需金额","Show the total cost to fill the cart"],autoCollapseEnabled:["所有项目补齐后收起购物车","Collapse after every item is fulfilled"],safetyLevel:["为工匠茶的随机省料准备余量","Allow for Artisan's Tea material variance"],safetyThreshold:["次数较少时不额外准备材料","Skip the margin for smaller batches"],guzzlingPouchLevel:["填写 -1 时自动读取当前等级","Use -1 to detect the current level"],nextItemShortcut:["右键可清除已经录制的快捷键","Right-click to clear the shortcut"],resetHandle:["恢复购物车图标的默认高度","Restore the cart handle position"],resetDrawer:["恢复悬浮购物车的默认宽度","Restore the floating cart width"]};function ey(e){e.replaceChildren();let t=ge.getSettings();for(let a of Y_){let n=document.createElement("section");n.className="setting-section";let i=document.createElement("div");i.className="setting-section-title",i.textContent=be(...a.title),n.append(i);for(let[o,r,c,l]of a.rows){let d=document.createElement("div");d.className="setting-row";let m=document.createElement("span");m.className="setting-label";let p=Q_[o];m.innerHTML=`${oa(be(r,c))}${p?`<small>${oa(be(...p))}</small>`:""}`,d.append(m);let b;if(l==="bool"){let f=document.createElement("span");f.className="switch-state",f.dataset.on=String(!!t[o]),f.textContent=t[o]?be("开","On"):be("关","Off"),d.append(f),b=document.createElement("button"),b.type="button",b.className="switch",b.dataset.on=String(!!t[o]),b.setAttribute("role","switch"),b.setAttribute("aria-checked",String(!!t[o])),b.setAttribute("aria-label",be(r,c)),b.addEventListener("click",()=>ge.setSetting(o,!t[o]))}else if(l==="safety"){b=document.createElement("select");for(let[f,g]of[["off",be("关闭","Off")],["95",be("标准 95%","Standard 95%")],["99",be("充足 99%","Ample 99%")],["99.9",be("极高 99.9%","Full 99.9%")]]){let h=document.createElement("option");h.value=f,h.textContent=g,h.selected=String(t[o])===f,b.append(h)}b.addEventListener("change",()=>ge.setSetting(o,b.value))}else l==="shortcut"?(b=document.createElement("button"),b.type="button",b.className="setting-button shortcut",b.textContent=ty(t.nextItemShortcut)||be("录制","Record"),b.addEventListener("click",()=>ay(b)),b.addEventListener("contextmenu",f=>{f.preventDefault(),ge.setSetting("nextItemShortcut",null)})):l==="button"?(b=document.createElement("button"),b.type="button",b.className="setting-button",b.textContent=be("重置","Reset"),b.addEventListener("click",()=>{ge.setSetting(o==="resetHandle"?"handleY":"drawerWidth",o==="resetHandle"?180:360)})):(b=document.createElement("input"),b.type="number",b.min=o==="guzzlingPouchLevel"?"-1":"0",l==="pouch"&&(b.max="20"),b.value=String(t[o]),b.addEventListener("change",()=>ge.setSetting(o,Number(b.value))));d.append(b),n.append(d)}e.append(n)}}s(ey,"renderProcurementSettings");function ty(e){return e?.code?[e.ctrl&&"Ctrl",e.shift&&"Shift",e.alt&&"Alt",e.meta&&"Meta",e.display||e.code].filter(Boolean).join("+"):""}s(ty,"formatShortcut");function ay(e){e.textContent=be("请按快捷键…","Press shortcut…");let t=s(a=>{if(a.key==="Escape"){window.removeEventListener("keydown",t,!0),$t();return}if(/^(Control|Shift|Alt|Meta|OS)/.test(a.code))return;a.preventDefault(),a.stopPropagation();let n=a.code==="Space"?"Space":a.code.startsWith("Arrow")?a.code.slice(5):a.key?.length===1?a.key.toUpperCase():a.key||a.code;ge.setSetting("nextItemShortcut",{code:a.code,display:n,ctrl:a.ctrlKey,shift:a.shiftKey,alt:a.altKey,meta:a.metaKey}),window.removeEventListener("keydown",t,!0)},"handler");window.addEventListener("keydown",t,!0)}s(ay,"captureShortcut");function Cf(e){return Math.min(Math.max(8,Number(e)||180),Math.max(8,window.innerHeight-84))}s(Cf,"clampHandleY");function ny(e){Rn=document.createElement("div"),Rn.id=j_,yt=Rn.attachShadow({mode:"open"});let t=document.createElement("style");t.textContent=Z_(),yt.innerHTML=`
<button class="handle" aria-label="${be("购物车(可拖动)","Shopping cart (drag to move)")}" aria-expanded="false">${W_}<span class="handle-badge"></span></button>
<aside class="drawer" data-open="false" aria-label="${be("购物车","Shopping cart")}">
<div class="resize"></div>
<header class="header"><div class="title">${be("购物车","Shopping Cart")}</div><span class="head-count"></span><button class="close" aria-label="${be("收起","Collapse")}">»</button></header>
<nav class="tabs"><button class="tab" data-tab="cart">${be("清单","Cart")}</button><button class="tab" data-tab="plans">${be("计划","Plans")}</button><button class="tab" data-tab="settings">${be("设置","Settings")}</button></nav>
<main class="body"></main>
<footer class="panel-footer"></footer>
</aside>`,yt.prepend(t),document.body.appendChild(Rn);let a=yt.querySelector(".handle"),n=yt.querySelector(".drawer"),i=null;a.addEventListener("pointerdown",c=>{i={y:c.clientY,top:a.getBoundingClientRect().top},a.setPointerCapture?.(c.pointerId)}),a.addEventListener("pointermove",c=>{if(!i)return;let l=Cf(i.top+c.clientY-i.y);a.style.top=`${l}px`}),a.addEventListener("pointerup",c=>{if(!i)return;let l=Math.abs(c.clientY-i.y)>5;i=null,ge.setSetting("handleY",parseFloat(a.style.top)),l||(Yt=!Yt,$t())}),yt.querySelector(".close").addEventListener("click",()=>{Yt=!1,$t()});for(let c of yt.querySelectorAll(".tab"))c.addEventListener("click",()=>{Jo=c.dataset.tab,$t()});let o=yt.querySelector(".resize"),r=!1;o.addEventListener("pointerdown",c=>{r=!0,o.setPointerCapture?.(c.pointerId)}),o.addEventListener("pointermove",c=>{r&&n.style.setProperty("--drawer-width",`${Math.min(560,Math.max(300,window.innerWidth-c.clientX))}px`)}),o.addEventListener("pointerup",()=>{r&&(r=!1,ge.setSetting("drawerWidth",parseFloat(n.style.getPropertyValue("--drawer-width"))))}),e.event(window,"resize",$t),e.event(document,"keydown",c=>{c.key==="Escape"&&Yt&&(Yt=!1,$t())}),e.event(document,"pointerdown",c=>{!Yt||c.composedPath().includes(Rn)||(Yt=!1,$t())}),e.add(()=>{Rn?.remove(),Rn=null,yt=null}),$t()}s(ny,"createShell");function iy(){let e=[...document.querySelectorAll('div[class*="SkillActionDetail_maxActionCountInput"] input')].filter(t=>!Af(t)).sort((t,a)=>+!!a.closest('[class*="Modal_modalContainer"]')-+!!t.closest('[class*="Modal_modalContainer"]'));for(let t of e){let a=t.closest('div[class*="SkillActionDetail_skillActionDetail"]')??t.closest('div[class*="SkillActionDetail_regularComponent"]')??t.parentElement;if(!a||Af(a))continue;let n=ry(a),i=n?.actionHrid??u.api.resolveProductionAction?.(a)??(a.closest?.('[class*="EnhancingPanel"], [class*="EnhancementPanel"], [class*="EnhancePanel"]')?"/actions/enhancing/enhance":null),o=u.api.parseCompactNumber?.(t.value);if(!(!i||!Number.isFinite(o)||o<=0))return{panel:a,input:t,actionHrid:i,actionFunction:oy(a,i,n?.actionFunction),count:Math.ceil(o)}}return null}s(iy,"resolveActionPanel");function Af(e){for(let t=e;t?.nodeType===1;t=t.parentElement){let a=String(t.className??"");if(t.hidden||t.getAttribute?.("aria-hidden")==="true"||t.style?.display==="none"||t.style?.visibility==="hidden"||/MainPanel_/.test(a)&&/hidden/i.test(a))return!0}return!1}s(Af,"isHiddenActionElement");function ry(e){let t=Mf(e);for(let a=0;t&&a<10;a+=1){let n=t.memoizedProps?.actionDetail;if(n?.hrid)return{actionHrid:n.hrid,actionFunction:n.function??""};t=t.return}return null}s(ry,"resolveActionFiberContext");function oy(e,t,a=""){return a||(e.closest?.('[class*="EnhancingPanel"], [class*="EnhancementPanel"], [class*="EnhancePanel"]')||String(t).includes("/enhancing/")?"/action_functions/enhancing":String(t).includes("/alchemy/")?"/action_functions/alchemy":"/action_functions/production")}s(oy,"resolveActionFunction");function sy(e){let t=String(e??"").match(/(?:\d[\d,.]*|\.\d+)\s*[kmbt]?/gi);if(!t?.length)return null;for(let a=t.length-1;a>=0;a-=1){let n=Number(u.api.parseCompactNumber?.(t[a]));if(Number.isFinite(n)&&n>=0)return n}return null}s(sy,"parseRequirementNumber");function uy(e){let t=e?.querySelector("svg use"),a=t?.getAttribute("href")??t?.getAttribute("xlink:href")??"",n=a.includes("#")?a.split("#").at(-1):a;return ge.normalizeItemHrid(n)}s(uy,"itemHridFromRequirement");function cy(e){let t=e.panel.querySelector('[class*="SkillActionDetail_itemRequirements"]');if(!t)return null;let a=[...t.querySelectorAll(':scope > [class*="Item_itemContainer"]')],n=[...t.querySelectorAll(':scope > [class*="SkillActionDetail_inputCount"]')];if(!a.length||n.length!==a.length)return null;let i=a.map((o,r)=>{let c=uy(o),l=sy(n[r].textContent);if(!c||l===null||l<=0)return null;let d=0,m=Math.ceil(l*e.count-1e-9),p=ge.getInventoryCount(c,d),b=ge.getLockedDetails(c,d),f=Math.max(0,p-b.total),g=ge.getCartItem(c,d)?.quantity??0;return{itemHrid:c,enhancementLevel:d,name:ge.resolveItemName(c),perAction:l,suggested:m,owned:p,locked:b.total,lockedByPlans:b.byPlan,effectiveOwned:f,cartQuantity:g,shortage:Math.max(0,m-f),addableShortage:Math.max(0,m-f-g),purchasable:c!=="/items/coin"}});return i.some(o=>!o)?null:{status:"complete",actionHrid:e.actionHrid,count:e.count,materials:i}}s(cy,"calculateEnhancingRequirements");function ly(e,t){let a=ge.normalizeItemHrid(t).split("/").at(-1);for(let n of e.querySelectorAll('[class*="Item_itemContainer"]'))if((n.querySelector("svg use")?.getAttribute("href")??n.querySelector("svg use")?.getAttribute("xlink:href")??"").includes(a))return n;return null}s(ly,"findMaterialHost");function pr(){document.getElementById(dn)?.remove(),document.querySelectorAll(".mwi-procurement-badge").forEach(e=>e.remove()),document.querySelectorAll(".mwi-procurement-requirement-row").forEach(e=>e.classList.remove("mwi-procurement-requirement-row")),document.querySelectorAll(".mwi-procurement-panel").forEach(e=>e.classList.remove("mwi-procurement-panel")),Ba=""}s(pr,"clearProductionUi");function as(){let e=iy();if(!e){let f=Ef();if(!f){pr();return}If(f);return}let t=ge.getSettings(),a=e.actionFunction==="/action_functions/enhancing",n=a?cy(e):ge.calculateRequirements(e.actionHrid,e.count);if(!n?.materials?.length){pr();return}let i=!a&&t.upgradeChainEnabled&&n.detail?.upgradeItemHrid?ge.calculateUpgradeChain(e.actionHrid,e.count):null,o=i?.leaves?.length?i.leaves:n.materials,r=JSON.stringify([a?"enhancing":"production",u.config.isZH,e.actionHrid,e.count,t.badgesEnabled,t.upgradeChainEnabled,o.map(f=>[f.itemHrid,f.suggested,f.owned,f.locked,f.cartQuantity])]);if(r===Ba&&document.getElementById(dn))return;if(pr(),Ba=r,t.badgesEnabled){e.panel.classList.add("mwi-procurement-panel");for(let f of n.materials){let g=ly(e.panel,f.itemHrid);if(!g)continue;g.parentElement?.classList.add("mwi-procurement-requirement-row");let h=document.createElement("span");h.className="mwi-procurement-badge",h.dataset.state=f.shortage?"missing":"ready",h.textContent=f.shortage?`${be("缺","Need")} ${ka(f.shortage)}`:`${be("余","Spare")} ${ka(f.effectiveOwned-f.suggested)}`;let _=f.lockedByPlans.map(y=>`${y.name}: ${mn(y.quantity)}`).join(`
`);h.title=`${be("建议准备","Suggested")}: ${mn(f.suggested)}
${be("当前拥有","Owned")}: ${mn(f.owned)}${f.locked?`
${be("计划锁定","Locked")}: ${mn(f.locked)}
${_}`:""}`,g.insertAdjacentElement("afterend",h)}}let c=document.createElement("section");c.id=dn,c.dataset.mwitoolsProductionExtension="true";let l=o.filter(f=>f.purchasable&&f.shortage>0),d=o.filter(f=>f.purchasable&&f.addableShortage>0),m=document.createElement("div");m.className="mwi-procurement-summary-line",m.innerHTML=`<span class="mwi-procurement-summary-state">${l.length?`${be("缺少","Missing")} <strong>${l.length}</strong> ${fr(l.length)} · ${be("建议准备已包含安全余量","Suggested amounts include a safety margin")}`:be("材料充足","Materials ready")}</span>`;let p=document.createElement("button");if(p.className="mwi-procurement-inline-button",p.type="button",p.disabled=d.length===0&&!i?.stages?.length,p.textContent=d.length?be("加入购物清单","Add to shopping list"):be("已在清单中","Already listed"),p.addEventListener("click",()=>{let f=new Set([...c.querySelectorAll(".mwi-procurement-chain-stage input:checked")].map(_=>_.dataset.action)),g=i?.stages?.length?ge.selectUpgradeChainMaterials(i,f):o,h=ge.addRequirementsToCart(g,a?"enhancing":"production");!a&&t.createPlansByDefault&&h.added>0&&ge.createPlan(e.actionHrid,e.count,g),br(h.added?be(`已加入 ${h.added} 种材料`,`Added ${h.added} ${fr(h.added)}`):be("没有新的缺料","No new shortages"))}),m.append(p),c.append(m),i?.stages?.length>1){let f=document.createElement("details");f.className="mwi-procurement-chain";let g=document.createElement("summary");g.textContent=`${be("升级链","Upgrade chain")} · ${i.stages.length} ${be("阶段","stages")}${i.cycle?` · ${be("检测到循环","cycle detected")}`:""}${i.truncated?` · ${be("已达到 25 层","25-level limit")}`:""}`;let h=document.createElement("div");h.className="mwi-procurement-chain-list";for(let _ of i.stages){let y=document.createElement("label");y.className="mwi-procurement-chain-stage",y.innerHTML=`<input type="checkbox" checked data-action="${oa(_.actionHrid)}"><span>${oa(_.name)}</span><span>×${ka(_.count)}</span>`,h.append(y)}f.append(g,h),c.append(f)}let b=a?null:e.panel.querySelector("#mwi-production-summary");b?b.append(c):(e.panel.querySelector('[class*="SkillActionDetail_actionContainer"]')??e.input.parentElement).insertAdjacentElement("afterend",c)}s(as,"renderProductionProcurement");function Mf(e){if(!e)return null;let t=Object.getOwnPropertyNames(e).find(a=>a.startsWith("__reactFiber")||a.startsWith("__reactInternalInstance"));return t?e[t]:null}s(Mf,"findReactFiber");function Tf(e,t=0,a=new Set){if(!e||typeof e!="object"||t>5||a.has(e))return null;a.add(e);for(let n of Object.values(e))if(Array.isArray(n)&&n.some(i=>i?.itemHrid&&Number(i?.count)>0))return n;for(let n of Object.values(e)){let i=Tf(n,t+1,a);if(i)return i}return null}s(Tf,"findObjectWithItemRequirements");function Ef(){return[...document.querySelectorAll('[class*="HousePanel_modalContent"]')].find(e=>e.getClientRects().length&&e.querySelector('[class*="HousePanel_itemRequirements"]'))}s(Ef,"findActiveHouseModal");function dy(e){let t=String(e??"").replaceAll(",","").trim(),a=Number(u.api.parseCompactNumber?.(t));if(Number.isFinite(a)&&a>=0)return a;let n=t.match(/-?\d+(?:\.\d+)?/),i=Number(n?.[0]);return Number.isFinite(i)&&i>=0?i:null}s(dy,"parseHouseCount");function my(e){let t=e?.querySelector("svg use"),a=t?.getAttribute("href")??t?.getAttribute("xlink:href")??"",n=a.includes("#")?a.split("#").at(-1):a;return ge.normalizeItemHrid(n)}s(my,"houseItemHrid");function fy(e){let t=e.querySelector('[class*="HousePanel_itemRequirements"]');if(!t)return null;let a=[...t.querySelectorAll(':scope > [class*="Item_itemContainer"]')];a.length||(a=[...t.querySelectorAll('[class*="HousePanel_itemRequirementCell"] [class*="Item_itemContainer"]')]);let n=[...t.querySelectorAll(':scope > [class*="HousePanel_inputCount"]')];if(!a.length||n.length<a.length)return null;let i=a.map((o,r)=>({itemHrid:my(o),enhancementLevel:0,count:dy(n[r]?.textContent)}));return i.every(o=>o.itemHrid&&o.count>0)?i:null}s(fy,"extractHouseRequirementsFromDom");function by(e){let t=Mf(e),a=null;for(let n=0;t&&n<12&&!a;n+=1)a=Tf({props:t.memoizedProps,state:t.memoizedState}),t=t.return;return a?.length&&a.every(n=>ge.normalizeItemHrid(n?.itemHrid)&&Number(n?.count)>0)?a:null}s(by,"extractHouseRequirementsFromFiber");function If(e=Ef()){if(!e)return;let t=fy(e)??by(e);if(!t?.length){e.querySelector(`#${dn}`)?.remove(),Ba="";return}let a=t.map(d=>{let m=ge.getEffectiveInventory(d.itemHrid,d.enhancementLevel),p=Math.ceil(Number(d.count)||0),b=ge.getCartItem(d.itemHrid,d.enhancementLevel)?.quantity??0;return{itemHrid:ge.normalizeItemHrid(d.itemHrid),enhancementLevel:Number(d.enhancementLevel)||0,name:ge.resolveItemName(d.itemHrid),suggested:p,owned:m,shortage:Math.max(0,p-m),addableShortage:Math.max(0,p-m-b),purchasable:ge.normalizeItemHrid(d.itemHrid)!=="/items/coin"}}),n=JSON.stringify(["housing",u.config.isZH,a.map(d=>[d.itemHrid,d.suggested,d.owned,d.shortage,d.addableShortage])]);if(n===Ba&&e.querySelector(`#${dn}`))return;document.getElementById(dn)?.remove(),Ba=n;let i=document.createElement("section");i.id=dn,i.className="mwi-procurement-summary-line";let o=a.filter(d=>d.purchasable&&d.shortage>0);i.innerHTML=`<span class="mwi-procurement-summary-state">${o.length?u.config.isZH?`房屋升级缺少 <strong>${o.length}</strong> 种材料`:`Missing <strong>${o.length}</strong> ${fr(o.length)} for the house upgrade`:be("房屋升级材料充足","House materials ready")}</span>`;let r=document.createElement("button");r.className="mwi-procurement-inline-button",r.type="button";let c=a.filter(d=>d.purchasable&&d.addableShortage>0);r.textContent=c.length?be("加入购物清单","Add to shopping list"):be("已在清单中","Already listed"),r.disabled=c.length===0,r.addEventListener("click",()=>{let d=ge.addRequirementsToCart(a,"housing");br(d.added?be(`已加入 ${d.added} 种材料`,`Added ${d.added} ${fr(d.added)}`):be("没有新的缺料","No new shortages")),Ba="",globalThis.queueMicrotask(()=>If(e))}),i.append(r),(e.querySelector('[class*="HousePanel_upgradeButton"]')??e.lastElementChild)?.insertAdjacentElement("beforebegin",i)}s(If,"renderHouseProcurement");function py(){let e=document.getElementById("root"),t=[],a=s(o=>{let r=o?.current??o;r&&typeof r=="object"&&!t.includes(r)&&t.push(r)},"pushFiber");a(e?._reactRootContainer?.current),a(e?._reactRootContainer?._internalRoot?.current);for(let o of[e,document.body])for(let r of Object.getOwnPropertyNames(o??{}))(r.startsWith("__reactContainer")||r.startsWith("__reactFiber")||r.startsWith("__reactInternalInstance"))&&a(o[r]);let n=new Set,i=null;for(;t.length&&n.size<5e4;){let o=t.pop();if(!o||n.has(o))continue;n.add(o);let r=o.stateNode;if(typeof r?.handleGoToMarketplace=="function"&&typeof r?.handleCloseMarketplaceModal=="function"&&typeof r?.setState=="function")return{host:r,fn:r.handleGoToMarketplace,floating:!0};let c=r?.handleGoToMarketplace??r?.goToMarketplace??r?.openMarketplace;!i&&typeof c=="function"&&(i={host:r,fn:c}),o.child&&t.push(o.child),o.sibling&&t.push(o.sibling)}return i}s(py,"resolveMarketplaceHandler");function zn(e,t=0){let a=py();if(!a)return br(be("暂时无法打开市场,请先手动打开市场","Could not open the market; open it manually first")),!1;xa=ge.normalizeItemHrid(e);let n=xa.replace(/^\/items\//,""),i=Number(t)||0,o=[[xa,i],[xa],[n,i],[n]],r=null;if(a.floating)try{let c=a.host.state?.navTarget==="marketplace"?"marketplace":"",l=s(()=>{a.host.setState({showMarketplaceModal:!0,marketViewOverrideData:{itemHrid:xa,enhancementLevel:i}})},"showFloatingModal");c?(a.host.setState({navTarget:"milking",showMarketplaceModal:!1},l),setTimeout(()=>{Bn&&xa===ge.normalizeItemHrid(e)&&a.host.state?.navTarget!=="marketplace"&&a.fn.call(a.host,xa,i)},240)):l(),Bn=!0,Yo=!0,mr=Date.now(),hi=!1,Qo=a.host,es=c,dr=new Map,window.matchMedia?.("(max-width:760px)").matches&&(Yt=!1,$t());for(let d of[80,240,600,1200])setTimeout(()=>Fn(!0),d);return!0}catch(c){r=c}for(let c of o)try{a.fn.call(a.host,...c),Bn=!0,Yo=!1,mr=Date.now(),hi=!1,Qo=null,es="",dr=new Map,window.matchMedia?.("(max-width:760px)").matches&&(Yt=!1,$t());for(let l of[80,240,600,1200])setTimeout(()=>Fn(!0),l);return!0}catch(l){r=l}return console.warn(u.config.isZH?"[MWITools] 无法在市场中打开购物清单物品。":"[MWITools] Failed to open the shopping-list item in the marketplace.",r),br(be("市场跳转失败","Marketplace navigation failed")),!1}s(zn,"openMarketplace"),u.api.openProcurementMarketplace=zn;function gy(){let e=[...document.querySelectorAll('[class*="MarketplacePanel_marketplacePanel"]')].filter(t=>t.getClientRects().length);return e.find(t=>t.closest('[class*="MainPanel_marketplaceModal__"]'))??e.at(0)}s(gy,"findMarketPanel");function hy(e){let t=e?.querySelector('[class*="MarketplacePanel_currentItem"] svg use, [class*="MarketplacePanel_itemContainer"] svg use'),n=(t?.getAttribute("href")??t?.getAttribute("xlink:href")??"").split("#").at(-1);return n?ge.normalizeItemHrid(n):""}s(hy,"detectMarketItem");function ns({preserveSession:e=!1}={}){if(document.getElementById(ln)?.remove(),document.querySelectorAll(".mwi-procurement-market-target").forEach(t=>t.classList.remove("mwi-procurement-market-target")),!e){let t=Qo,a=es;Bn=!1,Yo=!1,mr=0,hi=!1,Qo=null,es="",xa="",gi="",dr=new Map,a&&typeof t?.setState=="function"&&t.state?.navTarget!==a&&t.setState({navTarget:a})}}s(ns,"clearMarketUi");function _y(e,t=!1){if(document.querySelectorAll(".mwi-procurement-market-target").forEach(i=>i.classList.remove("mwi-procurement-market-target")),!ge.getSettings().locateEnabled)return;let a=new Set(ts().map(i=>i.itemHrid.split("/").at(-1))),n=null;for(let i of e.querySelectorAll("svg use")){let o=i.getAttribute("href")??i.getAttribute("xlink:href")??"",r=[...a].find(l=>o.includes(l));if(!r)continue;let c=i.closest('[class*="Item_itemContainer"]')??i.parentElement;c.classList.add("mwi-procurement-market-target"),xa&&xa.endsWith(r)&&!n&&(n=c)}t&&n&&n.scrollIntoView({behavior:"smooth",block:"center"})}s(_y,"highlightMarketItems");function yy(){if(ge.getSettings().autoPrefillEnabled)for(let e of document.querySelectorAll('[class*="MarketplacePanel_modalContent"]')){if(e.dataset.mwitoolsProcurementPrefilled)continue;let t=e.querySelector('[class*="MarketplacePanel_header"]')?.textContent??"";if(!/立即购买|购买挂牌|购买订单|buy|purchase/i.test(t))continue;let a=e.querySelector("svg use"),n=a?.getAttribute("href")??a?.getAttribute("xlink:href")??"",i=ge.normalizeItemHrid(n.split("#").at(-1)),o=ge.getCartItems().find(l=>l.itemHrid===i),r=e.querySelector('[class*="MarketplacePanel_quantityInputs"] input');if(!o?.quantity||!r)continue;let c=Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype,"value")?.set;c?.call(r,String(o.quantity)),c||(r.value=String(o.quantity)),r.dispatchEvent(new Event("input",{bubbles:!0})),r.dispatchEvent(new Event("change",{bubbles:!0})),e.dataset.mwitoolsProcurementPrefilled="true"}}s(yy,"prefillPurchaseModal");function wy(e){if(!Bn||!ge.getSettings().purchaseNavEnabled){document.getElementById(ln)?.remove();return}let t=ts();if(!t.length){document.getElementById(ln)?.remove();return}let a=hy(e),n=[...t.map(f=>({...f,done:!1})),...[...dr.values()].filter(f=>!t.some(g=>g.itemHrid===f.itemHrid))],i=document.getElementById(ln);i||(i=document.createElement("div"),i.id=ln,document.body.appendChild(i)),i.replaceChildren();let o=document.createElement("span");o.className="mwi-procurement-nav-progress",o.textContent=be(`待购 ${t.length}`,`${t.length} pending`);let r=document.createElement("div");r.className="mwi-procurement-nav-items";for(let f of n){let g=document.createElement("button");g.className="mwi-procurement-nav-chip",g.dataset.current=String(!f.done&&f.itemHrid===a),g.dataset.done=String(!!f.done);let h=ge.resolveItemName(f.itemHrid)||f.name,_=f.done?be("已完成","Completed"):mn(f.quantity);g.title=`${h} · ${_}`,g.setAttribute("aria-label",g.title),g.innerHTML=`<span class="mwi-procurement-nav-icon">${Sf({...f,name:h})}</span><b>${f.done?"✓":ka(f.quantity)}</b>`,f.done||g.addEventListener("click",()=>zn(f.itemHrid,f.enhancementLevel)),r.append(g)}let c=t.find(f=>f.itemHrid!==a)??t.at(0)??null,l=document.createElement("button");l.className="mwi-procurement-nav-next",l.textContent=be("下一项 ›","Next ›"),l.disabled=!c,l.addEventListener("click",()=>{c&&zn(c.itemHrid,c.enhancementLevel),gi=""}),i.append(o,r,l);let m=(e.closest('[class*="MainPanel_marketplaceModal__"]')??e.closest('[class*="Modal_modalContainer"]')??e).getBoundingClientRect(),p=i.offsetHeight||40,b=window.innerHeight-m.bottom;i.style.left=`${m.left}px`,i.style.width=`${m.width}px`,i.style.top=`${b>=p?m.bottom:Math.max(0,m.bottom-p)}px`,i.dataset.inside=String(b<p)}s(wy,"renderMarketNav");function Fn(e=!1){let t=gy();if(!t){let a=Bn&&!hi&&Date.now()-mr<kf;ns({preserveSession:a});return}if(Bn&&Yo&&!t.closest('[class*="MainPanel_marketplaceModal__"]')){let a=!hi&&Date.now()-mr<kf;if(ns({preserveSession:a}),a)return}t.closest('[class*="MainPanel_marketplaceModal__"]')&&(hi=!0),_y(t,e),yy(),wy(t)}s(Fn,"updateMarketUi");function vy(e,t){return e.code===t?.code&&e.ctrlKey===!!t.ctrl&&e.shiftKey===!!t.shift&&e.altKey===!!t.alt&&e.metaKey===!!t.meta}s(vy,"shortcutMatches");function xy(e){let t=ge.getSettings().nextItemShortcut;if(!gi||!t||!vy(e,t))return;let a=document.activeElement;if(a?.matches?.("input,textarea,select")||a?.isContentEditable)return;let i=ge.getCartItems().find(o=>o.itemHrid===gi&&o.quantity>0)??ts().at(0);gi="",i&&(e.preventDefault(),e.stopPropagation(),zn(i.itemHrid,i.enhancementLevel))}s(xy,"handleShortcut");function ky(e){let t=s(()=>{$t(),Ba="",as(),Fn()},"rerender");e.add(ge.on("cart:change",t)),e.add(ge.on("plan:change",t)),e.add(ge.on("settings:change",({id:a,value:n})=>{a==="badgesEnabled"&&!n&&pr(),a==="locateEnabled"&&!n&&document.querySelectorAll(".mwi-procurement-market-target").forEach(i=>i.classList.remove("mwi-procurement-market-target")),a==="purchaseNavEnabled"&&!n&&document.getElementById(ln)?.remove(),$t(),Ba=""})),e.add(ge.on("item:fulfilled",({item:a})=>{dr.set(ge.itemKey(a.itemHrid,a.enhancementLevel),{...a,done:!0});let n=ts().at(0);gi=n?.itemHrid??"",br(n?be(`${ge.resolveItemName(a.itemHrid)} 已补齐,下一项:${n.name}`,`${ge.resolveItemName(a.itemHrid)} fulfilled. Next: ${n.name}`):be("购物清单已全部补齐","Shopping list fulfilled")),Fn()})),e.add(ge.on("all:fulfilled",()=>{ns(),ge.getSettings().autoCollapseEnabled&&(Yt=!1,$t())}))}s(ky,"subscribeProcurement"),u.features.register({id:"procurementAssistant",setting:"procurementAssistant",scope:"character",initialize({scope:e,characterId:t}){u.api.openProcurementMarketplace=zn,G_(),ge.activeCharacterId!==t&&ge.loadCharacterData(t),ny(e),ky(e),as(),Fn(),e.interval(as,350),e.interval(Fn,900),e.event(document,"keydown",xy,!0),e.add(()=>{pr(),ns(),document.getElementById(nu)?.remove(),u.api.openProcurementMarketplace=null})}}),Object.assign(u.api,{renderProcurementShell:$t,renderProductionProcurement:as,updateProcurementMarketUi:Fn,openProcurementMarketplace:zn});var iu="mwitools-semi-auto-train-style",_i="mwi-train-controls",is="mwi-train-detail-modal",yi="mwi-train-active-indicator",Wt="mwi-train-window-wide",Sy='div[class*="SkillActionDetail_maxActionCountInput"] input',Cy='div[class*="SkillActionDetail_regularComponent"],div[class*="SkillActionDetail_skillActionDetail"]',Ay='[class*="SkillActionDetail_loadoutDropdown"]',Nf='[class*="SkillActionDetail_buttonsContainer"]',ru=6e4,Hf=["handleGoToActionTypeDetail","handleClickActionTypeDetail","handleGoToActionType","handleSelectActionType","handleGoToActionDetail","handleSelectAction","handleClickAction","handleGoToAction"],Y=null,rs=!1,jn=0;function My(e){return(globalThis.requestAnimationFrame??globalThis.setTimeout)(e)}s(My,"raf");function Ve(e,t){return u.config.isZH?e:t}s(Ve,"t");function gr(e){if(!e?.isConnected||e.hidden)return!1;let t=globalThis.getComputedStyle?.(e);return t?.display!=="none"&&t?.visibility!=="hidden"}s(gr,"visible");function Sa(e){document.querySelectorAll(".mwi-train-toast").forEach(a=>a.remove());let t=document.createElement("div");t.className="mwi-train-toast",t.textContent=e,document.body.appendChild(t),setTimeout(()=>t.remove(),2600)}s(Sa,"showToast");function Ty(){if(document.getElementById(iu))return;let e=document.createElement("style");e.id=iu,e.textContent=`
.${_i}{display:flex;min-width:0;max-width:100%;align-items:center;flex-wrap:wrap;justify-content:flex-end;gap:4px;margin-left:auto}
.mwi-train-button{height:24px;padding:0 8px;border:1px solid rgba(144,166,235,.55);border-radius:4px;background:#282844;color:#e8e8ef;font:600 11px/1 Roboto,Arial,sans-serif;cursor:pointer;white-space:nowrap}
.mwi-train-button:hover{filter:brightness(1.16)}
.mwi-train-button:disabled{cursor:default;filter:none;opacity:.58}
.mwi-train-button[data-kind="cancel"]{border-color:rgba(235,144,144,.55);background:#5c2a2a}
.mwi-train-button[data-kind="cart"]{border-color:rgba(245,180,70,.65);background:#43351f}
.mwi-train-cart-mode{height:20px;padding:0 6px;border:1px solid rgba(144,166,235,.45);border-radius:999px;background:#202033;color:#b8bfd8;font:600 10px/1 Roboto,Arial,sans-serif;cursor:pointer;white-space:nowrap}
.mwi-train-cart-mode[aria-pressed="true"]{border-color:rgba(245,180,70,.75);background:#49381d;color:#ffe2a0}
.${Wt}{box-sizing:border-box!important;width:min(480px,calc(100vw - 24px))!important;max-width:calc(100vw - 24px)!important;overflow-x:hidden!important}
.${Wt}>[class*="Modal_modalContent"]{box-sizing:border-box!important;width:100%!important;max-width:100%!important;min-width:0!important;overflow-x:hidden!important}
.${Wt} [class*="SkillActionDetail_regularComponent"],.${Wt} [class*="SkillActionDetail_skillActionDetail"]{box-sizing:border-box!important;width:100%!important;max-width:100%!important;min-width:0!important;overflow-x:hidden!important}
.${Wt} [class*="SkillActionDetail_regularComponent"]>*{box-sizing:border-box!important;max-width:100%!important;min-width:0!important}
.${Wt} [class*="SkillActionDetail_loadoutDropdown"]{min-width:0!important;flex-wrap:wrap!important}
.${Wt} [class*="SkillActionDetail_buttonsContainer"]{box-sizing:border-box!important;max-width:100%!important;min-width:0!important;flex-wrap:wrap!important}
.${Wt} .${_i}{flex:1 1 100%;width:100%;margin-left:0}
.mwi-train-shop-target{position:relative;z-index:1;outline:3px solid #ffd257!important;outline-offset:2px;box-shadow:0 0 0 2px rgba(255,210,87,.28),0 0 18px rgba(255,188,55,.8)!important;animation:mwi-train-shop-pulse 1.1s ease-in-out infinite alternate}
.${is}{position:fixed;inset:0;z-index:2147483100;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,.58)}
.${is}>section{box-sizing:border-box;width:min(470px,calc(100vw - 24px));max-height:80vh;overflow:auto;padding:16px 20px;border:1px solid #90a6eb;border-radius:8px;background:#1c1c2c;color:#e8e8ef;box-shadow:0 5px 20px rgba(0,0,0,.55);font-size:13px}
.mwi-train-detail-title{margin-bottom:9px;padding-bottom:6px;border-bottom:1px solid #444;font-size:15px;font-weight:700}
.mwi-train-detail-row{display:flex;align-items:center;gap:7px;padding:4px 0}.mwi-train-detail-row[data-current="true"]{color:#ffe27a}.mwi-train-detail-row>span:first-child{min-width:0;flex:1}.mwi-train-detail-count{flex:0 0 auto;color:#9fd9ff}.mwi-train-detail-terminal{color:#80df91}
.mwi-train-detail-close{margin-top:12px}
.mwi-train-toast{position:fixed;right:14px;top:14px;z-index:2147483200;max-width:min(380px,calc(100vw - 28px));padding:8px 11px;border:1px solid rgba(245,158,11,.55);border-radius:5px;background:rgba(15,18,28,.97);color:#eee;font-size:.75rem;box-shadow:0 8px 22px rgba(0,0,0,.4)}
#${yi}{position:fixed;top:max(8px,env(safe-area-inset-top));left:50%;z-index:2147483000;max-width:calc(100vw - 24px);transform:translateX(-50%);overflow:hidden;padding:7px 13px;border:1px solid rgba(245,180,70,.78);border-radius:999px;background:rgba(42,32,18,.96);color:#ffe8a3;font:700 12px/1.15 Roboto,Arial,sans-serif;text-overflow:ellipsis;white-space:nowrap;box-shadow:0 5px 18px rgba(0,0,0,.48),0 0 8px rgba(245,180,70,.22);cursor:pointer}
#${yi}:hover{filter:brightness(1.14)}
#${yi}:focus-visible{outline:2px solid #ffe27a;outline-offset:2px}
@keyframes mwi-train-shop-pulse{from{filter:brightness(1)}to{filter:brightness(1.28)}}
`,(document.head??document.documentElement).appendChild(e)}s(Ty,"addStyles");function Wn(){for(let e of document.querySelectorAll(Sy)){if(!gr(e))continue;let t=e.closest(Cy)??e.parentElement,a=u.api.resolveProductionAction?.(t);if(!(!t||!a))return{panel:t,input:e,actionHrid:a}}return null}s(Wn,"panelContext");function Ey(e){let t=u.state.initData_actionDetailMap?.[e];return u.api.getExpectedOutputs?.(t)?.[0]?.itemHrid??""}s(Ey,"outputForAction");function hr(e){return u.api.procurement?.resolveItemName?.(e)??e}s(hr,"localizedItem");function Iy(e,t){let a=hr(e.outputHrid);return e.kind==="shop"?`${t+1}. ${Ve("商店购买","Buy from shop")}「${a}」`:e.kind==="craft"?`${t+1}. ${Ve("制造","Craft")}「${a}」`:`${t+1}. ${Ve("升级","Upgrade")}「${hr(e.inputHrid)}」→「${a}」`}s(Iy,"localizeStep");function _r(e,t,a){let n=document.createElement("button");return n.type="button",n.className="mwi-train-button",n.dataset.kind=t,n.textContent=e,n.addEventListener("click",i=>{i.preventDefault(),i.stopPropagation(),a(i)}),n}s(_r,"createButton");function wi(){document.querySelector(`.${is}`)?.remove()}s(wi,"closeDetail");function Ny(e){return e?.closest?.('[class*="Modal_modalContainer"]')?.querySelector(':scope > [class*="Modal_modal"]:not([class*="Modal_modalContainer"])')??e?.closest?.('[class*="Modal_modal"]:not([class*="Modal_modalContainer"])')??null}s(Ny,"trainWindow");function Hy(e,t){Ny(e)?.classList.toggle(Wt,!!t)}s(Hy,"setTrainWindowWide");function yr(){let e=document.getElementById(yi);if(!Y){e?.remove();return}e||(e=document.createElement("button"),e.id=yi,e.type="button",e.addEventListener("click",()=>Vn(Ve("用户取消","Cancelled by user"))),document.body.appendChild(e));let t=u.config.isZH?`🚂 正在进行火车 (${Y.index+1}/${Y.steps.length}) · 点击退出`:`🚂 Train in progress (${Y.index+1}/${Y.steps.length}) · Click to cancel`;e.textContent!==t&&(e.textContent=t),e.title=Ve("点击退出当前火车","Click to cancel the current train")}s(yr,"renderActiveIndicator");function Dy(e,t=null){wi();let a=document.createElement("div");a.className=is;let n=document.createElement("section");n.setAttribute("role","dialog"),n.setAttribute("aria-modal","true");let i=document.createElement("div");i.className="mwi-train-detail-title",i.textContent=Ve("🚂 火车详情","🚂 Train details"),n.appendChild(i),e.steps.forEach((r,c)=>{let l=document.createElement("div");l.className="mwi-train-detail-row",l.dataset.current=String(c===t);let d=document.createElement("span");d.textContent=`${c===t?"▶ ":" "}${Iy(r,c)}`;let m=document.createElement("span");if(m.className="mwi-train-detail-count",m.textContent=Number.isFinite(r.count)?`× ${u.api.formatExactNumber?.(r.count)??r.count}`:Ve("保持当前次数","Keep current count"),l.append(d,m),c===e.steps.length-1){let p=document.createElement("span");p.className="mwi-train-detail-terminal",p.textContent=Ve("终点","Final"),l.appendChild(p)}n.appendChild(l)});let o=_r(Ve("关闭","Close"),"detail",wi);return o.classList.add("mwi-train-detail-close"),n.appendChild(o),a.appendChild(n),a.addEventListener("click",r=>{r.target===a&&wi()}),document.body.appendChild(a),a}s(Dy,"showTrainDetail");function Py(e){return Object.getOwnPropertyNames(e??{}).find(t=>t.startsWith("__reactFiber$")||t.startsWith("__reactInternalInstance$"))}s(Py,"fiberKey");function Df(){let e=globalThis.unsafeWindow??globalThis,t=[];e.mwi?.game&&t.push(e.mwi.game);let a=[],n=document.getElementById("root");for(let o of[n?._reactRootContainer?.current,n?._reactRootContainer?._internalRoot?.current])o&&a.push(o);for(let o of[n,document.querySelector('[class*="GamePage_gamePage"]'),document.body])for(let r of Object.getOwnPropertyNames(o??{}))(r.startsWith("__reactContainer$")||r.startsWith("__reactFiber$")||r.startsWith("__reactInternalInstance$"))&&a.push(o[r]?.current??o[r]);let i=new Set;for(;a.length&&i.size<5e4;){let o=a.pop();if(!o||i.has(o))continue;i.add(o);let r=o.stateNode;r&&(typeof r.setState=="function"||Hf.some(c=>typeof r[c]=="function"))&&!t.includes(r)&&t.push(r),o.return&&a.push(o.return),o.child&&a.push(o.child),o.sibling&&a.push(o.sibling)}return t}s(Df,"gameInstances");function Ly(e,t){return[...document.querySelectorAll('[class*="NavigationBar_navigationLink"]')].filter(a=>[...a.classList].some(n=>n.startsWith("NavigationBar_navigationLink__"))).find(a=>{let n=[...a.querySelectorAll("use")].map(i=>i.getAttribute("href")??i.getAttribute("xlink:href")??"").join(" ").toLowerCase();return e&&n.includes(`#${e.toLowerCase()}`)||t?.test(a.textContent??"")})}s(Ly,"nativeNavigationLink");function Pf(e){let t=u.state.initData_actionDetailMap?.[e],a=u.api.getExpectedOutputs?.(t)?.[0]?.itemHrid,n=String(a??"").split("/").at(-1),i=new Set([t?.name,u.config.isZH?u.data.ZHActionNames?.[e]:null].filter(Boolean).map(r=>String(r).replaceAll(/\s+/g," ").trim())),o=[...document.querySelectorAll('[class*="SkillAction_skillAction"]')].filter(gr).find(r=>{let c=[...r.querySelectorAll("use")].map(d=>d.getAttribute("href")??d.getAttribute("xlink:href")??""),l=String(r.querySelector('[class*="SkillAction_name"]')?.textContent??"").replaceAll(/\s+/g," ").trim();return n&&c.some(d=>d.endsWith(`#${n}`))||i.has(l)});return o?.click(),!!o}s(Pf,"clickActionCard");function Lf(e){let t=++jn,a=s(()=>{for(let o of Df())for(let r of Hf)if(typeof o[r]=="function")try{return o[r](e),!0}catch{}return!1},"invoke"),n=String(e).match(/^\/actions\/([^/]+)\//)?.[1];if(Pf(e))return!0;let i=[...document.querySelectorAll('[class*="NavigationBar_navigationLink"],button,a,[data-target]')].find(o=>{let r=[o.getAttribute("data-target"),o.getAttribute("href"),o.getAttribute("aria-label"),o.id,...[...o.querySelectorAll?.("use")??[]].map(c=>c.getAttribute("href")??c.getAttribute("xlink:href")??"")].filter(Boolean).join(" ").toLowerCase();return n&&r.includes(n)});if(i){i.click();let o=Y,r=Date.now()+ru,c=s(()=>{t===jn&&(o&&Y!==o||Pf(e)||a()||Date.now()<r&&setTimeout(c,100))},"open");return setTimeout(c,150),!0}return a()}s(Lf,"navigateToTrainAction");function ou(){document.querySelectorAll(".mwi-train-shop-target").forEach(e=>e.classList.remove("mwi-train-shop-target"))}s(ou,"clearTrainShopHighlight");function $y(e,t){let a=String(t.outputHrid??"").split("/").at(-1),n=hr(t.outputHrid);return[...e.querySelectorAll('[class*="ShopPanel_shopItem__"]')].filter(i=>[...i.classList].some(o=>o.startsWith("ShopPanel_shopItem__"))).filter(gr).find(i=>{let o=[...i.querySelectorAll("use")].map(c=>c.getAttribute("href")??c.getAttribute("xlink:href")??""),r=String(i.querySelector('[class*="ShopPanel_name"]')?.textContent??"").trim();return a&&o.some(c=>c.endsWith(`#${a}`))||r===n})}s($y,"findTrainShopItem");function $f(e){let t=++jn,a=Df().find(r=>typeof r.setState=="function"&&r.state?.navTarget!==void 0);if(!e?.shopHrid)return!1;let n=!1;if(a)try{a.state?.navTarget!=="shop"&&a.setState({navTarget:"shop"}),n=!0}catch{}if(!n){let r=Ly("shop",/^(商店|shop)$/i);if(!r)return!1;r.click(),n=!0}let i=Date.now()+ru,o=s(()=>{if(t!==jn||!Y||Date.now()>=i)return;let r=[...document.querySelectorAll('[class*="ShopPanel_shopPanel"]')].find(gr);if(!r){setTimeout(o,100);return}let c=Py(r),l=c?r[c]:null,d=null;for(;l;){if(l.stateNode?.state?.shopItemHrid!==void 0){d=l.stateNode;break}l=l.return}let m=Math.max(1,Math.ceil(Number(e.count)||1)),p=$y(r,e);if(p&&(ou(),p.classList.add("mwi-train-shop-target")),d)try{d.setState({shopItemHrid:e.shopHrid,shopItemQuantity:m,shopItemQuantityError:null});return}catch{}if(!p){setTimeout(o,100);return}p.click();let b=s(()=>{if(t!==jn||!Y||Date.now()>=i)return;let f=[...document.querySelectorAll('[class*="ShopPanel"] input[type="number"],[class*="Modal_modal"] input[type="number"]')].find(gr);if(f){Of(f,m);return}setTimeout(b,100)},"fill");b()},"open");return o(),n}s($f,"navigateToTrainShop");function Of(e,t){if(!e||!Number.isFinite(t)||t<=0)return!1;if(u.api.reactInputTriggerHack)return u.api.reactInputTriggerHack(e,String(t)),!0;let a=e.value;return e.value=String(t),e._valueTracker?.setValue(a),e.dispatchEvent(new Event("input",{bubbles:!0})),!0}s(Of,"setInput");function os(){Y&&(ou(),Y.queueButton&&Y.queueListener&&Y.queueButton.removeEventListener("click",Y.queueListener,!0),Y.queueButton=null,Y.queueListener=null,Y.inventoryUnsubscribe?.(),Y.inventoryUnsubscribe=null)}s(os,"clearTrainListeners");function su(){if(Y){if(clearTimeout(Y.timeout),Y.index>=Y.steps.length-1){Y.timeout=null;return}Y.timeout=setTimeout(()=>Vn(Ve("等待下一站超时","Timed out waiting for the next stop")),ru)}}s(su,"resetTrainTimeout");function Oy(e){return[...e.querySelectorAll(`${Nf} button,button`)].find(t=>/添加到队列|add to queue/i.test(t.textContent??""))}s(Oy,"queueButton");function uu(e){let t=Y?.steps?.[Y.index];if(!t)return null;let a=u.api.trainPlanning.parseTrainCount(e?.input?.value);return a&&(t.count=a),Number.isFinite(t.count)&&t.count>0?t.count:null}s(uu,"activeStepCount");function qy(){let e=Y?.steps?.[Y.index];return Number.isFinite(e?.count)&&e.count>0?e.count:null}s(qy,"plannedStepCount");function Ry(e){return Y?.allOutputHrids?.has(e)??!1}s(Ry,"hasPlannedProducer");function cu(e=Wn(),{usePlannedCount:t=!1}={}){if(!Y)return{ok:!1,added:0,skipped:0};let a=Y.index,n=Y.steps[a];if(n.kind==="shop")return Sa(Ve("商店站点无需加入市场购物车","Shop stops do not use the market cart")),{ok:!1,added:0,skipped:0};let i=t?qy()??uu(e):uu(e);if(!i)return Sa(Ve("请先填写本步次数","Enter the action count first")),{ok:!1,added:0,skipped:0};n.count=i,Y.cartStepIndexes.add(a);let o=[...Y.cartStepIndexes].map(l=>{let d=Y.steps[l];return u.api.procurement.calculateRequirements(d.actionHrid,d.count,{excludeActionHrids:new Set}).materials.filter(p=>!(p.itemHrid===d.inputHrid&&Ry(d.inputHrid)))}),r=u.api.procurement.aggregateRequirements(o),c=u.api.procurement.addRequirementsToCart(r,"train");return Sa(c.added?Ve(`本步缺料已加入购物车(${c.added} 种)`,`Added this stop's shortages (${c.added})`):Ve("本步没有新的缺料","No new shortages for this stop")),vi(),c}s(cu,"addCurrentTrainStepToCart");function qf(e=Wn()){if(!Y?.autoCartEnabled)return!1;let t=Y.index,a=Y.steps[t];return a?.kind==="shop"||Y.cartStepIndexes.has(t)||Y.autoCartPendingIndex===t||!e||e.actionHrid!==a?.actionHrid?!1:(Y.autoCartPendingIndex=t,setTimeout(()=>{if(!Y?.autoCartEnabled||Y.index!==t||Y.cartStepIndexes.has(t))return;let n=Wn();n?.actionHrid===a.actionHrid&&cu(n,{usePlannedCount:!0}),Y?.index===t&&(Y.autoCartPendingIndex=null)},150),!0)}s(qf,"maybeAutoAddCurrentStep");function Rf(e,t=Wn()){return Y?(Y.autoCartEnabled=!!e,Y.autoCartPendingIndex=null,Y.autoCartEnabled&&qf(t),vi(),!0):!1}s(Rf,"setTrainAutoCart");function lu(){if(Y){if(os(),Y.index>=Y.steps.length-1){jf();return}Y.index+=1,Y.readyActionHrid="",Y.autoCartPendingIndex=null,yr(),zf()}}s(lu,"advanceTrain");function Bf(e=Wn()){return Y?(uu(e),setTimeout(lu,0),!0):!1}s(Bf,"notifyCurrentTrainStepQueued");function By(e){if(!Y)return;let t=Y.steps[Y.index];if(t.kind==="shop"||e.actionHrid!==t.actionHrid)return;Y.readyActionHrid!==t.actionHrid&&(Y.readyActionHrid=t.actionHrid,Number.isFinite(t.count)&&t.count>0&&setTimeout(()=>{if(Y?.steps?.[Y.index]!==t)return;let n=Wn();n?.actionHrid===t.actionHrid&&Of(n.input,t.count)},100),Y.index===Y.steps.length-1&&!Y.arrivalShown&&(Y.arrivalShown=!0,Sa(Ve("火车已到终点,请手动加入队列","Final stop reached; add it to the queue manually"))));let a=Oy(e.panel);a&&a!==Y.queueButton&&(os(),Y.queueButton=a,Y.queueListener=()=>Bf(e),a.addEventListener("click",Y.queueListener,!0)),qf(e),su()}s(By,"wirePanel");function zy(e){if(!Y||Y.inventoryUnsubscribe)return;let t=u.api.procurement.getInventoryCount(e.outputHrid,0),a=t+Math.max(0,Number(e.count)||0);if(a<=t){lu();return}Y.inventoryUnsubscribe=u.api.procurement.on("inventory:change",()=>{Y&&(u.api.procurement.getInventoryCount(e.outputHrid,0)<a||lu())}),Sa(Ve(`购买 ${e.count} 个「${hr(e.outputHrid)}」后自动续站`,`Buy ${e.count} ${hr(e.outputHrid)} to continue automatically`)),su()}s(zy,"watchShopStep");function zf(){if(!Y)return;let e=Y.steps[Y.index];if(!(e.kind==="shop"?(Y.navigateShop??$f)(e):(Y.navigateAction??Lf)(e.actionHrid))){Vn(Ve("无法打开下一站","Could not open the next stop"));return}e.kind==="shop"&&zy(e),su(),vi()}s(zf,"goToCurrentStep");function Ff(e,t={}){if(Vn(""),e?.cycle||e?.truncated)return Sa(e.cycle?Ve("升级链存在循环,无法启动火车","The upgrade chain contains a cycle"):Ve("升级链过长,无法安全启动火车","The upgrade chain is too long to start safely")),!1;let a=(e?.steps??[]).map(c=>({...c})),n=Number(a.at(-1)?.count);if(!Number.isFinite(n)||n<=0)return Sa(Ve("请先填写生产数量,再开始火车","Enter a production count before starting the train")),!1;let i=a.some(c=>Number.isFinite(c.count)),o=a.findIndex(c=>!Number.isFinite(c.count)||c.count>0),r=i?a.slice(o<0?a.length:o):a;return r.length?(Y={...e,steps:r,index:0,cartStepIndexes:new Set,allOutputHrids:new Set(a.map(c=>c.outputHrid)),queueButton:null,queueListener:null,inventoryUnsubscribe:null,timeout:null,readyActionHrid:"",arrivalShown:!1,autoCartEnabled:!1,autoCartPendingIndex:null,navigateAction:t.navigateAction,navigateShop:t.navigateShop},yr(),zf(),!0):(Sa(Ve("库存已经足够,无需开火车","Inventory already covers this train")),!1)}s(Ff,"startTrain");function Vn(e=""){return Y?(jn+=1,os(),clearTimeout(Y.timeout),Y=null,wi(),yr(),vi(),e&&Sa(`${Ve("火车已停止:","Train stopped: ")}${e}`),!0):!1}s(Vn,"cancelTrain");function jf(){return Y?(jn+=1,os(),clearTimeout(Y.timeout),Y=null,wi(),yr(),vi(),Sa(Ve("火车已完成","Train completed")),!0):!1}s(jf,"finishTrain");function Fy(){return Y?{index:Y.index,steps:Y.steps.map(e=>({...e})),cartStepIndexes:[...Y.cartStepIndexes],autoCartEnabled:Y.autoCartEnabled}:null}s(Fy,"getTrainState");function Wf(e){let t=Ey(e.actionHrid);if(!t)return null;let a=u.api.trainPlanning.parseTrainCount(e.input.value);if(a)return{...u.api.trainPlanning.createTrainPlan(t,{[t]:a}),hasExplicitCount:!0};let n=u.api.trainPlanning.buildTrainChain(t);return{...n,hasExplicitCount:!1,steps:n.steps.map(i=>({...i,count:null}))}}s(Wf,"idlePlan");function jy(e){return e.panel.querySelector(Ay)??e.panel.querySelector(Nf)??e.input.parentElement}s(jy,"controlsHost");function Wy(e){let t=jy(e);if(!t)return;let a=Y?.steps?.[Y.index],n=Y&&(a?.kind==="shop"||e.actionHrid===a?.actionHrid),i=Y??Wf(e),o=n||!Y&&i?.steps?.length>=2,r=t.querySelector(`:scope > .${_i}`);if(Hy(e.panel,o),!o){r?.remove();return}let c=JSON.stringify([!!Y,Y?.index??-1,i.steps.length,a?.kind??"",Y?.autoCartEnabled??!1,i?.hasExplicitCount!==!1,e.actionHrid,u.config.isZH]);if(r?.dataset.signature!==c){if(r?.remove(),r=document.createElement("span"),r.className=_i,r.dataset.signature=c,r.appendChild(_r(Ve("📋 详情","📋 Details"),"detail",()=>Dy(i,Y?.index??null))),Y){let l=document.createElement("button");l.type="button",l.className="mwi-train-cart-mode",l.setAttribute("aria-pressed",String(Y.autoCartEnabled)),l.textContent=Y.autoCartEnabled?Ve("自动加购","Auto cart"):Ve("手动加购","Manual cart"),l.title=Ve("切换本步材料的自动或手动加购","Toggle automatic or manual step shopping"),l.addEventListener("click",m=>{m.preventDefault(),m.stopPropagation(),Rf(!Y?.autoCartEnabled,e)}),r.appendChild(l);let d=_r(a.kind==="shop"?Ve("本步无需加购","No cart items"):Ve("🛒 本步加购","🛒 Add step shortages"),"cart",()=>cu(e));d.disabled=a.kind==="shop",r.appendChild(d),r.appendChild(_r(`🛑 ${Ve("取消火车","Cancel train")} (${Y.index+1}/${Y.steps.length})`,"cancel",()=>Vn(Ve("用户取消","Cancelled by user"))))}else{let l=_r(`🚂 ${Ve("开始火车","Start train")} (${i.steps.length}${Ve("步"," stops")})`,"start",()=>Ff(Wf(e)));l.disabled=i.hasExplicitCount===!1,l.disabled&&(l.title=Ve("请先填写生产数量","Enter a production count first")),r.appendChild(l)}t.appendChild(r)}}s(Wy,"renderControls");function du(){rs=!1,yr();let e=Wn();document.querySelectorAll(`.${Wt}`).forEach(t=>{(!e?.panel||!t.contains(e.panel))&&t.classList.remove(Wt)}),document.querySelectorAll(`.${_i}`).forEach(t=>{e?.panel.contains(t)||t.remove()}),e&&(Y&&By(e),Wy(e))}s(du,"scan");function vi(){rs||(rs=!0,My(du))}s(vi,"scheduleScan");function Vy(){Vn(""),document.querySelectorAll(`.${_i}`).forEach(e=>e.remove()),document.querySelectorAll(".mwi-train-toast").forEach(e=>e.remove()),document.getElementById(yi)?.remove(),document.querySelectorAll(`.${Wt}`).forEach(e=>e.classList.remove(Wt)),ou(),document.getElementById(iu)?.remove(),wi(),rs=!1}s(Vy,"cleanup"),u.features.register({id:"semiAutoTrain",setting:"semiAutoTrain",scope:"character",dependsOn:["procurementAssistant"],initialize({scope:e}){Ty(),du();let t=new MutationObserver(vi);e.observer(t,document.body,{childList:!0,subtree:!0}),e.interval(du,500),e.add(Vy)}}),Object.assign(u.api,{semiAutoTrain:{start:Ff,cancel:Vn,finish:jf,getState:Fy,addCurrentStepToCart:cu,setAutoCart:Rf,notifyQueued:Bf,navigateToAction:Lf,navigateToShop:$f}});var Gy='[class*="RandomTask_name"]';function Vf(e){return String(e??"").replaceAll(/\s+/g," ").trim().toLocaleLowerCase()}s(Vf,"normalize");function Ca(e){let t=e?.id??e?.characterQuestID??e?.characterQuestId??e?.questID??e?.questId??e?.characterTaskID??e?.characterTaskId;return t==null?"":String(t)}s(Ca,"taskCardTaskId");function Zy(e){let t=Object.getOwnPropertyNames(e??{}).find(n=>n.startsWith("__reactFiber$")||n.startsWith("__reactInternalInstance$")),a=t?e[t]:null;for(let n=0;a&&n<24;n+=1){for(let i of[a.memoizedProps,a.pendingProps,a.stateNode?.props]){let o=i?.characterQuest??i?.quest??i?.task;if(o&&typeof o=="object")return o}a=a.return}return null}s(Zy,"fiberQuest");function Uy(e){let t=String(e?.querySelector(Gy)?.textContent??"");return Vf(t.split(/\s[-–]\s/).at(-1))}s(Uy,"cardActionLabel");function Ky(e){let a=String(e?.textContent??"").match(/(?:进度|progress)\s*:?\s*([\d,.]+)\s*\/\s*([\d,.]+)/i);if(!a)return null;let n=Number(a[1].replaceAll(",","")),i=Number(a[2].replaceAll(",",""));return Number.isFinite(n)&&Number.isFinite(i)?Math.max(0,i-n):null}s(Ky,"cardRemaining");function Xy(e){let t=u.state.initData_actionDetailMap?.[e];return new Set([t?.name,u.data.ZHActionNames?.[e],String(e??"").split("/").at(-1)?.replaceAll("_"," ")].map(Vf).filter(Boolean))}s(Xy,"actionLabels");function Jy(e,t,a,n){let i=Uy(e),o=Ky(e),r=t.map((c,l)=>({task:c,taskIndex:l,taskId:Ca(c),actionHrid:a(c)})).filter(({actionHrid:c})=>i?Xy(c).has(i):!1);if(o!==null){let c=r.filter(({task:l})=>Number(n(l))===o);c.length&&(r=c)}return r}s(Jy,"semanticCandidates");function za(e,t,{taskActionHrid:a,taskRemaining:n}){let i=Array.isArray(t)?t:[],o=new Map(i.map((l,d)=>[Ca(l),{task:l,taskIndex:d}]).filter(([l])=>l)),r=new Set,c=[...e].map((l,d)=>{let m=null,p=Zy(l),b=Ca(p);if(b&&o.has(b))m=o.get(b);else if(p){let f=i.indexOf(p);f>=0&&(m={task:p,taskIndex:f})}return Number.isInteger(m?.taskIndex)&&r.add(m.taskIndex),{card:l,originalIndex:d,resolved:m}});for(let l of c){if(l.resolved)continue;let d=Jy(l.card,i,a,n).filter(({taskIndex:p})=>!r.has(p));if(!d.length)continue;let m=String(l.card.dataset.mwitoolsTaskId??"");l.resolved=d.find(({taskId:p})=>p&&p===m)??d[0],r.add(l.resolved.taskIndex)}for(let l of c){if(l.resolved)continue;let d=i.map((p,b)=>({task:p,taskIndex:b})).filter(({taskIndex:p})=>!r.has(p)),m=d.find(({taskIndex:p})=>i.length===c.length&&p===l.originalIndex);l.resolved=m??(d.length===1?d[0]:null),l.resolved&&r.add(l.resolved.taskIndex)}return c.map(({card:l,originalIndex:d,resolved:m})=>{let p=m?.task??{},b=Number.isInteger(m?.taskIndex)?m.taskIndex:-1;return{card:l,task:p,taskId:Ca(p),taskIndex:b,originalIndex:d,actionHrid:a(p)}})}s(za,"resolveTaskCards");var mu="mwitools-task-style",wr='div[class*="RandomTask_randomTask"]:not([data-mwitools-task-mirror="true"])',vr=[],ct=null,xi=new Map,Fa=new Map,Vt=new Set,sa=new Set,ss=0,Qt=null,xr=[],Gn="",us=null,cs=null,ki="planet",ls=null,Gf=new Map,fn=new Set,Si=new Set,Zf=[{actionHrid:"/actions/combat/chimerical_den",sortIndex:56,monsters:new Set(["/monsters/alligator","/monsters/aquahorse","/monsters/butterjerry","/monsters/centaur_archer","/monsters/crab","/monsters/dodocamel","/monsters/eye","/monsters/eyes","/monsters/frog","/monsters/gobo_boomy","/monsters/gobo_shooty","/monsters/gobo_slashy","/monsters/gobo_smashy","/monsters/gobo_stabby","/monsters/griffin","/monsters/jackalope","/monsters/jungle_sprite","/monsters/manticore","/monsters/myconid","/monsters/nom_nom","/monsters/porcupine","/monsters/rat","/monsters/sea_snail","/monsters/skunk","/monsters/slimy","/monsters/snake","/monsters/swampy","/monsters/turtle","/monsters/veyes"])},{actionHrid:"/actions/combat/sinister_circus",sortIndex:57,monsters:new Set(["/monsters/acrobat","/monsters/black_bear","/monsters/deranged_jester","/monsters/elementalist","/monsters/flame_sorcerer","/monsters/gobo_boomy","/monsters/gobo_shooty","/monsters/gobo_slashy","/monsters/gobo_smashy","/monsters/gobo_stabby","/monsters/grizzly_bear","/monsters/gummy_bear","/monsters/ice_sorcerer","/monsters/juggler","/monsters/magician","/monsters/novice_sorcerer","/monsters/panda","/monsters/polar_bear","/monsters/rabid_rabbit","/monsters/vampire","/monsters/werewolf","/monsters/zombie","/monsters/zombie_bear"])},{actionHrid:"/actions/combat/enchanted_fortress",sortIndex:58,monsters:new Set(["/monsters/abyssal_imp","/monsters/black_bear","/monsters/elementalist","/monsters/enchanted_bishop","/monsters/enchanted_king","/monsters/enchanted_knight","/monsters/enchanted_pawn","/monsters/enchanted_queen","/monsters/enchanted_rook","/monsters/flame_sorcerer","/monsters/grizzly_bear","/monsters/ice_sorcerer","/monsters/magnetic_golem","/monsters/novice_sorcerer","/monsters/panda","/monsters/polar_bear","/monsters/soul_hunter","/monsters/stalactite_golem"])},{actionHrid:"/actions/combat/pirate_cove",sortIndex:59,monsters:new Set(["/monsters/abyssal_imp","/monsters/anchor_shark","/monsters/brine_marksman","/monsters/captain_fishhook","/monsters/eye","/monsters/eyes","/monsters/granite_golem","/monsters/infernal_warlock","/monsters/magnetic_golem","/monsters/soul_hunter","/monsters/squawker","/monsters/stalactite_golem","/monsters/the_kraken","/monsters/tidal_conjuror","/monsters/vampire","/monsters/veyes","/monsters/werewolf","/monsters/zombie"])}],Ci=[["milking","挤奶","Milking"],["foraging","采摘","Foraging"],["woodcutting","伐木","Woodcutting"],["cheesesmithing","奶酪锻造","Cheesesmithing"],["crafting","制作","Crafting"],["tailoring","缝纫","Tailoring"],["cooking","烹饪","Cooking"],["brewing","冲泡","Brewing"],["alchemy","炼金","Alchemy"],["enhancing","强化","Enhancing"],["combat","战斗","Combat"]].map(([e,t,a],n)=>({key:e,zh:t,en:a,order:n})),kr={key:"completed",zh:"已完成",en:"Completed",order:-1},Ai={key:"new",zh:"新任务",en:"New Tasks",order:-2};function Aa(e,t){return u.config.isZH?e:t}s(Aa,"t");function Sr(e){return Ca(e)}s(Sr,"taskId");function Yy(e){let t=Number(e);Qt=Number.isFinite(t)?{expiresAt:t,returning:!1}:null}s(Yy,"armTemporaryTaskReturn");function Qy(e=Date.now()){return!Qt||Qt.expiresAt<=e?(Qt=null,!1):(Qt.returning=!0,!0)}s(Qy,"resumeTemporaryTaskReturn");function e2(){Qt=null}s(e2,"cancelTemporaryTaskReturn");function Uf(e=Date.now()){return!Qt||Qt.expiresAt<=e?(Qt=null,!1):!0}s(Uf,"hasTemporaryTaskReturn");function t2(e=Date.now()){return!Uf(e)||!Qt.returning?!1:(Qt=null,!0)}s(t2,"consumeTemporaryTaskReturn");function Kf(){return`MWITools_task_combat_mode_v1:${globalThis.location?.hostname??"unknown"}:${String(u.state.currentCharacterId??"")}`}s(Kf,"combatModeStorageKey");function a2(){try{return localStorage.getItem(Kf())==="dungeon"?"dungeon":"planet"}catch{return"planet"}}s(a2,"readCombatGroupMode");function n2(e){try{localStorage.setItem(Kf(),e)}catch{}}s(n2,"writeCombatGroupMode");function fu(e,t){let a=String(t??"").split("#")[0];a.includes(`${e}_sprite`)&&a.endsWith(".svg")&&Gf.set(e,a)}s(fu,"rememberSpriteBase");function Xf(){try{document.querySelectorAll("svg use").forEach(e=>["items","actions","combat_monsters"].forEach(t=>fu(t,e.getAttribute("href")??e.getAttribute("xlink:href")))),globalThis.performance?.getEntriesByType?.("resource")?.forEach(e=>["items","actions","combat_monsters"].forEach(t=>fu(t,e.name)))}catch{}}s(Xf,"scanTaskSpriteBases");async function i2(){return ls||(ls=(async()=>{Xf();try{let e=await globalThis.fetch(new URL("/asset-manifest.json",globalThis.location?.origin).href);if(!e.ok)return;let t=await e.json();for(let a of Object.values(t?.files??{}))for(let n of["items","actions","combat_monsters"])fu(n,a)}catch{}})(),ls)}s(i2,"loadTaskSpriteManifest");function Jf(e,t){Xf();let a=Gf.get(e),n=String(t??"").split("/").at(-1);return a&&n?`${a}#${n}`:""}s(Jf,"taskSpriteHref");function Yf(){if(document.getElementById(mu))return;let e=document.createElement("style");e.id=mu,e.textContent=`
[class*="TasksPanel_taskList"] { grid-template-columns:repeat(auto-fill,minmax(min(100%,270px),1fr)) !important; gap:8px !important; }
[class*="RandomTask_randomTask"] { min-width:0 !important; }
[class*="RandomTask_randomTask"] > [class*="RandomTask_content"] { gap:2px !important; padding:8px !important; font-size:.8125rem; }
[class*="RandomTask_randomTask"] [class*="RandomTask_taskInfo"] { gap:2px !important; }
[class*="RandomTask_randomTask"] [class*="RandomTask_buttonsContainer"] { margin-top:2px !important; }
.mwi-task-profession-group { --mwi-task-group-accent:120,174,255; grid-column:1/-1; min-width:0; }
.mwi-task-profession-group[data-profession="new"] { --mwi-task-group-accent:230,181,79; }
.mwi-task-profession-group[data-profession="completed"] { --mwi-task-group-accent:90,200,149; }
.mwi-task-profession-group[data-profession="combat"] { --mwi-task-group-accent:238,115,103; }
.mwi-task-profession-header { display:flex; width:100%; min-height:32px; box-sizing:border-box; align-items:center; gap:7px; padding:5px 9px; border:0; border-left:3px solid rgba(var(--mwi-task-group-accent),.78); border-radius:0; background:transparent; color:var(--color-text-primary,#eee); font:inherit; text-align:left; cursor:pointer; }
.mwi-task-profession-header:hover { background:rgba(var(--mwi-task-group-accent),.075); }
.mwi-task-profession-header:focus-visible { outline:2px solid rgba(var(--mwi-task-group-accent),.72); outline-offset:-3px; }
.mwi-task-profession-title { font-weight:650; }
.mwi-task-profession-count { min-width:1.25rem; padding:0; border:0; background:transparent; color:rgba(var(--mwi-task-group-accent),.95); font-size:.68rem; font-weight:700; text-align:center; }
.mwi-task-profession-chevron { margin-left:auto; color:rgba(var(--mwi-task-group-accent),.9); transition:transform .15s ease; }
.mwi-task-profession-header[aria-expanded="false"] .mwi-task-profession-chevron { transform:rotate(-90deg); }
.mwi-task-profession-body { display:none; }
.mwi-task-combat-location { grid-column:1/-1; min-width:0; }
.mwi-task-combat-location-title { margin:0 0 6px; padding:4px 8px; border-left:2px solid rgba(255,255,255,.22); color:var(--color-text-secondary,#bbb); font-size:.7rem; font-weight:600; }
.mwi-task-combat-location-body { display:grid; grid-template-columns:repeat(auto-fill,minmax(min(100%,270px),1fr)); gap:8px; min-width:0; }
.mwi-task-dungeon-header { display:flex; width:100%; align-items:center; gap:8px; margin:0 0 6px; padding:5px 8px; border:0; border-left:2px solid rgba(183,126,255,.78); border-radius:0; background:transparent; color:var(--color-text-secondary,#bbb); font:inherit; font-size:.7rem; font-weight:650; text-align:left; cursor:pointer; }
.mwi-task-dungeon-header:hover { background:rgba(183,126,255,.07); }
.mwi-task-dungeon-header:focus-visible { outline:2px solid rgba(183,126,255,.62); outline-offset:-3px; }
.mwi-task-dungeon-header span:last-child { margin-left:auto; transition:transform .15s ease; }
.mwi-task-dungeon-header[aria-expanded="false"] span:last-child { transform:rotate(-90deg); }
.mwi-task-dungeon-body { display:grid; grid-template-columns:repeat(auto-fill,minmax(min(100%,270px),1fr)); gap:8px; min-width:0; }
.mwi-task-combat-mode { display:flex; width:max-content; gap:2px; margin:4px 0 8px; padding:2px; border:1px solid rgba(255,255,255,.12); border-radius:6px; background:rgba(0,0,0,.18); }
.mwi-task-combat-mode button { padding:3px 10px; border:0; border-radius:4px; background:transparent; color:var(--color-text-secondary,#bbb); font:inherit; font-size:.7rem; cursor:pointer; }
.mwi-task-combat-mode button[aria-pressed="true"] { background:${u.config.SCRIPT_COLOR_MAIN}; color:#18130a; font-weight:700; }
${wr}[data-mwitools-collapsed="true"] { display:none !important; }
${wr}[data-mwitools-dungeon-source="true"] { display:none !important; }
.mwi-task-bg { position:absolute; z-index:0; top:6%; left:68%; width:24%; height:88%; opacity:.3; pointer-events:none; }
.mwi-task-bg.mwi-task-bg--monster { left:42%; }
.mwi-task-bg.mwi-task-bg--dungeon { left:68%; }
.mwi-task-bg svg { width:100%; height:100%; }
${wr} > :not(.mwi-task-bg),[data-mwitools-task-mirror="true"] > :not(.mwi-task-bg) { position:relative; z-index:1; }
[data-mwitools-task-mirror="true"] { position:relative; }
.mwi-task-merge-toast { position:fixed; top:56px; right:14px; z-index:2147483200; max-width:min(360px,calc(100vw - 28px)); box-sizing:border-box; padding:8px 11px; border:1px solid rgba(102,205,135,.5); border-radius:6px; background:rgba(15,24,20,.97); box-shadow:0 8px 22px rgba(0,0,0,.4); color:#a8e5b7; font-size:.75rem; line-height:1.35; animation:mwi-task-toast-in .16s ease-out; }
@keyframes mwi-task-toast-in { from { opacity:0; transform:translateY(-6px); } to { opacity:1; transform:translateY(0); } }
`,(document.head??document.documentElement).appendChild(e)}s(Yf,"addStyles");function Mi(e,t){let a=[e],n=new Set;for(;a.length;){let i=a.shift();if(!(!i||typeof i!="object"||n.has(i))){n.add(i);for(let o of t)if(i[o]!==void 0&&i[o]!==null)return i[o];a.push(...Object.values(i).filter(o=>o&&typeof o=="object"))}}return null}s(Mi,"nestedValue");function kt(e){let t=Mi(e,["actionHrid","taskActionHrid","skillActionHrid"]);if(t)return t;let a=Mi(e,["monsterHrid"]);if(!a)return null;for(let n of Object.values(u.state.initData_actionDetailMap??{})){if(!String(n?.hrid).startsWith("/actions/combat/"))continue;if(JSON.stringify(n.combatZoneInfo?.fightInfo??{}).includes(`"${a}"`))return n.hrid}return null}s(kt,"taskActionHrid");function ds(e){let t=Number(Mi(e,["targetCount","requiredCount","goalCount","count"])),a=Number(Mi(e,["currentCount","completedCount","progressCount"]));return Number.isFinite(t)?Math.max(0,t-(Number.isFinite(a)?a:0)):0}s(ds,"taskRemaining");function r2(e){let t=Mi(e,["rewardItems","rewards","items"]);if(!Array.isArray(t)&&e?.itemRewardsJSON)try{t=JSON.parse(e.itemRewardsJSON)}catch{t=[]}return Array.isArray(t)?t.reduce((a,n)=>{let i=n.itemHrid??n.hrid,o=u.api.getNetSellPrice?.(i,n.enhancementLevel??0);return a+(Number(o)||0)*(Number(n.count)||0)},0):0}s(r2,"rewardValue");function o2(e){let t=kt(e);if(!t)return null;let a=ds(e),n=u.api.projectAction(t,a),i=r2(e);return{...n,rewardValue:i,taskProfit:n.totalProfit===null?null:n.totalProfit+i,taskProfitPerHour:n.totalProfit===null||!Number.isFinite(n.totalSeconds)||n.totalSeconds<=0?null:(n.totalProfit+i)/n.totalSeconds*3600}}s(o2,"taskProjection");function Qf(e){return Cr(e).split(/\s[-–]\s/).slice(1).join(" - ").trim()}s(Qf,"targetNameFromCard");function s2(e){if(!e)return"";let t=e.replace(/\s+\+\d+\s*$/,"").trim(),a=u.config.isZHInGameSetting?u.api.getItemEnNameFromZhName?.(t)??t:t;return u.state.itemEnNameToHridMap?.[a]?u.state.itemEnNameToHridMap[a]:Object.entries(u.data.ZHItemNames??{}).find(([,n])=>n===t)?.[0]??""}s(s2,"itemHridFromDisplayName");function u2(e){let t=Qf(e).replace(/\s+(?:图|Z)\s*\d+\s*$/i,"").trim(),a=u.api.getOthersFromZhName?.(t);return String(a).startsWith("/monsters/")?a:String(a).startsWith("/actions/combat/")?String(a).replace("/actions/combat/","/monsters/"):Object.values(u.state.initData_actionDetailMap??{}).find(i=>String(i?.hrid).startsWith("/actions/combat/")&&!i?.combatZoneInfo?.isDungeon&&(i?.name===t||u.data.ZHActionNames?.[i.hrid]===t))?.hrid?.replace("/actions/combat/","/monsters/")}s(u2,"namedMonsterHridForCard");function bu(e){if(typeof e!="string")return"";if(e.startsWith("/monsters/"))return e;if(!e.startsWith("/actions/combat/"))return"";let t=e.replace("/actions/combat/","/monsters/");return Object.hasOwn(u.data.ZHOthersDic??{},t)?t:""}s(bu,"normalizeMonsterHrid");function eb(e,t=new Set,a=new Set){if(!e||a.has(e))return t;if(typeof e=="string"){let n=bu(e);return n&&t.add(n),t}if(typeof e!="object")return t;a.add(e);for(let n of Object.values(e))eb(n,t,a);return t}s(eb,"fightMonsterHrids");function pu(e,t){let a=u2(e);if(a)return a;let n=bu(Mi(t,["monsterHrid","targetMonsterHrid","combatMonsterHrid"]));if(n)return n;let i=String(kt(t)??""),o=u.state.initData_actionDetailMap?.[i],r=[...eb(o?.combatZoneInfo?.fightInfo)];return r.length===1?r[0]:bu(i)||null}s(pu,"monsterHridForCard");function c2(e,t){if(tb(e,t).key==="combat"){let l=pu(e,t);if(l)return{kind:"combat_monsters",hrid:l}}let n=s2(Qf(e));if(n)return{kind:"items",hrid:n};let i=kt(t),o=u.state.initData_actionDetailMap?.[i],r=[...o?.outputItems??[],...o?.dropTable??[]],c=o?.upgradeItemHrid??(r.length===1?r[0]?.itemHrid??r[0]?.hrid:r.find(l=>Number(l?.dropRate??1)>=1)?.itemHrid);return c?{kind:"items",hrid:c}:i?{kind:"actions",hrid:i}:null}s(c2,"taskArtworkForCard");function l2(e,t){if(e.querySelector(".mwi-task-insight")?.remove(),!u.settings.get("taskIcons")){e.querySelector(":scope > .mwi-task-bg")?.remove();return}let a=c2(e,t),n=a?Jf(a.kind,a.hrid):"",i=e.querySelector(":scope > .mwi-task-bg");if(!n){i?.remove();return}if(i?.dataset.spriteHref===n)return;i?.remove();let o=document.createElement("div");o.className="mwi-task-bg",o.dataset.spriteHref=n;let r=document.createElementNS("http://www.w3.org/2000/svg","svg");r.setAttribute("width","100%"),r.setAttribute("height","100%"),r.setAttribute("aria-hidden","true");let c=document.createElementNS("http://www.w3.org/2000/svg","use");c.setAttribute("href",n),r.appendChild(c),o.appendChild(r),e.style.position="relative",e.appendChild(o)}s(l2,"decorateCard");function d2(e,t){e.querySelector(":scope > .mwi-task-bg--dungeon")?.remove();let a=e.querySelector(":scope > .mwi-task-bg");a?.classList.remove("mwi-task-bg--monster");let n=t?.isDungeon?t.actionHrid:"";if(!n)return;let i=Jf("actions",n);if(!i)return;a?.classList.add("mwi-task-bg--monster");let o=document.createElement("div");o.className="mwi-task-bg mwi-task-bg--dungeon",o.dataset.spriteHref=i;let r=document.createElementNS("http://www.w3.org/2000/svg","svg");r.setAttribute("width","100%"),r.setAttribute("height","100%"),r.setAttribute("aria-hidden","true");let c=document.createElementNS("http://www.w3.org/2000/svg","use");c.setAttribute("href",i),r.append(c),o.append(r),e.append(o)}s(d2,"addDungeonArtwork");function Cr(e){let t=e.querySelector('div[class*="RandomTask_name"]');return String(u.api.getOriTextFromElement?.(t??e)??t?.textContent??e.textContent??"").trim().split(`
`)[0].trim()}s(Cr,"visibleTaskTitle");function tb(e,t){let a=Cr(e);for(let l of Ci)if([l.zh,l.en].some(m=>a===m||a.startsWith(`${m} -`)||a.startsWith(`${m} –`)))return l;if(/^(击败|Defeat|Kill)(?:\s|[-–]|$)/i.test(a))return Ci.find(({key:l})=>l==="combat");let n=kt(t),i=u.state.initData_actionDetailMap?.[n]?.type,o=String(i??"").split("/").pop(),r=Ci.find(l=>l.key===o);if(r)return r;let c=a.split(/\s[-–]\s/)[0]?.trim()||Aa("任务","Tasks");return{key:`custom-${c.toLowerCase().replaceAll(/[^\p{L}\p{N}]+/gu,"-")}`,zh:c,en:c,order:Ci.length-.5}}s(tb,"professionForCard");function ab(e,t){if([...e.querySelectorAll("button")].some(i=>/claim|领取/i.test(i.textContent)))return!0;let n=String(u.api.getOriTextFromElement?.(e)??e.textContent??"").match(/(?:进度|progress)\s*[::]\s*([\d,.]+)\s*\/\s*([\d,.]+)/i);if(n){let i=Number(n[1].replaceAll(",","")),o=Number(n[2].replaceAll(",",""));if(Number.isFinite(i)&&Number.isFinite(o)&&o>0&&i>=o)return!0}return!1}s(ab,"isCompletedCard");function m2(e,t){let a=u.state.initData_actionDetailMap?.[kt(t)],n=Cr(e).replace(/^(击败|Defeat|Kill)\s*[-–]\s*/i,"").replace(/\s+(?:图|Z)\s*\d+\s*$/i,"").trim(),i=u.config.isZHInGameSetting?u.api.getOthersFromZhName?.(n)??u.api.getActionEnNameFromZhName?.(n):null,o=String(i??"").replace("/actions/combat/","/monsters/");for(let r of Object.values(u.state.initData_actionDetailMap??{})){if(!String(r?.hrid).startsWith("/actions/combat/"))continue;let c=u.data.ZHActionNames?.[r.hrid];if(r.name?.toLowerCase()===n.toLowerCase()||c===n||r.hrid===String(i).replace("/monsters/","/actions/combat/")||o&&JSON.stringify(r.combatZoneInfo?.fightInfo??{}).includes(`"${o}"`))return r}return String(a?.hrid??kt(t)).startsWith("/actions/combat/")?a:null}s(m2,"combatDetailForCard");function nb(e,t){let a=m2(e,t),n=u.state.initData_actionCategoryDetailMap??{};if(a?.combatZoneInfo?.isDungeon){let o=(u.config.isZH?u.data.ZHActionNames?.[a.hrid]:a.name)??a.name;return{key:`dungeon-${a.hrid}`,label:o?`${Aa("地牢","Dungeon")} · ${o}`:Aa("地牢","Dungeon"),order:1e4+Number(a.sortIndex??0)}}if(a?.category){let o=n[a.category],r=Object.values(u.state.initData_actionDetailMap??{}).find(d=>d?.category===a.category&&d?.combatZoneInfo?.fightInfo?.battlesPerBoss===10),c=(u.config.isZH?u.data.ZHActionNames?.[r?.hrid]:r?.name)??o?.name,l=Number(o?.sortIndex??9999);return{key:`zone-${a.category}`,label:`${Aa("地图","Zone")} ${l}${c?` · ${c}`:""}`,order:l}}let i=Cr(e).match(/(?:图|Z)\s*(\d+)\s*$/i)?.[1];return i?{key:`zone-index-${i}`,label:`${Aa("地图","Zone")} ${i}`,order:Number(i)}:{key:"non-dungeon-monsters",label:Aa("非地牢怪物","Non-dungeon monsters"),order:99999}}s(nb,"combatLocationForCard");function ib(e){let t=(u.config.isZH?u.data.ZHActionNames?.[e?.hrid]:e?.name)??e?.name;return{key:`dungeon-${e?.hrid}`,actionHrid:e?.hrid??"",isDungeon:!0,label:t||Aa("地牢","Dungeon"),order:Number(e?.sortIndex??9999)}}s(ib,"dungeonLocation");function rb(){return{key:"non-dungeon-monsters",actionHrid:"",isDungeon:!1,label:Aa("非地牢怪物","Non-dungeon monsters"),order:99999}}s(rb,"nonDungeonLocation");function ob(e,t){let a=kt(t),n=u.state.initData_actionDetailMap?.[a];if(n?.combatZoneInfo?.isDungeon)return[ib(n)];let i=pu(e,t);if(!i)return[rb()];let o=u.state.initData_actionDetailMap??{},r=new Set(Object.values(o).filter(l=>l?.combatZoneInfo?.isDungeon&&JSON.stringify(l.combatZoneInfo?.fightInfo??{}).includes(`"${i}"`)).map(l=>l.hrid));for(let l of Zf)l.monsters.has(i)&&r.add(l.actionHrid);let c=[...r].map(l=>{let d=Zf.find(m=>m.actionHrid===l);return o[l]??{hrid:l,sortIndex:d?.sortIndex,combatZoneInfo:{isDungeon:!0}}}).map(ib).sort((l,d)=>l.order-d.order||l.label.localeCompare(d.label));return c.length?c:[rb()]}s(ob,"dungeonLocationsForCard");function f2(e,t){let a=kt(e),n=u.state.initData_actionDetailMap?.[a];if(!n)return{originalIndex:t,unknown:!0};let i=u.state.initData_actionCategoryDetailMap?.[n.category];return{originalIndex:t,unknown:!1,category:Number(i?.sortIndex??9999),level:Number(n.levelRequirement?.level??0),action:Number(n.sortIndex??n.actionSortIndex??0),name:String(n.name??a),actionHrid:a}}s(f2,"actionSortInfo");function b2(e){if(!u.settings.get("taskTrainPlanner"))return null;let t=u.api.trainPlanning;if(!t)return null;let a=e.map((i,o)=>{let r=kt(i),c=u.state.initData_actionDetailMap?.[r],l=u.api.getExpectedOutputs?.(c)?.[0]?.itemHrid,d=l?t.trainChainRoot(l):"",m=l?t.trainChainDepth(l):-1;return{actionHrid:r,root:d&&m>=0?d:`task:${o}`,depth:Math.max(0,m),index:o}}),n=new Map;for(let i of a)n.has(i.root)||n.set(i.root,i.index);return new Map(a.map(i=>[i.actionHrid,{depth:i.depth,group:n.get(i.root)??i.index}]))}s(b2,"productionChains");function p2(e,t){let a=new Set(t.map(Sr).filter(Boolean)),n=new Map([...Fa].map(([r,c])=>[c,r])),i=[...sa].filter(r=>{let c=Fa.get(r);return!c||!a.has(c)}),o=new Set;e.forEach((r,c)=>{let l=Sr(t[c]),d=Number(r.dataset.mwitoolsOriginalIndex),m=Number.isInteger(d)?d:void 0;if(m===void 0&&l&&(m=n.get(l)),m===void 0&&i.length&&(m=i.shift()),m===void 0||o.has(m))for(m=0;o.has(m);)m+=1;o.add(m);let p=String(m);r.dataset.mwitoolsOriginalIndex!==p&&(r.dataset.mwitoolsOriginalIndex=p)})}s(p2,"assignStablePageSlots");function g2(e,t,a){if(!u.settings.settingsMap.taskNewBadge.isTrue){Vt.clear(),e.forEach((r,c)=>{let l=Sr(t[c]);if(!l)return;let d=Number(r.dataset.mwitoolsOriginalIndex??c),m=Fa.get(d);m&&m!==l&&sa.delete(d),Fa.set(d,l),r.dataset.mwitoolsTaskId!==l&&(r.dataset.mwitoolsTaskId=l)}),u.state.mwitoolsPageNewTaskIds=new Set;return}let n=new Set(u.api.getNewTaskIds?.()??[]),i=new Set;e.forEach((r,c)=>{let l=Sr(t[c]);if(!l)return;let d=Number(r.dataset.mwitoolsOriginalIndex??c);i.add(l);let m=Fa.get(d);a||!m?n.has(l)&&Vt.add(l):m&&m!==l?(sa.has(d)?xi.get(d)?.profession?.key===Ai.key&&Vt.add(l):n.has(l)&&Vt.add(l),sa.delete(d)):n.has(l)&&Vt.add(l),Fa.set(d,l),r.dataset.mwitoolsTaskId!==l&&(r.dataset.mwitoolsTaskId=l)});for(let r of[...Vt])i.has(r)||Vt.delete(r);u.state.mwitoolsPageNewTaskIds=new Set(Vt);let o=[...n].filter(r=>i.has(r));o.length&&u.api.acknowledgeNewTaskIds?.(o)}s(g2,"syncPageNewTasks");function h2(){if(!ct?.isConnected)return;let e=ct.parentElement?.querySelector(":scope > .mwi-task-combat-mode");if(!e){e=document.createElement("div"),e.className="mwi-task-combat-mode";for(let[t,a,n]of[["planet","星球","Planet"],["dungeon","地牢","Dungeon"]]){let i=document.createElement("button");i.type="button",i.dataset.mode=t,i.textContent=Aa(a,n),i.addEventListener("click",()=>{ki!==t&&(ki=t,n2(t),Gn="",Ma())}),e.appendChild(i)}ct.insertAdjacentElement("beforebegin",e)}for(let t of e.querySelectorAll("button[data-mode]")){let a=String(t.dataset.mode===ki);t.getAttribute("aria-pressed")!==a&&t.setAttribute("aria-pressed",a)}}s(h2,"ensureCombatModeToggle");function sb(){ct?.isConnected&&(ct.querySelectorAll(":scope > .mwi-task-profession-group,:scope > .mwi-task-combat-location").forEach(e=>e.remove()),ct.parentElement?.querySelector(":scope > .mwi-task-combat-mode")?.remove(),ct.querySelectorAll(`:scope > ${wr}`).forEach(e=>{e.style.order=e.dataset.mwitoolsOriginalOrder??"",delete e.dataset.mwitoolsOriginalOrder,delete e.dataset.mwitoolsOriginalIndex,delete e.dataset.mwitoolsTaskIndex,delete e.dataset.mwitoolsTaskId,delete e.dataset.mwitoolsCollapsed,delete e.dataset.mwitoolsProfession,delete e.dataset.mwitoolsLocation,delete e.dataset.mwitoolsDungeonSource,delete e.dataset.mwitoolsTaskId}))}s(sb,"ungroupCards");function _2(e,t){let a=b2(t),n=e.map((i,o)=>{let r=t[o],c=Number(i.dataset.mwitoolsOriginalIndex??o),l=ab(i,r),d=xi.get(c),m=Vt.has(Sr(r)),p=m?Ai:l?kr:tb(i,r),b=m?Ai:!l&&d&&!d.completed&&d.profession.key!==Ai.key?d.profession:p,f=b.key==="combat"?!l&&d?.profession.key==="combat"?d.location:nb(i,r):null,g=b.key==="combat"?!l&&d?.profession.key==="combat"?d.dungeonLocations??ob(i,r):ob(i,r):[],h=b.key==="combat"?pu(i,r)||kt(r)||`combat-slot-${c}`:"",_=b.key==="combat"&&!l&&d?.profession.key==="combat"?d.monsterGroupKey??h:h;return xi.set(c,{completed:l,profession:b,location:f,dungeonLocations:g,monsterGroupKey:_}),{card:i,task:r,profession:b,location:f,dungeonLocations:g,monsterGroupKey:_,info:f2(r,c),depth:a?.get(kt(r))?.depth??0,chain:a?.get(kt(r))?.group??o}});return n.sort((i,o)=>{let r=i.profession.order-o.profession.order;return r||(a?u.settings.get("taskAutoSort")?i.info.unknown&&o.info.unknown?i.info.originalIndex-o.info.originalIndex:i.info.unknown?1:o.info.unknown?-1:i.info.category-o.info.category||i.chain-o.chain||i.depth-o.depth||i.info.level-o.info.level||i.info.action-o.info.action||i.info.name.localeCompare(o.info.name)||i.info.originalIndex-o.info.originalIndex:i.chain-o.chain||i.depth-o.depth||i.info.originalIndex-o.info.originalIndex:i.info.originalIndex-o.info.originalIndex)}),n}s(_2,"orderedRows");function y2(e,t){let a=fn.has(t.key),n=e.querySelector(".mwi-task-profession-header"),i=e.querySelector(".mwi-task-profession-body"),o=String(!a);n.getAttribute("aria-expanded")!==o&&n.setAttribute("aria-expanded",o),i.hidden!==a&&(i.hidden=a)}s(y2,"updateGroupCollapsedState");function w2(e,t){let a=e.querySelector(`:scope > .mwi-task-profession-group[data-profession="${t.key}"]`);if(a)return a;a=document.createElement("section"),a.className="mwi-task-profession-group",a.dataset.profession=t.key;let n=document.createElement("button");n.type="button",n.className="mwi-task-profession-header";let i=document.createElement("span");i.className="mwi-task-profession-title";let o=document.createElement("span");o.className="mwi-task-profession-count";let r=document.createElement("span");r.className="mwi-task-profession-chevron",r.textContent="▾",n.append(i,o,r);let c=document.createElement("div");return c.className="mwi-task-profession-body",n.addEventListener("click",()=>{fn.has(t.key)?fn.delete(t.key):fn.add(t.key),Ma()}),a.append(n,c),a}s(w2,"ensureProfessionGroup");function v2(e,t){let a=e.cloneNode(!0);return a.dataset.mwitoolsTaskMirror="true",a.removeAttribute("id"),a.style.order="",a.style.display="",delete a.dataset.mwitoolsDungeonSource,delete a.dataset.mwitoolsCollapsed,d2(a,t),a.querySelectorAll("[id]").forEach(n=>n.removeAttribute("id")),a.addEventListener("click",n=>{n.preventDefault(),n.stopPropagation();let i=n.target.closest("button");if(i){let o=[...a.querySelectorAll("button")];[...e.querySelectorAll("button")][o.indexOf(i)]?.click();return}e.click()}),a}s(v2,"mirrorTaskCard");function ub(e){let t=new Map;for(let a of e){let n=a.monsterGroupKey||`combat-slot-${a.info.originalIndex}`,i=t.get(n);(i===void 0||a.info.originalIndex<i)&&t.set(n,a.info.originalIndex)}return[...e].sort((a,n)=>{let i=a.monsterGroupKey||`combat-slot-${a.info.originalIndex}`,o=n.monsterGroupKey||`combat-slot-${n.info.originalIndex}`;return t.get(i)-t.get(o)||a.info.originalIndex-n.info.originalIndex})}s(ub,"groupMatchingMonsters");function x2(e,t,a){let n=new Map;for(let r of t){r.card.dataset.mwitoolsDungeonSource="true";for(let c of r.dungeonLocations??[])n.has(c.key)||n.set(c.key,{location:c,rows:[]}),n.get(c.key).rows.push(r)}let i=[...n.values()].sort((r,c)=>r.location.order-c.location.order||r.location.label.localeCompare(c.location.label)),o=new Set;for(let{location:r,rows:c}of i){let l=ub(c);o.add(r.key);let d=e.querySelector(`:scope > .mwi-task-combat-location[data-location="${r.key}"]`);if(!d||d.dataset.mode!=="dungeon"){d?.remove(),d=document.createElement("section"),d.className="mwi-task-combat-location",d.dataset.location=r.key,d.dataset.mode="dungeon";let f=document.createElement("button");f.type="button",f.className="mwi-task-dungeon-header";let g=document.createElement("span");g.className="mwi-task-combat-location-title-text";let h=document.createElement("span");h.textContent="▾",f.append(g,h);let _=document.createElement("div");_.className="mwi-task-dungeon-body",f.addEventListener("click",()=>{Si.has(r.key)?Si.delete(r.key):Si.add(r.key),Gn="",Ma()}),d.append(f,_),e.appendChild(d)}let m=Si.has(r.key);d.querySelector(".mwi-task-dungeon-header").setAttribute("aria-expanded",String(!m)),d.querySelector(".mwi-task-combat-location-title-text").textContent=`${r.label} (${l.length})`;let b=d.querySelector(".mwi-task-dungeon-body");b.hidden=m,b.replaceChildren(...l.map(({card:f})=>v2(f,r))),d.hidden=fn.has("combat"),d.style.order=String(a.value++)}return o}s(x2,"renderDungeonCombatGroups");function k2(e,t,a){if(ki==="dungeon")return x2(e,t,a);for(let r of t)delete r.card.dataset.mwitoolsDungeonSource;let n=new Map;for(let r of t){let c=r.location??nb(r.card,r.task);n.has(c.key)||n.set(c.key,{location:c,rows:[]}),n.get(c.key).rows.push(r)}let i=[...n.values()].sort((r,c)=>r.location.order-c.location.order||r.location.label.localeCompare(c.location.label)),o=new Set;for(let{location:r,rows:c}of i){let l=ub(c);o.add(r.key);let d=e.querySelector(`:scope > .mwi-task-combat-location[data-location="${r.key}"]`);if(!d||d.dataset.mode==="dungeon"){d?.remove(),d=document.createElement("section"),d.className="mwi-task-combat-location",d.dataset.location=r.key,d.dataset.mode="planet";let m=document.createElement("h4");m.className="mwi-task-combat-location-title",d.append(m),e.appendChild(d)}d.querySelector(".mwi-task-combat-location-title").textContent=`${r.label} (${l.length})`,d.style.order=String(a.value++);for(let m of l)m.card.style.order=String(a.value++),m.card.dataset.mwitoolsLocation=r.key}return o}s(k2,"renderCombatGroups");function S2(e,t){for(let a of e)a.card.style.order=String(t.value++)}s(S2,"renderRegularGroup");function C2(e,t){if(!ct)return;for(let l of e)delete l.dataset.mwitoolsDungeonSource;document.querySelectorAll(".mwi-task-toolbar").forEach(l=>l.remove());let a=_2(e,t),n=a.map(l=>l.profession).filter((l,d,m)=>![Ai,kr,...Ci].some(p=>p.key===l.key)&&m.findIndex(p=>p.key===l.key)===d),i=[Ai,kr,...Ci,...n],o=new Set([kr.key]),r=new Set,c={value:1};for(let l of i){let d=a.filter(_=>_.profession.key===l.key);if(!d.length&&l.key!==kr.key)continue;o.add(l.key);let m=w2(ct,l);m.isConnected||ct.appendChild(m);let p=u.config.isZH?l.zh:l.en,b=m.querySelector(".mwi-task-profession-title");b.textContent!==p&&(b.textContent=p);let f=String(d.length),g=m.querySelector(".mwi-task-profession-count");g.textContent!==f&&(g.textContent=f);let h=String(c.value++);m.style.order!==h&&(m.style.order=h),y2(m,l);for(let _ of d){_.card.dataset.mwitoolsProfession!==l.key&&(_.card.dataset.mwitoolsProfession=l.key);let y=String(fn.has(l.key));_.card.dataset.mwitoolsCollapsed!==y&&(_.card.dataset.mwitoolsCollapsed=y)}if(l.key==="combat")for(let _ of k2(ct,d,c))r.add(_);else S2(d,c)}ct.querySelectorAll(":scope > .mwi-task-profession-group").forEach(l=>{o.has(l.dataset.profession)||l.remove()}),ct.querySelectorAll(":scope > .mwi-task-combat-location").forEach(l=>{r.has(l.dataset.location)||l.remove()})}s(C2,"groupCards");function A2(e,t){e.forEach((a,n)=>{if(a.dataset.mwitoolsMergeWired)return;let i=[...a.querySelectorAll("button")].find(o=>/go|前往|开始/i.test(o.textContent));i&&(a.dataset.mwitoolsMergeWired="true",i.addEventListener("click",()=>{if(!u.settings.get("taskMergeActions"))return;let o=kt(t[n]),r=t.filter(c=>kt(c)===o);u.state.pendingMergedTask={actionHrid:o,count:r.reduce((c,l)=>c+ds(l),0),taskCount:r.length}}))})}s(A2,"wireMergeButtons");function M2(e){e.forEach((t,a)=>{t.dataset.mwitoolsResetWired||![...t.querySelectorAll("button")].some(i=>/reset|重置/i.test(i.textContent))||(t.dataset.mwitoolsResetWired="true",t.addEventListener("click",i=>{let o=i.target?.closest?.("button");if(!o||!t.contains(o)||!/reset|重置/i.test(o.textContent))return;ss=Date.now()+1e4;let r=Number(t.dataset.mwitoolsOriginalIndex??a);sa.add(r),setTimeout(()=>sa.delete(r),3e4)?.unref?.()},!0))})}s(M2,"wireResetButtons");function gu(){let e=u.state.pendingMergedTask;if(!e)return;let t=document.querySelector('div[class*="SkillActionDetail_maxActionCountInput"] input');if(!t)return;let a=t.closest('div[class*="SkillActionDetail_regularComponent"]')??t.closest('div[class*="Modal_modalContainer"]')?.querySelector('div[class*="SkillActionDetail_regularComponent"]')??t.parentElement,n=u.api.getOriTextFromElement?.(a.querySelector('div[class*="SkillActionDetail_name"]')),i=u.api.getActionHridFromItemName?.(n);if(u.config.isZHInGameSetting&&!i&&(i=u.api.getActionHridFromItemName?.(u.api.getActionEnNameFromZhName?.(n))),i!==e.actionHrid)return;u.api.reactInputTriggerHack?.(t,e.count),document.querySelectorAll(".mwi-task-merged-note,.mwi-task-merge-toast").forEach(c=>c.remove());let o=document.createElement("div");o.className="mwi-task-merge-toast",o.setAttribute("role","status"),o.textContent=Aa(`已合并 ${e.taskCount} 个同动作任务,共 ${u.api.formatExactNumber(e.count)} 次。`,`Merged ${e.taskCount} matching tasks for ${u.api.formatExactNumber(e.count)} actions.`),document.body.append(o),setTimeout(()=>o.remove(),3200)?.unref?.(),u.state.pendingMergedTask=null}s(gu,"applyPendingMerge");function T2(e,t=Date.now()){return t<ss?!1:e.some(a=>(a.target?.nodeType===1?a.target:a.target?.parentElement)?.closest?.('[class*="TasksPanel_taskList"]')?!0:[...a.addedNodes??[],...a.removedNodes??[]].filter(i=>i?.nodeType===1).some(i=>i.matches?.('[class*="TasksPanel_taskList"]')||i.querySelector?.('[class*="TasksPanel_taskList"]')))}s(T2,"shouldRenderTaskMutations");function cb(e,t){let a=[u.config.isZH,u.settings.get("taskAutoSort"),u.settings.get("taskIcons"),ki,[...Vt].sort().join(","),[...fn].sort().join(","),[...Si].sort().join(",")],n=e.map((i,o)=>{let r=t[o]??{};return[kt(r)??"",Cr(i),String(i.textContent??"").match(/(?:进度|progress)\s*[::]\s*[\d,.]+\s*\/\s*[\d,.]+/i)?.[0]??"",ab(i,r)?"1":"0",i.dataset.mwitoolsProfession??"",i.dataset.mwitoolsCollapsed??""].join("")});return[...a,...n].join("")}s(cb,"taskRenderSignature");function Ma(){let e=[...document.querySelectorAll(wr)];if(!e.length){gu(),ct&&!ct.isConnected&&(vr=[],ct=null,xr=[],Gn="",us=null,cs=null,!Uf()&&!sa.size&&(xi=new Map,Fa=new Map,Vt=new Set,sa=new Set,u.state.mwitoolsPageNewTaskIds=new Set));return}let t=e[0]?.parentElement??null,a=!ct?.isConnected||t&&t!==ct,n=a&&t2(),i=a&&sa.size>0;a&&(sb(),vr=[],!n&&!i&&(xi=new Map,Fa=new Map,Vt=new Set,sa=new Set),ki=a2(),ct=t),e=e.filter(b=>b.parentElement===ct);let o=u.state.characterQuests??[],r=za(e,o,{taskActionHrid:kt,taskRemaining:ds}),c=r.map(({task:b})=>b);p2(e,c),g2(e,c,a&&!n&&!i),h2();let l=cb(e,c),d=e.length===xr.length&&e.every((b,f)=>b===xr[f]),m=u.state.initData_actionDetailMap,p=u.state.initData_actionCategoryDetailMap;if(!a&&d&&m===us&&p===cs&&l===Gn){gu();return}vr=[...e],vr.forEach((b,f)=>{"mwitoolsOriginalOrder"in b.dataset||(b.dataset.mwitoolsOriginalOrder=b.style.order);let g=String(r[f]?.taskIndex??-1);b.dataset.mwitoolsTaskIndex!==g&&(b.dataset.mwitoolsTaskIndex=g),"mwitoolsLocation"in b.dataset&&delete b.dataset.mwitoolsLocation}),e.forEach((b,f)=>l2(b,c[f])),A2(e,c),M2(e),C2(e,c),gu(),xr=[...e],us=m,cs=p,Gn=cb(e,c)}s(Ma,"renderTasks");function E2(){sb(),document.querySelectorAll(".mwi-task-insight,.mwi-task-toolbar,.mwi-task-profession-group,.mwi-task-bg,.mwi-task-merged-note,.mwi-task-merge-toast").forEach(e=>e.remove()),document.querySelectorAll("[data-mwitools-merge-wired],[data-mwitools-reset-wired]").forEach(e=>{delete e.dataset.mwitoolsMergeWired,delete e.dataset.mwitoolsResetWired}),document.getElementById(mu)?.remove(),vr=[],ct=null,xi=new Map,Fa=new Map,Vt=new Set,sa=new Set,ss=0,Qt=null,u.state.mwitoolsPageNewTaskIds=new Set,xr=[],Gn="",us=null,cs=null,fn.clear(),Si.clear()}s(E2,"cleanupTasks"),u.features.register({id:"taskInsights",setting:"taskInsights",scope:"character",initialize({scope:e}){Yf(),Ma(),i2().then(()=>{Gn="",Ma()});let t=!1,a=s(()=>{t||(t=!0,(globalThis.requestAnimationFrame??globalThis.setTimeout)(()=>{t=!1,Ma()}))},"scheduleRender"),n=new MutationObserver(i=>{T2(i)&&a()});e.observer(n,document.body,{childList:!0,characterData:!0,subtree:!0}),e.add(u.onMessage("quests_updated",()=>{ss=0,a()})),e.add(()=>{t=!1}),e.add(E2)}});for(let e of["taskMaterials","taskQueueProgress","taskAutoSort","taskIcons","taskStatistics","taskClaimCollector","taskMergeActions"])u.features.register({id:e,setting:e,scope:"character",dependsOn:["taskInsights"],initialize(){return Ma(),Ma}});Object.assign(u.api,{addTaskStyles:Yf,armTemporaryTaskReturn:Yy,cancelTemporaryTaskReturn:e2,resumeTemporaryTaskReturn:Qy,taskActionHrid:kt,taskRemaining:ds,taskProjection:o2,renderTasks:Ma,restoreTaskOrder:Ma});var hu="mwitools-task-train-planner-style",ja="mwi-task-train-planner",ms='div[class*="RandomTask_randomTask"]:not([data-mwitools-task-mirror="true"])',I2='[class*="RandomTask_action"]';function Ti(e,t){return u.config.isZH?e:t}s(Ti,"t");function N2(){if(document.getElementById(hu))return;let e=document.createElement("style");e.id=hu,e.textContent=`
.${ja}{flex:0 0 auto;margin-right:4px;white-space:nowrap}
button.${ja}{height:28px;padding:0 8px;border:1px solid rgba(144,166,235,.55);border-radius:4px;background:#282844;color:#e8e8ef;font:600 11px/1 Roboto,Arial,sans-serif;cursor:pointer}
button.${ja}:hover{filter:brightness(1.16)}
span.${ja}{padding:0 8px;color:#8f96ad;font:italic 11px/28px Roboto,Arial,sans-serif;user-select:none}
`,(document.head??document.documentElement).appendChild(e)}s(N2,"addStyles");function H2(e){let t=u.state.initData_actionDetailMap?.[e];return u.api.getExpectedOutputs?.(t)?.[0]?.itemHrid??""}s(H2,"primaryOutput");function lb(e){return u.api.taskActionHrid?.(e)??null}s(lb,"taskActionHrid");function db(e){return u.api.taskRemaining?.(e)??0}s(db,"taskRemaining");function _u(e=[]){let t=new Map,a=e.map((n,i)=>{let o=lb(n),r=db(n),c=o?H2(o):"",l=c?u.api.trainPlanning.trainChainDepth(c):-1,d=l>=0?u.api.trainPlanning.trainChainRoot(c):"",m={index:i,task:n,actionHrid:o,outputHrid:c,remaining:r,depth:l,root:d,state:r<=0?"done":l<0?"isolated":"planned"};return m.state==="planned"&&(t.has(d)||t.set(d,[]),t.get(d).push(m)),m});for(let n of t.values()){n.sort((o,r)=>r.depth-o.depth||o.index-r.index);let i=u.api.trainPlanning.buildTrainChain(n[0].outputHrid);if(!i.steps.length||i.cycle||i.truncated){for(let o of n)o.state="isolated";t.delete(n[0].root)}else n[0].state="top"}return{entries:a,groups:t}}s(_u,"collectTaskTrainGroups");function mb(e,t=u.state.characterQuests??[]){let{groups:a}=_u(t),n=a.get(e);if(!n?.length)return null;let i={};for(let o of n)i[o.outputHrid]=(i[o.outputHrid]??0)+o.remaining;return u.api.trainPlanning.createTrainPlan(n[0].outputHrid,i)}s(mb,"createTaskTrainPlan");function yu(e,t){let a=[...e.querySelectorAll("button")].find(n=>/^(前往|go)$/i.test(n.textContent?.trim()??""));a?e.insertBefore(t,a):e.appendChild(t)}s(yu,"insertBeforeNavigation");function D2(e,t){let a=document.createElement("button");return a.type="button",a.className=ja,a.dataset.signature=t,a.textContent=Ti("🚂 规划火车","🚂 Plan train"),a.title=Ti("合并同一升级链全部未完成任务并按最新库存重新规划","Combine all unfinished tasks in this upgrade chain and recalculate from current inventory"),a.addEventListener("click",n=>{n.preventDefault(),n.stopPropagation();let i=mb(e.root);i?.steps?.length&&u.api.semiAutoTrain?.start(i)}),a}s(D2,"plannerButton");function fb(e,t,a){let n=document.createElement("span");return n.className=ja,n.dataset.signature=a,n.textContent=e,n.title=t,n}s(fb,"plannerLabel");function bb(){let e=[...document.querySelectorAll(ms)];if(!e.length)return;let t=u.state.characterQuests??[],{entries:a}=_u(t),n=za(e,t,{taskActionHrid:lb,taskRemaining:db});for(let{card:i,taskIndex:o}of n){let r=a[o],c=i.querySelector(I2);if(!c)continue;let l=r?[r.state,r.root,r.remaining,u.config.isZH].join(":"):"none";c.querySelector(`.${ja}`)?.dataset.signature!==l&&(c.querySelectorAll(`.${ja}`).forEach(m=>m.remove()),!(!r||r.state==="done")&&(r.state==="top"?yu(c,D2(r,l)):r.state==="planned"?yu(c,fb(Ti("已被规划","Included in plan"),Ti("已由同一升级链的最高级任务统一规划","Included by the highest-level task in this upgrade chain"),l)):r.state==="isolated"&&yu(c,fb(Ti("无需火车","No train needed"),Ti("该任务不属于升级链","This task is not part of an upgrade chain"),l))))}}s(bb,"render");function P2(){document.querySelectorAll(`.${ja}`).forEach(e=>e.remove()),document.getElementById(hu)?.remove()}s(P2,"cleanup"),u.features.register({id:"taskTrainPlanner",setting:"taskTrainPlanner",scope:"character",dependsOn:["semiAutoTrain"],initialize({scope:e}){N2(),bb();let t=!1,a=s(()=>{t||(t=!0,(globalThis.requestAnimationFrame??globalThis.setTimeout)(()=>{t=!1,bb()}))},"schedule"),n=new MutationObserver(i=>{i.some(o=>(o.target?.nodeType===1?o.target:o.target?.parentElement)?.closest?.(ms)?!0:[...o.addedNodes??[],...o.removedNodes??[]].filter(c=>c?.nodeType===1).some(c=>c.matches?.(ms)||c.querySelector?.(ms)))&&a()});e.observer(n,document.body,{childList:!0,subtree:!0}),e.add(u.onMessage("quests_updated",a)),e.add(P2)}}),Object.assign(u.api,{collectTaskTrainGroups:_u,createTaskTrainPlan:mb});var wu="mwitools-task-new-style",Ar='div[class*="RandomTask_randomTask"]:not([data-mwitools-task-mirror="true"])',Mr=new Map;function Tr(e){return Ca(e)}s(Tr,"questId");function pb(e){return!!(e?.isClaimed||e?.claimed||e?.isDeleted||e?.deleted||String(e?.status??"").toLowerCase().includes("claimed"))}s(pb,"isRemoved");function L2(e){if(pb(e))return!0;let t=Number(e?.targetCount??e?.requiredCount??e?.goalCount),a=Number(e?.currentCount??e?.completedCount??e?.progressCount);return Number.isFinite(t)&&t>0&&Number.isFinite(a)?a>=t:!!(e?.isCompleted||e?.completed)}s(L2,"isCompleted");function vu(e,t=globalThis.location?.hostname??"unknown"){return`MWITools_task_new_v1:${t}:${String(e??"")}`}s(vu,"taskNewStorageKey");function xu(e){try{let t=JSON.parse(localStorage.getItem(e)||"null");return{known:new Set(Array.isArray(t?.known)?t.known:[]),fresh:new Set(Array.isArray(t?.fresh)?t.fresh:[]),initialized:t?.initialized===!0||Array.isArray(t?.known)&&t.known.length>0}}catch{return{known:new Set,fresh:new Set,initialized:!1}}}s(xu,"readTaskNewState");function Er(e,t){localStorage.setItem(e,JSON.stringify({initialized:t.initialized===!0,known:[...t.known],fresh:[...t.fresh]}))}s(Er,"writeTaskNewState");function gb(e,t){let a=e.initialized!==!0,n=new Set((t??[]).map(Tr).filter(Boolean));for(let i of n)!a&&!e.known.has(i)&&e.fresh.add(i),e.known.add(i);for(let i of[...e.fresh])n.has(i)||e.fresh.delete(i);return e.initialized=!0,e}s(gb,"initializeQuestState");function $2(e,t){for(let a of t??[]){let n=Tr(a);if(n){if(pb(a)||L2(a)){e.fresh.delete(n),e.known.delete(n);continue}e.known.has(n)||e.fresh.add(n),e.known.add(n)}}return e}s($2,"applyQuestUpdates");function O2(){if(document.getElementById(wu))return;let e=document.createElement("style");e.id=wu,e.textContent=`
${Ar}.mwi-task-is-new{position:relative}
.mwi-task-new-badge{position:absolute;z-index:5;right:5px;top:5px;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;width:auto!important;min-width:18px!important;max-width:max-content!important;height:18px!important;min-height:18px!important;margin:0!important;padding:0 4px!important;flex:0 0 auto!important;border:1px solid rgba(255,220,128,.72);border-radius:4px;background:#f0aa2e;color:#221704;font-size:9px;font-weight:800;line-height:16px;letter-spacing:0;white-space:nowrap;box-shadow:0 2px 6px rgba(0,0,0,.32);pointer-events:none}
`,(document.head??document.documentElement).appendChild(e)}s(O2,"addStyles");function q2(){document.querySelectorAll(".mwi-task-new-badge").forEach(e=>e.remove()),document.querySelectorAll(".mwi-task-is-new").forEach(e=>{e.classList.remove("mwi-task-is-new"),delete e.dataset.mwitoolsTaskNewWired}),document.getElementById(wu)?.remove()}s(q2,"cleanupDom"),u.features.register({id:"taskNewBadge",setting:"taskNewBadge",scope:"character",dependsOn:["taskInsights"],initialize({scope:e,characterId:t}){O2();let a=vu(t),n=xu(a);Mr.set(a,n);let i=u.state.characterQuests??[];gb(n,i),Er(a,n);let o=s(()=>{let d=u.state.characterQuests??[],m=new Set(d.map(Tr).filter(Boolean)),p=!1;for(let g of[...n.fresh])m.has(g)||(n.fresh.delete(g),n.known.delete(g),p=!0);p&&Er(a,n);let b=[...document.querySelectorAll(Ar)];za(b,d,{taskActionHrid:s(g=>u.api.taskActionHrid?.(g),"taskActionHrid"),taskRemaining:s(g=>u.api.taskRemaining?.(g)??0,"taskRemaining")}).forEach(({card:g,task:h})=>{let _=Tr(h),y=!!(_&&u.state.mwitoolsPageNewTaskIds?.has?.(_));g.classList.toggle("mwi-task-is-new",!!y);let w=g.querySelector(":scope > .mwi-task-new-badge");y&&!w?(w=document.createElement("span"),w.className="mwi-task-new-badge",w.textContent=u.config.isZH?"新":"NEW",g.appendChild(w)):y||w?.remove()})},"render"),r=!1,c=s(()=>{r||(r=!0,(globalThis.requestAnimationFrame??globalThis.setTimeout)(()=>{r=!1,o()}))},"schedule");e.add(u.onMessage("quests_updated",d=>{let m=d.endCharacterQuests??d.characterQuests??[];$2(n,m);let p=new Set((u.state.characterQuests??[]).map(Tr));for(let b of[...n.fresh])p.has(b)||n.fresh.delete(b);Er(a,n),c()}));let l=new MutationObserver(d=>{d.some(m=>(m.target?.nodeType===1?m.target:m.target?.parentElement)?.closest?.(Ar)?!0:[...m.addedNodes??[],...m.removedNodes??[]].filter(b=>b?.nodeType===1).some(b=>b.matches?.(Ar)||b.querySelector?.(Ar)))&&c()});e.observer(l,document.body,{childList:!0,subtree:!0}),o(),e.add(()=>{r=!1,Mr.get(a)===n&&Mr.delete(a),q2()})}}),Object.assign(u.api,{getNewTaskIds(){let e=vu(u.state.currentCharacterId),t=Mr.get(e)??xu(e);return gb(t,u.state.characterQuests??[]),Er(e,t),[...t.fresh]},acknowledgeNewTaskIds(e){let t=vu(u.state.currentCharacterId),a=Mr.get(t)??xu(t);for(let n of e??[])a.fresh.delete(String(n));Er(t,a)}});var ku='[class*="RandomTask_randomTask"]:not([data-mwitools-task-mirror="true"])',R2='[class*="TasksPanel_taskList"]',hb='[class*="SkillActionDetail_regularComponent"],[class*="SkillActionDetail_skillActionDetail"],[class*="ActionDetail_actionDetail"],[class*="SkillActionDetail_modalContent"],[class*="ActionDetail_modalContent"]',_b=3e4;function yb(e){return Ca(e)}s(yb,"taskIdentity");function wb(e){for(let t=e;t;t=t.parentElement){let a=globalThis.getComputedStyle?.(t);if(t.scrollHeight>t.clientHeight&&/auto|scroll/.test(`${a?.overflowY??""} ${a?.overflow??""}`))return t}return document.scrollingElement??document.documentElement}s(wb,"scrollContainerFor");function B2(e,t,a=Date.now()){if(!e)return null;let n=[...document.querySelectorAll(ku)],i=za(n,t,{taskActionHrid:s(m=>u.api.taskActionHrid?.(m),"taskActionHrid"),taskRemaining:s(m=>u.api.taskRemaining?.(m)??0,"taskRemaining")}).find(m=>m.card===e),o=Number(e.dataset.mwitoolsOriginalIndex),r=Number.isInteger(i?.taskIndex)&&i.taskIndex>=0?i.taskIndex:Number.isInteger(o)?o:n.indexOf(e),c=Number.isInteger(o)?o:n.indexOf(e),l=i?.task??t?.[r],d=wb(e);return{taskId:yb(l),originalIndex:c,profession:e.dataset.mwitoolsProfession??e.closest("[data-profession]")?.dataset.profession??"",scrollTop:Number(d?.scrollTop)||0,expiresAt:a+_b,sawAction:!1}}s(B2,"captureTaskReturnContext");function Su(e){return String(u.api.getOriTextFromElement?.(e)??e?.textContent??"").replaceAll(/\s+/g," ").trim()}s(Su,"buttonText");function z2(e){return/^(前往|go)$/i.test(Su(e))}s(z2,"isGoButton");function F2(e){let t=Su(e);return/^(添加任务|添加到队列|加入队列|立即开始|开始任务|开始动作|添加|开始|队列|add task|add to (?:action )?queue|start task|start action|start now|start immediately|add|start|queue)$/i.test(t)}s(F2,"isCommitButton");function j2(){let e=[],t=s(i=>{let o=i?.current??i;o&&typeof o=="object"&&!e.includes(o)&&e.push(o)},"push"),a=document.getElementById("root");t(a?._reactRootContainer?.current),t(a?._reactRootContainer?._internalRoot?.current);for(let i of[a,document.body])for(let o of Object.getOwnPropertyNames(i??{}))(o.startsWith("__reactContainer")||o.startsWith("__reactFiber")||o.startsWith("__reactInternalInstance"))&&t(i[o]);let n=new Set;for(;e.length&&n.size<5e4;){let i=e.pop();if(!i||n.has(i))continue;n.add(i);let o=i.stateNode;if(typeof o?.handleChangeNavTarget=="function"&&typeof o?.setState=="function")return o;i.child&&e.push(i.child),i.sibling&&e.push(i.sibling)}return null}s(j2,"findGameHost");function W2(){let e=j2();if(e)return e.handleChangeNavTarget("tasks"),!0;let a=[...document.querySelectorAll('nav button,[class*="Nav"] button,[class*="nav"] button')].find(n=>/^(任务|tasks)$/i.test(Su(n)));return a?.click(),!!a}s(W2,"openTasksPage");function V2(e){let t=[...document.querySelectorAll(ku)];if(e.taskId){let a=t.find(n=>n.dataset.mwitoolsTaskId===e.taskId)??za(t,u.state.characterQuests??[],{taskActionHrid:s(n=>u.api.taskActionHrid?.(n),"taskActionHrid"),taskRemaining:s(n=>u.api.taskRemaining?.(n)??0,"taskRemaining")}).find(({task:n})=>yb(n)===e.taskId)?.card;return a||null}return t[e.originalIndex]??null}s(V2,"findTaskCard");function G2(e,t){let a=e?.dataset.mwitoolsProfession??t;if(!a)return;let o=[...document.querySelectorAll(".mwi-task-profession-group")].find(r=>r.dataset.profession===a)?.querySelector(".mwi-task-profession-header");o?.getAttribute("aria-expanded")==="false"&&o.click()}s(G2,"expandTaskProfession");function Z2(e){let t=V2(e);if(t)return G2(t,e.profession),t.scrollIntoView?.({block:"center",inline:"nearest"}),!0;let a=document.querySelector(R2),n=wb(a);return a&&n?(n.scrollTop=e.scrollTop,!0):!1}s(Z2,"restoreTaskPosition"),u.features.register({id:"taskAutoReturn",setting:"taskAutoReturn",scope:"character",initialize({scope:e}){let t=null,a=null,n=null,i=null,o=s(()=>{a!==null&&clearTimeout(a),n!==null&&clearTimeout(n),i!==null&&clearTimeout(i),a=n=i=null},"clearTimers"),r=s(({cancelTaskReturn:b=!0}={})=>{o(),t=null,b&&u.api.cancelTemporaryTaskReturn?.()},"clearPending"),c=s(()=>{a!==null&&clearTimeout(a),a=setTimeout(r,_b)},"armExpiry"),l=s(()=>{if(!t||t.expiresAt<=Date.now()){r();return}let b=t;if(r({cancelTaskReturn:!1}),u.api.resumeTemporaryTaskReturn?.(),!W2()){u.api.cancelTemporaryTaskReturn?.();return}let f=0,g=s(()=>{i=null,!(Z2(b)||f>=40)&&(f+=1,i=setTimeout(g,50))},"restore");i=setTimeout(g,0)},"returnToOrigin"),d=s((b=0)=>{t&&(n!==null&&clearTimeout(n),n=setTimeout(()=>{n=null,l()},b))},"scheduleReturn"),m=s(()=>{if(!t)return;document.querySelector(hb)?t.sawAction=!0:t.sawAction&&d()},"observeAction");e.event(document,"click",b=>{let f=b.target?.closest?.("button");if(!f)return;let g=f.closest(ku);if(g&&z2(f)){t=B2(g,u.state.characterQuests??[]),t&&(u.api.armTemporaryTaskReturn?.(t.expiresAt),c());return}t&&f.closest(hb)&&F2(f)&&d(500)},!0);let p=new MutationObserver(m);e.observer(p,document.body,{childList:!0,subtree:!0}),e.add(r)}});var Cu="mwitools-ability-book-calculator-style",Mt="mwi-ability-book-calculator",U2='[class*="ItemDictionary_modalContent"]';function Gt(e,t){return u.config.isZH?e:t}s(Gt,"t");function Wa(e){if(e==null||e==="")return null;let t=Number(e);return Number.isFinite(t)?t:null}s(Wa,"finite");function vb(e){if(!Array.isArray(e))return 0;for(let t=e.length-1;t>=1;t-=1)if(Wa(e[t])!==null)return t;return 0}s(vb,"maxAbilityLevel");function K2({isLearned:e,currentLevel:t,currentExperience:a,targetLevel:n,experienceGain:i,levelExperienceTable:o}){let r=vb(o),c=Number(n),l=Wa(t),d=Wa(a),m=Wa(i);if(!Number.isInteger(c)||c<1||c>r||l===null||d===null||m===null||m<=0)return{status:"invalid",maximumLevel:r};let p=Wa(o[c]);if(p===null)return{status:"invalid",maximumLevel:r};if(e&&(l>=c||d>=p))return{status:"reached",maximumLevel:r,targetExperience:p,unlockBooks:0,levelingBooks:0,totalBooks:0};let b=e?0:1,f=Math.ceil(Math.max(0,p-d)/m);return{status:"ready",maximumLevel:r,targetExperience:p,unlockBooks:b,levelingBooks:f,totalBooks:b+f}}s(K2,"calculateAbilityBookRequirement");function xb(e){let t=String(e??"").trim();return t?t.startsWith("/items/")?t:`/items/${t.split("/").at(-1)}`:""}s(xb,"normalizeItemHrid");function X2(e){let t=e?.querySelectorAll?.('[class*="MarketplacePanel_currentItem"] svg use,[class*="MarketplacePanel_itemContainer"] svg use,[class*="ItemDictionary_item"] svg use'),a=t?.length?t:e?.querySelectorAll?.("svg use")??[];for(let n of a){let o=(n.getAttribute("href")??n.getAttribute("xlink:href")??"").split("#").at(-1),r=xb(o);if(u.state.initData_itemDetailMap?.[r])return r}return""}s(X2,"itemHridFromIcon");function J2(e){let t=e?.querySelector?.('[class*="ItemDictionary_title"],h1,h2'),a=String(u.api.getOriTextFromElement?.(t)??t?.textContent??"").trim();if(!a)return"";let n=u.state.itemEnNameToHridMap?.[a];if(n)return n;let i=u.data.ZHToItemHridMap?.[a];if(i)return i;let o=u.api.getOthersFromZhName?.(a);return String(o??"").startsWith("/abilities/")?String(o).replace("/abilities/","/items/"):xb(o)}s(J2,"itemHridFromTitle");function Y2(e){let t=X2(e)||J2(e);return u.state.initData_itemDetailMap?.[t]?.abilityBookDetail?t:""}s(Y2,"resolveAbilityBookItem");function Q2(e){let t=u.state.initData_characterAbilities;if(t==null)return{ready:!1};let n=(Array.isArray(t)?t:Object.values(t)).find(r=>(r?.abilityHrid??r?.hrid)===e);if(!n)return{ready:!0,isLearned:!1,level:0,experience:0};let i=Wa(n.experience??n.totalExperience??n.experiencePoints);if(i===null)return{ready:!1};let o=Wa(n.level);if(o===null){o=0;let r=u.state.initData_levelExperienceTable??[];for(let c=1;c<r.length;c+=1)Wa(r[c])!==null&&i>=Number(r[c])&&(o=c)}return{ready:!0,isLearned:!0,level:o,experience:i}}s(Q2,"abilityRecord");function e6(e){let a=u.state.initData_itemDetailMap?.[e]?.abilityBookDetail,n=u.state.initData_levelExperienceTable;if(!a||!Array.isArray(n))return{ready:!1};let i=a.abilityHrid??e.replace("/items/","/abilities/"),o=Q2(i);return o.ready?{ready:!0,itemHrid:e,experienceGain:Wa(a.experienceGain),maximumLevel:vb(n),levelExperienceTable:n,...o}:{ready:!1}}s(e6,"calculatorData");function t6(){if(document.getElementById(Cu))return;let e=document.createElement("style");e.id=Cu,e.textContent=`
.${Mt}{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:4px 10px;margin:8px 0;padding:8px 10px;border:1px solid rgba(255,255,255,.13);border-radius:6px;background:rgba(0,0,0,.16);color:var(--color-text-primary,#eee);font-size:.72rem;line-height:1.35}
.${Mt} .mwi-book-title{grid-column:1/-1;font-size:.78rem;font-weight:700;color:var(--color-primary,#e0bc42)}
.${Mt} .mwi-book-target{display:flex;align-items:center;gap:6px}
.${Mt} input{width:68px;box-sizing:border-box;border:1px solid rgba(255,255,255,.2);border-radius:4px;background:rgba(0,0,0,.25);color:inherit;padding:3px 5px}
.${Mt} .mwi-book-result,.${Mt} .mwi-book-cost,.${Mt} .mwi-book-state{grid-column:1/-1}
.${Mt} .mwi-book-result{font-weight:650;color:#9fd7ab}
.${Mt}[data-status="invalid"] .mwi-book-result{color:#ff9c8f}
.${Mt} .mwi-book-muted{color:var(--color-text-secondary,#aaa)}
@media(max-width:700px){.${Mt}{grid-template-columns:1fr;gap:4px}.${Mt}>*{grid-column:1!important}}
`,(document.head??document.documentElement).appendChild(e)}s(t6,"addStyles");function a6(e){let t=document.createElement("section");t.className=Mt,t.dataset.surface="dictionary";let a=document.createElement("div");a.className="mwi-book-title";let n=document.createElement("div");n.className="mwi-book-state";let i=document.createElement("div");i.className="mwi-book-muted mwi-book-per-book";let o=document.createElement("label");o.className="mwi-book-target";let r=document.createElement("span"),c=document.createElement("input");c.type="number",c.step="1",c.addEventListener("input",()=>e(t,c.value)),o.append(r,c);let l=document.createElement("div");l.className="mwi-book-result",l.setAttribute("aria-live","polite");let d=document.createElement("div");return d.className="mwi-book-cost mwi-book-muted",t.append(a,n,i,o,l,d),t}s(a6,"createPanel");function Va(e,t,a){let n=e.querySelector(t);n&&n.textContent!==a&&(n.textContent=a)}s(Va,"setPanelText");function kb(e,t,a){e.dataset.itemHrid=t,Va(e,".mwi-book-title",Gt("技能书计算器","Ability book calculator"));let n=e6(t),i=e.querySelector("input"),o=e.querySelector(".mwi-book-target span");if(o.textContent=Gt("目标等级","Target level"),i.setAttribute("aria-label",o.textContent),!n.ready||!n.experienceGain||!n.maximumLevel){e.dataset.status="waiting",i.disabled=!0,Va(e,".mwi-book-state",Gt("等待角色与技能书数据","Waiting for character and ability-book data")),Va(e,".mwi-book-per-book",""),Va(e,".mwi-book-result","—"),Va(e,".mwi-book-cost","");return}i.disabled=!1,i.min="1",i.max=String(n.maximumLevel);let r=Math.min(n.maximumLevel,Math.max(1,Number(n.level)+1)),c=Number(a.get(t)??r);Number.isInteger(c)||(c=r),String(i.value)!==String(c)&&(i.value=String(c)),a.set(t,c);let l=u.api.formatExactNumber??(g=>String(g));Va(e,".mwi-book-state",n.isLearned?Gt(`当前 Lv.${n.level} · 总经验 ${l(n.experience)}`,`Current Lv.${n.level} · total XP ${l(n.experience)}`):Gt("当前:未学习","Current: not learned")),Va(e,".mwi-book-per-book",Gt(`每本增加 ${l(n.experienceGain)} 经验`,`${l(n.experienceGain)} XP per book`));let d=K2({isLearned:n.isLearned,currentLevel:n.level,currentExperience:n.experience,targetLevel:c,experienceGain:n.experienceGain,levelExperienceTable:n.levelExperienceTable});e.dataset.status=d.status;let m;d.status==="invalid"?m=Gt(`目标等级必须为 1–${n.maximumLevel} 的整数`,`Target level must be an integer from 1 to ${n.maximumLevel}`):d.status==="reached"?m=Gt("已达到目标 · 还需 0 本","Target reached · 0 books needed"):d.unlockBooks?m=Gt(`解锁 1 + 升级 ${d.levelingBooks} = 合计 ${d.totalBooks} 本`,`Unlock 1 + level ${d.levelingBooks} = ${d.totalBooks} books total`):m=Gt(`升级还需 ${d.totalBooks} 本`,`${d.totalBooks} books needed to level`),Va(e,".mwi-book-result",m);let p=d.totalBooks,b=u.api.getAskPrice?.(t,0)??0,f="";d.status!=="invalid"&&(f=p===0?Gt("参考购买成本:0","Reference purchase cost: 0"):b>0?Gt(`参考购买成本:${u.api.numberFormatter(p*b)}(最低出售价 ${u.api.numberFormatter(b)}/本)`,`Reference purchase cost: ${u.api.numberFormatter(p*b)} (best ask ${u.api.numberFormatter(b)}/book)`):Gt("参考购买成本:暂无出售价","Reference purchase cost: no ask price")),Va(e,".mwi-book-cost",f)}s(kb,"updatePanel");function n6(e){let t=[...document.querySelectorAll(e)],a=t.filter(n=>n.getClientRects().length);return a.length?a:t}s(n6,"visiblePanels"),u.features.register({id:"skillbook",setting:"skillbook",scope:"character",initialize({scope:e}){t6();let t=new Map,a=null,n=s((c,l)=>{let d=c.querySelector(`.${Mt}[data-surface="dictionary"]`);d||(d=a6((m,p)=>{t.set(m.dataset.itemHrid,Number(p)),kb(m,m.dataset.itemHrid,t)}),c.appendChild(d)),kb(d,l,t)},"updateSurface"),i=s(()=>{for(let c of n6(U2)){let l=Y2(c),d=c.querySelector(`.${Mt}[data-surface="dictionary"]`);l?n(c,l):d?.remove()}},"refresh"),o=s(()=>{a===null&&(a=setTimeout(()=>{a=null,i()},50))},"schedule"),r=new MutationObserver(o);e.observer(r,document.body,{childList:!0,subtree:!0});for(let c of["init_client_data","init_character_data","abilities_updated","character_abilities_updated","action_completed","market_item_values_updated","market_item_order_books_updated"])e.add(u.onMessage(c,o));e.add(()=>{a!==null&&clearTimeout(a),document.querySelectorAll(`.${Mt}`).forEach(c=>c.remove()),document.getElementById(Cu)?.remove()}),i()}});var i6='div[class*="Inventory_items"]',r6='div[class*="Item_itemContainer"]';function o6(e){let t=e?.closest?.(r6);if(!t?.closest(i6))return null;let n=t.closest('div:has(> button[class*="Inventory_categoryButton"],> div[class*="Inventory_label"])')?.querySelector('button[class*="Inventory_categoryButton"]'),i=String(u.api.getOriTextFromElement?.(n)??n?.textContent??"").trim(),r=t.querySelector("svg[aria-label]")?.getAttribute("aria-label")?.trim();if(!r)return null;u.config.isZHInGameSetting&&(r=u.api.getItemEnNameFromZhName?.(r)??r);let c=u.state.itemEnNameToHridMap?.[r],l=u.state.initData_itemDetailMap?.[c];if(!c||l?.isTradable!==!0)return null;let d=t.querySelector('[class*="Item_enhancementLevel"]')?.textContent??"",m=Number.parseInt(d.replace(/\D/g,""),10)||0;return{itemHrid:c,enhancementLevel:m,categoryName:i}}s(o6,"inventoryItemTarget"),u.features.register({id:"inventoryMarketDoubleClick",setting:"inventoryMarketDoubleClick",scope:"character",initialize({scope:e}){e.event(document,"dblclick",t=>{if(t.button&&t.button!==0)return;let a=o6(t.target);if(!a)return;let n=u.api.openProcurementMarketplace;typeof n=="function"&&(t.preventDefault(),t.stopPropagation(),n(a.itemHrid,a.enhancementLevel))},!0)}});var Sb="https://feedback.43.167.210.211.sslip.io/api/v1",s6="MWITools_feedback_identity_v1",Au=1e4,u6=3;function ua(e,t){return u.config.isZH?e:t}s(ua,"t");var c6={"Required text is missing":["必填内容不能为空","Required text is missing"],"Bearer token required":["缺少反馈身份令牌","Feedback identity token is missing"],"Invalid bearer token":["反馈身份令牌无效","Feedback identity token is invalid"],"Identity is not registered":["反馈身份尚未注册","Feedback identity is not registered"],"Invalid image link list":["图片链接列表无效","Invalid image link list"],"Image links must be a list":["图片链接必须是列表","Image links must be a list"],"At most 3 image links are allowed":["最多只能填写 3 个图片链接","At most 3 image links are allowed"],"Image links must use http or https":["图片链接只支持 HTTP 或 HTTPS","Image links must use HTTP or HTTPS"],"Feedback not found":["未找到这条反馈","Feedback not found"],"This private identity belongs to another character":["当前反馈身份属于其他角色","This feedback identity belongs to another character"],"Invalid feedback type":["反馈类型无效","Invalid feedback type"],"Invalid context JSON":["反馈环境信息无效","Invalid feedback context"],"Context must be an object":["反馈环境信息格式无效","Feedback context must be an object"],"Weekly feedback limit reached":["本周反馈额度已用完","Weekly feedback limit reached"],"Closed feedback cannot be edited":["已结束的反馈不能修改","Closed feedback cannot be edited"],"Closed feedback cannot receive messages":["已结束的反馈不能继续留言","Closed feedback cannot receive messages"]};function Cb(e){let t=String(e??"").trim(),a=c6[t];if(a)return ua(...a);let n=/^Text exceeds (\d+) characters$/.exec(t);return n?ua(`内容不能超过 ${n[1]} 个字符`,`Text cannot exceed ${n[1]} characters`):t}s(Cb,"localizeErrorDetail");function l6(){return String(globalThis.location?.hostname??"unknown")}s(l6,"gameServer");function d6(e){let t="";for(let a of e)t+=String.fromCharCode(a);return globalThis.btoa(t).replaceAll("+","-").replaceAll("/","_").replace(/=+$/,"")}s(d6,"encodeToken");function m6(){let e=new Uint8Array(32);return globalThis.crypto.getRandomValues(e),d6(e)}s(m6,"createToken");function f6(e){try{return typeof GM_getValue=="function"?GM_getValue(e,""):""}catch{return""}}s(f6,"getPrivateValue");function b6(e,t){typeof GM_setValue=="function"&&GM_setValue(e,t)}s(b6,"setPrivateValue");function Ab(e){let t=e?.responseText??e?.response??"";if(!t)return null;if(typeof t=="object")return t;try{return JSON.parse(t)}catch{return{detail:String(t)}}}s(Ab,"parseResponse");function Mb({token:e,path:t,method:a="GET",body:n}){let i=typeof GM<"u"&&typeof GM.xmlHttpRequest=="function"?GM.xmlHttpRequest:typeof GM_xmlhttpRequest=="function"?GM_xmlhttpRequest:null,o={Authorization:`Bearer ${e}`};if(n&&!(n instanceof globalThis.FormData)&&(o["Content-Type"]="application/json"),!i){let r=new globalThis.AbortController,c=setTimeout(()=>r.abort(),Au);return globalThis.fetch(`${Sb}${t}`,{method:a,headers:o,signal:r.signal,body:n instanceof globalThis.FormData?n:n?JSON.stringify(n):void 0}).then(async l=>{if(!l.ok){let d=await l.json().catch(()=>({}));throw new Error(Cb(d.detail)||`HTTP ${l.status}`)}return l.json()}).catch(l=>{throw l?.name==="AbortError"?new Error(ua("意见反馈服务请求超时","Feedback service request timed out")):l}).finally(()=>clearTimeout(c))}return new Promise((r,c)=>{let l=!1,d,m=s(b=>{if(l)return;l=!0,clearTimeout(d);let f=Number(b?.status)||0;if(f<200||f>=300){let g=Ab(b),h=new Error(Cb(g?.detail)||ua(`反馈服务返回 HTTP ${f}`,`Feedback service returned HTTP ${f}`));h.status=f,c(h);return}r(Ab(b))},"finish"),p=s(b=>{l||(l=!0,clearTimeout(d),c(new Error(b)))},"fail");d=setTimeout(()=>p(ua("意见反馈服务请求超时","Feedback service request timed out")),Au+1e3);try{i({method:a,url:`${Sb}${t}`,headers:o,data:n instanceof globalThis.FormData?n:n?JSON.stringify(n):void 0,responseType:"text",timeout:Au,anonymous:!1,onload:m,onerror:s(()=>p(ua("无法连接意见反馈服务","Unable to reach the feedback service")),"onerror"),ontimeout:s(()=>p(ua("意见反馈服务请求超时","Feedback service request timed out")),"ontimeout")})?.then?.(m).catch(f=>p(f.message))}catch(b){p(b.message)}})}s(Mb,"request");function Mu(e){let a=(Array.isArray(e)?e:String(e??"").split(/\r?\n/)).map(n=>String(n).trim()).filter(Boolean);if(a.length>u6)throw new Error(ua("最多只能填写 3 个图片链接","At most 3 image links are allowed"));for(let n of a){if(n.length>2e3)throw new Error(ua("图片链接过长","The image link is too long"));let i;try{i=new URL(n)}catch{throw new Error(ua("图片链接格式不正确","Invalid image link format"))}if(!["http:","https:"].includes(i.protocol))throw new Error(ua("图片链接只支持 HTTP 或 HTTPS","Image links must use HTTP or HTTPS"))}return a}s(Mu,"normalizeImageLinks");function Tb(e,t){return e.append("kind",t.type),e.append("title",t.title),e.append("detail",t.detail),e.append("reproduction",t.reproduction??""),e.append("expected",t.expected??""),t.context&&e.append("context",JSON.stringify(t.context)),e.append("imageLinks",JSON.stringify(Mu(t.imageLinks))),e}s(Tb,"appendFeedbackForm");var Ir=class{static{s(this,"FeedbackClient")}constructor({characterId:t,characterName:a}){this.characterId=String(t),this.characterName=String(a??""),this.server=l6(),this.storageKey=`${s6}:${this.server}:${this.characterId}`,this.token=f6(this.storageKey)||m6(),b6(this.storageKey,this.token),this.registered=!1,this.identityPromise=null}async ensureIdentity(){if(!this.registered)return this.identityPromise||(this.identityPromise=Mb({token:this.token,path:"/identity",method:"POST",body:{gameServer:this.server,characterId:this.characterId,characterName:this.characterName,source:"mwitools-userscript"}}).then(t=>(this.registered=!0,t)).finally(()=>{this.identityPromise=null})),this.identityPromise}async call(t,a={}){return await this.ensureIdentity(),Mb({token:this.token,path:t,...a})}quota(){return this.call("/quota")}list(){return this.call("/feedback")}detail(t){return this.call(`/feedback/${encodeURIComponent(t)}`)}submit(t){return this.call("/feedback",{method:"POST",body:Tb(new globalThis.FormData,t)})}edit(t,a){return this.call(`/feedback/${encodeURIComponent(t)}`,{method:"PUT",body:Tb(new globalThis.FormData,a)})}reply(t,a){return this.call(`/feedback/${encodeURIComponent(t)}/messages`,{method:"POST",body:{body:a}})}markRead(t){return this.call(`/feedback/${encodeURIComponent(t)}/seen`,{method:"POST"})}};function Eb(e){let t=globalThis.GM_info?.script??{};return{scriptVersion:String(t.version??"unknown"),gameServer:e.server,characterId:e.characterId,characterName:e.characterName,browser:String(globalThis.navigator?.userAgent??"").slice(0,500)}}s(Eb,"feedbackContext");var Ei="mwitools-feedback-root",Zn="mwitools-feedback-button",fs="mwitools-feedback-style";function Be(e,t){return u.config.isZH?e:t}s(Be,"t");function Ib(e){let t={pending:["待处理","Pending"],processing:["处理中","Processing"],closed:["已结束","Closed"]};return t[e]?Be(...t[e]):e}s(Ib,"statusLabel");function p6(){if(document.getElementById(fs))return;let e=document.createElement("style");e.id=fs,e.textContent=`
#${Zn}{position:relative;display:flex;align-items:center;align-self:center;justify-content:center;gap:5px;width:auto;min-width:76px;margin:2px auto 0;padding:1px 7px;border:1px solid rgba(245,158,11,.55);border-radius:4px;background:rgba(245,158,11,.1);color:#ffc45b;font-size:11px;line-height:1.2;cursor:pointer}
#${Zn}:hover{background:rgba(245,158,11,.19);color:#ffd887}.mwi-feedback-badge{position:absolute;right:-5px;top:-6px;display:none;min-width:16px;height:16px;padding:0 4px;border-radius:9px;background:#df4b4b;color:white;font:700 10px/16px sans-serif}.mwi-feedback-badge[data-count]:not([data-count="0"]){display:block}
#${Ei}{position:fixed;inset:0;z-index:2147482600;display:flex;align-items:center;justify-content:center;padding:16px;background:rgba(4,6,12,.72);font-family:inherit;color:#e7e9f0}#${Ei}[hidden]{display:none}
.mwi-feedback-modal{display:flex;flex-direction:column;width:min(760px,100%);max-height:min(820px,calc(100vh - 32px));overflow:hidden;border:1px solid #45516f;border-radius:9px;background:#171b2a;box-shadow:0 20px 60px rgba(0,0,0,.65)}
.mwi-feedback-head{display:flex;align-items:center;padding:12px 15px;border-bottom:1px solid #343c55;background:#1d2336}.mwi-feedback-head h2{margin:0;font-size:16px}.mwi-feedback-close{margin-left:auto;width:30px;height:30px;border:0;border-radius:5px;background:transparent;color:#aab1c4;font-size:20px;cursor:pointer}.mwi-feedback-close:hover{background:#303950;color:white}
.mwi-feedback-tabs{display:flex;border-bottom:1px solid #343c55}.mwi-feedback-tab{position:relative;flex:1;padding:10px;border:0;background:#191e2e;color:#aeb6ca;cursor:pointer}.mwi-feedback-tab[data-active="true"]{background:#252d45;color:#ffc65b;font-weight:700}.mwi-feedback-tab .mwi-feedback-badge{right:calc(50% - 52px);top:4px}
.mwi-feedback-body{min-height:360px;overflow:auto;padding:16px}.mwi-feedback-view[hidden]{display:none}.mwi-feedback-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}.mwi-feedback-field{display:flex;flex-direction:column;gap:5px}.mwi-feedback-field.is-wide{grid-column:1/-1}.mwi-feedback-field span{font-size:12px;color:#c5cada}.mwi-feedback-field input,.mwi-feedback-field select,.mwi-feedback-field textarea,.mwi-feedback-reply textarea{width:100%;box-sizing:border-box;padding:8px;border:1px solid #434e6c;border-radius:5px;background:#101522;color:#eef0f6;font:inherit}.mwi-feedback-field textarea{min-height:105px;resize:vertical}.mwi-feedback-bug-fields{display:contents}.mwi-feedback-bug-fields[hidden]{display:none}
.mwi-feedback-label-row{display:flex;align-items:center;gap:6px}.mwi-feedback-image-help{display:inline-flex;align-items:center;justify-content:center;width:17px;height:17px;border:1px solid #6f7c9d;border-radius:50%;color:#a9cfff;text-decoration:none;font:700 11px/1 sans-serif}.mwi-feedback-image-help:hover{border-color:#ffc45b;color:#ffc45b}.mwi-feedback-image-links textarea{min-height:76px}.mwi-feedback-field small{color:#8691aa;font-size:11px}.mwi-feedback-link-list{display:grid;gap:6px}.mwi-feedback-link-list a{overflow:hidden;color:#82b8ff;text-overflow:ellipsis;white-space:nowrap}
.mwi-feedback-footer{display:flex;align-items:center;gap:10px;margin-top:13px}.mwi-feedback-quota{font-size:12px;color:#aeb5c7}.mwi-feedback-submit{margin-left:auto;padding:8px 17px;border:0;border-radius:5px;background:#d58b27;color:#17130c;font-weight:700;cursor:pointer}.mwi-feedback-submit:disabled{opacity:.48;cursor:not-allowed}.mwi-feedback-error{min-height:18px;margin-top:8px;color:#ff8f8f;font-size:12px}.mwi-feedback-success{color:#7ddc96}
.mwi-feedback-list{display:grid;gap:8px}.mwi-feedback-card{padding:11px;border:1px solid #353f59;border-radius:6px;background:#131927;cursor:pointer}.mwi-feedback-card:hover{background:#1b2336}.mwi-feedback-card h3{margin:0 0 5px;font-size:13px}.mwi-feedback-card-meta{display:flex;gap:7px;align-items:center;color:#959fb8;font-size:11px}.mwi-feedback-status{padding:2px 6px;border-radius:4px;background:#55401c;color:#ffd06f}.mwi-feedback-status.processing{background:#193f58;color:#7ad9ff}.mwi-feedback-status.closed{background:#24452e;color:#84df9d}.mwi-feedback-empty{padding:35px;text-align:center;color:#8d97b0}.mwi-feedback-detail-back{margin-bottom:10px;border:0;background:transparent;color:#81b7ff;cursor:pointer}.mwi-feedback-detail h3{margin:0 0 5px}.mwi-feedback-copy{white-space:pre-wrap;word-break:break-word;line-height:1.5}.mwi-feedback-section{margin-top:12px;padding:11px;border:1px solid #343e58;border-radius:6px;background:#131825}.mwi-feedback-section h4{margin:0 0 7px;font-size:12px;color:#b8c0d3}.mwi-feedback-messages{display:grid;gap:7px}.mwi-feedback-message{padding:8px 10px;border-radius:5px;background:#20283b;border-left:3px solid #f1ae42}.mwi-feedback-message.admin{border-left-color:#68a8ff}.mwi-feedback-message time{display:block;margin-top:4px;color:#8993aa;font-size:10px}.mwi-feedback-actions{display:flex;gap:8px;margin-top:12px}.mwi-feedback-actions button{padding:7px 11px;border:1px solid #465273;border-radius:5px;background:#26314d;color:#e7ebf5;cursor:pointer}.mwi-feedback-reply{display:flex;gap:8px;margin-top:9px}.mwi-feedback-reply textarea{min-height:64px}.mwi-feedback-reply button{align-self:flex-end}.mwi-feedback-notice{margin-bottom:12px;padding:9px;border-radius:5px;background:rgba(64,127,199,.12);color:#b8d7fb;font-size:12px}
@media(max-width:620px){#${Ei}{padding:6px}.mwi-feedback-modal{max-height:calc(100vh - 12px)}.mwi-feedback-body{padding:11px}.mwi-feedback-grid{grid-template-columns:1fr}.mwi-feedback-field.is-wide{grid-column:1}.mwi-feedback-reply{flex-direction:column}}
`,(document.head??document.documentElement).appendChild(e)}s(p6,"addStyles");function Tu(e){try{return new Date(e).toLocaleString()}catch{return String(e??"")}}s(Tu,"formatTime");function Je(e,t,a){let n=document.createElement(e);return t&&(n.className=t),a!==void 0&&(n.textContent=a),n}s(Je,"makeElement");var Nr=class{static{s(this,"FeedbackPanel")}constructor({client:t,scope:a}){this.client=t,this.scope=a,this.items=[],this.unread=0,this.currentDetailId=null,this.quota=null,this.editing=null,this.build()}build(){p6(),this.root=document.createElement("div"),this.root.id=Ei,this.root.hidden=!0,this.root.innerHTML=`
<section class="mwi-feedback-modal" role="dialog" aria-modal="true" aria-label="${Be("MWITools 意见反馈","MWITools Feedback")}">
<header class="mwi-feedback-head"><h2>${Be("MWITools 意见反馈","MWITools Feedback")}</h2><button type="button" class="mwi-feedback-close" aria-label="${Be("关闭","Close")}">×</button></header>
<nav class="mwi-feedback-tabs"><button type="button" class="mwi-feedback-tab" data-tab="submit" data-active="true">${Be("提交反馈","Submit")}</button><button type="button" class="mwi-feedback-tab" data-tab="mine" data-active="false">${Be("我的反馈","My feedback")}<span class="mwi-feedback-badge" data-count="0">0</span></button></nav>
<div class="mwi-feedback-body">
<section class="mwi-feedback-view" data-view="submit"><div class="mwi-feedback-notice">${Be("每个角色每个 UTC+8 自然周最多提交 2 条;编辑和留言不占额度。不会采集聊天、游戏消息正文或凭证。","Up to 2 new reports per character each UTC+8 week. Edits and messages do not use quota. Chats, game message bodies, and credentials are never collected.")}</div>
<form class="mwi-feedback-form"><div class="mwi-feedback-grid">
<label class="mwi-feedback-field"><span>${Be("类型","Type")}</span><select name="type"><option value="bug">Bug</option><option value="feature">${Be("功能建议","Feature request")}</option><option value="other">${Be("其他","Other")}</option></select></label>
<label class="mwi-feedback-field"><span>${Be("标题","Title")}</span><input name="title" maxlength="160" required></label>
<label class="mwi-feedback-field is-wide"><span>${Be("详细说明","Details")}</span><textarea name="detail" maxlength="12000" required></textarea></label>
<div class="mwi-feedback-bug-fields"><label class="mwi-feedback-field is-wide"><span>${Be("复现步骤","Steps to reproduce")}</span><textarea name="reproduction" maxlength="8000"></textarea></label><label class="mwi-feedback-field is-wide"><span>${Be("预期结果","Expected result")}</span><textarea name="expected" maxlength="8000"></textarea></label></div>
<label class="mwi-feedback-field is-wide mwi-feedback-image-links"><span class="mwi-feedback-label-row"><span>${Be("图片链接(每行一个,最多 3 个)","Image links (one per line, up to 3)")}</span><a class="mwi-feedback-image-help" href="https://tupian.li" target="_blank" rel="noopener noreferrer" title="${Be("不知道图床?打开 tupian.li","Need image hosting? Open tupian.li")}">?</a></span><textarea name="imageLinks" maxlength="6002" placeholder="https://..."></textarea><small>${Be("服务器不会上传、下载或代理图片,只保存你填写的链接。","The server only stores your links; it never uploads, downloads, or proxies images.")}</small></label>
</div><div class="mwi-feedback-footer"><span class="mwi-feedback-quota">${Be("正在查询本周额度…","Checking weekly quota…")}</span><button type="submit" class="mwi-feedback-submit">${Be("提交","Submit")}</button></div><div class="mwi-feedback-error"></div></form>
</section>
<section class="mwi-feedback-view" data-view="mine" hidden><div class="mwi-feedback-list"></div><div class="mwi-feedback-detail" hidden></div><div class="mwi-feedback-error"></div></section>
</div>
</section>`,document.body.appendChild(this.root),this.form=this.root.querySelector(".mwi-feedback-form"),this.scope.event(this.root.querySelector(".mwi-feedback-close"),"click",()=>this.close()),this.scope.event(this.root,"click",t=>{t.target===this.root&&this.close()}),this.root.querySelectorAll("[data-tab]").forEach(t=>this.scope.event(t,"click",()=>this.showTab(t.dataset.tab))),this.scope.event(this.form.elements.type,"change",()=>this.toggleBugFields()),this.scope.event(this.form,"submit",t=>this.submit(t)),this.scope.event(document,"keydown",t=>{t.key==="Escape"&&!this.root.hidden&&this.close()}),this.scope.add(()=>this.destroy()),this.toggleBugFields()}ensureButton(){let t=this.findTotalLevel();if(!t?.parentElement)return null;let a=document.getElementById(Zn);return a||(a=document.createElement("button"),a.type="button",a.id=Zn,a.innerHTML=`<span>✉</span><span>${Be("MWITools 意见反馈","MWITools Feedback")}</span><span class="mwi-feedback-badge" data-count="0">0</span>`,this.scope.event(a,"click",()=>this.open())),(a.parentElement!==t.parentElement||a.previousElementSibling!==t)&&t.insertAdjacentElement("afterend",a),a}findTotalLevel(){let t=document.querySelector('[class*="Header_totalLevel"],[class*="totalLevel"]');return t||[...document.querySelectorAll('header div,header span,[class*="Header"] div')].find(a=>{let n=a.textContent?.trim()??"";return n.length<80&&/^(总等级|Total Level)\s*[::]/i.test(n)})}setUnread(t){this.unread=Math.max(0,Number(t)||0);for(let a of document.querySelectorAll(`#${Zn} .mwi-feedback-badge,#${Ei} .mwi-feedback-tab .mwi-feedback-badge`))a.dataset.count=String(this.unread),a.textContent=String(this.unread)}async open(){this.root.hidden=!1,await this.refresh()}close(){this.root.hidden=!0}showTab(t){this.root.querySelectorAll("[data-tab]").forEach(a=>{a.dataset.active=String(a.dataset.tab===t)}),this.root.querySelectorAll("[data-view]").forEach(a=>{a.hidden=a.dataset.view!==t}),t==="mine"&&this.renderList()}toggleBugFields(){this.form.querySelector(".mwi-feedback-bug-fields").hidden=this.form.elements.type.value!=="bug"}formValue(){return{type:this.form.elements.type.value,title:this.form.elements.title.value.trim(),detail:this.form.elements.detail.value.trim(),reproduction:this.form.elements.reproduction.value.trim(),expected:this.form.elements.expected.value.trim(),imageLinks:Mu(this.form.elements.imageLinks.value),context:Eb(this.client)}}async submit(t){t.preventDefault();let a=this.form.querySelector(".mwi-feedback-error"),n=this.form.querySelector(".mwi-feedback-submit");n.disabled=!0,a.classList.remove("mwi-feedback-success"),a.textContent=Be("正在提交…","Submitting…");try{let i=this.formValue();if(!i.title||!i.detail)throw new Error(Be("请填写标题和详细说明。","Enter a title and details."));let o=this.editing?.id??null,r=o?await this.client.edit(o,i):await this.client.submit(i);!o&&this.quota&&(this.quota={...this.quota,remaining:Math.max(0,Number(this.quota.remaining)-1)}),r?.id&&(this.items=[r,...this.items.filter(c=>c.id!==r.id)]),this.resetForm(),this.renderQuota(),a.classList.add("mwi-feedback-success"),a.textContent=Be("已保存反馈。","Feedback saved."),this.showTab("mine"),this.refresh()}catch(i){a.classList.remove("mwi-feedback-success"),a.textContent=i.message}finally{n.disabled=!this.editing&&this.quota?.remaining===0}}resetForm(){this.form.reset(),this.editing=null,this.form.querySelector(".mwi-feedback-submit").textContent=Be("提交","Submit"),this.toggleBugFields()}async refresh(){try{let t=await this.client.list();return this.items=t.items??[],this.quota=t.quota,this.setUnread(t.unread??0),this.renderQuota(),this.root.querySelectorAll(".mwi-feedback-error").forEach(a=>{a.classList.contains("mwi-feedback-success")||(a.textContent="")}),this.currentDetailId&&!this.root.hidden?await this.openDetail(this.currentDetailId):this.renderList(),!0}catch(t){return this.renderQuota(t.message),this.root.querySelector('[data-view="mine"] .mwi-feedback-error').textContent=t.message,!1}}renderQuota(t=""){let a=this.form.querySelector(".mwi-feedback-quota");a.textContent=t?Be(`额度查询失败:${t}`,`Quota check failed: ${t}`):this.quota?Be(`本周剩余 ${this.quota.remaining}/${this.quota.limit} 条`,`${this.quota.remaining}/${this.quota.limit} submissions left this week`):Be("额度暂时不可用","Quota unavailable"),this.form.querySelector(".mwi-feedback-submit").disabled=!this.editing&&this.quota?.remaining===0}renderList(){this.currentDetailId=null;let t=this.root.querySelector(".mwi-feedback-list"),a=this.root.querySelector(".mwi-feedback-detail");if(a.hidden=!0,t.hidden=!1,t.replaceChildren(),!this.items.length){t.append(Je("div","mwi-feedback-empty",Be("还没有提交过反馈。","No feedback yet.")));return}for(let n of this.items){let i=Je("article","mwi-feedback-card"),o=Je("h3","",n.title),r=Je("div","mwi-feedback-card-meta"),c=Je("span",`mwi-feedback-status ${n.status}`,Ib(n.status));r.append(c,document.createTextNode(Tu(n.updatedAt))),i.append(o,r),i.addEventListener("click",()=>this.openDetail(n.id),{once:!0}),t.append(i)}}async openDetail(t){let a=this.root.querySelector(".mwi-feedback-list"),n=this.root.querySelector(".mwi-feedback-detail");try{let i=await this.client.detail(t);this.currentDetailId=t,a.hidden=!0,n.hidden=!1,n.replaceChildren();let o=Je("button","mwi-feedback-detail-back",`← ${Be("返回列表","Back")}`);o.type="button",o.addEventListener("click",()=>this.renderList(),{once:!0});let r=Je("h3","",i.title),c=Je("div","mwi-feedback-card-meta",`${Ib(i.status)} · ${Tu(i.updatedAt)}`);if(n.append(o,r,c,this.textSection(Be("详细说明","Details"),i.detail)),i.type==="bug"&&n.append(this.textSection(Be("复现步骤","Steps to reproduce"),i.reproduction||"—"),this.textSection(Be("预期结果","Expected result"),i.expected||"—")),i.imageLinks?.length){let m=Je("section","mwi-feedback-section");m.append(Je("h4","",Be("图片链接","Image links")));let p=Je("div","mwi-feedback-link-list");for(let[b,f]of i.imageLinks.entries()){let g=Je("a","",`${Be("图片","Image")} ${b+1}:${f}`);g.href=f,g.target="_blank",g.rel="noopener noreferrer",p.append(g)}m.append(p),n.append(m)}let l=Je("section","mwi-feedback-section");l.append(Je("h4","",Be("留言","Messages")));let d=Je("div","mwi-feedback-messages");for(let m of i.messages??[]){let p=Je("div",`mwi-feedback-message ${m.actor}`);p.append(Je("strong","",m.actor==="admin"?Be("管理员","Admin"):Be("我","Me")),Je("div","mwi-feedback-copy",m.body),Je("time","",Tu(m.createdAt))),d.append(p)}if(d.childElementCount||d.append(Je("div","mwi-feedback-card-meta",Be("暂无留言","No messages"))),l.append(d),n.append(l),i.status!=="closed"){let m=Je("div","mwi-feedback-actions"),p=Je("button","",Be("修改反馈","Edit feedback"));p.type="button",p.addEventListener("click",()=>this.startEdit(i),{once:!0}),m.append(p),n.append(m);let b=Je("div","mwi-feedback-reply"),f=document.createElement("textarea");f.placeholder=Be("补充留言…","Add a message…"),f.maxLength=8e3;let g=Je("button","",Be("发送","Send"));g.type="button",g.addEventListener("click",async()=>{if(f.value.trim()){g.disabled=!0;try{await this.client.reply(i.id,f.value.trim()),await this.openDetail(i.id)}catch(h){g.disabled=!1,f.setCustomValidity(h.message),f.reportValidity()}}}),b.append(f,g),n.append(b)}else n.append(Je("div","mwi-feedback-notice",Be("该反馈已结束,内容和留言已锁定。","This feedback is closed and locked.")));await this.client.markRead(i.id).catch(()=>{}),i.unread&&this.setUnread(this.unread-1)}catch(i){n.hidden=!1,n.replaceChildren(Je("div","mwi-feedback-error",i.message))}}textSection(t,a){let n=Je("section","mwi-feedback-section");return n.append(Je("h4","",t),Je("div","mwi-feedback-copy",a)),n}startEdit(t){this.editing={...t};for(let a of["type","title","detail","reproduction","expected"])this.form.elements[a].value=t[a]??"";this.form.elements.imageLinks.value=(t.imageLinks??[]).join(`
`),this.form.querySelector(".mwi-feedback-submit").textContent=Be("保存修改","Save changes"),this.toggleBugFields(),this.renderQuota(),this.showTab("submit")}destroy(){document.getElementById(Zn)?.remove(),this.root?.remove(),document.getElementById(fs)?.remove()}},Ov={ROOT_ID:Ei,BUTTON_ID:Zn,STYLE_ID:fs};var Ta=null;u.features.register({id:"feedback",setting:"feedback",scope:"character",initialize({scope:e,characterId:t}){let a=new Ir({characterId:t,characterName:u.state.currentCharacterName});Ta=a;let n=new Nr({client:a,scope:e}),i=!1,o=0,r=null,c=s(d=>{clearTimeout(r),r=setTimeout(async()=>{if(i)return;let m=await n.refresh();o=m?0:Math.min(o+1,6),c(m?6e4:Math.min(15*6e4,6e4*2**o))},d)},"schedule"),l=s(()=>n.ensureButton(),"ensure");l(),e.interval(l,750),c(1500),e.add(()=>{i=!0,clearTimeout(r),Ta===a&&(Ta=null)})}}),u.api.feedback={submit:s((...e)=>Ta?.submit(...e),"submit"),list:s((...e)=>Ta?.list(...e),"list"),detail:s((...e)=>Ta?.detail(...e),"detail"),edit:s((...e)=>Ta?.edit(...e),"edit"),reply:s((...e)=>Ta?.reply(...e),"reply"),markRead:s((...e)=>Ta?.markRead(...e),"markRead"),quota:s((...e)=>Ta?.quota(...e),"quota")};var Nb="mwitools-guild-xp-style",bs=new Map,Eu=3600*1e3,g6=168*Eu;function lt(e,t){return u.config.isZH?e:t}s(lt,"t");function ps(e,t,a=4){let n=[{value:e,depth:0}],i=new Set;for(;n.length;){let{value:o,depth:r}=n.shift();if(!(!o||typeof o!="object"||i.has(o)||r>a)){i.add(o);for(let c of t)if(o[c]!==void 0&&o[c]!==null)return o[c];for(let c of Object.values(o))c&&typeof c=="object"&&n.push({value:c,depth:r+1})}}return null}s(ps,"findField");function Iu(e,t){if(!e||typeof e!="object")return{found:!1,value:void 0};for(let a of t)if(Object.prototype.hasOwnProperty.call(e,a))return{found:!0,value:e[a]};return{found:!1,value:void 0}}s(Iu,"findOwnField");function Hb(e){let t=Iu(e,["hideOnlineStatus","isOnlineHidden","onlineStatusHidden"]).value,a=Iu(e,["isOnline","online"]).value;if(t||a!==!0)return!1;let n=Iu(e,["actionType","currentActionType","currentActionHrid","actionHrid","currentAction"]);if(!n.found)return!1;if(n.value===null||n.value===!1)return!0;if(typeof n.value=="string"){let i=n.value.trim();return i===""||/(?:^|\/)idle$/i.test(i)}return!1}s(Hb,"isGuildMemberIdle");function Nu(e){return String(ps(e,["id","characterID","characterId","guildID","guildId","name"])??"")}s(Nu,"entityId");function h6(e){return String(ps(e,["name","guildName","characterName"])??"—")}s(h6,"entityName");function Hu(e){let t=ps(e,["guildExperience","totalGuildExperience","cumulativeGuildExperience","experience","totalExperience","xp"]);return Number.isFinite(Number(t))?Number(t):null}s(Hu,"entityXp");function Hr(e,t,a=""){let n=Nu(t);return n?`${e}:${a?`${a}:`:""}${n}`:""}s(Hr,"objectKey");async function Db(e){if(!e)return null;let t=await u.api.getXpHistory(e),a=u.api.calculateXpRates(t);return bs.set(e,a),a}s(Db,"refreshRate");async function Du(e,t,a="",n=Date.now()){let i=Hr(e,t,a),o=Hu(t);return!i||o===null?null:(await u.api.recordXpSnapshot(i,o,n),Db(i))}s(Du,"sampleEntity");async function Dr(e=!1){let t=Date.now(),a=u.state.guild,n=Nu(a);a&&await Du("guild",a,"",t),await Promise.all((u.state.guildCharacters??[]).map(i=>Du("member",i,n,t))),e&&await Promise.all((u.state.guildLeaderboard??[]).map(i=>Du("leaderboard",i,"",t)))}s(Dr,"sampleGuildState");function Pb(){if(document.getElementById(Nb))return;let e=document.createElement("style");e.id=Nb,e.textContent=`
.mwi-guild-xp-card { margin:10px 0; padding:11px 12px; border:1px solid rgba(255,255,255,.13); border-radius:8px; background:linear-gradient(135deg,rgba(255,255,255,.05),rgba(0,0,0,.17)); color:var(--color-text-primary,#eee); }
.mwi-guild-xp-head { display:flex; justify-content:space-between; gap:12px; align-items:baseline; }
.mwi-guild-xp-title { font-weight:700; font-size:.95rem; }
.mwi-guild-xp-sampled { color:var(--color-text-secondary,#999); font-size:.66rem; }
.mwi-guild-xp-grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(125px,1fr)); gap:7px; margin-top:8px; }
.mwi-guild-xp-metric { padding:7px 8px; border-radius:5px; background:rgba(0,0,0,.18); }
.mwi-guild-xp-metric small { display:block; color:var(--color-text-secondary,#aaa); }
.mwi-guild-xp-metric strong { display:block; margin-top:2px; color:#ffa500; }
.mwi-guild-trend-label { margin-top:8px; color:var(--color-text-secondary,#aaa); font-size:.68rem; }
.mwi-guild-trend { width:100%; height:180px; margin-top:8px; overflow:visible; }
.mwi-guild-trend-axis { stroke:rgba(255,255,255,.38); stroke-width:1; vector-effect:non-scaling-stroke; }
.mwi-guild-trend-grid { stroke:rgba(255,255,255,.1); stroke-width:1; vector-effect:non-scaling-stroke; }
.mwi-guild-trend-tick { fill:var(--color-text-secondary,#aaa); font-size:10px; }
.mwi-guild-trend-empty { fill:var(--color-text-secondary,#aaa); font-size:13px; text-anchor:middle; }
.mwi-guild-trend polyline { fill:none; stroke:#ffa500; stroke-width:2; vector-effect:non-scaling-stroke; }
.mwi-guild-idle { display:flex; flex-wrap:wrap; gap:5px; align-items:center; margin-top:8px; }
.mwi-guild-idle span { padding:2px 7px; border-radius:999px; background:rgba(255,255,255,.07); font-size:.68rem; }
.mwi-guild-members-wide { width:100% !important; max-width:860px !important; }
.mwi-guild-members-wide .mwi-guild-member-table { width:100%; }
.mwi-guild-member-table > thead > tr > th { white-space:nowrap; word-break:keep-all; }
.mwi-guild-member-table > tbody > tr > td:not(:first-child) { white-space:nowrap; word-break:keep-all; }
.mwi-guild-member-table > thead > tr > th:nth-child(2),
.mwi-guild-member-table > thead > tr > th:nth-child(3),
.mwi-guild-member-table > thead > tr > th:nth-child(4),
.mwi-guild-member-table > tbody > tr > td:nth-child(2),
.mwi-guild-member-table > tbody > tr > td:nth-child(3),
.mwi-guild-member-table > tbody > tr > td:nth-child(4) { min-width:38px; }
.mwi-guild-member-table > thead > tr > th:nth-child(5),
.mwi-guild-member-table > tbody > tr > td:nth-child(5) { min-width:96px; }
.mwi-guild-rate-cell { color:#ffa500; white-space:nowrap; min-width:105px; }
.mwi-guild-rate-content { display:flex; align-items:center; gap:5px; }
.mwi-guild-rate-value { flex:0 0 auto; }
.mwi-guild-rate-track { display:block; flex:1 1 42px; min-width:24px; max-width:68px; height:5px; overflow:hidden; border-radius:999px; background:rgba(255,255,255,.08); }
.mwi-guild-rate-fill { display:block; height:100%; min-width:2px; border-radius:inherit; background:rgba(91,134,255,.58); }
.mwi-guild-rate-sort { margin-left:4px; color:var(--color-text-secondary,#aaa); font-size:.62rem; }
.mwi-guild-div-rate-head,.mwi-guild-div-rates { display:grid; grid-template-columns:repeat(2,minmax(92px,1fr)); gap:8px; margin-left:auto; text-align:right; }
.mwi-guild-div-rate-head { padding:5px 8px; color:var(--color-text-secondary,#aaa); font-size:.68rem; }
.mwi-guild-div-rates { padding-left:10px; color:#ffa500; font-size:.7rem; }
`,(document.head??document.documentElement).appendChild(e)}s(Pb,"addStyles");function Pr(e,t=!1){return Number.isFinite(e)?`${u.api.numberFormatter(e)}/h`:t?lt("待再次采样","Awaiting another sample"):lt("样本不足","Not enough data")}s(Pr,"rateText");function Lr(e,t,a=""){let n=document.createElement("div");n.className="mwi-guild-xp-metric";let i=document.createElement("small");i.textContent=e;let o=document.createElement("strong");return t?.nodeType?o.append(t):o.textContent=t,o.title=a,n.append(i,o),n}s(Lr,"metric");function Lb(e,t=Date.now()){let a=t-g6,n=[...e].map(o=>({at:Number(o?.at),xp:Number(o?.xp)})).filter(o=>Number.isFinite(o.at)&&Number.isFinite(o.xp)).sort((o,r)=>o.at-r.at).filter(o=>o.at>=a),i=[];for(let o=1;o<n.length;o+=1){let r=n[o-1],c=n[o],l=c.at-r.at,d=c.xp-r.xp;l<=0||d<0||i.push({at:c.at,rate:d/l*Eu})}return i}s(Lb,"guildXpRatePoints");function Ga(e,t=""){let a=document.createElementNS("http://www.w3.org/2000/svg",e);return t&&a.setAttribute("class",t),a}s(Ga,"svgElement");function _6(e){if(!(e>0))return 1;let t=e/4,a=10**Math.floor(Math.log10(t)),n=t/a;return(n<=1?1:n<=2?2:n<=5?5:10)*a*4}s(_6,"niceRateCeiling");function y6(e,t){return new Intl.DateTimeFormat(u.config.isZH?"zh-CN":"en-US",{...t?{month:"numeric",day:"numeric"}:{hour:"2-digit",minute:"2-digit",hour12:!1}}).format(new Date(e))}s(y6,"trendTimeLabel");function w6(e){let n={left:58,right:12,top:10,bottom:30},i=520-n.left-n.right,o=180-n.top-n.bottom,r=Ga("svg");r.classList.add("mwi-guild-trend"),r.setAttribute("viewBox","0 0 520 180"),r.setAttribute("preserveAspectRatio","xMidYMid meet");let c=lt("公会经验获取速度(XP/小时)","Guild XP gain rate (XP/hour)");r.setAttribute("role","img"),r.setAttribute("aria-label",c);let l=Ga("title");l.textContent=c,r.append(l);let d=Lb(e);if(d.length<2){let y=Ga("text","mwi-guild-trend-empty");return y.setAttribute("x",String(520/2)),y.setAttribute("y",String(180/2)),y.textContent=lt("样本不足","Not enough data"),r.append(y),r}let m=_6(Math.max(...d.map(y=>y.rate))),p=d[0].at,b=d.at(-1).at,f=Ga("line","mwi-guild-trend-axis mwi-guild-axis-y");f.setAttribute("x1",String(n.left)),f.setAttribute("x2",String(n.left)),f.setAttribute("y1",String(n.top)),f.setAttribute("y2",String(n.top+o));let g=Ga("line","mwi-guild-trend-axis mwi-guild-axis-x");g.setAttribute("x1",String(n.left)),g.setAttribute("x2",String(n.left+i)),g.setAttribute("y1",String(n.top+o)),g.setAttribute("y2",String(n.top+o));for(let y=0;y<5;y+=1){let w=y/4,k=n.top+o-w*o,C=Ga("line","mwi-guild-trend-grid");C.setAttribute("x1",String(n.left)),C.setAttribute("x2",String(n.left+i)),C.setAttribute("y1",String(k)),C.setAttribute("y2",String(k));let x=Ga("text","mwi-guild-trend-tick mwi-guild-y-tick");x.setAttribute("x",String(n.left-7)),x.setAttribute("y",String(k+3)),x.setAttribute("text-anchor","end"),x.textContent=u.api.numberFormatter(m*w),r.append(C,x)}let h=b-p>24*Eu;for(let y=0;y<4;y+=1){let w=y/3,k=n.left+w*i,C=Ga("text","mwi-guild-trend-tick mwi-guild-x-tick");C.setAttribute("x",String(k)),C.setAttribute("y",String(n.top+o+19)),C.setAttribute("text-anchor",y===0?"start":y===3?"end":"middle"),C.textContent=y6(p+w*(b-p),h),r.append(C)}r.append(f,g);let _=Ga("polyline");return _.setAttribute("points",d.map(y=>{let w=n.left+(y.at-p)/Math.max(1,b-p)*i,k=n.top+o-y.rate/m*o;return`${w},${k}`}).join(" ")),r.append(_),r}s(w6,"trendSvg");function Pu(e=null){document.querySelectorAll(".mwi-guild-xp-card").forEach(t=>{t!==e&&t.remove()})}s(Pu,"removeGuildOverviewCards");function $b(){let e=document.querySelector('div[class*="GuildPanel_guildPanel"]');if(!e)return null;let a=[...e.querySelector('[role="tablist"]')?.querySelectorAll('[role="tab"]')??[]],n=a.find(l=>/^(概览|overview)$/i.test(l.textContent?.trim()??""))??a[0],i=n?.getAttribute("aria-selected");if(!(i!=null?i==="true":n?.classList.contains("Mui-selected")||n?.getAttribute("tabindex")==="0"))return null;let r=e.querySelector('[class*="GuildPanel_overviewTab"]'),c=r?.closest('[class*="TabPanel_tabPanel"]');return!r||c?.hidden||c?.className.includes("TabPanel_hidden")?null:r}s($b,"findGuildOverviewHost");async function gs(){let e=$b(),t=u.state.guild;if(!e||!t){Pu();return}let a=Hr("guild",t),n=bs.get(a)??await Db(a),i=$b();if(!i||i!==e){Pu();return}e=i;let o=e.querySelector(":scope > .mwi-guild-xp-card");Pu(o),o||(o=document.createElement("section"),o.className="mwi-guild-xp-card",e.prepend(o)),o.replaceChildren();let r=document.createElement("div");r.className="mwi-guild-xp-head";let c=document.createElement("div");c.className="mwi-guild-xp-title",c.textContent=lt("公会经验进度","Guild XP progress");let l=document.createElement("div");l.className="mwi-guild-xp-sampled",l.textContent=n?.lastSampleAt?`${lt("最后采样","Last sample")} ${new Date(n.lastSampleAt).toLocaleString()}`:lt("待采样","Awaiting samples"),r.append(c,l);let d=document.createElement("div");d.className="mwi-guild-xp-grid";let m=Hu(t),p=Number(ps(t,["nextLevelExperience","experienceForNextLevel","levelExperience"])),b=Number.isFinite(p)&&m!==null?Math.max(0,p-m):null,f=b!==null&&Number(n?.day)>0?b/n.day:null;d.append(Lr(lt("当前经验","Current XP"),u.api.createFormattedNumber(m)),Lr(lt("最近 XP/h","Recent XP/h"),Pr(n?.recent,!n?.lastSampleAt)),Lr(lt("1 小时平均","1-hour average"),Pr(n?.hour)),Lr(lt("24 小时平均","24-hour average"),Pr(n?.day)),Lr(lt("预计升级","Level ETA"),Number.isFinite(f)?u.api.timeReadable(f*3600):lt("样本不足","Not enough data")));let g=document.createElement("div");if(g.className="mwi-guild-trend-label",g.textContent=lt("最近 7 天经验获取速度(XP/小时)","XP gain rate over the last 7 days (XP/hour)"),o.append(r,d,g,w6(n?.points??[])),u.settings.get("guildIdleMembers")){let h=(u.state.guildCharacters??[]).filter(Hb),_=document.createElement("div");_.className="mwi-guild-idle";let y=document.createElement("b");y.textContent=`${lt("当前闲置","Idle now")} (${h.length}) · ${lt("状态更新","Updated")} ${new Date(u.state.guildStateUpdatedAt).toLocaleTimeString()}`,_.append(y);for(let w of h){let k=document.createElement("span");k.textContent=h6(w),_.append(k)}o.append(_)}}s(gs,"renderGuildOverview");function Ob(e,t,a,n=""){if(!e?.tHead?.rows?.[0]||!t.length)return;e.classList.add(`mwi-guild-${a}-table`),a==="member"&&e.closest('[class*="GuildPanel_membersTab__"]')?.classList.add("mwi-guild-members-wide");let i=e.tHead.rows[0];if(!i.querySelector(".mwi-guild-recent-head"))for(let[l,[d,m]]of[["mwi-guild-recent-head",lt("最近 XP/h","Recent XP/h")],["mwi-guild-day-head",lt("24 小时 XP/h","24h XP/h")]].entries()){let p=document.createElement("th");p.className=d;let b=document.createElement("span");b.textContent=m;let f=document.createElement("span");f.className="mwi-guild-rate-sort",f.textContent="↕",p.append(b,f),p.tabIndex=0,p.style.cursor="pointer",p.title=lt("点击按经验速率排序","Click to sort by XP rate");let g=s(()=>{let h=e.tBodies[0];if(!h)return;let _=p.dataset.direction==="desc"?1:-1;p.dataset.direction=_===-1?"desc":"asc",i.querySelectorAll(".mwi-guild-recent-head,.mwi-guild-day-head").forEach(w=>{if(w!==p){delete w.dataset.direction,w.setAttribute("aria-sort","none");let k=w.querySelector(".mwi-guild-rate-sort");k&&(k.textContent="↕")}}),p.setAttribute("aria-sort",_===-1?"descending":"ascending"),f.textContent=_===-1?"▼":"▲";let y=[...h.rows];y.sort((w,k)=>{let C=w.querySelectorAll(".mwi-guild-rate-cell")[l],x=k.querySelectorAll(".mwi-guild-rate-cell")[l],T=Number(C?.dataset.sortValue??-1),A=Number(x?.dataset.sortValue??-1);return T<0&&A<0?0:T<0?1:A<0?-1:_===-1?A-T:T-A}),y.forEach(w=>h.append(w))},"sortRows");p.addEventListener("click",g),p.addEventListener("keydown",h=>{h.key!=="Enter"&&h.key!==" "||(h.preventDefault(),g())}),i.append(p)}let o=new Map(t.map(l=>[Hr(a,l,n),l])),r=[...e.tBodies[0]?.rows??[]].map((l,d)=>{let m=l.dataset.mwiGuildEntityKey??"",p=o.get(m);return p||(p=t[d],m=Hr(a,p,n),m&&(l.dataset.mwiGuildEntityKey=m)),{row:l,key:m,rates:bs.get(m)}}),c=["recent","day"].map(l=>Math.max(0,...r.map(({rates:d})=>Number.isFinite(d?.[l])?d[l]:0)));r.forEach(({row:l,rates:d})=>{l.querySelectorAll(".mwi-guild-rate-cell").forEach(m=>m.remove());for(let[m,p]of[d?.recent,d?.day].entries()){let b=document.createElement("td");b.className="mwi-guild-rate-cell",b.dataset.sortValue=Number.isFinite(p)?String(p):"-1";let f=document.createElement("div");f.className="mwi-guild-rate-content";let g=document.createElement("span");if(g.className="mwi-guild-rate-value",g.textContent=Pr(p,!d?.lastSampleAt),f.append(g),Number.isFinite(p)&&c[m]>0){let h=document.createElement("span");h.className="mwi-guild-rate-track",h.setAttribute("aria-hidden","true");let _=document.createElement("span");_.className="mwi-guild-rate-fill",_.style.width=`${Math.max(0,p/c[m]*100)}%`,h.append(_),f.append(h)}b.append(f),l.append(b)}})}s(Ob,"appendRateColumns");function v6(e){let t=document.querySelector('div[class*="LeaderboardPanel_leaderboardTable"]');if(!t||!e.length)return;let a=t.parentElement.querySelector(":scope > .mwi-guild-div-rate-head");a||(a=document.createElement("div"),a.className="mwi-guild-div-rate-head",a.append(Object.assign(document.createElement("span"),{textContent:lt("最近 XP/h","Recent XP/h")}),Object.assign(document.createElement("span"),{textContent:lt("24 小时 XP/h","24h XP/h")})),t.before(a)),[...t.querySelectorAll('[class*="LeaderboardPanel_guildName"]')].forEach((i,o)=>{let r=i;for(;r.parentElement&&r.parentElement!==t;)r=r.parentElement;r.querySelector(":scope > .mwi-guild-div-rates")?.remove();let c=bs.get(Hr("leaderboard",e[o])),l=document.createElement("div");l.className="mwi-guild-div-rates";for(let d of[c?.recent,c?.day]){let m=document.createElement("span");m.dataset.sortValue=Number.isFinite(d)?String(d):"-1",m.textContent=Pr(d,!c?.lastSampleAt),l.append(m)}r.append(l)})}s(v6,"appendLeaderboardDivRates");function Lu(){if(u.settings.get("guildMemberXp")){let e=document.querySelector('div[class*="GuildPanel"] table');Ob(e,u.state.guildCharacters,"member",Nu(u.state.guild))}if(u.settings.get("guildLeaderboardXp")){let e=document.querySelector('div[class*="Leaderboard"] table');Ob(e,u.state.guildLeaderboard,"leaderboard"),e||v6(u.state.guildLeaderboard)}}s(Lu,"renderGuildTables"),u.features.register({id:"guildXpTracking",setting:"guildXpTracking",scope:"character",initialize({scope:e}){Dr(!1),e.add(u.onMessage("guild_updated",()=>Dr(!1))),e.add(u.onMessage("guild_characters_updated",()=>Dr(!1))),e.add(u.onMessage("leaderboard_updated",()=>Dr(!0)))}}),u.features.register({id:"guildOverview",setting:"guildOverview",scope:"character",dependsOn:["guildXpTracking"],initialize({scope:e}){Pb(),gs(),e.interval(gs,1500),e.add(()=>document.querySelectorAll(".mwi-guild-xp-card").forEach(t=>t.remove()))}});for(let e of["guildMemberXp","guildLeaderboardXp","guildIdleMembers"])u.features.register({id:e,setting:e,scope:"character",dependsOn:e==="guildIdleMembers"?["guildXpTracking","guildOverview"]:["guildXpTracking"],initialize({scope:t}){Pb(),Lu(),e==="guildIdleMembers"&&gs(),e!=="guildIdleMembers"&&t.interval(Lu,1500),t.add(()=>{if(e==="guildIdleMembers"){document.querySelectorAll(".mwi-guild-idle").forEach(n=>n.remove());return}let a=e==="guildMemberXp"?"member":"leaderboard";document.querySelectorAll(`table.mwi-guild-${a}-table`).forEach(n=>{a==="member"&&n.closest(".mwi-guild-members-wide")?.classList.remove("mwi-guild-members-wide"),n.querySelectorAll(".mwi-guild-rate-cell,.mwi-guild-recent-head,.mwi-guild-day-head").forEach(i=>i.remove()),n.classList.remove(`mwi-guild-${a}-table`)}),a==="leaderboard"&&document.querySelectorAll(".mwi-guild-div-rate-head,.mwi-guild-div-rates").forEach(n=>n.remove())})}});Object.assign(u.api,{sampleGuildState:Dr,renderGuildOverview:gs,renderGuildTables:Lu,getGuildEntityXp:Hu,getGuildXpRatePoints:Lb,isGuildMemberIdle:Hb});function ot(e,t){return u.config.isZH?e:t}s(ot,"t");async function x6(e){let t=await u.api.fetchMarketJSON(),a=!0;t||(console.error(u.config.isZH?"[MWITools] 市场数据不可用,战斗总结将不显示市场收益。":"[MWITools] Market data is unavailable; market revenue is omitted from the battle summary."),a=!1);let n=0,i=0,o=0;if(a&&e.unit.totalLootMap)for(let d of Object.values(e.unit.totalLootMap)){let m=d.count;d.itemHrid==="/items/coin"&&(o+=m),t.marketData[d.itemHrid]?(n+=t.marketData[d.itemHrid][0].a*m,i+=u.api.getNetSellPrice(d.itemHrid,0)*m):console.log(u.config.isZH?`[MWITools] 无法读取战利品价格:${d.itemHrid}`:`[MWITools] Could not read the loot price: ${d.itemHrid}`)}let r=0;if(e.unit.totalSkillExperienceMap)for(let d of Object.values(e.unit.totalSkillExperienceMap))r+=d;let c=0;l();function l(){c++;let d=document.querySelector(".BattlePanel_gainedExp__3SaCa")?.parentElement;if(d){let m=null,p=document.querySelector(".BattlePanel_combatInfo__sHGCe");if(p){let b=p.innerHTML.match(/(战斗时间|战斗时长|Combat Duration): (?:(\d+)d\s*)?(?:(\d+)h\s*)?(?:(\d+)m\s*)?(?:(\d+)s).*?(交战|战斗|Battles): (\d+).*?(战败|死亡次数|Deaths): (\d+)/);if(b){let f=parseInt(b[2],10)||0,g=parseInt(b[3],10)||0,h=parseInt(b[4],10)||0,_=parseInt(b[5],10)||0,y=parseInt(b[7],10)-1;m=f*86400+g*3600+h*60+_;let w=(y/m*3600).toFixed(1);d.insertAdjacentHTML("beforeend",`<div id="script_battleNumbers" style="color: ${u.config.SCRIPT_COLOR_MAIN};">${u.config.isZH?"每小时战斗: ":"Encounters/hour: "}${w}${u.config.isZH?" 次":""}</div>`)}}document.querySelector("div#script_battleNumbers").insertAdjacentHTML("afterend",`<div id="script_totalIncome" style="color: ${u.config.SCRIPT_COLOR_MAIN};">${u.config.isZH?"总收获: ":"Total revenue: "}${u.api.numberFormatter(n)} / ${u.api.numberFormatter(i)}</div>`),m&&(document.querySelector("div#script_totalIncome").insertAdjacentHTML("afterend",`<div id="script_averageIncome" style="color: ${u.config.SCRIPT_COLOR_MAIN};">${u.config.isZH?"每小时收获: ":"Revenue/hour: "}${u.api.numberFormatter(n/(m/60/60))} / ${u.api.numberFormatter(i/(m/60/60))}</div>`),document.querySelector("div#script_averageIncome").insertAdjacentHTML("afterend",`<div id="script_totalIncomeDay" style="color: ${u.config.SCRIPT_COLOR_MAIN};">${u.config.isZH?"每天收获: ":"Revenue/day: "}${u.api.numberFormatter(n/(m/60/60)*24)} / ${u.api.numberFormatter(i/(m/60/60)*24)}</div>`),document.querySelector("div#script_totalIncomeDay").insertAdjacentHTML("afterend",`<div id="script_avgRawCoinHour" style="color: ${u.config.SCRIPT_COLOR_MAIN};">${u.config.isZH?"每小时仅金币收获: ":"Raw coins/hour: "}${u.api.numberFormatter(o/(m/60/60))}</div>`)),document.querySelector("div#script_avgRawCoinHour").insertAdjacentHTML("afterend",`<div id="script_totalSkillsExp" style="color: ${u.config.SCRIPT_COLOR_MAIN};">${u.config.isZH?"总经验: ":"Total exp: "}${u.api.numberFormatter(r)}</div>`),m?(document.querySelector("div#script_totalSkillsExp").insertAdjacentHTML("afterend",`<div id="script_averageSkillsExp" style="color: ${u.config.SCRIPT_COLOR_MAIN};">${u.config.isZH?"每小时总经验: ":"Total exp/hour: "}${u.api.numberFormatter(r/(m/60/60))}</div>`),[{skillHrid:"/skills/magic",zhName:"魔法",enName:"Magic"},{skillHrid:"/skills/ranged",zhName:"远程",enName:"Ranged"},{skillHrid:"/skills/defense",zhName:"防御",enName:"Defense"},{skillHrid:"/skills/melee",zhName:"近战",enName:"Melee"},{skillHrid:"/skills/attack",zhName:"攻击",enName:"Attack"},{skillHrid:"/skills/intelligence",zhName:"智力",enName:"Intelligence"},{skillHrid:"/skills/stamina",zhName:"耐力",enName:"Stamina"}].forEach(b=>{let f=e.unit.totalSkillExperienceMap[b.skillHrid];f&&document.querySelector("div#script_totalSkillsExp").insertAdjacentHTML("afterend",`<div style="color: ${u.config.SCRIPT_COLOR_MAIN};">${u.config.isZH?"每小时":""}${u.config.isZH?b.zhName:b.enName}${u.config.isZH?"经验: ":" exp/hour: "}${u.api.numberFormatter(f/(m/60/60))}</div>`)})):console.error(u.config.isZH?"[MWITools] 战斗时长无效,无法显示平均经验。":"[MWITools] Battle duration is invalid; average XP cannot be displayed.")}else c<=10?setTimeout(l,200):console.error(u.config.isZH?"[MWITools] 重试 10 次后仍未找到战斗总结。":"[MWITools] Battle summary was not found after 10 attempts.")}s(l,"findElem")}s(x6,"handleBattleSummary");function hs(){let e=u.state.initData_itemDetailMap;if(!e)return;let t=document.querySelectorAll("div.Item_itemContainer__x7kH1 div.Item_item__2De2O.Item_clickable__3viV6");for(let a of t){if(a.querySelector("div.Item_name__2C42x"))continue;let n=a.querySelector("use")?.getAttribute("href");if(!n?.includes("#"))continue;let o="/items/"+n.split("#")[1],r;try{r=e[o]}catch{return}let c=r?.itemLevel,l=r?.abilityBookDetail?.levelRequirements?.[0]?.level;if(r?.equipmentDetail&&c&&c>0)a.querySelector("div.script_itemLevel")||(a.style.position="relative",a.insertAdjacentHTML("beforeend",`<div class="script_itemLevel" style="z-index: 1; position: absolute; top: 2px; right: 2px; text-align: right; color: ${u.config.SCRIPT_COLOR_MAIN};">${c}</div>`)),!r?.equipmentDetail?.type?.includes("_tool")&&a.parentElement.parentElement.parentElement.parentElement.className.includes("MarketplacePanel_marketItems__D4k7e")&&qb(a,r);else if(l&&l>0)a.querySelector("div.script_itemLevel")||(a.style.position="relative",a.insertAdjacentHTML("beforeend",`<div class="script_itemLevel" style="z-index: 1; position: absolute; top: 2px; right: 2px; text-align: right; color: ${u.config.SCRIPT_COLOR_MAIN};">${l}</div>`));else if(u.settings.settingsMap.showsKeyInfoInIcon.isTrue&&(o.includes("_key_fragment")||o.includes("_key"))){let d=new Map;d.set("/items/blue_key_fragment",u.config.isZH?"图3":"Z3"),d.set("/items/green_key_fragment",u.config.isZH?"图4":"Z4"),d.set("/items/purple_key_fragment",u.config.isZH?"图5":"Z5"),d.set("/items/white_key_fragment",u.config.isZH?"图6":"Z6"),d.set("/items/orange_key_fragment",u.config.isZH?"图7":"Z7"),d.set("/items/brown_key_fragment",u.config.isZH?"图8":"Z8"),d.set("/items/stone_key_fragment",u.config.isZH?"图9":"Z9"),d.set("/items/dark_key_fragment",u.config.isZH?"图10":"Z10"),d.set("/items/burning_key_fragment",u.config.isZH?"图11":"Z11"),d.set("/items/chimerical_entry_key",u.config.isZH?"牢1":"D1"),d.set("/items/sinister_entry_key",u.config.isZH?"牢2":"D2"),d.set("/items/enchanted_entry_key",u.config.isZH?"牢3":"D3"),d.set("/items/pirate_entry_key",u.config.isZH?"牢4":"D4"),d.set("/items/chimerical_chest_key","3.4.5.6"),d.set("/items/sinister_chest_key","5.7.8.10"),d.set("/items/enchanted_chest_key","7.8.9.11"),d.set("/items/pirate_chest_key","6.9.10.11"),a.querySelector("div.script_key")||(a.style.position="relative",a.insertAdjacentHTML("beforeend",`<div class="script_key" style="z-index: 1; position: absolute; top: 2px; right: 2px; text-align: right; color: ${u.config.SCRIPT_COLOR_MAIN};">${d.get(o)}</div>`))}}}s(hs,"addItemLevels");var _s=1,ys=1e3,$r="all",Ii="all";function $u(){let e=document.querySelector(".MarketplacePanel_itemFilterContainer__3F3td"),t=document.querySelector("#script_filters");if(e&&!t){e.insertAdjacentHTML("afterend",`<div id="script_filters" style="float: left; color: ${u.config.SCRIPT_COLOR_MAIN};"></div>`),t=document.querySelector("#script_filters"),t.insertAdjacentHTML("beforeend",`<span id="script_filter_level" style="float: left; color: ${u.config.SCRIPT_COLOR_MAIN};">${u.config.isZH?"等级: 大于等于 ":"Equipment level: >= "}
<select name="script_filter_level_select" id="script_filter_level_select">
<option value="1">${ot("全部","All")}</option>
<option value="10">10</option>
<option value="20">20</option>
<option value="30">30</option>
<option value="40">40</option>
<option value="50">50</option>
<option value="60">60</option>
<option value="65">65</option>
<option value="70">70</option>
<option value="75">75</option>
<option value="80">80</option>
<option value="85">85</option>
<option value="90">90</option>
<option value="95">95</option>
<option value="100">100</option>
</select> </span>`),t.insertAdjacentHTML("beforeend",`<span id="script_filter_level_to" style="float: left; color: ${u.config.SCRIPT_COLOR_MAIN};">${u.config.isZH?"小于 ":"< "}
<select name="script_filter_level_select_to" id="script_filter_level_select_to">
<option value="1000">${ot("全部","All")}</option>
<option value="10">10</option>
<option value="20">20</option>
<option value="30">30</option>
<option value="40">40</option>
<option value="50">50</option>
<option value="60">60</option>
<option value="65">65</option>
<option value="70">70</option>
<option value="75">75</option>
<option value="80">80</option>
<option value="85">85</option>
<option value="90">90</option>
<option value="95">95</option>
<option value="100">100</option>
</select> </span>`),t.insertAdjacentHTML("beforeend",`<span id="script_filter_skill" style="float: left; color: ${u.config.SCRIPT_COLOR_MAIN};">${u.config.isZH?"职业: ":"Class: "}
<select name="script_filter_skill_select" id="script_filter_skill_select">
<option value="all">${ot("全部","All")}</option>
<option value="attack">${ot("攻击","Attack")}</option>
<option value="melee">${ot("近战","Melee")}</option>
<option value="defense">${ot("防御","Defense")}</option>
<option value="ranged">${ot("远程","Ranged")}</option>
<option value="magic">${ot("魔法","Magic")}</option>
<option value="others">${ot("其他","Others")}</option>
</select> </span>`),t.insertAdjacentHTML("beforeend",`<span id="script_filter_location" style="float: left; color: ${u.config.SCRIPT_COLOR_MAIN};">${u.config.isZH?"部位: ":"Slot: "}
<select name="script_filter_location_select" id="script_filter_location_select">
<option value="all">${ot("全部","All")}</option>
<option value="main_hand">${ot("主手","Main Hand")}</option>
<option value="off_hand">${ot("副手","Off Hand")}</option>
<option value="two_hand">${ot("双手","Two Hand")}</option>
<option value="head">${ot("头部","Head")}</option>
<option value="body">${ot("身体","Body")}</option>
<option value="hands">${ot("手部","Hands")}</option>
<option value="legs">${ot("腿部","Legs")}</option>
<option value="feet">${ot("脚部","Feet")}</option>
<option value="neck">${ot("项链","Neck")}</option>
<option value="earrings">${ot("耳饰","Earrings")}</option>
<option value="ring">${ot("戒指","Ring")}</option>
<option value="pouch">${ot("袋子","Pouch")}</option>
<option value="back">${ot("背部","Back")}</option>
</select> </span>`);let a=document.querySelector("#script_filter_level_select");a.addEventListener("change",function(){a.value&&!isNaN(a.value)&&(_s=Number(a.value))});let n=document.querySelector("#script_filter_level_select_to");n.addEventListener("change",function(){n.value&&!isNaN(n.value)&&(ys=Number(n.value))});let i=document.querySelector("#script_filter_skill_select");i.addEventListener("change",function(){i.value&&(Ii=i.value)});let o=document.querySelector("#script_filter_location_select");o.addEventListener("change",function(){o.value&&($r=o.value)})}}s($u,"addMarketFilterButtons");function qb(e,t){if(!t.equipmentDetail)return;let a=t.itemLevel,n=t.equipmentDetail.type,i=t.equipmentDetail.levelRequirements,o=!1;o=n&&n.includes($r),$r==="all"&&(o=!0);let r=!1;for(let c of i)c.skillHrid.includes(Ii)&&(r=!0);Ii==="others"&&(r=!["attack","melee","defense","ranged","magic"].some(l=>{for(let d of i)if(d.skillHrid.includes(l))return!0})),Ii==="all"&&(r=!0),a>=_s&&a<ys&&o&&r?e.style.display="block":e.style.display="none"}s(qb,"handleMarketItemFilter");function Ou(){let e=document.querySelectorAll("div.RandomTask_randomTask__3B9fA div.RandomTask_name__1hl1b");for(let t of e){if(t.querySelector("span.script_taskMapIndex"))continue;let a=u.api.getOriTextFromElement(t);if(!a.startsWith("Defeat - ")&&!a.startsWith("击败 - "))continue;let n=a.replace("Defeat - ","").replace("击败 - ",""),i=null;u.config.isZHInGameSetting&&(i=(u.api.getOthersFromZhName(n)?u.api.getOthersFromZhName(n):u.api.getActionEnNameFromZhName(n))?.replaceAll("/monsters/","/actions/combat/"));let o=null;for(let l of Object.values(u.state.initData_actionDetailMap))if(l.hrid.includes("/combat/")){if(l.hrid===i||l.name.toLowerCase()===n.toLowerCase()){o=l;break}else if(l.combatZoneInfo.fightInfo.battlesPerBoss===10&&(i?.replaceAll("/actions/combat/","/monsters/")===l.combatZoneInfo.fightInfo.bossSpawns[0].combatMonsterHrid||"/monsters/"+n.toLowerCase().replaceAll(" ","_")===l.combatZoneInfo.fightInfo.bossSpawns[0].combatMonsterHrid)){o=l;break}}let r=o?.category,c=u.state.initData_actionCategoryDetailMap?.[r]?.sortIndex;c&&t.insertAdjacentHTML("beforeend",`<span class="script_taskMapIndex" style="text-align: right; color: ${u.config.SCRIPT_COLOR_MAIN};"> ${u.config.isZH?"图":"Z"}${c}</span>`)}}s(Ou,"handleTaskCard");function qu(){let e=document.querySelectorAll("div.MainPanel_subPanelContainer__1i-H9 div.CombatPanel_tabsComponentContainer__GsQlg div.MuiTabs-root.MuiTabs-vertical.css-6x4ics button.MuiButtonBase-root.MuiTab-root.MuiTab-textColorPrimary.css-1q2h7u5 span.MuiBadge-root.TabsComponent_badge__1Du26.css-1rzb3uu"),t=1;for(let a of e)a.querySelector("span.script_mapIndex")||a.insertAdjacentHTML("afterbegin",`<span class="script_mapIndex" style="color: ${u.config.SCRIPT_COLOR_MAIN};">${t++}. </span>`)}s(qu,"addIndexToMaps"),Object.assign(u.api,{handleBattleSummary:x6,addItemLevels:hs,addMarketFilterButtons:$u,handleMarketItemFilter:qb,handleTaskCard:Ou,addIndexToMaps:qu}),Object.defineProperties(u.state,{onlyShowItemsAboveLevel:{enumerable:!0,get(){return _s},set(e){_s=e}},onlyShowItemsBelowLevel:{enumerable:!0,get(){return ys},set(e){ys=e}},onlyShowItemsType:{enumerable:!0,get(){return $r},set(e){$r=e}},onlyShowItemsSkillReq:{enumerable:!0,get(){return Ii},set(e){Ii=e}}}),u.features.register({id:"itemIconLevel",setting:"itemIconLevel",initialize({scope:e}){hs(),e.interval(hs,500),e.add(()=>document.querySelectorAll(".script_itemLevel,.script_key").forEach(t=>t.remove()))}}),u.features.register({id:"showsKeyInfoInIcon",setting:"showsKeyInfoInIcon",dependsOn:["itemIconLevel"],initialize(){return hs(),()=>document.querySelectorAll(".script_key").forEach(e=>e.remove())}}),u.features.register({id:"marketFilter",setting:"marketFilter",initialize({scope:e}){$u(),e.interval($u,500),e.add(()=>document.querySelector("#script_filters")?.remove())}}),u.features.register({id:"taskMapIndex",setting:"taskMapIndex",scope:"character",initialize({scope:e}){Ou(),e.interval(Ou,500),e.add(()=>document.querySelectorAll(".script_taskMapIndex").forEach(t=>t.remove()))}}),u.features.register({id:"mapIndex",setting:"mapIndex",initialize({scope:e}){qu(),e.interval(qu,500),e.add(()=>document.querySelectorAll(".script_mapIndex").forEach(t=>t.remove()))}});var k6=[{zh:"插件合集 Q7",en:"Plugin collection Q7",url:"https://js.nainai.eu.org/"},{zh:"利润网 Polokikiki",en:"Profit site Polokikiki",url:"https://polokikiki.github.io/Milkonomy/#/dashboard"},{zh:"战斗模拟 shykai",en:"Combat sim shykai",url:"https://shykai.github.io/MWICombatSimulatorTest/dist/"},{zh:"新战斗模拟 Stella",en:"New combat sim Stella",url:"https://mwisim.org/combat/setup"},{zh:"战斗榜 socko",en:"Combat Tracker socko",url:"https://sockosnewcombattracker.pages.dev/"},{zh:"人才市场 Shiin",en:"Talent market Shiin",url:"https://greasyfork.org/zh-CN/scripts/559347-mwi-talent-market"}];function Ru(e,t){let a=document.createElement("div");return a.setAttribute("class","NavigationBar_minorNavigationLink__31K7Y"),a.dataset.mwitoolsExternalLink="true",a.style.color=u.config.SCRIPT_COLOR_MAIN,a.textContent=e,a.addEventListener("click",t),a}s(Ru,"createMinorNavigationLink");function S6(){if(!u.settings.get("ThirdPartyLinks"))return;let e=document.querySelector("div.NavigationBar_minorNavigationLinks__dbxh7");if(!e||e.querySelector('[data-mwitools-external-link="true"]'))return;let t=k6.map(n=>Ru(u.config.isZH?n.zh:n.en,()=>window.open(n.url,"_blank")));u.config.isZH&&t.push(Ru("牛牛手册",()=>{window.open("https://test-ctmd6jnzo6t9.feishu.cn/docx/KG9ddER6Eo2uPoxJFkicsvbEnCe","_blank")})),t.push(Ru(u.config.isZH?"插件设置":"Script settings",()=>{let n=document.querySelectorAll(".NavigationBar_navigationLink__3eAHA");n[n.length-1]?.click()}));let a=document.createDocumentFragment();t.forEach(n=>a.append(n)),e.insertBefore(a,e.firstChild)}s(S6,"add3rdPartyLinks");var Or=new Map;function C6(){for(let e of Or.values())e.disconnect();Or.clear()}s(C6,"disconnectActionQueueObservers");function A6(e){if(!u.settings.get("actionQueue"))return;Bu(e);let t=e.querySelector(".QueuedActions_actions__2Lur6");if(!t||Or.has(e))return;let a=new MutationObserver(()=>{if(!u.settings.get("actionQueue")){a.disconnect(),Or.delete(e);return}Bu(e)});Or.set(e,a),a.observe(t,{characterData:!1,subtree:!1,childList:!0})}s(A6,"handleActionQueueMenue");function Bu(e){let t=e.querySelectorAll("div.QueuedActions_action__r3HlD");if(!t.length)return;if(t.length!==u.state.currentActionsHridList.length-1){console.error(u.config.isZH?"[MWITools] 行动队列提示中的行动数量不一致。":"[MWITools] Action count mismatch in the action queue tooltip.");return}let a=0,n=!1,i=0,o=!1;for(let l of u.state.currentActionsHridList){let d=l.actionHrid,m=l.maxCount-l.currentCount,p=m===0||d.includes("/combat/");p&&(o=!0);let b=u.state.initData_actionDetailMap[d];if(!b)continue;let f=b.baseTimeCost/1e9,g=u.api.getTotalEffiPercentage(d),h=u.api.getToolsSpeedBuffByActionHrid(d),_=f/(1+h/100);_/=1+g/100;let y=m*_,w=u.config.isZH?"到 ∞ ":"Complete at ∞ ";if(!o){i+=y;let k=new Date;k.setSeconds(k.getSeconds()+i),w=`${u.config.isZH?"到 ":"Complete at "}${String(k.getHours()).padStart(2,"0")}:${String(k.getMinutes()).padStart(2,"0")}:${String(k.getSeconds()).padStart(2,"0")}`}if(n){let k=`<div class="script_actionTime" style="color: ${u.config.SCRIPT_COLOR_MAIN};">${p?"[ ∞ ] ":`[${u.api.timeReadable(y)}]`} ${w}</div>`,C=t[a]?.querySelector("div"),x=C?.querySelector("div.script_actionTime");x?x.outerHTML=k:C?.insertAdjacentHTML("beforeend",k),a+=1}n=!0}let r=`<div id="script_queueTotalTime" style="color: ${u.config.SCRIPT_COLOR_MAIN};">${u.config.isZH?"总时间:":"Total time: "}${o?"[ ∞ ] ":`[${u.api.timeReadable(i)}]`}</div>`,c=document.querySelector("div#script_queueTotalTime");c?c.outerHTML=r:e.insertAdjacentHTML("afterend",r)}s(Bu,"handleActionQueueMenueCalculateTime");function M6(e){return e?e.getAttribute("script_translatedfrom")||e.textContent:(console.error(u.config.isZH?"[MWITools] 无法读取空元素的文字。":"[MWITools] Cannot read text from a missing element."),"")}s(M6,"getOriTextFromElement"),Object.assign(u.api,{add3rdPartyLinks:S6,disconnectActionQueueObservers:C6,getOriTextFromElement:M6,handleActionQueueMenue:A6,handleActionQueueMenueCalculateTime:Bu});var Tt=Object.freeze({playerLevel:140,houseLevel:8,tool:{hrid:"/items/celestial_enhancer",enhancementLevel:14},top:{hrid:"/items/enhancers_top",enhancementLevel:10},bottoms:{hrid:"/items/enhancers_bottoms",enhancementLevel:10},gloves:{hrid:"/items/enchanted_gloves",enhancementLevel:10},cape:{hrid:"/items/chance_cape_refined",enhancementLevel:5},teas:["/items/ultra_enhancing_tea","/items/blessed_tea"],ultraTeaLevel:8,ultraTeaSpeed:.06,blessedChance:.01,houseSpeedPerLevel:.01,houseSuccessPerLevel:5e-4,baseActionSeconds:12,teaDurationSeconds:300}),zu=[.5,.45,.45,.4,.4,.4,.35,.35,.35,.35,.3,.3,.3,.3,.3,.3,.3,.3,.3,.3],T6=[0,1,2.1,3.3,4.6,6,7.5,9.1,10.8,12.6,14.5,16.7,19.2,22,25.1,28.5,32.2,36.2,40.5,45.1,50],bn=1e-9;function ws(e){let t=Number(e);return Number.isFinite(t)&&t>0?t:0}s(ws,"finitePositive");function Rb(e,t){if(!e)return t;let a=Array.isArray(e)?e:Object.keys(e).sort((n,i)=>Number(n)-Number(i)).map(n=>e[n]);return a.length?a.map(Number):t}s(Rb,"normalizedTable");function E6(e,t){let a=Number(e[t]??e.at(-1));return Number.isFinite(a)?a>1?a/100:a:0}s(E6,"successRateAt");function I6(e,t){let a=e.length,n=e.map((o,r)=>[...o.map(Number),Number(t[r])]);for(let o=0;o<a;o++){let r=o;for(let l=o+1;l<a;l++)Math.abs(n[l][o])>Math.abs(n[r][o])&&(r=l);if(Math.abs(n[r][o])<1e-12)return null;r!==o&&([n[r],n[o]]=[n[o],n[r]]);let c=n[o][o];for(let l=o;l<=a;l++)n[o][l]/=c;for(let l=0;l<a;l++){if(l===o)continue;let d=n[l][o];if(!(Math.abs(d)<1e-15))for(let m=o;m<=a;m++)n[l][m]-=d*n[o][m]}}let i=n.map(o=>o[a]);return i.every(Number.isFinite)?i:null}s(I6,"solveLinearSystem");function qr(e,t,a,n){let i=e?.[a.hrid]?.equipmentDetail,o=Number(i?.noncombatStats?.[n]),r=Number(i?.noncombatEnhancementBonuses?.[n]??0),c=Number(t[a.enhancementLevel]);return!Number.isFinite(o)||!Number.isFinite(c)?null:o+r*c}s(qr,"equipmentStat");function Bb({itemLevel:e,itemDetailMap:t=u.state.initData_itemDetailMap,bonusMultiplierTable:a=u.state.initData_enhancementLevelTotalBonusMultiplierTable}={}){let n=Rb(a,T6),i=qr(t,n,Tt.tool,"enhancingSuccess"),o=qr(t,n,Tt.gloves,"enhancingSpeed"),r=qr(t,n,Tt.top,"enhancingSpeed"),c=qr(t,n,Tt.bottoms,"enhancingSpeed"),l=qr(t,n,Tt.cape,"enhancingSpeed"),d=Number(e);if(i===null||r===null||c===null||o===null||l===null||!Number.isFinite(d)||d<=0)return null;let m=Tt.playerLevel+Tt.ultraTeaLevel,b=(m>=d?(m-d)*5e-4:-.5*(1-m/d))+i+Tt.houseLevel*Tt.houseSuccessPerLevel,f=o+r+c+l+Tt.houseLevel*Tt.houseSpeedPerLevel+Tt.ultraTeaSpeed+Math.max(0,m-d)*.01;return{effectiveLevel:m,toolSuccess:i,gloveSpeed:o,topSpeed:r,bottomsSpeed:c,capeSpeed:l,successBonus:b,speedBonus:f,blessedChance:Tt.blessedChance,secondsPerAction:Tt.baseActionSeconds/(1+f)}}s(Bb,"getEnhancementProfileStats");function Fu(e,t,a,n,i){n<=0||a>=i||(e[a][t]-=n)}s(Fu,"addTransition");function vs({targetLevel:e,protectLevel:t,successRates:a=zu,successBonus:n,blessedChance:i}){if(e<1)return null;let o=Array.from({length:e},(p,b)=>Array.from({length:e},(f,g)=>b===g?1:0)),r=Array(e).fill(0);r[0]=1;let c=[];for(let p=0;p<e;p++){let b=Math.min(1,E6(a,p)*(1+n)),f=Math.max(0,1-b);c[p]=f,Fu(o,p,p+1,b*(1-i),e),Fu(o,p,p+2,b*i,e);let g=p>=t?Math.max(0,p-1):0;Fu(o,p,g,f,e)}let l=I6(o,r);if(!l||l.some(p=>p<-bn||!Number.isFinite(p)))return null;let d=l.map(p=>Math.abs(p)<bn?0:p),m=d.reduce((p,b,f)=>p+(f>=t?b*c[f]:0),0);return{actionsByLevel:d,totalActions:d.reduce((p,b)=>p+b,0),protectionCount:m}}s(vs,"calculateNormalEnhancementFlow");function N6(e,t){let a=Array(e+1).fill(0),n=Array(e).fill(0);a[e]=1;for(let r=e-1;r>=t;r--){let c=a[r+1];n[r]=c,a[r]+=c,a[r-1]+=c}let i=a[t],o=a[t-1];return{actionsByLevel:n,aCount:i,bCount:o,mirrorCount:i+o-1}}s(N6,"calculateMirrorRequirements");function zb({targetLevel:e,protectLevel:t,philosopherStartLevel:a,successRates:n=zu,successBonus:i,blessedChance:o}){if(e<=1||a<1||a>=e)return null;let r=N6(e,a),c=vs({targetLevel:a,protectLevel:t,successRates:n,successBonus:i,blessedChance:o}),l=a>1?vs({targetLevel:a-1,protectLevel:t,successRates:n,successBonus:i,blessedChance:o}):{actionsByLevel:[],totalActions:0,protectionCount:0};if(!c||!l)return null;let d=[...r.actionsByLevel];for(let b=0;b<a;b++)d[b]=r.aCount*(c.actionsByLevel[b]??0)+r.bCount*(l.actionsByLevel[b]??0);let m=r.aCount*c.totalActions+r.bCount*l.totalActions,p=r.aCount*c.protectionCount+r.bCount*l.protectionCount;return{actionsByLevel:d,baseItemCount:r.aCount+r.bCount,mirrorCount:r.mirrorCount,protectionCount:p,totalActions:m+r.mirrorCount,aCount:r.aCount,bCount:r.bCount}}s(zb,"calculatePhilosopherEnhancementFlow");function Rr(e=[]){return{status:"unavailable",totalCost:null,baseCost:null,refinementCost:null,totalSeconds:null,normalProtectStart:null,expectedProtectionCount:null,expectedNormalProtectionCount:null,expectedPhilosopherMirrorCount:null,philosopherStart:null,aLevel:null,aCount:null,bLevel:null,bCount:null,missingMarketValues:[...new Set(e)]}}s(Rr,"unavailableResult");function H6(e,t,a){if(e===t)return{actionHrid:"",inputItems:[]};let i=(a instanceof Map?[...a.entries()]:Object.entries(a??{})).find(([,c])=>c?.upgradeItemHrid===t&&c?.outputItems?.some(l=>l.itemHrid===e));if(!i)return null;let[o,r]=i;return{actionHrid:r.hrid??o,inputItems:r.inputItems??[]}}s(H6,"refinementRecipe");function D6(e,t){let a=e.inputItems.map(r=>({itemHrid:r.itemHrid,count:Number(r.count)||0}));if(!e.actionHrid||typeof t!="function")return a;let n=t(e.actionHrid,1,{respectInventoryLimit:!1});if(!["complete","incomplete"].includes(n?.status)||!Array.isArray(n.inputs))return a;let i=n.inputs.filter(r=>!r.isUpgradeItem).map(r=>({itemHrid:r.itemHrid,count:Number(r.effectiveCount)||0})),o=ws(n.actionsPerHour);if(o)for(let r of n.teaEffects?.drinks??[]){let c=ws(r.countPerHour)/o;r.itemHrid&&c>0&&i.push({itemHrid:r.itemHrid,count:c})}return i}s(D6,"refinementCostComponents");function ju({itemHrid:e,targetLevel:t,itemDetailMap:a=u.state.initData_itemDetailMap,successRateTable:n=u.state.initData_enhancementLevelSuccessRateTable,bonusMultiplierTable:i=u.state.initData_enhancementLevelTotalBonusMultiplierTable,actionDetailMap:o=u.state.initData_actionDetailMap,getFairValue:r=u.api.getFairValue,getMarketValue:c=r,projectAction:l=u.api.projectAction,forcedProtectionItemHrid:d=null,allowPhilosopherMirror:m=!0}={}){let p=Math.max(0,Math.floor(Number(t)||0)),b=e.endsWith("_refined")?e.replace("_refined",""):e,f=a?.[b],g=H6(e,b,o);if(g===null||!f?.enhancementCosts?.length||p<1)return Rr();let h=Bb({itemLevel:f.itemLevel,itemDetailMap:a,bonusMultiplierTable:i});if(!h)return Rr();let _=new Set,y=s((W,K,le=0)=>{if(K==="/items/coin")return 1;let D=ws(W?.(K,le));return D||_.add(K),D},"resolvePrice"),w=s((W,K=0)=>y(r,W,K),"acquisitionPrice"),k=s((W,K=0)=>y(c,W,K),"marketPrice"),C=s((W,K=0)=>W==="/items/coin"?1:ws(c?.(W,K)),"optionalMarketPrice"),x=w(b,0),T=0,A=!x;for(let W of f.enhancementCosts){let K=k(W.itemHrid,0);K||(A=!0),T+=K*Number(W.count||0)}let I=0;for(let W of D6(g,l)){let K=w(W.itemHrid,0);K||(A=!0),I+=K*Number(W.count||0)}let q=k("/items/ultra_enhancing_tea",0),B=k("/items/blessed_tea",0);if((!q||!B)&&(A=!0),A)return Rr([..._]);let j=null,V=s((W,K)=>{W&&K>0&&(!j||K<j.value)&&(j={hrid:W,value:K})},"considerProtection");if(d)V(d,C(d,0));else{V(b,C(b,0));for(let W of new Set(f.protectionItemHrids??[]))V(W,C(W,0));V("/items/mirror_of_protection",C("/items/mirror_of_protection",0))}let O=j?.value??0,M=k("/items/philosophers_mirror",0),L=Rb(n,zu),F=h.secondsPerAction/Tt.teaDurationSeconds*q,R=h.secondsPerAction/Tt.teaDurationSeconds*B,te=T+F+R,X=null;for(let W=1;W<=p;W++){let K=vs({targetLevel:p,protectLevel:W,successRates:L,successBonus:h.successBonus,blessedChance:h.blessedChance});if(!K||K.protectionCount>bn&&!O)continue;let le=x+K.totalActions*te+K.protectionCount*O;(!X||le<X.totalCost)&&(X={mode:"normal",totalCost:le,totalActions:K.totalActions,protectionCount:K.protectionCount,mirrorCount:0,protectLevel:W,philosopherStartLevel:null,aCount:0,bCount:0})}if(m&&M>0)for(let W=1;W<p;W++)for(let K=1;K<=W;K++){let le=zb({targetLevel:p,protectLevel:K,philosopherStartLevel:W,successRates:L,successBonus:h.successBonus,blessedChance:h.blessedChance});if(!le||le.baseItemCount<-bn||le.protectionCount>bn&&!O)continue;let D=le.baseItemCount*x+le.totalActions*(T+F)+(le.totalActions-le.mirrorCount)*R+le.protectionCount*O+le.mirrorCount*M;(!X||D<X.totalCost)&&(X={mode:"philosopher",totalCost:D,totalActions:le.totalActions,protectionCount:le.protectionCount,mirrorCount:le.mirrorCount,protectLevel:K,philosopherStartLevel:W,aCount:le.aCount,bCount:le.bCount})}return X?{status:"complete",totalCost:X.totalCost+I,baseCost:x,refinementCost:I,totalSeconds:X.totalActions*h.secondsPerAction,normalProtectStart:X.protectionCount>bn?X.protectLevel:null,expectedProtectionCount:X.mode==="philosopher"?X.mirrorCount:X.protectionCount,expectedNormalProtectionCount:X.protectionCount,expectedPhilosopherMirrorCount:X.mirrorCount,protectionItemHrid:X.protectionCount>bn?j?.hrid??null:null,protectionUnitCost:X.protectionCount>bn?O:0,philosopherStart:X.philosopherStartLevel,aLevel:X.philosopherStartLevel,aCount:X.aCount,bLevel:X.philosopherStartLevel===null?null:X.philosopherStartLevel-1,bCount:X.bCount,missingMarketValues:[..._]}:Rr([..._])}s(ju,"calculateEnhancementPlan"),Object.assign(u.api,{calculateEnhancementPlan:ju,calculateNormalEnhancementFlow:vs,calculatePhilosopherEnhancementFlow:zb,getEnhancementProfileStats:Bb});var xs="mwitools-enhancement-cost-panel",Fb="mwitools-enhancement-cost-panel-style",pn=12,Za=8,Ua=null;function Pt(e,t){return u.config.isZH?e:t}s(Pt,"t");function P6(){if(document.getElementById(Fb))return;let e=document.createElement("style");e.id=Fb,e.textContent=`
#${xs} { position:fixed; z-index:2147483000; width:min(252px,calc(100vw - 24px)); box-sizing:border-box; overflow:hidden; pointer-events:none; color:var(--color-text-primary,#eef1f6); border:1px solid rgba(255,255,255,.16); border-radius:8px; background:linear-gradient(145deg,rgba(34,38,47,.985),rgba(18,21,27,.985)); box-shadow:0 12px 34px rgba(0,0,0,.44),0 2px 7px rgba(0,0,0,.28); font-family:inherit; font-size:11px; line-height:1.25; backdrop-filter:blur(10px); }
#${xs} * { box-sizing:border-box; }
.mwi-enhancement-grid { display:grid; grid-template-columns:minmax(0,1fr) auto; align-items:center; }
.mwi-enhancement-metric { display:contents; }
.mwi-enhancement-label,.mwi-enhancement-value { min-height:27px; display:flex; align-items:center; padding:5px 9px; border-bottom:1px solid rgba(255,255,255,.075); }
.mwi-enhancement-metric:last-child .mwi-enhancement-label,.mwi-enhancement-metric:last-child .mwi-enhancement-value { border-bottom:0; }
.mwi-enhancement-label { min-width:0; color:var(--color-text-secondary,#aeb5c0); }
.mwi-enhancement-value { justify-content:flex-end; color:#fff; font-weight:650; font-variant-numeric:tabular-nums; white-space:nowrap; }
.mwi-enhancement-protection .mwi-enhancement-label { display:none; }
.mwi-enhancement-protection .mwi-enhancement-value { grid-column:1/-1; justify-content:flex-start; white-space:normal; }
`,document.head.append(e)}s(P6,"addStyles");function Br(e){return Number.isFinite(Number(e))?u.api.formatExactNumber?.(Number(e))??String(e):""}s(Br,"exactTitle");function gn(e,t=1){return Number.isFinite(Number(e))?Math.abs(Number(e))>=1e3?u.api.numberFormatter?.(Number(e),t)??String(e):new Intl.NumberFormat(u.config.isZH?"zh-CN":"en-US",{minimumFractionDigits:t,maximumFractionDigits:t}).format(Number(e)):"—"}s(gn,"compactNumber");function jb(e){let t=Number(e);if(!Number.isFinite(t))return"—";let a=Math.round(t),n=Math.abs(t-a)<1e-8?0:1;return`${gn(t,n)} ${Pt("个","pcs")}`}s(jb,"countWithUnit");function Ka(e,t,a=null,n=""){let i=document.createElement("div");i.className="mwi-enhancement-metric";let o=document.createElement("div");o.className="mwi-enhancement-label",o.textContent=e;let r=document.createElement("div");r.className="mwi-enhancement-value",r.textContent=t;let c=n||Br(a);return c&&(r.title=c),i.append(o,r),i}s(Ka,"metric");function L6(e){let t=Number(e?.expectedNormalProtectionCount),a=Number(e?.expectedPhilosopherMirrorCount);return!Number.isFinite(t)||!Number.isFinite(a)?{text:"—",title:""}:{text:Pt(`普通保护 ${gn(t,1)} 次,贤者之镜 ${gn(a,1)} 次`,`Regular protection: ${gn(t,1)} uses; Philosopher's Mirror: ${gn(a,1)} uses`),title:Pt(`普通保护:${Br(t)} 次;贤者之镜:${Br(a)} 次`,`Regular protection: ${Br(t)} uses; Philosopher's Mirror: ${Br(a)} uses`)}}s(L6,"protectionUsage");function Wb(e,t){let a=t?.status==="complete",n=a?L6(t):{text:"—",title:""},i=a?t.normalProtectStart===null?Pt("不用","None"):`+${t.normalProtectStart}`:"—",o=a?t.philosopherStart===null?Pt("不用","None"):`+${t.philosopherStart}`:"—",r=a&&t.aLevel!==null?Pt(`需要 +${t.aLevel}`,`Need +${t.aLevel}`):Pt("需要","Need"),c=a&&t.bLevel!==null?Pt(`需要 +${t.bLevel}`,`Need +${t.bLevel}`):Pt("需要","Need"),l=document.createElement("div");l.className="mwi-enhancement-grid";let d=Ka("",n.text,null,n.title);d.classList.add("mwi-enhancement-protection"),l.append(Ka(Pt("总成本","Total cost"),a?gn(t.totalCost,1):"—",t?.totalCost),Ka(Pt("底子成本","Base cost"),a?gn(t.baseCost,1):"—",t?.baseCost),...a&&Number(t.refinementCost)>0?[Ka(Pt("其中精炼","Includes refining"),gn(t.refinementCost,1),t.refinementCost)]:[],Ka(Pt("耗时","Time"),a?u.api.timeReadable(t.totalSeconds):"—",t?.totalSeconds),Ka(Pt("开始保护","Protect from"),i),d,Ka(Pt("开始贤者保护","Philosopher's Mirror from"),o),Ka(r,a?jb(t.aCount):"—",t?.aCount),Ka(c,a?jb(t.bCount):"—",t?.bCount)),e.replaceChildren(l),e.dataset.status=a?"complete":"unavailable"}s(Wb,"renderPanel");function Wu(){let e=Ua;if(!e?.anchor?.isConnected||!e.panel?.isConnected)return;let t=e.anchor.getBoundingClientRect(),a=e.panel.getBoundingClientRect(),n=Number(globalThis.innerWidth)||document.documentElement.clientWidth,i=Number(globalThis.innerHeight)||document.documentElement.clientHeight,o=n-t.right-pn,r=t.left-pn,c=i-t.bottom-pn,l=t.top-pn,d="right",m=t.right+Za,p=t.top;o<a.width+Za&&r>=a.width+Za?(d="left",m=t.left-a.width-Za):o<a.width+Za&&r<a.width+Za&&(c>=a.height+Za||c>=l?(d="bottom",m=t.left,p=t.bottom+Za):(d="top",m=t.left,p=t.top-a.height-Za)),m=Math.min(Math.max(pn,m),n-a.width-pn),p=Math.min(Math.max(pn,p),i-a.height-pn),e.panel.dataset.placement=d,e.panel.style.left=`${Math.round(m)}px`,e.panel.style.top=`${Math.round(p)}px`}s(Wu,"positionPanel");function hn(){let e=Ua;if(!e){document.getElementById(xs)?.remove();return}e.mutationObserver?.disconnect(),e.resizeObserver?.disconnect(),globalThis.removeEventListener?.("resize",e.position),globalThis.removeEventListener?.("scroll",e.position,!0),e.panel?.remove(),Ua=null}s(hn,"hideEnhancementCostPanel");function ks(e,t=null){if(!e?.isConnected)return hn(),null;if(Ua?.anchor===e&&Ua.panel?.isConnected)return Wb(Ua.panel,t),Ua.position(),Ua.panel;hn(),P6();let a=document.createElement("aside");a.id=xs,a.setAttribute("role","status"),a.setAttribute("aria-live","polite"),Wb(a,t),e.insertAdjacentElement("afterend",a);let n=s(()=>globalThis.requestAnimationFrame?.(Wu)??Wu(),"position"),i=new MutationObserver(()=>{e.isConnected||hn()});i.observe(document.body,{childList:!0,subtree:!0});let o=globalThis.ResizeObserver?new globalThis.ResizeObserver(n):null;return o?.observe(e),o?.observe(a),Ua={anchor:e,mutationObserver:i,panel:a,position:n,resizeObserver:o},globalThis.addEventListener?.("resize",n),globalThis.addEventListener?.("scroll",n,!0),n(),a}s(ks,"showEnhancementCostPanel");var $6=Wu;Object.assign(u.api,{hideEnhancementCostPanel:hn,positionEnhancementCostPanel:$6,showEnhancementCostPanel:ks});function O6(e,t,a){if(!u.settings.settingsMap.itemTooltip_prices.isTrue)return;e.querySelector('[data-mwitools-enhancement-market="true"]')?.remove();let n=document.createElement("div");n.dataset.mwitoolsEnhancementMarket="true",n.style.color=u.config.SCRIPT_COLOR_TOOLTIP;let i=u.api.getFairValue(t,a),o=u.api.getAskPrice(t,a),r=u.api.getBidPrice(t,a),c=document.createElement("div");c.textContent=`${u.config.isZH?"市场价值: ":"Market value: "}${i>0?u.api.numberFormatter(i):"-"}`;let l=document.createElement("div");l.textContent=`${u.config.isZH?"价格: ":"Price: "}${u.api.numberFormatter(o)} / ${u.api.numberFormatter(r)}`,n.append(c,l),e.append(n)}s(O6,"appendMarketRows");function q6(e){let t=!!u.api.isBackEquipment?.(e);return{forcedProtectionItemHrid:t?"/items/mirror_of_protection":null,allowPhilosopherMirror:!t,getFairValue:s((a,n=0)=>u.api.getAssetValue?.(a,n,{forceAcquisitionValue:!0})||u.api.getFairValue(a,n)||0,"getFairValue"),getMarketValue:s((a,n=0)=>u.api.getFairValue(a,n)||0,"getMarketValue")}}s(q6,"getTooltipEnhancementPlanOptions");function R6(e){let t=[...e?.querySelectorAll("div.ItemTooltipText_name__2JAHA span")??[]],a=t.find(r=>/\+\s*\d+/.test(r.textContent??""))?.textContent,n=Math.max(0,Math.floor(Number(a?.match(/\+\s*(\d+)/)?.[1])||0)),i=[...e?.querySelectorAll("svg use")??[]].map(r=>String(r.getAttribute("href")??r.getAttribute("xlink:href")??"").split("#").at(-1)).filter(Boolean).map(r=>`/items/${r}`).find(r=>u.state.initData_itemDetailMap?.[r]);if(i)return{itemHrid:i,enhancementLevel:n};let o=u.api.getOriTextFromElement?.(t[0]);return u.config.isZHInGameSetting&&(o=u.api.getItemEnNameFromZhName?.(o)),{itemHrid:u.state.itemEnNameToHridMap?.[o]??"",enhancementLevel:n}}s(R6,"readEnhancedTooltipItem");async function B6(e){let t=e?.querySelector(".ItemTooltipText_itemTooltipText__zFq3A");if(!t){hn();return}let{itemHrid:a,enhancementLevel:n}=R6(e);if(!a||!u.state.initData_itemDetailMap?.[a]){hn();return}if(u.settings.settingsMap.enhanceSim.isTrue?ks(e,null):hn(),await u.api.fetchMarketJSON(),!e.isConnected||(O6(t,a,n),!u.settings.settingsMap.enhanceSim.isTrue))return;let i=ju({itemHrid:a,targetLevel:n,...q6(a)});e.isConnected&&ks(e,i)}s(B6,"handleEnhancedItemTooltip"),u.api.handleItemTooltipWithEnhancementLevel=B6;var Vb="MWITools_settings_v2",Gb="MWITools_back_mirror_default_disabled_v2",Vu="mwitools-settings-style",Zb="mwitools-equipment-warning-style",Ni="data-mwitools-settings-tab",zr="data-mwitools-settings-panel";function Ub(){let e=Object.fromEntries(Object.entries(u.settings.settingsMap).map(([t,a])=>[t,!!a.isTrue]));localStorage.setItem(Vb,JSON.stringify({version:2,values:e})),localStorage.setItem("script_settingsMap",JSON.stringify(u.settings.settingsMap))}s(Ub,"persistSettings");function Kb(e,t){let a=u.settings.settingsMap[e];a&&(a.isTrue=!!t)}s(Kb,"applyStoredSetting");function Xb(){u.config.isZH=u.settings.settingsMap.forceMWIToolsDisplayZH.isTrue||u.config.isZHInGameSetting,u.config.SCRIPT_COLOR_MAIN=u.settings.settingsMap.useOrangeAsMainColor.isTrue?"orange":"green",u.config.SCRIPT_COLOR_TOOLTIP=u.settings.settingsMap.useOrangeAsMainColor.isTrue?"#804600":"darkgreen"}s(Xb,"applyVisualSettings");function z6(){let e=!1;try{let t=JSON.parse(localStorage.getItem(Vb)||"null");if(t?.version===2&&t.values){for(let[a,n]of Object.entries(t.values))Kb(a,n);e=!0}}catch(t){console.warn(u.config.isZH?"[MWITools] 无法读取新版设置。":"[MWITools] Could not read v2 settings.",t)}if(!e)try{let t=JSON.parse(localStorage.getItem("script_settingsMap")||"null");for(let a of Object.values(t??{}))a?.id&&Kb(a.id,a.isTrue)}catch(t){console.warn(u.config.isZH?"[MWITools] 无法迁移旧版设置。":"[MWITools] Could not migrate legacy settings.",t)}localStorage.getItem(Gb)||(u.settings.settingsMap.valueBackEquipmentWithProtectionMirror.isTrue=!1,localStorage.setItem(Gb,"1")),Xb(),Ub()}s(z6,"readSettings");function Jb(){if(document.getElementById(Vu))return;let e=document.head??document.documentElement;if(!e)return;let t=document.createElement("style");t.id=Vu,t.textContent=`
#script_settings { width:100%; margin-top:14px; color:var(--color-text-primary,#eee); }
[${zr}] { width:100%; box-sizing:border-box; }
[${Ni}][aria-selected="true"] { color:var(--color-primary,#fff); }
.mwi-settings-hero { display:flex; justify-content:space-between; gap:14px; align-items:end; margin-bottom:11px; }
.mwi-settings-title { font-size:1.2rem; font-weight:700; letter-spacing:.01em; }
.mwi-settings-subtitle { color:var(--color-text-secondary,#aaa); margin-top:3px; font-size:.78rem; line-height:1.35; }
.mwi-settings-search { width:min(320px,100%); box-sizing:border-box; border:1px solid rgba(255,255,255,.16); border-radius:5px; background:rgba(0,0,0,.2); color:inherit; padding:7px 9px; }
.mwi-settings-group { margin:0 0 10px; border:1px solid rgba(255,255,255,.12); border-radius:7px; background:rgba(0,0,0,.13); overflow:hidden; }
.mwi-settings-group-head { padding:10px 13px 8px; border-bottom:1px solid rgba(255,255,255,.08); }
.mwi-settings-group-title { font-size:1rem; font-weight:700; }
.mwi-settings-group-summary { color:var(--color-text-secondary,#aaa); font-size:.75rem; margin-top:2px; line-height:1.35; }
.mwi-settings-grid { display:flex; flex-direction:column; padding:0 10px; }
.mwi-setting-card { min-width:0; padding:7px 4px; border-bottom:1px solid rgba(255,255,255,.075); transition:background .15s; }
.mwi-setting-card:last-child { border-bottom:0; }
.mwi-setting-card:hover { background:rgba(255,255,255,.025); }
.mwi-setting-card.mwi-setting-child { margin-top:5px; padding:6px 8px; border:1px solid rgba(255,255,255,.075); border-radius:5px; background:rgba(0,0,0,.12); }
.mwi-setting-card.mwi-setting-child:has(input:disabled) { opacity:.52; }
.mwi-setting-row { display:grid; min-height:42px; grid-template-columns:minmax(170px,.72fr) minmax(260px,1.5fr) auto minmax(40px,auto); align-items:center; gap:8px 14px; }
.mwi-setting-copy { display:contents; }
.mwi-setting-title-line { display:flex; min-width:0; grid-column:1; grid-row:1; align-items:center; gap:7px; text-align:left; }
.mwi-setting-title { min-width:0; font-size:.84rem; font-weight:650; line-height:1.25; }
.mwi-setting-summary { overflow:hidden; grid-column:2; grid-row:1; color:var(--color-text-secondary,#aaa); font-size:.71rem; line-height:1.3; text-align:left; text-overflow:ellipsis; white-space:nowrap; }
.mwi-setting-status { display:inline-flex; flex:0 0 auto; padding:1px 6px; border-radius:999px; font-size:.61rem; color:#aaa; background:rgba(255,255,255,.07); }
.mwi-setting-status[data-status="active"] { color:#87d7a0; background:rgba(70,170,100,.13); }
.mwi-setting-status[data-status="failed"] { color:#ff9a90; background:rgba(210,70,60,.14); }
.mwi-setting-status[data-status="waiting"] { color:#e3c56d; background:rgba(210,170,60,.13); }
.mwi-setting-toggle { position:relative; width:36px; height:20px; grid-column:4; grid-row:1; justify-self:end; }
.mwi-setting-toggle input { position:absolute; opacity:0; }
.mwi-setting-toggle span { position:absolute; inset:0; border-radius:999px; cursor:pointer; background:#555; transition:.16s; }
.mwi-setting-toggle span::after { content:""; position:absolute; width:16px; height:16px; left:2px; top:2px; border-radius:50%; background:#fff; transition:.16s; }
.mwi-setting-toggle input:checked + span { background:var(--color-primary,${u.config.SCRIPT_COLOR_MAIN}); }
.mwi-setting-toggle input:checked + span::after { transform:translateX(16px); }
.mwi-setting-more { grid-column:3; grid-row:1; margin:0; font-size:.68rem; color:var(--color-text-secondary,#aaa); text-align:left; white-space:nowrap; }
.mwi-setting-more summary { display:inline-block; cursor:pointer; color:var(--color-primary,${u.config.SCRIPT_COLOR_MAIN}); list-style-position:inside; }
.mwi-setting-more[open] { grid-column:1 / 4; grid-row:2; margin:0; padding-top:5px; border-top:1px solid rgba(255,255,255,.06); white-space:normal; }
.mwi-setting-more p { margin:4px 0 1px; line-height:1.4; }
.mwi-setting-retry { margin-left:8px; border:0; border-radius:4px; padding:2px 6px; cursor:pointer; color:inherit; background:rgba(255,255,255,.1); }
@media (max-width:700px) { .mwi-settings-hero { align-items:stretch; flex-direction:column; } .mwi-settings-search { width:100%; } .mwi-setting-row { grid-template-columns:minmax(0,1fr) 40px; gap:3px 10px; padding:3px 0; } .mwi-setting-title-line { grid-column:1;grid-row:1; } .mwi-setting-summary { grid-column:1;grid-row:2;white-space:normal; } .mwi-setting-more { grid-column:1;grid-row:3; } .mwi-setting-more[open] { grid-column:1 / 3;grid-row:3; } .mwi-setting-toggle { grid-column:2;grid-row:1 / 4; } }
`,e.appendChild(t)}s(Jb,"addSettingsStyles");function Hi(e){return e?.[u.config.isZH?"zh":"en"]??""}s(Hi,"localizedText");function F6(e){let t=u.features.getStatus(e);return t.status!=="unregistered"?t:{id:e,status:u.settings.get(e)?"active":"disabled",error:null}}s(F6,"featureStatusForSetting");function j6(e){let t=u.config.isZH?{active:"已启用",disabled:"已关闭",initializing:"正在启动",waiting:"等待游戏数据",failed:"启动失败"}:{active:"Enabled",disabled:"Disabled",initializing:"Starting",waiting:"Waiting for game data",failed:"Failed to start"};return t[e]??t.disabled}s(j6,"statusLabel");function W6(e){return Object.values(u.settings.catalog).filter(t=>{let a=t.parent;for(;a;){if(a===e)return!0;a=u.settings.catalog[a]?.parent}return!1})}s(W6,"getSettingDescendants");function V6(e){let t=e.parent;for(;t;){if(!u.settings.get(t))return!1;t=u.settings.catalog[t]?.parent}return!0}s(V6,"areSettingParentsEnabled");function Yb(e,t={}){let a=u.settings.settingsMap[e.id],n=Object.values(u.settings.catalog).filter(w=>w.parent===e.id),i=W6(e.id),o=document.createElement("article");o.className="mwi-setting-card",t.child&&o.classList.add("mwi-setting-child"),o.dataset.search=[e.title?.zh,e.title?.en,e.summary?.zh,e.summary?.en,...i.flatMap(w=>[w.title?.zh,w.title?.en,w.summary?.zh,w.summary?.en])].filter(Boolean).join(" ").toLowerCase();let r=document.createElement("div");r.className="mwi-setting-row";let c=document.createElement("div");c.className="mwi-setting-copy";let l=document.createElement("div");l.className="mwi-setting-title",l.textContent=Hi(e.title);let d=document.createElement("div");d.className="mwi-setting-summary",d.textContent=Hi(e.summary);let m=document.createElement("span");m.className="mwi-setting-status";let p=s(()=>{let w=F6(e.id);if(m.dataset.status=w.status,m.textContent=j6(w.status),w.error&&(m.title=w.error),w.status==="failed"){let k=document.createElement("button");k.className="mwi-setting-retry",k.type="button",k.textContent=u.config.isZH?"重试":"Retry",k.addEventListener("click",()=>u.features.restart(e.id)),m.appendChild(k)}},"setStatus");p();let b=document.createElement("div");b.className="mwi-setting-title-line",b.append(l,m),c.append(b,d);let f=document.createElement("label");f.className="mwi-setting-toggle";let g=document.createElement("input");g.type="checkbox",g.dataset.settingId=e.id,g.checked=!!a.isTrue,e.parent&&(g.disabled=!V6(e)),g.setAttribute("aria-label",Hi(e.title));let h=document.createElement("span");if(f.append(g,h),e.details){let w=document.createElement("details");w.className="mwi-setting-more";let k=document.createElement("summary");k.textContent=u.config.isZH?"详细说明":"Details",w.append(k);let C=document.createElement("p");C.textContent=Hi(e.details),w.append(C),c.append(w)}r.append(c,f),o.append(r);for(let w of n)o.append(Yb(w,{child:!0}));g.addEventListener("change",async()=>{if(await u.settings.set(e.id,g.checked),e.id==="forceMWIToolsDisplayZH"||e.id==="useOrangeAsMainColor"||n.length){Xb(),Qb(document.querySelector("#script_settings"));return}p()});let _=u.features.onStatusChange(w=>{w===e.id&&p()}),y=u.settings.onChange(e.id,w=>{g.checked=!!w,p()});return o._mwitoolsCleanup=()=>{_?.(),y?.()},o}s(Yb,"createSettingCard");function Qb(e){if(!e)return;for(let r of e.querySelectorAll(".mwi-setting-card"))r._mwitoolsCleanup?.();e.replaceChildren();let t=document.createElement("div");t.className="mwi-settings-hero";let a=document.createElement("div"),n=document.createElement("div");n.className="mwi-settings-title",n.textContent="MWITools";let i=document.createElement("div");i.className="mwi-settings-subtitle",i.textContent=u.config.isZH?"所有设置会立即生效。功能数据与公会经验只保存在当前设备。":"Settings apply immediately. Feature data and guild XP stay on this device.",a.append(n,i);let o=document.createElement("input");o.className="mwi-settings-search",o.type="search",o.placeholder=u.config.isZH?"搜索功能或说明":"Search settings",t.append(a,o),e.append(t);for(let[r,c]of Object.entries(u.settings.groups)){let l=Object.values(u.settings.catalog).filter(g=>g.group===r&&!g.parent&&!g.hidden&&u.settings.settingsMap[g.id]);if(!l.length)continue;let d=document.createElement("section");d.className="mwi-settings-group";let m=document.createElement("header");m.className="mwi-settings-group-head";let p=document.createElement("div");p.className="mwi-settings-group-title",p.textContent=Hi(c.title);let b=document.createElement("div");b.className="mwi-settings-group-summary",b.textContent=Hi(c.summary),m.append(p,b);let f=document.createElement("div");f.className="mwi-settings-grid";for(let g of l)f.appendChild(Yb(g));d.append(m,f),e.append(d)}o.addEventListener("input",()=>{let r=o.value.trim().toLowerCase();for(let c of e.querySelectorAll(".mwi-setting-card"))c.hidden=!!r&&!c.dataset.search.includes(r);for(let c of e.querySelectorAll(".mwi-settings-group"))c.hidden=![...c.querySelectorAll(".mwi-setting-card")].some(l=>!l.hidden)})}s(Qb,"renderSettings");function G6(e,t,a){let n=e?.querySelector(`[${Ni}]`),i=t?.querySelector(`[${zr}]`);if(!n||!i)return;n.setAttribute("aria-selected","false"),n.tabIndex=-1,n.classList.remove("Mui-selected"),i.hidden=!0;let o=[...e.querySelectorAll('button[role="tab"]:not([data-mwitools-settings-tab])')];if(a)for(let c of o){let l=c===a;c.setAttribute("aria-selected",String(l)),c.tabIndex=l?0:-1,c.classList.toggle("Mui-selected",l)}for(let c of t.children)c!==i&&(c.hidden=!1);let r=e.querySelector('[class*="MuiTabs-indicator"]');if(r?.dataset.mwitoolsOriginalStyle!=null){let c=r.dataset.mwitoolsOriginalStyle;c?r.setAttribute("style",c):r.removeAttribute("style"),delete r.dataset.mwitoolsOriginalStyle}}s(G6,"restoreNativeSettingsPanels");function ep(){let e=document.querySelector('[class*="SettingsPanel_settingsPanel"]'),t=e?.querySelector('[role="tablist"]'),a=[...e?.querySelectorAll('[class*="TabPanel_tabPanel"]:not([data-mwitools-settings-panel])')??[]],n=e?.querySelector('[class*="TabsComponent_tabPanelsContainer"]')??a[0]?.parentElement,i=[...t?.querySelectorAll('button[role="tab"]:not([data-mwitools-settings-tab])')??[]];if(!t||!n||!i.length||!a.length)return;let o=t.querySelector(`[${Ni}]`);o||(o=i.at(-1).cloneNode(!0),o.removeAttribute("id"),o.removeAttribute("aria-controls"),o.setAttribute(Ni,""),o.setAttribute("aria-selected","false"),o.tabIndex=-1,o.classList.remove("Mui-selected"),o.textContent="MWITools",t.append(o));let r=n.querySelector(`[${zr}]`);r||(r=document.createElement("div"),r.className=a[0].className,r.setAttribute(zr,""),r.setAttribute("role","tabpanel"),r.hidden=!0,n.append(r));let c=document.querySelector("#script_settings");if(c||(c=document.createElement("div"),c.id="script_settings"),c.parentElement!==r&&r.append(c),c.dataset.mwitoolsVersion!=="3"&&(c.dataset.mwitoolsVersion="3",Qb(c)),!o._mwitoolsActivateSettings){let l=s(()=>{for(let m of i)m.setAttribute("aria-selected","false"),m.tabIndex=-1,m.classList.remove("Mui-selected");for(let m of a)m.hidden=!0;o.setAttribute("aria-selected","true"),o.tabIndex=0,o.classList.add("Mui-selected"),r.hidden=!1;let d=t.querySelector('[class*="MuiTabs-indicator"]');d&&(d.dataset.mwitoolsOriginalStyle==null&&(d.dataset.mwitoolsOriginalStyle=d.getAttribute("style")??""),d.style.left=`${o.offsetLeft}px`,d.style.width=`${o.offsetWidth}px`)},"activate");o.addEventListener("click",l),o._mwitoolsActivateSettings=l}if(!t._mwitoolsRestoreSettings){let l=s(d=>{if(d.target.closest?.(`[${Ni}]`))return;let m=d.target.closest?.('button[role="tab"]');m&&setTimeout(()=>G6(t,n,m))},"restore");t.addEventListener("click",l),t._mwitoolsRestoreSettings=l}}s(ep,"ensureSettingsPanel");function tp(){let e=u.state.currentActionsHridList?.[0]?.actionHrid;if(!e)return null;let t=u.state.currentEquipmentMap["/item_locations/head"]?.itemHrid==="/items/red_chefs_hat",a=u.state.currentEquipmentMap["/item_locations/off_hand"]?.itemHrid==="/items/eye_watch",n=u.state.currentEquipmentMap["/item_locations/feet"]?.itemHrid==="/items/collectors_boots",i=u.state.currentEquipmentMap["/item_locations/hands"]?.itemHrid==="/items/enchanted_gloves";if(e.includes("/actions/combat/")){if(t||a||n||i)return{code:"skilling-gear-in-combat",text:u.config.isZH?"正在穿着生活装备":"Skilling gear equipped in combat"}}else if(e.includes("/actions/cooking/")||e.includes("/actions/brewing/")){if(!t&&Fr("/items/red_chefs_hat"))return{code:"missing-production-hat",itemHrid:"/items/red_chefs_hat",text:u.config.isZH?"未装备生活帽":"Skilling hat not equipped"}}else if(e.includes("/actions/cheesesmithing/")||e.includes("/actions/crafting/")||e.includes("/actions/tailoring/")){if(!a&&Fr("/items/eye_watch"))return{code:"missing-production-off-hand",itemHrid:"/items/eye_watch",text:u.config.isZH?"未装备生活副手":"Skilling off-hand not equipped"}}else if(e.includes("/actions/milking/")||e.includes("/actions/foraging/")||e.includes("/actions/woodcutting/")){if(!n&&Fr("/items/collectors_boots"))return{code:"missing-production-boots",itemHrid:"/items/collectors_boots",text:u.config.isZH?"未装备生活鞋":"Skilling boots not equipped"}}else if(e.includes("/actions/enhancing")&&!i&&Fr("/items/enchanted_gloves"))return{code:"missing-enhancing-gloves",itemHrid:"/items/enchanted_gloves",text:u.config.isZH?"未装备强化手套":"Enhancing gloves not equipped"};return null}s(tp,"getEquipmentWarning");function Z6(){if(document.getElementById(Zb))return;let e=document.createElement("style");e.id=Zb,e.textContent=`
.mwi-equipment-warning-host { position:relative!important; }
@keyframes mwi-equipment-warning-pulse { 0%,100% { box-shadow:0 0 0 2px rgba(255,75,75,.38),0 2px 10px rgba(0,0,0,.42); } 50% { box-shadow:0 0 0 4px rgba(255,75,75,.16),0 2px 12px rgba(0,0,0,.5); } }
#script_item_warning { position:absolute; z-index:7; display:flex; box-sizing:border-box; min-width:28px; max-width:var(--mwi-equipment-warning-space,216px); height:22px; align-items:center; gap:5px; padding:1px 7px; border:2px solid #ff5b5b; outline:1px solid rgba(255,194,194,.72); outline-offset:2px; border-radius:999px; background:rgba(91,14,22,.96); color:#fff4f4; box-shadow:0 0 0 2px rgba(255,75,75,.38),0 2px 10px rgba(0,0,0,.42); text-shadow:0 1px 1px rgba(0,0,0,.9); font:inherit; font-size:.64rem; font-weight:750; line-height:1; white-space:nowrap; overflow:hidden; pointer-events:none; animation:mwi-equipment-warning-pulse 1.8s ease-in-out infinite; }
.mwi-equipment-warning-icon { flex:0 0 auto; color:#ffb7b7; font-size:.78rem; }
.mwi-equipment-warning-text { min-width:0; overflow:hidden; text-overflow:ellipsis; }
@media(prefers-reduced-motion:reduce) { #script_item_warning { animation:none; } }
@media(max-width:680px) { #script_item_warning { width:28px; max-width:28px; justify-content:center; padding:2px; } .mwi-equipment-warning-text { display:none; } }
`,(document.head??document.documentElement).appendChild(e)}s(Z6,"addEquipmentWarningStyles");function U6(){document.querySelector("#script_item_warning")?.remove(),document.querySelectorAll(".mwi-equipment-warning-host").forEach(e=>e.classList.remove("mwi-equipment-warning-host"))}s(U6,"removeEquipmentWarning");function K6(e,t,a){let n=t.getBoundingClientRect(),i=a.getBoundingClientRect(),o=Math.max(0,i.left-n.left),r=Math.max(0,i.bottom-n.top+4),c=t.ownerDocument?.defaultView?.innerWidth??0,l=c?Math.max(26,c-n.left-o-12):i.width;e.style.left=`${o}px`,e.style.top=`${r}px`,e.style.setProperty("--mwi-equipment-warning-space",`${Math.min(216,i.width||216,l)}px`)}s(K6,"positionEquipmentWarning");function X6(){let e=tp(),t=document.querySelector('div[class*="Header_actionInfo"]'),a=t?.querySelector('div[class*="Header_communityBuffs"]');if(!e||!t||!a)return U6(),e;Z6(),document.querySelectorAll(".mwi-equipment-warning-host").forEach(i=>{i!==t&&i.classList.remove("mwi-equipment-warning-host")}),t.classList.add("mwi-equipment-warning-host");let n=document.querySelector("#script_item_warning");if(!n){n=document.createElement("div"),n.id="script_item_warning",n.setAttribute("role","status");let i=document.createElement("span");i.className="mwi-equipment-warning-icon",i.textContent="⚠";let o=document.createElement("span");o.className="mwi-equipment-warning-text",n.append(i,o)}return n.parentElement!==t&&t.appendChild(n),n.dataset.code=e.code,n.querySelector(".mwi-equipment-warning-text").textContent=e.text,n.title=e.text,K6(n,t,a),e}s(X6,"checkEquipment");function Fr(e){let t=null;for(let a of u.state.initData_characterItems)a.itemHrid===e&&a.itemLocationHrid==="/item_locations/inventory"&&(t=a);return!!t}s(Fr,"hasItemHridInInv");function J6(){if(typeof GM_notification>"u"||!GM_notification){console.error(u.config.isZH?"[MWITools] 当前环境不支持系统通知。":"[MWITools] System notifications are unavailable.");return}u.state.currentActionsHridList.length>0||(console.log(u.config.isZH?"[MWITools] 行动队列为空,发送系统通知。":"[MWITools] Action queue is empty; sending a notification."),GM_notification({text:u.config.isZH?"动作队列为空":"Action queue is empty.",title:"MWITools"}))}s(J6,"notificate");var ap=s(()=>{let e=document.querySelector(".MarketplacePanel_marketListings__1GCyQ");e?(console.log(u.config.isZH?"[MWITools] 开始监听市场订单窗口。":"[MWITools] Started observing market order dialogs."),new MutationObserver(t=>{t.forEach(a=>{a.addedNodes.forEach(n=>{n.classList.contains("Modal_modalContainer__3B80m")&&np(n)})})}).observe(e,{characterData:!1,subtree:!1,childList:!0})):setTimeout(ap,500)},"waitForMarketOrders");function np(e){let t=u.api.getOriTextFromElement(e.querySelector(".MarketplacePanel_header__yahJo"));if(!t||t.includes(" Now")||t.includes("立即"))return;let a=e.querySelector("span.MarketplacePanel_bestPrice__3bgKp"),n=e.querySelector(".MarketplacePanel_inputContainer__3xmB2 .MarketplacePanel_priceInputs__3iWxy");if(!a||!n){console.error(u.config.isZH?"[MWITools] 市场订单窗口缺少价格输入控件。":"[MWITools] The market order dialog is missing price controls.");return}a.click();let i=s(o=>{let c=[...n.querySelectorAll("button")].find(l=>{let d=`${l.textContent} ${l.getAttribute("aria-label")??""} ${l.title??""}`.trim().toLowerCase();return o==="increase"?d==="+"||d.includes("increase"):d==="-"||d==="−"||d.includes("decrease")});return c?.click(),!!c},"clickAdjustmentButton");u.api.getOriTextFromElement(a.parentElement).toLowerCase().includes("best buy")||a.parentElement.textContent.includes("购买")?i("increase")||console.error(u.config.isZH?"[MWITools] 未找到提高收购价按钮。":"[MWITools] The increase-bid-price button was not found."):(u.api.getOriTextFromElement(a.parentElement).toLowerCase().includes("best sell")||a.parentElement.textContent.includes("出售"))&&(i("decrease")||console.error(u.config.isZH?"[MWITools] 未找到降低出售价按钮。":"[MWITools] The decrease-ask-price button was not found."))}s(np,"handleMarketNewOrder"),Object.assign(u.api,{persistSettings:Ub,readSettings:z6,getEquipmentWarning:tp,checkEquipment:X6,hasItemHridInInv:Fr,notificate:J6,waitForMarketOrders:ap,handleMarketNewOrder:np}),u.features.register({id:"settingsUi",scope:"global",initialize({scope:e}){Jb(),ep(),e.interval(()=>{Jb(),ep()},500),e.add(()=>{let t=document.querySelector("#script_settings");for(let i of t?.querySelectorAll(".mwi-setting-card")??[])i._mwitoolsCleanup?.();let a=document.querySelector(`[${Ni}]`),n=a?.parentElement;n?._mwitoolsRestoreSettings&&(n.removeEventListener("click",n._mwitoolsRestoreSettings),delete n._mwitoolsRestoreSettings),a?.remove(),document.querySelector(`[${zr}]`)?.remove(),t?.remove(),document.getElementById(Vu)?.remove()})}});var ip="https://raw.githubusercontent.com/YangLeda/Userscripts-For-MilkyWayIdle/main/release-manifest.json",Y6="https://greasyfork.org/zh-CN/scripts/494467-mwitools",rp="MWITools_important_update_manifest_v1",Q6=360*60*1e3,Gu="mwitools-important-update-style",jr="mwitools-important-update-banner";function Un(e){return typeof e=="string"?e:e?.[u.config.isZH?"zh":"en"]??e?.en??""}s(Un,"t");function e7(){return String(globalThis.GM_info?.script?.version??"26.4.2")}s(e7,"currentVersion");function t7(){let e=globalThis.GM_info?.script;return/测试|test/i.test(String(e?.name??""))||/mwitools-test/i.test(String(e?.updateURL??e?.downloadURL??""))}s(t7,"isTestBuild");function op(e){return String(e??"").split(/[.-]/).map(t=>Number.parseInt(t,10)).map(t=>Number.isFinite(t)?t:0)}s(op,"versionParts");function sp(e,t){let a=op(e),n=op(t);for(let i=0;i<Math.max(a.length,n.length);i+=1){let o=(a[i]??0)-(n[i]??0);if(o)return Math.sign(o)}return 0}s(sp,"compareVersions");function up(e,t=e7()){return!!(e?.importantVersion&&sp(t,e.importantVersion)<0&&localStorage.getItem(`MWITools_update_banner_dismissed_${e.importantVersion}`)!=="true")}s(up,"shouldShowImportantUpdate");function a7(){try{let e=JSON.parse(localStorage.getItem(rp)||"null");return!e?.manifest||Date.now()-e.savedAt>Q6?null:e.manifest}catch{return null}}s(a7,"readCachedManifest");function n7(e){localStorage.setItem(rp,JSON.stringify({savedAt:Date.now(),manifest:e}))}s(n7,"saveCachedManifest");function i7(){let e=typeof GM<"u"&&typeof GM.xmlHttpRequest=="function"?GM.xmlHttpRequest:typeof GM_xmlhttpRequest=="function"?GM_xmlhttpRequest:null;return e?new Promise((t,a)=>{let n=s(i=>{try{if(Number(i?.status)<200||Number(i?.status)>=300){a(new Error(Un({zh:`更新清单请求失败(HTTP ${i?.status})`,en:`Update manifest request failed (HTTP ${i?.status})`})));return}t(JSON.parse(i.responseText))}catch(o){a(o)}},"finish");try{e({method:"GET",url:ip,timeout:5e3,onload:n,onerror:s(()=>a(new Error(Un({zh:"更新清单请求失败。",en:"Update manifest request failed."}))),"onerror"),ontimeout:s(()=>a(new Error(Un({zh:"更新清单请求超时。",en:"Update manifest request timed out."}))),"ontimeout")})?.then?.(n).catch(a)}catch(i){a(i)}}):globalThis.fetch(ip,{cache:"no-store"}).then(t=>{if(!t.ok)throw new Error(Un({zh:`更新清单请求失败(HTTP ${t.status})`,en:`Update manifest request failed (HTTP ${t.status})`}));return t.json()})}s(i7,"requestManifest");async function cp(){let e=a7();if(e)return e;let t=await i7();if(!t?.importantVersion)throw new Error(Un({zh:"更新清单格式无效。",en:"Invalid update manifest."}));return n7(t),t}s(cp,"getImportantUpdateManifest");function r7(){if(document.getElementById(Gu))return;let e=document.createElement("style");e.id=Gu,e.textContent=`
#${jr}{position:fixed;left:50%;top:8px;z-index:2147482500;display:flex;box-sizing:border-box;width:min(720px,calc(100vw - 24px));align-items:center;gap:10px;padding:8px 10px;border:1px solid rgba(245,158,11,.62);border-radius:6px;background:rgba(25,28,42,.97);color:var(--color-neutral-100,#eee);box-shadow:0 9px 24px rgba(0,0,0,.42);font:inherit;transform:translateX(-50%)}
.mwi-update-banner-icon{display:flex;width:28px;height:28px;flex:0 0 auto;align-items:center;justify-content:center;border-radius:5px;background:rgba(245,158,11,.14);color:#f5a623;font-weight:800}
.mwi-update-banner-copy{min-width:0;flex:1}
.mwi-update-banner-title{font-size:.78rem;font-weight:700;line-height:1.25}
.mwi-update-banner-message{margin-top:2px;color:var(--color-text-secondary,#aaa);font-size:.68rem;line-height:1.3}
.mwi-update-banner-action{flex:0 0 auto;min-height:29px;padding:3px 11px;border:0;border-radius:4px;background:#d98b2b;color:#171717;font-size:.7rem;font-weight:700;cursor:pointer;text-decoration:none}
.mwi-update-banner-action:hover{background:#f0a13e}
.mwi-update-banner-close{flex:0 0 auto;width:27px;height:27px;padding:0;border:0;border-radius:4px;background:transparent;color:#9299aa;cursor:pointer}
.mwi-update-banner-close:hover{background:rgba(255,255,255,.08);color:#fff}
@media(max-width:600px){#${jr}{align-items:flex-start;gap:7px;padding:7px}.mwi-update-banner-icon{display:none}.mwi-update-banner-action{align-self:center;padding:3px 8px}.mwi-update-banner-message{display:none}}
`,(document.head??document.documentElement).appendChild(e)}s(r7,"addStyles");function lp(e){if(document.getElementById(jr)?.remove(),!up(e))return!1;r7();let t=document.createElement("aside");t.id=jr,t.setAttribute("role","status"),t.innerHTML=`
<span class="mwi-update-banner-icon">↑</span>
<div class="mwi-update-banner-copy">
<div class="mwi-update-banner-title"></div>
<div class="mwi-update-banner-message"></div>
</div>
<a class="mwi-update-banner-action" target="_blank" rel="noopener noreferrer"></a>
<button class="mwi-update-banner-close" aria-label="${u.config.isZH?"关闭":"Dismiss"}">×</button>`,t.querySelector(".mwi-update-banner-title").textContent=Un(e.title)||(u.config.isZH?"MWITools 有重要更新":"Important MWITools update"),t.querySelector(".mwi-update-banner-message").textContent=Un(e.message)||(u.config.isZH?`建议更新到 ${e.importantVersion}`:`Update to ${e.importantVersion} is recommended.`);let a=t.querySelector(".mwi-update-banner-action");return a.textContent=u.config.isZH?"前往更新":"Update",a.href=e.url||Y6,t.querySelector(".mwi-update-banner-close").addEventListener("click",()=>{localStorage.setItem(`MWITools_update_banner_dismissed_${e.importantVersion}`,"true"),t.remove()}),document.body.appendChild(t),!0}s(lp,"renderImportantUpdateBanner"),u.features.register({id:"importantUpdateBanner",initialize({scope:e}){if(t7())return;let t=!1;cp().then(a=>{t||lp(a)}).catch(a=>{console.info(u.config.isZH?"[MWITools] 暂时无法检查重要更新":"[MWITools] Important update check unavailable",a.message)}),e.add(()=>{t=!0,document.getElementById(jr)?.remove(),document.getElementById(Gu)?.remove()})}}),Object.assign(u.api,{compareVersions:sp,shouldShowImportantUpdate:up,renderImportantUpdateBanner:lp,getImportantUpdateManifest:cp});var dp="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAIa0lEQVR42u1YXWhlVxVea+29zzn3L7k3yfyUvtTCtE2nBQthEKZgx74IImptKYhSqlAtIqJQ+1DHgToVOvogfXFQaMGX0rSiUlo7RYgFtX24gmjG/FSdKZmZTCa5uZnc83/OXsuHe25+bybJWH3qhnDhZt+1vv2ttb699gL4aP2PlgCgiCgR0d2/cfWh2RahNbvjN2FXRHAnwx8GuO3fndrRru4HDhEFACALLnyBBI+zcJpl8TlEfKdwIL09+wI3Pq4Q0a4u/u2usld5kBFLYO2fEI+8u2fmRIRkYbKatN9/U3hBJJ8XsfMi2RWJlmd/UuxTO7G8s+0JDQAQLk4/nQcfJGKvitirIsklCZemfz4+Pq6Kw+ONACoAgHBp+qxIW+KVuSTxl7N4ZS6LFqdzkSWJ2jM/BQCQiQm9V5Ai0gW3NPWM8ILErVkOF6ezcHE6ixZnMpEVCVtTT23E0Fu4NbSrV2YPGMde0KZUEmcEEQkBEThui2SruTs8YuJ2+8eloSPf67LygL1RuEVEI2Iet2aecuuDZ5KV1ZyZFREiCACLcKnkSRInl9xhvBPgjhRAoGdzLTlfffVVAgBQhm8z2lTyPEMEQRAGYAvkNRCdQRO3lnKv0XgqWp55HvFEDvAHJdI/LNJsGkTMw2vT33Xrg2eS651chBVhFxwAACJimqZKAG6J2tnh4j/Yj0FCRI5WZm5Hi7MgTKBLoLwRLDYAkAJOVoDT1dwbHtbpSvuHbuPID7ohRLvuFqDZbJqxsbEsWpr5ljc48ELa8XO2ViEibpYzEaUUWLadVPPtg4N3tzYW6hqDiMgiQt7gHResyHtuo46cBpaT5d6GLpNuHcgZ0HGrlTv1+sl4efYkIuYA67mzBm5x5uveQO2FpONbtlYhEW7iGgGExZqBGqLgnwtwtDFldL/QMPGTWRS945YrjSRcZQQgdIc2gQQRlSwv526j8Wy8/D4j4nNdJv+CiGNZ1Jp5wqvVziZ+YNlaIkQEEFjjGAHYMhvP1XkY+VkuT/crOuwnpIjIwfzkMVOrniOBehqFrNwakTvcvWOKcNtoScCG1m00dLJy/Rlv6MiPAACipanHvWrtxTSMrO2Bw/UrCgCAmVm7DpFSUdTpfKZ2y70TPd83BNjTLMQTeXD1H59wquW3UaCWRiFrt0bYA4kEknbAxkuCyli3UddJa/nbjHCtVK2+nAQhs7VIvZzbAJCFWRuDpE0aX1/9XPXWe8/1fO7K4FZ5WL08eX9psPomitTSKGTl1IicOgAI2LgFIBmIgCAiGKNRRMBaBrZWcCO4ojaZmZXWSMbYJAw/Xz149xu9nO2HA3cT2E0gWWppHDEpTWuhBuzmpgiIFIIjsLVYezknyhghoyH1g4cqh4/+9kbgdgW4DeRA5S0QqWRxwqSINubUhi6or1EWFqWNKEdD4vuPVg7d89pu4DbJzI4nQMxFRA/ces8fY9//LBCFxnVJWLjfEXcEp7Rox1AahF/eK7g9MbiVyc7c5Ke8RvUNEvGSKBYi2i1NhLQCp1LGoL38WPXQvb+UZtPgHsDtC+BGkOHC34+bcuV1yXnQ5jluT7i1WwIQkbXrZWnoP1Y+ePSV/YDbU4j7OraQAqAI7NrNCACCiAChSm7GF+2XvdXLk/c7A7UJQhyyWQ47sdcNDyIzI+eZ49Yqvw4Xp76EY2OZNJtmr35xf6GdPm4q3u9QpJbGMRMWlYzbq3lTkTCL0lq061AS+I+WDx4d32uoaa/ggvnJY6biFYIdMxHR1nPuhJGI0OY55mnKTqX6crAw+TCOjWXNPTCJu7XpiCfyYH7ymFurvQXCjTSKt2tgtyuBQqKLJwvC1j1sWbQxQo6GxI8erRwafa1HwL4Z7IFbmZ885g7U3sKN4LaKM4sQETuOQa0UEhEIi2wtF1KENs+B0xzcavmVYGHyYUTMb5STOz0vFSJa/9Jf73Pr9d8TwFASRZaI1EZGeuCQyLpDdZ20lr/DCFdK1eor683CFp3sss2kCMlxJPWDL1YOH/3NnpuFXsvjXzp/n1svv02AI2kUWyRU2681EUSybn1AR+32yfLI6GkAgGhh6nFvoPpiGsfWZjmRItx6Dwozk9JIjrE2ih7yDoy+3q/doj6PaonaU7eZWumcQhpJomgzOCxYEAFAtG6jrqP2yqnyyOjp7rSgaUqHRl8KVv2vOp6nlNHMzLL2eynUEYmszYWzTKly6Vdpa/p4t6vfPGmg7VcvCud4yhmoHYjDMNsU1sKBsAAi5l6joePW8unyyF3PikxoQLSIXZ2rHhp9Kej4X3M8TymlmIsq2uQciWyeW22MsSLPd799RPoCLB4qVkQMonySfV8QSa29RzZcX4CYu0N1HbdWTpcO3HWy+/w8YbGo2Z4YVw+Ovhh0Ok84lco6yC1PJkRUmR8IAH5cOv86hIh86tT6KKRPFV9UKOgU/d0mrejGCXNvuKHT9vXnSgfuOLn+Nt6coesg7/5F2F550qmUuyC5x+SGqHf9qDCxZsfZDCJKd3bysThcnJ6kkncrJGkGAgYQgLsZnLvDDZO222fc4Tu/v9vDHcfGskLnzgZXz0O5MfizJAhtUd2EAMAi1imXKAqCf5dHjswXkeT+DD5SfCp8jrMcvJJnWMSKiNVaoTs8ZNL29TPu0J1Py8TuU4VeP9lsNk3l8NGz8WrnG261olzXJSnsGqM1eC6B8LOIaHe93XrjsfDa+Ucy/+KcRHMi0ZzkwcV2uDT1zM0Pj4r5zOL5r+T+hTkJLoqEH0jmX1jszE9+c1/jvd7Gpdn3BrLOxQcz/8Kn/WvNW/7bGWFPQpZm3xvI2u8/kHX++eDq5ebITdntN/n8MKas/WzcyC7uYdLaOxnfzNDy/2n3o9Vv/QcBmorNJ3wSfAAAAABJRU5ErkJggg==";var mp="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAFRklEQVR42u1Yz28bRRT+3uysncRO69AmIFFQKooETcuh6QEq1DZISJWKKi6JhLjQA/QMEmfHB/4FJESrSkXikBwQpeJAD0lB9AJFVFA4tEK0UJUQqSWJ7dg7O/Nx2LW9dhzHjovEoSON5dXuvPner++9GeDR6G/ItlaRMj0P9feNbtcvAjiOsQlwfhoOIvwPdaL0L6J7GbpnwSKcvHh3KFva+Yp1atDabvxEgiIqpSpLS3e+uiVSRZ4KBXEPz8Wx1i+eXRnR/tDldMY/5MJIAhFNSQhkyyYkoDQQVsKvw+F/Xrv6+uhaPk9V2AKk6hbfsVl4EKHo1MlU1j9UXTGBKRsbFI01JWPDorGmaGxQip8T05SMDcvGmlVjdEof1cXcl0fO/jpcKIjL56n6AkhS8qQam4DKk0o8ydLCiUCJiKeUeEo2TmmZEPEo4gdrJtS+flmn91164cK9TKEgDh1A6i3AKRFxsccCADjw8Xolp6GMhZM2QSISuVMrQAngmPQzACW6umbC1LB/NGd2XZq8ePfktVNSrsV39zEYL5j7mdnxPRi792dF5bKw567zjSIHPzAlYyHiJWNOpBGHKxVg3QBpH7BsxGFNAdKFqeGUNlWz4A34p67cQBmzYCvIthacm6M3I2IXb5tXB9L2XGWFj+8Y8sQ54PRBKMKCUBG42q5glBgElAJWK8CF68DtFSCbikAmzSKitFkzJpXzp6ql4DwK6ek8qArN+dXegiRlFpBjvwU/5R5L7V+5b6i82FgkSDbnq0htIQDAAUh7QDEQfPQ9cWcVyKQA6xKfRr9OeT6cC5buZ26O/zJzIIh4tmFF1Q6ciHAC0BDJrhfhREDnLOkcSca0Em8BAeugG3RTCYEhnzhzWPD0TqAcAF7dvdGHsZ5KiVS2lcUknCgoQCCR7hK5p2EJaeG/2n9PgMACGZ84Mwk8tQMomyhxWjOB2DyL1RYsLpHGTEpL7ND0EP1LuFAJULVAxgfeOSzYsyNKHC+hXN2S/RB1zVoOEW04RvFk2Txr75o2iEFmfeLtSWAsCxibsHjCG33VYhFgyItpYpMME0RuNW4jyEoI7B4EntsFLKwBKa+R2Z0s2DVAY4Ef/gLKRupcBmm4CTEp7xshnhyOQEqLgpbNIdB4J9sHaBlRxo9LwIffAYOacExYMQZby9z9o8D7R3ptNLl9gEoia+zNASeeieIpCSoJNLQRwK1iuZemSnfTj1kCIwPAmwejRGm8kzofJtuqqu0sr1YSH2rDGhIwplUwNyRMjV56OnCQfQJkvGkbkpVNnmWTyGJzIeiYwT01rJ1DefNv2yrAVoGyPYAusb6fY5i0CYNaAirVmai7a7f7QMcWg3Fjve+PZtrRA7cAJD2GATuI1L1aQ/oFRzowLtmEA6BB6NHRZbftJGEH6yUbG+lCkDfgKz/raz/jaz/rp3QGinCfXJmaCqfn6CWb1d4P7p2orKW53vgdnZf21BPp4LNq2X47YJWEWpFVd+vq6cHPQcq8iN2miwX9XqYogVMppabG3RfvvTR0vk2gs/djZ51HN48uJsoXt6AsOvDBugwfW6A+Pg69+DvCsWVwfkZsz0ny4No17h456AsQRn1qoi1vwcskZUibe48IYagUtCjyypSEsyQKeyXsuRaLCOfm6M0cFnP5ZuVybjfeKq76UKp9lWhn2w33NAQ8DV0qWhdQfQMAx5v7jt4ujxhfFM3/gYExmndF5PkgYL0/dd2mv4qKkIjQH1DVUjH49MSzgwu1k+P/8saU7O1+cau7GVlchPewwC0vgyJi8Wg8Go3xL8iPky24WzbFAAAAAElFTkSuQmCC";var fp="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAH0ElEQVR42u1YbYyUVxV+zr3vO9+zszO7C0vFiAhFsOoPTE1J6+7GKNpAgZaZ8tWSYFps/GO1/ig/Om6aGGNU/GVSaJMqLLvMiCU0MdjELktaTUwhUJUCJhiQj7K7M7O7s/P5vvcef7zz7s6O+8GupcSkN5mPzLz3nOc+5zznnnuBT8Y9GgwmTrJIxVnO9EwqzpKTLBhM9xRsEiymW8C9AZN0wByKD685Ga+ePLI5t8dlC2ACmFxWD23O7XkrUf1jKj68pn7ufIYx3wlfuAACAGnLdo8w1y+RzeuPbhmNJNK0n8H0Y4ASaVJHnsg9v0Q0/xIMANwO4II7dz6DFspidzfp32y6vb6No28waU82lP3SicPvXEIaWP+7R1a3V6PnDBKVnBjbsv1Y61vunI8FIAC8spbNvWfI6tmQ+dEST+xnI6pwRQutAQIpMmKe4LJbOvvCjt+3/MJ9diF+xMJEkRTPnoF9cNuHiwOG/5tF29YmvMuDHF4R5NAKD7zLCpatwwh+O7X7dvveM7CTSC7IFy1Utfc9e0bGbq96u1WGHs5VC5qICCAmqpUgzRzzB0XWLvx5qC3YefMAVDeIAScr7xqD/R1sdIN0ZGjlrhYZejhXLlpEQoCIAAgwBIFIkBDZUsFqlsF1LcP5p7tBur9j5pr5kQHs7IRmMEkld9kKmkTNBmPig9k1TsJW0EJjB4OpsxP67udgN5hAzEyLbECAQCRqlohAtaRxKiLIZghALCIQo3t+4Z0TYH8HG/0dbLi7QhJJQSD+9Y6rUZNEs4bNymayy4AuA6x5EoHzhRTbLCFjPdtvtBKI3V2HweTan00LdOdl5T0zunytvuo971s+vuJPAQp8tVAoan+bENHVgFKM4bMAFIFqy3ZCrbVPBkSFy2fzoetd3urKQu4KxJ2WnWkAMjGAAxtu+iNmYJ+HzNKQ9/ore3s/PwwAfZtGXlskI3uyhYLd+kVhtK4FhAHIAOPqSWDsEsHwOQxyzYFmbTd7gkZW53u2Hm/aBQAHv3MtFh2N7YVWoWKg+JOnD7cXa5B4VoCpOMtEmlTvE5l1nzFi75YsoKDLN8qivL9qWpci5eibVtFS0S9Dtq8DVAkgEyhlGDf7CfY4IGSdZQYYDGJSpuGVeU92CyzPsgC8PwgK76fDXuCanevYmoqddn3PFWJiMA5suOmPkv9lH/zPNHl8YQvAuF0CVwFPM2PZRmcqCWDwHJB93zFG0gFF4r/aG+ddEgWEDx4BjNmVQhXV14qhwr6nDrcX6U4YbBy9m6/f7+Pm5yWbTzLriFVRtPghQbE1ABEje5FwawAw/DVrPNUq0WS4GcwSgkkgr6ROlc3S/u1HWz9YUDeTirMM5f9pPHp86WUAz/U+njkV4VivVS0wiMnwA9VxIPt3QHqnB9dInmBoj8cn8kbue4lUrAcA/vCty97x8Eq7MbRzAqxNmJjELKoGQGSQypyHUFWgMkSw8wAZDWhoEi/zZLCYmA0BYsETCn705P2VeTLIBBC/Hr/1YJPZtKRqV8liW6PC37BJQQiQtgjD7zl5JsypxPGMecMggJRSEGR8/ci2oTJrCL8R4JJVurUz3fpX1/eMOeiqqO+x7NdazOhAvUNLASWrACIxpc41gmGu5d0EhY6KnXwkMDN8ZgCmnLQtBZBRI13xY9FTjUqewuA/1jiWLKjbhWr5bxocVcomEgQwQhIywmAnbOwqYIbCWte3UO1XZoYQhLJdGC1aPA4AkiQLSSMk7A/rMcyt4iREauh2IDc0LmW4SfsylGihlldLdkEBJMlNtAb2nLVMvyUwsx3yBIwxkd07Eta9Kj8mom0hlWhbXET39I0EzXSkpFouuJT/duO1FREsvqzYrkWLGpKOZ1kvuwyyx/DSqH9w9c7eT12sD2e9zzmbBWdTdzrgRJrUoZ3Da8Jm6z4CW43dwFSKpvmHp/7IrKyQHXuxb1fmARdcMsliOnBzMvj6k1c/F7baXpAKT0UMf7CigIJdYLepcoowTZyAySWRGJPHYp4sM6w5aAbJYwBjVrkIg3tGZPbnu48uvXzHDLqrORQfWtVUbDsfhf+7YekPZqv5q3k9dsSAOemeqXaqbKBtypndaQy11mwID+V5rC9byl8JCV8gAv8zzZXWc32JzAMEmvbcPGM/KBQIWvOoVboxRoWXxpt5bfxEZGdFV973Cz9pZjVVteyUE67vrh3FM2vlN/ywqXph6/HI9nJT7iujurBvpFr8NzPrGXJmVhUTAH71sQ/uMyPhyu5DSzMAwEkWPWcHH4og+o6CshXbkiCn6LZe3Q5AZklCeQ2vMSKyXRePtZ7uhnM+Phi/FrNR8j+XXnVj3g1rfU70d/QbnQOdKh2HSKRJ9W3Mfb/NaN4/Vi1pzYpJCDnZHNDkClkrgkDY45cZO/di4kTsp6k4y3ga+lQHZNcA2bMpeNYQu0pmMHUNdNkE4kSaVLKj39j2ZvRXOWvkh6Y0KGiEJDMziG33xdC2ZsV+GZRewyNzenSfCy6RJkUg7hogm8GUTCZnVPCCz8UTTe2mwUcCHH5ZQHb4DLNu5wDKygYL9W6J8i8l3mh7e7pm9K5efdQ7TG0eeVAI6iAlP6uZhZD8LzL49OPpyF8an/14LzHv4HIyFU/J/8XHR3LJmIqnZNtgfIqtoUXge8LaJ+P/bfwHrZD7qmvnWGYAAAAASUVORK5CYII=";var bp="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAJZUlEQVR42uVYa4xV1RX+1tr73McM84LOiKJNpWAUbGKCAQH13okoitXUmDNNRW2NdTC0vqrG+gMPx6Qqtr6w2g6mIUZtm7mxTasRBMrcK9OgFWprZIqPplErgYHOOI87c+85e+/VH3fQGRhg0NH+6P5zf5zH/c56fOtbH/B/dQQEAU3mKz/Py8hv97m7cQ4V9ncJWnJ2LNiAM3lwU7ZLcsg5EORLi1KmI6PHu9S6o81r3dHmjXct05HREBkbEBHyxVcQXyEI+HNH0G/3VW4kUh2ZDv3Amj8sjLTJGsRnW5GvibI1EBAJFxn0EZN+M+F0x2n/anjlyZZwEAB88VWODon2JKSY/Hafcy05u/yZoHbPGQdaYy/+ntOYKymGWAeJLQ4mkZgATWClILEDl/G+suqZKXuqn3jpmz/b64uvcqvniL8gmra/sXeN87iBinx3YfHPdyMIGGHoJg5QhAACCLJk28qWUp25303hmXY4hi0ZC1DMBAWBBwWACHAARGIRsiCn2NOerk5ABtw+LmFV54K2pwDg/FdveNadklguVmC7y68vfeHkc0IAEwcoQiCSdr9dPXHH1rVxvVtpjIGUbAwAlNSeSmlI2UGGTURCAyCII1RzktOUUnCRhS0ZQw6Ok5xQ6QRkwP36oneXXLfllA35uF7Nl5IBG+6Z3XPGqc8uvbMIAR1sKn1UcKuJgvVB8vFvbHneTKNlUU/ZsoijpPZUQsMN2t087H6nDOfTqH03tbf+48SUkgzUSM1QPHSqHY4youjKRFXiLGsqQG00BG9q+qrNp2w6AQ7VsKKICRBnxoOhj1hzaOH2UNz5r7W222lqmekZjhkgXZvypOg+0EN8z/T3T/xNriWMxnm+D8C/AWyTQO7LXrbyStHuftWQ+nrcW5L4PyWravQFEgMybISSikAgYO/EAPric45yNvPnFfe5E/Rlcc9QDBCp2qSmPrxQ152+fuOyx/cfpI+m/U2S2zVHsDqstMnqgPy5XdTd2E2UJQtCDkBu4Rvff5JT6gZXtuxKxgFEIDq+Lj5IJUu23Xzu0NTStiiODKxA1yW19Mhzr81/6uoKsEAXmkMLHIWAR2rppsceS759znvNiL26YT1wb1RlT5PYOQAMEUFCEZdl76yeqbOeXfrQ0Wswt2uOBIHwZu/6R40iYFicmuIlqEfy2+evu4bkJA4AhBSaY7NTQEEAyi/Y9Ss33VtuS0WYwRiIBQLwp1ESiECA6UdPcaYjowvNodnW0f0tqdfz3GDZcII1ldBX01NzLYHEz/kctkyAaCsM4Lraf9IYKbPc9kaRGDghp1EpOEiFlQSVRHuNfewOfc2Y8VLIZh0AlNLxSkdOCLBclWA1pNZsuvjhDzMdgc61THAKEAkk4O7GqBfCm1KNUxJebSLl1aW0V5vSui6lvbqU1jVJLzmtWjO8TY+03D4cSMCj5/anNTjC4P6W22Z8UP/xe05JkpiIYu6tO1A7a9PSR3oBqfzx8agbgizZfFedaej7rnPc4IyBjMxkEhLyFLGifTV7Gp9+8fJwaHT9jUlxJpvnQgjXnSwu4ik6ZYtRWU9JJKlHNm66+JGeygwle5xaSQBgy4Vr+gCsPZ5nxqnBLIACHMtZUFT5PhBUpP4EAXXn59DnUkD5QB3tlkI2tONJslEA85Ufha8KAIJTUrJIkO4CQZrauz67niNIAUfp+iBgZGXcyftJkzRlmwQAjLIJiECI2JWd02Xdc5B+vhh9OaJeiGQ8TXgYDzo4MDRIQBCBVQn3BcpfAoXu0m0/njnY29NfuDw8MBJGOSyC3fluAgBtdQQigGApyWy4OBUA/Lldk7prBBIwAGnefuOqvmm9u+Ov4q3zO3+wcNS1Q3kwW/kkyx9WxiNZSmtEKZkNgLob50weQBEKKXTf+eOPvlJS5VVRFHlcr0+wXnwzAMnn8+MBzI+oYfwdVgARIgIgURaANGW7Jq0G/VwLA6B9tUNnIKW0GIlcbB05GjpikxTylSmSNKntdiCOQJQwQxGskksvfPn26hxybrJWypFsiPHMJVSliIgcETE7fnN0NsdGMAwdJOAt5639gIW2qyoNiVzE9d70gZr+q0GQY3HZRDmxkIW7rf2htPHcNXY4Bkg8N2CkOk5tBYBsFm7cWZwZyb2C18aKCQRyw7FISlYt2XxXXSELd6T1cKJn3s5WDQrdG9N334QG72RXdhFXaUaE11/KPvwWgoBDCscHWGguWAjoxPT05+3H8duc1tqVjeFaNaNY39MGCl0mm+fD9tsJnkxHoHeevS6+bMOtc6NaF8TFsgMJsdKUkMSjBJJMdiymQ6Mhfs7n3Jlh5LnkHUorEiYy/WWDBvXtxa+veLDQXDAAwRf/eNJN83a0eoXm0Fzx/K0n9jYN/t54qCIjVlV7nvSYv2Y3NOYgAReax06cw9KVa8lZv91XnQt++aLrdeu9hpSGiJj+knUNdOeinSvaLl77WCJHOYsAnOnI6EACPqyBBBRIwJmOQAOQg5E7MHNoq6nGbDdsjGhiRHBVw1U3hmFo/NzhXEtHKmQ/53NV4xzvndo9Barn+aa3FDsi9uqSCoPyt0RZ311Y8OTGI0msMaS8fn1q29wdK8qJ6F6TcLVuyBhhIFGX1rzX3dK5eN3aIzkOdNQBHobu3JduajQnlTZQDc+Le0sGAFS1p1kYVHKdyunfJgfTr8zsP/2f6y5f8QmP3f7yT6v/Ub1v9nCieEmk42ulhk83QzEkcgYKnKivYtrrHuhc1Hb3yH5jjt/6kIBBoVvS3lpXnCXrqU5dYQbLkNhFQqRUtVasFVx/DHb0ETveD3LDEKQdo1GUzKAaDVseWfZFwGnPY2Gofr6rc1Hbg8fyao7djaO8ksU7b/ih9eQerlKNphhDjI0hcCB45DGTViACRBzECMSIhcAAUJxUWqU0pCi7VL+6tfO8X2xBu69wjBXi2J1YKEilAQL+8KqHXzv9ioXPxdpGApnJVbpepbUGEcEKJHKQ2DoxAmIildSsqj3NiplivKuK+r4Z71W1blz2+Du++KrrzGPvN8dnv41KR6bjlnpXay4QMhc5sWdbkZMhUkdCGhBLjF4Qv6+I/8JWbzj1rcatT18Xlg618SbfYRUhHy18aN0sfzWo7YtL9VSkhOepOF3Wvc8tC/sP+8AvzW0VkC++OpLbOtqNrbion01o0KQa6KsDCgCEALA6lC/Pl/4fnv8C4gvFAbl4eBAAAAAASUVORK5CYII=";var pp="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAFXklEQVR42u1YTWxUVRT+zr33zZuhM/3DYistRVoCihhDMCGEiEVATQiRSKs7JVE3JprgwoXRabeulOjGEBPUmNhuwCAhYJnya9SIxggBKn+1VFpKpy2dedN5997jojPNtDOVUEph0W83d87M/e653/nOeQ+Ywxzm8GCCGYJjULEYFDPogSOXtxbNXwMAdR/IERHswLFHnwwpWsuMobPX4geoKT6U+Y5z42m2M0cE23eoOlocslFXaYIQ8PzApeGU3Fa58fKf2Zjsb8SskWuFJIK90b5oQ0WJbU7zQxgt2aGTzuZ0yMWSAPQejq1XaL5fV1wBikYhiPAKCNatfNUEilc6zBYjXTeswm9PXbd9y6pacCY3i2IWCYqWFlg26AcgYJMACMSGidNsQSwt+/elSDgGRU8gfe37qkXBgN2cSpFOJ1qlSV03JtVrw855ZwjqaMXGc50cnWUNcgyKGqBvHK58urRMnXCVWE2QCiYhnOG9MqR/cbwR+pV9/XqhklUzbSEAQARmgBCDpAbo/sOVLxeFnD1Wo8hxgEHP7GcEPvBMcIkjMPTaZxePtbXBZC3onnhbrvlyK2T2c/xIzc7UiRq+1VFj7E+LeKh94eeFOsdU3YRmyHgZAAaPryyDNFS69uwAAAwfrf40HJTvJJLWug5EIs3vl23o/pijEFiRs3cTLGGiQc8IwSy5WycfXkDG3QU9+hwRCd+4P1jSkbKIfCmZZEgJL+WbHaUber7jGBSehZncMaYC3ZXeOiCBWhU3JlZWzmuSqUWQguDyVfhGAbAwlnuSSds4/4WeU9mCuZN9/reKOQrBDJGrj4zeJDrGCqAPcnVZWK9J+KvSwdr32KnZyUm5ytc6pbUVpwc9f910yU1JkBnEUQhqgSWCJQJzK2QsBkUEJoKhBujhWNW6sOQPR0e1VpHlUsgQCRkkMW8ZhYIsE776pOr53ssXDsCdDrkpbSajDx48VVcfCrnhXm/4PK3t9gDgr9aK8OLKwDZY+QaAZxzB0H4Auv+IlW61ZmbowRh8VuSQfzYahVj6IvzpSokKlfpgR22Jktgt7OhWZuOQCl0a9fGRsH6148q3AlIuEQCEAJKehbZ0ZZ6rFyvHARsGuRaDcdpVtvGfdydPJ3dLUBDBDrTXtJXN5+0Jr96Ss4DU6GmSlIIQMuPAQCLFnhTYn07rL4aLxMmwJ7YHFW+1zDAs9pU0dH3DDAIBU1nIHRHMau7q4aVLijHcGYgs52D124JUmNI3263X/bV13JBi2GtC4Ftj9JfFDf+em7LAALobYvkabAbQAgiBiIQVLMtZqCICG1CgkiMRRV6a9w2M0I7aLV3xbMcAADTCAhBoy/xXI0AEMxNdSuXkkplBnZ18rqg7cLFE/1Hn9R1Ky9BCMdq7lyNBcrwEdtdu6YrzAbj4GT41TSBhcA9AeVNvE8z1H2s2lbi8Nxgy82AAKIHBuPyqdKDrTTwOYAXMeLZmAo0AmsHUkl9MVMicqQX2dGt9xWNV3MRsSzXz8eL1V47d89GsgG6pUG+9drBq+SPzRWX/iBkBgQSEAtsSDUAxTRS+LHC5EpAmsyxzlg1gJsWzBJcUSeqN28vVm3ouTH6yUxMyR7BdB6vriwL0O1sZLA8p0NjJYMzYcZgzZ809m5qUBwBQmWDKyUM2TvF4mAUAH4hISvXG6lYSXfw7e4sFO4nrEIPJas0wGqBJCeOxToM8B2GACaDxvTnnijj/3pjHJ1s71r4MvDTftpMQgXsP1NSVl1PtyIjJWO00oAscv9Aag8Nh0M1b/pXKTX2XCj285wn1vr0SKbA3TTVmTZh4ZwNnCtvMHOYwh9vgP/Xfodt7xGPxAAAAAElFTkSuQmCC";var gp=globalThis.unsafeWindow??globalThis,_n=gp.__MWI_DPS=gp.__MWI_DPS||{};_n.__mwitoolsIntegrated=!0;var Xa="1.0.51",Zu="TabsComponent_tabsContainer__3BDUp",St="#d4af37",dt=(()=>{let e={abilities:"fdd1b4de",skills:"3bb4d936",items:"f58c9476",misc:"6560b17a",avatars:"75a98d25"},t=new Map,a=Number.NEGATIVE_INFINITY,n=5e3;function i(c){let l=String(c||""),d=l.match(/(?:https?:\/\/[^/]+)?(\/static\/media\/(abilities|skills|items|misc|avatars)_sprite\.[^/#]+\.svg)/i);d&&t.set(d[2].toLowerCase(),d[1])}s(i,"remember");function o(c=!0){let l=typeof performance<"u"&&typeof performance.now=="function"?performance.now():Date.now();if(!(!c&&(t.size>=Object.keys(e).length||l-a<n))){a=l;try{typeof performance<"u"&&typeof performance.getEntriesByType=="function"&&performance.getEntriesByType("resource").forEach(d=>i(d.name))}catch{}try{typeof document<"u"&&typeof document.querySelectorAll=="function"&&document.querySelectorAll("svg use,img").forEach(d=>i(d.getAttribute&&(d.getAttribute("href")||d.getAttribute("xlink:href")||d.getAttribute("src"))||d.currentSrc||d.src))}catch{}}}s(o,"scan");function r(c,l){return o(!1),(t.get(c)||"/static/media/"+c+"_sprite."+e[c]+".svg")+"#"+String(l||"").split("/").pop()}return s(r,"sprite"),{ability:s(c=>r("abilities",c),"ability"),skill:s(c=>r("skills",c),"skill"),item:s(c=>r("items",c),"item"),misc:s(c=>r("misc",c),"misc"),avatar:s(c=>r("avatars",c),"avatar"),scan:s(()=>o(!0),"scan")}})(),Wr={get attack(){return dt.skill("attack")},get defense(){return dt.skill("defense")},get stamina(){return dt.skill("stamina")}},Ea={get history(){return dt.misc("loot_tracker")},get settings(){return dt.misc("settings")},trend:pp,debug:fp,reset:bp,copy:mp,close:dp},d7=["#C41E3A","#00FF98","#3FC7EB","#C69B6D","#A330C9","#FFF468","#AAD372","#0070DD","#F48CBA"],Q=(()=>{let e="kikimeter:settings:v4",t="kikimeter:settings:v3",a=typeof u.config.isZH=="boolean"?u.config.isZH?"zh":"en":/^zh\b/i.test(globalThis.navigator?.language??"")?"zh":"en",n={colors:{},classOverrides:{},classCache:{},weaponCache:{},mainMode:"dps",showHealing:!0,showGraph:!1,autoReset:!0,language:a,panelOpacity:100},i={...n};try{let r=JSON.parse(localStorage.getItem(e)||localStorage.getItem(t)||"{}");r&&typeof r=="object"&&(i={...n,...r})}catch{}function o(){try{localStorage.setItem(e,JSON.stringify(i))}catch{}}return s(o,"save"),{getColor:s(r=>i.colors[r],"getColor"),setColor:s((r,c)=>{i.colors[r]=c,o()},"setColor"),getClassOverride:s(r=>i.classOverrides[r],"getClassOverride"),setClassOverride:s((r,c)=>{c?i.classOverrides[r]=c:delete i.classOverrides[r],o()},"setClassOverride"),getCachedClass:s(r=>i.classCache[r],"getCachedClass"),setCachedClass:s((r,c)=>{c?i.classCache[r]=c:delete i.classCache[r],o()},"setCachedClass"),getCachedWeapon:s(r=>i.weaponCache[r]||"","getCachedWeapon"),setCachedWeapon:s((r,c)=>{c?i.weaponCache[r]=c:delete i.weaponCache[r],o()},"setCachedWeapon"),getShowHealing:s(()=>i.showHealing,"getShowHealing"),setShowHealing:s(r=>{i.showHealing=r,o()},"setShowHealing"),getShowGraph:s(()=>i.showGraph,"getShowGraph"),setShowGraph:s(r=>{i.showGraph=r,o()},"setShowGraph"),getMainMode:s(()=>["dps","hps","taken","debug"].includes(i.mainMode)?i.mainMode:"dps","getMainMode"),setMainMode:s(r=>{i.mainMode=["dps","hps","taken","debug"].includes(r)?r:"dps",o()},"setMainMode"),getAutoReset:s(()=>i.autoReset,"getAutoReset"),setAutoReset:s(r=>{i.autoReset=r,o()},"setAutoReset"),getRecountMode:s(()=>i.recountMode||"dmg","getRecountMode"),setRecountMode:s(r=>{i.recountMode=r,o()},"setRecountMode"),getRecountPos:s(()=>i.recountPos,"getRecountPos"),setRecountPos:s(r=>{i.recountPos=r,o()},"setRecountPos"),getRecountSize:s(()=>i.recountSize,"getRecountSize"),setRecountSize:s(r=>{i.recountSize=r,o()},"setRecountSize"),getPanelLayoutVersion:s(()=>Number(i.panelLayoutVersion)||0,"getPanelLayoutVersion"),setPanelLayoutVersion:s(r=>{i.panelLayoutVersion=Number(r)||0,o()},"setPanelLayoutVersion"),getRecountShowGraph:s(()=>i.recountShowGraph!==!1,"getRecountShowGraph"),setRecountShowGraph:s(r=>{i.recountShowGraph=r,o()},"setRecountShowGraph"),getDebugMode:s(()=>i.debugMode||!1,"getDebugMode"),setDebugMode:s(r=>{i.debugMode=r,o()},"setDebugMode"),getLanguage:s(()=>i.language==="en"?"en":"zh","getLanguage"),setLanguage:s(r=>{i.language=r==="en"?"en":"zh",o()},"setLanguage"),getPanelOpacity:s(()=>Math.max(10,Math.min(100,Number(i.panelOpacity)||100)),"getPanelOpacity"),setPanelOpacity:s(r=>{i.panelOpacity=Math.max(10,Math.min(100,Number(r)||100)),o()},"setPanelOpacity"),getLauncherPos:s(()=>i.launcherPos,"getLauncherPos"),setLauncherPos:s(r=>{i.launcherPos=r&&typeof r=="object"?r:null,o()},"setLauncherPos")}})();function bt(e){let t=Number(e)||0,a=Math.abs(t);return a>=1e6?(t/1e6).toFixed(1)+"M":a>=1e3?(t/1e3).toFixed(1)+"K":Math.round(t).toString()}s(bt,"formatDamage");function mt(e){let t=Number(e)||0;return Math.abs(t)>=1e3?bt(t):t.toFixed(1)}s(mt,"formatRate");function ca(e){let t=Math.floor(e%60),a=Math.floor(e/60)%60,n=Math.floor(e/3600),i=s(o=>String(o).padStart(2,"0"),"p");return n>0?n+":"+i(a)+":"+i(t):a+":"+i(t)}s(ca,"formatDuration");function ve(e,t){let a=document.createElement(e);return t&&Object.assign(a.style,t),a}s(ve,"el");function Ia(e,t=""){let a=String(e||"");if(a.includes("/static/media/")&&a.includes(".svg#")){let i=document.createElementNS("http://www.w3.org/2000/svg","svg");i.setAttribute("role","img"),i.setAttribute("aria-label",t),i.setAttribute("width","100%"),i.setAttribute("height","100%");let o=document.createElementNS("http://www.w3.org/2000/svg","use");return o.setAttribute("href",a),i.appendChild(o),i}let n=document.createElement("img");return n.src=a,n.alt=t,n}s(Ia,"iconElement");var yn=(()=>{function e(n=new Date){let i=n instanceof Date?n:new Date(n);if(Number.isNaN(i.getTime()))return"";let o=s(r=>String(r).padStart(2,"0"),"pad");return i.getFullYear()+"-"+o(i.getMonth()+1)+"-"+o(i.getDate())}s(e,"dayStamp");function t(n,i,o,r=new Date){let c=String(n&&n.combatKey||""),l=e(r);return i==="trial"?{key:"guild-trial-day-"+o+"-"+l,rawKey:c,day:l}:{key:c,rawKey:c,day:l}}s(t,"resolve");function a(n,i,o,r){return!n||String(n.characterId||"unknown")!==String(r)?!1:n.combatKey===i.key?!0:o==="trial"&&n.type==="trial"&&!n.manualReset&&!String(n.combatKey||"").includes("-manual-")&&e(n.startedAt)===i.day}return s(a,"matches"),{dayStamp:e,resolve:t,matches:a}})();function Uu(e={},t={}){let a=e.battleType,n=t.type;return!a||!n?!0:a===n||a==="combat"&&n==="labyrinth"}s(Uu,"combatEventMatchesSession");function Ku(e){if(!e||typeof e.querySelector!="function")return!1;let t=e.querySelector('[role="tab"][aria-selected="true"]'),a=String(t&&t.textContent||"").replace(/\s+/g,"").toLowerCase();return a.startsWith("试炼")||a.startsWith("試煉")||a.startsWith("trials")||a.startsWith("trial")}s(Ku,"isSelectedTrialTabBar");function Xu(e){if(!e||typeof e.querySelector!="function")return!1;let t=e.querySelector('[role="tab"][aria-selected="true"]'),a=String(t&&t.textContent||"").replace(/\s+/g,"").toLowerCase();if(!(a.startsWith("进行中")||a.startsWith("進行中")||a.startsWith("inprogress")))return!1;let n=e;for(let i=0;n&&i<4;i++,n=n.parentElement){let o=String(n.textContent||"").replace(/\s+/g,"").toLowerCase();if(o.includes("试炼")||o.includes("試煉")||o.includes("trial")||o.includes("公会")||o.includes("公會")||o.includes("guild"))return!0;if(typeof document<"u"&&(n===document.body||n===document.documentElement))break}return!1}s(Xu,"isSelectedGuildProgressTabBar");var qe=(()=>{let e="unknown",t=new EventTarget,a={fire:{get label(){return Q.getLanguage()==="en"?"Fire Mage":"火法"},color:"#C41E3A",get icon(){return dt.item("blazing_trident")}},nature:{get label(){return Q.getLanguage()==="en"?"Nature Mage":"自然法"},color:"#00FF98",get icon(){return dt.item("blooming_trident")}},water:{get label(){return Q.getLanguage()==="en"?"Water Mage":"水法"},color:"#3FC7EB",get icon(){return dt.item("rippling_trident")}},sword:{get label(){return Q.getLanguage()==="en"?"Sword":"剑"},color:"#C69B6D",get icon(){return dt.item("regal_sword")}},mace:{get label(){return Q.getLanguage()==="en"?"Mace":"锤"},color:"#A330C9",get icon(){return dt.item("chaotic_flail")}},spear:{get label(){return Q.getLanguage()==="en"?"Spear":"枪"},color:"#FFF468",get icon(){return dt.item("furious_spear")}},bow:{get label(){return Q.getLanguage()==="en"?"Bow":"弓"},color:"#AAD372",get icon(){return dt.item("cursed_bow")}},crossbow:{get label(){return Q.getLanguage()==="en"?"Crossbow":"弩"},color:"#0070DD",get icon(){return dt.item("sundering_crossbow")}},shield:{get label(){return Q.getLanguage()==="en"?"Shield":"盾"},color:"#F48CBA",get icon(){return dt.item("griffin_bulwark")}},unknown:{get label(){return Q.getLanguage()==="en"?"Unknown":"未知"},color:"#7f8c8d",get icon(){return dt.skill("attack")}}},n=new Map,i={},o={blazing_trident:"fire",blooming_trident:"nature",rippling_trident:"water",regal_sword:"sword",chaotic_flail:"mace",furious_spear:"spear",cursed_bow:"bow",sundering_crossbow:"crossbow",griffin_bulwark:"shield"};function r(M){return String(M||"").split("/").pop().toLowerCase()}s(r,"tail");function c(M){return r(M).replace(/_refined$/,"")}s(c,"normalizeWeapon");function l(M,L=0){M=M&&typeof M=="object"?M:{};let R=(Array.isArray(M.combatStyleHrids)?M.combatStyleHrids:M.combatStyleHrid?[M.combatStyleHrid]:[]).map(r)[0]||"",te=r(M.damageType),X=r(M.primaryTraining),W=Number(M.attackInterval||L||0);if(R==="magic"){if(te==="fire")return"fire";if(te==="nature")return"nature";if(te==="water")return"water"}return R==="slash"?"sword":R==="stab"?"spear":R==="smash"?X==="defense"?"shield":"mace":R==="ranged"&&W>0?Math.abs(W-32e8)<=Math.abs(W-36e8)?"bow":"crossbow":e}s(l,"identifyStats");function d(M){let L=String(M||""),F=r(L),R=c(L),te=[L,F,"/items/"+F,R,"/items/"+R];for(let W of te){let K=i instanceof Map?i.get(W):i&&i[W];if(K&&typeof K=="object")return K}return(i instanceof Map?[...i.values()]:Object.values(i||{})).find(W=>{let K=W&&(W.hrid||W.itemHrid||W.item&&W.item.hrid||W.itemDetail&&W.itemDetail.hrid);return K&&c(K)===R})||{}}s(d,"itemDetailFor");function m(M){return M&&(M.equipmentDetail&&M.equipmentDetail.combatStats||M.item&&M.item.equipmentDetail&&M.item.equipmentDetail.combatStats||M.itemDetail&&M.itemDetail.equipmentDetail&&M.itemDetail.equipmentDetail.combatStats||M.combatStats)||null}s(m,"statsFromItemDetail");function p(M){let L=c(M);for(let[F,R]of Object.entries(o))if(L.includes(F))return R;return/(^|_)(crossbow|xbow)(_|$)/.test(L)||L.includes("crossbow")?"crossbow":/(^|_)bow(_|$)/.test(L)||L==="gobo_shooter"?"bow":L.includes("_fire_staff")||L==="infernal_battlestaff"||L==="gobo_boomstick"?"fire":L.includes("_nature_staff")||L==="jackalope_staff"?"nature":L.includes("_water_staff")||L==="frost_staff"?"water":/(^|_)(sword|slasher|dirk)(_|$)/.test(L)?"sword":/(^|_)(mace|flail|bludgeon|smasher)(_|$)/.test(L)?"mace":/(^|_)(spear|stabber)(_|$)/.test(L)?"spear":/(^|_)(bulwark|shield|aegis)(_|$)/.test(L)?"shield":e}s(p,"namedWeaponClass");function b(M){if(!M||typeof M!="object")return"";let L=M instanceof Map?[...M.entries()]:Array.isArray(M)?M.map((te,X)=>[String(X),te]):Object.entries(M),F=s((...te)=>{for(let X of te){let W=M instanceof Map?M.get(X):M[X];if(W)return W;let K=L.find(([le,D])=>le===X||D&&(D.itemLocationHrid===X||D.equipmentTypeHrid===X||D.locationHrid===X));if(K)return K[1]}return null},"atSlot"),R=F("/item_locations/main_hand","/equipment_types/main_hand","main_hand","mainHand")||F("/item_locations/two_hand","/equipment_types/two_hand","two_hand","twoHand");return typeof R=="string"?R:R&&(R.itemHrid||R.hrid||R.item&&R.item.hrid)||""}s(b,"weaponHridFromWearable");function f(M){if(!M||typeof M!="object")return"";let L=M.weaponHrid||M.mainHandItemHrid||M.twoHandItemHrid||M.combatDetails&&M.combatDetails.weaponHrid;if(L)return L;let F=M.wearableItemMap||M.equipmentMap||M.equippedItems||M.equipment||{},R=b(F);if(R)return R;let te=M.combatDetails&&M.combatDetails.combatStats||M.combatStats||{};return Number(te.blaze)>0?"/items/blazing_trident":Number(te.mayhem)>0?"/items/chaotic_flail":Number(te.pierce)>0?"/items/sundering_crossbow":""}s(f,"weaponHridFromPlayer");function g(M){let L=f(M);if(L){let R=A(L);if(R!==e)return R}let F=M&&M.combatDetails&&M.combatDetails.combatStats||M&&M.combatStats||{};return l(F,M&&M.attackInterval)}s(g,"identify");function h(M,L){if(!M)return"";let F=f(L);if(F)return Q.setCachedWeapon(M,F),F;let R=L&&L.combatDetails&&L.combatDetails.combatStats||L&&L.combatStats;return R&&["blaze","mayhem","pierce"].some(te=>Object.prototype.hasOwnProperty.call(R,te))&&Q.setCachedWeapon(M,""),""}s(h,"syncWeaponCache");function _(M,L,F="被动战斗数据"){if(!M||!a[L]||L===e)return!1;let R=(n.get(M)||Q.getCachedClass(M))!==L;return n.set(M,L),Q.getCachedClass(M)!==L&&Q.setCachedClass(M,L),R&&t.dispatchEvent(new CustomEvent("change",{detail:{name:M,classId:L,source:F}})),!0}s(_,"setDetected");function y(M){return Q.getClassOverride(M)||n.get(M)||Q.getCachedClass(M)||e}s(y,"classFor");function w(M){return a[y(M)]||a.unknown}s(w,"get");function k(M,L){Q.setClassOverride(M,L==="auto"?null:L)}s(k,"setOverride");function C(M){let L={};return(M||[]).forEach(F=>{let R=F.character&&F.character.name||F.name;h(R,F);let te=R?y(R):e,X=te!==e?te:g(F);R&&(te===e&&X!==e&&_(R,X),L[R]=X)}),L}s(C,"registerPlayers");function x(M){let L=M&&(M.unit||M.battleUnit||M.combatUnit)||M;if(!L||typeof L!="object")return null;let F=L.character&&L.character.name||L.characterName||L.name||M&&M.characterName||"";h(F,L);let R=F?y(F):e,te=R!==e?R:g(L);return!F||te===e?{name:F,classId:te,updated:!1}:{name:F,classId:te,updated:R===e&&_(F,te,"战斗人物属性"),source:"combatDetails.combatStats"}}s(x,"learnBattleUnit");function T(M){M&&typeof M=="object"&&(i=M)}s(T,"cacheItemDetails");function A(M){if(!M)return e;let L=p(M);if(L!==e)return L;let F=d(M),R=m(F);if(R){let te=l(R);if(te!==e)return te}return e}s(A,"classFromWeapon");function I(M){let L=M&&(M.profile||M.profileSharedData||M.profileData)||M;if(!L||typeof L!="object")return null;let R=(L.sharableCharacter||{}).name||L.characterName||L.name||"",te=L.wearableItemMap||L.equipmentMap||L.equippedItems||{},X=b(te);R&&X&&Q.setCachedWeapon(R,X);let W=A(X);return!R||W===e?{name:R,classId:W,weaponHrid:X,updated:!1,source:"profile_shared.wearableItemMap"}:{name:R,classId:W,weaponHrid:X,updated:_(R,W,"手动点击人物装备"),source:"profile_shared.wearableItemMap"}}s(I,"learnProfile");function q(M){let L=String(M||"").toLowerCase();return L==="/abilities/maim"||L==="/abilities/crippling_slash"?"sword":e}s(q,"classFromAbility");function B(M,L){let F=q(L);return!M||F===e?{name:M,classId:F,abilityHrid:L,updated:!1}:Q.getClassOverride(M)?{name:M,classId:y(M),abilityHrid:L,updated:!1,source:"手动职业覆盖"}:{name:M,classId:F,abilityHrid:L,updated:_(M,F,"武器专属技能"),source:"abilityHrid"}}s(B,"learnAbility");function j(M){Object.entries(M||{}).forEach(([L,F])=>_(L,F))}s(j,"applyClasses");function V(M){return Q.getCachedWeapon(M)}s(V,"getWeapon");function O(){return Object.fromEntries(Array.from(n,([M,L])=>[M,{classId:y(M),detected:L,...w(M)}]))}return s(O,"diagnostics"),{bus:t,definitions:a,identify:g,registerPlayers:C,learnBattleUnit:x,learnProfile:I,learnAbility:B,classFromAbility:q,classFromWeapon:A,cacheItemDetails:T,applyClasses:j,setDetected:_,setOverride:k,classFor:y,get:w,getWeapon:V,diagnostics:O}})(),Ot=(()=>{let e="kikimeter:class-debug:v1",a=new EventTarget,n=[];try{let b=JSON.parse(localStorage.getItem(e)||"[]");Array.isArray(b)&&(n=b.slice(0,12))}catch{}function i(b){return String(b||"").split("/").pop().toLowerCase()}s(i,"tail");function o(b){return[["combatDetails.combatStats",b&&b.combatDetails&&b.combatDetails.combatStats],["combatUnit.combatDetails.combatStats",b&&b.combatUnit&&b.combatUnit.combatDetails&&b.combatUnit.combatDetails.combatStats],["character.combatDetails.combatStats",b&&b.character&&b.character.combatDetails&&b.character.combatDetails.combatStats],["combatStats",b&&b.combatStats]].filter(([,f])=>f&&typeof f=="object").map(([f,g])=>({path:f,combatStyleHrids:Array.isArray(g.combatStyleHrids)?g.combatStyleHrids.slice(0,8):g.combatStyleHrids,combatStyleHrid:g.combatStyleHrid,damageType:g.damageType,primaryTraining:g.primaryTraining,attackInterval:g.attackInterval}))}s(o,"candidateStats");function r(b,f){let g=b&&b.character&&b.character.name||b&&b.name||"玩家槽位"+f,h=o(b),_=h[0]||{},y=qe.identify(b);return{index:f,name:g,detectedClass:y,detectedLabel:(qe.definitions[y]||qe.definitions.unknown).label,selectedPath:_.path||"未找到",topLevelKeys:b&&typeof b=="object"?Object.keys(b).sort():[],candidates:h,normalized:{style:i(Array.isArray(_.combatStyleHrids)?_.combatStyleHrids[0]:_.combatStyleHrid),damageType:i(_.damageType),primaryTraining:i(_.primaryTraining),attackInterval:Number(_.attackInterval||b&&b.attackInterval||0)}}}s(r,"summarizePlayer");function c(){try{localStorage.setItem(e,JSON.stringify(n))}catch{}}s(c,"save");function l(b,f){if(b!=="new_battle"&&b!=="new_guild_battle")return;let g=Array.isArray(f&&f.players)?f.players:[];n.unshift({time:new Date().toISOString(),type:b,battleKey:String(f&&(f.battleId||f.guildBattleId||f.combatStartTime||f.combatId)||""),playerCount:g.length,players:g.map(r)}),n=n.slice(0,12),c(),a.dispatchEvent(new Event("change"))}s(l,"record");function d(){n=[],c(),a.dispatchEvent(new Event("change"))}s(d,"clear");function m(){return JSON.parse(JSON.stringify(n))}s(m,"get");function p(){if(Q.getLanguage()==="en"){let f=n.map(g=>({...g,players:g.players.map(h=>({...h,detectedLabel:(qe.definitions[h.detectedClass]||qe.definitions.unknown).label}))}));return[`=== MWI DPS Meter | Class Diagnostics | ${Xa} ===`,`Generated at: ${new Date().toLocaleString()}`,"Note: icons represent each class's signature weapon. The data below contains only class-identification fields.",`Recorded events: ${n.length}`,"",JSON.stringify(f,null,2)].join(`
`)}let b=[`=== 银河奶牛DPS统计|职业调试报告|${Xa} ===`,"生成时间:"+new Date().toLocaleString(),"说明:图标为职业代表武器;以下内容仅包含职业识别字段。","记录事件数:"+n.length,""];return n.forEach((f,g)=>{b.push("#"+(g+1)+" "+f.type+"|"+f.time+"|战斗标识 "+(f.battleKey||"无")+"|玩家 "+f.playerCount),f.players.forEach(h=>{b.push(" ["+h.index+"] "+h.name+" → "+h.detectedClass+"("+h.detectedLabel+")|读取路径 "+h.selectedPath),b.push(" 规范化:style="+(h.normalized.style||"空")+",damageType="+(h.normalized.damageType||"空")+",primaryTraining="+(h.normalized.primaryTraining||"空")+",attackInterval="+(h.normalized.attackInterval||0)),h.candidates.length?h.candidates.forEach(_=>b.push(" 候选 "+_.path+":"+JSON.stringify(_))):b.push(" 未找到 combatStats;顶层字段:"+h.topLevelKeys.join(", "))}),b.push("")}),b.join(`
`)}return s(p,"report"),{bus:a,record:l,clear:d,get:m,report:p,size:s(()=>n.length,"size")}})(),ft=(()=>{let e="kikimeter:class-probe:v4",o=new EventTarget,r={},c=null,l=!1,d=0,m=null,p=null,b=null,f=h()||g();function g(){return{schemaVersion:4,startedAt:null,endedAt:null,durationMs:0,stopReason:"",messageCounts:{},roster:{},currentRoster:{trial:{},combat:{}},rosterGeneration:{trial:-1,combat:-1},rosterSignature:{trial:"",combat:""},players:{},messageShapes:{},relatedMessages:{},fullMessages:[],domSnapshots:[],clicks:[],learnedClasses:[]}}s(g,"emptyState");function h(){try{let H=JSON.parse(localStorage.getItem(e)||"null");return H&&H.schemaVersion===4?H:null}catch{return null}}s(h,"load");function _(){try{f.storageNotice="全量消息正文仅保留在当前页面内存中,请在刷新或关闭页面前下载";let H={...f,fullMessages:[]};localStorage.setItem(e,JSON.stringify(H))}catch{}}s(_,"save");function y(H,ae,ue=16){if(ae==null)return;let _e=typeof ae=="string"||typeof ae=="number"||typeof ae=="boolean"?ae:JSON.stringify(ae);!H.some(ke=>ke===_e)&&H.length<ue&&H.push(_e)}s(y,"addUnique");function w(H){return H==null||typeof H=="string"||typeof H=="number"||typeof H=="boolean"?H:Array.isArray(H)?H.slice(0,8).map(w):"[对象]"}s(w,"safeValue");function k(H,ae="",ue="",_e=0,ke=new WeakSet){if(H==null||typeof H=="number"||typeof H=="boolean")return H;if(typeof H=="string")return/password|token|authorization|cookie|secret|credential|email/i.test(ue)?"[已脱敏]":/chat|whisper|mail/i.test(ae)&&/message|text|content/i.test(ue)?"[聊天正文已脱敏]":H;if(typeof H!="object")return String(H);if(ke.has(H))return"[循环引用]";if(ke.add(H),Array.isArray(H))return H.map(de=>k(de,ae,ue,_e+1,ke));let ee={};return Object.entries(H).forEach(([de,De])=>{ee[de]=k(De,ae,de,_e+1,ke)}),ee}s(k,"sanitize");function C(H,ae){let ue="";try{ue=JSON.stringify(k(ae,H))}catch(ke){ue=JSON.stringify({type:H,error:"消息序列化失败:"+String(ke)})}let _e=ue.length+H.length+80;d+=_e,f.fullMessages.push({offsetMs:f.startedAt?Math.max(0,Date.now()-new Date(f.startedAt).getTime()):0,type:H,payloadText:ue})}s(C,"recordFullMessage");function x(H){if(!l)return;let ae=typeof H=="string"?H:{dataType:Object.prototype.toString.call(H),size:Number(H&&H.size||H&&H.byteLength)||0},ue="__non_json_message__";f.messageCounts[ue]=(f.messageCounts[ue]||0)+1,C(ue,{raw:ae}),o.dispatchEvent(new Event("change"))}s(x,"recordUnparsed");function T(H){if(!H)return null;let ae="";try{ae=String(H.outerHTML||"").slice(0,12e4)}catch{}let ue={};try{Array.from(H.attributes||[]).forEach(_e=>{/style/i.test(_e.name)||(ue[_e.name]=_e.value)})}catch{}return{tag:String(H.tagName||""),className:String(H.className||""),attributes:ue,text:String(H.textContent||"").trim().slice(0,3e4),html:ae}}s(T,"elementSnapshot");function A(H){if(!H)return!1;try{let ae=getComputedStyle(H);return ae.display!=="none"&&ae.visibility!=="hidden"&&ae.opacity!=="0"}catch{return!0}}s(A,"isVisible");function I(H){if(!l||f.domSnapshots.length>=36||!document.querySelectorAll)return;let ae=['[role="dialog"]','[class*="BattleUnit"]','[class*="CombatUnitStatsText"]','[class*="Modal_modal"]','[class*="modalContent"]'],ue=[];if(ae.forEach(de=>{try{document.querySelectorAll(de).forEach(De=>{De.closest&&De.closest('[data-kikimeter="true"]')||A(De)&&!ue.includes(De)&&ue.push(De)})}catch{}}),!ue.length)return;let _e=ue.slice(0,20).map(T).filter(Boolean),ke=_e.map(de=>de.className+"|"+de.text).join(`
`).slice(0,2e5),ee=f.domSnapshots[f.domSnapshots.length-1];ee&&ee.signature===ke||f.domSnapshots.push({offsetMs:Math.max(0,Date.now()-new Date(f.startedAt).getTime()),reason:H,signature:ke,views:_e})}s(I,"captureDom");function q(H){l&&(b!==null&&clearTimeout(b),b=setTimeout(()=>{b=null,I(H)},120))}s(q,"scheduleDomCapture");function B(){document.addEventListener&&(m=s(H=>{if(!l)return;let ae=H.target,ue=ae&&ae.closest?ae.closest('[class*="CombatUnit"],[class*="MiniUnit"]'):null;f.clicks.push({offsetMs:Math.max(0,Date.now()-new Date(f.startedAt).getTime()),target:T(ae),unit:T(ue)}),q("点击后页面变化"),setTimeout(()=>I("点击后500毫秒"),500)},"clickHandler"),document.addEventListener("click",m,!0),typeof MutationObserver<"u"&&document.documentElement&&(p=new MutationObserver(()=>q("人物面板DOM变化")),p.observe(document.documentElement,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["class","role","aria-hidden"]})))}s(B,"attachInteractionObservers");function j(){m&&document.removeEventListener&&document.removeEventListener("click",m,!0),m=null,p&&p.disconnect(),p=null,b!==null&&clearTimeout(b),b=null}s(j,"detachInteractionObservers");function V(H,ae="",ue=0,_e={paths:[],values:{},hrids:[]}){return ue>5||H===null||H===void 0?_e:typeof H=="string"?(H.startsWith("/")&&y(_e.hrids,H,40),_e):(typeof H!="object"||(Array.isArray(H)?H.slice(0,12).map((ee,de)=>[String(de),ee]):Object.entries(H).slice(0,80)).forEach(([ee,de])=>{let De=ae?ae+"."+ee:ee;y(_e.paths,De,120),/ability|combat|style|damage|type|training|attack|interval|weapon|equipment|item|hrid|auto/i.test(ee)&&(de===null||typeof de!="object"?(_e.values[De]||(_e.values[De]=[]),y(_e.values[De],w(de))):Array.isArray(de)&&de.every(tt=>tt===null||typeof tt!="object")&&(_e.values[De]||(_e.values[De]=[]),de.slice(0,12).forEach(tt=>y(_e.values[De],w(tt))))),typeof de=="string"&&de.startsWith("/")&&y(_e.hrids,de,40),de&&typeof de=="object"&&V(de,De,ue+1,_e)}),_e)}s(V,"scanRelevant");function O(H,ae){ae.paths.forEach(ue=>y(H.paths,ue,120)),ae.hrids.forEach(ue=>y(H.hrids,ue,40)),Object.entries(ae.values).forEach(([ue,_e])=>{H.values[ue]||(H.values[ue]=[]),_e.forEach(ke=>y(H.values[ue],ke))})}s(O,"mergeScan");function M(H){H&&H.abilityDetailMap&&typeof H.abilityDetailMap=="object"&&(r=H.abilityDetailMap)}s(M,"cacheClientData");function L(H){return H==="trial"?"试炼":"普通"}s(L,"channelLabel");function F(H,ae){if(!Array.isArray(H)||!H.length)return;let ue=H.map((ee,de)=>({slot:String(de),name:ee.character&&ee.character.name||ee.name||"玩家槽位"+de,player:ee})),_e=ue.map(ee=>ee.slot+"="+ee.name).join("|");if(_e!==f.rosterSignature[ae]){let ee=Number(f.rosterGeneration[ae]);f.rosterGeneration[ae]=(Number.isFinite(ee)?ee:-1)+1,f.rosterSignature[ae]=_e,f.currentRoster[ae]={}}let ke=Math.max(0,Number(f.rosterGeneration[ae])||0);ue.forEach(({slot:ee,name:de,player:De})=>{let tt=ae+":"+ke+":"+ee;f.currentRoster[ae][ee]=tt,f.roster[tt]={channel:ae,generation:ke,slot:ee,name:de,initialClass:qe.identify(De),initialPath:De.combatDetails&&De.combatDetails.combatStats?"combatDetails.combatStats":"未找到"},f.players[tt]&&(f.players[tt].name=de)})}s(F,"registerRoster");function R(){let H=Ot.get()[0];if(!H||!Array.isArray(H.players))return;let ae=H.type==="new_guild_battle"?"trial":"combat";F(H.players.map(ue=>({name:ue.name,combatDetails:ue.selectedStats?{combatStats:ue.selectedStats}:void 0})),ae)}s(R,"seedRoster");function te(H,ae){let ue=f.currentRoster[ae]&&f.currentRoster[ae][H]||ae+":unknown:"+H,_e=f.roster[ue];return f.players[ue]||(f.players[ue]={key:ue,channel:ae,generation:_e?_e.generation:-1,slot:H,name:_e&&_e.name||"玩家槽位"+H,updateCount:0,fieldKeys:[],paths:[],values:{},hrids:[],abilities:[],autoAttackCount:0,mpDropCount:0,mpDropValues:[],lastMP:null,samples:[]}),f.players[ue]}s(te,"ensurePlayer");function X(H,ae){F(H.players||[],ae)}s(X,"recordRoster");function W(H,ae){let ue=H&&H.pMap&&typeof H.pMap=="object"?H.pMap:{};Object.entries(ue).forEach(([_e,ke])=>{if(!ke||typeof ke!="object")return;let ee=te(_e,ae);ee.updateCount++,Object.keys(ke).forEach(Rt=>y(ee.fieldKeys,Rt,80));let de=V(ke);O(ee,de),de.hrids.filter(Rt=>String(Rt).startsWith("/abilities/")).forEach(Rt=>y(ee.abilities,Rt,30)),Object.entries(de.values).forEach(([Rt,Kr])=>{/ability.*hrid/i.test(Rt)&&Kr.forEach(ma=>typeof ma=="string"&&y(ee.abilities,ma,30))}),(ke.isAutoAtk===!0||ke.isAutoAttack===!0)&&ee.autoAttackCount++;let De=Number(ke.cMP!==void 0?ke.cMP:ke.currentManapoints);Number.isFinite(De)&&(ee.lastMP!==null&&De<ee.lastMP&&(ee.mpDropCount++,y(ee.mpDropValues,ee.lastMP-De,20)),ee.lastMP=De);let tt=JSON.stringify(ke);y(ee.samples,tt,5)})}s(W,"recordPlayerMap");function K(H,ae){if(!/(battle|combat|ability|equipment|character_stats)/i.test(H))return;let ue=V(ae);f.relatedMessages[H]||(f.relatedMessages[H]={count:0,paths:[],values:{},hrids:[]});let _e=f.relatedMessages[H];_e.count++,O(_e,ue)}s(K,"recordRelated");function le(H,ae){if(H==="init_client_data"&&M(ae),!!l){if(f.messageCounts[H]=(f.messageCounts[H]||0)+1,f.messageShapes[H]||(f.messageShapes[H]=[]),Object.keys(ae||{}).forEach(ue=>y(f.messageShapes[H],ue,80)),C(H,ae),H==="new_guild_battle"&&X(ae,"trial"),H==="new_battle"&&X(ae,"combat"),H==="guild_battle_updated"&&W(ae,"trial"),H==="battle_updated"&&W(ae,"combat"),H==="battle_unit_fetched"||H==="profile_shared"){let ue=H==="profile_shared"?qe.learnProfile(ae):qe.learnBattleUnit(ae);ue&&y(f.learnedClasses,JSON.stringify(ue),80),q("收到 "+H)}K(H,ae)}}s(le,"record");function D(){return l||(f=g(),f.startedAt=new Date().toISOString(),l=!0,d=0,R(),B(),c=setInterval(()=>o.dispatchEvent(new Event("change")),1e3),_(),o.dispatchEvent(new Event("change")),console.info("[KikiMeter] 全量入站消息采集已开始;点击“结束采集”才会停止。")),we()}s(D,"start");function re(H="手动停止"){return l&&(l=!1,c!==null&&clearInterval(c),c=null,j(),f.endedAt=new Date().toISOString(),f.durationMs=Math.max(0,new Date(f.endedAt)-new Date(f.startedAt)),f.stopReason=H,_(),o.dispatchEvent(new Event("change")),console.info("[KikiMeter] 全量入站消息采集已结束,共 "+f.fullMessages.length+" 条消息。")),we()}s(re,"stop");function Ee(){l&&re("清空前停止"),f=g(),d=0,_(),o.dispatchEvent(new Event("change"))}s(Ee,"clear");function we(){let H=l&&f.startedAt?Date.now()-new Date(f.startedAt).getTime():f.durationMs||0;return{active:l,elapsedMs:H,startedAt:f.startedAt,endedAt:f.endedAt,captureChars:d,playerCount:Object.keys(f.players).length,messageCount:Object.values(f.messageCounts).reduce((ae,ue)=>ae+ue,0),fullMessageCount:f.fullMessages.length,domSnapshotCount:f.domSnapshots.length}}s(we,"status");function Re(H){let ae=r&&r[H];return ae?V(ae):null}s(Re,"abilityEvidence");function Ue(){if(Q.getLanguage()==="en"){let ee=JSON.parse(JSON.stringify(f));return ee.storageNotice&&(ee.storageNotice="Full message bodies are kept only in this page's memory. Download them before refreshing or closing the page."),[`=== MWI DPS Meter | Manual Full Incoming-Message Probe | ${Xa} ===`,`Generated at: ${new Date().toLocaleString()}`,`Capture started: ${f.startedAt||"Not started"}`,`Capture ended: ${f.endedAt||(l?"In progress":"None")}`,`Effective capture: ${(we().elapsedMs/1e3).toFixed(1)} seconds`,"Network policy: this probe does not call fetch, XHR, or WebSocket.send. It only reads data the game already received.","Scope: all incoming game WebSocket messages, user-selected targets, and character-panel DOM between start and stop. Chat bodies and credential fields are redacted.",`Messages: ${f.fullMessages.length} | Message bodies: ${(d/1024/1024).toFixed(2)} MB | DOM snapshots: ${f.domSnapshots.length}`,"",JSON.stringify(ee,null,2),"","--- Initial-message class report ---",Ot.report()].join(`
`)}let H=[`=== 银河奶牛DPS统计|手动全量入站消息探针|${Xa} ===`,"生成时间:"+new Date().toLocaleString(),"采样开始:"+(f.startedAt||"未开始"),"采样结束:"+(f.endedAt||(l?"进行中":"无")),"有效采样:"+(we().elapsedMs/1e3).toFixed(1)+" 秒|"+(f.stopReason||"尚未完成"),"网络原则:本探针没有调用 fetch、XHR 或 WebSocket.send,只被动读取游戏原本收到的数据。","采集范围:从点击开始到点击结束期间的全部游戏 WebSocket 入站消息、用户点击目标、人物面板 DOM;聊天正文及凭证类字段已脱敏。","完整消息:"+f.fullMessages.length+" 条|消息正文:"+(d/1024/1024).toFixed(2)+" MB|DOM快照:"+f.domSnapshots.length+" 份","","消息计数:"+JSON.stringify(f.messageCounts),"消息顶层字段:"+JSON.stringify(f.messageShapes),""];f.storageNotice&&H.push("存储提示:"+f.storageNotice,""),f.learnedClasses.length&&H.push("人物点击即时职业识别:"+f.learnedClasses.join(" | "),"");let ae=Object.values(f.roster),ue=new Map;ae.forEach(ee=>ue.set(ee.channel+"|"+ee.name,ee));let _e=[...ue.values()],ke=_e.filter(ee=>ee.initialClass&&ee.initialClass!=="unknown").length;return H.push("名册人数:"+_e.length+"|初始化可识别:"+ke+"|初始化无职业字段:"+Math.max(0,_e.length-ke),""),Object.values(f.players).sort((ee,de)=>ee.channel.localeCompare(de.channel)||ee.generation-de.generation||Number(ee.slot)-Number(de.slot)).forEach(ee=>{let de=ee.generation>=0?"第"+(ee.generation+1)+"阵容":"未知阵容";H.push("["+L(ee.channel)+" "+de+" slot "+ee.slot+"] "+ee.name+"|更新 "+ee.updateCount+"|MP下降 "+ee.mpDropCount+"|自动攻击 "+ee.autoAttackCount),H.push(" pMap字段:"+(ee.fieldKeys.join(", ")||"无")),H.push(" 技能:"+(ee.abilities.join(", ")||"未出现")),H.push(" MP消耗:"+(ee.mpDropValues.join(", ")||"未出现")),H.push(" Hrid:"+(ee.hrids.join(", ")||"无")),H.push(" 相关值:"+JSON.stringify(ee.values)),H.push(" 原始样本:"+(ee.samples.join(" || ")||"无")),ee.abilities.forEach(De=>{let tt=Re(De);H.push(" 技能定义 "+De+":"+(tt?JSON.stringify({values:tt.values,hrids:tt.hrids}):"客户端能力表中未找到"))}),H.push("")}),H.push("其他相关消息摘要:"+JSON.stringify(f.relatedMessages)),H.push("","--- 用户点击记录 ---"),f.clicks.length||H.push("采样期间没有捕获到页面点击。"),f.clicks.forEach((ee,de)=>H.push("#"+(de+1)+" +"+ee.offsetMs+`ms
`+JSON.stringify(ee))),H.push("","--- 人物面板 DOM 快照 ---"),f.domSnapshots.length||H.push("没有捕获到可见的人物面板;如需分析人物详情,请在采集期间点开战斗中的人物。"),f.domSnapshots.forEach((ee,de)=>{let De={...ee};delete De.signature,H.push("#"+(de+1)+" +"+ee.offsetMs+"ms|"+ee.reason+`
`+JSON.stringify(De))}),H.push("","--- 全部入站消息(按接收顺序) ---"),f.fullMessages.length||H.push("没有记录到入站消息。"),f.fullMessages.forEach((ee,de)=>{H.push("#"+(de+1)+" +"+ee.offsetMs+"ms|"+ee.type+`
`+ee.payloadText)}),H.push("","--- 初始化消息职业报告 ---",Ot.report()),H.join(`
`)}s(Ue,"report");function Ge(){if(!f.startedAt)return console.warn("[KikiMeter] 尚未开始全量消息采集,已取消空报告下载。"),null;if(l)return console.warn("[KikiMeter] 请先点击“结束采集”,再下载全量 MSG。"),null;let H=new Date().toISOString().replace(/[:.]/g,"-"),ae=new Blob(["\uFEFF"+Ue()],{type:"text/plain;charset=utf-8"}),ue=URL.createObjectURL(ae),_e=Object.assign(document.createElement("a"),{href:ue,download:"mwi-full-msg-capture-"+H+".txt"});return document.body.appendChild(_e),_e.click(),_e.remove(),URL.revokeObjectURL(ue),_e.download}return s(Ge,"download"),{bus:o,record:le,recordUnparsed:x,start:D,stop:re,clear:Ee,status:we,report:Ue,download:Ge,get:s(()=>JSON.parse(JSON.stringify(f)),"get")}})();function Ju(){if(document.getElementById("kikimeter-zh-theme"))return;let e=document.createElement("style");e.id="kikimeter-zh-theme",e.textContent=`[data-kikimeter="true"]{font-family:'Microsoft YaHei','微软雅黑','Noto Sans SC',sans-serif!important}`,(document.head||document.documentElement).appendChild(e)}s(Ju,"installThemeFont");var pt=(()=>{let e=s(()=>dt.skill("attack"),"combatIcon"),t={auto:["普通攻击","Auto Attack"],reflect:["反伤","Reflection"],dot:["持续伤害","Damage Over Time"],unknown:["未识别来源","Unknown Source"],legacy:["旧版本未记录来源","Legacy Untracked"]},a={"/items/blazing_trident":["炽焰三叉戟特效","Blazing Trident Effect"],"/items/blazing_trident_refined":["炽焰三叉戟★特效","Blazing Trident ★ Effect"],"/items/chaotic_flail":["混沌连枷特效","Chaotic Flail Effect"],"/items/chaotic_flail_refined":["混沌连枷★特效","Chaotic Flail ★ Effect"],"/items/sundering_crossbow":["裂空弩特效","Sundering Crossbow Effect"],"/items/sundering_crossbow_refined":["裂空弩★特效","Sundering Crossbow ★ Effect"]},n=new Set(["/abilities/aqua_aura","/abilities/berserk","/abilities/critical_aura","/abilities/elemental_affinity","/abilities/elusiveness","/abilities/fierce_aura","/abilities/flame_aura","/abilities/frenzy","/abilities/guardian_aura","/abilities/heal","/abilities/insanity","/abilities/invincible","/abilities/minor_heal","/abilities/mystic_aura","/abilities/precision","/abilities/provoke","/abilities/quick_aid","/abilities/rejuvenate","/abilities/revive","/abilities/speed_aura","/abilities/sylvan_aura","/abilities/taunt","/abilities/toughness","/abilities/vampirism"]);function i(f){let g=String(f||"").trim();return!g||g==="idle"?"unknown":g}s(i,"normalize");function o(f){let g=String(f||"").slice(9).split("|"),h=s(_=>{try{return decodeURIComponent(_||"")}catch{return _||""}},"decode");return{weapon:h(g[0]),action:h(g[1])}}s(o,"decodeCombined");function r(f){return i(f).startsWith("combined:")}s(r,"isCombined");function c(f){return n.has(i(f))}s(c,"isSupport");function l(f){let g=u.state.initData_abilityDetailMap,h=g instanceof Map?g.get(f):g?.[f];return String(h?.name||"").trim()}s(l,"clientAbilityName");function d(f,g){return g?l(f)||(f==="/abilities/natures_veil"?"Nature's Veil":"")||f.split("/").pop().replace(/_/g," ").replace(/\b\w/g,h=>h.toUpperCase()):u.data.ZHOthersDic?.[f]||l(f)||f.split("/").pop().replace(/_/g," ").replace(/\b\w/g,h=>h.toUpperCase())}s(d,"abilityLabel");function m(f,g=""){let h=i(f);if(h.startsWith("combined:")){let{weapon:_,action:y}=o(h);return c(y)?i(_):i(y)}if(c(h)){let _=String(qe.getWeapon(g)||"");if(_.includes("blazing_trident"))return _}return h}s(m,"canonical");function p(f){let g=i(f),h=Q.getLanguage()==="en";if(g.startsWith("/abilities/"))return d(g,h);if(t[g])return t[g][h?1:0];if(g.startsWith("dot:")){let y=g.slice(4),w=y.startsWith("/abilities/")?d(y,h):t[y]?.[h?1:0]||y.split("/").pop().replace(/_/g," ").replace(/\b\w/g,k=>k.toUpperCase());return h?"Damage Over Time ("+w+")":"持续伤害("+w+")"}if(g.startsWith("combined:")){let{weapon:y,action:w}=o(g),k=p(y);return p(w)+"("+(h?"includes ":"含")+(h?k:k.startsWith("武器特效:")?k.slice(5)+"特效":k)+")"}if(g.startsWith("/items/")){let y=u.state.initData_itemDetailMap,w=y instanceof Map?y.get(g):y?.[g],k=String(w?.name||"").trim()||a[g]?.[1]||g.split("/").pop().replace(/_/g," ").replace(/\b\w/g,x=>x.toUpperCase()),C=u.data.ZHItemNames?.[g]||a[g]?.[0]||k;return h?k+" Effect":"武器特效:"+C}return g.split("/").pop().replace(/_/g," ").replace(/\b\w/g,y=>y.toUpperCase())||t.unknown[h?1:0]}s(p,"label");function b(f,g=""){let h=i(f);if(h.startsWith("dot:")){let _=h.slice(4);return _.startsWith("/abilities/")?dt.ability(_):e()}if(h.startsWith("combined:")){let{action:_}=o(h);return _.startsWith("/abilities/")?dt.ability(_):e()}if(h.startsWith("/abilities/"))return dt.ability(h);if(h.startsWith("/items/")){let _=qe.classFromWeapon(h),y=qe.definitions[_];if(y&&y.icon)return y.icon}return h.startsWith("weapon:")&&qe.get(g).icon||e()}return s(b,"icon"),{normalize:i,canonical:m,isCombined:r,isSupport:c,label:p,icon:b}})(),wn=(()=>{function e(o,r,c){return"taken:"+[o||"",r||"",pt.normalize(c)].map(encodeURIComponent).join("|")}s(e,"encode");function t(o){let r=String(o||"");if(!r.startsWith("taken:"))return{monsterName:"",monsterHrid:"",ability:"unknown"};let c=r.slice(6).split("|").map(l=>{try{return decodeURIComponent(l)}catch{return l}});return{monsterName:c[0]||"",monsterHrid:c[1]||"",ability:c[2]||"unknown"}}s(t,"decode");function a(o){if(Q.getLanguage()!=="en"){let c=u.data.ZHOthersDic?.[o.monsterHrid];if(c)return c}if(o.monsterName)return o.monsterName;let r=String(o.monsterHrid||"").split("/").pop().replace(/_/g," ");return r?r.replace(/\b\w/g,c=>c.toUpperCase()):Q.getLanguage()==="en"?"Unknown Monster":"未知怪物"}s(a,"monsterLabel");function n(o){let r=t(o);return a(r)+" · "+pt.label(r.ability)}s(n,"label");function i(o){return pt.icon(t(o).ability)}return s(i,"icon"),{encode:e,decode:t,label:n,icon:i}})();var me=(()=>{let e=performance.now(),t=0,a=0,n=null,i={},o=[],r=Date.now(),c="开始战斗",l={teamDamage:0,damage:{},sources:{},healing:{},taken:{},takenSources:{},kills:{}},d=null,m=new Map,p=new Map,b=new Map,f=new Map,g=new Map,h=new Map,_=150,y=2e3,w=new Array(_).fill(0),k=new Array(_).fill(!1),C=0,x=performance.now(),T=!1,A=1900,I=[0],q=[!1],B=performance.now(),j=s(D=>Object.fromEntries(D),"mapObject"),V=s((D,re)=>{D.clear(),Object.entries(re||{}).forEach(([Ee,we])=>D.set(Ee,Number(we)||0))},"restoreMap"),O=s(D=>Object.fromEntries(Array.from(D,([re,Ee])=>[re,Object.fromEntries(Ee)])),"nestedMapObject"),M=s((D,re)=>{D.clear(),Object.entries(re||{}).forEach(([Ee,we])=>{let Re=new Map;Object.entries(we||{}).forEach(([Ue,Ge])=>Re.set(Ue,Number(Ge)||0)),D.set(Ee,Re)})},"restoreNestedMap"),L=s((D,re={})=>Object.fromEntries(Array.from(D,([Ee,we])=>{let Re=re[Ee]||{},Ue=Object.fromEntries(Array.from(we,([Ge,H])=>[Ge,H-(Number(Re[Ge])||0)]).filter(([,Ge])=>Ge!==0));return[Ee,Ue]}).filter(([,Ee])=>Object.keys(Ee).length)),"nestedDelta"),F=s((D,re)=>Object.fromEntries(Array.from(D,([Ee,we])=>[Ee,we-(re[Ee]||0)]).filter(([,Ee])=>Ee!==0)),"mapDelta");function R(){return n!==null?n:t+(performance.now()-e)/1e3}s(R,"elapsed");function te(D=Date.now()){if(r===null)return null;let re=Math.max(0,D-r);return{startedAt:d&&d.startedAt||new Date(r).toISOString(),endedAt:new Date(D).toISOString(),reason:c,durationMs:(d&&d.durationMs||0)+re,teamDamage:a-l.teamDamage,players:{damage:F(m,l.damage),sources:L(p,l.sources),healing:F(b,l.healing),taken:F(g,l.taken),takenSources:L(h,l.takenSources),kills:F(f,l.kills)}}}s(te,"currentFragment");function X(D){r=Date.now(),c=D||"断线续传",l={teamDamage:a,damage:j(m),sources:O(p),healing:j(b),taken:j(g),takenSources:O(h),kills:j(f)},d=null}s(X,"beginFragment");function W(D){let re=te();re&&(D&&(re.endReason=D),o.push(re)),r=null,l=null,d=null}s(W,"closeFragment");function K(D){for(;D-x>=y;)C=(C+1)%_,w[C]=0,k[C]=T,x+=y}s(K,"tickBuckets");function le(D){for(;D-B>=y;)I.length<A&&(I.push(0),q.push(T)),B+=y}return s(le,"tickFullBuckets"),{reset(D={}){e=performance.now(),t=0,a=0,n=null,i={...D},m.clear(),p.clear(),b.clear(),f.clear(),g.clear(),h.clear(),w.fill(0),k.fill(!1),C=0,x=performance.now(),T=!1,I.length=0,q.length=0,I.push(0),q.push(!1),B=performance.now(),o=[],r=Date.now(),c="开始战斗",l={teamDamage:0,damage:{},sources:{},healing:{},taken:{},takenSources:{},kills:{}},d=null},freeze(D="战斗结束"){n===null&&(n=R(),W(D))},unfreeze(D="断线续传"){n!==null&&(t=n,e=performance.now(),n=null,X(D))},pause(D="连接中断"){this.freeze(D)},resume(D="断线续传"){this.unfreeze(D)},resumeTrialTier(D="进入下一层"){if(n===null)return;t=n,e=performance.now(),n=null;let re=o.length?o.pop():null;if(!re){X(D);return}let Ee=re.players||{},we=s((Ge,H)=>Object.fromEntries(Array.from(Ge,([ae,ue])=>[ae,ue-(Number(H&&H[ae])||0)])),"baseFrom"),Re=O(p);Object.entries(Ee.sources||{}).forEach(([Ge,H])=>Object.entries(H||{}).forEach(([ae,ue])=>{Re[Ge]&&(Re[Ge][ae]=(Number(Re[Ge][ae])||0)-(Number(ue)||0))}));let Ue=O(h);Object.entries(Ee.takenSources||{}).forEach(([Ge,H])=>Object.entries(H||{}).forEach(([ae,ue])=>{Ue[Ge]&&(Ue[Ge][ae]=(Number(Ue[Ge][ae])||0)-(Number(ue)||0))})),r=Date.now(),c=re.reason||"开始战斗",l={teamDamage:a-(Number(re.teamDamage)||0),damage:we(m,Ee.damage),sources:Re,healing:we(b,Ee.healing),taken:we(g,Ee.taken),takenSources:Ue,kills:we(f,Ee.kills)},d={startedAt:re.startedAt,durationMs:Number(re.durationMs)||0}},splitFragment(D="进入下一关"){r!==null&&(W(D),X(D))},isFrozen(){return n!==null},setMeta(D){i={...i,...D}},getMeta(){return{...i}},serialize(){let D=te();return{schemaVersion:2,meta:{...i},savedAt:new Date().toISOString(),durationMs:Math.round(R()*1e3),teamDamage:a,players:{damage:j(m),sources:O(p),healing:j(b),taken:j(g),takenSources:O(h),kills:j(f)},classes:Object.fromEntries(this.getAllPlayerNames().map(re=>[re,qe.classFor(re)])),fragments:D?[...o,D]:[...o],isBoss:T,frozen:n!==null,graph:{damage:[...I],boss:[...q]}}},restore(D){if(!D||D.schemaVersion!==2)throw new Error(Q.getLanguage()==="en"?"Unsupported combat cache format":"不支持的战斗缓存格式");for(i={...D.meta||{}},a=Number(D.teamDamage)||0,t=(Number(D.durationMs)||0)/1e3,e=performance.now(),n=t,V(m,D.players&&D.players.damage),V(b,D.players&&D.players.healing),M(p,D.players&&D.players.sources),V(g,D.players&&D.players.taken),M(h,D.players&&D.players.takenSources),V(f,D.players&&D.players.kills),qe.applyClasses(D.classes),o=Array.isArray(D.fragments)?D.fragments:[],r=null,l=null,d=null,T=!!D.isBoss,I.length=0,q.length=0,(D.graph&&D.graph.damage||[0]).slice(-A).forEach(we=>I.push(Number(we)||0)),(D.graph&&D.graph.boss||[!1]).slice(-A).forEach(we=>q.push(!!we)),I.length||I.push(0);q.length<I.length;)q.push(!1);w.fill(0),k.fill(!1);let re=I.slice(-_),Ee=q.slice(-_);re.forEach((we,Re)=>{w[Re]=we,k[Re]=!!Ee[Re]}),C=_-1,x=B=performance.now()},getFragments(){let D=te();return D?[...o,D]:[...o]},setBoss(D){T=D,k[C]=D,q.length&&(q[q.length-1]=D)},addTeamDamage(D,re){a+=D,K(re),w[C]+=D,k[C]=T,le(re),I.length&&(I[I.length-1]+=D)},addPlayerDamage(D,re,Ee="unknown"){m.set(D,(m.get(D)||0)+re);let we=pt.normalize(Ee),Re=p.get(D)||new Map;Re.set(we,(Re.get(we)||0)+re),p.set(D,Re)},addPlayerHealing(D,re){b.set(D,(b.get(D)||0)+re)},addPlayerTaken(D,re,Ee="unknown"){g.set(D,(g.get(D)||0)+re);let we=String(Ee||"unknown"),Re=h.get(D)||new Map;Re.set(we,(Re.get(we)||0)+re),h.set(D,Re)},addPlayerKill(D){f.set(D,(f.get(D)||0)+1)},renamePlayer(D,re){if(!D||!re||D===re)return;let Ee=s(we=>{we.has(D)&&(we.set(re,(we.get(re)||0)+we.get(D)),we.delete(D))},"merge");if(Ee(m),Ee(b),Ee(f),Ee(g),p.has(D)){let we=p.get(re)||new Map;p.get(D).forEach((Re,Ue)=>we.set(Ue,(we.get(Ue)||0)+Re)),p.set(re,we),p.delete(D)}if(h.has(D)){let we=h.get(re)||new Map;h.get(D).forEach((Re,Ue)=>we.set(Ue,(we.get(Ue)||0)+Re)),h.set(re,we),h.delete(D)}},getTeamDps(){let D=R();return D<1?0:a/D},getTeamDamage(){return a},getTeamKills(){let D=0;return f.forEach(re=>D+=re),D},getPlayerDps(D){let re=R();return re<1?0:(m.get(D)||0)/re},getPlayerDamage(D){return m.get(D)||0},getPlayerDamageSources(D){return Object.fromEntries(p.get(D)||[])},getPlayerHps(D){let re=R();return re<1?0:(b.get(D)||0)/re},getPlayerHealing(D){return b.get(D)||0},getPlayerTaken(D){return g.get(D)||0},getPlayerTakenSources(D){return Object.fromEntries(h.get(D)||[])},getPlayerTakenPs(D){let re=R();return re<1?0:(g.get(D)||0)/re},getPlayerKills(D){return f.get(D)||0},getElapsedSeconds(){return R()},getAllPlayerNames(){return Array.from(new Set([...m.keys(),...f.keys(),...b.keys(),...g.keys()]))},advanceBuckets(){K(performance.now()),le(performance.now())},getGraphPoints(){let D=[];for(let re=1;re<=_;re++){let Ee=(C+re)%_;D.push({dps:w[Ee]/(y/1e3),isBoss:k[Ee]})}return D},getFullGraphPoints(){let D=[];for(let re=0;re<I.length;re++)D.push({dps:I[re]/(y/1e3),isBoss:q[re]});return D}}})(),Zt=(()=>{let e=0,t=0,a=0,n=0,i=0,o=0,r=0,c=0,l=5,d=0,m=s((p,b)=>p<l?(console.warn("[KikiMeter] "+b),p+1):p,"w");return{recordNominal(){e++},recordColdPlayer(){t++},recordColdMonsterAmbig(p){a++,n+=p},recordCollision(p){i++},recordCollisionSingleHit(p,b){o++},recordOrphan(p){r++,c+=p,d=m(d,"未归属伤害 "+p+",序号 "+r)},summary(){return{nominal:e,coldPlayer:t,coldMonsterAmbig:a,coldMonsterAmbigDmg:n,collision:i,collisionSingleHit:o,orphan:r,orphanDmg:c}}}})(),vn=(()=>{let e=!1,t=[],a={};return{start(){e=!0,t=[],a={},console.info("[KikiMeter] 已开始抓取战斗消息。")},stop(){e=!1,console.info("[KikiMeter] 已停止抓取,共 "+t.length+" 条消息。")},record(n,i){e&&(a[n]=(a[n]||0)+1,t.push({t:Date.now(),payload:i}))},download(n){let i=new Blob([JSON.stringify({typeCounts:a,combatLog:t})],{type:"application/json"}),o=URL.createObjectURL(i),r=Object.assign(document.createElement("a"),{href:o,download:n||"mwi-capture-"+Date.now()+".json"});document.body.appendChild(r),r.click(),r.remove(),URL.revokeObjectURL(o)},size(){return t.length}}})();var Xe=(()=>{let e=new EventTarget,t=[],a=[],n=[],i=[],o=[],r=[],c={},l={},d=[],m=[],p=[],b=[],f={},g={},h=[],_={},y={},w={},k=[],C=new Map,x=!1,T=null,A=null,I=null,q=null;function B(){return q===null?performance.now():q}s(B,"clockNow");let j=new Map,V=new Set,O={},M={},L={},F={},R={},te={},X={},W={},K={},le={},D={},re={},Ee={},we={},Re={},Ue={},Ge={},H={},ae={},ue=null,_e="",ke=!1,ee=!1,de=0,De=!1,tt=!1,Rt="",Kr=new Set(["milking","foraging","woodcutting","cheesesmithing","crafting","tailoring","cooking","brewing","alchemy","enhancing","combat","stamina","intelligence","attack","defense","melee","ranged","magic","stealth","power","marketplace","tasks","task","labyrinth","shop","loot","abilities","equipment","inventory","house","loadouts","statistics","buildings","overview","members","trials","application","guild","overview","dispatch","findparty","myparty","combatzones"]);function ma(v){let S=v.toLowerCase();return!!(Kr.has(S)||/^lv\.?\d+$/i.test(v)||/^\d+%?$/.test(v)||/^[\d.,]+[km]?$/i.test(v))}s(ma,"looksLikeNoise");function xn(v){let S=['[class*="MiniUnit_name"]','[class*="CombatUnit_name"]',".GuildBattle__members .Character__name",'[class*="GuildBattle"] [class*="name"]','[class*="guildBattle"] [class*="name"]','[class*="GuildMember"] [class*="name"]','[class*="TrialBattle"] [class*="name"]'],E=[];for(let U of S){try{E=[...document.querySelectorAll(U)]}catch{E=[]}if(E.length>0)break}let $=E.map(U=>U.textContent.trim()).filter(U=>U&&!ma(U)&&!/^trial\s/i.test(U)),P=[...C.values()][0],Z=P&&$.includes(P),G=!P||!Z?1:0,z=new Map;G===1&&P&&z.set("0",P),$.slice(0,v?v-G:$.length).forEach((U,ie)=>{z.set(String(ie+G),U)});for(let[U,ie]of z){if(V.has(U))continue;let Fe=fa(U);j.set(U,ie),V.add(U),Fe!==ie&&e.dispatchEvent(new CustomEvent("guildSlotRenamed",{detail:{oldName:Fe,newName:ie}}))}j.size===0&&Q.getDebugMode()&&console.warn("[KikiMeter][Guild] 玩家姓名解析失败,页面选择器可能已经变化。请在试炼中运行 window.__MWI_DPS.scanGuildNames() 查看诊断。")}s(xn,"resolveGuildNames");function Kn(v){return!!(v.closest("#kikimeter-panel")||v.closest('[data-kikimeter="true"]'))}s(Kn,"isOwnUI");function Es(){let v=[...C.values()][0];if(!v)return console.warn("[KikiMeter] 尚不知道本地玩家姓名。请在公会试炼进行中再次运行此命令。"),[];console.log(`[KikiMeter] 正在精确搜索文本 "${v}" (页面 DOM)…`);let S=[];return document.querySelectorAll("*").forEach(E=>{Kn(E)||E.children.length<=1&&E.textContent.trim()===v&&S.push(E)}),console.log(`[KikiMeter] ${S.length} 个完全匹配项。`),console.log("====================================================="),S.forEach((E,$)=>{console.log(`--- 匹配项 #${$} ---`);let P=E,Z=0;for(;P&&Z<6;){let G=(P.className||"")+""||"(无类名)",z=P.parentElement?[...P.parentElement.children].slice(0,8).map(U=>U.textContent.trim().slice(0,16)):[];console.log(` 层级 ${Z} | <${P.tagName}> 类名="${G}" | 子元素=${P.children.length} | 同级元素=${P.parentElement?P.parentElement.children.length:0} | 同级示例: [${z.join(" ¦ ")}]`),P=P.parentElement,Z++}console.log(" ---")}),console.log("====================================================="),S}s(Es,"scanGuildNamesByLocalName");function Xr(){let v=de||35,S=Math.max(2,v-5),E=v+10,$=[];return document.querySelectorAll("div, ul, section").forEach(P=>{if(Kn(P))return;let Z=P.children.length;if(Z>=S&&Z<=E){let G=[...P.children].slice(0,6).map(z=>z.textContent.trim().slice(0,20));G.some(z=>z.length>0)&&$.push({selector:(P.className||P.tagName)+"",tag:P.tagName,childCount:Z,sample:G})}}),console.log(`[KikiMeter] 预计玩家数:约 ${v} 名;${$.length} 个候选容器:`),console.log("====================================================="),$.forEach((P,Z)=>{console.log(`#${Z} | 类名="${P.selector}" | 子元素=${P.childCount} | 示例: [${P.sample.join(" ¦ ")}]`)}),console.log("====================================================="),$.length===0&&console.warn("[KikiMeter] 没有找到子元素数量完全匹配的容器。请运行 window.__MWI_DPS.scanGuildNamesLoose() 执行宽松搜索。"),$}s(Xr,"scanGuildNames");function kn(){let v=[];document.querySelectorAll("div, ul, section").forEach(E=>{if(Kn(E))return;let $=E.children.length;if($>=10&&$<=200){let P=0,Z=[];E.querySelectorAll(":scope > * ").forEach(G=>{let z=G.textContent.trim();z.length>=2&&z.length<=20&&!ma(z)&&(P++,Z.push(z.slice(0,20)))}),P>=10&&v.push({selector:(E.className||E.tagName)+"",tag:E.tagName,childCount:$,nameLikeCount:P,sample:Z.slice(0,8)})}}),v.sort((E,$)=>$.nameLikeCount-E.nameLikeCount);let S=v.slice(0,15);return console.log(`[KikiMeter] 宽松搜索:${v.length} 个候选容器,显示前 15 个:`),console.log("====================================================="),S.forEach((E,$)=>{console.log(`#${$} | 类名="${E.selector}" | 子元素=${E.childCount} | 疑似姓名=${E.nameLikeCount} | 示例: [${E.sample.join(" ¦ ")}]`)}),console.log("====================================================="),v}s(kn,"scanGuildNamesLoose");function Is(){let v=[];return document.querySelectorAll("[title], [aria-label], img[alt]").forEach(S=>{let E=S.getAttribute("title")||S.getAttribute("aria-label")||S.getAttribute("alt");E&&E.length>=2&&E.length<=20&&!ma(E)&&v.push({tag:S.tagName,attr:S.getAttribute("title")?"title":S.getAttribute("aria-label")?"aria-label":"alt",value:E,class:(S.className||"")+""})}),console.log(`[KikiMeter] ${v.length} 个候选属性:`),console.table(v.slice(0,60)),v}s(Is,"scanGuildNamesAttrs");function fa(v){return j.get(v)||(v==="0"?[...C.values()][0]||"Slot0":"Joueur"+(+v+1))}s(fa,"guildSlotLabel");function N(v={},S="guild_fallback"){let E=yn.dayStamp(new Date),$=v.combatStartTime||v.guildBattleId||v.battleId||v.combatId||"guild-fallback-"+E;return{combatKey:String($),stageId:String($),characterId:A||"unknown",classes:{},fallback:!0,source:S}}s(N,"fallbackGuildDetail");function ce(v){let S=Number(v);return v!=null&&Number.isFinite(S)?S:void 0}s(ce,"finiteCounter");function oe(v={}){return ce(v.attackAttemptCounter!==void 0?v.attackAttemptCounter:v.atkCounter)}s(oe,"playerAttackCounter");function ne(v={}){return ce(v.damageSplatCounter!==void 0?v.damageSplatCounter:v.dmgCounter)}s(ne,"monsterDamageCounter");let Se=new Set(["/buff_types/physical_thorns","/buff_types/elemental_thorns","/buff_types/retaliation"]),pe=new Map([["/abilities/spike_shell",3e4],["/abilities/retribution",3e4]]),xe=new Map([["/abilities/firestorm",{direct:!0,dotDuration:6e3,dotInterval:3e3}],["/abilities/maim",{direct:!0,dotDuration:9e3,dotInterval:3e3}]]),Pe=3e3,Ce=500,Le=2e3,$e=3e4,Ne=new Map,Me=new Map,He=new Set;function Te(v){let S=String(v||"").toLowerCase();return S.includes("physical_thorns")?"/buff_types/physical_thorns":S.includes("elemental_thorns")?"/buff_types/elemental_thorns":S.includes("retaliation")?"/buff_types/retaliation":""}s(Te,"normalizedReflectType");function Ze(v,S=0){return S>8||v===null||v===void 0?!1:typeof v=="string"?!!Te(v):typeof v!="object"?!1:Object.entries(v).some(([E,$])=>!!Te(E)||Ze($,S+1))}s(Ze,"containsReflection");function Ye(v){let S=Number(v);return!Number.isFinite(S)||S<=0?0:S>864e5?S/1e6:S<1e3?S*1e3:S}s(Ye,"durationToMs");function Bt(v){let S=[],E=s(($,P=0)=>{P>8||!$||typeof $!="object"||Object.entries($).forEach(([Z,G])=>{if(/duration/i.test(Z)&&typeof G=="number"){let z=Ye(G);z>=100&&z<=36e5&&S.push(z)}G&&typeof G=="object"&&E(G,P+1)})},"walk");return E(v),S.length?Math.max(...S):3e4}s(Bt,"reflectionDuration");function zt(v={}){let S=v.abilityEffects||v.effects||v.abilityDetail&&v.abilityDetail.abilityEffects||[];return Array.isArray(S)?S:[]}s(zt,"abilityEffects");function ea(v,S=0,E=[]){return S>8||!v||typeof v!="object"||(Te(v.typeHrid||v.uniqueHrid)&&E.push(v),Object.values(v).forEach($=>{$&&typeof $=="object"&&ea($,S+1,E)})),E}s(ea,"reflectionBuffs");function Li(v,S={}){let E=zt(S),$=E.filter(U=>String(U&&U.effectType||"").includes("/ability_effect_types/damage")),P=$.reduce((U,ie)=>!(Number(ie.damageOverTimeRatio)>0)||!(Number(ie.damageOverTimeDuration)>0)?U:Math.max(U,Ye(ie.damageOverTimeDuration)),0),Z=$.reduce((U,ie)=>{if(!(Number(ie.damageOverTimeRatio)>0))return U;let Fe=ie.damageOverTimeInterval??ie.damageOverTimeTickInterval??ie.tickInterval,at=Ye(Fe);return at>0?U>0?Math.min(U,at):at:U},0),G=[...new Set($.map(U=>String(U.targetType||"")).filter(Boolean))];(E.length||$.length||P)&&xe.set(v,{direct:$.length>0,dotDuration:P,dotInterval:P?Z||Pe:0,targetTypes:G});let z=ea(S);z.length&&(pe.set(v,Bt(S)),z.forEach(U=>{let ie=String(U.uniqueHrid||"");ie&&Ne.set(ie,v);let Fe=Te(U.typeHrid||U.uniqueHrid);Fe&&(Me.has(Fe)||Me.set(Fe,new Set),Me.get(Fe).add(v))}))}s(Li,"cacheAbilityRule");function Xn(v={}){let S=[v,v.data,v.initGameData,v.init_game_data,v.initClientData,v.init_client_data,v.clientData,v.client_data].filter(E=>E&&typeof E=="object");for(let E of S){let $=E.abilityDetailMap||E.gameAbilityDetailMap;if($&&typeof $=="object"){let Z=$ instanceof Map?[...$.entries()]:Object.entries($);for(let[G,z]of Z){let U=String(z&&z.hrid||z&&z.abilityHrid||G);U&&Li(U,z||{})}}let P=E.itemDetailMap||E.gameItemDetailMap;if(P&&typeof P=="object"){let Z=P instanceof Map?[...P.entries()]:Object.entries(P);for(let[G,z]of Z){if(!Ze(z))continue;let U=String(z&&z.hrid||z&&z.itemHrid||G);U&&He.add(U)}}}}s(Xn,"cacheReflectionDefinitions");function Jr(v,S=0,E=new Set){return S>7||v===null||v===void 0?E:typeof v=="string"?(v.startsWith("/abilities/")&&E.add(v),E):(typeof v!="object"||Object.entries(v).forEach(([$,P])=>{typeof P=="string"&&P.startsWith("/abilities/")?E.add(P):P&&typeof P=="object"&&Jr(P,S+1,E)}),E)}s(Jr,"abilityHridsFrom");function $i(v,S){return v[S]||(v[S]=new Set)}s($i,"ensureSet");function ta(v,S,E,$){Jr($).forEach(P=>{let Z=xe.get(P);Z&&Z.dotDuration>0&&$i(v,E).add(P),S&&pe.has(P)&&$i(S,E).add(P)})}s(ta,"rememberAbilityKnowledge");function Ns(v){let S=String(v||"");if(S==="auto")return"direct";if(pt.isSupport(S))return"support";let E=xe.get(S);return E?E.direct?"direct":"support":"unknown"}s(Ns,"actionDamageKind");function Yr(v,S,E,$,P,Z=null){let G=String($||""),z=xe.get(G);if(!z||!(z.dotDuration>0))return;$i(S,E).add(G);let U=v[E]||(v[E]=new Map);U.set(G,Math.max(U.get(G)||0,P+z.dotDuration)),Z&&Tp(Z,E,G,P)}s(Yr,"activateDot");function Qr(v,S){for(let E=v.length-1;E>=0;E-=1)v[E].expiresAt+$e<S&&v.splice(E,1)}s(Qr,"pruneDotCasts");function Mp(v,S){let E=S.dotInterval||Pe,$=[];for(let P=E;P<=S.dotDuration;P+=E)$.push({dueAt:v+P,consumed:!1});return $}s(Mp,"dotTickSchedule");function Tp(v,S,E,$){let P=xe.get(E);!P||!(P.dotDuration>0)||(Qr(v,$),v.push({key:String(S),abilityHrid:E,startedAt:$,landedAt:null,expiresAt:$+P.dotDuration,targets:new Map}))}s(Tp,"scheduleDotCast");function Ep(v,S,E,$,P){if(!Array.isArray($)||!$.length)return;Qr(v,P);let Z=v.slice().reverse().find(z=>z.key===String(S)&&z.abilityHrid===E&&P-z.startedAt>=0&&P-z.startedAt<=Le);if(!Z)return;if(Z.landedAt===null){Z.landedAt=P;let z=xe.get(E);Z.expiresAt=P+(z?.dotDuration||0)}let G=xe.get(E);if(G)for(let z of $){let U=String(z.key);Z.targets.has(U)||Z.targets.set(U,Mp(Z.landedAt,G))}}s(Ep,"bindDotTargets");function Ip(v,S,E,{key:$=null,abilityHrid:P=""}={}){Qr(v,E);let Z=[];for(let G of v)if(!($!==null&&G.key!==String($))&&!(P&&G.abilityHrid!==P))for(let z of G.targets.get(String(S))||[]){if(z.consumed)continue;let U=E-z.dueAt;U>=0&&U<=Ce&&Z.push({cast:G,tick:z,distance:U})}return Z.sort((G,z)=>G.distance-z.distance||G.tick.dueAt-z.tick.dueAt||G.cast.startedAt-z.cast.startedAt),Z.length?Z.length>1&&Math.abs(Z[0].distance-Z[1].distance)<1?{ambiguous:!0}:Z[0]:null}s(Ip,"scheduledDotCandidate");function tc(v,S,E,{key:$=null,abilityHrid:P=""}={}){let Z=[],G=[],z=!1;for(let U of S||[]){let ie=Ip(v,U.key,E,{key:$,abilityHrid:P});if(!ie||ie.ambiguous){z||=!!ie?.ambiguous,G.push(U);continue}ie.tick.consumed=!0,Z.push({hit:U,cast:ie.cast})}return{matched:Z,unmatched:G,ambiguous:z}}s(tc,"consumeScheduledDotHits");function Np(v,S,E){Qr(v,E);let $=new Set((S||[]).map(ie=>String(ie.key))),P=v.some(ie=>[...$].some(Fe=>(ie.targets.get(Fe)||[]).some(at=>!at.consumed))),{matched:Z,unmatched:G,ambiguous:z}=tc(v,S,E),U=new Map;for(let{hit:ie,cast:Fe}of Z){let at=`${Fe.key}\0${Fe.abilityHrid}`,Ct=U.get(at)||{key:Fe.key,abilityHrid:Fe.abilityHrid,amount:0};Ct.amount+=Number(ie.amount)||0,U.set(at,Ct)}return{groups:[...U.values()],unmatchedAmount:G.reduce((ie,Fe)=>ie+(Number(Fe.amount)||0),0),ambiguous:z,hasPendingTargetSchedule:P}}s(Np,"scheduledDotDamage");function Hp(v){let S=String(v||"");return S.startsWith("dot:/abilities/")?S.slice(4):xe.get(S)?.dotDuration>0?S:""}s(Hp,"dotAbilityFromSource");function Dp(v,S,E,$,P){let Z=String(E||""),G=Hp(Z);if(G&&!Z.startsWith("dot:")){Ep(v,S,G,$,P);return}(Z==="dot"||Z.startsWith("dot:"))&&tc(v,$,P,{key:S,abilityHrid:G})}s(Dp,"recordDotAttribution");function ac(v,S,E){return v.filter($=>[...(S[$]||new Map).values()].some(P=>P>E))}s(ac,"activeDotCandidates");function Pp(v,S,E){let $=ac(v,S,E);return $.length===1?$[0]:null}s(Pp,"uniqueActiveDotCandidate");function Lp(v,S,E){let $=[...(v[S]||new Map).entries()].filter(([,P])=>P>E).map(([P])=>P);return $.length===1?`dot:${$[0]}`:"dot"}s(Lp,"activeDotSourceFor");function nc(v,S,E,$){let P=[...v[E]||[]],Z=[...(S[E]||new Map).entries()].filter(([,G])=>G>$).map(([G])=>G);return P.length===1?P:Z.length===1||Z.length?Z:P}s(nc,"dotAbilitiesFor");function Oi(v,S,E,$){let P=nc(v,S,E,$);return P.length===1?"dot:"+P[0]:"dot"}s(Oi,"dotSourceFor");function eo(v,S,E,$){let P=v.filter(Z=>nc(S,E,Z,$).length>0);return P.length===1?P[0]:null}s(eo,"uniqueDotCandidate");let $p=["blazing_trident","chaotic_flail","sundering_crossbow"];function to(v){let S=String(qe.getWeapon(v)||"");return $p.some(E=>S.includes(E))?S:""}s(to,"directWeaponEffectFor");function Op(v,S){return"combined:"+encodeURIComponent(v)+"|"+encodeURIComponent(pt.normalize(S))}s(Op,"combinedWeaponSource");function ic(v,S,E){let $=to(v);if(!$)return S;if(pt.normalize(S)===pt.normalize($))return $;let P=Ns(S),Z=xe.get(String(S||""));if(P==="support")return $.includes("blazing_trident")?$:S;if($.includes("chaotic_flail")&&S==="auto"||$.includes("sundering_crossbow")&&S==="auto")return S;let G=S==="auto"||!Z||!(Array.isArray(Z.targetTypes)&&Z.targetTypes.some(z=>/allEnemies|all_enemies/i.test(z)));return $.includes("blazing_trident")&&G&&E>1?Op($,S):S}s(ic,"sourceWithWeaponEffect");function rc(v,S,E,$){let P=to(v);if(S!=="auto"||!P.includes("sundering_crossbow")||!Array.isArray(E)||E.length<2)return null;let Z=E.find(z=>String(z.key)===String($));if(!Z)return null;let G=E.filter(z=>String(z.key)!==String($)).reduce((z,U)=>z+(Number(U.amount)||0),0);return G>0?{base:Number(Z.amount)||0,effect:G,weapon:P}:null}s(rc,"splitCrossbowPierce");function qp(v,S,E){let $=v[E]||"怪物"+(+E+1),P=S[E]||"";return{name:Object.keys(v||{}).filter(G=>v[G]===$&&(S[G]||"")===P).length>1?$+" #"+(+E+1):$,hrid:P}}s(qp,"monsterIdentity");function Jn(v,S,E,$){let P=qp(v,S,E);return wn.encode(P.name,P.hrid,$)}s(Jn,"takenSource");function Ha(v={},S=""){return v.abilityHrid||(v.isAutoAtk||v.isAutoAttack?"auto":S)}s(Ha,"actionFromUpdate");function oc(v,S,E,$,P){let Z=pe.get(String($||""));Z&&(v[E]=Math.max(v[E]||0,P+Z),S[E]=String($))}s(oc,"activateReflection");function Rp(v,S,E){oc(K,le,v,S,E)}s(Rp,"activateGuildReflection");function ao(v,S){return Number(K[v])>S}s(ao,"isGuildReflecting");function Bp(v,S,E){oc(y,w,v,S,E)}s(Bp,"activatePlayerReflection");function sc(v,S){return Number(y[v])>S}s(sc,"isPlayerReflecting");function uc(v,S={}){ta(f,_,v,S);let E=Date.now(),$=B(),P=0,Z=!1;Object.values(S.combatBuffMap||{}).forEach(U=>{let ie=Te(U&&U.typeHrid||U&&U.uniqueHrid);if(!Se.has(ie))return;Z=!0;let Fe=Ye(U.duration),at=Date.parse(U.startTime||""),Ct=Number.isFinite(at)?at+Fe:E+Fe;P=Math.max(P,Fe===0?1/0:Ct-E);let ba=String(U&&U.uniqueHrid||""),wt=Ne.get(ba),st=[...Me.get(ie)||[]],J=[..._[v]||[]],he=ba.toLowerCase(),We=wt||(st.length===1?st[0]:"")||(J.length===1?J[0]:"")||(he.includes("spike_shell")?"/abilities/spike_shell":he.includes("retribution")?"/abilities/retribution":"");We&&(w[v]=We)});let G=S.combatDetails&&S.combatDetails.combatStats||{};if(!Z&&(Number(G.physicalThorns)||Number(G.elementalThorns)||Number(G.retaliation))?y[v]=1/0:P>0&&(y[v]=Math.max(y[v]||0,$+P)),!w[v]){let U=[..._[v]||[]];U.length===1&&(w[v]=U[0])}}s(uc,"learnPlayerReflectionState");function zp(v={}){let S=v.name||v.character&&v.character.name;if(S)for(let[E,$]of C)$===S&&uc(E,v)}s(zp,"learnPlayerReflectionUnit");function cc(v={}){let S=v.name||v.character&&v.character.name;if(!S)return;let E=[...j.entries()].filter(([,ie])=>ie===S).map(([ie])=>ie);if(!E.length)return;E.forEach(ie=>ta(D,Ee,ie,v));let $=Date.now(),P=B(),Z=0,G=!1;Object.values(v.combatBuffMap||{}).forEach(ie=>{let Fe=Te(ie&&ie.typeHrid||ie&&ie.uniqueHrid);if(!Se.has(Fe))return;G=!0;let at=Ye(ie.duration),Ct=Date.parse(ie.startTime||""),ba=Number.isFinite(Ct)?Ct+at:$+at;Z=Math.max(Z,at===0?1/0:ba-$);let wt=String(ie&&ie.uniqueHrid||""),st=Ne.get(wt),J=[...Me.get(Fe)||[]],he=wt.toLowerCase();E.forEach(We=>{let Oe=[...Ee[We]||[]],Ke=st||(J.length===1?J[0]:"")||(Oe.length===1?Oe[0]:"")||(he.includes("spike_shell")?"/abilities/spike_shell":he.includes("retribution")?"/abilities/retribution":"");Ke&&(le[We]=Ke)})});let z=v.combatDetails&&v.combatDetails.combatStats||{},U=!G&&(Number(z.physicalThorns)||Number(z.elementalThorns)||Number(z.retaliation));E.forEach(ie=>{if(U?K[ie]=1/0:Z>0&&(K[ie]=Math.max(K[ie]||0,P+Z)),!le[ie]){let Fe=[...Ee[ie]||[]];Fe.length===1&&(le[ie]=Fe[0])}})}s(cc,"learnGuildReflectionState");function Fp(v={}){let S=v.profile||v.data&&v.data.profile||v,E=S.sharableCharacter||S.character||S,$=E.name||S.name;if(!$)return;let P=S.wearableItemMap||E.wearableItemMap||{},Z=new Set,G=s((U,ie=0)=>{if(!(ie>5||U===null||U===void 0)){if(typeof U=="string"){U.startsWith("/items/")&&Z.add(U);return}typeof U=="object"&&Object.values(U).forEach(Fe=>G(Fe,ie+1))}},"walk");G(P);let z=[...Z].find(U=>He.has(U));z&&[...j.entries()].filter(([,U])=>U===$).forEach(([U])=>{K[U]=1/0,le[U]=z})}s(Fp,"learnProfileReflectionEquipment");function jp(v={}){let S=String(v.combatStartTime||v.guildBattleId||v.battleId||v.combatId||"guild-"+yn.dayStamp(new Date)),E=v.tier!==void 0?String(v.tier):"unknown";return{base:S,signature:S+"|tier:"+E,tier:E}}s(jp,"guildStageSignature");function lc(v){let S=v.players||[];if(S.length===0)return;let E=jp(v),$=ke;ke=!0;let P=$&&_e&&E.signature!==_e;P&&(tt=!1,De=!1),_e=E.signature,ue=E.tier,I=E.base;let Z=qe.registerPlayers(S);de=Math.max(de,S.length),F={},R={},te={},X={},W={},K={},le={},D={},re={},Ee={},O={},M={},L={},we={},Re={},Ue={},Ge={},H={},ae={},S.forEach((G,z)=>{let U=String(z),ie=G.name||G.character&&G.character.name;if(G.currentHitpoints!==void 0&&(F[U]=Number(G.currentHitpoints)||0),G.currentManapoints!==void 0&&(R[U]=Number(G.currentManapoints)||0),te[U]=oe(G)??0,X[U]=ne(G)??0,W[U]=Ha({abilityHrid:G.preparingAbilityHrid,isAutoAtk:G.isPreparingAutoAttack},""),ta(D,Ee,U,G),!ie)return;let Fe=!j.has(U),at=fa(U);j.set(U,ie),V.add(U),Fe&&at!==ie&&e.dispatchEvent(new CustomEvent("guildSlotRenamed",{detail:{oldName:at,newName:ie}}))}),(v.monsters||[]).forEach((G,z)=>{let U=String(z);O[U]=Number(G.currentHitpoints!==void 0?G.currentHitpoints:G.cHP)||0,M[U]=Number(G.maxHitpoints!==void 0?G.maxHitpoints:G.mHP)||0;let ie=ne(G);ie!==void 0&&(L[U]=ie),we[U]=oe(G)??0,Re[U]=Ha({abilityHrid:G.preparingAbilityHrid,isAutoAtk:G.isPreparingAutoAttack},""),Ue[U]=G.name||String(G.hrid||"").split("/").pop().replace(/_/g," ")||"怪物"+(z+1),Ge[U]=G.hrid||"",ta(H,null,U,G)}),S.forEach(cc),e.dispatchEvent(new CustomEvent("guildBattleDetected",{detail:{combatKey:I,stageId:E.signature,tier:E.tier,stageChanged:P,characterId:A,classes:Z}}))}s(lc,"processNewGuildBattle");function Wp(v){if(!v||!Array.isArray(v.players)||v.players.length===0)return!1;let S=v.players,E=Array.isArray(v.monsters)?v.monsters:[],$=[v.combatStartTime||"",v.battleId??"",v.battleWave??"",v.tier??"",S.length,E.length].join("|");return $===Rt&&ke?!1:(Rt=$,(!A||A==="unknown")&&S[0]&&S[0].character&&S[0].character.id&&(A=String(S[0].character.id)),lc(v),De=!0,tt=!1,!0)}s(Wp,"processGuildCombatSnapshot");function Vp(v){let S=[v,v&&v.data,v&&v.clientData,v&&v.client_data,v&&v.initCharacterData].filter(E=>E&&typeof E=="object");for(let E of S)if(E.guildCombatBattle&&typeof E.guildCombatBattle=="object")return E.guildCombatBattle;return null}s(Vp,"guildCombatSnapshotFromMessage");function Gp(v){if(!ke||tt)return;let S=v.guild&&v.guild.currentTrialsData;if(!S)return;let E;try{E=JSON.parse(S)}catch{return}let $=E&&E.combat;if(!$)return;$.status==="in_progress"&&(De=!0);let P=$.parties,Z=P&&Object.keys(P).length>0&&Object.values(P).every(z=>z&&z.done===!0),G=De&&$.status!=="in_progress";De&&(Z||G)&&(tt=!0,e.dispatchEvent(new CustomEvent("guildTrialEnded")))}s(Gp,"processGuildUpdated");function Zp(v){if(!ke)return;let S=v.mMap||{},E=v.pMap||{},$=Object.keys(E),P=B();for(let J of $)de=Math.max(de,+J+1);let Z=v.tier!==void 0?String(v.tier):ue;if(ue===null||Z!==null&&String(ue)!==String(Z)){ue=Z,_e=String(v.battleId||I||"guild")+"|tier:"+String(Z||"unknown"),F={},R={},te={},X={},W={},K={},le={},D={},re={},Ee={},O={},M={},L={},we={},Re={},Ue={},Ge={},H={},ae={};for(let J of $){let he=E[J],We=oe(he);F[J]=Number(he.cHP)||0,R[J]=Number(he.cMP)||0,We!==void 0&&(te[J]=We);let Oe=ne(he);Oe!==void 0&&(X[J]=Oe),W[J]=Ha(he,""),ta(D,Ee,J,he)}for(let J in S){let he=S[J],We=ne(he);O[J]=Number(he.cHP)||0,M[J]=Number(he.mHP)||0,We!==void 0&&(L[J]=We),we[J]=oe(he)??0,Re[J]=Ha(he,""),Ue[J]=he.name||String(he.hrid||"").split("/").pop().replace(/_/g," ")||"怪物"+(+J+1),Ge[J]=he.hrid||"",ta(H,null,J,he)}tt=!1,De=!0;return}let G=[],z={},U=new Set;for(let J of $){let he=E[J],We=oe(he),Oe=te[J];if(ta(D,Ee,J,he),he.abilityHrid&&qe.learnAbility(fa(J),he.abilityHrid),R[J]=Number(he.cMP)||0,We!==void 0){if(Oe!==void 0&&We>Oe){let ht=W[J]||(he.isAutoAtk||he.isAutoAttack?"auto":"unknown");G.push(J),z[J]=ht,Rp(J,ht,P),Yr(re,D,J,ht,P)}te[J]=We}let Ke=ne(he),nt=X[J];Ke!==void 0&&(nt!==void 0&&Ke>nt&&U.add(J),X[J]=Ke),W[J]=Ha(he,W[J])}let ie=[],Fe={};for(let J in S){let he=S[J],We=oe(he),Oe=we[J];if(ta(H,null,J,he),We!==void 0){if(Oe!==void 0&&We>Oe){let Ke=Re[J]||Ha(he,"unknown");ie.push(J),Fe[J]=Ke,Yr(ae,H,J,Ke,P)}we[J]=We}Re[J]=Ha(he,Re[J])}let at=wn.encode("未知怪物","","unknown");if(ie.length===1){let J=ie[0];at=Jn(Ue,Ge,J,Fe[J]||"unknown")}else if(ie.length===0){let J=Object.keys(S),he=eo(J,H,ae,P);he!==null?at=Jn(Ue,Ge,he,Oi(H,ae,he,P)):J.length===1&&(at=Jn(Ue,Ge,J[0],"unknown"))}for(let J of $){let he=E[J].cHP||0;if(F[J]!==void 0){let We=fa(J),Oe=F[J]-he;Oe>0?e.dispatchEvent(new CustomEvent("playerDamageTaken",{detail:{name:We,amount:Oe,source:at,battleType:"trial"}})):he>F[J]&&e.dispatchEvent(new CustomEvent("healing",{detail:{name:We,amount:he-F[J],battleType:"trial"}}))}F[J]=E[J].cHP||0}let Ct=Object.keys(O).sort((J,he)=>+J-+he).find(J=>Number(O[J])>0),ba=[],wt=0,st=0;for(let J in S){let he=S[J];if(O[J]===void 0||M[J]!==he.mHP){O[J]=he.cHP||0,M[J]=he.mHP;let ht=ne(he);ht!==void 0&&(L[J]=ht);continue}let We=O[J],Oe=L[J],Ke=ne(he),nt=We-(he.cHP||0);nt>0&&Ke!==void 0&&Oe!==void 0&&Ke>Oe&&(wt+=nt,st++,ba.push({key:J,amount:nt})),O[J]=he.cHP||0,Ke!==void 0&&(L[J]=Ke)}if(wt>0){e.dispatchEvent(new CustomEvent("damage",{detail:{amount:wt,ts:P,battleType:"trial"}}));let J=null,he="unknown",We=G.length===1?G[0]:null;if(ie.length===1){let Oe=$.filter(nt=>U.has(nt)&&ao(nt,P)),Ke=Oe.length?Oe:$.filter(nt=>ao(nt,P));Ke.length===1&&(J=Ke[0],he=le[J]||"reflect")}if(J===null&&We!==null){let Oe=z[We]||"unknown",Ke=Ns(Oe),nt=fa(We),ht=to(nt);if(Ke!=="support")J=We,he=Oe;else if(ht.includes("blazing_trident"))J=We,he=ht;else{let Sn=eo($,D,re,P);Sn!==null&&(J=Sn,he=Oi(D,re,Sn,P))}}if(J===null&&ie.length===0){let Oe=eo($,D,re,P);Oe!==null?(J=Oe,he=Oi(D,re,Oe,P)):$.length===1&&(J=$[0],he=Oi(D,re,$[0],P))}if(J!==null){let Oe=fa(J),Ke=rc(Oe,he,ba,Ct);Ke?(Ke.base>0&&e.dispatchEvent(new CustomEvent("playerDamage",{detail:{name:Oe,amount:Ke.base,source:"auto",ts:P,battleType:"trial"}})),e.dispatchEvent(new CustomEvent("playerDamage",{detail:{name:Oe,amount:Ke.effect,source:Ke.weapon,ts:P,battleType:"trial"}}))):(he=ic(Oe,he,st),e.dispatchEvent(new CustomEvent("playerDamage",{detail:{name:Oe,amount:wt,source:he,ts:P,battleType:"trial"}}))),Zt.recordNominal()}else if(ie.length===1){let Oe=$.filter(nt=>U.has(nt)&&ao(nt,P)),Ke=Oe.length?Oe:$.filter(nt=>ao(nt,P));if(Ke.length){let nt=wt/Ke.length;Ke.forEach(ht=>e.dispatchEvent(new CustomEvent("playerDamage",{detail:{name:fa(ht),amount:nt,source:le[ht]||"reflect",ts:P,battleType:"trial"}}))),Zt.recordNominal()}else Zt.recordOrphan(wt)}else Zt.recordOrphan(wt)}}s(Zp,"processGuildBattleUpdated");function Up(){t=[],a=[],n=[],i=[],o=[],r=[],c={},l={},d=[],m=[],p=[],b=[],f={},g={},h=[],_={},y={},w={},k=[],C.clear(),x=!1,T=null,ke=!1,O={},M={},L={},we={},Re={},Ue={},Ge={},H={},ae={},F={},R={},te={},X={},W={},K={},le={},de=0,D={},re={},Ee={},ue=null,_e="",j.clear(),V.clear(),De=!1,tt=!1,Rt=""}s(Up,"resetBattleState");function Kp(v){let S=ke,E=v.combatStartTime||v.battleId||v.combatId;E&&!S&&(T!==null&&E!==T&&e.dispatchEvent(new CustomEvent("newCombatInstance")),T=E,I=String(E)),S||(O={},M={},L={},we={},Re={},Ue={},Ge={},H={},ae={},F={},R={},te={},X={},W={},K={},le={},D={},re={},Ee={}),t=(v.monsters||[]).map(z=>z.currentHitpoints!==void 0?z.currentHitpoints:z.cHP||0),a=t.map(z=>z>0),n=(v.monsters||[]).map((z,U)=>z.name||String(z.hrid||"").split("/").pop().replace(/_/g," ")||"怪物"+(U+1)),i=(v.monsters||[]).map(z=>z.hrid||""),o=(v.monsters||[]).map(z=>oe(z)??0),r=(v.monsters||[]).map(z=>z.preparingAbilityHrid?z.preparingAbilityHrid:z.isPreparingAutoAttack?"auto":""),c={},l={},(v.monsters||[]).forEach((z,U)=>ta(c,null,String(U),z)),d=(v.players||[]).map(z=>z.currentManapoints!==void 0?z.currentManapoints:z.cMP||0),m=(v.players||[]).map(z=>{let U=z.attackAttemptCounter!==void 0?z.attackAttemptCounter:z.atkCounter,ie=Number(U);return U!==void 0&&Number.isFinite(ie)?ie:void 0}),p=(v.players||[]).map(z=>ne(z)),b=(v.players||[]).map(z=>z.currentHitpoints!==void 0?z.currentHitpoints:z.cHP||0),f={},g={},h=[],_={},y={},w={},C.clear();let $=[],P=qe.registerPlayers(v.players||[]);(v.players||[]).forEach((z,U)=>{let ie=z.character&&z.character.name||z.name;ie&&($.push(ie),C.set(String(U),ie)),uc(String(U),z)}),k=(v.players||[]).map(z=>z.preparingAbilityHrid?z.preparingAbilityHrid:z.isPreparingAutoAttack?"auto":"idle"),x=!0;let Z=18e10,G=(v.monsters||[]).some(z=>(z.enrageTimerDuration||0)>Z);e.dispatchEvent(new CustomEvent("newBattle",{detail:{names:$,isBoss:G,classes:P,combatKey:S?String(E||""):I||String(v.battleId||""),characterId:A,parallelGuildBattle:S}}))}s(Kp,"processNewBattle");function Xp(v){if(!x||ke)return;let S=v.mMap||{},E=v.pMap||{},$=Object.keys(E),P=B(),Z=ee?"labyrinth":"combat",G=[],z=[],U={},ie=new Set;for(let fe of $){let Ae=+fe,je=E[fe].cMP||0;ta(f,_,fe,E[fe]);let it=C.get(fe);it&&E[fe].abilityHrid&&qe.learnAbility(it,E[fe].abilityHrid),d[Ae]!==void 0&&je<d[Ae]&&z.push(fe),d[Ae]=je;let Ri=E[fe].atkCounter!==void 0?E[fe].atkCounter:E[fe].attackAttemptCounter,Yn=Number(Ri),fc=m[Ae];if(Ri!==void 0&&Number.isFinite(Yn)){if(fc!==void 0&&Yn>fc){let Ds=k[Ae]||(E[fe].isAutoAtk||E[fe].isAutoAttack?"auto":"unknown");G.push(fe),U[fe]=Ds,Bp(fe,Ds,P),Yr(g,f,fe,Ds,P,h)}m[Ae]=Yn}let Hs=ne(E[fe]),bc=p[Ae];Hs!==void 0&&(bc!==void 0&&Hs>bc&&ie.add(fe),p[Ae]=Hs);let pc=Number(E[fe].cHP);Number.isFinite(pc)&&b[Ae]!==void 0&&pc<b[Ae]&&ie.add(fe)}let Fe=G.length===1?G[0]:null,at=z.length===1?z[0]:null,Ct=[],ba={};for(let fe of Object.keys(S)){let Ae=S[fe],je=+fe,it=oe(Ae),Ri=o[je];if(ta(c,null,fe,Ae),it!==void 0){if(Ri!==void 0&&it>Ri){let Yn=r[je]||Ha(Ae,"unknown");Ct.push(fe),ba[fe]=Yn,Yr(l,c,fe,Yn,P)}o[je]=it}}let wt=wn.encode("未知怪物","","unknown");if(Ct.length===1){let fe=Ct[0];wt=Jn(n,i,fe,ba[fe]||"unknown")}else if(Ct.length===0){let fe=Object.keys(S),Ae=eo(fe,c,l,P);Ae!==null?wt=Jn(n,i,Ae,Oi(c,l,Ae,P)):fe.length===1&&(wt=Jn(n,i,fe[0],"unknown"))}for(let fe of $){let Ae=+fe,je=E[fe].cHP||0;if(b[Ae]!==void 0){let it=C.get(fe);it&&je>b[Ae]?e.dispatchEvent(new CustomEvent("healing",{detail:{name:it,amount:je-b[Ae],battleType:Z}})):it&&je<b[Ae]&&e.dispatchEvent(new CustomEvent("playerDamageTaken",{detail:{name:it,amount:b[Ae]-je,source:wt,battleType:Z}}))}b[Ae]=je}let st=null,J="unknown",he=$.filter(fe=>ie.has(fe)&&sc(fe,P)),We=Ct.length===1?he.length?he:$.filter(fe=>sc(fe,P)):[],Oe=Fe!==null?Fe:at;if(We.length===1)st=We[0],J=w[st]||"reflect";else if(Oe!==null){let fe=U[Oe]||k[+Oe]||"unknown",Ae=C.get(Oe),je=to(Ae);Ns(fe)!=="support"?(st=Oe,J=fe&&fe!=="idle"?fe:E[Oe].isAutoAtk?"auto":"unknown"):je.includes("blazing_trident")&&(st=Oe,J=je)}let Ke=a.findIndex(Boolean),nt=[],ht=0,Sn=0,mc=0;for(let fe in S){let Ae=+fe,je=S[fe];if(t[Ae]===void 0)continue;let it=t[Ae]-(je.cHP||0);t[Ae]=je.cHP||0,it>0&&(ht+=it,mc++,nt.push({key:fe,amount:it})),a[Ae]&&(je.cHP||0)<=0&&(a[Ae]=!1,Sn++)}let qi=st;if(ht>0){e.dispatchEvent(new CustomEvent("damage",{detail:{amount:ht,ts:P,battleType:Z}}));let fe=null;if(st===null&&We.length===0&&Ct.length===0){let Ae=[...C.keys()],je=ac(Ae,g,P);if(fe=Np(h,nt,P),fe.groups.length)fe.groups.length===1&&fe.unmatchedAmount===0&&(qi=fe.groups[0].key);else if(!fe.ambiguous&&!fe.hasPendingTargetSchedule&&je.length===1){let it=Pp(Ae,g,P);st=it,J=Lp(g,it,P),qi=it}else!fe.ambiguous&&!fe.hasPendingTargetSchedule&&je.length===0&&$.length===1&&(st=$[0],qi=st,J=k[+st]==="auto"||E[st].isAutoAtk?"auto":"unknown")}if(st!==null){let Ae=C.get(st);if(Ae){Dp(h,st,J,nt,P);let je=rc(Ae,J,nt,Ke);je?(je.base>0&&e.dispatchEvent(new CustomEvent("playerDamage",{detail:{name:Ae,amount:je.base,source:"auto",ts:P,battleType:Z}})),e.dispatchEvent(new CustomEvent("playerDamage",{detail:{name:Ae,amount:je.effect,source:je.weapon,ts:P,battleType:Z}}))):(J=ic(Ae,J,mc),e.dispatchEvent(new CustomEvent("playerDamage",{detail:{name:Ae,amount:ht,source:J,ts:P,battleType:Z}}))),Zt.recordNominal()}}else if(fe?.groups.length){for(let Ae of fe.groups){let je=C.get(Ae.key);!je||!(Ae.amount>0)||e.dispatchEvent(new CustomEvent("playerDamage",{detail:{name:je,amount:Ae.amount,source:`dot:${Ae.abilityHrid}`,ts:P,battleType:Z}}))}fe.unmatchedAmount>0?Zt.recordOrphan(fe.unmatchedAmount):Zt.recordNominal()}else if(We.length>1){let Ae=ht/We.length;We.forEach(je=>{let it=C.get(je);it&&e.dispatchEvent(new CustomEvent("playerDamage",{detail:{name:it,amount:Ae,source:w[je]||"reflect",ts:P,battleType:Z}}))}),Zt.recordNominal()}else Zt.recordOrphan(ht)}if(Sn>0&&qi!==null){let fe=C.get(qi);if(fe)for(let Ae=0;Ae<Sn;Ae++)e.dispatchEvent(new CustomEvent("kill",{detail:{name:fe,battleType:Z}}))}for(let fe of $){let Ae=+fe,je=E[fe];k[Ae]=je.abilityHrid?je.abilityHrid:je.isAutoAtk?"auto":"idle"}for(let fe of Object.keys(S)){let Ae=+fe;r[Ae]=Ha(S[fe],r[Ae])}}s(Xp,"processBattleUpdated");function dc(v){let S;try{S=JSON.parse(v)}catch{ft.recordUnparsed(v);return}if(!S||!S.type)return;let E=S.data&&typeof S.data=="object"?S.data:S,$=E.itemDetailMap||E.gameItemDetailMap||S.itemDetailMap||S.gameItemDetailMap;if($&&qe.cacheItemDetails($),Xn(S),Xn(E),vn.record(S.type,S),Ot.record(S.type,S),ft.record(S.type,S),S.type==="init_character_data"){let Z=E.character||S.initCharacterData&&S.initCharacterData.character||{},G=String(Z.id||Z.characterID||E.characterId||S.characterId||"unknown"),z=A;A=G,Up(),A=G,e.dispatchEvent(new CustomEvent("socketReconnected",{detail:{characterId:G,previousCharacterId:z}}))}let P=Vp(S);if(P&&Wp(P),S.type==="battle_unit_fetched"||S.type==="profile_shared"){let Z=S.type==="profile_shared"?qe.learnProfile(S):qe.learnBattleUnit(S);S.type==="battle_unit_fetched"?(zp(S.unit||E.unit||{}),cc(S.unit||E.unit||{})):Fp(S),Z&&Z.name&&Z.classId!=="unknown"&&e.dispatchEvent(new CustomEvent("classLearned",{detail:Z}))}if(S.type==="new_battle")Kp(S);else if(S.type==="battle_updated")Xp(S);else if(S.type==="new_guild_battle")lc(S);else if(S.type==="guild_battle_updated")ke||(ke=!0,setTimeout(()=>xn(de),300),setTimeout(()=>xn(de),2e3),setTimeout(()=>xn(de),5e3),e.dispatchEvent(new CustomEvent("guildBattleDetected",{detail:N(S,"guild_battle_updated")}))),Zp(S);else if(S.type==="battle_consumable_ability_updated"&&S.isGuildBattle)ke||(ke=!0,e.dispatchEvent(new CustomEvent("guildBattleDetected",{detail:N(S,"battle_consumable_ability_updated")})));else if(S.type==="guild_updated")Gp(S);else if(S.type==="labyrinth_updated"){let Z=S.labyrinth;Z&&(ee=!!Z.isActive)}}s(dc,"handleMessage");function Jp(){return xn(de),console.log(`[KikiMeter] ${j.size} 个姓名已解析(预计人数约 ${de}) :`),console.log("====================================================="),[...j.entries()].forEach(([v,S])=>{console.log(` slot ${v} → "${S}"`)}),console.log("====================================================="),j.size!==de&&console.warn(`[KikiMeter] 注意:${j.size} 个姓名已解析,但预计有 ${de} 个位置,映射可能发生偏移。请确认位置 0 对应本地角色且顺序正确。`),Object.fromEntries(j)}s(Jp,"previewGuildNames");function Yp(){let v=[...document.querySelectorAll('[class*="CombatUnit_name"]')];return console.log(`[KikiMeter] ${v.length} 个元素 [class*="CombatUnit_name"](原始、未过滤):`),console.log("====================================================="),v.forEach((S,E)=>{console.log(` #${E} | 类名="${S.className}" | 文本="${S.textContent.trim()}" | 可见=${S.offsetParent!==null}`)}),console.log("====================================================="),v.length===0&&console.warn("[KikiMeter] 没有找到元素:可能已离开试炼页面,或者游戏 CSS 类名已变化。请停留在试炼进行中页面并再次运行命令。"),v}s(Yp,"debugCombatUnitNames");function Qp(){let v=[];return document.querySelectorAll("*").forEach(S=>{if(Kn(S)||S.children.length>1)return;let E=S.textContent.trim();if(!E||E.length<2||E.length>40)return;let $=/(\.\.\.|…)$/.test(E),P=!1;if(!$&&E.length<=20&&!E.includes(" ")&&!ma(E))try{let Z=getComputedStyle(S);P=Z.textOverflow==="ellipsis"&&Z.overflow!=="visible"}catch{}($||P)&&v.push({el:S,mode:$?"文本":"CSS"})}),console.log(`[KikiMeter] ${v.length} 个被省略显示的元素(文本省略号或 CSS ellipsis):`),console.log("====================================================="),v.forEach(({el:S,mode:E},$)=>{let P=S.parentElement;console.log(` #${$} [${E}] | 文本="${S.textContent.trim()}" | 类名="${S.className}" | 父级类名="${P?P.className:"?"}" | 父级子元素=${P?P.children.length:0} | 父级同级元素=${P&&P.parentElement?P.parentElement.children.length:0}`)}),console.log("====================================================="),v}s(Qp,"scanGuildNamesByEllipsis");function eg(){let v=[...document.querySelectorAll('[class*="MiniUnit_name"]')];return console.log(`[KikiMeter] ${v.length} 个元素 [class*="MiniUnit_name"](预计人数约 ${de||"?"}) :`),console.log("====================================================="),v.forEach((S,E)=>{console.log(` #${E} | 文本="${S.textContent.trim()}"`)}),console.log("====================================================="),v.map(S=>S.textContent.trim())}s(eg,"countMiniUnitNames");function tg(){let v=[...document.querySelectorAll('[class*="MiniUnit_name"]')];if(v.length===0)return console.warn("[KikiMeter] 没有找到 MiniUnit 单元,请确认公会试炼正在进行。"),[];let S=v.map(G=>G.closest('[class*="MiniUnit_miniUnit"]')||G.parentElement),E=S.map(G=>(G.className||"")+""),$={};E.forEach(G=>{$[G]=($[G]||0)+1});let P=Object.entries($).sort((G,z)=>z[1]-G[1])[0][0],Z=[];return S.forEach((G,z)=>{E[z]!==P&&Z.push({index:z,name:v[z].textContent.trim(),classes:E[z]})}),console.log(`[KikiMeter] 主流类名(${$[P]}/${S.length} 个单元) : "${P}"`),console.log(`[KikiMeter] ${Z.length} 个异常单元(可能是本地玩家):`),console.log("====================================================="),Z.forEach(G=>{console.log(` #${G.index} | 姓名="${G.name}" | 类名="${G.classes}"`)}),console.log("====================================================="),Z.length===0?console.warn("[KikiMeter] 未发现异常单元;当前服务器可能没有本地玩家高亮,或者所有单元的样式完全相同。请观察角色单元是否存在边框或高亮。"):Z.length>1&&console.warn("[KikiMeter] 发现多个异常单元,仅凭类名无法确定本地玩家,请与页面显示进行比对。"),Z}return s(tg,"scanForOutlierMiniUnit"),{handleMessage:dc,bus:e,isGuildBattle:s(()=>ke,"isGuildBattle"),isGuildBattleActive:s(()=>ke&&!tt,"isGuildBattleActive"),isInLabyrinth:s(()=>ee,"isInLabyrinth"),getCharacterId:s(()=>A,"getCharacterId"),getCombatKey:s(()=>I,"getCombatKey"),testHandleMessage:dc,testSetNow(v){q=Number.isFinite(v)?Number(v):null},scanGuildNames:Xr,scanGuildNamesAttrs:Is,scanGuildNamesLoose:kn,scanGuildNamesByLocalName:Es,previewGuildNames:Jp,debugCombatUnitNames:Yp,scanGuildNamesByEllipsis:Qp,countMiniUnitNames:eg,scanForOutlierMiniUnit:tg}})();var Et=s((e,t)=>Q.getLanguage()==="en"?t:e,"langText"),m7=1e-4;function hp(e,t,a){let n=e.reduce((o,r)=>o+(Number(r.damage)||0),0),i=Math.max(0,(Number(t)||0)-n);return i>m7?[...e,{name:Et("无法归属伤害","Unattributed Damage"),synthetic:"unattributed-damage",classId:"unknown",damage:i,dps:a>0?i/a:0,healing:0,hps:0,taken:0,takenPs:0,kills:0,breakdown:null,takenBreakdown:null}]:e}s(hp,"withUnattributedDamage");var gt=(()=>{let e="kikimeter:history:v2",t="kikimeter:history:v1",a="kikimeter:active:v2",i=0;function o(f){try{let g=JSON.parse(f||"[]");return Array.isArray(g)?g:[]}catch{return[]}}s(o,"validArray");function r(){if(localStorage.getItem(e)!==null)return;let f=o(localStorage.getItem(t)).map((g,h)=>({...g,schemaVersion:2,id:"legacy-"+(g.date||h),type:g.type||"combat",characterId:"legacy",combatKey:"legacy-"+h,startedAt:g.date,endedAt:g.date,durationMs:(g.durationSeconds||0)*1e3,fragments:[{reason:"旧版记录",startedAt:g.date,endedAt:g.date,durationMs:(g.durationSeconds||0)*1e3,teamDamage:g.teamDamage||0}]}));try{localStorage.setItem(e,JSON.stringify(f))}catch{}}s(r,"migrateLegacy");function c(f,g=0){return String(f&&(f.id||f.combatKey||f.date||f.startedAt)||"history-"+g)}s(c,"entryKey");function l(f){let g={combat:0,labyrinth:0,trial:0};return f.filter(h=>{if(h&&h.favorite===!0)return!0;let _=h&&h.type||"combat";return g[_]=(g[_]||0)+1,g[_]<=10})}s(l,"trim");function d(){r();let f=o(localStorage.getItem(e)),g=l(f);if(g.length!==f.length)try{localStorage.setItem(e,JSON.stringify(g))}catch{}return g}s(d,"load");function m(f){let g=l(f);for(;g.length>=0;)try{return localStorage.setItem(e,JSON.stringify(g)),!0}catch{let _=[...g].reverse().findIndex(y=>y&&y.favorite!==!0);if(_<0)return!1;g.splice(g.length-1-_,1)}return!1}s(m,"writeWithQuotaRetry");function p(f){let g=f.type||"combat";f.type=g;let h=d(),_=c(f),y=h.find((k,C)=>c(k,C)===_);y&&y.favorite===!0&&f.favorite!==!1&&(f.favorite=!0);let w=h.filter((k,C)=>c(k,C)!==_);w.unshift(f),m(w),i++}s(p,"save");function b(f,g){let h=d(),_=h.findIndex((k,C)=>c(k,C)===String(f));if(_<0)return!1;let y=g({...h[_]});y===null?h.splice(_,1):h[_]=y;let w=m(h);return w&&i++,w}return s(b,"updateEntry"),{push(f){p(f)},getAll(f){let g=d();return f?g.filter(h=>(h.type||"combat")===f):g},clear(f){if(!f){try{localStorage.removeItem(e)}catch{}i++;return}let g=d().filter(h=>(h.type||"combat")!==f);try{localStorage.setItem(e,JSON.stringify(g))}catch{}i++},setFavorite(f,g){return b(f,h=>({...h,favorite:!!g,favoritedAt:g?new Date().toISOString():void 0}))},rename(f,g){return b(f,h=>{let _=String(g||"").trim().slice(0,40);return{...h,customName:_||void 0}})},remove(f){return b(f,()=>null)},entryKey:c,saveActive(f){try{return localStorage.setItem(a,JSON.stringify(f)),!0}catch{return!1}},loadActive(){try{let f=JSON.parse(localStorage.getItem(a)||"null");return f&&f.schemaVersion===2?f:null}catch{return null}},clearActive(){try{localStorage.removeItem(a)}catch{}},getRevision:s(()=>i,"getRevision"),keys:{history:e,active:a}}})(),Na=(()=>{let e="current",t=-1,a="",n=[],i=new EventTarget,o=s(b=>"fight:"+encodeURIComponent(String(b)),"fightKey"),r=s((b,f)=>"fragment:"+encodeURIComponent(String(b))+":"+f,"fragmentKey");function c(b,f){return b.id||b.combatKey||b.date||"history-"+f}s(c,"entryId");function l(b){let f=new Date(b.date||b.startedAt||Date.now()),g=s(w=>String(w).padStart(2,"0"),"pad"),h=b.type||"combat",_=Q.getLanguage()==="en"?{combat:"Combat",labyrinth:"Labyrinth",trial:"Trial"}[h]||"Combat":{combat:"普通",labyrinth:"迷宫",trial:"试炼"}[h]||"普通",y=(b.players||[]).length;return Q.getLanguage()==="en"?`${_} ${y} players ${f.getMonth()+1}/${f.getDate()} ${g(f.getHours())}:${g(f.getMinutes())}`:`${_} ${y}人 ${f.getMonth()+1}月${f.getDate()}日${g(f.getHours())}:${g(f.getMinutes())}`}s(l,"dateLabel");function d(){let b=gt.getRevision(),f=Q.getLanguage();if(b===t&&f===a)return n;let g=[{key:"current",label:Et("当前战斗","Current combat"),current:!0}];return gt.getAll().map((_,y)=>({entry:_,index:y})).sort((_,y)=>{let w=+(y.entry.favorite===!0)-+(_.entry.favorite===!0);if(w)return w;if(_.entry.favorite===!0&&y.entry.favorite===!0){let x=new Date(y.entry.favoritedAt||y.entry.date||0)-new Date(_.entry.favoritedAt||_.entry.date||0);if(x)return x}let k={combat:0,labyrinth:1,trial:2},C=(k[_.entry.type||"combat"]??9)-(k[y.entry.type||"combat"]??9);return C||_.index-y.index}).forEach(({entry:_,index:y})=>{let w=c(_,y),k=_.favorite===!0,C=k?"favorite":_.type||"combat",x=k&&_.customName?_.customName:l(_);g.push({key:o(w),label:(k?"★ ":"")+x,entry:_,group:C,favorite:k});let T=Array.isArray(_.fragments)?_.fragments:[];T.length>1&&T.forEach((A,I)=>g.push({key:r(w,I),label:Et("↳ 重连片段 ","↳ Reconnect fragment ")+(I+1)+" · "+ca((Number(A.durationMs)||0)/1e3),entry:_,fragment:A,fragmentIndex:I,group:C,favorite:k}))}),t=b,a=f,n=g,n}s(d,"options");function m(){let b=d(),f=b.find(g=>g.key===e);return f||(e="current",b[0])}s(m,"resolve");function p(b){let f=d().some(h=>h.key===b)?b:"current";if(f===e)return m();e=f;let g=m();return i.dispatchEvent(new CustomEvent("change",{detail:g})),g}return s(p,"select"),{bus:i,options:d,resolve:m,select:p,getKey:s(()=>e,"getKey"),isCurrent:s(()=>e==="current","isCurrent")}})();function Vr(e){e&&e._menu&&(e._menu.remove(),e._menu=null),e&&Array.isArray(e._sideMenus)&&(e._sideMenus.forEach(t=>t.remove()),e._sideMenus=[]),e&&e._button&&(e._button.style.borderColor="rgba(212,175,55,.45)")}s(Vr,"closeSegmentPicker");function Di(e){Vr(e),e._collapsedGroups instanceof Set||(e._collapsedGroups=new Set),e._expandedEntries instanceof Set||(e._expandedEntries=new Set);let t=ve("div",{position:"fixed",zIndex:"10003",width:"300px",maxHeight:"min(390px,72vh)",overflowY:"auto",padding:"4px",boxSizing:"border-box",background:"rgba(14,14,14,.995)",border:"1px solid rgba(212,175,55,.55)",borderRadius:"4px",boxShadow:"0 7px 24px rgba(0,0,0,.85)",color:"#f2f2f2",fontSize:"11px"});t.id="kikimeter-segment-menu",t.dataset.kikimeter="true",e._menu=t;let a=s(()=>{Ja(e),e._onChanged&&e._onChanged()},"notify"),n=Na.options(),i=s((m,p=!1)=>{let b=ve("div",{display:"flex",alignItems:"center",minHeight:"28px",padding:p?"4px 6px 4px 18px":"4px 6px",boxSizing:"border-box",borderRadius:"3px",cursor:"pointer",whiteSpace:"nowrap"});b.dataset.segmentKey=m.key;let f=m.entry?gt.entryKey(m.entry):"";if((!p&&m.entry?n.filter(_=>_.fragment&&_.entry===m.entry):[]).length){let _=e._expandedEntries.has(f),y=ve("button",{width:"18px",height:"20px",padding:"0",marginRight:"2px",flexShrink:"0",cursor:"pointer",background:"transparent",border:"none",color:"rgba(255,255,255,.62)",fontSize:"11px"});y.type="button",y.textContent=_?"▾":"▸",y.title=_?Et("收起重连片段","Collapse reconnect fragments"):Et("展开重连片段","Expand reconnect fragments"),y.addEventListener("click",w=>{w.stopPropagation(),_?e._expandedEntries.delete(f):e._expandedEntries.add(f),Di(e)}),b.appendChild(y)}let h=ve("span",{overflow:"hidden",textOverflow:"ellipsis",flex:"1"});if(h.textContent=m.label,b.appendChild(h),b.addEventListener("mouseenter",()=>{b.style.background="rgba(212,175,55,.13)"}),b.addEventListener("mouseleave",()=>{b.style.background="transparent"}),b.addEventListener("click",()=>{Na.select(m.key),Vr(e),a()}),m.entry&&!p){let _=s((C,x,T,A)=>{let I=document.createElement("button");return I.type="button",I.textContent=C,I.title=x,Object.assign(I.style,{width:"23px",height:"22px",padding:"0",marginLeft:"2px",cursor:"pointer",background:"transparent",border:"none",borderRadius:"3px",color:T,fontSize:"14px",lineHeight:"20px",flexShrink:"0"}),I.addEventListener("mouseenter",()=>I.style.background="rgba(255,255,255,.12)"),I.addEventListener("mouseleave",()=>I.style.background="transparent"),I.addEventListener("click",q=>{q.stopPropagation(),A(q)!==!1&&(a(),Di(e))}),I},"miniButton"),y=_(m.entry.favorite===!0?"★":"☆",m.entry.favorite===!0?Et("取消收藏","Remove favorite"):Et("收藏","Favorite"),"#facc15",()=>gt.setFavorite(f,m.entry.favorite!==!0)),w=m.entry.favorite===!0?_("✎",Et("修改收藏名称","Rename favorite"),"#93c5fd",()=>{let C=m.entry.customName||String(m.label||"").replace(/^★\s*/,""),x=document.createElement("input");x.type="text",x.value=C,x.maxLength=40,Object.assign(x.style,{minWidth:"0",height:"22px",flex:"1",boxSizing:"border-box",padding:"2px 5px",background:"#090909",border:"1px solid #93c5fd",borderRadius:"3px",outline:"none",color:"#fff",font:"inherit"});let T=!1,A=s(I=>{T||(T=!0,I&>.rename(f,x.value),a(),Di(e))},"finish");return x.addEventListener("mousedown",I=>I.stopPropagation()),x.addEventListener("click",I=>I.stopPropagation()),x.addEventListener("keydown",I=>{I.stopPropagation(),I.key==="Enter"?(I.preventDefault(),A(!0)):I.key==="Escape"&&(I.preventDefault(),A(!1))}),x.addEventListener("blur",()=>A(!0),{once:!0}),h.replaceWith(x),x.focus(),x.select(),!1}):null,k=_("✕",Et("删除记录","Delete record"),"#f87171",()=>{let C=Na.resolve();C.entry&>.entryKey(C.entry)===f&&Na.select("current"),gt.remove(f)});w&&b.append(w),b.append(y,k)}t.appendChild(b)},"addRecord"),o=n.find(m=>m.current);o&&i(o),[["favorite",Et("收藏","Favorites")],["combat",Et("普通","Combat")],["labyrinth",Et("迷宫","Labyrinth")],["trial",Et("试炼","Trial")]].forEach(([m,p])=>{let b=n.filter(_=>!_.current&&_.group===m);if(!b.length)return;let f=b.filter(_=>!_.fragment).length,g=e._collapsedGroups.has(m),h=ve("div",{display:"flex",alignItems:"center",gap:"5px",padding:"7px 7px 4px",color:St,fontSize:"10px",fontWeight:"700",borderTop:"1px solid rgba(255,255,255,.08)",cursor:"pointer",userSelect:"none"});h.textContent=(g?"▸ ":"▾ ")+p+"("+f+")",h.title=g?Et(`展开${p}`,`Expand ${p}`):Et(`折叠${p}`,`Collapse ${p}`),h.addEventListener("click",_=>{_.stopPropagation(),g?e._collapsedGroups.delete(m):e._collapsedGroups.add(m),Di(e)}),t.appendChild(h),g||b.filter(_=>!_.fragment).forEach(_=>{i(_),e._expandedEntries.has(gt.entryKey(_.entry))&&b.filter(y=>y.fragment&&y.entry===_.entry).forEach(y=>i(y,!0))})}),document.body.appendChild(t);let r=e.getBoundingClientRect(),c=t.offsetHeight||300,l=r.bottom+3+c<=window.innerHeight?r.bottom+3:Math.max(4,r.top-c-3),d=Math.max(4,Math.min(r.right-300,window.innerWidth-304));Object.assign(t.style,{left:d+"px",top:l+"px"}),e._button.style.borderColor=St}s(Di,"buildSegmentMenu");function Gr(e,t=!1){let a=ve("div",{position:"relative",minWidth:"0",flex:t?"none":"1"});a.dataset.kikimeter="true",a.dataset.segmentPicker="true",a._compact=t;let n=document.createElement("button");n.type="button",Object.assign(n.style,{display:"flex",alignItems:"center",justifyContent:"space-between",gap:"6px",width:"100%",minWidth:"0",background:"#121212",color:"#f2f2f2",border:"1px solid rgba(212,175,55,.45)",borderRadius:"3px",padding:"4px 6px",fontSize:"11px",cursor:"pointer"});let i=ve("span",{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}),o=ve("span",{opacity:".65"});if(o.textContent="▾",t){Object.assign(n.style,{width:"25px",height:"23px",padding:"0",justifyContent:"center",background:"transparent",borderColor:"transparent"});let r=Ia(Ea.history,"");Object.assign(r.style,{width:"17px",height:"17px",objectFit:"contain",pointerEvents:"none"}),i.appendChild(r),n.appendChild(i)}else n.append(i,o);return a.appendChild(n),a._button=n,a._text=i,a._onChanged=e,n.addEventListener("mousedown",r=>r.stopPropagation()),n.addEventListener("click",r=>{r.stopPropagation(),a._menu?Vr(a):Di(a)}),document.addEventListener("pointerdown",r=>{a._menu&&!a.contains(r.target)&&!a._menu.contains(r.target)&&Vr(a)}),Ja(a),a}s(Gr,"buildSegmentPicker");function Ja(e){if(!e||!e._text)return;let t=Na.resolve();e.value=t.key,e._compact||(e._text.textContent=t.label);let a=Q.getLanguage()==="en";e.title=(t.current?a?"Select combat record":"选择战斗记录":(a?"Viewing: ":"正在查看:")+t.label)+(e._compact?a?" | Open combat history":"|点击展开历史":"")}s(Ja,"refreshSegmentSelect");var qt=(()=>{function e(r){let c=r&&Array.isArray(r.damage)?r.damage:[],l=r&&Array.isArray(r.boss)?r.boss:[];return c.map((d,m)=>({dps:(Number(d)||0)/2,isBoss:!!l[m]}))}s(e,"graphPoints");function t(r,c,l,d=""){let m=new Map;Object.entries(r||{}).forEach(([g,h])=>{let _=pt.canonical(g,d),y=Number(h)||0;if(y<=0)return;let w=m.get(_)||{value:0,displaySource:_};w.value+=y,pt.isCombined(g)&&(w.displaySource=g),m.set(_,w)});let p=[...m].map(([g,h])=>({source:h.displaySource,label:pt.label(h.displaySource),value:h.value})),b=p.reduce((g,h)=>g+h.value,0),f=Math.max(0,(Number(c)||0)-b);return f>1e-4&&p.push({source:"legacy",label:pt.label("legacy"),value:f}),p.sort((g,h)=>h.value-g.value).map(g=>({...g,ps:l>0?g.value/l:0,pct:c>0?g.value*100/c:0}))}s(t,"damageBreakdown");function a(r,c,l){let d=Object.entries(r||{}).map(([b,f])=>({source:b,label:wn.label(b),icon:wn.icon(b),value:Number(f)||0})).filter(b=>b.value>0),m=d.reduce((b,f)=>b+f.value,0),p=Math.max(0,(Number(c)||0)-m);return p>1e-4&&d.push({source:"",label:Q.getLanguage()==="en"?"Legacy / Unknown Source":"旧记录/未知来源",icon:pt.icon("unknown"),value:p}),d.sort((b,f)=>f.value-b.value).map(b=>({...b,ps:l>0?b.value/l:0,pct:c>0?b.value*100/c:0}))}s(a,"takenBreakdown");function n(){let r=me.getElapsedSeconds(),c=me.getAllPlayerNames(),l=me.getTeamDamage(),d=c.map(m=>({name:m,classId:qe.classFor(m),damage:me.getPlayerDamage(m),dps:me.getPlayerDps(m),healing:me.getPlayerHealing(m),hps:me.getPlayerHps(m),taken:me.getPlayerTaken(m),takenPs:me.getPlayerTakenPs(m),kills:me.getPlayerKills(m),breakdown:t(me.getPlayerDamageSources(m),me.getPlayerDamage(m),r,m),takenBreakdown:a(me.getPlayerTakenSources(m),me.getPlayerTaken(m),r)}));return{key:"current",label:Et("当前战斗","Current combat"),current:!0,type:me.getMeta().type||"combat",elapsed:r,teamDamage:l,teamDps:me.getTeamDps(),teamKills:me.getTeamKills(),fragmentCount:me.getFragments().length,graphPoints:me.getFullGraphPoints(),players:hp(d,l,r)}}s(n,"current");function i(r){let c=r.entry||{},l=r.fragment,d=l?(Number(l.durationMs)||0)/1e3:Number(c.durationSeconds)||(Number(c.durationMs)||0)/1e3,m;if(l){let f=l.players||{},g=f.damage||{},h=f.healing||{},_=f.taken||{},y=f.kills||{},w=[...new Set([...Object.keys(g),...Object.keys(h),...Object.keys(_),...Object.keys(y)])],k=f.sources||{},C=f.takenSources||{};m=w.map(x=>({name:x,classId:(c.classes||{})[x],damage:Number(g[x])||0,healing:Number(h[x])||0,taken:Number(_[x])||0,kills:Number(y[x])||0,dps:d>0?(Number(g[x])||0)/d:0,hps:d>0?(Number(h[x])||0)/d:0,takenPs:d>0?(Number(_[x])||0)/d:0,breakdown:t(k[x],Number(g[x])||0,d,x),takenBreakdown:a(C[x],Number(_[x])||0,d)}))}else m=(c.players||[]).map(f=>({...f,takenPs:d>0?(Number(f.taken)||0)/d:0,breakdown:t(f.sources,Number(f.damage)||0,d,f.name),takenBreakdown:a(f.takenSources,Number(f.taken)||0,d)}));m.forEach(f=>{f.classId&&qe.setDetected(f.name,f.classId)});let p=l?Number(l.teamDamage)||m.reduce((f,g)=>f+(Number(g.damage)||0),0):Number(c.teamDamage)||0,b=m.reduce((f,g)=>f+(Number(g.kills)||0),0);return{key:r.key,label:r.label,current:!1,type:c.type||"combat",elapsed:d,teamDamage:p,teamDps:d>0?p/d:0,teamKills:b,fragmentCount:l?1:(c.fragments||[]).length||1,graphPoints:l?[]:e(c.graph),players:hp(m,p,d)}}s(i,"historical");function o(){let r=Na.resolve();return r.current?n():i(r)}return s(o,"get"),{get:o}})();var Ss="#FF3F34",Cs=s((e,t)=>Q.getLanguage()==="en"?t:e,"langText");function f7(){let t=document.createElement("canvas"),a=440,n=160;t.width=a,t.height=n,Object.assign(t.style,{width:"100%",height:"80px",display:"block",borderRadius:"4px",background:"rgba(0,0,0,0.3)"});let i={top:14,right:8,bottom:22,left:50},o=a-i.left-i.right,r=n-i.top-i.bottom;function c(d,m){if(d<=0)return 100;let p=d/m,b=Math.pow(10,Math.floor(Math.log10(p))),f=p/b,g;return f<1.5?g=1:f<3.5?g=2:f<7.5?g=5:g=10,g*b}s(c,"niceInterval");function l(d){t.style.display="block";let m=t.getContext("2d");m.clearRect(0,0,a,n);let p=8,b=d.map((I,q)=>{let B=0,j=0;for(let V=Math.max(0,q-p+1);V<=q;V++)B+=d[V].dps,j++;return{dps:B/j,isBoss:I.isBoss}}),f=b.length,g=Math.max(...b.map(I=>I.dps),1),h=c(g,4),_=Math.ceil(g/h)*h;function y(I){return i.left+I/(f-1)*o}s(y,"xOf");function w(I){return i.top+r*(1-I/_)}s(w,"yOf"),m.font="18px monospace",m.textAlign="right";for(let I=0;I<=_;I+=h){let q=w(I);m.beginPath(),m.strokeStyle="rgba(255,255,255,0.08)",m.lineWidth=1,m.setLineDash([4,4]),m.moveTo(i.left,q),m.lineTo(i.left+o,q),m.stroke(),m.setLineDash([]),m.fillStyle="rgba(255,255,255,0.45)";let B=I>=1e3?(I/1e3).toFixed(I%1e3===0?0:1)+"k":String(Math.round(I));m.fillText(B,i.left-4,q+6)}let k=f*2e3/6e4,C;k<=6?C=1:k<=15?C=2:k<=30?C=5:C=10;let x=Math.round(C*6e4/2e3);m.font="17px monospace",m.textAlign="center";for(let I=1;;I++){let q=f-1-I*x;if(q<0)break;let B=y(q);m.beginPath(),m.strokeStyle="rgba(255,255,255,0.12)",m.lineWidth=1,m.setLineDash([2,4]),m.moveTo(B,i.top),m.lineTo(B,i.top+r),m.stroke(),m.setLineDash([]),m.fillStyle="rgba(255,255,255,0.35)",m.fillText("-"+I*C+"m",B,n-4)}m.textAlign="right",m.fillStyle="rgba(255,255,255,0.3)",m.fillText("now",a-2,n-4);let T=null,A=b.map((I,q)=>({x:y(q),y:w(I.dps),isBoss:I.isBoss}));A.forEach((I,q)=>{let B=I.isBoss?Ss:St;B!==T&&(T!==null&&m.stroke(),m.beginPath(),m.strokeStyle=B,m.lineWidth=2.5,q>0?m.moveTo(A[q-1].x,A[q-1].y):m.moveTo(I.x,I.y),T=B),m.lineTo(I.x,I.y)}),T!==null&&m.stroke(),[!1,!0].forEach(I=>{m.fillStyle=I?"rgba(255,63,52,0.12)":"rgba(0,116,116,0.12)",m.beginPath();let q=!1;A.forEach((B,j)=>{if(B.isBoss!==I){q&&(m.lineTo(B.x,i.top+r),m.closePath(),m.fill(),q=!1);return}q||(m.beginPath(),m.moveTo(B.x,i.top+r),q=!0),m.lineTo(B.x,B.y)}),q&&(m.lineTo(A[f-1].x,i.top+r),m.closePath(),m.fill())}),m.beginPath(),m.strokeStyle="rgba(255,255,255,0.15)",m.lineWidth=1,m.moveTo(i.left,i.top),m.lineTo(i.left,i.top+r),m.lineTo(i.left+o,i.top+r),m.stroke()}return s(l,"render"),{canvas:t,render:l}}s(f7,"buildGraph");function Zr(){let a=document.createElement("canvas");Object.assign(a.style,{width:"100%",height:"112px",display:"block",borderRadius:"5px",boxSizing:"border-box",background:"linear-gradient(180deg,rgba(18,22,28,.94),rgba(6,8,12,.94))",border:"1px solid rgba(212,175,55,.24)"});function n(c,l=3){if(c<=0)return 1;let d=c/l,m=10**Math.floor(Math.log10(d)),p=d/m;return(p<1.5?1:p<3.5?2:p<7.5?5:10)*m}s(n,"niceInterval");function i(c,l){if(l.length){c.moveTo(l[0].x,l[0].y);for(let d=1;d<l.length;d++){let m=l[d-1],p=l[d],b=(m.x+p.x)/2;c.bezierCurveTo(b,m.y,b,p.y,p.x,p.y)}}}s(i,"traceSmooth");function o(c,l){return c>=60?"-"+Math.round(c/60)+(l?"m":"分"):"-"+Math.round(c)+(l?"s":"秒")}s(o,"durationLabel");function r(c){let l=Array.isArray(c)?c:[],d=Q.getLanguage()==="en",m=Math.max(240,Math.round(a.getBoundingClientRect().width||320)),p=112,b=Math.max(1,Math.min(Number(window.devicePixelRatio)||1,2));(a.width!==Math.round(m*b)||a.height!==Math.round(p*b))&&(a.width=Math.round(m*b),a.height=Math.round(p*b));let f=a.getContext("2d");f.setTransform(b,0,0,b,0,0),f.clearRect(0,0,m,p),a.title=d?"Smoothed total team DPS trend; red areas indicate boss combat.":"平滑后的团队总 DPS 趋势;红色区段表示 Boss 战斗。";let g={top:27,right:10,bottom:19,left:39},h=m-g.left-g.right,_=p-g.top-g.bottom;if(f.font="600 9px 'Microsoft YaHei','Noto Sans SC',sans-serif",f.textBaseline="middle",f.fillStyle="rgba(255,255,255,.72)",f.textAlign="left",f.fillText(d?"TEAM DPS TREND":"团队 DPS 趋势",10,13),!l.length){f.fillStyle="rgba(255,255,255,.34)",f.textAlign="center",f.font="10px 'Microsoft YaHei','Noto Sans SC',sans-serif",f.fillText(d?"Waiting for combat data":"等待战斗数据",m/2,62);return}let y=Math.max(2,Math.min(6,Math.round(l.length/20)||2)),w=l.map((R,te)=>{let X=0,W=0;for(let K=Math.max(0,te-y+1);K<=te;K++){let le=K-(te-y);X+=(Number(l[K].dps)||0)*le,W+=le}return{dps:W?X/W:0,isBoss:!!R.isBoss}}),k=w.length,C=Math.max(...w.map(R=>R.dps),0),x=Math.max(C,1),T=n(x),A=Math.max(T,Math.ceil(x/T)*T),I=s(R=>k<=1?g.left+h:g.left+R/(k-1)*h,"xOf"),q=s(R=>g.top+_*(1-Math.max(0,R)/A),"yOf");f.font="8px 'Microsoft YaHei','Noto Sans SC',sans-serif",f.textAlign="right",f.textBaseline="middle";for(let R=0;R<=A+1e-4;R+=T){let te=q(R);f.beginPath(),f.strokeStyle="rgba(255,255,255,.075)",f.lineWidth=1,f.moveTo(g.left,te+.5),f.lineTo(m-g.right,te+.5),f.stroke(),f.fillStyle="rgba(255,255,255,.38)",f.fillText(bt(R),g.left-5,te)}let B=Math.max(0,(k-1)*2e3/1e3);f.textAlign="center",f.textBaseline="bottom",f.fillStyle="rgba(255,255,255,.32)",[0,.5,1].forEach(R=>{let te=g.left+h*R;R>0&&R<1&&(f.beginPath(),f.strokeStyle="rgba(255,255,255,.045)",f.moveTo(te,g.top),f.lineTo(te,g.top+_),f.stroke());let X=B*(1-R),W=R===1?d?"NOW":"现在":o(X,d);f.fillText(W,te,p-3)});let j=-1;for(let R=0;R<=k;R++){let te=R<k&&w[R].isBoss;if(te&&j<0&&(j=R),!te&&j>=0){let X=k>1?h/(k-1)/2:0,W=Math.max(g.left,I(j)-X),K=Math.min(m-g.right,I(R-1)+X);f.fillStyle="rgba(255,63,52,.07)",f.fillRect(W,g.top,K-W,_),j=-1}}let V=w.map((R,te)=>({x:I(te),y:q(R.dps),isBoss:R.isBoss,value:R.dps})),O=f.createLinearGradient(0,g.top,0,g.top+_);O.addColorStop(0,"rgba(212,175,55,.30)"),O.addColorStop(1,"rgba(212,175,55,.015)"),f.beginPath(),i(f,V),f.lineTo(V[k-1].x,g.top+_),f.lineTo(V[0].x,g.top+_),f.closePath(),f.fillStyle=O,f.fill(),f.save(),f.shadowColor="rgba(212,175,55,.45)",f.shadowBlur=5,f.beginPath(),i(f,V),f.strokeStyle=St,f.lineWidth=2,f.lineCap="round",f.lineJoin="round",f.stroke(),f.restore();for(let R=1;R<k;R++)V[R].isBoss&&(f.beginPath(),f.moveTo(V[R-1].x,V[R-1].y),f.lineTo(V[R].x,V[R].y),f.strokeStyle=Ss,f.lineWidth=2.2,f.lineCap="round",f.stroke());let M=w.findIndex(R=>R.dps===C),L=V[Math.max(0,M)],F=V[k-1];f.beginPath(),f.arc(L.x,L.y,2.3,0,Math.PI*2),f.fillStyle="#fff0a8",f.fill(),f.beginPath(),f.arc(F.x,F.y,3.2,0,Math.PI*2),f.fillStyle=F.isBoss?Ss:St,f.fill(),f.strokeStyle="#17130a",f.lineWidth=1,f.stroke(),f.textAlign="right",f.textBaseline="middle",f.font="700 10px 'Microsoft YaHei','Noto Sans SC',sans-serif",f.fillStyle=F.isBoss?"#ff817a":"#f5d568",f.fillText(mt(w[k-1].dps)+" DPS",m-9,13)}return s(r,"render"),{canvas:a,render:r}}s(Zr,"buildDetailsGraph");function _p(e,t,a){let n=document.getElementById("kikimeter-class-picker");n&&n.remove();let i=document.createElement("select");i.id="kikimeter-class-picker",i.dataset.kikimeter="true",i.append(new Option(Cs("自动识别","Auto-detect"),"auto")),Object.entries(qe.definitions).filter(([c])=>c!=="unknown").forEach(([c,l])=>i.append(new Option(l.label,c))),i.value=Q.getClassOverride(e)||"auto";let o=t.getBoundingClientRect();Object.assign(i.style,{position:"fixed",zIndex:"10002",left:o.left+"px",top:o.bottom+"px",background:"#171717",color:"#fff",border:"1px solid #d4af37",borderRadius:"3px",padding:"3px"});let r=s(()=>setTimeout(()=>i.remove(),0),"finish");i.addEventListener("change",()=>{qe.setOverride(e,i.value),r(),a()}),i.addEventListener("blur",r),document.body.appendChild(i),i.focus()}s(_p,"openClassPicker");var la=(()=>{let e=null,t=null,a="",n=null,i=null,o=s((g,h)=>Q.getLanguage()==="en"?h:g,"langText");function r(){n!==null&&clearTimeout(n),n=null}s(r,"cancelClose");function c(){r(),e&&e.remove(),e=null,t=null,a="",i=null}s(c,"close");function l(){r(),n=setTimeout(c,140)}s(l,"scheduleClose");function d(g){if(!e||!g)return;let h=g.getBoundingClientRect(),_=Math.min(340,window.innerWidth-12),y=h.right+6+_<=window.innerWidth?h.right+6:Math.max(6,h.left-_-6),w=e.offsetHeight||180,k=Math.max(6,Math.min(h.top,window.innerHeight-w-6));Object.assign(e.style,{width:_+"px",left:y+"px",top:k+"px"})}s(d,"position");function m(g){if(!e||!g)return;let h=e.scrollTop;e.innerHTML="";let _=qe.get(g.name),y=ve("div",{display:"flex",alignItems:"center",gap:"6px",padding:"6px 8px",fontWeight:"700",borderBottom:"1px solid rgba(255,255,255,.13)",color:"#fff"}),w=Ia(_.icon,_.label);Object.assign(w.style,{width:"20px",height:"20px",objectFit:"contain"});let k=ve("span",{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"});k.textContent=g.name+" · "+(g.breakdownTitle||o("伤害构成","Damage Breakdown")),y.append(w,k),e.appendChild(y);let C=Array.isArray(g.breakdown)?g.breakdown:[],x=C.length?Math.max(...C.map(T=>Number(T.value)||0),1):1;if(C.forEach((T,A)=>{let I=ve("div",{position:"relative",height:"27px",margin:"3px 5px",overflow:"hidden",borderRadius:"2px",background:"rgba(0,0,0,.46)",border:"1px solid rgba(255,255,255,.06)"}),q=ve("div",{position:"absolute",inset:"0 auto 0 0",width:(100*(Number(T.value)||0)/x).toFixed(2)+"%",background:`linear-gradient(90deg,${_.color}c9,${_.color}55)`}),B=ve("div",{position:"absolute",inset:"0",display:"flex",alignItems:"center",gap:"5px",padding:"1px 5px",textShadow:"0 1px 2px #000"}),j=ve("span",{width:"15px",textAlign:"right",fontSize:"10px",opacity:".8"});j.textContent=String(A+1)+".";let V=T.label||pt.label(T.source),O=Ia(T.icon||pt.icon(T.source,g.name),V);Object.assign(O.style,{width:"20px",height:"20px",objectFit:"contain",flexShrink:"0",filter:"drop-shadow(0 1px 1px #000)"});let M=ve("span",{flex:"1",minWidth:"40px",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",fontWeight:"600"});M.textContent=V,M.title=M.textContent;let L=ve("span",{fontSize:"10px",fontVariantNumeric:"tabular-nums",whiteSpace:"nowrap"});L.textContent=bt(T.value)+"("+mt(T.ps)+" "+(g.breakdownRateLabel||"DPS")+","+(Number(T.pct)||0).toFixed(1)+"%)",B.append(j,O,M,L),I.append(q,B),e.appendChild(I)}),!C.length){let T=ve("div",{padding:"14px",textAlign:"center",opacity:".55"});T.textContent=g.breakdownEmpty||o("暂无伤害来源","No damage sources"),e.appendChild(T)}d(i),e.scrollTop=h}s(m,"render");function p(g,h,_){r(),i=g,t=_,a=h.name,e||(e=ve("div",{position:"fixed",zIndex:"10004",maxHeight:"min(420px,calc(100vh - 12px))",overflowY:"auto",boxSizing:"border-box",background:"linear-gradient(180deg,rgba(25,25,25,.99),rgba(7,7,7,.99))",border:"1px solid rgba(212,175,55,.72)",borderRadius:"5px",boxShadow:"0 8px 30px rgba(0,0,0,.9)",color:"#f2f2f2",fontSize:"11px"}),e.dataset.kikimeter="true",e.addEventListener("mouseenter",r),e.addEventListener("mouseleave",l),document.body.appendChild(e)),m(h)}s(p,"show");function b(g){if(!e)return!1;let h=(g||[]).find(_=>_.name===a);return h&&Array.isArray(h.breakdown)?m(h):c(),!!e}s(b,"update");function f(g){return!!e&&t===g}return s(f,"isOpenFor"),{show:p,update:b,isOpenFor:f,scheduleClose:l,cancelClose:r,close:c}})();function Pi(e,t,a){if(la.isOpenFor(e)&&la.update(t))return;e.innerHTML="";let n=t.length?Math.max(...t.map(i=>i.value),1):1;if(t.forEach((i,o)=>{let r=i.synthetic==="unattributed-damage",c=r?qe.definitions.unknown:qe.get(i.name),l=ve("div",{position:"relative",height:"24px",margin:"2px 0",overflow:"hidden",minHeight:"24px",flexShrink:"0",boxSizing:"border-box",borderRadius:"2px",background:"rgba(0,0,0,.42)",border:"1px solid rgba(255,255,255,.06)",color:"#fff"});l.dataset.player=i.name;let d=ve("div",{position:"absolute",left:"0",top:"0",bottom:"0",width:(100*i.value/n).toFixed(2)+"%",background:`linear-gradient(90deg,${c.color}d9,${c.color}70)`,boxShadow:`inset 0 0 5px ${c.color}`}),m=ve("div",{position:"absolute",inset:"0",display:"flex",alignItems:"center",gap:"4px",padding:"1px 5px",whiteSpace:"nowrap",textShadow:"0 1px 2px #000"}),p=ve("span",{width:"18px",textAlign:"right",opacity:".85",fontSize:"11px"});p.textContent=String(o+1)+".";let b=Ia(c.icon,c.label);b.title=r?i.name:`${c.label}${Cs("|点击选择职业"," | Click to choose class")}`,Object.assign(b.style,{width:"19px",height:"19px",objectFit:"contain",flexShrink:"0",cursor:r?"default":"pointer",filter:"drop-shadow(0 1px 1px #000)"}),r||b.addEventListener("click",h=>{h.stopPropagation(),_p(i.name,b,a)});let f=ve("span",{fontWeight:"600",overflow:"hidden",textOverflow:"ellipsis",flex:"1",minWidth:"30px"});f.textContent=i.name;let g=ve("span",{fontSize:"11px",fontVariantNumeric:"tabular-nums",textAlign:"right"});g.textContent=Cs(`${bt(i.value)}(${mt(i.ps)} ${i.rateLabel||"DPS"},${i.pct.toFixed(1)}%)`,`${bt(i.value)} (${mt(i.ps)} ${i.rateLabel||"DPS"}, ${i.pct.toFixed(1)}%)`),Array.isArray(i.breakdown)&&(l.title=i.breakdownHover||(Q.getLanguage()==="en"?"Hover to view damage breakdown":"悬停查看伤害构成"),l.addEventListener("mouseenter",()=>la.show(l,i,e)),l.addEventListener("mouseleave",la.scheduleClose)),m.append(p,b,f,g),l.append(d,m),e.appendChild(l)}),!t.length){let i=ve("div",{padding:"14px",textAlign:"center",opacity:".5"});i.textContent=Cs("暂无战斗数据","No combat data"),e.appendChild(i)}}s(Pi,"renderDetailsRows");var Ya=(()=>{let e=s((N,ce)=>Q.getLanguage()==="en"?ce:N,"langText"),t=s(N=>({legacy:["旧版记录","Legacy record"],archived:["归档","Archived"],reconnect:["断线续传","Reconnect continuation"],nextTier:["进入下一层","Entered next tier"],continued:["继续战斗","Combat continued"],anotherCombat:["开始另一场战斗","Another combat started"],manual:["手动结束","Ended manually"],trialEnded:["公会试炼阶段结束","Guild Trial stage ended"],characterSwitched:["切换角色","Character switched"],disconnected:["连接中断","Connection interrupted"],pageClosed:["页面关闭","Page closed"],pageResumed:["页面恢复","Page resumed"],combat:["战斗","Combat"]})[{旧版记录:"legacy",归档:"archived",断线续传:"reconnect",进入下一层:"nextTier",继续战斗:"continued",开始另一场战斗:"anotherCombat",手动结束:"manual",公会试炼阶段结束:"trialEnded",切换角色:"characterSwitched",连接中断:"disconnected",页面关闭:"pageClosed",页面恢复:"pageResumed",开始战斗:"combat",战斗结束:"combat",战斗:"combat"}[N]||N]?.[Q.getLanguage()==="en"?1:0]||N||e("战斗","Combat"),"localizeReason"),a=2,n=212,i=180,o=!1,r=null,c=null,l=null,d=null,m=null,p="combat",b,f,g,h,_,y,w,k,C,x,T,A,I,q,B,j=null,V=null,O=Q.getMainMode();O==="debug"&&!Q.getDebugMode()&&(O="dps");let M={},L=s(()=>!!(window.matchMedia&&window.matchMedia("(max-width:700px), (pointer:coarse)").matches),"isMobileViewport"),F=s(()=>{let N=window.visualViewport,ce=Number(N?.offsetLeft)||0,oe=Number(N?.offsetTop)||0,ne=Number(N?.width)||Number(window.innerWidth)||0,Se=Number(N?.height)||Number(window.innerHeight)||0;return{left:ce,top:oe,width:ne,height:Se,right:ce+ne,bottom:oe+Se}},"viewportBounds"),R=s(()=>document.querySelector('div[class*="Header_communityBuffs"]')?.getBoundingClientRect?.()??null,"communityBuffRect"),te=s(N=>N&&Number.isFinite(Number(N.left))&&Number.isFinite(Number(N.top)),"isStoredPosition");function X(N,ce){return N?N.mobile||N.desktop?N[ce]??null:ce==="desktop"&&te(N)?N:null:null}s(X,"readResponsivePosition");function W(N,ce,oe){let ne=N?.mobile||N?.desktop?{...N}:{};return te(N)&&!ne.desktop&&(ne.desktop=N),ne[ce]=oe,ne}s(W,"writeResponsivePosition");let K=s((N,ce,oe)=>Math.max(ce,Math.min(N,oe)),"clamp");function le(){if([[h,"dps"],[_,"hps"],[y,"taken"],[w,"debug"]].forEach(([N,ce])=>{if(!N)return;let oe=O===ce;Object.assign(N.style,{color:oe?St:"rgba(255,255,255,.52)",background:oe?"rgba(212,175,55,.12)":"transparent",borderColor:oe?"rgba(212,175,55,.38)":"transparent"})}),k){let N=Q.getShowGraph();Object.assign(k.style,{color:N?St:"rgba(255,255,255,.52)",background:N?"rgba(212,175,55,.12)":"transparent",borderColor:N?"rgba(212,175,55,.38)":"transparent"}),k.setAttribute("aria-pressed",N?"true":"false")}w&&(w.style.display=Q.getDebugMode()?"":"none")}s(le,"refreshModeTabs");function D(N){O=["dps","hps","taken","debug"].includes(N)?N:"dps",O==="debug"&&!Q.getDebugMode()&&(O="dps"),Q.setMainMode(O),le(),kn(qt.get())}s(D,"setMainMode");function re(){let N=V?V.hidden:!Q.getShowGraph();Q.setShowGraph(N),V&&(V.hidden=!N,N&&j&&j.render(qt.get().graphPoints||[])),k&&k.setAttribute("aria-pressed",N?"true":"false"),le()}s(re,"toggleMainGraph");function Ee(){if(!T)return;let N=Q.getLanguage()==="en";T.setAttribute("aria-checked",N?"true":"false"),T.title=N?"Switch to Chinese":"切换为英文",T._knob&&(T._knob.style.transform=N?"translateX(19px)":"translateX(0)"),T._label&&(T._label.textContent=N?"EN":"中")}s(Ee,"refreshLanguageSwitch");function we(){let N=Q.getLanguage()==="en";[[h,"伤害输出(DPS)","Damage Done (DPS)"],[_,"恢复量(HPS)","Healing (HPS)"],[y,"承受伤害(DTPS)","Damage Taken (DTPS)"],[k,"显示或隐藏 DPS 趋势","Show or hide DPS trend"],[w,"职业调试","Class Debug"],[C,"设置","Settings"],[A,"结束并新建记录","End fight and start a new record"],[I,"复制统计","Copy statistics"],[q,"隐藏面板","Hide panel"]].forEach(([ce,oe,ne])=>{ce&&(ce.title=N?ne:oe)}),Ja(g),B&&(B.textContent=N?"Click each combat unit to identify its class accurately and cache it permanently.":"点击战斗界面中的人物,可准确识别职业并永久缓存。")}s(we,"refreshToolbarLanguage");function Re(){la.close(),H(),Q.setLanguage(Q.getLanguage()==="zh"?"en":"zh"),Ee(),we(),kn(qt.get())}s(Re,"toggleLanguage");function Ue(){if(!c)return;let N=Q.getPanelOpacity()/100;c.style.background=`linear-gradient(180deg,rgba(24,24,24,${N}),rgba(8,8,8,${N}))`}s(Ue,"applyPanelOpacity");function Ge(){let N=document.createElement("button");N.type="button",N.dataset.compactAction="true",N.setAttribute("role","switch"),Object.assign(N.style,{position:"relative",width:"43px",height:"23px",padding:"0 4px",cursor:"pointer",background:"rgba(255,255,255,.12)",border:"1px solid rgba(255,255,255,.22)",borderRadius:"12px",color:"#fff",fontSize:"9px",overflow:"hidden"});let ce=ve("span",{position:"absolute",left:"2px",top:"2px",width:"17px",height:"17px",borderRadius:"50%",background:St,boxShadow:"0 1px 4px rgba(0,0,0,.8)",transition:"transform .16s"}),oe=ve("span",{position:"relative",zIndex:"1",fontWeight:"700",textShadow:"0 1px 2px #000"});return N._knob=ce,N._label=oe,N.append(ce,oe),N.addEventListener("mousedown",ne=>ne.stopPropagation()),N.addEventListener("click",ne=>{ne.stopPropagation(),Re()}),T=N,Ee(),N}s(Ge,"buildLanguageSwitch");function H(){x&&(x.remove(),x=null)}s(H,"closeSettingsMenu");function ae(N){if(x){H();return}let ce=Q.getLanguage()==="en",oe=ve("div",{position:"fixed",zIndex:"10005",width:"230px",padding:"10px",boxSizing:"border-box",background:"rgba(18,18,18,.98)",border:"1px solid rgba(212,175,55,.65)",borderRadius:"5px",boxShadow:"0 8px 26px rgba(0,0,0,.85)",color:"#f3f3f3",fontSize:"11px"});oe.dataset.kikimeter="true";let ne=ve("div",{fontWeight:"700",fontSize:"12px",marginBottom:"9px",paddingBottom:"6px",borderBottom:"1px solid rgba(255,255,255,.12)"});ne.textContent=ce?"Settings":"设置";let Se=ve("div",{display:"flex",alignItems:"center",gap:"7px",marginBottom:"10px"}),pe=ve("span",{minWidth:"62px"});pe.textContent=ce?"Opacity":"不透明度";let xe=document.createElement("input");xe.type="range",xe.min="10",xe.max="100",xe.step="5",xe.value=String(Q.getPanelOpacity()),Object.assign(xe.style,{flex:"1",accentColor:St,minWidth:"80px"});let Pe=ve("span",{width:"34px",textAlign:"right",fontVariantNumeric:"tabular-nums"});Pe.textContent=xe.value+"%",xe.addEventListener("input",()=>{Q.setPanelOpacity(xe.value),Pe.textContent=Q.getPanelOpacity()+"%",Ue()}),Se.append(pe,xe,Pe);let Ce=ve("label",{display:"flex",alignItems:"center",gap:"7px",cursor:"pointer"}),Le=document.createElement("input");Le.type="checkbox",Le.checked=Q.getDebugMode(),Le.style.accentColor=St;let $e=ve("span");$e.textContent=ce?"Enable Debug mode":"启用 Debug 模式",Le.addEventListener("change",()=>{Q.setDebugMode(Le.checked),le(),!Le.checked&&O==="debug"&&D("dps")}),Ce.append(Le,$e),oe.append(ne,Se,Ce),document.body.appendChild(oe),x=oe;let Ne=N.getBoundingClientRect(),Me=oe.offsetWidth||230,He=oe.offsetHeight||120,Te=Math.max(5,Math.min(Ne.right-Me,window.innerWidth-Me-5)),Ze=Ne.bottom+4+He<=window.innerHeight?Ne.bottom+4:Math.max(5,Ne.top-He-4);Object.assign(oe.style,{left:Te+"px",top:Ze+"px"}),setTimeout(()=>document.addEventListener("pointerdown",s(function Ye(Bt){if(!x){document.removeEventListener("pointerdown",Ye);return}!x.contains(Bt.target)&&Bt.target!==C&&(H(),document.removeEventListener("pointerdown",Ye))},"outside")),0)}s(ae,"toggleSettingsMenu");function ue(){let N=document.createElement("div");N.id="kikimeter-panel",N.dataset.kikimeter="true";let ce=Q.getRecountSize()||{};Q.getPanelLayoutVersion()<a&&(ce={...ce,height:n},Q.setRecountSize(ce),Q.setShowGraph(!1),Q.setPanelLayoutVersion(a));let oe=Math.max(0,Math.min(Math.max(280,Number(ce.width)||330),F().width-8)),ne=Math.max(0,Math.min(Math.max(i,Number(ce.height)||n),F().height-8)),Se=Q.getPanelOpacity()/100;Object.assign(N.style,{display:"none",position:"fixed",zIndex:"9999",width:oe+"px",height:ne+"px",minWidth:"min(280px, calc(100vw - 8px))",minHeight:`min(${i}px, calc(100vh - 8px))`,maxWidth:"calc(100vw - 8px)",maxHeight:"calc(100vh - 8px)",boxSizing:"border-box",flexDirection:"column",overflow:"hidden",background:`linear-gradient(180deg,rgba(24,24,24,${Se}),rgba(8,8,8,${Se}))`,color:"#f2f2f2",borderRadius:"5px",padding:"8px",boxShadow:"0 6px 24px rgba(0,0,0,.85)",fontSize:"12px",lineHeight:"1.35",border:"1px solid rgba(212,175,55,.58)"});let pe=ve("div",{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:"7px",cursor:"move",touchAction:"none",userSelect:"none",flexShrink:"0",paddingBottom:"5px",borderBottom:"1px solid rgba(255,255,255,.1)"});b=ve("div",{fontWeight:"bold",fontSize:"13px",color:"#e8e8e8",letterSpacing:".2px",flex:"1",minWidth:"0",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}),b.textContent=Q.getLanguage()==="en"?O==="hps"?"Healing":O==="taken"?"Damage Taken":O==="debug"?"Class Debug":"Damage Done":O==="hps"?"恢复量":O==="taken"?"承受伤害":O==="debug"?"职业调试":"伤害输出";let xe=ve("div",{display:"flex",alignItems:"center",gap:"1px",flexShrink:"0"}),Pe=s((Ce,Le,$e)=>{let Ne=document.createElement("button");if(Ne.type="button",Ne.title=Le,Ne.dataset.compactAction="true",Object.assign(Ne.style,{width:"23px",height:"23px",padding:"0",cursor:"pointer",background:"transparent",color:"rgba(255,255,255,.52)",border:"1px solid transparent",borderRadius:"3px",fontSize:"12px",lineHeight:"20px",display:"inline-flex",alignItems:"center",justifyContent:"center"}),String(Ce||"").startsWith("data:image/")||String(Ce||"").includes("/static/media/")){let Me=Ia(Ce,"");Object.assign(Me.style,{width:"17px",height:"17px",objectFit:"contain",pointerEvents:"none"}),Ne._icon=Me,Ne.appendChild(Me)}else Ne.textContent=Ce;return Ne.addEventListener("mousedown",Me=>Me.stopPropagation()),Ne.addEventListener("click",Me=>{Me.stopPropagation(),$e()}),Ne},"iconButton");return g=Gr(()=>{M.onSegmentChange&&M.onSegmentChange()},!0),h=Pe(Wr.attack,"伤害输出(DPS)",()=>D("dps")),_=Pe(Wr.stamina,"恢复量(HPS)",()=>D("hps")),y=Pe(Wr.defense,"承受伤害(DTPS)",()=>D("taken")),k=Pe(Ea.trend,"显示或隐藏 DPS 趋势",re),w=Pe(Ea.debug,"Debug",()=>D("debug")),C=Pe(Ea.settings,"设置",()=>ae(C)),Ge(),A=Pe(Ea.reset,"结束并新建记录",()=>{M.onReset&&M.onReset()}),I=Pe(Ea.copy,"复制统计",()=>{M.onCopy&&M.onCopy(I)}),q=Pe(Ea.close,"隐藏面板",ke),xe.append(g,h,_,y,k,w,C,A,I,T,q),pe.append(b,xe),N.appendChild(pe),le(),we(),B=ve("div",{display:"none",margin:"0 0 7px",padding:"5px 7px",border:"1px solid rgba(63,199,235,.35)",borderRadius:"3px",background:"rgba(63,199,235,.08)",color:"#9bddf3",fontSize:"10px",lineHeight:"1.45"}),B.textContent=e("点击战斗界面中的人物,可准确识别职业并永久缓存。","Click a character in the battle view to identify and cache their class."),N.appendChild(B),f=ve("div",{marginBottom:"8px",paddingBottom:"8px",borderBottom:"1px solid rgba(255,255,255,.1)",flex:"1 1 auto",minHeight:"50px",overflowY:"auto"}),N.appendChild(f),j=Zr(),V=ve("div",{flexShrink:"0",paddingTop:"6px",borderTop:"1px solid rgba(255,255,255,.1)"}),V.hidden=!Q.getShowGraph(),V.append(j.canvas),N.appendChild(V),_e(N,pe),document.body.appendChild(N),N}s(ue,"buildPanel");function _e(N,ce){let oe=null,ne=null,Se=s(()=>L()?"mobile":"desktop","mode"),pe=s(()=>{let Ce=Q.getRecountPos();Q.setRecountPos(W(Ce,Se(),{left:Number.parseFloat(N.style.left)||0,top:Number.parseFloat(N.style.top)||0})),Q.setRecountSize({width:N.offsetWidth,height:N.offsetHeight})},"storeWindowState");ce.addEventListener("pointerdown",Ce=>{if(Ce.button!==0||Ce.target.closest("button,input,select"))return;let Le=N.getBoundingClientRect();if(Object.assign(N.style,{left:Le.left+"px",top:Le.top+"px",right:"auto"}),oe={id:Ce.pointerId,dx:Ce.clientX-Le.left,dy:Ce.clientY-Le.top},ce.setPointerCapture)try{ce.setPointerCapture(Ce.pointerId)}catch{}Ce.preventDefault()}),Object.entries({nw:["0","auto","auto","0","nwse-resize"],ne:["0","0","auto","auto","nesw-resize"],sw:["auto","auto","0","0","nesw-resize"],se:["auto","0","0","auto","nwse-resize"]}).forEach(([Ce,[Le,$e,Ne,Me,He]])=>{let Te=ve("div",{position:"absolute",top:Le,right:$e,bottom:Ne,left:Me,width:"16px",height:"16px",zIndex:"4",cursor:He,touchAction:"none"});Te.dataset.resizeCorner=Ce,Te.addEventListener("pointerdown",Ze=>{if(Ze.button!==0)return;let Ye=N.getBoundingClientRect();if(ne={id:Ze.pointerId,direction:Ce,sx:Ze.clientX,sy:Ze.clientY,rect:Ye},Te.setPointerCapture)try{Te.setPointerCapture(Ze.pointerId)}catch{}Ze.preventDefault(),Ze.stopPropagation()}),N.appendChild(Te)}),window.addEventListener("pointermove",Ce=>{let Le=F();if(oe&&oe.id===Ce.pointerId){let Jr=K(Ce.clientX-oe.dx,Le.left,Math.max(Le.left,Le.right-N.offsetWidth)),$i=K(Ce.clientY-oe.dy,Le.top,Math.max(Le.top,Le.bottom-N.offsetHeight));N.style.left=Jr+"px",N.style.top=$i+"px",Ce.preventDefault();return}if(!ne||ne.id!==Ce.pointerId)return;let $e=Ce.clientX-ne.sx,Ne=Ce.clientY-ne.sy,Me=ne.rect,He=ne.direction,Te=Math.max(0,Le.width-8),Ze=Math.max(0,Le.height-8),Ye=Math.min(280,Te),Bt=Math.min(i,Ze),zt=He.includes("w")?Me.width-$e:Me.width+$e,ea=He.includes("n")?Me.height-Ne:Me.height+Ne;zt=K(zt,Ye,Te),ea=K(ea,Bt,Ze);let Li=He.includes("w")?Me.right-zt:Me.left,Xn=He.includes("n")?Me.bottom-ea:Me.top;Li=K(Li,Le.left,Math.max(Le.left,Le.right-zt)),Xn=K(Xn,Le.top,Math.max(Le.top,Le.bottom-ea)),Object.assign(N.style,{left:Li+"px",top:Xn+"px",right:"auto",width:zt+"px",height:ea+"px"}),Ce.preventDefault()});let Pe=s(Ce=>{let Le=oe&&oe.id===Ce.pointerId,$e=ne&&ne.id===Ce.pointerId;!Le&&!$e||(pe(),oe=null,ne=null)},"finishPointerAction");window.addEventListener("pointerup",Pe),window.addEventListener("pointercancel",Pe)}s(_e,"installWindowControls");function ke(){o=!1,H(),la.close(),c&&(c.style.display="none"),r&&(r.style.filter="none")}s(ke,"close");function ee(){if(!c||!o)return;let N=F(),ce=c.getBoundingClientRect(),oe=ce.width||c.offsetWidth||Number.parseFloat(c.style.width)||280,ne=ce.height||c.offsetHeight||Number.parseFloat(c.style.height)||i,Se=L()?"mobile":"desktop",pe=X(Q.getRecountPos(),Se),xe,Pe;if(te(pe))xe=Number(pe.left),Pe=Number(pe.top);else if(Se==="mobile"&&R()){let Ce=R();xe=Ce.right+6,Pe=Ce.top}else xe=N.right-oe-12,Pe=N.bottom-ne-12;xe=K(xe,N.left+4,Math.max(N.left+4,N.right-oe-4)),Pe=K(Pe,N.top+4,Math.max(N.top+4,N.bottom-ne-4)),Object.assign(c.style,{display:"flex",left:xe+"px",top:Pe+"px",right:"auto"})}s(ee,"placePanel");function de(N,ce){let oe=!!c&&c.style.display!=="none";return(N===void 0?!oe:!!N)?(o=!0,c.style.display="flex",ee(),r&&(r.style.filter="brightness(1.15)"),!0):(ke(),!1)}s(de,"toggle");function De(N,ce,oe){let ne=ve("div",{display:"flex",alignItems:"center",gap:"6px",marginBottom:"3px"}),Se=document.createElement("input");Se.type="checkbox",Se.checked=ce,Se.style.accentColor=St,Se.addEventListener("change",()=>oe(Se.checked));let pe=ve("span",{fontSize:"12px"});return pe.textContent=N,ne.append(Se,pe),ne}s(De,"buildToggle");function tt(){let N=document.createElement("button");N.type="button",N.id="kikimeter-tab-btn",N.dataset.kikimeter="true",N.dataset.kikimeterBound=Xa,N.textContent="DPS",Object.assign(N.style,{display:"inline-flex",alignItems:"center",justifyContent:"center",position:"fixed",zIndex:"9998",cursor:"pointer",background:St,color:"#fff",border:"none",borderRadius:"4px",width:"54px",height:"28px",padding:"0",margin:"0",fontWeight:"600",fontSize:"13px",fontFamily:"inherit",whiteSpace:"nowrap",transition:"filter .12s,left .16s ease",touchAction:"none",boxShadow:"0 2px 9px rgba(0,0,0,.58)",outline:"none",flexShrink:"0",letterSpacing:".2px"});let ce=null,oe=!1,ne=null,Se=s(()=>L()?"mobile":"desktop","mode"),pe=s(($e=54,Ne=28)=>{let Me=F();if(Se()==="mobile"){let He=R();return He?{left:He.right+6,top:He.top+Math.max(0,(He.height-Ne)/2),edge:""}:{left:Me.left+8,top:Me.top+8,edge:""}}return{left:Me.left+130,top:Me.top+80,edge:""}},"defaultPos"),xe=s(($e,Ne)=>X(Q.getLauncherPos(),Se())||pe($e,Ne),"savedPos"),Pe=s(($e=!1)=>{let Ne=N.offsetWidth||54,Me=N.offsetHeight||28,He=xe(Ne,Me),Te=F(),Ze=Number(He.left),Ye=Number(He.top);Number.isFinite(Ze)||(Ze=pe(Ne,Me).left),Number.isFinite(Ye)||(Ye=pe(Ne,Me).top),Ye=K(Ye,Te.top,Math.max(Te.top,Te.bottom-Me)),Se()==="mobile"?Ze=K(Ze,Te.left,Math.max(Te.left,Te.right-Ne)):He.edge==="left"?Ze=$e?Te.left:Te.left-(Ne-14):He.edge==="right"?Ze=$e?Math.max(Te.left,Te.right-Ne):Math.max(Te.left,Te.right-14):Ze=K(Ze,Te.left,Math.max(Te.left,Te.right-Ne)),Object.assign(N.style,{left:Ze+"px",top:Ye+"px"})},"place"),Ce=s(()=>{Se()!=="mobile"&&(ne!==null&&clearTimeout(ne),ne=setTimeout(()=>Pe(!1),350))},"hideAtEdge");N._placeLauncher=Pe,N.addEventListener("mouseenter",()=>{ne!==null&&clearTimeout(ne),N.style.filter="brightness(1.15)",Pe(!0)}),N.addEventListener("mouseleave",()=>{N.style.filter=o?"brightness(1.15)":"none",xe().edge&&Ce()}),N.addEventListener("pointerdown",$e=>{if($e.button!==void 0&&$e.button!==0)return;$e.stopPropagation(),ne!==null&&clearTimeout(ne),Pe(!0);let Ne=N.getBoundingClientRect();if(ce={id:$e.pointerId,dx:$e.clientX-Ne.left,dy:$e.clientY-Ne.top,startX:$e.clientX,startY:$e.clientY},oe=!1,N.setPointerCapture)try{N.setPointerCapture($e.pointerId)}catch{}}),N.addEventListener("pointermove",$e=>{if(!ce||ce.id!==$e.pointerId||(Math.hypot($e.clientX-ce.startX,$e.clientY-ce.startY)>4&&(oe=!0),!oe))return;let Ne=N.offsetWidth||54,Me=N.offsetHeight||28,He=F(),Te=K($e.clientX-ce.dx,He.left,Math.max(He.left,He.right-Ne)),Ze=K($e.clientY-ce.dy,He.top,Math.max(He.top,He.bottom-Me));N.style.transition="none",Object.assign(N.style,{left:Te+"px",top:Ze+"px"}),$e.preventDefault()});let Le=s($e=>{if(!ce||ce.id!==$e.pointerId)return;let Ne=N.offsetWidth||54,Me=N.getBoundingClientRect(),He=F(),Te="";Se()!=="mobile"&&(Me.left<=He.left+24?Te="left":Me.right>=He.right-24&&(Te="right")),Q.setLauncherPos(W(Q.getLauncherPos(),Se(),{left:K(Me.left,He.left,Math.max(He.left,He.right-Ne)),top:K(Me.top,He.top,Math.max(He.top,He.bottom-(N.offsetHeight||28))),edge:Te})),ce=null,N.style.transition="filter .12s,left .16s ease",Te&&Ce()},"finishDrag");return N.addEventListener("pointerup",Le),N.addEventListener("pointercancel",Le),N.addEventListener("click",$e=>{if($e.stopPropagation(),oe){oe=!1;return}de(void 0,N)}),setTimeout(()=>Pe(!1),0),N}s(tt,"buildTabBtn");function Rt(){let N=document.querySelectorAll("#kikimeter-tab-btn");return N.forEach((ce,oe)=>{oe>0&&ce.remove()}),N[0]||null}s(Rt,"dedupeAndGetButton");function Kr(){let N=[...new Set([...document.querySelectorAll("div."+Zu),...document.querySelectorAll('div[class*="TabsComponent_tabsContainer"]')])];for(let ce of N){let oe=ce.textContent;if(oe.includes("Combat Zones")||oe.includes("战斗区域")||oe.includes("戰鬥區域")||oe.includes("Labyrinth")&&oe.includes("Room")&&oe.includes("Automation")||oe.includes("迷宫")&&(oe.includes("房间")||oe.includes("自动化"))||oe.includes("迷宮")&&(oe.includes("房間")||oe.includes("自動化"))||Ku(ce)||Xu(ce))return ce}return null}s(Kr,"findCombatTabBar");function ma(N){N.title=Q.getLanguage()==="en"?"Open DPS meter":"打开 DPS 统计",N._placeLauncher&&N._placeLauncher(!1)}s(ma,"setTabButtonStyle");function xn(){let N=Rt();if(N&&N.dataset.kikimeterBound!==Xa){let ce=tt();N.replaceWith(ce),N=ce}return N?(N.style.display="inline-flex",ma(N),N.parentElement!==document.body&&document.body.appendChild(N),r=N,!0):(r=tt(),ma(r),document.body.appendChild(r),!0)}s(xn,"inject");function Kn(N){M=N,c?c.isConnected||document.body.appendChild(c):c=ue(),r=null,xn(),l&&l.disconnect(),l=new MutationObserver(()=>{d||(d=setTimeout(()=>{d=null,xn()},200))}),l.observe(document.body,{childList:!0,subtree:!0}),m&&(window.removeEventListener("resize",m),window.visualViewport?.removeEventListener("resize",m)),m=s(()=>{r?._placeLauncher?.(!1),ee()},"viewportHandler"),window.addEventListener("resize",m),window.visualViewport?.addEventListener("resize",m)}s(Kn,"init");function Es(){ke(),d&&(clearTimeout(d),d=null),l&&(l.disconnect(),l=null),m&&(window.removeEventListener("resize",m),window.visualViewport?.removeEventListener("resize",m),m=null),document.querySelectorAll("#kikimeter-tab-btn").forEach(N=>N.remove()),document.querySelector("#kikimeter-segment-menu")?.remove(),document.querySelector("#kikimeter-class-picker")?.remove(),c&&c.remove(),r=null}s(Es,"destroy");function Xr(N,ce,oe,ne,Se,pe,xe){if(!f)return;let Pe=N.map(Ce=>({name:Ce,value:oe(Ce),ps:ce(Ce),pct:pe(Ce),rateLabel:"DPS"})).sort((Ce,Le)=>Le.value-Ce.value);Pi(f,Pe,()=>Xr(N,ce,oe,ne,Se,pe,xe))}s(Xr,"renderPlayers");function kn(N){if(Ja(g),le(),we(),b&&(b.textContent=Q.getLanguage()==="en"?O==="hps"?"Healing":O==="taken"?"Damage Taken":O==="debug"?"Class Debug":"Damage Done":O==="hps"?"恢复量":O==="taken"?"承受伤害":O==="debug"?"职业调试":"伤害输出"),j&&j.render(N.graphPoints||[]),B&&(B.style.display=O!=="debug"&&N.type==="trial"?"block":"none"),O==="debug"){f.innerHTML="";let ne=ve("div",{fontSize:"11px",lineHeight:"1.55",color:"rgba(255,255,255,.76)",marginBottom:"7px"});ne.textContent=e("全量探针会从点击开始持续被动记录全部游戏入站消息,直到你手动结束;不会主动发送任何请求。聊天正文和凭证字段会脱敏,结束后请在刷新页面前下载。","The full probe passively records all incoming game messages after you start it until you stop it manually. It sends no requests. Chat content and credential fields are redacted; download the capture before refreshing the page.");let Se=ft.status(),pe=ve("div",{display:"flex",gap:"5px",marginBottom:"7px"}),xe=document.createElement("button");xe.textContent=Se.active?e("全量采集中…","Capturing…"):e("开始全量采集","Start full capture"),xe.disabled=Se.active;let Pe=document.createElement("button");Pe.textContent=e("结束采集","Stop capture"),Pe.disabled=!Se.active;let Ce=document.createElement("button");Ce.textContent=e("⬇ 下载全量 MSG","⬇ Download full messages"),Ce.disabled=Se.active||!Se.startedAt,[xe,Pe,Ce].forEach(He=>Object.assign(He.style,{flex:"1",cursor:He.disabled?"default":"pointer",padding:"5px 2px",fontSize:"9px",borderRadius:"3px",border:"1px solid rgba(255,255,255,.18)",background:"rgba(255,255,255,.07)",color:"#e8eaf6",opacity:He.disabled?".45":"1"})),xe.addEventListener("mousedown",He=>{He.preventDefault(),xe.disabled||ft.start()}),Pe.addEventListener("mousedown",He=>{He.preventDefault(),Pe.disabled||ft.stop()}),Ce.addEventListener("mousedown",He=>{He.preventDefault(),!Ce.disabled&&ft.download()&&(Ce.textContent=e("✓ 已下载","✓ Downloaded"),setTimeout(()=>Ce.textContent=e("⬇ 下载全量 MSG","⬇ Download full messages"),1500))}),pe.append(xe,Pe,Ce);let Le=ve("pre",{margin:"0 0 7px",padding:"7px",maxHeight:"210px",overflow:"auto",whiteSpace:"pre-wrap",wordBreak:"break-all",background:"rgba(0,0,0,.35)",border:"1px solid rgba(255,255,255,.12)",borderRadius:"3px",fontSize:"9px",lineHeight:"1.45"});Le.textContent=Se.active?e(`全量探针正在采集,已记录 ${Se.messageCount} 条消息,正文约 ${(Se.captureChars/1024/1024).toFixed(2)} MB;点击“结束采集”才会停止。`,`The full probe is capturing. ${Se.messageCount} messages recorded (${(Se.captureChars/1024/1024).toFixed(2)} MB). Click “Stop capture” to stop it.`):Se.startedAt?ft.report().slice(0,6e3):Ot.report();let $e=ve("div",{display:"flex",gap:"6px"}),Ne=document.createElement("button");Ne.textContent=e("📋 复制完整探针报告","📋 Copy full probe report");let Me=document.createElement("button");Me.textContent=e("清空报告","Clear report"),[Ne,Me].forEach(He=>Object.assign(He.style,{flex:"1",cursor:"pointer",padding:"5px",fontSize:"10px",borderRadius:"3px",border:"1px solid rgba(255,255,255,.18)",background:"rgba(255,255,255,.07)",color:"#e8eaf6"})),Ne.addEventListener("click",()=>navigator.clipboard.writeText(ft.report()).then(()=>{Ne.textContent=e("✓ 已复制","✓ Copied"),setTimeout(()=>Ne.textContent=e("📋 复制完整探针报告","📋 Copy full probe report"),1500)}).catch(()=>{})),Me.addEventListener("click",()=>{Ot.clear(),ft.clear(),kn(qt.get())}),$e.append(Ne,Me),f.append(ne,pe,Le,$e);return}let ce=O==="hps"?(N.players||[]).reduce((ne,Se)=>ne+(Number(Se.healing)||0),0):O==="taken"?(N.players||[]).reduce((ne,Se)=>ne+(Number(Se.taken)||0),0):N.teamDamage,oe=(N.players||[]).map(ne=>({name:ne.name,synthetic:ne.synthetic,value:O==="hps"?Number(ne.healing)||0:O==="taken"?Number(ne.taken)||0:Number(ne.damage)||0,ps:O==="hps"?Number(ne.hps)||0:O==="taken"?Number(ne.takenPs)||0:Number(ne.dps)||0,pct:ce>0?(O==="hps"?Number(ne.healing)||0:O==="taken"?Number(ne.taken)||0:Number(ne.damage)||0)*100/ce:0,rateLabel:O==="hps"?"HPS":O==="taken"?"DTPS":"DPS",breakdown:O==="dps"?ne.breakdown:O==="taken"?ne.takenBreakdown:null,breakdownTitle:O==="taken"?Q.getLanguage()==="en"?"Damage Taken Sources":"承伤来源":void 0,breakdownRateLabel:O==="taken"?"DTPS":"DPS",breakdownHover:O==="taken"?Q.getLanguage()==="en"?"Hover to view monster and skill sources":"悬停查看怪物与技能来源":void 0,breakdownEmpty:O==="taken"?Q.getLanguage()==="en"?"No damage-taken sources":"暂无承伤来源":void 0})).filter(ne=>ne.value>0).sort((ne,Se)=>Se.value-ne.value);Pi(f,oe,()=>kn(qt.get()))}s(kn,"renderView");function Is(N){let ce=new Date(N.date),oe=ce.toLocaleDateString()+" "+ce.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}),ne=ca(N.durationSeconds),Se=N.teamDamage,pe=e(`=== KikiMeter 战斗记录|${oe}|${ne} ===
`,`=== KikiMeter Combat Record | ${oe} | ${ne} ===
`);return pe+=e(`团队:${mt(N.teamDps||0)} DPS|总伤害 ${bt(Se||0)}`,`Team: ${mt(N.teamDps||0)} DPS | Total damage ${bt(Se||0)}`),N.teamKills>0&&(pe+=e(`|击杀 ${N.teamKills}`,` | Kills ${N.teamKills}`)),pe+=`
`,(N.players||[]).forEach(xe=>{let Pe=Se>0?(xe.damage/Se*100).toFixed(0):"0",Ce=xe.name.padEnd(12).slice(0,12);pe+=Ce+e(":",": ")+mt(xe.dps||0).padStart(6)+e(" DPS|"," DPS | "),pe+=bt(xe.damage).padStart(7)+" ("+Pe+"%)",xe.kills>0&&(pe+=e(`|击杀 ${xe.kills}`,` | Kills ${xe.kills}`)),xe.hps>.1&&(pe+=e(`|HPS ${mt(xe.hps)}`,` | HPS ${mt(xe.hps)}`)),pe+=`
`}),pe}s(Is,"entryToText");function fa(N){N.innerHTML="";let ce=[{id:"combat",label:e("普通战斗","Combat")},{id:"trial",label:e("公会试炼","Guild Trial")},{id:"labyrinth",label:e("迷宫","Labyrinth")}],oe=ve("div",{display:"flex",gap:"4px",marginBottom:"8px"});ce.forEach(pe=>{let xe=document.createElement("button");xe.textContent=pe.label;let Pe=p===pe.id;Object.assign(xe.style,{flex:"1",cursor:"pointer",fontSize:"11px",padding:"4px 0",borderRadius:"4px",border:"none",fontWeight:Pe?"700":"400",background:Pe?St:"rgba(255,255,255,.08)",color:Pe?"#fff":"rgba(255,255,255,.65)",transition:"background .12s"}),xe.addEventListener("click",()=>{p=pe.id,fa(N)}),oe.appendChild(xe)}),N.appendChild(oe);let ne=gt.getAll(p);if(!ne.length){let pe=ve("div",{opacity:".5",fontSize:"11px",padding:"6px 0"});pe.textContent=e("还没有保存的战斗记录。","No saved combat records yet."),N.appendChild(pe);return}ne.forEach((pe,xe)=>{let Pe=new Date(pe.date||pe.startedAt),Ce=Pe.toLocaleDateString()+" "+Pe.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}),Le=ve("div",{marginBottom:"8px",paddingBottom:"8px",borderBottom:xe<ne.length-1?"1px solid rgba(255,255,255,.07)":"none"}),$e=ve("div",{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"2px"}),Ne=ve("span",{fontSize:"11px",color:"#a5b4fc",fontWeight:"bold"});Ne.textContent=Ce+" · "+ca(pe.durationSeconds||pe.durationMs/1e3||0);let Me=ve("button",{fontSize:"10px",cursor:"pointer",background:"transparent",color:"#93c5fd",border:"none",padding:"0 2px"});Me.textContent="📋",Me.title=e("复制这场战斗","Copy this combat record"),Me.addEventListener("click",Te=>{Te.stopPropagation(),navigator.clipboard.writeText(Is(pe)).catch(()=>{}),Me.textContent="✓",setTimeout(()=>{Me.textContent="📋"},1500)}),$e.append(Ne,Me),Le.appendChild($e);let He=ve("div",{fontSize:"11px",opacity:".75",marginBottom:"3px"});if(He.textContent=e(`团队:${mt(pe.teamDps||0)} DPS · ${bt(pe.teamDamage||0)}${pe.teamKills>0?` · ${pe.teamKills} 次击杀`:""} · ${(pe.fragments||[]).length||1} 个片段`,`Team: ${mt(pe.teamDps||0)} DPS · ${bt(pe.teamDamage||0)}${pe.teamKills>0?` · ${pe.teamKills} kills`:""} · ${(pe.fragments||[]).length||1} fragments`),Le.appendChild(He),(pe.fragments||[]).length>1){let Te=document.createElement("details");Te.dataset.kikimeter="true";let Ze=document.createElement("summary");Ze.textContent=e("查看断线续传片段","View reconnect fragments"),Ze.style.cursor="pointer",Te.appendChild(Ze),pe.fragments.forEach((Ye,Bt)=>{let zt=ve("div",{fontSize:"10px",opacity:".65",paddingLeft:"9px"});zt.textContent=e(`片段 ${Bt+1}|${t(Ye.reason)}|${ca((Ye.durationMs||0)/1e3)}|伤害 ${bt(Ye.teamDamage||0)}`,`Fragment ${Bt+1} | ${t(Ye.reason)} | ${ca((Ye.durationMs||0)/1e3)} | Damage ${bt(Ye.teamDamage||0)}`),Te.appendChild(zt)}),Le.appendChild(Te)}(pe.players||[]).forEach(Te=>{Te.classId&&qe.setDetected(Te.name,Te.classId);let Ze=pe.teamDamage>0?(Te.damage/pe.teamDamage*100).toFixed(0):"0",Ye=ve("div",{fontSize:"11px",display:"flex",alignItems:"center",gap:"4px"}),Bt=Ia(qe.get(Te.name).icon,qe.get(Te.name).label);Object.assign(Bt.style,{width:"15px",height:"15px",objectFit:"contain"});let zt=ve("span",{color:"#e8eaf6"});zt.textContent=Te.name;let ea=ve("span",{opacity:".7",marginLeft:"auto"});ea.textContent=mt(Te.dps||0)+e("/秒 · ","/s · ")+bt(Te.damage||0)+" ("+Ze+"%)",Ye.append(Bt,zt,ea),Le.appendChild(Ye)}),N.appendChild(Le)});let Se=document.createElement("button");Se.textContent=e(`清空${(ce.find(pe=>pe.id===p)||{}).label}记录`,`Clear ${(ce.find(pe=>pe.id===p)||{}).label} records`),Object.assign(Se.style,{width:"100%",cursor:"pointer",background:"transparent",color:"rgba(255,255,255,.3)",border:"1px solid rgba(255,255,255,.15)",borderRadius:"4px",padding:"4px",fontSize:"11px",marginTop:"4px"}),Se.addEventListener("click",()=>{gt.clear(p),fa(N)}),N.appendChild(Se)}return s(fa,"renderHistory"),{init:Kn,destroy:Es,toggle:de,close:ke,isOpen:s(()=>o,"isOpen"),renderPlayers:Xr,renderView:kn,refreshSegments:s(()=>Ja(g),"refreshSegments")}})();var b7=(()=>{let e=s((y,w)=>Q.getLanguage()==="en"?w:y,"langText"),t=[{id:"dmg",zh:"造成伤害",en:"Damage Done",value:"damage",perSecond:"dps"},{id:"heal",zh:"恢复量",en:"Healing",value:"healing",perSecond:"hps"},{id:"taken",zh:"承受伤害",en:"Damage Taken",value:"taken",perSecond:"takenPs"}],a=null,n=null,i=null,o=null,r=0,c=!1,l=null,d=null,m=new Set;function p(y){let w=t.findIndex(k=>k.id===y);return w>=0?w:0}s(p,"modeById");function b(){let y=!Q.getRecountShowGraph();Q.setRecountShowGraph(y),d&&(d.style.display=y?"block":"none")}s(b,"toggleGraph");function f(){if(a)return;r=p(Q.getRecountMode()),a=document.createElement("div"),a.dataset.kikimeter="true",Object.assign(a.style,{position:"fixed",zIndex:"9999",background:"linear-gradient(180deg,rgba(24,24,24,.98),rgba(8,8,8,.98))",border:"1px solid rgba(212,175,55,.58)",borderRadius:"5px",fontSize:"11px",color:"#f2f2f2",boxShadow:"0 4px 16px rgba(0,0,0,.6)",userSelect:"none"});let y=Q.getRecountPos(),w=Q.getRecountSize()||{width:270,height:430},k=Math.max(120,Math.min(w.width,window.innerWidth-16)),C=y&&y.left!=null?y.left:12;a.style.left=Math.max(0,Math.min(C,window.innerWidth-k))+"px",a.style.top=y&&y.top!=null?y.top+"px":"90px",a.style.width=k+"px",a.style.maxWidth="calc(100vw - 8px)",a.style.boxSizing="border-box";let x=document.createElement("div");Object.assign(x.style,{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"4px 6px",cursor:"move",background:"rgba(255,255,255,.07)",borderRadius:"6px 6px 0 0",fontWeight:"bold"}),i=document.createElement("span");let T=document.createElement("span"),A=s((F,R,te)=>{let X=document.createElement("button");return X.textContent=F,X.title=R,Object.assign(X.style,{cursor:"pointer",background:"transparent",color:"rgba(255,255,255,.6)",border:"none",font:"12px monospace",padding:"0 3px"}),X.addEventListener("mouseenter",()=>X.style.color="#fff"),X.addEventListener("mouseleave",()=>X.style.color="rgba(255,255,255,.6)"),X.addEventListener("mousedown",W=>W.stopPropagation()),X.addEventListener("click",W=>{W.stopPropagation(),te()}),X},"mkBtn");T.appendChild(A("⚔",e("造成伤害","Damage Done"),()=>g(0))),T.appendChild(A("✚",e("恢复量","Healing"),()=>g(1))),T.appendChild(A("🛡",e("承受伤害","Damage Taken"),()=>g(2)));let I=A("📈",e("显示或隐藏趋势图","Show or hide trend graph"),()=>b());T.appendChild(I),T.appendChild(A("✕",e("关闭","Close"),()=>h(!1))),x.append(i,T),a.appendChild(x),o=Gr(()=>{Ya.refreshSegments(),_()}),Object.assign(o.style,{display:"block",width:"calc(100% - 8px)",margin:"4px",boxSizing:"border-box",flex:"none"}),a.appendChild(o),n=document.createElement("div"),Object.assign(n.style,{maxHeight:w.height+"px",overflowY:"auto",padding:"3px"}),a.appendChild(n),l=Zr(),d=document.createElement("div"),Object.assign(d.style,{padding:"4px 6px 6px 6px"}),d.appendChild(l.canvas),d.style.display=Q.getRecountShowGraph()?"block":"none",a.appendChild(d);let q=document.createElement("div");Object.assign(q.style,{position:"absolute",right:"0",bottom:"0",width:"14px",height:"14px",cursor:"nwse-resize",background:"transparent"}),q.innerHTML='<svg width="10" height="10" style="position:absolute;right:2px;bottom:2px;opacity:.4"><path d="M10 0 L10 10 L0 10 Z" fill="currentColor"/></svg>',a.appendChild(q);let B=null,j=180,V=520,O=100,M=800;q.addEventListener("mousedown",F=>{B={sx:F.clientX,sy:F.clientY,sw:a.offsetWidth,sh:n.offsetHeight},F.preventDefault(),F.stopPropagation()}),window.addEventListener("mousemove",F=>{if(!B)return;let R=Math.max(120,Math.min(V,window.innerWidth-8)),te=Math.min(R,Math.max(Math.min(j,R),B.sw+(F.clientX-B.sx))),X=Math.min(M,Math.max(O,B.sh+(F.clientY-B.sy)));a.style.width=te+"px",n.style.maxHeight=X+"px"}),window.addEventListener("mouseup",()=>{B&&(B=null,Q.setRecountSize({width:a.offsetWidth,height:n.offsetHeight}))});let L=null;x.addEventListener("mousedown",F=>{L={dx:F.clientX-a.offsetLeft,dy:F.clientY-a.offsetTop},F.preventDefault()}),window.addEventListener("mousemove",F=>{L&&(a.style.left=Math.max(0,Math.min(F.clientX-L.dx,window.innerWidth-a.offsetWidth))+"px",a.style.top=Math.max(0,F.clientY-L.dy)+"px")}),window.addEventListener("mouseup",()=>{L&&(L=null,Q.setRecountPos({left:a.offsetLeft,top:a.offsetTop}))}),document.body.appendChild(a),a.style.display="none"}s(f,"build");function g(y){r=y,Q.setRecountMode(t[y].id),_()}s(g,"setMode");function h(y){return f(),c=y===void 0?!c:y,c&&Ya.close(),a.style.display=c?"block":"none",c&&_(),c}s(h,"toggle");function _(y=qt.get()){if(!c||!a)return;Ja(o),l&&Q.getRecountShowGraph()&&l.render(y.graphPoints||[]);let w=t[r];i.textContent=e(w.zh,w.en);let k=(y.players||[]).map(T=>({n:T.name,synthetic:T.synthetic,v:Number(T[w.value])||0,ps:Number(T[w.perSecond])||0,breakdown:w.id==="dmg"?T.breakdown:w.id==="taken"?T.takenBreakdown:null})).filter(T=>T.v>0).sort((T,A)=>A.v-T.v),C=k.reduce((T,A)=>T+A.v,0)||1,x=k.length?k[0].v:1;Pi(n,k.map(T=>({name:T.n,synthetic:T.synthetic,value:T.v,ps:T.ps,pct:100*T.v/C,breakdown:T.breakdown,rateLabel:w.id==="heal"?"HPS":w.id==="taken"?"DTPS":"DPS",breakdownTitle:w.id==="taken"?Q.getLanguage()==="en"?"Damage Taken Sources":"承伤来源":void 0,breakdownRateLabel:w.id==="taken"?"DTPS":"DPS"})),_)}return s(_,"render"),{toggle:h,render:_,isOpen:s(()=>c,"isOpen")}})();var da=s((e,t)=>Q.getLanguage()==="en"?t:e,"langText");function Yu(e){Ju();let t=[],a=!1,n=!1,i=!1,o=0,r=gt.loadActive();if(r)try{me.restore(r),t=me.getAllPlayerNames(),i=!0,n=!0}catch{gt.clearActive(),console.warn("[KikiMeter] 已忽略损坏的活动战斗缓存。")}function c(){let h=me.serialize(),_=h.meta||{};if(!n&&!_.combatKey)return null;let y=t.length?t:me.getAllPlayerNames(),w=Xe.isGuildBattle()?"trial":Xe.isInLabyrinth()?"labyrinth":_.type||"combat";return{schemaVersion:2,id:_.id||"fight-"+(_.characterId||"unknown")+"-"+(_.combatKey||Date.now()),type:w,characterId:_.characterId||"unknown",combatKey:_.combatKey||"",startedAt:_.startedAt||h.savedAt,endedAt:h.savedAt,date:_.startedAt||h.savedAt,durationMs:h.durationMs,durationSeconds:Math.floor(h.durationMs/1e3),teamDps:h.durationMs>0?h.teamDamage/(h.durationMs/1e3):0,teamDamage:h.teamDamage,teamKills:me.getTeamKills(),classes:h.classes,fragments:h.fragments,graph:h.graph,players:y.map(k=>({name:k,classId:qe.classFor(k),damage:me.getPlayerDamage(k),dps:me.getPlayerDps(k),kills:me.getPlayerKills(k),hps:me.getPlayerHps(k),healing:me.getPlayerHealing(k),taken:me.getPlayerTaken(k),sources:me.getPlayerDamageSources(k),takenSources:me.getPlayerTakenSources(k)}))}}s(c,"buildHistoryEntry");function l(h="归档"){let _=c();return _?(_.endReason=h,gt.push(_),_):null}s(l,"saveCurrentSession");function d(h=!1){if(!n)return!1;let _=Date.now();return!h&&_-o<2e3?!1:(o=_,gt.saveActive(me.serialize()))}s(d,"persistActive");function m(h,_){let y=String(h.characterId||Xe.getCharacterId()||"unknown"),w=yn.resolve(h,_,y),k=w.key,C=me.getMeta(),x=C.combatKey&&yn.matches(C,w,_,y),T=Array.isArray(C.trialStageIds)?C.trialStageIds:[],A=_==="trial"?String(h.stageId||w.rawKey||""):"",I=A&&!T.includes(A);if(x)me.isFrozen()&&(i?me.resume("断线续传"):_==="trial"&&I?me.resumeTrialTier("进入下一层"):me.resume("继续战斗")),_==="trial"&&me.setMeta({id:"fight-"+y+"-"+k,combatKey:k,type:"trial",trialDay:w.day,trialStageIds:I?[...T,A]:T,manualReset:!1});else{C.combatKey&&(me.freeze("开始另一场战斗"),l("开始另一场战斗"));let q=new Date().toISOString();me.reset({id:"fight-"+y+"-"+(k||Date.now()),combatKey:k,characterId:y,startedAt:q,type:_||"combat"}),_==="trial"&&me.setMeta({trialDay:w.day,trialStageIds:A?[A]:[],manualReset:!1})}qe.applyClasses(h.classes),n=!0,i=!1,d(!0)}s(m,"beginEncounter");function p(h){let _=me.getMeta();me.freeze(h),l(h),gt.clearActive();let y=Date.now();me.reset({id:"fight-"+(_.characterId||"unknown")+"-manual-"+y,combatKey:(_.combatKey||"manual")+"-manual-"+y,characterId:_.characterId||Xe.getCharacterId()||"unknown",startedAt:new Date(y).toISOString(),type:_.type||"combat",manualReset:!0}),n=!0,t=me.getAllPlayerNames(),d(!0),console.info("[KikiMeter] 已结束当前记录并新建记录:"+h)}s(p,"resetSession");function b(){let h=qt.get(),_=h.teamDamage,y=new Date,w=y.toLocaleDateString()+" "+y.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}),k=da(`=== 银河奶牛 DPS 统计|${h.label}|${w}|${ca(h.elapsed)} ===
`,`=== MWI DPS Meter | ${h.label} | ${w} | ${ca(h.elapsed)} ===
`);return k+=da(`团队:${mt(h.teamDps)} DPS|总伤害 ${bt(_)}`,`Team: ${mt(h.teamDps)} DPS | Total damage ${bt(_)}`),h.teamKills>0&&(k+=da(`|击杀 ${h.teamKills}`,` | Kills ${h.teamKills}`)),k+=`
`,h.players.forEach(C=>{let x=_>0?((Number(C.damage)||0)/_*100).toFixed(0):"0",T=C.name.padEnd(12).slice(0,12);k+=T+da(":",": ")+mt(C.dps||0).padStart(6)+da(" DPS|"," DPS | "),k+=bt(Number(C.damage)||0).padStart(7)+" ("+x+"%)",Number(C.kills)>0&&(k+=da(`|击杀 ${C.kills}`,` | Kills ${C.kills}`)),Q.getShowHealing()&&Number(C.hps)>.1&&(k+=da(`|HPS ${mt(C.hps)}`,` | HPS ${mt(C.hps)}`)),k+=`
`}),k}s(b,"buildClipboardText");function f(){let h=qt.get();Ya.renderView(h)}s(f,"renderSelectedPanels"),Ya.init({onReset:s(()=>p("手动结束"),"onReset"),onSegmentChange:f,onCopy:s(h=>{let _=h&&h.dataset.compactAction==="true",y=h&&h.textContent;navigator.clipboard.writeText(b()).then(()=>{h.textContent=_?"✓":da("✓ 已复制","✓ Copied"),setTimeout(()=>{h.textContent=y||da("复制统计","Copy statistics")},2e3)}).catch(()=>{h.textContent=_?"!":da("✗ 复制失败","✗ Copy failed"),setTimeout(()=>{h.textContent=y||da("复制统计","Copy statistics")},2e3)})},"onCopy")}),e.event(Xe.bus,"guildBattleDetected",h=>{let _={...h.detail||{}};_.combatKey||(_.combatKey="guild-fallback-"+yn.dayStamp(new Date)),_.stageId||(_.stageId=String(_.combatKey)),m(_,"trial")}),e.event(Xe.bus,"guildTrialEnded",()=>{me.freeze("公会试炼阶段结束"),l("公会试炼阶段结束"),d(!0),n=!0,console.info("[KikiMeter] 公会试炼阶段已结束;当天进入下一关时将继续累计。")}),e.event(Xe.bus,"guildSlotRenamed",h=>{me.renamePlayer(h.detail.oldName,h.detail.newName)}),e.event(Xe.bus,"newBattle",h=>{h.detail&&h.detail.parallelGuildBattle||(m(h.detail,Xe.isInLabyrinth()?"labyrinth":"combat"),t=h.detail.names,a=h.detail.isBoss,me.setBoss(h.detail.isBoss))});function g(h={}){return Uu(h,me.getMeta())}return s(g,"acceptsCombatEvent"),e.event(Xe.bus,"damage",h=>{g(h.detail)&&(me.addTeamDamage(h.detail.amount,h.detail.ts),d())}),e.event(Xe.bus,"playerDamage",h=>{g(h.detail)&&me.addPlayerDamage(h.detail.name,h.detail.amount,h.detail.source)}),e.event(Xe.bus,"healing",h=>{g(h.detail)&&me.addPlayerHealing(h.detail.name,h.detail.amount)}),e.event(Xe.bus,"playerDamageTaken",h=>{g(h.detail)&&me.addPlayerTaken(h.detail.name,h.detail.amount,h.detail.source)}),e.event(Xe.bus,"kill",h=>{g(h.detail)&&h.detail.name&&me.addPlayerKill(h.detail.name)}),e.event(Xe.bus,"socketReconnected",h=>{let _=String(h.detail&&h.detail.characterId||"unknown"),y=me.getMeta();y.characterId&&y.characterId!=="unknown"&&_!=="unknown"&&String(y.characterId)!==_?(me.freeze("切换角色"),l("切换角色"),gt.clearActive(),me.reset(),n=!1,t=[]):n&&(me.pause("连接中断"),d(!0),i=!0)}),e.event(Ot.bus,"change",()=>{Q.getMainMode()==="debug"&&f()}),e.event(ft.bus,"change",()=>{Q.getMainMode()==="debug"&&f()}),e.event(qe.bus,"change",()=>{f(),d()}),e.event(Xe.bus,"newCombatInstance",()=>{}),e.event(document,"visibilitychange",()=>{document.hidden&&d(!0)}),e.event(window,"pagehide",()=>{n&&(me.pause("页面关闭"),d(!0))}),e.event(window,"pageshow",h=>{h.persisted&&n&&me.isFrozen()&&(me.resume("页面恢复"),d(!0))}),e.interval(()=>{me.advanceBuckets(),d(),Ya.isOpen()&&f()},250),Object.assign(_n,{enabled:!0,bus:Xe.bus,getSessionDps:me.getTeamDps,getSessionDamage:me.getTeamDamage,getTeamKills:me.getTeamKills,getPlayerDps:me.getPlayerDps,getPlayerDamage:me.getPlayerDamage,getPlayerDamageSources:me.getPlayerDamageSources,getPlayerTakenSources:me.getPlayerTakenSources,getPlayerTaken:me.getPlayerTaken,getPlayerHps:me.getPlayerHps,getPlayerKills:me.getPlayerKills,getCurrentBattle:s(()=>me.serialize(),"getCurrentBattle"),getBattleHistory:s(h=>gt.getAll(h),"getBattleHistory"),getDisplayedSegment:s(()=>qt.get(),"getDisplayedSegment"),listSegments:s(()=>Na.options().map(h=>({key:h.key,label:h.label,current:!!h.current})),"listSegments"),selectSegment:s(h=>(Na.select(h),f(),qt.get()),"selectSegment"),getClassDiagnostics:qe.diagnostics,getClassDebugEvents:Ot.get,getClassDebugReport:Ot.report,clearClassDebugReport:Ot.clear,startClassProbe:ft.start,stopClassProbe:ft.stop,getClassProbeStatus:ft.status,getClassProbeReport:ft.report,downloadClassProbeReport:ft.download,clearClassProbe:ft.clear,setPlayerClass:s((h,_)=>{qe.setOverride(h,_),f()},"setPlayerClass"),getLanguage:Q.getLanguage,setLanguage:s(h=>(Q.setLanguage(h),la.close(),f(),Q.getLanguage()),"setLanguage"),forceSave:s(()=>d(!0),"forceSave"),resetSession:s(()=>p("控制台调用"),"resetSession"),diagnostics:Zt.summary,captureStart:vn.start,captureStop:vn.stop,captureDownload:vn.download,captureSize:vn.size,scanGuildNames:Xe.scanGuildNames,scanGuildNamesAttrs:Xe.scanGuildNamesAttrs,scanGuildNamesLoose:Xe.scanGuildNamesLoose,scanGuildNamesByLocalName:Xe.scanGuildNamesByLocalName,previewGuildNames:Xe.previewGuildNames,debugCombatUnitNames:Xe.debugCombatUnitNames,scanGuildNamesByEllipsis:Xe.scanGuildNamesByEllipsis,countMiniUnitNames:Xe.countMiniUnitNames,scanForOutlierMiniUnit:Xe.scanForOutlierMiniUnit}),()=>{d(!0),ft.stop(),la.close(),Ya.destroy(),document.getElementById("kikimeter-zh-theme")?.remove(),_n.enabled=!1}}s(Yu,"start");_n.enabled=!1,u.features.register({id:"dps",setting:"showDamage",initialize({scope:e}){let t=null,a=s(()=>{t||(t=Yu(e),e.add(u.onMessage("*",(n,i)=>{Xe.handleMessage(i)})))},"activate");return document.readyState==="loading"?e.event(document,"DOMContentLoaded",a,{once:!0}):a(),()=>t?.()}}),Object.assign(u.api,{dps:_n});function yp(){let t=setInterval(s(()=>{let a=document.querySelector("button#buttonImportExport");if(a){clearInterval(t);let n=document.createElement("button");a.parentNode.parentElement.parentElement.insertBefore(n,a.parentElement.parentElement.nextSibling),n.textContent=u.config.isZH?"单人/组队导入(刷新游戏网页更新人物数据)":"Import solo/group (Refresh game page to update character set)",n.style.backgroundColor=u.config.SCRIPT_COLOR_MAIN,n.style.padding="5px",n.onclick=function(){console.log(u.config.isZH?"[MWITools] 已点击战斗模拟器导入按钮。":"[MWITools] Combat simulator import button clicked.");let i=document.querySelector("button#buttonGetPrices");return i&&(console.log(u.config.isZH?"[MWITools] 正在刷新战斗模拟器价格。":"[MWITools] Refreshing combat simulator prices."),i.click()),wp(n),!1}}},"checkElem"),200)}s(yp,"addImportButtonForAmvoidguy");async function wp(e){let[t,a,n,i,o,r,c]=vp();console.log(t),console.log(a),document.querySelector("a#group-combat-tab").click();let l=document.querySelector("input#inputSetGroupCombatAll");if(l.value=JSON.stringify(t),document.querySelector("button#buttonImportSet").click(),document.querySelector("a#player1-tab").textContent=a[0],document.querySelector("a#player2-tab").textContent=a[1],document.querySelector("a#player3-tab").textContent=a[2],document.querySelector("a#player4-tab").textContent=a[3],document.querySelector("a#player5-tab").textContent=a[4],i){if(r){document.querySelector("input#simDungeonToggle").checked=!0,document.querySelector("input#simDungeonToggle").dispatchEvent(new Event("change"));let d=document.querySelector("select#selectDungeon");for(let m=0;m<d.options.length;m++)if(d.options[m].value===i){d.options[m].selected=!0;break}}else{document.querySelector("input#simDungeonToggle").checked=!1,document.querySelector("input#simDungeonToggle").dispatchEvent(new Event("change"));let d=document.querySelector("select#selectZone");for(let m=0;m<d.options.length;m++)if(d.options[m].value===i){d.options[m].selected=!0;break}}if(o){let d=document.querySelector("select#selectDifficulty");for(let m=0;m<d.options.length;m++)if(Number(d.options[m].value)===o){d.options[m].selected=!0;break}}}for(let d=0;d<5;d++)n[d]?document.querySelector(`input#player${d+1}.form-check-input.player-checkbox`)&&(document.querySelector(`input#player${d+1}.form-check-input.player-checkbox`).checked=!0,document.querySelector(`input#player${d+1}.form-check-input.player-checkbox`).dispatchEvent(new Event("change"))):document.querySelector(`input#player${d+1}.form-check-input.player-checkbox`)&&(document.querySelector(`input#player${d+1}.form-check-input.player-checkbox`).checked=!1,document.querySelector(`input#player${d+1}.form-check-input.player-checkbox`).dispatchEvent(new Event("change")));document.querySelector("input#inputSimulationTime").value=24,e.textContent=u.config.isZH?"已导入":"Imported",c||setTimeout(()=>{document.querySelector("button#buttonStartSimulation").click()},500)}s(wp,"importDataForAmvoidguy");function vp(){let e=JSON.parse(GM_getValue("init_character_data","")),t=JSON.parse(GM_getValue("init_client_data","")),a=null;GM_getValue("new_battle","")&&(a=JSON.parse(GM_getValue("new_battle","")));let n=JSON.parse(GM_getValue("profile_export_list","[]")),i='{"player":{"attackLevel":1,"magicLevel":1,"meleeLevel":1,"rangedLevel":1,"defenseLevel":1,"staminaLevel":1,"intelligenceLevel":1,"equipment":[]},"food":{"/action_types/combat":[{"itemHrid":""},{"itemHrid":""},{"itemHrid":""}]},"drinks":{"/action_types/combat":[{"itemHrid":""},{"itemHrid":""},{"itemHrid":""}]},"abilities":[{"abilityHrid":"","level":"1"},{"abilityHrid":"","level":"1"},{"abilityHrid":"","level":"1"},{"abilityHrid":"","level":"1"},{"abilityHrid":"","level":"1"}],"triggerMap":{},"zone":"/actions/combat/fly","simulationTime":"100","houseRooms":{"/house_rooms/dairy_barn":0,"/house_rooms/garden":0,"/house_rooms/log_shed":0,"/house_rooms/forge":0,"/house_rooms/workshop":0,"/house_rooms/sewing_parlor":0,"/house_rooms/kitchen":0,"/house_rooms/brewery":0,"/house_rooms/laboratory":0,"/house_rooms/observatory":0,"/house_rooms/dining_room":0,"/house_rooms/library":0,"/house_rooms/dojo":0,"/house_rooms/gym":0,"/house_rooms/armory":0,"/house_rooms/archery_range":0,"/house_rooms/mystical_study":0}}',o={};o[1]=i,o[2]=i,o[3]=i,o[4]=i,o[5]=i;let r=!1,c=["Player 1","Player 2","Player 3","Player 4","Player 5"],l=[!1,!1,!1,!1,!1],d="/actions/combat/fly",m=!1,p=0;if(e?.partyInfo?.partySlotMap){r=!0;let b=1;for(let f of Object.values(e.partyInfo.partySlotMap)){if(f.characterID)if(f.characterID===e.character.id)o[b]=JSON.stringify(As(e,t)),c[b-1]=e.character.name,l[b-1]=!0;else{let g=n.filter(w=>w.characterID===f.characterID);if(g.length!==1){console.log(u.config.isZH?`[MWITools] 找不到角色 ${f.characterID} 的已保存资料。`:`[MWITools] Cannot find a saved profile for character ${f.characterID}.`),c[b-1]=u.config.isZH?"需要点开资料":"Open profile in game",b++;continue}let h=g[0],_=a.players.filter(w=>w.character.id===f.characterID),y=null;_.length===1&&(y=_[0]),o[b]=JSON.stringify(Qu(h,t,y)),c[b-1]=h.characterName,l[b-1]=!0}b++}d=e.partyInfo?.party?.actionHrid,p=e.partyInfo?.party?.difficultyTier,m=t.actionDetailMap[d]?.combatZoneInfo?.isDungeon}else{o[1]=JSON.stringify(As(e,t)),c[0]=e.character.name,l[0]=!0;for(let b of e.characterActions)if(b&&b.actionHrid.includes("/actions/combat/")){d=b.actionHrid,p=b.difficultyTier,m=t.actionDetailMap[b.actionHrid]?.combatZoneInfo?.isDungeon;break}}return[o,c,l,d,p,m,r]}s(vp,"constructGroupExportObj");function As(e,t){let a={};a.player={};for(let i of e.characterSkills)i.skillHrid.includes("stamina")?a.player.staminaLevel=i.level:i.skillHrid.includes("intelligence")?a.player.intelligenceLevel=i.level:i.skillHrid.includes("attack")?a.player.attackLevel=i.level:i.skillHrid.includes("melee")?a.player.meleeLevel=i.level:i.skillHrid.includes("defense")?a.player.defenseLevel=i.level:i.skillHrid.includes("ranged")?a.player.rangedLevel=i.level:i.skillHrid.includes("magic")&&(a.player.magicLevel=i.level);a.player.equipment=[];for(let i of e.characterItems)i.itemLocationHrid.includes("/item_locations/inventory")||a.player.equipment.push({itemLocationHrid:i.itemLocationHrid,itemHrid:i.itemHrid,enhancementLevel:i.enhancementLevel});a.food={},a.food["/action_types/combat"]=[];for(let i of e.actionTypeFoodSlotsMap["/action_types/combat"])i?a.food["/action_types/combat"].push({itemHrid:i.itemHrid}):a.food["/action_types/combat"].push({itemHrid:""});a.drinks={},a.drinks["/action_types/combat"]=[];for(let i of e.actionTypeDrinkSlotsMap["/action_types/combat"])i?a.drinks["/action_types/combat"].push({itemHrid:i.itemHrid}):a.drinks["/action_types/combat"].push({itemHrid:""});a.abilities=[{abilityHrid:"",level:"1"},{abilityHrid:"",level:"1"},{abilityHrid:"",level:"1"},{abilityHrid:"",level:"1"},{abilityHrid:"",level:"1"}];let n=1;for(let i of e.combatUnit.combatAbilities)i&&t.abilityDetailMap[i.abilityHrid].isSpecialAbility?a.abilities[0]={abilityHrid:i.abilityHrid,level:i.level}:i&&(a.abilities[n++]={abilityHrid:i.abilityHrid,level:i.level});a.triggerMap={...e.abilityCombatTriggersMap,...e.consumableCombatTriggersMap},a.houseRooms={};for(let i of Object.values(e.characterHouseRoomMap))a.houseRooms[i.houseRoomHrid]=i.level;a.achievements={};for(let i of Object.values(e.characterAchievements))a.achievements[i.achievementHrid]=i.isCompleted;return a}s(As,"constructSelfPlayerExportObjFromInitCharacterData");function Qu(e,t,a){let n={};n.player={};for(let i of e.profile.characterSkills)i.skillHrid.includes("stamina")?n.player.staminaLevel=i.level:i.skillHrid.includes("intelligence")?n.player.intelligenceLevel=i.level:i.skillHrid.includes("attack")?n.player.attackLevel=i.level:i.skillHrid.includes("melee")?n.player.meleeLevel=i.level:i.skillHrid.includes("defense")?n.player.defenseLevel=i.level:i.skillHrid.includes("ranged")?n.player.rangedLevel=i.level:i.skillHrid.includes("magic")&&(n.player.magicLevel=i.level);if(n.player.equipment=[],e.profile.wearableItemMap)for(let i in e.profile.wearableItemMap){let o=e.profile.wearableItemMap[i];n.player.equipment.push({itemLocationHrid:o.itemLocationHrid,itemHrid:o.itemHrid,enhancementLevel:o.enhancementLevel})}if(n.food={},n.food["/action_types/combat"]=[],n.drinks={},n.drinks["/action_types/combat"]=[],a?.combatConsumables)for(let i of a.combatConsumables)i.itemHrid.includes("coffee")?n.drinks["/action_types/combat"].push({itemHrid:i.itemHrid}):n.food["/action_types/combat"].push({itemHrid:i.itemHrid});else{let i=e.profile.wearableItemMap&&(e.profile.wearableItemMap["/item_locations/main_hand"]?.itemHrid||e.profile.wearableItemMap["/item_locations/two_hand"]?.itemHrid);i&&(i.includes("shooter")||i.includes("bow")?(n.drinks["/action_types/combat"].push({itemHrid:"/items/wisdom_coffee"}),n.drinks["/action_types/combat"].push({itemHrid:"/items/super_ranged_coffee"}),n.drinks["/action_types/combat"].push({itemHrid:"/items/critical_coffee"}),n.food["/action_types/combat"].push({itemHrid:"/items/spaceberry_donut"}),n.food["/action_types/combat"].push({itemHrid:"/items/spaceberry_cake"}),n.food["/action_types/combat"].push({itemHrid:"/items/star_fruit_yogurt"})):i.includes("boomstick")||i.includes("staff")||i.includes("trident")?(n.drinks["/action_types/combat"].push({itemHrid:"/items/wisdom_coffee"}),n.drinks["/action_types/combat"].push({itemHrid:"/items/super_magic_coffee"}),n.drinks["/action_types/combat"].push({itemHrid:"/items/channeling_coffee"}),n.food["/action_types/combat"].push({itemHrid:"/items/spaceberry_cake"}),n.food["/action_types/combat"].push({itemHrid:"/items/star_fruit_gummy"}),n.food["/action_types/combat"].push({itemHrid:"/items/star_fruit_yogurt"})):i.includes("bulwark")?(n.drinks["/action_types/combat"].push({itemHrid:"/items/wisdom_coffee"}),n.drinks["/action_types/combat"].push({itemHrid:"/items/super_defense_coffee"}),n.drinks["/action_types/combat"].push({itemHrid:"/items/super_stamina_coffee"}),n.food["/action_types/combat"].push({itemHrid:"/items/spaceberry_donut"}),n.food["/action_types/combat"].push({itemHrid:"/items/spaceberry_cake"}),n.food["/action_types/combat"].push({itemHrid:"/items/star_fruit_yogurt"})):(n.drinks["/action_types/combat"].push({itemHrid:"/items/wisdom_coffee"}),n.drinks["/action_types/combat"].push({itemHrid:"/items/super_melee_coffee"}),n.drinks["/action_types/combat"].push({itemHrid:"/items/swiftness_coffee"}),n.food["/action_types/combat"].push({itemHrid:"/items/spaceberry_donut"}),n.food["/action_types/combat"].push({itemHrid:"/items/spaceberry_cake"}),n.food["/action_types/combat"].push({itemHrid:"/items/star_fruit_yogurt"})))}if(n.abilities=[{abilityHrid:"",level:"1"},{abilityHrid:"",level:"1"},{abilityHrid:"",level:"1"},{abilityHrid:"",level:"1"},{abilityHrid:"",level:"1"}],e.profile.equippedAbilities){let i=1;for(let o of e.profile.equippedAbilities)o&&t.abilityDetailMap[o.abilityHrid].isSpecialAbility?n.abilities[0]={abilityHrid:o.abilityHrid,level:o.level}:o&&(n.abilities[i++]={abilityHrid:o.abilityHrid,level:o.level})}e.profile.abilityCombatTriggersMap&&e.profile.consumableCombatTriggersMap&&(n.triggerMap={...e.profile.abilityCombatTriggersMap,...e.profile.consumableCombatTriggersMap}),n.houseRooms={};for(let i of Object.values(e.profile.characterHouseRoomMap))n.houseRooms[i.houseRoomHrid]=i.level;n.achievements={};for(let i of Object.values(e.profile.characterAchievements))n.achievements[i.achievementHrid]=i.isCompleted;return n}s(Qu,"constructPlayerExportObjFromStoredProfile");async function p7(){let e=document.querySelector("div.row")?.querySelectorAll("div.col-md-5")?.[2]?.querySelector("div.row > div.col-md-5");for(;!e;)await new Promise(o=>setTimeout(o,100)),e=document.querySelector("div.row")?.querySelectorAll("div.col-md-5")?.[2]?.querySelector("div.row > div.col-md-5");let t=document.querySelector("div#simulationResultPlayerDeaths"),a=document.querySelector("div#simulationResultExperienceGain"),n=document.querySelector("div#simulationResultConsumablesUsed");t.style.backgroundColor="#FFEAE9",t.style.color="black",a.style.backgroundColor="#CDFFDD",a.style.color="black",n.style.backgroundColor="#F0F8FF",n.style.color="black";let i=document.createElement("div");i.id="tillLevel",i.style.backgroundColor="#FFFFE0",i.style.color="black",i.textContent="",e.append(i),new MutationObserver(o=>{o.forEach(r=>{r.addedNodes.length>=3&&xp(r.addedNodes,i)})}).observe(a,{childList:!0,subtree:!0})}s(p7,"observeResultsForAmvoidguy");function xp(e,t){let a=localStorage.getItem("i18nextLng")?.toLowerCase()?.startsWith("zh"),n={stamina:0,intelligence:0,attack:0,melee:0,defense:0,ranged:0,magic:0};e.forEach(_=>{u.api.getOriTextFromElement(_.children[0]).includes("Stamina")||u.api.getOriTextFromElement(_.children[0]).includes("耐力")?n.stamina=Number(_.children[1].textContent):u.api.getOriTextFromElement(_.children[0]).includes("Intelligence")||u.api.getOriTextFromElement(_.children[0]).includes("智力")?n.intelligence=Number(_.children[1].textContent):u.api.getOriTextFromElement(_.children[0]).includes("Attack")||u.api.getOriTextFromElement(_.children[0]).includes("攻击")?n.attack=Number(_.children[1].textContent):u.api.getOriTextFromElement(_.children[0]).includes("Melee")||u.api.getOriTextFromElement(_.children[0]).includes("近战")?n.melee=Number(_.children[1].textContent):u.api.getOriTextFromElement(_.children[0]).includes("Defense")||u.api.getOriTextFromElement(_.children[0]).includes("防御")?n.defense=Number(_.children[1].textContent):u.api.getOriTextFromElement(_.children[0]).includes("Ranged")||u.api.getOriTextFromElement(_.children[0]).includes("远程")?n.ranged=Number(_.children[1].textContent):(u.api.getOriTextFromElement(_.children[0]).includes("Magic")||u.api.getOriTextFromElement(_.children[0]).includes("魔法"))&&(n.magic=Number(_.children[1].textContent))});let i=GM_getValue("init_character_data",null),o=JSON.parse(i);if(!o||!o.characterSkills||!o.currentTimestamp){console.error(u.config.isZH?"[MWITools] 无法导出:本地没有角色数据。":"[MWITools] Export failed because no character data is stored locally.");return}let r={};for(let _ of o.characterSkills)_.skillHrid.includes("stamina")?(r.stamina={},r.stamina.skillName="Stamina",r.stamina.skillZhName="耐力",r.stamina.currentLevel=_.level,r.stamina.currentExp=_.experience):_.skillHrid.includes("intelligence")?(r.intelligence={},r.intelligence.skillName="Intelligence",r.intelligence.skillZhName="智力",r.intelligence.currentLevel=_.level,r.intelligence.currentExp=_.experience):_.skillHrid.includes("attack")?(r.attack={},r.attack.skillName="Attack",r.attack.skillZhName="攻击",r.attack.currentLevel=_.level,r.attack.currentExp=_.experience):_.skillHrid.includes("melee")?(r.melee={},r.melee.skillName="Melee",r.melee.skillZhName="近战",r.melee.currentLevel=_.level,r.melee.currentExp=_.experience):_.skillHrid.includes("defense")?(r.defense={},r.defense.skillName="Defense",r.defense.skillZhName="防御",r.defense.currentLevel=_.level,r.defense.currentExp=_.experience):_.skillHrid.includes("ranged")?(r.ranged={},r.ranged.skillName="Ranged",r.ranged.skillZhName="远程",r.ranged.currentLevel=_.level,r.ranged.currentExp=_.experience):_.skillHrid.includes("magic")&&(r.magic={},r.magic.skillName="Magic",r.magic.skillZhName="魔法",r.magic.currentLevel=_.level,r.magic.currentExp=_.experience);let c=["stamina","intelligence","attack","melee","defense","ranged","magic"],l="";for(let _ of c)l+=`<div id="${"inputDiv_"+_}" style="display: flex; justify-content: flex-end">${a?r[_].skillZhName:r[_].skillName}${a?"到":" to level "}<input id="${"input_"+_}" type="number" value="${r[_].currentLevel+1}" min="${r[_].currentLevel+1}" max="200">${a?"级":""}</div>`;l+=`<div id="script_afterDays" style="display: flex; justify-content: flex-end"><input id="script_afterDays_input" type="number" value="1" min="0" max="200">${a?"天后":"days after"}</div>`,l+='<div id="needDiv"></div>',l+='<div id="needListDiv"></div>',t.innerHTML=l;for(let _ of c){let y=t.querySelector(`div#${"inputDiv_"+_}`),w=t.querySelector(`input#${"input_"+_}`);w.onchange=()=>{Ts(_,w,r,t,n,a)},w.addEventListener("keyup",function(k){Ts(_,w,r,t,n,a)}),y.onclick=()=>{Ts(_,w,r,t,n,a)}}let d=t.querySelector("div#script_afterDays"),m=t.querySelector("input#script_afterDays_input");m.onchange=()=>{Ms(m,r,t,n,c,a)},m.addEventListener("keyup",function(_){Ms(m,r,t,n,c,a)}),d.onclick=()=>{Ms(m,r,t,n,c,a)};let p=document.querySelector("span#expensesSpan"),b=document.querySelector("span#revenueSpan"),f=document.querySelector("span#profitPreview"),g=document.querySelector("div#script_expense"),h=document.querySelector("div#script_revenue");g&&g?(g.textContent=p.parentNode.textContent,h.textContent=b.parentNode.textContent):f.parentNode.insertAdjacentHTML("beforeend",`<div id="script_expense" style="background-color: #DCDCDC; color: black;">${p.parentNode.textContent}</div><div id="script_revenue" style="background-color: #DCDCDC; color: black;">${b.parentNode.textContent}</div>`)}s(xp,"handleResultForAmvoidguy");function Ms(e,t,a,n,i,o){let r=JSON.parse(GM_getValue("init_client_data",null)).levelExperienceTable,c=Number(e.value);a.querySelector("div#needDiv").textContent=`${o?"":"After"} ${c} ${o?"天后:":"days: "}`;let l=a.querySelector("div#needListDiv"),d="",m={};for(let b of i)for(let f of Object.values(t))if(f.skillName.toLowerCase()===b.toLowerCase()){let g=f.currentExp+n[f.skillName.toLowerCase()]*c*24,h=1;for(;r[h]<g;)h++;h--;let _=r[h],w=r[h+1]-1-_,k=Number((g-_)/w*100).toFixed(1);m[b.toLowerCase()]=h,d+=`<div>${o?f.skillZhName:f.skillName} ${o?"":"level"} ${h} ${o?"级":""} ${k}%</div>`;break}let p=.1*(m.stamina+m.intelligence+m.defense+m.attack+Math.max(m.melee,m.ranged,m.magic))+.5*Math.max(m.attack,m.defense,m.melee,m.ranged,m.magic);d+=`<div>${o?"战斗等级:":"Combat level: "} ${p.toFixed(1)}</div>`,l.innerHTML=d}s(Ms,"calculateAfterDays");function Ts(e,t,a,n,i,o){let r=JSON.parse(GM_getValue("init_client_data",null)).levelExperienceTable,c=Number(t.value);n.querySelector("div#needDiv").textContent=`${o?a[e].skillZhName:a[e].skillName} ${o?"到":"to level"} ${c} ${o?"级 还需:":" takes: "}`;let l=n.querySelector("div#needListDiv"),d=Number(a[e].currentLevel),m=Number(a[e].currentExp);if(c>d&&c<=200)if(i[e]===0)l.innerHTML=o?"永远":"Forever";else{let b=(r[c]-m)/i[e],f="";f+=`<div>[${Cp(b)}]</div>`;let g=document.querySelectorAll("div#simulationResultConsumablesUsed div.row");for(let h of g){let _=h.children[0].textContent,y=Number(h.children[1].textContent);f+=`<div>${_} ${Number(y*b).toFixed(0)}</div>`}l.innerHTML=f}else l.innerHTML=o?"输入错误":"Input error"}s(Ts,"calculateTill");function g7(){let t=setInterval(s(()=>{let a=document.querySelector('div[role="tablist"]');if(a){clearInterval(t);let n=document.createElement("button");a.parentNode.insertBefore(n,a.nextSibling),n.textContent=u.config.isZH?"导入人物数据 (刷新游戏网页更新人物数据)":"Import character settings (Refresh game page to update character settings)",n.style.backgroundColor=u.config.SCRIPT_COLOR_MAIN,n.style.color="black",n.style.padding="5px",n.onclick=function(){return console.log(u.config.isZH?"[MWITools] 已点击 Mooneycalc 导入按钮。":"[MWITools] Mooneycalc import button clicked."),kp(n),!1}}},"checkElem"),200)}s(g7,"addImportButtonForMooneycalc");async function kp(e){let t=JSON.parse(GM_getValue("init_character_data",""));if(console.log(t),!t||!t.characterSkills||!t.currentTimestamp){e.textContent=u.config.isZH?"错误:没有人物数据":"Error: no character settings found";return}let a=Sp(t);localStorage.setItem("settings",a),e.textContent=u.config.isZH?"已导入":"Imported",await new Promise(n=>setTimeout(n,500)),location.reload()}s(kp,"importDataForMooneycalc");function Sp(e){let t=localStorage.getItem("settings"),a=JSON.parse(t);a.state.settings.levels={};for(let n of e.characterSkills)a.state.settings.levels[n.skillHrid]=n.level;a.state.settings.communityBuffs={};for(let n of e.communityBuffs)a.state.settings.communityBuffs[n.hrid]=n.level;a.state.settings.equipment={},a.state.settings.equipmentLevels={};for(let n of e.characterItems)n.itemLocationHrid!=="/item_locations/inventory"&&(a.state.settings.equipment[n.itemLocationHrid.replace("item_locations","equipment_types")]=n.itemHrid,a.state.settings.equipmentLevels[n.itemLocationHrid.replace("item_locations","equipment_types")]=n.enhancementLevel);a.state.settings.houseRooms={};for(let n of Object.values(e.characterHouseRoomMap))a.state.settings.houseRooms[n.houseRoomHrid]=n.level;return JSON.stringify(a)}s(Sp,"constructMooneycalcLocalStorage");function Cp(e){let t=e*60*60;return u.api.timeReadable?.(t)??`${Math.round(e)}h`}s(Cp,"hoursToReadableString");function h7(e){let a=setInterval(s(()=>{let n=document.querySelector("div.SharableProfile_overviewTab__W4dCV");if(n){clearInterval(a);let i=document.createElement("button");return n.appendChild(i),i.textContent=u.config.isZH?"导出人物到剪贴板":"Export to clipboard",i.style.borderRadius="5px",i.style.height="30px",i.style.backgroundColor=u.config.SCRIPT_COLOR_MAIN,i.style.color="black",i.style.boxShadow="none",i.style.border="0px",i.onclick=function(){let o="",r=e.profile.characterSkills[0].characterID,c=JSON.parse(GM_getValue("init_client_data","")),l=JSON.parse(GM_getValue("init_character_data",""));if(r===l.character.id)o=JSON.stringify(As(l,c));else{let m=JSON.parse(GM_getValue("profile_export_list","[]")).filter(f=>f.characterID===r),p=null;if(m.length!==1){console.log(u.config.isZH?`[MWITools] 找不到角色 ${r} 的已保存资料。`:`[MWITools] Cannot find a saved profile for character ${r}.`);return}p=m[0];let b=null;if(GM_getValue("new_battle","")){let g=JSON.parse(GM_getValue("new_battle","")).players.filter(h=>h.character.id===r);g.length===1&&(b=g[0])}o=JSON.stringify(Qu(p,c,b))}return console.log(o),navigator.clipboard.writeText(o),i.textContent=u.config.isZH?"已复制":"Copied",!1},!1}},"checkElem"),200)}s(h7,"addExportButton");var _7=yp;Object.assign(u.api,{addImportButtonFor9Battles:_7,addImportButtonForAmvoidguy:yp,importDataForAmvoidguy:wp,constructGroupExportObj:vp,constructSelfPlayerExportObjFromInitCharacterData:As,constructPlayerExportObjFromStoredProfile:Qu,observeResultsForAmvoidguy:p7,handleResultForAmvoidguy:xp,calculateAfterDays:Ms,calculateTill:Ts,addImportButtonForMooneycalc:g7,importDataForMooneycalc:kp,constructMooneycalcLocalStorage:Sp,hoursToReadableString:Cp,addExportButton:h7});function Qa(e){document.querySelectorAll(e).forEach(t=>t.remove())}s(Qa,"removeAll");var Ur={invWorth:{scope:"character",initialize({scope:e}){u.api.scheduleNetworthRefresh?.(),e.interval(()=>{[...document.querySelectorAll('div[class*="Inventory_items"]')].some(a=>!a.classList.contains("script_buildScore_added"))&&u.api.scheduleNetworthRefresh?.()},500)},cleanup(){Qa("#script_inventory_summary"),document.querySelectorAll(".script_buildScore_added").forEach(e=>{e.classList.remove("script_buildScore_added"),delete e.dataset.mwitoolsInventoryDisplayVersion}),Qa(".mwi-inventory-category-value"),Qa("#script_inv_sort_controls"),document.querySelectorAll(".script_invSort_added").forEach(e=>e.classList.remove("script_invSort_added")),u.api.scheduleNetworthRefresh?.()}},invSort:{scope:"character",initialize({scope:e}){u.api.scheduleNetworthRefresh?.(),e.interval(()=>{[...document.querySelectorAll('div[class*="Inventory_items"]')].some(a=>!a.classList.contains("script_invSort_added"))&&u.api.scheduleNetworthRefresh?.()},500)},cleanup(){Qa("#script_inv_sort_controls,#script_stack_price"),document.querySelectorAll(".script_invSort_added").forEach(e=>e.classList.remove("script_invSort_added")),u.api.scheduleNetworthRefresh?.()}},actionQueue:{scope:"character",cleanup(){u.api.disconnectActionQueueObservers?.(),Qa(".script_actionTime,#script_queueTotalTime")}},checkEquipment:{scope:"character",initialize({scope:e}){u.api.checkEquipment?.(),e.interval(()=>u.api.checkEquipment?.(),500)},cleanup(){Qa("#script_item_warning"),Qa("#mwitools-equipment-warning-style"),document.querySelectorAll(".mwi-equipment-warning-host").forEach(e=>e.classList.remove("mwi-equipment-warning-host"))}},actionPanel_foragingTotal:{scope:"character",dependsOn:["actionPanel_totalTime"],cleanup(){Qa("#totalProfit")}}};for(let e of["useOrangeAsMainColor","profileBuildScore","battlePanel","enhanceSim","forceMWIToolsDisplayZH"])Ur[e]={};Ur.ThirdPartyLinks={initialize({scope:e}){u.api.add3rdPartyLinks?.(),e.interval(()=>u.api.add3rdPartyLinks?.(),500)},cleanup(){Qa('[data-mwitools-external-link="true"]')}},Ur.notifiEmptyAction={scope:"character",initialize(){u.api.notificate?.()}},Ur.fillMarketOrderPrice={scope:"character",initialize({scope:e}){let t=null,a=s(()=>{let n=document.querySelector(".MarketplacePanel_marketListings__1GCyQ");if(!n||n===t)return;t=n;let i=new MutationObserver(o=>{for(let r of o)for(let c of r.addedNodes)c?.classList?.contains("Modal_modalContainer__3B80m")&&u.api.handleMarketNewOrder?.(c)});e.observer(i,n,{childList:!0})},"attach");a(),e.interval(a,500)}};for(let[e,t]of Object.entries(Ur))u.features.getStatus(e).status==="unregistered"&&u.features.register({id:e,setting:e,scope:t.scope??"global",dependsOn:t.dependsOn,initialize(a){t.initialize?.(a)},cleanup(){t.cleanup?.()}});function ec(){let e=u.settings.settingsMap;(e.invWorth.isTrue||e.invSort.isTrue)&&u.api.scheduleNetworthRefresh(),e.assetHistory.isTrue&&u.api.assetHistory.scheduleRefresh()}s(ec,"refreshAssets"),u.onMessage("init_client_data",(e,t)=>{console.log(e),GM_setValue("init_client_data",t)}),u.onMessage("init_character_data",(e,t)=>{console.log(e),GM_setValue("init_character_data",t);let a=u.settings.settingsMap;ec(),a.checkEquipment.isTrue&&u.api.checkEquipment()}),u.onMessage("actions_updated",()=>{let e=u.settings.settingsMap;e.checkEquipment.isTrue&&u.api.checkEquipment(),e.notifiEmptyAction.isTrue&&setTimeout(u.api.notificate,1e3)}),u.onMessage("battle_unit_fetched",e=>{u.settings.settingsMap.battlePanel.isTrue&&u.api.handleBattleSummary(e)}),u.onMessage("items_updated",()=>{u.settings.settingsMap.checkEquipment.isTrue&&u.api.checkEquipment(),ec()});for(let e of["market_item_values_updated","market_item_order_books_updated","market_listings_updated","guild_updated","house_rooms_updated","abilities_updated","character_abilities_updated"])u.onMessage(e,()=>{ec()});u.onMessage("profile_shared",e=>{let t=GM_getValue("profile_export_list",null);t?JSON.parse(t)?.filter||(console.error(u.config.isZH?"[MWITools] 已保存的资料导出列表无效,现已清空。":"[MWITools] The saved profile export list was invalid and has been cleared."),GM_setValue("profile_export_list",JSON.stringify([]))):GM_setValue("profile_export_list",JSON.stringify([])),e.characterID=e.profile.characterSkills[0].characterID,e.characterName=e.profile.sharableCharacter.name,e.timestamp=Date.now(),t=GM_getValue("profile_export_list",null)||JSON.stringify([]);let a=JSON.parse(t).filter(n=>n.characterID!==e.characterID);a.unshift(e),a.length>20&&a.pop(),GM_setValue("profile_export_list",JSON.stringify(a)),u.api.addExportButton(e),u.settings.settingsMap.profileBuildScore.isTrue&&u.api.showBuildScoreOnProfile(e)});function Ap(){let t=(globalThis.unsafeWindow??globalThis).localStorageUtil;if(!localStorage.getItem("initClientData")||typeof t?.getInitClientData!="function")return!1;let a=t.getInitClientData();if(!a?.actionDetailMap||!a?.itemDetailMap)return!1;GM_setValue("init_client_data",JSON.stringify(a)),u.state.initData_actionDetailMap=a.actionDetailMap,u.state.initData_levelExperienceTable=a.levelExperienceTable,u.state.initData_enhancementLevelSuccessRateTable=a.enhancementLevelSuccessRateTable,u.state.initData_enhancementLevelTotalBonusMultiplierTable=a.enhancementLevelTotalBonusMultiplierTable,u.state.initData_itemDetailMap=a.itemDetailMap,u.state.initData_itemLocationDetailMap=a.itemLocationDetailMap,u.state.initData_houseRoomDetailMap=a.houseRoomDetailMap,u.state.initData_actionCategoryDetailMap=a.actionCategoryDetailMap,u.state.initData_abilityDetailMap=a.abilityDetailMap,u.state.initData_shopItemDetailMap=a.shopItemDetailMap,u.state.initData_taskShopItemDetailMap=a.taskShopItemDetailMap,u.state.initData_labyrinthShopItemDetailMap=a.labyrinthShopItemDetailMap,u.state.initData_openableLootDropMap=a.openableLootDropMap,u.state.initData_guildBuffDetailMap=a.guildBuffDetailMap,u.api.invalidateAssetValueCache();for(let[n,i]of Object.entries(u.state.initData_itemDetailMap))u.state.itemEnNameToHridMap[i.name]=n;return!0}s(Ap,"loadCachedClientData");function y7(){Ap()||u.features.register({id:"clientDataCache",initialize({scope:n}){let i=n.interval(()=>{Ap()&&clearInterval(i)},250)}}),u.api.loadMarketItemValuesFromStorage(),u.api.hookWS();let t=3,a=localStorage.getItem("MWITools_marketAPI_ApiVersion");(!a||parseInt(a)<t)&&(console.log(u.config.isZH?"[MWITools] 市场 API 版本已更新,正在清理旧缓存。":"[MWITools] Market API version changed; clearing the old cache."),localStorage.setItem("MWITools_marketAPI_timestamp",JSON.stringify(0)),localStorage.setItem("MWITools_marketAPI_json",JSON.stringify(null)),localStorage.setItem("MWITools_marketAPI_ApiVersion",JSON.stringify(t))),u.api.fetchMarketJSON(!0),u.start()}s(y7,"startGame");function w7(){if(u.api.readSettings(),document.URL.includes("amvoidguy.github.io")||document.URL.includes("shykai.github.io/MWICombatSimulatorTest/")){u.api.addImportButtonForAmvoidguy(),u.api.observeResultsForAmvoidguy();return}if(document.URL.includes("mooneycalc.netlify.app")||document.URL.includes("mooneycalc.vercel.app")){u.api.addImportButtonForMooneycalc();return}y7()}s(w7,"main"),w7();})();