From 6c33d187d72021c325b6c3c61b37818e15d5e22b Mon Sep 17 00:00:00 2001
From: woohoo 区间为 1 ~ 60,默认 50 区间为 1 ~ 60,默认 50 注:需要验证时无法起飞 点击开打: 点击开打:
5k, 1.5m, max, half, quarter, 1/2, 1/3, 1/4, 25%":"点此添加最大额度,或输入快捷选项如
5k, 1.5m, max, half, quarter, 1/2, 1/3, 1/4, 25%"};const Te={Stock:"股票",Name:"名称",Price:"单价","1h":"1时","24h":"24时","7d":"7天","1m":"1月","1y":"1年",Live:"实时",live:"实时","Last hour":"过去一时","Last day":"过去一天","Last week":"过去一周","Last month":"过去一月","Last year":"过去一年","All time":"有史以来",Owned:"持有",Dividend:"分红","West Side University":"西城大学","Insured On Us":"托恩人保","Torn City Investments":"Torn City 投资","Torn & Shanghai Banking":"Torn 和上海银行","Symbiotic Ltd.":"共生公司","Crude & Co":"原油公司","Feathery Hotels Group":"飞亚达酒店集团","Mc Smoogle Corp":"麦斯莫格公司","Wind Lines Travel":"风线旅行","Performance Ribaldry":"低俗演绎","Syscore MFG":"系统核心 MFG","Evil Ducks Candy Corp":"邪恶鸭糖果公司","Munster Beverage Corp.":"明斯特饮料公司","Torn City Clothing":"Torn City 服饰","Lucky Shots Casino":"幸运赌场","TC Media Productions":"TC 媒体制作公司","International School TC":"TC 国际学校","Big Al's Gun Shop":"大艾尔枪店","Torn City Health Service":"TC 健康服务中心","Alcoholics Synonymous":"酒瘾相似","Torn City Motors":"TC 汽车","Legal Authorities Group":"权威法律集团","The Torn City Times":"托恩时代",Grain:"谷物","Eaglewood Mercenary":"鹰林佣兵","Home Retail Group":"家庭零售集团","Empty Lunchbox Traders":"空饭盒贸易商","Messaging Inc.":"信息公司","TC Music Industries":"TC 音乐工业公司","I Industries Ltd.":"一号工业有限公司","Tell Group Plc.":"讲述集团",Yazoo:"","1x Random Property":"1个随机房产","10% Bank Interest Bonus":"10% 银行利润增益","a 10% Bank Interest Bonus":"10% 银行利润增益","100 Energy":"100 能量E","Private Jet Access":"解锁私人飞机","1000 Happiness":"1000 快乐","Advanced Firewall":"高级防火墙","an Advanced Firewall":"高级防火墙","Company Sales Boost":"提升公司销量","a Company Sales Boost":"提升公司销量","Free Education Courses":"免费教育课程","a Free Education Courses":"免费教育课程","10% Racing Skill Boost":"提升 10% 赛车技能增长","10% Home Upgrade Discount":"10% 房屋设施费用折扣","Free Classified Advertising":"免费分类广告","50% Coding Time Reduction":"缩减 50% 编程时间","Company Advertising Boost":"公司广告增益","a Company Advertising Boost":"公司广告增益","10% Course Time Reduction":"缩减 10% 教育时间","a 10% Education Course Time Reduction":"缩减 10% 教育时间","Free Banner Advertising":"免费横幅广告","a Free Banner Advertising":"免费横幅广告",Inactive:"未激活","Ready for collection":"分红可领取","Benefit active":"分红已激活",provides:"(满足分红条件时)将提供",Every:"在每","when holding at least":",当你至少持有","shares currently valued at":"股时,目前总价:",days:"日后",Buy:"再购买","more shares for":"股,目前总价","to unlock the":"来解锁",increment:"增益",After:"在",in:"在","You currently have":"你已获得",benefit:"增益","You cannot buy shares while traveling":"你在旅行时无法购买","You cannot sell shares while traveling":"你在旅行时无法出售","How many shares would you like to":"多少股你想","You will be able to collect":"你将可以领取",buy:"买入",sell:"卖出","will buy you":"可以买",shares:"股",share:"股",Your:"你持有的","shares are worth":"股目前值","Do you want to":"你想","shares at":"股","each?":"单价?","For a total of":"总价:",Back:"返回","Confirm Transaction":"确认交易","Price updating...":"价格更新中","after the":"已扣除","fee of":"手续费:","You have":"你已",sold:"卖出",bought:"购入",each:"单价","Buy date":"购入日期",Shares:"购入数量",Value:"购入总价",Bought:"购入单价",Current:"目前单价",Change:"变化",Profit:"利润",View:"查看",Sell:"售出",Merge:"合并","Current Price:":"当前股价:","change:":"变化:","start:":"开始:","end:":"结束:","high:":"最高:","low:":"最低:"};const Ce={Primary:"主手",Secondary:"副手",Melee:"近战",Temporary:"投掷",Defensive:"防御",Armor:"防御",Clothing:"衣物",Jewelry:"珠宝","Your items -":"你的物品 - ",All:"全部",Medical:"医疗",Drugs:"药物","Energy Drink":"能量饮料",Alcohol:"酒类",Candy:"糖果",Boosters:"增益道具",Enhancer:"增幅器","Supply Packs":"补给包",Electronics:"电器",Flowers:"花",Plushies:"玩偶",Cars:"车辆",Viruses:"病毒",Miscellaneous:"杂项",Artifacts:"文物",Books:"书",Special:"特殊",Collectibles:"可收集物",Donate:"捐献",Drink:"喝下",Eat:"吃下",Enlist:"车辆注册",Equip:"装备",Listen:"听",Open:"打开",Propose:"求婚",Return:"退还",Sell:"卖出",Send:"发送",Take:"使用",Trash:"丢弃","Turn on":"开启",Unequip:"脱下",Use:"使用","Donate this Item":"捐献该物品","Equip this Item":"装备该物品","Sell this Item":"卖出该物品","Send this Item":"发送该物品","Trash this Item":"丢弃该物品","Unequip this Item":"脱下该物品","Return to Faction":"退还帮派","Buy:":"买价:","Sell:":"卖价:","Value:":"价值:","Accuracy:":"命中:","Damage:":"伤害:","Circ:":"流通:","Quality:":"品质:","Stealth:":"隐匿:","Caliber:":"口径:","Ammo:":"弹药:","Bonus:":"额外:","Masked:":"面具:","Coverage:":"覆盖率:","Armor:":"护甲:","Top Speed:":"最高速度:","Dirt:":"泥路:","Tarmac:":"柏油路:","Acceleration:":"加速:","Safety:":"安全:","Braking:":"制动:","Handling:":"操控:","Rate of Fire:":"开火率:","Read:":"已读:"};const Ve={"Ammunition Pack":"弹药包","Clothing Cache":"服饰箱","First Aid Kit":"急救包","Small First Aid Kit":"小型急救包","Empty Blood Bag":"空血包","Blood Bag : A-":"A-血包","Blood Bag : A+":"A+血包","Blood Bag : AB+":"AB+血包","Blood Bag : AB-":"AB-血包","Blood Bag : O+":"O+血包","Blood Bag : O-":"O-血包","Blood Bag : B-":"B-血包","Blood Bag : B+":"B+血包","Blood Bag : Irradiated":"辐射血包",Morphine:"吗啡","Neumune Tablet":"雄烯二醇抗辐射药品",Antidote:"抗生素",Felovax:"妙三多",Zylkene:"法国威隆苏劲猫犬降压药","Cake Frosting":"蛋糕糖霜","Lock Picking Kit":"开锁器套装","Special Fruitcake":"特别的水果蛋糕","Sawed-Off Shotgun":"截短型霰弹枪",Thompson:"汤普森冲锋枪",TMP:"施泰尔TMP冲锋枪","Benelli M1 Tactical":"贝内利M1战术霰弹枪",MP5k:"MP5k","MP5 Navy":"MP5海军型",Skorpion:"蝎式冲锋枪","MP 40":"MP40","SKS Carbine":"SKS卡宾枪","Vektor CR-21":"维克托CR-21",P90:"P90","Ithaca 37":"伊萨卡37泵动式霰弹枪","XM8 Rifle":"XM8突击步枪",AK74U:"AK74U短管突击步枪","AK-47":"AK-47","Bushmaster Carbon 15":"碳15短管步枪","M4A1 Colt Carbine":"M4A1卡宾枪","Benelli M4 Super":"贝内利M4 Super半自动霰弹枪","Heckler & Koch SL8":"HK SL8半自动步枪","M16 A2 Rifle":"M16A2步枪","Mag 7":"Mag 7","Steyr AUG":"施泰尔AUG突击步枪","SIG 550":"SIG 550突击步枪","Enfield SA-80":"恩菲尔德SA80","Tavor TAR-21":"21世纪他泊山突击步枪TAR-21","9mm Uzi":"9mm Uzi","M249 SAW":"M249班用自动武器",Minigun:"加特林式旋管机枪",Jackhammer:"转轮式自动霰弹枪","SIG 552":"SIG 552卡宾枪","ArmaLite M-15A4":"阿玛莱特M15A4","Nock Gun":"诺克枪","Snow Cannon":"雪球加农炮","Rheinmetall MG 3":"MG3通用机枪","Gold Plated AK-47":"黄金AK47","Lorcin 380":"洛辛380","Flare Gun":"信号枪","Glock 17":"格洛克17",Taurus:"金牛座","Springfield 1911":"M1911","Raven MP25":"","Ruger 22/45":"",Crossbow:"十字弓",Slingshot:"弹弓","S&W Revolver":"S&W左轮手枪","Beretta M9":"巴雷特M9",USP:"USP","Beretta 92FS":"巴雷特92FS",Luger:"鲁格手枪",Fiveseven:"FN手枪",Blowgun:"吹箭",Blunderbuss:"手铳",Magnum:"马格南左轮手枪","S&W M29":"","Desert Eagle":"沙漠之鹰","BT MP9":"","Cobra Derringer":"","Qsz-92":"",Harpoon:"鱼叉",Flamethrower:"喷火器","Dual 92G Berettas":"","Type 98 Anti Tank":"98式反坦克炮","Beretta Pico":"","Homemade Pocket Shotgun":"自制袖珍霰弹枪","RPG Launcher":"RPG发射器",Hammer:"锤子","Lead Pipe":"铅管","Baseball Bat":"棒球棒",Crowbar:"撬棍","Bo Staff":"玻之武杖","Knuckle Dusters":"指虎","Pen Knife":"笔刀","Leather Bullwhip":"皮牛鞭","Kitchen Knife":"厨房刀","Frying Pan":"平底锅",Sai:"铁尺","Plastic Sword":"塑料剑","Butterfly Knife":"蝴蝶刀",Dagger:"匕首","Swiss Army Knife":"瑞士军刀","Chain Whip":"链条鞭",Axe:"斧头","Wooden Nunchakus":"木制双截棍",Taser:"电击枪","Ninja Claws":"忍者之爪",Scimitar:"弯刀",Chainsaw:"电锯","Cricket Bat":"板球棒","Ice Pick":"冰镐",Katana:"军官武士刀",Spear:"矛",Kama:"镰刀","Twin Tiger Hooks":"虎头双钩","Samurai Sword":"武士刀","Claymore Sword":"苏格兰阔刃大斩剑","Rusty Sword":"锈剑",Macana:"美洲黑曜石匕首",Kodachi:"太刀","Wushu Double Axes":"武术双斧",Guandao:"关刀","Metal Nunchakus":"金属双截棍",Pillow:"枕头","Diamond Icicle":"钻石冰锥","Diamond Bladed Knife":"钻石刀","Pair of Ice Skates":"成对滑冰鞋","Fine Chisel":"细凿",Flail:"连枷","Ivory Walking Cane":"象牙手杖","Pair of High Heels":"一双高跟鞋",Madball:"台球","Yasukuni Sword":"战犯之剑","Naval Cutlass":"海军弯刀","Meat Hook":"肉钩","Petrified Humerus":"石化肱骨","Blood Spattered Sickle":"溅血之镰",Cleaver:"劈肉刀","Golden Broomstick":"黄金扫帚","Riding Crop":"马鞭","Devil's Pitchfork":"恶魔之叉","Dual Hammers":"双锤","Dual Axes":"双斧","Dual Scimitars":"双持弯刀","Dual Samurai Swords":"双武士刀",Sledgehammer:"巨锤","Bread Knife":"面包刀","Poison Umbrella":"毒伞","Leather Boots":"皮靴","Leather Gloves":"皮手套","Leather Helmet":"皮制头盔","Leather Pants":"皮裤","Leather Vest":"皮背心","Chain Mail":"锁子甲","Flak Jacket":"防弹夹克","Police Vest":"警察背心","Hiking Boots":"登山靴","Construction Helmet":"建筑头盔","Bulletproof Vest":"防弹背心","Full Body Armor":"全身甲","Safety Boots":"安全靴","WWII Helmet":"二战头盔","Kevlar Gloves":"凯夫拉手套","Outer Tactical Vest":"外用战术背心","Combat Gloves":"战斗手套","Combat Boots":"战斗靴","Combat Pants":"战斗裤","Combat Helmet":"战斗头盔","Combat Vest":"战斗背心","Liquid Body Armor":"液体防弹衣","Flexible Body Armor":"弹性防弹衣","Medieval Helmet":"中世纪头盔","Motorcycle Helmet":"摩托车头盔","Welding Helmet":"电焊头盔","Hazmat Suit":"危险品防护服",Brick:"砖头","Ninja Star":"忍者之星",Fireworks:"烟花","Claymore Mine":"阔刀地雷","Stick Grenade":"木柄手榴弹",Snowball:"雪球",HEG:"高爆手雷",Grenade:"手雷","Flash Grenade":"闪光弹","Pepper Spray":"辣椒喷雾","Tear Gas":"催泪弹",Trout:"鳟鱼","Throwing Knife":"飞刀","Molotov Cocktail":"莫洛托夫鸡尾酒","Smoke Grenade":"烟雾弹",Melatonin:"褪黑素",Tyrosine:"酪氨酸",Epinephrine:"肾上腺素",Sand:"沙",Serotonin:"血清素","Nail Bomb":"钉子炸弹","Concussion Grenade":"震撼弹",Book:"书","Can of Goose Juice":"鹅汁","Can of Damp Valley":"湿谷","Can of Crocozade":"鳄鱼","Can of Santa Shooters":"圣诞射手","Can of Munster":"魔瓜","Can of Rockstar Rudolph":"摇滚明星","Can of Red Cow":"红牛","Can of X-MASS":"XS","Can of Taurine Elite":"精英牛磺酸","Bag of Bon Bons":"一袋糖果","Box of Extra Strong Mints":"一盒特浓薄荷糖","Bag of Chocolate Kisses":"一袋巧克力之吻","Box of Sweet Hearts":"一盒甜蜜的心","Box of Chocolate Bars":"一盒巧克力棒",Lollipop:"棒棒糖","Box of Bon Bons":"一盒糖果","Big Box of Chocolate Bars":"一大盒巧克力棒","Bag of Candy Kisses":"一袋糖果之吻","Bag of Tootsie Rolls":"一袋图罗软糖","Bag of Bloody Eyeballs":"一袋血腥眼球","Bag of Chocolate Truffles":"一袋巧克力松露","Bag of Reindeer Droppings":"一袋驯鹿粪便","Red Easter Egg":"红复活节蛋","Yellow Easter Egg":"黄复活节蛋","Blue Easter Egg":"蓝复活节蛋","Pink Easter Egg":"粉复活节蛋","Orange Easter Egg":"橙复活节蛋","Black Easter Egg":"黑复活节蛋","Green Easter Egg":"绿复活节蛋","Brown Easter Egg":"棕复活节蛋","Pixie Sticks":"小精灵棒","Bag of Sherbet":"一袋雪糕",Jawbreaker:"","Bag of Humbugs":"","Purple Easter Egg":"紫复活节蛋","White Easter Egg":"白复活节蛋","Birthday Cupcake":"生日纸杯蛋糕","Gold Easter Egg":"金复活节蛋",Shrooms:"魔幻蘑菇",LSD:"兴奋剂",Ketamine:"凯粉",Ecstasy:"摇头丸",PCP:"天使尘埃",Speed:"病毒",Xanax:"XAN","Love Juice":"爱情果汁",Cannabis:"大麻",Opium:"罂粟",Vicodin:"维柯丁","Heavy Duty Padlock":"重型挂锁","High-Speed Drive":"高速硬盘","Tracking Device":"追踪设备","Tumble Dryer":"烘干机","Duct Tape":"胶带",Chloroform:"氯仿",Glasses:"眼镜","Fanny Pack":"腰包","Slim Crowbar":"细撬棍","Advanced Driving Manual":"高级驾驶手册","Cut-Throat Razor":"割喉剃刀","Wireless Dongle":"无线加密狗",Screwdriver:"螺丝刀","Ergonomic Keyboard":"人体工学键盘","Mountain Bike":"山地车",Balaclava:"巴拉克拉瓦头套","Small Suitcase":"小手提箱","Medium Suitcase":"中手提箱","Rosary Beads":"念珠","Large Suitcase":"大手提箱","Wind Proof Lighter":"防风打火机","Bottle of Beer":"瓶装啤酒","Bottle of Champagne":"瓶装香槟","Bottle of Tequila":"瓶装龙舌兰酒","Bottle of Sake":"瓶装清酒","Bottle of Kandy Kane":"","Bottle of Pumpkin Brew":"瓶装南瓜啤酒","Bottle of Wicked Witch":"邪恶女巫蛙腿酒","Bottle of Minty Mayhem":"","Bottle of Christmas Cocktail":"圣诞鸡尾酒","Bottle of Mistletoe Madness":"槲寄生疯狂","Bottle of Stinky Swamp Punch":"","Bottle of Moonshine":"瓶装私酒","Bottle of Green Stout":"瓶装绿色世涛","Bottle of Christmas Spirit":"","Glass of Beer":"一杯扎啤","Lawyer Business Card":"律师卡(黑卡)","Erotic DVD":"瑟琴DVD","Gift Card":"礼品卡","Book of Carols":"颂歌之书","Feathery Hotel Coupon":"FHC金卡",Skateboard:"速度SE 滑板","Boxing Gloves":"防御SE 拳击手套",Dumbbells:"力量SE 哑铃",Parachute:"闪避SE 降落伞","Pack of Music CDs":"","Pack of Blank CDs : 100":"","RS232 Cable":"","Hard Drive":"","MP3 Player":"","Personal Computer":"","CD Player":"","DVD Player":"",Television:"","Game Console":"",Microwave:"",Laptop:"","Gold Ring":"金戒指","Plain Silver Ring":"纯银戒指","Sapphire Ring":"蓝宝石戒指","Plastic Watch":"塑料手表","Gold Necklace":"金项链","Silver Necklace":"银项链","Gold Watch":"金表","Diamond Ring":"钻戒","Stainless Steel Watch":"不锈钢手表","Pearl Necklace":"珍珠项链","Cocktail Ring":"鸡尾酒会戒指","Crystal Bracelet":"水晶手链","Statement Necklace":"宣言项链","Gold Chain":"金链子","Simple Virus":"简单病毒","Tunneling Virus":"隧道病毒","Polymorphic Virus":"多态病毒","Firewalk Virus":"火行病毒","Armored Virus":"加壳病毒","Stealth Virus":"隐形病毒","Bunch of Flowers":"花束","Single Red Rose":"单支红玫瑰","Bunch of Black Roses":"黑玫瑰束","Dozen Roses":"一打玫瑰",Dahlia:"大丽花",Crocus:"番红花","Banana Orchid":"香蕉兰花",Orchid:"兰花",Edelweiss:"雪绒花","Ceibo Flower":"木棉花",Heather:"帚石楠","African Violet":"非洲紫罗兰","Cherry Blossom":"樱花",Peony:"牡丹花","Tribulus Omanense":"蒺藜花","Box of Medical Supplies":"医疗补给包","Lottery Voucher":"彩票券","Box of Grenades":"手雷箱","Six Pack of Alcohol":"6瓶装酒箱","Denim Cache":"牛仔补给箱","Drug Pack":"小DP 药dú品包","Keg of Beer":"桶装啤酒","Elderly Cache":"中年衣服补给箱","Cutesy Cache":"可爱衣服补给箱","Six Pack of Energy Drink":"6瓶装饮料箱","Gentleman Cache":"绅士衣服补给箱","Wannabe Cache":"潮流衣服补给箱","Elegant Cache":"优雅衣服补给箱","Naughty Cache":"调皮衣服补给箱","Goodie Bag":"礼品袋","Anniversary Present":"周年纪念礼物",Parcel:"包裹","Broken Bauble":"","Bronze Ribbon":"","Silver Ribbon":"","Coin : Dump":"","Coin : Church":"","Santa's Elf '09":"","Metal Dog Tag":"","Coin : Hospital":"","Birthday Cake '05":"","Bunch of Balloons '05":"","Jack-O-Lantern '05":"","Coin : Race Track":"","Coin : Casino":"","Coin : Estate Agents":"","Coin : Travel Agency":"","Coin : Education":"","Coin : Museum":"","Coin : Drugs":"","Coin : Auction House":"","Coin : Stock Exchange":"","Coin : Companies":"","Poker Chip":"","Coin : Factions":"","Voodoo Doll":"","Rabbit Foot":"","Gold Ribbon":"","Coin : Jail":"","Santa's List '17":"","Snowflake '05":"","Cheesus '18":"","Bronze Microphone":"","Paper Bag":"","Toast Jesus '18":"","Silver Dog Tag":"","Christmas Tree '05":"","Bronze Dog Tag":"","Bronze Paint Brush":"","10 Ton Pacifier":"","Single White Rose":"","Chocolate Egg '05":"","Annoying Man":"","Scammer in the Slammer '18":"","Gold Microphone":"","Amazon Doll":"",Soapbox:"","Gold Paint Brush":"","Dollar Bill Collectible":"","Octopus Toy":"","Gold Dog Tag":"","Crazy Cow":"","Citrus Squeezer":"","Strife Clown":"","Evil Doll":"","Blow-Up Doll":"","Backstage Pass":"","Karate Man":"","YouYou Yo Yo":"","Flea Collar":"","Ms Torn Crown":"","Kevlar Helmet":"","Cursed Moon Pendant":"","Mr Torn Crown":"","Mr Brownstone Doll":"","Burmese Flag":"","Chocobo Flute":"","Skeleton Key":"","Yoda Figurine":"","Barbie Doll":"","China Tea Set":"",Dreamcatcher:"","Non-Anon Doll":"","Christmas Card '09":"","Christmas Stocking '09":"","Jester's Cap":"","Official Ninja Kit":"","Silver Paint Brush":"","Tank Top":"",Jacket:"夹克",Trainers:"",Bandana:"","Mediocre T-Shirt":"普通的T恤","Sports Shades":"","Diving Gloves":"","Proda Sunglasses":"",Speedo:"",Flippers:"","Kabuki Mask":"",Sweater:"",Snorkel:"",Bikini:"比基尼",Wetsuit:"","Mountie Hat":"","Exotic Gentleman Mask":"","Young Lady Mask":"年轻女士面具","Moustache Man Mask":"","Old Lady Mask":"老妇人面具","Nun Mask":"","Scarred Man Mask":"刀疤男面具","Ginger Kid Mask":"","Psycho Clown Mask":"","Trench Coat":"","Festive Socks":"","Coconut Bra":"椰壳文胸","Badge : 15th Anniversary":"","Paper Crown : Red":"纸皇冠:红色","Paper Crown : Blue":"纸皇冠:蓝色","Paper Crown : Green":"纸皇冠:绿色","Paper Crown : Yellow":"纸皇冠:黄色","Party Hat '19":"","String Vest":"","Santa Gloves":"","Classic Fedora":"",Sweatpants:"","Santa Trousers":"","Pinstripe Suit Trousers":"","Santa Boots":"","Denim Cap":"","Tube Dress":"","Hair Bow":"","Pleated Skirt":"","Reading Glasses":"",Pullover:"","Denim Vest":"","Basketball Shirt":"","Denim Jacket":"","Santa Jacket":"","Bandit Mask":"",Durag:"",Chinos:"",Tights:"","Collared Shawl":"","Denim Shirt":"",Shrug:"",Dungarees:"",Sandals:"","Check Skirt":"","Ballet Shoes":"","Sun Hat":"","Cork Hat":"",Pantyhose:"","Denim Shoes":"","Knee Socks":"",Shorts:"","Golf Socks":"","Bucket Hat":"","Maid Hat":"","Panama Hat":"","Oversized Shirt":"","Pencil Skirt":"","Floral Dress":"","Booty Shorts":"",Blouse:"",Halterneck:"","Snapback Hat":"","Crop Top":"",Bermudas:"","Peplum Top":"","Baseball Cap":"","Santa Hat":"","Baseball Jacket":"","Capri Pants":"",Thong:"","Fishnet Stockings":"","Chin Diaper":"","Chest Harness":"","Platform Shoes":"","Fur Hat":"","Polo Shirt":"","Bunny Ears":"","Denim Jeans":"",Skirt:"","Puppy Ears":"",Tutu:"",Camisole:"","Assless Chaps":"","Head Scarf":"","Puffer Vest":"",Choker:"","Boob Tube":"","Tighty Whities":"","Puffer Jacket":"","Travel Socks":"","Fur Scarf":"",Waistcoat:"","Derby Shoes":"",Braces:"",Blindfold:"","Medical Mask":"",Nightgown:"","Flip Flops":"","Saggy Pants":"","Square Sunglasses":"",Cardigan:"","Gym Shorts":"","Knee-high Boots":"","Sports Jacket":"","Bowler Hat":"","Cover-ups":"","Bingo Visor":"","Yoga Pants":"",Raincoat:"","Silver Hoodie":"","Fisherman Hat":"",Lingerie:"","Bush Hat":"",Turtleneck:"","Lolita Dress":"","Fitted Shirt":"",Blazer:"","Opera Gloves":"","Mini Skirt":"","Shoulder Sweater":"","Suit Trousers":"",Mackintosh:"","Black Oxfords":"","Shutter Shades":"","Cat Ears":"","Fascinator Hat":"",Poncho:"","Fur Coat":"","Silver Flats":"","Kitty Shoes":"","Neck Tie":"","Maid Uniform":"","Bow Tie":"","Polka Dot Dress":"",Slippers:"","Gold Sneakers":"","Smoking Jacket":"","Parachute Pants":"","Latex Gloves":"",Collar:"","Nipple Tassels":"","Scrooge's Boots":"",Mankini:"","Scrooge's Gloves":"","Ripped Jeans":"","Santa Beard":"","Ball Gown":"","Scrooge's Trousers":"","Unicorn Horn":"",Onesie:"","Wedding Veil":"","Christmas Sweater '15":"","Bunny Nose":"",Straitjacket:"",Monocle:"","Scrooge's Topcoat":"","Wedding Dress":"","Witch's Hat":"",Bathrobe:"","Tiger King Mask '20":"","Greta Mask '19":"","Scrooge's Top Hat":"","Sandworm Mask '21":"",Duster:"","Ski Mask":"","Pennywise Mask '20":"","Anatoly Mask '19":"","Ball Gag":"","Elon Musk Mask '17":"","Heart Sunglasses":"","Jigsaw Mask '19":"",Pipe:"","Michael Myers Mask '18":"","Respo Hoodie":"","Bunny Suit":"","Donald Trump Mask '16":"","Gronch Mask '18":"","Chevrolet Cavalier":"","Peugeot 106":"","Volkswagen Beetle":"大众甲壳虫","Citroen Saxo":"","Vauxhall Corsa":"","Vauxhall Astra GSI":"","Honda Civic":"本田思域","Classic Mini":"经典MINI","Volkswagen Golf GTI":"","Renault Clio":"","Alfa Romeo 156":"","Audi S4":"奥迪S4","Reliant Robin":"","Nissan Micra":"","Honda Integra R":"","Ford Mustang":"福特野马","Lotus Exige":"","Hummer H3":"","Honda S2000":"","Honda Accord":"","Holden SS":"","Mini Cooper S":"","Seat Leon Cupra":"","Toyota MR2":"","Volvo 850":"","Honda NSX":"","BMW X5":"宝马X5","TVR Sagaris":"","BMW M5":"宝马M5","Ford Focus RS":"","Subaru Impreza STI":"","Chevrolet Corvette Z06":"","Audi TT Quattro":"","Fiat Punto":"","Pontiac Firebird":"","Dodge Charger":"","BMW Z8":"宝马Z8","Porsche 911 GT3":"","Nissan GT-R":"","Ford GT40":"","Audi R8":"奥迪R8","Mitsubishi Evo X":"","Lexus LFA":"","Ferrari 458":"","Lamborghini Gallardo":"兰博基尼盖拉多","Mercedes SLR":"","Aston Martin One-77":"","Sierra Cosworth":"","Senet Board":"","Florin Coin":"","Leopard Coin":"","Gold Noble Coin":"","Vairocana Buddha Sculpture":"","Black Senet Pawn":"","White Senet Pawn":"","Ganesha Sculpture":"","Quran Script : Ubay Ibn Kab":"","Quran Script : Ali":"","Quran Script : Ibn Masud":"","Shabti Sculpture":"","Egyptian Amulet":"","Sheep Plushie":"绵羊","Kitten Plushie":"猫咪","Teddy Bear Plushie":"泰迪熊","Stingray Plushie":"黄貂鱼","Wolverine Plushie":"貂熊","Jaguar Plushie":"美洲豹","Nessie Plushie":"尼斯湖水怪","Red Fox Plushie":"赤狐","Chamois Plushie":"岩羚羊","Monkey Plushie":"猴子","Panda Plushie":"大熊猫","Lion Plushie":"狮子","Camel Plushie":"骆驼","Dong : Effy":"狗狗:艾菲","Dong : Jeremy":"狗狗:杰里米","Dong : Greg":"狗狗:格雷格","Dong : Holly":"狗狗:霍利","Dong : Thomas":"狗狗:托马斯","Toilet Paper":"厕纸","Stink Bombs":"臭气弹","Dog Poop":"狗屎","Horse's Head":"马头","Christmas Cracker":"圣诞爆竹","Small Explosive Device":"小型爆炸装置","Business Class Ticket":"商务舱机票","Strippogram Voucher":"脱衣舞券","Poison Mistletoe":"毒槲寄生","Donator Pack":"捐赠者补给箱(DP)","Casino Pass":"赌场通行证","Cesium-137":"铯137","Dirty Bomb":"脏弹","Box of Tissues":"一盒抽纸","Pack of Cuban Cigars":"","Birthday Wrapping Paper":"生日包装纸","Empty Box":"空盒子","Bolt Cutters":"","Christmas Wrapping Paper":"圣诞包装纸","Soap on a Rope":"","Generic Wrapping Paper":"","Crazy Straw":"",Fruitcake:"水果蛋糕","Pele Charm":"","Mayan Statue":"","Steel Drum":"","Sumo Doll":"","Hockey Stick":"",Chopsticks:"筷子","Soccer Ball":"足球",Snowboard:"雪球","Paper Weight":"","Yakitori Lantern":"",Sensu:"","Dart Board":"","Elephant Statue":"","Certificate of Lame":"","Yucca Plant":"","Jade Buddha":"玉佛像",Compass:"","Nodding Turtle":"","Fire Hydrant":"","Model Space Ship":"","Tailors Dummy":"",Sextant:"","Afro Comb":"","Maneki Neko":"","Blank Tokens":"","Printing Paper":"","Stick of Dynamite":"","Blank Credit Cards":"","Advent Calendar":"","Certificate of Awesome":"","Glow Stick":"","Ship in a Bottle":"","Santa's Snot":"","Christmas Angel":"","Sprig of Holly":"","Polar Bear Toy":"","Turkey Baster":"","Electronic Pumpkin":"","Salt Shaker":"","Cinnamon Ornament":"","Spooky Paper Weight":"","Lump of Coal":"","Vanity Hand Mirror":"","Gingerbread Man":"","Christmas Lights":"","C4 Explosive":"C4炸弹","Jack O Lantern Lamp":"","Gingerbread House":"","Mini Sleigh":"","Golden Wreath":"","Coat Hanger":"衣架","Memory Locket":"",Cauldron:"",Mistletoe:"槲寄生","Witch's Cauldron":"","Gas Can":"汽油桶","Golden Candy Cane":"","Christmas Express":"",Eggnog:"","Raw Ivory":"","Oriental Log":"",Snowman:"雪人","Christmas Gnome":"","Pile of Vomit":"","Loaf of Bread":"","Deputy Star":"","Oriental Log Translation":"",Tangerine:"","Dancing Santa Claus '09":"",Photographs:"","Japanese/English Dictionary":"日英词典","Gold Nugget":"","Peg Leg":"","Birthday Cake '14":"14寸生日蛋糕","Zombie Brain":"僵尸脑","Rotten Eggs":"","Pack of Trojans":"","Snow Globe '09":"","Medal of Honor":"","Rusty Dog Tag":"","Human Head":"人头","Article on Crime":"","Piece of Cake":""};const x={"Effect: Provides 100 Lucky Shot Lotto tickets when used.":"","Effect: Improves success rate for the Transporting Drugs crime.":"","Effect: Increases happiness by 25 and booster cooldown by 30 minutes.":"","Effect: Increases happiness by 50 and booster cooldown by 30 minutes.":"","Effect: Increases happiness by 75 and booster cooldown by 30 minutes.":"","Effect: Increases energy by 10 and booster cooldown by 2 hours.":"","Effect: Opponent becomes Maced, decreasing Dexterity to 1/5th for 15-20 seconds.":"效果:对手被梅斯毒气影响,闪避降低至1/5,持续15-20s。","Effect: Opponent becomes Blinded, decreasing Speed to 1/5th for 15-20 seconds.":"效果:对手被致盲,速度降低至1/5,持续15-20s。","Effect: Opponent becomes Gassed, decreasing Dexterity to 1/3rd for 120-180 seconds.":"效果:对手变得疲惫,闪避降低至1/3,持续120-180s。","Effect: Opponent receives Severe Burning damage over 3 turns.":"效果:对手在3个回合内受到严重的燃烧伤害。","Effect: Opponent becomes Smoked, decreasing Speed to 1/3rd for 120-180 seconds.":"效果:对手被烟雾影响,速度降低至1/3持续120-180s。","Effect: User becomes Hastened, increasing Speed by 500% for 120 seconds.":"效果:使用者急促起来,速度提高500%持续120s。","Effect: User becomes Sharpened, increasing Dexterity by 500% for 120 seconds.":"效果:使用者变得更加敏锐,闪避增加500%,持续120s。","Effect: User becomes Strengthened, increasing Strength by 500% for 120 seconds.":"效果:使用者变得更强壮,力量增加500%,持续120秒。","Effect: User becomes Hardened, increasing Defense by 300% for 120 seconds and replenishing life by 25%.":"效果:使用者变得坚硬,在120秒内增加300%的防御,并补充25%的生命。","Effect: Opponent becomes Concussed, decreasing Dexterity to 1/5th for 15-20 seconds.":"效果:对手脑部震荡,闪避下降到1/5,持续15-20秒。","Effect: Increases happiness by 5-20 if under 20% of maximum.":"","Effect: Can be used with a Fruitcake and Cake Frosting to create a Special Fruitcake.":""};const k={"is a Defensive Armor.":"是一种防御性盔甲。","are a Defensive Armor.":"是一种防御性盔甲。","is a Machine Gun Weapon.":"是一种机枪。","is a SMG Weapon.":"是一种冲锋枪。","is a Shotgun Weapon.":"是一种霰弹枪。","is a Rifle Weapon.":"是一种步枪。","is a Heavy Artillery Weapon.":"是一种重炮。","is a Pistol Weapon.":"是一种手枪。","is a Piercing Weapon.":"是一种穿刺武器(piercing)。","is a Clubbing Weapon.":"是一种冲击武器(Clubbing)。","is a Slashing Weapon.":"是一种切割武器(slashing)。","is a Mechanical Weapon.":"是一种机械武器。","is a Temporary Weapon.":"是一种投掷武器。","is a Clothing Item.":"是一种服装物品。","is a Medical Item.":"是一种医疗物品。","is a Drug Item.":"是一种药(dú)品。","is an Energy Drink Item.":"是一种能量饮料。","is an Alcohol Item.":"是一种酒。","is a Candy Item.":"是一种糖。","is a Booster Item.":"是一种增益道具。","is an Enhancer Item.":"是一种增幅器。","is a Supply Pack Item.":"是一种补给包。","is an Electronic Item.":"是一种电子物品。","is a Jewelry Item.":"是一种珠宝物品。","is a Flower Item.":"是一种花。","is a Plushie Item.":"是一种玩偶。","is a class E Car Item.":"是一辆E级赛车。","is a class D Car Item.":"是一辆D级赛车。","is a class C Car Item.":"是一辆C级赛车。","is a class B Car Item.":"是一辆B级赛车。","is a class A Car Item.":"是一辆A级赛车。","is a Virus Item.":"是一种电脑病毒。","is an Other Item.":"是一个其他物品。","is a Book Item.":"是一本书。","is a Special Item.":"是一种特殊物品。"};const Ee={"API Keys":"API 密钥","General settings":"通用设置","Attack settings":"攻击设置","Create New Key":"创建新密钥","New key's name":"新密钥名","Public Only":"无需权限","Minimal Access":"最小权限","Limited Access":"有限权限","Full Access":"完全权限","Here you can share your account's information with":"在这里,你可以通过向脚本、扩展和应用程序等软件提供API密钥,与它们分享你的账户信息。一旦你创建了一个具有相关权限的API密钥,你可以在任何时候通过删除该密钥来取消授权。"};const S={_taskHint:{a_good_day_to_get_hard:{task:"实现3-10的连杀",hint:"建议买lost"},a_kimpossible_task:{task:"击败3个特定玩家且只使用近战武器和手雷",hint:"枪可以保持装备状态"},a_problem_at_the_tracks:{task:"击败3个特定玩家且不使用枪",hint:"枪可以保持装备状态,但是使用任何的枪任务就会失败。"},a_thor_loser:{task:"用Duke的锤子(Duke's hammer)打中8-16个不同的身体部位",hint:"找防御怪来打"},against_the_odds:{task:"击败2个特定玩家"},an_honorary_degree:{task:"击败特定玩家且不使用枪",hint:"枪可以保持装备状态,但是使用任何的枪任务就会失败。"},army_of_one:{task:"装备不同的面具攻击3次1个特定玩家",hint:"Duke会给你发2个面具,请确保其中一次攻击不戴任何面具。为了快速完成任务,可以选择右上角的逃跑选项,这样不需要等待目标出院。"},bakeout_breakout:{task:"把开锁器(lock pick)放到水果蛋糕(fruitcake)里,并且把特别的水果蛋糕(special fruitcake)发送给监狱里的任意自选玩家。",hint:"你需要自己买一个水果蛋糕,佐料Duke会给"},bare_knuckle:{task:"击败特定玩家,且不装备任何防具和武器。",hint:"取消装备所有东西。注意:前一次战斗残余的buff会让任务失败!"},batshit_crazy:{task:"用Penelope造成基于你的最大生命的一定伤害",hint:"你会收到Duke发来的Penelope"},battering_ram:{task:"攻击特定玩家3次"},big_tub_of_muscle:{task:"击败特定玩家,尽管他有巨大的力量"},birthday_surprise:{task:"获取特定物品并将它作为礼物发送给Duke",hint:"使用一个空盒子(Empty box)可以把物品装箱(parcel),然后用礼品包装将他包起来就可以得到一个生日礼物。"},bonnie_and_clyde:{task:"击败特定玩家和他的配偶"},bountiful:{task:"成功拿到2-5个悬赏赏金",hint:"请记得击败玩家后选择强制住院(hospitalize)才能领取赏金"},bounty_on_the_mutiny:{task:"悬赏特定玩家,然后等待赏金被人领取",hint:"你不能领取自己的悬赏赏金"},bring_it:{task:"在多人战斗中击败Duke",hint:"不像其他任务,这个任务你有一周的时间来完成。且不需要最后一击,你只需要参与到多人战斗中就可以。更多详情请群内询问大佬或查看公众号攻略。"},candy_from_babies:{task:"获得$50,000-$250,000的悬赏奖励",hint:"可以是总计多次悬赏奖励。请记得击败玩家后选择强制住院(hospitalize)才能获得悬赏奖励。"},charity_work:{task:"抢劫2个特定玩家",hint:"必须成功抢到钱,可以事先发一点钱给目标来确保成功抢劫"},cracking_up:{task:"击败特定玩家后选择审问选项(interrogate)获取密码,然后使用密码打开Duke的保险箱(Duke's Safe),并将获得的物品发送给Duke。",hint:"可能会需要数次审问才能获得密码"},critical_education:{task:"造成3-9次暴击"},cut_them_down_to_size:{task:"击败任意等级大于等于你的玩家"},dirty_little_secret:{task:"给特定玩家下一个悬赏,然后攻击拿悬赏的玩家",hint:"如果拿悬赏的玩家是匿名的,他的ID还是会被显示在任务界面。攻击不需要胜利,只需要攻击即可完成任务。"},double_jeopardy:{task:"击败特定玩家,且给他下一个悬赏",hint:"赏金可以是任何金额,因为它不需要被认领。"},drug_problem:{task:"Defeat 4 - 7 (P)."},emotional_debt:{task:"用催泪弹(tear gas)或辣椒水(pepper spray)命中特定玩家",hint:"不被阻挡才算数。Hazmat Suit会阻挡催泪弹,很多头盔阻挡辣椒水。(也有说法辣椒水不需要生效也能完成任务)"},estranged:{task:"打伤特定玩家的一条腿"},family_ties:{task:"强制住院特定玩家3次"},field_trip:{task:"在3个赌场游戏中赚到$100-$1,000,000"},fireworks:{task:"消耗250-1250发子弹",hint:"用弹药多的武器,如minigun、m249"},forgotten_bills:{task:"击败特定玩家"},frenzy:{task:"击败任意5-15个玩家"},get_things_jumping:{task:"造成2000-50000伤害,受到1000-25000伤害,基于你的生命上限"},graffiti:{task:"给特定目标喷辣椒水(pepper spray)"},guardian:{task:"击败特定玩家"},hammer_time:{task:"用锤子(hammer)击败特定玩家",hint:"枪可以保持装备,双锤不算锤子"},hands_off:{task:"击败3-5个特定玩家"},hare_meet_tortoise:{task:"击败特定玩家,尽管他的速度快如闪电",hint:"闪光弹和烟雾弹可以降低目标的速度"},hide_and_seek:{task:"从3-5人的列表中找到并击败1个特定玩家",hint:"给出的线索可以很容易识别目标,比如等级,地区,如无法找到请截图群聊询问。"},hiding_in_plain_view:{task:"击败在随机国家的特定玩家"},high_fliers:{task:"击败3个在随机国家的特定玩家"},hobgoblin:{task:"击败自选的某个相同玩家5次"},immovable_object:{task:"击败特定玩家,尽管他的防御很高"},inside_job:{task:"击败特定玩家并选择secrete选项藏一个道具"},"introduction:_duke":{task:"完成10个 Duke 任务"},keeping_up_appearances:{task:"抢劫特定玩家然后把钱发回给他",hint:"必须成功抢到钱,可以事先发一点钱给目标来确保成功抢劫"},kiss_of_death:{task:"击败特定玩家然后选择kiss选项"},lack_of_awareness:{task:"击败特定玩家"},lost_and_found:{task:"强制住院特定目标总计12小时"},loud_and_clear:{task:"使用3-11个爆炸性手榴弹(HEG或Grenade等)",hint:"手榴弹必须是可以造成伤害的类型"},loyal_customer:{task:"击败特定玩家"},make_it_slow:{task:"击败特定玩家且单次攻击中使用不低于5-9回合",hint:"存活7或9回合后击败目标,如果失败可以再次尝试。"},marriage_counseling:{task:"击败特定玩家的配偶"},massacrist:{task:"击败特定玩家"},meeting_the_challenge:{task:"抢劫到$10,000-$16,000,000金额的钱"},motivator:{task:"第一次对战中输给或平手给特定玩家",hint:"超时不会任务失败,所以如果看起来要赢了可以等5分钟超时。可以抽血减血,不装备防具并使用锈剑。"},new_kid_on_the_block:{task:"击败5名玩家"},no_man_is_an_island:{task:"从3个特定目标中选2个抢劫",hint:"可以自选哪两个目标,只要抢劫2个不同的目标"},no_second_chances:{task:"一次击败特定玩家"},out_of_the_frying_pan:{task:"去监狱使用Felovax以住院,再使用Zylkene"},painleth_dentitht:{task:"用棒球棒击败特定玩家",hint:"其他武器可以保持装备,但是使用其他武器会让任务失败"},party_tricks:{task:"击败特定玩家,尽管他的DEX很高"},pass_the_word:{task:"给特定玩家发送包含关键词的聊天信息",hint:"复制任务描述发送给目标就可以完成"},peak_experience:{task:"击败特定玩家"},proof_of_the_pudding:{task:"使用某个武器击败特定玩家,然后发送这个武器给他",hint:"不需要发送你具体使用的武器,只需发送同名武器"},rabbit_response:{task:"10-30分钟内击败3个特定玩家",hint:"攻击其中一个目标时开始计时,所以攻击前确定他们都不在住院"},reconstruction:{task:"装备菜刀(kitchen knife)和皮手套(leather gloves),击败特定玩家然后扔掉这两样东西。",hint:"战斗中不必须使用菜刀攻击"},red_faced:{task:"使用鳟鱼(trout)完成最后一击以击败特定玩家"},rising_costs:{task:"用砖头(Brick)打中特定玩家",hint:"没打中不算"},rolling_in_it:{task:"抢劫特定玩家",hint:"必须成功抢到钱,可以事先发一点钱给目标来确保成功抢劫"},safari:{task:"用步枪(rifle)在南非击败特定玩家"},scammer:{task:"击败特定玩家",hint:"目标可能有不少现金,可以试着打劫一下"},sellout_slayer:{task:"从物品市场或个人集市买一把枪,用这把枪击败任意2-6个玩家,然后再从物品市场或个人集市卖出这把枪"},sending_a_message:{task:"击败特定玩家"},show_some_muscle:{task:"攻击特定玩家",hint:"攻击目标即可,无论输赢"},sleep_aid:{task:"击败特定玩家"},some_people:{task:"将任何物品制作包裹寄给特定玩家",hint:"买一个空盒子(Empty box)并使用空盒子,选择一个你不要的物品就可以制成包裹。"},standard_routine:{task:"使用冲击武器(Clubbing)或拳头或脚踢击败特定玩家",hint:"可以考虑买一把金属双截棍(Metal Nunchakus)"},stomach_upset:{task:"打伤特定玩家的胃"},swan_step_too_far:{task:"从垃圾场翻到一个物品并且击败他之前的所有者",hint:"你可以多搜索几次,直到找到一个你能打得过的前所有者。"},the_executive_game:{task:"只使用拳头或脚踢击败特定玩家",hint:"已装备的其他武器不需要卸载"},the_tattoo_artist:{task:"只使用切割武器(slashing)或穿刺武器(piercing)击败特定玩家",hint:"已装备的其他武器不需要卸载"},three_peat:{task:"分别击败3次后选择留在街上、抢劫、强制住院任意玩家"},training_day:{task:"健身房消耗250 - 1,250能量E"},tree_huggers:{task:"击败5-8个特定玩家"},undercutters:{task:"击败4个特定玩家"},unwanted_attention:{task:"强制住院4个特定玩家"},withdrawal:{task:"打伤特定玩家的双臂",hint:"这个任务中手也算双臂"},wrath_of_duke:{task:"击败4个特定玩家"}},Hit:"击中","with a brick.":"使用砖头 (brick)",Put:""};const qe={"Virus Programming":"病毒编程"};const Me={"Buy Items":"购买物品",Buy:"买","in stock)":"存货)","Flower (":"花(","Plushie (":"玩偶(","Other (":"其他(","Temporary (":"临时(","Melee (":"近战(","Candy (":"糖果(","Booster (":"增益道具(","Car (":"车辆(","Electronic (":"电器(","Alcohol (":"酒类(",Sell:"卖出",items:"物品",Value:"卖价",Amount:"数量","items to Bits 'n' Bobs":"物品给胖鲍勃的杂货店","Select All":"全选","Unselect All":"全不选","SELL ITEMS":"卖出物品",Cancel:"取消","Are you sure you would like to sell these items?":"你确定想出售这些物品吗?","Total value:\n$":"总计:$",Yes:"是",No:"否","Are you sure you would like to buy":"你是否想买","Sell your points":"出售你的PT"};const Re={January:"一月",February:"二月",March:"三月",April:"四月",May:"五月",June:"六月",July:"七月",August:"八月",September:"九月",October:"十月",November:"十一月",December:"十二月"};const Oe=/[\u4e00-\u9fa5]/;String.prototype.contains=function e(t){if("string"===typeof t){return new RegExp(t).test(this)}if(t.test){return t.test(this)}};const T=window.fetch;window.fetch=async(e,t)=>{if(e.contains("newsTickers")){return new Response("{}")}const n=await T(e,t);if(e.includes("profiles.php?step=getUserNameContextMenu")&&p()["transEnable"]){setTimeout(()=>re(),200)}let i=n.clone();let o=await n.text();Le({url:e,init:t,text:o});return i};const l=new Date;const C=Object.freeze({PC:"pc",MOBILE:"mobile",TABLET:"tablet"});const s=Object.freeze({RAW:"raw",GM:"gm",PDA:"pda"});const V=window.innerWidth>=1e3?C.PC:window.innerWidth<=600?C.MOBILE:C.TABLET;const I=X();const A=Q("https://yata.yt/api/v1/travel/export/");const L=y?null:Z();const N=()=>{const e=`data:image/svg+xml,%3Csvg t='1656084442571' class='icon' viewBox='0 0 1024 1024' version='1.1' xmlns='http://www.w3.org/2000/svg' p-id='3924' width='14' height='14'%3E%3Cpath d='M512.032002 237.105181a29.310168 29.310168 0 0 1-29.310168-29.246172V29.310168a29.310168 29.310168 0 0 1 58.620336 0v178.548841A29.310168 29.310168 0 0 1 512.032002 237.105181zM512.032002 1024a29.310168 29.310168 0 0 1-29.310168-29.310168v-178.484845a29.310168 29.310168 0 1 1 58.620336 0v178.548841A29.310168 29.310168 0 0 1 512.032002 1024z m482.657834-482.657834h-178.484845a29.310168 29.310168 0 1 1 0-58.620336h178.548841a29.310168 29.310168 0 1 1 0 58.620336z m-786.830823 0H29.310172a29.310168 29.310168 0 0 1 0-58.620336h178.548841a29.310168 29.310168 0 0 1 0 58.620336z m519.263546-215.090557a29.182176 29.182176 0 0 1-20.734704-49.980876l126.264108-126.264108a29.310168 29.310168 0 1 1 41.405412 41.405412l-126.264108 126.264108a29.182176 29.182176 0 0 1-20.670708 8.575464zM170.741333 882.568839a29.182176 29.182176 0 0 1-20.734704-49.980876l126.264108-126.264108a29.246172 29.246172 0 1 1 41.405412 41.405412L191.412041 874.057371a29.182176 29.182176 0 0 1-20.670708 8.575464z m682.581338 0a29.182176 29.182176 0 0 1-20.670708-8.575464l-126.264108-126.264108a29.310168 29.310168 0 1 1 41.405412-41.405412l126.264108 126.264108a29.310168 29.310168 0 0 1-20.734704 49.91688zM297.005441 326.251609a29.182176 29.182176 0 0 1-20.670708-8.575464L150.006629 191.412037a29.310168 29.310168 0 1 1 41.405412-41.405412l126.264108 126.264108a29.310168 29.310168 0 0 1-20.734704 49.91688z' p-id='3925'%3E%3C/path%3E%3C/svg%3E`;return``};let _=Ke();let P=null;const D=oe();[{key:"transEnable",val:false},{key:"quickCrime",val:true},{key:"missionHint",val:true},{key:"xmasTownWT",val:true},{key:"xmasTownNotify",val:true},{key:"energyAlert",val:true},{key:"trvAlarm",val:true},{key:"_15Alarm",val:true},{key:"cityFinder",val:false},{key:"SEProtect",val:false},{key:"ptQuickBuy",val:false},{key:"quickAttIndex",val:2},{key:"quickFinishAtt",val:3},{key:"autoStartFinish",val:false},{key:"attRelocate",val:true},{key:"attReload",val:6},{key:"priceWatcher",val:{xan:-1,pt:-1}},{key:"isDev",val:false},{key:"_15AlarmTime",val:50},{key:"barsRedirect",val:true},{key:"floatDepo",val:true},{key:"companyRedirect",val:true},{key:"companyBWCollapse",val:true},{key:"removeScripts",val:true},{key:"abroadWarning",val:true},{key:"dangerZone",val:false}].forEach(e=>{if(typeof p()[e.key]!==typeof e.val)h(e.key,e.val)});let e=[];{if(l.getMonth()===11){e.push({domType:"plain",domId:"",domHTML:"圣诞小镇",tagName:"h4"});e.push({domType:"checkbox",domId:"wh-xmastown-wt",domText:" 圣诞小镇攻略",dictName:"xmasTownWT",isHide:true});e.push({domType:"checkbox",domId:"wh-xmastown-notify",domText:" 圣诞小镇物品提示",dictName:"xmasTownNotify",isHide:true})}e.push({domType:"plain",domId:"",domHTML:"翻译",tagName:"h4"});e.push({domType:"checkbox",domId:"wh-trans-enable",domText:" 开启翻译",dictName:"transEnable",isHide:true});e.push({domType:"button",domId:"",domText:"更新翻译词库",clickFunc:at});e.push({domType:"plain",domId:"",domHTML:"战斗优化",tagName:"h4"});e.push({domType:"select",domId:"wh-quick-attack-index",domText:"光速拔刀 ",domSelectOpt:[{domVal:"pri",domText:"主手"},{domVal:"sec",domText:"副手"},{domVal:"wea",domText:"近战"},{domVal:"gre",domText:"手雷"},{domVal:"fis",domText:"拳头"},{domVal:"kic",domText:"脚踢"},{domVal:"none",domText:"关闭"}],dictName:"quickAttIndex",isHide:true,tip:"将Start Fight按钮移动到指定格子上"});e.push({domType:"select",domId:"wh-quick-mug",domText:"光速跑路 ",domSelectOpt:[{domVal:"leave",domText:"跑路(LEAVE)"},{domVal:"mug",domText:"打劫(MUG)"},{domVal:"hosp",domText:"住院(HOSP)"},{domVal:"none",domText:"关闭"}],dictName:"quickFinishAtt",isHide:true,tip:"将结束后指定按钮移动到上面指定的格子上"});e.push({domType:"checkbox",domId:"wh-attack-relocate",domText:" 真·攻击界面转跳",dictName:"attRelocate",tip:"在无法打开攻击界面的情况下依然可以转跳到正确的攻击页面",isHide:true});e.push({domType:"plain",domId:"",domHTML:"飞行",tagName:"h4"});e.push({domType:"checkbox",domId:"wh-energy-alert",domText:" 起飞爆E警告",dictName:"energyAlert",tip:"起飞前计算来回是否会爆体,红字警告",isHide:true});e.push({domType:"checkbox",domId:"wh-trv-alarm-check",domText:" 飞行闹钟",dictName:"trvAlarm",tip:"(仅PC) 飞行页面将显示一个内建的闹钟,落地前声音提醒,需要打开浏览器声音权限",isHide:true});e.push({domType:"checkbox",domId:"",domText:" 外海警告",dictName:"abroadWarning",tip:"海外落地后每30秒通知警告"});e.push({domType:"plain",domId:"",domHTML:"公司",tagName:"h4"});e.push({domType:"checkbox",domId:"",domText:" 浮动存钱框",dictName:"floatDepo",tip:"打开公司或帮派的存钱页面后存钱框将浮动显示"});e.push({domType:"checkbox",domId:"",domText:" 公司转跳存钱",dictName:"companyRedirect",tip:"打开公司页面时自动打开存钱选项卡"});e.push({domType:"checkbox",domId:"",domText:" 收起公司冰蛙效率表",dictName:"companyBWCollapse",tip:"开启后可手动显示隐藏冰蛙公司表格"});e.push({domType:"plain",domId:"",domHTML:"啤酒",tagName:"h4"});e.push({domType:"checkbox",domId:"wh-qua-alarm-check",domText:' 啤酒提醒 ',dictName:"_15Alarm",tip:"每小时的整15分钟的倍数时通知提醒抢啤酒或者血包",isHide:true,changeEv:function(e){e.target.checked?_.start():_.stop()}});e.push({domType:"button",domId:"",domText:"啤酒提醒状态",clickFunc:function(){M(`啤酒提醒${_.status()}`)}});e.push({domType:"button",domId:"",domText:"啤酒提醒时间设定",clickFunc:function(){P.close();let i=m(`
5k, 1.5m, max, half, quarter, 1/2, 1/3, 1/4, 25%":"点此添加最大额度,或输入快捷选项如
5k, 1.5m, max, half, quarter, 1/2, 1/3, 1/4, 25%"};const Se={Stock:"股票",Name:"名称",Price:"单价","1h":"1时","24h":"24时","7d":"7天","1m":"1月","1y":"1年",Live:"实时",live:"实时","Last hour":"过去一时","Last day":"过去一天","Last week":"过去一周","Last month":"过去一月","Last year":"过去一年","All time":"有史以来",Owned:"持有",Dividend:"分红","West Side University":"西城大学","Insured On Us":"托恩人保","Torn City Investments":"Torn City 投资","Torn & Shanghai Banking":"Torn 和上海银行","Symbiotic Ltd.":"共生公司","Crude & Co":"原油公司","Feathery Hotels Group":"飞亚达酒店集团","Mc Smoogle Corp":"麦斯莫格公司","Wind Lines Travel":"风线旅行","Performance Ribaldry":"低俗演绎","Syscore MFG":"系统核心 MFG","Evil Ducks Candy Corp":"邪恶鸭糖果公司","Munster Beverage Corp.":"明斯特饮料公司","Torn City Clothing":"Torn City 服饰","Lucky Shots Casino":"幸运赌场","TC Media Productions":"TC 媒体制作公司","International School TC":"TC 国际学校","Big Al's Gun Shop":"大艾尔枪店","Torn City Health Service":"TC 健康服务中心","Alcoholics Synonymous":"酒瘾相似","Torn City Motors":"TC 汽车","Legal Authorities Group":"权威法律集团","The Torn City Times":"托恩时代",Grain:"谷物","Eaglewood Mercenary":"鹰林佣兵","Home Retail Group":"家庭零售集团","Empty Lunchbox Traders":"空饭盒贸易商","Messaging Inc.":"信息公司","TC Music Industries":"TC 音乐工业公司","I Industries Ltd.":"一号工业有限公司","Tell Group Plc.":"讲述集团",Yazoo:"","1x Random Property":"1个随机房产","10% Bank Interest Bonus":"10% 银行利润增益","a 10% Bank Interest Bonus":"10% 银行利润增益","100 Energy":"100 能量E","Private Jet Access":"解锁私人飞机","1000 Happiness":"1000 快乐","Advanced Firewall":"高级防火墙","an Advanced Firewall":"高级防火墙","Company Sales Boost":"提升公司销量","a Company Sales Boost":"提升公司销量","Free Education Courses":"免费教育课程","a Free Education Courses":"免费教育课程","10% Racing Skill Boost":"提升 10% 赛车技能增长","10% Home Upgrade Discount":"10% 房屋设施费用折扣","Free Classified Advertising":"免费分类广告","50% Coding Time Reduction":"缩减 50% 编程时间","Company Advertising Boost":"公司广告增益","a Company Advertising Boost":"公司广告增益","10% Course Time Reduction":"缩减 10% 教育时间","a 10% Education Course Time Reduction":"缩减 10% 教育时间","Free Banner Advertising":"免费横幅广告","a Free Banner Advertising":"免费横幅广告",Inactive:"未激活","Ready for collection":"分红可领取","Benefit active":"分红已激活",provides:"(满足分红条件时)将提供",Every:"在每","when holding at least":",当你至少持有","shares currently valued at":"股时,目前总价:",days:"日后",Buy:"再购买","more shares for":"股,目前总价","to unlock the":"来解锁",increment:"增益",After:"在",in:"在","You currently have":"你已获得",benefit:"增益","You cannot buy shares while traveling":"你在旅行时无法购买","You cannot sell shares while traveling":"你在旅行时无法出售","How many shares would you like to":"多少股你想","You will be able to collect":"你将可以领取",buy:"买入",sell:"卖出","will buy you":"可以买",shares:"股",share:"股",Your:"你持有的","shares are worth":"股目前值","Do you want to":"你想","shares at":"股","each?":"单价?","For a total of":"总价:",Back:"返回","Confirm Transaction":"确认交易","Price updating...":"价格更新中","after the":"已扣除","fee of":"手续费:","You have":"你已",sold:"卖出",bought:"购入",each:"单价","Buy date":"购入日期",Shares:"购入数量",Value:"购入总价",Bought:"购入单价",Current:"目前单价",Change:"变化",Profit:"利润",View:"查看",Sell:"售出",Merge:"合并","Current Price:":"当前股价:","change:":"变化:","start:":"开始:","end:":"结束:","high:":"最高:","low:":"最低:"};const Te={Primary:"主手",Secondary:"副手",Melee:"近战",Temporary:"投掷",Defensive:"防御",Armor:"防御",Clothing:"衣物",Jewelry:"珠宝","Your items -":"你的物品 - ",All:"全部",Medical:"医疗",Drugs:"药物","Energy Drink":"能量饮料",Alcohol:"酒类",Candy:"糖果",Boosters:"增益道具",Enhancer:"增幅器","Supply Packs":"补给包",Electronics:"电器",Flowers:"花",Plushies:"玩偶",Cars:"车辆",Viruses:"病毒",Miscellaneous:"杂项",Artifacts:"文物",Books:"书",Special:"特殊",Collectibles:"可收集物",Donate:"捐献",Drink:"喝下",Eat:"吃下",Enlist:"车辆注册",Equip:"装备",Listen:"听",Open:"打开",Propose:"求婚",Return:"退还",Sell:"卖出",Send:"发送",Take:"使用",Trash:"丢弃","Turn on":"开启",Unequip:"脱下",Use:"使用","Donate this Item":"捐献该物品","Equip this Item":"装备该物品","Sell this Item":"卖出该物品","Send this Item":"发送该物品","Trash this Item":"丢弃该物品","Unequip this Item":"脱下该物品","Return to Faction":"退还帮派","Buy:":"买价:","Sell:":"卖价:","Value:":"价值:","Accuracy:":"命中:","Damage:":"伤害:","Circ:":"流通:","Quality:":"品质:","Stealth:":"隐匿:","Caliber:":"口径:","Ammo:":"弹药:","Bonus:":"额外:","Masked:":"面具:","Coverage:":"覆盖率:","Armor:":"护甲:","Top Speed:":"最高速度:","Dirt:":"泥路:","Tarmac:":"柏油路:","Acceleration:":"加速:","Safety:":"安全:","Braking:":"制动:","Handling:":"操控:","Rate of Fire:":"开火率:","Read:":"已读:"};const Ce={"Ammunition Pack":"弹药包","Clothing Cache":"服饰箱","First Aid Kit":"急救包","Small First Aid Kit":"小型急救包","Empty Blood Bag":"空血包","Blood Bag : A-":"A-血包","Blood Bag : A+":"A+血包","Blood Bag : AB+":"AB+血包","Blood Bag : AB-":"AB-血包","Blood Bag : O+":"O+血包","Blood Bag : O-":"O-血包","Blood Bag : B-":"B-血包","Blood Bag : B+":"B+血包","Blood Bag : Irradiated":"辐射血包",Morphine:"吗啡","Neumune Tablet":"雄烯二醇抗辐射药品",Antidote:"抗生素",Felovax:"妙三多",Zylkene:"法国威隆苏劲猫犬降压药","Cake Frosting":"蛋糕糖霜","Lock Picking Kit":"开锁器套装","Special Fruitcake":"特别的水果蛋糕","Sawed-Off Shotgun":"截短型霰弹枪",Thompson:"汤普森冲锋枪",TMP:"施泰尔TMP冲锋枪","Benelli M1 Tactical":"贝内利M1战术霰弹枪",MP5k:"MP5k","MP5 Navy":"MP5海军型",Skorpion:"蝎式冲锋枪","MP 40":"MP40","SKS Carbine":"SKS卡宾枪","Vektor CR-21":"维克托CR-21",P90:"P90","Ithaca 37":"伊萨卡37泵动式霰弹枪","XM8 Rifle":"XM8突击步枪",AK74U:"AK74U短管突击步枪","AK-47":"AK-47","Bushmaster Carbon 15":"碳15短管步枪","M4A1 Colt Carbine":"M4A1卡宾枪","Benelli M4 Super":"贝内利M4 Super半自动霰弹枪","Heckler & Koch SL8":"HK SL8半自动步枪","M16 A2 Rifle":"M16A2步枪","Mag 7":"Mag 7","Steyr AUG":"施泰尔AUG突击步枪","SIG 550":"SIG 550突击步枪","Enfield SA-80":"恩菲尔德SA80","Tavor TAR-21":"21世纪他泊山突击步枪TAR-21","9mm Uzi":"9mm Uzi","M249 SAW":"M249班用自动武器",Minigun:"加特林式旋管机枪",Jackhammer:"转轮式自动霰弹枪","SIG 552":"SIG 552卡宾枪","ArmaLite M-15A4":"阿玛莱特M15A4","Nock Gun":"诺克枪","Snow Cannon":"雪球加农炮","Rheinmetall MG 3":"MG3通用机枪","Gold Plated AK-47":"黄金AK47","Lorcin 380":"洛辛380","Flare Gun":"信号枪","Glock 17":"格洛克17",Taurus:"金牛座","Springfield 1911":"M1911","Raven MP25":"","Ruger 22/45":"",Crossbow:"十字弓",Slingshot:"弹弓","S&W Revolver":"S&W左轮手枪","Beretta M9":"巴雷特M9",USP:"USP","Beretta 92FS":"巴雷特92FS",Luger:"鲁格手枪",Fiveseven:"FN手枪",Blowgun:"吹箭",Blunderbuss:"手铳",Magnum:"马格南左轮手枪","S&W M29":"","Desert Eagle":"沙漠之鹰","BT MP9":"","Cobra Derringer":"","Qsz-92":"",Harpoon:"鱼叉",Flamethrower:"喷火器","Dual 92G Berettas":"","Type 98 Anti Tank":"98式反坦克炮","Beretta Pico":"","Homemade Pocket Shotgun":"自制袖珍霰弹枪","RPG Launcher":"RPG发射器",Hammer:"锤子","Lead Pipe":"铅管","Baseball Bat":"棒球棒",Crowbar:"撬棍","Bo Staff":"玻之武杖","Knuckle Dusters":"指虎","Pen Knife":"笔刀","Leather Bullwhip":"皮牛鞭","Kitchen Knife":"厨房刀","Frying Pan":"平底锅",Sai:"铁尺","Plastic Sword":"塑料剑","Butterfly Knife":"蝴蝶刀",Dagger:"匕首","Swiss Army Knife":"瑞士军刀","Chain Whip":"链条鞭",Axe:"斧头","Wooden Nunchakus":"木制双截棍",Taser:"电击枪","Ninja Claws":"忍者之爪",Scimitar:"弯刀",Chainsaw:"电锯","Cricket Bat":"板球棒","Ice Pick":"冰镐",Katana:"军官武士刀",Spear:"矛",Kama:"镰刀","Twin Tiger Hooks":"虎头双钩","Samurai Sword":"武士刀","Claymore Sword":"苏格兰阔刃大斩剑","Rusty Sword":"锈剑",Macana:"美洲黑曜石匕首",Kodachi:"太刀","Wushu Double Axes":"武术双斧",Guandao:"关刀","Metal Nunchakus":"金属双截棍",Pillow:"枕头","Diamond Icicle":"钻石冰锥","Diamond Bladed Knife":"钻石刀","Pair of Ice Skates":"成对滑冰鞋","Fine Chisel":"细凿",Flail:"连枷","Ivory Walking Cane":"象牙手杖","Pair of High Heels":"一双高跟鞋",Madball:"台球","Yasukuni Sword":"战犯之剑","Naval Cutlass":"海军弯刀","Meat Hook":"肉钩","Petrified Humerus":"石化肱骨","Blood Spattered Sickle":"溅血之镰",Cleaver:"劈肉刀","Golden Broomstick":"黄金扫帚","Riding Crop":"马鞭","Devil's Pitchfork":"恶魔之叉","Dual Hammers":"双锤","Dual Axes":"双斧","Dual Scimitars":"双持弯刀","Dual Samurai Swords":"双武士刀",Sledgehammer:"巨锤","Bread Knife":"面包刀","Poison Umbrella":"毒伞","Leather Boots":"皮靴","Leather Gloves":"皮手套","Leather Helmet":"皮制头盔","Leather Pants":"皮裤","Leather Vest":"皮背心","Chain Mail":"锁子甲","Flak Jacket":"防弹夹克","Police Vest":"警察背心","Hiking Boots":"登山靴","Construction Helmet":"建筑头盔","Bulletproof Vest":"防弹背心","Full Body Armor":"全身甲","Safety Boots":"安全靴","WWII Helmet":"二战头盔","Kevlar Gloves":"凯夫拉手套","Outer Tactical Vest":"外用战术背心","Combat Gloves":"战斗手套","Combat Boots":"战斗靴","Combat Pants":"战斗裤","Combat Helmet":"战斗头盔","Combat Vest":"战斗背心","Liquid Body Armor":"液体防弹衣","Flexible Body Armor":"弹性防弹衣","Medieval Helmet":"中世纪头盔","Motorcycle Helmet":"摩托车头盔","Welding Helmet":"电焊头盔","Hazmat Suit":"危险品防护服",Brick:"砖头","Ninja Star":"忍者之星",Fireworks:"烟花","Claymore Mine":"阔刀地雷","Stick Grenade":"木柄手榴弹",Snowball:"雪球",HEG:"高爆手雷",Grenade:"手雷","Flash Grenade":"闪光弹","Pepper Spray":"辣椒喷雾","Tear Gas":"催泪弹",Trout:"鳟鱼","Throwing Knife":"飞刀","Molotov Cocktail":"莫洛托夫鸡尾酒","Smoke Grenade":"烟雾弹",Melatonin:"褪黑素",Tyrosine:"酪氨酸",Epinephrine:"肾上腺素",Sand:"沙",Serotonin:"血清素","Nail Bomb":"钉子炸弹","Concussion Grenade":"震撼弹",Book:"书","Can of Goose Juice":"鹅汁","Can of Damp Valley":"湿谷","Can of Crocozade":"鳄鱼","Can of Santa Shooters":"圣诞射手","Can of Munster":"魔瓜","Can of Rockstar Rudolph":"摇滚明星","Can of Red Cow":"红牛","Can of X-MASS":"XS","Can of Taurine Elite":"精英牛磺酸","Bag of Bon Bons":"一袋糖果","Box of Extra Strong Mints":"一盒特浓薄荷糖","Bag of Chocolate Kisses":"一袋巧克力之吻","Box of Sweet Hearts":"一盒甜蜜的心","Box of Chocolate Bars":"一盒巧克力棒",Lollipop:"棒棒糖","Box of Bon Bons":"一盒糖果","Big Box of Chocolate Bars":"一大盒巧克力棒","Bag of Candy Kisses":"一袋糖果之吻","Bag of Tootsie Rolls":"一袋图罗软糖","Bag of Bloody Eyeballs":"一袋血腥眼球","Bag of Chocolate Truffles":"一袋巧克力松露","Bag of Reindeer Droppings":"一袋驯鹿粪便","Red Easter Egg":"红复活节蛋","Yellow Easter Egg":"黄复活节蛋","Blue Easter Egg":"蓝复活节蛋","Pink Easter Egg":"粉复活节蛋","Orange Easter Egg":"橙复活节蛋","Black Easter Egg":"黑复活节蛋","Green Easter Egg":"绿复活节蛋","Brown Easter Egg":"棕复活节蛋","Pixie Sticks":"小精灵棒","Bag of Sherbet":"一袋雪糕",Jawbreaker:"","Bag of Humbugs":"","Purple Easter Egg":"紫复活节蛋","White Easter Egg":"白复活节蛋","Birthday Cupcake":"生日纸杯蛋糕","Gold Easter Egg":"金复活节蛋",Shrooms:"魔幻蘑菇",LSD:"兴奋剂",Ketamine:"凯粉",Ecstasy:"摇头丸",PCP:"天使尘埃",Speed:"病毒",Xanax:"XAN","Love Juice":"爱情果汁",Cannabis:"大麻",Opium:"罂粟",Vicodin:"维柯丁","Heavy Duty Padlock":"重型挂锁","High-Speed Drive":"高速硬盘","Tracking Device":"追踪设备","Tumble Dryer":"烘干机","Duct Tape":"胶带",Chloroform:"氯仿",Glasses:"眼镜","Fanny Pack":"腰包","Slim Crowbar":"细撬棍","Advanced Driving Manual":"高级驾驶手册","Cut-Throat Razor":"割喉剃刀","Wireless Dongle":"无线加密狗",Screwdriver:"螺丝刀","Ergonomic Keyboard":"人体工学键盘","Mountain Bike":"山地车",Balaclava:"巴拉克拉瓦头套","Small Suitcase":"小手提箱","Medium Suitcase":"中手提箱","Rosary Beads":"念珠","Large Suitcase":"大手提箱","Wind Proof Lighter":"防风打火机","Bottle of Beer":"瓶装啤酒","Bottle of Champagne":"瓶装香槟","Bottle of Tequila":"瓶装龙舌兰酒","Bottle of Sake":"瓶装清酒","Bottle of Kandy Kane":"","Bottle of Pumpkin Brew":"瓶装南瓜啤酒","Bottle of Wicked Witch":"邪恶女巫蛙腿酒","Bottle of Minty Mayhem":"","Bottle of Christmas Cocktail":"圣诞鸡尾酒","Bottle of Mistletoe Madness":"槲寄生疯狂","Bottle of Stinky Swamp Punch":"","Bottle of Moonshine":"瓶装私酒","Bottle of Green Stout":"瓶装绿色世涛","Bottle of Christmas Spirit":"","Glass of Beer":"一杯扎啤","Lawyer Business Card":"律师卡(黑卡)","Erotic DVD":"瑟琴DVD","Gift Card":"礼品卡","Book of Carols":"颂歌之书","Feathery Hotel Coupon":"FHC金卡",Skateboard:"速度SE 滑板","Boxing Gloves":"防御SE 拳击手套",Dumbbells:"力量SE 哑铃",Parachute:"闪避SE 降落伞","Pack of Music CDs":"","Pack of Blank CDs : 100":"","RS232 Cable":"","Hard Drive":"","MP3 Player":"","Personal Computer":"","CD Player":"","DVD Player":"",Television:"","Game Console":"",Microwave:"",Laptop:"","Gold Ring":"金戒指","Plain Silver Ring":"纯银戒指","Sapphire Ring":"蓝宝石戒指","Plastic Watch":"塑料手表","Gold Necklace":"金项链","Silver Necklace":"银项链","Gold Watch":"金表","Diamond Ring":"钻戒","Stainless Steel Watch":"不锈钢手表","Pearl Necklace":"珍珠项链","Cocktail Ring":"鸡尾酒会戒指","Crystal Bracelet":"水晶手链","Statement Necklace":"宣言项链","Gold Chain":"金链子","Simple Virus":"简单病毒","Tunneling Virus":"隧道病毒","Polymorphic Virus":"多态病毒","Firewalk Virus":"火行病毒","Armored Virus":"加壳病毒","Stealth Virus":"隐形病毒","Bunch of Flowers":"花束","Single Red Rose":"单支红玫瑰","Bunch of Black Roses":"黑玫瑰束","Dozen Roses":"一打玫瑰",Dahlia:"大丽花",Crocus:"番红花","Banana Orchid":"香蕉兰花",Orchid:"兰花",Edelweiss:"雪绒花","Ceibo Flower":"木棉花",Heather:"帚石楠","African Violet":"非洲紫罗兰","Cherry Blossom":"樱花",Peony:"牡丹花","Tribulus Omanense":"蒺藜花","Box of Medical Supplies":"医疗补给包","Lottery Voucher":"彩票券","Box of Grenades":"手雷箱","Six Pack of Alcohol":"6瓶装酒箱","Denim Cache":"牛仔补给箱","Drug Pack":"小DP 药dú品包","Keg of Beer":"桶装啤酒","Elderly Cache":"中年衣服补给箱","Cutesy Cache":"可爱衣服补给箱","Six Pack of Energy Drink":"6瓶装饮料箱","Gentleman Cache":"绅士衣服补给箱","Wannabe Cache":"潮流衣服补给箱","Elegant Cache":"优雅衣服补给箱","Naughty Cache":"调皮衣服补给箱","Goodie Bag":"礼品袋","Anniversary Present":"周年纪念礼物",Parcel:"包裹","Broken Bauble":"","Bronze Ribbon":"","Silver Ribbon":"","Coin : Dump":"","Coin : Church":"","Santa's Elf '09":"","Metal Dog Tag":"","Coin : Hospital":"","Birthday Cake '05":"","Bunch of Balloons '05":"","Jack-O-Lantern '05":"","Coin : Race Track":"","Coin : Casino":"","Coin : Estate Agents":"","Coin : Travel Agency":"","Coin : Education":"","Coin : Museum":"","Coin : Drugs":"","Coin : Auction House":"","Coin : Stock Exchange":"","Coin : Companies":"","Poker Chip":"","Coin : Factions":"","Voodoo Doll":"","Rabbit Foot":"","Gold Ribbon":"","Coin : Jail":"","Santa's List '17":"","Snowflake '05":"","Cheesus '18":"","Bronze Microphone":"","Paper Bag":"","Toast Jesus '18":"","Silver Dog Tag":"","Christmas Tree '05":"","Bronze Dog Tag":"","Bronze Paint Brush":"","10 Ton Pacifier":"","Single White Rose":"","Chocolate Egg '05":"","Annoying Man":"","Scammer in the Slammer '18":"","Gold Microphone":"","Amazon Doll":"",Soapbox:"","Gold Paint Brush":"","Dollar Bill Collectible":"","Octopus Toy":"","Gold Dog Tag":"","Crazy Cow":"","Citrus Squeezer":"","Strife Clown":"","Evil Doll":"","Blow-Up Doll":"","Backstage Pass":"","Karate Man":"","YouYou Yo Yo":"","Flea Collar":"","Ms Torn Crown":"","Kevlar Helmet":"","Cursed Moon Pendant":"","Mr Torn Crown":"","Mr Brownstone Doll":"","Burmese Flag":"","Chocobo Flute":"","Skeleton Key":"","Yoda Figurine":"","Barbie Doll":"","China Tea Set":"",Dreamcatcher:"","Non-Anon Doll":"","Christmas Card '09":"","Christmas Stocking '09":"","Jester's Cap":"","Official Ninja Kit":"","Silver Paint Brush":"","Tank Top":"",Jacket:"夹克",Trainers:"",Bandana:"","Mediocre T-Shirt":"普通的T恤","Sports Shades":"","Diving Gloves":"","Proda Sunglasses":"",Speedo:"",Flippers:"","Kabuki Mask":"",Sweater:"",Snorkel:"",Bikini:"比基尼",Wetsuit:"","Mountie Hat":"","Exotic Gentleman Mask":"","Young Lady Mask":"年轻女士面具","Moustache Man Mask":"","Old Lady Mask":"老妇人面具","Nun Mask":"","Scarred Man Mask":"刀疤男面具","Ginger Kid Mask":"","Psycho Clown Mask":"","Trench Coat":"","Festive Socks":"","Coconut Bra":"椰壳文胸","Badge : 15th Anniversary":"","Paper Crown : Red":"纸皇冠:红色","Paper Crown : Blue":"纸皇冠:蓝色","Paper Crown : Green":"纸皇冠:绿色","Paper Crown : Yellow":"纸皇冠:黄色","Party Hat '19":"","String Vest":"","Santa Gloves":"","Classic Fedora":"",Sweatpants:"","Santa Trousers":"","Pinstripe Suit Trousers":"","Santa Boots":"","Denim Cap":"","Tube Dress":"","Hair Bow":"","Pleated Skirt":"","Reading Glasses":"",Pullover:"","Denim Vest":"","Basketball Shirt":"","Denim Jacket":"","Santa Jacket":"","Bandit Mask":"",Durag:"",Chinos:"",Tights:"","Collared Shawl":"","Denim Shirt":"",Shrug:"",Dungarees:"",Sandals:"","Check Skirt":"","Ballet Shoes":"","Sun Hat":"","Cork Hat":"",Pantyhose:"","Denim Shoes":"","Knee Socks":"",Shorts:"","Golf Socks":"","Bucket Hat":"","Maid Hat":"","Panama Hat":"","Oversized Shirt":"","Pencil Skirt":"","Floral Dress":"","Booty Shorts":"",Blouse:"",Halterneck:"","Snapback Hat":"","Crop Top":"",Bermudas:"","Peplum Top":"","Baseball Cap":"","Santa Hat":"","Baseball Jacket":"","Capri Pants":"",Thong:"","Fishnet Stockings":"","Chin Diaper":"","Chest Harness":"","Platform Shoes":"","Fur Hat":"","Polo Shirt":"","Bunny Ears":"","Denim Jeans":"",Skirt:"","Puppy Ears":"",Tutu:"",Camisole:"","Assless Chaps":"","Head Scarf":"","Puffer Vest":"",Choker:"","Boob Tube":"","Tighty Whities":"","Puffer Jacket":"","Travel Socks":"","Fur Scarf":"",Waistcoat:"","Derby Shoes":"",Braces:"",Blindfold:"","Medical Mask":"",Nightgown:"","Flip Flops":"","Saggy Pants":"","Square Sunglasses":"",Cardigan:"","Gym Shorts":"","Knee-high Boots":"","Sports Jacket":"","Bowler Hat":"","Cover-ups":"","Bingo Visor":"","Yoga Pants":"",Raincoat:"","Silver Hoodie":"","Fisherman Hat":"",Lingerie:"","Bush Hat":"",Turtleneck:"","Lolita Dress":"","Fitted Shirt":"",Blazer:"","Opera Gloves":"","Mini Skirt":"","Shoulder Sweater":"","Suit Trousers":"",Mackintosh:"","Black Oxfords":"","Shutter Shades":"","Cat Ears":"","Fascinator Hat":"",Poncho:"","Fur Coat":"","Silver Flats":"","Kitty Shoes":"","Neck Tie":"","Maid Uniform":"","Bow Tie":"","Polka Dot Dress":"",Slippers:"","Gold Sneakers":"","Smoking Jacket":"","Parachute Pants":"","Latex Gloves":"",Collar:"","Nipple Tassels":"","Scrooge's Boots":"",Mankini:"","Scrooge's Gloves":"","Ripped Jeans":"","Santa Beard":"","Ball Gown":"","Scrooge's Trousers":"","Unicorn Horn":"",Onesie:"","Wedding Veil":"","Christmas Sweater '15":"","Bunny Nose":"",Straitjacket:"",Monocle:"","Scrooge's Topcoat":"","Wedding Dress":"","Witch's Hat":"",Bathrobe:"","Tiger King Mask '20":"","Greta Mask '19":"","Scrooge's Top Hat":"","Sandworm Mask '21":"",Duster:"","Ski Mask":"","Pennywise Mask '20":"","Anatoly Mask '19":"","Ball Gag":"","Elon Musk Mask '17":"","Heart Sunglasses":"","Jigsaw Mask '19":"",Pipe:"","Michael Myers Mask '18":"","Respo Hoodie":"","Bunny Suit":"","Donald Trump Mask '16":"","Gronch Mask '18":"","Chevrolet Cavalier":"","Peugeot 106":"","Volkswagen Beetle":"大众甲壳虫","Citroen Saxo":"","Vauxhall Corsa":"","Vauxhall Astra GSI":"","Honda Civic":"本田思域","Classic Mini":"经典MINI","Volkswagen Golf GTI":"","Renault Clio":"","Alfa Romeo 156":"","Audi S4":"奥迪S4","Reliant Robin":"","Nissan Micra":"","Honda Integra R":"","Ford Mustang":"福特野马","Lotus Exige":"","Hummer H3":"","Honda S2000":"","Honda Accord":"","Holden SS":"","Mini Cooper S":"","Seat Leon Cupra":"","Toyota MR2":"","Volvo 850":"","Honda NSX":"","BMW X5":"宝马X5","TVR Sagaris":"","BMW M5":"宝马M5","Ford Focus RS":"","Subaru Impreza STI":"","Chevrolet Corvette Z06":"","Audi TT Quattro":"","Fiat Punto":"","Pontiac Firebird":"","Dodge Charger":"","BMW Z8":"宝马Z8","Porsche 911 GT3":"","Nissan GT-R":"","Ford GT40":"","Audi R8":"奥迪R8","Mitsubishi Evo X":"","Lexus LFA":"","Ferrari 458":"","Lamborghini Gallardo":"兰博基尼盖拉多","Mercedes SLR":"","Aston Martin One-77":"","Sierra Cosworth":"","Senet Board":"","Florin Coin":"","Leopard Coin":"","Gold Noble Coin":"","Vairocana Buddha Sculpture":"","Black Senet Pawn":"","White Senet Pawn":"","Ganesha Sculpture":"","Quran Script : Ubay Ibn Kab":"","Quran Script : Ali":"","Quran Script : Ibn Masud":"","Shabti Sculpture":"","Egyptian Amulet":"","Sheep Plushie":"绵羊","Kitten Plushie":"猫咪","Teddy Bear Plushie":"泰迪熊","Stingray Plushie":"黄貂鱼","Wolverine Plushie":"貂熊","Jaguar Plushie":"美洲豹","Nessie Plushie":"尼斯湖水怪","Red Fox Plushie":"赤狐","Chamois Plushie":"岩羚羊","Monkey Plushie":"猴子","Panda Plushie":"大熊猫","Lion Plushie":"狮子","Camel Plushie":"骆驼","Dong : Effy":"狗狗:艾菲","Dong : Jeremy":"狗狗:杰里米","Dong : Greg":"狗狗:格雷格","Dong : Holly":"狗狗:霍利","Dong : Thomas":"狗狗:托马斯","Toilet Paper":"厕纸","Stink Bombs":"臭气弹","Dog Poop":"狗屎","Horse's Head":"马头","Christmas Cracker":"圣诞爆竹","Small Explosive Device":"小型爆炸装置","Business Class Ticket":"商务舱机票","Strippogram Voucher":"脱衣舞券","Poison Mistletoe":"毒槲寄生","Donator Pack":"捐赠者补给箱(DP)","Casino Pass":"赌场通行证","Cesium-137":"铯137","Dirty Bomb":"脏弹","Box of Tissues":"一盒抽纸","Pack of Cuban Cigars":"","Birthday Wrapping Paper":"生日包装纸","Empty Box":"空盒子","Bolt Cutters":"","Christmas Wrapping Paper":"圣诞包装纸","Soap on a Rope":"","Generic Wrapping Paper":"","Crazy Straw":"",Fruitcake:"水果蛋糕","Pele Charm":"","Mayan Statue":"","Steel Drum":"","Sumo Doll":"","Hockey Stick":"",Chopsticks:"筷子","Soccer Ball":"足球",Snowboard:"雪球","Paper Weight":"","Yakitori Lantern":"",Sensu:"","Dart Board":"","Elephant Statue":"","Certificate of Lame":"","Yucca Plant":"","Jade Buddha":"玉佛像",Compass:"","Nodding Turtle":"","Fire Hydrant":"","Model Space Ship":"","Tailors Dummy":"",Sextant:"","Afro Comb":"","Maneki Neko":"","Blank Tokens":"","Printing Paper":"","Stick of Dynamite":"","Blank Credit Cards":"","Advent Calendar":"","Certificate of Awesome":"","Glow Stick":"","Ship in a Bottle":"","Santa's Snot":"","Christmas Angel":"","Sprig of Holly":"","Polar Bear Toy":"","Turkey Baster":"","Electronic Pumpkin":"","Salt Shaker":"","Cinnamon Ornament":"","Spooky Paper Weight":"","Lump of Coal":"","Vanity Hand Mirror":"","Gingerbread Man":"","Christmas Lights":"","C4 Explosive":"C4炸弹","Jack O Lantern Lamp":"","Gingerbread House":"","Mini Sleigh":"","Golden Wreath":"","Coat Hanger":"衣架","Memory Locket":"",Cauldron:"",Mistletoe:"槲寄生","Witch's Cauldron":"","Gas Can":"汽油桶","Golden Candy Cane":"","Christmas Express":"",Eggnog:"","Raw Ivory":"","Oriental Log":"",Snowman:"雪人","Christmas Gnome":"","Pile of Vomit":"","Loaf of Bread":"","Deputy Star":"","Oriental Log Translation":"",Tangerine:"","Dancing Santa Claus '09":"",Photographs:"","Japanese/English Dictionary":"日英词典","Gold Nugget":"","Peg Leg":"","Birthday Cake '14":"14寸生日蛋糕","Zombie Brain":"僵尸脑","Rotten Eggs":"","Pack of Trojans":"","Snow Globe '09":"","Medal of Honor":"","Rusty Dog Tag":"","Human Head":"人头","Article on Crime":"","Piece of Cake":""};const k={"Effect: Provides 100 Lucky Shot Lotto tickets when used.":"","Effect: Improves success rate for the Transporting Drugs crime.":"","Effect: Increases happiness by 25 and booster cooldown by 30 minutes.":"","Effect: Increases happiness by 50 and booster cooldown by 30 minutes.":"","Effect: Increases happiness by 75 and booster cooldown by 30 minutes.":"","Effect: Increases energy by 10 and booster cooldown by 2 hours.":"","Effect: Opponent becomes Maced, decreasing Dexterity to 1/5th for 15-20 seconds.":"效果:对手被梅斯毒气影响,闪避降低至1/5,持续15-20s。","Effect: Opponent becomes Blinded, decreasing Speed to 1/5th for 15-20 seconds.":"效果:对手被致盲,速度降低至1/5,持续15-20s。","Effect: Opponent becomes Gassed, decreasing Dexterity to 1/3rd for 120-180 seconds.":"效果:对手变得疲惫,闪避降低至1/3,持续120-180s。","Effect: Opponent receives Severe Burning damage over 3 turns.":"效果:对手在3个回合内受到严重的燃烧伤害。","Effect: Opponent becomes Smoked, decreasing Speed to 1/3rd for 120-180 seconds.":"效果:对手被烟雾影响,速度降低至1/3持续120-180s。","Effect: User becomes Hastened, increasing Speed by 500% for 120 seconds.":"效果:使用者急促起来,速度提高500%持续120s。","Effect: User becomes Sharpened, increasing Dexterity by 500% for 120 seconds.":"效果:使用者变得更加敏锐,闪避增加500%,持续120s。","Effect: User becomes Strengthened, increasing Strength by 500% for 120 seconds.":"效果:使用者变得更强壮,力量增加500%,持续120秒。","Effect: User becomes Hardened, increasing Defense by 300% for 120 seconds and replenishing life by 25%.":"效果:使用者变得坚硬,在120秒内增加300%的防御,并补充25%的生命。","Effect: Opponent becomes Concussed, decreasing Dexterity to 1/5th for 15-20 seconds.":"效果:对手脑部震荡,闪避下降到1/5,持续15-20秒。","Effect: Increases happiness by 5-20 if under 20% of maximum.":"","Effect: Can be used with a Fruitcake and Cake Frosting to create a Special Fruitcake.":""};const S={"is a Defensive Armor.":"是一种防御性盔甲。","are a Defensive Armor.":"是一种防御性盔甲。","is a Machine Gun Weapon.":"是一种机枪。","is a SMG Weapon.":"是一种冲锋枪。","is a Shotgun Weapon.":"是一种霰弹枪。","is a Rifle Weapon.":"是一种步枪。","is a Heavy Artillery Weapon.":"是一种重炮。","is a Pistol Weapon.":"是一种手枪。","is a Piercing Weapon.":"是一种穿刺武器(piercing)。","is a Clubbing Weapon.":"是一种冲击武器(Clubbing)。","is a Slashing Weapon.":"是一种切割武器(slashing)。","is a Mechanical Weapon.":"是一种机械武器。","is a Temporary Weapon.":"是一种投掷武器。","is a Clothing Item.":"是一种服装物品。","is a Medical Item.":"是一种医疗物品。","is a Drug Item.":"是一种药(dú)品。","is an Energy Drink Item.":"是一种能量饮料。","is an Alcohol Item.":"是一种酒。","is a Candy Item.":"是一种糖。","is a Booster Item.":"是一种增益道具。","is an Enhancer Item.":"是一种增幅器。","is a Supply Pack Item.":"是一种补给包。","is an Electronic Item.":"是一种电子物品。","is a Jewelry Item.":"是一种珠宝物品。","is a Flower Item.":"是一种花。","is a Plushie Item.":"是一种玩偶。","is a class E Car Item.":"是一辆E级赛车。","is a class D Car Item.":"是一辆D级赛车。","is a class C Car Item.":"是一辆C级赛车。","is a class B Car Item.":"是一辆B级赛车。","is a class A Car Item.":"是一辆A级赛车。","is a Virus Item.":"是一种电脑病毒。","is an Other Item.":"是一个其他物品。","is a Book Item.":"是一本书。","is a Special Item.":"是一种特殊物品。"};const Ve={"API Keys":"API 密钥","General settings":"通用设置","Attack settings":"攻击设置","Create New Key":"创建新密钥","New key's name":"新密钥名","Public Only":"无需权限","Minimal Access":"最小权限","Limited Access":"有限权限","Full Access":"完全权限","Here you can share your account's information with":"在这里,你可以通过向脚本、扩展和应用程序等软件提供API密钥,与它们分享你的账户信息。一旦你创建了一个具有相关权限的API密钥,你可以在任何时候通过删除该密钥来取消授权。"};const T={_taskHint:{a_good_day_to_get_hard:{task:"实现3-10的连杀",hint:"建议买lost"},a_kimpossible_task:{task:"击败3个特定玩家且只使用近战武器和手雷",hint:"枪可以保持装备状态"},a_problem_at_the_tracks:{task:"击败3个特定玩家且不使用枪",hint:"枪可以保持装备状态,但是使用任何的枪任务就会失败。"},a_thor_loser:{task:"用Duke的锤子(Duke's hammer)打中8-16个不同的身体部位",hint:"找防御怪来打"},against_the_odds:{task:"击败2个特定玩家"},an_honorary_degree:{task:"击败特定玩家且不使用枪",hint:"枪可以保持装备状态,但是使用任何的枪任务就会失败。"},army_of_one:{task:"装备不同的面具攻击3次1个特定玩家",hint:"Duke会给你发2个面具,请确保其中一次攻击不戴任何面具。为了快速完成任务,可以选择右上角的逃跑选项,这样不需要等待目标出院。"},bakeout_breakout:{task:"把开锁器(lock pick)放到水果蛋糕(fruitcake)里,并且把特别的水果蛋糕(special fruitcake)发送给监狱里的任意自选玩家。",hint:"你需要自己买一个水果蛋糕,佐料Duke会给"},bare_knuckle:{task:"击败特定玩家,且不装备任何防具和武器。",hint:"取消装备所有东西。注意:前一次战斗残余的buff会让任务失败!"},batshit_crazy:{task:"用Penelope造成基于你的最大生命的一定伤害",hint:"你会收到Duke发来的Penelope"},battering_ram:{task:"攻击特定玩家3次"},big_tub_of_muscle:{task:"击败特定玩家,尽管他有巨大的力量"},birthday_surprise:{task:"获取特定物品并将它作为礼物发送给Duke",hint:"使用一个空盒子(Empty box)可以把物品装箱(parcel),然后用礼品包装将他包起来就可以得到一个生日礼物。"},bonnie_and_clyde:{task:"击败特定玩家和他的配偶"},bountiful:{task:"成功拿到2-5个悬赏赏金",hint:"请记得击败玩家后选择强制住院(hospitalize)才能领取赏金"},bounty_on_the_mutiny:{task:"悬赏特定玩家,然后等待赏金被人领取",hint:"你不能领取自己的悬赏赏金"},bring_it:{task:"在多人战斗中击败Duke",hint:"不像其他任务,这个任务你有一周的时间来完成。且不需要最后一击,你只需要参与到多人战斗中就可以。更多详情请群内询问大佬或查看公众号攻略。"},candy_from_babies:{task:"获得$50,000-$250,000的悬赏奖励",hint:"可以是总计多次悬赏奖励。请记得击败玩家后选择强制住院(hospitalize)才能获得悬赏奖励。"},charity_work:{task:"抢劫2个特定玩家",hint:"必须成功抢到钱,可以事先发一点钱给目标来确保成功抢劫"},cracking_up:{task:"击败特定玩家后选择审问选项(interrogate)获取密码,然后使用密码打开Duke的保险箱(Duke's Safe),并将获得的物品发送给Duke。",hint:"可能会需要数次审问才能获得密码"},critical_education:{task:"造成3-9次暴击"},cut_them_down_to_size:{task:"击败任意等级大于等于你的玩家"},dirty_little_secret:{task:"给特定玩家下一个悬赏,然后攻击拿悬赏的玩家",hint:"如果拿悬赏的玩家是匿名的,他的ID还是会被显示在任务界面。攻击不需要胜利,只需要攻击即可完成任务。"},double_jeopardy:{task:"击败特定玩家,且给他下一个悬赏",hint:"赏金可以是任何金额,因为它不需要被认领。"},drug_problem:{task:"Defeat 4 - 7 (P)."},emotional_debt:{task:"用催泪弹(tear gas)或辣椒水(pepper spray)命中特定玩家",hint:"不被阻挡才算数。Hazmat Suit会阻挡催泪弹,很多头盔阻挡辣椒水。(也有说法辣椒水不需要生效也能完成任务)"},estranged:{task:"打伤特定玩家的一条腿"},family_ties:{task:"强制住院特定玩家3次"},field_trip:{task:"在3个赌场游戏中赚到$100-$1,000,000"},fireworks:{task:"消耗250-1250发子弹",hint:"用弹药多的武器,如minigun、m249"},forgotten_bills:{task:"击败特定玩家"},frenzy:{task:"击败任意5-15个玩家"},get_things_jumping:{task:"造成2000-50000伤害,受到1000-25000伤害,基于你的生命上限"},graffiti:{task:"给特定目标喷辣椒水(pepper spray)"},guardian:{task:"击败特定玩家"},hammer_time:{task:"用锤子(hammer)击败特定玩家",hint:"枪可以保持装备,双锤不算锤子"},hands_off:{task:"击败3-5个特定玩家"},hare_meet_tortoise:{task:"击败特定玩家,尽管他的速度快如闪电",hint:"闪光弹和烟雾弹可以降低目标的速度"},hide_and_seek:{task:"从3-5人的列表中找到并击败1个特定玩家",hint:"给出的线索可以很容易识别目标,比如等级,地区,如无法找到请截图群聊询问。"},hiding_in_plain_view:{task:"击败在随机国家的特定玩家"},high_fliers:{task:"击败3个在随机国家的特定玩家"},hobgoblin:{task:"击败自选的某个相同玩家5次"},immovable_object:{task:"击败特定玩家,尽管他的防御很高"},inside_job:{task:"击败特定玩家并选择secrete选项藏一个道具"},"introduction:_duke":{task:"完成10个 Duke 任务"},keeping_up_appearances:{task:"抢劫特定玩家然后把钱发回给他",hint:"必须成功抢到钱,可以事先发一点钱给目标来确保成功抢劫"},kiss_of_death:{task:"击败特定玩家然后选择kiss选项"},lack_of_awareness:{task:"击败特定玩家"},lost_and_found:{task:"强制住院特定目标总计12小时"},loud_and_clear:{task:"使用3-11个爆炸性手榴弹(HEG或Grenade等)",hint:"手榴弹必须是可以造成伤害的类型"},loyal_customer:{task:"击败特定玩家"},make_it_slow:{task:"击败特定玩家且单次攻击中使用不低于5-9回合",hint:"存活7或9回合后击败目标,如果失败可以再次尝试。"},marriage_counseling:{task:"击败特定玩家的配偶"},massacrist:{task:"击败特定玩家"},meeting_the_challenge:{task:"抢劫到$10,000-$16,000,000金额的钱"},motivator:{task:"第一次对战中输给或平手给特定玩家",hint:"超时不会任务失败,所以如果看起来要赢了可以等5分钟超时。可以抽血减血,不装备防具并使用锈剑。"},new_kid_on_the_block:{task:"击败5名玩家"},no_man_is_an_island:{task:"从3个特定目标中选2个抢劫",hint:"可以自选哪两个目标,只要抢劫2个不同的目标"},no_second_chances:{task:"一次击败特定玩家"},out_of_the_frying_pan:{task:"去监狱使用Felovax以住院,再使用Zylkene"},painleth_dentitht:{task:"用棒球棒击败特定玩家",hint:"其他武器可以保持装备,但是使用其他武器会让任务失败"},party_tricks:{task:"击败特定玩家,尽管他的DEX很高"},pass_the_word:{task:"给特定玩家发送包含关键词的聊天信息",hint:"复制任务描述发送给目标就可以完成"},peak_experience:{task:"击败特定玩家"},proof_of_the_pudding:{task:"使用某个武器击败特定玩家,然后发送这个武器给他",hint:"不需要发送你具体使用的武器,只需发送同名武器"},rabbit_response:{task:"10-30分钟内击败3个特定玩家",hint:"攻击其中一个目标时开始计时,所以攻击前确定他们都不在住院"},reconstruction:{task:"装备菜刀(kitchen knife)和皮手套(leather gloves),击败特定玩家然后扔掉这两样东西。",hint:"战斗中不必须使用菜刀攻击"},red_faced:{task:"使用鳟鱼(trout)完成最后一击以击败特定玩家"},rising_costs:{task:"用砖头(Brick)打中特定玩家",hint:"没打中不算"},rolling_in_it:{task:"抢劫特定玩家",hint:"必须成功抢到钱,可以事先发一点钱给目标来确保成功抢劫"},safari:{task:"用步枪(rifle)在南非击败特定玩家"},scammer:{task:"击败特定玩家",hint:"目标可能有不少现金,可以试着打劫一下"},sellout_slayer:{task:"从物品市场或个人集市买一把枪,用这把枪击败任意2-6个玩家,然后再从物品市场或个人集市卖出这把枪"},sending_a_message:{task:"击败特定玩家"},show_some_muscle:{task:"攻击特定玩家",hint:"攻击目标即可,无论输赢"},sleep_aid:{task:"击败特定玩家"},some_people:{task:"将任何物品制作包裹寄给特定玩家",hint:"买一个空盒子(Empty box)并使用空盒子,选择一个你不要的物品就可以制成包裹。"},standard_routine:{task:"使用冲击武器(Clubbing)或拳头或脚踢击败特定玩家",hint:"可以考虑买一把金属双截棍(Metal Nunchakus)"},stomach_upset:{task:"打伤特定玩家的胃"},swan_step_too_far:{task:"从垃圾场翻到一个物品并且击败他之前的所有者",hint:"你可以多搜索几次,直到找到一个你能打得过的前所有者。"},the_executive_game:{task:"只使用拳头或脚踢击败特定玩家",hint:"已装备的其他武器不需要卸载"},the_tattoo_artist:{task:"只使用切割武器(slashing)或穿刺武器(piercing)击败特定玩家",hint:"已装备的其他武器不需要卸载"},three_peat:{task:"分别击败3次后选择留在街上、抢劫、强制住院任意玩家"},training_day:{task:"健身房消耗250 - 1,250能量E"},tree_huggers:{task:"击败5-8个特定玩家"},undercutters:{task:"击败4个特定玩家"},unwanted_attention:{task:"强制住院4个特定玩家"},withdrawal:{task:"打伤特定玩家的双臂",hint:"这个任务中手也算双臂"},wrath_of_duke:{task:"击败4个特定玩家"}},Hit:"击中","with a brick.":"使用砖头 (brick)",Put:""};const qe={"Virus Programming":"病毒编程"};const Ee={"Buy Items":"购买物品",Buy:"买","in stock)":"存货)","Flower (":"花(","Plushie (":"玩偶(","Other (":"其他(","Temporary (":"临时(","Melee (":"近战(","Candy (":"糖果(","Booster (":"增益道具(","Car (":"车辆(","Electronic (":"电器(","Alcohol (":"酒类(",Sell:"卖出",items:"物品",Value:"卖价",Amount:"数量","items to Bits 'n' Bobs":"物品给胖鲍勃的杂货店","Select All":"全选","Unselect All":"全不选","SELL ITEMS":"卖出物品",Cancel:"取消","Are you sure you would like to sell these items?":"你确定想出售这些物品吗?","Total value:\n$":"总计:$",Yes:"是",No:"否","Are you sure you would like to buy":"你是否想买","Sell your points":"出售你的PT"};const Re={January:"一月",February:"二月",March:"三月",April:"四月",May:"五月",June:"六月",July:"七月",August:"八月",September:"九月",October:"十月",November:"十一月",December:"十二月"};const Oe=/[\u4e00-\u9fa5]/;String.prototype.contains=function e(t){if("string"===typeof t){return new RegExp(t).test(this)}if(t.test){return t.test(this)}};const C=window.fetch;window.fetch=async(e,t)=>{if(e.contains("newsTickers")){return new Response("{}")}const n=await C(e,t);if(e.includes("profiles.php?step=getUserNameContextMenu")&&p()["transEnable"]){setTimeout(()=>le(),200)}let i=n.clone();let o=await n.text();Ae({url:e,init:t,text:o});return i};const s=new Date;const V=Object.freeze({PC:"pc",MOBILE:"mobile",TABLET:"tablet"});const l=Object.freeze({RAW:"raw",GM:"gm",PDA:"pda"});const I=window.innerWidth>=1e3?V.PC:window.innerWidth<=600?V.MOBILE:V.TABLET;const A=Z();const L=ee("https://yata.yt/api/v1/travel/export/");const N=g?null:te();const _=()=>{const e=`data:image/svg+xml,%3Csvg t='1656084442571' class='icon' viewBox='0 0 1024 1024' version='1.1' xmlns='http://www.w3.org/2000/svg' p-id='3924' width='14' height='14'%3E%3Cpath d='M512.032002 237.105181a29.310168 29.310168 0 0 1-29.310168-29.246172V29.310168a29.310168 29.310168 0 0 1 58.620336 0v178.548841A29.310168 29.310168 0 0 1 512.032002 237.105181zM512.032002 1024a29.310168 29.310168 0 0 1-29.310168-29.310168v-178.484845a29.310168 29.310168 0 1 1 58.620336 0v178.548841A29.310168 29.310168 0 0 1 512.032002 1024z m482.657834-482.657834h-178.484845a29.310168 29.310168 0 1 1 0-58.620336h178.548841a29.310168 29.310168 0 1 1 0 58.620336z m-786.830823 0H29.310172a29.310168 29.310168 0 0 1 0-58.620336h178.548841a29.310168 29.310168 0 0 1 0 58.620336z m519.263546-215.090557a29.182176 29.182176 0 0 1-20.734704-49.980876l126.264108-126.264108a29.310168 29.310168 0 1 1 41.405412 41.405412l-126.264108 126.264108a29.182176 29.182176 0 0 1-20.670708 8.575464zM170.741333 882.568839a29.182176 29.182176 0 0 1-20.734704-49.980876l126.264108-126.264108a29.246172 29.246172 0 1 1 41.405412 41.405412L191.412041 874.057371a29.182176 29.182176 0 0 1-20.670708 8.575464z m682.581338 0a29.182176 29.182176 0 0 1-20.670708-8.575464l-126.264108-126.264108a29.310168 29.310168 0 1 1 41.405412-41.405412l126.264108 126.264108a29.310168 29.310168 0 0 1-20.734704 49.91688zM297.005441 326.251609a29.182176 29.182176 0 0 1-20.670708-8.575464L150.006629 191.412037a29.310168 29.310168 0 1 1 41.405412-41.405412l126.264108 126.264108a29.310168 29.310168 0 0 1-20.734704 49.91688z' p-id='3925'%3E%3C/path%3E%3C/svg%3E`;return``};let P=Qe();let D=null;const B=re();[{key:"transEnable",val:false},{key:"quickCrime",val:true},{key:"missionHint",val:true},{key:"xmasTownWT",val:true},{key:"xmasTownNotify",val:true},{key:"energyAlert",val:true},{key:"trvAlarm",val:true},{key:"_15Alarm",val:true},{key:"cityFinder",val:false},{key:"SEProtect",val:false},{key:"ptQuickBuy",val:false},{key:"quickAttIndex",val:2},{key:"quickFinishAtt",val:3},{key:"autoStartFinish",val:false},{key:"attRelocate",val:true},{key:"attReload",val:6},{key:"priceWatcher",val:{xan:-1,pt:-1}},{key:"isDev",val:false},{key:"_15AlarmTime",val:50},{key:"barsRedirect",val:true},{key:"floatDepo",val:true},{key:"companyRedirect",val:true},{key:"companyBWCollapse",val:true},{key:"removeScripts",val:true},{key:"abroadWarning",val:true},{key:"landedRedirect",val:""},{key:"dangerZone",val:false}].forEach(e=>{if(typeof p()[e.key]!==typeof e.val)h(e.key,e.val)});let e=[];if(s.getMonth()===11){e.push({domType:"plain",domId:"",domHTML:"圣诞小镇",tagName:"h4"});e.push({domType:"checkbox",domId:"wh-xmastown-wt",domText:" 圣诞小镇攻略",dictName:"xmasTownWT",isHide:true});e.push({domType:"checkbox",domId:"wh-xmastown-notify",domText:" 圣诞小镇物品提示",dictName:"xmasTownNotify",isHide:true})}e.push({domType:"plain",domId:"",domHTML:"翻译",tagName:"h4"});e.push({domType:"checkbox",domId:"wh-trans-enable",domText:" 开启翻译",dictName:"transEnable",isHide:true});e.push({domType:"button",domId:"",domText:"更新翻译词库",clickFunc:st});e.push({domType:"plain",domId:"",domHTML:"战斗优化",tagName:"h4"});e.push({domType:"select",domId:"wh-quick-attack-index",domText:"光速拔刀 ",domSelectOpt:[{domVal:"pri",domText:"主手"},{domVal:"sec",domText:"副手"},{domVal:"wea",domText:"近战"},{domVal:"gre",domText:"手雷"},{domVal:"fis",domText:"拳头"},{domVal:"kic",domText:"脚踢"},{domVal:"none",domText:"关闭"}],dictName:"quickAttIndex",isHide:true,tip:"将Start Fight按钮移动到指定格子上"});e.push({domType:"select",domId:"wh-quick-mug",domText:"光速跑路 ",domSelectOpt:[{domVal:"leave",domText:"跑路(LEAVE)"},{domVal:"mug",domText:"打劫(MUG)"},{domVal:"hosp",domText:"住院(HOSP)"},{domVal:"none",domText:"关闭"}],dictName:"quickFinishAtt",isHide:true,tip:"将结束后指定按钮移动到上面指定的格子上"});e.push({domType:"checkbox",domId:"wh-attack-relocate",domText:" 真·攻击界面转跳",dictName:"attRelocate",tip:"在无法打开攻击界面的情况下依然可以转跳到正确的攻击页面",isHide:true});e.push({domType:"plain",domId:"",domHTML:"飞行",tagName:"h4"});e.push({domType:"checkbox",domId:"wh-energy-alert",domText:" 起飞爆E警告",dictName:"energyAlert",tip:"起飞前计算来回是否会爆体,红字警告",isHide:true});e.push({domType:"checkbox",domId:"wh-trv-alarm-check",domText:" 飞行闹钟",dictName:"trvAlarm",tip:"(仅PC) 飞行页面将显示一个内建的闹钟,落地前声音提醒,需要打开浏览器声音权限",isHide:true});e.push({domType:"checkbox",domId:"",domText:" 外海警告",dictName:"abroadWarning",tip:"海外落地后每30秒通知警告"});e.push({domType:"button",domId:"",domText:"落地转跳",clickFunc:ut});e.push({domType:"plain",domId:"",domHTML:"公司",tagName:"h4"});e.push({domType:"checkbox",domId:"",domText:" 浮动存钱框",dictName:"floatDepo",tip:"打开公司或帮派的存钱页面后存钱框将浮动显示"});e.push({domType:"checkbox",domId:"",domText:" 公司转跳存钱",dictName:"companyRedirect",tip:"打开公司页面时自动打开存钱选项卡"});e.push({domType:"checkbox",domId:"",domText:" 收起公司冰蛙效率表",dictName:"companyBWCollapse",tip:"开启后可手动显示隐藏冰蛙公司表格"});e.push({domType:"plain",domId:"",domHTML:"啤酒",tagName:"h4"});e.push({domType:"checkbox",domId:"wh-qua-alarm-check",domText:' 啤酒提醒 ',dictName:"_15Alarm",tip:"每小时的整15分钟的倍数时通知提醒抢啤酒或者血包",isHide:true,changeEv:function(e){e.target.checked?P.start():P.stop()}});e.push({domType:"button",domId:"",domText:"啤酒提醒状态",clickFunc:function(){M(`啤酒提醒${P.status()}`)}});e.push({domType:"button",domId:"",domText:"啤酒提醒时间设定",clickFunc:function(){D.close();let i=m(`
活动: ";c.onEv?c.html+=`${c.current.name}() - 剩余${c.daysLeft}天`:c.html+=`${c.daysLeft}天后 - ${c.next.name}()`;i.push({domType:"plain",domId:"wh-trans-event-cont",domHTML:c.html});i.push({domType:"button",domId:"wh-foreign-stock-btn",domText:"🌸 飞花库存",clickFunc:async function(e){e.target.blur();Ue().then()}});i.push({domType:"button",domId:"wh-quick-fly-btn",domText:"✈️ 一键起飞",clickFunc:async function(){if(window.hasWHQuickFlyOpt)return;window.hasWHQuickFlyOpt=true;E(`#wh-quick-fly-opt{
position:fixed;
left:64px;
top:64px;
@@ -67,7 +67,7 @@ info{display:block;}
";t.forEach(e=>{n+=`${e.name}`});n+="
";let i=m(n,"常用链接");i.classList.add("wh-link-collection-cont");i.addEventListener("click",e=>{if(e.target.tagName.toLowerCase()==="a"||e.target.tagName.toLowerCase()==="span"){i.close()}})}});i.push({domType:"button",domId:"wh-gs-btn",domText:"🐏 飞贼小助手",clickFunc:function(e){e.target.blur();Y(W())},tip:"加载从PC端移植的伞佬的油猴版飞贼小助手"});i.push({domType:"button",domId:"wh-price-watcher-btn",domText:"💊 价格监视",clickFunc:function(){const n=p()["priceWatcher"];const i=JSON.stringify(n);const e=`输入需要监视的价格,低于该价格发出通知,-1为关闭
注:需要APIKey,当前可用APIKey为
(来自冰蛙)
-(来自PDA)
+(来自PDA)
PT
XAN
-`;const o=m(e,"价格监视设置");o.querySelector("button").onclick=()=>{const[e,t]=o.querySelectorAll('input[type="number"]');n.pt=e.value|0;n.xan=t.value|0;if(JSON.stringify(n)!==i)h("priceWatcher",n);o.close()}}});i.push({domType:"button",domId:"wh-crime-iframe-btn",domText:"🤑 小窗犯罪",clickFunc:function(){const t=``;const e=`加载中请稍后${N()}
`;const n=m(e,"小窗快速犯罪");let i=n.querySelector("p:first-of-type");const o=n.querySelector("#wh-quick-crime-if-container");o.innerHTML=t;const a=document.createElement("div");a.classList.add("wh-translate");a.innerHTML=`加载中请稍后${_()}
`;const n=m(e,"小窗快速犯罪");let i=n.querySelector("p:first-of-type");const o=n.querySelector("#wh-quick-crime-if-container");o.innerHTML=t;const a=document.createElement("div");a.classList.add("wh-translate");a.innerHTML=`即将打开危险功能,使用这些功能可能会造成账号封禁。请自行考虑是否使用。
+即将打开危险功能,使用这些功能可能会造成账号封禁。请自行考虑是否使用。
-`;const n=m(t,"⚠️警告");const i=n.querySelector("input");const o=n.querySelector("button");i.onchange=()=>o.disabled=false;o.onclick=()=>{h("dangerZone",i.checked);n["close"]();window.location.reload()}}});i.push({domType:"button",domId:"",domText:"📜️ 传单助手",clickFunc:et});i.push({domType:"button",domId:"",domText:"🛡️ 守望者",clickFunc:function(){ot()}});i.push({domType:"button",domId:"",domText:"🐞 更新历史",clickFunc:()=>{m('更新历史现已迁移:| URL | ${window.location.href} |
| 页面尺寸 | ${window.innerWidth}x${window.innerHeight} |
| 设备类型 | ${z().toUpperCase()} |
| 脚本运行方式 | ${{gm:"油猴",raw:"直接运行",pda:"TornPDA"}[W()]} |
| 设备类型 | ${j().toUpperCase()} |
| 脚本运行方式 | ${{gm:"油猴",raw:"直接运行",pda:"TornPDA"}[J()]} |
| 时间 | ${e.getFullYear()}/${e.getMonth()+1}/${e.getDate()} ${e.getHours()}:${e.getMinutes()}:${e.getSeconds()} |
| 插件版本 | ${f} |
| 插件版本 | ${y} |
| 操作系统 | ${t} |
| UA | ${window.navigator.userAgent} |
| 用户ID | ${I.userID} |
| 用户名 | ${I.playername} |
| 用户ID | ${A.userID} |
| 用户名 | ${A.playername} |
❌ 没有权限
点击网页内任意位置以激活闹钟
❌ 没有权限
点击网页内任意位置以激活闹钟
如果当前商店没有啤酒这个商品可以提前显示以省去刷新步骤,增加抢酒成功率。
`;qt.querySelector("button").addEventListener("click",e=>{const t=qt.querySelector("#wh-msg");if(Rt.querySelector('span[id="180-name"]')){t.innerHTML="❌ 页面已经有啤酒了";return}const n=Rt.querySelector("li.clear");const i=document.createElement("li");i.classList.add("torn-divider","divider-vertical");i.style.backgroundColor="#c8c8c8";i.innerHTML=`如果当前商店没有啤酒这个商品可以提前显示以省去刷新步骤,增加抢酒成功率。
`;a.querySelector("button").addEventListener("click",e=>{const t=a.querySelector("#wh-msg");if(o.querySelector('span[id="180-name"]')){t.innerHTML="❌ 页面已经有啤酒了";return}const n=o.querySelector("li.clear");const i=document.createElement("li");i.classList.add("torn-divider","divider-vertical");i.style.backgroundColor="#c8c8c8";i.innerHTML=`${q(Ft[e])}
${F(zt[e])}
当前版本: ${f.slice(-1)==="$"?"DEV":f}
当前版本: ${y.slice(-1)==="$"?"DEV":y}
最新版本:
通常电脑浏览器装有油猴等用户脚本扩展时可以使用链接安装(自动更新):点此安装。
这些扩展长这样:

加载脚本然后直接复制粘贴到用户脚本处。
-`;const n=m(t,"如何更新");n.querySelector("button").onclick=async t=>{t.target.innerHTML="加载中";const n=await j(`https://jjins.github.io/fyfuzhi/release.min.user.js?${performance.now()}`);t.target.innerHTML="点击复制到剪切板";t.target.onclick=()=>{const e=document.createElement("textarea");e.innerHTML=n;t.target.parentElement.append(e);e.focus();e.select();document.execCommand("Copy");e.remove();t.target.innerHTML="已复制";t.target.onclick=null;M("脚本已复制,请前往粘贴")}}};n.querySelectorAll("#wh-trans-fest-date button").forEach((e,t)=>t===0?e.addEventListener("click",()=>{let t="| ${1+(e.slice(0,2)|0)}月${e.slice(2)}日 | ${i.fest_date_dict[e].name} | ${i.fest_date_dict[e].eff} |
| ${e.name} | ${e.start[0]+1}月${e.start[1]}日${e.start[2]}:00~${e.end[0]+1}月${e.end[1]}日${e.end[2]}:00 |
| ${e.eff} | |
更多信息请关注群聊和公众号
","活动")}):e.addEventListener("click",null));document.body.append(n);window["initializeTooltip"]&&window["initializeTooltip"](".wh-container","white-tooltip");le("#wh-trans-icon");return n}function F(){try{return p()["isDev"]||false}catch(e){console.error(`[wh] dev状态错误 ${e}`);return false}}function m(e,t="芜湖助手"){if(P)P.close();const n=document.querySelector("#chatRoot");n.classList.add("wh-hide");const i=document.createElement("div");i.id="wh-popup";i.innerHTML=`| ${1+(e.slice(0,2)|0)}月${e.slice(2)}日 | ${i.fest_date_dict[e].name} | ${i.fest_date_dict[e].eff} |
| ${e.name} | ${e.start[0]+1}月${e.start[1]}日${e.start[2]}:00~${e.end[0]+1}月${e.end[1]}日${e.end[2]}:00 |
| ${e.eff} | |
更多信息请关注群聊和公众号
","活动")}):e.addEventListener("click",null));document.body.append(n);window["initializeTooltip"]&&window["initializeTooltip"](".wh-container","white-tooltip");de("#wh-trans-icon");return n}function W(){try{return p()["isDev"]||false}catch(e){console.error(`[wh] dev状态错误 ${e}`);return false}}function m(e,t="芜湖助手"){if(D)D.close();const n=document.querySelector("#chatRoot");n.classList.add("wh-hide");const i=document.createElement("div");i.id="wh-popup";i.innerHTML=`${t}
${a}
`;m(e,"飞花库存")}else{const t=m(`请稍后${N()}`,"飞花库存");let i=`| 目的地 - 更新时间 | 库存 | |||
|---|---|---|---|---|
| ${t.show} | ${e/60|0}分${e%60|0}秒前 | `;let n=0;a.stocks[t.name]["stocks"].forEach(e=>{if(t.stocks[e.name]){i+=`${t.stocks[e.name]} (${e["quantity"]}) | `;n++}});while(n<3){n++;i+=""}i+=" | |
监测目标ID玩家的防御状态,找出隐身攻击者
","守望者 (测试中)");let t=document.createElement("p");let l=document.createElement("input");let n=document.createElement("button");let i=document.createElement("button");let o=document.createElement("button");let c=document.createElement("div");c.obj={};let d=document.createElement("div");d.list=[];d.details={};let u=null;let p=function(){let t="进攻者:
`;m(e,"飞花库存")}else{const t=m(`请稍后${_()}`,"飞花库存");let i=`| 目的地 - 更新时间 | 库存 | |||
|---|---|---|---|---|
| ${t.show} | ${e/60|0}分${e%60|0}秒前 | `;let n=0;a.stocks[t.name]["stocks"].forEach(e=>{if(t.stocks[e.name]){i+=`${t.stocks[e.name]} (${e["quantity"]}) | `;n++}});while(n<3){n++;i+=""}i+=" | |
监测目标ID玩家的防御状态,找出隐身攻击者
","守望者 (测试中)");let t=document.createElement("p");let l=document.createElement("input");let n=document.createElement("button");let i=document.createElement("button");let o=document.createElement("button");let c=document.createElement("div");c.obj={};let d=document.createElement("div");d.list=[];d.details={};let u=null;let p=function(){let t="进攻者:区间为 1 ~ 60,默认 50
`, '啤酒提醒时间设定'); - let confirm = document.createElement('button'); - confirm.innerHTML = '确定'; - confirm.style.float = 'right'; - confirm.addEventListener('click', () => { - let input = popup.querySelector('input'); - let num = input.value | 0; - if (num === getWhSettingObj()['_15AlarmTime']) return; - if (num < 1 || num > 60) num = 50; - input.value = num.toString(); - setWhSetting('_15AlarmTime', num); - // 之前的运行状态 - let before_state = beer.is_running(); - beer.set_time(num); - if (before_state) beer.start(); - popup.close(); - }); - popup.appendChild(confirm); - }, - }); - - // 其他 - setting_list.push({ - domType: 'plain', - domId: '', - domHTML: '其他', - tagName: 'h4', - }); + { key: 'transEnable', val: false }, + // 快速犯罪 + { key: 'quickCrime', val: true }, // 任务助手 - setting_list.push({ - domType: 'checkbox', - domId: 'wh-mission-lint', - domText: ' 任务助手', - dictName: 'missionHint', - tip: 'Duke任务的一些中文小提示', - isHide: true, - }); + { key: 'missionHint', val: true }, + // 小镇攻略 + { key: 'xmasTownWT', val: true }, + // 小镇提醒 + { key: 'xmasTownNotify', val: true }, + // 起飞爆e + { key: 'energyAlert', val: true }, + // 飞行闹钟 + { key: 'trvAlarm', val: true }, + // 啤酒提醒 + { key: '_15Alarm', val: true }, // 捡垃圾助手 - setting_list.push({ - domType: 'checkbox', - domId: 'wh-city-finder', - domText: ' 捡垃圾助手', - dictName: 'cityFinder', - tip: '城市地图中放大显示物品并且估计价值', - isHide: true, - }); - // 快速crime - setting_list.push({ - domType: 'checkbox', - domId: 'wh-quick-crime', - domText: ' 快速犯罪', - dictName: 'quickCrime', - tip: '显示快捷操作按钮,目前不支持自定义', - isHide: true, - }); + { key: 'cityFinder', val: false }, // 叠E保护 - setting_list.push({ - domType: 'checkbox', - domId: 'wh-SEProtect-check', - domText: ' 叠E保护', - dictName: 'SEProtect', - tip: '隐藏健身房的锻炼按钮,防止误操作', - isHide: true, - }); + { key: 'SEProtect', val: false }, // PT一键购买 - setting_list.push({ - domType: 'checkbox', - domId: 'wh-ptQuickBuy-check', - domText: ' PT一键购买', - dictName: 'ptQuickBuy', - tip: 'PT市场页面购买时跳过确认', - isHide: true, - }); + { key: 'ptQuickBuy', val: false }, + // 光速拔刀 6-关闭 + { key: 'quickAttIndex', val: 2 }, + // 光速跑路 0-leave 1-mug 2-hos 3-关闭 + { key: 'quickFinishAtt', val: 3 }, + // 自动开打和结束 + { key: 'autoStartFinish', val: false }, + // 废弃 + { key: 'attRelocate', val: true }, + // 攻击自刷新 0-无间隔 1-5s 6-关闭 + { key: 'attReload', val: 6 }, + // 价格监视 + { key: 'priceWatcher', val: { xan: -1, pt: -1 } }, + // 开发者模式 + { key: 'isDev', val: false }, + // 啤酒提醒时间 + { key: '_15AlarmTime', val: 50 }, // 4条转跳 - setting_list.push({ - domType: 'checkbox', - domId: '', - domText: ' 4条转跳', - dictName: 'barsRedirect', - tip: '点击4条时转跳对应页面', - }); + { key: 'barsRedirect', val: true }, + // 浮动存钱框 + { key: 'floatDepo', val: true }, + // 公司转跳存钱 + { key: 'companyRedirect', val: true }, + // 收起公司冰蛙效率表 + { key: 'companyBWCollapse', val: true }, // 清除多余的脚本 - setting_list.push({ - domType: 'checkbox', - domId: '', - domText: ' 清除多余的脚本', - dictName: 'removeScripts', - tip: '清除Google相关脚本、顶部横幅等', - }); - // 危险行为⚠️ - if (getWhSettingObj()['dangerZone'] === true) { - // 攻击界面自刷新 - setting_list.push({ - domType: 'select', - domId: 'wh-attack-reload', - domText: '⚠️攻击界面自动刷新 ', - dictName: 'attReload', - domSelectOpt: [ - { - domVal: 'none', - domText: '无间隔', - }, - { - domVal: '1', - domText: '约1s', - }, - { - domVal: '2', - domText: '约2s', - }, - { - domVal: '3', - domText: '约3s', - }, - { - domVal: '4', - domText: '约4s', - }, - { - domVal: '5', - domText: '约5s', - }, - { - domVal: 'disabled', - domText: '关闭', - }, - ], - isHide: true, - tip: '危险功能:接机时常用,将自动刷新页面直到目标落地', - }); - // 自动开打和结束 - setting_list.push({ - domType: 'checkbox', - domId: 'wh-auto-start-finish', - domText: ' ⚠️自动开打和结束', - dictName: 'autoStartFinish', - tip: '脚本将会自动按下战斗和结束按钮', - isHide: true, - }); - } else { - setWhSetting('autoStartFinish', false, false) - setWhSetting('attReload', 6, false) - } - // dev - setting_list.push({ - domType: 'checkbox', - domId: 'wh-dev-mode', - domText: ` 开发者模式${isDev() ? ' ' : ''}`, - dictName: 'isDev', - isHide: true, - }); - // 更多设定 - if (isDev()) setting_list.push({ - domType: 'button', domId: 'wh-otherBtn', domText: '更多设定', clickFunc: () => { - const html = `清空设置数据、请求通知权限、测试跨域请求`; - const popup = popupMsg(html, '更多设定'); - }, - isHide: true, - }); - // endregion - // region 菜单中的「选项」 - const menu_list = []; - //const date = new Date(2022, 2, 4, 23); + { key: 'removeScripts', val: true }, + // 外海警告 + { key: 'abroadWarning', val: true }, + // 落地转跳 + { key: 'landedRedirect', val: '' }, - // 欢迎 显示玩家id - if (player_info.userID !== 0) { - menu_list.push({ - domType: 'plain', - domId: 'wh-trans-welcome', - domHTML: `欢迎 ${player_info.playername}[${player_info.userID}] 大佬`, - }); + // 危险行为⚠️ + { key: 'dangerZone', val: false }, + ].forEach(df => { + if (typeof getWhSettingObj()[df.key] !== typeof df.val) setWhSetting(df.key, df.val); + }); + + // region 助手各项「设置」 + let setting_list = []; + // 12月时加入圣诞小镇选项 + if (date.getMonth() === 11) { + setting_list.push({ + domType: 'plain', + domId: '', + domHTML: '圣诞小镇', + tagName: 'h4', + }) + setting_list.push({ + domType: 'checkbox', + domId: 'wh-xmastown-wt', + domText: ' 圣诞小镇攻略', + dictName: 'xmasTownWT', + isHide: true, + }); + setting_list.push({ + domType: 'checkbox', + domId: 'wh-xmastown-notify', + domText: ' 圣诞小镇物品提示', + dictName: 'xmasTownNotify', + isHide: true, + }); + } + + // 翻译 + setting_list.push({ + domType: 'plain', + domId: '', + domHTML: '翻译', + tagName: 'h4', + }); + // 开启翻译 + setting_list.push({ + domType: 'checkbox', + domId: 'wh-trans-enable', + domText: ' 开启翻译', + dictName: 'transEnable', + isHide: true, + }); + // 更新翻译词库 + setting_list.push({ + domType: 'button', + domId: '', + domText: '更新翻译词库', + clickFunc: updateTransDict + }); + + // 战斗优化 + setting_list.push({ + domType: 'plain', + domId: '', + domHTML: '战斗优化', + tagName: 'h4', + }); + // 光速拔刀 + setting_list.push({ + domType: 'select', + domId: 'wh-quick-attack-index', + domText: '光速拔刀 ', + domSelectOpt: [ + { + domVal: 'pri', + domText: '主手', + }, + { + domVal: 'sec', + domText: '副手', + }, + { + domVal: 'wea', + domText: '近战', + }, + { + domVal: 'gre', + domText: '手雷', + }, + { + domVal: 'fis', + domText: '拳头', + }, + { + domVal: 'kic', + domText: '脚踢', + }, + { + domVal: 'none', + domText: '关闭', + }, + ], + dictName: 'quickAttIndex', + isHide: true, + tip: '将Start Fight按钮移动到指定格子上', + }); + // 光速跑路 + setting_list.push({ + domType: 'select', + domId: 'wh-quick-mug', + domText: '光速跑路 ', + domSelectOpt: [ + { + domVal: 'leave', + domText: '跑路(LEAVE)', + }, + { + domVal: 'mug', + domText: '打劫(MUG)', + }, + { + domVal: 'hosp', + domText: '住院(HOSP)', + }, + { + domVal: 'none', + domText: '关闭', + }, + ], + dictName: 'quickFinishAtt', + isHide: true, + tip: '将结束后指定按钮移动到上面指定的格子上', + }); + // 攻击链接转跳 + setting_list.push({ + domType: 'checkbox', + domId: 'wh-attack-relocate', + domText: ' 真·攻击界面转跳', + dictName: 'attRelocate', + tip: '在无法打开攻击界面的情况下依然可以转跳到正确的攻击页面', + isHide: true, + }); + + // 飞行 + setting_list.push({ + domType: 'plain', + domId: '', + domHTML: '飞行', + tagName: 'h4', + }); + // 起飞警告 + setting_list.push({ + domType: 'checkbox', + domId: 'wh-energy-alert', + domText: ' 起飞爆E警告', + dictName: 'energyAlert', + tip: '起飞前计算来回是否会爆体,红字警告', + isHide: true, + }); + // 飞行闹钟 + setting_list.push({ + domType: 'checkbox', + domId: 'wh-trv-alarm-check', + domText: ' 飞行闹钟', + dictName: 'trvAlarm', + tip: '(仅PC) 飞行页面将显示一个内建的闹钟,落地前声音提醒,需要打开浏览器声音权限', + isHide: true, + }); + // 外海警告 + setting_list.push({ + domType: 'checkbox', + domId: '', + domText: ' 外海警告', + dictName: 'abroadWarning', + tip: '海外落地后每30秒通知警告', + }); + // 落地转跳 + setting_list.push({ domType: 'button', domId: '', domText: '落地转跳', clickFunc: landedRedirect }); + + // 公司 + setting_list.push({ + domType: 'plain', + domId: '', + domHTML: '公司', + tagName: 'h4', + }); + // 浮动存钱框 + setting_list.push({ + domType: 'checkbox', + domId: '', + domText: ' 浮动存钱框', + dictName: 'floatDepo', + tip: '打开公司或帮派的存钱页面后存钱框将浮动显示', + }); + // 公司转跳存钱 + setting_list.push({ + domType: 'checkbox', + domId: '', + domText: ' 公司转跳存钱', + dictName: 'companyRedirect', + tip: '打开公司页面时自动打开存钱选项卡', + }); + // 收起公司冰蛙效率表 + setting_list.push({ + domType: 'checkbox', + domId: '', + domText: ' 收起公司冰蛙效率表', + dictName: 'companyBWCollapse', + tip: '开启后可手动显示隐藏冰蛙公司表格', + }); + + // 啤酒 + setting_list.push({ + domType: 'plain', + domId: '', + domHTML: '啤酒', + tagName: 'h4', + }); + // 啤酒提醒 + setting_list.push({ + domType: 'checkbox', + domId: 'wh-qua-alarm-check', + domText: ' 啤酒提醒 ', + dictName: '_15Alarm', + tip: '每小时的整15分钟的倍数时通知提醒抢啤酒或者血包', + isHide: true, + changeEv: function (ev) { + ev.target.checked ? beer.start() : beer.stop(); + }, + }); + // 啤酒提醒状态 + setting_list.push({ + domType: 'button', + domId: '', + domText: '啤酒提醒状态', + clickFunc: function () { + WHNotify(`啤酒提醒${beer.status()}`); } - // 节日 - let fest_date_html = ': '; - { - const fest_date_dict = { - '0105': { name: '周末自驾游', eff: '获得双倍的赛车点数与赛车技能等级增益' }, - '0114': { name: '情人节', eff: '使用爱情果汁(Love Juice)后获得降低攻击与复活的能量消耗的增益' }, - '0204': { name: '员工激励日', eff: '获得三倍的工作点数与火车增益' }, - '0217': { name: '圣帕特里克日', eff: '获得双倍的酒类效果增益,城市中可以捡到绿色世涛(Green Stout)' }, - '0320': { name: '420日', eff: '获得三倍的大麻(Cannabis)效果增益' }, - '0418': { name: '博物馆日', eff: '获得10%提高的博物馆PT兑换增益' }, - '0514': { name: '世界献血日', eff: '获得减半的抽血CD和扣血增益' }, - '0611': { name: '世界人口日', eff: '获得双倍的通过攻击获取的经验的增益' }, - '0629': { name: '世界老虎日', eff: '获得5倍的狩猎技能增益' }, - '0705': { name: '国际啤酒节', eff: '获得5倍的啤酒物品效果增益' }, - '0827': { name: '旅游节', eff: '获得双倍的起飞后物品携带容量增益' }, - '0915': { name: '饮料节', eff: '获得双倍的能量饮料效果增益' }, - '1014': { name: '世界糖尿病日', eff: '获得三倍的糖类效果增益' }, - '1015': { name: '周年庆', eff: '左上角的TORN图标可以食用' }, - '1025': { name: '黑色星期五', eff: '某些商家将提供1元购活动' }, - '1114': { name: '住院日', eff: '获得降低75%的住院时间增益' }, - }; - menu_list.fest_date_dict = fest_date_dict; - menu_list.fest_date_list = Object.keys(fest_date_dict); - const formatMMDD = (m, d) => { - const MM = m < 10 ? `0${m}` : m.toString(); - const DD = d < 10 ? `0${d}` : d.toString(); - return MM + DD; - } - const fest_date_key = formatMMDD(date.getUTCMonth(), date.getUTCDate()); - if (fest_date_dict[fest_date_key]) fest_date_html += `今天 - ${fest_date_dict[fest_date_key]['name']}()`; - else { - // 月日列表 - let fest_date_list = Object.keys(fest_date_dict); - fest_date_list.push(fest_date_key); - // 下个节日的位置 - const next_fest_date_index = fest_date_list.sort().indexOf(fest_date_key) + 1; - // 下个节日obj - const next_fest_date = fest_date_dict[fest_date_list[next_fest_date_index] || fest_date_list[0]]; - // 下个节日的时间 - const days_left = (new Date( - next_fest_date_index !== fest_date_list.length ? date.getUTCFullYear() : date.getUTCFullYear() + 1, - fest_date_list[next_fest_date_index !== fest_date_list.length ? next_fest_date_index : 0].slice(0, 2) / 1, - fest_date_list[next_fest_date_index !== fest_date_list.length ? next_fest_date_index : 0].slice(2) / 1, - 8 - ) - date) / 86400000 | 0; - fest_date_html += `${days_left}天后 - ${next_fest_date.name}()`; - } - } - menu_list.push({ - domType: 'plain', - domId: 'wh-trans-fest-date', - domHTML: fest_date_html, - }); - // 活动 - let eventObj = { - onEv: false, - daysLeft: Infinity, - events: [ - { - start: [0, 17, 8], end: [0, 24, 8], - name: '捡垃圾周', - eff: '获得捡垃圾概率提升的增益', - }, - { - start: [3, 5, 20], end: [3, 25, 20], - name: '复活节狩猎', - eff: '复活节彩蛋会随机出现,集齐10个可兑换金蛋和一个独特的头像框(章)。', - }, - { - start: [5, 20, 20], end: [5, 29, 20], - name: '狗牌', - eff: '击败其他玩家以获得狗牌,小心保护你的狗牌。', - }, - { - start: [6, 5, 20], end: [6, 25, 20], - name: '托恩先生和托恩女士', - eff: '上传你的真实图片,然后拿章', - }, - { - start: [8, 5, 20], end: [8, 23, 20], - name: '大逃杀', - eff: '加入特定队伍后,攻击其他队伍玩家,存活下来的3个队伍可以拿章', - }, - { - start: [9, 25, 20], end: [10, 1, 20], - name: '不给糖就捣蛋', - eff: '买篮子之后攻击其他玩家后会随机掉落糖果,可用于兑换许多高价值物品', - }, - { - start: [11, 14, 20], end: [11, 31, 20], - name: '圣诞小镇', - eff: '在小镇中闲逛来获取随机掉落的物品', - }, - ], - }; - menu_list.events = eventObj.events; - eventObj.events.forEach((obj, index) => { - if (eventObj.onEv) return; - // 当前年份 - const nowYear = date.getFullYear(); - // 当前遍历的活动开始时间 - const start = new Date(nowYear, obj.start[0], obj.start[1], obj.start[2]); - // 当前遍历的活动结束时间 - const end = new Date(nowYear, obj.end[0], obj.end[1], obj.end[2]); - // 当前处于活动中 - if (start < date && date < end) { - eventObj.onEv = true; - eventObj.daysLeft = (end - date) / 86400000 | 0; - eventObj.current = obj; - } - // 当前没有活动 - else { - // 当前遍历的活动如果已经经过了,那么下次活动就是遍历的下一个活动对象,否则为当前活动。 - // 如果本年度活动都经过了,那么下次活动是列表的第一个活动对象 - const next = end < date ? eventObj.events[index + 1] || eventObj.events[0] : obj; - // 经过了最后一个活动所以下次活动开始时间是第二年 - const start = new Date(next !== obj && index === eventObj.events.length - 1 ? nowYear + 1 : nowYear, next.start[0], next.start[1], next.start[2]); - const daysLeft = (start - date) / 86400000 | 0; - if (0 <= daysLeft && daysLeft < eventObj.daysLeft) { - eventObj.daysLeft = daysLeft; - eventObj.next = next; - } - } - }); - eventObj.html = ': '; - eventObj.onEv - ? eventObj.html += `${eventObj.current.name}() - 剩余${eventObj.daysLeft}天` - : eventObj.html += `${eventObj.daysLeft}天后 - ${eventObj.next.name}()`; - menu_list.push({ - domType: 'plain', - domId: 'wh-trans-event-cont', - domHTML: eventObj.html, - }); - // 飞花库存 - menu_list.push({ - domType: 'button', - domId: 'wh-foreign-stock-btn', - domText: '🌸 飞花库存', - clickFunc: async function (e) { - e.target.blur(); - forStock().then(); + }); + // 啤酒提醒时间 + setting_list.push({ + domType: 'button', + domId: '', + domText: '啤酒提醒时间设定', + // tip: '通知提前时间', + clickFunc: function () { + popup_node.close(); + let popup = popupMsg(`区间为 1 ~ 60,默认 50
`, '啤酒提醒时间设定'); + let confirm = document.createElement('button'); + confirm.innerHTML = '确定'; + confirm.style.float = 'right'; + confirm.addEventListener('click', () => { + let input = popup.querySelector('input'); + let num = input.value | 0; + if (num === getWhSettingObj()['_15AlarmTime']) return; + if (num < 1 || num > 60) num = 50; + input.value = num.toString(); + setWhSetting('_15AlarmTime', num); + // 之前的运行状态 + let before_state = beer.is_running(); + beer.set_time(num); + if (before_state) beer.start(); + popup.close(); + }); + popup.appendChild(confirm); + }, + }); + + // 其他 + setting_list.push({ + domType: 'plain', + domId: '', + domHTML: '其他', + tagName: 'h4', + }); + // 任务助手 + setting_list.push({ + domType: 'checkbox', + domId: 'wh-mission-lint', + domText: ' 任务助手', + dictName: 'missionHint', + tip: 'Duke任务的一些中文小提示', + isHide: true, + }); + // 捡垃圾助手 + setting_list.push({ + domType: 'checkbox', + domId: 'wh-city-finder', + domText: ' 捡垃圾助手', + dictName: 'cityFinder', + tip: '城市地图中放大显示物品并且估计价值', + isHide: true, + }); + // 快速crime + setting_list.push({ + domType: 'checkbox', + domId: 'wh-quick-crime', + domText: ' 快速犯罪', + dictName: 'quickCrime', + tip: '显示快捷操作按钮,目前不支持自定义', + isHide: true, + }); + // 叠E保护 + setting_list.push({ + domType: 'checkbox', + domId: 'wh-SEProtect-check', + domText: ' 叠E保护', + dictName: 'SEProtect', + tip: '隐藏健身房的锻炼按钮,防止误操作', + isHide: true, + }); + // PT一键购买 + setting_list.push({ + domType: 'checkbox', + domId: 'wh-ptQuickBuy-check', + domText: ' PT一键购买', + dictName: 'ptQuickBuy', + tip: 'PT市场页面购买时跳过确认', + isHide: true, + }); + // 4条转跳 + setting_list.push({ + domType: 'checkbox', + domId: '', + domText: ' 4条转跳', + dictName: 'barsRedirect', + tip: '点击4条时转跳对应页面', + }); + // 清除多余的脚本 + setting_list.push({ + domType: 'checkbox', + domId: '', + domText: ' 清除多余的脚本', + dictName: 'removeScripts', + tip: '清除Google相关脚本、顶部横幅等', + }); + // 危险行为⚠️ + if (getWhSettingObj()['dangerZone'] === true) { + // 攻击界面自刷新 + setting_list.push({ + domType: 'select', + domId: 'wh-attack-reload', + domText: '⚠️攻击界面自动刷新 ', + dictName: 'attReload', + domSelectOpt: [ + { + domVal: 'none', + domText: '无间隔', }, + { + domVal: '1', + domText: '约1s', + }, + { + domVal: '2', + domText: '约2s', + }, + { + domVal: '3', + domText: '约3s', + }, + { + domVal: '4', + domText: '约4s', + }, + { + domVal: '5', + domText: '约5s', + }, + { + domVal: 'disabled', + domText: '关闭', + }, + ], + isHide: true, + tip: '危险功能:接机时常用,将自动刷新页面直到目标落地', }); - // 一键起飞 + // 自动开打和结束 + setting_list.push({ + domType: 'checkbox', + domId: 'wh-auto-start-finish', + domText: ' ⚠️自动开打和结束', + dictName: 'autoStartFinish', + tip: '脚本将会自动按下战斗和结束按钮', + isHide: true, + }); + } else { + setWhSetting('autoStartFinish', false, false) + setWhSetting('attReload', 6, false) + } + // dev + setting_list.push({ + domType: 'checkbox', + domId: 'wh-dev-mode', + domText: ` 开发者模式${isDev() ? ' ' : ''}`, + dictName: 'isDev', + isHide: true, + }); + // 更多设定 + if (isDev()) setting_list.push({ + domType: 'button', domId: 'wh-otherBtn', domText: '更多设定', clickFunc: () => { + const html = `清空设置数据、请求通知权限、测试跨域请求`; + const popup = popupMsg(html, '更多设定'); + }, + isHide: true, + }); + // endregion + // region 菜单中的「选项」 + const menu_list = []; + //const date = new Date(2022, 2, 4, 23); + + // 欢迎 显示玩家id + if (player_info.userID !== 0) { menu_list.push({ - domType: 'button', - domId: 'wh-quick-fly-btn', - domText: '✈️ 一键起飞', - clickFunc: async function () { - if (window.hasWHQuickFlyOpt) return; - window.hasWHQuickFlyOpt = true; - addStyle(`#wh-quick-fly-opt{ + domType: 'plain', + domId: 'wh-trans-welcome', + domHTML: `欢迎 ${player_info.playername}[${player_info.userID}] 大佬`, + }); + } + // 节日 + let fest_date_html = ': '; + { + const fest_date_dict = { + '0105': { name: '周末自驾游', eff: '获得双倍的赛车点数与赛车技能等级增益' }, + '0114': { name: '情人节', eff: '使用爱情果汁(Love Juice)后获得降低攻击与复活的能量消耗的增益' }, + '0204': { name: '员工激励日', eff: '获得三倍的工作点数与火车增益' }, + '0217': { name: '圣帕特里克日', eff: '获得双倍的酒类效果增益,城市中可以捡到绿色世涛(Green Stout)' }, + '0320': { name: '420日', eff: '获得三倍的大麻(Cannabis)效果增益' }, + '0418': { name: '博物馆日', eff: '获得10%提高的博物馆PT兑换增益' }, + '0514': { name: '世界献血日', eff: '获得减半的抽血CD和扣血增益' }, + '0611': { name: '世界人口日', eff: '获得双倍的通过攻击获取的经验的增益' }, + '0629': { name: '世界老虎日', eff: '获得5倍的狩猎技能增益' }, + '0705': { name: '国际啤酒节', eff: '获得5倍的啤酒物品效果增益' }, + '0827': { name: '旅游节', eff: '获得双倍的起飞后物品携带容量增益' }, + '0915': { name: '饮料节', eff: '获得双倍的能量饮料效果增益' }, + '1014': { name: '世界糖尿病日', eff: '获得三倍的糖类效果增益' }, + '1015': { name: '周年庆', eff: '左上角的TORN图标可以食用' }, + '1025': { name: '黑色星期五', eff: '某些商家将提供1元购活动' }, + '1114': { name: '住院日', eff: '获得降低75%的住院时间增益' }, + }; + menu_list.fest_date_dict = fest_date_dict; + menu_list.fest_date_list = Object.keys(fest_date_dict); + const formatMMDD = (m, d) => { + const MM = m < 10 ? `0${m}` : m.toString(); + const DD = d < 10 ? `0${d}` : d.toString(); + return MM + DD; + } + const fest_date_key = formatMMDD(date.getUTCMonth(), date.getUTCDate()); + if (fest_date_dict[fest_date_key]) fest_date_html += `今天 - ${fest_date_dict[fest_date_key]['name']}()`; + else { + // 月日列表 + let fest_date_list = Object.keys(fest_date_dict); + fest_date_list.push(fest_date_key); + // 下个节日的位置 + const next_fest_date_index = fest_date_list.sort().indexOf(fest_date_key) + 1; + // 下个节日obj + const next_fest_date = fest_date_dict[fest_date_list[next_fest_date_index] || fest_date_list[0]]; + // 下个节日的时间 + const days_left = (new Date( + next_fest_date_index !== fest_date_list.length ? date.getUTCFullYear() : date.getUTCFullYear() + 1, + fest_date_list[next_fest_date_index !== fest_date_list.length ? next_fest_date_index : 0].slice(0, 2) / 1, + fest_date_list[next_fest_date_index !== fest_date_list.length ? next_fest_date_index : 0].slice(2) / 1, + 8 + ) - date) / 86400000 | 0; + fest_date_html += `${days_left}天后 - ${next_fest_date.name}()`; + } + } + menu_list.push({ + domType: 'plain', + domId: 'wh-trans-fest-date', + domHTML: fest_date_html, + }); + // 活动 + let eventObj = { + onEv: false, + daysLeft: Infinity, + events: [ + { + start: [0, 17, 8], end: [0, 24, 8], + name: '捡垃圾周', + eff: '获得捡垃圾概率提升的增益', + }, + { + start: [3, 5, 20], end: [3, 25, 20], + name: '复活节狩猎', + eff: '复活节彩蛋会随机出现,集齐10个可兑换金蛋和一个独特的头像框(章)。', + }, + { + start: [5, 20, 20], end: [5, 29, 20], + name: '狗牌', + eff: '击败其他玩家以获得狗牌,小心保护你的狗牌。', + }, + { + start: [6, 5, 20], end: [6, 25, 20], + name: '托恩先生和托恩女士', + eff: '上传你的真实图片,然后拿章', + }, + { + start: [8, 5, 20], end: [8, 23, 20], + name: '大逃杀', + eff: '加入特定队伍后,攻击其他队伍玩家,存活下来的3个队伍可以拿章', + }, + { + start: [9, 25, 20], end: [10, 1, 20], + name: '不给糖就捣蛋', + eff: '买篮子之后攻击其他玩家后会随机掉落糖果,可用于兑换许多高价值物品', + }, + { + start: [11, 14, 20], end: [11, 31, 20], + name: '圣诞小镇', + eff: '在小镇中闲逛来获取随机掉落的物品', + }, + ], + }; + menu_list.events = eventObj.events; + eventObj.events.forEach((obj, index) => { + if (eventObj.onEv) return; + // 当前年份 + const nowYear = date.getFullYear(); + // 当前遍历的活动开始时间 + const start = new Date(nowYear, obj.start[0], obj.start[1], obj.start[2]); + // 当前遍历的活动结束时间 + const end = new Date(nowYear, obj.end[0], obj.end[1], obj.end[2]); + // 当前处于活动中 + if (start < date && date < end) { + eventObj.onEv = true; + eventObj.daysLeft = (end - date) / 86400000 | 0; + eventObj.current = obj; + } + // 当前没有活动 + else { + // 当前遍历的活动如果已经经过了,那么下次活动就是遍历的下一个活动对象,否则为当前活动。 + // 如果本年度活动都经过了,那么下次活动是列表的第一个活动对象 + const next = end < date ? eventObj.events[index + 1] || eventObj.events[0] : obj; + // 经过了最后一个活动所以下次活动开始时间是第二年 + const start = new Date(next !== obj && index === eventObj.events.length - 1 ? nowYear + 1 : nowYear, next.start[0], next.start[1], next.start[2]); + const daysLeft = (start - date) / 86400000 | 0; + if (0 <= daysLeft && daysLeft < eventObj.daysLeft) { + eventObj.daysLeft = daysLeft; + eventObj.next = next; + } + } + }); + eventObj.html = ': '; + eventObj.onEv + ? eventObj.html += `${eventObj.current.name}() - 剩余${eventObj.daysLeft}天` + : eventObj.html += `${eventObj.daysLeft}天后 - ${eventObj.next.name}()`; + menu_list.push({ + domType: 'plain', + domId: 'wh-trans-event-cont', + domHTML: eventObj.html, + }); + // 飞花库存 + menu_list.push({ + domType: 'button', + domId: 'wh-foreign-stock-btn', + domText: '🌸 飞花库存', + clickFunc: async function (e) { + e.target.blur(); + forStock().then(); + }, + }); + // 一键起飞 + menu_list.push({ + domType: 'button', + domId: 'wh-quick-fly-btn', + domText: '✈️ 一键起飞', + clickFunc: async function () { + if (window.hasWHQuickFlyOpt) return; + window.hasWHQuickFlyOpt = true; + addStyle(`#wh-quick-fly-opt{ position:fixed; left:64px; top:64px; @@ -3492,9 +3496,9 @@ display: inline-block; } info{display:block;} `); - const node = document.createElement('div'); - node.id = 'wh-quick-fly-opt'; - node.innerHTML = ` + const node = document.createElement('div'); + node.id = 'wh-quick-fly-opt'; + node.innerHTML = `主要用途:出院秒飞
点起飞,页面加载完成后会马上飞走
@@ -3507,61 +3511,61 @@ info{display:block;}点击开打:
+ const [dest_node, type_node] = node.querySelectorAll('select'); + node.querySelector('button').addEventListener('click', () => { + sessionStorage['wh-quick-fly'] = `${dest_node.selectedIndex} ${type_node.selectedIndex} ${new Date().getTime()}`; + if (!href.contains('travelagency.php')) { + WHNotify('正在转跳'); + location.href = 'https://www.torn.com/travelagency.php'; + } else { + doQuickFly(); + } + }); + node.querySelector('a').addEventListener('click', (e) => { + e.preventDefault(); + forStock(); + }); + node.querySelector('input').addEventListener('click', (e) => { + node.classList.toggle('wh-quick-fly-opt-hide'); + const el = e.target; + el.value = el.value === ' - ' ? ' + ' : ' - '; + }); + const info_node = node.querySelector('info'); + const time_predict = document.createElement('p'); + const yaoCD = document.createElement('p'); + info_node.append(time_predict); + info_node.append(yaoCD); + const predict = [ + ['~54分', '~36分', '~26分', '~16分',], + ['~1时10分', '~50分', '~36分', '~22分',], + ['~1时22分', '~58分', '~40分', '~24分',], + ['~4时28分', '~3时8分', '~2时14分', '~1时20分',], + ['~5时18分', '~3时42分', '~2时40分', '~1时36分',], + ['~5时34分', '~3时54分', '~2时46分', '~1时40分',], + ['~5时50分', '~4时6分', '~2时56分', '~1时46分',], + ['~7时30分', '~5时16分', '~3时46分', '~2时16分',], + ['~8时4分', '~5时38分', '~4时2分', '~2时24分',], + ['~9时2分', '~6时20分', '~4时30分', '~2时42分',], + ['~9时54分', '~6时56分', '~4时58分', '~2时58分',], + ]; + const showTime = function () { + time_predict.innerHTML = `往返时间:${predict[dest_node.selectedIndex][type_node.selectedIndex]}`; + } + dest_node.addEventListener('change', showTime); + type_node.addEventListener('change', showTime); + document.body.append(node); + showTime(); + yaoCD.innerHTML = `药CD剩余:${getYaoCD()}`; + }, + }); + // NPC LOOT + menu_list.push({ + domType: 'button', + domId: 'wh-npc-loot-btn', + domText: '🔫 LOOT', + clickFunc: function (e) { + e.target.blur(); + const insert = `点击开打:
})
'; - quick_link_dict.forEach(el => { - insert += `${el.name}`; - }); - insert += '
' - let popup = popupMsg(insert, '常用链接'); - popup.classList.add('wh-link-collection-cont'); - popup.addEventListener('click', ev => { - if (ev.target.tagName.toLowerCase() === 'a' || ev.target.tagName.toLowerCase() === 'span') { - popup.close(); - } - }); - }, - }); - // 飞贼 - menu_list.push({ - domType: 'button', - domId: 'wh-gs-btn', - domText: '🐏 飞贼小助手', - clickFunc: function (e) { - e.target.blur(); - loadGS(getScriptEngine()); - }, - tip: '加载从PC端移植的伞佬的油猴版飞贼小助手', - }); - // 物品价格监视 - menu_list.push({ - domType: 'button', - domId: 'wh-price-watcher-btn', - domText: '💊 价格监视', - clickFunc: function () { - const watcher_conf = getWhSettingObj()['priceWatcher']; - const pre_str = JSON.stringify(watcher_conf); - const html = ` @@ -3789,36 +3793,36 @@ background-size: 100% auto !important;XAN
`; - const popup = popupMsg(html, '价格监视设置'); - popup.querySelector('button').onclick = () => { - const [pt_node, xan_node] = popup.querySelectorAll('input[type="number"]'); - watcher_conf.pt = pt_node.value | 0; - watcher_conf.xan = xan_node.value | 0; - if (JSON.stringify(watcher_conf) !== pre_str) setWhSetting('priceWatcher', watcher_conf); - popup.close(); - }; - } - }); - // 小窗犯罪 - menu_list.push({ - domType: 'button', - domId: 'wh-crime-iframe-btn', - domText: '🤑 小窗犯罪', - clickFunc: function () { - // 弹出小窗口 - const ifHTML = ``; - const popup_insert = `加载中请稍后${loading_gif_html()}
`; - const $popup = popupMsg(popup_insert, '小窗快速犯罪'); - // 运行状态node - let loading_node = $popup.querySelector('p:first-of-type'); - // if容器 - const if_cont = $popup.querySelector('#wh-quick-crime-if-container'); - if_cont.innerHTML = ifHTML; + const popup = popupMsg(html, '价格监视设置'); + popup.querySelector('button').onclick = () => { + const [pt_node, xan_node] = popup.querySelectorAll('input[type="number"]'); + watcher_conf.pt = pt_node.value | 0; + watcher_conf.xan = xan_node.value | 0; + if (JSON.stringify(watcher_conf) !== pre_str) setWhSetting('priceWatcher', watcher_conf); + popup.close(); + }; + } + }); + // 小窗犯罪 + menu_list.push({ + domType: 'button', + domId: 'wh-crime-iframe-btn', + domText: '🤑 小窗犯罪', + clickFunc: function () { + // 弹出小窗口 + const ifHTML = ``; + const popup_insert = `加载中请稍后${loading_gif_html()}
`; + const $popup = popupMsg(popup_insert, '小窗快速犯罪'); + // 运行状态node + let loading_node = $popup.querySelector('p:first-of-type'); + // if容器 + const if_cont = $popup.querySelector('#wh-quick-crime-if-container'); + if_cont.innerHTML = ifHTML; - // if内未加载脚本时插入的快捷crime node - const mobile_prepend_node = document.createElement('div'); - mobile_prepend_node.classList.add('wh-translate'); - mobile_prepend_node.innerHTML = `即将打开危险功能,使用这些功能可能会造成账号封禁。请自行考虑是否使用。
+ }; + cIframe.onload = if_onload_func; + + // 超时判断 + let time_counter = 0; + let time_out_id = window.setInterval(() => { + loading_node = $popup.querySelector('p:first-of-type'); + if (!loading_node) { + clearInterval(time_out_id); + time_out_id = undefined; + return; + } + time_counter++; + if (time_counter > 0 && !loading_node.querySelector('button')) { + const reload_btn = document.createElement('button'); + reload_btn.innerHTML = '重新加载'; + reload_btn.onclick = () => { + reload_btn.remove(); + time_counter = 0; + if_cont.innerHTML = null; + if_cont.innerHTML = ifHTML; + cIframe = $popup.querySelector('iframe'); + cIframe.onload = if_onload_func; + }; + loading_node.append(reload_btn); + } + }, 1000); + } + }); + // 危险行为开关⚠️ + menu_list.push({ + domType: 'button', + domId: 'wh-danger-zone', + domText: '⚠️ 危险功能', + clickFunc: function (e) { + e.target.blur(); + const insert = `即将打开危险功能,使用这些功能可能会造成账号封禁。请自行考虑是否使用。
`; - const popup = popupMsg(insert, '⚠️警告'); - const warning_check = popup.querySelector('input'); - const ok_btn = popup.querySelector('button'); - warning_check.onchange = () => ok_btn.disabled = false; - ok_btn.onclick = () => { - setWhSetting('dangerZone', warning_check.checked); - popup['close'](); - window.location.reload(); - }; - }, - }); - // 传单助手 - menu_list.push({ - domType: 'button', - domId: '', - domText: '📜️ 传单助手', - clickFunc: adHelper - }); - // 守望者 - menu_list.push({ - domType: 'button', - domId: '', - domText: '🛡️ 守望者', - clickFunc: function () { - safeKeeper(); - }, - }); - // 更新历史 - menu_list.push({ - domType: 'button', domId: '', domText: '🐞 更新历史', clickFunc: () => { - popupMsg('更新历史现已迁移:| URL | ${window.location.href} |
| 页面尺寸 | ${window.innerWidth}x${window.innerHeight} |
| 设备类型 | ${getDeviceType().toUpperCase()} |
通常电脑浏览器装有油猴等用户脚本扩展时可以使用链接安装(自动更新):点此安装。
这些扩展长这样:

加载脚本然后直接复制粘贴到用户脚本处。
`; - const node = popupMsg(innerHtml, '如何更新'); - // 直接复制的按钮 - node.querySelector('button').onclick = async (e) => { - e.target.innerHTML = '加载中'; - const js_text = await COFetch(`https://jjins.github.io/fyfuzhi/release.min.user.js?${performance.now()}`); - e.target.innerHTML = '点击复制到剪切板'; - e.target.onclick = () => { - const textarea_node = document.createElement('textarea'); - textarea_node.innerHTML = js_text; - e.target.parentElement.append(textarea_node); - textarea_node.focus(); - textarea_node.select(); - document.execCommand('Copy'); - textarea_node.remove(); - e.target.innerHTML = '已复制'; - e.target.onclick = null; - WHNotify('脚本已复制,请前往粘贴'); - }; - }; + const node = popupMsg(innerHtml, '如何更新'); + // 直接复制的按钮 + node.querySelector('button').onclick = async (e) => { + e.target.innerHTML = '加载中'; + const js_text = await COFetch(`https://jjins.github.io/fyfuzhi/release.min.user.js?${performance.now()}`); + e.target.innerHTML = '点击复制到剪切板'; + e.target.onclick = () => { + const textarea_node = document.createElement('textarea'); + textarea_node.innerHTML = js_text; + e.target.parentElement.append(textarea_node); + textarea_node.focus(); + textarea_node.select(); + document.execCommand('Copy'); + textarea_node.remove(); + e.target.innerHTML = '已复制'; + e.target.onclick = null; + WHNotify('脚本已复制,请前往粘贴'); }; - // 节日 - zhong_node.querySelectorAll('#wh-trans-fest-date button').forEach((el, i) => i === 0 - ? el.addEventListener('click', () => { - let html = '| ${1 + (date.slice(0, 2) | 0)}月${date.slice(2)}日 | ${menu_list.fest_date_dict[date].name} | ${menu_list.fest_date_dict[date].eff} |
| ${el.name} | ${el.start[0] + 1}月${el.start[1]}日${el.start[2]}:00~${el.end[0] + 1}月${el.end[1]}日${el.end[2]}:00 |
| ${el.eff} | |
更多信息请关注群聊和公众号
', '活动'); - }) - : el.addEventListener('click', null)); - document.body.append(zhong_node); - // 引入torn自带浮动提示 - (window['initializeTooltip']) && (window['initializeTooltip']('.wh-container', 'white-tooltip')); - // 加载torn mini profile - initMiniProf('#wh-trans-icon'); - return zhong_node; - } + }; + }; + // 节日 + zhong_node.querySelectorAll('#wh-trans-fest-date button').forEach((el, i) => i === 0 + ? el.addEventListener('click', () => { + let html = '| ${1 + (date.slice(0, 2) | 0)}月${date.slice(2)}日 | ${menu_list.fest_date_dict[date].name} | ${menu_list.fest_date_dict[date].eff} |
| ${el.name} | ${el.start[0] + 1}月${el.start[1]}日${el.start[2]}:00~${el.end[0] + 1}月${el.end[1]}日${el.end[2]}:00 |
| ${el.eff} | |
更多信息请关注群聊和公众号
', '活动'); + }) + : el.addEventListener('click', null)); + document.body.append(zhong_node); + // 引入torn自带浮动提示 + (window['initializeTooltip']) && (window['initializeTooltip']('.wh-container', 'white-tooltip')); + // 加载torn mini profile + initMiniProf('#wh-trans-icon'); + return zhong_node; + } - // bool 返回当前是否dev状态 - function isDev() { - try { - return getWhSettingObj()['isDev'] || false; - } catch (e) { - console.error(`[wh] dev状态错误 ${e}`); - return false; - } + // bool 返回当前是否dev状态 + function isDev() { + try { + return getWhSettingObj()['isDev'] || false; + } catch (e) { + console.error(`[wh] dev状态错误 ${e}`); + return false; } + } - /** - * 弹出窗口 - * @param {String} innerHTML 内容html string - * @param {String} title 弹窗标题 - * @returns {null|Element} - */ - function popupMsg(innerHTML, title = '芜湖助手') { - if (popup_node) popup_node.close(); - const chatRoot = document.querySelector('#chatRoot'); - chatRoot.classList.add('wh-hide'); - const popup = document.createElement('div'); - popup.id = 'wh-popup'; - popup.innerHTML = `${title}
${msg}
You dug deep and completed 15 minutes of incline sprints
- *You gained 1,854.05 speed
- */ - if (gymDict[$(e).text()]) - $(e).text(gymDict[$(e).text()]); - }); - // 健身房信息 标题 - $('div[class^="gymTitle"] h3').each((i, e) => { - if (gymDict[$(e).text()]) - $(e).text(gymDict[$(e).text()]); - else if (gymList[$(e).text().trim()]) - $(e).text(gymList[$(e).text().trim()]); - }); - // 健身房信息 属性名 - $('ul[class^="gymInfo"] b').each((i, e) => { - if (gymDict[$(e).text().trim()]) - $(e).text(gymDict[$(e).text().trim()]); - }); - - // 健身房状态信息 - // $('div[class^="gymStats"] b').each((i, e) => { - // log(e) - // if (gymDict[$(e).text().trim()]) - // $(e).text(gymDict[$(e).text().trim()]); - // }); - // - // // 健身房状态值 - // $('div[class^="gymStats"] span[class^=value]').each((i, e) => { - // if ($(e).text().indexOf("per train") > 0) - // $(e).text($(e).text().split(" ")[0] + gymDict["per train"]); - // else if (gymDict[$(e).text().trim()]) - // $(e).text(gymDict[$(e).text().trim()]); - // }); - - // 健身房信息 属性值 - $('ul[class^="gymInfo"] span[class^="value"]').each((i, e) => { - if (gymDict[$(e).text().trim()]) - $(e).text(gymDict[$(e).text().trim()]); - }); - // 健身房信息 具体锻炼项目 - $('span[class^="exerciseName"]').each((i, e) => { - if (gymDict[$(e).text().trim()]) - $(e).text(gymDict[$(e).text().trim()]); - }); - // 购买提示信息 - $('div[class^="confirmMessage"] p[role="alert"]').each((i, e) => { - if (gymDict[$(e).text().trim()]) - $(e).text(gymDict[$(e).text().trim()]); - }); - } - - gymTrans(); - gymOB.observe($('div.content-wrapper')[0], { childList: true, subtree: true, attributes: true }); - return; - } - - // 物品页面 - if (href.contains(/item\.php/)) { - if (href.includes('item.php?temp=')) return; - // 标题和右边的链接 - initOB(document.querySelector('.content-title'), { childList: true }, - () => { - titleTrans(); - contentTitleLinksTrans(); - }); - // 套装预览中间的文字 - const $loadouts_root = document.getElementById('loadoutsRoot'); - if ($loadouts_root) { - initOB($loadouts_root, { subtree: true, attributes: true }, () => { - const el = $loadouts_root.querySelector('div[class^="type___"]'); - if (el && itemPageDict[el.innerText.trim()]) { - el.innerText = itemPageDict[el.innerText.trim()]; - } - }); - } - // 手机选项按钮 物品名 物品详情 - const options = { - attributes: true, - subtree: true, - attributeFilter: ["aria-hidden",] - }; - const translated = { cat: '', count: -1 }; - const translatedOnce = { item_opt: -1, opt_icon_count: -1 }; - initOB(document.getElementById('category-wrap'), options, () => { - // 手机操作选项 - const $item_opt = document.querySelectorAll(`ul.itemsList span.opt-name`); - if (translatedOnce.item_opt !== $item_opt.length - 1) { - let count = -1; - $item_opt.forEach((e, i) => { - if (itemPageDict[e.firstChild.nodeValue.trim()]) { - e.firstChild.nodeValue = itemPageDict[e.firstChild.nodeValue.trim()]; - } - count = i; - }); - translatedOnce.item_opt = count !== -1 ? count : -1; - } - // 物品名 - const $active_tab = document.querySelector('ul.itemsList[aria-expanded="true"]'); - if (!$active_tab) return; - const $active_item_list = $active_tab.querySelectorAll('span.name'); - const itemCat = $active_tab.id; - if ($active_item_list.length - 1 !== translated.count || itemCat !== translated.cat) { - let count = -1; - // 物品名 - $active_item_list.forEach((e, i) => { - if (!e.classList.contains('wh-translated')) { - if (itemNameDict[e.innerText.trim()]) { - e.classList.add('wh-translated'); - const trans_dom = document.createElement('span'); - trans_dom.classList.add('wh-translate'); - trans_dom.setAttribute('style', 'margin: 0 0 0 1em'); - trans_dom.append(itemNameDict[e.innerText.trim()]); - e.after(trans_dom); - // .after(`${itemNameDict[$(e).text().trim()]}`); - } - } - count = i; - }); - - if (count !== -1) { - translated.cat = itemCat; - translated.count = count; - } - } - // 物品详情 - const $show_item_info = $active_tab.querySelector('li.show-item-info'); - showItemInfoTrans($show_item_info); - // 物品右操作按钮 - const $opt_icon_tooltip = $('ul.actions-wrap span.icon-h'); - if (translatedOnce.opt_icon_count !== $opt_icon_tooltip.length - 1) { - let count = -1 - $opt_icon_tooltip.each((i, e) => { - if (itemPageDict[e.attributes.title.nodeValue]) { - e.attributes.title.nodeValue = itemPageDict[e.attributes.title.nodeValue]; - } - count = i; - }); - if (count !== -1) { - translatedOnce.opt_icon_count = count; - } - } - }); - // 黑框 - const $title_black = document.querySelector('div.title-black'); - if ($title_black) { - const $your_items = $title_black.querySelector('span.m-hide'); - if (itemPageDict[$your_items.innerText.trim()]) { - $your_items.innerText = itemPageDict[$your_items.innerText.trim()]; - } - // 黑框分类标题 - const $items_type_name = $title_black.querySelector('span.items-name'); - initOB($items_type_name, { childList: true }, () => { - if (itemPageDict[$items_type_name.innerText.trim()]) { - $items_type_name.innerText = itemPageDict[$items_type_name.innerText.trim()]; - } - }); - } - // 分类浮动文字 - const $data_type = document.querySelectorAll('li#categoriesItem a'); - $data_type.forEach((e) => { - if (itemPageDict[e.getAttribute('title')]) { - e.setAttribute('title', itemPageDict[e.attributes.title.nodeValue]); - } - }); - return; - } - - // npc商店 - if (href.contains(/(shops|bigalgunshop)\.php/)) { - // 标题和右边的链接 - const $cont_title = document.querySelector('.content-title'); - initOB($cont_title, { childList: true, subtree: true }, () => { - titleTrans(); - contentTitleLinksTrans(); - }); - const $wrapper = document.querySelector('.content-wrapper'); - // [购买部分] - const $buy_items_wrapper = $wrapper.querySelector('.buy-items-wrap'); - if ($buy_items_wrapper) { - // 黑框标题 - const $buy_black_title = $buy_items_wrapper.querySelector('.title-black'); - if ($buy_black_title && npcShopDict[$buy_black_title.firstChild.nodeValue.trim()]) { - $buy_black_title.firstChild.nodeValue = npcShopDict[$buy_black_title.firstChild.nodeValue.trim()]; - } - // 各个物品 - const $items = $buy_items_wrapper.querySelectorAll('ul.items-list > li.torn-divider'); - $items.forEach(e => { - // 物品名 - const $item_name = e.querySelector('span.desc span.name.bold'); - if ($item_name && itemNameDict[$item_name.innerText.trim()]) { - $item_name.innerText = `${itemNameDict[$item_name.innerText.trim()]}(${$item_name.innerText.trim()})`; - } - // 类型和存货 - const $item_stock = e.querySelector('span.desc span.stock'); - if ($item_stock) $item_stock.childNodes.forEach(e => { - if (e.nodeType === 1) { - if (npcShopDict[e.innerText.trim()]) e.innerText = npcShopDict[e.innerText.trim()]; - } else { - if (npcShopDict[e.nodeValue.trim()]) e.nodeValue = npcShopDict[e.nodeValue.trim()]; - } - }); - // buy按钮 - const $buy_btn = e.querySelector('button.wai-support'); - if ($buy_btn && npcShopDict[$buy_btn.childNodes[0].nodeValue.trim()]) { - $buy_btn.childNodes[0].nodeValue = npcShopDict[$buy_btn.childNodes[0].nodeValue.trim()]; - } - // 买前确认 - const $confirm = e.querySelector('span.confirm'); - const $confirm_msg = $confirm.querySelector('span'); - if ($confirm_msg && npcShopDict[$confirm_msg.innerText.trim()]) { - $confirm_msg.innerText = npcShopDict[$confirm_msg.innerText.trim()]; - } - const $amount_item_name = $confirm.querySelector('span.count').nextSibling; - if ($amount_item_name && !$amount_item_name.nodeValue.contains(CC_set)) { - const item_name = $amount_item_name.nodeValue.trim().split(' ').slice(1, -1).join(' '); - const item_name_trans = itemNameDict[item_name] || item_name; - $amount_item_name.nodeValue = `个[${item_name_trans}],总计$`; - } - const $confirm_a = $confirm.querySelectorAll('span.confirm-act a'); - $confirm_a.forEach(e => { - if (npcShopDict[e.innerText.trim()]) e.innerText = npcShopDict[e.innerText.trim()]; - }); - }); - // 展开的物品详情 - initOB($wrapper, { childList: true, subtree: true }, () => { - const $item_desc = $wrapper.querySelector('.show-item-info') || $wrapper.querySelector('.view-item-info'); - showItemInfoTrans($item_desc); - }); - } - // [卖出部分] - const $sell_items_wrapper = $wrapper.querySelector('.sell-items-wrap'); - if ($sell_items_wrapper) { - // 黑框标题 - const $title = $sell_items_wrapper.querySelectorAll('ul.title li'); - $title.forEach(el => { - el.childNodes.forEach(e => { - if (e.nodeType === 1) { - if (npcShopDict[e.innerText.trim()]) { - e.innerText = npcShopDict[e.innerText.trim()]; - return; - } - const spl = e.innerText.trim().split(' '); - if (spl.length > 3) { - const shop_name = spl[2] === 'the' ? spl.slice(3).join(' ') : spl.slice(2).join(' '); - const shop_name_trans = npcShopDict[shop_name] || titleDict[shop_name] || cityDict[shop_name] || null; - e.innerText = `物品给${shop_name_trans || shop_name}`; - } - } else { - if (npcShopDict[e.nodeValue.trim()]) e.nodeValue = npcShopDict[e.nodeValue.trim()]; - } - }); - }); - // 物品名 - const $items_name = $sell_items_wrapper.querySelectorAll('span.name'); - $items_name.forEach(el => { - if (itemNameDict[el.innerText.trim()]) el.innerText += - ` ${itemNameDict[el.innerText.trim()]}`; - }); - // 按钮 - const $btn = $sell_items_wrapper.querySelectorAll('button'); - $btn.forEach(e => { - if (npcShopDict[e.innerText.trim()]) e.innerText = npcShopDict[e.innerText.trim()]; - }); - // select btn - const $select_btn = $sell_items_wrapper.querySelector('li.select button.wai-btn'); - if ($select_btn) { - initOB($select_btn, { childList: true }, () => { - if ($select_btn && npcShopDict[$select_btn.innerText.trim()]) { - $select_btn.innerText = npcShopDict[$select_btn.innerText.trim()]; - } - }); - } - // 取消按钮 - const $cancel = $sell_items_wrapper.querySelector('span.cancel a'); - if ($cancel && npcShopDict[$cancel.innerText.trim()]) { - $cancel.innerText = npcShopDict[$cancel.innerText.trim()]; - } - // 卖出确认文字 - const $sell_confirm = $sell_items_wrapper.querySelector('div.sell-confirm'); - if ($sell_confirm) { - const $msg = $sell_confirm.childNodes[0]; - if (npcShopDict[$msg.nodeValue.trim()]) $msg.nodeValue = npcShopDict[$msg.nodeValue.trim()]; - const $total_value = $sell_confirm.querySelector('span.profit').childNodes[0]; - if (npcShopDict[$total_value.nodeValue.trim()]) $total_value.nodeValue = npcShopDict[$total_value.nodeValue.trim()]; - } - } - // [出售PT部分] - const $sell_pt_wrapper = $wrapper.querySelector('.sell-points-wrap'); - if ($sell_pt_wrapper) { - // 黑框 - const $title_black = $sell_pt_wrapper.querySelector('.title-black'); - if (npcShopDict[$title_black.innerText.trim()]) { - $title_black.innerText = npcShopDict[$title_black.innerText.trim()]; - } - } - return; - } - - // 股票 - if (href.contains(/page\.php\?sid=stocks/)) { - const stockOB = new MutationObserver(() => { - stockOB.disconnect(); - titleTrans(); - contentTitleLinksTrans(); - stockTrans(); - stockOB.observe($('.content-wrapper').get(0), { - characterData: true, - attributes: true, - subtree: true, - childList: true - }); - }); - const stockTrans = function stockTrans() { - // 表头 - $('ul.title-black').find('*').contents().each((i, e) => { - if (e.nodeType === 3 && stockDict[e.nodeValue.trim()]) { - e.nodeValue = stockDict[e.nodeValue.trim()]; - } - }); - // 名称 - $('div[class^="nameContainer"]').each((i, e) => { - if (e.childNodes[0].nodeValue && stockDict[e.childNodes[0].nodeValue.trim()]) { - e.childNodes[0].nodeValue = stockDict[e.childNodes[0].nodeValue.trim()]; - } - }); - // 右侧bb名 - $('div[class^="dividendInfo"] p').each((i, e) => { - const spl = $(e).text().trim().split(' '); - if (stockDict[$(e).text().trim()]) { - $(e).text(stockDict[$(e).text().trim()]); - } else if (/[0-9]x$/.test(spl[0])) { - const itemName = spl.slice(1).join(' '); - const num = spl[0].slice(0, -1); - $(e).text(`${num}个${itemNameDict[itemName] ? itemNameDict[itemName] : itemName}`); - } - }); - // 股价详情 - $('#panel-priceTab ul[role="tablist"] label span:last-child').each((i, e) => { - if (stockDict[$(e).text()]) { - $(e).text(stockDict[$(e).text()]); - } - }); - $('ul[class^="priceInfoList___"] li').contents().each((i, e) => { - if (e.nodeType === 3) { - if (stockDict[e.nodeValue.trim()]) { - e.nodeValue = stockDict[e.nodeValue.trim()]; - } - } - }); - // 点开购买后 - $('div#panel-ownedTab div[class^="manageBlock"] *').contents().each((i, e) => { - if (e.nodeType === 1) { - if (stockDict[$(e).text().trim()]) { - $(e).text(stockDict[$(e).text().trim()]); - } - } else if (e.nodeType === 3) { - if (stockDict[e.nodeValue.trim()]) e.nodeValue = stockDict[e.nodeValue.trim()]; - else if (/\$[0-9]+ after the 0\.1% fee of \$[0-9]+$/.test(e.nodeValue.trim())) { - e.nodeValue = e.nodeValue.trim() - .replace('after the', stockDict['after the']) - .replace('fee of', stockDict['fee of']); - } - } - }); - // 点开购买后的历史栏 - $('div#panel-ownedTab div[class^="transactionsContainer"] li').each((i, e) => { - e = e.childElementCount === 0 ? e : e.children[0]; - if (stockDict[$(e).text().trim()]) { - $(e).text(stockDict[$(e).text().trim()]); - } - }); - // 历史购买show more - const $show_more = document.querySelector('li[class^="showMore___"] button'); - if ($show_more && $show_more.innerText.trim().contains(/^Show [0-9]+ more$/)) { - const number = $show_more.innerText.trim().split(' ')[1]; - $show_more.innerText = `显示另外${number}条`; - } - // 点开bb后 - $('div#panel-dividendTab div[class^="message"] *').contents().each((i, e) => { - if (e.nodeType !== 3) return; - if (!e.nodeValue.trim()) return; - if (stockDict[e.nodeValue.trim()]) { - e.nodeValue = stockDict[e.nodeValue.trim()]; - } - // 第n个increment 1st 2nd 3rd 4th - else if (/[0-9][snrt][tdh]$/.test(e.nodeValue.trim())) { - e.nodeValue = `第${e.nodeValue.trim().slice(0, -2)}个`; - } - // 物品 - else if (/[0-9]x$/.test(e.nodeValue.trim().split(' ')[0])) { - const spl = e.nodeValue.trim().split(' '); - const itemName = spl.slice(1).join(' '); - e.nodeValue = - ` ${spl[0].replace('x', '个') - } ${itemNameDict[itemName] ? itemNameDict[itemName] : itemName - }`; - } else { - if (/[\u4e00-\u9fa5]/.test(e.nodeValue)) return; - if (/\b\$?[0-9,]+$/.test(e.nodeValue)) return; - log(`未找到翻译:[${e.nodeValue.trim()}]`); - } - }); - }; - stockTrans(); - stockOB.observe($('.content-wrapper').get(0), { - characterData: true, - attributes: true, - subtree: true, - childList: true - }); - return; - } - - // 教育页面 - if (href.indexOf('education.php') >= 0) { - const eduOB = new MutationObserver(eduOBInit); - - function eduOBInit() { - eduOB.disconnect(); - eduTrans(); - eduOB.observe($('div.content-wrapper')[0], { childList: true, subtree: true }); - } - - function eduTrans() { - titleTrans(); - contentTitleLinksTrans(); - - // 大科目、学院标题 - $('div.content-wrapper div.title').each((i, e) => { - if (eduDict[$(e).text().trim()]) - e.firstChild.nodeValue = eduDict[$(e).text().trim()]; - }); - // 教育主页提示内容 和 学院详情 小课程提示信息 - $('div.content-wrapper div[class^="msg"]').find('*').contents().each((i, e) => { - if (e.nodeValue === null) return; - if (eduDict[e.nodeValue.trim()]) { - e.nodeValue = eduDict[e.nodeValue.trim()]; - } else if (e.nodeValue.indexOf('second') >= 0 || - e.nodeValue.indexOf('minute') >= 0 || - e.nodeValue.indexOf('hour') >= 0 || - e.nodeValue.indexOf('day') >= 0) { - e.nodeValue = e.nodeValue - .replace('days', '天') - .replace('day', '天') - .replace('hours', '时') - .replace('hour', '时') - .replace('minutes', '分') - .replace('minute', '分') - .replace('and', '和') - .replace('seconds', '秒') - .replace('second', '秒'); - } - }); - // 学院详情标题 - $('div.content-wrapper div.title-black').each((i, e) => { - if (e.childNodes.length === 3) - if (eduDict[e.lastChild.nodeValue.trim()]) - e.lastChild.nodeValue = ' ' + eduDict[e.lastChild.nodeValue.trim()]; - if (eduDict[$(e).text().trim()]) - $(e).text(eduDict[$(e).text().trim()]); - }); - // 学院详情 小课程标题 - $('div.content-wrapper span.module-name').each((i, e) => { - if (eduDict[$(e).text().trim()]) - $(e).text(eduDict[$(e).text().trim()]); - }); - // 学院详情 课程的描述 - $('div.content-wrapper p.desc').each((i, e) => { - if (eduDict[$(e).text().trim()]) - $(e).text(eduDict[$(e).text().trim()]); - }); - // 课程详情 7 标题 - $('div.module-desc p.title').each((i, e) => { - if (eduDict[$(e).text().trim()]) - $(e).text(eduDict[$(e).text().trim()]); - }); - // 课程介绍中的所有li元素 - $('div.module-desc ul.info').find('*').contents().each((i, e) => { - if (e.nodeValue === null) return; - if (eduDict[e.nodeValue.trim()]) - e.nodeValue = eduDict[e.nodeValue.trim()]; - else if (e.nodeValue.indexOf('Length') >= 0) { - e.nodeValue = e.nodeValue.replace('Length', eduDict['Length']) - .replace('d ', '日') - .replace('h ', '时') - .replace('m ', '分'); - } else if (e.nodeValue.indexOf('Cost') >= 0) { - e.nodeValue = e.nodeValue.replace('Cost', eduDict['Cost']); - } else if (e.nodeValue.indexOf('manual labor') >= 0) { - e.nodeValue = e.nodeValue.replace('manual labor', eduDict['manual labor']) - .replace('Gain', eduDict['Gain']) - .replace('upon completion', eduDict['upon completion']); - } else if (e.nodeValue.indexOf('endurance') >= 0) { - e.nodeValue = e.nodeValue.replace('endurance', eduDict['endurance']) - .replace('Gain', '获得') - .replace('upon completion', eduDict['upon completion']); - } else if (e.nodeValue.indexOf('intelligence') >= 0) { - e.nodeValue = e.nodeValue.replace('intelligence', eduDict['intelligence']) - .replace('Gain', '获得') - .replace('upon completion', eduDict['upon completion']); - } - }); - } - - eduTrans(); - eduOB.observe($('div.content-wrapper')[0], { childList: true, subtree: true }); - return; - } - - // profile 玩家资料页面 - if (href.contains(/profiles\.php\?XID=\d+/)) { - const $wrapper = document.querySelector('.content-wrapper'); - const profileOB = new MutationObserver(() => { - profileOB.disconnect(); - titleTrans(); - contentTitleLinksTrans(); - profileTrans(); - profileOB.observe($wrapper, { - characterData: true, - attributes: true, - subtree: true, - childList: true - }); - }); - const profileTrans = function profileTrans() { - const playerName = document.title.trim().contains(/('s |s' )/) - ? document.title.trim().split(/('s |s' )/)[0] - : null; - if (!playerName) { - console.error('翻译助手错误:获取用户名失败。'); - try { - profileOB.disconnect() - } catch { - } - return; - } - - // 黑框标题 - $('.content-wrapper .title-black').each((i, e) => { - if (i === 1) { - if (profileDict[e.firstChild.nodeValue.trim().replace(playerName, '{$}')]) { - e.firstChild.nodeValue = ( - profileDict[$(e).text().trim().replace(playerName, '{$}')] - .replace('{$}', playerName) - ); - } - return; - } - if (profileDict[$(e).text().trim()]) { - $(e).text(profileDict[$(e).text().trim()]); - } - }); - // level rank age - $('.profile-information-wrapper .box-info .box-name').each((i, e) => { - if (profileDict[e.innerText.trim()]) e.innerText = profileDict[e.innerText.trim()]; - }); - // todo player title - // todo player rank title - // 行动框的描述 - const action_desc = $('#profile-container-description.profile-container-description'); - if (profileDict[action_desc.text().trim()]) { - action_desc.html(`${profileDict[action_desc.text().trim()]}`); - } else if (profileDict[action_desc.text().trim().replace(playerName, '{$}')]) { - action_desc.html( - `${profileDict[action_desc.text().trim().replace(playerName, '{$}')] - .replace('{$}', playerName)}` - ); - } else if (action_desc.text().contains(/is on your (friend|enemy) list/)) { - const spl = action_desc.text().trim().split(' '); - const mark = spl.length === 6 - ? null - : spl.slice(7).join(' '); - switch (spl[4]) { - case 'friend': - if (profileDict['{$} is on your friend list']) { - action_desc.html( - `${profileDict['{$} is on your friend list'] - .replace('{$}', playerName) - }${mark ? ' : ' + mark : '' - }` - ); - } - break; - case 'enemy': - if (profileDict['{$} is on your enemy list']) { - action_desc.html( - `${profileDict['{$} is on your enemy list'] - .replace('{$}', playerName) - }${mark ? ' : ' + mark : '' - }` - ); - } - break; - } - } else { - if ($('.wh-translated').length <= 0) { - log(`未找到翻译: “${action_desc.text().trim()}”`); - } - } - // 添加敌人或朋友的界面 - $('.add-user .reason-wrapper').find('*').contents().each((i, e) => { - if (e.nodeType === 3) { - if (profileDict[e.nodeValue.trim()]) { - e.nodeValue = profileDict[e.nodeValue.trim()]; - } else if (/\b[1-4]?[0-9]\b/.test(e.nodeValue.trim().slice(0, 2))) { - const left = e.nodeValue.trim().slice(0, 2); - if (profileDict['{$} characters left']) { - e.nodeValue = profileDict['{$} characters left'].replace('{$}', left); - } - } - } - }); - // 状态 - playerStatusTrans($('.profile-status .profile-container span')); - // 表格 - $('ul.info-table li div').each((i, e) => { - const $e = $(e); - // 左 - if ($e.attr('class').contains(/user-information-section/)) { - const elem = e.children[0]; - const $elem = $(elem); - if (profileDict[$elem.text().trim()]) $elem.text(profileDict[$elem.text().trim()]); - } - // 右 值 - else { - if (profileDict[$e.text().trim()]) { - $e.children().text(profileDict[$e.text().trim()]); - return; - } - switch (i) { - case 5: // 帮派 - case 7: { // 公司 - if ($e.text().contains(CC_set)) return; - const $span = e.children[0].children[0]; - const pos = $span.firstChild.nodeValue.trim().split(' ').slice(0, -1).join(' '); - $span.firstChild.nodeValue = ''; - $($span).append(` 的 ${pos}`); - return; - } - case 11: { - // 住宅 - $e.find('span *').contents().each((i, el) => { - if (el.nodeType === 3) { - if (profileDict[el.nodeValue.trim()]) { - el.nodeValue = profileDict[el.nodeValue.trim()] - } else if (propertyDict[el.nodeValue.trim()]) { - el.nodeValue = propertyDict[el.nodeValue.trim()] - } - } - }); - return; - } - case 13: { - // 结婚状态 - if ($e.text().contains(CC_set)) return; - const days = $e.text().contains(/ [0-9]+ /) - ? $e.text().trim().split(' ')[4] - : null; - if (days) { - e.children[0].children[0].childNodes[0].nodeValue = '与 '; - e.children[0].children[0].childNodes[2].nodeValue = ` 结婚${days}天`; - } else { - $e.find('span *').contents().each((i, el) => { - if (el.nodeType === 3) { - if (profileDict[el.nodeValue.trim()]) { - el.nodeValue = profileDict[el.nodeValue.trim()] - } - } - }); - } - return; - } - case 23: { - // 39 minutes ago - if ($e.text().contains(/ago/)) { - $e.children().text($e.text() - .replace('ago', '前') - .replace('and', '') - .replace('seconds', '秒') - .replace('second', '秒') - .replace('minutes', '分') - .replace('minute', '分') - .replace('hours', '时') - .replace('hour', '时') - .replace('days', '日') - .replace('day', '日') - .replaceAll(' ', '') - ); - } - return; - } - } - /** - 1 'Woohoo [2687093]' - 3 'Civilian' - 5 'Knight of Silver Hand' - 7 'Director of -- FaFaFa --' - 9 '1567 / 1567' - 11 'Private Island (With Spouse)' - 13 'Married to Sabrina_Devil for 42 days' - 15 '153' - 17 '4' - 19 '4\n 好人\n 坏比指数: 1\n ' - 21 '2 (0 karma)' - 23 '52 minutes ago' - */ - } - }); - // doesnt wish to share - const $nShare = $('.personal-info p'); - $nShare.contents().each((i, e) => { - if (e.nodeType === 3) { - if (profileDict[e.nodeValue.trim()]) e.nodeValue = profileDict[e.nodeValue.trim()]; - } - }); - // 活动状态 - const $cmpSt = $('.profile-container.competition-wrap span') - $cmpSt.text(profileDict[$cmpSt.text().trim()] || $cmpSt.text()); - - sendCashTrans('.content-wrapper'); - }; - profileTrans(); - profileOB.observe($wrapper, { - characterData: true, - attributes: true, - subtree: true, - childList: true - }); - return; - } - - // 报纸 - if (href.contains(/(newspaper|joblist|freebies|newspaper_class|personals|bounties|comics)\.php/)) { - const newspaperOB = new MutationObserver(() => { - newspaperOB.disconnect(); - newspaperTrans(); - newspaperOB.observe($('div.content-wrapper')[0], { childList: true, subtree: true }); - }); - - function newspaperTrans() { - titleTrans(); - contentTitleLinksTrans(); - if ($('a.newspaper-link').length === 0) return; - // 导航菜单 - $('a.newspaper-link').contents().each((i, e) => { - if (newspaperDict[e.nodeValue]) - e.nodeValue = newspaperDict[e.nodeValue]; - }); - // 公众号广告 - $('div.price.left').contents()[2].nodeValue = '文章翻译请关注中文公众号Torncity'; - // 日期翻译 - const $date_label = document.querySelector('span.date-label'); - const date_reg = /^[FMSTW][adehinorstuy]+, [ADFJMNOS][abceglnoprtuvy]+ [1-3]?[0-9], 20[0-9][0-9]$/; - if ($date_label && $date_label.innerText.trim().contains(date_reg)) { - const date_format = $date_label.innerText.trim().replaceAll(',', ''); - const date_spl = date_format.split(' '); - const date = { w: date_spl[0], m: date_spl[1], d: date_spl[2], y: date_spl[3] }; - const month_trans = { - 'Jan': 1, - 'Feb': 2, - 'Mar': 3, - 'Apr': 4, - 'May': 5, - 'Jun': 6, - 'Jul': 7, - 'Aug': 8, - 'Sep': 9, - 'Oct': 10, - 'Nov': 11, - 'Dec': 12 - }; - $date_label.innerText = `${date.y}年${month_trans[date.m] || date.m}月${date.d}日`; - } - // 菜单下的信息 工作 壁纸 广告 悬赏 - $('div.help-message').find('*').contents().each((i, e) => { - if (!e.nodeValue || e.nodeValue.trim() === '') return; - if (newspaperDict[e.nodeValue.trim()]) - e.nodeValue = newspaperDict[e.nodeValue.trim()]; - else if (newspaperDict[e.nodeValue.trim().slice(0, 50)]) - e.nodeValue = newspaperDict[e.nodeValue.trim().slice(0, 50)]; - }); - // 右边栏 - $('div[class^="sideCont"] [class^="title"]').contents().each((i, e) => { - if (newspaperDict[e.nodeValue]) - e.nodeValue = newspaperDict[e.nodeValue]; - }); - // 彩票信息 - $('span[class^="winner"]').each((i, e) => { - }); - // 底部链接 - // Why not visit our sponsor? - if (newspaperDict[$('div.link-left').text().trim()]) - $('div.link-left').text(newspaperDict[$('div.link-left').text().trim()]); - // View all | Advertise here - $('div.link-right a').contents().each((i, e) => { - if (newspaperDict[e.nodeValue.trim()]) - e.nodeValue = newspaperDict[e.nodeValue.trim()]; - }) - $('.bounties-list-title li').each((i, e) => { - if (newspaperDict[$(e).text().trim()]) { - $(e).text(newspaperDict[$(e).text().trim()]); - } - }); - // 交友 - if (window.location.href.contains(/personals/)) { - $('div.personals-wrap span.msg').find('*').contents().each((i, e) => { - if (!e.nodeValue || e.nodeValue.trim() === '') return; - if (newspaperDict[e.nodeValue.trim()]) - e.nodeValue = newspaperDict[e.nodeValue.trim()]; - }); - } - // 漫画 - if (window.location.href.contains(/freebies/)) { - if (newspaperDict[$('div.bonus-wrap a').text().trim()]) - $('div.bonus-wrap a').text(newspaperDict[$('div.bonus-wrap a').text().trim()]); - } - // 悬赏 - if (window.location.href.contains(/bounties/)) { - // 列表前的总数 - const $total = $('.bounties-total'); - if ($total.text().contains(/A total of [0-9]+ listings were found/)) { - const num = $total.text().trim().split(' ')[3]; - if (newspaperDict['A total of {$} listings were found.']) { - $total.text(newspaperDict['A total of {$} listings were found.'] - .replace('{$}', num)); - } - } - // 列表 - $('.user-info-wrap div *').contents().each((i, e) => { - if (e.nodeType === 3) { - if (newspaperDict[e.nodeValue.trim()]) { - e.nodeValue = newspaperDict[e.nodeValue.trim()]; - } - } - }); - // claim - $('ul.bounties-list div.claim button').each((i, e) => { - if (newspaperDict[$(e).text().trim()]) { - $(e).text(newspaperDict[$(e).text().trim()]); - } - }); - $('ul.bounties-list div.claim a').each((i, e) => { - if (newspaperDict[$(e).text().trim()]) { - $(e).text(newspaperDict[$(e).text().trim()]); - } - }); - // 3选项框 - $('.add-bounties-wrap .name').contents().each((i, e) => { - if (e.nodeType === 3) { - if (newspaperDict[e.nodeValue.trim()]) { - e.nodeValue = newspaperDict[e.nodeValue.trim()]; - } - } else if (e.nodeType === 1) { - if (newspaperDict[$(e).text().trim()]) { - $(e).text(newspaperDict[$(e).text().trim()]); - } - } - }); - // 匿名选项 - const $anony = $('.choice-container label'); - if (newspaperDict[$anony.text().trim()]) { - $anony.text(newspaperDict[$anony.text().trim()]); - } - // 发钱按钮 - const $$symbol = $('span.input-money-symbol'); - if (sendCashDict[$$symbol.attr('title')]) { - $$symbol.attr('title', sendCashDict[$$symbol.attr('title')]) - } - // 10/10滑动 - const $slider_title = $('.slider-title'); - if ($slider_title.text().contains(/Quantity:/)) { - $slider_title.text($slider_title.text().replace('Quantity', '数量')); - } - // 价钱信息 - $('.confirm-bounties *').contents().each((i, e) => { - if (e.nodeType === 3) { - if (newspaperDict[e.nodeValue.trim()]) { - e.nodeValue = newspaperDict[e.nodeValue.trim()]; - } - } - }); - // 下单前确认对话 - $('.confirm-buttons *').contents().each((i, e) => { - if (e.nodeType === 3) { - if (newspaperDict[e.nodeValue.trim()]) { - e.nodeValue = newspaperDict[e.nodeValue.trim()]; - return; - } - switch (i) { - case 7: - case 10: { - if (e.nodeValue.contains(/[0-9] bounties/)) { - e.nodeValue = e.nodeValue.replace('bounties', '次') - } else if (e.nodeValue.contains(/with the reason: .+\?/)) { - e.nodeValue = e.nodeValue.replace('with the reason', '吗,悬赏原因') - } - break; - } - } - } - }); - // place - const $place = $('.place-buttons input'); - if (newspaperDict[$place.attr('value')]) { - $place.attr('value', newspaperDict[$place.attr('value')]); - } - // cancel - const $cancel = $('.place-buttons a.cancel'); - if (newspaperDict[$cancel.text().trim()]) { - $cancel.text(newspaperDict[$cancel.text().trim()]); - } - } - } - - newspaperTrans(); - newspaperOB.observe($('div.content-wrapper')[0], { childList: true, subtree: true }); - return; - } - - // npc买房 estateagents - if (href.includes('estateagents.php')) { - titleTrans(); - contentTitleLinksTrans(); - $('div.estate-info div.title').each((i, e) => { - if (propertyDict[e.firstChild.nodeValue]) - e.firstChild.nodeValue = propertyDict[e.firstChild.nodeValue]; - }); - - return; - } - - // properties房屋页面 - if (href.includes('properties.php')) { - const isRent = window.location.href.indexOf('rent') >= 0; - // const isRentOrSell = isRent || window.location.href.indexOf('sell') >= 0; - // const isOption = window.location.href.indexOf('p=options') >= 0; - // const isExtension = window.location.href.indexOf('step=viewOfferExtension') >= 0; - const propertyOB = new MutationObserver(() => { - propertyOB.disconnect(); - titleTrans(); - contentTitleLinksTrans(); - propertyTrans(); - propertyOB.observe($('div.content-wrapper').get(0), { childList: true, subtree: true }); - }); - const propertyTrans = function propertyTrans() { - // 从玩家处租或买 - if (isRent || window.location.href.indexOf('sell') >= 0) { - // 黑框标题 - $('div.title-black span').each((i, e) => { - e.firstChild.nodeValue = '您想查看哪些房产?'; - }); - // 房屋汉化 - $('ul.info-cont label.marker-css').contents().each((i, e) => { - if (propertyDict[e.nodeValue]) - e.nodeValue = propertyDict[e.nodeValue]; - }); - //搜索按钮 - $('div.btn-search button').text('搜索'); - $('div.search-text a').text('搜索'); - // 表头信息 - $('div.users-list-title div').each((i, e) => { - if (propertyDict[$(e).text()]) - $(e).text(propertyDict[$(e).text()]); - }); - // 确认购买提示 - $('div[class="confirm-text"] span.question').each((i, e) => { - const propName = e.firstElementChild.innerText.trim().split(' ').slice(8).join(' '); - - const hasAnother = $(e).text().indexOf('another') > 0; - if (hasAnother) { - e.firstElementChild.firstChild.nodeValue = '你确定要'; - e.firstElementChild.firstChild.nodeValue += isRent ? '租用' : '购买'; - e.firstElementChild.childNodes[1].firstChild.nodeValue = '另一个'; - e.firstElementChild.childNodes[2].nodeValue = propertyDict[propName]; - } else { - e.firstElementChild.firstChild.nodeValue = '你确定要'; - e.firstElementChild.firstChild.nodeValue += isRent ? '租用' : '购买'; - e.firstElementChild.firstChild.nodeValue += propertyDict[propName]; - } - e.children[1].firstChild.nodeValue = '花费 '; - e.children[1].childNodes[2].nodeValue = isRent ? ' 租期 ' : '?'; - if (isRent) - e.children[1].childNodes[4].nodeValue = ' 天?'; - }); - - // 房屋详情表格 - $('div.info-block span.bold').each((i, e) => { - if (e.childElementCount === 2) { - /** - * - On - "Market" - Price - ":" - - */ - e.firstElementChild.firstChild.nodeValue = ''; - e.childNodes[2].nodeValue = '市场价'; - e.childNodes[3].firstChild.nodeValue = ''; - e.childNodes[4].nodeValue = ':'; - } else { - if (propertyDict[e.firstChild.nodeValue.trim()]) - e.firstChild.nodeValue = propertyDict[e.firstChild.nodeValue.trim()]; - } - }); - $('div.rental-period span.bold').each((i, e) => { - if (propertyDict[e.firstChild.nodeValue.trim()]) - e.firstChild.nodeValue = propertyDict[e.firstChild.nodeValue.trim()]; - }); - // 窄边 cost happy - $('span.title-laptop.bold').each((i, e) => { - if (propertyDict[$(e).text().trim()]) - $(e).text(propertyDict[$(e).text().trim()]); - }); - // modification - $('div.title.bold.left').each((i, e) => { - if (propertyDict[e.firstChild.nodeValue]) - e.firstChild.nodeValue = propertyDict[e.firstChild.nodeValue]; - }); - - return; - } - // 房屋选项 - if (window.location.href.indexOf('p=options') >= 0) { - // 页面的黑框标题 - $('div.content-wrapper div.title-black').each((i, e) => { - if (propertyDict[$(e).text().trim()]) - $(e).text(propertyDict[$(e).text().trim()]); - }); - // 所有li内容 - // $('div.content-wrapper div.customize-opt li').find('*') - // .contents().each((i,e)=>{ - // if(e.nodeType!==3)return;log(e) - // }); - return; - } - // 房屋详情 - if (window.location.href.indexOf('p=propertyinfo') >= 0) { - return; - } - // 延期、合同 - if (window.location.href.indexOf('step=viewOfferExtension') >= 0) { - return; - } - // 自己的所有房产 页面 - { - // 顶部3标题 - $('ul.property-tabs a.ui-tabs-anchor div').contents().each((i, e) => { - if (propertyDict[e.nodeValue]) { - e.nodeValue = propertyDict[e.nodeValue]; - } - }); - // 图片下的描述部分 - $('ul.properties-list div.image-description').find('*') - .contents().each((i, e) => { - if (e.nodeType !== 3) return; - if (!propertyDict[e.nodeValue.trim()]) return; - e.nodeValue = propertyDict[e.nodeValue.trim()]; - }); - // 图片下的按钮的title浮动框文字 - $('div#properties-page-wrap a[title]').each((i, e) => { - if (propertyDict[$(e).attr('title')]) - $(e).attr('title', propertyDict[$(e).attr('title')]); - }); - } - }; - - propertyTrans(); - propertyOB.observe($('div.content-wrapper').get(0), { childList: true, subtree: true }); - return; - } - - // 通知页面 - if (href.includes('events.php')) { - const ob = new MutationObserver(() => { - ob.disconnect(); - titleTrans(); - contentTitleLinksTrans(); - eventsTrans(); - ob.observe($('div.content-wrapper')[0], { childList: true, subtree: true }); - }); - eventsTrans(); - ob.observe($('div.content-wrapper')[0], { childList: true, subtree: true }); - return; - // let events; - // const eventMutation = new MutationObserver(() => { - // eventMutation.disconnect(); - // // events = $('span.mail-link'); - // // eventsTrans(events); - // eventsTrans(); - // eventMutation.observe($('div#events-main-wrapper')[0], {childList: true, subtree: true}); - // }); - // - // //初始化中内容未加载 - // let eventInterval = setInterval(() => { - // // events = $('span.mail-link'); - // // if (events.length === 0) { - // // return; - // // } - // clearInterval(eventInterval); - // eventMutation.observe($('div#events-main-wrapper')[0], {childList: true, subtree: true}); - // eventsTrans(events); - // }, 1000); - } - - // awards.php - if (href.includes('awards.php')) { - const awOB = new MutationObserver(() => { - awOB.disconnect(); - awTrans(); - awOB.observe($('div.content-wrapper')[0], { childList: true, subtree: true, attributes: true }); - }); - const awTrans = function awTrans() { - titleTrans(); - contentTitleLinksTrans(); - // 顶部的3个分类 Honors (106) Medals (44) Merits (3) - $('div.content-wrapper a.ui-tabs-anchor span.bold').contents().each((i, e) => { - if (e.nodeType !== 3) return; - if (awDict[e.nodeValue.trim()]) - e.nodeValue = awDict[e.nodeValue.trim()]; - }); - // 分类标题下的描述 - $('div.awards-msg').contents().each((i, e) => { - // 文字节点 - if (e.nodeType === 3) { - if (awDict[e.nodeValue.trim()]) - e.nodeValue = awDict[e.nodeValue.trim()]; - } - // 子节点 - else if (e.nodeType === 1) { - if (awDict[$(e).text().trim()]) - $(e).text(awDict[$(e).text().trim()]); - else if ($(e).text().indexOf('medals') >= 0) - $(e).text($(e).text().replace('medals', awDict['medals'])); - else if ($(e).text().indexOf('honors') >= 0) - $(e).text($(e).text().replace('honors', awDict['honors'])); - } - }); - // 荣誉的描述 - $('div#awards-tab-menu a[data-title]').each((i, e) => { - const desc = $(e).attr('data-title').split(' ')[0]; - if (awDict[desc]) - $(e).attr('data-title', $(e).attr('data-title').replace(desc, awDict[desc])); - }); - // 改变荣誉条时的提示 - $('div#honors div.msg').each((i, e) => { - if (awDict[$(e).text().trim()]) - $(e).text(awDict[$(e).text().trim()]); - }); - // 改变荣誉条时的提示按钮 change - $('div#honors div.confirm-msg button').each((i, e) => { - if (awDict[$(e).text().trim()]) - $(e).text(awDict[$(e).text().trim()]); - }); - // 改变荣誉条时的提示按钮 cancel - $('div#honors div.confirm-msg a.cancel').each((i, e) => { - if (awDict[$(e).text().trim()]) - $(e).text(awDict[$(e).text().trim()]); - }); - // 天赋页面 Available Merits: x Merits Used: x - $('div.awards-msg p').contents().each((i, e) => { - if (e.nodeType === 3) - if (awDict[e.nodeValue.trim()]) - e.nodeValue = e.nodeValue.replace(e.nodeValue.trim(), awDict[e.nodeValue.trim()]); - }); - // 勋章下 即将解锁的勋章框标题 天赋加点的表头标题 - $('div.title-black').contents().each((i, e) => { - // 勋章下 即将解锁的勋章框标题 - if (e.nodeType === 1) { - if (awDict[$(e).text().trim()]) - $(e).text(awDict[$(e).text().trim()]); - } - // 天赋加点的表头标题 - else if (e.nodeType === 3) { - if (awDict[e.nodeValue.trim()]) - e.nodeValue = awDict[e.nodeValue.trim()]; - } - }); - // 荣誉和勋章的左边栏分类选择菜单 - $('div.tab-menu-cont li.ui-state-default a').each((i, e) => { - if (awDict[$(e).text().trim()]) - $(e).text(awDict[$(e).text().trim()]); - }); - // 天赋点名字 - $('ul#merits-list span.name').each((i, e) => { - if (awDict[$(e).text().trim()]) - $(e).text(awDict[$(e).text().trim()]); - }); - // 天赋点短描述 - $('ul#merits-list span.desc span[class^="t-"]').each((i, e) => { - // const slash = $(e).attr('class') === 't-show' ? '- ' : ''; - const isShow = $(e).attr('class') === 't-hide'; - const key = isShow ? $(e).text().slice(2) : $(e).text(); - if (awDict[key]) - $(e).text((isShow ? '- ' : '') + awDict[key]); - }); - // 天赋点展开详细描述与确认 - $('ul#merits-list div.msg').contents().each((i, e) => { - // x merit(s) - if (e.nodeType === 1) { - const spl = $(e).text().split(' '); - if (awDict[spl[1]]) - $(e).text(spl[0] + ' ' + awDict[spl[1]]); - } - // 文字片段 - else if (e.nodeType === 3) { - if (awDict[e.nodeValue.trim()]) { - e.nodeValue = awDict[e.nodeValue.trim()] + ''; - return; - } - const spl = e.nodeValue.trim().split('\n'); - // 未升级完成 - if (spl.length === 3) { - const upgradeName = spl[1].slice(5, -9); - const on = spl[0]; - const upgrade = spl[1].slice(-8); - const desc = spl[2]; - if (awDict[on] && awDict[upgrade] && awDict[upgradeName] && awDict[desc]) - e.nodeValue = ' ' + awDict[on] + awDict[upgradeName] + - awDict[upgrade] + awDict[desc]; - } - // 升级完成 - else if (spl.length === 1) { - const upgraded = e.nodeValue.trim().slice(0, 60); - const desc = e.nodeValue.trim().slice(61); - if (awDict[upgraded]) e.nodeValue = awDict[upgraded]; - if (awDict[desc]) e.nodeValue += awDict[desc]; - } - } - }); - // spend cancel按钮 - $('ul#merits-list div.confirm-cont a').each((i, e) => { - if (awDict[$(e).text().trim()]) $(e).text(awDict[$(e).text().trim()]); - }); - }; - awTrans(); - awOB.observe($('div.content-wrapper')[0], { childList: true, subtree: true, attributes: true }); - return; - } - - // preferences设置 - if (href.contains(/preferences\.php/)) { - const $$ = $('.content-wrapper'); - const OB = new MutationObserver(() => { - OB.disconnect(); - titleTrans(); - contentTitleLinksTrans(); - trans(); - OB.observe($$.get(0), { - characterData: true, - attributes: true, - subtree: true, - childList: true - }); - }); - const trans = () => { - // 黑框标题 - const $black_title = $('.title-black'); - if (tornSettingsDict[$black_title.text().trim()]) { - $black_title.text(tornSettingsDict[$black_title.text().trim()]); - } - // 电脑版左边导航菜单 - const $nav = $('.content-wrapper a.ui-tabs-anchor'); - $nav.each((i, e) => { - if (tornSettingsDict[$(e).text().trim()]) { - $(e).text(tornSettingsDict[$(e).text().trim()]); - } - }); - if (window.location.href.contains(/tab=api/)) { - // 描述 - const $api_desc = $('.content-wrapper p[class^="apiDescription___"]'); - if (tornSettingsDict[$api_desc.text().slice(0, 50)]) { - $api_desc.text(tornSettingsDict[$api_desc.text().slice(0, 50)]); - } - // 添加按钮 - const $add_btn = $('button[class^="addKey___"] span'); - if (tornSettingsDict[$add_btn.text().trim()]) { - $add_btn.text(tornSettingsDict[$add_btn.text().trim()]); - } - // new keys name - const $new_keys_name = $('input[placeholder="New key\'s name"]'); - if (tornSettingsDict[$new_keys_name.attr('placeholder')]) { - $new_keys_name.attr('placeholder', tornSettingsDict[$new_keys_name.attr('placeholder')]); - } - // api类型 - const $key_type = $('div[class*="typesDropdown___"] button.down'); - if (tornSettingsDict[$key_type.text().trim()]) { - $key_type.text(tornSettingsDict[$key_type.text().trim()]); - } - // api类型选择框 - const $type_down = $('div[class*="typesDropdown___"] div.down li'); - $type_down.each((i, e) => { - if (tornSettingsDict[$(e).text().trim()]) { - $(e).text(tornSettingsDict[$(e).text().trim()]); - } - }); - // return; - } - }; - trans(); - OB.observe($$.get(0), { - characterData: true, - attributes: true, - subtree: true, - childList: true - }); - return; - } - - // 展柜 - if (href.contains(/displaycase\.php/)) { - const $page_wrapper = document.querySelector('#display-page-wrap'); - initOB($page_wrapper, { - subtree: true, - attributes: true, - childList: true - }, - () => { - // 标题和右边的链接 - titleTrans(); - // 右上角返回按钮 - const $back_to_profile = $page_wrapper.querySelector('#back'); - if ($back_to_profile) { - const spl = $back_to_profile.innerText.split(/('s |s' )/); - if (spl.length === 3 && spl[2] === 'Profile') { - $back_to_profile.innerText = `${spl[0]}的个人资料`; - } - } - const $display_cabinet = $page_wrapper.querySelector('.display-cabinet'); - if ($display_cabinet) { - // 物品名 - const $item_name = $display_cabinet.querySelectorAll('div.b-item-name span:nth-of-type(2)'); - $item_name.forEach((e) => { - if (itemNameDict[e.innerText]) { - e.innerText = itemNameDict[e.innerText]; - } - }); - // 展开详细框 - const $show_item_info = $display_cabinet.querySelector('.show-item-info'); - showItemInfoTrans($show_item_info); - } - }); - return; - } - - // 升级页面 - if (href.includes('level2.php')) { - } - - // 医院页面 - if (href.includes("hospitalview.php")) { - const hospitalOB = new MutationObserver(hosOBInit); - - function hosOBInit() { - hospitalOB.disconnect(); - hospTrans(); - hospitalOB.observe($('div.content-wrapper')[0], { childList: true, subtree: true }); - } - - function hospTrans() { - titleTrans(); - contentTitleLinksTrans(); - - // 顶部提示信息 - $('div[class^="msg right-round"]').contents().each((i, e) => (hosDict[e.nodeValue.trim()]) && (e.nodeValue = hosDict[e.nodeValue.trim()])); - - //玩家列表标题 - $('div[class^="users-list-title title-black top-round m-top10"] span').contents().each((i, e) => { - if (e.nodeValue && hosDict[e.nodeValue.trim()]) { - e.nodeValue = e.nodeValue.replace(e.nodeValue, hosDict[e.nodeValue.trim()]); - } - }) - - //玩家列表住院理由 - $('ul[class^="user-info-list-wrap"] span[class^="reason"]').each((i, e) => { - let reasonStr = $(e).get(0).childNodes[1].nodeValue.trim(); - - if (hosDict[reasonStr]) { - $(e)[0].childNodes[1].nodeValue = hosDict[reasonStr]; - } else if (reasonStr.indexOf("Crashed") >= 0) { - $(e)[0].childNodes[1].nodeValue = reasonStr - .replace("Crashed her", hosDict["Crashed her"]) - .replace("Crashed his", hosDict["Crashed his"]); - } else { - switch (reasonStr) { - case "Attacked by": - $(e)[0].childNodes[1].nodeValue = hosDict["general"]; - $(e).append(" 攻击"); - break; - case "Hospitalized by": - $(e)[0].childNodes[1].nodeValue = hosDict["general"]; - $(e).append(" 殴打并送入医院"); - break; - case "Mugged by": - $(e)[0].childNodes[1].nodeValue = hosDict["general"]; - $(e).append(" 抢劫"); - break; - } - } - }) - } - - hospTrans(); - hospitalOB.observe($('div.content-wrapper')[0], { childList: true, subtree: true }); - return; - } - - // 帮派页面 - if (href.includes("actions.php")) { - const factionOB = new MutationObserver(factionOBInit); - - function factionOBInit() { - factionOB.disconnect(); - factionTrans(); - factionOB.observe($('div.content-wrapper')[0], { childList: true, subtree: true }); - } - - const factionDict = { - "INFO": "信息", - "TERRITORY": "地盘", - "RANK": "名次", - "CRIMES": "组织犯罪", - "UPGRADES": "升级", - "ARMORY": "军械库", - "CONTROLS": "控制面板", - "FACTION": "帮派", - "YOUR FACTION IS NOT IN A WAR": "你的帮派没有处于战争状态", - "TIER": "级别", - "RESPECT": "声望", - "No active chain": "暂无攻击链", - "Main News": "主要消息", - "Attacking": "攻击", - "Funds": "资金流动", - "Armory": "军械库", - "Crimes": "组织犯罪", - "Membership": "成员资格", - "has claimed sovereignty of": "", - "has abandoned": "放弃了地盘", - "Achieved a chain of": "达成了连击链值", - "and": "和", - "respect [": "点声望 [", - "deposited ${$1}": "存放了${$1}", - "Leadership was transferred to": "帮派领导权被移交给了 ", - "Someone mugged": "有人抢劫了 ", - "hospitalized": " 暴打了 ", - "mugged": " 抢劫了 ", - "attacked": " 攻击了 ", - "but lost": " 但是输了", - "Someone attacked": "有人攻击了 ", - "Someone hospitalized": "有人暴打了 " - } - - function factionTrans() { - titleTrans(); - contentTitleLinksTrans(); - - //帮派大标题 - $('span[class^="tab-name"]').each((i, e) => { - if (factionDict[$(e).text().trim()]) { - $(e).text(factionDict[$(e).text().trim()]); - } - }) - - //帮派战争状态 - $('div[class^="f-msg"]').contents().each((i, e) => { - let word2Trans = $(e).text().trim().split(":")[0]; - if (word2Trans && factionDict[word2Trans]) { - $(e).text($(e).text().replace(word2Trans, factionDict[word2Trans])); - } - }) - - //攻击链盒 - $('div[class^="chain-box"]').contents().each((i, e) => { - if (factionDict[$(e).text().trim()]) { - $(e).text(factionDict[$(e).text().trim()]); - } - }) - - //帮派消息类别 - $('div[class^="newsHeader"]').contents().each((i, e) => { - if (factionDict[$(e).text().trim()]) { - $(e).text(factionDict[$(e).text().trim()]); - } - }) - //帮派主要消息日志 - $('button[class^="tab"] ').each((i, e) => { - if ($(e).attr('class').indexOf("active") >= 0) { - log($(e).text()); - switch ($(e).text().trim()) { - case "主要消息": - $('ul[class^="news-list"] span[class^="info"]').contents().each((i, u) => { - if (factionDict[$(u).text().trim()]) { - u.nodeValue = u.nodeValue.replace($(u).text().trim(), factionDict[$(u).text().trim()]); - } - }) - break; - case "攻击": - $('ul[class^="news-list"] span[class^="info"]').find('*').contents().each((i, u) => { - log($(u).text().trim()) - if (factionDict[$(u).text().trim()]) { - u.nodeValue = factionDict[$(u).text().trim()]; - } - }) - break; - case "资金流动": - $('ul[class^="news-list"] span[class^="info"]').contents().each((i, u) => { - if (u.nodeValue) { - u.nodeValue = u.nodeValue.replace("deposited", "存放了"); - } - }) - break; - } - } - }) - // //帮派主要消息日志 - // $('ul[class^="news-list"] span[class^="info"]').contents().each((i, e) => { - // if (factionDict[$(e).text().trim()]) { - // e.nodeValue = e.nodeValue.replace($(e).text().trim(), factionDict[$(e).text().trim()]); - // } - // }) - - } - - factionTrans(); - factionOB.observe($('div.content-wrapper')[0], { childList: true, subtree: true }); - return; - } - - // pc电脑 - if (href.contains(/pc\.php/)) { - const $$ = $('.content-wrapper'); - const OB = new MutationObserver(() => { - OB.disconnect(); - titleTrans(); - contentTitleLinksTrans(); - trans(); - OB.observe($$.get(0), { - characterData: true, - attributes: true, - subtree: true, - childList: true - }); - }); - const trans = () => { - // 黑框 - const $black_title = $('div.title-black'); - if (pcDict[$black_title.text().trim()]) { - $black_title.text(pcDict[$black_title.text().trim()]); - } - }; - trans(); - OB.observe($$.get(0), { - characterData: true, - attributes: true, - subtree: true, - childList: true - }); - return; - } - - // 日历 - if (href.contains(/calendar\.php/)) { - const $root = document.querySelectorAll('#calendar-root'); - $root.forEach(el => { - initOB(el, { childList: true, subtree: true }, () => { - // 页标题 - const $h4_title = el.querySelectorAll('h4[class^="title___"]'); - titleTransReact($h4_title); - // 页标题右侧链接 - const $link_title = el.querySelectorAll('div[class^="linksContainer___"] span[class^="linkTitle___"]'); - contentTitleLinksTransReact($link_title); - // 月标题 - const $month_title = el.querySelectorAll('div[class^="monthName___"]'); - $month_title.forEach(e => { - if (calDict[e.innerText.trim()]) e.innerText = calDict[e.innerText.trim()]; - }); - }); - }); - return; - } - - // itemuseparcel.php - - // 圣诞小镇 - if (href.contains(/christmas_town\.php/)) { - let $root = document.querySelector('#christmastownroot'); - const $title_wrapper = $root.querySelector('div[class^="appHeaderWrapper___"]'); - // 标题和右边的链接 - initOB($title_wrapper, { childList: true, subtree: true }, () => { - titleTransReact(); - contentTitleLinksTransReact(); - }); - } - } - - // mini profile 翻译 - function miniprofTrans() { - // 迷你资料卡状态 - playerStatusTrans($('div.profile-mini-root div.description span')); - // 转钱 - sendCashTrans('div.profile-mini-root'); - } - - // 起飞目的地id - function getDestId(dest) { - // 墨、开、加、夏、英、阿、瑞s、立本、祖、迪、南 - return [2, 12, 9, 3, 10, 7, 8, 5, 6, 11, 4][dest]; - } - - // 引入torn miniprofile - function initMiniProf(selector) { - let profileMini = { - timeout: 0, - clickable: false, - rootElement: null, - targetElement: null, - rootId: 'profile-mini-root', - rootSelector: '#profile-mini-root', - userNameSelector: "a[href*='profiles.php?XID=']", - // contentWrapper: '#wh-trans-icon', - contentWrapper: selector, - setClickable: function (value) { - this.clickable = value - }, - setRootElement: function () { - if (!document.getElementById(this.rootId)) { - this.rootElement = document.createElement('div'); - this.rootElement.classList.add(this.rootId); - this.rootElement.id = this.rootId; - $('body').append(this.rootElement); - } else { - ReactDOM.unmountComponentAtNode($(this.rootSelector).get(0)); - this.rootElement = document.getElementById(this.rootId); - } - }, - subscribeForHideListeners: function () { - const that = this; - let width = $(window).width(); - - function handleResize(e) { - if ($(this).width() !== width) { - width = $(this).width(); - hideMiniProfile.call(that, e); - } - } - - function handleScroll(e) { - if (!document.activeElement.classList.contains('send-cash-input')) { - hideMiniProfile.call(that, e); - } - } - - function hideMiniProfile(e) { - if ($(e.target).closest(this.rootSelector).length === 0 || ['resize', 'scroll'].includes(e.type)) { - that.targetElement = null - ReactDOM.unmountComponentAtNode($(this.rootSelector).get(0)); - $(this.userNameSelector).off('click', this.handleUserNameClick); - $(this.userNameSelector).unbind('contextmenu'); - $(document).off('click', hideMiniProfile); - $(window).off('hashchange', hideMiniProfile); - $(window).off('resize', handleResize); - $(window).off('scroll', handleScroll); - } - } - - $(document).on('click', hideMiniProfile.bind(this)); - $(window).on('hashchange', hideMiniProfile.bind(this)); - $(window).on('resize', handleResize); - if (that.targetElement.closest('#chatRoot')) { - $(window).on('scroll', handleScroll); - } - }, - subscribeForUserNameClick: function () { - $(this.userNameSelector).click(this.handleUserNameClick.bind(this)) - }, - handleUserNameClick: function () { - if (!this.clickable) { - this.setClickable(true); - return false; - } - }, - subscribeForContextMenu: function (element) { - $(element).on('contextmenu', function (e) { - e.preventDefault(); - e.stopPropagation(); - e.stopImmediatePropagation(); - return false; - }) - }, - handleMouseDown: function () { - const that = this; - $(this.contentWrapper).on('mousedown touchstart', this.userNameSelector, function (e) { - if (e.which !== 1 && e.type !== 'touchstart') { - return false; - } - that.targetElement = e.currentTarget; - that.subscribeForContextMenu(that.targetElement); - that.handleFocusLost(e.currentTarget); - that.timeout = setTimeout(function () { - if (e.type !== 'touchstart') { - that.setClickable(false); - that.subscribeForUserNameClick(); - } else { - $(e.currentTarget).off('touchmove mouseleave'); - } - that.subscribeForHideListeners(); - that.setRootElement(); - const userID = e.currentTarget.search.slice('?XID='.length); - const props = { - userID: userID, - event: e.originalEvent - }; - window.renderMiniProfile(that.rootElement, props); - }, 500); - if (e.type !== 'touchstart') { - return false; - } - }) - }, - handleMouseUp: function () { - const that = this; - $(this.contentWrapper).on('mouseup touchend', this.userNameSelector, function () { - that.timeout && clearTimeout(that.timeout); - }) - }, - handleFocusLost: function (element) { - const that = this; - $(element).on('touchmove mouseleave', function unsubscribe() { - that.timeout && clearTimeout(that.timeout); - $(this).off('touchmove mouseleave', unsubscribe) - }) - }, - init: function () { - this.handleMouseDown(); - this.handleMouseUp(); - } - }; - profileMini.init(); - } - - // 海外库存 - async function forStock() { - if (getScriptEngine() === UserScriptEngine.RAW) { - const insert = `
`;
- popupMsg(insert, '飞花库存');
- } else {
- const popup = popupMsg(`请稍后${loading_gif_html()}`, '飞花库存');
- let table = `| 目的地 - 更新时间 | 库存 | |||
|---|---|---|---|---|
| ${el.show} | ${update / 60 | 0}分${update % 60 | 0}秒前 | `; - let count = 0; - res.stocks[el.name]['stocks'].forEach(stock => { - if (el.stocks[stock.name]) { - table += `${el.stocks[stock.name]} (${stock['quantity']}) | `; - count++; - } - }); - while (count < 3) { - count++; - table += ''; - } - table += ' | |
监测目标ID玩家的防御状态,找出隐身攻击者
', '守望者 (测试中)'); - let p = document.createElement('p'); - let uid = document.createElement('input'); - let start = document.createElement('button'); - let stop = document.createElement('button'); - let self_target = document.createElement('button'); - let attackers = document.createElement('div'); - attackers.obj = {}; - let records = document.createElement('div'); - records.list = []; - records.details = {}; - // interval loop_id - let loop_id = null; - let updateAttackersDOM = function () { - let html = '进攻者:You dug deep and completed 15 minutes of incline sprints
+ *You gained 1,854.05 speed
+ */ + if (gymDict[$(e).text()]) + $(e).text(gymDict[$(e).text()]); + }); + // 健身房信息 标题 + $('div[class^="gymTitle"] h3').each((i, e) => { + if (gymDict[$(e).text()]) + $(e).text(gymDict[$(e).text()]); + else if (gymList[$(e).text().trim()]) + $(e).text(gymList[$(e).text().trim()]); + }); + // 健身房信息 属性名 + $('ul[class^="gymInfo"] b').each((i, e) => { + if (gymDict[$(e).text().trim()]) + $(e).text(gymDict[$(e).text().trim()]); + }); + + // 健身房状态信息 + // $('div[class^="gymStats"] b').each((i, e) => { + // log(e) + // if (gymDict[$(e).text().trim()]) + // $(e).text(gymDict[$(e).text().trim()]); + // }); + // + // // 健身房状态值 + // $('div[class^="gymStats"] span[class^=value]').each((i, e) => { + // if ($(e).text().indexOf("per train") > 0) + // $(e).text($(e).text().split(" ")[0] + gymDict["per train"]); + // else if (gymDict[$(e).text().trim()]) + // $(e).text(gymDict[$(e).text().trim()]); + // }); + + // 健身房信息 属性值 + $('ul[class^="gymInfo"] span[class^="value"]').each((i, e) => { + if (gymDict[$(e).text().trim()]) + $(e).text(gymDict[$(e).text().trim()]); + }); + // 健身房信息 具体锻炼项目 + $('span[class^="exerciseName"]').each((i, e) => { + if (gymDict[$(e).text().trim()]) + $(e).text(gymDict[$(e).text().trim()]); + }); + // 购买提示信息 + $('div[class^="confirmMessage"] p[role="alert"]').each((i, e) => { + if (gymDict[$(e).text().trim()]) + $(e).text(gymDict[$(e).text().trim()]); + }); + } + + gymTrans(); + gymOB.observe($('div.content-wrapper')[0], { childList: true, subtree: true, attributes: true }); + return; + } + + // 物品页面 + if (href.contains(/item\.php/)) { + if (href.includes('item.php?temp=')) return; + // 标题和右边的链接 + initOB(document.querySelector('.content-title'), { childList: true }, + () => { + titleTrans(); + contentTitleLinksTrans(); + }); + // 套装预览中间的文字 + const $loadouts_root = document.getElementById('loadoutsRoot'); + if ($loadouts_root) { + initOB($loadouts_root, { subtree: true, attributes: true }, () => { + const el = $loadouts_root.querySelector('div[class^="type___"]'); + if (el && itemPageDict[el.innerText.trim()]) { + el.innerText = itemPageDict[el.innerText.trim()]; + } + }); + } + // 手机选项按钮 物品名 物品详情 + const options = { + attributes: true, + subtree: true, + attributeFilter: ["aria-hidden",] + }; + const translated = { cat: '', count: -1 }; + const translatedOnce = { item_opt: -1, opt_icon_count: -1 }; + initOB(document.getElementById('category-wrap'), options, () => { + // 手机操作选项 + const $item_opt = document.querySelectorAll(`ul.itemsList span.opt-name`); + if (translatedOnce.item_opt !== $item_opt.length - 1) { + let count = -1; + $item_opt.forEach((e, i) => { + if (itemPageDict[e.firstChild.nodeValue.trim()]) { + e.firstChild.nodeValue = itemPageDict[e.firstChild.nodeValue.trim()]; + } + count = i; + }); + translatedOnce.item_opt = count !== -1 ? count : -1; + } + // 物品名 + const $active_tab = document.querySelector('ul.itemsList[aria-expanded="true"]'); + if (!$active_tab) return; + const $active_item_list = $active_tab.querySelectorAll('span.name'); + const itemCat = $active_tab.id; + if ($active_item_list.length - 1 !== translated.count || itemCat !== translated.cat) { + let count = -1; + // 物品名 + $active_item_list.forEach((e, i) => { + if (!e.classList.contains('wh-translated')) { + if (itemNameDict[e.innerText.trim()]) { + e.classList.add('wh-translated'); + const trans_dom = document.createElement('span'); + trans_dom.classList.add('wh-translate'); + trans_dom.setAttribute('style', 'margin: 0 0 0 1em'); + trans_dom.append(itemNameDict[e.innerText.trim()]); + e.after(trans_dom); + // .after(`${itemNameDict[$(e).text().trim()]}`); + } + } + count = i; + }); + + if (count !== -1) { + translated.cat = itemCat; + translated.count = count; + } + } + // 物品详情 + const $show_item_info = $active_tab.querySelector('li.show-item-info'); + showItemInfoTrans($show_item_info); + // 物品右操作按钮 + const $opt_icon_tooltip = $('ul.actions-wrap span.icon-h'); + if (translatedOnce.opt_icon_count !== $opt_icon_tooltip.length - 1) { + let count = -1 + $opt_icon_tooltip.each((i, e) => { + if (itemPageDict[e.attributes.title.nodeValue]) { + e.attributes.title.nodeValue = itemPageDict[e.attributes.title.nodeValue]; + } + count = i; + }); + if (count !== -1) { + translatedOnce.opt_icon_count = count; + } + } + }); + // 黑框 + const $title_black = document.querySelector('div.title-black'); + if ($title_black) { + const $your_items = $title_black.querySelector('span.m-hide'); + if (itemPageDict[$your_items.innerText.trim()]) { + $your_items.innerText = itemPageDict[$your_items.innerText.trim()]; + } + // 黑框分类标题 + const $items_type_name = $title_black.querySelector('span.items-name'); + initOB($items_type_name, { childList: true }, () => { + if (itemPageDict[$items_type_name.innerText.trim()]) { + $items_type_name.innerText = itemPageDict[$items_type_name.innerText.trim()]; + } + }); + } + // 分类浮动文字 + const $data_type = document.querySelectorAll('li#categoriesItem a'); + $data_type.forEach((e) => { + if (itemPageDict[e.getAttribute('title')]) { + e.setAttribute('title', itemPageDict[e.attributes.title.nodeValue]); + } + }); + return; + } + + // npc商店 + if (href.contains(/(shops|bigalgunshop)\.php/)) { + // 标题和右边的链接 + const $cont_title = document.querySelector('.content-title'); + initOB($cont_title, { childList: true, subtree: true }, () => { + titleTrans(); + contentTitleLinksTrans(); + }); + const $wrapper = document.querySelector('.content-wrapper'); + // [购买部分] + const $buy_items_wrapper = $wrapper.querySelector('.buy-items-wrap'); + if ($buy_items_wrapper) { + // 黑框标题 + const $buy_black_title = $buy_items_wrapper.querySelector('.title-black'); + if ($buy_black_title && npcShopDict[$buy_black_title.firstChild.nodeValue.trim()]) { + $buy_black_title.firstChild.nodeValue = npcShopDict[$buy_black_title.firstChild.nodeValue.trim()]; + } + // 各个物品 + const $items = $buy_items_wrapper.querySelectorAll('ul.items-list > li.torn-divider'); + $items.forEach(e => { + // 物品名 + const $item_name = e.querySelector('span.desc span.name.bold'); + if ($item_name && itemNameDict[$item_name.innerText.trim()]) { + $item_name.innerText = `${itemNameDict[$item_name.innerText.trim()]}(${$item_name.innerText.trim()})`; + } + // 类型和存货 + const $item_stock = e.querySelector('span.desc span.stock'); + if ($item_stock) $item_stock.childNodes.forEach(e => { + if (e.nodeType === 1) { + if (npcShopDict[e.innerText.trim()]) e.innerText = npcShopDict[e.innerText.trim()]; + } else { + if (npcShopDict[e.nodeValue.trim()]) e.nodeValue = npcShopDict[e.nodeValue.trim()]; + } + }); + // buy按钮 + const $buy_btn = e.querySelector('button.wai-support'); + if ($buy_btn && npcShopDict[$buy_btn.childNodes[0].nodeValue.trim()]) { + $buy_btn.childNodes[0].nodeValue = npcShopDict[$buy_btn.childNodes[0].nodeValue.trim()]; + } + // 买前确认 + const $confirm = e.querySelector('span.confirm'); + const $confirm_msg = $confirm.querySelector('span'); + if ($confirm_msg && npcShopDict[$confirm_msg.innerText.trim()]) { + $confirm_msg.innerText = npcShopDict[$confirm_msg.innerText.trim()]; + } + const $amount_item_name = $confirm.querySelector('span.count').nextSibling; + if ($amount_item_name && !$amount_item_name.nodeValue.contains(CC_set)) { + const item_name = $amount_item_name.nodeValue.trim().split(' ').slice(1, -1).join(' '); + const item_name_trans = itemNameDict[item_name] || item_name; + $amount_item_name.nodeValue = `个[${item_name_trans}],总计$`; + } + const $confirm_a = $confirm.querySelectorAll('span.confirm-act a'); + $confirm_a.forEach(e => { + if (npcShopDict[e.innerText.trim()]) e.innerText = npcShopDict[e.innerText.trim()]; + }); + }); + // 展开的物品详情 + initOB($wrapper, { childList: true, subtree: true }, () => { + const $item_desc = $wrapper.querySelector('.show-item-info') || $wrapper.querySelector('.view-item-info'); + showItemInfoTrans($item_desc); + }); + } + // [卖出部分] + const $sell_items_wrapper = $wrapper.querySelector('.sell-items-wrap'); + if ($sell_items_wrapper) { + // 黑框标题 + const $title = $sell_items_wrapper.querySelectorAll('ul.title li'); + $title.forEach(el => { + el.childNodes.forEach(e => { + if (e.nodeType === 1) { + if (npcShopDict[e.innerText.trim()]) { + e.innerText = npcShopDict[e.innerText.trim()]; + return; + } + const spl = e.innerText.trim().split(' '); + if (spl.length > 3) { + const shop_name = spl[2] === 'the' ? spl.slice(3).join(' ') : spl.slice(2).join(' '); + const shop_name_trans = npcShopDict[shop_name] || titleDict[shop_name] || cityDict[shop_name] || null; + e.innerText = `物品给${shop_name_trans || shop_name}`; + } + } else { + if (npcShopDict[e.nodeValue.trim()]) e.nodeValue = npcShopDict[e.nodeValue.trim()]; + } + }); + }); + // 物品名 + const $items_name = $sell_items_wrapper.querySelectorAll('span.name'); + $items_name.forEach(el => { + if (itemNameDict[el.innerText.trim()]) el.innerText += + ` ${itemNameDict[el.innerText.trim()]}`; + }); + // 按钮 + const $btn = $sell_items_wrapper.querySelectorAll('button'); + $btn.forEach(e => { + if (npcShopDict[e.innerText.trim()]) e.innerText = npcShopDict[e.innerText.trim()]; + }); + // select btn + const $select_btn = $sell_items_wrapper.querySelector('li.select button.wai-btn'); + if ($select_btn) { + initOB($select_btn, { childList: true }, () => { + if ($select_btn && npcShopDict[$select_btn.innerText.trim()]) { + $select_btn.innerText = npcShopDict[$select_btn.innerText.trim()]; + } + }); + } + // 取消按钮 + const $cancel = $sell_items_wrapper.querySelector('span.cancel a'); + if ($cancel && npcShopDict[$cancel.innerText.trim()]) { + $cancel.innerText = npcShopDict[$cancel.innerText.trim()]; + } + // 卖出确认文字 + const $sell_confirm = $sell_items_wrapper.querySelector('div.sell-confirm'); + if ($sell_confirm) { + const $msg = $sell_confirm.childNodes[0]; + if (npcShopDict[$msg.nodeValue.trim()]) $msg.nodeValue = npcShopDict[$msg.nodeValue.trim()]; + const $total_value = $sell_confirm.querySelector('span.profit').childNodes[0]; + if (npcShopDict[$total_value.nodeValue.trim()]) $total_value.nodeValue = npcShopDict[$total_value.nodeValue.trim()]; + } + } + // [出售PT部分] + const $sell_pt_wrapper = $wrapper.querySelector('.sell-points-wrap'); + if ($sell_pt_wrapper) { + // 黑框 + const $title_black = $sell_pt_wrapper.querySelector('.title-black'); + if (npcShopDict[$title_black.innerText.trim()]) { + $title_black.innerText = npcShopDict[$title_black.innerText.trim()]; + } + } + return; + } + + // 股票 + if (href.contains(/page\.php\?sid=stocks/)) { + const stockOB = new MutationObserver(() => { + stockOB.disconnect(); + titleTrans(); + contentTitleLinksTrans(); + stockTrans(); + stockOB.observe($('.content-wrapper').get(0), { + characterData: true, + attributes: true, + subtree: true, + childList: true + }); + }); + const stockTrans = function stockTrans() { + // 表头 + $('ul.title-black').find('*').contents().each((i, e) => { + if (e.nodeType === 3 && stockDict[e.nodeValue.trim()]) { + e.nodeValue = stockDict[e.nodeValue.trim()]; + } + }); + // 名称 + $('div[class^="nameContainer"]').each((i, e) => { + if (e.childNodes[0].nodeValue && stockDict[e.childNodes[0].nodeValue.trim()]) { + e.childNodes[0].nodeValue = stockDict[e.childNodes[0].nodeValue.trim()]; + } + }); + // 右侧bb名 + $('div[class^="dividendInfo"] p').each((i, e) => { + const spl = $(e).text().trim().split(' '); + if (stockDict[$(e).text().trim()]) { + $(e).text(stockDict[$(e).text().trim()]); + } else if (/[0-9]x$/.test(spl[0])) { + const itemName = spl.slice(1).join(' '); + const num = spl[0].slice(0, -1); + $(e).text(`${num}个${itemNameDict[itemName] ? itemNameDict[itemName] : itemName}`); + } + }); + // 股价详情 + $('#panel-priceTab ul[role="tablist"] label span:last-child').each((i, e) => { + if (stockDict[$(e).text()]) { + $(e).text(stockDict[$(e).text()]); + } + }); + $('ul[class^="priceInfoList___"] li').contents().each((i, e) => { + if (e.nodeType === 3) { + if (stockDict[e.nodeValue.trim()]) { + e.nodeValue = stockDict[e.nodeValue.trim()]; + } + } + }); + // 点开购买后 + $('div#panel-ownedTab div[class^="manageBlock"] *').contents().each((i, e) => { + if (e.nodeType === 1) { + if (stockDict[$(e).text().trim()]) { + $(e).text(stockDict[$(e).text().trim()]); + } + } else if (e.nodeType === 3) { + if (stockDict[e.nodeValue.trim()]) e.nodeValue = stockDict[e.nodeValue.trim()]; + else if (/\$[0-9]+ after the 0\.1% fee of \$[0-9]+$/.test(e.nodeValue.trim())) { + e.nodeValue = e.nodeValue.trim() + .replace('after the', stockDict['after the']) + .replace('fee of', stockDict['fee of']); + } + } + }); + // 点开购买后的历史栏 + $('div#panel-ownedTab div[class^="transactionsContainer"] li').each((i, e) => { + e = e.childElementCount === 0 ? e : e.children[0]; + if (stockDict[$(e).text().trim()]) { + $(e).text(stockDict[$(e).text().trim()]); + } + }); + // 历史购买show more + const $show_more = document.querySelector('li[class^="showMore___"] button'); + if ($show_more && $show_more.innerText.trim().contains(/^Show [0-9]+ more$/)) { + const number = $show_more.innerText.trim().split(' ')[1]; + $show_more.innerText = `显示另外${number}条`; + } + // 点开bb后 + $('div#panel-dividendTab div[class^="message"] *').contents().each((i, e) => { + if (e.nodeType !== 3) return; + if (!e.nodeValue.trim()) return; + if (stockDict[e.nodeValue.trim()]) { + e.nodeValue = stockDict[e.nodeValue.trim()]; + } + // 第n个increment 1st 2nd 3rd 4th + else if (/[0-9][snrt][tdh]$/.test(e.nodeValue.trim())) { + e.nodeValue = `第${e.nodeValue.trim().slice(0, -2)}个`; + } + // 物品 + else if (/[0-9]x$/.test(e.nodeValue.trim().split(' ')[0])) { + const spl = e.nodeValue.trim().split(' '); + const itemName = spl.slice(1).join(' '); + e.nodeValue = + ` ${spl[0].replace('x', '个') + } ${itemNameDict[itemName] ? itemNameDict[itemName] : itemName + }`; + } else { + if (/[\u4e00-\u9fa5]/.test(e.nodeValue)) return; + if (/\b\$?[0-9,]+$/.test(e.nodeValue)) return; + log(`未找到翻译:[${e.nodeValue.trim()}]`); + } + }); + }; + stockTrans(); + stockOB.observe($('.content-wrapper').get(0), { + characterData: true, + attributes: true, + subtree: true, + childList: true + }); + return; + } + + // 教育页面 + if (href.indexOf('education.php') >= 0) { + const eduOB = new MutationObserver(eduOBInit); + + function eduOBInit() { + eduOB.disconnect(); + eduTrans(); + eduOB.observe($('div.content-wrapper')[0], { childList: true, subtree: true }); + } + + function eduTrans() { + titleTrans(); + contentTitleLinksTrans(); + + // 大科目、学院标题 + $('div.content-wrapper div.title').each((i, e) => { + if (eduDict[$(e).text().trim()]) + e.firstChild.nodeValue = eduDict[$(e).text().trim()]; + }); + // 教育主页提示内容 和 学院详情 小课程提示信息 + $('div.content-wrapper div[class^="msg"]').find('*').contents().each((i, e) => { + if (e.nodeValue === null) return; + if (eduDict[e.nodeValue.trim()]) { + e.nodeValue = eduDict[e.nodeValue.trim()]; + } else if (e.nodeValue.indexOf('second') >= 0 || + e.nodeValue.indexOf('minute') >= 0 || + e.nodeValue.indexOf('hour') >= 0 || + e.nodeValue.indexOf('day') >= 0) { + e.nodeValue = e.nodeValue + .replace('days', '天') + .replace('day', '天') + .replace('hours', '时') + .replace('hour', '时') + .replace('minutes', '分') + .replace('minute', '分') + .replace('and', '和') + .replace('seconds', '秒') + .replace('second', '秒'); + } + }); + // 学院详情标题 + $('div.content-wrapper div.title-black').each((i, e) => { + if (e.childNodes.length === 3) + if (eduDict[e.lastChild.nodeValue.trim()]) + e.lastChild.nodeValue = ' ' + eduDict[e.lastChild.nodeValue.trim()]; + if (eduDict[$(e).text().trim()]) + $(e).text(eduDict[$(e).text().trim()]); + }); + // 学院详情 小课程标题 + $('div.content-wrapper span.module-name').each((i, e) => { + if (eduDict[$(e).text().trim()]) + $(e).text(eduDict[$(e).text().trim()]); + }); + // 学院详情 课程的描述 + $('div.content-wrapper p.desc').each((i, e) => { + if (eduDict[$(e).text().trim()]) + $(e).text(eduDict[$(e).text().trim()]); + }); + // 课程详情 7 标题 + $('div.module-desc p.title').each((i, e) => { + if (eduDict[$(e).text().trim()]) + $(e).text(eduDict[$(e).text().trim()]); + }); + // 课程介绍中的所有li元素 + $('div.module-desc ul.info').find('*').contents().each((i, e) => { + if (e.nodeValue === null) return; + if (eduDict[e.nodeValue.trim()]) + e.nodeValue = eduDict[e.nodeValue.trim()]; + else if (e.nodeValue.indexOf('Length') >= 0) { + e.nodeValue = e.nodeValue.replace('Length', eduDict['Length']) + .replace('d ', '日') + .replace('h ', '时') + .replace('m ', '分'); + } else if (e.nodeValue.indexOf('Cost') >= 0) { + e.nodeValue = e.nodeValue.replace('Cost', eduDict['Cost']); + } else if (e.nodeValue.indexOf('manual labor') >= 0) { + e.nodeValue = e.nodeValue.replace('manual labor', eduDict['manual labor']) + .replace('Gain', eduDict['Gain']) + .replace('upon completion', eduDict['upon completion']); + } else if (e.nodeValue.indexOf('endurance') >= 0) { + e.nodeValue = e.nodeValue.replace('endurance', eduDict['endurance']) + .replace('Gain', '获得') + .replace('upon completion', eduDict['upon completion']); + } else if (e.nodeValue.indexOf('intelligence') >= 0) { + e.nodeValue = e.nodeValue.replace('intelligence', eduDict['intelligence']) + .replace('Gain', '获得') + .replace('upon completion', eduDict['upon completion']); + } + }); + } + + eduTrans(); + eduOB.observe($('div.content-wrapper')[0], { childList: true, subtree: true }); + return; + } + + // profile 玩家资料页面 + if (href.contains(/profiles\.php\?XID=\d+/)) { + const $wrapper = document.querySelector('.content-wrapper'); + const profileOB = new MutationObserver(() => { + profileOB.disconnect(); + titleTrans(); + contentTitleLinksTrans(); + profileTrans(); + profileOB.observe($wrapper, { + characterData: true, + attributes: true, + subtree: true, + childList: true + }); + }); + const profileTrans = function profileTrans() { + const playerName = document.title.trim().contains(/('s |s' )/) + ? document.title.trim().split(/('s |s' )/)[0] + : null; + if (!playerName) { + console.error('翻译助手错误:获取用户名失败。'); + try { + profileOB.disconnect() + } catch { + } + return; } - popup.appendChild(p); - popup.appendChild(uid); - popup.appendChild(start); - popup.appendChild(stop); - popup.appendChild(self_target); - popup.appendChild(attackers); - popup.appendChild(records); - - start.addEventListener('click', () => { - if (loop_id !== null || !uid.value) return; - start.disabled = true; - stop.disabled = false; - uid.readOnly = true; - p.innerHTML = '状态:已开 ✅'; - let count = 0; - loop_id = setInterval(async () => { - // 记录当前循环的id - let that_id = loop_id; - let res = await (await fetch(url + uid.value, { - headers: { 'X-Requested-With': 'XMLHttpRequest' }, - referrer: "loader.php?sid=attack&user2ID=" + uid.value - })).text(); - if (loop_id !== that_id) return; - let data = JSON.parse(res.split('
`;
+ popupMsg(insert, '飞花库存');
+ } else {
+ const popup = popupMsg(`请稍后${loading_gif_html()}`, '飞花库存');
+ let table = `| 目的地 - 更新时间 | 库存 | |||
|---|---|---|---|---|
| ${el.show} | ${update / 60 | 0}分${update % 60 | 0}秒前 | `; + let count = 0; + res.stocks[el.name]['stocks'].forEach(stock => { + if (el.stocks[stock.name]) { + table += `${el.stocks[stock.name]} (${stock['quantity']}) | `; + count++; + } + }); + while (count < 3) { + count++; + table += ''; + } + table += ' | |
监测目标ID玩家的防御状态,找出隐身攻击者
', '守望者 (测试中)'); + let p = document.createElement('p'); + let uid = document.createElement('input'); + let start = document.createElement('button'); + let stop = document.createElement('button'); + let self_target = document.createElement('button'); + let attackers = document.createElement('div'); + attackers.obj = {}; + let records = document.createElement('div'); + records.list = []; + records.details = {}; + // interval loop_id + let loop_id = null; + let updateAttackersDOM = function () { + let html = '进攻者: