MediaWiki:Gadget-clippy.js: Difference between revisions

no edit summary
(Created page with "→‎globals $, mw, rswiki: Math.Vector = function (x,y) { this.x = x; this.y = y; } Math.Vector.prototype = { clone: function () { return new Math.Vector(this.x, this.y); }, negate: function () { this.x = -this.x; this.y = -this.y; return this; }, neg: function () { return this.clone().negate(); }, addeq: function (v) { this.x += v.x; this.y += v.y; return this; },...")
 
No edit summary
Tag: Reverted
Line 1:
/* globals $, mw, rswiki*/Math.Vector = function (x,y) { this.x = x; this.y = y;}Math.Vector.prototype = { clone: function () { return new Math.Vector(this.x, this.y); }, negate: function () { this.x = -this.x; this.y = -this.y; return this; }, neg: function () { return this.clone().negate(); }, addeq: function (v) { this.x += v.x; this.y += v.y; return this; }, subeq: function (v) { return this.addeq(v.neg()); }, add: function (v) { return this.clone().addeq(v); }, sub: function (v) { return this.clone().subeq(v); }, multeq: function (c) { this.x *= c; this.y *= c; return this; }, diveq: function (c) { this.x /= c; this.y /= c; return this; }, mult: function (c) { return this.clone().multeq(c); }, div: function (c) { return this.clone().diveq(c); }, dot: function (v) { return this.x * v.x + this.y * v.y; }, length: function () { return Math.sqrt(this.dot(this)); }, normal: function () { return this.clone().diveq(this.length()); }}; function evade(evt) { if(mouseStateDown && DDSenabled){ var $this = $(this) var width,height,corner,mouseX,mouseY if($this.prop("fixed") == "true"){ width = $(window).width() height = $(window).height() corner = {"left":parseFloat($this.css("left")),"top":parseFloat($this.css("top"))} mouseX = evt.clientX mouseY = evt.clientY } else { width = $(document).width() height = $(document).height() corner = $this.offset() mouseX = evt.pageX mouseY = evt.pageY } var center = {x: corner.left + $this.outerWidth() / 2, y: corner.top + $this.outerHeight() / 2} var dist = new Math.Vector(center.x - mouseX, center.y - mouseY) var closest = $this.outerWidth() / 2 $this.toggleClass('spinning',true) if (dist.length() >= closest) { return; } var delta = dist.normal().multeq(closest).sub(dist), newCorner = {left: corner.left + delta.x, top: corner.top + delta.y}; var padding = parseInt($this.css('padding-left')); if (newCorner.left < -padding) { newCorner.left = -padding; } else if (newCorner.left + $this.outerWidth() - padding > width) { newCorner.left = width - $this.outerWidth() + padding; } if (newCorner.top < -padding) { newCorner.top = -padding; } else if (newCorner.top + $this.outerHeight() - padding > height) { newCorner.top = height - $this.outerHeight() + padding; } $this.css("position","absolute"); if($this.prop("fixed") == "true"){ $this.css("left",newCorner.left) $this.css("top",newCorner.top) } else { $this.offset(newCorner); } }} function beginEvade() { $(this).on('mousemove', evade);} function endEvade() { $(this).off('mousemove', evade); $(this).toggleClass('spinning',false)} function spinny() { if($('.infobox-switch').length > 0 && $('.button-selected').length == 0 && $('select').length == 0) { setTimeout(spinny, 250); return; } var wrapper = '<span class="hittabletop"><span class="hittable bumper spinny" /></span>' var searchterm = '.mw-parser-output > .floatleft img, '+ '.mw-parser-output > .floatright img, '+ '.mw-parser-output > .rsw-synced-switch .floatleft img, '+ '.infobox-monster .infobox-image img, '+ '.infobox-npc .infobox-full-width-content img, '+ '.infobox-jagex img' var excludeterm = '.leaflet-tile' var title = mw.config.get('wgTitle') var query = MD5(title) if(query == "e8f65c7327e4ae90e767afc30a709419"){ wrapper = '<span class="hittabletop"><span class="hittable bumper" /></span>' } if(query == "7dd8d4d08aa31a5c516f21d40a03c8a5"){ wrapper = '<span class="hittabletop"><span class="hittable bumper" /></span>' searchterm = '.infobox-monster .infobox-image img' for(var key in TTJlist){ $("#content").prepend('<img src="'+TTJlist[key]+'" width="1" height="1">') } } if(query == "f06eb95413908c7a0be080f82e1f4d56"){ wrapper = '<span class="hittabletop"><span class="hittable bumper" /></span>' searchterm = '.infobox-monster .infobox-image img' } $(searchterm).not(excludeterm).wrap(wrapper); if(query == "04f12d4923ec5069ac75e6d364b719cb" && load("apr-totalkills")>=50){ $("#mw-content-text").empty() var width = $(window).width() var height = $(window).height() var resizeratio = Math.min(1,width/1903*height/976) for(i=0;i<resizeratio*100;i++){ var itemz = $('<img src="'+getFileURL('Cow ('+(Math.floor(Math.random()*3)+1)+').png')+'" width="60" height="40">') itemz.css("transform",'rotate('+Math.random()+'turn)'); itemz.prop("fixed","true") var itema = $('<span class="hittable bumper spinny"></span>').append(itemz) itema.css("left",Math.random()*(width-60-300)) itema.css("top",Math.random()*(height-60)) itema.css("position","absolute") var itemb = $('<span class="hittabletop"></span>').append(itema) $("#mw-content-text").append(itemb) } } $('.bumper').on('mouseover', beginEvade); $('.bumper').on('mouseout', endEvade);}function load(name){ var result if (!rswiki.hasLocalStorage()) { console.warn('Browser does not support localStorage'); return undefined; } try { result = JSON.parse(localStorage.getItem(name)); } catch (err) { console.warn('Error loading from localStorage'); return undefined; } if (result === null) { if(name == 'apr-weapon'){ return ['Bronze dagger','0 0','red'] } if(name == 'apr-weapon-inv'){ return [['Windows','0 0','white']] } if(name == 'apr-weapon-buy'){ return [ [["Rune 2h sword","0 0","rgb(80, 106, 117)"],50], [["Dragon defender","0 0","red"],50], [["Dragon scimitar","0 0","red"],50], [["Swift blade","0 0","rgb(205, 127, 50)"],50], [["Toxic staff of the dead","0 0","rgb(154, 187, 74)"],50], [["Armadyl godsword","0 0","silver"],73], [["Kodai wand","0 0","blue"],100], [["Ghrazi rapier","0 0","silver"],100], [["3rd age longsword","0 0","silver"],200], [["Twisted bow","0 0","black"],200] ] } if(name == 'apr-queststate'){ return 1 } if(name == 'apr-slayerstate'){ return 1 } if(name == 'apr-lastslayermaster'){ return "Turael" } if(name == 'apr-gp'){ return 0 } if(name == 'apr-gp-total'){ return 0 } if(name == 'apr-achievementlist'){ return {} } if(name == 'apr-totalkills'){ return 0 } if(name == 'apr-lightdark'){ return [false,false] } if(name == 'apr-gadgetenabled'){ return true } } return result}function save(name,value){ if (!rswiki.hasLocalStorage()) { console.warn('Browser does not support localStorage'); return undefined; } var result = localStorage.setItem(name,JSON.stringify(value)); try { var ret = JSON.parse(localStorage.getItem(value)); if(ret == result){ return true; } console.warn('Error saving to localStorage'); return false; } catch (err) { console.warn('Error saving to localStorage'); return false; }}function getCookie(name) { var value = "; " + document.cookie; var parts = value.split("; " + name + "="); if (parts.length == 2) return parts.pop().split(";").shift(); return false}function MD5(d){result = M(V(Y(X(d),8*d.length)));return result.toLowerCase()};function M(d){for(var _,m="0123456789ABCDEF",f="",r=0;r<d.length;r++)_=d.charCodeAt(r),f+=m.charAt(_>>>4&15)+m.charAt(15&_);return f}function X(d){for(var _=Array(d.length>>2),m=0;m<_.length;m++)_[m]=0;for(m=0;m<8*d.length;m+=8)_[m>>5]|=(255&d.charCodeAt(m/8))<<m%32;return _}function V(d){for(var _="",m=0;m<32*d.length;m+=8)_+=String.fromCharCode(d[m>>5]>>>m%32&255);return _}function Y(d,_){d[_>>5]|=128<<_%32,d[14+(_+64>>>9<<4)]=_;for(var m=1732584193,f=-271733879,r=-1732584194,i=271733878,n=0;n<d.length;n+=16){var h=m,t=f,g=r,e=i;f=md5_ii(f=md5_ii(f=md5_ii(f=md5_ii(f=md5_hh(f=md5_hh(f=md5_hh(f=md5_hh(f=md5_gg(f=md5_gg(f=md5_gg(f=md5_gg(f=md5_ff(f=md5_ff(f=md5_ff(f=md5_ff(f,r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+0],7,-680876936),f,r,d[n+1],12,-389564586),m,f,d[n+2],17,606105819),i,m,d[n+3],22,-1044525330),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+4],7,-176418897),f,r,d[n+5],12,1200080426),m,f,d[n+6],17,-1473231341),i,m,d[n+7],22,-45705983),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+8],7,1770035416),f,r,d[n+9],12,-1958414417),m,f,d[n+10],17,-42063),i,m,d[n+11],22,-1990404162),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+12],7,1804603682),f,r,d[n+13],12,-40341101),m,f,d[n+14],17,-1502002290),i,m,d[n+15],22,1236535329),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+1],5,-165796510),f,r,d[n+6],9,-1069501632),m,f,d[n+11],14,643717713),i,m,d[n+0],20,-373897302),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+5],5,-701558691),f,r,d[n+10],9,38016083),m,f,d[n+15],14,-660478335),i,m,d[n+4],20,-405537848),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+9],5,568446438),f,r,d[n+14],9,-1019803690),m,f,d[n+3],14,-187363961),i,m,d[n+8],20,1163531501),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+13],5,-1444681467),f,r,d[n+2],9,-51403784),m,f,d[n+7],14,1735328473),i,m,d[n+12],20,-1926607734),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+5],4,-378558),f,r,d[n+8],11,-2022574463),m,f,d[n+11],16,1839030562),i,m,d[n+14],23,-35309556),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+1],4,-1530992060),f,r,d[n+4],11,1272893353),m,f,d[n+7],16,-155497632),i,m,d[n+10],23,-1094730640),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+13],4,681279174),f,r,d[n+0],11,-358537222),m,f,d[n+3],16,-722521979),i,m,d[n+6],23,76029189),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+9],4,-640364487),f,r,d[n+12],11,-421815835),m,f,d[n+15],16,530742520),i,m,d[n+2],23,-995338651),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+0],6,-198630844),f,r,d[n+7],10,1126891415),m,f,d[n+14],15,-1416354905),i,m,d[n+5],21,-57434055),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+12],6,1700485571),f,r,d[n+3],10,-1894986606),m,f,d[n+10],15,-1051523),i,m,d[n+1],21,-2054922799),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+8],6,1873313359),f,r,d[n+15],10,-30611744),m,f,d[n+6],15,-1560198380),i,m,d[n+13],21,1309151649),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+4],6,-145523070),f,r,d[n+11],10,-1120210379),m,f,d[n+2],15,718787259),i,m,d[n+9],21,-343485551),m=safe_add(m,h),f=safe_add(f,t),r=safe_add(r,g),i=safe_add(i,e)}return Array(m,f,r,i)}function md5_cmn(d,_,m,f,r,i){return safe_add(bit_rol(safe_add(safe_add(_,d),safe_add(f,i)),r),m)}function md5_ff(d,_,m,f,r,i,n){return md5_cmn(_&m|~_&f,d,_,r,i,n)}function md5_gg(d,_,m,f,r,i,n){return md5_cmn(_&f|m&~f,d,_,r,i,n)}function md5_hh(d,_,m,f,r,i,n){return md5_cmn(_^m^f,d,_,r,i,n)}function md5_ii(d,_,m,f,r,i,n){return md5_cmn(m^(_|~f),d,_,r,i,n)}function safe_add(d,_){var m=(65535&d)+(65535&_);return(d>>16)+(_>>16)+(m>>16)<<16|65535&m}function bit_rol(d,_){return d<<_|d>>>32-_}function getFileURL(filename) { var base = window.location.origin; filename = filename.replace(/ /g,"_") filename = filename.replace(/\(/g, '%28').replace(/\)/g, '%29') return base + '/images/' + filename + '?11112';}function getDist(x,y){ return Math.sqrt(x*x+y*y)}function disableHighlight(){ if (window.getSelection) {window.getSelection().removeAllRanges();} else if (document.selection) {document.selection.empty();} $('body').css("user-select","none")}var dialogue = { "IntroPrompt": { "initial": "Hey! Come visit me on my page! I have a quest for you!", "questState": 90, "options": [], "effects": [], "response": [], "icon": "/images/Wise_Old_Man_chathead.png?68f26", "width": 78, "height": 148 }, "IntroReminder": { "initial": "You haven't visited me yet! Come to my page!", "questState": 90, "options": ["I'll come now.","Remind me later","Stop bothering me!"], "effects": [{"questState":90},{"questState":75},{"questState":101}], "response": ["Just head over to my wiki page, <a href='https://oldschool.runescape.wiki/w/Wise_Old_Man'>Wise Old Man</a>!","Okay! I'll come back later.","Fair enough... But if ever you change your mind just visit me on my wiki page, <a href='https://oldschool.runescape.wiki/w/Wise_Old_Man'>Wise Old Man</a>!"], "icon": "/images/Wise_Old_Man_chathead.png?68f26", "width": 78, "height": 148 }, "WiseOldMan": { "initial": "Welcome to my page! I hear you've been looking to upgrade that Bronze dagger of yours! Luckily for you, I've heard of a legendary lost city filled with wonders and powerful weapons! I recommend that you head to the Lumbridge Swamp to see if you can find any clues! I hear there's a camp there somewhere.", "questState": 101, "options": ["Got it!"], "effects": [{"questState":110}], "response": ["Good luck! Don't hesitate to talk to me if you get stuck!"], "icon": "/images/Wise_Old_Man_chathead.png?68f26", "width": 78, "height": 148 }, "WiseOldManHelp": { "initial": "You should head to the Lumbridge Swamp to see if you can find anyone to talk to about the lost city!", "options": [], "effects": [], "response": [], "icon": "/images/Wise_Old_Man_chathead.png?68f26", "width": 78, "height": 148 }, "Judged": { "initial": "Hey, what are you doing here? I see what you're doing. At least I didn't make you do Mourning's End Part II... If you're stuck, go back to talk to the last person you talked with.", "options": [], "effects": [], "response": [], "icon": "/images/Wise_Old_Man_chathead.png?68f26", "width": 78, "height": 148 }, "Swamp": { "initial": "You see a fire burning nearby. There are four adventurers around the fire. Who would you like to speak to?", "options": ["Archer","Monk","Warrior","Wizard"], "effects": [{"redirect":"https://oldschool.runescape.wiki/w/Archer_(Lost_City)"},{"redirect":"https://oldschool.runescape.wiki/w/Monk_(Lost_City)"},{"redirect":"https://oldschool.runescape.wiki/w/Warrior_(Lost_City)"},{"redirect":"https://oldschool.runescape.wiki/w/Wizard_(Lost_City)"}], "response": ["You talk to the archer.","You talk to the monk.","You talk to the warrior.","You talk to the wizard"], "icon": "/images/Fire.gif?76ed2", "omitY":true, "width": 64, "height": 95 }, "Archer": { "initial": "?", "options": ["Why are you guys hanging around here?"], "effects": [{"dialogue":"Archer2"}], "response": ["(ahem)...'Guys'? And that's really none of your business."], "icon": "/images/Archer_%28Lost_City%29_chathead.png?a7c88", "width": 85, "height": 119 }, "Archer2": { "initial": "(ahem)...'Guys'? And that's really none of your business.", "options": ["I'll talk to someone else then."], "effects": [{"dialogue":"Swamp"}], "response": ["You see a fire burning nearby. There are four adventurers around the fire. Who would you like to speak to?"], "icon": "/images/Archer_%28Lost_City%29_chathead.png?a7c88", "width": 85, "height": 119 }, "Monk": { "initial": "?", "options": ["Why are all of you standing around here?"], "effects": [{"dialogue":"Monk2"}], "response": ["None of your business. Get lost."], "icon": "/images/Monk_%28Lost_City%29_chathead.png?33896", "width": 85, "height": 119 }, "Monk2": { "initial": "None of your business. Get lost.", "options": ["I'll talk to someone else then."], "effects": [{"dialogue":"Swamp"}], "response": ["You see a fire burning nearby. There are four adventurers around the fire. Who would you like to speak to?"], "icon": "/images/Monk_%28Lost_City%29_chathead.png?33896", "width": 85, "height": 119 }, "Wizard": { "initial": "?", "options": ["Why are all of you standing around here?"], "effects": [{"dialogue":"Wizard2"}], "response": ["Hahaha you dare talk to a mighty wizard such as myself? I bet you can't even cast windstrike yet amateur!"], "icon": "/images/Wizard_%28Lost_City%29_chathead.png?25d4d", "width": 119, "height": 164 }, "Wizard2": { "initial": "Hahaha you dare talk to a mighty wizard such as myself? I bet you can't even cast windstrike yet amateur!", "options": ["I'll talk to someone else then."], "effects": [{"dialogue":"Swamp"}], "response": ["You see a fire burning nearby. There are four adventurers around the fire. Who would you like to speak to?"], "icon": "/images/Wizard_%28Lost_City%29_chathead.png?25d4d", "width": 119, "height": 164 }, "Warrior": { "initial": "Hello there traveller. We're looking for Zanaris...GAH! I mean we're not here for any particular reason at all.", "options": ["Who's Zanaris?","What's Zanaris?","What makes you think it's out here?"], "effects": [{"dialogue":"Warrior2"},{},{"dialogue":"Warrior3"}], "response": ["Ahahahaha! Zanaris isn't a person! It's a magical hidden city filled with treasures and rich.. uh, nothing. It's nothing.","I don't think we want other people competing with us to find it. Forget I said anything.","Don't you know of the legends that tell of the magical city, hidden in the swam... Uh, no, you're right, we're wasting our time here."], "icon": "/images/Warrior_%28Lost_City%29_chathead.png?937cb", "width": 85, "height": 129 }, "Warrior2": { "initial": "Ahahahaha! Zanaris isn't a person! It's a magical hidden city filled with treasures and rich.. uh, nothing. It's nothing.", "options": ["If it's hidden how are you planning to find it?","It looks to me like YOU don't know where it is seeing as you're all just sat around here."], "effects": [{},{"questState":120}], "response": ["When we've found Zanaris you'll... GAH! I mean, we're not here for any particular reason at all.","Of course we know! We just haven't found which tree the stupid leprechaun's hiding in yet! GAH! I didn't mean to tell you that! Look, just forget I said anything okay?"], "icon": "/images/Warrior_%28Lost_City%29_chathead.png?937cb", "width": 85, "height": 129 }, "Warrior3": { "initial": "Don't you know of the legends that tell of the magical city, hidden in the swam... Uh, no, you're right, we're wasting our time here.", "options": ["If it's hidden how are you planning to find it?","It looks to me like YOU don't know where it is seeing as you're all just sat around here."], "effects": [{},{"questState":120}], "response": ["When we've found Zanaris you'll... GAH! I mean, we're not here for any particular reason at all.","Of course we know! We just haven't found which tree the stupid leprechaun's hiding in yet! GAH! I didn't mean to tell you that! Look, just forget I said anything okay?"], "icon": "/images/Warrior_%28Lost_City%29_chathead.png?937cb", "width": 85, "height": 129 }, "WiseOldManHelp120": { "initial": "If you're stuck, go back to the Warrior in the Lumbridge Swamp for more advice.", "options": [], "effects": [], "response": [], "icon": "/images/Wise_Old_Man_chathead.png?68f26", "width": 78, "height": 148 }, "Warrior4": { "initial": "...", "options": ["So let me get this straight: I need to search the trees around here for a leprechaun; and then when I find him, he will tell me where this 'Zanaris' is?"], "effects": [{}], "response": ["What? How did you know that? Uh... I mean, no, no you're very wrong. Very wrong, and not right at all, and I definitely didn't tell you about Shamus the leprechaun at all."], "icon": "/images/Warrior_%28Lost_City%29_chathead.png?937cb", "width": 85, "height": 129 }, "Shamus": { "initial": "Ay yer big elephant! Yer've caught me, to be sure! What would an elephant like yer be wanting wid ol' Shamus then?", "options": ["I want to find Zanaris."], "effects": [{"dialogue":"Shamus2"}], "response": ["Zanaris is it now? Well well well... Yer'll be needing to be going to that funny little shed out there in the swamp, so you will."], "icon": "/images/Shamus_chathead.png?989e1", "width": 92, "height": 123 }, "Shamus2": { "initial": "Zanaris is it now? Well well well... Yer'll be needing to be going to that funny little shed out there in the swamp, so you will.", "options": ["...but... I thought... Zanaris was a city...?"], "effects": [{"dialogue":"Shamus3"}], "response": ["Aye that it is!"], "icon": "/images/Shamus_chathead.png?989e1", "width": 92, "height": 123 }, "Shamus3": { "initial": "Aye that it is!", "options": ["How does it fit in a shed then?","I've been in that shed, I didn't see a city."], "effects": [{"dialogue":"Shamus4"},{"dialogue":"Shamus4"}], "response": ["Oh, was I fergetting to say? Yer need to be carrying a Dramenwood staff to be getting there! Otherwise Yer'll just be ending up in the shed.","Oh, was I fergetting to say? Yer need to be carrying a Dramenwood staff to be getting there! Otherwise Yer'll just be ending up in the shed."], "icon": "/images/Shamus_chathead.png?989e1", "width": 92, "height": 123 }, "Shamus4": { "initial": "Oh, was I fergetting to say? Yer need to be carrying a Dramenwood staff to be getting there! Otherwise Yer'll just be ending up in the shed.", "options": ["So where would I get a staff?"], "effects": [{"questState":130}], "response": ["Dramenwood staffs are crafted from branches of the Dramen tree, so they are. I hear there's a Dramen tree over on the island of Entrana in a cave or some such. There would probably be a good place for an elephant like yer to be starting looking I reckon. The monks are running a ship from Port Sarim to Entrana, I hear too. Now leave me alone yer elephant!"], "icon": "/images/Shamus_chathead.png?989e1", "width": 92, "height": 123 }, "WiseOldManHelp130": { "initial": "If you're stuck, double-check with Shamus the Leprechaun what you should be doing!", "options": [], "effects": [], "response": [], "icon": "/images/Wise_Old_Man_chathead.png?68f26", "width": 78, "height": 148 }, "Shamus5": { "initial": "Ay yer big elephant! Yer've caught me, to be sure! What would an elephant like yer be wanting wid ol' Shamus then?", "options": ["I'm not sure.","How do I get to Zanaris again?"], "effects": [{},{}], "response": ["Ha! Look at yer! Look at the stupid elephant who tries to go catching a leprechaun when he don't even be knowing what he wants!","Yer stupid elephant! I'll tell yer again! Yer need to be entering the shed in the middle of the swamp while holding a dramenwood staff! Yer can make the Dramen staff from a dramen tree branch, and there's a Dramen tree on Entrana! You get to Entrana from Port Sarim! Now leave me alone yer great elephant!"], "icon": "/images/Shamus_chathead.png?989e1", "width": 92, "height": 123 }, "Sarim": { "initial": "Do you seek passage to holy Entrana? If so, you must leave your weaponry and armour behind. This is Saradomin's will.", "options": ["No, not right now","Yes, okay, I'm ready to go"], "effects": [{},{"dialogue":"Sarim2"}], "response": ["Very well.","NO WEAPONS OR ARMOUR are permitted on holy Entrana AT ALL. We will not allow you to travel there in breach of mighty Saradomin's edict. Come back when you have laid down your Zamorakian instruments of death."], "icon": "/images/Monk_of_Entrana_chathead.png?33896", "width": 103, "height": 102 }, "Sarim2": { "initial": "NO WEAPONS OR ARMOUR are permitted on holy Entrana AT ALL. We will not allow you to travel there in breach of mighty Saradomin's edict. Come back when you have laid down your Zamorakian instruments of death.", "options": ["Okay, I'll drop my Bronze dagger."], "effects": [{"questState":135,"trigger":8,"redirect":"https://oldschool.runescape.wiki/w/Entrana"}], "response": ["All is satisfactory. You may board the boat now. Welcome to Entrana."], "icon": "/images/Monk_of_Entrana_chathead.png?33896", "width": 103, "height": 102 }, "WiseOldManHelp135140": { "initial": "You should head to Entrana to talk to the monks there!", "options": [], "effects": [], "response": [], "icon": "/images/Wise_Old_Man_chathead.png?68f26", "width": 78, "height": 148 }, "Sarim3": { "initial": "I just operate the boat. Why don't you talk to an actual 'Monk' on Entrana for help?", "options": [], "effects": [], "response": [], "icon": "/images/Monk_of_Entrana_chathead.png?33896", "width": 103, "height": 102 }, "Entrana": { "initial": "Welcome to holy Entrana! Feel free to take a look around.", "options": ["Have you seen any dramen trees around?"], "effects": [{"questState":140}], "response": ["No, I haven't. I've heard legends that it only grows underground in dungeons. Talk to me again if you need any more help."], "icon": "/images/Monk_chathead.png?02814", "width": 62, "height": 81 }, "Entrana2": { "initial": "I hope you're enjoying your stay in holy Entrana away from the violence of the mainland.", "options": ["Do you know who I could ask about dramen trees?"], "effects": [{}], "response": ["I would try talking to the Cave monk who lives north of here. If anyone, he would know something."], "icon": "/images/Monk_chathead.png?02814", "width": 62, "height": 81 }, "CaveMonk": { "initial": "The dramen tree is here in the Entrana dungeon. Be careful going in there! You are unarmed, and there is much evilness lurking down there! The evilness seems to block off our contact with our gods, so our prayers seem to have less effect down there.", "options": ["I don't think I'm strong enough to enter then.","Well that is a risk I will have to take."], "effects": [{"trigger":4},{"dialogue":"TreeSpirit"}], "response": ["",""], "icon": "/images/Cave_monk_chathead.png?17eff", "width": 62, "height": 81 }, "TreeSpirit": { "initial": "A tree spirit suddenly appears and attacks you!", "options": ["Fight back with melee.","Use Water Wave."], "effects": [{"trigger":6},{"dialogue":"DramenBranch"}], "response": ["Oh dear, you are dead.","You successfully defeat the tree spirit! You see the dramen tree nearby and grab a dramen branch."], "icon": "/images/thumb/Tree_spirit_%28Lost_City%29.png/150px-Tree_spirit_%28Lost_City%29.png?2446d", "omitY":true, "width": 150, "height": 283 }, "DramenBranch": { "initial": "You successfully defeat the tree spirit! You see the dramen tree nearby and grab a dramen branch.", "options": ["Cut it with a knife."], "effects": [{"questState":150,"trigger":9}], "response": ["You have obtained a Dramen staff! Why don't you head to the shed to see what happens?"], "icon": "/images/thumb/Dramen_tree.png/200px-Dramen_tree.png?c073b", "omitY":true, "width": 200, "height": 331 }, "WiseOldManHelp150": { "initial": "Congratulations on getting the Dramen staff! Why don't you head to the shed to see what happens? The shed is located in the Lumbridge Swamp.", "options": [], "effects": [], "response": [], "icon": "/images/Wise_Old_Man_chathead.png?68f26", "width": 78, "height": 148 }, "DramenReminder": { "initial": "You have obtained the Dramen staff! Why don't you head to the shed to see what happens? The shed is located in the Lumbridge Swamp.", "options": [], "effects": [], "response": [], "icon": "/images/thumb/Dramen_staff_detail.png/150px-Dramen_staff_detail.png?83540", "omitY":true, "width": 150, "height": 152 }, "Swamp2": { "initial": "You approach the shed.", "options": ["Equip the Dramen staff and then enter the shed.","Enter the shed and then equip the dramen staff"], "effects": [{"questState":160,"redirect":"https://oldschool.runescape.wiki/w/Zanaris"},{}], "response": ["You enter the shed and everything starts to blur...","Nothing interesting happens."], "icon": "/images/thumb/Dramen_staff_detail.png/150px-Dramen_staff_detail.png?83540", "omitY":true, "width": 150, "height": 152 }, "Zanaris": { "initial": "Congratulations! You found the Lost City of Zanaris! Why don't you head over to see Jukat in the Zanaris Market Area to buy a Dragon dagger?", "options": ["Ok"], "effects": [{"trigger":4}], "response": [""], "icon": "/images/Wise_Old_Man_chathead.png?68f26", "width": 78, "height": 148 }, "Jukat": { "initial": "Dragon swords! Here, Dragon swords! Straight from Frenaskrae!", "options": ["Yes please.","No thanks, I'm just browsing."], "effects": [{"dialogue":"Jukat2"},{}], "response": ["Looks like you have exactly 30K coins to buy a Dragon dagger. I'll even throw in some free Weapon poison++!","Okay. Please come back if you would like to buy something."], "icon": "/images/Jukat_chathead.png?185bb", "width": 87, "height": 141 }, "Jukat2": { "initial": "Looks like you have exactly 30K coins to buy a Dragon dagger. I'll even throw in some free Weapon poison++!", "options": ["That sounds fine to me. Gimmie!"], "effects": [{"trigger":3,"questState":500,"dialogue":"Jukat3"}], "response": [""], "icon": "/images/Jukat_chathead.png?ba968", "width": 87, "height": 141 }, "Jukat3": { "initial": "", "trigger": 10, "options": [], "effects": [], "response": [], "icon": "/images/Lost_City_reward_scroll.png?1819e", "omitY": true, "width": 488, "height": 320 }, "Poor": { "initial": "", "options": [], "effects": [], "response": [], "icon": "/images/Wise_Old_Man_chathead.png?68f26", "width": 78, "height": 148 }, "OldWOM": { "initial": "Happy April Fools! Designed by Gau Cho for 2020 over the course of 1-2 weeks.", "options": [], "effects": [], "response": [], "icon": "/images/Wise_Old_Man_chathead.png?68f26", "width": 78, "height": 148 }, "FirstBlood": { "initial": "Holy Sherlock!", "questState": 1000, "options": ["Oups?"], "effects": [{}], "response": ["Looks like you unlocked an Achievement button at the top of the page!"], "icon": "/images/Wise_Old_Man_chathead.png?68f26", "width": 78, "height": 148 }, "SpiderDead": { "initial": "Oh dear, you are dead. Maybe you should get some Slayer gloves to avoid catching the Disease?", "trigger": 5, "options": [], "effects": [], "response": [], "icon": "/images/thumb/Death.png/145px-Death.png?71945", "width": 145, "height": 300 }, "AHDead": { "initial": "Oh dear, you are dead. Your Slayer level is not yet high enough to defeat this monster.", "trigger": 5, "options": [], "effects": [{}], "response": [], "icon": "/images/thumb/Death.png/145px-Death.png?71945", "width": 145, "height": 300 }, "Dead": { "initial": "Oh dear, you are dead.", "trigger": 5, "options": [], "effects": [{}], "response": [], "icon": "/images/thumb/Death.png/145px-Death.png?71945", "width": 145, "height": 300 }, "DeadBadWindow": { "initial": "Oh dear, you are dead. Your browser window dimensions seemed to have suddenly changed, making you trip and fall on your own sword.", "trigger": 5, "options": [], "effects": [], "response": [], "icon": "/images/thumb/Death.png/145px-Death.png?71945", "width": 145, "height": 300 }, "DeadCucco": { "initial": "", "trigger": 5, "options": [], "effects": [], "response": [], "icon": "/images/thumb/Death.png/145px-Death.png?71945", "width": 145, "height": 300 }, "CuccoEscape": { "initial": "", "options": [], "effects": [], "response": [], "icon": "/images/thumb/Chicken_%281%29.png/120px-Chicken_%281%29.png?a7258", "omitY": true, "width": 120, "height": 161 }, "AHEscape": { "initial": "You managed to teleport away from the Alchemical Hydra!", "options": [], "effects": [], "response": [], "icon": "/images/Orrvor_quo_Maten_chathead.png?f2e37", "width": 67, "height": 72 }, "SlayerWin": { "initial": "", "options": [], "effects": [], "response": [], "icon": "/images/Orrvor_quo_Maten_chathead.png?f2e37", "width": 67, "height": 72 }, "Rah": { "initial": "Raaa!", "trigger": 5, "options": [], "effects": [], "response": [], "icon": "/images/thumb/Penance_Runner_%28wave_1%29.png/180px-Penance_Runner_%28wave_1%29.png?97e46", "width": 180, "height": 326 }, "Slayer": { "initial": "'Ello, and what are you after then?", "options": ["I need another assignment.","Have you any rewards for me, or anything to trade?","Let's talk about the difficulty of my assignments.","Er... Nothing..."], "effects": [{},{},{},{"trigger":4}], "response": ["","","The Slayer Masters may currently assign you any task in our lists, regardless of your combat level.",""], }, "Nieve": { "initial": "...", "options": ["..."], "effects": [{"trigger":4}], "response": [""], "icon": "/images/thumb/Coffin_detail.png/130px-Coffin_detail.png?9d094", "width": 130, "height": 120 }, "FireCape": { "initial": "", "options": [], "effects": [], "response": [], "icon": "/images/TzHaar-Mej-Jal_chathead.png?df71e", "width": 94, "height": 106 }, "Invaders": { "initial": "", "options": [], "effects": [], "response": [], "icon": "/images/Captain_Cain_chathead.png?78f37", "width": 79, "height": 120 }, "AHscreen": { "initial": "You need a bigger screen area to fight the Alchemical Hydra! At least 1000x500!", "options": [], "effects": [], "response": [], "icon": "/images/Wise_Old_Man_chathead.png?68f26", "width": 78, "height": 148 }, "Crab": { "initial": "Reset all quest and achievement data?", "options": ["Yes","No"], "effects": [{"trigger":1},{}], "response": ["Done. Reload the page.","Okay, I won't."], "icon": "/images/thumb/Crab.png/220px-Crab.png?e81ce", "width": 220, "height": 168 }, "DisableCursor": { "initial": "Your cursor has been disabled! Reload the page for changes to take effect. But maybe I would consider re-enabling the cursor... who knows what could happen?", "options": [], "effects": [], "response": [], "icon": "", "omitY": true, "omitIcon": true, "width": 0, "height": 0 }, "EnableCursor": { "initial": "Your cursor has been re-enabled! Reload the page for changes to take effect. I wonder what mysteries are in store...", "options": [], "effects": [], "response": [], "icon": "", "omitY": true, "omitIcon": true, "width": 0, "height": 0 }, "CursorBye": { "initial": "You have unequipped your weapon! To get back into combat, re-equip a weapon and reload the page!", "options": [], "effects": [], "response": [], "icon": "/images/Wise_Old_Man_chathead.png?68f26", "width": 78, "height": 148 }, "SlashDDS": { "initial": "Why don't you try testing waving your new dagger at an easy NPC, such as a Cow or something?", "questState": 501, "options": ["Got it!"], "effects": [{"questState":502}], "response": ["Good luck! Don't hesitate to talk to me if you get stuck!"], "icon": "/images/Wise_Old_Man_chathead.png?68f26", "width": 78, "height": 148 },}var masters = { "Turael": { "icon": "/images/Turael_chathead.png?1b620", "width": 103, "height": 102 }, "Krystilia": { "icon": "/images/Krystilia_chathead.png?99a3f", "width": 119, "height": 167 }, "Mazchna": { "icon": "/images/Mazchna_chathead.png?47bb8", "width": 101, "height": 153 }, "Vannaka": { "icon": "/images/Vannaka_chathead.png?1b620", "width": 70, "height": 109 }, "Chaeldar": { "icon": "/images/Chaeldar_chathead.png?a7568", "width": 77, "height": 101 }, "Konar quo Maten": { "icon": "/images/Konar_quo_Maten_chathead.png?e0801", "width": 81, "height": 70 }, "Steve": { "icon": "/images/Steve_chathead.png?1b620", "width": 84, "height": 92 }, "Duradel": { "icon": "/images/Duradel_chathead.png?e91f3", "width": 66, "height": 102 },}function crab(conversationoverride,datum){ $('#crob').remove(); if(conversationoverride === undefined){ var questState = load("apr-queststate") if(questState === undefined){ return } if (mw.config.get('wgNamespaceNumber') != 0 && mw.config.get('wgNamespaceNumber') != 116) { return; } } var pagename = mw.config.get('wgTitle'); var namespace = mw.config.get('wgCanonicalNamespace'); var categories = mw.config.get('wgCategories'); var conversation = null; if(conversationoverride in dialogue){ conversation = dialogue[conversationoverride]; if(conversationoverride == "Poor"){ conversation.initial = "You are too poor to afford that item! You need "+datum+",000 GP to buy this item." } if(conversationoverride == "DeadCucco"){ conversation.initial = "Oh dear, you are dead. You survived the onslaught of "+datum+" Cuccos." } if(conversationoverride == "CuccoEscape"){ conversation.initial = "You managed to run away from the Cuccos after "+datum+" Cuccos appeared!" } if(conversationoverride == "FireCape"){ if(achievementsOpen){return} conversation.initial = "You even defeated TzTok-Jad, I am most impressed! Please accept this gift. Give cape back to me if you not want it. Your kill time was "+Math.floor(datum/100)/10+" seconds." } if(conversationoverride == "Invaders"){ conversation.initial = "Congratulations on defeating the Penance! It took you about "+Math.floor(datum/4)/10+" seconds!" } if(conversationoverride == "SlayerWin"){ if(achievementsOpen){return} conversation.initial = "Human! You have defeated the Alchemical Hydra! Your kill time was "+Math.floor(datum/100)/10+" seconds." } } else { if(questState === 1){ var WOMtime = (new Date).getTime(); var WOMchance = Math.max(0,Math.min(1,(WOMtime - 1585699200000)/86400000)) WOMchance = WOMchance*WOMchance+0.005 console.log(WOMchance) if(Math.random()<WOMchance){ conversation = dialogue["IntroPrompt"] } } if(questState > 1 && questState < 100) { save("apr-queststate",questState + 1) } if(questState == 100){ conversation = dialogue["IntroReminder"] } if(questState > 1 && questState <= 101) { if(pagename == "Wise Old Man"){ conversation = dialogue["WiseOldMan"] } } if(questState == 110) { if(pagename == "Wise Old Man"){ conversation = dialogue["WiseOldManHelp"] } if(pagename == "Lumbridge Swamp"){ conversation = dialogue["Swamp"] } if(pagename == "Archer (Lost City)"){ conversation = dialogue["Archer"] } if(pagename == "Monk (Lost City)"){ conversation = dialogue["Monk"] } if(pagename == "Wizard (Lost City)"){ conversation = dialogue["Wizard"] } if(pagename == "Warrior (Lost City)"){ conversation = dialogue["Warrior"] } } if(questState == 120) { if(pagename == "Wise Old Man"){ conversation = dialogue["WiseOldManHelp120"] } if(pagename == "Warrior (Lost City)"){ conversation = dialogue["Warrior4"] } if(pagename == "Shamus"){ conversation = dialogue["Shamus"] } } if(questState == 130) { if(pagename == "Wise Old Man"){ conversation = dialogue["WiseOldManHelp130"] } if(pagename == "Shamus"){ conversation = dialogue["Shamus5"] } if(pagename == "Port Sarim" || pagename == "Monk of Entrana"){ conversation = dialogue["Sarim"] } } if(questState == 135) { if(pagename == "Wise Old Man"){ conversation = dialogue["WiseOldManHelp135140"] } if(pagename == "Port Sarim" || pagename == "Monk of Entrana"){ conversation = dialogue["Sarim3"] } if(pagename == "Entrana" || pagename == "Monk" || pagename == "High Priest (Entrana)"){ conversation = dialogue["Entrana"] } } if(questState == 140) { if(pagename == "Wise Old Man"){ conversation = dialogue["WiseOldManHelp135140"] } if(pagename == "Entrana" || pagename == "Monk" || pagename == "High Priest (Entrana)"){ conversation = dialogue["Entrana2"] } if(pagename == "Cave monk" || pagename == "Entrana Dungeon" || pagename == "Tree spirit (Lost City)"){ conversation = dialogue["CaveMonk"] } } if(questState == 150) { if(pagename == "Wise Old Man"){ conversation = dialogue["WiseOldManHelp150"] } if(pagename == "Entrana" || pagename == "Monk of Entrana" || pagename == "Monk" || pagename == "High Priest (Entrana)" || pagename == "Cave monk" || pagename == "Entrana Dungeon" || pagename == "Dramen tree" || pagename == "Dramen staff" || pagename == "Dramen branch" || pagename == "Tree spirit (Lost City)"){ conversation = dialogue["DramenReminder"] } if(pagename == "Lumbridge Swamp"){ conversation = dialogue["Swamp2"] } } if(questState == 160) { if(pagename == "Zanaris" || pagename == "Wise Old Man"){ conversation = dialogue["Zanaris"] } if(pagename == "Jukat" || pagename == "Jukat (shop)"){ conversation = dialogue["Jukat"] } } if(questState >= 101 && questState <= 200){ if(pagename == "Lost City" || pagename == "Lost City/Quick guide"){ conversation = dialogue["Judged"] } } if(questState == 500){ if(pagename == "Wise Old Man" || Math.random()<0.2){ conversation = dialogue["SlashDDS"] } } if(questState == 501){ if(pagename == "Wise Old Man" || Math.random()<0.05){ conversation = dialogue["SlashDDS"] } } if(questState == 502){ if(pagename == "Wise Old Man"){ conversation = dialogue["SlashDDS"] } } if(questState >= 1000){ var slayerState = load("apr-slayerstate") if(slayerState <= 19){ if(pagename == "Nieve"){ conversation = dialogue["Nieve"] } } if(slayerState >= 1 && slayerState <= 19 && pagename in masters){ conversation = dialogue["Slayer"] if(slayerState == 1){ conversation.effects[0] = {"slayerState":2} conversation.response[0] = "Excellent, you're doing great. Your new task is to kill 13 fever spiders." } else if(slayerState >= 2 && slayerState <= 16) { conversation.effects[0] = {} var remaining = Math.min(13,17-slayerState) conversation.response[0] = "You're still hunting fever spiders; you have "+remaining+" to go. Come back when you've finished your task." } else if(slayerState == 17) { conversation.effects[0] = {"slayerState":18} conversation.response[0] = "Excellent, you're doing great. Your new task is to kill 1 Alchemical Hydra." } else if(slayerState == 18) { conversation.effects[0] = {} conversation.response[0] = "You're still hunting Alchemical Hydras; you have 1 to go. Come back when you've finished your task." } else if(slayerState == 19) { conversation.effects[0] = {"slayerState":20} conversation.response[0] = "Sorry, I don't have any more tasks for you right now. We need to practice sustainable Slaying to avoid depleting all the monsters in our environment." } if( (slayerState >= 1 && slayerState <= 2) || slayerState == 17 || slayerState == 19){ conversation.effects[1] = {} conversation.response[1]= "I have quite a few rewards you can earn, and a wide variety of Slayer equipment for sale. Come back if you realize you need any equipment." } else if(slayerState == 3){ conversation.effects[1] = {"slayerState":4} conversation.response[1]= "I hear you've been having trouble against the Fever spiders. Equip these Slayer gloves to protect against disease. Don't forget to wash your hands and practice social distancing." } else if(slayerState >= 4 && slayerState <= 16){ conversation.effects[1] = {} conversation.response[1]= "I already gave you some Slayer gloves! This will allow you to kill the Fever spiders." } else if(slayerState == 18){ conversation.effects[1] = {} conversation.response[1]= "You already got Boots of brimstone from the Grand Exchange. Why are you looking at me?" } conversation.icon = masters[pagename].icon conversation.width = masters[pagename].width conversation.height = masters[pagename].height save("apr-lastslayermaster",pagename) } if(slayerState == 3 && pagename == 'Slayer Equipment (shop)'){ pagename = load("apr-lastslayermaster") conversation = dialogue["Slayer"] conversation.response[0] = "You're still hunting fever spiders; you have 13 to go. Come back when you've finished your task." conversation.effects[1] = {"slayerState":4} conversation.response[1]= "I hear you've been having trouble against the Fever spiders. Equip these Slayer gloves to protect against disease. Don't forget to wash your hands and practice social distancing." conversation.icon = masters[pagename].icon conversation.width = masters[pagename].width conversation.height = masters[pagename].height } if(pagename == "Crab"){ conversation = dialogue["Crab"] } if(MD5(pagename) == "da3daba59031da284264382eaa6171e2"){ conversation = dialogue["OldWOM"] displayAchievement("OldWOM") } } } if(conversation === null){ return } var bubblex, chatboxx if(conversation.bubblex === undefined){ bubblex = conversation.width } else { bubblex = conversation.bubblex } if(conversation.chatboxx === undefined){ chatboxx = Math.max(200, bubblex+48) } else { chatboxx = conversation.chatboxx } var ybubble = '' if(!("omitY" in conversation)){ ybubble = "<div id=\"crob-speech-arrow\" style=' width: 0; position: relative; bottom: 3px; left: "+bubblex+"px; border-top: 15px solid #FFFDCC; border-left: 0 solid transparent; border-right: 10px solid transparent; filter: drop-shadow(-1px 1px 0 #000) drop-shadow(0 1px 0 #000);'></div>" } var $div = $("<div id=\"crob\" style='color: black; z-index: 999999999; position: fixed;bottom: 20px;left: 30px;'><div id=\"crob-speech\" style=' position: fixed;bottom: "+(36+conversation.height)+"px;left: 15px;background-color: #FFFDCC;width: "+chatboxx+"px;border: 1px solid black;border-radius: 7px;'><div id=\"crob-speech-text\" style=' margin: 7px 10px;font-family: Arial;font-size: 13px;'></div></div>"+ybubble+"<div id=\"crob-icon\" style=\"background: url("+conversation.icon+") no-repeat;height:"+conversation.height+"px;width:"+conversation.width+"px\"></div></div>") var $buttons = $("<div id=\"crob-speech-buttons\" style=' font-family: Arial;font-size: 14px;position: relative;text-align: center;border-top: 1px solid #C2C2C2;bottom: 0;margin: 7px 7px 10px 7px;'></div>") var $button = $("<button class=\"crob-button\" style=' background-color: #FFFDCC;border: 1px solid #C2C2C2;border-radius: 3px;padding: 5px 12px;margin: 10px 5px 0 5px;'>No</button>") $('#firstHeading').after($div); $("#crob-speech-text").html(conversation.initial); if (conversation.options.length > 0) { $("#crob-speech-text").after($buttons); } if("omitY" in conversation){ $("crob-speech-arrow").remove() } if("omitIcon" in conversation){ $("crob-icon").remove() } var onClick = function(event) { $("#crob-speech-text").html($(event.target).attr('data-response')); $("#crob-speech-buttons").remove(); if('questState' in event.data){ save("apr-queststate",event.data.questState) } if('slayerState' in event.data){ save("apr-slayerstate",event.data.slayerState) } if('trigger' in event.data){ if(event.data.trigger == 1){ localStorage.removeItem("apr-queststate") localStorage.removeItem("apr-weapon") localStorage.removeItem("apr-weapon-inv") localStorage.removeItem("apr-weapon-buy") localStorage.removeItem("apr-achievementlist") localStorage.removeItem("apr-totalkills") localStorage.removeItem("apr-lightdark") localStorage.removeItem("apr-gp") localStorage.removeItem("apr-gp-total") localStorage.removeItem("apr-slayerstate") localStorage.removeItem("apr-lastslayermaster") localStorage.removeItem("apr-gadgetenabled") } else if(event.data.trigger == 2){ save("apr-queststate",160) localStorage.removeItem("apr-weapon") localStorage.removeItem("apr-weapon-inv") localStorage.removeItem("apr-weapon-buy") localStorage.removeItem("apr-achievementlist") localStorage.removeItem("apr-totalkills") localStorage.removeItem("apr-lightdark") localStorage.removeItem("apr-gp") localStorage.removeItem("apr-gp-total") localStorage.removeItem("apr-slayerstate") localStorage.removeItem("apr-lastslayermaster") localStorage.removeItem("apr-gadgetenabled") } else if(event.data.trigger == 3){ save("apr-weapon",['Dragon dagger(p++)','0 0','red']) enableDDS(['Dragon dagger(p++)','0 0','red']); } else if(event.data.trigger == 4){ $("#crob-speech,#crob-speech-arrow").remove() } else if(event.data.trigger == 6){ disableDDS(["/images/Skull_%28status%29_icon.png?fa6d8","13 0",'white']) } else if(event.data.trigger == 7){ $('#crob').remove(); } else if(event.data.trigger == 8){ save("apr-weapon",['Windows','0 0','white']) disableDDS(['Windows','0 0','white']); } else if(event.data.trigger == 9){ save("apr-weapon",['Dramen staff','6 0','brown']) disableDDS(['Dramen staff','6 0','brown']); } else if(event.data.trigger == 11){ displayAchievement("FirstHit") achievements.forEach(function(achievement,achievementref){ displayAchievement(achievementref) }) } } if('dialogue' in event.data){ $('#crob').remove(); crab(event.data.dialogue) } if('redirect' in event.data){ window.location.href = event.data.redirect; } } for (var i = 0; i < conversation.options.length; i++) { var butt = $button.clone(); butt.text(conversation.options[i]) butt.attr("data-response", conversation.response[i]) butt.click(conversation.effects[i],onClick); $("#crob-speech-buttons").append(butt); } if('questState' in conversation){ save("apr-queststate",conversation.questState); } if('trigger' in conversation){ if(conversation.trigger == 4){ $("#crob-speech,#crob-speech-arrow").remove() } else if(conversation.trigger == 5){ disableDDS(["/images/Skull_%28status%29_icon.png?fa6d8","13 0","white"]) displayAchievement("Died"); } else if(conversation.trigger == 10){ $("#crob-speech,#crob-speech-arrow").remove() $('<div id="crob-X" style="width:23px;height:23px;left:414px;position:relative;top:50px;cursor:default;"></div>').appendTo($('div#crob > div')).click(function(){$('#crob').remove();}) } }}function AH(npc){ $(document).mouseleave(function () { if(DDSenabled){ DDSenabled = false crab("AHEscape") } }); var AHRanged = function(npc,offsetx,offsety){ var startx = npc.dom.getBoundingClientRect().left + npc.width/2 + offsetx var starty = npc.dom.getBoundingClientRect().top + npc.height/2 + offsety projectileTracked("/images/Alchemical_Hydra_ranged_projectile.png?2a2bc","apr-hydra-ranged",80,80/1561*585,startx,starty,20,150,0) } var AHMagic = function(npc,offsetx,offsety){ var startx = npc.dom.getBoundingClientRect().left + npc.width/2 + offsetx var starty = npc.dom.getBoundingClientRect().top + npc.height/2 + offsety projectileTracked("/images/Alchemical_Hydra_magic_projectile.png?2a2bc","apr-hydra-magic",50,50/1013*592,startx,starty,20,150,0.3914051281252104) } var AHFire = function(npc,remaining){ if(npc.phase == 3 || !DDSenabled){ return } var curX = lastX var curY = lastY setTimeout(burnOver,900,"/images/Alchemical_Hydra_flame_wall_attack.png?2a2bc","apr-hydra-burn",curX,curY,250*resizeratio,250*resizeratio,300,10000,true,"#protectMelee") if(remaining>0){ setTimeout(AHFire,1200,npc,remaining-1) } } var AHTornado = function(startX,startY){ seekerMissile("/images/Alchemical_Hydra_lightning_attack.png?2a2bc","apr-hydra-tornado",250*resizeratio,250*resizeratio,startX,startY,300,20*resizeratio,250*resizeratio,600,-10) } var AHAttack = function(npc){ if(width != $(window).width() || height != $(window).height()){ crab("DeadBadWindow") } if(npc.skipattack > 0){ npc.skipattack -= 1 } else if(npc.specialtimer == 0){ npc.specialtimer = 9 if(npc.phase == 0 || npc.phase == 3){ burnOver("/images/Alchemical_Hydra_acid_pool_attack.png?2a2bc","apr-hydra-poison",lastX,lastY,250*resizeratio,250*resizeratio,600,10000,true,"#protectMelee") for (var i = 0; i < 4; i++) { setTimeout(function(){ burnOver("/images/Alchemical_Hydra_acid_pool_attack.png?2a2bc","apr-hydra-poison",Math.random()*width,Math.random()*height,250*resizeratio,250*resizeratio,600,10000,true,"#apr-hydra-vent-red") },600) } } if(npc.phase == 1){ i = 0 var attempts = 0 while(i<4){ var startX = Math.random()*width var startY = Math.random()*height var dist = getDist(startX-lastX,startY-lastY) if(dist < 350){ attempts += 1 if(attempts > 1000){ crab("Dead") break } } else { i += 1 AHTornado(startX,startY) } } } if(npc.phase == 2){ AHFire(npc,11) } } else { npc.specialtimer -= 1 if(npc.mainattackswitch == 0){ npc.mainattack = 1-npc.mainattack if(npc.phase == 3){ npc.mainattackswitch = 1 } else { npc.mainattackswitch = 3 } } npc.mainattackswitch -= 1 if(npc.mainattack == 0){ prayerKillDelay("Ranged",600) AHRanged(npc,43,-70) if(npc.phase <= 1){ AHRanged(npc,0,0) } } else { prayerKillDelay("Magic",600) AHMagic(npc,-57,-90) if(npc.phase <= 0){ AHMagic(npc,-100,-18) } } } if(DDSenabled && !npc.dead){ setTimeout(AHAttack,3600,npc) } } $('body').css("overflow","hidden") var width = $(window).width() var height = $(window).height() var resizeratio = Math.max(1,Math.sqrt(width/1903*height/976)) if(width<1000){ crab("AHscreen") DDSenabled = false; return } if(height<500){ crab("AHscreen") DDSenabled = false; return } var main = $('<div class="apr-hydra"/>').appendTo('body') $(npc.dom).attr("src",ahimg[0]) $(npc.dom.parentElement.parentElement).appendTo(main) $(npc.dom.parentElement).css("left",(width-npc.width)/2) $(npc.dom.parentElement).css("top",(height-npc.height)/2) $(npc.dom.parentElement).css("position","absolute") $(npc.dom.parentElement).prop("fixed","true") $('<img id="apr-hydra-vent-red" class="apr-hydra-vent" src="/images/Alchemical_Hydra_red_vent.png?c2c96" style="left:0px;top:'+(height-250)+'px">').prependTo(main).prop("top",(height-200)) $('<img id="apr-hydra-vent-green" class="apr-hydra-vent" src="/images/Alchemical_Hydra_green_vent.png?c2c96" style="left:'+(width-250)+'px;top:0px">').prependTo(main).prop("left",(width-200)) $('<img id="apr-hydra-vent-blue" class="apr-hydra-vent" src="/images/Alchemical_Hydra_blue_vent.png?c2c96" style="left:0px;top:0px">').prependTo(main) $("#p-personal").remove() $("div.menu").remove() $("div.suggestions").remove() setupPrayer() AHAttack(npc)}var ahimg = [ "/images/thumb/Alchemical_Hydra_%28serpentine%29.png/272px-Alchemical_Hydra_%28serpentine%29.png?925dd", "/images/thumb/Alchemical_Hydra_%28electric%29.png/230px-Alchemical_Hydra_%28electric%29.png?925dd", "/images/thumb/Alchemical_Hydra_%28fire%29.png/234px-Alchemical_Hydra_%28fire%29.png?925dd", "/images/thumb/Alchemical_Hydra_%28extinguished%29.png/234px-Alchemical_Hydra_%28extinguished%29.png?925dd"]function AHhit(npc){ var left = parseFloat($(npc.dom.parentElement).css("left")) var top = parseFloat($(npc.dom.parentElement).css("top")) if(npc.accuracy == 0.25){ if(npc.phase == 0){ if(left<200 && (top+npc.height)>$("#apr-hydra-vent-red").prop("top")){ npc.accuracy = 1; } } if(npc.phase == 1){ if(top<200 && (left+npc.width)>$("#apr-hydra-vent-green").prop("left")){ npc.accuracy = 1; } } if(npc.phase == 2){ if(top<200 && left<200){ npc.accuracy = 1; } } } if(npc.hits == (npc.phase+1)*80){ npc.phase = npc.hits/80 $(npc.dom).attr("src",ahimg[npc.phase]) npc.specialtimer = 3 if(npc.phase == 3){ npc.mainattackswitch = 0 npc.accuracy = 1 } else { npc.accuracy = 0.25 } npc.skipattack = 1 }}function Cucco(){ $('body').css("overflow","hidden") var width = $(window).width() var height = $(window).height() if(width/height > 0.25 && width/height < 4){ var cuccoCount = 0 var cuccoSpawned = 0 var basex = Math.floor(Math.sqrt(width*height/100/1.35)); var basey = Math.floor(Math.sqrt(width*height/100/1.35)*1.35); var body = $('body') $("#p-personal").remove() $("div.menu").remove() $("div.suggestions").remove() $(document).mouseleave(function () { if(DDSenabled){ DDSenabled = false crab("CuccoEscape",cuccoSpawned) } }); var cuccoAttack = function(){ cuccoCount += 1 if(width != $(window).width() || height != $(window).height()){ crab("DeadBadWindow") } if(Math.random()<0.5){ cuccoSpawned += 1 var img = ['/images/thumb/Chicken_%281%29.png/89px-Chicken_%281%29.png?a7258','/images/thumb/Chicken_%282%29.png/89px-Chicken_%282%29.png?ec54e','/images/thumb/Chicken_%283%29.png/88px-Chicken_%283%29.png?22962','/images/thumb/Chicken_%284%29.png/88px-Chicken_%284%29.png?e1827','/images/thumb/Chicken_%285%29.png/88px-Chicken_%285%29.png?bf9d3','/images/thumb/Chicken_%286%29.png/88px-Chicken_%286%29.png?0f7e8'] var cucco = $("<img class='apr-cucco' src='"+img[Math.floor(Math.random()*6)]+"'>") cucco.css("position","fixed"); cucco.css("top",Math.random()*height-basey/2+'px'); cucco.css("left",(-basey)+'px'); cucco.css("width",basex+'px'); cucco.css("height",basey+'px'); cucco.css("transform",'rotate('+Math.random()+'turn)'); $('.mwe-popups').remove() body.append(cucco) cucco.hover(function(){ if(DDSenabled){ crab("DeadCucco",cuccoSpawned) } }) } $('.apr-cucco').each(function(){ var newx = parseInt($(this).css("left"))+width/80 if(newx>width+basex){ $(this).remove() } else { $(this).css("left",newx) } }) if(cuccoSpawned == 200){ displayAchievement("Cucco") } if(DDSenabled){ setTimeout(cuccoAttack,50) } } cuccoAttack() } else { crab("DeadBadWindow") }}function attackOver(icon,classname,sizex,sizey,duration){ var attack = $("<img class='"+classname+"' src='"+icon+"'>") attack.css("position","fixed"); attack.css("top",lastY-sizey/2+'px'); attack.css("left",lastX-sizex/2+'px'); attack.css("width",sizex+'px'); attack.css("height",sizey+'px'); $('body').append(attack) setTimeout(function(){attack.remove()}, duration);}function burnOver(icon,classname,x,y,sizex,sizey,hoverdelay,duration,randomrotation,jquerytarget){ var attack = $("<img class='"+classname+"' src='"+icon+"'>") attack.css("position","fixed"); attack.css("top",y-sizey/2+'px'); attack.css("left",x-sizex/2+'px'); attack.css("width",sizex+'px'); attack.css("height",sizey+'px'); if(randomrotation){ attack.css("transform","rotate("+Math.random()+"turn)") } $(jquerytarget).after(attack) setTimeout(function(){ attack.detach() attack.addClass("apr-burndone") attack.hover(function(){ if(DDSenabled){ crab("Dead") } }) $(jquerytarget).after(attack) },hoverdelay) setTimeout(function(){attack.remove()},duration);}function seekerMissile(icon,classname,sizex,sizey,startx,starty,frames,speed,diameter,durationout,baserotation){ var attack = $("<img class='"+classname+"' src='"+icon+"'>") var x = startx-sizex/2 var y = starty-sizey/2 attack.css("position","fixed"); attack.css("left",x+'px'); attack.css("top",y+'px'); attack.css("width",sizex+'px'); attack.css("height",sizey+'px'); var deltax = (lastX-sizex/2-x) var deltay = (lastY-sizey/2-y) if(baserotation!=-10){ attack.css("transform","rotate("+(Math.atan2(deltay,deltax)+baserotation)+"rad)") } $('body').append(attack) var seekerMissilePosition = function(attack,sizex,sizey,x,y,frames,speed,radius,durationout,baserotation){ var deltax = (lastX-sizex/2-x) var deltay = (lastY-sizey/2-y) var dist = getDist(deltax,deltay) if(dist<speed){ x = lastX y = lastY } else { x = x + deltax/dist*speed y = y + deltay/dist*speed } attack.css("left",x+'px'); attack.css("top",y+'px'); if(baserotation!=-10){ attack.css("transform","rotate("+(Math.atan2(deltay,deltax)+baserotation)+"rad)") } if(dist<radius/2){ if(DDSenabled){ crab("Dead") } setTimeout(function(){attack.remove()}, durationout); } else { if(frames == 1){ setTimeout(function(){attack.remove()}, durationout); } else { setTimeout(seekerMissilePosition,33,attack,sizex,sizey,x,y,frames-1,speed,radius,durationout,baserotation); } } } setTimeout(seekerMissilePosition,33,attack,sizex,sizey,x,y,frames-1,speed,diameter/2,durationout,baserotation);}function projectileTracked(icon,classname,sizex,sizey,startx,starty,frames,durationout,baserotation){ var attack = $("<img class='"+classname+"' src='"+icon+"'>") var x = startx-sizex/2 var y = starty-sizey/2 attack.css("position","fixed"); attack.css("left",x+'px'); attack.css("top",y+'px'); var deltax = (lastX-sizex/2-x) var deltay = (lastY-sizey/2-y) if(baserotation!=-10){ attack.css("transform","rotate("+(Math.atan2(deltay,deltax)+baserotation)+"rad)") } $('body').append(attack) var projectileTrackedPosition = function(attack,sizex,sizey,x,y,frames,durationout,baserotation){ var deltax = (lastX-sizex/2-x)/frames var deltay = (lastY-sizey/2-y)/frames x = x + deltax y = y + deltay attack.css("left",x+'px'); attack.css("top",y+'px'); if(baserotation!=-10){ attack.css("transform","rotate("+(Math.atan2(deltay,deltax)+baserotation)+"rad)") } if(frames == 1){ setTimeout(function(){attack.remove()}, durationout); } else { setTimeout(projectileTrackedPosition,33,attack,sizex,sizey,x,y,frames-1,durationout,baserotation); } } setTimeout(projectileTrackedPosition,33,attack,sizex,sizey,x,y,frames-1,durationout,baserotation);}function barrage(npc){ var barra = $("<img class='apr-barrage' src='/images/Ice_Barrage_iceblock.png?b4915'>") barra.css("position","fixed"); barra.css("top",lastY-173/2+'px'); barra.css("left",lastX-100/2+'px'); $('body').append(barra) crab("Dead"); displayAchievement("Wombat") setTimeout(function(){barra.remove()}, 2000);}function prayerKill(style){ if(curPrayer != style && DDSenabled){ crab("Dead") }}function prayerKillDelay(style,timeout){ if(curPrayer != style && DDSenabled){ setTimeout(crab,timeout,"Dead") }}var curPrayer = ""function setPrayer(e){ $('.apr-prayer-highlight').css("opacity",0) if(e.data == curPrayer){ curPrayer = "" } else { curPrayer = e.data $('#apr-prayer-highlight-'+curPrayer).css("opacity",1) }}function setupPrayer(){ $('<div class="apr-prayer-background">').appendTo($('body')) $('<div id="apr-prayer-highlight-Magic" class="apr-prayer apr-prayer-highlight" style="right:128px"></div><div id="protectMagic" class="apr-prayer apr-prayer-icon" style="right:128px;background-image:url(/images/Protect_from_Magic.png?5c9d8)"></div>').appendTo($('body')).click("Magic",setPrayer) $('<div id="apr-prayer-highlight-Ranged" class="apr-prayer apr-prayer-highlight" style="right:92px"></div><div id="protectRanged" class="apr-prayer apr-prayer-icon" style="right:92px;background-image:url(/images/Protect_from_Missiles.png?686a4)"></div>').appendTo($('body')).click("Ranged",setPrayer) $('<div id="apr-prayer-highlight-Melee" class="apr-prayer apr-prayer-highlight" style="right:56px"></div><div id="protectMelee" class="apr-prayer apr-prayer-icon" style="right:56px;background-image:url(/images/Protect_from_Melee.png?65856"></div>').appendTo($('body')).click("Melee",setPrayer)}var TTJlist = { "Ma":"/images/TzTok-Jad_magic_attack.png?0b424", "Me":"/images/TzTok-Jad_melee_attack.png?0b424", "N":"/images/TzTok-Jad_neutral_pose.png?0b424", "R1":"/images/TzTok-Jad_ranged_attack_part_1.png?0b424", "R2":"/images/TzTok-Jad_ranged_attack_part_2.png?0b424", }var TTJhover = falsefunction TTJ(npc){ var TTJon = function(){TTJhover = true} var TTJoff = function(){TTJhover = false} $(npc.dom).hover(TTJon,TTJoff) setupPrayer() var TTJAttack = function(npc){ var TTJNormalAnim = function(npc){ npc.dom.src = TTJlist["N"] npc.dom.srcset = TTJlist["N"] } var TTJRange2Anim = function(npc){ npc.dom.src = TTJlist["R2"] npc.dom.srcset = TTJlist["R2"] } var TTJMage = function(npc){ npc.dom.src = TTJlist["Ma"] npc.dom.srcset = TTJlist["Ma"] setTimeout(TTJNormalAnim,2400,npc) setTimeout(prayerKillDelay,1800,"Magic",1000) setTimeout(function(){ var startx = npc.dom.getBoundingClientRect().left + 50 var starty = npc.dom.getBoundingClientRect().top + 100 projectileTracked("/images/TzTok-Jad_magic_projectile.png?c6ae1","apr-ttj-magic",100,94,startx,starty,30,300,0.7853981633974483) },1800) } var TTJRange = function(npc){ npc.dom.src = TTJlist["R1"] npc.dom.srcset = TTJlist["R1"] setTimeout(TTJRange2Anim,300,npc) setTimeout(TTJNormalAnim,600,npc) setTimeout(prayerKillDelay,1800,"Ranged",600) setTimeout(function(){attackOver("/images/TzTok-Jad_ranged_projectile.png?c6ae1","apr-ttj-ranged",100,193,600)},1800) } var TTJMelee = function(npc){ npc.dom.src = TTJlist["Me"] npc.dom.srcset = TTJlist["Me"] setTimeout(TTJNormalAnim,600,npc) prayerKill("Melee") } if(npc.dead || !DDSenabled){return} var atk = Math.random()*(2+TTJhover) if(atk<1){ TTJMage(npc) } else if(atk<2){ TTJRange(npc) } else { TTJMelee(npc) } if(!npc.dead && DDSenabled){ setTimeout(TTJAttack,4800,npc) } } setTimeout(TTJAttack,1200,npc)}function NPC(dom){ this.hp = 10 this.accuracy = 1 this.hits = 0 this.dead = false this.speed = 500 this.dom = dom; this.mechanics = false if(achievementsOpen){ this.accuracy = 0.2 this.hp =5 } else { var query = MD5(mw.config.get('wgTitle')) if(query == "4f66ec58eb4e9d48b01a7480c51c89b4"){ this.hp = 5 if(load("apr-slayerstate")<=3){ this.accuracy = 0; } } if(query == "09ec2c80c276b958ef255c6120cbe97a"){ this.hp = 1 this.speed = 1000 } if(query == "e8f65c7327e4ae90e767afc30a709419"){ this.accuracy = 0; this.mechanics = 1; this.angry = false; } if(query == "a9514f8884af954749b66932d8a95a76"){ this.accuracy = 0; this.mechanics = 2; this.angry = false; disableHighlight(); } if(query == "b31eb4b7a63bfaa339c679b86445b700" || query == "789ef204f9b93cc224a4e25694691684"){ this.hp = 1 this.accuracy = 0.3 } if(query == "7dd8d4d08aa31a5c516f21d40a03c8a5"){ this.hp = 60 this.accuracy = 0.5 this.angry = false; this.mechanics = 3 this.speed = 2000 bossTimer = Date.now() disableHighlight(); } if(query == "b2df76532200e6522fd6da3967e7c94c" || query == "2586a16a520a2c20d7309b799a627f22"){ this.mechanics = 4; this.angry = false; disableHighlight(); } if(query == "fd9cf477745dbeee730e23af6a81a887"){ this.hp = 50 } if(query == "f06eb95413908c7a0be080f82e1f4d56"){ this.hp = 80*4; this.mechanics = 5; this.accuracy = 0.25 this.angry = false; this.speed = 2000 this.phase = 0 this.mainattack = 0 this.mainattackswitch = 3 this.specialtimer = 3 this.skipattack = 1 this.width = 270 this.height = 298 bossTimer = Date.now() disableHighlight(); } if(query == "324696af5d4cb32efd2594c463cc56cc"){ this.hp = 1 this.speed = 1000 } if(query == "04f12d4923ec5069ac75e6d364b719cb"){ this.hp = 1 this.speed = 1000 disableHighlight(); } }}var wepcolor = 'red'function linedraw(x1, y1, x2, y2) { var tmp if (x2 < x1) { tmp = x2 ; x2 = x1 ; x1 = tmp tmp = y2 ; y2 = y1 ; y1 = tmp } var lineLength = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2)); var m = (y2 - y1) / (x2 - x1) var degree = Math.atan(m) * 180 / Math.PI $('body').append("<div class='osrs_dds line' style='transform-origin: top left; transform: rotate(" + degree + "deg); width: " + lineLength + "px; height: 1px; background: "+wepcolor+"; position: absolute; top: " + y1 + "px; left: " + x1 + "px;'></div>")}function mouseDown(e){ if(e.which == 1){ mouseStateDown=true; }}function mouseUp(e){ if(e.which == 1){ mouseStateDown=false; $(".osrs_dds").remove(); }}function killNPC(npc, el ) { npc.dead = true; save("apr-totalkills",load("apr-totalkills")+1) updateDarkModeAchievement(); checkAchievementKillCount(); loggedInAchievement(); checkAchievementSimples(npc); slayerAchievements(); var seconds = npc.speed/1000; var children = $(el).children("img"); children.css("transition","opacity "+seconds+"s ease") children.css("opacity",0) setTimeout(function() { $(el.parentElement).remove(); }, npc.speed);}var lastX = 0var lastY = 0function mouseMove(e){ lastX = e.clientX lastY = e.clientY if(mouseStateDown && DDSenabled){ linedraw(e.pageX-e.movementX,e.pageY-e.movementY,e.pageX,e.pageY) if(e.target.parentElement.classList.contains("hittable")){ var curTime = Date.now() if(lastHit+200<curTime){ lastHit = curTime if(typeof e.target.npcid === "undefined"){ e.target.npcid = NPCarray.length NPCarray[NPCarray.length] = new NPC(e.target) } var npc = NPCarray[e.target.npcid]; if(npc.mechanics == 3 && !npc.angry){ npc.angry = true; TTJ(npc); } else if(npc.mechanics == 5 && !npc.angry){ if(load("apr-slayerstate")<=17){ crab("AHDead") return } else { npc.angry = true; AH(npc); } } if(npc.accuracy>Math.random()){ displayAchievement("FirstHit"); npc.hits += 1 var splat if(npc.hits >= npc.hp){ if(!npc.dead){ splat = $("<img class='apr-hitsplat' style='left:"+(e.target.parentElement.offsetWidth*Math.random()-12)+"px;top:"+(e.target.parentElement.offsetHeight*Math.random()-12)+"px' src='/images/73.png?ba00a'>").appendTo(e.target.parentElement).prop("npcid",e.target.npcid) setTimeout(function(){splat.remove()},6000) killNPC(npc,e.target.parentElement) } } else { splat = $("<img class='apr-hitsplat' style='left:"+(e.target.parentElement.offsetWidth*Math.random()-12)+"px;top:"+(e.target.parentElement.offsetHeight*Math.random()-12)+"px' src='/images/73.png?ba00a'>").appendTo(e.target.parentElement).prop("npcid",e.target.npcid) setTimeout(function(){splat.remove()},6000) if(npc.mechanics == 4 && !npc.angry){ npc.angry = true; npc.dom.parentElement.remove() Invaders() } else if(npc.mechanics == 5 && npc.angry){ AHhit(npc) } } } else { splat = $("<img class='apr-hitsplat' style='left:"+(e.target.parentElement.offsetWidth*Math.random()-12)+"px;top:"+(e.target.parentElement.offsetHeight*Math.random()-12)+"px' src='/images/Zero_hitsplat.png?482dd'>").appendTo(e.target.parentElement).prop("npcid",e.target.npcid) setTimeout(function(){splat.remove()},6000) if(MD5(mw.config.get('wgTitle')) == "4f66ec58eb4e9d48b01a7480c51c89b4"){ var slayerState = load("apr-slayerstate") if(slayerState <= 3){ if(slayerState >= 2){ save("apr-slayerstate",3) crab("SpiderDead"); } else { crab("Dead"); } } } if(npc.mechanics == 1 && !npc.angry){ npc.angry = true; setTimeout(barrage, 4000, npc); } if(npc.mechanics == 2 && !npc.angry){ npc.angry = true; Cucco(); } } } } }}function enableDDS(weapon){ DDSenabled = true; setWeapon(weapon,false)}function disableDDS(weapon){ DDSenabled = false; setWeapon(weapon,false)}function setWeapon(weapon,checkBye){ wepcolor = weapon[2]; if(weapon[0]=='Windows'){ $('body').css('cursor','') DDSenabled = false; if(load('apr-queststate')>=1000 && checkBye){ setTimeout(crab,50,"CursorBye") } } else if(weapon[0][0] == '/') { $('body').css('cursor','url('+weapon[0]+') '+weapon[1]+',pointer') } else { $('body').css('cursor','url('+getFileURL(weapon[0]+' cursor.png')+') '+weapon[1]+',pointer') }}function checkAchievementKillCount(){ var pagekills = 0 var totalkills = load("apr-totalkills") for(var i=0; i<NPCarray.length; i++){ pagekills += NPCarray[i].dead } if(totalkills>=1000){ displayAchievement("Total1000Kill"); } else if(totalkills>=50){ displayAchievement("Total100Kill"); } else if(totalkills>=10){ displayAchievement("Total10Kill"); } if(pagekills >= 5){ displayAchievement("Page5Kill"); }}function updateDarkModeAchievement(){ var mode = getCookie("darkmode") var lightdark = load("apr-lightdark") if(mode === false || mode === "false"){ lightdark[0] = true; } else { lightdark[1] = true; } save("apr-lightdark",lightdark) if(lightdark[0] && lightdark[1]){ displayAchievement("LightDark") }}function slayerAchievements(){ var slayerState = load("apr-slayerstate") if(slayerState >= 4){ if(MD5(mw.config.get('wgTitle')) == "4f66ec58eb4e9d48b01a7480c51c89b4") { if(slayerState < 17){ slayerState += 1 save("apr-slayerstate",slayerState) var width = $(window).width() var height = $(window).height() var itemz = $('<img src="'+getFileURL(mw.config.get('wgTitle')+'.png')+'" width="60" height="40">') itemz.css("transform",'rotate('+Math.random()+'turn)'); itemz.prop("fixed","true") var itema = $('<span class="hittable bumper spinny"></span>').append(itemz) itema.css("left",Math.random()*(width-60-300)) itema.css("top",Math.random()*(height-60)) itema.css("position","absolute") var itemb = $('<span class="hittabletop"></span>').append(itema) $(".mw-parser-output").append(itemb) } if(slayerState>=17){ displayAchievement("Slayer") } } } if(slayerState >= 18){ if(MD5(mw.config.get('wgTitle')) == "f06eb95413908c7a0be080f82e1f4d56") { if(slayerState == 18){ slayerState += 1 save("apr-slayerstate",slayerState) } if(slayerState>=19){ crab("SlayerWin",Date.now() - bossTimer) displayAchievement("Slayer2") } } }}function loggedInAchievement(){ if(mw.config.get("wgUserName")){ displayAchievement("LoggedIn") }}function checkAchievementSimples(npc){ if(achievementsOpen){ displayAchievement("Inception") } else { var query = MD5(mw.config.get('wgTitle')) if(query == "a8e0286c13b376010251a761326a4b61" || query == "78698ef9be047049e324fbf8762e49e3" || query == "3e3411dc9821e95190da5b609451029f" || query == "e138090effb008476982705d2a74857d") { displayAchievement("CerealKiller") } if(query == "09ec2c80c276b958ef255c6120cbe97a"){ displayAchievement("73") } if(query == "50b168de95e4814306c14fb2b14fb8d2" || query == "0bedb1f1643387b05f11d102b6652815"){ displayAchievement("HandBite") } if(query == "b31eb4b7a63bfaa339c679b86445b700" || query == "789ef204f9b93cc224a4e25694691684"){ var wep = load("apr-weapon") if(wep[0] == "Dragon dagger(p++)"){ save("apr-weapon",['Dragon dagger','0 0','red']) enableDDS(['Dragon dagger','0 0','red']); displayAchievement("Dishwasher") } } if(query == "5fdea4b55ecfc08b41b2e00f20e0e77e" || query == "0a671d6817c73446d1f2603796ba243a" || query == "9d41e8047e0a8e8b4434f117b4f1aa7d"){ var wep2 = load("apr-weapon") if(wep2[0] == "Dragon dagger"){ save("apr-weapon",['Dragon dagger(p++)','0 0','red']) enableDDS(['Dragon dagger(p++)','0 0','red']); displayAchievement("Herbalist") } } if(query == "7dd8d4d08aa31a5c516f21d40a03c8a5"){ crab("FireCape",Date.now() - bossTimer) displayAchievement("FireCape") } if(query == "1f54189f4d37bb3eeacf73027c8d6667"){ displayAchievement("Announce") } if(MD5(query) == "1885ba58ea6e51744e1938e166151112"){ var wep3 = MD5(load("apr-weapon")[0]) if(wep3 == "5c4f94f3be5e790ad8d5c058b69c037f" || wep3 == "b60c371438a43749555f0a4cbaeceeff"){ displayAchievement("Uncle") } } if(query == "324696af5d4cb32efd2594c463cc56cc"){ var wep4 = load("apr-weapon") if(wep4[0] == "Dragon scimitar"){ save("apr-weapon",['Dragon scimitar (or)','0 0','rgb(183,137,21)']) enableDDS(['Dragon scimitar (or)','0 0','rgb(183,137,21)']); displayAchievement("Trimmed") } else if(wep4[0] == "Dragon scimitar (or)"){ save("apr-weapon",["Dragon scimitar","0 0","red"]) enableDDS(["Dragon scimitar","0 0","red"]); displayAchievement("Trimmed") } } if(query == "fd9cf477745dbeee730e23af6a81a887"){ displayAchievement("GetBond") } }}var mouseStateDown = false;var DDSenabled = false;var lastHit = 0;var bossTimer = 0;var NPCarray = [];function Invaders(){ function getHeight(i){ if(i<2){ return 6 } return 4 } function updateDom(enemy){ if(enemy.y < 0){ enemy.dom.css("display","none") } else { enemy.dom.css("left",leftoffset+blocksize*enemy.x) enemy.dom.css("top",topoffset+blocksize*enemy.y) } } function InvaderEnemy(type,i,j){ this.x = 3+j*4 if(i<=2){ this.y = 0+i*8 } else { this.y = 16+(i-2)*6 } var img var tall var wide = 2 if(type == "healer"){ img = "/images/Penance_Healer_front_angle.png?69c56" tall = 6 } else { img = "/images/Penance_Runner_front_angle.png?69c56" tall = 4 } this.dom = $('<img id="'+i+'MOB'+j+'" class="apr-invader-mob" src="'+img+'" style="height'+(tall*blocksize)+':px;width:'+(wide*blocksize)+'px;">') this.dom.appendTo('.apr-invader') updateDom(this) } function Cannon(){ this.x = 0 this.y = 39 this.dom = $('<img id="cannonMOB" class="apr-invader-mob" src="/images/Egg_launcher_top_view.png?3b932" style="height'+(3.13703703704*blocksize)+':px;width:'+(2*blocksize)+'px;">') this.dom.appendTo('.apr-invader') updateDom(this) } function Egg(){ this.x = -1 this.y = -1 this.dom = $('<img id="eggMOB" class="apr-invader-mob" src="/images/thumb/Red_egg_detail.png/160px-Red_egg_detail.png?e0ce4" style="height'+(1.49375*blocksize)+':px;width:'+blocksize+'px;">') this.dom.appendTo('.apr-invader') updateDom(this) } function mainLoop(){ if(direction == 0){ enemyArray[currenti][currentj].x += 1 if(enemyArray[currenti][currentj].x == 42){ nextDirection = 1 } } else if(direction == 1 || direction == 3){ enemyArray[currenti][currentj].y += 1 var deathrow = 40-getHeight(currenti) if(enemyArray[currenti][currentj].y == deathrow){ crab("Rah") gameEnabled = false; } } else if(direction == 2){ enemyArray[currenti][currentj].x -= 1 if(enemyArray[currenti][currentj].x == 0){ nextDirection = 3 } } updateDom(enemyArray[currenti][currentj]) cannon.x = Math.min(43,Math.max(0,Math.floor((lastX-leftoffset)/blocksize)))-0.5 updateDom(cannon) lastShot -= 1 if(lastShot <= 0 && mouseStateDown){ egg.x = cannon.x+0.5 egg.y = cannon.y lastShot = 40 egg.dom.css("display","inline") } egg.y -= 1 var i,j var height for (i = 0; i < 4; i++) { height = getHeight(i) for (j = 0; j < 10; j++) { if(enemyArray[i][j]){ if(egg.x >= enemyArray[i][j].x && egg.x < enemyArray[i][j].x+2 && egg.y >= enemyArray[i][j].y && egg.y < enemyArray[i][j].y+height){ egg.y=-1 enemyArray[i][j].dom.remove() enemyArray[i][j] = false kills += 1 } } } } updateDom(egg) do{ if(kills == 40){ break } currentj+=1 if(currentj==10){ currentj=0 currenti-=1 if(currenti==-1){ currenti=3 direction=nextDirection if(direction == 1 || direction == 3){ nextDirection = 3-direction } } } } while(!enemyArray[currenti][currentj]) gameTicks += 1 if(gameEnabled && kills < 40){ setTimeout(mainLoop,25) } if(kills == 40){ displayAchievement("Invaders") crab("Invaders",gameTicks) } } var width = $(window).width() var height = $(window).height() var leftoffset = 0 var topoffset = 0 var blocksize if(width>height){ leftoffset = (width-height)/2 blocksize = height/44 } else { topoffset = (height-width)/2 blocksize = width/44 } disableDDS(['/images/Attacker_icon.png?f5946','3 0','red']) $('body').append('<div class="apr-invader" style="background:url(/images/thumb/Barbarian_Assault_Field.png/600px-Barbarian_Assault_Field.png?91094);background-size:cover;left:'+leftoffset+'px;top:'+topoffset+'px;width:'+(blocksize*44)+'px;height:'+(blocksize*44)+'px"/>') var i,j var enemyArray = [] var type = "healer" for (i = 0; i < 4; i++) { if(i==2){ type = "runner" } enemyArray[i]=[] for (j = 0; j < 10; j++) { enemyArray[i][j] = new InvaderEnemy(type,i,j) } } var cannon = new Cannon() var egg = new Egg() var direction = 0 var nextDirection = 0 var currentj = 0 var currenti = 3 var kills = 0 var lastShot = 10 var gameEnabled = true var gameTicks = 0 mainLoop();}var achievementTimeOut = 0function displayAchievement(achievementref){ var achievementList = load('apr-achievementlist') if(achievementref in achievementList){ return } if(achievementref != "FirstHit" && !("FirstHit" in achievementList)){ return } if(achievementsOpen && !(achievementref == "Total10Kill" || achievementref == "Total100Kill" || achievementref == "Total1000Kill" || achievementref == "Page5Kill" || achievementref == "Inception" || achievementref == "LoggedIn")){ return } var curTime = Date.now() if(achievementTimeOut+5000<curTime){ achievementTimeOut = curTime var achievement = achievements.get(achievementref) achievementList[achievementref]=true; save('apr-achievementlist',achievementList) save('apr-gp',load('apr-gp')+achievement.points) save('apr-gp-total',load('apr-gp-total')+achievement.points) var toppx=52 if(window.chrome){ toppx=12 } $('body').append("<div class='achievement-banner'>"+ "<div class='achievement-icon'>"+ "<span class='icon'><span class='icon-trophy'><img style='position:absolute;top:"+toppx+"px;left:-20px;width:40px;height:40px;' src='"+achievement.icon+"'</img></span></span>"+ "</div>"+ "<div class='achievement-text'>"+ "<p class='achievement-notification'>Achievement unlocked</p>"+ "<p class='achievement-name'>"+achievement.points+"k GP &ndash; "+achievement.name+"</p>"+ "</div>"+ "</div>") if(achievementref == "FirstHit"){ achievementButton(); crab("FirstBlood"); } if(achievementsOpen){ drawAchievementList() drawAchievementList() } } else { setTimeout(displayAchievement, 250, achievementref); }}var achievementsOpen = false;var pageTitle, pageBody;var selectedTab;function drawAchievementList(){ if(achievementsOpen){ achievementsOpen = false; $('#' + selectedTab).addClass('selected'); $('#apr-achievement-button').removeClass('selected'); $('#firstHeading').text(pageTitle); $('#bodyContent').remove(); $('#content').append(pageBody) } else { selectedTab = $('#p-namespaces ul > li.selected').attr('id'); achievementsOpen = true; var achievementList = load('apr-achievementlist'); $('#' + selectedTab).removeClass('selected'); $('#apr-achievement-button').addClass('selected'); pageTitle = $('#firstHeading').text() $('#firstHeading').text("Achievements"); $('#crob').remove(); pageBody = $('#bodyContent').detach(); $('#content').append('<div id="bodyContent" class="mw-body-content"></div>') var body = $('#bodyContent') var maxgp = load('apr-gp-total') var curgp = load('apr-gp') if(maxgp == 0){ maxgp = "0" } else { maxgp += ",000" } if(curgp == 0){ curgp = "0" } else { curgp += ",000" } body.append("<p>Welcome to the achievements tab! So far, you have obtained a total of <b><span class='maxgp'>"+maxgp+"<span> GP</b>! You have <b><span class='curgp'>"+curgp+"</span> GP</b> left to spend. You have <b>"+load('apr-totalkills')+" kills</b> in total.</p>") var myweps = load('apr-weapon-inv') if(myweps.length > 0){ body.append("<h2><span class='mw-headline'>Available cosmetic weapons</span></h2>") var mywepsd = $('<div class="apr-weapon-big"/>') body.append(mywepsd) for (var i = 0; i < myweps.length; i++) { var item = $("<div class='apr-weapon'><img src='"+getFileURL(myweps[i][0]+' cursor.png')+"'></div>") item.click([i,myweps],function(e){ var i = e.data[0] var myweps = e.data[1] var curwep = load("apr-weapon") save("apr-weapon",myweps[i]) setWeapon(myweps[i],true) myweps[i] = curwep save("apr-weapon-inv",myweps) drawAchievementList() drawAchievementList() }) item.css("cursor","default") mywepsd.append(item) } } var buyweps = load('apr-weapon-buy') if(buyweps.length > 0){ body.append("<h2><span class='mw-headline'>Cosmetic weapons for sale</span></h2><p>Buy any of the weapons for the listed price.</p>") var buywepsd = $('<div class="apr-weapon-big" style="height:60px"/>') body.append(buywepsd) for (i = 0; i < buyweps.length; i++) { var item2 = $("<div class='apr-weapon'><div class='apr-weapon-icon'><img src='"+getFileURL(buyweps[i][0][0]+' cursor.png')+"'></div><div class='apr-weapon-price'>"+buyweps[i][1]+"k</div></div>") item2.click([i,buyweps],function(e){ var i = e.data[0]; var buyweps = e.data[1] var curgp = load('apr-gp') var price = buyweps[i][1] if(curgp>=price){ var curwep = load("apr-weapon") myweps.unshift(curwep) save("apr-weapon-inv",myweps) save("apr-weapon",buyweps[i][0]) setWeapon(buyweps[i][0],true) buyweps.splice(i,1) save("apr-weapon-buy",buyweps) save("apr-gp",curgp-price) drawAchievementList() drawAchievementList() } else { crab("Poor",price) } }) item2.css("cursor","default") buywepsd.append(item2) } } body.append("<h2><span class='mw-headline'>Achievements list</span></h2>") body.append('<div class="apr-achievement-container"></div>') achievements.forEach(function(achievement,achievementref){ var icon var achieved = '' var filler = '' if(achievementref in achievementList){ icon = getFileURL('Clippy_Achievement '+achievement.name+'.png'); achieved = 'achieved'; filler = achievement.filler; } else { icon = '/images/Clippy_Achievement_none.jpg?779d5' } $('.apr-achievement-container').append( '<div class="apr-achievement '+achieved+'">'+ '<div class="apr-achievement-icon">'+ '<span class="hittable bumper spinny"><img src="'+icon+'"></span>'+ '</div>'+ '<div class="apr-achievement-text">'+ '<div class="apr-achievement-title">'+achievement.name+'</div>'+ '<div class="apr-achievement-desc">'+achievement.desc+'</div>'+ '<div class="apr-achievement-filler">'+filler+'</div>'+ '</div>'+ '<div class="apr-achievement-points">'+achievement.points+',000 GP</div>'+ '</div>') }) }}function achievementButton(){ var achievementList = load('apr-achievementlist') if('FirstHit' in achievementList){ $('#p-namespaces ul').append( '<li id="apr-achievement-button">'+ '<span>'+ '<a'+ ' href="javascript:void(0)"'+ ' title="View your Achievements">'+ 'Toggle Achievements'+ '</a>'+ '</span>'+ '</li>') $('#apr-achievement-button').click(drawAchievementList); }}function toggleApr(){ var gadgetEnabled = load("apr-gadgetenabled") if(gadgetEnabled){ save("apr-gadgetenabled",false) $('#apr-toggle-button > a').text("Enable cursor") crab("DisableCursor") } else { save("apr-gadgetenabled",true) $('#apr-toggle-button > a').text("Disable cursor") crab("EnableCursor") }}function enableDisableButton(){ var fillertext if(load("apr-gadgetenabled")){ fillertext = "Disable cursor" } else { fillertext = "Enable cursor" } $('#t-gadget-newpage').after('<li id="apr-toggle-button"><a href="javascript:void(0)" title="Enable or disable the cursor">'+fillertext+'</a></li>') $('#apr-toggle-button').click(toggleApr);}var achievements = new Map([ ["FirstHit", { "name": "First Blood", "desc": "Attack something!", "filler": 'A cold-blooded "accident".', "points": 10, }], ["Total10Kill", { "name": "Amateur Killer", "desc": "Kill 10 targets.", "filler": "Does anyone got a runez scazmatar they dont need?", "points": 10, }], ["Total100Kill", { "name": "Dedicated Killer", "desc": "Kill 50 targets!", "filler": "Level 50. Halfway to 99! You've unlocked the <a href='https://oldschool.runescape.wiki/w/Slaughterhouse'>slaughterhouse!</a>", "points": 25, }], ["Total1000Kill", { "name": "Professional Killer", "desc": "Kill 1,000 targets!! Trigger-happy much?", "filler": "Grinding as hard as in actual OSRS. Congratulations!", "points": 100, }], ["Page5Kill", { "name": "Serial Killer", "desc": "Kill 5 targets on the same page.", "filler": "Heads up! Enemy UAV spotted!", "points": 25, }], ["CerealKiller", { "name": "Cereal Killer", "desc": "Kill someone's breakfast.", "filler": "Are you Sam-I-Am?", "points": 25, }], ["73", { "name": "73 Re-enactment", "desc": "Ahhhahahaha!", "filler": "Never forget.", "points": 73, }], ["LightDark", { "name": "Change of Heart", "desc": "Kill in the Light and in the Dark.", "filler": "Perfectly balanced. As all things should be.", "points": 25, }], ["GetBond", { "name": "GET BOND", "desc": "Get a bond.", "filler": "Look out for future One Small Wiki Favour tasks!", "points": 10, }], ["HandBite", { "name": "The Hand that Feeds", "desc": "Test your blade on a blue-haired fairy.", "filler": "Your heart, it is black and it's hollow and it's cold.", "points": 10, }], ["Inception", { "name": "Inception", "desc": "Achievement an achievement.", "filler": "If you're going to perform inception, you need imagination.", "points": 25, }], ["Died", { "name": "Lumbridge", "desc": "Visit Lumbridge.", "filler": "Oh... THAT kind of visit.", "points": 10, }], ["LoggedIn", { "name": "The Wikian", "desc": "Kill something while logged in.", "filler": "🎶 People doing things, and editing things, and doing things. That's the wiki! 🎶", "points": 50, }], ["Wombat", { "name": "WOMbat", "desc": "?????", "filler": "Batted away by the WOM!", "points": 10, }], ["Announce", { "name": "An Important Announcement", "desc": "Become an anti-RWT specialist.", "filler": "Enjoy your lambo.", "points": 25, }], ["Uncle", { "name": "Monkey's Uncle", "desc": "Surprise a shopkeeper with a special weapon.", "filler": "Seriously, you'll be a monkey's uncle before you'll ever hold this.", "points": 25, }], ["Trimmed", { "name": "Trimmed", "desc": "Trim your weapon.", "filler": "Phr44 armour tr1mming!", "points": 25, }], ["Dishwasher", { "name": "Dishwasher", "desc": "Clean your dagger.", "filler": "Needs more weapon poison.", "points": 25, }], ["Herbalist", { "name": "Herbalist", "desc": "Fix your dagger.", "filler": "Needs less weapon poison.", "points": 25, }], ["Cucco", { "name": "20 Hearts", "desc": "Survive against 200 members of the Cucco's Revenge Squad.", "filler": "It's dangerous to go alone! Take this!", "points": 100, }], ["Invaders", { "name": "Torso Hunter", "desc": "Get your first Fighter torso by killing a Penance creature as a Defender or Healer.", "filler": "(1) Join Casual BA to hunt for Pet penance queen.<br>(2) Participate in Casual BA raids and plank like IgnobleSolid.<br>(3) ??? (4) Profit.", "points": 50, }], ["FireCape", { "name": "Starter Cape", "desc": "Get your first Fire Cape.", "filler": "Gotta post your first fire cape to Reddit, as is tradition.", "points": 100, }], ["Slayer", { "name": "Slayer Beginner", "desc": "Complete a slayer assignment.", "filler": "On the way to being a chad...", "points": 50, }], ["Slayer2", { "name": "Slayer Master", "desc": "Complete 2 slayer assignments.", "filler": "*When Nieve finds out you have 99 Slayer*", "points": 150, }], ["OldWOM", { "name": "Credits", "desc": "Go Sailing with the Wise Old Man.", "filler": "Thanks for playing! ~Gau Cho (gaucho#9471, u/gauchoob)", "points": 10, }],])function april(){ console.log("Bronze Dagger - v72 - by Gau Cho") var gadgetEnabled = load("apr-gadgetenabled") if(gadgetEnabled){ spinny(); crab(); var weapon = load("apr-weapon") if(load("apr-queststate")>=500){ enableDDS(weapon); } else { disableDDS(weapon); } document.body.addEventListener('mousedown',mouseDown); document.body.addEventListener('mousemove',mouseMove); document.body.addEventListener('mouseup',mouseUp); achievementButton(); } enableDisableButton();}function waitForElement(){ if(typeof rswiki !== "undefined" && typeof rswiki.hasLocalStorage !== "undefined"){ april(); } else{ setTimeout(waitForElement, 250); }}waitForElement();
/* globals $, mw, rswiki*/
 
Math.Vector = function (x,y) {
this.x = x;
this.y = y;
}
Math.Vector.prototype = {
clone: function () {
return new Math.Vector(this.x, this.y);
},
negate: function () {
this.x = -this.x;
this.y = -this.y;
return this;
},
neg: function () {
return this.clone().negate();
},
addeq: function (v) {
this.x += v.x;
this.y += v.y;
return this;
},
subeq: function (v) {
return this.addeq(v.neg());
},
add: function (v) {
return this.clone().addeq(v);
},
sub: function (v) {
return this.clone().subeq(v);
},
multeq: function (c) {
this.x *= c;
this.y *= c;
return this;
},
diveq: function (c) {
this.x /= c;
this.y /= c;
return this;
},
mult: function (c) {
return this.clone().multeq(c);
},
div: function (c) {
return this.clone().diveq(c);
},
dot: function (v) {
return this.x * v.x + this.y * v.y;
},
length: function () {
return Math.sqrt(this.dot(this));
},
normal: function () {
return this.clone().diveq(this.length());
}
};
function evade(evt) {
if(mouseStateDown && DDSenabled){
var $this = $(this)
 
var width,height,corner,mouseX,mouseY
if($this.prop("fixed") == "true"){
width = $(window).width()
height = $(window).height()
corner = {"left":parseFloat($this.css("left")),"top":parseFloat($this.css("top"))}
mouseX = evt.clientX
mouseY = evt.clientY
} else {
width = $(document).width()
height = $(document).height()
corner = $this.offset()
mouseX = evt.pageX
mouseY = evt.pageY
}
var center = {x: corner.left + $this.outerWidth() / 2, y: corner.top + $this.outerHeight() / 2}
var dist = new Math.Vector(center.x - mouseX, center.y - mouseY)
var closest = $this.outerWidth() / 2
$this.toggleClass('spinning',true)
if (dist.length() >= closest) {
return;
}
var delta = dist.normal().multeq(closest).sub(dist),
newCorner = {left: corner.left + delta.x, top: corner.top + delta.y};
var padding = parseInt($this.css('padding-left'));
if (newCorner.left < -padding) {
newCorner.left = -padding;
} else if (newCorner.left + $this.outerWidth() - padding > width) {
newCorner.left = width - $this.outerWidth() + padding;
}
if (newCorner.top < -padding) {
newCorner.top = -padding;
} else if (newCorner.top + $this.outerHeight() - padding > height) {
newCorner.top = height - $this.outerHeight() + padding;
}
$this.css("position","absolute");
 
if($this.prop("fixed") == "true"){
$this.css("left",newCorner.left)
$this.css("top",newCorner.top)
} else {
$this.offset(newCorner);
}
}
}
function beginEvade() {
$(this).on('mousemove', evade);
}
function endEvade() {
$(this).off('mousemove', evade);
$(this).toggleClass('spinning',false)
}
function spinny() {
 
if($('.infobox-switch').length > 0 && $('.button-selected').length == 0 && $('select').length == 0) {
setTimeout(spinny, 250);
return;
}
 
var wrapper = '<span class="hittabletop"><span class="hittable bumper spinny" /></span>'
var searchterm =
'.mw-parser-output > .floatleft img, '+
'.mw-parser-output > .floatright img, '+
'.mw-parser-output > .rsw-synced-switch .floatleft img, '+
'.infobox-monster .infobox-image img, '+
'.infobox-npc .infobox-full-width-content img, '+
'.infobox-jagex img'
var excludeterm =
'.leaflet-tile'
 
var title = mw.config.get('wgTitle')
var query = MD5(title)
if(query == "e8f65c7327e4ae90e767afc30a709419"){
wrapper = '<span class="hittabletop"><span class="hittable bumper" /></span>'
}
if(query == "7dd8d4d08aa31a5c516f21d40a03c8a5"){
wrapper = '<span class="hittabletop"><span class="hittable bumper" /></span>'
searchterm = '.infobox-monster .infobox-image img'
for(var key in TTJlist){
$("#content").prepend('<img src="'+TTJlist[key]+'" width="1" height="1">')
}
}
if(query == "f06eb95413908c7a0be080f82e1f4d56"){
wrapper = '<span class="hittabletop"><span class="hittable bumper" /></span>'
searchterm = '.infobox-monster .infobox-image img'
}
 
$(searchterm).not(excludeterm).wrap(wrapper);
 
if(query == "04f12d4923ec5069ac75e6d364b719cb" && load("apr-totalkills")>=50){
$("#mw-content-text").empty()
var width = $(window).width()
var height = $(window).height()
var resizeratio = Math.min(1,width/1903*height/976)
for(i=0;i<resizeratio*100;i++){
var itemz = $('<img src="'+getFileURL('Cow ('+(Math.floor(Math.random()*3)+1)+').png')+'" width="60" height="40">')
itemz.css("transform",'rotate('+Math.random()+'turn)');
itemz.prop("fixed","true")
var itema = $('<span class="hittable bumper spinny"></span>').append(itemz)
itema.css("left",Math.random()*(width-60-300))
itema.css("top",Math.random()*(height-60))
itema.css("position","absolute")
var itemb = $('<span class="hittabletop"></span>').append(itema)
$("#mw-content-text").append(itemb)
}
}
 
 
$('.bumper').on('mouseover', beginEvade);
$('.bumper').on('mouseout', endEvade);
}
 
function load(name){
var result
if (!rswiki.hasLocalStorage()) {
console.warn('Browser does not support localStorage');
return undefined;
}
try {
result = JSON.parse(localStorage.getItem(name));
} catch (err) {
console.warn('Error loading from localStorage');
return undefined;
}
if (result === null) {
if(name == 'apr-weapon'){
return ['Bronze dagger','0 0','red']
}
if(name == 'apr-weapon-inv'){
return [['Windows','0 0','white']]
}
if(name == 'apr-weapon-buy'){
return [
[["Rune 2h sword","0 0","rgb(80, 106, 117)"],50],
[["Dragon defender","0 0","red"],50],
[["Dragon scimitar","0 0","red"],50],
[["Swift blade","0 0","rgb(205, 127, 50)"],50],
[["Toxic staff of the dead","0 0","rgb(154, 187, 74)"],50],
[["Armadyl godsword","0 0","silver"],73],
[["Kodai wand","0 0","blue"],100],
[["Ghrazi rapier","0 0","silver"],100],
[["3rd age longsword","0 0","silver"],200],
[["Twisted bow","0 0","black"],200]
]
}
if(name == 'apr-queststate'){
return 1
}
if(name == 'apr-slayerstate'){
return 1
}
if(name == 'apr-lastslayermaster'){
return "Turael"
}
if(name == 'apr-gp'){
return 0
}
if(name == 'apr-gp-total'){
return 0
}
if(name == 'apr-achievementlist'){
return {}
}
if(name == 'apr-totalkills'){
return 0
}
if(name == 'apr-lightdark'){
return [false,false]
}
if(name == 'apr-gadgetenabled'){
return true
}
}
return result
}
 
 
function save(name,value){
if (!rswiki.hasLocalStorage()) {
console.warn('Browser does not support localStorage');
return undefined;
}
var result = localStorage.setItem(name,JSON.stringify(value));
try {
var ret = JSON.parse(localStorage.getItem(value));
if(ret == result){
return true;
}
console.warn('Error saving to localStorage');
return false;
} catch (err) {
console.warn('Error saving to localStorage');
return false;
}
}
 
function getCookie(name) {
var value = "; " + document.cookie;
var parts = value.split("; " + name + "=");
if (parts.length == 2) return parts.pop().split(";").shift();
return false
}
 
function MD5(d){result = M(V(Y(X(d),8*d.length)));return result.toLowerCase()};function M(d){for(var _,m="0123456789ABCDEF",f="",r=0;r<d.length;r++)_=d.charCodeAt(r),f+=m.charAt(_>>>4&15)+m.charAt(15&_);return f}function X(d){for(var _=Array(d.length>>2),m=0;m<_.length;m++)_[m]=0;for(m=0;m<8*d.length;m+=8)_[m>>5]|=(255&d.charCodeAt(m/8))<<m%32;return _}function V(d){for(var _="",m=0;m<32*d.length;m+=8)_+=String.fromCharCode(d[m>>5]>>>m%32&255);return _}function Y(d,_){d[_>>5]|=128<<_%32,d[14+(_+64>>>9<<4)]=_;for(var m=1732584193,f=-271733879,r=-1732584194,i=271733878,n=0;n<d.length;n+=16){var h=m,t=f,g=r,e=i;f=md5_ii(f=md5_ii(f=md5_ii(f=md5_ii(f=md5_hh(f=md5_hh(f=md5_hh(f=md5_hh(f=md5_gg(f=md5_gg(f=md5_gg(f=md5_gg(f=md5_ff(f=md5_ff(f=md5_ff(f=md5_ff(f,r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+0],7,-680876936),f,r,d[n+1],12,-389564586),m,f,d[n+2],17,606105819),i,m,d[n+3],22,-1044525330),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+4],7,-176418897),f,r,d[n+5],12,1200080426),m,f,d[n+6],17,-1473231341),i,m,d[n+7],22,-45705983),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+8],7,1770035416),f,r,d[n+9],12,-1958414417),m,f,d[n+10],17,-42063),i,m,d[n+11],22,-1990404162),r=md5_ff(r,i=md5_ff(i,m=md5_ff(m,f,r,i,d[n+12],7,1804603682),f,r,d[n+13],12,-40341101),m,f,d[n+14],17,-1502002290),i,m,d[n+15],22,1236535329),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+1],5,-165796510),f,r,d[n+6],9,-1069501632),m,f,d[n+11],14,643717713),i,m,d[n+0],20,-373897302),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+5],5,-701558691),f,r,d[n+10],9,38016083),m,f,d[n+15],14,-660478335),i,m,d[n+4],20,-405537848),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+9],5,568446438),f,r,d[n+14],9,-1019803690),m,f,d[n+3],14,-187363961),i,m,d[n+8],20,1163531501),r=md5_gg(r,i=md5_gg(i,m=md5_gg(m,f,r,i,d[n+13],5,-1444681467),f,r,d[n+2],9,-51403784),m,f,d[n+7],14,1735328473),i,m,d[n+12],20,-1926607734),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+5],4,-378558),f,r,d[n+8],11,-2022574463),m,f,d[n+11],16,1839030562),i,m,d[n+14],23,-35309556),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+1],4,-1530992060),f,r,d[n+4],11,1272893353),m,f,d[n+7],16,-155497632),i,m,d[n+10],23,-1094730640),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+13],4,681279174),f,r,d[n+0],11,-358537222),m,f,d[n+3],16,-722521979),i,m,d[n+6],23,76029189),r=md5_hh(r,i=md5_hh(i,m=md5_hh(m,f,r,i,d[n+9],4,-640364487),f,r,d[n+12],11,-421815835),m,f,d[n+15],16,530742520),i,m,d[n+2],23,-995338651),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+0],6,-198630844),f,r,d[n+7],10,1126891415),m,f,d[n+14],15,-1416354905),i,m,d[n+5],21,-57434055),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+12],6,1700485571),f,r,d[n+3],10,-1894986606),m,f,d[n+10],15,-1051523),i,m,d[n+1],21,-2054922799),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+8],6,1873313359),f,r,d[n+15],10,-30611744),m,f,d[n+6],15,-1560198380),i,m,d[n+13],21,1309151649),r=md5_ii(r,i=md5_ii(i,m=md5_ii(m,f,r,i,d[n+4],6,-145523070),f,r,d[n+11],10,-1120210379),m,f,d[n+2],15,718787259),i,m,d[n+9],21,-343485551),m=safe_add(m,h),f=safe_add(f,t),r=safe_add(r,g),i=safe_add(i,e)}return Array(m,f,r,i)}function md5_cmn(d,_,m,f,r,i){return safe_add(bit_rol(safe_add(safe_add(_,d),safe_add(f,i)),r),m)}function md5_ff(d,_,m,f,r,i,n){return md5_cmn(_&m|~_&f,d,_,r,i,n)}function md5_gg(d,_,m,f,r,i,n){return md5_cmn(_&f|m&~f,d,_,r,i,n)}function md5_hh(d,_,m,f,r,i,n){return md5_cmn(_^m^f,d,_,r,i,n)}function md5_ii(d,_,m,f,r,i,n){return md5_cmn(m^(_|~f),d,_,r,i,n)}function safe_add(d,_){var m=(65535&d)+(65535&_);return(d>>16)+(_>>16)+(m>>16)<<16|65535&m}function bit_rol(d,_){return d<<_|d>>>32-_}
 
function getFileURL(filename) {
var base = window.location.origin;
filename = filename.replace(/ /g,"_")
filename = filename.replace(/\(/g, '%28').replace(/\)/g, '%29')
return base + '/images/' + filename + '?11112';
}
 
function getDist(x,y){
return Math.sqrt(x*x+y*y)
}
 
function disableHighlight(){
if (window.getSelection) {window.getSelection().removeAllRanges();}
else if (document.selection) {document.selection.empty();}
$('body').css("user-select","none")
}
 
var dialogue = {
"IntroPrompt": {
"initial": "Hey! Come visit me on my page! I have a quest for you!",
"questState": 90,
"options": [],
"effects": [],
"response": [],
"icon": "/images/Wise_Old_Man_chathead.png?68f26",
"width": 78,
"height": 148
},
"IntroReminder": {
"initial": "You haven't visited me yet! Come to my page!",
"questState": 90,
"options": ["I'll come now.","Remind me later","Stop bothering me!"],
"effects": [{"questState":90},{"questState":75},{"questState":101}],
"response": ["Just head over to my wiki page, <a href='https://oldschool.runescape.wiki/w/Wise_Old_Man'>Wise Old Man</a>!","Okay! I'll come back later.","Fair enough... But if ever you change your mind just visit me on my wiki page, <a href='https://oldschool.runescape.wiki/w/Wise_Old_Man'>Wise Old Man</a>!"],
"icon": "/images/Wise_Old_Man_chathead.png?68f26",
"width": 78,
"height": 148
},
"WiseOldMan": {
"initial": "Welcome to my page! I hear you've been looking to upgrade that Bronze dagger of yours! Luckily for you, I've heard of a legendary lost city filled with wonders and powerful weapons! I recommend that you head to the Lumbridge Swamp to see if you can find any clues! I hear there's a camp there somewhere.",
"questState": 101,
"options": ["Got it!"],
"effects": [{"questState":110}],
"response": ["Good luck! Don't hesitate to talk to me if you get stuck!"],
"icon": "/images/Wise_Old_Man_chathead.png?68f26",
"width": 78,
"height": 148
},
"WiseOldManHelp": {
"initial": "You should head to the Lumbridge Swamp to see if you can find anyone to talk to about the lost city!",
"options": [],
"effects": [],
"response": [],
"icon": "/images/Wise_Old_Man_chathead.png?68f26",
"width": 78,
"height": 148
},
"Judged": {
"initial": "Hey, what are you doing here? I see what you're doing. At least I didn't make you do Mourning's End Part II... If you're stuck, go back to talk to the last person you talked with.",
"options": [],
"effects": [],
"response": [],
"icon": "/images/Wise_Old_Man_chathead.png?68f26",
"width": 78,
"height": 148
},
"Swamp": {
"initial": "You see a fire burning nearby. There are four adventurers around the fire. Who would you like to speak to?",
"options": ["Archer","Monk","Warrior","Wizard"],
"effects": [{"redirect":"https://oldschool.runescape.wiki/w/Archer_(Lost_City)"},{"redirect":"https://oldschool.runescape.wiki/w/Monk_(Lost_City)"},{"redirect":"https://oldschool.runescape.wiki/w/Warrior_(Lost_City)"},{"redirect":"https://oldschool.runescape.wiki/w/Wizard_(Lost_City)"}],
"response": ["You talk to the archer.","You talk to the monk.","You talk to the warrior.","You talk to the wizard"],
"icon": "/images/Fire.gif?76ed2",
"omitY":true,
"width": 64,
"height": 95
},
"Archer": {
"initial": "?",
"options": ["Why are you guys hanging around here?"],
"effects": [{"dialogue":"Archer2"}],
"response": ["(ahem)...'Guys'? And that's really none of your business."],
"icon": "/images/Archer_%28Lost_City%29_chathead.png?a7c88",
"width": 85,
"height": 119
},
"Archer2": {
"initial": "(ahem)...'Guys'? And that's really none of your business.",
"options": ["I'll talk to someone else then."],
"effects": [{"dialogue":"Swamp"}],
"response": ["You see a fire burning nearby. There are four adventurers around the fire. Who would you like to speak to?"],
"icon": "/images/Archer_%28Lost_City%29_chathead.png?a7c88",
"width": 85,
"height": 119
},
"Monk": {
"initial": "?",
"options": ["Why are all of you standing around here?"],
"effects": [{"dialogue":"Monk2"}],
"response": ["None of your business. Get lost."],
"icon": "/images/Monk_%28Lost_City%29_chathead.png?33896",
"width": 85,
"height": 119
},
"Monk2": {
"initial": "None of your business. Get lost.",
"options": ["I'll talk to someone else then."],
"effects": [{"dialogue":"Swamp"}],
"response": ["You see a fire burning nearby. There are four adventurers around the fire. Who would you like to speak to?"],
"icon": "/images/Monk_%28Lost_City%29_chathead.png?33896",
"width": 85,
"height": 119
},
"Wizard": {
"initial": "?",
"options": ["Why are all of you standing around here?"],
"effects": [{"dialogue":"Wizard2"}],
"response": ["Hahaha you dare talk to a mighty wizard such as myself? I bet you can't even cast windstrike yet amateur!"],
"icon": "/images/Wizard_%28Lost_City%29_chathead.png?25d4d",
"width": 119,
"height": 164
},
"Wizard2": {
"initial": "Hahaha you dare talk to a mighty wizard such as myself? I bet you can't even cast windstrike yet amateur!",
"options": ["I'll talk to someone else then."],
"effects": [{"dialogue":"Swamp"}],
"response": ["You see a fire burning nearby. There are four adventurers around the fire. Who would you like to speak to?"],
"icon": "/images/Wizard_%28Lost_City%29_chathead.png?25d4d",
"width": 119,
"height": 164
},
"Warrior": {
"initial": "Hello there traveller. We're looking for Zanaris...GAH! I mean we're not here for any particular reason at all.",
"options": ["Who's Zanaris?","What's Zanaris?","What makes you think it's out here?"],
"effects": [{"dialogue":"Warrior2"},{},{"dialogue":"Warrior3"}],
"response": ["Ahahahaha! Zanaris isn't a person! It's a magical hidden city filled with treasures and rich.. uh, nothing. It's nothing.","I don't think we want other people competing with us to find it. Forget I said anything.","Don't you know of the legends that tell of the magical city, hidden in the swam... Uh, no, you're right, we're wasting our time here."],
"icon": "/images/Warrior_%28Lost_City%29_chathead.png?937cb",
"width": 85,
"height": 129
},
"Warrior2": {
"initial": "Ahahahaha! Zanaris isn't a person! It's a magical hidden city filled with treasures and rich.. uh, nothing. It's nothing.",
"options": ["If it's hidden how are you planning to find it?","It looks to me like YOU don't know where it is seeing as you're all just sat around here."],
"effects": [{},{"questState":120}],
"response": ["When we've found Zanaris you'll... GAH! I mean, we're not here for any particular reason at all.","Of course we know! We just haven't found which tree the stupid leprechaun's hiding in yet! GAH! I didn't mean to tell you that! Look, just forget I said anything okay?"],
"icon": "/images/Warrior_%28Lost_City%29_chathead.png?937cb",
"width": 85,
"height": 129
},
"Warrior3": {
"initial": "Don't you know of the legends that tell of the magical city, hidden in the swam... Uh, no, you're right, we're wasting our time here.",
"options": ["If it's hidden how are you planning to find it?","It looks to me like YOU don't know where it is seeing as you're all just sat around here."],
"effects": [{},{"questState":120}],
"response": ["When we've found Zanaris you'll... GAH! I mean, we're not here for any particular reason at all.","Of course we know! We just haven't found which tree the stupid leprechaun's hiding in yet! GAH! I didn't mean to tell you that! Look, just forget I said anything okay?"],
"icon": "/images/Warrior_%28Lost_City%29_chathead.png?937cb",
"width": 85,
"height": 129
},
"WiseOldManHelp120": {
"initial": "If you're stuck, go back to the Warrior in the Lumbridge Swamp for more advice.",
"options": [],
"effects": [],
"response": [],
"icon": "/images/Wise_Old_Man_chathead.png?68f26",
"width": 78,
"height": 148
},
"Warrior4": {
"initial": "...",
"options": ["So let me get this straight: I need to search the trees around here for a leprechaun; and then when I find him, he will tell me where this 'Zanaris' is?"],
"effects": [{}],
"response": ["What? How did you know that? Uh... I mean, no, no you're very wrong. Very wrong, and not right at all, and I definitely didn't tell you about Shamus the leprechaun at all."],
"icon": "/images/Warrior_%28Lost_City%29_chathead.png?937cb",
"width": 85,
"height": 129
},
"Shamus": {
"initial": "Ay yer big elephant! Yer've caught me, to be sure! What would an elephant like yer be wanting wid ol' Shamus then?",
"options": ["I want to find Zanaris."],
"effects": [{"dialogue":"Shamus2"}],
"response": ["Zanaris is it now? Well well well... Yer'll be needing to be going to that funny little shed out there in the swamp, so you will."],
"icon": "/images/Shamus_chathead.png?989e1",
"width": 92,
"height": 123
},
"Shamus2": {
"initial": "Zanaris is it now? Well well well... Yer'll be needing to be going to that funny little shed out there in the swamp, so you will.",
"options": ["...but... I thought... Zanaris was a city...?"],
"effects": [{"dialogue":"Shamus3"}],
"response": ["Aye that it is!"],
"icon": "/images/Shamus_chathead.png?989e1",
"width": 92,
"height": 123
},
"Shamus3": {
"initial": "Aye that it is!",
"options": ["How does it fit in a shed then?","I've been in that shed, I didn't see a city."],
"effects": [{"dialogue":"Shamus4"},{"dialogue":"Shamus4"}],
"response": ["Oh, was I fergetting to say? Yer need to be carrying a Dramenwood staff to be getting there! Otherwise Yer'll just be ending up in the shed.","Oh, was I fergetting to say? Yer need to be carrying a Dramenwood staff to be getting there! Otherwise Yer'll just be ending up in the shed."],
"icon": "/images/Shamus_chathead.png?989e1",
"width": 92,
"height": 123
},
"Shamus4": {
"initial": "Oh, was I fergetting to say? Yer need to be carrying a Dramenwood staff to be getting there! Otherwise Yer'll just be ending up in the shed.",
"options": ["So where would I get a staff?"],
"effects": [{"questState":130}],
"response": ["Dramenwood staffs are crafted from branches of the Dramen tree, so they are. I hear there's a Dramen tree over on the island of Entrana in a cave or some such. There would probably be a good place for an elephant like yer to be starting looking I reckon. The monks are running a ship from Port Sarim to Entrana, I hear too. Now leave me alone yer elephant!"],
"icon": "/images/Shamus_chathead.png?989e1",
"width": 92,
"height": 123
},
"WiseOldManHelp130": {
"initial": "If you're stuck, double-check with Shamus the Leprechaun what you should be doing!",
"options": [],
"effects": [],
"response": [],
"icon": "/images/Wise_Old_Man_chathead.png?68f26",
"width": 78,
"height": 148
},
"Shamus5": {
"initial": "Ay yer big elephant! Yer've caught me, to be sure! What would an elephant like yer be wanting wid ol' Shamus then?",
"options": ["I'm not sure.","How do I get to Zanaris again?"],
"effects": [{},{}],
"response": ["Ha! Look at yer! Look at the stupid elephant who tries to go catching a leprechaun when he don't even be knowing what he wants!","Yer stupid elephant! I'll tell yer again! Yer need to be entering the shed in the middle of the swamp while holding a dramenwood staff! Yer can make the Dramen staff from a dramen tree branch, and there's a Dramen tree on Entrana! You get to Entrana from Port Sarim! Now leave me alone yer great elephant!"],
"icon": "/images/Shamus_chathead.png?989e1",
"width": 92,
"height": 123
},
"Sarim": {
"initial": "Do you seek passage to holy Entrana? If so, you must leave your weaponry and armour behind. This is Saradomin's will.",
"options": ["No, not right now","Yes, okay, I'm ready to go"],
"effects": [{},{"dialogue":"Sarim2"}],
"response": ["Very well.","NO WEAPONS OR ARMOUR are permitted on holy Entrana AT ALL. We will not allow you to travel there in breach of mighty Saradomin's edict. Come back when you have laid down your Zamorakian instruments of death."],
"icon": "/images/Monk_of_Entrana_chathead.png?33896",
"width": 103,
"height": 102
},
"Sarim2": {
"initial": "NO WEAPONS OR ARMOUR are permitted on holy Entrana AT ALL. We will not allow you to travel there in breach of mighty Saradomin's edict. Come back when you have laid down your Zamorakian instruments of death.",
"options": ["Okay, I'll drop my Bronze dagger."],
"effects": [{"questState":135,"trigger":8,"redirect":"https://oldschool.runescape.wiki/w/Entrana"}],
"response": ["All is satisfactory. You may board the boat now. Welcome to Entrana."],
"icon": "/images/Monk_of_Entrana_chathead.png?33896",
"width": 103,
"height": 102
},
"WiseOldManHelp135140": {
"initial": "You should head to Entrana to talk to the monks there!",
"options": [],
"effects": [],
"response": [],
"icon": "/images/Wise_Old_Man_chathead.png?68f26",
"width": 78,
"height": 148
},
"Sarim3": {
"initial": "I just operate the boat. Why don't you talk to an actual 'Monk' on Entrana for help?",
"options": [],
"effects": [],
"response": [],
"icon": "/images/Monk_of_Entrana_chathead.png?33896",
"width": 103,
"height": 102
},
"Entrana": {
"initial": "Welcome to holy Entrana! Feel free to take a look around.",
"options": ["Have you seen any dramen trees around?"],
"effects": [{"questState":140}],
"response": ["No, I haven't. I've heard legends that it only grows underground in dungeons. Talk to me again if you need any more help."],
"icon": "/images/Monk_chathead.png?02814",
"width": 62,
"height": 81
},
"Entrana2": {
"initial": "I hope you're enjoying your stay in holy Entrana away from the violence of the mainland.",
"options": ["Do you know who I could ask about dramen trees?"],
"effects": [{}],
"response": ["I would try talking to the Cave monk who lives north of here. If anyone, he would know something."],
"icon": "/images/Monk_chathead.png?02814",
"width": 62,
"height": 81
},
"CaveMonk": {
"initial": "The dramen tree is here in the Entrana dungeon. Be careful going in there! You are unarmed, and there is much evilness lurking down there! The evilness seems to block off our contact with our gods, so our prayers seem to have less effect down there.",
"options": ["I don't think I'm strong enough to enter then.","Well that is a risk I will have to take."],
"effects": [{"trigger":4},{"dialogue":"TreeSpirit"}],
"response": ["",""],
"icon": "/images/Cave_monk_chathead.png?17eff",
"width": 62,
"height": 81
},
"TreeSpirit": {
"initial": "A tree spirit suddenly appears and attacks you!",
"options": ["Fight back with melee.","Use Water Wave."],
"effects": [{"trigger":6},{"dialogue":"DramenBranch"}],
"response": ["Oh dear, you are dead.","You successfully defeat the tree spirit! You see the dramen tree nearby and grab a dramen branch."],
"icon": "/images/thumb/Tree_spirit_%28Lost_City%29.png/150px-Tree_spirit_%28Lost_City%29.png?2446d",
"omitY":true,
"width": 150,
"height": 283
},
"DramenBranch": {
"initial": "You successfully defeat the tree spirit! You see the dramen tree nearby and grab a dramen branch.",
"options": ["Cut it with a knife."],
"effects": [{"questState":150,"trigger":9}],
"response": ["You have obtained a Dramen staff! Why don't you head to the shed to see what happens?"],
"icon": "/images/thumb/Dramen_tree.png/200px-Dramen_tree.png?c073b",
"omitY":true,
"width": 200,
"height": 331
},
"WiseOldManHelp150": {
"initial": "Congratulations on getting the Dramen staff! Why don't you head to the shed to see what happens? The shed is located in the Lumbridge Swamp.",
"options": [],
"effects": [],
"response": [],
"icon": "/images/Wise_Old_Man_chathead.png?68f26",
"width": 78,
"height": 148
},
"DramenReminder": {
"initial": "You have obtained the Dramen staff! Why don't you head to the shed to see what happens? The shed is located in the Lumbridge Swamp.",
"options": [],
"effects": [],
"response": [],
"icon": "/images/thumb/Dramen_staff_detail.png/150px-Dramen_staff_detail.png?83540",
"omitY":true,
"width": 150,
"height": 152
},
"Swamp2": {
"initial": "You approach the shed.",
"options": ["Equip the Dramen staff and then enter the shed.","Enter the shed and then equip the dramen staff"],
"effects": [{"questState":160,"redirect":"https://oldschool.runescape.wiki/w/Zanaris"},{}],
"response": ["You enter the shed and everything starts to blur...","Nothing interesting happens."],
"icon": "/images/thumb/Dramen_staff_detail.png/150px-Dramen_staff_detail.png?83540",
"omitY":true,
"width": 150,
"height": 152
},
"Zanaris": {
"initial": "Congratulations! You found the Lost City of Zanaris! Why don't you head over to see Jukat in the Zanaris Market Area to buy a Dragon dagger?",
"options": ["Ok"],
"effects": [{"trigger":4}],
"response": [""],
"icon": "/images/Wise_Old_Man_chathead.png?68f26",
"width": 78,
"height": 148
},
"Jukat": {
"initial": "Dragon swords! Here, Dragon swords! Straight from Frenaskrae!",
"options": ["Yes please.","No thanks, I'm just browsing."],
"effects": [{"dialogue":"Jukat2"},{}],
"response": ["Looks like you have exactly 30K coins to buy a Dragon dagger. I'll even throw in some free Weapon poison++!","Okay. Please come back if you would like to buy something."],
"icon": "/images/Jukat_chathead.png?185bb",
"width": 87,
"height": 141
},
"Jukat2": {
"initial": "Looks like you have exactly 30K coins to buy a Dragon dagger. I'll even throw in some free Weapon poison++!",
"options": ["That sounds fine to me. Gimmie!"],
"effects": [{"trigger":3,"questState":500,"dialogue":"Jukat3"}],
"response": [""],
"icon": "/images/Jukat_chathead.png?ba968",
"width": 87,
"height": 141
},
"Jukat3": {
"initial": "",
"trigger": 10,
"options": [],
"effects": [],
"response": [],
"icon": "/images/Lost_City_reward_scroll.png?1819e",
"omitY": true,
"width": 488,
"height": 320
},
"Poor": {
"initial": "",
"options": [],
"effects": [],
"response": [],
"icon": "/images/Wise_Old_Man_chathead.png?68f26",
"width": 78,
"height": 148
},
"OldWOM": {
"initial": "Happy April Fools! Designed by Gau Cho for 2020 over the course of 1-2 weeks.",
"options": [],
"effects": [],
"response": [],
"icon": "/images/Wise_Old_Man_chathead.png?68f26",
"width": 78,
"height": 148
},
"FirstBlood": {
"initial": "Holy Sherlock!",
"questState": 1000,
"options": ["Oups?"],
"effects": [{}],
"response": ["Looks like you unlocked an Achievement button at the top of the page!"],
"icon": "/images/Wise_Old_Man_chathead.png?68f26",
"width": 78,
"height": 148
},
"SpiderDead": {
"initial": "Oh dear, you are dead. Maybe you should get some Slayer gloves to avoid catching the Disease?",
"trigger": 5,
"options": [],
"effects": [],
"response": [],
"icon": "/images/thumb/Death.png/145px-Death.png?71945",
"width": 145,
"height": 300
},
"AHDead": {
"initial": "Oh dear, you are dead. Your Slayer level is not yet high enough to defeat this monster.",
"trigger": 5,
"options": [],
"effects": [{}],
"response": [],
"icon": "/images/thumb/Death.png/145px-Death.png?71945",
"width": 145,
"height": 300
},
"Dead": {
"initial": "Oh dear, you are dead.",
"trigger": 5,
"options": [],
"effects": [{}],
"response": [],
"icon": "/images/thumb/Death.png/145px-Death.png?71945",
"width": 145,
"height": 300
},
"DeadBadWindow": {
"initial": "Oh dear, you are dead. Your browser window dimensions seemed to have suddenly changed, making you trip and fall on your own sword.",
"trigger": 5,
"options": [],
"effects": [],
"response": [],
"icon": "/images/thumb/Death.png/145px-Death.png?71945",
"width": 145,
"height": 300
},
"DeadCucco": {
"initial": "",
"trigger": 5,
"options": [],
"effects": [],
"response": [],
"icon": "/images/thumb/Death.png/145px-Death.png?71945",
"width": 145,
"height": 300
},
"CuccoEscape": {
"initial": "",
"options": [],
"effects": [],
"response": [],
"icon": "/images/thumb/Chicken_%281%29.png/120px-Chicken_%281%29.png?a7258",
"omitY": true,
"width": 120,
"height": 161
},
"AHEscape": {
"initial": "You managed to teleport away from the Alchemical Hydra!",
"options": [],
"effects": [],
"response": [],
"icon": "/images/Orrvor_quo_Maten_chathead.png?f2e37",
"width": 67,
"height": 72
},
"SlayerWin": {
"initial": "",
"options": [],
"effects": [],
"response": [],
"icon": "/images/Orrvor_quo_Maten_chathead.png?f2e37",
"width": 67,
"height": 72
},
"Rah": {
"initial": "Raaa!",
"trigger": 5,
"options": [],
"effects": [],
"response": [],
"icon": "/images/thumb/Penance_Runner_%28wave_1%29.png/180px-Penance_Runner_%28wave_1%29.png?97e46",
"width": 180,
"height": 326
},
"Slayer": {
"initial": "'Ello, and what are you after then?",
"options": ["I need another assignment.","Have you any rewards for me, or anything to trade?","Let's talk about the difficulty of my assignments.","Er... Nothing..."],
"effects": [{},{},{},{"trigger":4}],
"response": ["","","The Slayer Masters may currently assign you any task in our lists, regardless of your combat level.",""],
},
"Nieve": {
"initial": "...",
"options": ["..."],
"effects": [{"trigger":4}],
"response": [""],
"icon": "/images/thumb/Coffin_detail.png/130px-Coffin_detail.png?9d094",
"width": 130,
"height": 120
},
"FireCape": {
"initial": "",
"options": [],
"effects": [],
"response": [],
"icon": "/images/TzHaar-Mej-Jal_chathead.png?df71e",
"width": 94,
"height": 106
},
"Invaders": {
"initial": "",
"options": [],
"effects": [],
"response": [],
"icon": "/images/Captain_Cain_chathead.png?78f37",
"width": 79,
"height": 120
},
"AHscreen": {
"initial": "You need a bigger screen area to fight the Alchemical Hydra! At least 1000x500!",
"options": [],
"effects": [],
"response": [],
"icon": "/images/Wise_Old_Man_chathead.png?68f26",
"width": 78,
"height": 148
},
"Crab": {
"initial": "Reset all quest and achievement data?",
"options": ["Yes","No"],
"effects": [{"trigger":1},{}],
"response": ["Done. Reload the page.","Okay, I won't."],
"icon": "/images/thumb/Crab.png/220px-Crab.png?e81ce",
"width": 220,
"height": 168
},
"DisableCursor": {
"initial": "Your cursor has been disabled! Reload the page for changes to take effect. But maybe I would consider re-enabling the cursor... who knows what could happen?",
"options": [],
"effects": [],
"response": [],
"icon": "",
"omitY": true,
"omitIcon": true,
"width": 0,
"height": 0
},
"EnableCursor": {
"initial": "Your cursor has been re-enabled! Reload the page for changes to take effect. I wonder what mysteries are in store...",
"options": [],
"effects": [],
"response": [],
"icon": "",
"omitY": true,
"omitIcon": true,
"width": 0,
"height": 0
},
"CursorBye": {
"initial": "You have unequipped your weapon! To get back into combat, re-equip a weapon and reload the page!",
"options": [],
"effects": [],
"response": [],
"icon": "/images/Wise_Old_Man_chathead.png?68f26",
"width": 78,
"height": 148
},
"SlashDDS": {
"initial": "Why don't you try testing waving your new dagger at an easy NPC, such as a Cow or something?",
"questState": 501,
"options": ["Got it!"],
"effects": [{"questState":502}],
"response": ["Good luck! Don't hesitate to talk to me if you get stuck!"],
"icon": "/images/Wise_Old_Man_chathead.png?68f26",
"width": 78,
"height": 148
},
}
var masters = {
"Turael": {
"icon": "/images/Turael_chathead.png?1b620",
"width": 103,
"height": 102
},
"Krystilia": {
"icon": "/images/Krystilia_chathead.png?99a3f",
"width": 119,
"height": 167
},
"Mazchna": {
"icon": "/images/Mazchna_chathead.png?47bb8",
"width": 101,
"height": 153
},
"Vannaka": {
"icon": "/images/Vannaka_chathead.png?1b620",
"width": 70,
"height": 109
},
"Chaeldar": {
"icon": "/images/Chaeldar_chathead.png?a7568",
"width": 77,
"height": 101
},
"Konar quo Maten": {
"icon": "/images/Konar_quo_Maten_chathead.png?e0801",
"width": 81,
"height": 70
},
"Steve": {
"icon": "/images/Steve_chathead.png?1b620",
"width": 84,
"height": 92
},
"Duradel": {
"icon": "/images/Duradel_chathead.png?e91f3",
"width": 66,
"height": 102
},
 
}
 
function crab(conversationoverride,datum){
$('#crob').remove();
if(conversationoverride === undefined){
var questState = load("apr-queststate")
if(questState === undefined){
return
}
if (mw.config.get('wgNamespaceNumber') != 0 && mw.config.get('wgNamespaceNumber') != 116) {
return;
}
}
 
var pagename = mw.config.get('wgTitle');
var namespace = mw.config.get('wgCanonicalNamespace');
var categories = mw.config.get('wgCategories');
 
var conversation = null;
if(conversationoverride in dialogue){
conversation = dialogue[conversationoverride];
if(conversationoverride == "Poor"){
conversation.initial = "You are too poor to afford that item! You need "+datum+",000 GP to buy this item."
}
if(conversationoverride == "DeadCucco"){
conversation.initial = "Oh dear, you are dead. You survived the onslaught of "+datum+" Cuccos."
}
if(conversationoverride == "CuccoEscape"){
conversation.initial = "You managed to run away from the Cuccos after "+datum+" Cuccos appeared!"
}
if(conversationoverride == "FireCape"){
if(achievementsOpen){return}
conversation.initial = "You even defeated TzTok-Jad, I am most impressed! Please accept this gift. Give cape back to me if you not want it. Your kill time was "+Math.floor(datum/100)/10+" seconds."
}
if(conversationoverride == "Invaders"){
conversation.initial = "Congratulations on defeating the Penance! It took you about "+Math.floor(datum/4)/10+" seconds!"
}
if(conversationoverride == "SlayerWin"){
if(achievementsOpen){return}
conversation.initial = "Human! You have defeated the Alchemical Hydra! Your kill time was "+Math.floor(datum/100)/10+" seconds."
}
} else {
if(questState === 1){
var WOMtime = (new Date).getTime();
var WOMchance = Math.max(0,Math.min(1,(WOMtime - 1585699200000)/86400000))
WOMchance = WOMchance*WOMchance+0.005
console.log(WOMchance)
if(Math.random()<WOMchance){
conversation = dialogue["IntroPrompt"]
}
}
if(questState > 1 && questState < 100) {
save("apr-queststate",questState + 1)
}
if(questState == 100){
conversation = dialogue["IntroReminder"]
}
if(questState > 1 && questState <= 101) {
if(pagename == "Wise Old Man"){
conversation = dialogue["WiseOldMan"]
}
}
if(questState == 110) {
if(pagename == "Wise Old Man"){
conversation = dialogue["WiseOldManHelp"]
}
if(pagename == "Lumbridge Swamp"){
conversation = dialogue["Swamp"]
}
if(pagename == "Archer (Lost City)"){
conversation = dialogue["Archer"]
}
if(pagename == "Monk (Lost City)"){
conversation = dialogue["Monk"]
}
if(pagename == "Wizard (Lost City)"){
conversation = dialogue["Wizard"]
}
if(pagename == "Warrior (Lost City)"){
conversation = dialogue["Warrior"]
}
}
if(questState == 120) {
if(pagename == "Wise Old Man"){
conversation = dialogue["WiseOldManHelp120"]
}
if(pagename == "Warrior (Lost City)"){
conversation = dialogue["Warrior4"]
}
if(pagename == "Shamus"){
conversation = dialogue["Shamus"]
}
}
if(questState == 130) {
if(pagename == "Wise Old Man"){
conversation = dialogue["WiseOldManHelp130"]
}
if(pagename == "Shamus"){
conversation = dialogue["Shamus5"]
}
if(pagename == "Port Sarim" || pagename == "Monk of Entrana"){
conversation = dialogue["Sarim"]
}
}
if(questState == 135) {
if(pagename == "Wise Old Man"){
conversation = dialogue["WiseOldManHelp135140"]
}
if(pagename == "Port Sarim" || pagename == "Monk of Entrana"){
conversation = dialogue["Sarim3"]
}
if(pagename == "Entrana" || pagename == "Monk" || pagename == "High Priest (Entrana)"){
conversation = dialogue["Entrana"]
}
}
if(questState == 140) {
if(pagename == "Wise Old Man"){
conversation = dialogue["WiseOldManHelp135140"]
}
if(pagename == "Entrana" || pagename == "Monk" || pagename == "High Priest (Entrana)"){
conversation = dialogue["Entrana2"]
}
if(pagename == "Cave monk" || pagename == "Entrana Dungeon" || pagename == "Tree spirit (Lost City)"){
conversation = dialogue["CaveMonk"]
}
}
if(questState == 150) {
if(pagename == "Wise Old Man"){
conversation = dialogue["WiseOldManHelp150"]
}
if(pagename == "Entrana" || pagename == "Monk of Entrana" || pagename == "Monk" || pagename == "High Priest (Entrana)" || pagename == "Cave monk" || pagename == "Entrana Dungeon" || pagename == "Dramen tree" || pagename == "Dramen staff" || pagename == "Dramen branch" || pagename == "Tree spirit (Lost City)"){
conversation = dialogue["DramenReminder"]
}
if(pagename == "Lumbridge Swamp"){
conversation = dialogue["Swamp2"]
}
}
if(questState == 160) {
if(pagename == "Zanaris" || pagename == "Wise Old Man"){
conversation = dialogue["Zanaris"]
}
if(pagename == "Jukat" || pagename == "Jukat (shop)"){
conversation = dialogue["Jukat"]
}
}
if(questState >= 101 && questState <= 200){
if(pagename == "Lost City" || pagename == "Lost City/Quick guide"){
conversation = dialogue["Judged"]
}
}
if(questState == 500){
if(pagename == "Wise Old Man" || Math.random()<0.2){
conversation = dialogue["SlashDDS"]
}
}
if(questState == 501){
if(pagename == "Wise Old Man" || Math.random()<0.05){
conversation = dialogue["SlashDDS"]
}
}
if(questState == 502){
if(pagename == "Wise Old Man"){
conversation = dialogue["SlashDDS"]
}
}
if(questState >= 1000){
var slayerState = load("apr-slayerstate")
if(slayerState <= 19){
if(pagename == "Nieve"){
conversation = dialogue["Nieve"]
}
}
if(slayerState >= 1 && slayerState <= 19 && pagename in masters){
conversation = dialogue["Slayer"]
if(slayerState == 1){
conversation.effects[0] = {"slayerState":2}
conversation.response[0] = "Excellent, you're doing great. Your new task is to kill 13 fever spiders."
} else if(slayerState >= 2 && slayerState <= 16) {
conversation.effects[0] = {}
var remaining = Math.min(13,17-slayerState)
conversation.response[0] = "You're still hunting fever spiders; you have "+remaining+" to go. Come back when you've finished your task."
} else if(slayerState == 17) {
conversation.effects[0] = {"slayerState":18}
conversation.response[0] = "Excellent, you're doing great. Your new task is to kill 1 Alchemical Hydra."
} else if(slayerState == 18) {
conversation.effects[0] = {}
conversation.response[0] = "You're still hunting Alchemical Hydras; you have 1 to go. Come back when you've finished your task."
} else if(slayerState == 19) {
conversation.effects[0] = {"slayerState":20}
conversation.response[0] = "Sorry, I don't have any more tasks for you right now. We need to practice sustainable Slaying to avoid depleting all the monsters in our environment."
}
if( (slayerState >= 1 && slayerState <= 2) || slayerState == 17 || slayerState == 19){
conversation.effects[1] = {}
conversation.response[1]= "I have quite a few rewards you can earn, and a wide variety of Slayer equipment for sale. Come back if you realize you need any equipment."
} else if(slayerState == 3){
conversation.effects[1] = {"slayerState":4}
conversation.response[1]= "I hear you've been having trouble against the Fever spiders. Equip these Slayer gloves to protect against disease. Don't forget to wash your hands and practice social distancing."
} else if(slayerState >= 4 && slayerState <= 16){
conversation.effects[1] = {}
conversation.response[1]= "I already gave you some Slayer gloves! This will allow you to kill the Fever spiders."
} else if(slayerState == 18){
conversation.effects[1] = {}
conversation.response[1]= "You already got Boots of brimstone from the Grand Exchange. Why are you looking at me?"
}
conversation.icon = masters[pagename].icon
conversation.width = masters[pagename].width
conversation.height = masters[pagename].height
save("apr-lastslayermaster",pagename)
}
if(slayerState == 3 && pagename == 'Slayer Equipment (shop)'){
pagename = load("apr-lastslayermaster")
conversation = dialogue["Slayer"]
conversation.response[0] = "You're still hunting fever spiders; you have 13 to go. Come back when you've finished your task."
conversation.effects[1] = {"slayerState":4}
conversation.response[1]= "I hear you've been having trouble against the Fever spiders. Equip these Slayer gloves to protect against disease. Don't forget to wash your hands and practice social distancing."
conversation.icon = masters[pagename].icon
conversation.width = masters[pagename].width
conversation.height = masters[pagename].height
}
if(pagename == "Crab"){
conversation = dialogue["Crab"]
}
if(MD5(pagename) == "da3daba59031da284264382eaa6171e2"){
conversation = dialogue["OldWOM"]
displayAchievement("OldWOM")
}
}
}
if(conversation === null){
return
}
var bubblex, chatboxx
if(conversation.bubblex === undefined){
bubblex = conversation.width
} else {
bubblex = conversation.bubblex
}
if(conversation.chatboxx === undefined){
chatboxx = Math.max(200, bubblex+48)
} else {
chatboxx = conversation.chatboxx
}
var ybubble = ''
if(!("omitY" in conversation)){
ybubble = "<div id=\"crob-speech-arrow\" style=' width: 0; position: relative; bottom: 3px; left: "+bubblex+"px; border-top: 15px solid #FFFDCC; border-left: 0 solid transparent; border-right: 10px solid transparent; filter: drop-shadow(-1px 1px 0 #000) drop-shadow(0 1px 0 #000);'></div>"
}
 
var $div = $("<div id=\"crob\" style='color: black; z-index: 999999999; position: fixed;bottom: 20px;left: 30px;'><div id=\"crob-speech\" style=' position: fixed;bottom: "+(36+conversation.height)+"px;left: 15px;background-color: #FFFDCC;width: "+chatboxx+"px;border: 1px solid black;border-radius: 7px;'><div id=\"crob-speech-text\" style=' margin: 7px 10px;font-family: Arial;font-size: 13px;'></div></div>"+ybubble+"<div id=\"crob-icon\" style=\"background: url("+conversation.icon+") no-repeat;height:"+conversation.height+"px;width:"+conversation.width+"px\"></div></div>")
 
var $buttons = $("<div id=\"crob-speech-buttons\" style=' font-family: Arial;font-size: 14px;position: relative;text-align: center;border-top: 1px solid #C2C2C2;bottom: 0;margin: 7px 7px 10px 7px;'></div>")
 
var $button = $("<button class=\"crob-button\" style=' background-color: #FFFDCC;border: 1px solid #C2C2C2;border-radius: 3px;padding: 5px 12px;margin: 10px 5px 0 5px;'>No</button>")
 
$('#firstHeading').after($div);
$("#crob-speech-text").html(conversation.initial);
if (conversation.options.length > 0) {
$("#crob-speech-text").after($buttons);
}
if("omitY" in conversation){
$("crob-speech-arrow").remove()
}
if("omitIcon" in conversation){
$("crob-icon").remove()
}
 
var onClick = function(event) {
$("#crob-speech-text").html($(event.target).attr('data-response'));
$("#crob-speech-buttons").remove();
if('questState' in event.data){
save("apr-queststate",event.data.questState)
}
if('slayerState' in event.data){
save("apr-slayerstate",event.data.slayerState)
}
if('trigger' in event.data){
if(event.data.trigger == 1){
localStorage.removeItem("apr-queststate")
localStorage.removeItem("apr-weapon")
 
localStorage.removeItem("apr-weapon-inv")
localStorage.removeItem("apr-weapon-buy")
 
localStorage.removeItem("apr-achievementlist")
localStorage.removeItem("apr-totalkills")
localStorage.removeItem("apr-lightdark")
localStorage.removeItem("apr-gp")
localStorage.removeItem("apr-gp-total")
localStorage.removeItem("apr-slayerstate")
localStorage.removeItem("apr-lastslayermaster")
 
localStorage.removeItem("apr-gadgetenabled")
} else if(event.data.trigger == 2){
save("apr-queststate",160)
localStorage.removeItem("apr-weapon")
 
localStorage.removeItem("apr-weapon-inv")
localStorage.removeItem("apr-weapon-buy")
 
localStorage.removeItem("apr-achievementlist")
localStorage.removeItem("apr-totalkills")
localStorage.removeItem("apr-lightdark")
localStorage.removeItem("apr-gp")
localStorage.removeItem("apr-gp-total")
localStorage.removeItem("apr-slayerstate")
localStorage.removeItem("apr-lastslayermaster")
 
localStorage.removeItem("apr-gadgetenabled")
} else if(event.data.trigger == 3){
save("apr-weapon",['Dragon dagger(p++)','0 0','red'])
enableDDS(['Dragon dagger(p++)','0 0','red']);
} else if(event.data.trigger == 4){
$("#crob-speech,#crob-speech-arrow").remove()
} else if(event.data.trigger == 6){
disableDDS(["/images/Skull_%28status%29_icon.png?fa6d8","13 0",'white'])
} else if(event.data.trigger == 7){
$('#crob').remove();
} else if(event.data.trigger == 8){
save("apr-weapon",['Windows','0 0','white'])
disableDDS(['Windows','0 0','white']);
} else if(event.data.trigger == 9){
save("apr-weapon",['Dramen staff','6 0','brown'])
disableDDS(['Dramen staff','6 0','brown']);
} else if(event.data.trigger == 11){
displayAchievement("FirstHit")
achievements.forEach(function(achievement,achievementref){
displayAchievement(achievementref)
})
}
}
if('dialogue' in event.data){
$('#crob').remove();
crab(event.data.dialogue)
}
if('redirect' in event.data){
window.location.href = event.data.redirect;
}
}
for (var i = 0; i < conversation.options.length; i++) {
var butt = $button.clone();
butt.text(conversation.options[i])
butt.attr("data-response", conversation.response[i])
butt.click(conversation.effects[i],onClick);
$("#crob-speech-buttons").append(butt);
}
if('questState' in conversation){
save("apr-queststate",conversation.questState);
}
if('trigger' in conversation){
if(conversation.trigger == 4){
$("#crob-speech,#crob-speech-arrow").remove()
} else if(conversation.trigger == 5){
disableDDS(["/images/Skull_%28status%29_icon.png?fa6d8","13 0","white"])
displayAchievement("Died");
} else if(conversation.trigger == 10){
$("#crob-speech,#crob-speech-arrow").remove()
$('<div id="crob-X" style="width:23px;height:23px;left:414px;position:relative;top:50px;cursor:default;"></div>').appendTo($('div#crob > div')).click(function(){$('#crob').remove();})
}
}
}
 
function AH(npc){
$(document).mouseleave(function () {
if(DDSenabled){
DDSenabled = false
crab("AHEscape")
}
});
 
var AHRanged = function(npc,offsetx,offsety){
var startx = npc.dom.getBoundingClientRect().left + npc.width/2 + offsetx
var starty = npc.dom.getBoundingClientRect().top + npc.height/2 + offsety
projectileTracked("/images/Alchemical_Hydra_ranged_projectile.png?2a2bc","apr-hydra-ranged",80,80/1561*585,startx,starty,20,150,0)
}
 
var AHMagic = function(npc,offsetx,offsety){
var startx = npc.dom.getBoundingClientRect().left + npc.width/2 + offsetx
var starty = npc.dom.getBoundingClientRect().top + npc.height/2 + offsety
projectileTracked("/images/Alchemical_Hydra_magic_projectile.png?2a2bc","apr-hydra-magic",50,50/1013*592,startx,starty,20,150,0.3914051281252104)
}
 
var AHFire = function(npc,remaining){
if(npc.phase == 3 || !DDSenabled){ return }
var curX = lastX
var curY = lastY
setTimeout(burnOver,900,"/images/Alchemical_Hydra_flame_wall_attack.png?2a2bc","apr-hydra-burn",curX,curY,250*resizeratio,250*resizeratio,300,10000,true,"#protectMelee")
if(remaining>0){
setTimeout(AHFire,1200,npc,remaining-1)
}
}
 
var AHTornado = function(startX,startY){
seekerMissile("/images/Alchemical_Hydra_lightning_attack.png?2a2bc","apr-hydra-tornado",250*resizeratio,250*resizeratio,startX,startY,300,20*resizeratio,250*resizeratio,600,-10)
}
 
var AHAttack = function(npc){
if(width != $(window).width() || height != $(window).height()){
crab("DeadBadWindow")
}
if(npc.skipattack > 0){
npc.skipattack -= 1
} else if(npc.specialtimer == 0){
npc.specialtimer = 9
if(npc.phase == 0 || npc.phase == 3){
burnOver("/images/Alchemical_Hydra_acid_pool_attack.png?2a2bc","apr-hydra-poison",lastX,lastY,250*resizeratio,250*resizeratio,600,10000,true,"#protectMelee")
for (var i = 0; i < 4; i++) {
setTimeout(function(){
burnOver("/images/Alchemical_Hydra_acid_pool_attack.png?2a2bc","apr-hydra-poison",Math.random()*width,Math.random()*height,250*resizeratio,250*resizeratio,600,10000,true,"#apr-hydra-vent-red")
},600)
}
}
if(npc.phase == 1){
i = 0
var attempts = 0
while(i<4){
var startX = Math.random()*width
var startY = Math.random()*height
var dist = getDist(startX-lastX,startY-lastY)
if(dist < 350){
attempts += 1
if(attempts > 1000){
crab("Dead")
break
}
} else {
i += 1
AHTornado(startX,startY)
}
}
}
if(npc.phase == 2){
AHFire(npc,11)
}
} else {
npc.specialtimer -= 1
 
if(npc.mainattackswitch == 0){
npc.mainattack = 1-npc.mainattack
if(npc.phase == 3){
npc.mainattackswitch = 1
} else {
npc.mainattackswitch = 3
}
}
npc.mainattackswitch -= 1
 
if(npc.mainattack == 0){
prayerKillDelay("Ranged",600)
AHRanged(npc,43,-70)
if(npc.phase <= 1){
AHRanged(npc,0,0)
}
 
} else {
prayerKillDelay("Magic",600)
AHMagic(npc,-57,-90)
if(npc.phase <= 0){
AHMagic(npc,-100,-18)
}
}
}
if(DDSenabled && !npc.dead){
setTimeout(AHAttack,3600,npc)
}
}
 
$('body').css("overflow","hidden")
var width = $(window).width()
var height = $(window).height()
var resizeratio = Math.max(1,Math.sqrt(width/1903*height/976))
 
if(width<1000){
crab("AHscreen")
DDSenabled = false;
return
}
if(height<500){
crab("AHscreen")
DDSenabled = false;
return
}
 
var main = $('<div class="apr-hydra"/>').appendTo('body')
$(npc.dom).attr("src",ahimg[0])
$(npc.dom.parentElement.parentElement).appendTo(main)
$(npc.dom.parentElement).css("left",(width-npc.width)/2)
$(npc.dom.parentElement).css("top",(height-npc.height)/2)
$(npc.dom.parentElement).css("position","absolute")
$(npc.dom.parentElement).prop("fixed","true")
$('<img id="apr-hydra-vent-red" class="apr-hydra-vent" src="/images/Alchemical_Hydra_red_vent.png?c2c96" style="left:0px;top:'+(height-250)+'px">').prependTo(main).prop("top",(height-200))
$('<img id="apr-hydra-vent-green" class="apr-hydra-vent" src="/images/Alchemical_Hydra_green_vent.png?c2c96" style="left:'+(width-250)+'px;top:0px">').prependTo(main).prop("left",(width-200))
$('<img id="apr-hydra-vent-blue" class="apr-hydra-vent" src="/images/Alchemical_Hydra_blue_vent.png?c2c96" style="left:0px;top:0px">').prependTo(main)
$("#p-personal").remove()
$("div.menu").remove()
$("div.suggestions").remove()
 
setupPrayer()
 
AHAttack(npc)
 
}
var ahimg = [
"/images/thumb/Alchemical_Hydra_%28serpentine%29.png/272px-Alchemical_Hydra_%28serpentine%29.png?925dd",
"/images/thumb/Alchemical_Hydra_%28electric%29.png/230px-Alchemical_Hydra_%28electric%29.png?925dd",
"/images/thumb/Alchemical_Hydra_%28fire%29.png/234px-Alchemical_Hydra_%28fire%29.png?925dd",
"/images/thumb/Alchemical_Hydra_%28extinguished%29.png/234px-Alchemical_Hydra_%28extinguished%29.png?925dd"
]
function AHhit(npc){
var left = parseFloat($(npc.dom.parentElement).css("left"))
var top = parseFloat($(npc.dom.parentElement).css("top"))
 
if(npc.accuracy == 0.25){
if(npc.phase == 0){
if(left<200 && (top+npc.height)>$("#apr-hydra-vent-red").prop("top")){
npc.accuracy = 1;
}
}
if(npc.phase == 1){
if(top<200 && (left+npc.width)>$("#apr-hydra-vent-green").prop("left")){
npc.accuracy = 1;
}
}
if(npc.phase == 2){
if(top<200 && left<200){
npc.accuracy = 1;
}
}
}
 
if(npc.hits == (npc.phase+1)*80){
npc.phase = npc.hits/80
$(npc.dom).attr("src",ahimg[npc.phase])
 
 
npc.specialtimer = 3
if(npc.phase == 3){
npc.mainattackswitch = 0
npc.accuracy = 1
} else {
npc.accuracy = 0.25
}
npc.skipattack = 1
}
}
 
function Cucco(){
$('body').css("overflow","hidden")
var width = $(window).width()
var height = $(window).height()
if(width/height > 0.25 && width/height < 4){
var cuccoCount = 0
var cuccoSpawned = 0
var basex = Math.floor(Math.sqrt(width*height/100/1.35));
var basey = Math.floor(Math.sqrt(width*height/100/1.35)*1.35);
var body = $('body')
$("#p-personal").remove()
$("div.menu").remove()
$("div.suggestions").remove()
 
$(document).mouseleave(function () {
if(DDSenabled){
DDSenabled = false
crab("CuccoEscape",cuccoSpawned)
}
});
 
var cuccoAttack = function(){
cuccoCount += 1
if(width != $(window).width() || height != $(window).height()){
crab("DeadBadWindow")
}
 
if(Math.random()<0.5){
cuccoSpawned += 1
var img = ['/images/thumb/Chicken_%281%29.png/89px-Chicken_%281%29.png?a7258','/images/thumb/Chicken_%282%29.png/89px-Chicken_%282%29.png?ec54e','/images/thumb/Chicken_%283%29.png/88px-Chicken_%283%29.png?22962','/images/thumb/Chicken_%284%29.png/88px-Chicken_%284%29.png?e1827','/images/thumb/Chicken_%285%29.png/88px-Chicken_%285%29.png?bf9d3','/images/thumb/Chicken_%286%29.png/88px-Chicken_%286%29.png?0f7e8']
var cucco = $("<img class='apr-cucco' src='"+img[Math.floor(Math.random()*6)]+"'>")
cucco.css("position","fixed");
cucco.css("top",Math.random()*height-basey/2+'px');
cucco.css("left",(-basey)+'px');
cucco.css("width",basex+'px');
cucco.css("height",basey+'px');
cucco.css("transform",'rotate('+Math.random()+'turn)');
$('.mwe-popups').remove()
body.append(cucco)
cucco.hover(function(){
if(DDSenabled){
crab("DeadCucco",cuccoSpawned)
}
})
}
 
$('.apr-cucco').each(function(){
var newx = parseInt($(this).css("left"))+width/80
if(newx>width+basex){
$(this).remove()
} else {
$(this).css("left",newx)
}
})
 
 
if(cuccoSpawned == 200){
displayAchievement("Cucco")
}
 
if(DDSenabled){
setTimeout(cuccoAttack,50)
}
}
 
cuccoAttack()
 
} else {
crab("DeadBadWindow")
}
}
 
function attackOver(icon,classname,sizex,sizey,duration){
var attack = $("<img class='"+classname+"' src='"+icon+"'>")
attack.css("position","fixed");
attack.css("top",lastY-sizey/2+'px');
attack.css("left",lastX-sizex/2+'px');
attack.css("width",sizex+'px');
attack.css("height",sizey+'px');
$('body').append(attack)
setTimeout(function(){attack.remove()}, duration);
}
function burnOver(icon,classname,x,y,sizex,sizey,hoverdelay,duration,randomrotation,jquerytarget){
var attack = $("<img class='"+classname+"' src='"+icon+"'>")
attack.css("position","fixed");
attack.css("top",y-sizey/2+'px');
attack.css("left",x-sizex/2+'px');
attack.css("width",sizex+'px');
attack.css("height",sizey+'px');
if(randomrotation){
attack.css("transform","rotate("+Math.random()+"turn)")
}
$(jquerytarget).after(attack)
setTimeout(function(){
attack.detach()
attack.addClass("apr-burndone")
attack.hover(function(){
if(DDSenabled){
crab("Dead")
}
})
$(jquerytarget).after(attack)
},hoverdelay)
setTimeout(function(){attack.remove()},duration);
}
 
function seekerMissile(icon,classname,sizex,sizey,startx,starty,frames,speed,diameter,durationout,baserotation){
var attack = $("<img class='"+classname+"' src='"+icon+"'>")
var x = startx-sizex/2
var y = starty-sizey/2
attack.css("position","fixed");
attack.css("left",x+'px');
attack.css("top",y+'px');
attack.css("width",sizex+'px');
attack.css("height",sizey+'px');
 
var deltax = (lastX-sizex/2-x)
var deltay = (lastY-sizey/2-y)
if(baserotation!=-10){
attack.css("transform","rotate("+(Math.atan2(deltay,deltax)+baserotation)+"rad)")
}
 
$('body').append(attack)
 
 
var seekerMissilePosition = function(attack,sizex,sizey,x,y,frames,speed,radius,durationout,baserotation){
var deltax = (lastX-sizex/2-x)
var deltay = (lastY-sizey/2-y)
var dist = getDist(deltax,deltay)
if(dist<speed){
x = lastX
y = lastY
} else {
x = x + deltax/dist*speed
y = y + deltay/dist*speed
}
attack.css("left",x+'px');
attack.css("top",y+'px');
if(baserotation!=-10){
attack.css("transform","rotate("+(Math.atan2(deltay,deltax)+baserotation)+"rad)")
}
if(dist<radius/2){
if(DDSenabled){
crab("Dead")
}
setTimeout(function(){attack.remove()}, durationout);
} else {
if(frames == 1){
setTimeout(function(){attack.remove()}, durationout);
} else {
setTimeout(seekerMissilePosition,33,attack,sizex,sizey,x,y,frames-1,speed,radius,durationout,baserotation);
}
}
}
 
setTimeout(seekerMissilePosition,33,attack,sizex,sizey,x,y,frames-1,speed,diameter/2,durationout,baserotation);
}
 
function projectileTracked(icon,classname,sizex,sizey,startx,starty,frames,durationout,baserotation){
var attack = $("<img class='"+classname+"' src='"+icon+"'>")
var x = startx-sizex/2
var y = starty-sizey/2
attack.css("position","fixed");
attack.css("left",x+'px');
attack.css("top",y+'px');
 
var deltax = (lastX-sizex/2-x)
var deltay = (lastY-sizey/2-y)
if(baserotation!=-10){
attack.css("transform","rotate("+(Math.atan2(deltay,deltax)+baserotation)+"rad)")
}
 
$('body').append(attack)
 
 
var projectileTrackedPosition = function(attack,sizex,sizey,x,y,frames,durationout,baserotation){
var deltax = (lastX-sizex/2-x)/frames
var deltay = (lastY-sizey/2-y)/frames
x = x + deltax
y = y + deltay
attack.css("left",x+'px');
attack.css("top",y+'px');
if(baserotation!=-10){
attack.css("transform","rotate("+(Math.atan2(deltay,deltax)+baserotation)+"rad)")
}
if(frames == 1){
setTimeout(function(){attack.remove()}, durationout);
} else {
setTimeout(projectileTrackedPosition,33,attack,sizex,sizey,x,y,frames-1,durationout,baserotation);
}
}
 
setTimeout(projectileTrackedPosition,33,attack,sizex,sizey,x,y,frames-1,durationout,baserotation);
}
 
function barrage(npc){
var barra = $("<img class='apr-barrage' src='/images/Ice_Barrage_iceblock.png?b4915'>")
barra.css("position","fixed");
barra.css("top",lastY-173/2+'px');
barra.css("left",lastX-100/2+'px');
$('body').append(barra)
crab("Dead");
displayAchievement("Wombat")
setTimeout(function(){barra.remove()}, 2000);
}
 
function prayerKill(style){
if(curPrayer != style && DDSenabled){
crab("Dead")
}
}
function prayerKillDelay(style,timeout){
if(curPrayer != style && DDSenabled){
setTimeout(crab,timeout,"Dead")
}
}
var curPrayer = ""
function setPrayer(e){
$('.apr-prayer-highlight').css("opacity",0)
if(e.data == curPrayer){
curPrayer = ""
} else {
curPrayer = e.data
$('#apr-prayer-highlight-'+curPrayer).css("opacity",1)
}
}
function setupPrayer(){
$('<div class="apr-prayer-background">').appendTo($('body'))
$('<div id="apr-prayer-highlight-Magic" class="apr-prayer apr-prayer-highlight" style="right:128px"></div><div id="protectMagic" class="apr-prayer apr-prayer-icon" style="right:128px;background-image:url(/images/Protect_from_Magic.png?5c9d8)"></div>').appendTo($('body')).click("Magic",setPrayer)
$('<div id="apr-prayer-highlight-Ranged" class="apr-prayer apr-prayer-highlight" style="right:92px"></div><div id="protectRanged" class="apr-prayer apr-prayer-icon" style="right:92px;background-image:url(/images/Protect_from_Missiles.png?686a4)"></div>').appendTo($('body')).click("Ranged",setPrayer)
$('<div id="apr-prayer-highlight-Melee" class="apr-prayer apr-prayer-highlight" style="right:56px"></div><div id="protectMelee" class="apr-prayer apr-prayer-icon" style="right:56px;background-image:url(/images/Protect_from_Melee.png?65856"></div>').appendTo($('body')).click("Melee",setPrayer)
}
 
var TTJlist = {
"Ma":"/images/TzTok-Jad_magic_attack.png?0b424",
"Me":"/images/TzTok-Jad_melee_attack.png?0b424",
"N":"/images/TzTok-Jad_neutral_pose.png?0b424",
"R1":"/images/TzTok-Jad_ranged_attack_part_1.png?0b424",
"R2":"/images/TzTok-Jad_ranged_attack_part_2.png?0b424",
}
var TTJhover = false
function TTJ(npc){
var TTJon = function(){TTJhover = true}
var TTJoff = function(){TTJhover = false}
$(npc.dom).hover(TTJon,TTJoff)
 
setupPrayer()
 
var TTJAttack = function(npc){
var TTJNormalAnim = function(npc){
npc.dom.src = TTJlist["N"]
npc.dom.srcset = TTJlist["N"]
}
var TTJRange2Anim = function(npc){
npc.dom.src = TTJlist["R2"]
npc.dom.srcset = TTJlist["R2"]
}
var TTJMage = function(npc){
npc.dom.src = TTJlist["Ma"]
npc.dom.srcset = TTJlist["Ma"]
setTimeout(TTJNormalAnim,2400,npc)
setTimeout(prayerKillDelay,1800,"Magic",1000)
setTimeout(function(){
var startx = npc.dom.getBoundingClientRect().left + 50
var starty = npc.dom.getBoundingClientRect().top + 100
projectileTracked("/images/TzTok-Jad_magic_projectile.png?c6ae1","apr-ttj-magic",100,94,startx,starty,30,300,0.7853981633974483)
},1800)
}
var TTJRange = function(npc){
npc.dom.src = TTJlist["R1"]
npc.dom.srcset = TTJlist["R1"]
setTimeout(TTJRange2Anim,300,npc)
setTimeout(TTJNormalAnim,600,npc)
setTimeout(prayerKillDelay,1800,"Ranged",600)
setTimeout(function(){attackOver("/images/TzTok-Jad_ranged_projectile.png?c6ae1","apr-ttj-ranged",100,193,600)},1800)
}
var TTJMelee = function(npc){
npc.dom.src = TTJlist["Me"]
npc.dom.srcset = TTJlist["Me"]
setTimeout(TTJNormalAnim,600,npc)
prayerKill("Melee")
}
 
 
if(npc.dead || !DDSenabled){return}
 
var atk = Math.random()*(2+TTJhover)
 
if(atk<1){
TTJMage(npc)
} else if(atk<2){
TTJRange(npc)
} else {
TTJMelee(npc)
}
 
if(!npc.dead && DDSenabled){
setTimeout(TTJAttack,4800,npc)
}
}
 
setTimeout(TTJAttack,1200,npc)
}
 
function NPC(dom){
this.hp = 10
this.accuracy = 1
this.hits = 0
this.dead = false
this.speed = 500
this.dom = dom;
this.mechanics = false
if(achievementsOpen){
this.accuracy = 0.2
this.hp =5
} else {
var query = MD5(mw.config.get('wgTitle'))
if(query == "4f66ec58eb4e9d48b01a7480c51c89b4"){
this.hp = 5
if(load("apr-slayerstate")<=3){
this.accuracy = 0;
}
}
if(query == "09ec2c80c276b958ef255c6120cbe97a"){
this.hp = 1
this.speed = 1000
}
if(query == "e8f65c7327e4ae90e767afc30a709419"){
this.accuracy = 0;
this.mechanics = 1;
this.angry = false;
}
if(query == "a9514f8884af954749b66932d8a95a76"){
this.accuracy = 0;
this.mechanics = 2;
this.angry = false;
disableHighlight();
}
if(query == "b31eb4b7a63bfaa339c679b86445b700" || query == "789ef204f9b93cc224a4e25694691684"){
this.hp = 1
this.accuracy = 0.3
}
if(query == "7dd8d4d08aa31a5c516f21d40a03c8a5"){
this.hp = 60
this.accuracy = 0.5
this.angry = false;
this.mechanics = 3
this.speed = 2000
bossTimer = Date.now()
disableHighlight();
}
if(query == "b2df76532200e6522fd6da3967e7c94c" || query == "2586a16a520a2c20d7309b799a627f22"){
this.mechanics = 4;
this.angry = false;
disableHighlight();
}
if(query == "fd9cf477745dbeee730e23af6a81a887"){
this.hp = 50
}
if(query == "f06eb95413908c7a0be080f82e1f4d56"){
this.hp = 80*4;
this.mechanics = 5;
this.accuracy = 0.25
this.angry = false;
this.speed = 2000
this.phase = 0
this.mainattack = 0
this.mainattackswitch = 3
this.specialtimer = 3
this.skipattack = 1
this.width = 270
this.height = 298
bossTimer = Date.now()
disableHighlight();
}
if(query == "324696af5d4cb32efd2594c463cc56cc"){
this.hp = 1
this.speed = 1000
}
if(query == "04f12d4923ec5069ac75e6d364b719cb"){
this.hp = 1
this.speed = 1000
disableHighlight();
}
}
}
 
var wepcolor = 'red'
function linedraw(x1, y1, x2, y2) {
var tmp
if (x2 < x1) {
tmp = x2 ; x2 = x1 ; x1 = tmp
tmp = y2 ; y2 = y1 ; y1 = tmp
}
 
var lineLength = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));
var m = (y2 - y1) / (x2 - x1)
 
var degree = Math.atan(m) * 180 / Math.PI
 
$('body').append("<div class='osrs_dds line' style='transform-origin: top left; transform: rotate(" + degree + "deg); width: " + lineLength + "px; height: 1px; background: "+wepcolor+"; position: absolute; top: " + y1 + "px; left: " + x1 + "px;'></div>")
}
 
 
function mouseDown(e){
if(e.which == 1){
mouseStateDown=true;
}
}
function mouseUp(e){
if(e.which == 1){
mouseStateDown=false;
$(".osrs_dds").remove();
}
}
function killNPC(npc, el ) {
npc.dead = true;
save("apr-totalkills",load("apr-totalkills")+1)
 
updateDarkModeAchievement();
checkAchievementKillCount();
loggedInAchievement();
checkAchievementSimples(npc);
slayerAchievements();
 
var seconds = npc.speed/1000;
var children = $(el).children("img");
children.css("transition","opacity "+seconds+"s ease")
children.css("opacity",0)
setTimeout(function() {
$(el.parentElement).remove();
}, npc.speed);
}
 
var lastX = 0
var lastY = 0
function mouseMove(e){
lastX = e.clientX
lastY = e.clientY
if(mouseStateDown && DDSenabled){
linedraw(e.pageX-e.movementX,e.pageY-e.movementY,e.pageX,e.pageY)
if(e.target.parentElement.classList.contains("hittable")){
var curTime = Date.now()
if(lastHit+200<curTime){
lastHit = curTime
if(typeof e.target.npcid === "undefined"){
e.target.npcid = NPCarray.length
NPCarray[NPCarray.length] = new NPC(e.target)
}
 
var npc = NPCarray[e.target.npcid];
 
if(npc.mechanics == 3 && !npc.angry){
npc.angry = true;
TTJ(npc);
} else if(npc.mechanics == 5 && !npc.angry){
if(load("apr-slayerstate")<=17){
crab("AHDead")
return
} else {
npc.angry = true;
AH(npc);
}
}
 
if(npc.accuracy>Math.random()){
displayAchievement("FirstHit");
npc.hits += 1
var splat
if(npc.hits >= npc.hp){
if(!npc.dead){
splat = $("<img class='apr-hitsplat' style='left:"+(e.target.parentElement.offsetWidth*Math.random()-12)+"px;top:"+(e.target.parentElement.offsetHeight*Math.random()-12)+"px' src='/images/73.png?ba00a'>").appendTo(e.target.parentElement).prop("npcid",e.target.npcid)
setTimeout(function(){splat.remove()},6000)
killNPC(npc,e.target.parentElement)
}
} else {
splat = $("<img class='apr-hitsplat' style='left:"+(e.target.parentElement.offsetWidth*Math.random()-12)+"px;top:"+(e.target.parentElement.offsetHeight*Math.random()-12)+"px' src='/images/73.png?ba00a'>").appendTo(e.target.parentElement).prop("npcid",e.target.npcid)
setTimeout(function(){splat.remove()},6000)
if(npc.mechanics == 4 && !npc.angry){
npc.angry = true;
npc.dom.parentElement.remove()
Invaders()
} else if(npc.mechanics == 5 && npc.angry){
AHhit(npc)
}
}
} else {
splat = $("<img class='apr-hitsplat' style='left:"+(e.target.parentElement.offsetWidth*Math.random()-12)+"px;top:"+(e.target.parentElement.offsetHeight*Math.random()-12)+"px' src='/images/Zero_hitsplat.png?482dd'>").appendTo(e.target.parentElement).prop("npcid",e.target.npcid)
setTimeout(function(){splat.remove()},6000)
if(MD5(mw.config.get('wgTitle')) == "4f66ec58eb4e9d48b01a7480c51c89b4"){
var slayerState = load("apr-slayerstate")
if(slayerState <= 3){
if(slayerState >= 2){
save("apr-slayerstate",3)
crab("SpiderDead");
} else {
crab("Dead");
}
}
}
if(npc.mechanics == 1 && !npc.angry){
npc.angry = true;
setTimeout(barrage, 4000, npc);
}
if(npc.mechanics == 2 && !npc.angry){
npc.angry = true;
Cucco();
}
}
}
}
}
}
 
function enableDDS(weapon){
DDSenabled = true;
setWeapon(weapon,false)
}
function disableDDS(weapon){
DDSenabled = false;
setWeapon(weapon,false)
}
function setWeapon(weapon,checkBye){
wepcolor = weapon[2];
if(weapon[0]=='Windows'){
$('body').css('cursor','')
DDSenabled = false;
if(load('apr-queststate')>=1000 && checkBye){
setTimeout(crab,50,"CursorBye")
}
} else if(weapon[0][0] == '/') {
$('body').css('cursor','url('+weapon[0]+') '+weapon[1]+',pointer')
} else {
$('body').css('cursor','url('+getFileURL(weapon[0]+' cursor.png')+') '+weapon[1]+',pointer')
}
}
 
function checkAchievementKillCount(){
var pagekills = 0
var totalkills = load("apr-totalkills")
for(var i=0; i<NPCarray.length; i++){
pagekills += NPCarray[i].dead
}
if(totalkills>=1000){
displayAchievement("Total1000Kill");
} else if(totalkills>=50){
displayAchievement("Total100Kill");
} else if(totalkills>=10){
displayAchievement("Total10Kill");
}
if(pagekills >= 5){
displayAchievement("Page5Kill");
}
 
}
function updateDarkModeAchievement(){
var mode = getCookie("darkmode")
var lightdark = load("apr-lightdark")
if(mode === false || mode === "false"){
lightdark[0] = true;
} else {
lightdark[1] = true;
}
save("apr-lightdark",lightdark)
if(lightdark[0] && lightdark[1]){
displayAchievement("LightDark")
}
}
function slayerAchievements(){
var slayerState = load("apr-slayerstate")
if(slayerState >= 4){
if(MD5(mw.config.get('wgTitle')) == "4f66ec58eb4e9d48b01a7480c51c89b4") {
if(slayerState < 17){
slayerState += 1
save("apr-slayerstate",slayerState)
var width = $(window).width()
var height = $(window).height()
var itemz = $('<img src="'+getFileURL(mw.config.get('wgTitle')+'.png')+'" width="60" height="40">')
itemz.css("transform",'rotate('+Math.random()+'turn)');
itemz.prop("fixed","true")
var itema = $('<span class="hittable bumper spinny"></span>').append(itemz)
itema.css("left",Math.random()*(width-60-300))
itema.css("top",Math.random()*(height-60))
itema.css("position","absolute")
var itemb = $('<span class="hittabletop"></span>').append(itema)
$(".mw-parser-output").append(itemb)
}
if(slayerState>=17){
displayAchievement("Slayer")
}
}
}
if(slayerState >= 18){
if(MD5(mw.config.get('wgTitle')) == "f06eb95413908c7a0be080f82e1f4d56") {
if(slayerState == 18){
slayerState += 1
save("apr-slayerstate",slayerState)
}
if(slayerState>=19){
crab("SlayerWin",Date.now() - bossTimer)
displayAchievement("Slayer2")
}
}
}
}
 
function loggedInAchievement(){
if(mw.config.get("wgUserName")){
displayAchievement("LoggedIn")
}
}
 
function checkAchievementSimples(npc){
if(achievementsOpen){
displayAchievement("Inception")
} else {
var query = MD5(mw.config.get('wgTitle'))
if(query == "a8e0286c13b376010251a761326a4b61" || query == "78698ef9be047049e324fbf8762e49e3" || query == "3e3411dc9821e95190da5b609451029f" || query == "e138090effb008476982705d2a74857d") {
displayAchievement("CerealKiller")
}
if(query == "09ec2c80c276b958ef255c6120cbe97a"){
displayAchievement("73")
}
if(query == "50b168de95e4814306c14fb2b14fb8d2" || query == "0bedb1f1643387b05f11d102b6652815"){
displayAchievement("HandBite")
}
if(query == "b31eb4b7a63bfaa339c679b86445b700" || query == "789ef204f9b93cc224a4e25694691684"){
var wep = load("apr-weapon")
if(wep[0] == "Dragon dagger(p++)"){
save("apr-weapon",['Dragon dagger','0 0','red'])
enableDDS(['Dragon dagger','0 0','red']);
displayAchievement("Dishwasher")
}
}
if(query == "5fdea4b55ecfc08b41b2e00f20e0e77e" || query == "0a671d6817c73446d1f2603796ba243a" || query == "9d41e8047e0a8e8b4434f117b4f1aa7d"){
var wep2 = load("apr-weapon")
if(wep2[0] == "Dragon dagger"){
save("apr-weapon",['Dragon dagger(p++)','0 0','red'])
enableDDS(['Dragon dagger(p++)','0 0','red']);
displayAchievement("Herbalist")
}
}
if(query == "7dd8d4d08aa31a5c516f21d40a03c8a5"){
crab("FireCape",Date.now() - bossTimer)
displayAchievement("FireCape")
}
if(query == "1f54189f4d37bb3eeacf73027c8d6667"){
displayAchievement("Announce")
}
if(MD5(query) == "1885ba58ea6e51744e1938e166151112"){
var wep3 = MD5(load("apr-weapon")[0])
if(wep3 == "5c4f94f3be5e790ad8d5c058b69c037f" || wep3 == "b60c371438a43749555f0a4cbaeceeff"){
displayAchievement("Uncle")
}
}
if(query == "324696af5d4cb32efd2594c463cc56cc"){
var wep4 = load("apr-weapon")
if(wep4[0] == "Dragon scimitar"){
save("apr-weapon",['Dragon scimitar (or)','0 0','rgb(183,137,21)'])
enableDDS(['Dragon scimitar (or)','0 0','rgb(183,137,21)']);
displayAchievement("Trimmed")
} else if(wep4[0] == "Dragon scimitar (or)"){
save("apr-weapon",["Dragon scimitar","0 0","red"])
enableDDS(["Dragon scimitar","0 0","red"]);
displayAchievement("Trimmed")
}
}
if(query == "fd9cf477745dbeee730e23af6a81a887"){
displayAchievement("GetBond")
}
}
}
 
var mouseStateDown = false;
var DDSenabled = false;
var lastHit = 0;
var bossTimer = 0;
 
var NPCarray = [];
 
function Invaders(){
 
function getHeight(i){
if(i<2){
return 6
}
return 4
}
function updateDom(enemy){
if(enemy.y < 0){
enemy.dom.css("display","none")
} else {
enemy.dom.css("left",leftoffset+blocksize*enemy.x)
enemy.dom.css("top",topoffset+blocksize*enemy.y)
}
}
 
function InvaderEnemy(type,i,j){
this.x = 3+j*4
if(i<=2){
this.y = 0+i*8
} else {
this.y = 16+(i-2)*6
}
 
var img
var tall
var wide = 2
if(type == "healer"){
img = "/images/Penance_Healer_front_angle.png?69c56"
tall = 6
} else {
img = "/images/Penance_Runner_front_angle.png?69c56"
tall = 4
}
 
this.dom = $('<img id="'+i+'MOB'+j+'" class="apr-invader-mob" src="'+img+'" style="height'+(tall*blocksize)+':px;width:'+(wide*blocksize)+'px;">')
this.dom.appendTo('.apr-invader')
 
updateDom(this)
}
function Cannon(){
this.x = 0
this.y = 39
this.dom = $('<img id="cannonMOB" class="apr-invader-mob" src="/images/Egg_launcher_top_view.png?3b932" style="height'+(3.13703703704*blocksize)+':px;width:'+(2*blocksize)+'px;">')
this.dom.appendTo('.apr-invader')
updateDom(this)
}
function Egg(){
this.x = -1
this.y = -1
this.dom = $('<img id="eggMOB" class="apr-invader-mob" src="/images/thumb/Red_egg_detail.png/160px-Red_egg_detail.png?e0ce4" style="height'+(1.49375*blocksize)+':px;width:'+blocksize+'px;">')
this.dom.appendTo('.apr-invader')
updateDom(this)
}
 
function mainLoop(){
if(direction == 0){
enemyArray[currenti][currentj].x += 1
if(enemyArray[currenti][currentj].x == 42){
nextDirection = 1
}
} else if(direction == 1 || direction == 3){
enemyArray[currenti][currentj].y += 1
 
var deathrow = 40-getHeight(currenti)
if(enemyArray[currenti][currentj].y == deathrow){
crab("Rah")
gameEnabled = false;
}
} else if(direction == 2){
enemyArray[currenti][currentj].x -= 1
if(enemyArray[currenti][currentj].x == 0){
nextDirection = 3
}
}
updateDom(enemyArray[currenti][currentj])
 
cannon.x = Math.min(43,Math.max(0,Math.floor((lastX-leftoffset)/blocksize)))-0.5
updateDom(cannon)
 
lastShot -= 1
if(lastShot <= 0 && mouseStateDown){
egg.x = cannon.x+0.5
egg.y = cannon.y
lastShot = 40
egg.dom.css("display","inline")
}
egg.y -= 1
 
var i,j
var height
for (i = 0; i < 4; i++) {
height = getHeight(i)
for (j = 0; j < 10; j++) {
if(enemyArray[i][j]){
if(egg.x >= enemyArray[i][j].x && egg.x < enemyArray[i][j].x+2 && egg.y >= enemyArray[i][j].y && egg.y < enemyArray[i][j].y+height){
egg.y=-1
enemyArray[i][j].dom.remove()
enemyArray[i][j] = false
kills += 1
}
}
}
}
 
updateDom(egg)
 
do{
if(kills == 40){
break
}
currentj+=1
if(currentj==10){
currentj=0
currenti-=1
if(currenti==-1){
currenti=3
direction=nextDirection
if(direction == 1 || direction == 3){
nextDirection = 3-direction
}
}
}
}
while(!enemyArray[currenti][currentj])
 
gameTicks += 1
 
if(gameEnabled && kills < 40){
setTimeout(mainLoop,25)
}
if(kills == 40){
displayAchievement("Invaders")
crab("Invaders",gameTicks)
}
}
 
var width = $(window).width()
var height = $(window).height()
 
var leftoffset = 0
var topoffset = 0
var blocksize
if(width>height){
leftoffset = (width-height)/2
blocksize = height/44
} else {
topoffset = (height-width)/2
blocksize = width/44
}
 
 
disableDDS(['/images/Attacker_icon.png?f5946','3 0','red'])
$('body').append('<div class="apr-invader" style="background:url(/images/thumb/Barbarian_Assault_Field.png/600px-Barbarian_Assault_Field.png?91094);background-size:cover;left:'+leftoffset+'px;top:'+topoffset+'px;width:'+(blocksize*44)+'px;height:'+(blocksize*44)+'px"/>')
 
var i,j
var enemyArray = []
var type = "healer"
for (i = 0; i < 4; i++) {
if(i==2){
type = "runner"
}
enemyArray[i]=[]
for (j = 0; j < 10; j++) {
enemyArray[i][j] = new InvaderEnemy(type,i,j)
}
}
var cannon = new Cannon()
var egg = new Egg()
 
var direction = 0
var nextDirection = 0
 
var currentj = 0
var currenti = 3
var kills = 0
 
var lastShot = 10
var gameEnabled = true
 
var gameTicks = 0
 
mainLoop();
 
}
 
var achievementTimeOut = 0
function displayAchievement(achievementref){
 
var achievementList = load('apr-achievementlist')
if(achievementref in achievementList){
return
}
if(achievementref != "FirstHit" && !("FirstHit" in achievementList)){
return
}
if(achievementsOpen && !(achievementref == "Total10Kill" || achievementref == "Total100Kill" || achievementref == "Total1000Kill" || achievementref == "Page5Kill" || achievementref == "Inception" || achievementref == "LoggedIn")){
return
}
 
var curTime = Date.now()
if(achievementTimeOut+5000<curTime){
achievementTimeOut = curTime
 
var achievement = achievements.get(achievementref)
achievementList[achievementref]=true;
save('apr-achievementlist',achievementList)
save('apr-gp',load('apr-gp')+achievement.points)
save('apr-gp-total',load('apr-gp-total')+achievement.points)
 
var toppx=52
if(window.chrome){
toppx=12
}
 
$('body').append("<div class='achievement-banner'>"+
"<div class='achievement-icon'>"+
"<span class='icon'><span class='icon-trophy'><img style='position:absolute;top:"+toppx+"px;left:-20px;width:40px;height:40px;' src='"+achievement.icon+"'</img></span></span>"+
"</div>"+
"<div class='achievement-text'>"+
"<p class='achievement-notification'>Achievement unlocked</p>"+
"<p class='achievement-name'>"+achievement.points+"k GP &ndash; "+achievement.name+"</p>"+
"</div>"+
"</div>")
if(achievementref == "FirstHit"){
achievementButton();
crab("FirstBlood");
}
if(achievementsOpen){
drawAchievementList()
drawAchievementList()
}
} else {
setTimeout(displayAchievement, 250, achievementref);
}
}
 
 
var achievementsOpen = false;
var pageTitle, pageBody;
var selectedTab;
function drawAchievementList(){
if(achievementsOpen){
achievementsOpen = false;
$('#' + selectedTab).addClass('selected');
$('#apr-achievement-button').removeClass('selected');
$('#firstHeading').text(pageTitle);
$('#bodyContent').remove();
$('#content').append(pageBody)
} else {
selectedTab = $('#p-namespaces ul > li.selected').attr('id');
 
achievementsOpen = true;
var achievementList = load('apr-achievementlist');
 
$('#' + selectedTab).removeClass('selected');
$('#apr-achievement-button').addClass('selected');
pageTitle = $('#firstHeading').text()
$('#firstHeading').text("Achievements");
$('#crob').remove();
pageBody = $('#bodyContent').detach();
$('#content').append('<div id="bodyContent" class="mw-body-content"></div>')
var body = $('#bodyContent')
 
var maxgp = load('apr-gp-total')
var curgp = load('apr-gp')
if(maxgp == 0){
maxgp = "0"
} else {
maxgp += ",000"
}
if(curgp == 0){
curgp = "0"
} else {
curgp += ",000"
}
 
body.append("<p>Welcome to the achievements tab! So far, you have obtained a total of <b><span class='maxgp'>"+maxgp+"<span> GP</b>! You have <b><span class='curgp'>"+curgp+"</span> GP</b> left to spend. You have <b>"+load('apr-totalkills')+" kills</b> in total.</p>")
 
var myweps = load('apr-weapon-inv')
 
if(myweps.length > 0){
body.append("<h2><span class='mw-headline'>Available cosmetic weapons</span></h2>")
var mywepsd = $('<div class="apr-weapon-big"/>')
body.append(mywepsd)
for (var i = 0; i < myweps.length; i++) {
var item = $("<div class='apr-weapon'><img src='"+getFileURL(myweps[i][0]+' cursor.png')+"'></div>")
item.click([i,myweps],function(e){
var i = e.data[0]
var myweps = e.data[1]
var curwep = load("apr-weapon")
save("apr-weapon",myweps[i])
setWeapon(myweps[i],true)
myweps[i] = curwep
save("apr-weapon-inv",myweps)
drawAchievementList()
drawAchievementList()
})
item.css("cursor","default")
mywepsd.append(item)
}
}
 
 
var buyweps = load('apr-weapon-buy')
 
if(buyweps.length > 0){
body.append("<h2><span class='mw-headline'>Cosmetic weapons for sale</span></h2><p>Buy any of the weapons for the listed price.</p>")
var buywepsd = $('<div class="apr-weapon-big" style="height:60px"/>')
body.append(buywepsd)
for (i = 0; i < buyweps.length; i++) {
var item2 = $("<div class='apr-weapon'><div class='apr-weapon-icon'><img src='"+getFileURL(buyweps[i][0][0]+' cursor.png')+"'></div><div class='apr-weapon-price'>"+buyweps[i][1]+"k</div></div>")
item2.click([i,buyweps],function(e){
var i = e.data[0];
var buyweps = e.data[1]
var curgp = load('apr-gp')
var price = buyweps[i][1]
if(curgp>=price){
var curwep = load("apr-weapon")
myweps.unshift(curwep)
save("apr-weapon-inv",myweps)
save("apr-weapon",buyweps[i][0])
setWeapon(buyweps[i][0],true)
buyweps.splice(i,1)
save("apr-weapon-buy",buyweps)
save("apr-gp",curgp-price)
drawAchievementList()
drawAchievementList()
} else {
crab("Poor",price)
}
})
item2.css("cursor","default")
buywepsd.append(item2)
}
}
 
body.append("<h2><span class='mw-headline'>Achievements list</span></h2>")
body.append('<div class="apr-achievement-container"></div>')
achievements.forEach(function(achievement,achievementref){
var icon
var achieved = ''
var filler = ''
if(achievementref in achievementList){
icon = getFileURL('Clippy_Achievement '+achievement.name+'.png');
achieved = 'achieved';
filler = achievement.filler;
} else {
icon = '/images/Clippy_Achievement_none.jpg?779d5'
}
$('.apr-achievement-container').append(
'<div class="apr-achievement '+achieved+'">'+
'<div class="apr-achievement-icon">'+
'<span class="hittable bumper spinny"><img src="'+icon+'"></span>'+
'</div>'+
'<div class="apr-achievement-text">'+
'<div class="apr-achievement-title">'+achievement.name+'</div>'+
'<div class="apr-achievement-desc">'+achievement.desc+'</div>'+
'<div class="apr-achievement-filler">'+filler+'</div>'+
'</div>'+
'<div class="apr-achievement-points">'+achievement.points+',000 GP</div>'+
'</div>')
})
}
}
 
function achievementButton(){
var achievementList = load('apr-achievementlist')
if('FirstHit' in achievementList){
$('#p-namespaces ul').append(
'<li id="apr-achievement-button">'+
'<span>'+
'<a'+
' href="javascript:void(0)"'+
' title="View your Achievements">'+
'Toggle Achievements'+
'</a>'+
'</span>'+
'</li>')
$('#apr-achievement-button').click(drawAchievementList);
}
}
 
function toggleApr(){
var gadgetEnabled = load("apr-gadgetenabled")
if(gadgetEnabled){
save("apr-gadgetenabled",false)
$('#apr-toggle-button > a').text("Enable cursor")
crab("DisableCursor")
} else {
save("apr-gadgetenabled",true)
$('#apr-toggle-button > a').text("Disable cursor")
crab("EnableCursor")
}
}
 
function enableDisableButton(){
var fillertext
if(load("apr-gadgetenabled")){
fillertext = "Disable cursor"
} else {
fillertext = "Enable cursor"
}
$('#t-gadget-newpage').after('<li id="apr-toggle-button"><a href="javascript:void(0)" title="Enable or disable the cursor">'+fillertext+'</a></li>')
$('#apr-toggle-button').click(toggleApr);
 
}
 
var achievements = new Map([
["FirstHit", {
"name": "First Blood",
"desc": "Attack something!",
"filler": 'A cold-blooded "accident".',
"points": 10,
}],
["Total10Kill", {
"name": "Amateur Killer",
"desc": "Kill 10 targets.",
"filler": "Does anyone got a runez scazmatar they dont need?",
"points": 10,
}],
["Total100Kill", {
"name": "Dedicated Killer",
"desc": "Kill 50 targets!",
"filler": "Level 50. Halfway to 99! You've unlocked the <a href='https://oldschool.runescape.wiki/w/Slaughterhouse'>slaughterhouse!</a>",
"points": 25,
}],
["Total1000Kill", {
"name": "Professional Killer",
"desc": "Kill 1,000 targets!! Trigger-happy much?",
"filler": "Grinding as hard as in actual OSRS. Congratulations!",
"points": 100,
}],
["Page5Kill", {
"name": "Serial Killer",
"desc": "Kill 5 targets on the same page.",
"filler": "Heads up! Enemy UAV spotted!",
"points": 25,
}],
["CerealKiller", {
"name": "Cereal Killer",
"desc": "Kill someone's breakfast.",
"filler": "Are you Sam-I-Am?",
"points": 25,
}],
["73", {
"name": "73 Re-enactment",
"desc": "Ahhhahahaha!",
"filler": "Never forget.",
"points": 73,
}],
["LightDark", {
"name": "Change of Heart",
"desc": "Kill in the Light and in the Dark.",
"filler": "Perfectly balanced. As all things should be.",
"points": 25,
}],
["GetBond", {
"name": "GET BOND",
"desc": "Get a bond.",
"filler": "Look out for future One Small Wiki Favour tasks!",
"points": 10,
}],
["HandBite", {
"name": "The Hand that Feeds",
"desc": "Test your blade on a blue-haired fairy.",
"filler": "Your heart, it is black and it's hollow and it's cold.",
"points": 10,
}],
["Inception", {
"name": "Inception",
"desc": "Achievement an achievement.",
"filler": "If you're going to perform inception, you need imagination.",
"points": 25,
}],
["Died", {
"name": "Lumbridge",
"desc": "Visit Lumbridge.",
"filler": "Oh... THAT kind of visit.",
"points": 10,
}],
["LoggedIn", {
"name": "The Wikian",
"desc": "Kill something while logged in.",
"filler": "🎶 People doing things, and editing things, and doing things. That's the wiki! 🎶",
"points": 50,
}],
["Wombat", {
"name": "WOMbat",
"desc": "?????",
"filler": "Batted away by the WOM!",
"points": 10,
}],
["Announce", {
"name": "An Important Announcement",
"desc": "Become an anti-RWT specialist.",
"filler": "Enjoy your lambo.",
"points": 25,
}],
["Uncle", {
"name": "Monkey's Uncle",
"desc": "Surprise a shopkeeper with a special weapon.",
"filler": "Seriously, you'll be a monkey's uncle before you'll ever hold this.",
"points": 25,
}],
["Trimmed", {
"name": "Trimmed",
"desc": "Trim your weapon.",
"filler": "Phr44 armour tr1mming!",
"points": 25,
}],
["Dishwasher", {
"name": "Dishwasher",
"desc": "Clean your dagger.",
"filler": "Needs more weapon poison.",
"points": 25,
}],
["Herbalist", {
"name": "Herbalist",
"desc": "Fix your dagger.",
"filler": "Needs less weapon poison.",
"points": 25,
}],
["Cucco", {
"name": "20 Hearts",
"desc": "Survive against 200 members of the Cucco's Revenge Squad.",
"filler": "It's dangerous to go alone! Take this!",
"points": 100,
}],
["Invaders", {
"name": "Torso Hunter",
"desc": "Get your first Fighter torso by killing a Penance creature as a Defender or Healer.",
"filler": "(1) Join Casual BA to hunt for Pet penance queen.<br>(2) Participate in Casual BA raids and plank like IgnobleSolid.<br>(3) ??? (4) Profit.",
"points": 50,
}],
["FireCape", {
"name": "Starter Cape",
"desc": "Get your first Fire Cape.",
"filler": "Gotta post your first fire cape to Reddit, as is tradition.",
"points": 100,
}],
["Slayer", {
"name": "Slayer Beginner",
"desc": "Complete a slayer assignment.",
"filler": "On the way to being a chad...",
"points": 50,
}],
["Slayer2", {
"name": "Slayer Master",
"desc": "Complete 2 slayer assignments.",
"filler": "*When Nieve finds out you have 99 Slayer*",
"points": 150,
}],
["OldWOM", {
"name": "Credits",
"desc": "Go Sailing with the Wise Old Man.",
"filler": "Thanks for playing! ~Gau Cho (gaucho#9471, u/gauchoob)",
"points": 10,
}],
])
 
function april(){
console.log("Bronze Dagger - v72 - by Gau Cho")
var gadgetEnabled = load("apr-gadgetenabled")
if(gadgetEnabled){
spinny();
 
crab();
 
var weapon = load("apr-weapon")
if(load("apr-queststate")>=500){
enableDDS(weapon);
} else {
disableDDS(weapon);
}
document.body.addEventListener('mousedown',mouseDown);
document.body.addEventListener('mousemove',mouseMove);
document.body.addEventListener('mouseup',mouseUp);
 
achievementButton();
}
enableDisableButton();
}
 
function waitForElement(){
if(typeof rswiki !== "undefined" && typeof rswiki.hasLocalStorage !== "undefined"){
april();
}
else{
setTimeout(waitForElement, 250);
}
}
waitForElement();